我需要更新一个基于Zend Framework构建的应用程序。
大多数文本都在视图脚本,表单等中进行了硬编码。
该应用程序将提供3种语言 AND 是特定于语言的(所有内容都不相同),并且每种语言都有一个域名(即:mygreatsite.com,monsupersite。 com,ilmiosupersite.com等。)
第一个问题:
“处理”此类应用程序的最佳方法是什么?
我可以想象几个解决方案:
第二个问题:
关于启动“迁移”的现有代码,我应该知道什么? 建立i18n网站时的最佳做法是什么? 什么是最好的适配器? (我已经使用了gettext(),我认为这是最好的)
答案 0 :(得分:1)
我绝不是专家,但这就是我所做的。
我使用数组作为我的翻译适配器,因为我的客户更容易更新,因为它们只是常规的Joes。我使用翻译键而不是句子。例如 有些人会用
$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;
}
除非站点完全不同,否则我会使用单个代码库,并将共享数据存储在一个数据库中,并为站点特定的东西提供其他数据库。
您可以在bootstrap或congfig中设置多个数据库适配器。
$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';
}
如果您需要更多示例,我会尽力帮助。