[libvirt] [PATCH glib 2/2] Add framework for i18n of error message strings

Daniel P. Berrange berrange at redhat.com
Mon Apr 8 12:54:21 UTC 2013


From: "Daniel P. Berrange" <berrange at redhat.com>

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 .gitignore                                   |  7 +++++
 Makefile.am                                  |  2 +-
 autogen.sh                                   | 28 ++++++------------
 configure.ac                                 |  7 +++++
 libvirt-gconfig/libvirt-gconfig-helpers.c    |  7 +++--
 libvirt-gconfig/libvirt-gconfig-object.c     | 11 +++----
 libvirt-gobject/libvirt-gobject-connection.c | 44 +++++++++++++++-------------
 libvirt-gobject/libvirt-gobject-stream.c     | 14 +++++----
 po/POTFILES.in                               |  4 +++
 9 files changed, 69 insertions(+), 55 deletions(-)
 create mode 100644 po/POTFILES.in

diff --git a/.gitignore b/.gitignore
index 8101dec..df520a1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -72,4 +72,11 @@ docs/*/*.types
 *.pc
 libvirt-gconfig/tests/test-domain-create
 libvirt-gconfig/tests/test-domain-parse
+.tx/
+po/Makefile
+po/Makefile.in
+po/Makefile.in.in
+po/POTFILES
+po/libvirt-glib.pot
+po/stamp-it
 vapi/*.vapi
diff --git a/Makefile.am b/Makefile.am
index 37d1a09..9add74e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
 
-SUBDIRS = libvirt-glib libvirt-gconfig libvirt-gobject python vapi examples docs
+SUBDIRS = libvirt-glib libvirt-gconfig libvirt-gobject python vapi examples docs po
 
 ACLOCAL_AMFLAGS = -I m4
 
diff --git a/autogen.sh b/autogen.sh
index 553c3ef..bcec826 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -10,38 +10,28 @@ cd $srcdir
 
 DIE=0
 
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+for prog in intltoolize autoreconf automake autoconf libtool
+do
+    ($prog --version) < /dev/null > /dev/null 2>&1 || {
         echo
-        echo "You must have autoconf installed to compile virt-viewer."
-        echo "Download the appropriate package for your distribution,"
-        echo "or see http://www.gnu.org/software/autoconf"
+        echo "You must have $prog installed to compile libvirt-glib."
         DIE=1
-}
-
-(automake --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        DIE=1
-        echo "You must have automake installed to compile virt-viewer."
-        echo "Download the appropriate package for your distribution,"
-        echo "or see http://www.gnu.org/software/automake"
-}
+    }
+done
 
 if test "$DIE" -eq 1; then
         exit 1
 fi
 
 if test -z "$*"; then
-        echo "I am going to run ./configure with --enable-warnings - if you "
+        echo "I am going to run ./configure with no args - if you "
         echo "wish to pass any extra arguments to it, please specify them on "
         echo "the $0 command line."
 fi
 
 mkdir -p build-aux
-libtoolize --copy --force
-aclocal -I m4
-autoheader
-automake --add-missing
-autoconf
+intltoolize --force
+autoreconf -if
 
 cd $THEDIR
 
diff --git a/configure.ac b/configure.ac
index 7b5a092..6314a7b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -60,6 +60,12 @@ PKG_CHECK_MODULES(GOBJECT2, gobject-2.0 >= $GLIB2_REQUIRED)
 PKG_CHECK_MODULES(GIO2, gio-2.0 >= $GLIB2_REQUIRED)
 PKG_CHECK_MODULES(LIBXML2, libxml-2.0 >= $LIBXML2_REQUIRED)
 
+LIBVIRT_GLIB_GETTEXT
+dnl Should be in m4/virt-gettext.m4 but intltoolize is too
+dnl dumb to find it there
+IT_PROG_INTLTOOL([0.35.0])
+
+
 GTK_DOC_CHECK([1.10],[--flavour no-tmpl])
 
 # Setup GLIB_MKENUMS to use glib-mkenums even if GLib is uninstalled.
@@ -262,6 +268,7 @@ AC_OUTPUT(Makefile
           docs/libvirt-glib/version.xml
           docs/libvirt-gobject/Makefile
           docs/libvirt-gconfig/Makefile
+          po/Makefile.in
           libvirt-glib-1.0.pc
           libvirt-gconfig-1.0.pc
           libvirt-gobject-1.0.pc
diff --git a/libvirt-gconfig/libvirt-gconfig-helpers.c b/libvirt-gconfig/libvirt-gconfig-helpers.c
index 9726dd4..4dfd246 100644
--- a/libvirt-gconfig/libvirt-gconfig-helpers.c
+++ b/libvirt-gconfig/libvirt-gconfig-helpers.c
@@ -26,6 +26,7 @@
 #include <string.h>
 
 #include <libxml/xmlerror.h>
+#include <glib/gi18n.h>
 
 #include "libvirt-gconfig/libvirt-gconfig.h"
 #include "libvirt-gconfig/libvirt-gconfig-helpers-private.h"
@@ -137,7 +138,7 @@ gvir_config_xml_parse(const char *xml, const char *root_node, GError **err)
         *err = g_error_new(GVIR_CONFIG_OBJECT_ERROR,
                            0,
                            "%s",
-                           "No XML document to parse");
+                           _("No XML document to parse"));
         return NULL;
     }
 
@@ -145,7 +146,7 @@ gvir_config_xml_parse(const char *xml, const char *root_node, GError **err)
     if (!doc) {
         gvir_config_set_error_literal(err, GVIR_CONFIG_OBJECT_ERROR,
                                       0,
-                                      "Unable to parse configuration");
+                                      _("Unable to parse configuration"));
         return NULL;
     }
     if ((!doc->children) ||
@@ -153,7 +154,7 @@ gvir_config_xml_parse(const char *xml, const char *root_node, GError **err)
         g_set_error(err,
                     GVIR_CONFIG_OBJECT_ERROR,
                     0,
-                    "XML data has no '%s' node",
+                    _("XML data has no '%s' node"),
                     root_node);
         xmlFreeDoc(doc);
         return NULL;
diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c
index c3228c8..d8ca520 100644
--- a/libvirt-gconfig/libvirt-gconfig-object.c
+++ b/libvirt-gconfig/libvirt-gconfig-object.c
@@ -26,6 +26,7 @@
 #include <string.h>
 
 #include <libxml/relaxng.h>
+#include <glib/gi18n.h>
 
 #include "libvirt-gconfig/libvirt-gconfig.h"
 #include "libvirt-gconfig/libvirt-gconfig-private.h"
@@ -208,7 +209,7 @@ void gvir_config_object_validate(GVirConfigObject *config,
         gvir_config_set_error_literal(err,
                                       GVIR_CONFIG_OBJECT_ERROR,
                                       0,
-                                      "No XML document associated with this config object");
+                                      _("No XML document associated with this config object"));
         return;
     }
 
@@ -217,7 +218,7 @@ void gvir_config_object_validate(GVirConfigObject *config,
         gvir_config_set_error(err,
                               GVIR_CONFIG_OBJECT_ERROR,
                               0,
-                              "Unable to create RNG parser for %s",
+                              _("Unable to create RNG parser for %s"),
                               priv->schema);
         return;
     }
@@ -227,7 +228,7 @@ void gvir_config_object_validate(GVirConfigObject *config,
         gvir_config_set_error(err,
                               GVIR_CONFIG_OBJECT_ERROR,
                               0,
-                              "Unable to parse RNG %s",
+                              _("Unable to parse RNG %s"),
                               priv->schema);
         xmlRelaxNGFreeParserCtxt(rngParser);
         return;
@@ -239,7 +240,7 @@ void gvir_config_object_validate(GVirConfigObject *config,
         gvir_config_set_error(err,
                               GVIR_CONFIG_OBJECT_ERROR,
                               0,
-                              "Unable to create RNG validation context %s",
+                              _("Unable to create RNG validation context %s"),
                               priv->schema);
         xmlRelaxNGFree(rng);
         return;
@@ -249,7 +250,7 @@ void gvir_config_object_validate(GVirConfigObject *config,
         gvir_config_set_error_literal(err,
                                       GVIR_CONFIG_OBJECT_ERROR,
                                       0,
-                                      "Unable to validate doc");
+                                      _("Unable to validate doc"));
         xmlRelaxNGFreeValidCtxt(rngValid);
         xmlRelaxNGFree(rng);
         return;
diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject/libvirt-gobject-connection.c
index ecf7cb2..a05b5a0 100644
--- a/libvirt-gobject/libvirt-gobject-connection.c
+++ b/libvirt-gobject/libvirt-gobject-connection.c
@@ -26,6 +26,8 @@
 #include <libvirt/libvirt.h>
 #include <string.h>
 
+#include <glib/gi18n.h>
+
 #include "libvirt-glib/libvirt-glib.h"
 #include "libvirt-gobject/libvirt-gobject.h"
 #include "libvirt-gobject-compat.h"
@@ -429,7 +431,7 @@ static gboolean _gvir_connection_open(GVirConnection *conn,
     if (priv->conn) {
         g_set_error(err, GVIR_CONNECTION_ERROR,
                     0,
-                    "Connection %s is already open",
+                    _("Connection %s is already open"),
                     priv->uri);
         g_mutex_unlock(priv->lock);
         return FALSE;
@@ -444,7 +446,7 @@ static gboolean _gvir_connection_open(GVirConnection *conn,
     if (!priv->conn) {
         gvir_set_error(err, GVIR_CONNECTION_ERROR,
                        0,
-                       "Unable to open %s",
+                       _("Unable to open %s"),
                        priv->uri);
         g_mutex_unlock(priv->lock);
         return FALSE;
@@ -454,8 +456,8 @@ static gboolean _gvir_connection_open(GVirConnection *conn,
         char *uri = virConnectGetURI(priv->conn);
         if (!uri) {
             gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
-                           0,
-                           "Unable to get connection URI");
+                                   0,
+                                   _("Unable to get connection URI"));
             virConnectClose(priv->conn);
             priv->conn = NULL;
             g_mutex_unlock(priv->lock);
@@ -696,7 +698,7 @@ static gchar ** fetch_list(virConnectPtr vconn,
     if ((n = count_func(vconn)) < 0) {
         gvir_set_error(err, GVIR_CONNECTION_ERROR,
                        0,
-                       "Unable to count %s", name);
+                       _("Unable to count %s"), name);
         goto error;
     }
 
@@ -708,7 +710,7 @@ static gchar ** fetch_list(virConnectPtr vconn,
         if ((n = list_func(vconn, lst, n)) < 0) {
             gvir_set_error(err, GVIR_CONNECTION_ERROR,
                            0,
-                           "Unable to list %s %d", name, n);
+                           _("Unable to list %s %d"), name, n);
             goto error;
         }
     }
@@ -755,7 +757,7 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
     if (!priv->conn) {
         g_set_error_literal(err, GVIR_CONNECTION_ERROR,
                             0,
-                            "Connection is not open");
+                            _("Connection is not open"));
         g_mutex_unlock(priv->lock);
         goto cleanup;
     }
@@ -770,7 +772,7 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
     if ((nactive = virConnectNumOfDomains(vconn)) < 0) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                0,
-                               "Unable to count domains");
+                               _("Unable to count domains"));
         goto cleanup;
     }
     if (nactive) {
@@ -781,7 +783,7 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
         if ((nactive = virConnectListDomains(vconn, active, nactive)) < 0) {
             gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                    0,
-                                   "Unable to list domains");
+                                   _("Unable to list domains"));
             goto cleanup;
         }
     }
@@ -892,7 +894,7 @@ gboolean gvir_connection_fetch_storage_pools(GVirConnection *conn,
     if (!priv->conn) {
         g_set_error_literal(err, GVIR_CONNECTION_ERROR,
                             0,
-                            "Connection is not open");
+                            _("Connection is not open"));
         g_mutex_unlock(priv->lock);
         goto cleanup;
     }
@@ -1155,14 +1157,14 @@ gvir_connection_get_hypervisor_name(GVirConnection *conn,
     priv = conn->priv;
     if (!priv->conn) {
         g_set_error_literal(err, GVIR_CONNECTION_ERROR, 0,
-                            "Connection is not opened");
+                            _("Connection is not opened"));
         goto cleanup;
     }
 
     type = virConnectGetType(priv->conn);
     if (!type) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR, 0,
-                               "Unable to get hypervisor name");
+                               _("Unable to get hypervisor name"));
         goto cleanup;
     }
 
@@ -1194,13 +1196,13 @@ gvir_connection_get_version(GVirConnection *conn,
     priv = conn->priv;
     if (!priv->conn) {
         g_set_error_literal(err, GVIR_CONNECTION_ERROR, 0,
-                            "Connection is not opened");
+                            _("Connection is not opened"));
         goto cleanup;
     }
 
     if (virConnectGetVersion(priv->conn, &ret) < 0) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR, 0,
-                               "Unable to get hypervisor version");
+                               _("Unable to get hypervisor version"));
     }
 
 cleanup:
@@ -1515,7 +1517,7 @@ GVirDomain *gvir_connection_create_domain(GVirConnection *conn,
     if (!handle) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                0,
-                               "Failed to create domain");
+                               _("Failed to create domain"));
         return NULL;
     }
 
@@ -1570,7 +1572,7 @@ GVirDomain *gvir_connection_start_domain(GVirConnection *conn,
     if (!handle) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                0,
-                               "Failed to create domain");
+                               _("Failed to create domain"));
         return NULL;
     }
 
@@ -1622,7 +1624,7 @@ GVirStoragePool *gvir_connection_create_storage_pool
     if (!(handle = virStoragePoolDefineXML(priv->conn, xml, flags))) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                flags,
-                               "Failed to create storage pool");
+                               _("Failed to create storage pool"));
         return NULL;
     }
 
@@ -1665,7 +1667,7 @@ GVirNodeInfo *gvir_connection_get_node_info(GVirConnection *conn,
     if (virNodeGetInfo(priv->conn, &info) < 0) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                0,
-                               "Unable to get node info");
+                               _("Unable to get node info"));
         return NULL;
     }
 
@@ -1705,7 +1707,7 @@ GVirConfigCapabilities *gvir_connection_get_capabilities(GVirConnection *conn,
     if (caps_xml == NULL) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
                                0,
-                               "Unable to get capabilities");
+                               _("Unable to get capabilities"));
         return NULL;
     }
 
@@ -1832,8 +1834,8 @@ gboolean gvir_connection_restore_domain_from_file(GVirConnection *conn,
 
     if (ret < 0) {
         gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
-                              0,
-                              "Unable to restore domain");
+                               0,
+                               _("Unable to restore domain"));
 
        return FALSE;
     }
diff --git a/libvirt-gobject/libvirt-gobject-stream.c b/libvirt-gobject/libvirt-gobject-stream.c
index a75769e..af9b8a0 100644
--- a/libvirt-gobject/libvirt-gobject-stream.c
+++ b/libvirt-gobject/libvirt-gobject-stream.c
@@ -27,6 +27,8 @@
 #include <libvirt/virterror.h>
 #include <string.h>
 
+#include <glib/gi18n.h>
+
 #include "libvirt-glib/libvirt-glib.h"
 #include "libvirt-gobject/libvirt-gobject.h"
 #include "libvirt-gobject-compat.h"
@@ -320,10 +322,10 @@ gssize gvir_stream_receive(GVirStream *self,
 
     if (got == -2) {  /* blocking */
         g_set_error_literal(error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK,
-                            "virStreamRecv call would block");
+                            _("virStreamRecv call would block"));
     } else if (got < 0) {
         g_set_error(error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
-                    "Got virStreamRecv error in %s", G_STRFUNC);
+                    _("Got virStreamRecv error in %s"), G_STRFUNC);
     }
 
     return got;
