2011-06-10 2 views
2

내 정신을 테스트하는 데 문제가 있습니다. 내 레일 응용 프로그램에서 응용 프로그램 경로에 사용할 I18n 번역 파일에서 이스케이프 처리 된 UTF-8 문자열을로드하고 있습니다. 그러나 라우팅에서 사용할 때 레일은 이스케이프 문자열을 이스케이프 처리하지 않습니다. 여기 내 번역 파일입니다 :이 경로를 탐색 할 때 여기레일 3 경로, Yaml 및 UTF-8 이스케이프

--- 
ru: 
    activerecord: 
    models: 
     item: 
     other: "\xD0\xA2\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x80\xD1\x8B" # UTF-8 escaped version of "Товары". (to_yaml is doing the escaping btw) 

그리고 것은

match "/#{Item.model_name.human(:count => :other).downcase}" => "items#index" 

하지만, 내 설정/routes.rb, 난 얻을 :

Routing Error 

No route matches "/%d0%a2%d0%be%d0%b2%d0%b0%d1%80%d1%8b" 

가 UTF-8의 경우 이스케이프 처리 된 변환 파일에 저장됩니다. 모든 것이 정상적으로 작동합니다. to_yaml이 문자열을 이스케이프하고 문제를 일으켰습니다. yaml이 원래 문자열을 유지하도록하는 방법이 있습니까?

현재, Rails 3.0.7, Ruby 1.9.2를 사용하고 있습니다. 고마워요!

답변

1

to_yaml 대신 ya2yaml을 사용하여 문자열을 Ruby 내부 인코딩으로 변환하지 않고 원래 UTF-8 문자열을 저장할 수있었습니다.

def utf8_hash(some_hash) # convert hash key & values to utf-8 for proper translation 
    new_hash = Hash.new 
    some_hash.each do |key, value| 
     new_hash[key.encode(Encoding::UTF_8)] = value.to_s.encode(Encoding::UTF_8) 
    end  
    new_hash 
    end 

    utf8_hash(params).ya2yaml 
1

YAML에서 올바르게 이스케이프 처리 된 것처럼 보이지만 UTF-8과 관련이 없습니다. 그것은 Ruby 문자열 이스케이프 처리이며 UTF-8 만있는 문자 인코딩에 사용할 수 있습니다.

오류로 보이는 것은 URL 이스케이프 처리 된 동일한 버전입니다.

문자열이 /Товары 일 때 rake routes의 출력에 올바르게 정의되어 있는지 확인하십시오.

+0

그래, 레이크 노선의 모습을 다음 YAML이 제대로 생성되기 전에 그러나, 나는 (키는 ASCII-8BIT와 UTF-8 값으로 인코딩되고 있었다) UTF-8로 PARAMS 해시의 키 & 값을 인코딩했다 good : ': 컨트롤러 => "items", : action => "index"}' 해당 경로에 대해 생성 된 URL이 제대로 생성되고 있으며, 실제로는 라우팅 오류 만 발생합니다. 해당 URL에 요청하십시오. – dhulihan