2010-01-16 55 views
1

我正在开发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 code="title"/> 

应用程序工作正常的英语,但是当我选择阿拉伯语版本,从meaages_ar.properties值未装载。我的错误是什么,或者如何装载和应用程序是多语言的。

在此先感谢您的帮助。 Regards, Abdel Olakara

+0

要更新,一旦用户点击阿拉伯语版本,我使用设置语言环境。但阿拉伯文本仍然没有被加载。 – 2010-01-16 12:06:29

+0

如果您使用硬编码“en” – Bozho 2010-01-18 14:40:31

+0

解决了您的问题,则无法获得阿拉伯语区域设置?怎么样? – Bozho 2010-02-23 20:42:00

回答

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实例库一个非常有用的示例应用程序:
https://src.springframework.org/svn/spring-samples/mvc-basic/

0

当设置为<fmt:setLocale value="en" scope="session"/>时,您告诉应用程序仅使用英语。 setLocalevalue必须是评估为当前语言环境的表达式。东西<fmt:setLocale value="${localeController.currentLocale}" />

+0

设置我同意,但这只是在索引页上。在此页面上,用户可以继续使用英文或选择阿拉伯语或法语。 – 2010-01-16 12:05:11

+0

我没有收到您的评论。 – Bozho 2010-01-16 19:31:16

-1

ou dono改变任何文化。不同文化之间的变化,你必须改变的Culture和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

这似乎是一个.Net解决方案? – 2010-01-16 12:50:04

+0

是的,它是一个.net解决方案,我提到它引发这个春天是如此简单,你只需要使用equevalent。这个解决方案会很好 – 2010-01-16 13:07:23

+0

我认为这个例子不会解决问题 - 只会混淆OP。 – Bozho 2010-01-18 18:19:20