springboot集成i18n(多语言)
配置文件
spring:
messages:
basename: il8n/messages # 配置国际化资源文件路径
fallback-to-system-locale: true # 是否使用系统默认的语言环境作为备选项国际化配置
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.web.servlet.localeresolver;
import org.springframework.web.servlet.config.annotation.interceptorregistry;
import org.springframework.web.servlet.config.annotation.webmvcconfigurer;
import org.springframework.web.servlet.i18n.localechangeinterceptor;
/**
* 国际化配置
*/
@configuration
public class i18nlocaleconfig implements webmvcconfigurer{
/**
* 默认解析器 其中locale表示默认语言
*/
@bean
public localeresolver localeresolver() {
return new mylocaleresolver();
}
@bean
public localechangeinterceptor localechangeinterceptor() {
localechangeinterceptor localechangeinterceptor = new localechangeinterceptor();
localechangeinterceptor.setparamname("accept-language");
return localechangeinterceptor;
}
@override
public void addinterceptors(interceptorregistry registry) {
registry.addinterceptor(localechangeinterceptor());
}
}参数解析
import org.apache.commons.lang3.stringutils;
import org.springframework.web.servlet.localeresolver;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import java.util.locale;
/**
* 参数解析
*/
public class mylocaleresolver implements localeresolver {
@override
public locale resolvelocale(httpservletrequest request) {
// 从 request 域中读取传过来的参数
string l = request.getheader("accept-language");
// 声明 locale 为默认语言显示
locale locale = locale.getdefault();
// 判断传入参数是否为空
if (!stringutils.isempty(language) && stringutils.contains(language,"_")){
// 将传过来的参数,通过下划线分割,获取到地区(zh)即代码(cn)
string[] split = l.split("_");
// 进行赋值
locale = new locale(split[0],split[1]);
}
// 返回
return locale;
}
@override
public void setlocale(httpservletrequest request, httpservletresponse response, locale locale) {
}
}applicationevent
import com.zzdy.recharge.il8n.utils.messageutils;
import org.springframework.context.applicationlistener;
import org.springframework.context.messagesource;
import org.springframework.context.event.contextrefreshedevent;
import org.springframework.stereotype.component;
import javax.annotation.resource;
@component
public class applicationevent implements applicationlistener<contextrefreshedevent> {
@resource
protected messagesource messagesource;
@override
public void onapplicationevent(contextrefreshedevent event) {
messageutils.setmessagesource(messagesource);
}
}messageutils
import org.springframework.context.messagesource;
import org.springframework.context.i18n.localecontextholder;
import org.springframework.context.support.resourcebundlemessagesource;
public class messageutils extends resourcebundlemessagesource {
private static messagesource messagesource;
public static void setmessagesource(messagesource source){
messagesource=source;
}
public messageutils() {
super();
}
/**
* 获取单个国际化翻译值
*/
public static string get(string pvskey) {
try {
return messagesource.getmessage(pvskey, null, localecontextholder.getlocale());
} catch (exception e) {
return pvskey;
}
}
/**
* 获取单个国际化翻译值
*/
public static string get(string pvskey,object ... pvparams) {
try {
return messagesource.getmessage(pvskey, pvparams, localecontextholder.getlocale());
} catch (exception e) {
return pvskey;
}
}
}运行
import com.zzdy.recharge.il8n.utils.messageutils;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;
@restcontroller
@requestmapping("recharge/i18n")
public class greetingcontroller {
@getmapping("/greeting")
public string greeting() {
return messageutils.get("not.null");
}
}运行截图
- 中文

- 英文

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论