实战:第二十二章:i18n国际化(已实现中文,英文,波兰文)

简介: 实战:第二十二章:i18n国际化(已实现中文,英文,波兰文)

创建一个maven模块

pom.xml:

创建一个maven模块
在这里插入图片描述
pom.xml:
<?xml

创建配置文件:LocaleConfiguration

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
/**
 * 语言区域配置
 * @author zhiwei Liao
 */
@Configuration
public class LocaleConfiguration {
    private final String LOCAL_HEAD_NAME = "Locale";
    @Bean
    public WebMvcConfigurer localeInterceptor() {
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
                localeInterceptor.setParamName(LOCAL_HEAD_NAME);
                registry.addInterceptor(localeInterceptor);
            }
        };
    }
}

创建常量:LanguageConstant

/**
 * @author zhiwei Liao
 * @version 1.0
 * @Description 语言
 * @Date 2021/7/19 18:31
 */
public class LanguageConstant {
    //波兰文
    public static final String PL = "pl_pl";
    //英文
    public static final String US = "en_us";
    //中文
    public static final String CN = "zh_cn";
    //请求头中设置语言
    public static final String ACCEPT_LANGUAGE = "accept-language";
}
import com.liao.common.i18n.constant.LanguageConstant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.security.auth.login.LoginContext;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.Locale;
/**
 * 国际化转换工具
 * @author zhiwei Liao
 */
@Component
public class LocaleUtils {
    private static final Logger log = LoggerFactory.getLogger(LocaleUtils.class);
    private static MessageSource messageSource;
    public LocaleUtils(MessageSource messageSource) {
        LocaleUtils.messageSource = messageSource;
    }
    public static String getMessage(String msgKey) {
        return getMessage(msgKey, null);
    }
    public static String getMessage(String msgKey,Object[] args) {
        try {
            return messageSource.getMessage(msgKey, args, LocaleContextHolder.getLocale());
        } catch (Exception e) {
            return msgKey;
        }
    }
    /**
     * @Description 获取当前语言
     * @MethodParameterTypes []
     * @MethodParameters []
     * @MethodReturnType java.util.Locale
     * @Author zhiwei Liao
     * @Date 2021/7/19 18:43
     **/
    public static Locale getCurrentLocale() {
        String language = null;
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
        Enumeration<String> headerNames = request.getHeaderNames();
        if (headerNames != null) {
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                if(LanguageConstant.ACCEPT_LANGUAGE.equals(name)){
                    Enumeration<String> values = request.getHeaders(name);
                    while (values.hasMoreElements()) {
                        String value = values.nextElement();
                        if(LanguageConstant.PL.equals(value)){
                            language = value;
                        }else if(LanguageConstant.US.equals(value)){
                            language = value;
                        }else if(LanguageConstant.CN.equals(value)){
                            language = value;
                        }
                    }
                }
            }
        }
        log.info("======getCurrentLocale.language:" + language);
        Locale locale = null;
        if(LanguageConstant.PL.equals(language)){
            //波兰文
            locale = new Locale("pl","PL");
//                locale = new Locale("pl_PL");//本地有效,服务器上无效
        }else if(LanguageConstant.US.equals(language)){
            //英文
            locale = Locale.US;
        }else if(LanguageConstant.CN.equals(language)){
            //简体中文
            locale = Locale.SIMPLIFIED_CHINESE;
        }else {
            //请求头中没有语言设置时,默认给英文
            locale = Locale.US;
        }
        log.info("=========locale:" + locale);
        return locale;
    }
}

其他模块使用国际化

引用国际化模块的依赖,创建多语言文件


错误提示国际化返回:

log.error(UserinfoConstant.LOGIN_FAILED);
String message = messageSource.getMessage("user.login.failed", null, LocaleUtils.getCurrentLocale());
return ResultData.error(UserCodeConstant.LOGIN_FAILED, message);


测试是否可用:

波兰文:



英文:



中文:



相关文章
|
C++
推荐一款vscdoe中免费且能够快速将中文转英文变量的编程效率插件!
推荐一款vscdoe中免费且能够快速将中文转英文变量的编程效率插件,能够在日常编程办公中,助力你的编程效率,让你摆脱想英文变量名的烦恼!
248 0
|
4月前
|
Python
为什么编程都建议不要用拼音命名?
为什么编程都建议不要用拼音命名?
|
5月前
|
人工智能 程序员 开发者
|
7月前
|
Java
java实现中文转化为拼音与简称(转)
java实现中文转化为拼音与简称(转)
51 1
|
7月前
|
敏捷开发 程序员 开发者
编码之道:优雅注释与命名的艺术
编码之道:优雅注释与命名的艺术
|
搜索推荐 Linux C++
推荐一款utools中免费的中文转英文代码变量的编程效率工具
一款utools软件内使用的免费中文转英文代码变量命名工具,能够在日常编程办公中,助力你的编程效率,让你摆脱想英文变量名的烦恼!
144 0
|
前端开发 JavaScript 测试技术
前端国际化辅助工具——自动替换中文并翻译
前端国际化辅助工具——自动替换中文并翻译
670 0
|
人工智能 安全 程序员
谁说不能用中文写代码?
现代计算机和编程的起源和推动力量主要源自美国,再加上26个字母很便于表示(算上大小写,6位bit就够了),因此英语一直是编程领域的不二之选。但这就给部分非英语国家的编程学习者带来一些困扰。以至于有些人还没开始学,就担心自己的英语问题。这完全没必要,因为编程初期所用到的单词很有限,你就当做一个符号去记,也能很快熟悉。而且我们一直在讲的 Python,也可以“用中文”来编程。
|
Python
[oeasy]python0120_英语的崛起_英文字符_小写字母的由来_不列颠帝国
[oeasy]python0120_英语的崛起_英文字符_小写字母的由来_不列颠帝国
121 0
[oeasy]python0120_英语的崛起_英文字符_小写字母的由来_不列颠帝国
|
定位技术
记录平时编程或者阅读英文文档的时候不认识的英文单词
记录平时编程或者阅读英文文档的时候不认识的英文单词
174 0