虽然翻译在开发服务器上正常工作,但我们在生产服务器上收到以下通知:没有翻译语言'fr'可用。
以下是bootstrap中的转换配置(强制测试的语言环境):
$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,
)
);
似乎扫描无效。
答案 0 :(得分: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 '.'
));
答案 1 :(得分: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
没有引号就可以了。但我不知道为什么这个特定的配置行无法处理我们的登台服务器上的引号。