我们的 Wicket 应用程序需要每个用户单独的 UI 语言和数字/日期格式区域设置(例如英语的 UI,数字和日期格式:德语)。
如果您将会话区域设置为 Locale.GERMAN,您将获得德语数字和日期格式以及德语资源(例如 MyForm_de.properties)。
我们通过将会话语言环境设置为数字和日期语言环境来解决此问题,然后使用自定义 ComponentStringResourceLoader 加载字符串(返回 super.loadStringResource(clazz, key, language != null ? new Locale(language) : locale, style, variant ))。但是,看起来字符串正在被缓存,因为如果我以不同的用户身份登录,我就会开始混合使用多种语言。
任何人都知道控制缓存(假设导致问题)?注意:我不想阻止缓存(因为这可能会损害性能)。我想我想覆盖缓存行为,以便它与我们的自定义资源加载器一起正常工作。
还是有更好的方法来解决这个问题?
这是我们用于自定义 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());