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中有两个三个方法,我只研究了三个参数的和四个参数的
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}记得是两个单引号,而不是双引号
推荐阅读
-
Spring Boot通过Junit实现单元测试过程解析
-
通过spring-data-redis实现redis分布式缓存(增强版)
-
通过spring-data-redis实现redis分布式缓存(增强版)
-
通过Spring自定义NamespaceHandler实现命名空间解析(推荐)
-
spring 06通过注解实现
-
Spring Boot如何通过自定义注解实现日志打印详解
-
通过spring用beanshell实现java接口示例
-
Spring boot通过HttpSessionListener监听器统计在线人数的实现代码
-
Spring通过纯注解配置实现数据库CRUD操作
-
通过简单方法实现spring boot web项目