GettextForTranslators

From The Battle for Wesnoth Wiki
Revision as of 18:40, 21 September 2005 by Isaac (talk | contribs) (FAQ)

Gettext for translators

Wesnoth translation is now divided into several text-domains:

  • wesnoth
  • wesnoth-editor
  • wesnoth-lib (contains strings shared by game and editor)
  • plus one text-domain for each campaign. The names of these text-domains are constructed from the word wesnoth and the common abbreviation of the campaign (wesnoth-ei, wesnoth-httt, wesnoth-sotbe,

wesnoth-tdh and wesnoth-trow).

We will use the Swedish (sv) language and the wesnoth domain as an example in this page. There are three important files for each text-domain:

  • wesnoth/wesnoth.pot file, which contains all the strings used in the main game (neither editor, nor campaign strings). You can see how a .pot file looks like in SVN : Current SVN version.
  • wesnoth/sv.po, the file containing the translation, you can see how a .po file looks like in SVN: Current SVN version.
  • {translations_dir}/sv/LC_MESSAGES/wesnoth.gmo, which is a binary version of <lang>.po that the game will use for efficiency reasons. This is not found in cvs, but is created during compilation of the game.

The first of these files, we update every once in a while, when there is new or modified text, for instance when a new campaign scenario hits the CVS.

Then, msgmerge is used to merge this new "state of the game strings" with your current translations, and generate a new, up-to-date, sv.po.

Then, a tool called msgfmt is called, which generates a new wesnoth.gmo file from your wesnoth.po file, which will be used by the game once installed.

"make -C po update-po" does these three steps in one pass.

That was for the "Big Picture". But you really just need to be concerned with the po file: translating new strings, checking "fuzzy" entries. We can handle the administrative tasks of updating etc. You really don't need to bother with any of these commands, unless you want to compile gmo files to check in-game.

Ivanovic is now responsible for integrating translations into Wesnoth, with the help of Torangan and ott. You should contact Ivanovic (crazy-ivanovic AT gmx DOT net), and he'll put them in the game.

When sending po files to a maintainer to be included in CVS, please create a zip or tar archive that you attach, rather than cutting and pasting the translations into an email. The translated strings are very sensitive to formatting and the archive will also help distinguish which file is which when sending more than one po file.

FAQ

  • What's a fuzzy string?
    • It's a string calling for translator revision. For example, if an English string gets a small change and you run the msgmerge program, it will mark the translation of that string fuzzy. When we switched to gettext we marked all translations as fuzzy as lots of them were outdated.
  • My language needs a different font to get displayed correctly.
    • Wesnoth uses several different fonts, and the number is likely to grow with the support for new alphabets/writing systems. Right now we are using DejaVuSans (Roman and Cyrillic), FreeSans (Greek), sazanami-gothic (Japanese) and gkai00mp (Chinese). In the wesnoth/sv.po you will find a string containing the currently used fonts. By changing the order of fonts listed, you choose which font is preferred for your translations. A language using Greek letters would for instance translate that string with:
  msgid "DejaVuSans.ttf,FreeSans.ttf,sazanami-gothic.ttf,gkai00mp.ttf"
  msgstr "FreeSans.ttf,DejaVuSans.ttf,sazanami-gothic.ttf,gkai00mp.ttf"

Note that if a certain letter/glyph is not found in the first font listed, the second font will be scanned for it and so on.

  • What should I do to insert a newline in a string?
    • If you want to insert a newline in a string you need to include the pair of characters "". You can use normal newlines as you wish as they don't affect the translation.
  • How do I use ' within a single-quote delimited string when translating text= in help screen texts?
    • Add a backslash before it.
  • What should I do with strings like "Prefs section^General"?
    • There are ambiguous strings which should be translated in a different way depending on where they appear. For example, we have "General" in the preferences as "General preferences" and we can also have "a General". These strings can have different translations for a given language, so we use "context" to solve this. The prefix only tries to give a hint about the string, and should be not translated, for example:
  msgid "Prefs section^General"
  msgstr "General"
  • Who can I ask for further information?
    • You can ask Ivanovic, Torangan, ott, Yann or Isaac in IRC (irc.freenode.net, #wesnoth or #wesnoth-dev).

If you don't like IRC, send a mail to crazy-ivanovic AT gmx DOT net, or pm him (ivanovic) at the forum.

  • How do I quickly test PO file changes?
    • When you modify a PO file, run "make update-gmo" in the main po directory to create a new MO file, then run "make install" there to install the new MO file.
    • Then force cache rebuild. This is tricky -- if you only update MO files, the game may use a cached (i.e., old) version letting you wonder why it still displays the old translation. Either change game.cfg modification time, e.g. with "touch /usr/local/share/wesnoth/game.cfg", or delete the corresponding cache[s] in ~/.wesnoth/cache.
  • The .po file in CVS has changed, how do I move over the translations I've made?
    • If your file with additional translations is called old.po and the new file from CVS is called cvs.po, create a new file called new.po by doing
  msgmerge -o new.po old.po cvs.po

The new file new.po will keep your translations from old.po as well as the new strings from cvs.po, but check the result -- some translations will not be possible to move across if the original strings changed, these are kept as comments at the end of the file.

Tools

There are several tools to work with .po files:

Of course, you can edit po files with any UTF-8 capable text editor, but the tools listed above have great advantages over any text editor regarding .po translation, like going to next fuzzy/untranslated string, searching only in specific fields (msgid, msgstr, comment), ...

See Also