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 me dire comment obtenir facilement les traductions dans la langue choisie en JavaScript?.
Le moyen le plus simple est d’avoir un fichier PHP qui écrit les traductions de gettext
dans des 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 ensuite l'inclure:
<script type="text/javascript" src="js_lang.php"></script>
Je recommanderais également cette méthode en conjonction avec les plugins de traduction mentionnés par S.Mark (qui sont très intéressants!).
Vous pouvez également définir le dictionnaire dans l'en-tête de la page en cours, sans inclure de fichier externe, mais vous devrez alors rechercher et envoyer les données à chaque chargement de page, ce qui est plutôt inutile, car 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 actuelle des textes de page peut être définie avec: <html xml:lang="en" lang="nl">
Cela 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 );
Facultativement, une fonction i18n()
ou gettext()
peut apporter une certaine intelligence pour renvoyer 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 + "}";
}
Essayez, jQuery i18n ou localisation jQuery
Un exemple pour jQuery i18n, et bien sûr vous devez générer un dictionnaire basé sur JSON à partir d'un fichier de langage à 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 ( lien archivé ) est la meilleure implémentation de GNU gettext spec. Commencez par télécharger le package 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, trouver ci-dessous le lien. Cela fonctionne très bien sans convertir le fichier .js en .php.
Vous pouvez rendre votre vie beaucoup plus facile si vous vous débarrassez de la mauvaise habitude d'utiliser des littéraux de chaîne dans votre code. C'est, au lieu de
alert("Some message")
utilisation
alert($("#some_message_id").text())
où "#some_message_id" est une division ou une étendue masquée générée côté serveur.
Pour l'implémentation JavaScript de l'API GNU gettext, ces liens peuvent également être utiles:
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") ) ;
Un script Perl appelé po2json générera json à partir d’un fichier .po.
Cette bibliothèque semble être la meilleure implémentation de getText en javascript:
http://messageformat.github.io/Jed/
https://github.com/messageformat/Jed
exemple de la documentation:
<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>