2017-12-07 2 views
1

Ich habe eine mehrsprachige Anwendung, die die Sprache für einen Link ändert, der sich immer oben auf der Seite befindet.Lokalität der Schienen ändert sich, aber Pfade in Verbindungen bleiben gleich

<%= link_to "English", :locale => 'en' %> 
<%= link_to "French", :locale => 'fr' %> 

Wenn ich auf einen der Links klicken, wird der param [: locale] Änderungen und alle Übersetzungen in Ordnung erscheinen. Wenn ich jedoch auf eine URL klicke, bleibt die Verknüpfung mit dem aktuellen Gebietsschema. Es ändert nicht den tatsächlichen Pfad mit der neuen URL.

-Controller

before_action :set_locale 

    def default_url_options 
    { locale: I18n.locale } 
    end 

    def set_locale 
    I18n.locale = params[:locale] 
    end 

Routen

namespace :admin do 
    scope "(:locale)", locale: /en|fr/ do 
     // resources 
    end 
    end 

ich möchte, wenn ich auf den Link klicken locale, alles in den Seitenänderungen einschließlich der Pfade zu ändern. Derzeit wird nur die korrekte Übersetzungsdatei geladen, aber die Pfade werden nicht aktualisiert.

Danke!

Antwort

0

Nach einer Weile merkte ich, dass ich meine Admin-Controller, die von App erstreckt Controller. Ich hatte before_action :set_locale in beiden Controllern. Aus irgendeinem Grund hat das den Sprachumschalter gestört. Nicht sicher, warum Übersetzungen korrekt geladen werden, aber die Verknüpfungen wurden nicht aktualisiert.

0

Änderung der Routen zu

scope "(:locale)", locale: /en|fr/ do 
    namespace :admin do 
    // resources 
    end 
end 

es wird Ihnen Routen wie fr fr/admin

dann vergessen Sie nicht, die Strecke in der Ansicht

<%=link_to 'English', root_path(locale: 'en') %> 

oder das Admin-Route

+0

Vielen Dank für Ihren Vorschlag, ich habe es versucht und leider hat es nicht funktioniert. –

+0

Antwort wurde aktualisiert. hat es funktioniert? – adcosta

+0

würde es nicht funktionieren, da Sie dort auf root umleiten. Ich möchte, dass es auf der gleichen Seite bleibt. Ich habe auch versucht url_for(). –

Verwandte Themen