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