web-dev-qa-db-fra.com

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 me dire comment obtenir facilement les traductions dans la langue choisie en JavaScript?.

27

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.

18
Pekka 웃

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 + "}";
}
13
vdboor

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

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.

Cliquez ici

3
Praveen D

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.

1
user187291

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") ) ;
1
tnga

Un script Perl appelé po2json générera json à partir d’un fichier .po.

1
dsas

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>
0
abumalick