2010-12-14 18 views
1

エンティティプロパティの国際化:(!)私のデータベースでGWT - 私は次のような問題のためのエレガントな解決策を探しています

が、私はいくつかの定義済みエンティティを持っています。これらのエンティティは、名前と説明(文字列)を持ちます。データアクセス層の周りには、/ etcをロード/検索するビジネスロジックを含むいくつかのEJBがあります。それらの実体。

フロントエンドでは、バックエンドでEJBメソッドを呼び出すGWTアプリケーションを開発しています。

問題は、上記のエンティティの名前と説明を国際化する必要があります。たとえば、ユーザーのロケールに応じて、エンティティの説明は「My cool description」(英語)または「Beschreibung bla」(ドイツ語)または何でも:)

私の最初のアプローチは、データベースでリソース文字列を使用することでした。したがって、エンティティAはdescription "descriptionA"を持ち、エンティティBはdescription "descriptionB"を持ちます...その後、GWTアプリケーション(または他のクライアント)はこのリソース文字列を何らかの種類の "リソースバンドル"を使って実際の記述に変換します。例えば:

* resources_en.properties *:エンティティA

descriptionBの

descriptionA =実際の概要=エンティティBの実際の説明

* resources_de.properties *:

descriptionA =説明書A

説明B

(エンティティは事前定義されているため、コンパイル時にすべての説明を「知る」ことができます。しかし、アプリケーションを再コンパイルせずにリソースバンドルを拡張できる方が良いでしょう)。

これはGWTで可能ですか?これどうやってするの?サーバーまたはクライアント側で「翻訳する」方が良いですか?

それ以外の場合は、バックエンド側のすべてのi18nのものに対処する必要があります。つまり、クライアント側で説明を定義するのではなく、データをまとめて保存することができます。しかし、大きな欠点は、バックエンドが発信者のロケールを認識しなければならないことです。

よろしく、 フランク

答えて

0

これは主に、柔軟性対ダウンロード時間/速度の決断です。コンパイルすると、GWTはメッセージをインライン化し、少し高速なコードを生成することができます。なぜなら、文字列検索は行われないからです。ただし、変更が必要な場合や、再コンパイルしたくない場合や、ユーザーがメッセージを動的に変更できるようにする場合は、動的メッセージが必要です。後者の場合について

、これであなたを助けることができるDictionaryクラスには、以下を参照してください。http://code.google.com/webtoolkit/doc/latest/DevGuideI18n.html#DevGuideDynamicStringInternationalization を辞書を使用すると、静的なページでユーザーに提供するすべてのメッセージを生成します。ユーザーのロケールは、Accept-Languageというヘッダーにあります。このページは、ページが要求されたときにブラウザから送信されます。

いずれの場合(コンパイル済みまたはダイナミック)でも、いくつかの設定プロパティでユーザが設定したロケールを提供することができます。その場合、ロケールをユーザに提供するためにサーバ側で両方の場合にロジックが必要です。

0

すべてが戻ってあなたの質問に...しようとする人のために

可能です:あなたの問題を解決するにはいくつかの方法があります。 1つは、ある種のi18nファサードを導入し、あなたの説明と名前をリソースキーとして扱うことです。翻訳にアクセスするための便利なメソッド、つまりpublic String translate(String message, Locale locale);を定義することができます。このメソッドは、標準のJava ResourceBundleクラスを使用して、実行時にリソースにアクセスできます。

私が見る唯一の本当の問題は、複合メッセージ(つまり、4つはプレースホルダである「blah、blah 4 items」)を処理する方法です。さて、同様の状況で1つのプロジェクトで何をしたのか、デリミタと実際のリソースキーを追加し、別のデリミタとカウントを追加しました: "blah、blah 4 items ## items.in.your.whatever ## 4"英語の場合は、最初の部分を単純にトリミングし、他の言語の場合は文字列全体を処理する必要があります。

関連する問題