Локализация блоков

Blockly поддерживает определения блоков, которые можно локализовать на языке пользователя. Благодаря использованию таблиц строк строки сообщений в определении блока JSON могут адаптировать входные данные, поля и метки в соответствии со словарным запасом языка, порядком слов и направлением.

блок lists_repeat на английском языкеблок lists_repeat на испанском языкеблок lists_repeat на корейскомБлок lists_repeat на арабском языке, написанный справа налево

Во всех этих случаях используется одно и то же определение блока JSON:

// Block for creating a list with one element repeated.
{
  "type": "lists_repeat",
  "message0": "%{BKY_LISTS_REPEAT_TITLE}",
  "args0": [
    {
      "type": "input_value",
      "name": "ITEM"
    },
    {
      "type": "input_value",
      "name": "NUM",
      "check": "Number"
    }
  ],
  "output": "Array",
  "colour": "%{BKY_LISTS_HUE}",
  "tooltip": "%{BKY_LISTS_REPEAT_TOOLTIP}",
  "helpUrl": "%{BKY_LISTS_REPEAT_HELPURL}"
}

Строковая таблица

Пример lists_repeat включает несколько строк "%{BKY_...}" . Каждый из них является ссылкой на строку в таблице строк Blockly.Msg . Когда создается экземпляр блока, Blockly пытается заменить строку значением.

Например, %{BKY_LISTS_REPEAT_TITLE} заменяется значением Blockly.Msg['LISTS_REPEAT_TITLE'] , если оно существует. Если значение не существует, нотация %{BKY_...} остается на месте, и Blockly выдает предупреждение об отсутствующем переводе.

Как показано в примере, обозначение работает в нескольких местах. Сообщения и подсказки позволяют заменять видимые пользователю строки. Аналогичным образом, в раскрывающихся полях также можно использовать обозначение текста элемента. URL-адрес справки может быть локализован, чтобы гарантировать, что пользователь будет перенаправлен на аналогично локализованную страницу. И, наконец, значение colour может использовать обозначение, помогающее централизовать палитру блоков.

Если вы используете реализацию JavaScript и не планируете менять язык пользователя во время выполнения, возможно, вам будет проще использовать прямую ссылку. Например, Blockly.Msg['LISTS_REPEAT_TITLE'] или Blockly.Msg.LISTS_REPEAT_TITLE' .

Таблицы строк загружаются через любой из файлов .js для конкретного языка в msg/js . Загрузите соответствующий файл на свою веб-страницу, чтобы загрузить правильный перевод блока.

Интерполяция сообщений JSON

Атрибут message0 (а также message1 , message2 и т. д.) определяет входные данные, поля и окружающий текст метки. Для LISTS_REPEAT_TITLE в блоке lists_repeat английское значение:

Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';

Два маркера интерполяции, %1 и %2 , отмечают расположение двух входных данных. Более подробная информация представлена ​​в массиве args0 . args1 будет соответствовать строке message1 . Дополнительные сведения об указании входных данных и полей блока см. в руководстве «Создание пользовательских блоков» .

Текст между маркерами интерполяции преобразуется в безымянные поля меток . Это создает порядок слов в блоке и то, как он читается:

// In Spanish
Blockly.Msg.LISTS_REPEAT_TITLE = "crear lista con el elemento %1 repetido %2 veces";
// In Korean
Blockly.Msg.LISTS_REPEAT_TITLE = "%1을 %2번 넣어, 리스트 생성";

При переводе на языки с письмом справа налево строка сообщения записывается в визуальном порядке и не должна включать команды направления в Юникоде:

// In Arabic. Note how %2 is left of %1, since it read right to left.
Blockly.Msg.LISTS_REPEAT_TITLE = "إنشئ قائمة مع العنصر  %1 %2 مرات";

Восстановление строковых таблиц

Создание файлов .js таблицы строк является частью сценария build:langfiles . Скрипт использует ключи идентификатора и переводы на английский язык из msg/messages.js для создания нового en.json . Затем, в сочетании с любыми переводами, найденными в других файлах JSON , он воссоздаст обновленные таблицы строк JavaScript для всех языков, включая новый en.js

Неанглийские файлы JSON получены от партнеров TranslateWiki . Подробную информацию о том, как вы можете помочь, смотрите в примечаниях по переводу .