Я использую gettext
в своем PHP-коде, но у меня большая проблема. Перевод текста на мои файлы JavaScript не влияет на меня, может ли кто-нибудь сказать мне простой способ получить переводы на выбранном языке в JavaScript.
Перевод в JavaScript как gettext в PHP?
Ответ 1
Самый простой способ - заставить PHP файл записывать переводы из gettext
в переменные 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"); ?>"
а затем включите его:
<script type="text/javascript" src="js_lang.php"></script>
Я бы также рекомендовал этот метод в сочетании с плагинами перевода S.Mark упоминает (что очень интересно!).
Вы также можете определить словарь в текущем заголовке страницы, не включая внешний файл, но вам придется искать и отправлять данные на каждую загрузку страницы - совершенно ненужно, поскольку словарь имеет тенденцию к изменению очень редко.
Ответ 2
Я обычно экспортирую переводы в структуру JavaScript:
var app = {}
var app.translations = {
en: { hello: "Hello, World!"
, bye: "Goodbye!"
}
, nl: { hello: "Hallo, Wereld!"
, bye: "Tot ziens!"
}
};
Текущий язык текстов страниц может быть определен с помощью: <html xml:lang="en" lang="nl">
Это можно прочитать в JavaScript:
var curentLanguage = document.documentElement.lang || "en";
app.lang = app.translations[ currentLanguage ] || app.translations.en;
И тогда вы можете написать код следующим образом:
alert( app.lang.hello );
Необязательно, функция i18n()
или gettext()
может принести некоторый интеллект, чтобы вернуть текст по умолчанию, если ключ не существует). Например:
function gettext( key )
{
return app.lang[ key ] || app.translations.en[ key ] || "{translation key not found: " + key + "}";
}
Ответ 3
Попробуйте jQuery i18n или локализация jQuery
Пример для jQuery i18n, и, конечно же, вам нужно сгенерировать словарь на основе JSON из языкового файла из php
var my_dictionary = {
"some text" : "a translation",
"some more text" : "another translation"
}
$.i18n.setDictionary(my_dictionary);
$('div#example').text($.i18n._('some text'));
Ответ 4
JSGettext (заархивированная ссылка) является лучшей реализацией спецификации GNU gettext. Сначала загрузите пакет JSGETTEXT и включите его на свою страницу. /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>
код javascript, например
window.onload = function init(){
var gt = new Gettext({ 'domain' : 'messages' });
alert(gt.gettext('Hello world'));
}
Ссылка на ссылку ниже. Он отлично работает, не преобразовывая файл .js в .php.
Ответ 5
Вы можете сделать свою жизнь намного легче, если избавитесь от плохой привычки использовать строковые литералы в своем коде. То есть вместо
alert("Some message")
использование
alert($("#some_message_id").text())
где "#some_message_id" - скрытый div или span, сгенерированный на стороне сервера.
Ответ 6
В качестве еще одного намека есть perl script, называемый po2json, который будет генерировать json из файла .po.
Ответ 7
Для реализации JavaScript API GNU gettext эти ссылки также могут быть полезны:
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") ) ;
Ответ 8
Эта библиотека кажется лучшей реализацией getText в javascript:
http://messageformat.github.io/Jed/
https://github.com/messageformat/Jed
пример из документации:
<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>