Spec-Zone.ru › Yii 1.1

CPhpMessageSource

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

CPhpMessageSource использует PHP-файлы и массивы для хранения переводов сообщений.
  • Все переводы сохраняются в каталоге basePath.
  • Переводы на одном языке хранятся в PHP-файлах в отдельных подкаталогах, имена которых совпадают с идентификатором языка. Каждый PHP-файл содержит сообщения, относящиеся к одной категории, и имя файла совпадает с именем категории.
  • Внутри PHP-файла возвращается массив пар (исходное сообщение, перевод). Например:
    return array(
        'original message 1' => 'translated message 1',
        'original message 2' => 'translated message 2',
    );
    
Когда cachingDuration задано положительным числом, переводы сообщений будут кэшироваться.

Сообщения для расширяемого класса (например, виджета, модуля) могут быть специально управляемы и использованы. В частности, если сообщение принадлежит расширению, имя класса которого Xyz, то категория сообщений может быть указана в формате 'Xyz.categoryName'. И соответствующий файл сообщений предполагается 'BasePath/messages/LanguageID/categoryName.php', где 'BasePath' относится к каталогу, содержащему файл класса расширения. При использовании Yii::t() для перевода сообщения расширения, имя категории должно быть установлено как 'Xyz.categoryName'.

Свойства public

Свойство Тип Описание Определено
basePath string базовый путь для всех переведённых сообщений. CPhpMessageSource
behaviors array поведения, которые должны быть прикреплены к этому компоненту. CApplicationComponent
cacheID string идентификатор компонента кэширования приложения, используемого для кэширования сообщений. CPhpMessageSource
cachingDuration integer время в секундах, в течение которого сообщения могут оставаться действительными в кэше. CPhpMessageSource
extensionPaths array пути сообщений для расширений, у которых нет базового класса для использования в качестве префикса категории. CPhpMessageSource
forceTranslation boolean вынудить перевод сообщений, когда исходный и целевой языки одинаковы. CMessageSource
isInitialized boolean Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
language string язык, на котором написаны исходные сообщения. CMessageSource

Методы public

Метод Описание Определено
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. 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
getEventHandlers() Возвращает список прикреплённых обработчиков событий для события. CComponent
getIsInitialized() Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
getLanguage() Возвращает язык, на котором написаны исходные сообщения. По умолчанию - язык приложения. CMessageSource
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли у события прикреплённые обработчики. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует компонент приложения. CPhpMessageSource
onMissingTranslation() Возникает, когда сообщение не может быть переведено. CMessageSource
raiseEvent() Вызывает событие. CComponent
setLanguage() Устанавливает язык, на котором написаны исходные сообщения. CMessageSource
translate() Переводит сообщение на указанный язык. CMessageSource

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

Метод Описание Определено в
getMessageFile() Определяет имя файла сообщений на основе заданной категории и языка. CPhpMessageSource
loadMessages() Загружает перевод сообщений для указанного языка и категории. CPhpMessageSource
translateMessage() Переводит указанное сообщение. CMessageSource

События

Событие Описание Определено в
onMissingTranslation Срабатывает, когда сообщение не может быть переведено. CMessageSource

Подробное описание свойств

basePath свойство

public string $basePath;

базовый путь для всех переведённых сообщений. По умолчанию null, что означает подкаталог "messages" в каталоге приложения (например, "protected/messages").

cacheID свойство

public string $cacheID;

идентификатор компонента кэша приложения, используемого для кэширования сообщений. По умолчанию 'cache', что ссылается на основной компонент кэша приложения. Установите это свойство в false, если хотите отключить кэширование сообщений.

cachingDuration свойство

public integer $cachingDuration;

время в секундах, в течение которого сообщения могут оставаться действительными в кэше. По умолчанию 0, что означает отключение кэширования.

extensionPaths свойство (доступно с версии v1.1.13)

public array $extensionPaths;

пути сообщений для расширений, у которых нет базового класса, используемого в качестве префикса категории. Формат массива должен быть:

array(
    'ExtensionName' => 'ext.ExtensionName.messages',
)
Где ключ — имя расширения, а значение — псевдоним пути к подкаталогу "messages" расширения. При использовании Yii::t() для перевода сообщения расширения, имя категории должно быть установлено как 'ИмяРасширения.имяКатегории'. По умолчанию пустой массив, что означает отсутствие зарегистрированных расширений.

Подробное описание методов

getMessageFile() метод

protected string getMessageFile(string $category, string $language)
$category строка имя категории
$language строка идентификатор языка
{return} строка путь к файлу сообщений
Исходный код: framework/i18n/CPhpMessageSource.php#104 (показать)
protected function getMessageFile($category,$language)
{
    if(!isset(
$this->_files[$category][$language]))
    {
        if((
$pos=strpos($category,'.'))!==false)
        {
            
$extensionClass=substr($category,0,$pos);
            
$extensionCategory=substr($category,$pos+1);
            
// First check if there's an extension registered for this class.
            
if(isset($this->extensionPaths[$extensionClass]))
                
$this->_files[$category][$language]=Yii::getPathOfAlias($this->extensionPaths[$extensionClass]).DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$extensionCategory.'.php';
            else
            {
                
// No extension registered, need to find it.
                
$class=new ReflectionClass($extensionClass);
                
$this->_files[$category][$language]=dirname($class->getFileName()).DIRECTORY_SEPARATOR.'messages'.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$extensionCategory.'.php';
            }
        }
        else
            
$this->_files[$category][$language]=$this->basePath.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$category.'.php';
    }
    return 
$this->_files[$category][$language];
}

Определяет имя файла сообщений на основе заданной категории и языка. Если имя категории содержит точку, она будет разделена на имя класса модуля и имя категории. В этом случае предполагается, что файл сообщений находится в подкаталоге 'messages' каталога, содержащего файл класса модуля. В противном случае, файл сообщений предполагается в basePath.

init() метод

public void init()
Исходный код: framework/i18n/CPhpMessageSource.php#87 (показать)
public function init()
{
    
parent::init();
    if(
$this->basePath===null)
        
$this->basePath=Yii::getPathOfAlias('application.messages');
}

Инициализирует компонент приложения. Этот метод переопределяет родительскую реализацию, предварительно обрабатывая данные запроса пользователя.

loadMessages() метод

protected array loadMessages(string $category, string $language)
$category строка категория сообщений
$language строка целевой язык
{return} массив загруженные сообщения
Исходный код: framework/i18n/CPhpMessageSource.php#134 (показать)
protected function loadMessages($category,$language)
{
    
$messageFile=$this->getMessageFile($category,$language);

    if(
$this->cachingDuration>0 && $this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null)
    {
        
$key=self::CACHE_KEY_PREFIX . $messageFile;
        if((
$data=$cache->get($key))!==false)
            return 
unserialize($data);
    }

    if(
is_file($messageFile))
    {
        
$messages=include($messageFile);
        if(!
is_array($messages))
            
$messages=array();
        if(isset(
$cache))
        {
            
$dependency=new CFileCacheDependency($messageFile);
            
$cache->set($key,serialize($messages),$this->cachingDuration,$dependency);
        }
        return 
$messages;
    }
    else
        return array();
}

Загружает перевод сообщений для указанного языка и категории.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CPhpMessageSource

Spec-Zone.ru

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