인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

임해경님의 프로필 이미지
임해경

작성한 질문수

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

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

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

작성

·

318

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

답변 1

0

Dowon Lee님의 프로필 이미지
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));
});

감사합니다. 

임해경님의 프로필 이미지
임해경
질문자

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

먼저 강사님 말씀대로 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이 설정되기도 하나요?

임해경님의 프로필 이미지
임해경

작성한 질문수

질문하기