在Wicket应用程序中单独使用语言和格式?

时间:2012-04-25 06:47:49

标签: java wicket wicket-1.5

我们的Wicket应用程序需要为每个用户提供单独的UI语言和数字/日期格式区域设置(例如英文UI,数字和日期格式:德语)。

如果将会话区域设置设置为Locale.GERMAN,则会同时获得德语编号和日期格式以及德语资源(例如MyForm_de.properties)。

我们通过将会话区域设置设置为数字和日期区域设置然后使用自定义ComponentStringResourceLoader来加载字符串(返回super.loadStringResource(clazz,key,language!= null?new Locale(language):locale,风格,变异))。但是,看起来字符串正在被缓存,因为如果我以不同的用户身份登录,我会开始混合使用语言。

任何人都知道控制缓存(假设导致问题)?注意:我不想阻止缓存(因为这可能会影响性能)。我想我想要覆盖缓存行为,以便它可以正常使用我们的自定义资源加载器。

或者是否有更好的方法来解决这个问题?

这是我们用于自定义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());

1 个答案:

答案 0 :(得分:1)

您可以对标签的i18n使用Session的区域设置,并覆盖#getLocale()或#getConverter()以获取应该使用不同日期区域设置的组件。我想你会谈到需要在德语区域设置中呈现其值的TextField。如果是这样,只需创建始终在其#getLocale()中返回Locale.GERMAN的GermanTextField。