zend framework 多语言配置及实例 zend_translate实例

本文介绍了两种在Zend Framework中实现多语言配置的方法。第一种通过application.ini配置资源,Bootstrap.php初始化翻译,IndexController.php处理语言切换,视图中使用translate助手函数。第二种直接在index.php中创建翻译实例,通过Zend_Registry获取翻译对象。同时提供了语言文件示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:

application.ini中的配置:

resources.locale.default = "zh_CN"

resources.translate.registry_key = "Zend_Translate"

resources.translate.adapter = array

resources.translate.options.scan = "directory"

resources.translate.locale = "zh_CN"

resources.translate.data.zh_CN = APPLICATION_PATH "/languages/zh_CN.php"

resources.translate.data.en_US = APPLICATION_PATH "/languages/en_US.php"


Bootstrap.php如下:

classBootstrap extends Zend_Application_Bootstrap_Bootstrap

{

    protected function_initTranslate ()

    {

        $options = $this->getOption('resources');

        $options = $options['translate'];

        if (! isset($options['data'])) {

            throw new Zend_Application_Resource_Exception('对不起,没有找到语言文件!');

        }

        $adapter = isset($options['adapter']) ? $options['adapter'] : Zend_Translate::AN_ARRAY;

        $session = new Zend_Session_Namespace('aa');

        if ($session->locale) {

            $locale = $session->locale;

        } else {

            $locale =isset($options['locale']) ? $options['locale'] :null;

        }

        $data = '';

        if (isset($options['data'][$locale])) {

            $data = $options['data'][$locale];

        }

        $translateOptions =isset($options['options']) ? $options['options'] :array();

        $translate =new Zend_Translate($adapter, $data, $locale, 

        $translateOptions);

        Zend_Form::setDefaultTranslator($translate);

        Zend_Registry::set('Zend_Translate', $translate);

        return $translate;

    }

}


IndexController.php如下:

 public functionchangeAction()

{

    $this->getFrontController()->setParam('noViewRenderer',true);

    $language=$this->getRequest()->getParam('language');

    $lang=new Zend_Session_Namespace('aa');

    if ($language == 'zh_CN'){

        $lang->locale='zh_CN';

    }elseif($language == 'en_US'){

    $lang->locale='en_US';

    }else{

        $lang->locale='zh_CN';

    }

   echo "<script>location.href=document.referrer;</script>";

}


视图index.phtml如下:

<div>

<h1><?php echo $this->translate('teacher');?></h1>

<h2><?php echo $this->translate('hello_world');?></h2>

<h3><?phpecho $this->translate('document');?></h3>

<a href="<?php echo $this->baseUrl();?>/index/change/language/<?php echo $this->translate('get_lg'); ?>">

<?php echo $this->translate('language');?></a>

</div>


application/languages下的两个语言文件:

en_US.php文件如下:

<?php 

return array(

    'hello_world'=> 'Hello_World',

    'document'  => 'Document',

    'teacher'  => 'Teacher',

    'get_lg'  => 'zh_CN',

    'language'  => '简体中文',

);

?>


zh_CN.php文件如下:

<?php 

return array(

    'hello_world'=>'你好世界',

    'document'=>'文档',

    'teacher'=>'老师',

    'get_lg'=>'en_US',

    'language'=>'English',

);

?>


方法二:

在index.php文件中加上:

$translate = new Zend_Translate(array(
        'adapter'   => Zend_Translate::AN_ARRAY,
        'content'   => '../languages/zh/zh.php',
        'locale'    => 'zh',
        'delimiter' => ',',
        'scan'      => Zend_Translate::LOCALE_DIRECTORY
));
Zend_Registry::set('Zend_Translate', $translate);

然后在对应的地方就可以通过以下方式获取对应的值了:

Zend_Registry::get('Zend_Translate')->translate('xxx');


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值