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

时间:2010-06-23 19:02:29

标签: url internationalization url-routing sinatra padrino

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

我有一百多条路线。所以对每条路线这样做都不是一个很好的选择。

  

获取“/:locale / posts”do ... end

     

获取“/ posts”do ... end

有人可以帮助我吗?

由于

1 个答案:

答案 0 :(得分: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

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

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