3

私は多言語 Web サイトを持っており、domain.com/en/ のように言語を URL に入れています。ユーザーが URL に言語を入れていない場合、「domain.com/posts」から「domain.com/en/posts」のようなメイン言語のページにリダイレクトしたいと考えています。シナトラでこれを行う簡単な方法はありますか?

100 以上のルートがあります。したがって、すべてのルートに対してこれを行うことは、あまり良いオプションではありません。

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

get "/posts" do... end

誰かが私を助けることができますか?

ありがとう

4

1 に答える 1

9

次のように、before フィルターを使用します。

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] }
于 2010-06-25T23:10:07.913 に答える