2015-05-08 4 views
6

My Rails App находится на рельсах 4.0.2, и у меня есть проблема переключения переводов с переменной locale и params[:locale] по схеме URL, следующей за официальными рельсами guide. У меня есть сайт с одной страницей по адресу my site.Локаль не переключается в Rails 4

Мои маршруты Интернационализация:

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

Мой контроллер приложения

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 

Ссылки для изменения переменных локали в представлении:

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

Что происходит: locale установлена ​​переменная правильно, но переводы не переключаются. Если я удалю один из файлов перевода (в настоящее время для английского и немецкого языков), языки переключаются на оставшийся файл перевода. Когда я возвращаю другой файл перевода и пытаюсь переключиться на него, изменив переменную locale, он никогда не переключается на другой язык.

Почему мой код не меняет переводов?

+0

Я надеюсь, что вы можете исправить, что, поскольку Rails 4.0.2 имеет некоторые серьезные проблемы безопасности , и использование 4.0.13 настоятельно рекомендуется. Такой инструмент, как [Gem Canary] (https://gemcanary.com/), может помочь вам справиться с такими проблемами, прежде чем они станут проблемой. – tadman

+1

Я закрепил рельсы gemset 4.0.13, спасибо за совет. – nuxxxx

ответ

0

Я думаю, вам нужно определить ограничение на местности более явной:

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

Это ничего не изменило к сожалению. – nuxxxx

2

Я имел те же вопросы, и, возможно, это будет для вас решение:

в routes.rb изменения

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}") 

в 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.

config/locales/en.yml в чем-то вроде этого:

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

и в config/locales/de.yml на немецком

ввиду

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

Ваш код дает мне ошибку выходного буфера: 'синтаксическая ошибка, неожиданная ',', ожидающая :: или '[' или '.' ... k_to_unless_current, "English", locale:: en); @ output_buffer ... ' – nuxxxx

+1

ok! вам нужно отредактировать 'config/locales/en.yml'' ru: языки: ru:" English " de:" Deutsch " ' и в 'config/locales/de.yml' на немецком языке, чем в поле зрения: <% = link_to_unless_current t ('languages.en'), locale:: en%> | <% = link_to_unless_current t ('languages.de'), locale:: de%> –

+0

в комментарии code look ugly ( –

Смежные вопросы