0

虽然翻译在开发服务器上工作正常,但我们在生产服务器上收到以下通知:没有可用的语言“fr”的翻译。

这是引导程序中的翻译配置(强制测试的语言环境):

$locale = "fr_CA.utf8";
$translate = new Zend_Translate( 
    array(
        'adapter'=>'gettext', 
        'content' => APPLICATION_PATH . '/lang',
        'locale' => $locale,
        'scan' => Zend_Translate::LOCALE_DIRECTORY, 
        'disableNotices' => false,
        'clear' =>true,
        'reload'=>true,
    )
);

.mo 文件位于 APPLICATION_PATH/lang/fr_CA.utf8/LC_MESSAGES/messages.mo

根据“locale -a”,.mo 文件中有翻译的字符串,并且两个服务器上都存在语言环境。

关于为什么这样的设置可以在一台服务器而不是另一台服务器上运行的任何线索?

编辑 :

我让它与以下配置一起工作:

        $translate = new Zend_Translate( 
        array(
            'adapter'=>'gettext', 
            'content' => APPLICATION_PATH.'/lang/'.$locale.'/LC_MESSAGES/messages.mo',
            'locale' => $locale,
            'disableNotices' => true,
            'clear' =>true,
            'reload'=>true,
        )
    );

似乎扫描不起作用。

4

2 回答 2

1

我有一个类似的问题(使用数组适配器)

原因:生产站点webroot路径包含隐藏目录 /home/.sites/path/to/my/webroot/

// Settings:
$locale = new Zend_Locale('browser');
$language = $locale->getLanguage();

// Solution: added option 'ignore'  => '===' to override
// default $_options settings in Zend_Translate_Adapter

$translate = new Zend_Translate(array(
    'adapter' => 'array',
    'content' => APPLICATION_PATH . '/languages/' . $language,
    'scan'    => Zend_Translate::LOCALE_DIRECTORY,
    'locale'  => $locale,
    'ignore'  => '===',        // override default '.'

));
于 2011-11-17T22:16:37.377 回答
0

我有一个类似的问题,但使用 application.ini 来配置翻译。

这些是 Zend_Translate 相关的行:

resources.translate.adapter = "gettext"
resources.translate.content = APPLICATION_PATH "/languages"
resources.translate.options.scan = 'directory'

这在我们的开发服务器上运行良好,但在我们的登台服务器上却不行。我们必须从扫描选项中删除引号:

resources.translate.options.scan = directory

没有引号它工作。但我不知道为什么这个特定的配置行不能处理我们登台服务器上的引号。

于 2012-01-17T09:22:24.587 回答