2

我们的 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());
4

1 回答 1

1

您可以为标签的 i18n 使用 Session 的语言环境,并为应该对日期使用不同语言环境的组件覆盖 #getLocale() 或 #getConverter()。我猜您谈论的是需要在德语语言环境中呈现其值的 TextField。如果是这样,只需创建始终在其#getLocale() 中返回 Locale.GERMAN 的 GermanTextField。

于 2012-04-25T11:23:04.763 回答