我目前正在Play框架2应用程序中实现AngularJS,到目前为止它还不错,但我在国际化方面遇到了一些问题。我的消息文件(messages.en
,messages.fr
等)是我在scala模板中没有使用Angular时正常使用的。
现在,我正在使用Angular partials ...所以我找到了一个Play框架(jsMessages
),用于在javascript文件中使用消息文件,我终于找到了一种方法将它用于{{ 1}}以及所有这些东西。
所以,现在我在requireJs
变量中传递Messages
函数(允许获取已翻译的消息)。这样我可以使用$scope
检索邮件,但它无处不在。
例如,我的一些{{Messages("myMessage")}}
具有默认值(如占位符,也包含已翻译的消息)。但Angular并不喜欢它,也没有评估表达式。
所以,我想知道该怎么做:
我应该使用Play服务器来模拟已经翻译过服务器端的字符串的页面,这些字符串将被返回给Angular以将它们用作“部分”吗? (在相同的模板中混合使用Scala <input>
指令和Angular @
指令)
或者我应该只使用javascript来翻译字符串,并且在某些情况下,将额外的变量传递给范围,仅用于输入,textarea和所有这些不能使用ng-*
的组件直接?
(我个人更喜欢第一种选择)
答案 0 :(得分:0)
我认为使用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;
});