Локализация с помощью JQuery?
Я понятия не имею, как обрабатывать локализацию с помощью JQuery. Я хочу установить innerHTML
с немецким текстом, но если браузер настроен на использование английского языка, тогда я хочу установить английский текст.
В PHP я использую gettext для таких вещей, но как это сделать в JavaScript/jQuery?
Ответы
Ответ 1
Для этого нет простого решения. Я бы, вероятно, сделал несколько сценариев с языковыми текстами для каждого языка и включил их в PHP. Поэтому, если кто-то использует английскую версию вашего сайта, вы бы включили только английский файл, если кто-то использует немецкую версию, вы бы включили немецкий языковой файл и т.д.
Пример:
// your script logic
myscript.js
// language texts
myscript.en.js
myscript.de.js
myscript.it.js
...
Вы можете определить все языковые файлы:
LANG = {
txt1: 'English text1',
txt2: 'English text2'
...
};
Убедитесь, что вы включили только один из них в свой HTML и обязательно включите файл языка в первую очередь.
<script type="text/javascript" src="myscript.de.js"></script>
<script type="text/javascript" src="myscript.js"></script>
Затем вы можете использовать эти локализованные тексты в своем основном script, например:
$(document).ready(function () {
alert(LANG.txt1);
});
Что лучше всего в том, что ваша логика (myscript.js
в этом примере) не должна беспокоиться о локализации, и вам не придется ее менять, если вы хотите добавить новый языковой файл.
Ответ 2
Я еще не использовал его, но я думаю об использовании jquery-localize для проекта. Если вы не возражаете использовать перевод атрибутов 'rel', определенных на ваших элементах, тогда он выглядит как хороший вариант.
Пример из README:
HTML
<p rel="localize[title]">Tracker Pro XT Deluxe</p>
<p rel="localize[search.placeholder]">Search...</p>
<p rel="localize[search.button]">Go!</p>
<p rel="localize[footer.disclaimer]">Use at your own risk.</p>
<p rel="localize[menu.dashboard]">Dashboard</p>
<p rel="localize[menu.list]">Bug List</p>
<p rel="localize[menu.logout]">Logout</p>
приложения es.json
{
title: "Tracker Pro XT Deluxo",
search: {
placeholder: "Searcho...",
button: "Vamos!"
},
footer: {
disclaimer: "Bewaro."
},
menu: {
dashboard: "Dashboardo",
list: "Bug Listo",
logout: "Exito"
}
}
Локализовать его!
$("rel*=localize").localize("application", { language: "es" })
Ответ 3
Вам вообще не нужен JQuery.
Объект навигатора в javascript (http://www.comptechdoc.org/independent/web/cgi/javamanual/javanavigator.html) содержит свойство userLanguage (IE) и языка (Netscape/Firefox), которое установлено по текущему языку браузера.
Чтобы решить ваш пример, вы можете использовать что-то вроде:
var textToSet = null;
var userLang = null;
/*
-if userLanguage exists they're in IE, else firefox
-get the first two letters in lowercase to guarantee
an easily evaluated base language
*/
if(navigator.userLanguage) baseLang = substring(navigator.userLanguage,0,2).toLowerCase();
else baseLang = substring(navigator.language,0,2).toLowerCase();
//check languages
switch(baseLang)
{
case "de":
//German
textToSet = "german text";
break;
default:
textToSet = "english text";
}
document.getElementById('elementToSetTextInto').innerHTML = textToSet;
Имейте в виду, что вам может понадобиться другой текст, основанный на базовом языке и локали. В этом случае ищите "en-us", "de-de". Сайты для кодов культуры легко доступны для поиска в googled (1 ссылка только на первый пост;))
Надеюсь, что это сработает для вас.
Ответ 4
Поскольку вы уже используете gettext с вашим php-приложением, вам следует изучить эту реализацию javascript gettext
Он не использует скомпилированные файлы .mo, но он будет использовать ваши файлы .po, которые у вас уже есть.
Этот метод имеет то преимущество, что управляет всеми вашими переводами в одном месте.
Ответ 5
Попробуйте. Кнопка TranslateThis - это легкий виджет перевода Javascript. Он быстро переводит любую страницу с помощью AJAX и API Google Language.
Здесь...
Ответ 6
Еще один вариант, который вы могли бы изучить, - предлагаемый Microsoft jquery-global плагин. Это все еще в бета-версии.