ラベル i18n の投稿を表示しています。 すべての投稿を表示
ラベル i18n の投稿を表示しています。 すべての投稿を表示

2008年12月4日木曜日

restful_authenticationの日本語化。の続き。

で、config/locales/model_ja.ymlを見ていて、ふっ、と気が付いた。
loginとかemailとかnameとかなんて、モデルに限定されずに、使い回す訳じゃない?

ほら、DRYじゃない?
オイラって、DRYな訳じゃない?
むしろ、女の娘にDRYにあしらわれ続けてきた訳じゃない?www

じゃあ、DRYにしようよ、ってことを考えた。
でも、なんか、model_ja.ymlの中の、activerecord:attribute:hogehogeって、DBスキーマと結びついている筈だから、なあ...

でも、逆に考えれば、DBスキーマに結びついていないものは、共有できるよね。
で、こんな風に書き換えた。
ja:
  activerecord:
    models:
      user: ユーザ
      session: セッション
    attributes:
      user:
        login: ログイン
        name: 名前
        email: メールアドレス
        deleted_at: で削除された
        password: パスワード
        password_confirmation: 確認用パスワード
        crypted_password: 暗号化パスワード
        salt: 塩
        remember_token: 覚えているトークン
        remember_token_expires_at: トークンを忘れないで期限が切れる
        activation_code: 認証コード
        activated_at: でアクティブ
        state: 状態
      session:
        
  actionview:
    header:
      user:
        new: 新規ユーザー登録
      session:
        new: ログイン
    label:
      common:
        login: ログイン
        name: 名前
        email: メールアドレス
        password: パスワード
        password_confirmation: 確認用パスワード
      session:
        remember_me: ログイン状態を記憶する
    submit:
      common:
        submit: 送信
      user:
        signup: 登録
      session:
        log_in: ログイン

あんまりDRYな気がしないよね...www
まあ、でも、viewの中で使っているもの=hogehoge_tagメソッドとかに使いそうなものは、ja:action_view:サブクラスを作って、その中に突っ込んだよ。
viewで使うものは、activerecordとは絡めない方が、規約っぽいでしょ?

設定より規約っ!www

んで、viewも書き換えたよ。
<h1><%= t('actionview.header.user.new') %></h1>
<% @user.password = @user.password_confirmation = nil %>

<%= error_messages_for :user %>
<% form_for :user, :url => users_path do |f| -%>
<p><%= label_tag 'login', t('actionview.label.common.login') %><br/>
<%= f.text_field :login %></p>

<p><%= label_tag 'email', t('actionview.label.common.email') %><br/>
<%= f.text_field :email %></p>

<p><%= label_tag 'passoword', t('actionview.label.common.password') %><br/>
<%= f.password_field :password %></p>

<p><%= label_tag 'password_confirmation', t('actionview.label.common.password_confirmation') %><br/>
<%= f.password_field :password_confirmation %></p>

<p><%= submit_tag t('actionview.submit.user.signup') %></p>
<% end -%>

んで、app/views/sessions/new.html.erbも、書き換えた。
<h1><%= t('actionview.header.user.new') %></h1>
<% @user.password = @user.password_confirmation = nil %>

<%= error_messages_for :user %>
<% form_for :user, :url => users_path do |f| -%>
<p><%= label_tag 'login', t('actionview.label.common.login') %><br/>
<%= f.text_field :login %></p>

<p><%= label_tag 'email', t('actionview.label.common.email') %><br/>
<%= f.text_field :email %></p>

<p><%= label_tag 'passoword', t('actionview.label.common.password') %><br/>
<%= f.password_field :password %></p>

<p><%= label_tag 'password_confirmation', t('actionview.label.common.password_confirmation') %><br/>
<%= f.password_field :password_confirmation %></p>

<p><%= submit_tag t('actionview.submit.user.signup') %></p>
<% end -%>
んじゃあ、ちょっとこの辺でペンディング。
別の事を始める事にしよう。

