【问题标题】:How to detect language from URL in Sinatra如何从 Sinatra 中的 URL 检测语言
【发布时间】:2010-06-23 19:02:28
【问题描述】:

我有一个多语言网站,我将语言放在 URL 中,例如 domain.com/en/。当用户没有在 URL 中输入语言时,我想将他重定向到主要语言的页面,例如“domain.com/posts”到“domain.com/en/posts”。使用 Sinatra 有没有简单的方法来做到这一点?

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

get "/:locale/posts" 做...结束

get "/posts" 做...结束

有人可以帮我吗?

谢谢

【问题讨论】:

    标签: url internationalization url-routing sinatra padrino


    【解决方案1】:

    使用前置过滤器,有点像这样:

    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] }
    

    【讨论】:

    • @Konstantin:有没有办法让它适用于根 url? (例如:/ 和 /en/)
    • 也许用“get '/?:locale?/' do”?但这样它总是给出默认的语言环境,我必须稍微修改一下它才能像其他路线一样表现。有什么好的做法吗?
    • @David 将正则表达式更改为/^\/?(#{Regexp.union(settings.locales)})(\/.*)$/,它适用于//en/
    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多