Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring MVC проблемы с локализацией


Автор: Aazmandius 24.11.2008, 10:49
Недавно столкнулся с такой проблемой - веб-приложение на Spring 2.5, для локализации используется подобная конфигурация:

Код

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>messages</value>
            </list>
        </property>
    </bean>
    
    <!-- Declare the Interceptor -->
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="locale"/>
    </bean>

    <!-- Declare the Resolver -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>


ну и на jsp выводится потом локализованное сообщение при помощи <spring:message /> тега. Все работает хорошо, но только если messages.properties сохранен в ISO-8859-1. Если сохранить его в UTF-8, то потом все перестает работать - вылетает эксепшн типа
Код

javax.servlet.jsp.JspTagException: No message found under code 'index.hello' for locale 'ru'.
    org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:183)
    org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:77)
    org.apache.jsp.WEB_002dINF.jsp.index_jsp._jspx_meth_spring_005fmessage_005f0(index_jsp.java:98)
    org.apache.jsp.WEB_002dINF.jsp.index_jsp._jspService(index_jsp.java:69)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        ......


Вероятно где-то надо указать, что файлы properties лежат именно в юникоде и spring'у читать их надо исходя из этого... Кто сталкивался с подобным - подскажите пожалуйста.

Автор: Asal 24.11.2008, 11:18
попробуйте файл сохранить под именем messages_ru_RU.properties, a свой messageSource добавить
Код

<property name="defaultEncoding" value="UTF-8"/>

сомневаю что дело в этом, но вдруг smile

Автор: Aazmandius 24.11.2008, 12:33
Asal, 
к сожалению не сработало :( 

Автор: AntonSaburov 24.11.2008, 13:37
К сожалению и не получится - все и правда хранится.

При подготовке переводов следует помнить об одной тсранности: файлы со свойствами не кодируются в UTF-8. Вместо этого Unicode-символы свыiе 127 кодируются в виде последовательностей \uxxxx.

Автор: Asal 24.11.2008, 13:55
Цитата(AntonSaburov @  24.11.2008,  13:37 Найти цитируемый пост)
При подготовке переводов следует помнить об одной тсранности: файлы со свойствами не кодируются в UTF-8. Вместо этого Unicode-символы свыiе 127 кодируются в виде последовательностей \uxxxx.

об этой фитче знаю  smile, но это скорее для swing приложений, для web такая фитча у меня не прокатывает - пишутся вопросики.
Я просто в текстовом редакторе сохранил этот файл (messages_ru_RU.properties) в UTF-8 и о чудо - все работает.

Автор: necromancer 24.11.2008, 13:56
ага и добавлю, что для этой беды используется програмка из пакета JDK: native2ascii.exe
для большого проекта хранить локализованные сообщения в ини или проперти файлах - беда!
Используй БД и будет тебе счастье

PS AntonSaburov с возвращением =)

Автор: MisterCleric 24.11.2008, 14:33
привет всем. 
Сталкивался с той же проблемой. 
Потом нашел настройку в IDE создавать properties в кодировке... Поставил UTF-8. На всех страницах тоже проставил ту же кодировку. Да еще есть и такое, что вызываю ресурсы с java-кода и тоже все правильно рисует. 
Правда при открытии простым редактором как правильно написал AntonSaburov на каждый символ пишет типа \uxxxx.

Автор: Samotnik 24.11.2008, 15:32
всем рекомендую стандартную тулзу из  jdk native2ascii
перегнать в юникод, затем подгружать, как проперти файлы  стандартным образом  en_EN   ru_RU   и т.д.  smile 

Автор: Aazmandius 25.11.2008, 07:13
Буду использовать БД, так удобнее. Спасибо всем за разъяснения smile

Автор: Tony 13.2.2009, 02:50
Не хочу плодить новую тему. Так вот у меня вопрос, можно ли создавать messages в xml ? Типа:
Код

    <key name="myKey">Hi all </key>

Перерыл ку4у материала так и ненашёл решения, походу придётся писать свой велосипед. smile 

Автор: ivg 13.2.2009, 03:56
Цитата(Tony @  13.2.2009,  04:50 Найти цитируемый пост)
можно ли создавать messages в xml ?

Можно.
Код

<?xml version="1.0" encoding="UTF-8"?>
<properties>
    <entry key="myKey">Hi all </entry>
</properties>
 Правда в Spring'е, по видимому, будет работать только с org.springframework.context.support.ReloadableResourceBundleMessageSource.

Автор: Tony 13.2.2009, 13:27
Спасибо ivg то 4то надо. После экспериментов с хмл и проперти, можно использовать проперти с UTF-8  smile без native2ascii, но я выберу хмл он мне роднее smile
Код

<bean name="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="WEB-INF/classes/messages"/>
        <property name="defaultEncoding" value="utf-8"/>
    </bean>


P.S. только изменити у проперти файла encoding на utf-8

Автор: Asal 13.2.2009, 16:46
Цитата(Tony @  13.2.2009,  13:27 Найти цитируемый пост)
можно использовать проперти с UTF-8

собсна что я и говорил  smile 

Автор: Tony 13.2.2009, 17:52
Цитата(Asal @ 13.2.2009,  16:46)
Цитата(Tony @  13.2.2009,  13:27 Найти цитируемый пост)
можно использовать проперти с UTF-8

собсна что я и говорил  smile

Ну так надо было написать 4то это проперти применимо только к ReloadableResourceBundleMessageSource  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)