Comment déboguer gettext ne fonctionne pas en PHP?
je suis en train d'utiliser l'extension gettext de php en php 5.5 (sur win2008 serveur, à l'aide de IIS7). Je suis en train de faire ceci:
<?php
$locale = "es";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
textdomain("messages");
echo gettext("Hello world");
?>
Avec ce dossier à la structure en place:
locale/es/LC_MESSAGES/messages.mo
Mais toujours, il renvoie simplement Bonjour tout le monde, et non pas la traduction correcte, ce qui pour l'instant (basé sur mon manque de compétences en espagnol) est-ce dans les messages.fichier po:
msgid ""
msgstr ""
"Project-Id-Version: TestXlations\n"
"POT-Creation-Date: 2014-04-19 08:15-0500\n"
"PO-Revision-Date: 2014-04-19 09:18-0500\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.6.3\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SearchPath-0: c:/dev\n"
msgid "Hello world"
msgstr "Hola World"
D'échec de la ligne de cmd et via IIS. Donc je c'est de voir le gettext appel, etc, et de l'exécuter, mais ce n'est pas la lecture du fichier de traduction. comment puis-je corriger de cette nouvelle? même si supprimer le fichier de traduction, j'ai le même comportement.
N'importe qui? c'est un véritable gâchis. je n'ai vu aucune preuve que c'est configurée correctement ou n'est pas en ligne. la doc est fondamentalement terrible. est-ce à réellement travailler pour n'importe qui?
OriginalL'auteur glutz | 2014-04-19
Vous devez vous connecter pour publier un commentaire.
Vous devriez vérifier les valeurs de retour et de savoir quelle fonction a échoué. Il n'est pas i18n spécifiques, mais utile pour tout les scripts PHP, ou de tout langage de programmation de débogage.
Même ici. Vraiment frustrant. Avez-vous trouver ce que votre problème a été?
Je viens de passer une bonne journée à vous demandez-vous pourquoi sur la terre, ce n'était pas, finalement réalisé bêtement pourquoi. J'ai été réglage de la
LC_ALL
àfr_FR
(Tout est ok, pas d'erreur) cependant à la fin je faisais allusion à l'utilisateur de retourner à la page d'origine; à ce point qu'il avait déjà perdu l'originalsetlocale
que par ce point - c'est un nouveau processus et doit être réinitialisé en haut de chaque page (ou contient) avec le choix retenu dans la session. J'ai bêtement pensé réglagesetlocale
serait en lui-même une séance!Merci pour le ping-moi 🙂 Ce n'est pas le problème que j'ai eu. Je l'ai corrigé, mais quelques jours après que j'ai posté ici, donc j'ai oublié de contribuer. Mais je backup @jr997 la réponse ci-dessous: les paramètres régionaux doivent être connus par le système d'exploitation, ce qui n'est pas du tout évident.
OriginalL'auteur akky
Avoir le même problème sur Linux, je suis venu à cette conclusion:
même si vous fournissez votre propre *.mo les fichiers de votre projet, les paramètres régionaux de lui-même (es) doit être connu du système d'exploitation.
L'installation de la demande locale au niveau du système résolu le problème pour moi.
Voir: locale-gen
Il pourrait ne pas aider réellement de débogage gettext, mais au moins c'est quelque chose que vous pouvez essayer.
if you provide your own *.mo files for your project, the locale itself (es) must be known to the operating system.
, puis ajouter une source, comme un lien vers une documentation de sauvegarde.....Installing the requested locale at a system level could fix the issue.
etc... s'abstenir de poser des commentaires/avis sur les réponsesOriginalL'auteur jr997
Trouvez-vous "es" dans la sortie de 'locale' ? Si non, alors vous devez exécuter la commande suivante.
Merci pour cette exécution locale-gen est maintenant une partie de mon serveur, les scripts de compilation.
OriginalL'auteur shailesh gupta
Que par ne sachant pas quelle langue à utiliser sur l'OS, heureusement, le
setlocale()
fonction permet une gamme. Comme par le PHP Docs:Avec cela, vous pouvez creuser pour trouver les paramètres régionaux du système d'exploitation est de redescendre par la vérification de l'ensemble après:
$setTo
seront fournis avec la$locales
valeur qui a été un succès. Cela peut être utile lors de la recherche de paramètres régionaux à écrire un.po
pour.Que par écrit, dans mes commentaires, j'ai eu la question où je n'étais pas l'exécution de cette
setlocale()
au début de chaque script de chaque demande de page, que vous devez conserver à l'utilisateur le choix de la langue par session ou de la valeur de base de données. Comme je l'ai cru naïvement une fois qu'il a été défini, il a été créé pour toujours!OriginalL'auteur MackieeE
C'est un peu une vieille question, mais va ici cette réponse, dans l'espoir d'être utile à quelqu'un.
Essayez de changer
LC_ALL
àLANG
dans leputenv
fonction, à partir de ce::
Dans le mac il a été donné des problèmes avec LC_ALL et probablement la même chose ici .
Également vérifier cette réponse dans les autres cas
https://stackoverflow.com/a/3535866/6628843
Espère que cela aide!
OriginalL'auteur user38561
Essayer de mettre aussi env vars
LC_LANG
etLC_LANGUAGE
non seulement laLC_ALL
:OriginalL'auteur