Back-end/Spring Boot

[Spring Boot] Devtools, LocaleResolver(다국어 처리)

Bay Im 2024. 4. 3. 21:43

Spring Boot Devtools

  • Devtools
    • html 파일 저장 시 서버 재시작없이 view 파일 변경 가능
  • 적용
    1. build.gradle - dependencies 안에 아래 코드 추가
      • developmentOnly 'org.springframework.boot:spring-boot-devtools'
    2. preferences - 컴파일러 - 프로젝트 자동 빌드 체크
    3. 고급설정 - 컴파일러 - auto-make 허용 체크
    4. 우측 상단에 구성 편집 - 옵션 수정
      • update 작업 시 - 클래스 및 리소스 업데이트
      • 프레임 비활성화 시 - 클래스 및 리소스 업데이트
    5. application.properties 안에 아래 코드 추가
      • spring.devtools.restart.enabled=true
      • spring.thymeleaf.cache=false
    6. 크롬 확장자 LiveReload++ 프로그램 설치 후 북마크바에 고정 후 활성화

 

다국어 처리 (LocaleResolver)

  • LocaleResolver
    • AcceptHeaderLocaleResolver
      • 웹 브라우저가 전송한 헤더의 Accept-Language 값을 기반으로 Locale을 선택한다.
      • setLocale() 메서드를 지원하지 않는다.
    • SessionLocaleResolver - 많이 사용
      • 세션으로부터 Locale 정보를 구한다.
      • setLocale() 메서드는 세션에 Locale 정보를 저장한다.
    • CookieLocaleResolver
      • 쿠키를 이용해서 Locale 정보를 구한다.
      • setLocale() 메서드는 쿠키에 Locale 정보를 저장한다.
    • FixedLocaleResolver
      • 웹 요청에 상관없이 특정한 Locale로 설정한다.
      • setLocale() 메서드를 지원하지 않는다.
  • 다국어 처리 방법 (클릭으로 한/영 전환하기)
    1. application.properties에 spring.messages.basename=messages 추가
    2. 언어별로 properties 파일 작성
      • messages.properties 생성
        • 예시
        • hello=안녕
          # name으로 들어온 값이 {0}으로 들어간다.
          hello.name=안녕, {0}
      • messages_en.properties 생성
        • 예시
        • hello=Hello
          # name으로 들어온 값이 {0}으로 들어간다.
          hello.name=Hello, {0}
    3. html에 변수 작성
      • 타임리프로 th:text=”#{변수명}” 형식으로 값을준다.
      • 여기서 다른 타임리프 문법과는 달리 변수명 앞에는 #이 붙는 다는 점
      • 예시
      • <body>
            <h2 th:text="#{hello}"></h2>
            <h2 th:text="#{hello.name('Spring')}"></h2>
        </body>
    4. html에 경로 작성 및 컨트롤러 메소드 추가
      • 예시
        • html에 <a href="/changeLocale">전환</a> 추가
        • 컨트롤러에 전환 메소드 추가
        • @GetMapping("/changeLocale")
              public String changeLocale(HttpSession session){
                  Locale locale = (Locale)session.getAttribute(
                          SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
                  if ( Locale.KOREA.equals(locale) ){
                      session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,
                              Locale.ENGLISH);
                  } else{
                      session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,
                              Locale.KOREA);
                  }
                  return "redirect:/";
              }
    5. Config 클래스 생성
    6. @Configuration
      public class Config {
          @Bean
          public LocaleResolver localeResolver() {
              SessionLocaleResolver localeResolver = new SessionLocaleResolver();
              localeResolver.setDefaultLocale(Locale.KOREA);
              
              //AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
              
              return localeResolver;
          }
      }
    • 혹시 한글이 잘려나온다면 인텔리제이 설정에서 encoding을 UTF-8로 변경하자
728x90