powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring 3.1.1: i18n, локаль, изменение языка
12 сообщений из 12, страница 1 из 1
Spring 3.1.1: i18n, локаль, изменение языка
    #37679788
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал новый веб-проект, скачал Spring 3.1.1, Hibernate 4.
Есть выбор языков, на которых показывать страницу. Настройки Спринга:
application-context.xml:
Код: xml
1.
2.
3.
	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basename" value="messages"/>
	</bean>


springmvc-servlet.xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<property name="basename" value="classpath:messages"/>
		<property name="defaultEncoding" value="UTF-8"/>
	</bean>
	<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
		<property name="paramName" value="language"/>
	</bean>
	<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
		<property name="defaultLocale" value="en"/>
	</bean>


На странице:
Код: html
1.
2.
3.
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
...
<spring:message code="test"/>



Данные из messages_XX.properties берет, но вот по умолчанию использует родную украинскую локаль, хотя в конфиге установлена английская.
Думаю, это связано с тем, что стартовая страница прописана в web.xml как
Код: xml
1.
2.
3.
	<welcome-file-list>
		<welcome-file>pages/index.jsp</welcome-file>
	</welcome-file-list>


Она должна была "подхватить" локаль, установленную в спринговском конфиге?
Очень не хочется использовать в url вставку параметра типа ?language=en.

Что-то запутался я с этими локалями. Есть парочка проектов, где используется аналогичная схема, только вот контекст там динамический: сайты построены на одной странице, на которую подгружаются динамические блоки. И там все работает. Сейчас более "классическое" исполнение сайта - почти статические страницы, между которыми происходят переходы. Спасибо за совет.
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37680233
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ау, люди! Почему не цепляет дефолтную локаль?
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37680597
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем, ИЕ отображает строки из messages_uk.properties, а Хром и ФФ - с messages_ru.properties.
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37680698
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckПричем, ИЕ отображает строки из messages_uk.properties, а Хром и ФФ - с messages_ru.properties.
Похоже, вот и ответ. Что в http заголовках?
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37680750
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeonidvПохоже, вот и ответ. Что в http заголовках?

Ну, это как бы не совсем ответ, если я правильно помню, то CookieLocaleResolver начинает обращаться к заголовкам response, если он
не только не находит нужную печенюшку, но и defaultLocale.

Я бы на месте автора вопроса быстренько выдрал/унаследовал из исходников CookieLocaleResolver, создал свой и глянул, что у него
"унутре" неонка делает.

Но прежде, не плохо было бы понять действительно ли проблема в <welcome-file> или элементарно как-то
не так назван файл свойств или там не все обрабатывает DispatcherServlet.

Я бы проверил, но лениво, т.к. считаю, что разумней делать как-то так:
Код: java
1.
2.
3.
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>



И потом:
Код: java
1.
2.
<mvc:view-controller path="/" view-name="main"/>
<mvc:view-controller path="/index.html" view-name="main"/>



У автора main = pages/index.jsp, тоже, кстати загадка почему не воспользоваться префиксами и суффиксами?
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37681001
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался и решил проблему по-старинке.
Я так понял, что welcome-file просто грузится и обращения к MVC Servlet еще нет, поэтому локаль не установилась. Следовательно, надо либо вызвать принудительно интерцептор (?), который поменяет локаль на дефолтную, либо перед показом первой страницы пропустить запрос через Spring MVC.

Второй вариант мне понятнее и проще, поэтому я установил welcome-file для страницы-пустышки (можно было напрямую сервлет, но пока так сделал) типа такой:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% request.getRequestDispatcher("/start").forward(request, response);%>
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; UTF-8">
		<meta http-equiv="Pragma" content="no-cache"/>
		<meta http-equiv="Expires" content="0"/>		
		<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/>
	</head>
	<body>
	</body>
</html>


А меппинг "/start" повесил на MVC servlet и обрабатываю так:
Код: java
1.
2.
3.
4.
5.
6.
7.
@Controller
public class StartController {
	@RequestMapping("/start")
	public void start(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		request.getRequestDispatcher("/pages/index.jsp").forward(request, response);
	}
}


Как бы все условия переназначения локали соблюдены, хотя и таким "обходным" путем. По крайней мере, заработало.
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37681320
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, наврал ... Первая страница вызвана из сервлета и на ней меняется локаль.
Если же перейти по ссылке на другую страницу, вызов пройдет "мимо" MVC сервлета и изменение языка не влияет на эту страницу, хотя при переходе на предудущую (первую) язык оказывается поменянным (я его меняю путем ajax-вызова метода в MVC сервлете с параметром language=XX).

Чего-то, видать, я не допонимаю в этом механизме ...
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37681323
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам с собой разговариваю, сам себя путаю ... сорри.
Дошло: надо все переходы пропускать через сервлеты Spring MVC. Так все встает на свои места. Просто перенести маппинг из web.xml в спринговский конфиг (аннотации контроллера).
Автоматом как-то прояснилось и похоже, что заработало как я того хотел.
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37681697
DAA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAA
Гость
Добавьте в файл applicationComtext.xml
Код: xml
1.
2.
3.
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
	<property name="paramName" value="locale"/>
</bean>


и передавайте параметр locale. Например, для GET метода
Код: html
1.
http://xxxxx.com/contexPath?locale=uk
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37682206
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты, видать, даже не прочитал мой первый пост. Там есть и LocalChangeInterceptor, и поправка, что я не хочу мусорить в адресной строке параметрами - терпеть этого не могу.
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37682904
DAA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DAA
Гость
Без проблем :) Передавай параметр locale в теле сообщения методом POST :)
...
Рейтинг: 0 / 0
Spring 3.1.1: i18n, локаль, изменение языка
    #37683065
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как опять-таки написал выше, так и сделал - при смене языка отправляю пустой запрос с параметром и при получении ответа рефрешаю страницу.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring 3.1.1: i18n, локаль, изменение языка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]