2013-05-22 74 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; 
});