Gettext
Pages: 1, 2
Distributing the Pot File
Ok, so now that you have your pot file with the strings that need to be translated, you need to distribute it to your translators. In a successful open source project, you would have several different volunteers that take care of the translation of your user interface messages. In this case, you would send an email to the development mailing list and tell the volunteers that the next release would go out on the X date and that the following list of languages need to be updated.
That's, of course, in a successful project. The normal situation, though, would have you, the project leader, to do the most important translations yourself and wait for contributions from volunteers. In a Web site or a Web application, this is usually not the case. That is, you normally wouldn't have a team of volunteers working on your personal Web site, but the picture is different for a community Web site like themes.org, for instance.
In any case, either you or the volunteers will translate the pot file and then you will need to convert the file into a binary file that Gettext actually "understands." For that you would use the following command:
$ msgfmt messages.po
The line above will create a messages.mo file, which you should save in the appropriate locale/<LANG_CODE>/LC_MESSAGES/ ng strings y.
Managing Evolving Pot Files
Now think about all of this for a moment -- you have a Web site that is constantly evolving, with new features being added or inconsistencies being removed, and your strings to be translated are also changing. New ones are added, old ones are modified, and so on.
So how do you manage multiple versions of the pot files? In a usual
situation, you will have a messages.po that is completely translated for a specific language, and a new file with the new strings to be translated. The problem lies here: since Gettext doesn't work in any other way, this new file will look just like the example above -- it will be empty.
The question is how to merge the files in a way that keeps the already-
translated strings while adding the new untranslated ones. The answer is
provided by the msgmerge Gettext utility. An example of its use would be the following sequence of commands:
$ ls
example.php
$ xgettext -n *.php
$ ls
example.php messages.po
// ...
// Translates the messages.po file now
// ...
$ msgfmt messages.po
$ ls
example.php messages.po messages.mo
// ...
// Changes the example.php file
// ...
$ mv messages.po old.po
$ xgettext -n *.php
$ ls
example.php messages.po messages.mo old.po
$ msgmerge old.po messages.po --output-file=new.po
$ ls
example.php messages.po messages.mo new.po old.po
// ...
// Translates the new.po file
// ...
$ msgfmt new.po
What to Do Next
The best thing to do now is to experiment. You will need to enable the Gettext PHP extension and start to play around with it. The example provided here is simple but should be enough to build applications for multiple languages.
More information can be found in the Gettext manual.
Have fun.
Joao Prado Maia is a web developer living in Houston with more than four years of experience developing web-based applications and loves learning new technologies and programming languages.
Return to the ONLamp.com.