spring通过ResourceBundleMessageSource实现国际化

首先我们需要中文与英文的properties文件

lang_zh.properties内容,name=\u5F20\u4E09 因为properties中输入中文他会自动转换,这里name是张三

lang_en.properties内容,name=zhangsan

注意:配置文件的命名需要带上语言种类的即:文件名_语言种类.properties,并且不同语言的相同消息的文件名应该一样,例如ang_zh.properties和lang_en.properties就表示中文和英语

语言种类不知道该怎么写的可以在程序中输出,System.out.println(Locale.CHINESE);即可

接着我们就是在spring配置文件中配置:

<bean id="configProperties" class="org.springframework.context.support.ResourceBundleMessageSource">
   		<property name="basenames">
   			<list>
   				<value>config/properties/lang</value>
   			</list>
   		</property>
   	</bean>

 这里需要注意几点:

①在basenames中输入的相对路径

②文件不需要文件类型比如:我的语言文件是lang_zh.properties和lang_en.properties在这里我就只需要输入lang

③大家也看到了,不同语言的文件不需要全部都导入,只需要写文件名即可,看我的配置就知道了

最后就是应用了,

在程序中我们需要得到spring中配置的这个bean,可以通过注入,也可以通过beanUtil获取,我的代码如下:

MessageSource ms = (MessageSource) BeanUtil.getBeanByName("configProperties") ;
		System.out.println(ms.getMessage("name",new Object[]{} , Locale.CHINESE));
		System.out.println(ms.getMessage("name",new Object[]{} , Locale.ENGLISH));

输出结果是:

张三

zhangsan

在这里的ms.getMessage中有两个三个方法,我只研究了三个参数的和四个参数的

getMessage( String arg0, Object[] arg1, Locale arg2) 这里, 第一个参数是文件中的字段名,第二个参数是文件中占位符的参数(后面讲),第三个参数是语言种类,可以通过Locale.种类    获取
getMessage( String arg0, Object[] arg1, String arg2, Locale arg3)这里第一个参数是文件中的字段名,第二个参数是文件中占位符的参数(后面讲),第三个参数是默认值,第四个参数是语言种类,可以通过Locale.种类获取
这里需要注意的是,如果没有占位符也可以用null
 
如果我要在消息中带参数:
那么我需要在文件中带入占位符,如我吧语言文件中的内容改为:

lang_zh.properties内容,name=\u5F20\u4E09 {0}

lang_en.properties内容,name=zhangsan{0}

然后程序中输出:
MessageSource ms = (MessageSource) BeanUtil.getBeanByName("configProperties") ;
		System.out.println(ms.getMessage("name",new Object[]{"年龄:20"} , Locale.CHINESE));
		System.out.println(ms.getMessage("name",new Object[]{"age:20"} , Locale.ENGLISH));
输出为:

张三年龄20

zhangsanage20

不过也有注意的地方:

如果你的文件中的消息有占位符,同时又有单引号就需要注意了,有占位符的时候,单引号需要转义,只需要在单引号前再加一个单引号就可以了,

例如:

name='dengwei'{0}

我就需要写成:name=''dengwei‘’{0}记得是两个单引号,而不是双引号

猜你喜欢

转载自dwj147258.iteye.com/blog/2342211