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"); } }
运行截图
- 中文
- 英文
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论