1

所以,我用谷歌搜索并找到了一种方法让我的应用程序与用于本地化的 db 适配器一起工作(顺便说一句效果很好),现在下一个上升的问题是后备。这是场景:

  • 应用程序有英语、德语、法语和韩语的翻译。
  • 英语是100%,其他没有。
  • 如果字符串未本地化为德语,法语或韩语需要回退到英语
  • 适配器使用和 ID 不是本地化字符串

例子:

<?php

    // This is init'd in the bootstrap
    try {
        $locale = new Zend_Locale(Zend_Locale::BROWSER); /* Q1!!! */
    } catch (Zend_Locale_Exception $e) {
        $locale = new Zend_Locale('en_US');
    }

    $translate = new Zend_Translate(
        'XYZ_Translate_Adapter_Db', // My adapter
        $data,                      // Populated variable
        $locale->getLanguage(),     // Returns en, de, fr or ko
        array()                     // Options to pass to the adapter, none.
    );

    // This is called from the view
    echo $translate->_(123); /* Q2!!! */

?>

回显的输出将是ID 123的相应文本。现在在第一季度!!!评论,我怎样才能验证 en/de/fr/ko 语言环境?对于第二季度!!!评论,如果没有找到其他语言的ID 123,我该如何回退到英语。

我还要处理日期和货币,所以我想验证 fr_FR、de_DE、ko_KO,而不是 fr_CA 或 de_AT 等变体。因此,对于第一部分,我需要验证语言环境是否来自我需要的国家/语言,或者它们是否至少是有效的语言(并强制它们到正确的国家);对于最后一部分,我需要验证如果翻译不在数据库中,则回退到英语。

4

1 回答 1

1

Zend_Translate 支持回退功能。在从 de 回退到 en 的示例中

$translate = new Zend_Translate(
array(
    'adapter' => Zend_Translate::AN_XLIFF,
    'content' => APPLICATION_PATH . '/../data/locales/',
    'locale'  => $locale->getLanguage(),
    'scan'  => Zend_Translate::LOCALE_FILENAME,
    'useId'   => true,
    'route'   => array('de' => 'en')
    )
);

请注意“路由”参数,该参数将允许您设置回退规则。您无需担心区域代码,因为它会自动处理。在 Zend_Translate 路由部分阅读更多内容 http://framework.zend.com/manual/en/zend.translate.additional.html#zend.translate.additional.rerouting

于 2011-04-13T15:22:08.880 回答