Skip to content

Commit

Permalink
Merge pull request #1734 from yasslab/update80_i18n
Browse files Browse the repository at this point in the history
[8.0] i18n.mdの原文更新を訳文に反映
  • Loading branch information
hachi8833 authored Nov 13, 2024
2 parents 1c071f1 + 9f5c03b commit 777a7af
Showing 1 changed file with 38 additions and 37 deletions.
75 changes: 38 additions & 37 deletions guides/source/ja/i18n.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ localize # DateオブジェクトやTimeオブジェクトを現地のフォー
上のメソッドにはそれぞれ`#t``#l`というエイリアスメソッドがあるので、以下のように簡潔に書けます。

```ruby
I18n.t 'store.title'
I18n.t "store.title"
I18n.l Time.now
```

Expand Down Expand Up @@ -118,7 +118,7 @@ NOTE: I18のバックエンドは、訳文が初めて参照されるときに
`config/application.rb`では次のように、デフォルトのロケールを変更したり訳文読み込みパスを設定したりできます。

```ruby
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb, yml}')]
config.i18n.load_path += Dir[Rails.root.join("my", "locales", "*.{rb,yml}")]
config.i18n.default_locale = :de
```

Expand All @@ -128,7 +128,7 @@ config.i18n.default_locale = :de
# config/initializers/locale.rbファイルの内容:
# I18nライブラリに訳文の探索場所を指示する
I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb, yml}')]
I18n.load_path += Dir[Rails.root.join("lib", "locale", "*.{rb,yml}")]
# アプリケーションでの利用を許可するロケールのリストを渡す
I18n.available_locales = [:en, :pt]
Expand Down Expand Up @@ -192,7 +192,7 @@ end
# 127.0.0.1 application.pl
# /etc/hostsファイルに上のように記述する必要がある
def extract_locale_from_tld
parsed_locale = request.host.split('.').last
parsed_locale = request.host.split(".").last
I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil
end
```
Expand All @@ -202,8 +202,11 @@ end
```ruby
# リクエストのサブドメインからロケールを取り出す (http://it.application.local:3000のような形式)
# この動作をローカルPCで行なうためには
# 127.0.0.1 gr.application.local
# /etc/hostsファイルに上のように記述する必要がある
# /etc/hostsファイルに以下のように記述する必要がある
# 127.0.0.1 it.application.local
#
# さらに、config/environments/development.rbに以下の設定を追加する必要もある
# config.hosts << 'it.application.local:3000'
def extract_locale_from_subdomain
parsed_locale = request.subdomains.first
I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil
Expand Down Expand Up @@ -273,7 +276,7 @@ end
```ruby
# config/routes.rb
get '/:locale' => 'dashboard#index'
get "/:locale" => "dashboard#index"
```

このルーティング宣言が他のルーティングを「食べてしまう」ことのないよう、**ルーティング宣言の順序**に十分ご注意ください(この記述は`root :to`の直前に置くことも可能です)。
Expand Down Expand Up @@ -319,7 +322,7 @@ end

private
def extract_locale_from_accept_language_header
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
request.env["HTTP_ACCEPT_LANGUAGE"].scan(/^[a-z]{2}/).first
end
```

Expand Down Expand Up @@ -468,12 +471,12 @@ en:
```

```ruby
I18n.t 'success.true' # => 'True!'
I18n.t 'success.on' # => 'On!'
I18n.t 'success.false' # => 'False!'
I18n.t 'failure.false' # => Translation Missing
I18n.t 'failure.off' # => Translation Missing
I18n.t 'failure.true' # => Translation Missing
I18n.t "success.true" # => 'True!'
I18n.t "success.on" # => 'On!'
I18n.t "success.false" # => 'False!'
I18n.t "failure.false" # => Translation Missing
I18n.t "failure.off" # => Translation Missing
I18n.t "failure.true" # => Translation Missing
```

### 訳文に変数を渡す
Expand Down Expand Up @@ -599,7 +602,7 @@ NOTE: Railsのデフォルトのロケール読み込みメカニズムでは、
```ruby
# config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.load_path += Dir[Rails.root.join("config", "locales", "**", "*.{rb,yml}")]
```

