私たちの Wicket アプリでは、ユーザーごとに個別の UI 言語と数字/日付形式のロケール (例: 英語の UI、数字と日付形式: ドイツ語) が必要です。
セッション ロケールを Locale.GERMAN に設定すると、ドイツ語の数字と日付の形式とドイツ語のリソース (MyForm_de.properties など) の両方が取得されます。
セッション ロケールを数字と日付のロケールに設定し、カスタム ComponentStringResourceLoader を使用して文字列をロードすることで、この問題を回避しました (return super.loadStringResource(clazz, key, language != null ? new Locale(language) : locale, style, Variation) )))。ただし、別のユーザーとしてログオンすると、言語が混在し始めるため、文字列がキャッシュされているようです。
キャッシングを制御する方法を知っている人はいますか (それが問題の原因であると仮定します)。注: キャッシュを防止したくありません (おそらくパフォーマンスが低下するため)。カスタムリソースローダーで正しく動作するように、キャッシング動作をオーバーライドしたいと思います。
または、この問題を解決するためのより良いアプローチがありますか?
カスタム StringResourceLoader に使用したコードは次のとおりです。
ComponentStringResourceLoader myComponentStringResourceLoader = new ComponentStringResourceLoader() {
@Override
public String loadStringResource(Class<?> clazz, String key, Locale locale, String style, String variation) {
return super.loadStringResource(clazz, key, getLoggedOnUser().getUILanguageLocale(), style, variation);
}
};
getResourceSettings().getStringResourceLoaders().add(0, myComponentStringResourceLoader);
セッション ロケールを設定するコードを次に示します (数値と日付の書式設定に使用)。
getSession().setLocale(getLoggedOnUser().getNumberAndDateLocale());