Traduction en JavaScript comme gettext en PHP?
j'utilise gettext
dans mon code PHP, mais j'ai un gros problème. Tous mes fichiers JavaScript ne sont pas affectés par la traduction, quelqu'un peut-il m'en dire un moyen facile d'obtenir les traductions dans la langue choisie en JavaScript.
7 réponses
la façon la plus simple est d'avoir un fichier PHP pour écrire les traductions à partir de gettext
dans les variables 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"); ?>"
et de l'inclure:
<script type="text/javascript" src="js_lang.php"></script>
je recommande également cette méthode en conjonction avec la traduction des plugins S. Mark mentions (qui sont très intéressants!).
vous pouvez définir le dictionnaire dans l'en-tête de la page courante, aussi, sans inclure un fichier externe, mais de cette façon, vous devriez regarder et envoyer les données à chaque chargement de page - tout à fait inutile, comme un dictionnaire a tendance à changer très rarement.
j'exporte généralement les traductions dans une structure JavaScript:
var app = {}
var app.translations = {
en: { hello: "Hello, World!"
, bye: "Goodbye!"
}
, nl: { hello: "Hallo, Wereld!"
, bye: "Tot ziens!"
}
};
la langue courante des textes de page peut être définie en utilisant:<html xml:lang="en" lang="nl">
ceci peut être lu en JavaScript:
var curentLanguage = document.documentElement.lang || "en";
app.lang = app.translations[ currentLanguage ] || app.translations.en;
Et puis vous pouvez écrire du code comme ceci:
alert( app.lang.hello );
Éventuellement, un i18n()
ou gettext()
fonction peut apporter une certaine intelligence, pour retourner le texte par défaut si la clé n'existe pas). Par exemple:
function gettext( key )
{
return app.lang[ key ] || app.translations.en[ key ] || "{translation key not found: " + key + "}";
}
, jQuery i18n ou jQuery localisation
un exemple pour jQuery i18n, et bien sûr vous devez générer le dictionnaire basé sur JSON à partir du fichier de langue à partir 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 (archivé lien) est la meilleure implémentation de GNU gettext spec. Premier paquet de téléchargement JSGETTEXT et inclure dans votre page /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>
code javascript par exemple
window.onload = function init(){
var gt = new Gettext({ 'domain' : 'messages' });
alert(gt.gettext('Hello world'));
}
Pour référence trouverez ci-dessous le lien. Il fonctionne sans conversion .fichier js .php.
Vous pouvez rendre votre vie beaucoup plus facile si vous vous débarrasser de la mauvaise habitude d'utiliser des littéraux de chaîne dans votre code. C'est, au lieu de
alert("Some message")
utiliser
alert($("#some_message_id").text())
où "# some_message_id " est un div caché ou une portée générée du côté du serveur.
pour L'implémentation JavaScript de L'API GNU gettext ces liens peuvent être aussi useful:
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") ) ;
comme indice supplémentaire il y a un script perl appelé po2json qui va générer json à partir de A.fichier po.