springboot国际化

目录结构

实现步骤

  1. 配置i18n文件

    • login.properties
    login.btn=登录
    login.password=密码
    login.remember=记住我
    login.tip=请登录
    login.username=用户名
    
    • application.properties
    # 我们的配置文件的真实位置
    spring.messages.basename=i18n.login
    
  2. 项目中进行按钮自动切换,需要自定义一个组件LocaleResolver

    • MyLocaleResolver
    public class MyLocaleResolver implements LocaleResolver {
        // 解析请求
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            // 获取请求中的语言参数
            String language = request.getParameter("l");
            Locale locale = Locale.getDefault();//如果没有就使用默认的
            // 如果请求的连接携带了国际化的参数
            if (!StringUtils.isEmpty(language)) {
                // zh_CN
                String[] split = language.split("_");
                // 国家_地区
                locale = new Locale(split[0], split[1]);
            }
            return locale;
        }
    
        @Override
        public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
        }
    }
    
  3. 将组件配置到spring容器@Bean

    • MyMvcConfig
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
        // 自定义的国际化组件就生效了!
        @Bean
        public LocaleResolver localeResolver() {
            return new MyLocaleResolver();
        }
    }
    
  4. #{}调用国际化内容

    • index.html
    <form class="form-signin" th:action="@{/user/login}">
       <img class="mb-4" th:src="@{/img/bootstrap-solid.svg}" alt="" width="72" height="72">
       <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1>
       <p th:if="${msg} != null" style="color: red;" th:text="${msg}"></p>
       <input type="text" name="username" class="form-control" th:placeholder="#{login.username}" required="" autofocus="">
       <input type="password" name="password" class="form-control" th:placeholder="#{login.password}" required="">
       <div class="checkbox mb-3">
          <label>
            <input type="checkbox" value="remember-me" th:text="#{login.remember}">
          </label>
       </div>
       <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button>
       <p class="mt-5 mb-3 text-muted">© 2017-2018</p>
       <a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
       <a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a>
    </form>
    
posted @   不写代码想写诗的虫子  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示