在Java项目中,资源文件一般都为 *.properties 文件(只能存储key-value格式的数据),SpringMVC中提供有MessageSource
接口进行资源文件的读取,在SpringBoot中也支持同样的操作。
在resources目录下新建i18n
文件夹,在文件夹中新建message.properties
文件:
title=SpringBoot开发框架
desc=官方网址: https://spring.io/projects/spring-boot
修改application.yml文件,指定资源文件的basename
。
server:
port: 8080
spring:
messages:
basename: i18n/message
在java对象中注入MessageSource
,根据key来读取value值。
@RestController
@RequestMapping("/message/*")
public class MessageAction {
private final MessageSource messageSource; // 资源文件处理类
public MessageAction(MessageSource messageSource) {
this.messageSource = messageSource;
}
@RequestMapping("/get")
public Map<String, Object> getMessage() {
String title = messageSource.getMessage("title", null, Locale.getDefault());
String desc = messageSource.getMessage("desc", null, Locale.getDefault());
Map<String, Object> map = new LinkedHashMap<>();
map.put("title", title);
map.put("desc", desc);
return map;
}
}
访问http://localhost:8080/message/get
在i18n
文件夹再定义两个文件,message_zh_CN.properties
和message_en_US.properties
:
# message_zh_CN.properties
title=SpringBoot开发框架
desc=官方网址: https://spring.io/projects/spring-boot
# message_en_US.properties
title=SpringBoot Development framework
desc=Official website: https://spring.io/projects/spring-boot
如果想要设置国际化,那么就不能使用默认的Locale,可以实现一个Locale解析器,通过传入字符串的方式指定Locale。
定义一个DefaultLocaleResolver
,并在Spring容器中提供实例对象。
@Configuration
public class DefaultLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String loc = request.getParameter("loc"); // 取得请求参数
if (!StringUtils.hasLength(loc)) {
return Locale.getDefault(); // 设置默认Locale
}
String[] localeArray = loc.split("_");
return new Locale(localeArray[0], localeArray[1]); // 采用传入的locale
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {}
@Bean(name="localeResolver") // 指定LocaleResolver名称,否则可能不生效
public LocaleResolver getLocaleResolver() {
return new DefaultLocaleResolver();
}
}
修改控制器,在方法参数里面接收Locale对象,该Locale对象正是采用DefaultLocaleResolver
生成的。
@RequestMapping("/get")
public Map<String, Object> getMessage(Locale locale) {
String title = messageSource.getMessage("title", null, locale);
String desc = messageSource.getMessage("desc", null, locale);
Map<String, Object> map = new LinkedHashMap<>();
map.put("title", title);
map.put("desc", desc);
return map;
}
此时输入http://localhost:8080/message/get?loc=zh_CN
可以得到中文版本:
输入http://localhost:8080/message/get?loc=en_US
则可以得到英文版本:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/Nicholas_GUB/article/details/121065055
内容来源于网络,如有侵权,请联系作者删除!