31 votes

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, est-ce que quelqu'un peut me dire un moyen facile d'obtenir les traductions dans la langue choisie dans JavaScript aussi.

15voto

vdboor Points 6259

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 la page peut être définie en utilisant : <html xml:lang="en" lang="nl">

Ceci peut être lu en JavaScript :

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

Et ensuite vous pouvez écrire un code comme celui-ci :

alert( app.lang.hello );

Facultativement, un i18n() o gettext() 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 + "}";
}

8voto

YOU Points 44812

Essayez, jQuery i18n o Localisation de 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 langue en php.

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

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

4voto

PraveenD Points 735

JSGettext ( lien archivé ) est la meilleure implémentation de la spécification GNU gettext. Téléchargez d'abord le paquet JSGETTEXT et incluez-le 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="http://stackoverflow.com/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 pour l'exemple

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

Pour référence, trouvez le lien ci-dessous. Cela fonctionne bien sans convertir le fichier .js en .php.

Cliquez ici

3voto

LazNiko Points 595

Pour votre information, voici une solution très simple (mais qui fait l'affaire) : http://www.zomeoff.com/jsin/

2voto

user187291 Points 28951

Vous pouvez vous faciliter la vie en vous débarrassant de la mauvaise habitude d'utiliser des chaînes de caractères dans votre code. C'est-à-dire qu'au lieu de

 alert("Some message")

utiliser

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

où "#some_message_id" est un div ou span caché généré côté serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X