npm 包 keystone-translated-fields 使用教程

为什么需要 keystone-translated-fields

在开发多语言网站时,我们通常需要将网站的用户界面、邮件内容、数据库模型等进行国际化处理。这个过程中最核心的一项工作就是实现多语言数据管理。

在 node.js 的 Web 应用开发中,KeystoneJS 是一个流行的开源 CMS 和 web 应用框架,它为我们提供了一种构建支持多语言网站的解决方案。但是,KeystoneJS 默认的多语言支持并不够完善,对于一些复杂的多语言场景(例如多语言表单)无法很好地处理。因此,我们需要使用一些第三方的 npm 包来扩展 KeystoneJS 的多语言功能。

其中 keystone-translated-fields 就是一款非常实用的 npm 包,它可以帮助我们快速地实现多语言数据管理。本篇文章将详细介绍 keystone-translated-fields 的使用方法以及注意事项。

keystone-translated-fields 如何工作

keystone-translated-fields 的设计理念是将一个字段的多语言内容存储在一个数组中。例如,如果我们有一个叫做 "title" 的字段,那么它的多语言版本可以被存储在一个数组中,每个元素都是一个对象,代表不同的语言:

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

在数据库中,这个数组将被存储在一个 JSON 字段中,具体的数据库实现方式取决于我们所使用的 ORM 或数据库。例如,使用 MongoDB 时,我们可以将上面的 JSON 对象存储成以下形式:

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

其中,title__en、title__zh、title__fr 是 title 字段的英、中、法语言版本。

使用 keystone-translated-fields

安装 keystone-translated-fields

使用 npm 安装:

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

集成 keystone-translated-fields

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

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

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

在上面的代码中,我们首先需要引入 keystone 和 keystone-translated-fields 。然后,在初始化 KeystoneJS 实例之后,调用 keystoneTranslatedFields.init 函数即可。

定义多语言字段

在 KeystoneJS 的模型(model)中定义一个多语言字段,我们只需要添加一个名为 type: Types.TranslatedString 的字段即可。

例如,下面我们定义了一个 User 模型,其中 name 字段是一个多语言字段:

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

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

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

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

使用多语言字段

在模板中使用多语言字段时,我们可以直接引用数组的某个元素即可。例如,在 ejs 模板中,我们可以这样使用多语言的 name 字段:

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

其中,user.lang 表示当前语言。通过这种方式,我们可以使用一个通用的模板来显示多语言内容。

添加支持的语言

在 keystone 中,我们可以通过 i18n 中间件来自动识别当前语言,并设置到 req.locale 中。然后,我们可以通过 req.locale 来选择当前要使用的 language。

在 keystone-translated-fields 中,默认支持以下 14 种语言:

  • en: 英语
  • es: 西班牙语
  • fr: 法语
  • de: 德语
  • he: 希伯来语
  • it: 意大利语
  • ja: 日语
  • ko: 韩语
  • nl: 荷兰语
  • pt: 葡萄牙语
  • ru: 俄语
  • sv: 瑞典语
  • uk: 乌克兰语
  • zh: 中文

我们可以通过 keystone.init 的 options.i18n.supportedLocales 设置支持的语言,例如:

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

在上面的例子中,我们设置了支持英语和中文这两种语言。在添加数据时,默认语言将会是第一个支持的语言(即英语),但用户可以随时在界面上修改默认语言。

完整示例代码

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

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

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

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

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

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

注意事项

keystone-translated-fields 目前还不是一个完美的解决方案,使用它也需要注意一些事项:

  • 多语言字段在数据库中的存储可能会比较浪费存储空间。
  • 目前 keystone-translated-fields 没有提供 Locale Selector 组件的实现,需要我们自己来实现。(后续版本可能会提供该组件)
  • keystone-translated-fields 会影响到 KeystoneJS 的默认搜索和排序功能,需要我们自己来实现定制化的搜索和排序。
  • keystone-translated-fields 目前还有一些 bug 和性能问题,需要我们进行认真的测试和调试。

总之,keystone-translated-fields 是 KeystoneJS 多语言支持的一个比较好的扩展,但使用时需要我们对其进行仔细的评估和使用。

总结

在本篇文章中,我们详细介绍了 keystone-translated-fields 的设计思路和使用方法,同时也提到了它存在的一些缺点和限制。得益于 keystone-translated-fields 的帮助,我们可以更加轻松地在 KeystoneJS 中实现多语言支持,缩短开发周期,提升开发效率。

在实际项目开发中,我们可以在 keystone-translated-fields 的基础上进一步扩展,并结合 KeystoneJS 的其他功能来构建强大的多语言 web 应用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/600559e481e8991b448d7826


