4

我目前正在 Play framework 2 应用程序中实现 AngularJS,到目前为止效果很好,但我在国际化方面遇到了一些问题。我的 scala 模板中有我通常在没有 Angular 的情况下使用的消息文件(messages.en,messages.fr等)。

现在,我正在使用 Angular 部分...所以我找到了一个用于jsMessagesPlay 框架的插件(requireJs

所以,现在我Messages在变量中传递函数(允许获取翻译的消息)$scope。这样我就可以用 检索消息{{Messages("myMessage")}},但它并不适用于任何地方。

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

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

  • 我应该使用 Play 服务器来模板页面,其中包含已经在服务器端翻译的字符串,这些字符串将返回给 Angular 以将它们用作“部分”?(在同一个模板中混合使用 Scala@指令和 Angular指令)ng-*

  • 还是我应该只使用 javascript 来翻译字符串,并且在某些情况下,将一个额外的变量传递给范围,仅用于输入、textarea 和所有这些{{}}不能直接使用的组件?

(我个人更喜欢第一个选项)

4

1 回答 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;
});
于 2013-08-19T19:49:39.990 回答