2015-05-08 16 views
6

Meine Rails App ist auf Schienen 4.0.2 und ich habe ein Problem beim Umschalten Übersetzungen mit der locale Variable und der params[:locale] aus dem URL-Schema nach dem offiziellen Schienen guide. Ich habe eine einzelne Seite Website unter .Locale schaltet nicht in Rails 4

Meine Routen für Internationalisierung:

scope "(:locale)", locale: /en|de/ do 
    #my routes here 
end 

Meine Anwendung Controller

before_filter :set_locale 
    def set_locale 
    I18n.locale = params[:locale] || I18n.default_locale 
    #Rails.application.routes.default_url_options[:locale]= I18n.locale 
    end 

    # app/controllers/application_controller.rb 
    def default_url_options(options = {}) 
    { locale: I18n.locale }.merge options 
    end 

Die Links die locale-Variablen in der Ansicht zu ändern:

<%= link_to_unless I18n.locale == :en, "English", locale: :en %> 
| 
<%= link_to_unless I18n.locale == :de, "Deutsch", locale: :de %> 

Was geschieht: die locale Variable ist gesetzt richtig, aber die Übersetzungen wechseln nicht. Wenn ich eine der Übersetzungsdateien entferne (derzeit für Englisch und Deutsch), wechselt die Sprache zur verbleibenden Übersetzungsdatei. Wenn ich die andere Übersetzungsdatei zurücksetze und versuche, zu ihr zu wechseln, indem ich die Gebietsschemavariable ändere, schaltet sie nie auf die andere Sprache um.

Warum ändert mein Code die Übersetzungen nicht?

+0

Ich hoffe, Sie können das Patch, weil Rails 4.0.2 einige ernste Sicherheitsprobleme hat und die Verwendung von 4.0.13 wird dringend empfohlen. Ein Tool wie [Gem Canary] (https://gemcanary.com/) kann Ihnen bei Problemen wie diesem helfen, bevor es zu Problemen kommt. – tadman

+1

Ich habe die gemset rails 4.0.13 gepatcht, danke für den Hinweis. – nuxxxx

Antwort

0

Ich glaube, Sie brauchen die Beschränkung auf den Lokalisierungs deutlicher zu definieren:

scope path: '(:locale)', constraints: { locale: /en|de/ } do 
    # routes you want to localize 
end 
+0

Das hat sich leider nichts geändert. – nuxxxx

2

ich die gleichen Probleme hatte und vielleicht wäre es eine Lösung für Sie sein:

in routes.rb Änderung

scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do 
    #your routes here 
end 
get '*path', to: redirect("/#{I18n.default_locale}/%{path}") 
get '', to: redirect("/#{I18n.default_locale}") 

in application_controller.rb

def set_locale 
    I18n.locale = params[:locale] if params[:locale].present? 
end 

def default_url_options(options = {}) 
    {locale: I18n.locale} 
end 

p.s.

in config/locales/en.yml etwas wie folgt aus:

en: 
    languages: 
    en: "English" 
    de: "Deutsch" 

und in config/locales/de.yml in deutschen

in Sicht

<%= link_to_unless_current t('languages.en'), locale: :en %> 
| 
<%= link_to_unless_current t('languages.de'), locale: :de %> 
+0

Ihr Code gibt mir einen Ausgabepufferfehler: 'Syntaxfehler, unerwartet ',', erwartet :: oder '[' oder '.' ... k_to_unless_current, "Englisch", Gebietsschema:: en); @ output_buffer ... ' – nuxxxx

+1

ok! Sie müssen 'config/locales/en.yml'' de: Sprachen: de: "English" de: "Deutsch" 'und in' config/locales/de.yml' auf Deutsch als in Sicht: <% = link_to_unless_current t ('languages.en'), Gebietsschema:: en%> | <% = link_to_unless_current t ('languages.de'), Gebietsschema:: de%> –

+0

im Kommentarcode hässlich aussehen ( –