Проблема многоязычного веб-приложения - PullRequest
1 голос
/ 16 января 2010

Я работаю над веб-приложением Spring, и мое приложение многоязычное. Я создал файлы свойств ResourceBundle как messages.properties и messages_ar.properties.

На моей стартовой странице по умолчанию я установил английский язык. через:

<fmt:setLocale value="en" scope="session"/>

На этой же странице я предоставил пользователям доступ к другому языку (арабскому) по ссылке:

<a href="index.htm?locale=ar">Arabic Version</a>

И я загружаю тексты форм, заголовок страницы и другие общие элементы из файла свойств через тег сообщения весны:

<spring:message code="title"/>

Приложение отлично работает на английском языке, но когда я выбираю арабскую версию, значения из meaages_ar.properties не загружаются. В чем моя ошибка или как ее можно загрузить и сделать приложение многоязычным.

Заранее спасибо за помощь. С Уважением, Абдель Олакара

Ответы [ 3 ]

1 голос
/ 07 февраля 2010

Spring MVC очень хорошо поддерживает интернационализацию. Вы можете зарегистрировать LocaleChangeInterceptor в контексте вашего приложения, чтобы выполнить эту работу. Вот пример того, как это будет выглядеть в Spring 3 и новом пространстве имен mvc.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <!-- use the annotation driven programming model -->
    <mvc:annotation-driven />

    <!-- register interceptors -->
    <mvc:interceptors>
        <!-- change the locale when a request parameter locale is received e.g. /?locale=de -->
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
    </mvc:interceptors>

    <!-- save the locale using a cookie -->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />

    <!-- associate view names with jsp files in the directory /WEB-INF/views/ -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

Более подробную информацию вы можете найти в разделе официальной документации:
http://static.springsource.org/spring/docs/1.2.9/reference/mvc.html#mvc-localeresolver

В репозитории примеров обучения есть также очень полезный пример приложения:
https://src.springframework.org/svn/spring-samples/mvc-basic/

0 голосов
/ 16 января 2010

Ты не можешь изменить любую культуру. для изменения между культурами вы должны изменить Культуру и UICulture, как

    public event CultureChanged OnCultureChanged;
    public string LastCultureName
    {
        get
        {
            string lastCultureName = (string)Session["lastCulture"];

            if (lastCultureName == null)
            {
                Session["lastCulture"] = Thread.CurrentThread.CurrentCulture.Name;
                //lastCultureName = "ar-EU";
            }

            return lastCultureName;
        }
        set
        {
            Session["lastCulture"] = value;
        }
    }    //  Session["lastCulture"] = "en-US"; // Session["lastCulture"] = "ar-EU";


protected override void InitializeCulture()
    {
        string lang = (string)Session["lastCulture"];

        if (lang == null || lang == String.Empty)
            lang = LastCultureName;
        if (lang != string.Empty)
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang);
        }
    }
0 голосов
/ 16 января 2010

При установке <fmt:setLocale value="en" scope="session"/> вы указываете приложению использовать только английский язык. value из setLocale должно быть выражением, которое соответствует текущей локали Нечто <fmt:setLocale value="${localeController.currentLocale}" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...