65.9K
CodeProject 正在变化。 阅读更多。
Home

比较 angular-translate 的不同异步加载器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.20/5 (4投票s)

2016年2月9日

CPOL

5分钟阅读

viewsIcon

20754

downloadIcon

96

Angular-translate 是提供 Angular 本地化文本的头号模块。本文将简要介绍实现的异步文件加载器,并给出一些使用建议。

引言

在对 Angular Web 应用程序进行国际化时,angular-translate [^] 是首选的头号模块。自 2013 年 3 月以来,该模块已有 49 个发布版本,七位活跃作者(贡献了 2000 多行代码),并且随着 Angular 框架的快速发展而不断演进。

大型 Angular 应用程序通常需要 在运行时加载翻译表。与其在源代码中实现所有语言的翻译在客户端连接时部署所有翻译,不如只部署当前所选语言的资源。

在 angular-translate 模块中,这可以通过 异步加载器 来实现。开发者文档关于异步加载 [^] 的内容非常详细,特别是关于如何实现每个加载器。但是,作为读者,您需要深入研究实现示例,才能评估哪个加载器最适合您的需求。本文旨在简要介绍每个加载器,包括加载新翻译表的示例 HTTP 请求,并提出一些使用建议。

国际化 (i18n) 和本地化 (l10n)

在 Angular 核心文档 [^] 中,国际化和本地化分别缩写为 i18nl10n。为保持一致性,本文将沿用这些缩写。

关注点

根据当前实现 [^],有四种类型的加载器可用于在运行时提供翻译表。每种加载器都有不同的特性、优点和缺点。

URL 加载器

URL 加载器具有非常简单的客户端实现。作为配置,该加载器将静态 URL 作为参数,例如 'l10n/res.json'。当在运行时请求 'en_US' 的语言资源时,客户端会向服务器发送以下 HTTP 请求:

GET /l10n/res.json?lang=en_US

然后由服务器解析请求并以 JSON 对象形式返回正确的语言资源。

何时使用?

  • 当需要简单精简的客户端实现时。
  • 当您想在服务器端解析查询参数 ?lang= 并添加一些逻辑时。

使用包 angular-translate-loader-url

静态文件加载器

静态文件加载器期望语言资源可通过直接 HTTP 请求在服务器上获得。每个语言资源文件的 URL 必须符合 [prefix][lang][postfix] 的模式。对于前缀 'l10n/',语言 'en_US' 和后缀 '.json',这将产生如下服务器请求:

GET /l10n/en_US.json

服务器再次必须以 JSON 对象的形式返回正确的语言资源。

何时使用?

  • 当需要简单精简的客户端实现时。
  • 当服务器将每个翻译表存储在单独的 JSON 文件中,随时可部署时。

使用包 angular-translate-loader-static-files

部分加载器

部分加载器将静态文件加载器扩展到一个 [part] 参数。当加载应用程序的特定部分(例如模块或控制器)时,可以手动设置此参数。除了 [lang] 参数,此值还可以包含在请求 URL 中。在配置期间,部分加载器会获取一个 URL 模板。当设置或更改语言时,此模板将直接传递给服务器。

示例

  • 模板 URL:'l10n/{part}/{lang}.json'
  • 部分:'main'
  • 语言:'en_US'
Get /l10n/main/en_US.json

与静态文件加载器类似,当请求此 URL 时,服务器必须将语言资源保持在正确的模式下,随时可部署。

何时使用?

  • 对于模块化应用程序,当用户只访问应用程序的一部分时。
  • 对于语言资源量巨大的大型应用程序。

使用包 angular-translate-loader-partial

自定义加载器

最终,这些加载器可能无法满足您的要求。有没有可能在 Angular 客户端获得对加载过程更多的控制?是的,有自定义加载器。对于此加载器,angular-translate 会注入框架服务 $http$q 以直接实现加载调用。有关如何实现自定义加载器的详细信息,请参阅 Angular Translate wiki 页面 的相应部分。

HTTP 请求取决于自定义实现。

何时使用?

  • 当需要对加载过程进行完全控制时
  • 当客户端自定义加载器实现的成本由自定义功能的好处所抵消时

Using the Code

本文附带两个示例项目。要测试异步资源加载,您必须在 HTTP 服务器中托管这些示例。

在 HTTP 服务器中托管示例

如果您熟悉 Node.js,http-server [^] 可能是您的首选工具:打开命令行,浏览到包含 index.html 文件的文件夹。然后键入 http-server 来启动服务器。您可以在命令行输出中读取使用的端口,如果服务器成功启动。任何其他从磁盘提供 HTML 文件的服务器也可以。如果服务器能打印收到的 HTTP 请求,会很有帮助。

HTTP 请求

当您在浏览器中加载网站时,请查看服务器收到的 HTTP 请求。初始 HTTP GET 请求之后,应该跟着上面提到的特定于加载器的调用。

摘要

这四种加载器提供了广泛的解决方案。虽然 URL 加载器静态文件加载器可以快速实现,并且可能满足绝大多数用例,但其他两种则允许高度专业的解决方案。部分加载器根据应用程序结构对语言资源进行模块化,而自定义加载器提供了一个强大的杠杆,可以最大程度地自定义翻译资源的加载行为。

参考文献

历史

  • 2016 年 2 月 9 日:初始版本
  • 2016 年 2 月 13 日:添加了示例代码
© . All rights reserved.