如何在I18n语言环境文件中使用当前登录的用户varible

时间:2017-11-02 02:10:00

标签: ruby-on-rails ruby ruby-on-rails-3 localization rails-i18n

我有一个Rails应用程序,我想用英语和日语语言环境开发。用户登录后,:flash将以英文“登录身份”显示,并将其硬编码到会话控制器中。在日语中,用户名将首先出现,语法将出现在单词之后(としてログインされています),所以我希望在en.ymljp.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`

jp.yml

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但仍无法找到如何引用当前登录的用户。

1 个答案:

答案 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

希望其他人觉得这很有用(虽然因为我没有得到一个评论,我对此表示怀疑)。