Angular项目本地化和国际化的最佳实践是什么?

9

我正在开发一个包含两种语言(英语和法语)的项目。 我需要针对这两种语言本地化内容,例如在英语和法语页面的页眉和页脚中添加不同内容。同样,在管理员面板上管理多语言内容(如页面标题、页面正文等)。

我需要将语言环境添加到URL中,各种语言的URL结构都应相同。 例如:

  • site.com/en/about
  • site.com/fr/about
  • site.com/en/contact
  • site.com/fr/contact

官方Angular文档建议将不同的Angular项目构建并部署到不同的语言文件夹中(在我的情况下是“en”和“fr”)。这将避免为网站缓存资源,用户在切换到另一种语言时需要重新加载所有内容。

此外,我需要为每种语言运行/启动一个单独的本地项目。例如:

ng serve --configuration=en
ng serve --configuration=fr --port 4201

我每次更新语言字符串时都需要运行CLI命令:

ng extract-i18n --output-path src/locale

对我来说,这个设置似乎有点复杂。当我要添加另一种语言时,它将变得更加复杂。

有没有更好/更简单的方法来管理带有本地化(l10n)和国际化(i18n)的多语言Angular项目?

我需要添加一个按钮,点击后URL将从“/en/about/”更改为“/fr/about/”,反之亦然。

2个回答

12

Transloco 是我使用过的 Angular 中更具功能性和文档完整性的 i18n/i10n 解决方案之一。

我不确定为什么他们从 README 中删除了功能比较,但在这里他们概述了它与其他解决方案的优势。以下是你提到的一些突出特点:

  • 语言翻译是在运行时从静态 JSON 资源中进行惰性加载的。因此,应用程序只需加载一次即可在运行时切换语言。

    • 只有一个 Angular 项目,因此缓存工作正常。
    • 用户在切换语言时无需重新加载。
    • 添加新语言只需添加一个新的 JSON 文件。
  • 支持 I18n和 l10n

我不知道是否有内置的解决方案可以使路由包含当前语言。然而,这是可以做到的。这里有一个 Stackblitz 示例。


(旁注:我们的团队曾经使用ngx-translate,但由于对ngx-translate的未来的疑问而迁移到了Transloco。)


1
非常感谢您的评论。您提供了极有价值的信息供我们考虑。 - Vitalii

4

关于i18n,可以看看ngx-translate。我认为它适合你的需求。至于l10n,我不知道哪个选项最好。


1
谢谢您的建议。这似乎是 i18n 的一个好解决方案。 - Vitalii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接