Create the following tables:
CREATE TABLE SourceMessage
(
id INTEGER PRIMARY KEY,
category VARCHAR(32),
message TEXT
);
CREATE TABLE Message
(
id INTEGER,
language VARCHAR(16),
translation TEXT,
PRIMARY KEY (id, language),
CONSTRAINT FK_Message_SourceMessage FOREIGN KEY (id)
REFERENCES SourceMessage (id) ON DELETE CASCADE ON UPDATE RESTRICT
);
INSERT INTO `SourceMessage` (`id`, `category`, `message`) VALUES
(1, 'foo', 'Hello');
INSERT INTO `Message` (`id`, `language`, `translation`) VALUES
(1, 'es', 'Hola');
Put component into the main config:
'components' => array(
...
'messages'=>array(
'class'=>'CDbMessageSource'
),
...
)
Use it everywhere:
class FooController extends CController {
function actionBar() {
Yii::app()->setLanguage('es');
echo Yii::t('foo', 'Hello'); die; // will output 'Hola'
}
}