I18n API機能の概要
Expand Down Expand Up @@ -627,7 +630,7 @@ I18n API機能の概要

```ruby
I18n.t :message
I18n.t 'message'
I18n.t "message"
```

`translate`メソッドには`:scope`オプションも渡せます。このオプションには、「名前空間」を指定するための追加キーを1つ以上含めることも、訳文キーのスコープを含めることもできます。
Expand All @@ -647,9 +650,9 @@ I18n.translate "activerecord.errors.messages.record_invalid"
したがって、以下の4つの呼び出しはすべて等価です。

```ruby
I18n.t 'activerecord.errors.messages.record_invalid'
I18n.t 'errors.messages.record_invalid', scope: :activerecord
I18n.t :record_invalid, scope: 'activerecord.errors.messages'
I18n.t "activerecord.errors.messages.record_invalid"
I18n.t "errors.messages.record_invalid", scope: :activerecord
I18n.t :record_invalid, scope: "activerecord.errors.messages"
I18n.t :record_invalid, scope: [:activerecord, :errors, :messages]
```

Expand All @@ -658,7 +661,7 @@ I18n.t :record_invalid, scope: [:activerecord, :errors, :messages]
`:default`オプションが与えられると、訳文が見つからない場合にここで指定した値が返されます。

```ruby
I18n.t :missing, default: '【訳文なし】'
I18n.t :missing, default: "【訳文なし】"
# => '【訳文なし】'
```

Expand All @@ -667,7 +670,7 @@ I18n.t :missing, default: '【訳文なし】'
例: 以下では最初に`:missing`というキーを訳文に置き換えようとし、続いて`:also_missing`というキーを置き換えようとします。ここではどちらからも結果を得られないので、「【訳文なし】」という文字列が返されます。

```ruby
I18n.t :missing, default: [:also_missing, '【訳文なし】']
I18n.t :missing, default: [:also_missing, "【訳文なし】"]
# => '【訳文なし】'
```

Expand All @@ -676,14 +679,14 @@ I18n.t :missing, default: [:also_missing, '【訳文なし】']
キーの配列を渡すことで、複数の訳文を一度に参照できます。

```ruby
I18n.t [:odd, :even], scope: 'errors.messages'
I18n.t [:odd, :even], scope: "errors.messages"
# => ["奇数が必要です", "偶数が必要です"]
```

キーは、グループ化された訳文のハッシュに翻訳できます(ハッシュはネストする可能性があります)。たとえば以下のコードでは、「すべての」Active Recordエラーメッセージをハッシュとして受け取れます。

```ruby
I18n.t 'errors.messages'
I18n.t "errors.messages"
# => {:inclusion=>"がリストに含まれていません", :exclusion=> ... }
```

Expand All @@ -699,10 +702,10 @@ en:
この設定を行わない場合、ネストした式展開は以下のように無視されます。
```ruby
I18n.t 'welcome', app_name: 'book store'
I18n.t "welcome", app_name: "book store"
# => {:title=>"Welcome!", :content=>"Welcome to the %{app_name}"}

I18n.t 'welcome', deep_interpolation: true, app_name: 'book store'
I18n.t "welcome", deep_interpolation: true, app_name: "book store"
# => {:title=>"Welcome!", :content=>"Welcome to the book store"}
```

