Skip to content

I18n

Chrome DocsFirefox Docs

本页介绍如何使用原生 browser.i18n API 设置国际化,并提及一些替代方案供你选择。

用法

  1. 在 manifest 中添加 default_locale

    ts
    export default defineConfig({
      manifest: {
        default_locale: 'en',
      },
    });
  2. public/ 目录中创建 messages.json 文件:

    html
    📂 {rootDir}/
       📂 public/
          📂 _locales/
             📂 en/
                📄 messages.json
             📂 de/
                📄 messages.json
             📂 ko/
                📄 messages.json
    jsonc
    // public/_locales/en/messages.json
    {
      "helloWorld": {
        "message": "Hello world!",
      },
    }
  3. 获取翻译内容:

    ts
    browser.i18n.getMessage('helloWorld');
  4. 可选:为扩展名称和描述添加翻译:

json
{
  "extName": {
    "message": "..."
  },
  "extDescription": {
    "message": "..."
  },
  "helloWorld": {
    "message": "Hello world!"
  }
}
ts
export default defineConfig({
  manifest: {
    name: '__MSG_extName__',
    description: '__MSG_extDescription__',
    default_locale: 'en',
  },
});

替代方案

原生 API 的功能非常有限,因此你可能需要考虑使用第三方 NPM 包,如 i18nextreact-i18nvue-i18n 等。

不过,建议你坚持使用原生 API(或基于原生 API 构建的包,如 @wxt-dev/i18n),原因如下:

  • 它们可以对 manifest 和 CSS 文件中的文本进行本地化
  • 翻译是同步加载的
  • 翻译不会被重复打包,从而保持扩展体积小巧
  • 零配置

然而,原生 API 及基于其构建的包有一个主要缺点:

  • 无法在不更改浏览器/系统语言的情况下切换语言

以下是一些设置第三方 I18n 库的示例: