1

トリッキーな質問の解決策を探しています。GWT の静的文字列国際化を使用したいので、Constants、ConstantsWithLookup、および Messages を使用しますが、文字列はコンパイル時ではなく、実行時にサーバーから取得する必要があります。

そのようなことを行うプロジェクトは既にありますか、それとも独自の GWT ジェネレーターを作成する必要がありますか?

私を助けてくれるすべての人に感謝します。

更新: 辞書はオプションではありません。アプリケーションはほぼ完成しており、このためにすべてのアプリケーションを変更することはできないためです。

更新 2 : 実際、辞書は、コスタンツのようなインターフェイスまたはメッセージのようなインターフェイスでラップされている場合、オプションです。

4

2 に答える 2

1

あなたが求めているのは、静的な i18n ではありません。GWT の i18n が事実上すべて静的である理由のいくつか:

  • これは同期 API です。サーバーからリソースを取得するには、非同期 API をアプリケーション全体に広げる必要があります (つまり、Future をウィジェットに渡して、文字列がサーバーから取得された後に内部テキストを取得する場所を伝えます)、または基本的には最初に i18n リソースがダウンロードされるまで、アプリの実行をブロックします (ユーザーのエクスペリエンスが低下します)。
  • 生成されたコードを最適化して、アプリ内のメッセージで実際に必要なフォーマッターと関連データのみを含めることができます。複数形のメッセージを含めない場合、そのコードなどを含める必要はありません。ほとんどの場合、式をインライン化したり、デッド コードを削除したり、クラス参照を完全に削除したりできます。
  • 実行時に行うのが困難または費用がかかるものをコンパイル時に利用できます。たとえば、メッセージ形式の文字列を解析するだけでもかなりの量のコードが必要ですが、コンパイルされた出力にそのコードを含める必要はありません。サーバーからアプリの文字列を取得し、そのうちの 1 つに {0,localtime,YMd} が含まれていることがわかったとします。これをローカライズするには、ICU4J が必要です。すべてJSにコンパイルできたとしても、それは膨大なものになります。おそらく、この方法で GWT の i18n のサブセットをサポートできますが、メッセージから参照される可能性のあるすべてのフォーマッターを含める必要があります。

動的な国際化が本当に必要な場合は、他の回答が示唆するように辞書を使用してください(ただし、メッセージが複雑な場合、アプリを適切にローカライズできないことに注意してください)。それが提供できる以上のものが必要な場合は、弾丸を噛んで静的 i18n を使用してください。

于 2013-02-08T15:23:34.453 に答える
0

2 つのオプションがあります。良いと悪いです。

良い: 標準的な方法である静的文字列 i18nは、すべての言語順列が最適化され、使用される場所でインライン化されます (つまり、日本の会社名をボタン/列/ヘッダーの HTML テンプレートに入れます)。

i18n の完全なスイートは、複数形化とメッセージ ビルダー、@nnoations、および自動 i18n のサポートを備えた精巧なものになる可能性があるため、推奨されます。これは、パフォーマンスの面でも最速のオプションです。

あまり良くない: 多くの場合、レガシー システムで作業する必要があるため、「良い」では十分ではありません。ここでは、すべてのロケット ウィジェットではなく、ボックス内のテキストを取得する必要があります。次に、動的文字列 i18nを使用し、古い学校の Dictionary オブジェクトのようなものを使用して文字列をページにドロップします。

于 2013-02-08T13:51:01.097 に答える