zoukankan      html  css  js  c++  java
  • 关于Springboot LocaleResolver 国际化的实现方式

    第一种方式

    package com.wuhao.config;
    
    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.ViewControllerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/").setViewName("index");
            registry.addViewController("/index.html").setViewName("index");
            registry.addViewController("/main.html").setViewName("dashboard");
        }
    
        @Bean
        public LocaleResolver localeResolver(){
            return new MyLocalResolver();
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LoginHandlerInterceptor())
                    .addPathPatterns("/**")
                    .excludePathPatterns("/index.html","/","/user/login");
        }
    
    }
    View Code
    package com.wuhao.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.thymeleaf.util.StringUtils;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Locale;
    
    
    public class MyLocalResolver implements LocaleResolver, WebMvcConfigurer {
        //解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            String language = request.getParameter("l");
            Locale defaultLanguage = Locale.getDefault();
            if(!StringUtils.isEmpty(language)){
                String[] split = language.split("_");
                defaultLanguage = new Locale(split[0], split[1]);
            }
            return defaultLanguage;
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    
        }
    }
    View Code

    第二种方式

    package com.wuhao.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.servlet.LocaleResolver;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import org.thymeleaf.util.StringUtils;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Locale;
    
    @Component("localeResolver")
    public class MyLocalResolver implements LocaleResolver, WebMvcConfigurer {
        //解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            String language = request.getParameter("l");
            Locale defaultLanguage = Locale.getDefault();
            if(!StringUtils.isEmpty(language)){
                String[] split = language.split("_");
                defaultLanguage = new Locale(split[0], split[1]);
            }
            return defaultLanguage;
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    
        }
    }
    View Code

    区别就在于 一种是用@bean注解去实现, @bean注解声明的方法 会返回当前声明方法的类型 

    也就是说@bean声明以后 ioc注册时,会注册 LocaleResolver 类型。 

    第二种方式 如果我只是用@Component 而不是@Component("localeResolver")。一样会失败 

    因为DispatcherServlet在执行注册的时候, 只会去找

    protected void initStrategies(ApplicationContext context) {
    this.initMultipartResolver(context);
    this.initLocaleResolver(context);
    this.initThemeResolver(context);
    this.initHandlerMappings(context);
    this.initHandlerAdapters(context);
    this.initHandlerExceptionResolvers(context);
    this.initRequestToViewNameTranslator(context);
    this.initViewResolvers(context);
    this.initFlashMapManager(context);
    }
    initLocaleResolver 这个方法里的
    private void initLocaleResolver(ApplicationContext context) {
    try {
    this.localeResolver = (LocaleResolver)context.getBean("localeResolver", LocaleResolver.class);
    if (this.logger.isTraceEnabled()) {
    this.logger.trace("Detected " + this.localeResolver);
    } else if (this.logger.isDebugEnabled()) {
    this.logger.debug("Detected " + this.localeResolver.getClass().getSimpleName());
    }
    } catch (NoSuchBeanDefinitionException var3) {
    this.localeResolver = (LocaleResolver)this.getDefaultStrategy(context, LocaleResolver.class);
    if (this.logger.isTraceEnabled()) {
    this.logger.trace("No LocaleResolver 'localeResolver': using default [" + this.localeResolver.getClass().getSimpleName() + "]");
    }
    }

    }
    这个变量。
    所以自己

  • 相关阅读:
    解决多版本sdk兼容问题
    ios5 UIKit新特性
    iPhone网络编程–一起来做网站客户端(一)
    八数码
    IOS开发中编码转换
    修复ipa图片png方法
    创建易读链接 搭建应用通往App Store的桥梁
    如何让IOS应用从容地崩溃
    详解IOS IAP
    jquery创建并行对象或者叫合并对象
  • 原文地址:https://www.cnblogs.com/wuhaojs/p/15672272.html
Copyright © 2011-2022 走看看