我们正在我的表示层使用带有JSON的Spring MVC开发一个java Web应用程序。 为了在JSP中显示UI标签而不是硬编码,我们从属性文件中获取它,在JSP表示我们使用 spring:message 标记。我们正在使用 ResourceBundleMessageSource 来实现这一点。这很好。
但是我们的应用程序将从各个区域访问,并且基于我们具有需要使用的UI标签的不同属性文件的区域。所有属性文件中的键都相同,只是值不同。
例如:假设有2个请求'Region1'&用户访问应用程序的'Region2',我有2个属性文件,例如message_region1.properties& message_region2.properties。现在,当用户从Region1登录时,我需要选择message_Region1.properties,如果用户从“Region2”登录,我需要选择message_Region2.properties并显示UI标签。由于两个属性中的所有键都相同,因此我的jsp文件中不会有任何更改。
有任何建议如何实现它?
答案 0 :(得分:0)
简单:)
创建message_region1.properties
和message_region2.properties
个文件。 Spring根据客户端的语言环境选择适当的属性文件(使用Default LocaleResolver
)。属性文件通常采用filename_<language>_<country>.properties
如果你想告诉Spring,应该如何解决语言环境,请使用spring documentation中给出的4种方法之一
修改强>
要动态更改属性文件,请使用以下方法之一;我不知道它们是否比4种方法更好(在上面的规范中提到)。
在返回视图之前,将语言环境更改为已登录用户的“唯一代码”,如下所示。
RequestContextUtils.getLocale(request).setDefault(new Locale("your code"));
将spring config中的消息源更改为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);