当前位置: 代码网 > it编程>编程语言>Java > SpringBoot如何集成i18n(多语言)

SpringBoot如何集成i18n(多语言)

2024年05月15日 Java 我要评论
springboot集成i18n(多语言)配置文件spring: messages: basename: il8n/messages # 配置国际化资源文件

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");
  }
}

运行截图

  • 中文

  • 英文

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com