如何在Sinatra中的URL中集成语言

时间:2015-11-12 09:27:13

标签: ruby url internationalization sinatra rails-i18n

我有一个包含多种语言的应用程序,现在我想在URL中集成该语言。这样的事情:https://example.com/en/main/cars https://example.com/fr/main/cars等等。该应用程序适用于所有语言,只是URL中缺少该语言。

我已经检查了thisthis,但我没有成功。我将不胜感激。

helpers.rb我有:

def set_locale( new_locale )
  allowed_locales = %w[ de en fr it sk ]
  if allowed_locales.map{|l| l.to_sym }.include?( new_locale.to_sym )
    session[:locale] = new_locale.to_sym
  else
    session[:locale] = default_locale
  end
end
alias_method :set_lang, :set_locale

def locale
  session[:locale] || default_locale
end

def default_locale
  :de
end

def t( *args )
  I18n.locale = locale
  I18n.t( *args )
end

def l( *args )
  I18n.locale = locale
  I18n.l( *args )
end

app.rb我定义了这样的内容:

Class Something < Sinatra::Application
  helpers Sinatra::Something::Helpers
  I18n.load_path += Dir[File.join(settings.root, 'locales', '??.yml').to_s]

  before "/*" do
    set_locale params[:locale] if params[:locale]
    set_locale params[:lang]   if params[:lang]
    set_locale params[:l]      if params[:l]
  end
end

1 个答案:

答案 0 :(得分:0)

根据您展示的代码,您无法将网址的第一部分设置为语言参数。尝试从您链接的文档中添加前置过滤器:

before '/:locale/*' do
    I18n.locale       =       params[:locale]
    request.path_info = '/' + params[:splat ][0]
end

或者,您可以编辑路线以包含并命名此参数。