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

Author: Thomaschaaf, 2009-01-10

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.

 12
Author: Rene Saarsoo, 2009-12-27 18:31:00

Isto também pode ser do seu interesse: um 'plugin' de gettext para o jQuery .

 2
Author: Rene Saarsoo, 2009-01-11 08:46:10

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. Niko
 1
Author: nes1983, 2009-01-11 08:51:46

Http://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?

 0
Author: Thomaschaaf, 2009-01-10 20:40:13

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.

 0
Author: Jan Hančič, 2009-01-12 18:14:18
// 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 "));
 0
Author: user4775894, 2015-04-11 01:34:39