Когда я создал многоязычные сайты прежде (не очень большие, таким образом, это не могло бы масштабироваться слишком хорошо), я сохраняю серию файлов "языка":
Каждый из файлов объявляет объект, который является в основном просто картой от ключевого слова до фразы языка:
// lang.en.js
lang = {
greeting : "Hello"
};
// lang.fr.js
lang = {
greeting : "Bonjour"
};
Динамично загружают один из тех файлов и затем всего, что необходимо сделать, ссылка ключ из карты:
document.onload = function() {
alert(lang.greeting);
};
существуют, конечно, много других способов сделать это и много способов сделать этот стиль, но лучше: инкапсуляция всего этого в функцию так, чтобы недостающая фраза из Вашего "словаря" могла быть обработана корректно или даже сделать все это с помощью ООП, и позволяют ему управлять динамическим включая файлов, это могло, возможно, даже потянуть селекторы языка для Вас, и т.д.
var l = new Language('en');
l.get('greeting');
Просто найденный хорошей статьей о i18n в JavaScript:
http://24ways.org/2007/javascript-internationalisation
, Хотя простой поиск Google с i18n + JavaScript показывает много альтернатив.
В конце, это зависит от того, как глубокий Вы хотите, чтобы это было. Для нескольких языков единственный файл достаточно.
Вы могли использовать платформу как Jquery, использовать промежуток, чтобы отождествить текст (с классом) и затем использовать идентификатор каждого промежутка для нахождения соответствующего текста на выбранном языке.
1 Строка JQuery, сделанного.
Необходимо изучить то, что было сделано в классических компонентах JS - берут вещи как Dojo, Расширение, FCKEditor, TinyMCE, и т.д. Вы найдете много хороших идей.
Обычно это заканчивает тем, что было некоторыми атрибутами, которые Вы устанавливаете на тегах, и затем Вы заменяете содержание тега с переводом, найденным в Вашем файле перевода, на основе значения атрибута.
Одна вещь иметь в виду, эволюция набора языка (когда Ваш код развивается, будете, необходимо снова перевести все это или не). Мы сохраняем переводы в Файлах ПО (Гну Gettext), и у нас есть сценарий, который преобразовывает Файл ПО в готовый для использования Файлов JS.
, Кроме того:
Существуют, несколько вещей, которые необходимо иметь в виду при разработке многоязыковой поддержки:
1 - Отдельный код от данных (т.е. делают правильно не строки твердого кода в Ваши функции)
2 - создают функцию рычага форматирования для контакта с различиями в локализации. Разрешение formattable строк (" {0} ") лучше, чем конкатенация ( "Добро пожаловать в" + значение ) по большому количеству причин:
3 - Удостоверяются, что можно на самом деле отформатировать строки после выполнения рычага перевода, таким образом, можно снова использовать ключи.
4 - не Делают, ни под каким circunstance, сцепляют выводы базы данных с утилитой переводчика. Если Вы имеете многоязычные данные, составляете отдельные таблицы / строки в Вашей базе данных. Я видел, что люди понимают эту легкую задачу превратно справедливо часто (обычно для стран и состояний/областей в формах).
5 - Создают явные правила методов кодирования для создания ключей. Служебная функция средства форматирования (который посмотрит что-то как [1 118], переводят ("привет мир") , возьмет ключ в качестве параметра, и ключи с небольшими изменениями делают maintainance очень раздражающий. Например, Вы могли бы закончить с тремя ключами в следующем примере: "введите Вас имя", "вводят Ваше имя": "вводят Ваше имя":. выберите один формат (например, никакое двоеточие, обрезанное), и поймайте несоответствия в обзорах кода. Не делайте этой фильтрации программно, поскольку она может инициировать ложные положительные стороны.
6 - Быть внимательным, что разметка HTML могла потенциально быть необходима в таблице преобразования (например, если Вы нуждаетесь к полужирному в слове в предложении или имеете сноску медицинские ссылки). Тест для этого экстенсивно.
7 - существует несколько способов импортировать строки языка. Идеально, Вы должны иметь несколько версий language.lang.js файла, переключателя между ними с серверным кодом, и сослаться на файл от нижней части файла HTML. Получение по запросу файла через Ajax является также альтернативой, но могло представить задержки. Слияние language.js в Ваш основной файл кода не желательно, так как Вы теряете преимущества кэширования файлов.
8 - Тест с Вашими выходными языками. Это звучит глупым, но я видел серьезную ошибку однажды, потому что программист не потрудился проверять на существование "Г©" в ключе.
Таким образом, можно использовать один js код для много языка много словом:
var strings = new Object();
if(navigator.browserLanguage){
lang = navigator.browserLanguage;
}else{
lang = navigator.language;
}
lang = lang.substr(0,2).toLowerCase();
if(lang=='fa'){/////////////////////////////Persian////////////////////////////////////////////////////
strings["Contents"] = "فهرست";
strings["Index"] = "شاخص";
strings["Search"] = "جستجو";
strings["Bookmark"] = "ذخیره";
strings["Loading the data for search..."] = "در حال جسنجوی متن...";
strings["Type in the word(s) to search for:"] = "لغت مد نظر خود را اینجا تایپ کنید:";
strings["Search title only"] = "جستجو بر اساس عنوان";
strings["Search previous results"] = "جستجو در نتایج قبلی";
strings["Display"] = "نمایش";
strings["No topics found!"] = "موردی یافت نشد!";
strings["Type in the keyword to find:"] = "کلیدواژه برای یافتن تایپ کنید";
strings["Show all"] = "نمایش همه";
strings["Hide all"] = "پنهان کردن";
strings["Previous"] = "قبلی";
strings["Next"] = "بعدی";
strings["Loading table of contents..."] = "در حال بارگزاری جدول فهرست...";
strings["Topics:"] = "عنوان ها";
strings["Current topic:"] = "عنوان جاری:";
strings["Remove"] = "پاک کردن";
strings["Add"] = "افزودن";
}else{//////////////////////////////////////English///////////////////////////////////////////////////
strings["Contents"] = "Contents";
strings["Index"] = "Index";
strings["Search"] = "Search";
strings["Bookmark"] = "Bookmark";
strings["Loading the data for search..."] = "Loading the data for search...";
strings["Type in the word(s) to search for:"] = "Type in the word(s) to search for:";
strings["Search title only"] = "Search title only";
strings["Search previous results"] = "Search previous results";
strings["Display"] = "Display";
strings["No topics found!"] = "No topics found!";
strings["Type in the keyword to find:"] = "Type in the keyword to find:";
strings["Show all"] = "Show all";
strings["Hide all"] = "Hide all";
strings["Previous"] = "Previous";
strings["Next"] = "Next";
strings["Loading table of contents..."] = "Loading table of contents...";
strings["Topics:"] = "Topics:";
strings["Current topic:"] = "Current topic:";
strings["Remove"] = "Remove";
strings["Add"] = "Add";
}
можно добавить другого Ленга в этом коде и установить объекты на HTML-коде.