Como traduzir cadeias de caracteres em JS
Tenho um projecto que quero traduzir para várias línguas para a parte I do PHP usar o Zend Frameworks Zend_ tradução com o GetText. Agora também quero traduzir a parte do JS.
estou a usar o Framework jQuery JS e gostaria de ouvir os seus pensamentos sobre tradução para os ficheiros JS
7 answers
Usei com sucesso o GetText para a tradução de ficheiros JavaScript em três projectos.
Claro que o gettext nativamente não suporta JavaScript e o JavaScript também não suporta GetText. A minha solução tem sido a seguinte.
- em JavaScript eu rodeio cordas transláveis com {[[2]}.
- Então eu tenho um script que puxa os strings de arquivos JavaScript e cria um arquivo C, porque C é suportado pelo gettext.
- Depois uso
xgettext
em os arquivos C gerados e em quaisquer outros arquivos em meu projeto para produzir arquivos POT e PO.
Depois de traduzir os ficheiros PO, tenho de levar as traduções de volta para JavaScript...
- analiso os ficheiros JavaScript de novo, lembrando a lista de cadeias transláveis, depois para cada local:
- usando uma linguagem com suporte de GetText (no meu caso PHP), traduzo todos os strings e Safo o ficheiro JavaScript.
Por exemplo, um ficheiro local para estónio (por exemplo et_EE.js
) pode parecer o seguinte:
var LOCALE = {
"Hello": "Tere",
"My name is %s": "Minu nimi on %s",
"Enter your credit card number": "Sisesta oma krediitkaardi number"
};
function gettext(string) {
return LOCALE[string] ? LOCALE[string] : string;
}
Dependendo da localização seleccionada, ou inclui et_EE.js
ou en_US.js
ou ...
en_US.js
provavelmente conterá apenas o seguinte:
function gettext(string) {
return string;
}
Um pouco mais complicado para ngettext()
, mas devias ter a ideia geral.
A grande coisa é que eu posso usar todas as ferramentas gettext já disponíveis. Especialmente quando eu tenho textos transláveis em PHP e JavaScript - eu posso usar a mesma ferramenta para traduzir ambos e também certifique-se de que a mesma string é traduzida da mesma forma tanto em JavaScript quanto em PHP.
Nota: Se não estiver a lidar com uma aplicação web intensiva em JavaScript, deve pensar duas vezes antes de ter o conteúdo da página criado pelo JavaScript em primeiro lugar.
Isto também pode ser do seu interesse: um 'plugin' de gettext para o jQuery .
Bem, você Poderia estender as cordas para dar-lhes uma função traduzida,que olha para o receptor em um local.
Usarias assim:
Alert ("sua língua favorita é o inglês!".traduzido ();
E receberia um alerta com "tu idiom prefiero es Español", ou algo assim. NikoHttp://plugins.jquery.com/project/jquery-localize encontrei este, que é usado por e para letmegooglethatforyou.com também encontrei este http://plugins.jquery.com/project/l10n whichone é melhor?
Tenho uma página web PHP que também existe em várias línguas. Eu escrevi minha própria classe de linguagem em PHP e quando se tratava de localizar os arquivos JavaScript eu apenas configurei o servidor para executar .js arquivos como PHP também, e eu usei minha classe PHP para traduzir strings JavaScript.
Algo do género:alert ( '<?php echo $l->Get ( 'MyString' ); ?>' );
Apenas incluo um ficheiro que inicializa o "$l" no início de cada ficheiro JavaScript. Não tenho problemas com isto.
// just for some idea
//var language ="fr_FR";
var language ="sp_SP";
var FRLOCALE = {
"Hello": "bonjure ",
"My name is %s": "mo nome oc ",
"what": "some french thing"
};
var SPLOCALE = {
"Hello": "Spanish for hello",
"My name is %s": "spanish for my name is ",
"what": "qu"
};
function translated(language, string){
if (language.indexOf("fr") > -1) {
return FRLOCALE[string] ? FRLOCALE[string] : string;
}
if (language.indexOf("sp") > -1) {
return SPLOCALE[string] ? SPLOCALE[string] : string;
}
return string;
}
alert(translated(language,"Hello"));
alert(translated(language,"some thing not translated "));