私のプロジェクトには複数のプラグインが含まれており、すべてのプラグインには20個近くの翻訳が含まれているplugin.propertiesファイルが含まれています。 MANIFEST.MFファイルは、外部プラグイン文字列が格納されているプロパティファイルの名前を定義します。eclipseのplugin.propertiesメカニズムRCP
Bundle-Localization: plugin
私はEclipseは、実行時にplugin.propertiesファイルの中の "%plugin.name" を検索します
%plugin.name
のように定義するプラグインの名前。
"plugin.properties"ファイルで、どのクラスがMANIFEST.MF Bundle-Localizationエントリを読み、どのポイントに '%'という接尾辞が付いた文字列が読み込まれていますか?
こういったクラスを見つけてパッチしたいのですが、最初に "%plugin.name"という識別子の他のディレクトリやファイルを調べることができます。これらの新しいメカニズムを使用すると、オリジナルのプラグインを変更せずに、製品にフラグメントを追加して、 "plugin.properties"ファイルに1行を上書きすることができます。 これらのメカニズムを使用すると、異なるフラグメントを追加するだけで、複数の顧客のビルドプロセスを作成できます。変更したい顧客名と特殊文字列を含むフラグメント。
フラグメントメカニズムは元のプラグインにファイルを追加するだけなので、このようにしたいと思います。 "plugin.properties"ファイルがプラグインに存在する場合、フラグメント "plugin.properties"ファイルは無視されます。
UPDATE 1:
class ManifestLocalization{
...
protected ResourceBundle getResourceBundle(String localeString) {
}
...
}
リターン特性のリソースバンドルは、指定されたロケール文字列のファイル
方法。 誰かが最初にフラグメントを調べてリソースパスを取得できるようになったら、投稿してください。
UPDATE 2:クラスのプロパティの
private URL findInResolved(String filePath, AbstractBundle bundleHost) {
URL result = findInBundle(filePath, bundleHost);
if (result != null)
return result;
return findInFragments(filePath, bundleHost);
}
検索設定をファイルManifestLocalizationとキャッシュそれで
方法。翻訳は、キャッシュされたファイルから取得することができます。問題は、完全なファイルがキャッシュされ、単一の翻訳ではないことです。
解決策は、バンドルファイルを読み取るよりも、まずフラグメントファイルを読み取ることです。両方のファイルが既存の場合は、それらを1つのファイルにマージし、新しいプロパティファイルをディスクに書き込みます。新しいプロパティファイルのURLが返され、新しいpropetriesファイルがキャッシュされます。
私は、ポピュレートメソッドを見つけることができますか?または私はそれを書く必要がありますか? –
あなたの答えにもっと情報を入れてください。ありがとうございました! –