Como carregar a linguagem com gettext em PHP?
Pergunta
Eu criei um arquivo de idioma em poedit para o uso da função PHP gettext, agora na página Estou tentando testá-lo, eu não posso obtê-lo para encontrar / carregar o .po ou .mo arquivo que eu criei, alguém vê o que estou fazendo de errado?
$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
Mesmo que eu estou tentando carregar o arquivo de Inglês lang padrão, eu mudei algum texto no arquivo para se certificar de que está lendo de um arquivo de idioma e atualmente só está mostrando o texto padrão e não fazer uma tradução, I acho que tenho o caminho errado possivelmente
Solução
Eu finalmente consegui-lo para o trabalho, eu estou postando aqui para que talvez ele possa ajudar alguém, ele é um pouco confuso a maneira como ele está documentado que eu penso.
Vou usar FR para francês para esta demonstração
$locale = "fr_fr";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");
Na função bindtextdomain
acima, o primeiro param é o nome do arquivo de idioma .po menos a extensão. O segundo parâmetro é o caminho para a pasta, este é o lugar onde é fica um pouco / complicada situação irregular ... Na pasta que definir aqui você tem que criar uma pasta para cada idioma com o seu 2 do país dígitos, em seguida, dentro deste código de país pasta que eu tinha para adicionar esta pasta com o nome LC_MESSAGES
, LC_MESSAGES
interior é onde o arquivo default.po
vai.
Esta foi a única maneira que eu poderia obtê-lo para o trabalho, tipo de confundir uma vez que o caminho para a pasta lang não menciona nada sobre a parte em negrito aqui:
langfolder / fr_FR / LC_MESSAGES /default.po
Ainda é no entanto muito estranho, obras default.po
para mim, mas se eu mudar para outra coisa no código acima e em seguida, mudar o nome do arquivo do .po e .mo para coincidir com ele deixará de trabalho, só funciona com nome default
para mim, eu estou começando a pensar que talvez gettext faz algum tipo de nos bastidores cache
Outras dicas
Eu suspeito que é o seu caminho.
é "/ includes / locale" o diretório correto em seu host? Ou isso é relativa a alguma coisa? Nota: é necessário o caminho completo, não em relação ao seu diretório home ou o diretório de instalação. de modo que poderia ser algo como:
- C: / xampp / htdocs / include / locale
- / var / www / include / locale
- / home / username / include / locale
- etc
O que é o diretório completo onde ele é encontrado?