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"
 |