Frage

Ich verwende gettext in meinem PHP-Code, aber ich habe ein großes Problem. Alle meine JavaScript-Dateien werden nicht durch die Übersetzung betroffen, kann mir jemand sagen, eine einfache Möglichkeit, wie auch die Übersetzungen in der gewählten Sprache in JavaScript zu erhalten.

War es hilfreich?

Lösung

Der einfachste Weg ist mit einer PHP-Datei, die Übersetzungen von gettext in JavaScript-Variablen schreiben.

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"); ?>"

und dann ist es:

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

Ich würde diese Methode auch in Verbindung mit den Übersetzungs Plugins empfehlen St. Markus erwähnt (die sehr interessant sind!).

Sie können das Wörterbuch in der aktuellen Seite Header definieren, auch ohne eine externe Datei, einschließlich, aber auf diese Weise, würden Sie die Daten auf jeder Seite Last schauen müssen und senden - ganz unnötig, da ein Wörterbuch zu ändern neigt sehr selten.

Andere Tipps

I Export im Allgemeinen der Übersetzungen in einer JavaScript-Struktur:

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

Die aktuelle Sprache der Seite Texte definiert werden kann: <html xml:lang="en" lang="nl">

Dies kann in JavaScript gelesen werden:

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

Und dann können Sie Code wie folgt schreiben:

alert( app.lang.hello );

Optional kann eine i18n() oder gettext() Funktion kann etwas Intelligenz, bringt den Standardtext zurück, wenn der Schlüssel nicht existiert). Zum Beispiel:

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

Versuchen Sie, jQuery i18n oder jQuery Lokalisierung

Ein Beispiel für jQuery i18n und natürlich Sie JSON basierten Wörterbuch von Sprachdatei von PHP generieren müssen

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


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

JSGettext ( archivierten Link ) ist beste Umsetzung von GNU gettext spec. Zuerst herunterladen JSGETTEXT Paket und sind auf Ihrer Seite /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>

JavaScript-Code zum Beispiel

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

Als Referenz Link unten finden. Es funktioniert gut, ohne JS-Datei in .php zu konvertieren.

Klicken Sie hier

Sie können Ihr Leben viel einfacher machen, wenn Sie schlechte Gewohnheit loszuwerden Stringliterale in Ihrem Code zu verwenden. Das heißt, anstelle von

 alert("Some message")

Verwendung

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

, wobei „#some_message_id“ ist eine versteckte div oder auf der Serverseite erzeugt Spanne.

Als weiterer Hinweis gibt es eine Perl-Skript namens po2json die json aus einer .po-Datei generieren wird.

Für JavaScript-Implementierung von GNU gettext API können diese Verbindungen auch nützlich sein:
     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") ) ;

Diese Bibliothek scheint die beste Implementierung von getText in javascript:

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

https://github.com/messageformat/Jed

Beispiel aus der Dokumentation:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top