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.

27
demandé sur bluish 2010-03-08 11:41:51

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.

17
répondu Pekka 웃 2010-03-08 08:53:47

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 + "}";
}
12
répondu vdboor 2010-03-08 09:08:57

, 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'));
7
répondu YOU 2010-03-08 08:47:20

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.

Cliquez ici

3
répondu Praveen D 2017-01-04 09:05:53

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.

1
répondu user187291 2010-03-08 09:19:12

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") ) ;
1
répondu tnga 2015-11-13 15:46:49

comme indice supplémentaire il y a un script perl appelé po2json qui va générer json à partir de A.fichier po.

0
répondu dsas 2011-04-08 15:11:27