我有一个使用四种语言的Yii2应用程序:
我已经实现了语言切换器,并翻译了以下命令生成的所有消息文件:
php yii message/extract @app/config/i18n.php
这是我用于i18n和语言切换器的配置
config / web.php
'bootstrap' => ['log','languageSwitcher'],
'language'=> 'en', // spanish
'sourceLanguage' => 'en',
'i18n' => [
'translations' => [
'app' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
'forceTranslation' => true,
],
'kvgrid' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
'forceTranslation' => true,
],
],
],
'languageSwitcher' => [
'class' => 'app\widgets\languageSwitcher',
],
config / i18n.php
return [
'sourcePath' => __DIR__. DIRECTORY_SEPARATOR .'..',
'messagePath' => __DIR__ . DIRECTORY_SEPARATOR .'..'. DIRECTORY_SEPARATOR . 'messages',
'languages' => ['en','fr','es','po'],
'translator' => 'Yii::t',
'sort' => false,
'overwrite' => true,
'removeUnused' => false,
'markUnused' => true,
'except' => [
'.svn',
'.git',
'.gitignore',
'.gitkeep',
'.hgignore',
'.hgkeep',
'/messages',
'/BaseYii.php',
'/vendor',
],
'only' => [
'*.php',
],
'format' => 'php',
'db' => 'db',
'sourceMessageTable' => '{{%source_message}}',
'messageTable' => '{{%message}}',
'catalog' => 'messages',
'ignoreCategories' => [],
];
widgets / languageSwitcher.php
<?php
namespace app\widgets;
use Yii;
use yii\base\Component;
use yii\base\Widget;
use yii\bootstrap\ButtonDropdown;
use yii\helpers\Url;
use yii\web\Cookie;
use yii\helpers\Html;
class languageSwitcher extends Widget
{
public $languages = [
'en' => 'English',
'fr' => 'Français',
'es' => 'Español',
'po' => 'Português',
];
public function init()
{
if(php_sapi_name() === 'cli')
{
return true;
}
parent::init();
$languageNew = Yii::$app->request->get('language');
if($languageNew)
{
{
Yii::$app->language = $languageNew;
Yii::$app->session->set('language', $languageNew);
}
}
elseif(Yii::$app->session->get('language'))
{
Yii::$app->language = Yii::$app->session->get('language');
}
else
{
Yii::$app->language = 'en';
}
}
public static function getFlag(){
$current = Yii::$app->language; //$languages[Yii::$app->language];
return "<img src='/img/flags/".Yii::$app->language.".png' style='height:20px;'>";
}
public function run(){
$languages = $this->languages;
$current = $languages[Yii::$app->language];
?>
<div>
<?php foreach ($languages as $code => $language): ?>
<?php $cl = "btn-".$code;
$img = "<img src='/img/flags/".$code.".png' style='height:20px;'> ".t($language); ?>
<div class='<?php echo $cl; ?>'>
<?= Html::a($img, Url::current(['language' => $code]));?>
</div>
<?php endforeach; ?>
</div>
<?php
}
}
@ app / messages
当前问题是这样的事实,当我使用语言切换器在语言之间进行切换时,除西班牙语外,每种语言都有效。我看到了英文,法文,葡萄牙文的翻译,但是在西班牙语方面,这些模块使用的是:
Yii:t('app', 'my text');
未翻译。但是,默认的yii2测试是将gridviews中的(not set)
转换为(no definido)
。
我尝试将es
更改为es-ES
并重新生成消息,但这没有成功。
我试图在西班牙语文件中使用法语翻译,但也没有显示。
我尝试在法语翻译文件中使用西班牙语翻译,当我选择法语时会显示翻译。
我尝试删除forceTranslation
为什么该翻译不适用于西班牙语,但适用于其他语言?