2013-07-04 2 views
3

우리 애플리케이션은 ES 변형을 지원하려고 시도합니다.레일즈 브라우저 언어 설정을위한 이상한 행동 es-419

우리는 ApplicationController의 들어오는 요청에서 user_preferred_language를 캡처합니다.

class ApplicationController < ActionController::Base 
    before_filter :set_i18n_locale_for_unauthenticated 
    ... 

    def set_i18n_locale_for_unauthenticated 
    users_preferred_languages = request.user_preferred_languages 
    ... # Do something with the array of loacle codes 
    end 
end 

일반적으로 제대로 작동하며 로캘 코드 배열은 클라이언트 브라우저에서 설정된 기본 설정과 일치합니다. 예 : user_preferred_languages 배열

[ 
    [0] "pt-BR", 
    [1] "pt", 
    [2] "en-GB", 
    [3] "en", 
    [4] "en-US", 
    [5] "es", 
    [6] "es-419" 
] 

그러나 es-419 (Lantin 미국 스페인어) 로케일이 다음 마지막 위치를 제외하고 어디서든 경우 user_preferred_languages는 빈 배열을 반환합니다

처럼 보일 수 있습니다 검사 ??

나는 아마도 두 가지 문제를이 레일 (또는 랙)에 문제가 있음을 추측, 또는 오전 :

  1. 는 전형적인 xx-YY을 준수하지 않는 파서 제대로 es-419 사건을 처리하지 않습니다 체재.

  2. 어쨌든 그것이 목록에서 마지막으로 선호되는 언어 일 때, 그것은 미끄러짐을 관리합니다.

나는 누군가가 이전에 그것에 부딪 쳤기를 바랬으므로 이것을 위해 소스를 파고 들려고하지 않았으며, 이것을 가장 잘 처리 할 수있는 방법을 제안 할 수있었습니다. 아니면 이것이 지원되지 않는 이유가 있을까요?

더 배경을 선택하십시오 브라우저에서 Chromium을 사용하고 있습니다. 요청 헤더를 보면 아무런 문제없이 언어 설정을 통과 한 것으로 보입니다.

Request Headers 
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    Accept-Encoding:gzip,deflate,sdch 
    Accept-Language:pt-BR,pt;q=0.8,en-GB;q=0.6,en;q=0.4,en-US;q=0.2,es-419;q=0.2,es;q=0.2 
    Cache-Control:no-cache 
    Connection:keep-alive 
+1

난 당신이 보석을 사용하는 것이 추가하는 것을 잊었다 생각, 내가 맞다? https://github.com/iain/http_accept_language –

답변

3

이것은 http_accept_language gem의 버그입니다. 그것은 현재 시험판에 고정 된 것 :

gem "http_accept_language", "~> 2.0.0.pre" 

에 코드를 조정해야합니다

class ApplicationController < ActionController::Base 
    ... 
    def set_i18n_locale_for_unauthenticated 
    users_preferred_languages = http_accept_language.user_preferred_languages 
    end 
    ... 
end