Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
Русские буквы в CustomizedSystemMessages
Добрый день!
Возникла необходимость выводить информацию по ошибкам на руссском языке:
@Override
public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) {
CustomizedSystemMessages messages = new CustomizedSystemMessages();
String message = "Нажмите на данное вообщение или Esc";
messages.setInternalErrorCaption("Личный кабинет - внутренняя ошибка"); messages.setInternalErrorMessage(message);
messages.setSessionExpiredCaption("Личный кабинет - Сессия устарела"); messages.setSessionExpiredMessage(message);
messages.setCommunicationErrorCaption("Личный кабинет - коммуникационная ошибка"); messages.setCommunicationErrorMessage(message);
messages.setCookiesDisabledCaption("Личный кабинет - cookies отключены"); messages.setCookiesDisabledMessage(message);
messages.setAuthenticationErrorCaption("Личный кабинет - ошибка аутентификации"); messages.setAuthenticationErrorMessage(message);
return messages;
}
Однако на экране выводится "вопросики" (см. вложение err.jpg )
Все кодировки указаны как UTF-8.
Как это лечится?
А ошибки закинуть в resource bundle и закодировать в юникод? Сие поможет вам.
Arthur Khisamiev: а в какой среде развёрнуто приложение?
Среда - Oracle Linux 7.3
qizer: А ошибки закинуть в resource bundle и закодировать в юникод? Сие поможет вам.
Интересная мысль! А есть пример или описание как это сделать?
а у вас на чём проект? у меня spring-boot. Если интересно - могу дать фрагменты.
А так можете погуглить про i18n. Можете ошибки на разных языках делать и показывать их в зависимости от локали. Ну или с дефолтной локали.
qizer: а у вас на чём проект? у меня spring-boot. Если интересно - могу дать фрагменты.
А так можете погуглить про i18n. Можете ошибки на разных языках делать и показывать их в зависимости от локали. Ну или с дефолтной локали.
Сам проект скомпилирован на Eclipse.
Не среда :-)
В папке resources создайте папку errors и положите туда файл errors.properties
примерная структура файла такая:
error1=Я сломался
error2=Меня сломали
...
Далее вам необходим bean 'ReloadableResourceBundleMessageSource'
Вот моя инициализация:
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:errors/errors");
messageSource.setCacheSeconds(3600);
return messageSource;
}
Выставлять кэш не обязательно, думаю.
Потом сервис, который по id будет доставать сообщение
@Component
public class ErrorMessage {
@Autowired
private MessageSource messageSource;
public String getMessage(String id) {
return messageSource.getMessage(id, null, null);
}
}
Ну а дальше в нужном классе
@Autowired
private ErrorMessage errorMessage
....
String error1 = errorMessage.getMessage("error1");
Выбор текста сообщения в зависимости от локализации - это не совсем тот вопрос который меня интересовал. Хотя, спасибо за пример, думаю что потом обязательно его применю.
Вопрос был в другом - когда происходит сброс состояния на сервере приложения (передеплоено приложение, инвалидирована сессия и др.) фреймворк vaadin через com.vaadin.server.CustomizedSystemMessages, выдает сообщение в браузер заранее определенное текстовое сообщение о данном случае (есть еще и про отключенные куки, про проблемы с коммуникациями и т.д.):
Contains the system messages used to notify the user about various critical situations that can occur.
Use VaadinService.setSystemMessagesProvider(SystemMessagesProvider) to customize.
The defaults defined in this class are:
sessionExpiredURL = null
sessionExpiredNotificationEnabled = true
sessionExpiredCaption = ""
sessionExpiredMessage = "Take note of any unsaved data, and click here to continue."
communicationErrorURL = null
communicationErrorNotificationEnabled = true
communicationErrorCaption = "Communication problem"
communicationErrorMessage = "Take note of any unsaved data, and click here to continue."
internalErrorURL = null
internalErrorNotificationEnabled = true
internalErrorCaption = "Internal error"
internalErrorMessage = "Please notify the administrator.
Take note of any unsaved data, and click here to continue."
cookiesDisabledURL = null
cookiesDisabledNotificationEnabled = true
cookiesDisabledCaption = "Cookies disabled"
cookiesDisabledMessage = "This application requires cookies to function.
Please enable cookies in your browser and click here to try again.
На английском языке все отображаеться нормально. А с русским текстом проблемы. Дело в том что, данный текст генерируеться в UTF-8, а отображаеться "вопросами", хотя весь проект и все элементы на UTF-8 выводяться нормально.
Есть подозрение, что данный текст при преобразовании в javascript "ломаеться", хотя в теле основной страницы отображаеться корректно:
<script type="text/javascript" src="./VAADIN/vaadinPush.js?v=7.7.3"></script>
<script type="text/javascript" src="./VAADIN/vaadinBootstrap.js?v=7.7.3"></script>
<script type="text/javascript">//<![CDATA[
if (!window.vaadin) alert("Failed to load the bootstrap javascript: ./VAADIN/vaadinBootstrap.js?v=7.7.3");
vaadin.initApplication("cabinet-59742920",{"theme":"cabinet","versionInfo":{"vaadinVersion":"7.7.3","atmosphereVersion":"2.2.9.vaadin2"},"widgetset":"kd.kaps.cabinet.widgetset.CabinetWidgetset","widgetsetReady":true,"comErrMsg":{"caption":"Личный кабинет - коммуникационная ошибка","message":"Нажмите на данное вообщение или Esc","url":null},"authErrMsg":{"caption":"Личный кабинет - ошибка аутентификации","message":"Нажмите на данное вообщение или Esc","url":null},"sessExpMsg":{"caption":"Личный кабинет - Сессия устарела","message":"Нажмите на данное вообщение или Esc","url":null},"vaadinDir":"./VAADIN/","standalone":true,"heartbeatInterval":300,"serviceUrl":"."});
//]]></script>
В юникод поробуйте, что ли. Чтобы вместо символов - коды.
Рустем Жуловчинов:
Arthur Khisamiev: а в какой среде развёрнуто приложение?
Среда - Oracle Linux 7.3
А что с настройками локали у пользователя, под которым запускается сервер приложений?
Что выводит под ним команда locale?
qizer: В юникод поробуйте, что ли. Чтобы вместо символов - коды.
Попробую. Как реализую сообщу результат. Склоняюсь к мысли, что это может помочь!
Arthur Khisamiev:
Рустем Жуловчинов:
Arthur Khisamiev: а в какой среде развёрнуто приложение?
Среда - Oracle Linux 7.3
А что с настройками локали у пользователя, под которым запускается сервер приложений?
Что выводит под ним команда locale?
Команда locale выдает следующее:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Рустем Жуловчинов:
Arthur Khisamiev:
Рустем Жуловчинов:
Arthur Khisamiev: а в какой среде развёрнуто приложение?
Среда - Oracle Linux 7.3
А что с настройками локали у пользователя, под которым запускается сервер приложений?
Что выводит под ним команда locale?Команда locale выдает следующее:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
если это именно под тем юзером, под которым запускается сервер приложений, то я пока не знаю, в какую сторону копать
Рустем Жуловчинов:
qizer: В юникод поробуйте, что ли. Чтобы вместо символов - коды.
Попробую. Как реализую сообщу результат. Склоняюсь к мысли, что это может помочь!
Попробовал. под Windows 7 все работает нормально, а под Linux сообщения выводяться по умолчанию на английском...
В своём бине скажите системе какую локаль использовать :-)