Spring Boot Thymeleaf 국제 화 를 실현 하 는 방법 에 대한 상세 한 설명

머리말
전통 적 인 자바 WEB 프로젝트 를 개발 할 때,우 리 는 JSP 페이지 템 플 릿 언어 를 사용 할 수 있 지만,SpringBoot 에 서 는 이미 추천 하지 않 습 니 다.SpringBoot 는 다음 페이지 템 플 릿 언어 를 지원 합 니 다.
  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • JSP
  • 위 에는 모든 SpringBoot 가 지원 하 는 페이지 템 플 릿 기술 이 열거 되 어 있 지 않 습 니 다.그 중에서 Thymeleaf 는 SpringBoot 가 공식 적 으로 추천 하여 사용 한 것 으로 Thymeleaf 가 국제 화 를 실현 하 는 방법 에 대해 이야기 하 겠 습 니 다.
    ps:물론 현재 개발 은 기본적으로 앞 뒤 가 분리 되 었 지만 남 겨 진 프로젝트 를 유지 하거나 조건 없 이 앞 뒤 가 분 리 된 팀 이 많 을 수 밖 에 없습니다.이 럴 때 필요 한 전단 기능 을 배 워 서 적은 노력 으로 큰 효 과 를 얻 을 수 있 습 니 다.
    Thymeleaf 의존 추가
    Thymeleaf 를 사용 하려 면 먼저 pom.xml 파일 에 Thymeleaf 의존 도 를 따로 추가 해 야 합 니 다.
    
    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    Spring Boot 기본 템 플 릿 페이지 를 저장 하 는 경 로 는 src/main/resources/templates 나 src/main/view/templates 입 니 다.이것 은 어떤 템 플 릿 언어 를 사용 하 든 마찬가지 입 니 다.물론 기본 경 로 는 사용자 정의 가 가능 하지만 일반적으로 이렇게 하 는 것 을 추천 하지 않 습 니 다.또한 Thymeleaf 의 기본 페이지 파일 접 두 사 는.html 입 니 다.
    국제 화
    국제 화(internationalization)는 서로 다른 지역 의 요구 에 적응 하기 쉬 운 제품 을 디자인 하고 제조 하 는 방식 이다.이 는 제품 에서 모든 지역 언어,국가/지역 과 문화 와 관련 된 요 소 를 추출 해 야 한다.다시 말 하면 응용 프로그램의 기능 과 코드 디자인 은 서로 다른 지역 에서 운행 하 는 수 요 를 고려 하여 그 코드 는 서로 다른 로 컬 버 전의 생산 을 간소화 했다.이런 절 차 를 개발 하 는 과정 을 국제 화 라 고 한다.
    Spring Boot Thymeleaf 코드 국제 화 실현
    1.파일 코드 설정 WebConfiguration.java
    
    package com.easy.templateThymeleaf.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.WebMvcConfigurer;
    import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
    import org.springframework.web.servlet.i18n.SessionLocaleResolver;
    
    import java.util.Locale;
    
    @Configuration
    public class WebConfiguration implements WebMvcConfigurer {
    
     @Bean
     public LocaleResolver localeResolver() {
    
      SessionLocaleResolver localeResolver = new SessionLocaleResolver();
      localeResolver.setDefaultLocale(new Locale("es", "ES"));
      return localeResolver;
     }
    
     @Bean
     public LocaleChangeInterceptor localeChangeInterceptor() {
    
      LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
      localeChangeInterceptor.setParamName("lang");
      return localeChangeInterceptor;
     }
    
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
    
      registry.addInterceptor(localeChangeInterceptor());
     }
    }
    2.컨트롤 러 코드 IndexController.java,LocaleController.java
    
    package com.easy.templateThymeleaf.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.MessageSource;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import java.util.Locale;
    
    @Controller
    public class IndexController {
    
     @Autowired
     private MessageSource messageSource;
    
     @RequestMapping(value = {"/index", "/"}, method = RequestMethod.GET)
     public String index(Model model, Locale locale) {
    
      model.addAttribute("title", messageSource.getMessage("text.title", null, locale));
      return "index";
     }
    }
    
    package com.easy.templateThymeleaf.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    
    import javax.servlet.http.HttpServletRequest;
    
    @Controller
    public class LocaleController {
    
     @GetMapping(value = "/locale")
     public String localeHandler(HttpServletRequest request) {
    
      String lastUrl = request.getHeader("referer");
      return "redirect:" + lastUrl;
     }
    }
    3.정적 페이지 코드 index.html
    
    <!DOCTYPE html>
    <html xmlns:th="https://www.thymeleaf.org">
    <head>
     <meta charset="UTF-8">
     <title th:text="${title}">Insert title here</title>
    
     <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
    </head>
    <body>
    
    <nav class="navbar navbar-expand-lg navbar-dark bg-danger">
     <a class="navbar-brand" th:href="@{'/'}">I18N Demo</a>
     <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
       aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
     </button>
     <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav mr-auto">
       <li class="nav-item active">
        <a class="nav-link" th:href="@{'/'}" th:text="#{text.home}">Home</a>
       </li>
      </ul>
      <ul class="navbar-nav navbar-right">
       <li class="dropdown">
        <button th:text="#{text.language}" class="btn btn-danger dropdown-toggle" type="button"
          id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        </button>
        <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
         <a class="dropdown-item" th:href="@{/locale(lang=es_ES)}"
          th:text="#{text.language.chinese}">  </a>
         <a class="dropdown-item" th:href="@{/locale(lang=en_US)}"
          th:text="#{text.language.english}">  </a>
        </div>
       </li>
      </ul>
     </div>
    </nav>
    
    <div class="container" style="margin-top:50px">
    
     <div class="jumbotron jumbotron-fluid">
      <div class="container">
       <h1 class="display-4" th:text="#{text.home.message}">Fluid jumbotron</h1>
       <p class="lead" th:text="#{text.description}">This is a modified jumbotron that occupies the entire
        horizontal space of its parent.</p>
      </div>
     </div>
    
    </div>
    
    <footer>
    
     <script th:src="@{/js/jquery-3.3.1.min.js}"></script>
     <script th:src="@{/js/popper.min.js}"></script>
     <script th:src="@{/js/bootstrap.min.js}"></script>
    
    </footer>
    
    </body>
    </html>
    4.언어 설정 파일
    중국어 간 체 언어 설정 파일 messages.properties
    
    text.title=     
    text.home=  
    text.language=  
    text.language.chinese=  (  )
    text.language.english=  
    text.home.message=  ,   
    text.description=          
    영어 언어 프로필 messages.properties
    
    text.title=Application title
    text.home=Home
    text.language=Language
    text.language.chinese=Chinese
    text.language.english=English
    text.home.message=Hi, welcome!
    text.description=It is a i18n demo
    5.마지막 으로 maven 프로필 pom.xml 붙 이기
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.7.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.easy</groupId>
     <artifactId>template-thymeleaf</artifactId>
     <version>0.0.1</version>
     <name>template-thymeleaf</name>
     <description>Demo project for Spring Boot</description>
    
     <properties>
      <java.version>1.8</java.version>
      <encoding>UTF-8</encoding>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     </properties>
    
     <dependencies>
      
      <dependency>
       <groupId>com.h2database</groupId>
       <artifactId>h2</artifactId>
       <scope>runtime</scope>
      </dependency>
    
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
    
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
    
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
      </dependency>
    
      <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <optional>true</optional>
      </dependency>
    
     </dependencies>
    
     <build>
      <plugins>
       <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
       </plugin>
      </plugins>
     </build>
    
    </project>
    실행 예시
    1.TemplateThymeleafpapplication.java 파일 실행 예제 찾기
    주소 표시 줄 입력:http://localhost:8080/
    2.운행 효 과 는 다음 과 같다.
    기본 중국어 환경

    영어 환경 으로 전환 하면 인터페이스 효 과 는 다음 과 같 습 니 다.

    자료.
  • Spring Cloud Feign 예제 소스 코드
  • Spring Boot,Spring Cloud 예시 학습
  • 총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기