62
задан 24 October 2008 в 15:45

5 ответов

Когда я создал многоязычные сайты прежде (не очень большие, таким образом, это не могло бы масштабироваться слишком хорошо), я сохраняю серию файлов "языка":

  • lang.en.js
  • lang.it.js
  • lang.fr.js

Каждый из файлов объявляет объект, который является в основном просто картой от ключевого слова до фразы языка:

// 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');
70
ответ дан 31 October 2019 в 13:35

Просто найденный хорошей статьей о i18n в JavaScript:
http://24ways.org/2007/javascript-internationalisation

, Хотя простой поиск Google с i18n + JavaScript показывает много альтернатив.

В конце, это зависит от того, как глубокий Вы хотите, чтобы это было. Для нескольких языков единственный файл достаточно.

Вы могли использовать платформу как Jquery, использовать промежуток, чтобы отождествить текст (с классом) и затем использовать идентификатор каждого промежутка для нахождения соответствующего текста на выбранном языке.
1 Строка JQuery, сделанного.

5
ответ дан 31 October 2019 в 13:35

Необходимо изучить то, что было сделано в классических компонентах JS - берут вещи как Dojo, Расширение, FCKEditor, TinyMCE, и т.д. Вы найдете много хороших идей.

Обычно это заканчивает тем, что было некоторыми атрибутами, которые Вы устанавливаете на тегах, и затем Вы заменяете содержание тега с переводом, найденным в Вашем файле перевода, на основе значения атрибута.

Одна вещь иметь в виду, эволюция набора языка (когда Ваш код развивается, будете, необходимо снова перевести все это или не). Мы сохраняем переводы в Файлах ПО (Гну Gettext), и у нас есть сценарий, который преобразовывает Файл ПО в готовый для использования Файлов JS.

, Кроме того:

  • Всегда использование UTF-8 - это звучит глупым, но если Вы не будете в utf-8 от запуска (голова HTML + JS, кодирующий), то Вы будете промахом быстро.
  • Использование английская строка как ключ к Вашим переводам - этот путь Вы не закончите с вещами как: Ленг. Приветствие = 'Привет мир' - но Ленг ['Привет мир'] = 'Привет мир';
1
ответ дан 31 October 2019 в 13:35

Существуют, несколько вещей, которые необходимо иметь в виду при разработке многоязыковой поддержки:

1 - Отдельный код от данных (т.е. делают правильно не строки твердого кода в Ваши функции)

2 - создают функцию рычага форматирования для контакта с различиями в локализации. Разрешение formattable строк (" {0} ") лучше, чем конкатенация ( "Добро пожаловать в" + значение ) по большому количеству причин:

  • на некоторых языках, число отформатировано как 1.234.678,00 вместо 1 234 567,00
  • , плюрализация часто не так проста как добавление "s" в конце исключительного
  • , грамматические правила отличаются и могут влиять на порядок вещей, таким образом, необходимо позволить динамическим данным быть добавленными после рычага перевода: например, "Добро пожаловать в {0} " превращается " {0} он youkoso" на японском языке (это происходит на в значительной степени каждом языке, обратите внимание).

3 - Удостоверяются, что можно на самом деле отформатировать строки после выполнения рычага перевода, таким образом, можно снова использовать ключи.

4 - не Делают, ни под каким circunstance, сцепляют выводы базы данных с утилитой переводчика. Если Вы имеете многоязычные данные, составляете отдельные таблицы / строки в Вашей базе данных. Я видел, что люди понимают эту легкую задачу превратно справедливо часто (обычно для стран и состояний/областей в формах).

5 - Создают явные правила методов кодирования для создания ключей. Служебная функция средства форматирования (который посмотрит что-то как [1 118], переводят ("привет мир") , возьмет ключ в качестве параметра, и ключи с небольшими изменениями делают maintainance очень раздражающий. Например, Вы могли бы закончить с тремя ключами в следующем примере: "введите Вас имя", "вводят Ваше имя": "вводят Ваше имя":. выберите один формат (например, никакое двоеточие, обрезанное), и поймайте несоответствия в обзорах кода. Не делайте этой фильтрации программно, поскольку она может инициировать ложные положительные стороны.

6 - Быть внимательным, что разметка HTML могла потенциально быть необходима в таблице преобразования (например, если Вы нуждаетесь к полужирному в слове в предложении или имеете сноску медицинские ссылки). Тест для этого экстенсивно.

7 - существует несколько способов импортировать строки языка. Идеально, Вы должны иметь несколько версий language.lang.js файла, переключателя между ними с серверным кодом, и сослаться на файл от нижней части файла HTML. Получение по запросу файла через Ajax является также альтернативой, но могло представить задержки. Слияние language.js в Ваш основной файл кода не желательно, так как Вы теряете преимущества кэширования файлов.

8 - Тест с Вашими выходными языками. Это звучит глупым, но я видел серьезную ошибку однажды, потому что программист не потрудился проверять на существование "Г©" в ключе.

51
ответ дан 31 October 2019 в 13:35

Таким образом, можно использовать один 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-коде.

0
ответ дан 31 October 2019 в 13:35