1

アプリで言語プレフィックスを使用しています:

Router::connect('/:language/:controller/:action/*',
                       array(),
                       array('language' => '[a-z]{3}'));

使用するときは$this->Html->link('title',$url_array)、言語プレフィックスを手動で設定する必要があります。そして、私が欲しいのは、プレフィックスが現在のURLに存在する場合、それを使用->link(...)すると、このプレフィックスが自動的にurlに追加されるはずです。このプレフィックスを明示的に設定した場合にのみ、異なるはずです。

出来ますか?

4

1 に答える 1

1

(ユーザーごとではなく)ロケールアプリケーション全体を管理する場合は、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ターミナルでコマンドを実行すると、使用可能なロケールのリストを見つけることができます。

于 2012-06-20T14:04:24.473 に答える