Gettext

From Wikipedia, the free encyclopedia

The correct title of this article is gettext. The initial letter is shown capitalized due to technical restrictions.

gettext is the GNU internationalization (i18n) library. It is commonly used for writing multilingual programs. The latest version is 0.16.

Contents

Source code is first modified to use the GNU gettext calls. This is, for most programming languages, done by wrapping strings that the user will see in the gettext function. To save on typing time, and to reduce code clutter, this function is usually aliased to _, so that the C code

printf("My name is %s.\n", my_name);

would become

printf(_("My name is %s.\n"), my_name);

gettext then uses the supplied strings as keys for looking up alternative translations, and will return the original string when no translation is available. This is in contrast to systems like catgets or the use of LoadString under Microsoft Windows where a programmatic ID (often an integer) is used.

In addition to C, GNU gettext has the following implementations: C++, Objective-C, sh script, bash script, Python, GNU CLISP, Emacs Lisp, librep, GNU Smalltalk, Java, GNU awk, Pascal, wxWidgets (through the wxLocale class), YCP (the YaST2 language), Tcl, Perl, PHP, Pike, Ruby, and R. Usage is similar to C for most of these.

xgettext is run on the sources to produce a .pot file, or template, which contains a list of all the translatable strings extracted from the sources. For the above, an entry in the .pot file would look like:

#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""

If the developer wants to give the translator a hint for a specific string, he can do it in the source with a TAG. This TAG is for xgettext to filter those hints and put them in the pot-file. The hints were displayed by Kbabel and poEdit.

printf(_("My name is %s.\n"), my_name);
// TRANSLATORS: Please let %s as it is, because it is exchanged by the program.
// Thank you for contributing to this project. 

In this example the TAG is // and has to be given to xgettext when building the .pot template file to be able to extract the comments for the translators. This TAG can be every other char as well, as long as you use it consistently in all your source.

xgettext -c=//

The .pot file looks like this with the comment:

#. TRANSLATORS: Please let %s as it is, because it is exchanged by the program.
#. Thank you for contributing to this project. 
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""

The translator derives a .po file from the template using the msginit program, then fills out the translations. msginit initializes the translations so, for instance, if we wish to create a French language translation, we'd run

msginit --locale=fr --input=name.pot

This will create fr.po. A sample entry would look like

#: src/name.c:36
msgid "My name is %s.\n"
msgstr "My name is %s.\n"

The translator will have to edit these, either by hand or with a translation tool like poEdit. When they are done, the entry will look like this:

#: src/name.c:36
msgid "My name is %s.\n"
msgstr "Je m'appelle %s.\n"

Finally, the .po files are compiled into binary .mo files with msgfmt. These are now ready for distribution with the software package.

The user, on Unix-type systems, sets the environment variable LANG, and the program will display strings in the selected language, if there is a .mo file for it.

Advanced Search
Included Web Search Engines


Safe Search

close

Top Matching Results

Occasionally Search.com will highlight specialized results that are based on the context of your query. Examples of specialized results include specific links to news, images, or video.

Top Matching Results may highlight information from other Search.com pages, content from the CNET Network of sites, or third party content. The listings are based purely on relevance. Search.com does not receive payment for listings in this section but our partners that provide this data may get paid for listing these products.

Sponsored Links

This section contains paid listings which have been purchased by companies that want to have their sites appear for specific search terms and related content. These listings are administered, sorted and maintained by a third party and are not endorsed by Search.com.

Search Results

Search.com sends your search query to several search engines at one time and integrates the results into one list which has been sorted by relevance using Search.com's proprietary algorithm. You can customize the list of search engines included in your metasearch from the preferences.

The search engines that are used in your metasearch may allow companies to pay to have their Web sites included within the results. To view the Paid Inclusion policy for a specific search engine, please visit their Web site. Search.com does not accept payment or share revenue with any search engine partner for listings in this section.