192 lines
5.9 KiB
Plaintext
192 lines
5.9 KiB
Plaintext
|
$Horde: horde/po/README,v 1.11 2002/03/24 13:35:14 jan Exp $
|
||
|
|
||
|
Horde Translation Guide
|
||
|
Copyright 2000-2002 Joris Braakman <jbraakman@yahoo.com>
|
||
|
Copyright 2001-2002 Chuck Hagenbuch <chuck@horde.org>
|
||
|
Copyright 2001-2002 Jan Schneider <jan@horde.org>
|
||
|
|
||
|
Contents
|
||
|
========
|
||
|
- GNU gettext, PHP and Horde
|
||
|
- Starting a new translation
|
||
|
- Example messages header
|
||
|
- Updating a existing translation
|
||
|
- Debugging
|
||
|
- Solaris
|
||
|
- Changing the English standard texts
|
||
|
|
||
|
|
||
|
GNU gettext, PHP and Horde
|
||
|
--------------------------
|
||
|
|
||
|
Horde uses GNU gettext for internationalization (i18n) and localization
|
||
|
(l10n). The manual at http://www.gnu.org/manual/gettext/index.html is
|
||
|
biased against C and using Emacs. This is more for Horde.
|
||
|
|
||
|
There is a good explanation for PHP and gettext at:
|
||
|
http://www.faqts.com/knowledge-base/view.phtml/aid/2953/fid/422
|
||
|
|
||
|
People seem to like learning from examples better, so I have used
|
||
|
dutch (nl_NL) as an example everywhere.
|
||
|
|
||
|
|
||
|
Starting a new translation
|
||
|
--------------------------
|
||
|
|
||
|
- run xgettext.sh (in this directory - horde/po/), this generates a
|
||
|
messages.po file.
|
||
|
- rename it to the language you are translating to, e.g. nl_NL.po
|
||
|
- adjust the header of nl_NL.po, then remove the #, fuzzy line.
|
||
|
Emacs has support for .po files, but I used vi
|
||
|
- translate, the time consuming part.
|
||
|
- convert the nl_NL.po to horde.mo and put the file in place:
|
||
|
$ make install
|
||
|
Compiling locale nl_NL:
|
||
|
261 translated messages, 21 untranslated messages.
|
||
|
... done
|
||
|
|
||
|
- modify the horde/config/lang.php to use nl_NL as the default language, if you
|
||
|
wish.
|
||
|
- Make sure your language exists in the horde/config/lang.php file. Also, if
|
||
|
the translation uses a character set that isn't ascii, make sure the
|
||
|
appropriate charset is defined in $nls['charsets']. You should also define
|
||
|
an alias for the language because some browsers only send a two letter code
|
||
|
in their Accept-Charset header.
|
||
|
|
||
|
And then it works.
|
||
|
|
||
|
|
||
|
Example messages header
|
||
|
-----------------------
|
||
|
# Dutch translation for Horde.
|
||
|
# Joris Braakman <jbraakman@yahoo.com>, 2000.
|
||
|
#
|
||
|
msgid ""
|
||
|
msgstr ""
|
||
|
"Project-Id-Version: Horde 2.3\n"
|
||
|
"POT-Creation-Date: 2000-08-14 10:30+0200\n"
|
||
|
"PO-Revision-Date: 2000-08-14 17:17+02:00\n"
|
||
|
"Last-Translator: Joris Braakman <jbraakman@yahoo.com>\n"
|
||
|
"Language-Team: Dutch <dev@lists.horde.org>\n"
|
||
|
"MIME-Version: 1.0\n"
|
||
|
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
||
|
"Content-Transfer-Encoding: 8-bit\n"
|
||
|
|
||
|
|
||
|
Updating a existing translation
|
||
|
-------------------------------
|
||
|
As soon as you check out a new version you have to check the translations
|
||
|
again, messages might have been changed after all. If you don't, you
|
||
|
can get strange effects. Information is cached every where so as a no
|
||
|
brain solutions I sometimes also restart the webbrowser and webserver
|
||
|
to make sure everything is fresh. msgmerge will mark translations that
|
||
|
have changed a bit to fuzzy.
|
||
|
|
||
|
If you want to update an existing translation and contribute it to the Horde
|
||
|
project you should first contact the last translator to see if he is still
|
||
|
working on it, doesn't have time to further maintain it or is even unreachable.
|
||
|
|
||
|
- run xgettext.sh again, this generates a messages.po file.
|
||
|
- merge it with the old .po file:
|
||
|
$ msgmerge nl_NL.po messages.po > nl_NL-new.po
|
||
|
|
||
|
- translate/update the strings that are new or have become fuzzy.
|
||
|
- delete the '#, fuzzy' lines.
|
||
|
- move the nl_NL-new.po to nl_NL.po
|
||
|
- put the new translations in effect
|
||
|
$ make install
|
||
|
Compiling locale nl_NL:
|
||
|
261 translated messages, 21 untranslated messages.
|
||
|
... done
|
||
|
|
||
|
|
||
|
Debugging
|
||
|
---------
|
||
|
Is this locale (nl_NL) installed at all?
|
||
|
$ locale -a
|
||
|
should list all locales installed on your system.
|
||
|
|
||
|
On Debian not all locales may be enabled by default. Edit /etc/locale.gen and
|
||
|
run locale-gen if you changed the list of enabled locales.
|
||
|
|
||
|
Do you have any .mo files? Usually in /usr/share/locale/
|
||
|
e.g. /usr/share/locale/nl/LC_MESSAGES/tar.mo
|
||
|
|
||
|
Does gettext even work?
|
||
|
Get a string to translate,
|
||
|
$ strings /bin/tar | grep Memory
|
||
|
Memory exhausted
|
||
|
$ (LANG=nl_NL; LANGUAGE=nl_NL; LC_MESSAGES=nl_NL; gettext tar "Memory exhausted" )
|
||
|
Geheugen uitgeput
|
||
|
|
||
|
Does the local Horde file work?
|
||
|
Assuming that you have put the translated Horde file in
|
||
|
/data/www/horde/locale/nl_NL/LC_MESSAGES/horde.mo
|
||
|
$ export TEXTDOMAINDIR=/data/www/horde/locale
|
||
|
$ (LANG=nl_NL; LANGUAGE=nl_NL; LC_MESSAGES=nl_NL; gettext horde "Message" )
|
||
|
Bericht
|
||
|
|
||
|
Create a file in the horde directory, langtest.php:
|
||
|
<?php
|
||
|
setlocale(LC_MESSAGES, 'nl_NL');
|
||
|
putenv('LANG=nl_NL');
|
||
|
putenv('LANGUAGE=nl_NL');
|
||
|
// use the tar test.
|
||
|
echo dgettext('tar', 'Memory exhausted');
|
||
|
echo '<br />';
|
||
|
|
||
|
// Specify location of translation tables
|
||
|
bindtextdomain('horde', './locale');
|
||
|
|
||
|
// Choose domain
|
||
|
textdomain('horde');
|
||
|
|
||
|
// Print the already tested message
|
||
|
echo _("Message");
|
||
|
echo '<br />';
|
||
|
|
||
|
// this should print the same.
|
||
|
echo dgettext('horde', 'Message');
|
||
|
|
||
|
?>
|
||
|
|
||
|
OUTPUT web browser:
|
||
|
Geheugen uitgeput
|
||
|
Bericht
|
||
|
Bericht
|
||
|
|
||
|
|
||
|
Solaris
|
||
|
-------
|
||
|
Since the .mo files are binary, they are platform specific. You
|
||
|
have to rerun make in all po directories.
|
||
|
|
||
|
You have not installed the Supplementary Partial Locales (SUNWploc1) if
|
||
|
you get:
|
||
|
$ LANG=nl_NL
|
||
|
couldn't set locale correctly
|
||
|
|
||
|
This is what it should say.
|
||
|
$ pkginfo | grep ploc
|
||
|
system SUNWploc Partial Locales
|
||
|
system SUNWploc1 Supplementary Partial Locales
|
||
|
|
||
|
The stuff is installed in /usr/lib/locale
|
||
|
$ ls /usr/lib/locale/nl
|
||
|
LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME nl.so.1
|
||
|
|
||
|
We assume that the Solaris gettext implementation is installed when we compile
|
||
|
the translations. Thus the make process will fail if the installed gettext is
|
||
|
from GNU. If anyone knows how to determine if the installed gettext is from
|
||
|
Solaris or GNU on Solaris systems, please send us a note.
|
||
|
|
||
|
|
||
|
Changing the English standard texts
|
||
|
-----------------------------------
|
||
|
You can also use gettext to change some of the English texts to your own taste.
|
||
|
|
||
|
- Create a message.po file as described in "Starting a new translation"
|
||
|
- Edit the msgstr entry of the strings you want to change. You can leave all
|
||
|
other msgstr entries empty.
|
||
|
- Run "make install"
|