1

레일즈 애플리케이션의 루비에서 지역화 된 메시지 문자열 내에서 여러 변수/자리 표시자를 바꿀 수있는 최선의 방법을 찾으려고합니다. 단일 자리 표시자를 바꿀 때 나는 만족 스러웠습니다 :ROR : 지역화 된 메시지 문자열 변수 대체

en.yml에서 : url_borked : "URL : $ url을로드 할 수 없습니다." 보기 : [ "$ url"] = request.url

그러나 여러 개의 자리 표시 자에 적합하지 않습니다. 그것은 추한보고, 실제로 예를 들어 작동하지 않습니다 en.yml에서

을 :

보기에서
url_borked: "The URL: $url is badly formatted, perhaps you meant: $url_clean" 

: 나는 문자열 :: 서브를 사용하여 시도

(t(:url_borked)["$url"] = request.url)["url_clean") = @suggested_url 

하지만, 나는 그게 못생긴만큼 행복하지 않아. 예 :

(t(:url_borked).sub("$url", request.url).sub("url_clean", @suggested_url) 

한 자리 표시 자의 여러 인스턴스를 대체하려는 경우에도 작동하지 않습니다. 예컨대 :

나는 또한 printf 함수로 간주 한
bad_url: "$url cannot be loaded, please try $url another time" 

,하지만 그 번역에 따라 변경할 수있는 자리의 상대적 위치로 현지화 작동하지 않습니다.

이 메시지 자리 표시 자 치환을 수행하는 올바른 방법이 있습니까?

감사합니다.

답변

4

왜 :

t(:url_borked, :url=>request.url, :url_clean=>@suggested_url) 

?

+0

감사합니다. AlexT, 당신은 절대적으로 옳았습니다. 분명히 분명히 내려다 보았기에 바보 같았습니다. 너는 나 자신의 질문에 답하기 위해 나를 때렸다. 그래서 큰 눈금을 얻는다! 건배. –

0

좋아, 브레인 웨이브를 사용하여 I18n :: translate 함수를 조금 더 자세히 살펴보고 "보간"기능을 사용했다.

예컨대

I18n.t :foo, :bar => 'baz' # => 'foo baz' 

내가 필요한 것. 마침내 군중에게 해결책을 물어보기로 결심했다면 재미있을 것입니다.

건배.