###前提・実現したいこと
CakePHPにて多言語対応のシステムを構築しております。
ユーザー登録画面にて、通常のユーザー登録と同時に日本語表示名の登録を行いたいです。
- 多言語化の基本的な部分はできている
- 選択言語はクッキーに保存している(jpn or eng)
- Userテーブルは、Authコンポーネントを利用している。
登録フォームinputフィールド
username:user1
password:pass1
japanese_username(日本語表示名):ユーザー1
usersテーブル
id | username | password | group_id | created | modified |
---|---|---|---|---|---|
1 | user1 | pass1 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
2 | user2 | pass2 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
user_i18nsテーブル
id | locale | model | foreign_key | field | content |
---|---|---|---|---|---|
1 | jpn | User | 1 | username | ユーザー1 |
2 | jpn | User | 2 | username | ユーザー2 |
最終的に上記のように、データベースに登録を行いたいです。
i18nの基本的な使い方しか理解しておりませんので、方針などご提案いただければと思います。
###課題
- 選択言語に係らず、usernameはusernameに、日本語表示名をuser_i18nsテーブルのjpnのcontentに入れたい。
###該当のソースコード
php
1 2class AdminsController extends AppController{ 3 public $name = 'Admins'; 4 public $uses = array('User'); 5 6 public function beforeFilter() { 7 parent::beforeFilter(); 8 //read cookie, language setting: 'eng' or 'jpn' 9 switch ($this->Cookie->read('selectlanguage')){ 10 case 'jpn': 11 Configure::write('Config.language', 'jpn'); 12 $this->User->locale='jpn'; 13 break; 14 default: 15 Configure::write('Config.language', 'eng'); 16 $this->User->locale=false; 17 break; 18 } 19 } 20 21 public function add(){ 22 if($this->request->is('post')) { 23 $this->User->save($this->request->data); 24 } 25 } 26 27}
php
1<?= $this->Form->create('User', array('url' => 'add')) ?> 2<?= $this->Form->input('User.username',array('label'=>__('username'))) ?> 3<?= $this->Form->input('User.password',array('label'=>__('password'))) ?> 4 5<!--- ここに input 日本語表示名を追加したい ---> 6 7<?= $this->Form->end(__('send')) ?>
php
1class User extends AppModel { 2 public $name = 'User'; 3 public $actsAs = array( 4 'Translate' => array( 5 'username' 6 ) 7 ); 8 public $translateModel = 'UserI18n'; 9}
###現状
- 選択言語により、usernameフィールドに入力された値がuser_i18nsのcontentに保存される。
$this->User->locale='jpn'; ```の場合、userのusername、user_i18nsのcontent、両方に保存される ###試したこと [http://book.cakephp.org/2.0/ja/core-libraries/behaviors/translate.html](http://book.cakephp.org/2.0/ja/core-libraries/behaviors/translate.html) の"フィールドに対するすべての翻訳レコードを取得する"を参考に、取得できるなら保存もできるかと思ったが、動作は変わらず。
public $actsAs = array(
'Translate' => array(
'username'=>'usernameTranslation'
)
);
<?= $this->Form->input('User.username',array('label'=>__('username'))) ?> <?= $this->Form->input('User.usernameTranslation.jpn',array('label'=>__('japanese_username'))) ?>
[http://book.cakephp.org/3.0/en/orm/behaviors/translate.html](http://book.cakephp.org/3.0/en/orm/behaviors/translate.html) CakePHP3では、TranslateTraitというものがあるようですが、実現したいことはこのような事だと思います。 ###補足情報(言語/FW/ツール等のバージョンなど) CakePHP 2.8.5 PHP 5.6.22 MySQL 5.5.45
回答2件
あなたの回答
tips
プレビュー