GraphQL 是一种新兴的 API 查询语言,它具有强大的类型系统和可以轻松地组合多个数据源的能力。对于多语言应用程序,国际化是一个必需的功能。在 GraphQL 中实现国际化可以帮助我们更有效地管理多语言数据,并提高应用程序的可重用性。
本文将介绍如何在 GraphQL 中使用国际化,包括在 GraphQL schema 中定义国际化字段和在 GraphQL resolvers 中处理国际化数据。
在 GraphQL schema 中定义国际化字段
GraphQL schema 是我们定义和描述 GraphQL API 的地方。要在 GraphQL 中支持国际化,我们需要在 schema 中定义国际化字段。国际化字段是一种语言特定的字段,它们可以根据请求的语言动态返回不同的结果。我们可以使用 GraphQL 的自定义标量类型来实现国际化字段。
下面是一个使用自定义标量类型的例子:
-- -------------------- ---- ------- ------ --------------- ---- ---- - --- --- ------ ---------------- ----- ---------------- - ---- ----- - -------- ----- ---- -
在这个 schema 中,我们定义了一个名为 LocalizedString
的自定义标量类型,在 Post
类型中使用了这个类型来定义 title
和 body
字段。这些字段会在请求时动态返回正确的语言版本的字符串。
我们还定义了一个名为 Query
的根类型,并添加了一个名为 post
的字段。这个字段使用 ID
类型作为参数,并返回一个 Post
类型的对象。
在 GraphQL resolvers 中处理国际化数据
要在 GraphQL 中支持国际化,我们还需要在 resolvers 中为国际化字段提供实现。我们可以使用 i18n 库(如 react-i18next)来处理国际化字符串。
下面是一个使用 react-i18next 的例子:
-- -------------------- ---- ------- ----- --------- - - ---------------- --- ------------------- ----- ------------------ ------------ -- ------ ---- --- -- ----------- ---------------- - ------ ------ -- ----------------- - ------ ------ -- ----------------- - -- --------- --- ------------ - ------ ---------- - ------ ----- - --- ------ - ----- --- - -- -- -- - ----- ---- - ---------------- ------ - --- -------- ------ --------------------- ----- ------------------- -- - - -- -------- ---------------- - ------ --------------- -
在这个例子中,我们定义了一个 LocalizedString
标量类型的 resolver,它只是一个简单的标量类型,它将值转换为 GraphQL 字符串。我们还定义了一个 Query
resolver,该 resolver 获取帖子对象,并使用 localize
函数将帖子的标题和正文本地化。
localize
函数使用 react-i18next 库中的 t
函数来本地化字符串。此函数将字符串映射到应用程序的特定语言版本,并返回正确的语言版本的字符串。具体来说,它使用语言偏好、浏览器语言配置和用户选项来确定要使用的语言。
结论
本文介绍了如何在 GraphQL 中使用国际化,包括在 GraphQL schema 中定义国际化字段和在 GraphQL resolvers 中处理国际化数据。实现国际化可以帮助我们更好地管理多语言数据,并提高应用程序的可重用性。如果您正在构建多语言应用程序,并且想要使用 GraphQL 作为 API 查询语言,那么您应该研究如何在 GraphQL 中使用国际化。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6705f1f1d91dce0dc85603ab