пятница, 21 февраля 2014 г.

Локализация

Чтобы перевести ваше расширение на много языков, необходимо создать папку _locales, в ней отдельные папки для каждого языка, например en, ru, fr и так далее. В каждой из этих папок должен быть файл message.json, в котором будут храниться переводы всех сообщений.

Список локалей, которые поддерживает Chrome можно найти тут.

Содержимое message.json выглядит примерно вот так:

{
"name": {
"message": "My extension name",
"description": "Name of extension."
},
"search_string": {
"message": "hello%20world",
"description": "The string we search for. Put %20 between words that go together."
},
...
}

Имя – ему соответствует значение и описание. Описание – чисто для справки, чтоб не забыть самому что это и зачем. Далее заданное значение будет подставляться везде где оно необходимо, но не автоматически – замену нужно указать явно.


В манифесте и css:

__MSG_messagename__

В скриптах:

chrome.i18n.getMessage("messagename")

Про локализацию HTML в документации ни сказано ни слова. Но в принципе это возможно через манифест и скрипты. Нужно создавать отдельные html файлы на разных языках и указывать имя файла через локализованное значение. Например использовать __MSG_popupname__ вместо явного указания имени файла для всплывающего окна. А  в файлах локализации задавать popup_ru.html, popup_en.html и т.д.


В манифесте обязательно должна быть указана локаль по умолчанию, например:

{
"name" : "__MSG_name__"
"default_locale" : "en"
}

Вместо __MSG_name__ будет подставлено значение “My extension name” на текущем языке, а если он не указан – на английском


Предопределенные сообщения
























ИмяОписание
@@extension_id Идентификатор расширения. Может быть использован для формирования URL. Например контентным скриптом чтобы вставить картинку из расширения в текущую веб-страницу:
body {
background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
}
Примечание: Нельзя использовать в манифесте
@@ui_locale Текущая локаль.
@@bidi_dir Направление текста ltr/rtl
@@bidi_reversed_dir значение обратное @@bidi_dir
@@bidi_start_edge Если @@bidi_dir = "ltr", тогда "left" иначе "right".
@@bidi_end_edge Если @@bidi_dir = "ltr", тогда "right" иначе "left".

Поиск локализованного сообщения



  1. Сначала ищется сообщение для локали точно соответствующей локали пользователя. Например “en_US”.
  2. Если не найдено, и локаль имеет суффикс (в данном случае “_US)” – сообщение ищется в локали без суффикса – “en”.
  3. Если не найдено ничего, тогда берется локаль по умолчанию, прописанная в манифесте.

Плейсхолдеры


Предположим, вы хотите локализовать приветствие:



“Здравствуйте [имя пользователя]. Сегодня [Такое-то число]. Добро пожаловать на наш сайт!”.


Это что же, отдельное сообщение для здравствуйте, еще одно для “сегодня”, и еще одно для “Добро пожаловать…” ? А ведь на другом языке фраза может быть скомпонована по другому, но в нее нужно вставить те же значения – имя пользователя и сегодняшнее число. Как быть? Для этого есть placeholders.

welcome: { 
message: "Здравствуйте $username$. Сегодня $day$. Добро пожаловать на наш сайт!",
description: "Приветствие пользователю",
placeholders: {
username : {
content: "$1",
example: "Вася Пупкин"
}
day : {
content: "$2",
example: "30 февраля"
}
}
}
function getMessage() {
var message = chrome.i18n.getMessage("welcome", ["Иван", "1 мая"]);
document.getElementById("welcometext").innerHTML = message;
}

2 комментария:

  1. Анонимный21 июля 2017 г., 06:35

    Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Анонимный28 июля 2017 г., 07:11

    Если необходимо перевести сайт, игру, ПО, документацию на иностранный язык я бы порекомендовала переводческую компанию Alconost alconost.com. Она работает по всему миру и предоставляет услуги локализации и перевода на 68 языков. Я работаю в Alconost Inc. Alconost предоставляет профессиональные услуги локализации для разработчиков программного обеспечения и игр с 2004 года. Лингвистическое тестирование, облачная платформа для управления переводами с API, непрерывная локализация, выделенный менеджер проекта 24/7.

    ОтветитьУдалить