Spring Boot Thymeleaf 국제 화 를 실현 하 는 방법 에 대한 상세 한 설명
11539 단어 springboot국제 화thymeleaf
전통 적 인 자바 WEB 프로젝트 를 개발 할 때,우 리 는 JSP 페이지 템 플 릿 언어 를 사용 할 수 있 지만,SpringBoot 에 서 는 이미 추천 하지 않 습 니 다.SpringBoot 는 다음 페이지 템 플 릿 언어 를 지원 합 니 다.
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.운행 효 과 는 다음 과 같다.
기본 중국어 환경
영어 환경 으로 전환 하면 인터페이스 효 과 는 다음 과 같 습 니 다.
자료.
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.