Como executar ou carregar arquivos .po / .mo para localização em php

Eu instalei poedit e execute meu arquivo através dele, ele cria arquivos .po e .mo para eles. Mas eu tenho um problema para carregar e usar esses arquivos para traduzir meu texto. Não sei como carregar ou abrir os arquivos traduzidos e mostrar o conteúdo traduzido. Alguém pode me ajudar sobre isso. Eu tentei todas as fonts possíveis, mas não conseguiu.

Em primeiro lugar, você precisa informar o PHP que localidade e domínio você está usando.

putenv("LANG=da_DK"); setlocale('LC_ALL', "da_DK"); bindtextdomain("mycatalog", "./locale/"); textdomain("mycatalog"); 

Neste caso, eu estou tendo uma tradução dinamarquesa e um arquivo chamado mycatalog.mo (e .po). Esses arquivos são colocados (da sua raiz) aqui: locale / da_DK / LC_MESSAGES / mycatalog.mo / po

Para mostrar sua tradução, você fará isso:

 echo _("Hello world"); // Which would become "Hej verden" 

_ (); é um alias de gettext (); A coisa inteligente sobre gettexts é que, se não houver tradução, você não terá um código de linguagem feia como “MSG_HELLO_WORLD” na sua IU, mas sim uma alternativa melhor: simplesmente o texto em inglês.

No arquivo messages.po, você deve ter todas as mensagens (sensíveis a maiúsculas e minúsculas e com respeito a vírgulas, pontos, colons, etc.) usados ​​neste formulário:

 msgid "Hello world!" msgstr "Hej verden!" 

Quando você adicionou isso ao seu arquivo .po, você abrirá este arquivo em poedit, pressione “Salvar” e ele irá gerar um arquivo .mo. Este arquivo é carregado no mesmo diretório que o arquivo .po (geralmente algo como \ locale \ da_DK \ LC_MESSAGES \ da raiz do script)

Para traduzir conteúdo dynamic / variável, você pode usar – entre outras coisas – sprintf, desta maneira:

 echo sprintf(_("My name is %s"), $name); 

Nesse caso, o% s ocorrerá no arquivo .po; Quando você possui a seqüência traduzida (que contém os% s), o sprintf irá certificar-se de replace o% s pelo conteúdo variável. Se a variável também deve ser traduzida, você pode fazer isso:

 echo sprintf(_("The color of my house is %s"), _($color)); 

Então você não precisa de uma frase completa para cada cor, mas você ainda obtém as colors traduzidas.

É importante notar que a primeira vez que um .mo é executado no servidor é armazenado em cache – e não há nenhuma maneira de remover esse arquivo do cache sem reiniciar (o Apache ou o próprio assunto deve ser suficiente). Isso significa que qualquer alteração que você fizer no .mo após a primeira vez que for usada, não será efetiva. Há uma série de hacks para trabalhar em torno disso, mas, honestamente, eles na maior parte não são muito bonitos (eles incluem copiar o .mo, adicionar o tempo () atrás dele e depois importá-lo e armazená-lo novamente). Este último parágrafo é de importância somente se você não traduz o todo ao mesmo tempo, mas em pedaços.

Se você quiser criar sua própria ferramenta de tradução em algum momento, esta ferramenta ajuda você a converter .po para .mo usando o PHP:

http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/

Veja (e explore) http://php.net/manual/en/book.gettext.php . Há comentários de usuários nessa página que devem dar uma idéia sobre como proceder.

Além disso, sua pergunta é uma duplicação de Obter traduções do arquivo .po ou .mo