如何使用 GraphQL 实现多语言后端 API

前端开发在开发多语言网站的过程中,需要与后端进行数据交互以获得正确的翻译。GraphQL 是一种广泛使用的 API 查询语言,可以帮助开发人员更好地管理数据,并在多语言设置中进行更好的数据处理。

在本文中,我们将探讨如何使用 GraphQL 在后端实现多语言 API。

什么是 GraphQL?

GraphQL 是一种用于 API 的查询语言,是一种更高效,更强大,更灵活的替代 REST API。GraphQL 充分利用现代客户端的数据要求,用于构建 API,并在客户端应用程序中实现精准数据的获取需求。

与 REST API 不同的是,GraphQL API 提供了一个适用于客户端的强大查询语言,使客户端可以精确指定其所需的数据,而无需依赖后端固定的接口。

GraphQL 与多语言

多语言网站的前端通常需要不同语言的翻译。这个需求需要在后端实现多语言 API。

GraphQL 提供了在后端处理这种需求的强大能力。在 GraphQL 中,API 呈现为一种有层次的数据图,其中每个字段都有其自己唯一的标识符。这确保了与多语言数据共存的数据是精准的且有序的,而不是传统的无序的 JSON 数据。

在 GraphQL 中,我们可以使用本地化软件来管理翻译,并将其与 API 定义一起管理。这意味着我们可以根据客户端语言选择提供正确的翻译,并将其内容嵌入到我们的 API 响应中。

GraphQL 多语言示例

为了了解如何在 GraphQL 中实现多语言后端 API,请执行以下步骤:

  1. 添加 i18next 依赖项

在你的项目目录中,使用以下命令安装 i18next:

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

然后,将其添加到你的后端项目中。

  1. 添加本地化区域和语言

在项目文件夹中,创建一个 locales 文件夹,然后添加一个用于存储语言文件的新文件夹。

在这个文件夹中,创建使用标准的 .json 文件格式的语言文件。例如,在一个名为 en 的文件夹中,创建一个 translation.json 文件:

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

在一个 fr 文件夹中,创建一个 translation.json 文件:

-
    ----------- -------- -- -------
-
  1. 在 GraphQL 中使用本地化

创建一个 GraphQL 查询,并将其与 i18next 库结合使用。在查询语句中,定义一个名称和一个它所关联的语言代码。

有关完整操作,请查看以下代码示例:

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

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

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

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

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

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

在上面的例子中,我们首先初始化 i18next,并定义我们所支持的语言。然后,我们调用 i18next.changeLanguage 方法来更改当前语言,并在查询语句中传递变量。

这个查询将返回一个名为 getUser 的查询结果,其中包含用户的名称和由所选语言的翻译。

结论

GraphQL 在多语言应用程序的设计和开发中可以发挥关键作用。由于 GraphQL 支持有层次的数据图和相关查询语言,因此处理多语言数据非常容易。在本文中,我们演示了如何在 GraphQL 中使用 i18next 将多语言 API 集成到后端。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672b1ed4ddd3a70eb6d1c119