J'ai (Après m'être arraché les cheveux pendant 1 heure) trouvé sur certains forum que la fonction gettext ne fonctionne pas que la version 64 bits de Wamp 3.0.6. Effectivement en testant sur un serveur partagé OVH, mon code fonctionne bien mais pas en locale.
Le problème a t il bien été remonté jusqu'au développeur de ce magnifique logiciel ?
Je suis en train de rentrer dans le moule de l'utilisation des fichiers .po et j'aimerai bien approfondir le sujet tranquillement en local.
Aucun message d'erreur mais effectivement j'ai plus d'information. Donc en fait si, ca marche car il lit bien le fichier PO en langue francaise. Mais le fait de faire :
Faire « joujou » avec les locales PHP sous Windows peut réserver aléatoirement quelques surprises heureusement relativement rares.
Parce que, sous Windwos, l'information locale est maintenue par processus, non par thread. Si vous faites fonctionner PHP sur un serveur multi-threadé comme Apache sur Windows où PHP est « thread safe », vous pourriez obtenir des changements soudains des configurations locales pendant qu'un script fonctionne, même si celui-ci n'appelle jamais la fonction setlocale().
Résumé de notre échange : Je ne sais pas expliquer et je fais "joujou".
Pour aider les autres donc :
Pour palier au problème de LC_ALL dans Wamp, il suffit de charger la class PHP Gettext : [github.com]
Ensuite, vous charger le contenu de votre fichier .po différement si vous êtes en local ou non. On pourrait ne se servir que de la fonction sans utilisé gettext de base mais bon c'est pour mieux comprendre.
use Gettext\Translator; use Gettext\GettextTranslator;
if(strstr($_SERVER['HTTP_HOST'], '127.0.0.1')) {
$t = new Translator();
//Create a Translations instance using a po file $translations = Gettext\Translations::fromPoFile('locale/'.$locale.'/LC_MESSAGES/'.$domain.'.po'); $t->loadTranslations($translations);
} else {
//Create the translator instance $t = new GettextTranslator();
//Set the language and load the domain $t->setLanguage($locale); $t->loadDomain($domain, 'Locale');
}
//If you want use the global functions $t->register();