Question

J'ai créé un fichier de langue dans poedit pour l'utilisation de la fonction gettext de PHP, maintenant sur la page que je suis en train de le tester, je ne peux pas l'obtenir pour trouver / charger le .po ou .mo fichier que j'ai créé, quelqu'un voit ce que je fais mal?

$locale = "en_US";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

//my .po ad .mo file is located here /includes/locale/en/default.mo

Même si je suis en train de charger le défaut anglais fichier lang, j'ai changé un texte dans le fichier pour vous assurer qu'il est en train de lire à partir d'un fichier de langue et actuellement il montre que le texte par défaut et ne pas faire une traduction, je Je pense que le mauvais chemin peut-être

Était-ce utile?

La solution

J'ai finalement eu à travailler, je suis commentaire ici peut-être que ça peut aider quelqu'un d'autre, il est un peu déroutant la façon dont il est documenté que je pense.

Je vais utiliser FR pour le français pour cette démonstration

$locale = "fr_fr";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

Dans le Fonction bindtextdomain ci-dessus, le premier est le nom param du fichier de langue .po moins l'extension. Le second param est le chemin du dossier, c'est là est devient un peu délicate / non documentée ... Dans le dossier défini ici, vous devez créer un dossier pour chaque langue avec ses 2 chiffres code du pays, puis à l'intérieur de ce code de pays dossier que je devais ajouter ce dossier nommé LC_MESSAGES , à l'intérieur LC_MESSAGES est l'endroit où votre fichier default.po va.

Ce fut la seule façon que je pouvais le faire fonctionner, sorte de confusion depuis le chemin du dossier lang ne mentionne rien au sujet de la partie en gras ici:

  

langfolder / en_US / LC_MESSAGES /default.po

Il est encore vraiment étrange que, default.po travaille pour moi, mais si je change à quelque chose d'autre dans le code ci-dessus puis changer le nom des fichiers .po et .mo pour le match ne fonctionnera plus, ne fonctionne qu'avec nom de default pour moi, je commence à penser peut-être gettext fait une sorte de derrière la mise en cache des scènes

Autres conseils

Je soupçonne que c'est votre chemin.

est "/ includes / locale" le répertoire correct sur votre hôte? Ou est-ce par rapport à quelque chose? Remarque: vous avez besoin du chemin complet, pas par rapport à votre répertoire ou le répertoire d'installation. de sorte que peut-être quelque chose comme:

  • C: / xampp / htdocs / include / locale
  • / var / www / include / locale
  • / home / nom d'utilisateur / include / locale
  • etc

Qu'est-ce que le répertoire complet où il se trouve?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top