Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs/guide-ja updated [ci skip] #13503

Merged
merged 1 commit into from
Feb 3, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
docs/guide-ja updated [ci skip]
  • Loading branch information
softark committed Feb 3, 2017
commit 4125524aa76d8f7a711ccb17f5cbe031848a7c9f
2 changes: 1 addition & 1 deletion docs/guide-ja/db-active-record.md
Original file line number Diff line number Diff line change
Expand Up @@ -1545,7 +1545,7 @@ class Customer extends \yii\db\ActiveRecord
return null; // プライマリキーが null の場合のリレーショナルクエリを防止
}

return $this->ordersAggregation[0]['counted'];
return empty($this->ordersAggregation) ? 0 : $this->ordersAggregation[0]['counted'];
}

/**
Expand Down
73 changes: 61 additions & 12 deletions docs/guide-ja/tutorial-i18n.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,29 @@ Yii は、全ての領域にわたる国際化機能を提供し、メッセー

## ロケールと言語 <span id="locale-language"></span>

### ロケール

ロケールとは、ユーザの言語、国、そして、ユーザが彼らのユーザインタフェイスにおいて目にすることを期待するすべての変異形式を定義する一連のパラメータです。
ロケールは、通常、言語 ID と地域 ID から成るロケール ID によって定義されます。
例えば、`en-US` は、英語とアメリカ合衆国のロケールを意味します。

例えば、`en-US` という ID は、「英語とアメリカ合衆国」というロケールを意味します。

Yii アプリケーションで使用される全てのロケール ID は、一貫性のために、`ll-CC` の形式に正規化されなければなりません。
ここで `ll` は [ISO-639](http://www.loc.gov/standards/iso639-2/) に従った小文字二つまたは三つの言語コードであり、`CC` は [ISO-3166](http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html) に従った二文字の国コードです。
ロケールに関する更なる詳細は [ICU プロジェクトのドキュメント project](http://userguide.icu-project.org/locale#TOC-The-Locale-Concept) に述べられています。

### 言語

Yii では、"言語" という用語でロケールに言及することがしばしばあります。

Yii のアプリケーションでは二つの言語を使用します。
すなわち、[[yii\base\Application::$sourceLanguage|ソース言語]] と [[yii\base\Application::$language|ターゲット言語]] です。
前者はソースコード中のテキストメッセージが書かれている言語を意味し、後者はコンテントをエンドユーザに表示するのに使用されるべき言語を指します。
Yii のアプリケーションでは二つの言語を使用します。すなわち、
* [[yii\base\Application::$sourceLanguage|ソース言語]] : ソースコード中のテキストメッセージが書かれている言語。
* [[yii\base\Application::$language|ターゲット言語]] : コンテントをエンドユーザに表示するのに使用されるべき言語。

いわゆるメッセージ翻訳サービスは、主として、テキストメッセージをソース言語からターゲット言語に翻訳するものです。

### 構成

アプリケーションの言語は、アプリケーションの構成情報で次のように構成することが出来ます。

```php
Expand All @@ -37,7 +46,7 @@ return [
```

[[yii\base\Application::$sourceLanguage|ソース言語]] のデフォルト値は `en-US` であり、合衆国の英語を意味します。
このデフォルト値は変えないことが推奨されます
このデフォルト値は変えないことが **推奨** されます
なぜなら、通常は、英語から他の言語への翻訳者を見つける方が、非英語から非英語への翻訳者を見つけるより、はるかに簡単だからです。

[[yii\base\Application::$language|ターゲット言語]] は、エンドユーザの言語選択など、さまざまな要因に基づいて、動的に設定しなければならないことがよくあります。
Expand All @@ -54,16 +63,23 @@ return [

## メッセージ翻訳 <span id="message-translation"></span>

### ソース言語からターゲット言語へ

メッセージ翻訳サービスは、テキストメッセージをある言語 (通常は [[yii\base\Application::$sourceLanguage|ソース言語]]) から別の言語 (通常は [[yii\base\Application::$language|ターゲット言語]]) に翻訳するものです。

翻訳は、元のメッセージと翻訳されたメッセージを格納するメッセージソースの中から、翻訳対象となったメッセージを探すことにより行われます。
メッセージが見つかれば、対応する翻訳されたメッセージが返されます。
メッセージが見つからなければ、元のメッセージが翻訳されずに返されます。

### 実装の仕方

メッセージ翻訳サービスを使用するためには、主として次の作業をする必要があります。

* 翻訳する必要のある全てのテキストメッセージを [[Yii::t()]] メソッドの呼び出しの中に包む。
* メッセージ翻訳サービスが翻訳されたメッセージを探すことが出来る一つまたは複数のメッセージソースを構成する。
* 翻訳者にメッセージを翻訳させて、それをメッセージソースに格納する。
1. 翻訳する必要のある全てのテキストメッセージを [[Yii::t()]] メソッドの呼び出しの中に包む。
2. メッセージ翻訳サービスが翻訳されたメッセージを探すことが出来る一つまたは複数のメッセージソースを構成する。
3. 翻訳者にメッセージを翻訳させて、それをメッセージソースに格納する。

#### 1. テキストメッセージを包む

[[Yii::t()]] メソッドは次のように使います。

Expand All @@ -73,6 +89,8 @@ echo \Yii::t('app', 'This is a string to translate!');

ここで、二番目のパラメータが翻訳されるべきテキストメッセージを示し、最初のパラメータはメッセージを分類するのに使用されるカテゴリ名を示します。

#### 2. 一つまたは複数のメッセージソースを構成する

[[Yii::t()]] メソッドは `i18n` [アプリケーションコンポーネント](structure-application-components.md) の `translate` メソッドを呼んで実際の翻訳作業を実行します。
このコンポーネントはアプリケーションの構成情報の中で次のようにして構成することが出来ます。

Expand All @@ -96,12 +114,43 @@ echo \Yii::t('app', 'This is a string to translate!');
```

上記のコードにおいては、[[yii\i18n\PhpMessageSource]] によってサポートされるメッセージソースが構成されています。

##### シンボル `*` によるカテゴリのワイルドカード

`app*` は、`app` で始まる全てのメッセージカテゴリがこのメッセージソースを使って翻訳されるべきであることを示しています。
[[yii\i18n\PhpMessageSource]] クラスは、メッセージ翻訳を格納するのに PHP ファイルを使用します。

#### 3. 翻訳者にメッセージを翻訳させて、それをメッセージソースに格納する

[[yii\i18n\PhpMessageSource]] クラスは、単純な PHP 配列を持つ複数の PHP ファイルを使用してメッセージ翻訳を格納します。
それらのファイルが、「ソース言語」のメッセージと「ターゲット言語」の翻訳とのマップを含みます。

> Info: それらのファイルを [`message` コマンド](#message-command) を使用して自動的に生成することが出来ます。
> この節で後で紹介します。

PHP ファイルは、それぞれ、一つのカテゴリのメッセージに対応します。
デフォルトでは、ファイル名はカテゴリ名と同じでなければなりません。
ただし、[[yii\i18n\PhpMessageSource::fileMap|fileMap]] を構成して、別の命名方法によってカテゴリを PHP ファイルに割り付けることも可能です。
上記の例では、(`ja-JP` がターゲット言語であると仮定すると) `app/error` のカテゴリは `@app/messages/ja-JP/error.php` という PHP ファイルに割り付けられます。
`fileMap` を構成しなければ、このカテゴリは `@app/messages/ja-JP/app/error.php` に割り付けられることになります。
`app/messages/nl-NL/main.ph` の例を示します。

```php
<?php

/**
* Translation map for nl-NL
*/
return [
'welcome' => 'welkom'
];

```

##### ファイルのマッピング

ただし、[[yii\i18n\PhpMessageSource::fileMap|fileMap]] を構成して、別の命名方法によってカテゴリを PHP ファイルにマップすることも可能です。

上記の例では、(`ja-JP` がターゲット言語であると仮定すると) `app/error` のカテゴリは `@app/messages/ja-JP/error.php` という PHP ファイルにマップされます。
`fileMap` を構成しなければ、このカテゴリは `@app/messages/ja-JP/app/error.php` にマップされることになります。

##### 他のストレージタイプ

翻訳メッセージを格納するのには、PHP ファイル以外に、次のメッセージソースを使うことも可能です。

Expand Down