Если вы добавляете в ядро Blockly функцию, требующую новых видимых пользователю строк, необходимо добавить эти строки в Blockly.Msg
, чтобы их можно было перевести с помощью Translatewiki . (Информацию о добавлении токенов локализации для вашего приложения см. в разделе «Локализация» .)
- Добавьте новую строку с соответствующим именем и описанием в файл
msg/messages.js
. - Запустите
npm run messages
, чтобы автоматически добавить ваш перевод в файлыmsg/json/qqq.json
иmsg/json/en.js
. В некоторых случаях этот шаг может также изменитьmsg/json/constants.js
илиmsg/json/synonyms.js
. - Проверьте корректность автоматически сгенерированных файлов. Обратите внимание, что скрипт может удалить раздел
@metadata
в начале файлаqqq.json
. В этом случае следует аккуратно отменить это изменение, чтобы новая строка была добавлена, но@metadata
не был удалён. - В коде вашей функции добавьте ссылку на новую строку с помощью
Blockly.Msg['MY_NEW_MESSAGE']
. - Зафиксируйте все изменения в файлах
msg
вместе с кодом вашей функции.
Например, если вы добавите этот код в msg/messages.js
:
/** @type {string} */
/// This is a hint to translators about the context for the message.
Blockly.Msg.MY_NEW_MESSAGE = 'This is a string that users will see!';
Затем запустите npm run messages
, вы должны увидеть следующие изменения в msg/en.json
:
// ...
"MY_NEW_MESSAGE": "This is a message that users will see!",
// ...
и в msg/qqq.json
:
// ...
"MY_NEW_MESSAGE": "This is a hint to translators about the context for the message.",
// ...
Затем вы можете ссылаться на эту строку в коде с помощью Blockly.Msg['MY_NEW_MESSAGE']
.
Подсказки по переводу
Комментарий с тремя косыми чертами в msg/messages.js
отображается пользователям TranslateWiki в качестве дополнительной информации при переводе. Укажите контекст, где сообщение будет показано пользователям. Если сообщение содержит параметры (например, %1
), объясните их значение.
Вот пример хорошей подсказки по переводу, которая объясняет параметры и предоставляет ссылку на дополнительную информацию.
/** @type {string} */
/// block text - Repeatedly counts a variable (%1)
/// starting with a (usually lower) number in a range (%2),
/// ending with a (usually higher) number in a range (%3), and counting the
/// iterations by a number of steps (%4). As in
/// [https://github.com/google/blockly/wiki/Loops#count-with
/// https://github.com/google/blockly/wiki/Loops#count-with].
Blockly.Msg.CONTROLS_FOR_TITLE = 'count with %1 from %2 to %3 by %4';
Типы контекста
Многие подсказки используют префикс для пояснения контекста сообщения. Вот распространённые префиксы:
- блочный текст
- текст кнопки
- контекстное меню
- падать
- математика
- уведомление о тосте
- подсказка
Если ваше сообщение появляется в одном из этих контекстов, используйте соответствующий префикс.
Синонимы
Иногда требуется изменить ключ сообщения, но не перевод. В этом случае можно установить старое сообщение как синоним нового, например:
/** @type {string} */
Blockly.Msg.CONTROLS_FOR_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
Дополнительные сообщения
Перевод некоторых строк сообщений, например, имён собственных или символов, вряд ли потребуется, за исключением определённых случаев. В Blockly URL-адреса справки часто помечены как необязательные.
Переводы на языки передаются в репозиторий Blockly только при условии, что их готовность составляет не менее 25%. Таким образом, отметка сообщений, которые вряд ли потребуют перевода, как необязательных, поможет этим языкам достичь порогового значения без необходимости выполнять необязательные переводы.
/** @type {string} */
/// {{Optional}} math - The symbol for the binary operation addition.
Blockly.Msg.MATH_ADDITION_SYMBOL = '+';
Элементы Notranslate
Цвета, используемые для категорий блоков по умолчанию, обозначены {% verbatim %} {% endverbatim %}. Эти цвета не предназначены для локализации, но присутствуют в системе локализации, чтобы разработчики могли легко изменять цвета блоков в категориях по умолчанию. При добавлении новых категорий блоков используйте {% verbatim %}.
Директива {% endverbatim %}. Если вы добавляете другой тип сообщения, который, по вашему мнению, никогда не следует переводить, подумайте, подходит ли система локализации для этой строки.
/** @type {string} */
/// {{Notranslate}} Hue value for all logic blocks.
Blockly.Msg.LOGIC_HUE = '210';