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


Автор: Praid 28.8.2012, 21:05
Пытаюсь добавить русскую локализация через проперти файлы в Spring MVC, но в какой бы я кодировки не сохранял этот проперти файл, все равно во всех браузерах вместо русских символов отображаются знаки вопроса:
     ???????????
Вот конфигурация которую использую:

i18n-spring.xml
Код

    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8" />
        <property name="fileEncodings" value="UTF-8" />
    </bean>

    <bean id="localeChangeInterceptor"
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>

    <bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="defaultLocale" value="ru" />
    </bean>

    <bean id="handlerMapping"
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <ref bean="localeChangeInterceptor" />
        </property>
    </bean>


JSP страница
Код

<%@ page contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8" language="java" %>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
<spring:message code="label.name"/>
...


А когда в браузере смотрю кодировку этой странице она оказывается в ISO-8859-1. Но в jsp ведь явно указано что она должна быть в использоватся UTF-8?

Автор: jk1 29.8.2012, 16:31
Там по сути стандартная Java-локализация используется. А в ней .property-файлы нужно прогонять через утилиту native2ascii для нормального отображения юникода. В моем текущем проекте, например, после обработки утилитой .property-файл выглядит так:

Код

javax.validation.constraints.AssertFalse.message=\u0414\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C\u043B\u043E\u0436\u043D\u043E
javax.validation.constraints.AssertTrue.message=\u0414\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C\u0438\u0441\u0442\u0438\u043D\u043D\u043E

Автор: Praid 29.8.2012, 19:34
jk1, перегнал с помощью этой native2ascii, не помогло, все равно выводятся знаки вопроса.

upd:
Ёклмн, все дело в Tiles, в jsp которая является шаблонов забыл указать кодировку, а указал ее лишь на странице которая является лишь элементов шаблона, поэтому и не определялась кодировка. 

В общем совет все на будущее:
 - Если вы используете Tiles указывайте информацию о кодировке только в jsp шаблона! 

Пример:
template.jsp
Код

<%@ page contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8" language="java" %>
...
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

А для файла с проверти необходимо воспользоватся native2ascii.
И тогда все будет работать как надо.

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