猜你喜欢

  • npm 包 file-button-react 使用教程

    介绍 npm 包 file-button-react 是一个 React 组件,它提供了一个文件选择器的按钮。使用此组件可以轻松地实现文件上传功能。 该组件支持自定义样式、文本和上传方法。

    2 年前
  • npm 包 imodule 使用教程

    介绍 imodule 是一个在前端开发中常用的 npm 包,它可以让我们方便地在代码中使用模块化的方法。本文将详细介绍 imodule 的使用方法,帮助读者更好地掌握这个非常有用的工具。

    2 年前
  • NPM 包 graphql-tools-bchen 使用教程

    什么是 graphql-tools-bchen? GraphQL-Tools-bchen 是一款基于 GraphQL 的工具包,能够简化开发过程,提高开发效率。该工具包包含一些列重要的 API,能够轻...

    2 年前
  • NPM包optical-kerning使用教程

    简介 Optical-kerning是一个专门为网页设计师和前端开发人员设计的一个 JavaScript 库,它用于实现更好的字体对齐效果。在使用 optical-kerning 之后,文字的间距将会...

    2 年前
  • npm 包 slider-index 使用教程

    slider-index 是一个基于 JavaScript 的 npm 包,用于帮助 web 开发者快速创建幻灯片效果的轮播组件。它提供了丰富的配置项,使得轮播组件功能更加强大,使用更加灵活。

    2 年前
  • npm 包 tizen-sdb 使用教程

    简介 tizen-sdb 是面向 Samsung Tizen 平台的一款基于 Node.js 的 CLI 工具,通过该工具可以在电脑上进行 Tizen 设备的调试和管理工作。

    2 年前
  • npm 包 yake 使用教程

    前言 近年来,随着技术的飞速发展和应用需求的不断增加,一些流程、构建和自动化工具逐渐在前端领域中得到了广泛的应用。yake 就是一款基于 Node.js 的自动化构建工具,它可以让前端开发者更方便地进...

    2 年前
  • npm 包 flexi-layouts 使用教程

    简介 flexi-layouts 是一款轻量级的 npm 包,旨在为前端开发者提供一个灵活、简便的方法来创建各种布局。它基于 flexbox 布局,能够帮助开发者快速创建现代化的响应式页面。

    2 年前
  • NPM 包 tdaa-ui 使用教程

    前言 tdaa-ui 是一款基于 React 的 UI 组件库,提供了丰富的组件和样式库,适用于开发各种 Web 应用。本篇文章将介绍如何在自己的项目中使用 tdaa-ui 包,包括安装、使用方法和示...

    2 年前
  • NPM 包 Snape-config 的使用教程

    介绍 Snape-config 是一个基于 Node.js 平台的 npm 包,它能够帮助前端开发者更方便地管理项目的配置。 Snape-config 提供了一套易用的 API,可以实现以下功能: ...

    2 年前
  • npm 包 1tree-json 使用教程

    开发过程中,我们经常需要处理 JSON 数据,尤其是前端开发。在这个过程中,1tree-json 这个 npm 包能够为我们提供极大的便捷和效率。本文将带领大家了解 1tree-json 的使用方法和...

    2 年前
  • npm包 1tree-schema使用教程

    前言 1tree-schema是一个基于JavaScript的npm包,用于生成数据模型和模式验证。本文将介绍1tree-schema的功能和使用方式,以及如何在前端开发中使用它。

    2 年前
  • npm 包 @endeo/decoder 使用教程

    在前端开发中,数据的解析和处理是非常重要的一环。@endeo/decoder 这个 npm 包提供了简单易用且高效的解码器,支持多种数据格式的解码和处理,包括 JSON、XML 和二进制流。

    2 年前
  • npm 包 @hnct/uicommon 使用教程

    在前端开发中,我们经常需要使用一些 UI 组件来实现网页的交互效果。使用 UI 组件可以使我们的开发效率更高,同时也可以提升用户体验。在这个过程中,我们会使用很多第三方库和工具来帮助我们完成开发。

    2 年前
  • npm 包@nfcampos/react-native-blur 使用教程

    1.介绍 @nfcampos/react-native-blur 是一个基于 React Native 的模糊效果组件库。它支持在 iOS 和 Android 平台上,使用高效的 GPU 模糊方式渲染...

    2 年前
  • npm 包 @mojule/events 使用教程

    什么是 @mojule/events? @mojule/events 是一款用于事件分发和监听的 JavaScript 库,它可以帮助前端开发者快速构建响应式的前端应用程序。

    2 年前
  • npm 包 @nfcampos/react-native-htmlview 使用教程

    前言 在 React Native 开发中,我们时常需要展示 HTML 内容。而 @nfcampos/react-native-htmlview 是一个非常实用的 npm 包,可以将 HTML 转换为...

    2 年前
  • npm 包 enbyte 使用教程

    在前端开发中,我们常常需要在不同的数据传输渠道中进行数据的转换,特别是当我们需要从二进制数据中获取信息或将信息转换为二进制数据时。enbyte 是一个 npm 包,它提供了一个便捷的方法来进行字符串和...

    2 年前
  • npm 包 generator-webpack-2-es-6 使用教程

    1. 简介 generator-webpack-2-es-6 是一个用于生成基于 webpack 2 和 ES6 构建的前端项目的 npm 包。它可以帮助开发者快速搭建一个基于 webpack 2 和...

    2 年前
  • NPM包mojule-transform使用教程

    简述 mojule-transform是一个npm包,提供了一种将模型数据转换为其他格式的工具。它是一种基于扩展现有数据模型的方法,通过将模型中的数据映射到新的格式,使得数据相对应。

    2 年前

相关推荐

    暂无文章