0

我们正在我的表示层使用带有 JSON 的 Spring MVC 开发一个 java Web 应用程序。为了在 JSP 中显示 UI 标签而不是硬编码,我们从属性文件中获取它,并且在 JSP 中表示我们正在使用spring:message标签。我们正在使用ResourceBundleMessageSource来实现这一点。这工作正常。

但是我们的应用程序将从不同的区域访问,并且基于区域,我们有不同的 UI 标签属性文件需要使用。所有属性文件中的键都相同,只有值不同。

例如:假设有 2 个 reqions 'Region1' 和 'Region2' 用户将从那里访问应用程序,我有 2 个属性文件,例如 message_region1.properties 和 message_region2.properties。现在,当用户从 Region1 登录时,我需要选择 message_Region1.properties,如果用户从“Region2”登录,我需要选择 message_Region2.properties 并显示 UI 标签。由于两个属性中的所有键都相同,因此我的 jsp 文件不会有任何更改。

任何建议如何实现它?

4

1 回答 1

0

简单:) 创建您的message_region1.propertiesmessage_region2.properties文件。Spring 根据客户端的语言环境(使用 Default LocaleResolver)选择适当的属性文件。属性文件通常采用以下格式filename_<language>_<country>.properties

如果您想告诉 Spring,应该如何解决语言环境,请使用spring 文档中给出的 4 种方法之一

编辑:

要动态更改属性文件,请使用以下方法之一;我不知道它们是否比 4 种方法更好(在上面的规范中提到)。

  1. 在返回视图之前,将语言环境更改为登录用户的“唯一代码”,如下所示。

    RequestContextUtils.getLocale(request).setDefault(new Locale("your code"));
    
  2. 将 spring 配置中的消息源更改为 ReloadableResourceBundleMessageSource

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

    并在返回视图之前重置控制器中的属性文件名,如下所示:

    messageSource.setBasename("classpath:messages" + your code);
    
于 2012-11-07T08:31:39.867 回答