20

我正在考虑将我的网站移动到 angularjs,并且我想从非常小的开始,将我所有的静态服务器端纯文本模板从 django 移动到 angular(否则会出现“{{}}”的语法问题)。

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

  1. 有一个 ajax 调用,它返回一个包含我网站所有文本的 JSON。文本将存储在绑定到我的 HTML 元素的变量中,因此 Angular 将更新所有内容。
  2. 将静态 js 文件与字典一起存储并将其包含在我的 HTML 中并将字典与 angularjs 绑定。

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

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

4

4 回答 4

33

I tried out a few different options, including Angular Translate, but I liked Angular-gettext the best so far.

One thing that helped tremendously is that there's a working demo for it where they i18n TodoMVC, called angular-gettext-example.

The workflow is simple:

  1. Add the "translate" directive to your templates
  2. Run grunt to extract .pot template(s)
  3. Hand off the .pot to your translation vendor or DIY with POEdit or similar software
  4. Drop the .po translation files back into your project
  5. Run grunt to compile the .po files
  6. Set the default language in your scope
  7. Watch the magic!

I'm sure the other solutions posted here are good as well but I haven't seen an end-to-end example so nicely organized as angular-gettext-example.

Cheers, JD

于 2013-12-05T18:08:05.673 回答
9

首先,有一种方法可以将 Angular 的分隔符更改为其他符号,如下所示:Angular JS custom delimiter

2. 选项更容易。您将其包含一次,您就可以在页面加载时获得所有翻译。没有异步调用,没有承诺,很简单。

但我会选择第一个。遵循选项 1,像$translate这样的服务确实会让您的生活更轻松。此外,它还有许多选项可以在 LocalStorage 和 cookie 中加载和存储加载的数据,因此有足够的空间进行扩展和自定义。然后,您可以使用 $translate 服务、指令或过滤器翻译您的内容。

并且不要忘记 2 选项禁用缓存请求的任何选项。在对起始页的每个请求中,服务器都必须读取静态文件并将其包含在 html 中。使用第一个选项,用户的浏览器可以根据需要缓存 .json。

于 2013-07-10T07:00:29.683 回答
4

看看角度翻译:)

它解决了两种情况!

于 2013-08-01T05:43:42.933 回答
4

AngularJS 仅支持货币、日期和数字过滤器的 il8n/L10n。根据这本书

书拍! (对不起质量低!手机摄像头)

我会说遵循第一种方法并动态加载翻译。这将涉及大量工作,但没有其他办法

于 2013-07-10T06:58:54.807 回答