多语言国际化


Theia 可以通过安装 Visual Studio Code 语言包进行本地化。 使用配置显示语言命令,Theia 的用户可以更改他们当前使用的语言环境。 该框架提供了额外的功能,使扩展开发人员能够本地化他们自己的扩展。

本地化你的扩展
假设您想要在应用程序的前端显示一个简单的字符串,例如显示再见消息的自定义小部件:

render() {
    return <span>Bye</span>
}

要使用不同的语言环境显示此消息,您可以使用从 @theia/core 包导入的 nls.localize 函数:

render() {
    return <span>{nls.localize('bye', 'Bye')}</span>
}

第一个参数是识别翻译值的键。 第二个参数是如果用户没有更改他们的语言环境将使用的默认值。 在前端使用模板表达式时,请记住 nls.localize 函数允许您使用附加的 args 参数格式化字符串。 当 localize 函数以 {n} 格式识别占位符时,其中 n 表示任意数字,它将尝试在适当的位置用输入参数替换占位符,例如 {0} 将替换为第一个附加参数,{1} 将替换为第二个参数,依此类推:

nls.localize('bye-format', 'Bye {0} and {1}!', first, second);

Command 命名空间提供了一个额外的实用功能来帮助您本地化您的扩展。 toLocalizedCommand 函数接受一个命令和本地化键作为其参数。 第一个附加键将用于本地化标签,第二个用于类别。 如果没有提供,命令的 id 将用作标签本地化键:

command = Command.toLocalizedCommand({
    id: 'hello-command',
    label: 'Hello'
    category: 'Greetings'
}, 'hello', 'greetings');

用 nls.localize 调用替换所有面向用户的字符串后,您可以使用 @theia/cli 包的 theia nls-extract 命令将所有使用的本地化键提取到单个 JSON 文件中。 对于上面的两个示例,它将产生以下 JSON 输出:

{
    "bye": "Bye",
    "hello": "Hello",
    "greetings": "Greetings"
}

您还可以使用正斜杠对这些键进行分组。 例如,像 nls.localize('group/bye', 'Bye') 这样的调用将被转换成这个 JSON 文件:

{
    "group": {
        "bye": "Bye"
    }
}

这些文件必须翻译成您的目标语言。 之后,您可以使用自定义 LocalizationContribution 继续为您的字符串注册这些新的本地化:

// creating your own localization contribution for German, Italian and simplified Chinese
export class CustomLocalizationContribution implements LocalizationContribution {
    async registerLocalizations(registry: LocalizationRegistry): Promise<void> {
        // Theia uses language codes, e.g. "de" for German
        registry.registerLocalizationFromRequire('de', require('../data/i18n/nls.de.json'));
        registry.registerLocalizationFromRequire('it', require('../data/i18n/nls.it.json'));
        registry.registerLocalizationFromRequire('zh-cn', require('../data/i18n/nls.zh-cn.json'));
    }
}

最后,这个 LocalizationContribution 必须绑定在你的后端注入模块中:

bind(CustomLocalizationContribution).toSelf().inSingletonScope();
bind(LocalizationContribution).toService(CustomLocalizationContribution);

请注意,配置显示语言命令仅在安装语言包后才显示语言环境。 这可确保在用户更改显示语言后,Theia 基础框架的任何部分都不会保持未翻译状态。

更改默认语言环境

如果您想将 Theia 应用程序部署到特定区域,您可能需要更改默认区域设置。 为此,您只需在 package.json 文件中的 Theia 应用程序的前端配置中添加一个 defaultLocale 条目:

"theia": {
    "frontend": {
        "config": {
            "defaultLocale": "zh-cn"
        }
    }
}

当用户第一次启动您的 Theia 应用程序时,区域设置将自动设置为选定的默认区域设置。 他们仍然可以使用“配置显示语言”命令自由更改选定的区域设置。

posted @ 2022-08-09 13:30  theiaide  阅读(233)  评论(0编辑  收藏  举报