繁体   English   中英

玩框架2,AngularJS和国际化

[英]Play framework 2, AngularJS and internationalization

我目前正在Play框架2应用程序中实现AngularJS,到目前为止它还不错,但我在国际化方面遇到了一些问题。 我有我的消息文件( messages.enmessages.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM