我当前的项目需要自定义的“系统日期”,这意味着系统日期及其在 i18n 属性文件中定义的格式。但处理它的类是通用实用程序类,但不在 Web 层内。但是,必须从 HttpServletRequest 对象中检索语言环境(计算日期格式)。我正在考虑将 HttpServletRequest 实例自动连接到该实用程序类。它似乎打破了设计模式,但我想它是盗版的。但是它不起作用。那么这有什么问题,有没有更好的方法来解决 Spring 中任何其他层的 Locale 问题?
提前致谢。
我当前的项目需要自定义的“系统日期”,这意味着系统日期及其在 i18n 属性文件中定义的格式。但处理它的类是通用实用程序类,但不在 Web 层内。但是,必须从 HttpServletRequest 对象中检索语言环境(计算日期格式)。我正在考虑将 HttpServletRequest 实例自动连接到该实用程序类。它似乎打破了设计模式,但我想它是盗版的。但是它不起作用。那么这有什么问题,有没有更好的方法来解决 Spring 中任何其他层的 Locale 问题?
提前致谢。
Locale
简单地重载实用程序类以在受影响的方法上接受 a 作为参数不是更优雅吗?然后,您可以检索控制器中的语言环境并将其传递给实用程序。
我更喜欢你使用 Spring Framework 的 SessionLocaleResolver。它将更改并存储会话中的语言环境,因此您可以在应用程序中的任何代码点获取它。
请参考下面提到的配置。并阅读 Spring Documentation 以获得更好的理解。
<mvc:interceptors>
<ref bean="localeChangeInterceptor"/>
</mvc:interceptors>
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"/>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en"/>
</bean>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>/WEB-INF/i18n/labels</value>
<value>/WEB-INF/i18n/messages</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
希望这对您有所帮助。干杯。