本文基於Spring MVC國際化。
在Spring MVC國際化一文中描述了如何實現Spring的國際化,也描述了在jsp頁面中如何獲取國際化信息,本文描述如何在java代碼中獲取國際化信息。
在Java代碼中,獲取國際化信息使用org.springframework.web.context.WebApplicationContext的getMessage方法,getMessage方法中需要使用當前的Locale信息,於是,怎樣獲取國際化信息集中在以下兩點:
1. 如何獲取WebApplicationContext?
2. 如何獲取當前使用的Locale?
首先,如何獲取WebApplicationContext呢,很簡單,在任何一個類實現org.springframework.web.context.ServletContextAware並重寫其setServletContext方法,如下所示:
- public class MenuServiceImpl implements MenuService, ServletContextAware {
- private ServletContext servletContext;
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.springframework.web.context.ServletContextAware#setServletContext
- * (javax.servlet.ServletContext)
- */
- @Override
- public void setServletContext(ServletContext servletContext) {
- this.servletContext = servletContext;
- }
-
- public void test() {
- WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
- }
- }
如此,我們取得了WebApplicationContext信息。
其次,如何獲取當前使用的Locale信息?一行代碼搞定:
- Locale locale = RequestContextUtils.getLocaleResolver(request).resolveLocale(request);
WebApplicationContext信息和Locale信息都獲取到後,再用一行代碼獲取國際化信息:
- String menuName = applicationContext.getMessage("text.menu.name",null, "菜單A", locale);
在getMessage中有四個變量,依次分別為message_*.properties文件中的key,key中{0}、{1}等對應的值,默認值和Locale。