npm 包 i18next-scanner 使用教程

阅读时长 6 分钟读完

在前端开发中,国际化(i18n)技术扮演着重要的角色。i18n 可以提高网站或应用程序的可用性和可访问性,并使其更具有全球范围的适用性。有很多工具和框架可用于实现国际化,其中一个非常流行的工具就是 i18next,它是一个支持多语言的 JavaScript 库。i18next-scanner 可以帮助我们自动提取 JavaScript 中的 i18n 字符串,并将它们保存在 JSON 或 PO 文件中,以便翻译员进行翻译。本文将介绍 i18next-scanner 的使用方法,并提供示例代码。

安装 i18next-scanner

安装 i18next-scanner 的最简单方法是通过 npm 进行安装:

配置 i18next-scanner

在安装完 i18next-scanner 后,我们需要先创建一个配置文件,以告诉 i18next-scanner 哪些文件应该被扫描,如何解析 i18n 字符串,以及如何将它们保存到文件中。下面是一个示例配置文件的内容:

-- -------------------- ---- -------
----- ---- - ----------------

-------------- - -
  ------ -
    --------------------
    ----------------------
  --
  ------- ------------------------------------
  -------- -
    ------ ------
    ----- -----
    ----- -
      ----- ------------- ----------
      ----------- ------- --------
    --
    ----- ------ ------
    --- ---------- --------
    ---------- ---------
    ------------- ----------------------------
    --------- -
      --------- ------------------------------
      --------- ------------------------------
      ----------- --
      ----------- -----
    --
    ------------ ----
    ------------- ----
    -------------- -
      ------- -----
      ------- -----
    --
  --
--

配置项说明:

  • input: 要扫描的文件路径。可以使用 glob 匹配模式来匹配多个文件。
  • output: 保存翻译结果的路径。 $LOCALE, $NAMESPACE 表示占位符,会被实际的语言代码和命名空间替换。
  • options: 其他配置选项。
    • debug: 是否打印调试信息。
    • sort: 是否按照键名进行排序。
    • func: 用于匹配 i18n 函数的配置。
      • list: 匹配函数名的数组。
      • extensions: 匹配文件扩展名的数组。
    • lngs: 支持的语言列表。
    • ns: 命名空间列表。
    • defaultNs: 默认的命名空间。
    • defaultValue: 当字符串没有被翻译时的默认值。
    • resource: 用于读写翻译文件的配置。
      • loadPath: 读取文件的路径。
      • savePath: 保存文件的路径。
      • jsonIndent: JSON 文件的缩进量。
      • lineEnding: 行末的换行符。
    • nsSeparator: 命名空间分隔符。
    • keySeparator: 键名分隔符。
    • interpolation: 插值表达式的配置。

执行 i18next-scanner

配置好后,我们可以使用 i18next-scanner 进行扫描:

这里使用了 npx 命令来执行 i18next-scanner,以确保我们使用的是项目中安装的 i18next-scanner。-c 参数指定了使用哪个配置文件。

执行成功后,i18n 字符串会被提取并保存在相应的翻译文件中。

在 JavaScript 中使用 i18next

在编写使用 i18next 的代码时,我们需要创建一个 i18next 对象,并将其初始化:

-- -------------------- ---- -------
------ ------- ---- ----------
------ ------- ---- -----------------------
------ ---------------- ---- -----------------------------------
------ ------- ---- --------------------------------

-------
  -------------
  ----------------------
  -------------
  -------
    ------------ -----
    ------ ------
    -------------- -
      ------------ ------
    --
    -------- -
      --------- -------------------------------
    --
  ---

这里使用了 i18next、i18next-http-backend、i18next-browser-languagedetector 和 i18next-sprintf-postprocessor 四个包,它们分别用于:

  • i18next: i18next 核心包。
  • i18next-http-backend: 用于从远程服务器加载翻译文件的插件。
  • i18next-browser-languagedetector: 用于检测浏览器语言的插件。
  • i18next-sprintf-postprocessor: 用于支持插值表达式的插件。

示例代码

下面是一个示例代码,演示如何在 React 中使用 i18next:

-- -------------------- ---- -------
------ ----- ---- --------
------ - -------------- - ---- ----------------

-------- ------ -
  ----- - - - - -----------------------

  ------ -
    -----
      ---------------------
      -------------------------
    ------
  --
-

------ ------- -----

其中,useTranslation 是一个自定义的 React Hook,它用于获取当前组件所需的翻译函数。'home' 参数代表使用 home 命名空间中的字符串。t 函数用于获取翻译后的字符串。

总结

i18next-scanner 是一个非常有用的工具,它可以帮助我们自动提取 i18n 字符串,极大地提高了国际化的效率。只需简单的配置文件,就可以快速扫描项目中的 i18n 字符串,并将其保存在 JSON 或 PO 文件中,以便翻译员进行翻译。此外,本文还提供了如何配置 i18next 和示例代码,以帮助您更好地理解并使用 i18n 技术。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64231

纠错
反馈