zoukankan      html  css  js  c++  java
  • springboot国际化

    实现效果:默认使用浏览器的语言,如果请求url包含参数l=zh_CN,则使用自己配置的Locale。

    springboot也是 使用ResourceBundleMessageSource管理国际化资源文件

    步骤:

    1、编写国际化配置文件,抽取页面需要显示的国际化消息

    2、SpringBoot自动配置好了管理国际化资源文件的组件

    @ConfigurationProperties(prefix = "spring.messages")
    public class MessageSourceAutoConfiguration {
        /**
        * Comma‐separated list of basenames (essentially a fully‐qualified classpath
        * location), each following the ResourceBundle convention with relaxed support for
        * slash based locations. If it doesn't contain a package qualifier (such as
        * "org.mypackage"), it will be resolved from the classpath root.
        */
        private String basename = "messages";
        //我们的配置文件可以直接放在类路径下叫messages.properties;
        @Bean
        public MessageSource messageSource() {
            ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
            if (StringUtils.hasText(this.basename)) {
                //设置国际化资源文件的基础名(去掉语言国家代码的)
                messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(
                StringUtils.trimAllWhitespace(this.basename)));
            } 
            if (this.encoding != null) {
                messageSource.setDefaultEncoding(this.encoding.name());
            } 
            messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale);
            messageSource.setCacheSeconds(this.cacheSeconds);
            messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat);
            return messageSource;
        }


    3、页面获取国际化的值

    <label th:text="#{login.username}">Username</label>
    <input type="text" class="form‐control" placeholder="Username" th:placeholder="#
    {login.username}" required="" autofocus="">

    效果:根据浏览器语言设置的信息切换了国际化(根据浏览器设置的语言, 服务端根据请求头acquire-language判断)

    原理:默认的就是根据请求头带来的区域信息获取Locale进行国际化
    国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
    public LocaleResolver localeResolver() {
        if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
            return new FixedLocaleResolver(this.mvcProperties.getLocale());
        } 
        AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
        localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
        return localeResolver;
    }

    4、点击链接切换国际化

    /**
    * 可以在连接上携带区域信息
    */
    public class MyLocaleResolver implements LocaleResolver {
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            String l = request.getParameter("l");
            Locale locale = Locale.getDefault();
            if(!StringUtils.isEmpty(l)){
                String[] split = l.split("_");
                locale = new Locale(split[0],split[1]);
            }
            return locale;
        }
        
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
        }
    }
    
    //配置类中配置
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }

    ---

  • 相关阅读:
    基于centOS7→nginx安装
    基于centOS7→tomcat安装配置
    chmod、acl权限
    解决终端SSH连接服务器一段时间不操作之后卡死的问题
    客户端加域失败,提示“找不到网络名”解决的方案
    将博客搬至CSDN
    Qt on android 蓝牙开发(控制小车)
    qt程序运行时的错误error:undefined reference to `_imp___ZN10QTcpSocketD1Ev'
    QT 实现在QLabel上画图
    linux文件访问权限(像rw-r--rw-是什么意思)
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/14025794.html
Copyright © 2011-2022 走看看