gettext is the GNU internationalization (i18n) library. It is commonly used for writing multilingual programs. The latest version is 0.14.5.
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, 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 ""
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.
GNU gettext | Gettext | Gettext | Gettext | GNU gettext