CDbMessageSource
| Пакет | system.i18n |
|---|---|
| Наследование | класс CDbMessageSource » CMessageSource » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent |
| С версии | 1.0 |
| Исходный код | framework/i18n/CDbMessageSource.php |
База данных должна содержать следующие две таблицы:
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
);
Таблица 'SourceMessage' хранит сообщения, которые необходимо перевести, а таблица 'Message' хранит переведённые сообщения. Название этих двух таблиц можно настроить, задав sourceMessageTable и translatedMessageTable соответственно. Если cachingDuration установлено как положительное число, переводы сообщений будут кэшироваться.
Общественные свойства
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| behaviors | массив | поведения, которые должны быть прикреплены к этому компоненту. | CApplicationComponent |
| cacheID | строка | идентификатор компонента приложения кэша, используемого для кэширования сообщений. | CDbMessageSource |
| cachingDuration | целое число | время в секундах, в течение которого сообщения могут оставаться действительными в кэше. | CDbMessageSource |
| connectionID | строка | идентификатор компонента приложения подключения к базе данных. | CDbMessageSource |
| dbConnection | CDbConnection | Возвращает подключение к базе данных, используемое для источника сообщений. | CDbMessageSource |
| forceTranslation | булево | принудительно переводить сообщения, когда языки исходные и целевые совпадают. | CMessageSource |
| isInitialized | булево | Проверяет, был ли этот компонент приложения инициализирован. | CApplicationComponent |
| language | строка | язык, на котором написаны исходные сообщения. | CMessageSource |
| sourceMessageTable | строка | имя таблицы исходных сообщений. | CDbMessageSource |
| translatedMessageTable | строка | имя таблицы переведённых сообщений. | CDbMessageSource |
Общественные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| asa() | Возвращает объект именованного поведения. | CComponent |
| attachBehavior() | Прикрепляет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, может ли свойство быть прочитано. | CComponent |
| canSetProperty() | Определяет, может ли свойство быть установлено. | CComponent |
| detachBehavior() | Открепляет поведение от компонента. | CComponent |
| detachBehaviors() | Открепляет все поведения от компонента. | CComponent |
| detachEventHandler() | Открепляет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает прикреплённое поведение. | CComponent |
| disableBehaviors() | Отключает все прикреплённые поведения этого компонента. | CComponent |
| enableBehavior() | Включает прикреплённое поведение. | CComponent |
| enableBehaviors() | Включает все прикреплённые поведения к этому компоненту. | CComponent |
| evaluateExpression() | Вычисляет PHP выражение или обратный вызов в контексте этого компонента. | CComponent |
| getDbConnection() | Возвращает подключение к базе данных, используемое для источника сообщений. | CDbMessageSource |
| getEventHandlers() | Возвращает список прикреплённых обработчиков событий для события. | CComponent |
| getIsInitialized() | Проверяет, был ли этот компонент приложения инициализирован. | CApplicationComponent |
| getLanguage() | Возвращает язык, на котором написаны исходные сообщения. По умолчанию — язык приложения. | CMessageSource |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли прикреплённые обработчики для события с указанным именем. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует компонент приложения. | CApplicationComponent |
| onMissingTranslation() | Срабатывает, когда сообщение невозможно перевести. | CMessageSource |
| raiseEvent() | Вызывает событие. | CComponent |
| setLanguage() | Устанавливает язык, на котором написаны исходные сообщения. | CMessageSource |
| translate() | Переводит сообщение на указанный язык. | CMessageSource |
Защищенные методы
| Метод | Описание | Определено в |
|---|---|---|
| loadMessages() | Загружает перевод сообщений для указанного языка и категории. | CDbMessageSource |
| loadMessagesFromDb() | Загружает сообщения из базы данных. | CDbMessageSource |
| translateMessage() | Переводит указанное сообщение. | CMessageSource |
События
| Событие | Описание | Определено в |
|---|---|---|
| onMissingTranslation | Срабатывает, когда сообщение не может быть переведено. | CMessageSource |
Подробности свойств
cacheID свойство
public string $cacheID;
Идентификатор компонента кэширования приложения, используемого для кэширования сообщений. По умолчанию 'cache', что относится к основному компоненту кэширования приложения. Установите это свойство в false, чтобы отключить кэширование сообщений.
cachingDuration свойство
public integer $cachingDuration;
Время в секундах, в течение которого сообщения могут оставаться действительными в кэше. По умолчанию 0, что означает отключение кэширования.
connectionID свойство
public string $connectionID;
Идентификатор компонента подключения к базе данных. По умолчанию 'db'.
dbConnection свойство только для чтения (доступно начиная с v1.1.5)
public CDbConnection getDbConnection()
Возвращает подключение к БД, используемое для источника сообщений.
sourceMessageTable свойство
public string $sourceMessageTable;
Имя таблицы исходных сообщений. По умолчанию 'SourceMessage'.
translatedMessageTable свойство
public string $translatedMessageTable;
Имя таблицы переведенных сообщений. По умолчанию 'Message'.
Подробности методов
getDbConnection() метод (доступен начиная с v1.1.5)
public CDbConnection getDbConnection() | ||
| {return} | CDbConnection | подключение к БД, используемое для источника сообщений. |
public function getDbConnection()
{
if($this->_db===null)
{
$this->_db=Yii::app()->getComponent($this->connectionID);
if(!$this->_db instanceof CDbConnection)
throw new CException(Yii::t('yii','CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.',
array('{id}'=>$this->connectionID)));
}
return $this->_db;
}
Возвращает подключение к БД, используемое для источника сообщений.
loadMessages() метод
protected array loadMessages(string $category, string $language) | ||
| $category | строка | категория сообщения |
| $language | строка | целевой язык |
| {return} | массив | загруженные сообщения |
protected function loadMessages($category,$language)
{
if($this->cachingDuration>0 && $this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null)
{
$key=self::CACHE_KEY_PREFIX.'.messages.'.$category.'.'.$language;
if(($data=$cache->get($key))!==false)
return unserialize($data);
}
$messages=$this->loadMessagesFromDb($category,$language);
if(isset($cache))
$cache->set($key,serialize($messages),$this->cachingDuration);
return $messages;
}
Загружает перевод сообщений для указанного языка и категории.
loadMessagesFromDb() метод (доступен начиная с v1.1.5)
protected array loadMessagesFromDb(string $category, string $language) | ||
| $category | строка | категория сообщения |
| $language | строка | целевой язык |
| {return} | массив | сообщения, загруженные из базы данных |
protected function loadMessagesFromDb($category,$language)
{
$command=$this->getDbConnection()->createCommand()
->select("t1.message AS message, t2.translation AS translation")
->from(array("{$this->sourceMessageTable} t1","{$this->translatedMessageTable} t2"))
->where('t1.id=t2.id AND t1.category=:category AND t2.language=:language',array(':category'=>$category,':language'=>$language))
;
$messages=array();
foreach($command->queryAll() as $row)
$messages[$row['message']]=$row['translation'];
return $messages;
}
Загружает сообщения из базы данных. Вы можете переопределить этот метод, чтобы настроить хранение сообщений в базе данных.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbMessageSource