Question

J'ai un site en plusieurs langues et je puting la langue dans l'URL comme domain.com/en/. Lorsque l'utilisateur ne met pas la langue dans l'URL que je veux le rediriger vers la page dans la langue principale comme « domain.com/posts » à « domain.com/en/posts ». Est-il un moyen facile de le faire avec Sinatra?

J'ai plus d'une centaine de routes. Ce faisant cela pour chaque itinéraire n'est pas une très bonne option.

  

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

     

get "/ messages" do ... end

aide quelqu'un peut-il me?

Merci

Était-ce utile?

La solution

Utilisez un filtre avant, un peu comme ceci:

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

Avec la sortie prochaine de Sinatra, vous serez en mesure de le faire:

before('/:locale/*') { @locale = params[:locale] }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top