2010-03-08 15 views

risposta

17

Il modo più semplice è avere un file PHP scrittura le traduzioni da gettext in variabili 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"); ?>" 

e poi includerlo: (!, Che sono molto interessanti)

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

consiglierei anche questo metodo in combinazione con la traduzione plugin S.Marco menzioni .

Puoi anche definire il dizionario nell'intestazione della pagina corrente, senza includere un file esterno, ma in questo modo, dovresti cercare e inviare i dati su ogni caricamento di pagina - abbastanza inutile, come un dizionario tende a cambia molto raramente.

+0

puoi provare a maby per ottenere un esempio. e incollarlo su http://pastebin.org? :) – ParisNakitaKejser

+0

@neonman esempio per cosa esattamente? –

+0

penso di avere un idé ora :) carri armati per aiuto, userò le tue risposte;) – ParisNakitaKejser

7

prova, jQuery i18n o jQuery localisation

Un esempio per jQuery i18n, e, naturalmente, è necessario generare dizionario basato JSON dal file della lingua da PHP

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


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

ho nevere tryt che, e la sua ritornassi in combinasion Pentecoste JSON, avvisi e altro ancora. – ParisNakitaKejser

+0

o si potrebbe provare http://i18next.com viene fornito con il convertitore gettext to json aggiuntivo. ed è completo. – jamuhl

11

Io generalmente esportare le traduzioni in una struttura JavaScript:

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

La lingua corrente dei testi della pagina può essere definita utilizzando: <html xml:lang="en" lang="nl">

Questo può essere letto in JavaScript:

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

E quindi è possibile scrivere codice come questo:

alert(app.lang.hello); 

Opzionalmente, una funzione o i18n()gettext() può portare un po 'di intelligenza, di restituire il testo predefinito se la chiave non esiste). Ad esempio:

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

È possibile semplificare la vita se si elimina la brutta abitudine di utilizzare letterali stringa nel codice. Cioè, invece di

alert("Some message") 

uso

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

dove "#some_message_id" è un div nascosti o luce generati sul lato server.

0

Come ulteriore suggerimento c'è uno script perl chiamato po2json che genererà json da un file .po.

3

JSGettext (archived link) è la migliore implementazione della specifica gettext di GNU. Prima scaricare il pacchetto JSGETTEXT e includerlo nella tua pagina /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> 

codice javascript per esempio

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

Per avere un riferimento di seguito trovate collegamento. Funziona bene senza convertire il file .js in .php.

Click here

+0

la risposta al solo collegamento non è buona perché il collegamento potrebbe essere morto. –

+0

risposta aggiornata con link. –

+1

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

1

Per implementazione di JavaScript GNU gettext API questi collegamenti possono essere utili anche:
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

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il link per riferimento. Le risposte di solo collegamento non saranno utili se la pagina collegata esterna cambia in futuro – Panther

+0

Ok è stato risolto – tnga