AngularJS 中的国际化

20

我想将我的网站迁移到AngularJS上,并且我想从小处开始,通过将所有静态的服务器端纯文本模板从Django移到Angular(否则会出现 '{{}}' 的语法问题)。

似乎最好的方法是两种选择之一:

  1. 使用ajax调用返回JSON格式的所有网站文本。这些文本将存储在变量中,该变量绑定到我的HTML元素上,因此Angular将更新所有内容。
  2. 将字典存储在静态js文件中,并将其包含在我的HTML文件中,然后将字典与AngularJS进行绑定。

这两个选项都可以允许我在不重新加载页面的情况下切换语言。

哪一个更好?一般来说,这是一个好方法吗?还是有更正确的方式?


嗨Uri,我一直在处理同一个问题:将Django应用程序(后端)使用的.po文件集成到AngularJS应用程序(前端)中。您能否提供更多有关如何最终解决此问题的信息?虽然两种方法对我都OK,但我更喜欢第一种方法;-)先行感谢。 - trinchet
选择了第二个选项。它更简单,而且完成了任务。 - Uri
我是如何做到的 http://stackoverflow.com/questions/19881590/how-you-deal-with-translation-multilanguage-webservices-in-django-rest-framewo/28078356#28078356 - littlegreen
4个回答

33

我尝试了几个不同的选项,包括Angular Translate,但是到目前为止我最喜欢Angular-gettext

其中一个非常有帮助的事情是,它有一个工作示例,他们在其中使用i18n TodoMVC,称为 angular-gettext-example

工作流程很简单:

  1. 将“translate”指令添加到您的模板中
  2. 运行grunt提取.pot模板
  3. 将.pot交给翻译供应商或使用POEdit等软件DIY
  4. 将.po翻译文件再次放回项目中
  5. 运行grunt编译.po文件
  6. 将默认语言设置为您的范围
  7. 看魔法吧!

我相信这里发布的其他解决方案也很好,但是我还没有看到像angular-gettext-example这样漂亮组织的端到端示例。

干杯, JD


非常酷的工具。这正是我需要的。谢谢!+1 - tmuecksch
到目前为止最无缝的集成。谢谢! - Warwick
angular-gettext 是否支持上下文?它们对于处理同音异义词非常有用。 - cespon
@cespon 是的,它可以 - user1338062

9
首先,可以通过以下方法更改angular的分隔符为其他符号:Angular JS custom delimiter
第二个选项更容易。您只需包含一次就可以在页面加载时获得所有翻译。没有异步调用、没有承诺,非常简单易用。
然而,我会选择第一个选项。像$translate这样的服务真正使您的生活更轻松,遵循选项1。此外,它还有许多选项,可用于在LocalStorage和cookies中加载和存储加载的数据,因此有足够的空间进行扩展和定制。然后,您可以使用$translate服务、指令或过滤器来翻译内容。
不要忘记,第二个选项禁用了任何缓存请求的选项。在每个对起始页的请求中,服务器都必须读取静态文件并将其包含在html中。使用第一个选项,用户的浏览器可以缓存.json,时间可以长达您想要的。

4
AngularJS仅支持货币、日期和数字过滤器的il8n/L10n。根据这本书所述:
我建议采用第一种方法,动态加载翻译。这将涉及大量工作,但没有其他解决办法。

好的,但为什么JSON调用比静态js更好呢? - Uri
1
我认为@package的答案解释了为什么JSON更好。 - Ahmad Alfy

4

还有jlg-i18n,它解决了这两个问题,并添加了插值和复数形式。https://github.com/jlguenego/jlg-i18n - jlguenego

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