inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

다국어 처리를 위한 Internationalization 구현 방법

default로 설정한 다국어 파일이 적용 안되는 문제

388

임해경

작성한 질문수 1

0

안녕하세요 강사님. 강의 잘 보고 있습니다:)

이번 강의 실습을 진행하는데 문제가 발생하여 질문 올립니다.

전 이상하게도, Accept-Language 를 Header에 포함하지 않고 전송하면 Hello가 response로 옵니다.

강사님이 하신대로 default인 messages.properties안에 'greeting.messages=안녕하세요'라고 설정했음에도 그렇게 답변이 옵니다.

Postman 자체에서 en으로 Accept-Language를 header에 넣어 보내는 것같은데, 그렇게 생각하자니 또 Headers의 숨겨진 헤더 key, value 를 확인해보아도 자동으로 들어가지 않는 것 같습니다. Postman 자체에서 Header 내용을 모두 표시하지 않는 것일까요?

문제 원인과 해결 방법에 대해 어떻게 생각하시는지 여쭙고 싶습니다.

[사용환경]

Ubuntu 20.04 / Postman / intellij

spring-boot rest-api

답변 1

0

Dowon Lee

안녕하세요, 이도원입니다.

Postman에서 전송하는 Header 값을 Java 코드에서 확인해 보시기 바랍니다. 브라우저 또는 Postman과 같은 REST API 테스트 도구에서 이전 정보가 캐쉬로 남아서 전달되는 경우도 있고, 기본 값 정도가 다를 수도 있습니다. 정확하게 Java 코드에서 어떠한 Header 값들이 전달되었는지 확인해 보시고, messages.properties 파일도 정상적으로 등록되었는지 확인해 보실 수 있을까요? 

Java 코드에서 Header 값의 확인은 

해당 메소드에, HttpServletRequest를 파라미터로 추가하시면, 아래와 같은 코드로 확인해 보실 수 있습니다.

Enumeration<String> headers = request.getHeaderNames();
Collections.list(headers).stream().forEach(name -> {
Enumeration<String> values = request.getHeaders(name);
Collections.list(values).stream().forEach(value -> System.out.println(name + "=" + value));
});

감사합니다. 

0

임해경

안녕하세요, 임해경 입니다!

먼저 강사님 말씀대로 header를 print해보았으나, 제가 직접 전달하지 않으면 Accept-Language 값은 전달되지 않았습니다.

직접 전달하지 않았을 때 header는 다음과 같습니다.

user-agent=PostmanRuntime/7.28.0

accept=*/*

cache-control=no-cache

postman-token=<토큰내용>

host=localhost:8088

accept-encoding=gzip, deflate, br

connection=keep-alive

그래서 messages.properties 파일이 정상적으로 등록되었는지 확인하기 위해 messages.properties 외의 다국어파일인 messages_en.properties, messages_fr.properties 를 삭제하고 get 요청을 보내보았습니다.

그렇게 하니 안녕하세요가 정상적으로 출력되었고, 그걸 보아 messages.properties는 잘 등록되는 것 같습니다.

그러나 messages_en.properties, messages_fr.properties 를 다시 추가하면 defualt인 안녕하세요가 오지 않았습니다.

혹시나 싶어 application.yml 파일에 fallback-to-system-locale: false로 지정한 뒤 Accept-Language를 jp로 설정하여 request를 보내보았습니다. 그랬더니 default인 messages.properties가 잘 출력되었습니다.

fallback-to-system-locale: true인 경우에는 Hello가 출력되었습니다.

결론적으로 system locale이 en으로 설정된 것 같은데, 분명 localeResolver에서 강사님이 하신대로 setDefaultLocale(Locale.KOREA)을 작성 했는데 왜 그렇게 되는건지 모르겠습니다 ㅠㅠ

우분투가 한국어가 아닌, 영어로 설정되어있는데 혹시 이 때문일까요? OS 자체 시스템이 영어로 설정되어있어서 자동으로 그렇게 system locale이 설정되기도 하나요?

JPA

0

71

1

jpa dependency를 추가하고 SecurityConfig클래스에서 오류가 납니다.

0

84

1

웹 브라우저 400 bad request

0

84

1

@Size는 되는데 @Past는 안 됩니다.

0

76

1

pdf 자료는 없나요?

0

92

2

locale 정보가 null 이면 무조건 messages_ko.properties이 호출 되는 문제

0

100

2

Swagger 강의, Unable to infer base url 이거 뜨시는 분들 도움되시라고

0

135

1

강의에서나온 화면 피피티

0

169

1

HelloWorldBean 관련 에러

0

194

2

Swagger API 3.x 오류..

0

230

1

java: variable message not initialized in the default constructor 에러는 어찌하면 좋을까요?

1

289

1

현재 GIT에 올리신 소스를 실행해봤습니다.

0

203

2

고양이 소리가 귀엽네요 !!

0

149

2

git에서 소스받고 실습중인데

0

127

1

post가 안되요

0

116

1

한국어 같은 경우 언어코드인 messages_ko.properties 로 생성하는게 더 좋지 않나요?

0

176

2

리턴타입으로서 EntityModel<User> 와 ResponseEntity질문

0

113

1

예외처리쪽 관련 질문있습니다.

0

165

2

엔티티가 바로 응답으로 나가도 되나요??

0

239

2

안녕하세여 Cannot invoke "co.kr.joneconsulting.resfulservice.repository.PostRepository.save(Object)" because "this.postRepository" is null

0

150

2

사용자 등록하고 나서 H2 에서 보면 신규 사용자의 password, ssn 이 null 로 되어 있습니다.

0

146

2

ApplictionContext 질문

0

199

2

롬북이 안먹히는것같아요

0

161

1

인텔리제이에서스프링부트 파일 실행하면

0

244

1