zoukankan      html  css  js  c++  java
  • Spring Boot 国际化及点击链接跳转国家语言

    一、国际化

      在SpringBoot中已经自动帮我们配置管理国际化资源的组件,所以我们只需要编写代码就可。

      

    @Bean
        @ConfigurationProperties(prefix = "spring.messages")
        public MessageSourceProperties messageSourceProperties() {
            return new MessageSourceProperties();
        }
    
        @Bean
        public MessageSource messageSource(MessageSourceProperties properties) {
            ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
            if (StringUtils.hasText(properties.getBasename())) {
                messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(
                        StringUtils.trimAllWhitespace(properties.getBasename())));  //获取基础名(login_zh_CN中的login部分)
            }
            if (properties.getEncoding() != null) {
                messageSource.setDefaultEncoding(properties.getEncoding().name());
            }
            messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale());
            Duration cacheDuration = properties.getCacheDuration();
            if (cacheDuration != null) {
                messageSource.setCacheMillis(cacheDuration.toMillis());
            }
            messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());
            messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());
            return messageSource;
        }

      1.编写代码。

        在类路径下创建一个i18n的文件夹,存放国际化配置(login.properties、login_zh_CN.properties、login_en_US.properties)分别填写对应的值即可。

        2.在页面中获取国际化信息

        在thymeleaf中获取值信息。通过#{键}获取国际化中的值。

       3.在application.properties中配置如下代码。

    #指定i18n从哪里配置
    spring.messages.basename=i18n.login  //位置

      

      效果:会根据浏览器系统语言自动显示对应文字

    二、点击超链接切换国家语言

      原理:

        @Bean
            @ConditionalOnMissingBean   //前提是容器中不存在这个组件,
                    所以使用自己的对象就要配置@Bean让这个条件不成立(实现
    LocaleResolver 即可


          @ConditionalOnProperty(prefix
    = "spring.mvc", name = "locale") public LocaleResolver localeResolver()
          //如果在application.properties中有配置国际化就用配置文件的,没有配置就用AcceptHeaderLocaleResolver 默认request中获取
        {
                if (this.mvcProperties
                        .getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
                    return new FixedLocaleResolver(this.mvcProperties.getLocale());
                }
                AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
                localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
                return localeResolver;
            }
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
    Locale defaultLocale = getDefaultLocale();  
    if (defaultLocale != null && request.getHeader("Accept-Language") == null) {
    return defaultLocale;
    }
    Locale requestLocale = request.getLocale();  //通过request对象获取请求头的国际化信息
    List<Locale> supportedLocales = getSupportedLocales();
    if (supportedLocales.isEmpty() || supportedLocales.contains(requestLocale)) {
    return requestLocale;
    }
    Locale supportedLocale = findSupportedLocale(request, supportedLocales);
    if (supportedLocale != null) {
    return supportedLocale;
    }
    return (defaultLocale != null ? defaultLocale : requestLocale);
    }
     

      1.实现点击链接切换国家语言(链接上加入区域信息“language='zh_CN'))

          通过原理知道可以通过request请求头中获取区域信息,所有我们在链接上加入区域信息“language='zh_CN')”,然后通过实现LocaleResolver重resolveLocale即可,并且将自己的实现类放在容器中,容器会自动加载这个组件。

      2.编写代码

    public class MyLocaleResolver implements LocaleResolver {
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
    
            String language = request.getParameter("language");
            //获取系统的语言
            Locale locale = Locale.getDefault();
            if (!StringUtils.isEmpty(language)){
                //有值
                String[] s = language.split("_");
                locale=new Locale(s[0],s[1]);
    
            }
            return locale;
        }

    效果:

    作者:独而不孤

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

    喂一下的我仓鼠谢谢
  • 相关阅读:
    笨方法学python中执行argv提示ValueError: not enough values to unpack (expected 4, got 1)
    VMware workstation安装
    Redis bigkey分析
    MySQL drop table 影响及过程
    MySQL 大表硬连接删除
    ES elasticsearch 各种查询
    ES elasticsearch 各种聚合
    ES elasticsearch 聚合统计
    ES elasticsearch 实现 count单字段,分组取前多少位,以地理位置中心进行统计
    MySQL行溢出、varchar最多能存多少字符
  • 原文地址:https://www.cnblogs.com/lcaiqin/p/10422072.html
Copyright © 2011-2022 走看看