(Während dies Blacklight-Engine diskutiert, glaube ich, die Frage ist eigentlich rein über Rails.)`scope` um` mount` ineffektiv?
Ich versuche Internationalisierung meiner Blacklight App hinzuzufügen. Zu diesem Zweck ich
wickelte alles in
config/routes.rb
inscope "(:locale)", locale: /en|ja/
undin
app/controllers/application_controller.rb
Ich habebefore_action :set_locale
und overrodedefault_url_options
wie Rails i18n guide vorgeschlagen. Die meisten Dinge funktionieren, aber eine Sache konnte ich noch nicht herausfinden.
Alle meine Anwendungsrouten sind korrekt zugeordnet, z. http://www.example.com/en/catalog/12345
stimmt mit (/:locale)/catalog/:id(.:format)
korrekt überein und wird mit {:id=>/[^\/]+(?=\.json|\.html|$|\/)/, :locale=>/en|ja/}
an catalog#show
weitergeleitet). Alle URLs von Devise sind in Ordnung. Alles funktioniert ... außer der Blacklight-Engine mount
.
Offenbar hört die Blacklight Engine nicht auf scope
. rake routes
zeigt:
Routes for Blacklight::Engine:
search_history GET /search_history(.:format) search_history#index
....
und nicht (:locale)/search_history(.:format)
wie ich hoffe würde.
Ich habe die Blacklight-Vorlage so modifizierte, dass ich sowohl eine Sprache auswählen Hinweis auf die aktuelle Seite in Japanisch und Englisch, aber wenn ich zu search_history
navigieren, url_for
wirft plötzlich auf, wenn sie mit dem :locale
Parameter konfrontiert.
Warum ignoriert mount
scope
? Wie löse ich mein Problem (Motorrouten reagieren auch auf :locale
)?
Hier ist meine Standard config/routes.rb
Blacklight-generierte, modifiziert mit scope
:
Rails.application.routes.draw do
scope "(:locale)", locale: /en|ja/ do
mount Blacklight::Engine => '/'
root to: "catalog#index"
concern :searchable, Blacklight::Routes::Searchable.new
resource :catalog, only: [:index], as: 'catalog', path: '/catalog', controller: 'catalog', id: /[^\/]+(?=\.json|\.html|$|\/)/ do
concerns :searchable
end
devise_for :users
concern :exportable, Blacklight::Routes::Exportable.new
resources :solr_documents, only: [:show], path: '/catalog', controller: 'catalog', id: /[^\/]+(?=\.json|\.html|$|\/)/ do
concerns :exportable
end
resources :bookmarks, id: /[^\/]+(?=\.json|\.html|$|\/)/ do
concerns :exportable
collection do
delete 'clear'
end
end
end
end
tl; dr:scope
Präfixe alle meine Routen, mit Ausnahme der Strecken durch mount
. Warum und wie reparieren?