Traducción en JavaScript como gettext en PHP?

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

La forma más fácil es tener un file PHP escribiendo 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 includelo:

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

También recomendaría este método junto con los complementos de traducción que S.Mark menciona (¡que son muy interesantes!).

También puede definir el dictionary en el encabezado de la página actual, sin include un file externo, pero de esa manera, deberá search y enviar los datos en cada carga de página, lo cual es innecesario, ya que un dictionary tiende a cambiar muy raramente.

Generalmente exporto las 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 texts de la página 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 luego puedes escribir código como este:

 alert( app.lang.hello ); 

Opcionalmente, una function i18n() o gettext() puede traer algo de inteligencia, para devolver el text pnetworkingeterminado si la key no existe. Por ejemplo:

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

Pruebe la localización jQuery i18n o jQuery

Un ejemplo para jQuery i18n, y por supuesto, necesitas generar un dictionary basado en JSON desde el file de idioma 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 implementación de la especificación gettext de GNU. Primero descargue el package JSGETTEXT e inclúyalo en 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 de javascript, por ejemplo

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

Para reference, encuentre el enlace a continuación. Está funcionando bien sin convertir el file .js a .php.

haga clic aquí

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

  alert("Some message") 

utilizar

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

donde "#some_message_id" es un div oculto o intervalo generado en el lado del server.

Para la implementación de JavaScript de la API gettext de GNU, estos enlaces también pueden ser ú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") ) ; 

Como una pista adicional, hay un script de perl llamado po2json que generará json desde un file .po.