powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring, Velocity, internationalization
18 сообщений из 18, страница 1 из 1
Spring, Velocity, internationalization
    #38146885
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как лучше реализовать многоязычность на сайте, где используется Spring MVC и Velocity.
Я почитал про Spring internationalization, но не совсем понимаю смысла это использовать.
Почему нельзя сделать несколько map'ов для каждого языка и использовать их.
Какие преимущества, кто подскажет?
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147079
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том, что не нужно rdmнесколько map'ов для каждого языка

i18n потому так и называется - интернационализация, - чтобы отображать контекст в нужной локали для единого пространства. То, о чем ты говоришь, это не интернационализация, а фактически создание набора сайтов в одном контесте - один сайт (набор страниц) под одну локаль. ИМХО, такой подход - удел ПэХаПэшников и сайтов 90-ых и начала нулевых. Кроме этого, интернациональность - это не только языки (хотя на них приходится львиная доля), но и способ отображения чисел, валют, дат, времени ...
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147104
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

А как лучше делать если есть страницы с русским контентом, который не запихнешь в properties файл?

В базе хранить с указанием локали контента?
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147214
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scymaksА как лучше делать если есть страницы с русским контентом, который не запихнешь в properties файл? запихивать)) все запихивают, а ты не можешь?
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147264
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
am_sasa,

Ну вопрос не в том, запихуемо или нет. Вопрос в целесообразности хранения 1000 знакового текста.
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147383
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksIDVsbruck,

А как лучше делать если есть страницы с русским контентом, который не запихнешь в properties файл?

В базе хранить с указанием локали контента?

Контент естественно хранить в БД (имеется в виду редактируемый пользователем), а вот "статические" ресурсы, такие как названия кнопок, надписи и прочее - в properties-файлах.


думаю вряд ли пользователи/модераторы и т.д. будут забивать несколько языков контента для разных локалей.
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147391
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется отметить что интернационализация это не только текст. Но и куча картинок с текстом, да и layout, в целом.
Так что если писать на plain html, то почему бы просто не держать все ресурсы под каждую локаль отдельно.
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147400
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczХочется отметить что интернационализация это не только текст. Но и куча картинок с текстом, да и layout, в целом.
Так что если писать на plain html, то почему бы просто не держать все ресурсы под каждую локаль отдельно.

Определенно именно так, либо разбить по папкам, либо по префиксам-суффиксам.
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147532
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Преимущества для текста(заголовки, надписи и т.п.) я уже увидел.
Как лучше получать сообщения в контроллере? Например нужно ответить на ajax запрос простым текстом. Как в этом случае поступать?

Насколько правильный такой подход?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Controller
@Scope("request")
public class MailController
{
    @Autowired
    private MessageSource messageSource;

    @RequestMapping(value = "/ajax", method = RequestMethod.GET)
    public ModelAndView sendEmail(Locale locale)
    {
        String[] args = { "Mr.", "X" };
        // E.g. message.code="Dear {0} {1}"
        String message = messageSource.getMessage("message.code", args, locale);
        // Do something
        return new ModelAndView();
    }
}



Я не совсем понимаю как при использовании Spring и Velocity использовать не текстовые элементы, а например картинки.
Записывать в файл *.properties url адрес картинки и выводить?

Код: html
1.
<img src='#springMessage('image.myImage')'>
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147758
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно верно. Из проперти-файла вытягиваешь "ручками", а если хранится в базе, то желательно, чтобы запрос уже возвращал локализованные данные.

P.S. А Спринг может сам подставлять в параметры меппинг-метода Locale? - Если так, то не знал. Вытягиваю ее из контекста Спринга вручную.
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147852
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

я создаю такой метод в базовом контроллере
Код: java
1.
2.
3.
protected String getMessage(String code) {
        return messageSource.getMessage(code, null, LocaleContextHolder.getLocale());
    }
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38147947
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckP.S. А Спринг может сам подставлять в параметры меппинг-метода Locale? - Если так, то не знал. Вытягиваю ее из контекста Спринга вручную.
и не только локаль. смотри Supported method argument types в доке
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38148062
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaи не только локаль. смотри Supported method argument types в доке
Хм ... точно. Многое чем пользуюсь, но как-то не обратил на это внимание. Иногда нужна Locale и заодно увидел, что можно сразу принципала вынимать, не вытягивая Authorization. Сенкс.
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38148095
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha, IDVsbruck, а нельзя ли как-то локаль получать иначе?
Ведь в контроллере может быть очень много методов, придется в каждый добавлять (.. Locale local), а потом передавать в метод который возвращает сообщение. Получиться куча одинакового кода в каждом методе контроллера.
Как правильно решить эту проблему?
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38148131
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это проблема?
Задумайся, что есть вызов каждого метода в контроллере и какую цепочку действий надо произвести Спрингу, чтобы довести входящий запрос до исполнения метода контроллера. Твое добавление локали - капля в море. Так или иначе, локаль берется из контекста спринга (по сути, атрибут из сессии, если он есть для данной сессии, иначе из куки, если она прописана, иначе дефолтное значение из конфига, если оно установлено, иначе дефолтное системое (?)). Поэтому простейший способ - просто установить пареметр в методе, иначе надо в самом методе или вспомагательном методе вытаскивать его или как сказано выше -
Код: java
1.
LocaleContextHolder.getLocale()

, или сложней -
Код: java
1.
RequestContextUtils.getLocale(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest())

(не хочу искать, но допускаю, что это одно и то же: первый способ - упрощенный вызов второго).
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38148147
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck, я нашел про два способа

Код: java
1.
Locale locale = RequestContextUtils.getLocale(request);



Код: java
1.
2.
3.
Locale locale = LocaleContextHolder.getLocale();
String country = locale.getCountry();
String language = locale.getLanguage();



К последнему способу еще приписка есть:
You must be aware that the content of the LocaleContextHolder corresponds by default to the locale specified within the Web request. In order to change this behaviour, you need to implement a custom interceptor or filter. The following code describes the implementation of such filter using configured LocaleResolver...
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38148149
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь!
...
Рейтинг: 0 / 0
Spring, Velocity, internationalization
    #38148404
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmпридется в каждый добавлять (.. Locale local), а потом передавать в метод который возвращает сообщение
imho это нормально. предположим у тебя есть некоторый сервис, который может генерить email на разных языках. совершенно нормально, что он одним из параметров принимает локаль или язык. это делает его универсальным, применимым в любом месте, где это потребуется. доставая локаль внутри него самого неким специфическим способом ты делаешь его зависимым от окружения и малополезным там, где например нету никаких реквестов.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring, Velocity, internationalization
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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