Я пытаюсь сделать свой веб-сайт Zend Framework на нескольких языках, я хочу, чтобы количество языков на моем сайте было легко увеличивать.
Я пытался следовать этому руководству, но у менянекоторые проблемы: http://blog.hackix.com/series/working-with-zend_translate-and-poedit/
Я получил свои языковые файлы nl_BE и en_US, изменил содержимое в моих представлениях, например, echo $this->translate("Restricted section");
Сначала я смог изменить язык по умолчанию, изменивэто в Bootstrap.php, но после нескольких попыток заставить его работать без Bootstrap.php и изменения некоторого кода, даже это больше не работает.
Я сделал небольшую форму с двумя изображениями, бельгийский флаг и британский флаг, если я нажимаю на бельгийский флаг, я хочу изменить язык на nl_BE, если я нажимаю на британский флаг, я хочу изменить язык на en_US.
Это моя форма:
<form action="" method="post">
<input type="image" src="images/belgium.png" value="nl_BE" name="lang" />
<input type="image" src="images/brittain.png" value="en_US" name="lang"/>
</form>
Это мой файл Bootstrap.php, в соответствии с учебником, который я использовал:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initTranslate()
{
Zend_Loader::loadClass('Zend_Translate');
Zend_Loader::loadClass('Zend_Registry');
// Get current registry
$registry = Zend_Registry::getInstance();
/**
* Set application wide source Locale
* This is usually your source string language;
* i.e. $this->translate('Hi I am an English String');
*/
$locale = new Zend_Locale('en_US');
Zend_Registry::set('Zend_Locale', $locale);
$session = new Zend_Session_Namespace('session');
//$langLocale = isset($session->lang) ? $session->lang : $locale;
$langLocale = $locale;
/**
* Set up and load the translations (all of them!)
* resources.translate.options.disableNotices = true
* resources.translate.options.logUntranslated = true
*/
$translate = new Zend_Translate('gettext',
APPLICATION_PATH . DIRECTORY_SEPARATOR .'languages', 'auto',
array(
'disableNotices' => true, // This is a very good idea!
'logUntranslated' => false, // Change this if you debug
)
);
/**
* Both of these registry keys are magical and makes
* ZF 1.7+ do automagical things.
*/
$registry->set('Zend_Locale', $locale);
$registry->set('Zend_Translate', $translate);
return $registry;
}
}
Это мой LangController.php, Zend_Controller_Plugin_Abstract для обработки изменения lКроме того, этот файл находится в библиотеке / App / Controller / Plugin.
<?php
class App_Controller_Plugin_LangSelector extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$registry = Zend_Registry::getInstance();
// Get our translate object from registry.
$translate = $registry->get('Zend_Translate');
$currLocale = $translate->getLocale();
// Create Session block and save the locale
$session = new Zend_Session_Namespace('session');
$lang = $request->getParam('lang','');
// Register all your "approved" locales below.
switch($lang) {
case "nl_BE":
$langLocale = 'nl_BE';
break;
case "en_US":
$langLocale = 'en_US';
break;
default:
/**
* Get a previously set locale from session or set
* the current application wide locale (set in
* Bootstrap)if not.
*/
$langLocale = isset($session->lang) ? $session->lang : $currLocale;
}
$newLocale = new Zend_Locale();
$newLocale->setLocale($langLocale);
$registry->set('Zend_Locale', $newLocale);
$translate->setLocale($langLocale);
$session->lang = $langLocale;
// Save the modified translate back to registry
$registry->set('Zend_Translate', $translate);
}
}
Может кто-нибудь, пожалуйста, помогите мне, скажите мне, что я делаю неправильно?Потому что я уже несколько часов пытаюсь и думаю, что я действительно застрял.