【问题标题】:where do i have to set zend translate?我必须在哪里设置zend翻译?
【发布时间】:2014-01-10 13:41:19
【问题描述】:

我发现在zend框架中设置翻译很简单。您只需要使用这些语言制作一些文件并从用户代理获取区域设置。我唯一不知道的是我应该在“哪里”调用 zend_translate 类。所以我有这些行:

 <?php
 // load required classes
 require_once 'Zend/Loader.php';
 Zend_Loader::loadClass('Zend_Translate');
 Zend_Loader::loadClass('Zend_Locale');
 Zend_Loader::loadClass('Zend_Registry');

 // initialize locale and save in registry
 // auto-detect locale from browser settings
 try {
   $locale = new Zend_Locale('browser');
 } catch (Zend_Locale_Exception $e) {
   $locale = new Zend_Locale('en');  
 }
 $registry = Zend_Registry::getInstance();
 $registry->set('Zend_Locale', $locale);

而且我不知道是否应该在控制器或视图中设置它们,因为很明显与其他行有关:

 <title><?php echo this->translate('Title'); ?></title>

那么我必须在控制器中设置类并将变量传递给视图吗?谢谢你的帮助。

【问题讨论】:

  • 它在我设置本地文件名的行中的 _initTranslate 中引发错误。你能检查我这行的语法吗? array('scan' => Zend_Translate::text.php 它说“文本”常量没有找到。我应该在里面写什么?

标签: php zend-framework localization zend-translate


【解决方案1】:

您可以在控制器中设置 Zend_Locale,但通常您应该“更高”地设置,因为基本上您希望从其他控制器访问 zend_locale。 通常,您在引导程序中或仅在 index.php 文件中初始化注册表。 这是关于如何设置 zend_locale 的很好的指南: http://delboy1978uk.wordpress.com/category/languages/php/zend-framework/zend_registry/

【讨论】:

  • @softwareplay - 我无法对您的帖子发表评论,所以我会发表自己的评论。关于你的第二个问题 - 你不能用你自己的文件替换 LOCALE_FILENAME 因为它是一个告诉 zend 如何自动搜索你的语言文件(可选 LOCALE_DIRECTORY)的常量。您应该将文件放在具有正确名称的语言文件夹中,例如(在根目录中)languages/text.en.php,然后扫描将搜索您的文件。
【解决方案2】:

您可以通过创建 _initTranslate 函数将 Zend_Translate 初始化到 boostrap 中:

 protected function _initTranslate()
{
    // (optional) get cache
    $cache = $this->bootstrap('cachemanager')
                  ->getResource('cachemanager')
                  ->getCache('generic');
    $translate = new Zend_Translate(
        'gettext',
        APPLICATION_PATH . '/languages',
        'fr',
        array(
            'scan' => Zend_Translate::LOCALE_FILENAME,
            'logUntranslated' => false
        )
    );
    $translate->setCache($cache);
    Zend_Registry::set('Zend_Translate', $translate);

    // Traducteur par defaut pour les classes suivantes
    Zend_Validate_Abstract::setDefaultTranslator($translate);
    Zend_Form::setDefaultTranslator($translate);
    return $translate;
}

因此翻译器将可用于整个应用程序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2013-10-30
    相关资源
    最近更新 更多