【问题标题】:How to force spring to use the same i18n Locale for every user如何强制 spring 为每个用户使用相同的 i18n 语言环境
【发布时间】:2013-05-27 17:02:24
【问题描述】:

我正在开发一个将在不同国家/地区使用的 Java Spring 应用程序。在每个国家,它必须“说”该国家的语言(而不是用户的国家)。 说话我的意思是jsp pages(),javax.validation消息等处的消息。 现在,我对每个国家都有不同的属性文件。例如ApplicationResources_ES.properties、ApplicationResources_EN.properties、ValidationMessages_ES.properties、ValidationMessages_EN.properties等。

无论用户使用哪种语言,我都无法强制 spring 只使用 ES 或 EN 语言。 我尝试使用 fixedLocaleResolver 没有成功的结果:

<bean id="fixedLocaleResolver" class="org.springframework.web.servlet.i18n.FixedLocaleResolver">
    <property name="defaultLocale" value="es" />
</bean>

谁能帮帮我?

更新: 这是我想解决的更具体的问题。 我对每种语言都有一个 ValidationMessages.properties,以显示应用程序安装语言中 javax.validation 的结果。问题是语言会根据用户的语言环境而变化,而不是应用程序的语言环境。如何使 javax.validation 使用 ValidationMessages.properties 之一,而不根据用户动态更改它?

【问题讨论】:

    标签: java spring-mvc internationalization


    【解决方案1】:

    您的 bean 必须具有名称 localeResolver 以便 DispatcherServlet 能够加载 localeResolver。所以把id改成如下:

    <bean id="localeResolver" c...
    

    【讨论】:

      【解决方案2】:

      我找到了一种解决方案,但我不太喜欢它。 如果我在使用此属性启动 tomcat 时更改用户的默认国家和语言:

      -Duser.language=pt -Duser.country=PT
      

      然后,javax.validation 的验证消息以葡萄牙语显示。我应该为每次安装更改此属性。但是,我认为这不是一个干净的解决方案。有人有其他的吗?

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 我不知道这是否对我有帮助。这种方法需要请求和响应,不是吗?我只想为我的整个应用程序设置语言环境。例如,当我显示 javax.validation 引发的验证错误时,我希望它们使用我的默认语言(而不是用户的语言)。你能解释一下我应该如何使用 setLocale 方法吗?
        • 另外,当我在我的一个控制器中设置Locale 时,它​​会抛出这个异常:java.lang.UnsupportedOperationException: Cannot change fixed locale - use a different locale resolution strategy
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 2016-09-05
        • 1970-01-01
        相关资源
        最近更新 更多