簡體   English   中英

覆蓋yii2上模塊的轉換路徑

[英]Override translation path of module on yii2

假設我將模塊Foo安裝到帶有composer的存儲庫中。 模塊結構如下:

- Foo
 |- models
 |- controllers
 |- views
 |- messages
 |- config

Foo Messages文件夾包含模塊的翻譯文件。 現在,我想覆蓋一些Foo翻譯字符串。 Yii2 i18n文檔中,我嘗試在配置翻譯組件時使用fileMap屬性,以將bar類別映射到bar.php (而不是從app\\modules\\Foo\\messages中讀取),但是它對翻譯沒有任何影響。 我的i18n組件配置為:

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

我如何實現我的目標?

如果要為模塊中包含的每個模塊提供翻譯,則需要注冊該模塊的翻譯。 不能僅通過配置文件來完成。 您可能已經在模塊文件中添加了此文件,為完整性起見,我僅將其包括在內。 該代碼是從文檔中復制的,並且需要在您的模塊文件中,因此在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

否則,您可以使用fileMap映射到其他位置,例如bar.php文件位於app / messages / [語言代碼]中

'fileMap' => [
'modules/foo/bar' => 'bar.php'
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM