Php web application internationalisation with Gettext();
Asked Answered
O

2

6

I am currently developping a PHP web app that needs to be available in French and English. I looked around and found that the Gettext() functionality offers the best performance.

I generated my .pot file with the command

 xgettext PhpFileToTranslate.php -o NameOfTemplateFile.pot

and successfuly generated a .pot file. I used PoEdit to generate messages.po file and created messages.mo

Here are my server files :

/app
    /locale
        /en_US
              /LC_MESSAGES
              messages.po
              messages.mo
        /fr_FR
              /LC_MESSAGES
              messages.po
              messages.mo
        template.pot

And i set the locale in the php file like this :

$language = $_SESSION['language'];  //session contains 'fr_FR.UTF-8' or 'en_US.UTF-8'
setlocale(LC_ALL, $language);
bindtextdomain('messages', './locale');  
textdomain('messages');

but i only see the label and not the translation... I tried putting 'fr_FR' instead of 'fr_FR.UTF-8' and all kinds of strings but it's not working.

Am I missing something? My server is Ubuntu 12.04 Server with Apache and php5

Orchardist answered 15/8, 2012 at 17:30 Comment(0)
H
7

To compile your .mo files on linux you need to have the locales installed on the server and on the machine that compiles it. Locales are the languages supported by your OS.

As stated in this tutorial : http://dev.jimdo.com/archive-old-blog/tutorial-for-the-easy-use-of-gettext-for-internationalization-of-php-apps/ Verify that you have the locales installed on your linux

Be sure that the locales you want to use are installed in your linux and that you use the .UTF-8 (you want i18n so please use UTF!):

# Example for debian
dpkg-reconfigure locales

-- To install new locales on linux

List the languages actually installed on your system:

locale -a

Example to install fr_FR:

#List the available i18n locales
less /usr/share/i18n/SUPPORTED

Install the locale (here fr_FR.utf8)

locale-gen fr_FR.utf8

Reconfigure the locales on your system

sudo  dpkg-reconfigure locales

Recompile your .mo file with PoEdit and that should do the trick. Make sure you install locales both on server and on your machine compiling .mo files.

Hope that helps

Heall answered 15/8, 2012 at 17:37 Comment(1)
Indeed I did not have fr_FR.utf8 install on my computer and on my server... It now works! Thanks a lot for the help.Orchardist
G
0

In addition to what Bruno said, don't forget to reload Apache configuration (e.g., service apache2 reload). I wasted some time messing around to find why it wasn't working, just to find that Apache configuration must be reloaded once the new language/locale installed.

Golfer answered 20/3, 2013 at 13:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.