Spring arxitekturasi tarkibidagi ko'pchilik qismlar, shu jumladan Spring MVC veb-freyvmorki, internatsionalizatsiyani qo'llab-quvvatlaydi. DispatcherServlet mijozning regional sozlamalarini (lokalni) ishlatib, avtomatik tarzda xabarlarni aniqlash imkonini beradi. Bu LocaleResolver obyektlari yordamida amalga oshiriladi.
So'rov kelganda, DispatcherServlet regional sozlamalar aniqlovchisini qidiradi va topilganda uni ishlatishga harakat qiladi. RequestContext.getLocale() metodidan foydalanib, har doim aniqlovchi tomonidan aniqlangan regional sozlamalarni olishingiz mumkin.
Avtomatik regional sozlamalar aniqlanishiga qo'shimcha ravishda, siz ba'zi holatlarda (masalan, so'rovdagi parametr asosida) regional sozlamalarni o'zgartirish uchun qayta ishlovchiga interceptor bog'lashingiz mumkin.
Regional sozlamalar aniqlovchi va interceptors org.springframework.web.servlet.i18n paketida aniqlanadi va sizning ilovangiz kontekstida oddiy tarzda sozlanadi. Spring quyidagi regional sozlamalar aniqlash vositalarini o'z ichiga oladi.
-
Vaqt zonasi
-
Header aniqlovchi
-
Cookie aniqlovchi
-
Sessiya aniqlovchi
-
Regional sozlamalar interceptori
Vaqt zonasi
Mijozning regional sozlamalarini olishga qo'shimcha ravishda, uning vaqt zonasini bilish foydali bo'lishi mumkin. LocaleContextResolver interfeysi LocaleResolver kengaytmasini taqdim etadi, bu esa aniqlovchilarga kengroq LocaleContext taqdim etish imkonini beradi, bunda vaqt zonasi ma'lumotlari ham mavjud bo'lishi mumkin.
Agar mavjud bo'lsa, foydalanuvchining TimeZone ni RequestContext.getTimeZone() metodi orqali olishingiz mumkin. Vaqt zonasi ma'lumotlari avtomatik ravishda Springning ConversionService da ro'yxatdan o'tgan barcha Converter va sana/vaqt Formatter obyektlari tomonidan ishlatiladi.
Header aniqlovchi
Bu regional sozlamalar aniqlovchi, mijoz tomonidan yuborilgan so'rovdagi accept-language headerini tekshiradi (masalan, veb-brauzer). Odatda bu header maydonida mijozning operatsion tizimining regional sozlamalari mavjud bo'ladi. Shuni yodda tutingki, bu aniqlovchi vaqt zonasi ma'lumotlarini qo'llab-quvvatlamaydi.
Cookie aniqlovchi
Bu regional sozlamalar aniqlovchi mijoz tomonida mavjud bo'lishi mumkin bo'lgan Cookielarni tekshiradi va ularga nastroyka qilingan Locale yoki TimeZone larni tekshiradi. Agar mavjud bo'lsa, u belgilangan ma'lumotlarni ishlatadi. Bu regional sozlamalar aniqlovchining xususiyatlarini ishlatib, siz cookie nomini va maksimal saqlash muddatini belgilashingiz mumkin. Keyingi misolda CookieLocaleResolver aniqlangan:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="cookieName" value="clientlanguage"/>
<!-- soniyalar ichida. Agar qiymat -1 bo'lsa, cookie saqlanmaydi (brauzer yopilganda o'chiriladi) -->
<property name="cookieMaxAge" value="100000"/>
</bean>
Keyingi jadvalda CookieLocaleResolverning xususiyatlari tasvirlangan:
| Xususiyat | Standart | Tavsif |
|---|---|---|
|
|
sinif nomi + LOCALE |
Cookie nomi |
|
|
Servlets konteynerining standarti |
Cookie mijoz tomonida qancha vaqt saqlanishi haqida maksimal vaqt. Agar |
|
|
/ |
Cookie ko'rinishi sizning saytning ma'lum bir qismi bilan cheklanadi. Agar |
Sessiya aniqlovchi
SessionLocaleResolver foydalanuvchi so'rovi bilan bog'liq bo'lgan sessiyadan Locale va TimeZone ni olish imkonini beradi. CookieLocaleResolver dan farqli o'laroq, bu strategiya tanlangan regional sozlamalarni servlet konteyneridagi HttpSession da saqlaydi. Natijada, bu sozlamalar har bir sessiya uchun vaqtinchalik va shu sababli har bir sessiya tugatilgandan keyin yo'qoladi.
Spring Session loyihasi kabi tashqi sessiya boshqaruvi mexanizmlari bilan to'g'ridan-to'g'ri bog'liqlik yo'q. Bu SessionLocaleResolver joriy HttpServletRequestdagi HttpSessionga tegishli atributlarni hisoblaydi va o'zgartiradi.
Regional sozlamalar interceptori
Regional sozlamalarni o'zgartirish jarayonini HandlerMapping aniqlanishlariga LocaleChangeInterceptor qo'shish orqali faollashtirishingiz mumkin. U so'rovdagi bir parametrni aniqlaydi va mos ravishda regional sozlamalarni o'zgartiradi, DispatcherServletni kontekstda LocaleResolver uchun setLocale metodini chaqiradi. Keyingi misol ko'rsatadi, *.view resurslarining barcha chaqiruvlari, nomi siteLanguage bo'lgan parametrni o'z ichiga oladi, endi regional sozlamalarni o'zgartiradi. Masalan, URL manziliga yuborilgan so'rov https://www.sf.net/home.view?siteLanguage=nl sayt tilini golland tiliga o'zgartiradi. Keyingi misol regional sozlamalarni intercept qilishni ko'rsatadi:
<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>
GO TO FULL VERSION