【问题标题】:How to get the locale in the i18n file?如何获取 i18n 文件中的语言环境?
【发布时间】:2016-02-25 11:05:26
【问题描述】:

在我基于 Sinatra 的 project 中,我有一个登录帐户 route

# route to receive login form: sorry or logs in with cookie. sends home.
post '/login' do
    redirect to('/') if authorized?
    logger.info 'Params, password: ' + params[:password]
    sorry 'bademail' unless (/\A\S+@\S+\.\S+\Z/ === params[:email])
    sorry 'badlogin' unless String(params[:password]).size > 3
    logger.info 'Params, email: ' + params[:email]
    ok, p = @peepsdb.call('get_person_password', params[:email], params[:password])
    sorry 'badlogin' unless ok
    login p[:id]
    # redirect to('/')
    redirect to('/' + I18n.locale.to_s + '/main')
end

如果有问题,例如。 G。凭据,用户被定向到具有本地化消息的页面。使用sorry 函数会发生这种情况:

get '/sorry' do
    @header = @pagetitle = 'Sorry!'
    @msg = case params[:for] 
    when 'bademail'
        I18n.t 'sorry_bademail'
    when 'unknown'
        I18n.t 'sorry_unknownemail'
    when 'badid'
        I18n.t 'sorry_badid'
    when 'badpass'
        I18n.t 'sorry_badpass'
    when 'badlogin'
        I18n.t 'sorry_badlogin'
    when 'badupdate'
        I18n.t 'sorry_badupdate'
    else
        I18n.t 'sorry_unknown'
    end
    erb :generic
end

消息使用以下view呈现:

<section id="generic">

<h1><%= @pagetitle %></h1>

<p><%= @msg %></p>

</section>

一些localized strings 中有网址:

sorry_badlogin: 'That email address or password wasn’t right.</p><p>Please <a href="<%= I18n.locale %>/login">try again</a>.'

我需要将用户定向到en/login URL(而不是/login),因为我们当前的 i18n 框架使用该前缀来确定语言环境。

如果我使用上面的版本 (&lt;a href="&lt;%= I18n.locale %&gt;/login"&gt;),它就不起作用了。

如何将语言环境插入到带有本地化文本的文件内的 URL 中?有什么解决办法吗?

【问题讨论】:

    标签: ruby internationalization sinatra i18n-gem


    【解决方案1】:

    你应该参数化你的错误信息。

    sorry_badlogin: 
      'That email address or password wasn’t right.</p><p>Please <a href="%s">try again</a>.
    

    get '/sorry' do
        ---
        when 'bademail'
            (I18n.t 'sorry_bademail') % "#{I18n.locale}/login"
        ...
    end
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 2012-03-25
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      相关资源
      最近更新 更多