2013-05-22 38 views
4

我目前在Play框架2应用程序中实现AngularJS,迄今为止还不错,但我面临着国际化的一些问题。我有我的消息文件(messages.enmessages.fr等),我通常没有使用Angular在我的Scala模板中使用。Play框架2,AngularJS和国际化

现在,我采用了棱角分明的谐音......所以,我发现游戏框架使用消息JavaScript文件中提交的插件(jsMessages),我终于找到了一种方法与requireJs使用它和所有的东西。

所以,现在我在$scope变量中通过Messages函数(它允许获得翻译的消息)。这样我就可以用{{Messages("myMessage")}}检索邮件,但它无处不在。

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

所以,我不知道我该怎么做:

  • 我应该使用播放服务器模板,已经翻译服务器端的字符串,这将返回到角使用它们的网页作为“部分”? (混合斯卡拉@指令和角ng-*指令在同一模板)

  • ,或者我应该只使用JavaScript来有翻译字符串,在某些情况下,通过一个额外的变量范围,只是输入,文本区域而所有这些组件{{}}哪里不能直接使用?

(我个人比较喜欢第一个选项)

回答

0

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

但是如果你想完全脱离Liferay框架,jsMessage可以是一个很好的解决方案。为了使它工作,尝试将jsMessage函数放在$ root作用域中,以便在任何地方都可用。

为此,在运行主应用程序模块(ng-app指令)时,将jsMessage Messages功能添加到根作用域。

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; 
});