我花了几个小时寻找magento存储完整县名的地方。 我们可以使用此代码获取完整的国家/地区列表:
$_countries = Mage::getResourceModel('directory/country_collection')
->loadData()
->toOptionArray(false);
这将返回一个包含国家代码和名称的数组,我调查了目录模块,发现此调用从表中获取数据
directory_county
但是这张桌子没有完整的县名!那么它存储在哪里? 以及如何使用该调用检索它?
提前致谢。
答案 0 :(得分:6)
好的,以弥补我错误的答案。这是如何工作的:
/lib/Zend/Locale/Data/en.xml - 如果您的商店是英语,则读取同一个新文件中的另一个xml。每个国家/地区及其代码都位于xml标记<territory>
使用Zend_Cache_Core类缓存xml。
/lib/Zend/Locale.php - function getTranslation调用lib / Zend / Cache / Core.php类 从缓存中加载。
示例:如果在en.xml中更改某个国家/地区的名称并清除magento缓存。当您再次调用代码时,您将看到更改。
答案 1 :(得分:1)
使用Zend_Local翻译。
<?php
$code = 'EN';
echo Mage::app()->getLocale()->getTranslation($code, 'Territory', null, 2);
?>
使用表'directory_country'中的列'iso2_code'作为$ code。
答案 2 :(得分:1)
完整的国家/地区名称不会存储在数据库中。 Magento使用内置的Zend功能。
检查文件:lib/Zend/Locale/Data/Translation.php
以获取完整列表。
答案 3 :(得分:0)
Magneto仅在DB中存储国家/地区代码,并依赖于Zend的Locale模块上的名称来提供不同语言环境的翻译名称。
通过toOptionArray
方法调用Zend_Locale
类来获取翻译后的值。
参考$name = Mage::app()->getLocale()->getCountryTranslation($data['value']);
,Mage_Core_Model_Locale
然后转到Zend_Locale
。
它通过Zend_Locale_Data::getContent()
行#962,963
Magento缓存名称,因此如果您对XML
文件进行任何更改,请务必清理缓存文件夹以获取所需内容。