After you have modified your program sources, the xgettext utility allows you to extract the translatable strings into a “portable object template” (POT) file. This file becomes the template for your various translation files. For example, after filling in the relevant information regarding your package (in blue), you would copy the POT file to “de.po” to use for the German translation. The “PO” extension indicates that the database is in a portable, human-readable format.
Although the GNU glibc internationalization library allows you to use any number of valid ISO and other national encoding standards, to ensure that your translation files are truly portable and readable by everyone, I highly recommend that you always use UTF-8 as the encoding format. Major Linux distributions like Novell/SuSE and Redhat are already using UTF-8 locales by default in almost all cases, and therefore you should too.
The translation database itself simply consists of a series of key-value pairs, where the msgid in English is the key, and the msgstr in the target language (German in this case) is the value for that key.
In the third part of this talk we will take a look at KBabel which gives you a graphical environment for editing and managing PO translation files.