Ich habe verschiedene Sprachen in meiner App und ich verwende dieses Muster: /:locale/some-action
. Die meisten meiner Routen sind in diesem Bereich :locale
- routes.rb:URL entfernen GET Parameter für Locale Rails 5
scope "(:locale)", locale: /fr|en/ do
root to: 'home#index'
get 'contacts', to: 'contacts#index'
end
get 'about', to: 'about#index'
, aber einige von ihnen sind es nicht. Für Routen, die in diesem Bereich :locale
sind, generiert Rails, wenn ich ihre Namen wie contacts_path
verwende, die Route abhängig vom Gebietsschema. Wenn es :fr
ist, wird die generierte Route /fr/contacts
sein.
Für Routen, die nicht in diesem Bereich liegen. Für das Beispiel about
. Wenn ich den Namen about_path
und das Gebietsschema :fr
verwende, wird die generierte URL /about?locale=fr
sein, aber das möchte ich nicht.
Dies ist application_controller.rb
:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :set_locale
private
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options={})
{ :locale => I18n.locale == I18n.default_locale ? nil : I18n.locale }
end
end
Was ist der Weg, um diese GET-Parameter zu entfernen, aber immer noch Routen verwendet, die :locale
mit ihren Namen in Umfang und generierte URLs auf :locale
abhängt?