@@ -388,7 +390,7 @@ gvir_stream_receive_all(GVirStream *self,
     if (r < 0) {
         gvir_set_error_literal(error, GVIR_STREAM_ERROR,
                                0,
-                               "Unable to perform RecvAll");
+                               _("Unable to perform RecvAll"));
     }
 
     return r;
@@ -436,10 +438,10 @@ gssize gvir_stream_send(GVirStream *self,
 
     if (got == -2) {  /* blocking */
         g_set_error_literal(error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK,
-                            "virStreamSend call would block");
+                            _("virStreamSend call would block"));
     } else if (got < 0) {
         g_set_error(error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
-                    "Got virStreamRecv error in %s", G_STRFUNC);
+                    _("Got virStreamRecv error in %s"), G_STRFUNC);
     }
 
     return got;
@@ -504,7 +506,7 @@ gvir_stream_send_all(GVirStream *self,
     if (r < 0) {
         gvir_set_error_literal(error, GVIR_STREAM_ERROR,
                                0,
-                               "Unable to perform SendAll");
+                               _("Unable to perform SendAll"));
     }
 
     return r;
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..335ec67
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,4 @@
+libvirt-gconfig/libvirt-gconfig-helpers.c
+libvirt-gconfig/libvirt-gconfig-object.c
+libvirt-gobject/libvirt-gobject-connection.c
+libvirt-gobject/libvirt-gobject-stream.c
-- 
1.8.1.4




More information about the libvir-list mailing list