[Ruby on Rails] Rails의 일본어 대응

6695 단어 RubyRails
Rails에서 일본어로 enum을 사용할 때까지의 노트.

일단 기본 설정부터.


config\initializers locale.rb를 만들고 다음 내용을 설명합니다.
config\initializers\locale.rb
Rails.application.config.i18n.default_locale = :ja
다음 URL에서 일본어로 ja.yml을 다운로드하여 config\localles에 놓습니다.
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
devise를 사용하면 이쪽에서도 다운로드할 수 있으며 config\localles에 놓으면 편리합니다.
http://qiita.com/MasatoYoshioka@github/items/8d910e793e7c485403bb
이렇게 기본 형식의 라벨과 오류 정보가 일본어에 대응할 수 있다.

ja.yml 편집


일본어에 해당하는 부분을 편집합니다.
config\locales\ja.yml
---
ja:
  activerecord:
    errors:
      messages:
        record_invalid: 'バリデーションに失敗しました: %{errors}'
        restrict_dependent_destroy:
          has_one: "%{record}が存在しているので削除できません"
          has_many: "%{record}が存在しているので削除できません"
    attributes:
      user:
        name: 名前
        email: メールアドレス
        birth_date: 年齢
        sex: 性別
        school: 学校名
        admin: 管理者権限
        password: パスワード
        password_confirmation: パスワード(確認)
        created_at: 登録日時
        updated_at: 更新日時
        remember_me: ログインを記憶する
attribute 다음에 일본어와 대응하는 부분을 기술합니다.여기에 User 모델이 추가되었습니다.
이렇게 하면 다음과 같이 사용할 수 있다.(콘솔에서 실행)
irb(main):001:0> User.human_attribute_name(:name)
=> "名前"
irb(main):002:0> User.human_attribute_name(:email)
=> "メールアドレス"
이렇게 사용하셔도 됩니다.
irb(main):003:0> Time.now.to_s(:ja)
=> "2019年03月22日 19時13分"

일본어화 대응


먼저 enum 설정
이번에는 엔움으로 성별을 관리하는 상황을 고려해 보겠습니다.
마이그레이션 수행:.
class AddColumnUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :sex, :integer
  end
end
성별 관리에 사용할 설정을 추가합니다.
User.rb
class User < ApplicationRecord
  enum sex: { woman: 0, man: 1 }
end
엔um을 간단하게 일본어화할 수 있는gem이 있기 때문에 Gemufile에 다음과 같은 bundle을 추가했습니다.
gem 'enum_help'
이렇게 하면 일본어로 엔움에서 값을 얻을 수 있다.
irb(main):004:0> User.last.sex_i18n
  User Load (1.0ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> "女性"
enum에서 처리된 값은 보통 selectbox를 사용하기 때문에form에서 다음과 같이 맵을 사용하면 간단하게 실현할 수 있습니다.(sexes처럼 복수 형식으로 변하도록 주의)
edit.html.slim
    = f.select :sex, User.sexes_i18n.keys.map {|k| [User.sexes_i18n[k], k]}, {}, autofocus: true
    = f.label :school

최후


다언어화가 지원되지 않아도 태그는 일본어로 직접 쓰는 것보다 자주 huumanattribute_name 등을 사용하면 나중에 더 ja가 됩니다.yml만 편집하면 편할 수도 있습니다.

좋은 웹페이지 즐겨찾기