Zend Framework Мультиязычный - PullRequest
       24

Zend Framework Мультиязычный

1 голос
/ 14 декабря 2011

Я пытаюсь сделать свой веб-сайт 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);
 }
}

Может кто-нибудь, пожалуйста, помогите мне, скажите мне, что я делаю неправильно?Потому что я уже несколько часов пытаюсь и думаю, что я действительно застрял.

...