2010-03-08 35 views

Respuesta

17

La forma más fácil es tener un archivo PHP de escritura las traducciones de gettext a las 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 se incluyen: (! Que son muy interesantes)

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

También recomendaría este método junto con la traducción plugins S.Mark menciona .

Puede definir el diccionario en el encabezado de la página actual, sin incluir un archivo externo, pero de esa manera, debería buscar y enviar los datos en cada carga de página, bastante innecesario, ya que un diccionario tiende a cambiar muy raramente.

+0

¿Puede usted tratar de obtener un ej. y pegarlo en http://pastebin.org? :) – ParisNakitaKejser

+0

@neonman ejemplo de qué exactamente? –

+0

creo que ahora tengo un idé :) tanques de ayuda, lo usaré responsable;) – ParisNakitaKejser

7

intento, jQuery i18n o jQuery localisation

Un ejemplo para 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')); 
+0

tengo nevere tryt eso, y su comming en combinasion whit JSON, alertas y más. – ParisNakitaKejser

+0

o puede intentarlo http://i18next.com viene con un conversor adicional de gettext a json. y tiene todas las funciones. – jamuhl

11

por lo general a la exportación LA 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 luego 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 + "}"; 
} 
1

Puede hacer que su vida sea mucho más fácil si se deshace del mal hábito de utilizar cadenas literales en su 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.

0

Como una pista adicional, hay una secuencia de comandos perl llamada po2json que generará json desde un archivo .po.

3

JSGettext (archived link) es la mejor implementación de la especificación gettext de GNU. Primero descargue el paquete 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 javascript, por ejemplo

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

Como referencia se encontró por debajo de enlace. Está funcionando bien sin convertir el archivo .js a .php.

Click here

+0

la respuesta del enlace solo no es buena ya que el enlace puede estar muerto. –

+0

respuesta actualizada con enlace. –

+1

http://www.jsdelivr.com/projects/jsgettext y https://sourceforge.net/projects/jsgettext.berlios/ – miralong

1

Para implementación de JavaScript de GNU API de 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")) ; 
+0

Aunque este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcione el enlace de referencia. Las respuestas de solo enlace no serán de ninguna utilidad si la página vinculada externa cambia en el futuro – Panther

+0

Ok ya está arreglado – tnga

Cuestiones relacionadas