Отдельные языковые и форматные локали в приложении калитки?
Нашему приложению Wicket требуется отдельный язык интерфейса и локали формата числа / даты (например, UI на английском языке, формат числа и даты: немецкий) для каждого пользователя.
Если вы задаете локаль сеанса, чтобы сказать Locale.Немецкий, вы получаете как немецкий формат чисел и дат, так и немецкие ресурсы (например, MyForm_de.собственности).
Мы обошли это, установив языковой стандарт сеанса в языковой стандарт числа и даты, а затем используя пользовательский ComponentStringResourceLoader для загрузки строк (return супер.loadStringResource(clazz, ключ, язык != ноль ? новая Локаль (язык): локаль, стиль, вариация)). Однако похоже, что строки кэшируются, потому что если я войду в систему как разные пользователи, я начну получать смесь языков.
Кто-нибудь знает, как управлять кэшированием (предполагая, что это вызывает проблему)? Примечание: Я не хочу препятствовать кэшированию (так как это, вероятно, повредит производительности). Я думаю, что хочу переопределить поведение кэширования, чтобы оно корректно работало с нашими обычаями загрузчик ресурсов.
Или есть ли вообще лучший подход к решению этой проблемы?
Вот код, который мы использовали для пользовательского 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 ответ:
Вы можете использовать локаль сеанса для i18n меток и либо переопределить #getLocale (), либо #getConverter () для компонентов, которые должны использовать другую локаль для дат. Я думаю, вы говорите о текстовом поле,которое должно отображать его значение в немецком языке. Если да, то просто создайте поле GermanTextField, которое всегда возвращает Locale.Немецкий язык в своем #getLocale ().