0

У меня есть Зенд XML конфигурации следующим образом:Zend Navigation параметр языка настройки для маршрута оленья кожа отразить в приложении

<design> 
    <navigation> 
     <frontend> 
      <company> 
       <label>Company</label>     
       <route>sitepage</route>         
       <pages> 
        <about> 
         <label>About us</label> 
         <route>sitepage</route> 
         <params> 
          <page>about-us</page> 
          <language>en</language> 
         </params>              
        </about> 

Вот мой sitepage маршрут:

resources.router.routes.sitepage.type = Zend_Controller_Router_Route 
resources.router.routes.sitepage.route = ":language/page/:page" 
resources.router.routes.sitepage.defaults.module ="core" 
resources.router.routes.sitepage.defaults.controller = "page" 
resources.router.routes.sitepage.defaults.action = "view" 
resources.router.routes.sitepage.defaults.page = "home" 
resources.router.routes.sitepage.defaults.language = "en" 

Как вы можете видеть, что я do задает параметр страницы в узле xml <params>. Я попытался добавить параметр <language>, думая, что он автоматически обновит язык приложения, но похоже, что он не работает таким образом. Мое меню навигации выводит, например, http://localhost/en/page/about-us, когда оно должно быть http://localhost/it/page/about-us (учитывая, что мое приложение зарегистрировано с использованием языка it). Как я могу получить навигацию для распознавания языка приложения (it)?

ответ

1

Я работал на это по-другому ...

Вот пример для главной страницы регистрации:

routes.register_index.route = @lang/@register 
routes.register_index.defaults.controller = register 
routes.register_index.defaults.action = index 

Моего navigation.xml пуст, но вы можете использовать только метку и маршрут ,

Возможно, вы заметили @ вместо: на моих маршрутах. Это предназначено в основном для сайтов i18n.

В моей папке языка, у меня есть регулярное файле En.php и т.д., и URL-файл En.php и т.д.

Вот как это выглядит:

<?php 
return array(
    'lang' => 'en', 
    'register' => 'register', 
    'about' => 'about-us', 
); 

С этим, тот же маршрут будет использоваться для/ан/регистрации,/FR/надписи и т.д. (по одному для каждого языкового файла)

В моем Bootstrap, я включаю их с начала Rewrite:

protected function _initRewrite() 
    { 
     $translator = new Zend_Translate('array', APPLICATION_PATH . '/language/url-fr.php', 'fr'); 
     $translator->addTranslation(APPLICATION_PATH . '/language/url-en.php', 'en'); 

     // Set the current locale for the translator 
     $locale = Zend_Registry::get('Zend_Locale'); 
     $translator->setLocale($locale); 

     // Set it as default translator for routes 
     Zend_Controller_Router_Route::setDefaultTranslator($translator); 

     $front_controller = Zend_Controller_Front::getInstance(); 
     $router = $front_controller->getRouter(); 

     $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', APPLICATION_ENV); 
     $router->addConfig($config, 'routes'); 

     $router->addDefaultRoutes(); 
    } 

Это в основном говорит вашему приложению о переводе @lang по его значению с url-lang .php в соответствии с текущим языковым стандартом. Локаль должен быть установлен до этого момента в вашем бутстрапе. Вы можете либо получить его из сеанса, файла cookie, URL-адреса, всего.

Как только это будет сделано, вы можете позвонить по своему маршруту в любом месте, и он будет находиться в текущем регионе, используя данные из специальных языковых файлов. Убедитесь, что ваш файл навигации имеет те же названия, что и ваши маршруты, и все должно быть в порядке.