Yii2翻译不适用于西班牙语,但适用于其他语言

时间:2019-06-25 09:56:56

标签: php yii2

我有一个使用四种语言的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

structure of message folder

当前问题是这样的事实,当我使用语言切换器在语言​​之间进行切换时,除西班牙语外,每种语言都有效。我看到了英文,法文,葡萄牙文的翻译,但是在西班牙语方面,这些模块使用的是:

Yii:t('app', 'my text');

未翻译。但是,默认的yii2测试是将gridviews中的(not set)转换为(no definido)

  • 我尝试将es更改为es-ES并重新生成消息,但这没有成功。

  • 我试图在西班牙语文件中使用法语翻译,但也没有显示。

  • 我尝试在法语翻译文件中使用西班牙语翻译,当我选择法语时会显示翻译。

  • 我尝试删除forceTranslation

为什么该翻译不适用于西班牙语,但适用于其他语言?

0 个答案:

没有答案