최근 Babel을 GAE/webapp2 사이트에 추가했는데 작동하지만, 로캘을 가져 오는 올바른 방법에 대해 혼란스러워합니다.Babel 및 webapp2 로케일 결정
이 answer에서 그는 self.request.get('locale', 'es_ES')
으로 로케일을 가져 오지만 이것은 URL에 ?locale=fr_FR
과 같은 것이 있으면 작동하는 것 같습니다. 나는 누구도 URL에 로케일을 설정하는 것을 본 적이 없다. URL에서 로케일을 가져올만한 이유가 있습니까? 헤더에서 로케일을 얻기
더 이해하게 해주는 것 같다
self.request.headers.get('Accept-Language').split(",")
하나의 특질은 브라우저 하이픈와 소문자 ("FR-FR")로 로케일을 제공하지만 바벨은 밑줄 및 혼합을 기대하고 있다는 것입니다 케이스 (fr_FR). 브라우저는 "FR-FR"의 로케일 헤더를 제공하는 경우, 다음
locale = self.request.headers.get('Accept-Language').split(",")[0]
i18n.get_i18n().set_locale(locale)
바벨은 "fr_FR의"를 찾고 있기 때문에 오히려 프랑스어보다 기본 언어를 사용하여 종료됩니다. 헤더에서 로케일을 가져와 하이픈을 밑줄로 변환하고 소문자를 대소 문자로 변환해야합니까? 바벨이 나를 위해 그렇게해야한다고 봅니다.
는 (I 헤더가 여러 로케일을 가지고 있고 그들 모두를 확인해야한다고 수 있다는 것을 알고 있지만, 나는 아직도 각각의 변환을 수행해야 할 것입니다.)
작동 했습니까? '.po'와'.mo' 파일을 사용하면 보통 로케일 이름에 해당하는 파일 이름으로로드됩니다. 당분간 나는 생성 된 컨텐트와 같은 지역화를 달성하기위한 트릭을해야만한다. (따라서 나는 http 헤더를 따르기보다는 그것을 설정한다.) 바벨 지역화가 언어를 상속 할 수 있으므로 현지화하지 않은 방언이 조상을 사용합니다 (예 : en-gb 현지화가 en으로 기본 설정 될 수 있음). 그러면 언어 (en)로 시작한 다음 특정 방언으로 조상과 방언 (또는 국가 변종)이 다른 것만 다릅니다. –
@DacSaunders, 네, 작동합니다. 예를 들어,'locale/fr_FR/LC_MESSAGES/messages.po'가 있는데, HTTP 헤더에서 로케일을 추출하면 처음 두 글자 (예 :'fr') 만 추출하고'set_locale ("fr")' fr_FR' 디렉토리 아래에 "po"파일을 가져옵니다. –
@DacSaunders이 답변을 작성한 이후로 로케일 감지를 구현하는 방법을 더 잘 이해하고 나중에 더 나은 대답을 작성하겠습니다. –