Похоже, что это невозможно сделать с CPhpMessageSource, вы должны расширить и создать свой собственный класс сообщений.
Вам необходимо изменить файл конфигурации, т.е. config / main.php .
'components'=>array(
...........
'messages' => array(
'class' => 'MyPhpMessageSource',
),
.............
и вот пример MyPhpMessageSource.php, который работает для ваших нужд.
class MyPhpMessageSource extends CPhpMessageSource {
private $_files=array();
protected function getMessageFile($category,$language)
{
if(!isset($this->_files[$category][$language]))
{
$parts = explode('.', $category);
$count = count($parts);
if( $count > 1 ) {
$filePath = '';
$moduleClass=$parts[$count-2];
$class=new ReflectionClass($moduleClass);
$filePath .= dirname($class->getFileName()).DIRECTORY_SEPARATOR;
/*
for($i=0; $i<$count-1; $i++) {
$moduleClass=$parts[$i];
if($i == 0) {
$class=new ReflectionClass($moduleClass);
$filePath .= dirname($class->getFileName()).DIRECTORY_SEPARATOR;
} else
$filePath .= $moduleClass.DIRECTORY_SEPARATOR;
}
*/
$filePath .= 'messages' . DIRECTORY_SEPARATOR . $language . DIRECTORY_SEPARATOR . $parts[$count-1] . '.php';
echo "$filePath<br/>";
$this->_files[$category][$language] = $filePath;
}
else
$this->_files[$category][$language]=$this->basePath.DIRECTORY_SEPARATOR.$language.DIRECTORY_SEPARATOR.$category.'.php';
}
return $this->_files[$category][$language];
}
}