DEV Community

n350071πŸ‡―πŸ‡΅
n350071πŸ‡―πŸ‡΅

Posted on • Edited on

I18n in Rails

πŸ“— Translate Active Record

1. Define the dictionary at some yml files

The file name is not related. The term at the second level activerecord: works.

#config/locales/models_ja.yml
#config/locales/activerecords_ja.yml
#...etc

ja:
  activerecored:
    models:
      author: θ‘—θ€…
    attributes:
      author:
        name: 名前
        description: 概要

2. Use it in ERB

<div>
  <%= Author.model_name.human %>
  <%= Author.human_attribute_name :name %>
  <%= Author.human_attribute_name :description %>
</div>

πŸ“— Translate any words

1. Define the dictionary at some yml files

  • 😎 You can write words in split multiple files.
  • 😎 You can write words with parameter, see also mail.registration_thanks.name_sir.
  • 😎 You can write an array of words, see also date.day_names.
# config/locales/words.ja.yml
ja:
  labels:
    profile: プロフィール
  messages:
    sending: 送俑中
    error: γ‚¨γƒ©γƒΌγŒη™Ίη”Ÿγ—γΎγ—γŸ
  mail:
    registration:
      subject: "γ”η™»ιŒ²γ‚γ‚ŠγŒγ¨γ†γ”γ–γ„γΎγ™πŸŽ‰ %{name}様"

# config/locales/words.ja.yml
ja:
  date:
    day_names:
    - ζ—₯
    - 月
    - 火
    - ζ°΄
    - 木
    - 金
    - 土

2. Use it

<%= label_tag t('labels.profile') %>

<p><%= t('messages.sending') %></p>
# class RegistMailer < ApplicationMailer
@user.name = n350071
subject = I18n.t('mail.registration.subject', name: @user.name)
subject = I18n.t(:subject, scope: 'mail.registration', name: @user.name)

# => "γ”η™»ιŒ²γ‚γ‚ŠγŒγ¨γ†γ”γ–γ„γΎγ™πŸŽ‰ n350071様
# => "γ”η™»ιŒ²γ‚γ‚ŠγŒγ¨γ†γ”γ–γ„γΎγ™πŸŽ‰ n350071様
I18n.t('date.day_names')
# => "[\"ζ—₯\", \"月\", \"火\", \"ζ°΄\", \"木\", \"金\", \"土\"]"

πŸ“— Localize Format

The formats reference.

Set your formats

en:
  date:
    formats:
      default: ! '%Y/%m/%d'
      long: ! '%Y/%m/%d/(%a)'
      short: ! '%m/%d'
      middle: ! '%b %d %a'
<%= l(@event.start_date, format: :middle) %>
#=> 'Nov 15 Fri'

default

<%=l Time.now, format: :short %>
I18n.l(Time.now, format: :short) #=> "2019/11/12 10:21"
I18n.l(Time.now, format: :long)  #=> "2019εΉ΄11月12ζ—₯(火) 10ζ™‚21εˆ†41η§’ +0900"

πŸ”— Parent Note

Top comments (0)