4

を設定し3 environmentsました。

各環境が異なるため、私のアプリは異なる翻訳セットをロードする必要があります。

私は、、RO言語を持っています。HUDE

翻訳を設定しようとしていますが、うまくいきません。

frontend/config main.php には次のものがあります。

'sourceLanguage' => 'en', 'language' => 'en',

frontend/web/index.php私が持っている:

defined('YII_ENV') or define('YII_ENV', 'dev_ro');

また、構成配列をマージしています:

(file_exists(__DIR__ . '/../../environments/' . YII_ENV . '/common/config/main-local.php') ? require(__DIR__ . '/../../environments/' . YII_ENV . '/common/config/main-local.php') : [])

今、environments/dev_ro/common/config/componentsは持っています:

'i18n' => [
            'translations' => [
                'companie' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@app/messages',
                    'sourceLanguage' => 'en',
                    'fileMap' => [
                        'companie' => 'companie.php',
                    ],
                ],
            ],
        ],

Companie私が持っているモデルで:

'nume' => Yii::t('companie', 'Name'),

これは私のもので、映画です:

映画

4

2 に答える 2

2

問題は app* にあります。これは app* カテゴリではないため、次のように動作します。

    'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'fileMap' => [
                    'companie' => 'companie.php',
                ],
            ],
        ],
    ],

または、書きたい場合'companie*' =>

それでも機能しない場合は、ファイルを翻訳するために間違ったパスを設定しています。デフォルトでは、 である必要がありますBasePath/messages/LanguageID/CategoryName.php

バックエンドとフロントエンドで 1 つのファイルを使用する場合は、たとえば、共通構成 (高度な yii アプリケーション) で共通エイリアスを作成し、このエイリアスを i18n 構成で設定する必要があります。これは完全な例です:

一般的な構成:

Yii::setAlias('@common', dirname(__DIR__));
return [
    'language' => 'ru',
    'sourceLanguage' => 'ru',
    'components' => [
    'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@common/messages',
                'fileMap' => [
                    'companie' => 'companie.php',
                ],
  ....

翻訳ファイル /common/messages/en-US/companie.php 内

<?php
return [
    'string in russian' => 'string in english'
];

このコードを使用して翻訳を確認します。

\Yii::$app->language = 'en-US';
echo \Yii::t('companie', 'string in russian');
于 2014-04-23T15:58:12.253 に答える
0

言語コードとフォルダー名のダッシュをアンダースコアに置き換えることもできます。

en-US >> en_US

私のために働きます。

于 2015-06-25T17:08:09.003 に答える