restful_authenticationの日本語化。の続きをやろうとしていたら

面白い事に気が付いた。
ひょっとして、i18n_generatorって、DBのスキーマ構造見て、生成してね?

つうことは、アレ、だ。
DBのスキーマ変更した度に、生成だ。

イヤ、待て?
でも、script/generate i18n_generatorって、diffは見れても、マージは出来ないよね?

んんんん...
ま、いっかwwww

restful_authenticationの日本語化。

与太話書いてたら、長くなったんで、分けたwww

restful_authenticationをいれたんだから、まず、これをi18nで日本語化しましょうかね?
ああ、いきなり、
$ script/generate i18n ja
なんてやってるけど、そんなgenerator、rails 2.2.2には、入っていません。
んで、当然ながら、
$ script/plugin install git://github.com/amatsuda/i18n_generators.git
などとして、インストールする事に。
今回はplugin版をセレクト。
gem版もあるけどね。


で、N7 - sandbox | Ruby on Rails, iPhone開発 etc.は、凄く参考になったんだけど、ちょっと情報が古くなってたりなんかする。
i18nジェネレータは、今は、ja.ymlとmodel_ja.ymlの2つしか、生成しません。

あと、ここのやり方で、ちょっと腑に落ちないところがあったんで、オイラ的アレンジを。
続きのページ、「Rails 2.2の国際化(i18n)を試す(3) restful_authentication #2では、h1要素を、

ってしてるけど、こりゃあ、オイラ的には、

だね。
んで、model_ja.ymlは、
ja:
(省略)
  header:
    user: 
      new: 新規ユーザー登録

  lable:
    user:
      signup: 登録
ってな具合にする。
h1要素の「新規ユーザー登録 」は、labelじゃなくってheaderだからね:-)

あと、「エラーメッセージの日本語化」のところで、user.rbの:login、:name、:emailをrails標準のエラーメッセージを使うように変更しているけど、これは、なんかオイラ的には、嫌いなんで、
  validates_presence_of     :login
  validates_length_of       :login,    :within => 3..40
  validates_uniqueness_of   :login
  validates_format_of       :login,    :with => Authentication.login_regex, :message => :bad_login_message

  validates_format_of       :name,     :with => Authentication.name_regex,  :message => :bad_name_message, :allow_nil => true
  validates_length_of       :name,     :maximum => 100

 こんな調子に書き換えた。
んで、ja.ymlを、
  activerecord:
    errors:
(略)
      messages:
(略)

        bad_login_message: "は英数字と\".\"、\"-\"、\"_\"、\"@\"のみを使用して下さい。"
        bad_name_message: "には不可視キャラクタと\"\\\"、\">\"、\"<\"、\"/\"を使用しないで下さい。"
        bad_email_message: "を正確に入力して下さい。"
こんな調子に。

あと、app/views/users/new.html.erbの書き方が、非常にマズいwww
for属性をコロしちゃってますやんwww
なんで、こんなふうに書き換えた。
<h1><%= t('header.user.new') %></h1>
<% @user.password = @user.password_confirmation = nil %>

<%= error_messages_for :user %>
<% form_for :user, :url => users_path do |f| -%>
<p><%= label_tag 'login', t('activerecord.attributes.user.login') %><br/>
<%= f.text_field :login %></p>

<p><%= label_tag 'email', t('activerecord.attributes.user.email') %><br/>
<%= f.text_field :email %></p>

<p><%= label_tag 'passoword', t('activerecord.attributes.user.password') %><br/>
<%= f.password_field :password %></p>

<p><%= label_tag 'password_confirmation', t('activerecord.attributes.user.password_confirmation') %><br/>
<%= f.password_field :password_confirmation %></p>

<p><%= submit_tag 'Sign up' %></p>
<% end -%>
これで、http://localhost:3000/hogehoge/users/newを見て、何も記入せずにsubmitボタンを押してみれば、日本語化しているのが確認できるでしょう。

ステキ(ハート)