springboot页面国际化

springboot页面国际化

  1. 统一字符编码

    统一idea的字符编码,避免读取字符时发生乱码情况

    1623074437310

  2. 在resourse根目录下新建i18n文件夹(默认的多语言配置文件路径)

  3. 在i18n新建login.properties文件和login_en_US.properties文件。

    这个时候idea会自动识别并归档这两个文件在一个同级目录下

    1623074644033

  4. 继续添加文件,login_zh_CN.properties文件

    新建

    1623074841034

    下一步

    1623074888758

    这样就将默认,中文和英文三个语言文件夹添加完成了。

    1623074961137

  5. 添加属性值

    1623075070264

  6. 配置国际化文件路径

    spring.messages.basename=i18n.login
    
  7. 将属性值放入页面中

    <ul>
        <li th:text="#{login.loginBtnName}"></li>
        <li th:text="#{login.username}"></li>
        <li th:text="#{login.password}"></li>
        <li th:text="#{login.rememberMe}"></li>
        <li th:text="#{login.tip}"></li>
    </ul>
    

    这样页面将会显示默认的参数,设置一个按钮来切换中英文

    <a th:href="@{/index.html(l='zh_CN')}">中文</a>
    <a th:href="@{/index.html(l='en_US')}">英文</a>
    

    这样的请求充其量让我们在链接上传递了一个参数罢了,那我们应该怎么去解析并适配呢。源码走起

    springboot提供了一个类来解析这种国际化请求请求,自定义这个类可以对其功能进行定制化。

  8. 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;
    }
    
  9. 自定义LocalrResolver地域解析器

    public class MyLocalResolver implements LocaleResolver {
    
        //解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            String language = request.getParameter("l");
            Locale locale = Locale.getDefault(); //如果没有使用默认的。
            if (!StringUtils.isEmpty(language)) { //如果请求的链接携带国际化参数
                String[] split = language.split("_");
                locale = new Locale(split[0], split[1]); //语言,地区
            }
            return locale;
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    
        }
    }
    
  10. 在自定义的WebMvcConfigger注入bean

    如果直接注入IOC当中,IOC管理着大量的bean,WebMvcConfigger也无法识别也不支持从整个IOC容器中去扫描所有的bean找到它特有的组件,它只有通过在组件里配置的方式才可以被WebMvcConfiger获取生效。

    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    	//注册bean
        @Bean
        public LocaleResolver localeResolver(){
            return new MyLocalResolver();
        }
    }
    

页面国际化完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值