多语言Web应用程序问题

时间:2010-01-16 11:31:19

标签: spring web-applications spring-mvc

我正在使用Spring Web应用程序,我的应用程序是多语言的。我已经将ResourceBundle属性文件创建为messages.properties和messages_ar.properties。

在我的开始页面中,我默认将语言环境设置为英语。通过:

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

在同一页面上,我通过以下链接为用户提供了访问其他语言(阿拉伯语)的权限:

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

我通过spring message标签从属性文件加载表单文本,页面标题和其他常用元素:

<spring:message code="title"/>

应用程序适用于英语,但是当我选择阿拉伯语版本时,未加载meaages_ar.properties中的值。我的错误是什么,或者如何加载,应用程序可以多语言。

提前感谢您的帮助。 问候, 阿卜杜勒·奥拉卡拉

3 个答案:

答案 0 :(得分:1)

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

在speing examples存储库中还有一个非常有用的示例应用程序:
https://src.springframework.org/svn/spring-samples/mvc-basic/

答案 1 :(得分:0)

设置<fmt:setLocale value="en" scope="session"/>时,您告诉应用程序只使用英语。 value的{​​{1}}必须是一个表达式,其值为当前区域设置。某事setLocale

答案 2 :(得分:-1)

你不会改变任何文化。要在文化之间进行变革,你必须改变文化和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);
        }
    }