向 Blockly 核心添加新的本地化令牌

如果您向 Blockly 核心添加了需要新的用户可见字符串的功能,则必须将这些字符串添加到 Blockly.Msg 中,以便 Translatewiki 可以翻译这些字符串。(如需了解如何为自己的应用添加本地化令牌,请参阅本地化。)

  1. 将新字符串添加到 msg/messages.js 文件中,并为其添加适当的名称和说明。
  2. 运行 npm run messages 可自动将翻译添加到 msg/json/qqq.jsonmsg/json/en.js 文件中。在某些情况下,此步骤还可能会更改 msg/json/constants.jsmsg/json/synonyms.js
  3. 检查自动生成的文件是否正确。请注意,脚本可能会移除 qqq.json 开头的 @metadata 部分。如果发生这种情况,您应谨慎地回滚该更改,以便添加新字符串,但不会移除 @metadata
  4. 在功能代码中,使用 Blockly.Msg['MY_NEW_MESSAGE'] 引用新字符串。
  5. 将对 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';