我有一个Rails应用程序,我想用英语和日语语言环境开发。用户登录后,:flash
将以英文“登录身份”显示,并将其硬编码到会话控制器中。在日语中,用户名将首先出现,语法将出现在单词之后(としてログインされています),所以我希望在en.yml
和jp.yml
文件中包含不同的消息。
问题是我无法让登录用户的名字在yml文件中工作;它不是将变量转换为当前登录的用户,而只是将变量显示为文本。
我做错了什么?
sessions_controller.rb:
class SessionsController < ApplicationController
def new
end
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
session[:user_id] = @user.id
flash[:info] = t(:logged_in_as) # points to translator in .yml file
# flash[:info] = "logged in as #{@user.name}" works but English only
redirect_to @user
else
flash[:danger] = t(:login_error)
render 'new'
end
end
def destroy
session[:user_id] = nil
redirect_to root_path
end
end`
ja:
log_in_please: "ログインして下さい"
logged_in_as: "%{user_name} としてログインされています"
login_error: "認証できません。入力された内容が正しくありません。"
activerecord:
models:
users:
name: user_name
编辑:这是会议的观点:
<h1>Log in</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(:session, url: login_path) do |f| %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.submit "Log in", class: "btn btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>
该模型称为“用户”,用户名字段称为(鼓点)“名称”。
如果我在控制器中引用#{@user.name}
但是我可以在yml文件中使用用户名吗?
我已经阅读过很多次http://guides.rubyonrails.org/i18n.html但仍无法找到如何引用当前登录的用户。
答案 0 :(得分:0)
我找到了答案:
首先,在控制器中,指定一个将在I18n / locale文件中使用的变量:
flash[:info] = t('logged_in_as', user: @user.name)
此处user:
可以分配给I18n文件中的变量。
jp.yml:
logged_in_as: "%{user}としてログインされています。"
当控制器调用t('logged_in_as')
时,方法会在翻译发生时将@user.name
传递给user:
。这在英语yml文件中也很好用,因为顺序不同。
我发现这个隐藏在指南文件中:the intel manual
希望其他人觉得这很有用(虽然因为我没有得到一个评论,我对此表示怀疑)。