=========================
 Horde Translation Guide
=========================

:Last update:   $Date: 2009-10-28 18:01:10 $
:Revision:      $Revision: 1.8.10.5 $
:Author:        Joris Braakman <jbraakman@yahoo.com>
:Author:        Chuck Hagenbuch <chuck@horde.org>
:Author:        Jan Schneider <jan@horde.org>
:Contact:       horde@lists.horde.org

.. contents:: Contents


GNU gettext, PHP and Horde
==========================

Horde uses GNU gettext for internationalization (i18n) and localization
(l10n).  The manual at http://www.gnu.org/software/gettext/manual/gettext.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.

There is a command line tool written in PHP for creating and managing
translations in the ``horde/po/`` directory.  Usage instructions can be found
in ``horde/po/README`` as well as instructions on how to start and maintain
translations.


Translations don't work
=======================

If all or some translations don't work on your system, please follow the steps
described below.  If you want to ask for help either on the `i18n mailing
list`_ or on `Horde's bug system`_, please explain which steps you tried and
which failed.

You might also find some more information in the FAQ_.

Please note that Dutch (nl_NL) is only used as an example here.  If you have
problems with a certain translation use this translation's language code
instead.

1. Is this locale (nl_NL) installed at all?

   ``locale -a`` should list all locales installed on your system.

   On Debian and Ubuntu not all locales may be enabled by default. On Debian
   edit ``/etc/locale.gen`` and run ``locale-gen`` after you changed the list
   of enabled locales. On Ubuntu run ``locale-gen nl_NL`` for all locales that
   you want to install.

2. Do you have any .mo files?

   Usually in ``/usr/share/locale/``
   e.g. ``/usr/share/locale/nl/LC_MESSAGES/tar.mo``

3. 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

4. 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


.. _`i18n mailing list`: http://www.horde.org/mail/
.. _`Horde's bug system`: http://bugs.horde.org
.. _FAQ: http://www.horde.org/faq/


Solaris
=======

Since the .mo files are binary, they are platform specific.  You have to rerun
make in all po directories.

On Solaris 7, you don't have the ``Partial Locales (SUNWploc)`` and
``Supplementary Partial Locales (SUNWploc1)`` packages installed if you get::

   $ LANG=nl_NL
   couldn't set locale correctly

On Solaris 8, you must install the local packages required for the locales you
desire (for example, you may need to install ``SUNWweuos`` for Western
European locales or ``SUNWmeaos`` for Middle Eastern locales).  The packages
are located on Software Disk 1 of 2 in the directory:
``sol_8_1001_sparc/s0/Solaris_8/Product``

This is what it should say:

Solaris 7::

   $ pkginfo | grep ploc
   system      SUNWploc       Partial Locales
   system      SUNWploc1      Supplementary Partial Locales

Solaris 8::

   $ pkginfo | grep euo
   system      SUNWceuos      Central Europe OS Support
   system      SUNWceuox      Central Europe 64-bit OS Support
   system      SUNWeeuos      Eastern Europe OS Support
   system      SUNWeeuox      Eastern Europe 64-bit OS Support
   system      SUNWneuos      Northern Europe OS Support
   system      SUNWneuox      Northern Europe 64-bit OS Support
   system      SUNWseuos      Southern Europe OS Support
   system      SUNWseuox      Southern Europe 64-bit OS Support
   system      SUNWweuos      Western Europe OS Support
   system      SUNWweuox      Western Europe 64-bit OS Support

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

It was reported that the HTTP server has to be linked to the same libintl.so
file as PHP on Solaris.  Also, it may be required that libintl.so be loaded
before libc is loaded.  If you are having conflicts, you may be able to reside
them by starting apache with one of the following commands::

   $ LD_PRELOAD=libintl.so apachectl start


FreeBSD
=======

To enable UTF-8 support in Horde, you also need UTF-8 support in
FreeBSD.  This is not installed by default, you need to install the
``utf8locale-without-swidth-040319`` package or port.
