欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

SpringBoot如何集成i18n(多语言),

来源: javaer 分享于  点击 37096 次 点评:208

SpringBoot如何集成i18n(多语言),


目录
  • SpringBoot集成i18n(多语言)
    • 配置文件
    • 国际化配置
    • 参数解析
    • ApplicationEvent
    • MessageUtils
    • 运行
    • 运行截图
  • 总结

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

    运行截图

    • 中文

    • 英文

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • springboot国际化多语言配置方式
    • SpringBoot集成I18n国际化文件在jar包外生效问题
    • SpringBoot多环境切换的灵活配置详细教程
    • IDEA中springboot提示java:找不到符号符号:变量log问题
    • SpringBoot如何自定义线程池配置类
    • springboot注解及GET、POST接口写法
    • Spring和Spring Boot的区别及说明
    相关栏目:

    用户点评