无法找到类别 'mtrelt' 的消息源

Unable to locate message source for category 'mtrelt'

如果我尝试更新记录,我会在没有任何想法的情况下收到以下错误,这个错误是关于什么的或可能是由什么引起的。 此外,奇怪的是,这个错误只会由转储导入的记录引起。如果我更新使用 saveasnew 选项创建的记录,将不会出现错误。不幸的是,我无法删除这条记录以重新创建它,因为它会违反参照完整性。 这是错误:

Invalid Configuration – yii\base\InvalidConfigException
Unable to locate message source for category 'mtrelt'.

throw new InvalidConfigException("Unable to locate message source for category '$category'.")

2. in ...\vendor\yiisoft\yii2\i18n\I18N.php at line 88 – yii\i18n\I18N::getMessageSource('mtrelt')
3. in ...\vendor\yiisoft\yii2\BaseYii.php at line 509 – yii\i18n\I18N::translate('mtrelt', 'Data can't be deleted because it...', [], 'de-DE')

4. in ...\vendor\mootensai\yii2-relation-trait\RelationTrait.php at line 312 – yii\BaseYii::t('mtrelt', 'Data can't be deleted because it...')

这是模型:

<?php

namespace common\modules\lookup\models\base;

use Yii;
use mootensai\behaviors\UUIDBehavior;

class LPersonArt extends \yii\db\ActiveRecord
{
    use \mootensai\relation\RelationTrait;


    public function relationNames()
    {
        return [
            'eAppEinstellungArts',
            'lKontaktVerwendungszwecks',
            'people'
        ];
    }

    public function rules()
    {
        return [
            [['person_art'], 'string', 'max' => 50],
            [['zieltabelle'], 'string', 'max' => 100],
            [['bemerkung'], 'string', 'max' => 255]
        ];
    }

    public static function tableName()
    {
        return 'l_person_art';
    }

    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'person_art' => Yii::t('app', 'Personengruppen'),
            'zieltabelle' => Yii::t('app', 'Zieltabelle'),
            'bemerkung' => Yii::t('app', 'Bemerkung'),
        ];
    }


    public function getEAppEinstellungArts()
    {
        return $this->hasMany(\common\modules\erweiterung\models\EAppEinstellungArt::className(), ['id_person_art' => 'id']);
    }

    public function getLKontaktVerwendungszwecks()
    {
        return $this->hasMany(\common\modules\lookup\models\LKontaktVerwendungszweck::className(), ['id_person_art' => 'id']);
    }

    public function getPeople()
    {
        return $this->hasMany(\common\modules\basis\models\Person::className(), ['id_person_art' => 'id']);
    }

    public function behaviors()
    {
        return [
            'uuid' => [
                'class' => UUIDBehavior::className(),
                'column' => 'id',
            ],
        ];
    }

    public static function find()
    {
        return new \common\modules\lookup\models\LPersonArtQuery(get_called_class());
    }
}

这是控制器:

  public function actionUpdate($id)
    {
        $model = new LPersonArt();
        if (!Yii::$app->request->post('_asnew') == '1'){       
            $model = $this->findModel($id);
        }
        if ($model->load(Yii::$app->request->post()) && $model->saveAll()) {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }

视图如下:

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>

<div class="lperson-art-form">

    <?php $form = ActiveForm::begin(); ?>

    <?= $form->errorSummary($model); ?>

    <?= $form->field($model, 'id', ['template' => '{input}'])->textInput(['style' => 'display:none']); ?>

    <?=
    $form->field($model, 'person_art')->widget(\jlorente\remainingcharacters\RemainingCharacters::classname(), [
        'type' => \jlorente\remainingcharacters\RemainingCharacters::INPUT_TEXTAREA,
        'text' => Yii::t('app', '{n} characters remaining'),
        'options' => [
            'rows' => '3',
            'class' => 'col-md-12',
            'maxlength' => 50,
            'placeholder' => Yii::t('app', 'Write something')
        ]
    ])
    ?>

    <?=
    $form->field($model, 'bemerkung')->widget(\jlorente\remainingcharacters\RemainingCharacters::classname(), [
        'type' => \jlorente\remainingcharacters\RemainingCharacters::INPUT_TEXTAREA,
        'text' => Yii::t('app', '{n} characters remaining'),
        'options' => [
            'rows' => '3',
            'class' => 'col-md-12',
            'maxlength' => 255,
            'placeholder' => Yii::t('app', 'Write something')
        ]
    ])
    ?>

    <div class="form-group">
        <?php if (Yii::$app->controller->action->id != 'save-as-new'): ?>
            <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
        <?php endif; ?>
        <?php if (Yii::$app->controller->action->id != 'create'): ?>
            <?= Html::submitButton(Yii::t('app', 'Save As New'), ['class' => 'btn btn-info', 'value' => '1', 'name' => '_asnew']) ?>
        <?php endif; ?>
        <?= Html::a(Yii::t('app', 'Cancel'), Yii::$app->request->referrer, ['class' => 'btn btn-danger']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

将以下代码添加到

的组件中将解决问题
common/config/main-local.php

      'i18n' => [
            'translations' => [
                '*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@backend/messages', // if advanced application, set @frontend/messages
                    'sourceLanguage' => 'de',
                ],
            ],
        ],

我遇到了类似的问题,但是 Yii2 的错误信息是

Unable to locate message source for category ''

我是 运行 来自控制台的 Gii:

php yii gii/crud --controllerClass="app\controllers\StcDocumentTypeController" --messageCategory="stc_document_type" --enableI18N=1 --enablePjax=1  --interactive=0 --modelClass="app\models\StcDocumentType" --searchModelClass="app\models\StcDocumentTypeSearch"  --overwrite=1

解决方案是在 console.php 配置文件中添加 i18n 配置:

'components' => [
...
'i18n' => [
    'translations' => [
        '*' => [
            'class' => 'yii\i18n\PhpMessageSource',
            'basePath' => '@app/messages',
            'sourceLanguage' => 'en-US',
        ],
    ]
],
...

]

如果您 运行 来自网络,请检查 web.php

中的配置