• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

21.05.05 23:26 작성 조회수 207

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

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

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));
});

감사합니다. 

임해경님의 프로필

임해경

질문자

2021.05.07

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

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