Fixes #1654: Fixed the issue that a new message source object is generated for every new message being translated

This commit is contained in:
Qiang Xue
2013-12-27 09:32:17 -05:00
parent b10c8240b3
commit 5e8a48a60a
3 changed files with 14 additions and 8 deletions

View File

@ -157,19 +157,24 @@ class I18N extends Component
{
if (isset($this->translations[$category])) {
$source = $this->translations[$category];
if ($source instanceof MessageSource) {
return $source;
} else {
return $this->translations[$category] = Yii::createObject($source);
}
} else {
// try wildcard matching
foreach ($this->translations as $pattern => $config) {
if ($pattern === '*' || substr($pattern, -1) === '*' && strpos($category, rtrim($pattern, '*')) === 0) {
$source = $config;
break;
if ($config instanceof MessageSource) {
return $config;
} else {
return $this->translations[$category] = $this->translations[$pattern] = Yii::createObject($config);
}
}
}
}
if (isset($source)) {
return $source instanceof MessageSource ? $source : Yii::createObject($source);
} else {
throw new InvalidConfigException("Unable to locate message source for category '$category'.");
}
throw new InvalidConfigException("Unable to locate message source for category '$category'.");
}
}

View File

@ -105,7 +105,7 @@ class MessageSource extends Component
}
if (isset($this->_messages[$key][$message]) && $this->_messages[$key][$message] !== '') {
return $this->_messages[$key][$message];
} elseif ($this->hasEventHandlers('missingTranslation')) {
} elseif ($this->hasEventHandlers(self::EVENT_MISSING_TRANSLATION)) {
$event = new MissingTranslationEvent([
'category' => $category,
'message' => $message,