Php 使Yii::t()与Yii中的扩展一起工作的步骤
我创建了一个名为GalleryManager的扩展,它存储在应用程序的extensions目录中。 我有这样的结构: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
|-- 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',
),