我绝不是专家,但这就是我的工作。
我使用数组作为我的翻译适配器,因为我的客户更容易更新,因为他们只是普通的乔。我使用翻译键而不是句子。例如
有些人会使用
$this->translate(‘Some sentence to translate’);
我用
$this->translate(‘default-index-dashboard-title’);
这让我更容易知道要更改的文本的位置。不过不知道有没有其他的优点。
您需要在引导程序中设置翻译适配器和翻译缓存(如果需要)。我的做法是这样的:
protected function _initLocale()
{
$locale = new Zend_Locale(Zend_Locale::BROWSER);
$config = Zend_Registry::get('config');
Zend_Registry::set('Zend_Locale', $locale->toString());
return $locale;
}
protected function _initTranslation()
{
try{
$translate = new Zend_Translate(array('adapter' => 'array', 'content' => ROOT . '/callmanagement/languages/' . strtolower(Zend_Registry::get('Zend_Locale')) . '.php'));
}catch(Exception $e){
$translate = new Zend_Translate(array('adapter' => 'array', 'content' => ROOT . '/callmanagement/languages/en_gb.php'));
}
Zend_Registry::set('Zend_Translate', $translate);
return $translate;
}
我会使用单一代码库,除非站点完全不同,并将共享数据存储在一个数据库中,并为站点特定的内容存储其他数据库。
您可以在引导程序或配置中设置多个数据库适配器。
$dbLocal = new Zend_Db_Adapter_Pdo_Mysql(array(
'host' => 'localhost',
'username' => $result['user'],
'password' => $result['password'],
'dbname' => $result['database']
));
Zend_Db_Table_Abstract::setDefaultAdapter($dbLocal);
$dbShared = new Zend_Db_Adapter_Pdo_Mysql(array(
'host' => 'localhost',
'username' => ‘root’,
'password' => 'pass',
'dbname' => 'dbname'
));
Zend_Registry::set('db_local', $dbLocal);
Zend_Registry::set('db_shared', $dbShared);
return $dbLocal;
您只需将翻译键放入标签字段即可让 Zend Form 为您翻译。
$this->addElement(‘text’, ‘test’, array(‘label’ => ‘translation-key’, ‘required’ => true)); 等
如果您使用 Zend_Db_Table_Abstract 类,您可以像这样更改默认模式和数据库连接:
class Default_Model_Table_Topics extends Zend_Db_Table_Abstract
{
protected $_name = 'topics';
protected $_id = 'topic_id';
protected $_rowClass = 'Default_Model_Topic';
protected $_schema = 'dbname';
protected $_adapter = 'db_shared';
}
如果您需要更多示例,我会尽力提供帮助。