第15回: Devise によるユーザー認証機能の日本語化(1)

2010/10/09

諸事情により、前回から4ヶ月ほど時間が経過してしまいました。楽しみにされていた方、ごめんなさいね。

今回から、Devise を利用して作ったユーザー認証機能を日本語化していきます。

準備作業

まず、デフォルトロケールを変更します。config/application.rb を開いて、次のような記述を探してください。

    # config.i18n.default_locale = :de

そして、行頭の # を除去し、:de:ja に変更します。

次に、http://gist.github.com/606476 から yhara 氏作成の devise.ja.yml をダウンロードして、config/locales ディレクトリに貼り付けます。

「raw」リンクをクリックして生のソースコードを表示し、名前を付けてページを保存してください。

もし Nchack アプリケーションが起動したままであれば、再起動してください。

config/application.rb を修正したり、config ディレクトリに新規ファイルを追加した場合は、アプリケーションの再起動が必要です。

ログインフォームの日本語化

app/views/devise/sessions/new.html.erb を開いてください。

<h2>Sign in</h2>

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
  <p><%= f.label :email %></p>
  <p><%= f.text_field :email %></p>

  <p><%= f.label :password %></p>
  <p><%= f.password_field :password %></p>

  <% if devise_mapping.rememberable? -%>
    <p><%= f.check_box :remember_me %> <%= f.label :remember_me %></p>
  <% end -%>

  <p><%= f.submit "Sign in" %></p>
<% end %>

<%= render :partial => "devise/shared/links" %>

1行目と14行目にある Sign inログイン に書き換えます。

次に、app/views/devise/shared/_links.erb を開いてください。

<%- if controller_name != 'sessions' %>
  <%= link_to "Sign in", new_session_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
  <%= link_to "Sign up", new_registration_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
  <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
  <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
  <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
<% end -%>

このファイルのテキスト部分をすべて日本語に翻訳します。

<%- if controller_name != 'sessions' %>
  <%= link_to "ログイン", new_session_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
  <%= link_to "ユーザー登録", new_registration_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
  <%= link_to "パスワードの再発行", new_password_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
  <%= link_to "確認メールの再送信", new_confirmation_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
  <%= link_to "アカウント凍結解除メールの再送信", new_unlock_path(resource_name) %><br />
<% end -%>

動作確認

まだ翻訳作業は完了していませんが、とりあえず動作確認をしてみましょう。

ブラウザでトップページを開き、「ログイン」リンクをクリックします。

画面キャプチャ1

入力フォームのラベル部分を除いて、すべてのテキストが日本語化されています。

何も記入せずに「ログイン」ボタンをクリックしてください。

画面キャプチャ2

今日は、ここまでとしましょう。

[更新] 文中、devise.ja.yml を格納するディレクトリを誤って config と記載していました。config/locales と訂正しました。(2011/5/10)