【问题标题】:Internationalization with angularjs使用 angularjs 进行国际化
【发布时间】:2023-03-13 15:03:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 嗨 Uri,我一直在解决同样的问题:将我的 Django 应用程序(后端)使用的 .po 文件集成到 AngularJS 应用程序(前端)中。您能否向我提供有关您最终如何达到此目标的更多信息?两种方法都适合我,虽然我宁愿 1. ;-) 在此先感谢。
  • 选择#2。它更简单,并且完成了工作。

标签: angularjs internationalization templating


【解决方案1】:

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

(抱歉质量低!手机摄像头)

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

【讨论】:

  • 好的,但是为什么 JSON 调用比静态 js 更好?
  • 我认为@package 的答案解释了为什么 JSON 更好
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    看看angular-translate :)

    它解决了这两种情况!

    【讨论】:

    【解决方案4】:

    我尝试了几个不同的选项,包括 Angular Translate,但我最喜欢 Angular-gettext 迄今为止最好的。

    有一个非常有帮助的事情是,他们有一个工作演示,他们 i18n TodoMVC,称为 angular-gettext-example

    工作流程很简单:

    1. 将“翻译”指令添加到您的模板中
    2. 运行 grunt 以提取 .pot 模板
    3. 将 .pot 交给您的翻译供应商或使用 POEdit 或类似软件进行 DIY
    4. 将 .po 翻译文件放回您的项目中
    5. 运行 grunt 编译 .po 文件
    6. 在您的范围内设置默认语言
    7. 观看魔术!

    我确信这里发布的其他解决方案也不错,但我还没有看到像 angular-gettext-example 这样组织良好的端到端示例。

    干杯, 京东

    【讨论】:

    • 非常酷的工具。这最符合我的需求。谢谢! +1
    • 迄今为止最无缝的集成。谢谢!
    • angular-gettext 是否支持上下文?它们对于处理同音异义词很有用。
    • @cespon Yes, it does
    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多