国际化

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

对于模块的 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": "这是我的第一条消息",
        "message2": "这是我的第二条消息"
    }
}

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

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

帮助文本

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

使用 i18n 消息

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

运行时

节点的运行时部分可以使用 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._() 来检索消息。