因爲我想在一個很好的方式來處理翻譯做了一個實施的一部分,並走向一個概念,仍然不知道它是否好,我想分享它和將它的優點和缺點與認爲這是一個很好的探索點的人分享。Zend_Translate策略爲一個巨大的成長網站
該體系結構旨在在組件化站點中運行,翻譯源自Actions,Forms,Views,View_Helpers甚至Action_Helpers。
的ideis很簡單:
了Zend_Framework將在從註冊表中的每個組件得到,並會收到__FILE__
作爲參數。由於它是在引導程序中用'clear'初始化的,因此只能加載與此調用組件對應的數組文件。當遇到缺失的翻譯時,他們將被記錄到數據庫(以避免重複記錄)和/或被添加到相應的數組文件中,其餘未翻譯的語言(以及創建數組文件)尚未設置。
我的猜測是,使用緩存和專門翻譯我可以忽略設置爲空的翻譯(通過之前添加)而無需再次記錄(顯示在關鍵字中),它會花費一點點費用一個大型的未分頁頁面,然後通過自動化想要爲用戶提供的翻譯過程獲得性能以及可維護性和工作能力。
但之後,我發現我可以構建一個數組,每個組件都有一個缺失的轉換,以便在請求結束時保存,這就是我的問題。
如果你們有這方面的經驗,可以幫助確定什麼是最佳策略?
引導
protected function _initLocale() {
$translateSession = new Zend_Session_Namespace('translate');
$locale = isset($translateSession->locale) ? $translateSession->locale : 'auto';
try {
$zendLocale = new Zend_Locale($locale);
} catch (Zend_Locale_Exception $e) {
$zendLocale = new Zend_Locale('en_US');
}
Zend_Registry::set('Zend_Locale', $zendLocale);
$translate = new Engine_Translate('customarray', array('clear'));
$logger = Engine_Logger::getLogger();
$translate->setOptions(array('log2db' => $logger ,'log' => $logger, 'logPriority' => Zend_Log::ALERT, 'logUntranslated' => true));
Zend_Registry::set('Zend_Translate', $translate);
}
簡單的庫
function getAvailableTranslationLanguages() {
return array("pt_BR"=>"Português","en_US"=>"Inglês");
}
function setTranslationLanguage($code) {
$translateSession = new Zend_Session_Namespace('translate');
$translateSession->locale = $code;
}
function getTranslator($file) {
$relative = str_replace(APPLICATION_PATH, '', $file);
$code = Zend_Registry::get('Zend_Locale');
$path = APPLICATION_PATH . '\\lang\\' . $code . $relative;
$translator = Zend_Registry::get('Zend_Translate');
try {
$translator->addTranslation($path, $code);
} catch (Exception $e) {
createTranslationFile($path);
}
return $translator;
}
function createTranslationFile($path) {
if(!file_exists(dirname($path)))
mkdir(dirname($path), 0777, true);
$file = fopen($path, 'w');
if($file) {
$stringData = "<?php\n return array(\n);";
fwrite($file, $stringData);
fclose($file);
} else {
$logger = Engine_Logger::getLogger();
$logger->info(Engine_Logger::get_string('ERRO ao abrir arquivo de tradução: ' . $path));
}
}
使用
class App_Views_Helpers_Loginbox extends Zend_View_Helper_Abstract
{
public function loginbox() {
$translate = getTranslator(__FILE__);
翻譯資源
對不起,我不明白(你的英語很受你的母語的影響,我想),也許試着重新來一遍。 –