Переопределить путь перевода модуля на yii2

предположим я установил модуль Foo создайте репозиторий с помощью composer. Структура модуля выглядит следующим образом:

- Foo
 |- models
 |- controllers
 |- views
 |- messages
 |- config

на Foo содержит файлы перевода модуля. Теперь я хочу переопределить некоторые строки перевода Foo. От коде с Yii2 как i18n документации Я попытался использовать свойство fileMap для настройки компонента перевода на карту до bar.php (вместо чтения из appmodulesFoomessages), но он не имеет никакого влияния на переводы. Моя конфигурация компонента i18n:

'i18n' => [
    'translations' => [
        '*' => [
            'class' => 'yiii18nPhpMessageSource',
            'fileMap' => [
                'bar' => 'bar.php'
            ],
        ],
    ],
],

как я могу достичь мои цели?

1 ответов


если вы хотите иметь переводы для каждого модуля, содержащегося в модуле, то вам нужно зарегистрировать переводы для этого модуля. Это нельзя сделать просто из файла config. Вероятно, у вас уже есть это в файле модуля, я просто включаю для полноты. Код копируется из документации и должен быть в файле модуля, поэтому в app/modules/Foo.php

<?php

namespace app\modules\foo;

use Yii;

class Module extends \yii\base\Module
{
    public $controllerNamespace = 'app\modules\foo\controllers';

    public function init()
    {
        parent::init();
    /** Register custom translations for this module **/
        $this->registerTranslations();
    }

    public function registerTranslations()
    {

    /**This registers translations for the Foo module **/
        Yii::$app->i18n->translations['modules/foo/*'] = [
            'class' => 'yii\i18n\PhpMessageSource',
            'sourceLanguage' => 'en-US',
            'basePath' => '@app/modules/foo/messages',

    /**Tells yii where to find the translations for validation and form categories **/
            'fileMap' => [
                'modules/foo/validation' => 'validation.php',
                'modules/foo/form' => 'form.php',
                ...
            ],
        ];
    }

    public static function t($category, $message, $params = [], $language = null)
    {
        return Yii::t('modules/users/' . $category, $message, $params, $language);
    }

}

в вашем случае не похоже, что вам нужно предоставить сопоставление файлов.Вы можете просто использовать этот формат для ваших файлов

[[basePath]]/LanguageID/CategoryName.php

к сожалению, я не могу найти список доступных категорий.

если вы хотите переопределить некоторые переводы модулей, вам нужно будет указать категорию, которая будет использоваться, например, в файле конфигурации. Он специально переопределяет категорию modules/foo/bar.

'i18n' => [
    'translations' => [
        'modules/foo*' => [
            'class' => 'yii\i18n\PhpMessageSource',
            'basePath' => '@app/messages',
        ],
    ],
],

ваш файл перевода должен следовать структуре папок, как в описании перевода, так что в приведенном выше примере это будет будь

app/messages/ [language code] /modules/foo/bar.php

Otherise, вы можете использовать fileMap на карте в разных местах, например, если ваш бар.php-файл находится в приложении / messages / [код языка]

'fileMap' => [
'modules/foo/bar' => 'bar.php'
]