2013-12-09 10 views
5

레일즈 4 웹 사이트에서 로케일을 결정하기 위해 서브 도메인을 사용하고 있습니다. 로케일 스위처와 정확히 같은 방식으로 작업 할 수 있지만, 이제는 경로를 번역해야하므로 계속 진행하는 것이 가장 좋은 방법인지 확신 할 수 없습니다.레일 4 i18n, 로케일에 서브 도메인이 사용되는 경로를 변환하는 방법

i18n 라우팅 보석을 보았습니다.하지만 이것은 하위 도메인과 호환되지 않습니다./locale을 추가하여 경로를 변경하는 것처럼 보입니다.

다른 보석 레일 오래된 것 같다 4.

편집 나는 동일한 뷰 헬퍼를 사용할 수 있도록 싶지만 URL이 반영되어 어떤 언어를 사용하도록 변경해야 기본적으로

선택한 하위 도메인별로 이것은 단지 경로 번역에 관한 것입니다.

은 내가 언어 spevific 탐색 템플릿을 생성 할 수 있습니다 작업과 언어 별 템플릿을 가지고 있지만 난 정말 ERB 경로 및 URL ERB 태그

에게 최종 편집

변경에 대해 걱정할 필요가 없습니다 싶습니다 예를 들어 south_america_hotels_path을 사용 routes.rb

scope module: 'countries', shallow: true do 

    get 'south_american', to: 'south_america#index', as: :south_america 
    scope module: 'south_america' do 
    get 'south-america-weather', to: 'weather#index', as: :south_america_weather 
    get 'south-america-gps-maps', to: 'gps#index', as: :south_america_gps 
    get 'south-america-accommodation', to: 'hotels#index', as: :south_america_hotels 
    get 'south-america-vacations', to: 'vacations#index', as: :south_america_vacations 
    get 'south-america-facts', to: 'facts#index', as: :south_america_facts 
    end 

에서 샘플

의 URL을 생성합니다

남쪽 미국 - 숙박 시설 훌륭하지만 스페인 하위 도메인 south_america_hotels_path 오전 때

HOTELES-KO-sudamerica 다음 URL을 생성 할 수 있도록 내가이 번역 얼마나

UPDATE

URL에이 작품이 아니라 단지 경로보다 south_america_hotels_url가 나는 것 스페인 하위 도메인에

en.some_site/남쪽 미국 - 숙박 시설

때를 생성 할 수 있도록하는 방법 또한

es.some_site/HOTELES-KO-sudamerica을 얻을

관련된 다른 로케일에 대해서는

등이 있습니다.

urls의 번역을 위해 yml 파일을 사용하거나 routes.rb 파일에서 추가 경로를 정의하는 것이 기쁩니다. 어느 것이 든 옵션이지만 routes.rb에 URL을 정의하는 것을 선호하지만 하위 도메인을 기반으로하는 path/url 옵션과 동일한 언어 별 URL을 제공 할 수있는 방법을 찾을 수 없습니다.

이전 답글에 대한 응답으로 업데이트 및 추가 설명.

URL을 변경하는 것은 옵션이 아닙니다. 기존 URL과 일치해야합니다. 보기 도우미를 변경하지 않고보기 도우미 포인트에서 변환하는 방법을 알아야합니다.

+0

[Rails i18n 가이드] (http://guides.rubyonrails.org/i18n.html)를 보셨습니까? 로케일 설정을 위해 하위 도메인을 사용하는 방법을 설명합니다.라우트를 번역하는 것은 Rails가 기본적으로하지 않는 것입니다. 그것을 위해 [rails-translate-routes] (https://github.com/francesc/rails-translate-routes) 또는 [route_translator] (https://github.com/enriclluelles/route_translator)를보십시오. – janfoeh

+0

@janfoeh 전 서브 도메인을 다루는 방식에 완전히 만족합니다. 문제를 일으키는 경로 번역 일뿐입니다. 당신이 가리키는 보석은 내 필요에 맞지 않습니다. 확실히 이것은 보석을 사용하지 않고 할 수 있습니다 – jamesc

답변

14

, 당신이 당신의 경로에, 그것을 밖으로 시도 할 수 있습니다 예를 들어 당신은 넣을 수 있습니다 : 당신이 응용 프로그램을 실행할 때

AppName::Application.routes.draw do 
    get "/#{I18n.t("index")}", :to => "pages#index", :as => "index" 
    get "/#{I18n.t("contact")}", :to => "pages#contact", :as => "contact" 
end 

이 기본 로케일에 당신에게 경로를 얻을 것이다, 그러나 런타임에, 당신은 당신의 경로를 얻기 위해 당신의 경로를 다시 그릴 필요가 로케일을 변경할 때 새로운 로케일.

I18n.locale = :es #different locale 
AppName::Application.reload_routes! 

당신의 기본 언어 (default_locale)가 :en입니다 가정 할 때,이 예에서 첫 번째 경로를 취할 것입니다 :이 예에서는

en: 
    index: "index-in-english" 
    contact: "contact-in-english" 

앱이 경로를 다시로드 할 때, 그것은 새로운 로케일에서 번역을 취할 것입니다

es: 
    index: "index-in-spanish" 
    contact: "contact-in-spanish" 

이 방법은 당신에서이 페이지의 # 지수와 페이지 # 접촉을 렌더링하고 그것은 단지 경로를 변경할 수 있습니다, 당신은 당신의 코드를 만지지 필요가 없습니다. 이 당신에게

편집 희망이 도움 :

이 보석은 그것을 할 내 권장되는 방법입니다. 경로를 다시로드하지 않고도 여러 언어를 지원합니다 (본인이하지 않은 경우). 매우 적은 변경이 필요하지만 위의 코드보다 일관성이 있습니다. route translator

+1

굉장합니다. 자세한 설명을 주셔서 감사합니다. 쉽게 구현할 수 있으며 정확히 내가 찾고있는 부분입니다. – jamesc

2

제 경험상 도메인이 로캘을 결정하는 유일한 것이 아닙니다. 현재 로케일을 쿠키에 넣으면 사용자가 결국 선택할 수 있습니다.

귀하의 질문에 대한 번역의 일부입니다. 라우팅을 사용하는 방식을 변경해야한다고 생각합니다.

국가를 리소스로보고 작업을 다른 부분으로 볼 수 있다면 더 쉽게 생활 할 수 있습니다. south-america/weather 같은 URL을에하지만 내 관점에서 발생합니다

resource :country do 
    get :weather, on: :member 
    ... 
end 

, 즉 가독성의 측면에서 더 나은이며, 검색 엔진 최적화 : 모델 to_param 방법은 그와 함께 당신을 도울 수 있습니다. Google은 경로를 많이 좋아하는 데 사용되었습니다. 당신의 경로의 다른 번역을 위해

, 당신은 당신의 도메인을 반복하고 각 세그먼트에 대한 번역을 제공 할 수있다 : http://guides.rubyonrails.org/routing.html#translated-paths이 나를 위해 무엇을 일한됩니다

+0

URL 구조를 변경하는 것은 옵션이 아닙니다. URL은 기존 사이트에 대한 URL과 일치해야합니다. – jamesc

+0

또한 관련 리소스가 없습니다. 이 경우 – jamesc

+0

이 경우 마이그레이션 논리를 처리하기 위해 rack-rewrite를 사용합니다 – phoet

1

레일 4+ 앱에서 경로를 번역하려면 route_translator 보석을보십시오. 경로를 번역 할 수 있으며 생성 된 경로에 로켈 섹션을 추가하거나 하위 도메인 기반 앱을 지원하는 등 다양한 구성 옵션이 제공됩니다.