Spec-Zone.ru › Yii 1.1

CDbMessageSource

Пакет system.i18n
Наследование класс CDbMessageSource » CMessageSource » CApplicationComponent » CComponent
Реализует IApplicationComponent
С версии 1.0
Исходный код framework/i18n/CDbMessageSource.php
CDbMessageSource представляет собой источник сообщений, хранящий переведённые сообщения в базе данных.

База данных должна содержать следующие две таблицы:
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
END_OF_DOCUMENT_MARKER

Защищенные методы

Метод Описание Определено в
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 подключение к БД, используемое для источника сообщений.
Исходный код: framework/i18n/CDbMessageSource.php#102 (показать)
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} массив загруженные сообщения
Исходный код: framework/i18n/CDbMessageSource.php#77 (показать)
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} массив сообщения, загруженные из базы данных
Исходный код: framework/i18n/CDbMessageSource.php#122 (показать)
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API