Bonjour,

Je suis en train de m'arracher mes pauvres cheveux sur un truc qui doit etre tout bete.. mais la je vois pas !

J'ai un gros site que je vais devoir rendre multilingue. Comme j'utilise Twig (moteur de templates) et qu'il est compatible avec gettext, je ne veux pas compliquer.. surtout que c'est la facon 'PHP' d'internationaliser.. !

J'ai commencé quelques tests sur le serveur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<?php
$language = "fr_FR";
putenv("LANG=" . $language);
setlocale(LC_ALL, $language);
$domain = "messages";
bindtextdomain($domain, "./Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
 
echo gettext("TEST_TRANSLATION");

Pour le moment j'ai mes fichiers de traduction comme suit :

"Locale/fr_FR/LC_MESSAGES/messages.po"
et
"Locale/en_US/LC_MESSAGES/messages.po"

j'ai aussi les fichiers messages.mo, créés avec PoEdit, donc a priori, corrects..

un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#Test 1
msgid "HELLO_WORLD"
msgstr "Bonjour tout le monde"
 
#Test 2
msgid "TEST_TRANSLATION"
msgstr "Un test de traduction !"
Quelle que soit la langue que j'indique dans le php, ou les modifications que je fais sur les .po / .mo.. ca ne change rien...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
echo gettext("HELLO_WORLD");
renvoie toujours :


Je dois oublier quelque chose.. Mais la je ne vois pas !
et je n'ai meme pas de messages ou de warnings dans le log.. meme pas une notice !

Les locales sont installées sur le serveur et gettext également !


Une idée ?


Hmm, bon je viens de trouver, je laisse quand même mon message si ca peut aider certains..

le langage doit être indiqué sous sa forme complète :
$language = "en_US.UTF8";
ou
$language = "fr_FR.UTF8";

Et la ça marche !