如果您向 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
。 - 检查自动生成的文件是否正确。请注意,脚本可能会移除
qqq.json
开头的@metadata
部分。如果发生这种情况,您应谨慎地回滚该更改,以便添加新字符串,但不会移除@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';
上下文类型
许多提示都使用前缀来解释消息的上下文。常见前缀包括:
- 屏蔽文字
- 按钮文字
- 上下文菜单
- 下拉列表
- 数学
- Toast 通知
- 提示
如果您的消息出现在上述某个上下文中,请使用相应的前缀。
同义词
有时,需要更改消息键,但不需要更改翻译。在这种情况下,您可以将旧消息设置为新消息的同义词,如下所示:
/** @type {string} */
Blockly.Msg.CONTROLS_FOR_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
可选消息
某些消息字符串不太可能需要翻译,除非在某些情况下,例如专有名词或符号。在 Blockly 中,帮助网址通常标记为可选。
只有完成度达到 25% 或以上的语言才会提交到 Blockly 代码库。因此,将不太可能需要翻译的消息标记为可选,有助于这些语言在无需完成可选翻译的情况下达到阈值。
/** @type {string} */
/// {{Optional}} math - The symbol for the binary operation addition.
Blockly.Msg.MATH_ADDITION_SYMBOL = '+';
不翻译的内容
默认块类别所用的颜色标记为 {{notranslate}}
。这些颜色并非旨在本地化,但位于本地化系统中,以便开发者可以轻松更改默认类别中块的颜色。如果您添加新的屏蔽类别,请使用 {{notranslate}}
指令。如果您添加了另一种您认为绝不应翻译的消息,请考虑本地化系统是否适合放置该字符串。
/** @type {string} */
/// {{Notranslate}} Hue value for all logic blocks.
Blockly.Msg.LOGIC_HUE = '210';