Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring, Velocity, internationalization / 18 сообщений из 18, страница 1 из 1
11.02.2013, 22:06:24
    #38146885
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Velocity, internationalization
Подскажите как лучше реализовать многоязычность на сайте, где используется Spring MVC и Velocity.
Я почитал про Spring internationalization, но не совсем понимаю смысла это использовать.
Почему нельзя сделать несколько map'ов для каждого языка и использовать их.
Какие преимущества, кто подскажет?
...
Рейтинг: 0 / 0
12.02.2013, 04:52:56
    #38147079
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Velocity, internationalization
В том, что не нужно rdmнесколько map'ов для каждого языка

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

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

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

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

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

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

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


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

Определенно именно так, либо разбить по папкам, либо по префиксам-суффиксам.
...
Рейтинг: 0 / 0
12.02.2013, 12:42:44
    #38147532
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Velocity, internationalization
Преимущества для текста(заголовки, надписи и т.п.) я уже увидел.
Как лучше получать сообщения в контроллере? Например нужно ответить на 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
12.02.2013, 14:18:30
    #38147758
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Velocity, internationalization
Совершенно верно. Из проперти-файла вытягиваешь "ручками", а если хранится в базе, то желательно, чтобы запрос уже возвращал локализованные данные.

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

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

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

(не хочу искать, но допускаю, что это одно и то же: первый способ - упрощенный вызов второго).
...
Рейтинг: 0 / 0
12.02.2013, 16:48:27
    #38148147
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Velocity, internationalization
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
12.02.2013, 16:49:16
    #38148149
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Velocity, internationalization
Спасибо за помощь!
...
Рейтинг: 0 / 0
12.02.2013, 18:40:58
    #38148404
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring, Velocity, internationalization
rdmпридется в каждый добавлять (.. Locale local), а потом передавать в метод который возвращает сообщение
imho это нормально. предположим у тебя есть некоторый сервис, который может генерить email на разных языках. совершенно нормально, что он одним из параметров принимает локаль или язык. это делает его универсальным, применимым в любом месте, где это потребуется. доставая локаль внутри него самого неким специфическим способом ты делаешь его зависимым от окружения и малополезным там, где например нету никаких реквестов.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring, Velocity, internationalization / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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