#zend-framework #zend-translate
#zend-framework #zend-перевести
Вопрос:
Хотя перевод на сервере разработки работает нормально, на рабочем сервере мы получаем следующее уведомление: Перевод для языка ‘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
В файле .mo есть переведенные строки, и языковой стандарт существует на обоих серверах в соответствии с «locale -a».
Есть какие-либо подсказки относительно того, почему такая настройка может работать на одном сервере, а не на другом?
Редактировать :
Я заставил его работать со следующей конфигурацией :
$translate = new Zend_Translate(
array(
'adapter'=>'gettext',
'content' => APPLICATION_PATH.'/lang/'.$locale.'/LC_MESSAGES/messages.mo',
'locale' => $locale,
'disableNotices' => true,
'clear' =>true,
'reload'=>true,
)
);
Похоже, что сканирование не работало.
Ответ №1:
У меня была похожая проблема (с использованием адаптера массива)
Причина: путь к веб-корню производственного сайта содержит скрытый каталог /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 '.'
));
Ответ №2:
У меня была похожая проблема, но для настройки перевода я использовал application.ini.
Это были строки, связанные с Zend_Translate:
resources.translate.adapter = "gettext"
resources.translate.content = APPLICATION_PATH "/languages"
resources.translate.options.scan = 'directory'
Это отлично работало на нашем сервере разработки, но не на нашем промежуточном сервере. Нам пришлось убрать кавычки из опции сканирования:
resources.translate.options.scan = directory
Без кавычек это сработало. Но я понятия не имею, почему эта конкретная строка конфигурации не может обрабатывать кавычки на нашем промежуточном сервере.