npm 包 localize-router-http-loader 使用教程

阅读时长 10 分钟读完

前言

在开发前端应用中,经常会使用路由来实现展示页面的功能。而在应用多语言的情况下,我们通常需要对应不同语言的页面地址。localize-router-http-loader 这个 npm 包就是帮助我们在 Angular 应用中实现多语言路由的工具,本篇文章将介绍如何使用这个包。

安装

该包依赖 angular、@ngx-translate/core 和 @ngx-translate/http-loader,需要先安装这些包,可以使用以下命令:

配置

  1. app.module.ts 中导入包:

    -- -------------------- ---- -------
    ------ - -------- - ---- ----------------
    ------ - ------------- - ---- ----------------------------
    ------ - ------------- ------ - ---- ------------------
    ------ -
      -----------------------
      ---------------------
      -------------------------
      -----------------------
      ---------------------------
    - ---- ------------------------------
    ------ - ---------------- ---------------- ---------------- - ---- ----------------------
    ------ - ----------------- ---------- - ---- -----------------------
    ------ - ------------ - ---- ------------------
    ------ - ------------- - ---- ------------------------
    ------ - -------------- - ---- --------------------------
    
    ----- ------- ------ - -
      - ----- --- ---------- ------------- --
      - ----- -------- ---------- -------------- --
    --
    
    ------ -------- --------------------------- ----------- -
      ------ --- ------------------------------ ----------------- --------------
    -
    
    -----------
      -------- -
        --------------
        -----------------
        -----------------------------
        -------------------------
          ------- -
            -------- ----------------
            ----------- ----------------------
            ----- -------------
          --
        ---
        ------------------------------------ -
          ------- -
            -------- ---------------
            --------- ------------------------
            ----- ------------------ --------- ------------------------
          --
          -------------- -----
          ---------------- -----
          -------------------- -- -- -
            ----- ---- - -------------------
            ------ ------------------- - ------- - --------
          --
        ---
      --
      ------------- -------------- -------------- ----------------
      ---------- -
        -
          -------- -----------------------
          --------- -
            ---------------- -----
          --
        --
        -----------------------
      --
      ---------- ---------------
    --
    ------ ----- --------- --
  2. app.component.ts 中添加代码:

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

    这段代码的作用是监听语言变化事件并更新路由。

示例

我们假设有以下两种语言的页面:

  • 英文版:/en/home/en/about
  • 中文版:/zh-CN/home/zh-CN/about

assets/i18n/ 文件夹下创建 en-lang.jsonzh-CN-lang.json 两个翻译文件:

en-lang.json:

zh-CN-lang.json:

app-routing.module.ts 中将路由改为多语言路由:

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

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

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

在组件中使用翻译:

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

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

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

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

-

html 中使用:

深度解析

LocalizeRouterModule.forRoot(routes, options) 是创建本地化模块最重要的方法。它有两个参数:

  1. routes: Angular 的原始路由配置
  2. options: 参数对象,其中 parser 是最重要的属性

parser 是本地化路由解析器。我们可以定义自己的解析器,需要实现 LocalizeParser 接口,并将其注入到 parser 属性中。但是, localize-router 为我们提供了直接可用的默认解析器 LocalizeUniversalLoader

LocalizeRouterModule.forRoot 方法中,我们配置了一些通用的 options,包括 useCachedLangalwaysSetPrefix 等。这些通用属性相对简单,都有默认值,可以自行查阅官方说明文档。

这两个方法的设置还要结合整个应用初始化时的语言环境,而这个环境是由 defaultLangFunction 方法来定义的。默认情况下,它会检测浏览器语言设置并返回相应语言,否则返回英文。

在组件中,我们需要监听路由变化事件,以便及时更新本地化路由。 LocalizeRouterService.changeLanguage 方法返回可订阅的流,它会在语言环境变更时执行。

最后,在 HTML 文件中应用翻译。TranslatePipengx-translate 的核心管道,它可以将一个 key 转换成相应的翻译文本。在这个例子中,它被应用于 h1 元素和 p 元素中的 homeabout,因此 ngx-translate 将查找相应翻译文件,并返回对应的翻译文本。

总结

以上是使用 localize-router 在 Angular 中实现多语言路由的过程与方法。通过本地化路由,可以轻松实现多语言页面的切换、跳转和共享等功能。相信通过学习本文,您可以更好地理解 localize-router 的工作原理和使用方法,提升自己的前端开发能力。

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

纠错
反馈