(ユーザーごとではなく)ロケールアプリケーション全体を管理する場合は、AppControllerのbeforeFilter()のURLに現在のロケール設定が何であるかを確認する必要があります。の:languageプレフィックスは、Router
異なるローカライズされたコンテンツに一意のURLを提供することを保証します。
$this->Html->link()
Config.language構成設定が適切な方法で管理されている場合は、期待どおりに動作します。
したがってAppController::beforeFilter()
、if()ステートメントを作成して、要求されているロケールを検出し、それに応じて次のことを行います。
Configure::write('Config.language', 'fre');
また
Configure::write('Config.language', 'eng');
これを行うと、I18nとTranslateBehaviorの両方が同じ言語値にアクセスできるようになります。
ユーザーごとにアプリケーションロケールを管理する場合は、現在のロケールをセッションに保存できます。
class AppController extends Controller {
public function beforeFilter() {
Configure::write('Config.language', $this->Session->read('Config.language'));
}
}
もちろん、変換関数__()も使用する必要があります。CakeBookのInternationalizationandLocalizationセクションをチェックしてください。そうそう、その記事の「細字」に記載されている非常に重要なものもあります。
アプリケーションのローカライズには、変換関数の使用でカバーされていないもう1つの側面があります。それは、日付/お金の形式です。CakePHPはPHPであることを忘れないでください:)したがって、これらのもののフォーマットを設定するには、setlocaleを使用する必要があります。コンピューターに存在しないロケールをsetlocaleに渡しても、効果はありません。locale -a
ターミナルでコマンドを実行すると、使用可能なロケールのリストを見つけることができます。