Spring Boot 入门 - 基础篇(7)- 国际化

Spring Boot默认支持国际化配置,只需要添加配置文件即可。

[b](1)配置文件[/b]
放在/src/main/resources/文件夹下即可
[list][*]messages.properties 默认
[*]messages_en.properties(英文)
[*]messages_zh.properties(中文)
[*]messages_ja.properties(日文)[/list]

[b](2)默认配置[/b]
[quote]spring.messages.always-use-message-format=false # Set whether to always apply the MessageFormat rules, parsing even messages without arguments.
spring.messages.basename=messages # Comma-separated list of basenames, each following the ResourceBundle convention.
spring.messages.cache-seconds=-1 # Loaded resource bundle files cache expiration, in seconds. When set to -1, bundles are cached forever.
spring.messages.encoding=UTF-8 # Message bundles encoding.
spring.messages.fallback-to-system-locale=true # Set whether to fall back to the system Locale if no files for a specific Locale have been found.[/quote]

修改spring.messages.basename的配置:
[quote]spring.messages.basename=i18n/messages_common,i18n/messages_api,i18n/messages_admin[/quote]

以下文件将都会被加载
[list][*]/src/main/resources/i18n/messages_common.properties
[*]/src/main/resources/i18n/messages_api.properties
[*]/src/main/resources/i18n/messages_admin.properties[/list]

[b](3)页面显示(Thymeleaf)[/b]
/src/main/resources/hello.html
<h1 th:text="#{search.condition}"></h1>


[b](4)代码中使用[/b]
@Autowired
private MessageSource messageSource;

String msg = messageSource.getMessage("search.condition", null, locale);


a- 获取request的Locale

Controller参数注入
@RequestMapping("/sample")
public String sample(Model model, Locale locale) {
String message = messageSource.getMessage("search.condition", null, locale);
log.info(message);
return "sample";
}


代码获取
Locale locale1 = LocaleContextHolder.getLocale(); // 当前request
Locale locale2 = RequestContextUtils.getLocale(request); // 指定request


b- 通用的使用
@Component
public class MessageManager {

private static MessageSource messageSource;

public static String getMsg(String key) {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(key, null, locale);
}

public static String getMsg(String key, String... arg) {
Locale locale = LocaleContextHolder.getLocale();
Object[] args = new Object[arg.length];
for (int i = 0; i < arg.length; i++) {
args[i] = arg[i];
}
return messageSource.getMessage(key, args, locale);
}

@Autowired(required = true)
public void setMessageSource(MessageSource messageSource) {
MessageManager.messageSource = messageSource;
}

}


String msg = MessageManager.getMsg("search.condition");


[b](5)设置验证信息Validator[/b]

Hibernate Validator 和 JSR 303 validation API的提示信息,默认是ValidationMessages.properties。亦可以统一到messages.properties里。
@Configuration
public class MessageConfig extends WebMvcConfigurerAdapter {
@Autowired
private MessageSource messageSource;

@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setValidationMessageSource(messageSource);
return localValidatorFactoryBean;
}

@Override
public Validator getValidator() {
return validator();
}
}


[b](6)设置语言[/b]

默认根据浏览器的语言设置来决定显示语言AcceptHeaderLocaleResolver。一般应用多采用会话级别的语言设置SessionLocaleResolver。
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
sessionLocaleResolver.setDefaultLocale(Locale.CHINA);
return sessionLocaleResolver;
}


[b](7)切换语言[/b]

a- 通过Interceptor

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}


URL中通过参数lang就可以切换到不同语言。比如:http://localhost:8080/hello.html?lang=zh

b- 代码内设置语言
Locale locale = Locale.CHINA;
LocaleContextHolder.setLocale(locale);
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值