[Scummvm-devel] Translation support was added to ScummVM
Eugene Sandulenko
sev at scummvm.org
Tue Jun 15 19:51:54 CEST 2010
Hi team,
I am back from my vacation, and one feature I was working on during
windy evenings was support for GUI translation (at last).
Below is brief description of the work. It is based on core developed
by Alex Bevilacqua, but many of the details, especially GUI was
reworked completely.
Basically now in order to make some things translatable you have to use
one of pseudofunctions:
_(char *) - Main way to mark strings. You need it in majority of
cases.
_s(char *) - Function used to mark static string constants. For
instance, when you have static arrays which need to be translated.
In this case you mark these strings with _s(), and then use _() at
the place where you need to perform the substitution. See
savePeriodLabels[] array in gui/options.cpp for example.
_t(char *) - Function used for console messages. It applies charset
conversion to the output. But this feature is available only on
those platforms which have full blown -liconv)
If you are adding new file, you must include it into po/POTFILES file.
Translations could be produced with use of gettext tools, one of the
best of them is Emacs po-mode. Take po/scummvm.pot file as a
template, fill out the header, and translate the strings. Please,
beware, that with current implementation only single byte encoding are
supported, so no UTF-8, or it will choke.
Also it is possible to define in-place hotkeys for translation strings.
Use ~O~pen for defining hotkey 'O'. Tildes are stripped down silently
from the message. Non-ASCII hotkeys should be put as a parameter to
widget constructors, just as before.
Put new translations into po/ directory, and it will pick them up by
itself.
However, in order to compile .po files, your system have to have perl5
installed.
Additionally, in order to update .pot files, i.e. generate strings from
the source files, you have to have gettext tools installed. Use
following command to update it:
make updatepot
It is defined in po/module.mk makefile.
The implementation itself does not depend on gettext. It uses
tools/po2c perl script for translating it into gui/messages.cpp file.
Currently all translations are stuffed into that file as static arrays,
but in future, once there will be more translations, it will be easy to
move it to separate .dat file. The code changes will be minimal.
Now on limitations/TODO:
- Unfortunately I did not have any additional BDF files with me, and
without internet access, I could not test it. Thus, no support for
locale-defined fonts is implemented. That is, Russian translation
does not work as expected, it draws accented characters instead of
Cyrillic. All European languages should work as is, however, since
our BDF fonts contain all Latin-1 subset characters.
- No support for multibyte encodings.
- Languages in GUI are represented by lang_country standard
abbreviation, such as en_GB, and not translated into human-readable
language description. Suggestions are welcome.
- Updating interface without restart. This will require moving much
code to reflowLayout() for all dialogs and is a big piece of work.
Helping hands are welcome.
- Situations with strings not fitting into widgets. No code around
that. Suggestions are welcome.
- Behaviour for non-ASCII hotkeys (surrounded by tildes) is undefined
and was not even tested.
Eugene
More information about the Scummvm-devel
mailing list