【问题标题】:Zend 2 Translation setFallbackLocaleZend 2 翻译 setFallbackLocale
【发布时间】:2016-01-26 09:47:08
【问题描述】:

存在en_USde_DE 的语言文件

在我的Module.php 中我定义的onBootstrap 方法中:

    $oTranslator = $oServiceManager->get('translator');
    $oTranslator->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']));
    $oTranslator->setFallbackLocale('de_DE');

如果我进入带有HTTP_ACCEPT_LANGUAGE的页面:en-US,en;q=0.9,de-DE;q=0.8,de;q=0.6,pl-PL;q=0.5,pl;q=0.4,pt-PT;q=0.3,pt;q=0.1

Zend 使用定义的 fallbackLocale de_DE - 但为什么呢?

如果我没有设置 fallbackLocale Zend 使用正确的en_US 语言环境。

我希望 Zend 使用给定的语言环境,或者,如果找不到,则回退到 de_DE - 但如果定义了 fallbackLocale,他总是使用 de_DE 语言环境

我怎样才能摆脱这种行为?

编辑

我要翻译的module.config.php的内容是:

'translator' => array(
    'locale' => 'de_DE',
    'translation_file_patterns' => array(
        array(
            'type'     => 'gettext',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.mo',
        ),
    ),
),

编辑 2

Zend 2 Skelleten 应用程序没有任何 en_US 语言环境的翻译 - 所以我对这种语言的所有翻译请求都会返回空字符串,这将在内部导致使用默认语言环境。

【问题讨论】:

    标签: php internationalization zend-framework2 locale translation


    【解决方案1】:

    Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE'] 可能不会返回 en-US,而是返回其他内容,例如 en

    如果是这种情况,则设置后备de_DE

    您确定返回的值是正确的吗?尝试先检查一下...


    the language header definition 写着:

    可以为每个语言范围指定一个相关的质量值,该值表示用户对该范围指定语言的偏好的估计。质量值默认为“q=1”。

    您将en 设置为q=0.9,但这是不可用的。 然后de-DEq=0.8

    可能是因为en 不可用,它会改用de-DE

    另一方面,它应该为en-US 字段设置默认的q=1。尝试使用简单的东西进行测试,例如单个值 en-USde-DEpt-PT

    【讨论】:

    • 我测试了\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']) 的输出,如果我想出美国标题,它会返回en_US - 如果我想出德国标题,它会返回de_DE。语言文件具有完全相同的文件名:-/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    相关资源
    最近更新 更多