Comment détecter la langue d'URL dans Sinatra
-
29-09-2019 - |
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
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