4

私は現在、Play フレームワーク 2 アプリケーションに AngularJS を実装しています。これまでのところ問題はありませんが、国際化に関していくつかの問題に直面しています。scala テンプレートで Angular なしで通常使用していたメッセージ ファイル ( messages.enmessages.frなど) があります。

今、私はAngularパーシャルを使用しています...だからjsMessages、Playフレームワークがjavascriptファイルでメッセージファイルを使用するためのプラグイン( )を見つけました。最終的にそれを使用する方法を見つけましたrequireJs

Messagesそのため、変数に関数 (翻訳されたメッセージを取得できるようにする) を渡してい$scopeます。そうすれば、でメッセージを取得できますが、{{Messages("myMessage")}}どこでも機能するとは限りません。

たとえば、私のものに<input>はデフォルト値があります (プレースホルダーのように、翻訳されたメッセージもあります)。しかし、Angular はそれを好まず、式を評価しません。

だから、私は何をすべきか疑問に思っています:

  • Play サーバーを使用して、サーバー側で既に翻訳された文字列を含むページをテンプレート化する必要があります。これは、「部分」として使用するために Angular に返されますか? (同じテンプレートにScala@ディレクティブと Angularディレクティブを混在させる)ng-*

  • または、javascript のみを使用して文字列を変換し、場合によっては、{{}}直接使用できない入力、テキストエリア、およびこれらすべてのコンポーネントに対して、追加の変数をスコープに渡す必要がありますか?

(私は個人的に最初のオプションを好みます)

4

1 に答える 1

0

Play テンプレート システムを使用するのは良い解決策だと思います。このようにして、テンプレートに少しロジックを入れたり、Play 構成ファイルにアクセスしたりする必要がある場合に、Scala を使用することもできます。

しかし、Liferay フレームワークから完全に分離したい場合は、jsMessage が良い解決策になります。機能させるには、 $root スコープに jsMessage 関数を配置して、どこでも利用できるようにしてください。

これを行うには、メイン アプリケーション モジュールの実行時に 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;
});
于 2013-08-19T19:49:39.990 に答える