如何获取 i18n 文件中的语言环境?
How to get the locale in the i18n file?
在我基于 Sinatra 的 project I have a login 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
如果有什么不对,e。 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 中有 URL:
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 框架使用该前缀来确定语言环境。
如果我使用上面的版本(<a href="<%= I18n.locale %>/login">
),它不起作用。
如何将语言环境插入包含本地化文本的文件中的 URL?有什么解决方法吗?
您应该参数化您的错误消息。
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
在我基于 Sinatra 的 project I have a login 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
如果有什么不对,e。 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 中有 URL:
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 框架使用该前缀来确定语言环境。
如果我使用上面的版本(<a href="<%= I18n.locale %>/login">
),它不起作用。
如何将语言环境插入包含本地化文本的文件中的 URL?有什么解决方法吗?
您应该参数化您的错误消息。
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