gettext

From Wikipedia, the free encyclopedia
  (Redirected from GNU gettext)
Jump to: navigation, search
gettext
Original author(s) Sun Microsystems
Developer(s) various
Initial release 1990; 26 years ago (1990)[1]
Repository various based on OpenSolaris and GNU gettext
Operating system Cross-platform
Type Internationalization and localization
License Various free software licenses
Website none

In computing, gettext is an internationalization and localization (i18n) system commonly used for writing multilingual programs on Unix-like computer operating systems. The most commonly used implementation of gettext is GNU gettext,[citation needed] released by the GNU Project in 1995.

History[edit]

gettext was originally written by Sun Microsystems in the early 1990s. The GNU Project released GNU gettext, a free software implementation of the system in 1995.[1]

Operation[edit]

Programming[edit]

Typical gettext workflow. The de.po instance on the left shows that no string translation was found, so the original string is passed through.

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

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

would become:

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

Comments (starting with ///) placed directly before strings thus marked are made available as hints to translators by helper programs.

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 POSIX catgets, AmigaOS GetString, or the use of LoadString under Microsoft Windows where a programmatic ID (often an integer) is used.

xgettext is run on the sources to produce a .pot (Portable Object Template) file, which contains a list of all the translatable strings extracted from the sources.

For example, an input file with a comment might look like:

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

xgettext is run using the command:

xgettext -c /

The resultant .pot file looks like this with the comment:

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

Translating[edit]

The translator derives a .po (Portable Object) file from the template using the msginit program, then fills out the translations.[2] msginit initializes the translations so, for instance, for a French language translation, the command to run would be:[3]

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

This will create fr.po. The translator then edits the resultant file, either by hand or with a translation tool like Poedit, or Emacs with its editing mode for .po files. An edited entry will look like:

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

Finally, the .po files are compiled with msgfmt into binary .mo (Machine Object) files. GNU gettext has its own file name extension: .gmo.[4] These are now ready for distribution with the software package.

Running[edit]

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

The user, on GNU variants, sets the environment variable LANGUAGE (LC_MESSAGES is also supported),[5] and the program will display strings in the selected language, if there is an .mo file for it.

Implementations[edit]

In addition to C, GNU gettext has the following implementations: C# for ASP.NET,[6][7] Scala,[8] and Node.js.[9]

See also[edit]

References[edit]

  1. ^ a b "History of gettext() et al? - comp.unix.solaris". Compgroups.net. Retrieved 2016-04-03. 
  2. ^ "GNU gettext utilities: PO Files". Gnu.org. Retrieved 2016-04-03. 
  3. ^ "How to Translate With GetText PO and POT Files". Icanlocalize.com. Retrieved 2016-04-03. 
  4. ^ "Files Conveying Translations". Gnu.org. Retrieved 2014-04-22. 
  5. ^ "GNU gettext utilities: Locale Environment Variables". Gnu.org. Retrieved 2016-04-03. 
  6. ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 2016-04-03. 
  7. ^ "turquoiseowl/i18n: Smart internationalization for ASP.NET". GitHub.com. Retrieved 2016-04-03. 
  8. ^ "makkarpov/scalingua: A simple gettext-like internationalization library for Scala". github.com. Retrieved 2016-04-28. 
  9. ^ "DanielBaulig/node-gettext: An adaption of Joshua I. Miller's Javascript Gettext library for node.js". GitHub.com. Retrieved 2016-04-03. 

External links[edit]