atis2345
@atis2345
PHP developer

Как вынести локализацию для дефолтного языка в Yii2 в файлы?

Сразу к делу.

// app\config\web.php
return [
	// ...
	'sourceLanguage' => 'en-EN',
	'language' => 'en-EN',
	'i18n' => [
		'translations' => [
            'welcome' => [
                'class'   => 'yii\i18n\PhpMessageSource',
                'fileMap' => [
                    'welcome' => 'welcome.php'
                ],
            ],
        ],
	]
	// ...
];

// app\messages\en-EN\welcome.php
return [
	'h1' => 'Hello!'
];

// app\messages\ru-RU\welcome.php
return [
	'h1' => 'Привет!'
];

<?php Yii::$app->language = 'en-EN' ?>

<!-- h1-->
<h1><?= Yii::t('welcome', 'h1') ?></h1>

<?php Yii::$app->language = 'ru-RU' ?>

<!-- Привет! -->
<h1><?= Yii::t('welcome', 'h1') ?></h1>


Я ожидал увидеть Hello! вместо h1.
Что делаю не так?
  • Вопрос задан
  • 377 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
В встроенном в Yii механизме перевода - если язык приложения совпадает с языком установленным по умолчанию - перевод не осуществляется. Такое поведение определено по умолчанию (поэтому Ваш код и не работает) для того что бы когда пользователь попадал на версию сайта с дефолтным языком, Ваше приложение не выполняло лишней работы по чтению файлов переводов. Вы можете отключить это поведение, включив принудительный перевод, сделав это например так:
return [
  // ...
  'sourceLanguage' => 'en-EN',
  'language' => 'en-EN',
  'i18n' => [
    'translations' => [
            'welcome' => [
                'class'   => 'yii\i18n\PhpMessageSource',
                'forceTranslation' => true,
                'fileMap' => [
                    'welcome' => 'welcome.php'
                ],
            ],
        ],
  ]
  // ...
];


Но в этом случае стоит понимать что при каждом обращении к сайту на дефолтном языке Yii будет лопатить файлы переводов....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы