使用spring實現資源國際化

yingxian_Fei發表於2017-04-25

有時候需要使用資源國際化來定義和處理一些欄位。本文是一個簡單的使用例子用於展示在基於java註解的配置中配置spring資源國際化的類並使用其獲取prop檔案中的屬性。


1、建立資原始檔

本文示例使用的資原始檔為一個屬性檔案,預設的屬性檔名稱為i18n.properties,存放在工程的類路徑下的i18n目錄下。實際使用中可以針對需要新增針對不同語音的屬性檔案,如:

i18n_en_US.properties、i18n_zh_CN.properties等。本例中的預設屬性配置檔案中的內容如下:

munu.btn1.title=\u5B89\u9632
menu.btn2.title=\u670D\u52A1
menu.btn3.title=\u6211\u7684
munu.btn3.sub1.title=\u4E3B\u9875

2、配置bean

本文使用給予java註解的配置。主要時建立一個org.springframework.context.support.ResourceBundleMessageSource的bean例項。原始碼如下:

package api.landsem.base.configuration;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc  
@ComponentScan({"api.landsem.base.bean"})
@ImportResource("classpath:applicationContext-*.xml")
public class RootConfiguration {

	@Bean("messageSource")
	public MessageSource getResourceBundleMessageSourc() {
		ResourceBundleMessageSource resource = new ResourceBundleMessageSource();
		resource.setBasename("i18n/i18n");
		return resource;
	}
}

3、讀取資源屬性檔案

在java中使用建立的MessageSource bean來讀取屬性檔案,如下為測試原始碼:

package api.landsem.base.test;

import java.util.Locale;

import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;

public class PropertiesTest extends BaseTest{
	private static final Logger logger = Logger
			.getLogger(PropertiesTest.class);	
	
	@Autowired
	private MessageSource mMessageSource;

	@Test
	public void test() {
		String msg = mMessageSource.getMessage("munu.btn1.title", null, Locale.getDefault());
		logger.info(msg);
	}
}


相關文章