2013-08-26 3 views
1

У меня есть сайт Rails с использованием gem I18n_routing. У меня есть такой путь:I18n_routing, пустой путь + вложенный ресурс

domain.com/<place>/bookings 

где место может быть «new-york». Моя цель состоит в том, чтобы получить маршруты переведены так:

domain.com/<place>/bokningar 

Я пытаюсь перевести это через I18n_routing так:

resources :places, :path => '', :except => [:index, :create, :new] do 

    #resources :flight_pages, :path => 'flyg', :only => [:show, :index] 
    #resources :hotel_pages, :path => 'hotell', :only => [:show, :index]  
    localized do 
     resources :bookings, :except => [:edit, :update] do 
     get :get_method_desc, :on => :collection 
     get :get_image_path, :on => :collection  
     end 
    end 
    get :autocomplete_place_name, :on => :collection  
    end 

    localized do 
    resources :places, :only => [:index, :create, :new] 
    end 

с файлом перевода, как это:

resources: 
    places: 'plats' 
    bookings: 'bokningar' 

Я сталкиваюсь с проблемой, когда, если у меня есть это, как указано выше, I18n_routing не признает, что «заказы» необходимо перевести.

Если изменить настройки поставить локализованными сделать за пределами всего resoure:

localized do 
    resources :places, :path => '', :except => [:index, :create, :new] do 

    #resources :flight_pages, :path => 'flyg', :only => [:show, :index] 
    #resources :hotel_pages, :path => 'hotell', :only => [:show, :index]  

     resources :bookings, :except => [:edit, :update] do 
     get :get_method_desc, :on => :collection 
     get :get_image_path, :on => :collection  
     end 

    get :autocomplete_place_name, :on => :collection  
    end 
    end 
    localized do 
    resources :places, :only => [:index, :create, :new] 
    end 

я получаю пустые пути «место» переведен поэтому маршрут превращается в:

domain.com/plats/<place>/bokningar 

Я пытался set places: "" в файле перевода, но затем I18n_routing просто пропускает его.

Что я должен сделать, чтобы получить перевод, как это:

domain.com/<place>/bokningar (:se) 
domain.com/<place>/bookings (:en) 

т.е. сохраняя пустой путь и переводил вложенную ресурс «бронирования»?

Редактировать в ответ на Аман Garg: Дорожки, которые я использую для них

new_place_booking_path(@place) #=> domain.com/<place>/bookings/new 
place_bookings_path(@place) #=> domain.com/<place>/bookings 
+0

Вы можете вставить пример, например, как сделать путь для упомянутого URL. Я имею в виду путь к использованию сейчас. Как some_link_path или статический url? –

+0

Несомненно, сейчас я добавил несколько примеров. Надеюсь, это то, что вы искали. – Christoffer

+0

Вы указали 'se:' в вашем файле перевода? – Bala

ответ

1

Существует драгоценный камень для обеспечения динамических переведенных маршрутов в соответствии с языком. Он будет генерировать URL-адрес на основе локали, как I18n. Существует простая реализация для этого:

https://github.com/francesc/rails-translate-routes

Выполните действия, описанные в на GitHub справки о. Вы можете определять переводы для маршрута в yml-файлах. например: в config/locales/routes.yml

en: 
    routes: 
    # you can leave empty locales, for example the default one 
se: 
    routes: 
    places: 'plats' 
    bookings: 'bokningar' 
+0

Я знал о rails-translate-routes, но я никогда не пробовал. Он работает лучше, чем I18n_routing, и он решил мою проблему. Спасибо Аман! – Christoffer