This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)(Learn how and when to remove this template message)
|Original author(s)||Sun Microsystems|
0.20.1 / May 12, 2019
|Repository||various based on OpenSolaris and GNU gettext|
|Type||Internationalization and localization|
|License||Various free software licenses|
In computing, gettext is an internationalization and localization (i18n and l10n) system commonly used for writing multilingual programs on Unix-like computer operating systems. The most commonly used implementation of gettext is GNU gettext, released by the GNU Project in 1995.
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);
printf(_("My name is %s.\n"), my_name);
Comments (starting with
///) placed directly above 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
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 ""
The translator derives a
.po (Portable Object) file from the template using the
msginit program, then fills out the translations.
msginit initializes the translations so, for instance, for a French language translation, the command to run would be:
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. These are now ready for distribution with the software package.
|Wikimedia Commons has media related to GNU gettext.|
- "History of gettext() et al? - comp.unix.solaris". Compgroups.net. Retrieved 3 April 2016.
- "About catgets". gnu.org. Retrieved 24 October 2017.
- "GNU gettext utilities: PO Files". Gnu.org. Retrieved 3 April 2016.
- "How to Translate With GetText PO and POT Files". Icanlocalize.com. Retrieved 3 April 2016.
- "Files Conveying Translations". Gnu.org. Retrieved 22 April 2014.
- "GNU gettext utilities: Locale Environment Variables". Gnu.org. Retrieved 3 April 2016.
- "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 3 April 2016.
- "turquoiseowl/i18n: Smart internationalization for ASP.NET". GitHub.com. Retrieved 3 April 2016.
- "NGettext.Wpf - Proper internationalization support for WPF (via NGettext)".
- "libintl-perl - An Internationalization Library for Perl That Aims To Be Compatible With the Uniforum Message Translations System as Implemented For Example in GNU Gettext". github.com. Retrieved 14 September 2017.
- "Gettext". php.net. Retrieved 24 October 2017.
- "gettext — Multilingual internationalization services — Python 3.7.0 documentation". docs.python.org. Retrieved 21 September 2018.
- "makkarpov/scalingua: A simple gettext-like internationalization library for Scala". github.com. Retrieved 28 April 2016.