Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring 3.1.1: i18n, локаль, изменение языка / 12 сообщений из 12, страница 1 из 1
27.02.2012, 13:14:09
    #37679788
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Начал новый веб-проект, скачал 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
27.02.2012, 15:27:37
    #37680233
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Ау, люди! Почему не цепляет дефолтную локаль?
...
Рейтинг: 0 / 0
27.02.2012, 17:07:36
    #37680597
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Причем, ИЕ отображает строки из messages_uk.properties, а Хром и ФФ - с messages_ru.properties.
...
Рейтинг: 0 / 0
27.02.2012, 17:47:50
    #37680698
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
IDVsbruckПричем, ИЕ отображает строки из messages_uk.properties, а Хром и ФФ - с messages_ru.properties.
Похоже, вот и ответ. Что в http заголовках?
...
Рейтинг: 0 / 0
27.02.2012, 18:02:59
    #37680750
carper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
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
27.02.2012, 20:10:01
    #37681001
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Разобрался и решил проблему по-старинке.
Я так понял, что 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
28.02.2012, 01:16:22
    #37681320
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Не, наврал ... Первая страница вызвана из сервлета и на ней меняется локаль.
Если же перейти по ссылке на другую страницу, вызов пройдет "мимо" MVC сервлета и изменение языка не влияет на эту страницу, хотя при переходе на предудущую (первую) язык оказывается поменянным (я его меняю путем ajax-вызова метода в MVC сервлете с параметром language=XX).

Чего-то, видать, я не допонимаю в этом механизме ...
...
Рейтинг: 0 / 0
28.02.2012, 01:33:41
    #37681323
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Сам с собой разговариваю, сам себя путаю ... сорри.
Дошло: надо все переходы пропускать через сервлеты Spring MVC. Так все встает на свои места. Просто перенести маппинг из web.xml в спринговский конфиг (аннотации контроллера).
Автоматом как-то прояснилось и похоже, что заработало как я того хотел.
...
Рейтинг: 0 / 0
28.02.2012, 11:23:54
    #37681697
DAA
DAA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Добавьте в файл 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
28.02.2012, 14:46:38
    #37682206
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Ты, видать, даже не прочитал мой первый пост. Там есть и LocalChangeInterceptor, и поправка, что я не хочу мусорить в адресной строке параметрами - терпеть этого не могу.
...
Рейтинг: 0 / 0
28.02.2012, 18:02:35
    #37682904
DAA
DAA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Без проблем :) Передавай параметр locale в теле сообщения методом POST :)
...
Рейтинг: 0 / 0
28.02.2012, 19:25:58
    #37683065
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring 3.1.1: i18n, локаль, изменение языка
Как опять-таки написал выше, так и сделал - при смене языка отправляю пустой запрос с параметром и при получении ответа рефрешаю страницу.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring 3.1.1: i18n, локаль, изменение языка / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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