powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC локализация
7 сообщений из 7, страница 1 из 1
Spring MVC локализация
    #39293607
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На странице на тулбаре есть кнопка. Предполагается, что тулбар доступен на всех страницах web-приложения.
<a class="tool-button" href="<c:url value="/login/refresh.do?cmd=${cmd}&locale=ru"/>">RU</a>

В контролере есть обработчик для переключения языка
@RequestMapping(value = "/refresh.do")
public String refresh(@RequestParam String cmd) {
return "redirect:/" + cmd;
}

Для простых страниц, которым не надо передавать параметры, все работает. Но если, допустим, вызывается форма ввода, в которую передается некоторый ?id=1, тогда простым редиректом не обойтись. В другой форме может быть несколько параметров, например, ?id=2&type=4.

Есть ли относительно простой способ организовать переключение между языками из любой формы ввода, написав общий refresh?
...
Рейтинг: 0 / 0
Spring MVC локализация
    #39293609
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локаль это скорее всего свойство сеанса а не реквеста. IMHO.
...
Рейтинг: 0 / 0
Spring MVC локализация
    #39293658
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaНа странице на тулбаре есть кнопка. Предполагается, что тулбар доступен на всех страницах web-приложения.
<a class="tool-button" href="<c:url value="/login/refresh.do?cmd=${cmd}&locale=ru"/>">RU</a>

В контролере есть обработчик для переключения языка
@RequestMapping(value = "/refresh.do")
public String refresh(@RequestParam String cmd) {
return "redirect:/" + cmd;
}

Для простых страниц, которым не надо передавать параметры, все работает. Но если, допустим, вызывается форма ввода, в которую передается некоторый ?id=1, тогда простым редиректом не обойтись. В другой форме может быть несколько параметров, например, ?id=2&type=4.

Есть ли относительно простой способ организовать переключение между языками из любой формы ввода, написав общий refresh?

Это делается не так.
Обычно ч/з i18n properties
Где для соотвествующих локалей создаются строки.
А потом на странице эти строки показываются.
А локаль как было сказано выше задается в сессии.
...
Рейтинг: 0 / 0
Spring MVC локализация
    #39293794
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС хочет переключить локаль на текущей странице, само переключение делает спринг увидев параметр locale= , автор же хочет перегрузить текущую страницу на новом языке сохранив состояние.
...
Рейтинг: 0 / 0
Spring MVC локализация
    #39293821
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,

Видимо я плохо объяснил.

Все и так настроено для i18n, все файлы созданы, прописаны в конфигурации бины ResourceBundleMessageSource, CookieLocaleResolver (чтобы между сеансами тоже локаль сохранялась), и обработчик LocaleChangeInterceptor. То есть все делалось согласно документации спринга. В JSP тоже уже все сообщения завязаны на идентификаторы в файлах свойств. Все, в принципе, работает.

В документации приведен вариант переключения между языками, как параметр, прописанный в настройках LocaleChangeInterceptor. В моем случае это locale. Чтобы переключиться достаточно выполнить запрос с передачей к произвольному URL?locale=ru или URL?locale=en. После этого все страницы открываются на требуемом языке и никаких ?locale=ru к ним добавлять уже не надо. Предположим, что язык переключается по ссылке switchLocale.do?locale=ru или switchLocale.do?locale=en (здесь и далее полный URL не пишу для краткости)

Есть желание сделать смену языка, находясь на произвольной странице. То есть хидер для сайта постоянен, в нем всегда доступны кнопки переключения между языка. А сами страницы могут быть разными - форма ввода, таблица с данными и т.п.

Предположим, что мы находимся в форме ввода, на которую попали по ссылке form?id=123. Чтобы сменить язык надо выполнить два действия:
- вызвать переключение языка switchLocale.do?locale=ru
- обновить ту страницу, на которой мы находились


Чтобы совместить оба действия к switchLocale.do добавляем еще один параметр cmd, который указывает на какой странице мы находимся, например, switchLocale.do?cmd=form&locale=ru. Контролер для switchLocale.do получит параметр cmd и выполнит redirect на form. Но какие параметры передавать он не знает, то есть id=123 потеряется. Поскольку формы ввода могут быть с разными параметрами, а switchLocale общий, то надо как-то уметь обрабатывать их все. Можно попробовать различные варианты с redirectAttributes.addFlashAttribute, но прежде чем изобретать велосипед может проще можно выполнить указанные ранее действия (выделил их жирным)?! Желательно пояснить не в общих чертах типа "использовать свойство сеанса", а с учетом уже выполненных стандартных спринговых настроек
...
Рейтинг: 0 / 0
Spring MVC локализация
    #39294051
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myaucha,

судя по всему вам надо отказаться от обращения к
Код: java
1.
switchLocale.do?locale=ru


а обращаться к текущему url с текущими параметрами, добавляя к ним
Код: java
1.
&locale=ru
...
Рейтинг: 0 / 0
Spring MVC локализация
    #39294217
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось следующее решение. Переходить на добавление locale к каждой форме не потребовалось

JSP
Код: html
1.
2.
3.
4.
5.
6.
<c:set var="urlLocale">
    <c:url value="/login/switchLocale.do?locale"/>
</c:set>

<a class="tool-button" href="javascript:switchLocale('${urlLocale}=ru')">RU</a>
<a class="tool-button" href="javascript:switchLocale('${urlLocale}=en')">EN</a>


Controller
Код: java
1.
2.
3.
@RequestMapping(value = "/switchLocale.do")
public @ResponseBody void switchLocale() {
}


JS
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function switchLocale(url) {

    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, false);
    xhr.send();
    
    if (xhr.status != 200) 
        alert( url + ', ' + xhr.status + ', ' + xhr.statusText ); 
    else
        location.reload(true);
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring MVC локализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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