CPhpMessageSource
| Пакет | system.i18n |
|---|---|
| Наследование | class CPhpMessageSource » CMessageSource » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent |
| С | 1.0 |
| Исходный код | framework/i18n/CPhpMessageSource.php |
CPhpMessageSource использует PHP-файлы и массивы для хранения переводов сообщений.
- Все переводы сохраняются в каталоге basePath.
- Переводы на одном языке хранятся в PHP-файлах в отдельных подкаталогах, имена которых совпадают с идентификатором языка. Каждый PHP-файл содержит сообщения, относящиеся к одной категории, и имя файла совпадает с именем категории.
- Внутри PHP-файла возвращается массив пар (исходное сообщение, перевод). Например:
return array( 'original message 1' => 'translated message 1', 'original message 2' => 'translated message 2', );
Сообщения для расширяемого класса (например, виджета, модуля) могут быть специально управляемы и использованы. В частности, если сообщение принадлежит расширению, имя класса которого 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} | строка | путь к файлу сообщений |
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() |
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} | массив | загруженные сообщения |
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