npm 包 @jgornick/ngx-translate-po-http-loader 使用教程

阅读时长 6 分钟读完

前言

国际化(i18n)是现代 Web 应用必不可少的一个特性。Angular 框架提供了一个非常方便的 i18n 扩展,可以帮助我们快速实现应用的国际化。

@ngx-translate/core 是 Angular 国际化的最受欢迎的第三方库之一。它支持多种语言,异步加载翻译文件等功能。但是,当我们需要从服务器动态获取翻译文件时,它就有一些局限性了。

这时,@jgornick/ngx-translate-po-http-loader 就非常有用了。它是 @ngx-translate/core 的扩展,可以帮助我们从服务器请求 po 文件并使用它进行翻译。

在本文中,我们将学习如何使用 @jgornick/ngx-translate-po-http-loader,以及如何设置服务器端以提供 po 文件。

安装

首先,我们需要安装 ngx-translate@jgornick/ngx-translate-po-http-loader

使用方法

注入 TranslateModule

在应用的根模块(例如 app.module.ts)中,我们需要导入 TranslateModule

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

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

在这里,我们导入了 HttpClientModuleHttpClient,以便向服务器发送请求。然后,我们将 TranslatePoHttpLoader 实例传递给 TranslateModuleloader 选项中。

TranslatePoHttpLoader 构造函数的第二个参数是翻译文件的路径,可以根据实际路径进行修改。

管理语言

在 Angular 应用中,我们通常使用 ngx-translateTranslateService 来管理当前语言,切换语言等。

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

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

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

在这里,我们创建了一个 AppComponent,包含一个下拉菜单来切换应用的语言。我们也注入了 TranslateService ,以便语言的切换。

最后,我们使用管道 translate 来获取翻译文本。在这里,我们使用了一个字符串常量 'HELLO',可以在 po 文件中找到相应的键值对。

服务器端设置

在客户端配置完成后,我们需要确保在服务器上提供翻译文件。

这里,我们简单介绍如何使用 gettext 工具生成 po 文件。gettext 广泛用于国际化应用,可以通过一些工具和脚本来自动生成、修改和更新翻译文件。

首先,我们需要下载并安装 gettext 工具。在 Ubuntu 下,可以通过以下命令进行安装:

对于其他系统,请查看 gettext 文档以了解安装方法。

接下来,我们需要添加一些标记(例如 _gettext)来标识需要翻译的文本。

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

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

在这里,我们使用 i18n 属性来标记需要翻译的文本。@@HELLO_WORLD 是该文本的键,我们需要在后面的翻译文件中为其提供对应的翻译。

接下来,我们需要运行 xgettext 命令来从应用中提取所有需要翻译的文本,并生成一个 .pot 文件。

在这里,我们指定了需要提取的关键字(即 i18n)以及要生成的 po 文件的语言代码(即 en)。

接下来,我们可以打开生成的 en.po 文件,并为其中的键添加翻译文本。最后,我们需要将 .po 文件放在服务器上,以供客户端动态加载。

结论

我们学习了如何在 Angular 应用中使用 @jgornick/ngx-translate-po-http-loader 动态请求 po 文件,并在客户端中使用它进行翻译。我们还学习了如何使用 gettext 工具生成 po 文件,并将其放置在服务器端。

现在,您可以为您的 Angular 应用添加国际化功能了。希望这篇文章对您有所帮助!

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

纠错
反馈