diff options
author | Daiki Ueno <ueno@gnu.org> | 2013-08-05 14:47:45 +0200 |
---|---|---|
committer | Daiki Ueno <ueno@gnu.org> | 2013-08-06 15:55:07 +0200 |
commit | 9a87e6aadd91994d11f1edb33caf0b786d79d86e (patch) | |
tree | ddc17e38a6550137692da2254d3b43f89400af55 /gettext-tools | |
parent | 534cd8f6a899a39c73d118e938ae3791003f4871 (diff) | |
download | external_gettext-9a87e6aadd91994d11f1edb33caf0b786d79d86e.zip external_gettext-9a87e6aadd91994d11f1edb33caf0b786d79d86e.tar.gz external_gettext-9a87e6aadd91994d11f1edb33caf0b786d79d86e.tar.bz2 |
xgettext: support GSettings schema file
Diffstat (limited to 'gettext-tools')
-rw-r--r-- | gettext-tools/doc/ChangeLog | 6 | ||||
-rw-r--r-- | gettext-tools/doc/gettext.texi | 24 | ||||
-rw-r--r-- | gettext-tools/doc/xgettext.texi | 6 | ||||
-rw-r--r-- | gettext-tools/src/ChangeLog | 14 | ||||
-rw-r--r-- | gettext-tools/src/FILES | 3 | ||||
-rw-r--r-- | gettext-tools/src/Makefile.am | 5 | ||||
-rw-r--r-- | gettext-tools/src/x-gsettings.c | 384 | ||||
-rw-r--r-- | gettext-tools/src/x-gsettings.h | 45 | ||||
-rw-r--r-- | gettext-tools/src/xgettext.c | 3 | ||||
-rw-r--r-- | gettext-tools/tests/ChangeLog | 6 | ||||
-rw-r--r-- | gettext-tools/tests/Makefile.am | 1 | ||||
-rw-r--r-- | gettext-tools/tests/xgettext-gsettings-1 | 93 |
12 files changed, 581 insertions, 9 deletions
diff --git a/gettext-tools/doc/ChangeLog b/gettext-tools/doc/ChangeLog index 3348adf..82f33e1 100644 --- a/gettext-tools/doc/ChangeLog +++ b/gettext-tools/doc/ChangeLog @@ -1,3 +1,9 @@ +2013-08-06 Daiki Ueno <ueno@gnu.org> + + xgettext: add support for GSettings schema file + * gettext.texi (GSettings): New subsection. + * xgettext.texi: Document GSettings source language. + 2013-06-10 Daiki Ueno <ueno@gnu.org> * Makefile.am: Use $(MKDIR_P) instead of $(mkdir_p). diff --git a/gettext-tools/doc/gettext.texi b/gettext-tools/doc/gettext.texi index e512870..cc25808 100644 --- a/gettext-tools/doc/gettext.texi +++ b/gettext-tools/doc/gettext.texi @@ -465,6 +465,7 @@ Internationalizable Data * POT:: POT - Portable Object Template * RST:: Resource String Table * Glade:: Glade - GNOME user interface description +* GSettings:: GSettings - GNOME user configuration schema Concluding Remarks @@ -4784,7 +4785,7 @@ Such highlighting is possible through the @code{msgcat} options * Customizing less:: Customizing @code{less} for viewing PO files @end menu -@node The --color option, The TERM variable, , Colorizing +@node The --color option, The TERM variable, Colorizing, Colorizing @subsection The @code{--color} option @opindex --color@r{, @code{msgcat} option} @@ -10975,7 +10976,7 @@ worst probably being its imperfectness. * Perl Pitfalls:: Bugs, Pitfalls, and Things That Do Not Work @end menu -@node General Problems, Default Keywords, , Perl +@node General Problems, Default Keywords, Perl, Perl @subsubsection General Problems Parsing Perl Code It is often heard that only Perl can parse Perl. This is not true. @@ -11901,7 +11902,7 @@ On platforms without gettext, the functions are not available. --- @end table -@node JavaScript +@node JavaScript, , Lua, List of Programming Languages @subsection JavaScript @table @asis @@ -12003,6 +12004,7 @@ using GNU gettext. * POT:: POT - Portable Object Template * RST:: Resource String Table * Glade:: Glade - GNOME user interface description +* GSettings:: GSettings - GNOME user configuration schema @end menu @node POT, RST, List of Data Formats, List of Data Formats @@ -12034,7 +12036,7 @@ fpk @code{xgettext}, @code{rstconv} @end table -@node Glade, , RST, List of Data Formats +@node Glade, GSettings, RST, List of Data Formats @subsection Glade - GNOME user interface description @table @asis @@ -12048,6 +12050,20 @@ glade, libglade, glade2, libglade2, intltool @code{xgettext}, @code{libglade-xgettext}, @code{xml-i18n-extract}, @code{intltool-extract} @end table +@node GSettings, , Glade, List of Data Formats +@subsection GSettings - GNOME user configuration schema + +@table @asis +@item RPMs +glib2 + +@item File extension +@code{gschema.xml} + +@item Extractor +@code{xgettext}, @code{intltool-extract} +@end table + @c This is the template for new data formats. @ignore diff --git a/gettext-tools/doc/xgettext.texi b/gettext-tools/doc/xgettext.texi index 83a6fa2..1089e9c 100644 --- a/gettext-tools/doc/xgettext.texi +++ b/gettext-tools/doc/xgettext.texi @@ -74,7 +74,7 @@ are @code{C}, @code{C++}, @code{ObjectiveC}, @code{PO}, @code{Shell}, @code{Smalltalk}, @code{Java}, @code{JavaProperties}, @code{C#}, @code{awk}, @code{YCP}, @code{Tcl}, @code{Perl}, @code{PHP}, @code{GCC-source}, @code{NXStringTable}, @code{RST}, @code{Glade}, @code{Lua}, @code{JavaScript}, -@code{Vala}. +@code{Vala}, @code{GSettings}. @item -C @itemx --c++ @@ -138,7 +138,7 @@ Extract all strings. This option has an effect with most languages, namely C, C++, ObjectiveC, Shell, Python, Lisp, EmacsLisp, librep, Java, C#, awk, Tcl, Perl, PHP, -GCC-source, Glade, Lua, JavaScript, Vala. +GCC-source, Glade, Lua, JavaScript, Vala, GSettings. @item -k[@var{keywordspec}] @itemx --keyword[=@var{keywordspec}] @@ -181,7 +181,7 @@ escaped. This option has an effect with most languages, namely C, C++, ObjectiveC, Shell, Python, Lisp, EmacsLisp, librep, Java, C#, awk, Tcl, Perl, PHP, -GCC-source, Glade, Lua, JavaScript, Vala. +GCC-source, Glade, Lua, JavaScript, Vala, GSettings. The default keyword specifications, which are always looked for if not explicitly disabled, are language dependent. They are: diff --git a/gettext-tools/src/ChangeLog b/gettext-tools/src/ChangeLog index 8541880..18a6c55 100644 --- a/gettext-tools/src/ChangeLog +++ b/gettext-tools/src/ChangeLog @@ -1,3 +1,17 @@ +2013-08-06 Daiki Ueno <ueno@gnu.org> + + xgettext: add support for GSettings schema file + * x-gsettings.h: New file. + * x-gsettings.c: New file. + * xgettext.c: Include x-gsettings.h. + (flag_table_vala): New variable. + (usage): Mention GSettings source language. + (language_to_extractor): Add GSettings rule. + (extension_to_language): Add GSettings rule. + * Makefile.am (noinst_HEADERS): Add x-gsettings.h. + (xgettext_SOURCES): Add x-gsettings.c. + * FILES: Update. + 2013-08-05 Daiki Ueno <ueno@gnu.org> * xgettext.c (main): Allow exntension with multiple diff --git a/gettext-tools/src/FILES b/gettext-tools/src/FILES index 5fa8c6e..1ea7fbf 100644 --- a/gettext-tools/src/FILES +++ b/gettext-tools/src/FILES @@ -345,6 +345,9 @@ msgl-check.c | x-vala.h | x-vala.c | String extractor for Vala. +| x-gsettings.h +| x-gsettings.c +| String extractor for GSettings schema file. | xgettext.c | Main source for the 'xgettext' program. | diff --git a/gettext-tools/src/Makefile.am b/gettext-tools/src/Makefile.am index 6a12287..e6713af 100644 --- a/gettext-tools/src/Makefile.am +++ b/gettext-tools/src/Makefile.am @@ -52,7 +52,7 @@ po-time.h plural-table.h lang-table.h format.h filters.h \ xgettext.h x-c.h x-po.h x-sh.h x-python.h x-lisp.h x-elisp.h x-librep.h \ x-scheme.h x-smalltalk.h x-java.h x-properties.h x-csharp.h x-awk.h x-ycp.h \ x-tcl.h x-perl.h x-php.h x-stringtable.h x-rst.h x-glade.h x-lua.h \ -x-javascript.h x-vala.h libexpat-compat.h +x-javascript.h x-vala.h x-gsettings.h libexpat-compat.h EXTRA_DIST += FILES project-id ChangeLog.0 @@ -177,7 +177,8 @@ endif xgettext_SOURCES += \ x-c.c x-po.c x-sh.c x-python.c x-lisp.c x-elisp.c x-librep.c x-scheme.c \ x-smalltalk.c x-java.c x-csharp.c x-awk.c x-ycp.c x-tcl.c x-perl.c x-php.c \ - x-rst.c x-glade.c x-lua.c x-javascript.c x-vala.c libexpat-compat.c + x-rst.c x-glade.c x-lua.c x-javascript.c x-vala.c x-gsettings.c \ + libexpat-compat.c if !WOE32DLL msgattrib_SOURCES = msgattrib.c else diff --git a/gettext-tools/src/x-gsettings.c b/gettext-tools/src/x-gsettings.c new file mode 100644 index 0000000..eac6d3d --- /dev/null +++ b/gettext-tools/src/x-gsettings.c @@ -0,0 +1,384 @@ +/* xgettext GSettings schema file backend. + Copyright (C) 2002-2003, 2005-2009, 2013 Free Software Foundation, Inc. + + This file was written by Daiki Ueno <ueno@gnu.org>, 2013. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +/* Specification. */ +#include "x-gsettings.h" + +#include <errno.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "message.h" +#include "xgettext.h" +#include "error.h" +#include "xerror.h" +#include "xvasprintf.h" +#include "basename.h" +#include "progname.h" +#include "xalloc.h" +#include "hash.h" +#include "po-charset.h" +#include "gettext.h" +#include "libexpat-compat.h" + +#define _(s) gettext(s) + + +/* GSettings schema file is an XML based format. + The syntax is defined in glib/gio/gschema.dtd and: + https://developer.gnome.org/gio/unstable/GSettings.html */ + + +/* ====================== Keyword set customization. ====================== */ + +/* If true extract all strings. */ +static bool extract_all = false; + + +/* ============================= XML parsing. ============================= */ + +#if DYNLOAD_LIBEXPAT || HAVE_LIBEXPAT + +/* Accumulator for the extracted messages. */ +static message_list_ty *mlp; + +/* Logical filename, used to label the extracted messages. */ +static char *logical_file_name; + +/* XML parser. */ +static XML_Parser parser; + +enum whitespace_type_ty +{ + none, + normalize, + strip +}; +typedef enum whitespace_type_ty whitespace_type_ty; + +struct element_state +{ + bool extract_string; + whitespace_type_ty whitespace; + char *extracted_context; + int lineno; + char *buffer; + size_t bufmax; + size_t buflen; +}; +static struct element_state *stack; +static size_t stack_size; + +static char * +normalize_whitespace (const char *text, whitespace_type_ty whitespace) +{ + if (whitespace == none) + return xstrdup (text); + else + { + char *result, *p; + + /* Strip whitespaces at the beginning/end of the text. */ + result = xstrdup (text + strspn (text, " \t\n")); + for (p = result + strlen (result); + p > result && (*p == '\0' || *p == ' ' || *p == '\t' || *p == '\n'); + p--) + ; + if (p > result) + *++p = '\0'; + + /* Normalize whitespaces within the text. */ + if (whitespace == normalize) + { + char *end = result + strlen (result); + for (p = result; *p != '\0';) + { + size_t len = strspn (p, " \t\n"); + if (len > 0) + { + *p = ' '; + memmove (p + 1, p + len, end - (p + len)); + end -= len - 1; + *end = '\0'; + p++; + } + p += strcspn (p, " \t\n"); + } + } + return result; + } +} + +/* Ensures stack_size >= size. */ +static void +ensure_stack_size (size_t size) +{ + if (size > stack_size) + { + stack_size = 2 * stack_size; + if (stack_size < size) + stack_size = size; + stack = + (struct element_state *) + xrealloc (stack, stack_size * sizeof (struct element_state)); + } +} + +static size_t stack_depth; + +/* Callback called when <element> is seen. */ +static void +start_element_handler (void *userData, const char *name, + const char **attributes) +{ + struct element_state *p; + + /* Increase stack depth. */ + stack_depth++; + ensure_stack_size (stack_depth + 1); + + /* Don't extract a string for the containing element. */ + stack[stack_depth - 1].extract_string = false; + + p = &stack[stack_depth]; + p->extract_string = extract_all; + p->extracted_context = NULL; + + if (!p->extract_string) + { + bool has_translatable = false; + whitespace_type_ty whitespace = none; + const char *extracted_context = NULL; + if (strcmp (name, "summary") == 0 || strcmp (name, "description") == 0) + { + has_translatable = true; + whitespace = normalize; + } + else if (strcmp (name, "default") == 0) + { + const char *extracted_l10n = NULL; + const char **attp = attributes; + while (*attp != NULL) + { + if (strcmp (attp[0], "context") == 0) + extracted_context = attp[1]; + else if (strcmp (attp[0], "l10n") == 0) + extracted_l10n = attp[1]; + attp += 2; + } + if (extracted_l10n != NULL) + { + has_translatable = true; + whitespace = strip; + } + } + p->extract_string = has_translatable; + p->whitespace = whitespace; + p->extracted_context = + (has_translatable && extracted_context != NULL + ? xstrdup (extracted_context) + : NULL); + } + + p->lineno = XML_GetCurrentLineNumber (parser); + p->buffer = NULL; + p->bufmax = 0; + p->buflen = 0; + if (!p->extract_string) + savable_comment_reset (); +} + +/* Callback called when </element> is seen. */ +static void +end_element_handler (void *userData, const char *name) +{ + struct element_state *p = &stack[stack_depth]; + + /* Actually extract string. */ + if (p->extract_string) + { + /* Don't extract the empty string. */ + if (p->buflen > 0) + { + lex_pos_ty pos; + + if (p->buflen == p->bufmax) + p->buffer = (char *) xrealloc (p->buffer, p->buflen + 1); + p->buffer[p->buflen] = '\0'; + + pos.file_name = logical_file_name; + pos.line_number = p->lineno; + + if (p->buffer != NULL) + { + remember_a_message (mlp, p->extracted_context, + normalize_whitespace (p->buffer, + p->whitespace), + null_context, &pos, + NULL, savable_comment); + p->extracted_context = NULL; + } + } + } + + /* Free memory for this stack level. */ + if (p->extracted_context != NULL) + free (p->extracted_context); + if (p->buffer != NULL) + free (p->buffer); + + /* Decrease stack depth. */ + stack_depth--; + + savable_comment_reset (); +} + +/* Callback called when some text is seen. */ +static void +character_data_handler (void *userData, const char *s, int len) +{ + struct element_state *p = &stack[stack_depth]; + + /* Accumulate character data. */ + if (len > 0) + { + if (p->buflen + len > p->bufmax) + { + p->bufmax = 2 * p->bufmax; + if (p->bufmax < p->buflen + len) + p->bufmax = p->buflen + len; + p->buffer = (char *) xrealloc (p->buffer, p->bufmax); + } + memcpy (p->buffer + p->buflen, s, len); + p->buflen += len; + } +} + +/* Callback called when some comment text is seen. */ +static void +comment_handler (void *userData, const char *data) +{ + /* Split multiline comment into lines, and remove leading and trailing + whitespace. */ + char *copy = xstrdup (data); + char *p; + char *q; + + for (p = copy; (q = strchr (p, '\n')) != NULL; p = q + 1) + { + while (p[0] == ' ' || p[0] == '\t') + p++; + while (q > p && (q[-1] == ' ' || q[-1] == '\t')) + q--; + *q = '\0'; + savable_comment_add (p); + } + q = p + strlen (p); + while (p[0] == ' ' || p[0] == '\t') + p++; + while (q > p && (q[-1] == ' ' || q[-1] == '\t')) + q--; + *q = '\0'; + savable_comment_add (p); + free (copy); +} + + +static void +do_extract_gsettings (FILE *fp, + const char *real_filename, const char *logical_filename, + msgdomain_list_ty *mdlp) +{ + mlp = mdlp->item[0]->messages; + + /* expat feeds us strings in UTF-8 encoding. */ + xgettext_current_source_encoding = po_charset_utf8; + + logical_file_name = xstrdup (logical_filename); + + parser = XML_ParserCreate (NULL); + if (parser == NULL) + error (EXIT_FAILURE, 0, _("memory exhausted")); + + XML_SetElementHandler (parser, start_element_handler, end_element_handler); + XML_SetCharacterDataHandler (parser, character_data_handler); + XML_SetCommentHandler (parser, comment_handler); + + stack_depth = 0; + + while (!feof (fp)) + { + char buf[4096]; + int count = fread (buf, 1, sizeof buf, fp); + + if (count == 0) + { + if (ferror (fp)) + error (EXIT_FAILURE, errno, _("\ +error while reading \"%s\""), real_filename); + /* EOF reached. */ + break; + } + + if (XML_Parse (parser, buf, count, 0) == 0) + error (EXIT_FAILURE, 0, _("%s:%lu:%lu: %s"), logical_filename, + (unsigned long) XML_GetCurrentLineNumber (parser), + (unsigned long) XML_GetCurrentColumnNumber (parser) + 1, + XML_ErrorString (XML_GetErrorCode (parser))); + } + + if (XML_Parse (parser, NULL, 0, 1) == 0) + error (EXIT_FAILURE, 0, _("%s:%lu:%lu: %s"), logical_filename, + (unsigned long) XML_GetCurrentLineNumber (parser), + (unsigned long) XML_GetCurrentColumnNumber (parser) + 1, + XML_ErrorString (XML_GetErrorCode (parser))); + + XML_ParserFree (parser); + + /* Close scanner. */ + logical_file_name = NULL; + parser = NULL; +} + +#endif + +void +extract_gsettings (FILE *fp, + const char *real_filename, const char *logical_filename, + flag_context_list_table_ty *flag_table, + msgdomain_list_ty *mdlp) +{ + if (LIBEXPAT_AVAILABLE ()) + do_extract_gsettings (fp, real_filename, logical_filename, mdlp); + else + { + multiline_error (xstrdup (""), + xasprintf (_("\ +Language \"gsettings\" is not supported. %s relies on expat.\n\ +This version was built without expat.\n"), + basename (program_name))); + exit (EXIT_FAILURE); + } +} diff --git a/gettext-tools/src/x-gsettings.h b/gettext-tools/src/x-gsettings.h new file mode 100644 index 0000000..073b418 --- /dev/null +++ b/gettext-tools/src/x-gsettings.h @@ -0,0 +1,45 @@ +/* xgettext GSettings schema file backend. + Copyright (C) 2002-2003, 2006, 2013 Free Software Foundation, Inc. + Written by Daiki Ueno <ueno@gnu.org>, 2013. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + + +#include <stdio.h> + +#include "message.h" +#include "xgettext.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +#define EXTENSIONS_GSETTINGS \ + { "gschema.xml", "gsettings" }, \ + +#define SCANNERS_GSETTINGS \ + { "gsettings", extract_gsettings, NULL, NULL, NULL }, \ + +/* Scan a gsettings XML file and add its translatable strings to mdlp. */ +extern void extract_gsettings (FILE *fp, const char *real_filename, + const char *logical_filename, + flag_context_list_table_ty *flag_table, + msgdomain_list_ty *mdlp); + + +#ifdef __cplusplus +} +#endif diff --git a/gettext-tools/src/xgettext.c b/gettext-tools/src/xgettext.c index 2c7f354..ffc4745 100644 --- a/gettext-tools/src/xgettext.c +++ b/gettext-tools/src/xgettext.c @@ -95,6 +95,7 @@ #include "x-lua.h" #include "x-javascript.h" #include "x-vala.h" +#include "x-gsettings.h" /* If nonzero add all comments immediately preceding one of the keywords. */ @@ -3233,6 +3234,7 @@ language_to_extractor (const char *name) SCANNERS_LUA SCANNERS_JAVASCRIPT SCANNERS_VALA + SCANNERS_GSETTINGS /* Here may follow more languages and their scanners: pike, etc... Make sure new scanners honor the --exclude-file option. */ }; @@ -3319,6 +3321,7 @@ extension_to_language (const char *extension) EXTENSIONS_LUA EXTENSIONS_JAVASCRIPT EXTENSIONS_VALA + EXTENSIONS_GSETTINGS /* Here may follow more file extensions... */ }; diff --git a/gettext-tools/tests/ChangeLog b/gettext-tools/tests/ChangeLog index 15eb4f4..1a0a5e5 100644 --- a/gettext-tools/tests/ChangeLog +++ b/gettext-tools/tests/ChangeLog @@ -1,3 +1,9 @@ +2013-08-06 Daiki Ueno <ueno@gnu.org> + + xgettext: add support for GSettings schema file + * Makefile.am (TESTS): Add xgettext-gsettings-1. + * xgettext-gsettings-1: New file. + 2013-07-25 Daiki Ueno <ueno@gnu.org> tests: allow each test to run individually without 'make' diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am index 4bd2f3e..c03c606 100644 --- a/gettext-tools/tests/Makefile.am +++ b/gettext-tools/tests/Makefile.am @@ -104,6 +104,7 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \ xgettext-javascript-1 xgettext-javascript-2 xgettext-javascript-3 \ xgettext-javascript-4 xgettext-javascript-5 \ xgettext-vala-1 \ + xgettext-gsettings-1 \ format-awk-1 format-awk-2 \ format-boost-1 format-boost-2 \ format-c-1 format-c-2 format-c-3 format-c-4 format-c-5 \ diff --git a/gettext-tools/tests/xgettext-gsettings-1 b/gettext-tools/tests/xgettext-gsettings-1 new file mode 100644 index 0000000..1e0d3b7 --- /dev/null +++ b/gettext-tools/tests/xgettext-gsettings-1 @@ -0,0 +1,93 @@ +#!/bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test of GSettings support. + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles xg-gs-1-empty.gschema.xml" +cat <<EOF > xg-gs-1-empty.gschema.xml +<?xml version="1.0"?> +<schemalist/> +EOF + +tmpfiles="$tmpfiles xg-gs-1.pot" +: ${XGETTEXT=xgettext} +${XGETTEXT} -o xg-gs-1.pot xg-gs-1-empty.gschema.xml 2>/dev/null +test $? = 0 || { + echo "Skipping test: xgettext was built without GSettings support" + rm -fr $tmpfiles; exit 77 +} + +tmpfiles="$tmpfiles xg-gs-1.gschema.xml" +cat <<EOF > xg-gs-1.gschema.xml +<?xml version="1.0"?> +<schemalist> + <schema id="org.gnome.example" path="/org/gnome/example/"> + <key name="foo" type="i"> + <default>0</default> + <summary context="Foo">Example Integer Key</summary> + <description> + The example integer key to test that the default value is not + translated. + </description> + </key> + <key name="bar" type="s"> + <default l10n="messages"> + ' foo bar baz' + </default> + </key> + <key name="baz" type="s"> + <summary context="Baz"></summary> + </key> + </schema> +</schemalist> +EOF + +tmpfiles="$tmpfiles xg-gs-1.pot" +: ${XGETTEXT=xgettext} +${XGETTEXT} --add-comments -o - xg-gs-1.gschema.xml | grep -v 'POT-Creation-Date' > xg-gs-1.pot +test $? = 0 || { rm -fr $tmpfiles; exit 1; } + +tmpfiles="$tmpfiles xg-gs-1.ok" +cat <<EOF > xg-gs-1.ok +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: xg-gs-1.gschema.xml:6 +msgid "Example Integer Key" +msgstr "" + +#: xg-gs-1.gschema.xml:7 +msgid "" +"The example integer key to test that the default value is not translated." +msgstr "" + +#: xg-gs-1.gschema.xml:13 +msgid "' foo bar baz'" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-gs-1.ok xg-gs-1.pot +result=$? + +rm -fr $tmpfiles + +exit $result |