如何在Sinatra中检测URL中的语言

bas*_*sex 3 url url-routing internationalization sinatra padrino

我有一个多语言网站,我把这种语言放在像domain.com/en/这样的网址中.当用户未将该语言放入URL时,我想将其重定向到主要语言的页面,如"domain.com/posts"到"domain.com/en/posts".Sinatra有一个简单的方法吗?

我有一百多条路线.因此,为每条路线做这件事并不是一个很好的选择.

获取"/:locale/posts"do ... end

得到"/帖子"做...结束

有人能帮我吗?

谢谢

Kon*_*ase 9

使用之前的过滤器,有点像这样:

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
Run Code Online (Sandbox Code Playgroud)

随着即将发布的Sinatra,您将能够做到这一点:

before('/:locale/*') { @locale = params[:locale] }
Run Code Online (Sandbox Code Playgroud)