Я использую gettext
в моем коде PHP, но у меня есть большая проблема. Все мои файлы JavaScript не затронуты переводом, может кто-то говорить мне простой способ получить переводы на выбранном языке в JavaScript также.
Самый простой способ - в 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 (которые очень интересны!).
Вы можете определить словарь и в заголовке текущей страницы, не включая внешний файл, но в этом случае вам придется искать и отправлять данные при каждой загрузке страницы, что совершенно излишне, поскольку словарь, как правило, меняется очень редко.
Вы можете значительно облегчить себе жизнь, если избавитесь от дурной привычки использовать строковые литералы в своем коде. То есть вместо
alert("Some message")
используйте
alert($("#some_message_id").text())
, где «#some_message_id» - это скрытый div или диапазон, сгенерированный на стороне сервера.
Попробуйте, jQuery i18n или jQuery localisation
Пример для 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'));
Я обычно экспортировал переводы в структуре JavaScript:
var app = {}
var app.translations = {
en: { hello: "Hello, World!"
, bye: "Goodbye!"
}
, nl: { hello: "Hallo, Wereld!"
, bye: "Tot ziens!"
}
};
Текущий язык текстов страниц можно определить с помощью:
Это можно прочитать в 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 + "}";
}