Expand Down Expand Up @@ -740,7 +743,7 @@ en:
class BooksController < ApplicationController
def create
# ...
redirect_to books_url, notice: t('.success')
redirect_to books_url, notice: t(".success")
end
end
```
Expand All @@ -753,9 +756,9 @@ end

```ruby
I18n.backend.store_translations :en, inbox: {
zero: 'no messages', # オプション
one: 'one message',
other: '%{count} messages'
zero: "no messages", # オプション
one: "one message",
other: "%{count} messages"
}
I18n.translate :inbox, count: 2
# => '2 messages'
Expand Down Expand Up @@ -791,7 +794,7 @@ I18n gemには`Pluralization`バックエンドが用意されており、これ
```ruby
I18n::Backend::Simple.include(I18n::Backend::Pluralization)
I18n.backend.store_translations :pt, i18n: { plural: { rule: lambda { |n| [0, 1].include?(n) ? :one : :other } } }
I18n.backend.store_translations :pt, apples: { one: 'one or none', other: 'more than one' }
I18n.backend.store_translations :pt, apples: { one: "one or none", other: "more than one" }
I18n.t :apples, count: 0, locale: :pt
# => 'one or none'
Expand Down Expand Up @@ -1129,9 +1132,9 @@ en:
上の設定により、以下の4つのコードはいずれも`:short`日付フォーマット`"%b %d"`を返します。

```ruby
I18n.t 'date.formats.short'
I18n.t 'formats.short', scope: :date
I18n.t :short, scope: 'date.formats'
I18n.t "date.formats.short"
I18n.t "formats.short", scope: :date
I18n.t :short, scope: "date.formats"
I18n.t :short, scope: [:date, :formats]
```

Expand Down Expand Up @@ -1169,7 +1172,7 @@ I18n APIでは以下の例外が定義されています。これらの例外は

#### `I18n::MissingTranslationData`の処理方法をカスタマイズする

`config.i18n.raise_on_missing_translations`が`true`の場合、 `I18n::MissingTranslationData`エラーをraiseします。test環境でこれをオンにしておくと、見つからない訳文がリクエストされた場所をキャッチできます。
`config.i18n.raise_on_missing_translations`が`true`の場合、ビューやコントローラで`I18n::MissingTranslationData`エラーがraiseされます。この値が`:strict`の場合は、このエラーがモデルでもraiseされるようになります。test環境でこれをオンにしておくと、見つからない訳文がリクエストされた場所をキャッチできます。

`config.i18n.raise_on_missing_translations`が`false`(すべての環境のデフォルト)の場合は、例外のエラーメッセージが表示されます。見つからないキーやスコープがメッセージに含まれているので、これを手がかりにコードを修正できます。

Expand Down Expand Up @@ -1216,7 +1219,7 @@ Rails I18nへの貢献について

Ruby on Rails 2.2から導入されたI18nサポートは、現在も進化し続けています。I18nプロジェクトは、Ruby on Railsの優れた開発規約に沿って進められています。つまり、機能をいきなりコアに導入するのではなく、最初はプラグインとして進化させ、アプリケーションで実地に使うことで改良を重ね、その後に最も広く一般的に利用可能なベストの機能を組み合わせたものだけを抽出して、Railsのコアに採用します。

ですから、Railsチームはすべての皆様にプラグインなどのライブラリに採り入れられた新しいアイディアや機能をどしどし試していただき、その結果をコミュニティで利用できるようにしていただければと思います(そのときはぜひ[メーリングリスト][mlist]) でもお知らせください)。
ですから、Railsチームはすべての皆様にプラグインなどのライブラリに採り入れられた新しいアイディアや機能をどしどし試していただき、その結果をコミュニティで利用できるようにしていただければと思います(そのときはぜひ[メーリングリスト][mlist]でもお知らせください)。

自分の欲しいロケールや言語がRuby on Railsの[訳文データのサンプル][sample trans]リポジトリにない場合、リポジトリを[fork][]し、訳文をそこに追加してから[プルリクエスト][pull req]を送信してください。

Expand All @@ -1228,11 +1231,9 @@ Ruby on Rails 2.2から導入されたI18nサポートは、現在も進化し
リソース
---------

* [Google group: rails-i18n][] - I18nプロジェクトのメーリングリストです。
* [GitHub: rails-i18n][rails-i18n] - I18nプロジェクトのコードリポジトリです。Rails用の訳文は[訳文例][]に多数掲載されています。これらの訳文は大半のアプリケーションで利用できるはずです。
* [GitHub: i18n][] - I18n gemのコードリポジトリです。

[Google group: rails-i18n]: https://groups.google.com/g/rails-i18n
[訳文例]: https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale
[GitHub: i18n]: https://github.com/ruby-i18n/i18n

Expand Down

0 comments on commit 777a7af

Please sign in to comment.