I18n yii2 получить все сообщения
Добавлено: 2019.04.03, 19:55
Приветствую,подскажите как получить все сообщения определенного языка в I18n .
Форум Yii-программистов
https://www.yiiframework.ru/forum/
Ну вот я в корне проекта в папку lang,положил класс
Код: Выделить всё
<?php
namespace app\lang;
class PhpMessageSource extends \yii\i18n\PhpMessageSource
{
/**
* Loads the message translation for the specified $language and $category.
* If translation for specific locale code such as `en-US` isn't found it
* tries more generic `en`. When both are present, the `en-US` messages will be merged
* over `en`. See [[loadFallbackMessages]] for details.
* If the $language is less specific than [[sourceLanguage]], the method will try to
* load the messages for [[sourceLanguage]]. For example: [[sourceLanguage]] is `en-GB`,
* $language is `en`. The method will load the messages for `en` and merge them over `en-GB`.
*
* @param string $category the message category
* @param string $language the target language
* @return array the loaded messages. The keys are original messages, and the values are the translated messages.
* @see loadFallbackMessages
* @see sourceLanguage
*/
public function loadMessages($category, $language)
{
$messageFile = $this->getMessageFilePath($category, $language);
$messages = $this->loadMessagesFromFile($messageFile);
$fallbackLanguage = substr($language, 0, 2);
$fallbackSourceLanguage = substr($this->sourceLanguage, 0, 2);
if ($language !== $fallbackLanguage) {
$messages = $this->loadFallbackMessages($category, $fallbackLanguage, $messages, $messageFile);
} elseif ($language === $fallbackSourceLanguage) {
$messages = $this->loadFallbackMessages($category, $this->sourceLanguage, $messages, $messageFile);
} else {
if ($messages === null) {
Yii::warning("The message file for category '$category' does not exist: $messageFile", __METHOD__);
}
}
return (array) $messages;
}
}
Код: Выделить всё
'i18n' => [
'translations' => [
'app*' => [
'class' => 'app\lang\PhpMessageSource',
'basePath' => '@app/lang',
'fileMap' => [
'app' => 'app.php',
'app/error' => 'error/main.php',
'app/error_rest' => 'error/rest.php',
],
],
],
],
Код: Выделить всё
public function actionTest()
{
$lang = new PhpMessageSource();
return ['test'=> $lang->loadMessages('app','ru')];
}
Код: Выделить всё
$lang = ...
Код: Выделить всё
$lang = Yii::$app->i18n->getMessageSource('app*')
Не видит он метод в i18n.someweb писал(а): ↑2019.04.10, 09:28 Где же он настроен. Откуда конструктор объекта должен знать, что надо взять данные из какого то левого файла?
Создайте так (из конфига приложения)Сорри, так нельзя, скорее всего там уже будет объект.Код: Выделить всё
$lang = ...
Получите так:Код: Выделить всё
$lang = Yii::$app->i18n->getMessageSource('app*')