GraphQL 中如何实现多语言数据查询?

在现代应用程序中,多语言数据查询是很常见的需求。假如您正在构建跨国公司的网站,需要为多个语言市场提供支持,那么您可能需要在页面上显示不同的语言版本。

GraphQL 是一个强大的查询语言和运行时,提供了一种灵活的方法来查询您的数据,而且支持多语言数据查询。在这篇文章中,我们将讨论如何在 GraphQL 中实现多语言数据查询。

GraphQL 中的国际化解决方案

GraphQL 并没有提供官方的国际化解决方案,但是我们可以借助其他语言库和工具来实现这个功能。

您可以使用以下工具和技术,以便在 GraphQL 中实现多语言数据查询:

  • i18next:一个流行的 JavaScript 国际化库,可以帮助您管理多语言数据。

  • Appllo Server:一个强大的开源 GraphQL 服务器,它提供了许多钩子和中间件,可以自定义 GraphQL 类型并处理请求和响应。

  • GraphQL Tools:一个用于构建和组合 GraphQL 类型和模式的工具包。您可以使用此工具包创建自定义 GraphQL 类型以管理多语言数据。

接下来我们将阐述如何使用这些工具和技术来实现 GraphQL 中的多语言数据查询。

使用 i18next 在 GraphQL 中实现多语言数据查询

i18next 是流行的 JavaScript 国际化库。它提供了一个强大的 API,允许您轻松管理多语言数据。您可以将 i18next 轻松集成到 GraphQL 中,以实现多语言数据查询。下面是一个简单的示例:

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

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

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

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

在上面的代码中,我们首先使用 i18next 初始化设置语言和资源。然后我们定义了一个 GraphQL 解析器来查询“hello”和“world”字符串,并在返回结果之前使用 i18next.t() 方法将其翻译成请求的语言。

在构建 Apollo Server 时,我们传递了 context,以便它可以从请求 header 中获取语言信息。

现在您可以通过发送请求来测试这个解析器:

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

如果请求的 header 中的语言是英语,请求将返回“Hello, World!” 如果语言是德语,则请求将返回“Hallo, Welt!”。

使用 GraphQL Tools 在 GraphQL 中实现多语言数据查询

GraphQL Tools 是一个用于构建和组合 GraphQL 类型和模式的工具包。您可以使用此工具包创建 GraphQL 类型,以管理多语言数据。

下面是一个使用 GraphQL Tools 的示例,该示例定义了一个“language”类型和一个查询类型:

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

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

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

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

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

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

在上面的代码中,我们定义了一个“language”类型,它有一个“hello”和一个“world”字段。我们定义了一个查询类型,它接受一个“locale”参数,并使用 i18next.getResourceBundle() 方法获取请求的语言资源。

现在您可以通过发送请求来测试这个查询:

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

这将返回英语资源中的翻译版本:“Hello”和“World”。

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

这将返回德语资源中的翻译版本:“Hallo”和“Welt”。

结论

通过使用 i18next 或 GraphQL Tools,您可以轻松地实现多语言数据查询。如果您的应用程序需要支持多个市场和语言,那么这些技术将为您的应用程序提供灵活性和可扩展性。现在您可以尝试在 GraphQL 中实现您自己的国际化解决方案。

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