Php 使Yii::t()与Yii中的扩展一起工作的步骤

Php 使Yii::t()与Yii中的扩展一起工作的步骤,php,yii,Php,Yii,我创建了一个名为GalleryManager的扩展,它存储在应用程序的extensions目录中。 我有这样的结构: gallerymanager |-- assets |-- messages | |-- en | | |-- main.php | |-- es | | |-- main.php | GalleryManager.php 我的GalleryManager类(在GalleryManager.php中定义)如下所示: 以下是关于定义翻

我创建了一个名为GalleryManager的扩展,它存储在应用程序的extensions目录中。 我有这样的结构:

gallerymanager
|--  assets
|--  messages
|    |-- en
|    |    |-- main.php
|    |-- es
|    |    |-- main.php
|    GalleryManager.php
我的GalleryManager类(在GalleryManager.php中定义)如下所示:

以下是关于定义翻译类别的说明:

扩展类(例如小部件、模块)的消息可以是 专门管理和使用。特别是,如果消息属于 类名称为Xyz的扩展名,则消息类别可以是 以“Xyz.categoryName”格式指定。以及相应的 消息文件假定为 'BasePath/messages/LanguageID/categoryName.php',其中'BasePath' 指包含扩展类文件的目录。什么时候 使用Yii::t()翻译扩展消息,即类别名称 应设置为“Xyz.categoryName”

所以,我在一个视图中尝试这样一行:

<?php echo Yii::t('GalleryManager.main', 'Add');?>

但它不起作用。
我还需要做什么才能使Yii扩展的翻译工作正常?

您所做的一切都是正确的,并且符合文档要求

您确定在主配置中正确声明了扩展吗?你应该有:

'components' => array(
            /* load extension */
            'GalleryManager' => array(
                'class' => 'app.extensions.GalleryManager',
            ),

有时我自己也不会加载这样的扩展(因为它在其他情况下仍然有效),但对于要工作的消息,我相信您也必须在配置中声明它。

您的消息不应该在
保护/messages/
中吗?@AliMasudianPour no,根据文档,默认情况下,
消息
目录应该存储在包含类文件的目录中(在我的例子中,它是我在dir结构中显示的)。是的,我在
config/main.php
部分声明它,但如下所示:
'components'=>数组(/*load extension*/'gallerymanager'=>array('class'=>'app.extensions.gallerymanager.gallerymanager',),
它错了吗?看起来不错,你能试试看它是否有效吗?(注意,我使用的不是gallerymanager,而是gallerymanager)。我相信它可能区分大小写,并且您的文件夹名为gallerymanager而不是gallerymanager。请尝试手动定义CPhpMessageSource的处理程序。请参阅更多详细信息和。在配置中,您应该具有“messages”=>array(“class”=>“CPhpMessageSource”,“ExtensionPath”=>array)('GalleryManager'=>'app.extensions.GalleryManager.messages',),)
'components' => array(
            /* load extension */
            'GalleryManager' => array(
                'class' => 'app.extensions.GalleryManager',
            ),