本地化内容块

Blockly 支持可本地化为用户所用语言的块定义。通过使用字符串表,JSON 块定义中的消息字符串可以调整输入、字段和标签,以反映语言的词汇、字词排序和方向。

英文的“List_repeat block” 西班牙语的“列表重复块” 韩语“lists_repeat_block” 从右到左的阿拉伯语列表_重复块

所有这些情况具有相同的 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 会针对缺失的翻译发出警告。

如示例所示,该表示法适用于多个位置。这些消息和提示允许用户替换用户可见的字符串。同样,下拉菜单字段也可以使用项文本的表示法。帮助网址可以进行本地化,以确保将用户定向到类似本地化的页面。最后,colour 值可以使用该表示法将块调色板集中在一起。

如果您使用的是 JavaScript 实现,并且不希望在运行时更改用户语言,则可能会发现使用直接引用更为方便。例如,Blockly.Msg['LISTS_REPEAT_TITLE']Blockly.Msg.LISTS_REPEAT_TITLE'

字符串表通过 msg/js 中任何针对特定语言的 .js 文件加载。将相应的文件加载到您的网页中,以加载正确的块翻译。

JSON 消息插值

message0 属性(以及 message1message2 等)指定输入、字段和周围的标签文本。对于 lists_repeat 代码块中的 LISTS_REPEAT_TITLE,英语值为:

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번 넣어, 리스트 생성";

翻译成从右到左书写的语言时,消息字符串按视觉顺序编写,且不应包含 Unicode 方向命令:

// 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 合作伙伴提供。如需详细了解您需要什么帮助,请参阅有关翻译的说明。