2014-04-08 2 views
1

자, 여기 약간의 혼란이 있습니다.이 문제에 대한 간단한 해결책이있을 수 있습니다. 그러나 지난 두 시간 동안 알아 내지 못했지만, 물어볼지도 모른다.db의 속성에 따라 link_to의 로케일 변경.

DB에 블로그가 있습니다. 두 언어로 작성되었습니다 (& EN) - I18n에 정의 된 로케일은 (독일어) & ko (영어)입니다.

블로그 항목을 만들 때마다 항목과 함께 로케일을 저장합니다. 간단한 예 : - 그 두 개의 다른 사이트 인 것처럼,하지만 블로거에 액세스하는 가장 최근의 블로그되는 목록을 프로필

id | title  | content | locale 
----------------------------------------- 
1 | First Blog | Hey, .. | en 
2 | Erster Blog | Hallo, . | at 

그래서, 일반적으로 나는 그 두 언어가 사이트에 분리 보관 표시됩니다. 일부 블로거는 영어뿐 아니라 독일어로도 게시됩니다.

방문자가 www.mysite.com/en-에 있고 독일어 블로그의 참조를 클릭하면 오류가 발생합니다.

@blog = Blog.friendly.find(params[:id], :conditions => ["language_id = ?", I18n.locale]) 

그래서이 확실히 SEO 현명한 내가 범되지 않습니다를 확인하는 것입니다 : 컨트롤러에서

나는 확실한 같은 내용이 URL의를 통해 액세스 할 수 있도록 다음과 같은 정의했다. (www.mysite.com/en/first-blog== www.mysite.com/at/first-blog). 현재 내가 모델에 예외를 catch :

around_filter :catch_not_found 

.... 

def catch_not_found 
    yield 
    rescue ActiveRecord::RecordNotFound 
    redirect_to blogs_path, :flash => { :error => "Sorry, the Blog isn't available in your language." } 
end 

질문은 - 사용자가 올바른 로케일에서 블로그로 리디렉션 가도록 (듯이), 어떻게, LINK_TO에 로케일을 전달할 수 있습니다?

감사

+0

으로 문제를 해결할 수 있도록, 모든 로케일에 대한 post_id 같은이 접근 모두에서

? – LuiGi

+0

주제에서 벗어나지 만 'at'는 독일어 약어로 무엇을 의미합니까? –

+0

안녕하세요, -는 오스트리아를 의미합니다. LuiGI, 나는 blog_view에서 다음과 같은 방식으로 link_to를 사용했다 : show.html.erb : <% @ relatedblogs.each do | blog | %> \t \t \t \t \t \t \t

<% = LINK_TO blog.title, blog_path (blog.slug) : 타이틀 => "읽기"+ blog.title %><% = blog.created_at %>

\t \t \t \t \t \t <% end %> –

답변

0

은 모델 번역 필드를 저장하는 몇 가지 다른 방법이 있습니다.

먼저 당신이 또 다른 사전 en : 'First Blog', at : 'Erster Blog'로 번역을 저장하기 위해 PostgreSQL을의 hstore를 사용하는 번역 분야

를 저장하기위한 또 다른 다형성 모델이있을 때 Globalize 보석, 작동 방법이다. 이 접근법을 통합하는 데 도움이되는 alsosomegems이 있습니다. 이 링크/rederects 당신이 LINK_TO를 사용 했

+0

안녕 MikDiet, 의견을 보내 주셔서 감사합니다!나는이 보석들에 대해 알고있다. 그러나 나는 그것들을 요구 사항에 대한 약간의 오버 헤드로 생각한다. 블로그를 번역 한 적이 없습니다. 각 언어의 블로그는 독자적인 방식으로 개발되고 발전합니다. 그러나 이것이 유일한 방법 일 경우 Globalize를 살펴 보겠습니다 : ... ( –

+0

MikDiet - 두 언어의 블로그가 나열되어 있으면 큰 문제는 아니기 때문에 그대로 두십시오. 내 요구 사항 및 다른 로케일에 연결하는 것은 좋은 일입니다.하지만 예, 작동하도록하려면 원하는 길로 갈 것입니다. 다시 한 번 감사드립니다. –

+0

George, 한 곳에서 모든 로케일을 저장할 때 실제로 여러분이 영어 버전을 쓰고 싶지 않다면, 할 수 있습니다 :': en' 로케일이 선택되었을 때 응용 프로그램을 설정할 수 있습니다. 로켈은 'Post.all'에 의해 표시되지 않습니다. – MikDiet