【问题标题】:Play framework 2, AngularJS and internationalization玩框架2、AngularJS和国际化
【发布时间】:2013-05-22 10:39:15
【问题描述】:

我目前正在 Play 框架 2 应用程序中实现 AngularJS,到目前为止效果还不错,但我在国际化方面遇到了一些问题。我有我的消息文件(messages.enmessages.fr 等),我在我的 scala 模板中正常使用没有 Angular。

现在,我正在使用 Angular 部分...所以我为 Play 框架找到了一个插件 (jsMessages) 以使用 javascript 文件中的消息文件,我终于找到了一种将它与 requireJs 一起使用的方法所有这些东西。

所以,现在我在$scope 变量中传递Messages 函数(它允许获取已翻译的消息)。这样我可以使用{{Messages("myMessage")}} 检索消息,但它并不适用于任何地方。

例如,我的一些<input> 具有默认值(如占位符,也带有翻译的消息)。但 Angular 不喜欢它,也不计算表达式。

所以,我想知道我该怎么办:

  • 我是否应该使用 Play 服务器来模板页面,其中包含已在服务器端翻译的字符串,这些字符串将返回给 Angular 以将它们用作“部分”? (在同一个模板中混合使用 Scala @ 指令和 Angular ng-* 指令)

  • 或者我应该只使用 javascript 来翻译字符串,并且在某些情况下,将一个额外的变量传递给范围,仅用于输入、文本区域和所有这些无法直接使用 {{}} 的组件?

(我个人更喜欢第一种)

【问题讨论】:

    标签: angularjs internationalization playframework-2.0


    【解决方案1】:

    我认为使用 Play 模板系统是一个很好的解决方案。这样,如果您需要在模板中添加一些逻辑或访问 Play 配置文件,您也可以使用 Scala。

    但是如果你想与 Liferay 框架完全解耦,jsMessage 可能是一个很好的解决方案。为了使它工作,尝试将 jsMessage 函数放在 $root 范围内,以使其在任何地方都可用。

    为此,在您的主应用程序模块运行时将 jsMessage Messages 函数添加到根范围(ng-app 指令)。

    angular.module('app').run(function ($rootScope) {
        //Put the jsMessage function in the root scope in order to be able to call
        //{{ Messages('my.messages') }} from the templates.
        $rootScope.Messages = window.Messages;
    });
    

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多