[英]Play framework 2, AngularJS and internationalization
我目前正在Play框架2应用程序中实现AngularJS,到目前为止它还不错,但我在国际化方面遇到了一些问题。 我有我的消息文件( messages.en
, messages.fr
等),我在scala模板中没有使用Angular。
现在,我正在使用Angular partials ...所以我发现Play框架的插件( jsMessages
)在javascript文件中使用消息文件,我终于找到了一种方法来使用它和requireJs
以及所有这些东西。
所以,现在我在$scope
变量中传递Messages
函数(允许获取已翻译的消息)。 这样我可以使用{{Messages("myMessage")}}
检索消息,但它无处不在。
例如,我的一些<input>
具有默认值(如占位符,也包含已翻译的消息)。 但是Angular并不喜欢它并且不评估表达式。
所以,我想知道我该怎么做:
我应该使用Play服务器来模拟已经翻译过服务器端的字符串的页面,这些字符串将返回给Angular以将它们用作“部分”吗? (在同一模板中混合使用Scala @
指令和Angular ng-*
指令)
或者我应该只使用javascript来翻译字符串,并且在某些情况下,将额外的变量传递给范围,仅用于输入,textarea以及{{}}
不能直接使用的所有这些组件?
(我个人更喜欢第一种选择)
我认为使用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;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.