2017年12月31日日曜日

railsのplaceholderでi18n対応する

最近i18n対応することがあって、テキストのplacehodlerをどう国際化するのか不明だったので調べました。

まず書いてみたのはこんな感じ
= form_for(:user, url: 'xx') do |f|
  = f.text_field :last_name, { placeholder: t('activerecord.attributes.user.last_name'), required: true }
これだと、placeholderが翻訳できないエラーが出ました。
placeholder="<span class="translation_missing" title="translation missing: en.activerecord.attributes.user.last_name">Last Name</span>"


調べてみたところ、en.ymlにplacehodlerのhelper用の記述を加えて、form側の記述を変える必要があるようです。
・en.yml
en:
  helpers:
    placeholder:
      user:
        last_name: 'Last Name'

・form
= f.text_field :last_name, { placeholder: true, required: true }
これだとちゃんと言語が英語のときでもplaceholderがen.ymlに設定したLast Nameが表示されました。



参考URL
https://stackoverflow.com/questions/25677031/how-do-i-translate-placeholder-text-in-rails-4

2017年12月22日金曜日

プロを目指す人のためのRuby入門を読みました

プロを目指す人のためのRuby入門を読みました

2014年からrubyやりはじめてもう3年の経験あるんですが、
改めて入門本読んでみるとまだまだ知らなかったり理解が浅いところとかあって、
読んでよかったなぁと思いました。

特に最近日付を入力させるフォームを使ってるところでちょっとどうしようか考えていたのがあったので、
以下の2つがタイムリーにささりました。

・正規表現のキャプチャの結果に名前をつけられる
text = '今日は2017年12月22日です'
result = /(?<year>\d+)年(?<month>\d+)月(?<day>\d+)日/.match(text)

p result[:year]
p result[:month]
p result[:day]

これで
"2017"
"12"
"22"
という風に取れる


・rescue演算子を使ってbegin/endを省略できる
require 'Date'
text = 'aaaaaa'
result = Date.parse(text) rescue nil
p result
parseできない文字列の時にはnilが返って来る。
これまでbegin/endって囲んでてうざいなと思っていたので、いいことを知りました。