Domanda

Sto usando gettext nel mio codice PHP, ma ho un grosso problema. Tutti i miei file JavaScript non sono influenzati dalla traduzione, qualcuno può dirmi un modo facile per ottenere le traduzioni in lingua scelta in JavaScript pure.

È stato utile?

Soluzione

Il modo più semplice è avere un file PHP scrivere le traduzioni del 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:

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

Io consiglio anche questo metodo in combinazione con i plugin di traduzione S.Marco menziona (che sono molto interessante!).

È possibile definire il dizionario nell'intestazione della pagina corrente, anche, senza includere un file esterno, ma in questo modo, si dovrebbe guardare in alto e inviare i dati a ogni caricamento della pagina - del tutto inutili, come un dizionario tende a cambiare molto raramente.

Altri suggerimenti

Io in genere 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 poi è possibile scrivere codice in questo modo:

alert( app.lang.hello );

In alternativa, 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 + "}";
}

Prova, jQuery i18n o jQuery localizzazione

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'));

JSGettext ( link archiviata) è migliore implementazione di GNU gettext spec. In primo luogo scaricare il pacchetto JSGETTEXT e includere 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>

Il codice JavaScript ad esempio

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

Per riferimento trovano sotto collegamento. Sta funzionando bene anche senza la conversione di file da .php .js.

Clicca qui

È possibile rendere la vita molto più facile se si sbarazzarsi di cattiva abitudine di utilizzare stringhe letterali nel codice. Cioè, invece di

 alert("Some message")

utilizzo

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

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

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

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

Questa libreria sembra la migliore implementazione di getText in javascript:

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

https://github.com/messageformat/Jed

esempio dalla documentazione:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top