【问题标题】:To what does the first parameter of NLS localize refer?NLS localize 的第一个参数指的是什么?
【发布时间】:2020-10-12 03:13:05
【问题描述】:

关于How to localise VSCode extension我也想知道为什么localize函数需要两个参数。

本地化设置很简单;您将文字值替换为由百分号包围的标记,然后使用文件中的字典替换该标记,该文件由当前语言环境确定。

localize 函数需要至少两个 参数,一个key 和一个message。它可以采用任意数量的任何类型的后续参数,有用地称为“args”。

这方面的文档几乎不存在。

在您将package.json 从 1.32 修改为最低 1.34 的 vscode 版本以适应对 TS 键入文件的更新之前,该示例甚至不会开箱即用。一旦你解决了这个问题,示例编译并启动,但似乎不起作用(activate 没有运行,我仍在找出原因)。

它确实包含一个本地化调用示例,但它使用的键是“sayHello.text”,我在本地化资源中找不到相应的字符串。任意 args 业务建议运行时组合,但这在示例中没有演示。我真的不能指责文档,因为没有任何文档。

谁能解释一下参数?

在 vscode-nls 存储库中翻找我发现了这个。

export function localize(_key: string | LocalizeInfo, message: string, ...args: any[]): string {
    return format(message, args);
}

从表面上看,它甚至 使用 _key,但有一个 localizeFunc 具有类似的签名,确实使用它,我怀疑是一个电话到 config 函数执行一些带有名称的诡计。

【问题讨论】:

    标签: typescript localization vscode-extensions


    【解决方案1】:

    config 函数确实做了一些奇怪的魔法。这是聪明和聪明之间巨大鸿沟的一个极好的例子。它让 webpack 比平时更有趣。

    假设您决定支持法语。

    在项目的i18n 文件夹中,您创建一个文件夹fra。是的,三个个字母。三字母国家代码有一个标准。必应是你的朋友。

    您可能已经知道将package.i18n.json 文件放入其中并使用名称值对填充它

    {
        "extension.sayHello.title": "Bonjour",
        "extension.sayBye.title": "Au revoir"
    }
    

    这些值将替换为以百分号为界的相同形式的 package.json 值。

    如果您创建一个与packages.i18n.json 同级的out 文件夹并将extension.i18n.json 放入包含此文件夹的out 文件夹中

    {
        "sayHello.text": "Bonjour d'extension.i18n.json"
    }
    

    那么您应该为_key 传递的值是“sayHello.text”。第二个参数是当本地化无法找到与您为当前显示语言提供的键对应的条目时的备用值

    在这一切奏效之前,您还有三件事要做。

    1. 编辑gulpfile.js 以注册您支持的语言。
      const languages = [
       { folderName: 'jpn', id: 'ja' },
       { folderName: 'fra', id: 'fr' }
      ];
      
    2. 安装 gulp 并运行 gulp build
    3. 将显示语言设置为法语。

    localize("sayHello.text", "default value") 将在显示语言设置为法语并为所有其他显示语言设置为“默认值”时返回“Bonjour d'extension.i18n.json”。

    据称可选参数可以替换返回值中的标记,但是这方面的文档很糟糕,我从未见过它使用过。

    注意如果您在嵌套文件夹中定义了类的导入,则必须将文件夹层次结构与您用于本地化词典的文件夹层次结构相匹配。如果您没有构建到 out 文件夹中,您可能也需要对其进行调整。

    有一个minimal worked example from Microsoft。它有所有的解释,但如果你使用这个答案作为解释样本的指南,你会很好的。

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多