Переопределить путь перевода модуля на 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'
]