2016-08-26 5 views
0

Я создал сайт рельсов с помощью рельсов 5, и я добавил возможность перевести сайт на французском на английском (французском по умолчанию)Как я могу «сохранить» рельсы в локали?

Когда я установил локалите на английском языке, все нормально, но когда я нажимаю по ссылке, сайт возвращается на французский язык, а пользователю необходимо перевести веб-сайт снова

Есть ли способ сохранить локаль через страницы, на которых пользователь будет продолжать?

Спасибо заранее

EDIT

Я добавил мой application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_filter :set_locale 

    def set_admin_locale 
    I18n.locale = :fr 
    end 

    def default_url_options 
    { locale: I18n.locale } 
    end 

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

ответ

0

Вы можете передать текущую локаль по маршруту Params любым другим маршрутам:

link_to 'Posts', posts_path(locale: params[:locale]) 

Затем он будет rry через запросы URL. Просто не забудьте сделать то же самое в своих перенаправленных вызовах с контроллеров.

http://guides.rubyonrails.org/i18n.html является хорошим ориентиром для создания I18N

+0

Предположим, что я хочу перейти к «биографии», будет ли ссылка выглядеть следующим образом: '<% = link_to 'Биография', '/ biography', locale: params [: locale]'? – Jaeger

+0

Второй параметр принимает хэш, который имеет тот же формат, что и для 'url_for'. Документы здесь показывают примеры лучше, чем я могу: https://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiE54jdi97OAhXErB4KHTs1A6MQFgglMAE&url=http%3A%2F%2Fapidock. com% 2Frails% 2Factioncontroller% 2Fbase% 2Furl_for & usg = AFQjCNGyIUdeGPANKXlQrIuAFuzNnKbu5g & sig2 = 4QlMg3BdzaBZf_jzAC2NOA – agmcleod

1

Вместо загромождать все приложение с posts_path(locale: params[:locale]) вы можете использовать default_url_options.

class ApplicationController < ActionController::Base 
    def default_url_options 
    { locale: I18n.locale } 
    end 
end 

Что это делает, когда вы генерировать URL с адресом помощниками будут прикрепляться текущей локаль (локал, используемые в текущем запросе) в строку запроса URL.

Так что если пользователь запрашивает /users?locale=se, а рендер-вид содержит link_to(@user.name, @user), он будет иметь путь /users/1?locale=se.

+0

Я вставил это в свой 'application_controller.rb', но ничего не изменил ... Есть ли что-то еще, что мне нужно сделать, чтобы сделать эту работу? – Jaeger

+0

Попробуйте перезагрузить сервер. Это может быть проблема с кешем – max

+0

Извините за время, которое потребовалось, поэтому я перезапустил сервер и попробовал на другом компьютере, но я не работал в обоих случаях. Я отредактирую свой вопрос, чтобы показать свой application_controller.rb – Jaeger

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