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