Rails, pretty url’s for I18n

10 Июл
2012

Сейчас я расскажу как сделать красивые ссылки для вашего мультиязычного приложения на рельсах.

Существует несколько решений, самое простое из них — хранить параметры текущего языка в сессии. Подумайте, а если пользователь захочет поделиться ссылкой со своим другом и дефолтный язык приложения будет другим?

Давайте решим это проблему и сделаем красивые ссылки для наших любимых пользователей

У нас есть сайт с контроллером pages, который позволяет проделывать нехитрые CRUD операции со страницами

Шаг 1. Модифицируем /config/routes.rb


  scope :path => "/:locale", :locale =>  /en|ru/ do
    resources :pages
    root :to => 'pages#index'
  end


Здесь мы
  1. извлекаем из url язык (позже он будет доступен в
    params[:local]
    )
  2. добавляем корневой путь, чтобы мы могли обращаться к нашему сайту как localhost:3000/en

Стоит заметить, что
resources :pages
у нас в файле встречается только один раз.
Если мы захотим добавить поддержку языков к другими контроллерами, то просто перечислим из через запятую после :pages.

Шаг 2. Модифицируем /app/controllers/application_controller.rb


  before_filter :set_locale
  private
  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end
  
  private
  def default_url_options(options={})
    { :locale => I18n.locale }
  end


Здесь мы
  1. установили фильтр, который перед запуском контроллера вызывает метод
    set_locale
  2. объявили default_url_options, которая добавляет ко всем нашим ссылкам параметр, говорящий что ссылку стоит выводить с префиксом на нужную языковую часть сайта

Как-то так.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх