CakePHP で TranslateBehavior を使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/90949

  •  01-07-2019
  •  | 
  •  

質問

Cakephp.org にはドキュメントがなく、Google でも見つかりません。ドキュメントをリンクするか、ドキュメントを提供してください。

役に立ちましたか?

解決

翻訳動作は、CakePHP の非常に便利な機能の 1 つですが、文書化が不十分です。私はこれを数回実装し、次のような方針で多言語 Web サイトでそれなりの成功を収めました。

まず、翻訳動作はサイトのデータベース コンテンツのみを国際化します。さらに静的なコンテンツがある場合は、Cake のコンテンツを参照してください。 __('string') ラッパー関数と gettext (これに関して役立つ情報があります ここ)

次の db テーブルを使用して翻訳したいコンテンツがあると仮定します。

CREATE TABLE `contents` (
    `id` int(11) unsigned NOT NULL auto_increment,
    `title` varchar(255) default NULL,
    `body` text,
  PRIMARY KEY  (`id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

content.php モデルには次のものが含まれます。

var $actsAs = array('Translate' => array('title'   => 'titleTranslation',
                     'body'    => 'bodyTranslation'
                     ));

その定義では。次に、次のように i18n テーブルをデータベースに追加する必要があります。

CREATE TABLE `i18n` (
  `id` int(10) NOT NULL auto_increment,
  `locale` varchar(6) NOT NULL,
  `model` varchar(255) NOT NULL,
  `foreign_key` int(10) NOT NULL,
  `field` varchar(255) NOT NULL,
  `content` mediumtext,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

次に、コントローラーのデータベースにデータを保存するときに、ロケールを希望の言語に設定します (この例はポーランド語です)。

$this->Content->locale = 'pol';
$result = $this->Content->save($this->data);

これにより、i18n テーブルに pol ロケールのタイトルおよび本文フィールドのエントリが作成されます。検索は、ユーザーのブラウザに設定されている現在のロケールに基づいて検索され、次のような配列を返します。

[Content]
  [id]
  [titleTranslation]
  [bodyTranslation]

優れたものを使用しております p28n コンポーネント gettext および翻訳動作とうまく連携する言語切り替えソリューションを実装します。

これは完璧なシステムではありません。HABTM 関係をその場で作成するため、手動で作成した他の関係に問題が発生する可能性がありますが、注意していればうまく機能します。

他のヒント

同じことを検索している人のために、cakephp がドキュメントを更新しました。翻訳動作については、次へ進みます ここ..

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top