i18n(Rails with i18n)

13070 단어 I18nRubyRails

Rails with i18n


Rails 프로그램을 만들 때validate의 정보, 단추의 문장 등은 보통 영어로 표시됩니다(view의 초기 형태는 영어이기 때문입니다...)
일본인이라 일본어로 표현하고 싶지만 직접 끼워넣으면 보수성이 떨어진다.제작진에 따라 언어의 동요 등도 문제가 발생할 수 있다.
또 다언어화 대응 측면에서 같은 화면이 언어에 맞춰 제작되는 것도 보수성이 떨어진다.
Rails를 포함하는 다국어 대응

i18n


근거Wikipedia
정보 처리의 국제화와 지역화는 소프트웨어를 개발하는 환경과 다른 환경이고 특히 외국과 서로 다른 문화에 적합한 수단이다.
국제화(미국 영어: 국제화 영국 영어: 국제화, i18n)는 소프트웨어 디자인의 프로젝트로 소프트웨어가 각종 언어와 지역에 적응할 수 있고 소프트웨어에 대해 기술적인 변경을 하지 않아도 된다.
이런 견해가 있다.중요한 것은'기술적인 변경이 아니라 다양한 언어와 지역에 적응하는 것'이다.

다언어화된 가져오기


Gemfile


Gemfile에 GemRails용 다국어 라이브러리 rails-i18n을 추가합니다.
Gemfile
# rails-i18n
gem 'rails-i18n'
구문을 사용합니다.
terminal
$ bundle install

config/application.rb


config/application.rb에 설정 정보를 추가합니다.
config/application.rb
...
module Habilidad
  class Application < Rails::Application
...
    # 言語ファイルを階層ごとに設定するための記述
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

    # アプリケーションが対応している言語のホワイトリスト(ja = 日本語, en = 英語)
    config.i18n.available_locales = %i(ja en)

    # 上記の対応言語以外の言語が指定された場合、エラーとするかの設定
    config.i18n.enforce_available_locales = true

    # デフォルトの言語設定
    # config.i18n.default_locale = :en
    config.i18n.default_locale = :ja
...
  end
end

config/locales


config/localles에서 다국어 설정 파일(*.yml)을 구성합니다.
config.i18n.load_path 설정을 통해 설정 파일을 단계별로 관리할 수 있습니다.
참고로 제작 중인 앱은 이런 느낌이에요.
config/locales
/my_application/config/locales
|--defaults          ## 共通系
|  |--en.yml
|  |--ja.yml
|--models            ## モデル系
|  |--model_name_A   ## 各モデルのディレクトリ
|  |  |--en.yml
|  |  |--ja.yml
|  |--model_name_B
|  |  |--en.yml
|  |  |--ja.yml
|--views             ## ビュー系
|  |--view_name_A    ## 各ビューのディレクトリ
|  |  |--en.yml
|  |  |--ja.yml
|  |--view_name_B
|  |  |--en.yml
|  |  |--ja.yml
이렇게 되면 각 모델의 화면마다 다국어 설정 파일을 관리할 수 있어 여러 사람이 개발해도 문제가 생기기 어렵다.
뷰도 index.ja.yml처럼 화면 단위로도 잘라낼 수 있지만 너무 지루한 것 같아서 저는 사용하지 않았습니다.(복잡하면 채택 가능)

.yml


파일 이름은 해당 언어입니다.
여기. 참고로 제작되었습니다.
default/ja.yml
ja:                              ## 言語名
  dictionary:                    ## 共通系であることを示す
    title:                       ## 画面のタイトル
      create: "新規作成"
      update: "更新"
      destory:
        confirm: "削除確認"
    message:                     ## 固定メッセージ
      create:
        complete: "登録しました"
      update:
        complete: "更新しました"
      destory:
        confirm: "削除しますか?"
    button:                      ## 表示するボタン
      create: "新規作成"
      search: "検索"
      clear: "クリア"
      update: "更新"
      destory: "削除"
      cancel: "キャンセル"
  time:                          ## 表示する時間の形式
    formats:
      default: ! "%Y-%m-%d %H:%M:%S"
models/model_name_A/ja.yml
ja:
  activerecord:                 ## モデルの開始はactiverecord
    models:                     ## モデル
      model_name_A: "モデルA"
    attributes:                 ## 属性(カラム)
      model_name_A:
        id: "ID"
        name: "名称"
        created_at: "登録日時"
        updated_at: "更新日時"
views/view_name_A/ja.yml
ja:
  view_name_A:
    index:
      title: "画面A"

끼워 넣다


뷰에 포함합니다.
호출 방식은 다음과 같은 느낌이 있다
ruby

## モデル
$ Model_name_A.model_name.human
=> モデルA

$ Model_name_A.human_attribute_name(:name)
=> 名称

## ロケール指定
$ t('dictionary.button.search')
=> 検索

$ t('view_name_A.index.title')
=> 画面A

## フォーマット
$ l(model_name_A.created_at, format: :default)
=> 2019-01-01
위에서 말한 바와 같이config/application.rb에 의해 설정된 언어.yml에 설정된 문을 표시합니다.

동적 전환


지금까지 설정 파일을 업데이트할 때마다 언어가 바뀌었는데 동적 전환 방법을 설명해 드리겠습니다.

controller/application_controller.rb


controller/application_controller.rb
class ApplicationController < ActionController::Base

    before_action :set_locale

    def set_locale
        I18n.locale = locale
    end

    def locale
        @locale ||= params[:locale] ||= I18n.default_locale
    end

    def default_url_options(options={})
        options.merge(locale: locale)
    end
end
상기 설정을 추가하면locale를 동적으로 변경할 수 있습니다.

config/routes.rb


config/routes.rb
Rails.application.routes.draw do
  scope '(:locale)', locale: /#{I18n.available_locales.map(&:to_s).join('|')}/ do
    # For details on the DSL available within this file, see 
    resources :resource_As
  end
end
scope에서 동적 다중 언어에 대응하는 동작을 포위할 때 [domain]/ja/hogehogehoge/등 기술에서 표시된 언어를 매개 변수로 동작에 전달할 수 있습니다.제출된 매개 변수는 응용 목록입니다controller.rb에서 대응하는 언어를 판단할 때 이 언어로 화면을 그립니다.

결실



자를 지정하면 일본어, 인을 지정하면 영어로 전환할 수 있습니다!

좋은 웹페이지 즐겨찾기