2

私はデフォルト言語として「fre」を使用したcakephp2を持っていますが、誕生日がある私のフォームの奇妙な理由で、私の月はまだ英語です。これが私のコードです

 echo $this->Form->input('User.birthday', 
        array (
            'label' => array('text'=>__("form_birthday", "true"), 
                      'class' => ''),

            'selected' => 'empty',
            'dateFormat' => 'MDY',
            'minYear' => date('Y') - 90,
            'maxYear' => date('Y') - 18,
            'separator'=> " ",
            'empty' => __('select', true)
        )
    );

月の名前をフランス語に翻訳する方法は誰でも知っています。私のdefault.poには、すでに月のフランス語訳があります。

4

3 に答える 3

3

CakePHPはPHPです

ドキュメントで述べたように:

アプリケーションのローカライズには、変換関数の使用でカバーされていないもう1つの側面があります。それは、日付/お金の形式です。CakePHPはPHPであることを忘れないでください:)したがって、これらのもののフォーマットを設定するには、setlocaleを使用する必要があります。

AppController::beforeFilterそのため、日付をローカライズするには、setlocaleを適切な場所(多言語アプリの場合など)または単一言語の場合などに呼び出す必要がありますapp/bootstrap.php

あるいは

に依存する代わりにsetlocale(これがより良いアイデアです)、もう少し制御したい場合は'monthNames' => true、の出力ではなく、を使用して「通常の」変換を使用できますstrfrtime。これはソースにあります。ローカライズされたリポジトリからフランス語のpoファイルを取得できます。これは、月の名前を翻訳するだけでなく、コアから出てくる他のすべての標準テキストも翻訳します。

他のすべてが失敗した場合

ここに着陸することは絶対にしないでください。ただし、何も機能しない場合(これは、アプリケーションに間違いがあることmonthNames意味します) 、月番号->名前の通常の配列に定義するだけで、自動的に派生した月名よりも優先されます。

于 2013-01-23T22:05:29.647 に答える
1

ブートストラップファイルに次の行を追加すると、うまく機能します。

Configure::write('Config.language', 'fra');
于 2014-07-11T14:30:39.670 に答える
0

いくつかのステップがあります:

まず、使用するロケールを設定します。
その言語用に1つ以上の.poファイルを作成します。
すべてのl10n可能な文字列を__()または__d()ヘルパーメソッドでラップします。
これが私のプロジェクトの1つからの抜粋です。

uses ( 'L10n' );

class AppController extends Controller {
 public function beforeFilter() {
  /**
 * Derive the desired locale by reading the subdomain from
 * the HTTP_HOST server variable. Locale subdomains can use
 * either the 2 or 3 character ISO code. Information on locale
 * ISO codes is at http://www.loc.gov/standards/iso639-2/php/code_list.php.
 */
$this->L10n = new L10n();

/** Auto-detect the request language settings */
$this->L10n->get();

/**
 * Set the default "domain" for translations. The domain is the
 * same as the po file name in a given locale directory. e.g.
 * __d( 'homepage', 'message_id' ) would look for the
 * message_id key in homepage.po. Using the __() convenience
 * function will always look in default.po.
 */
$this->set( 'domain', 'default' );
}

# The rest of your AppController code
}  

そのスニペットが言語を設定します。/ app / locale / eng /LC_MESSAGES/ディレクトリに適切な.poファイルを提供するだけです。CakePHPの本は、これに関する十分な情報を提供していると思います。http://book.cakephp.org/view/161/Internationalization-Localization

.poファイルを1つだけ使用する場合は、文字列を__()ヘルパーでラップします。1つの大きなファイルを避けるために複数の.poファイルを選択したので、__ d()ヘルパーを使用して、どのドメイン(domain == .po拡張子のない.poファイルの名前)を指定できるようにしました。

アップデート

翻訳が必要なデータベースコンテンツを支援するには、翻訳動作を使用する必要があることを付け加えておきます。

于 2013-01-24T13:52:46.387 に答える