Більшість складових архітектури Spring підтримують інтернаціоналізацію, як і вебфреймворк Spring MVC. DispatcherServlet
дозволяє автоматично розпізнавати повідомлення, використовуючи регіональні налаштування (локаль) клієнта. Це робиться за допомогою об'єктів LocaleResolver
.
Коли надходить запит, DispatcherServlet
шукає розпізнавач регіональних налаштувань і, якщо знаходить його, намагається використовувати його для встановлення регіональних налаштувань. Використовуючи RequestContext.getLocale()
, ти завжди зможеш отримати регіональні налаштування, які були розпізнані розпізнавачем регіональних налаштувань.
На додаток до автоматичного розпізнавання регіональних налаштувань, ти також можеш прив'язати перехоплювач до відображення обробників, щоб змінити регіональні налаштування за певних обставин (наприклад, на основі параметра у запиті).
Розпізнавачі регіональних налаштувань та перехоплювачі визначаються в пакеті org.springframework.web.servlet.i18n
і зазвичай конфігуруються в контексті твоєї програми. У Spring є такий набір розпізнавачів регіональних налаштувань:
-
Часовий пояс
-
Розпізнавач заголовків
-
Розпізнавач cookie
-
Розпізнавач сесій
-
Перехоплювач регіональних налаштувань
Часовий пояс
На додаток до регіональних налаштувань клієнта, часто корисно знати його часовий пояс. Інтерфейс LocaleContextResolver
надає розширення LocaleResolver
, що дозволяє розпізнавачам забезпечувати більш функціональний LocaleContext
, який може містити інформацію про часовий пояс.
Якщо доступно, TimeZone
користувача можна отримати за допомогою методу RequestContext.getTimeZone()
. Інформація про часовий пояс автоматично використовується всіма об'єктами Converter
та Formatter
дати/часу, які зареєстровані в ConversionService
зі Spring.
Розпізнавач заголовків
Цей розпізнавач регіональних налаштувань перевіряє заголовок accept-language
у запиті, надісланому клієнтом (наприклад, веб-браузером). Зазвичай це поле заголовка містить регіональні налаштування операційної системи клієнта. Зверни увагу, що цей розпізнавач не підтримує інформацію про часовий пояс.
Розпізнавач cookie
Цей розпізнавач регіональних налаштувань перевіряє Cookie
, які можуть існувати на стороні клієнта, щодо зазначених Locale
або TimeZone
. Якщо такі є, використовуються зазначені відомості. Використовуючи властивості цього розпізнавача регіональних налаштувань, ти можеш вказати ім'я cookie, а також максимальний термін дії. У цьому прикладі визначено CookieLocaleResolver
:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="clientlanguage"/>
<!-- в секундах. Якщо встановлено -1, cookie не зберігається (видаляється при закритті браузера) -->
<property name="cookieMaxAge" value="100000"/>
</bean>
У наступній таблиці описано властивості CookieLocaleResolver
:
Властивість | За замовчуванням | Опис |
---|---|---|
|
ім'я класу + LOCALE |
Ім'я cookie |
|
Контейнер сервлетів за замовчуванням |
Максимальний час, протягом якого cookie зберігається на стороні клієнта. Якщо встановлено |
|
/ |
Обмежує видимість cookie певною частиною сайту. Якщо зазначено |
Розпізнавальник сесій
SessionLocaleResolver
дозволяє отримувати Locale
та TimeZone
із сесії, яка може бути пов'язана із запитом користувача. На відміну від CookieLocaleResolver
, ця стратегія зберігає локально вибрані регіональні налаштування HttpSession
контейнера сервлета. Як наслідок, ці налаштування є тимчасовими для кожної сесії і, отже, втрачаються після завершення кожної сесії.
Зверни увагу, що тут немає прямого зв'язку із зовнішніми механізмами управління сесіями, такими як проєкт Spring Session. Цей SessionLocaleResolver
обчислює та змінює відповідні атрибути HttpSession
у поточному HttpServletRequest
.
Перехоплювач регіональних налаштувань
Ти можеш активувати зміну регіональних налаштувань, якщо додаси LocaleChangeInterceptor
до одного з визначень HandlerMapping
. Він виявляє параметр у запиті і відповідним чином змінює регіональні налаштування, викликаючи метод setLocale
для LocaleResolver
у контексті програми диспетчера. У наступному прикладі показано, що виклики всіх ресурсів *.view
, які містять параметр під назвою siteLanguage
, тепер змінюватимуть регіональні налаштування. Так, наприклад, запит на URL-адресу https://www.sf.net /home.view?siteLanguage=nl
змінює мову сайту на голландську. У цьому прикладі показано, як перехопити регіональні налаштування:
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="siteLanguage"/>
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor"/>
</list>
</property>
<property name="mappings">
<value>/**/*.view=someController</value>
</property>
</bean>
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