Как определить язык по URL в Синатре - PullRequest
3 голосов
/ 23 июня 2010

У меня многоязычный веб-сайт, и я помещаю язык в URL, например, domain.com/en/. Когда пользователь не помещает язык в URL, я хочу перенаправить его на страницу на основном языке, например, «domain.com/posts», на «domain.com/en/posts». Есть ли простой способ сделать это с Синатрой?

У меня более ста маршрутов. Делать это для каждого маршрута - не очень хороший вариант.

get "/: locale / posts" do ... end

get "/ posts" do ... end

Может ли кто-нибудь мне помочь?

Спасибо

1 Ответ

9 голосов
/ 26 июня 2010

Используйте фильтр до, примерно так:

set :locales, %w[en sv de]
set :default_locale, 'en'
set :locale_pattern, /^\/?(#{Regexp.union(settings.locals)})(\/.+)$/

helpers do
  def locale
    @locale || settings.default_locale
  end
end

before do
  @locale, request.path_info = $1, $2 if request.path_info =~ settings.locale_pattern
end

get '/example' do
  case locale
  when 'en' then 'Hello my friend!'
  when 'de' then 'Hallo mein Freund!'
  when 'sv' then 'Hallå min vän!'
  else '???'
  end
end

С выходом Sinatra вы сможете сделать это:

before('/:locale/*') { @locale = params[:locale] }
...