国际化

如果一个节点被打包成一个合适的模块,它可以包含一个消息目录,以便在编辑器和运行时提供翻译后的内容。

对于模块的package.json中识别的每个节点,可以随节点的.js文件一起包含一组相应的消息目录和帮助文件。

给定一个被识别为的节点

"name": "my-node-module",
"node-red": {
    "myNode": "myNode/my-node.js"
}

可能存在以下消息目录

myNode/locales/__language__/my-node.json
myNode/locales/__language__/my-node.html

locales目录必须与节点的.js文件在同一个目录中。

路径的__language__部分标识了相应文件提供的语言。默认情况下,Node-RED 使用en-US

消息目录

消息目录是一个JSON文件,其中包含节点可能在编辑器中显示或在运行时记录的任何文本片段。

例如

{
    "myNode" : {
        "message1": "This is my first message",
        "message2": "This is my second message"
    }
}

目录在节点特定的命名空间下加载。对于上面定义的节点,此目录将在my-node-module/myNode命名空间下可用。

核心节点使用node-red命名空间。

帮助文本

帮助文件提供了节点的帮助文本的翻译版本,该文本显示在编辑器的信息侧边栏选项卡中。

使用国际化消息

在运行时和编辑器中,都提供了函数供节点从目录中查找消息。这些函数已预先作用于节点自己的命名空间,因此无需在消息标识符中包含命名空间。

运行时

节点的运行时部分可以使用RED._()函数访问消息。例如

console.log(RED._("myNode.message1"));

状态消息

如果节点向编辑器发送状态消息,它应该将状态的text设置为消息标识符。

this.status({fill:"green",shape:"dot",text:"myNode.status.ready"});

Node-RED核心目录中有许多常用的状态消息。可以通过在消息标识符中包含命名空间来使用它们

this.status({fill:"green",shape:"dot",text:"node-red:common.status.connected"});

编辑器

节点模板中提供的任何HTML元素都可以指定一个data-i18n属性来提供要使用的消息标识符。例如

<span data-i18n="myNode.label.foo"></span>

默认情况下,元素的文本内容会被替换为标识的消息。也可以设置元素的属性,例如<input>placeholder

<input type="text" data-i18n="[placeholder]myNode.placeholder.foo">

可以将这些组合起来以指定多次替换。例如,同时设置标题属性和显示的文本

<a href="#" data-i18n="[title]myNode.label.linkTitle;myNode.label.linkText"></a>

除了HTML元素的data-i18n属性外,所有节点定义函数(例如oneditprepare)都可以使用this._()来检索消息。