• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

"섹션3. 다국어 처리를 위한 Internationalization 구현 방법" 관련 문의드립니다.

24.04.29 15:28 작성 조회수 58

0

다국어 실습시 Header에 "Accept-Language" 정보 미포함시 400 에러가 발생합니다.

github 소스로 실행해도 동일합니다.

Header에 "Accept-Language" 미포함시 정상인건지 궁금합니다.

미포함시 default 정보로 조회되는게 아닌가요?

 

테스트는 크롬 확장도구인 "Talend"를 이용했으며 에러 응답은 다음과 같습니다.

<problemxmlns="urn:ietf:rfc:7807">

<type>about:blank</type>

<title>Bad Request</title>

<status>400</status>

<detail>Failed to convert 'Accept-Language' with value: 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7'</detail>

<instance>/hello-world-internationalized</instance>

</problem>

답변 2

·

답변을 작성해보세요.

1

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

말씀하신 것처럼 Accept-Language 설정을 required=false로 설정 하였기 때문에, 클라이언트에서 요청할 때 해당 헤더가 없으면 기본값으로 사용되어야 하는 것이 맞습니다. 다만, 사용하시는(테스트하는) Tools에 따라서 이러한 값이 다르게 전달 될 수도 있습니다. 예를 들어 Postman에서는 Accept-Language 값을 사용자가 지정하지 않았을 경우에도 정상적으로 Locale 값이 null로 설정되어 사용될 수 있는 반면에 Talend와 Tool에서는 Accept-Language 값이 없을 경우 Locale 형태가 아니라 String 값으로 기본값이 설정되어 전달 됩니다. 따라서, 예제에서 실행 메소드는 Parameter의 인자값 형태가 달라서 실행되지 않습니다. 아래 예제처럼 RequestHeader를 String으로 전달 받을 수 있는 메소드를 등록하신 다면, Talend에서 Accept-Language 값을 전달하지 않을 때에도 정상적으로 실행되는 것을 보실 수 있습니다.

@GetMapping(path = "/hello-world-internationalized")
public String helloWorldInternationalized(
        @RequestHeader(name="Accept-Language", required=false)  Locale locale, HttpServletRequest req) {
    return messageSource.getMessage("greeting.message", null, locale);
}

@GetMapping(path = "/hello-world-internationalized2")
public String helloWorldInternationalized2(
        @RequestHeader(name="Accept-Language", required=false)  String locale, HttpServletRequest req) {
    return messageSource.getMessage("greeting.message", null, new Locale(locale));
}

image

따라서 예제에서 사용한 Locale 값으로 인해 기본값이 전달되지 않았던 것 같습니다. 이 부분을 String으로 변경해서 사용해 보시면, Accept-Language 값을 전달하지 않아도 예제가 실행되실 것 같습니다.

감사합니다.

노정호님의 프로필

노정호

질문자

2024.04.30

상세한 답변 감사합니다!!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.29

안녕하세요, 인프런 AI 인턴입니다.

노정호님의 질문에 대해 “Accept-Language” 헤더 정보가 포함되지 않은 상황에서의 처리와 관련된 문제를 해결해 드리기 위해 관련된 정보를 찾아봤습니다. 질문 내용에 기반하여, “Accept-Language” 헤더 미포함 시 발생하는 400 에러 문제를 해결하기 위한 몇 가지 정보를 찾았습니다.

  1. Failed to convert value of type ‘java.lang.String’ to required type ‘java.util.Locale 오류 문의: 이 토론에서는 “Accept-Language” 헤더를 통한 다국어 처리 문제와 관련된 문제를 해결하는 방법에 대한 답변이 포함되어 있습니다. 다국어 처리를 위한 AcceptHeaderLocaleResolver 클래스를 사용하여 헤더의 언어 설정을 명시적으로 해결하는 방법을 제시하고 있습니다.

  2. Accept-Language헤더 설정안하면 400에러가 나네요: 이 질문에서는 Accept-Language 헤더가 설정되지 않았을 때 발생하는 400 에러에 대한 문제와 해결 방법을 다루고 있습니다. 여기서는 헤더 숨김 값이 여러 가지로 전달되어 오류가 발생하는 문제에 대한 해결책을 제공합니다.

이러한 자료들은 Accept-Language 헤더 없이 다국어 처리를 구현할 때 발생할 수 있는 문제와 그에 대한 해결 방안을 제공합니다. 문제의 원인을 진단하고, 문제를 해결하기 위한 구체적인 코드 예제와 설명을 제공하여 질문자님이 겪고 있는 문제를 해결하는 데 도움이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.