# Gettext files editors and tools

## Gettext files editors

Translators are highly encouraged to use dedicated GNU gettext message catalogs files (PO files) editing tools. Even though PO files are plain text files which may be modified with any text editor, the use of dedicated tools will save translators a lot of time.

This document does not intend to be a reference document about these tools. Most tools have been packaged for the Debian GNU/Linux distribution and thus installing them on a Debian system is as easy as running `apt-get install <package>`.

Short list of PO editing tools:

- KBabel (Debian package `kbabel`): very complete and powerful. Needs installing the KDE libraries (but, of course, it may work without the full KDE environment).

  The KBabel editor is undoubtfully the most complete gettext message catalogs editor and its use is recommended by the &i18n-coords;. Its support for non-Latin languages is very complete, including correct Right-To-Left (RTL) and BiDi support For Arabic/Hebrew and other RTL languages as well as support for combined languages such as languages using the Devanagari script.

  The major drawback is for Gnome users: KBabel may be quite long to launch and memory hungry because of the need of KDE and Qt libraries.

- Gtranslator (Debian package `gtranslator`): PO-file editor for the GNOME Desktop.

  Gtranslator is roughly the equivalent of KBabel for users of the Gnome environment. Of course, it can be used outside the Gnome environment with the same drawback as KBabel.

  However, it is not well suited for &d-i; translations as it does not properly support Plural Forms. So translators working on files which include plural forms (`base-config` are among those files) should absolutely avoid using Gtranslator.

- Poedit (Debian package `poedit`): quite complete tool but no correct handling of non Latin languages on Debian. Uses the WxWindows toolkit.

- Emacs po-mode (Debian package `gettext-el`): editing mode for the Emacs/XEmacs editor. Emacs wizards will probably appreciate using the same editing environment for gettext message catalog files.

  The Emacs po-mode is however limited when it comes to "advanced" features such as auto-learning, message compendiums use and other very useful features for translators.

## Gettext files tools

The Debian package gettext includes a whole set of command-line utilities for handling i18n material.

Several utilities may help translators in manipulating the PO files contents. For all these utilities, see their respective man pages for details about their use:

- `msgcat` combines together one or several files. When used on a single file, it will wrap the file contents and make it easy to read.

- `msgmerge` may merge together translations from one or two files as well as update a PO files according to the contents of a `templates` file.

- `msgfmt` is aimed at compiling message catalog files but is also very useful for checking files and get statistics about their contents. The use of `msgfmt --check --statistics --output-file=/dev/null &language;.po` is highly recommended before commiting a translation file or sending it to the package maintainer.

## Debian specific tools

`podebconf-display-po` will give translators a rough idea on how their translation will look like, particularly the screens length (use this utility on a usual 80x25 terminal). But as cdebconf and debconf displays slightly differ, and as some scripts do heavy use of text substitution, one should not fully rely on this program. Running debian-installer is the only solution to test translations.

Using `podebconf-display-po` is mandatory for testing debconf translations when they are mentioned to be tricky (such as `shadow`, `popularity-contest` and exim4 translations).

## Spellchecking tools

`aspell`: this package is designed for testing the spelling in PO files as it will only test the spelling in their translated part. It relies on the `ispell` program : this will then only work with languages for which an ispell dictionary exists.

## Gettext files headers

Translators should not forget to properly fill up the PO files header, especially the `Last-Translator` field.

The `Project-Id-Version` field should be filled with the package name : this will help translators in translation maintenance.

## Plural Forms

Foo