- 2012-08-01 00:28:38 - part of checkin [26c45f7e8b] on branch trunk - Translation howto page updated (user: BarryK )
HOWTO internationalize applicationsPage updated August 1, 2012
Internationalization of applications and scripts in Puppy Linux has become extremely easy, with MoManager, a GUI application.
Applications written in BaConBaCon is a BASIC compiler, one of our officially supported languages for Puppy development. Internationalization is supported by the compiler, as explained here:
There are at least two applications that you will find in every recent Puppy that are written in BaCon and have internationalization support:
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:
export TEXTDOMAIN=myappMoManager 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 filesMoManager 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).
Scripts internationalized with 't12s'This is a very fast technique pioneered by technosaurus and implemented for Puppy by L18L. See discussion in Puppy Forum:
Here are online instructions on how to use this technique to create a translation for your language:
...this relies upon the application /usr/sbin/t12s, a GUI app created by L18L. It requires the 'yad' package be installed, that is likely to be the case in recent puppies.
MoManager will recognise the existence of these translation files, and bundle them into the output "langpack" PET, however most developers are recommended to use the 'gettext' method.
MoManager translation managerMoManager 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/blog) 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 former list, 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:
ScriptsIn 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:
...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.
poeditThis 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.
LangpackYou 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":
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:
Further informationIf you want to learn more about MoManager, go to my blog http://bkhome.org/blog, and type "MoManager" into the search box.
(c) This page is Copyright Barry Kauler 2012, all rights reserved.