2016-07-13 8 views
0

私のアプリケーションでは、動的なローカリゼーションを使用する必要があるため、Constantsインターフェイスを使用することはできません。私はしばらくの間Constantsを使っていましたが、コンパイルせずにテキストを変更する必要がありましたので、他の方法で見つける必要がありました。定数のようなGWTインターフェイス

だから私は現在辞書を使用しています。つまり、今ではUiBinderでテキストを使用したいときは、引数のないメソッドしか使用できません。だから私はクラス "StringIdentifiers"を作成しました。ここではMyConstantsで以前と同じメソッドを使用していましたが、ここで指定されたStringを返すメソッドごとに本文を指定する必要があります。

だから、例えば私が持っている:

Dictionary locale = Dictionary.getDictionary("myJsObjectWithStrings"); 

//and then the methods for returning the actual strings from the JS object 
String loading(){ 
    return locale.get("loading"); 
} 

を私は残りの部分は、常にではStringパラメータとして表示されるメソッドの名前と同じであるためのみ

String loading(); 

する方法をしたいと思いますget()メソッドJSオブジェクトに文字列がないときに、デフォルト値を返す可能性もあります。しかし、私はそれをどうやって行うのか分かりません。私はConstantsインターフェイスをチェックしましたが、そこのコードは実際には分かりません。誰か私にそのようなことを実装する方法の例を教えてくださいできますか?

+0

なぜあなたは動的であるのですか?ページの再読み込みは受け入れ可能ですか? –

+0

はい、ユーザーはログイン画面で言語を変更し、選択した言語に対応する別のURL(http://page.com/index.html?locale=ja)でページをリロードします。 UiBinderテンプレートを変更してもページが読み込まれないので、私はそれを好きです。私の質問は、各文字列のメソッドシグネチャ(Constantsなど)だけを書くことができます。 –

+2

ページをリロードすると、なぜi18n文字列の古典的なGWTメカニズムを使用できないのですか? –

答えて

0

GWTに標準機能はありませんが、自分で作成することはできます。それは少しのストレッチですが、それはGWTジェネレータメカニズムを使用することによって動作するはずです。グローバル用語では、次のように動作するはずです:

  1. メソッド名(たとえば、MyMessages)を作成します。
  2. MyMessages message = GWT.create(MyMessages.class)を使用してください。テキストが必要な場所message.loading()
  3. インターフェイスを実装するクラスを生成するジェネレータを作成します。このクラスはコンパイル時に作成され、あなたの例のようにインタフェースメソッドの実装を含むべきです。
  4. gwt.xmlファイルにgenerate-withタグを追加して機能させます。

これは簡単な説明ですが、役立つことを願っています。ジェネレータの詳細については、What is the use GWT generator?またはhttp://blog.arcbees.com/2015/05/26/how-to-write-gwt-generators-efficiently/

i18nのGWTのアノテーションの一部を再利用して、たとえばデフォルトのテキストを追加することもできます。注釈をインタフェースに追加し、ジェネレータでアノテーションをスキャンし、コード生成部分で使用します。

+0

答えをありがとう、それは私が探していたものです。うまくいけば、私はそれのようなものを実装することができるだろう。 –

関連する問題