2012-02-08 6 views
3

J'utilise la localisation gettext comme celui-ciGettext ne peut pas obtenir setlocale() pour travailler

$lang = $_GET['lang']; 
echo $lang; 
putenv("LANG=$lang"); 
setlocale(LC_ALL, $lang); 
bindtextdomain("messages", realpath("../locale")); 
bind_textdomain_codeset("messages", "utf-8"); 
textdomain("messages"); 

... 

echo _("Welcome!") etc. 

Je peux voir des œuvres de localisation, car le site peut être vu traduit en slovaque. Cependant, peu importe ce qu'il y a dans la variable $ lang, le site est seulement traduit en slovaque ou pas du tout traduit. Slovaque signifie tous les fichiers .po et .mo que j'ai dans le dossier 'sk'. J'ai essayé de mettre différentes langues dans le dossier 'sk', ça marche et j'ai différentes traductions. Mais je ne peux pas le faire pour prendre un dossier différent, comme 'en' ou 'cs'. Tous les autres dossiers sont ignorés. Qu'est-ce que je fais mal?

P.S. setlocale() renvoie false, je n'arrive pas à comprendre pourquoi mais cela cause probablement le problème.

+1

Avez-vous un coup d'oeil à la commentaires sur http://www.php.net/manual/fr/book.gettext.php? – iblue

+0

bien je l'ai fait et je ne vois pas de solution là-bas, j'ai essayé de renommer à la fois le dossier et la variable $ lang en en_US, j'ai toujours la traduction 'sk'. –

+1

Si je dois deviner que votre locale standard est sk et c'est ce qu'elle utilise parce que le changement de locale ne se produit jamais. Vous indiquez que votre appel à setlocale renvoie false. Que faites-vous passer? Quel est le contenu de '$ lang'? – Dan

Répondre

1

setlocale() retournera false si votre système ne prend pas en charge cette locale. Vous pouvez voir les paramètres régionaux pris en charge par votre système en examinant la sortie de locale -a. La valeur que vous transmettez via la variable var get doit correspondre à l'un de ces noms de locale.

Comme Dan dit, sk est probablement votre locale standard qui est la raison pour laquelle qui est utilisé, même si setlocale retourne false ..

0

Eh bien, il y a un autre bidouille méchant:

Sur mon système ne en_DK.utf -8 est install et je ne peux pas installer d'autres langs.

Alors, je sélectionne la langue en utilisant le domaine à la place:

$lang = "en"; 
putenv("LANG=en_DK.utf8"); 
setlocale(LC_ALL, "en_DK.utf8"); 
bindtextdomain($lang, realpath("./locale")); 
bind_textdomain_codeset($lang, "utf-8"); 
textdomain($lang); 

L'emplacement du fichier des fichiers .mo sont comme ceci:

./locale/en_DK.utf-8/LC_MESSAGES/en.mo 
Questions connexes