0

データベースから翻訳を読み込みます。バンドルを取得するために、カスタムjava.util.ResourceBundle.Controlがあります。

e4 RCP アプリケーションを翻訳するために、アドオンを使用してルート コンテキストに追加するTranslationServiceを作成済みです。それは問題ではありませんでした ( BundleTranslationProviderの 95% をコピーする必要があっただけです)。

ここで、新しい Message Extension (Eclipse Luna に付属) を使用して、残りを翻訳したいと考えています。デフォルトのMessageFactoryServiceImplのソースからわかる限り、そこに私の ResourceBundle.Control を挿入する簡単な方法もないようです。

リンクされたブログ シリーズでは、データベースからリソース バンドルを取得するユース ケースが説明されていますが、クラス ベースのリソース バンドルを使用することで解決されます。すべてのリソース バンドルとすべてのロケールに対してクラスを実装することはできないため、これはオプションではありません。データベースからリソース バンドルをロードする理由は、アプリケーションを再デプロイせずに翻訳を新しい言語にデプロイできるようにするためです。

これを達成する唯一の方法は、デフォルトのMessageFactoryServiceImplの 99% をコピーして独自の IMessageFactoryService を作成し、コントロールを ResourceBundleHelper の呼び出しに渡すことですか?

4

2 に答える 2

1

私の知る限り、ResourceBundle.Control は ResourceBundle をロードするために使用されます。新しいメッセージ拡張機能では、カスタムの ResourceBundle.Control を使用して、OSGi コンテキストで ResourceBundle の読み込みを有効にし、注釈を介して構成できます。

ResourceBundle.Control を交換する AFAICS は、新しいメッセージ拡張機能でサポートされている他のユース ケースを壊します。

問題は、クラス ベースの ResourceBundle を作成する代わりに、なぜカスタム ResourceBundle.Control を使用するのかということです。まだ試していませんが、ベースの ResourceBundle のみを (Locale 情報なしで) 作成し、getLocale() を使用する以外の方法で Locale を決定することは可能かもしれません。

しかし、カスタム ResourceBundle.Control で何をしているのかを知らなければ、何に答えて何を提案すればよいかわかりません。もちろん、そのために API を開くこともできますが、前に述べたように、デフォルトの実装を使用する他のすべてのプラグインは失敗します。

たぶん、あなたが何をしているのか正確にいくつかのヒントを与えることができ、私はあなたの目標を別の方法で達成する方法を示すことができます.

于 2014-02-14T15:47:55.867 に答える