請爲我提供zend_translate和zend_locale的簡單小型 應用程序的文件夾strusture和代碼。zend_translate和zend_locale
爲了讓我對此有所瞭解。 我引用了framework.zend,但無法理解我應該在控制器,索引,boorstrap甚至視圖中提及哪些東西。 對於我來說,使用zend_translate和zend_locale似乎是hecic。 請幫幫我。
請爲我提供zend_translate和zend_locale的簡單小型 應用程序的文件夾strusture和代碼。zend_translate和zend_locale
爲了讓我對此有所瞭解。 我引用了framework.zend,但無法理解我應該在控制器,索引,boorstrap甚至視圖中提及哪些東西。 對於我來說,使用zend_translate和zend_locale似乎是hecic。 請幫幫我。
給你舉個例子,對於簡單的翻譯,我有以下我的application.ini定義:
resources.translate.data = APPLICATION_PATH "/translations/nl/"
resources.translate.locale = "nl"
而且/譯/ NL /目錄裏面我有一個或多個翻譯文件名(.php ,.ini,...)。
這就是你所需要的,基本上。
這是我的解決方案:
protected function _initTranslate()
{
//set gettext adapter
$translate = new Zend_Translate('Gettext', APPLICATION_PATH . '/languages',
null, array('scan' => Zend_Translate::LOCALE_FILENAME));
// get locale from url
if (preg_match("/^\/([a-zA-Z]{2})($|\/)/", $_SERVER['REQUEST_URI'], $matches)) {
$lang = $matches[1];
} else {
//if locale not exsist in url - get browser locale
$locale = new Zend_Locale(Zend_Locale::BROWSER);
$lang = $locale->getLanguage();
}
if (!$translate->isAvailable($lang)) {
$lang = 'en';
}
$translate->setLocale($lang);
$front = $this->getResource('FrontController');
$front->setBaseUrl('/' . $lang . '/');
Zend_Registry::set('Zend_Translate', $translate);
$locale = $translate->getLocale();
$source = APPLICATION_PATH . '/languages/'.$locale.'.mo';
$translate->addTranslation($source, $locale);
}
這是我正在做它,
bootstrap.php中
protected function _initTranslate()
{
$translate = new Zend_Translate(array(
'adapter' => 'gettext',
'content' => APPLICATION_PATH . '/locale/en-US.mo',
'locale' => 'en'
));
Zend_Registry::set('translate', $translate);
Zend_Form::setDefaultTranslator($translate);
$this->bootstrap('view');
$view = $this->getResource('view');
$view->translate = $translate;
}
如果非要從控制器發送消息。 。我做
AuthController.php
$this->view->message = 'success';
然後在視圖
login.phtml
if (isset($this->message)) {
echo $this->translate->_($this->message);
}
上面將輸出 'sucesss' 的翻譯的值來自'en-US.mo'文件。
希望有幫助!
這是我使用的解決方案:
代碼Plugin.php
// BEGIN: Translate
$validLang = $this->getRequest()->getParam('lang');
$translate = new Zend_Translate('csv', 'data/lang/en.csv', 'en');
$translate->addTranslation('data/lang/ro.csv', 'ro');
if($validLang)
{
Zend_Registry::set('lang', $validLang);
$translate->setLocale($validLang);
}
else
{
Zend_Registry::set('lang', 'en');
$translate->setLocale('en');
}
Zend_Registry::set('translate', $translate);
// END: Translate
代碼en.csv
front_user_menu-wall;Wall
代碼ro.csv
front_user_menu-wall;Perete
守則任何Zend的視圖文件
echo Zend_Registry::get('translate')->_('front_user_menu-wall');
而且一些解釋:
在文件夾中的數據/郎我有2個的.csv翻譯文件。結構是自解釋的,分號(;)將變量名(front_user_menu-wall)與變量值(Wall)分開。每個變量必須放在一個新行中,並且可以在行內添加行註釋(例如:#this是註釋)。 ro.csv文件是羅馬尼亞語翻譯文件,它具有相同的結構,但變量的值明顯不同。
裏面Plugin.php你有
$validLang = $this->getRequest()->getParam('lang);
Zend的等效
$validLang = $_GET['lang'];
在接下來的兩行代碼,我們用實例2翻譯的.csv文件的新一個Zend_Translate類。接下來我們檢查$ validLang是否爲空,如果不是它們,我們用翻譯文件設置Zend_Registry lang變量(Zend_Registry與$ _SESSION類似)。如果$ validLang爲空,那麼我們默認翻譯爲英文。
如果你做了以上所有步驟,你現在可以呼應
Zend_Registry::get('translate')->_('front_user_menu-wall');
獲得英語或羅馬尼亞語翻譯。
當提供解決問題的代碼時,最好也至少給出一個關於它是如何工作的簡短解釋,以便讓人們閱讀時不必從頭到尾思路分析,以便理解差異。 – Fluffeh 2012-09-27 11:20:04