• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Zend_Translate
#1
سلام دوستان
من برای چند زبانه کردن سایت از این روش رفتم:
یه پلاگین:
کد پی‌اچ‌پی:
class Cytech_Controller_Plugin_LangSelector
extends Zend_Controller_Plugin_Abstract
{
    public function 
preDispatch(Zend_Controller_Request_Abstract $request)
    {
        
$config = new Zend_Config_Ini(APPLICATION_PATH'/configs/application.ini''production');

        
$lang $request->getParam('lang','');
        if(
strtolower($lang)!== 'en' && strtolower($lang)!== 'fa')
        {
           
$lang $config->general->defaultLang;
           
$lang $request->setParam('lang',$lang);
        }
        
$lang $request->getParam('lang');
        if(
$lang =='fa')
        {
            
$locale 'fa_IR';
        }
        else
        {
            
$locale 'en_US';
        }
        
$zl = new Zend_Locale();
        
$zl->setLocale($locale);
        
Zend_Registry::set('Zend_Locale'$zl);

        
$translate = new Zend_Translate('csv'APPLICATION_PATH.'/configs/lang/'.$lang.'.csv',$lang);
        
Zend_Registry::set('Zend_Translate'$translate);

    }



و در bootstrap:

کد پی‌اچ‌پی:
protected function _initRoutes()
    {
        
$frontController Zend_Controller_Front::getInstance();
        
$router $frontController->getRouter();
        
$router-> removeDefaultRoutes();
        
$router->addRoute(
                
'langmodule',
                new 
Zend_Controller_Router_Route('/:lang/:module/:controller/:action/*',
                array(
'lang'=>'fa',
                        
'controller'=>'index',
                        
'module'=>'default',
                        
'action'=>'index'))
        );

    } 

حالا میخوام به جای اینکه در bootstarp همه رو فارسی کنه به صورت پیشفرض ببینه مقدار set شده چیه و همونو ست کنه.
راه حل خوب چیه؟
  پاسخ
تشکر شده توسط :
#2
کد پی‌اچ‌پی:
public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        
$locale = new Zend_Locale();
        
$options = array('scan' => Zend_Translate::LOCALE_FILENAME);
        
$translate = new Zend_Translate('gettext'Zend_Registry::get('siteRootDir') . '/application/languages/''auto'$options);
        
$requestParams $this->getRequest()->getParams();
        
$language = (isset($requestParams['language'])) ? $requestParams['language'] : false;
                if (
$language == false) {
                     
$language = ($translate->isAvailable($locale->getLanguage())) ? $locale->getLanguage() : 'en';
                }
        if (!
$translate->isAvailable($language)) {
            throw new 
Zend_Controller_Action_Exception('This page dont exist',404);
        } else {
       
$locale->setLocale($language);
            
$translate->setLocale($locale);
            
Zend_Form::setDefaultTranslator($translate);
            
setcookie('lang'$locale->getLanguage(), null'/');
            
Zend_Registry::set('Zend_Locale'$locale);
            
Zend_Registry::set('Zend_Translate'$translate);
        }
    } 
  پاسخ
تشکر شده توسط : scorpion
#3
باید این کد رو جایگزین preDispatch‌ تو پلاگین کنم؟
  پاسخ
تشکر شده توسط :
#4
آره
  پاسخ
تشکر شده توسط : scorpion


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان