Page updated May 12, 2013

Internationalization of applications and scripts in Puppy Linux has become extremely easy, with MoManager, a GUI application.

## Applications written in BaCon

BaCon is a BASIC compiler, one of our officially supported languages for Puppy development. Internationalization is supported by the compiler, as explained here:

http://bkhome.org/bacon/international.htm

There are at least two applications that you will find in every recent Puppy that are written in BaCon and have internationalization support:

- /usr/sbin/welcome1stboot
- /usr/local/simple_network_setup/proxy-setup

If you have the 'devx' SFS loaded, then these will also be present:

- /usr/sbin/welcome1stboot.bac
- /usr/sbin/welcome1stboot.pupdev
- /usr/share/doc/nls/welcome1stboot/welcome1stboot.pot
- /usr/local/simple_network_setup/proxy-setup.bac
- /usr/local/simple_network_setup/proxy-setup.pupdev
- /usr/share/doc/nls/proxy-setup/proxy-setup.pot

The .bac file is the BaCon source code. The .pot file is the language translation file. The .pupdev file is just a text file which has instructions on how to compile and create a .pot language translation file, plus any other developer notes. The .pupdev is optional, not necessarily always in the 'devx' -- but if you read one of the .pupdev files it should show you how to create a .pot language translation file for any other BaCon application.

When you compile a BaCon application, place the .pot file into /usr/share/doc/nls, as per the above examples. This could be in a PET package of your application. MoManager searches this path for .pot files to be translated.

Actually, the same thing holds for any application, written in C, Vala, Genie, or whatever, place the .pot file into /usr/share/doc/nls/<domainname>/<domainname>.pot and MoManager will use it.

## Scripts internationalized with 'gettext'

There are a lot of scripts in Puppy that use 'gettext' for translating. Here are some in /usr/sbin:

- alsaconf
- connectwizard
- hostname-set
- keymap-set
- mousecheck
- quicksetup
- shutdownconfig

Inside each script you will find a line like this: `export TEXTDOMAIN=myapp` MoManager finds all scripts with this entry, which confirms that it uses 'gettext', and offers a GUI interface for translating each script. You do not have to learn the commandline tools for translating, the GUI interface makes it easy.

Basically, MoManager will create a .pot file for the application, in the above example that will be 'myapp.pot'. Note that multiple scripts can have the same domainname 'myapp' and just the one 'myapp.pot' will be created. So, if your application has several scripts, you don't have to have a .pot for each (but you can if you want), just have the one .pot -- this is more efficient if there are common text strings to be translated in the scripts, and is simpler just to have the one .pot file.

One technical detail: please place the "export ..." at column one, and do not place quotes around "myapp", the line in the script should look just like I have shown: `export TEXTDOMAIN=myapp` .pot files are "translation files", which you then have to insert the translations for a particular language. When that is done, it becomes a .po file, and it is then compiled to a binary form and becomes a .mo file. The compiled .mo files are kept at /usr/share/locale. MoManager handles these conversions for you.

### Pre-existing .pot files

MoManager will create a .pot file from the script, however the commandline-tool (xgettext) to extract the text strings from the script and create the .pot file does not always work properly. An example is /usr/sbin/alsaconf -- in this case, we have a pre-existing .pot file, /usr/share/doc/nls/alsaconf/alsaconf.pot.

MoManager will automatically use any pre-existing .pot file that it finds in /usr/share/doc/nls, rather than use xgettext to extract the strings from the script(s).

## MoManager translation manager

MoManager is a GUI application written by me (Barry Kauler) that makes it very easy for anyone to create non-English translations for applications in Puppy. You must have a Puppy built from a Woof version later than February 14, 2012, however if you want to use MoManager to create a "langpack" for a particular language it is recommended to use the very latest Puppy built from latest Woof -- see my blog (http://bkhome.org/blog2) for announcements of Puppy builds.

MoManager is for creating and updating translation files for scripts, XML files, menu files, any other data text files, and binary executables.

Scripts are applications that are text files, usually written in Bash or Ash (or Perl, Python, Tcl, etc.). Note, if you are unfamiliar with 'scripts', don't worry, they are just applications.

To use MoManager, the best thing to do is just go ahead and use it. You will find it in the 'Utility' menu. Once started, you will see two columns of drop-down lists, one list is of files that already have a translation file for your language (on left side), the other list is for files that do not yet have a translation file. if you select a file from the formerlist, you may update the translation, and in the latter case you may create a new translation file.

Here is a snapshot of the main window, Puppy running with de_DE locale:

### Scripts

In the case of updating an existing translation file, MoManager automatically synchronises with the latest script, and will identify any changed strings -- if you see the text "fuzzy" anywhere in the translation file, it is likely that the original English text has changed and you will need to update the translation.

A translation file for a script means that when the application runs, it will output all text in your language. By creating translation files for all the scripts, you can help to create a Puppy that runs nicely in your language.

Although it is probably possible to figure out how to edit a translation file, known as a 'po' file in it's editable form, or 'mo' file in it's compiled form, it is helpful to readup a bit on the topic. I suggest:

- http://translate.sourceforge.net/wiki/guide/project/howto
- http://www.gnu.org/software/gettext/manual/html_node/gettext_9.html#PO-Files

...note though, reading all of that can be confusing! It is possible to use MoManager without understanding all of those details. MoManager uses a normal text editor to edit .po files rather than a specialized po-editor (such as poedit) and this is quite easy to do, you just need a very basic understanding of the format of .po files.

### poedit

This is a special text editor for .po files. Although MoManager uses the default text editor (usually Geany in most puppies), if poedit is installed then MoManager can use it -- you will see a checkbox in the main window of MoManager to choose poedit.

To install poedit, look in the Puppy Package Manager. Most builds of Puppy will have it available.

### Langpack

You will also see in the MoManager window, a button to generate a "langpack" PET package. if you would like to translate Puppy for a particular language, this button is very nice. It will gather up all the translations for your language and put them into a PET package, which you can then send to me, and I can place it along with the others at ibiblio.org. See the existing "langpacks" at ibiblio.org, named "langpack_*.pet", for example "langpack_de-20120729.pet":

http://distro.ibibilio.org/quirky/pet_packages-noarch/

Note that the langpack is accumulative. Say for example that you install "langpack_de-20120729.pet" (German). You can then create some more translations, or update existing ones, then click the "Create langpack PET" button, and a new updated PET will be created. Please let me know if this mechanism leaves anything out!

There are already maintainers for some languages, for example Puppy Forum member L18L maintains the German translation. So, if you want to contribute to the German translations please do it through L18L. At the time of writing, these are the translators:

da | Danish | maans
de | German | L18L
el | Greek | kounelii
es | Spanish | vicmz
fr | French | esmourguit
it | Italian | vicmz (temporary)
nl | Dutch | Bert
pl | Polish | robwoj44
pt | Portuguese | vicmz
ru | Russian | rodin.s

### Further information

If you want to learn more about MoManager, go to my blog http://bkhome.org/blog and http://bkhome.org/blog2 (my new blog), and type "MoManager" into the search box.

To interact with others working on translating Puppy, including asking questions about anything that puzzles you, please go to the Puppy Forum here: http://www.murga-linux.com/puppy/index.php?f=16