Play框架2、AngularJS和国际化

4
我目前正在将AngularJS实现在Play框架2应用中,效果不错,但在国际化方面遇到了一些问题。我有我的消息文件(messages.en、messages.fr等),在没有Angular的情况下在我的scala模板中正常使用。
现在,我正在使用Angular部分......所以我找到了一个插件(jsMessages)来使用javascript文件中的消息文件,我最终找到了一种使用requireJs和所有这些东西的方法。
因此,现在我将Messages函数(允许获取翻译后的消息)传递给$scope变量。这样我就可以通过{{Messages("myMessage")}}检索消息,但它并不适用于所有情况。
例如,我的一些具有默认值(如占位符,并带有已翻译的消息)。但是Angular不喜欢它,不会评估表达式。
所以,我想知道我该怎么做: • 应该使用Play服务器来使用已在服务器端翻译的字符串对页面进行模板处理,然后将其返回给Angular以将其用作“partials”吗?(在同一模板中混合Scala @指令和Angular ng-*指令) • 还是应该仅使用javascript来翻译字符串,在某些情况下,仅为输入、文本区域和所有这些组件传递额外的变量,其中不能直接使用{{}}?
(我个人更喜欢第一种选择)
1个回答

0

我认为使用Play模板系统是一个不错的解决方案。这样,如果您需要在模板中放置一些逻辑或访问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;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接