Pregunta

Estoy utilizando gettext en mi código PHP, pero tengo un gran problema. Todos mis archivos JavaScript no se ven afectados por la traducción, puede alguien decirme una manera fácil de obtener las traducciones en el idioma elegido en JavaScript también.

¿Fue útil?

Solución

La forma más fácil es tener un archivo PHP escribir las traducciones de gettext en variables de JavaScript.

js_lang.php:

word_hello = "<?php echo gettext("hello"); ?>"
word_world = "<?php echo gettext("world"); ?>"
word_how_are_you = "<?php echo gettext("how_are_you"); ?>"

y luego incluirlo:

<script type="text/javascript" src="js_lang.php"></script>

También recomendaría este método en conjunción con los plugins de traducción S.Mark menciona (que son muy interesante!).

Se puede definir el diccionario en la cabecera de la página actual, también, sin incluir un archivo externo, pero de esa manera, usted tendría que mirar hacia arriba y enviar los datos en cada carga de la página - absolutamente innecesarias, como un diccionario tiende a cambiar en muy raras ocasiones.

Otros consejos

I generalmente exportar los traducciones en una estructura de JavaScript:

var app = {}
var app.translations = {
  en:  { hello: "Hello, World!"
       , bye:   "Goodbye!"
       }
, nl:  { hello: "Hallo, Wereld!"
       , bye:   "Tot ziens!"
       }
};

El idioma actual de los textos de páginas se puede definir usando: <html xml:lang="en" lang="nl">

Esto se puede leer en JavaScript:

var curentLanguage = document.documentElement.lang || "en";
app.lang = app.translations[ currentLanguage ] || app.translations.en;

Y a continuación, puede escribir código como este:

alert( app.lang.hello );

Opcionalmente, una función o i18n() gettext() puede traer un poco de inteligencia, para devolver el texto predeterminado si no existe la clave). Por ejemplo:

function gettext( key )
{
  return app.lang[ key ] || app.translations.en[ key ] || "{translation key not found: " + key + "}";
}

Trate, jQuery i18n o jQuery localización

Un ejemplo de jQuery i18n, y por supuesto que necesita para generar diccionario basado en JSON de archivo de lenguaje de PHP

var my_dictionary = { 
    "some text"  : "a translation",
    "some more text"  : "another translation"
}
$.i18n.setDictionary(my_dictionary);


$('div#example').text($.i18n._('some text'));

JSGettext ( enlace archivado ) es la mejor aplicación de las especificaciones de GNU gettext. En primer lugar descargar el paquete JSGETTEXT e incluir dentro de su página /js/Gettext.js

<?php
$locale = "ja_JP.utf8";
if(isSet($_GET["locale"]))$locale = $_GET["locale"];
?>
<html>
<head>
<link rel="gettext" type="application/x-po" href="/locale/<?php echo $locale ?>/LC_MESSAGES/messages.po" />
<script type="text/javascript" src="/js/Gettext.js"></script>
<script type="text/javascript" src="/js/test.js"></script>
</head>
<body>
Test!
</body>
</html>

código javascript por ejemplo

window.onload = function init(){
var gt = new Gettext({ 'domain' : 'messages' });
alert(gt.gettext('Hello world'));
}

A modo de referencia se encuentran por debajo de enlace. Está funcionando bien sin convertir Js archivo en php.

Haga clic aquí

Usted puede hacer su vida mucho más fácil si se deshace del mal hábito de utilizar literales de cadena en el código. Es decir, en lugar de

 alert("Some message")

uso

alert($("#some_message_id").text())

donde "#some_message_id" es un div oculto o lapso generada en el lado del servidor.

Como un toque adicional hay un script en perl llamado po2json que generará JSON desde un archivo .po.

Para la ejecución de JavaScript API GNU gettext estos enlaces pueden ser también útiles:
     http://tnga.github.io/lib.ijs
     http://tnga.github.io/lib.ijs/docs/iJS .Gettext.html

//set the locale in which the messages will be translated
iJS.i18n.setlocale("fr_FR.utf8") ;
//add domain where to find messages data. can also be in .json or .mo
iJS.i18n.bindtextdomain("domain_po", "./path_to_locale", "po") ;
//Always do this after a `setlocale` or a `bindtextdomain` call.
iJS.i18n.try_load_lang() ; //will load and parse messages data from the setting catalog.
//now print your messages
alert( iJS.i18n.gettext("messages to be translated") ) ;
//or use the common way to print your messages
alert( iJS._("another way to get translated messages") ) ;

Esta biblioteca parece ser la mejor aplicación de getText en javascript:

http://messageformat.github.io/Jed/

https://github.com/messageformat/Jed

ejemplo a partir de la documentación:

<script src="jed.js"></script>
<script>
var i18n = new Jed({
  // Generally output by a .po file conversion
  locale_data : {
    "messages" : {
      "" : {
        "domain" : "messages",
        "lang"   : "en",
        "plural_forms" : "nplurals=2; plural=(n != 1);"
      },
      "some key" : [ "some value"]
    }
  },
  "domain" : "messages"
});

alert( i18n.gettext( "some key" ) ); // alerts "some value"
</script>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top