magento存储国家全名的地方

时间:2014-07-24 11:42:26

标签: php magento country country-codes

我花了几个小时寻找magento存储完整县名的地方。 我们可以使用此代码获取完整的国家/地区列表:

$_countries = Mage::getResourceModel('directory/country_collection')
    ->loadData()
    ->toOptionArray(false);

这将返回一个包含国家代码和名称的数组,我调查了目录模块,发现此调用从表中获取数据

  

directory_county

但是这张桌子没有完整的县名!那么它存储在哪里? 以及如何使用该调用检索它?

提前致谢。

4 个答案:

答案 0 :(得分:6)

好的,以弥补我错误的答案。这是如何工作的:

  1. /lib/Zend/Locale/Data/en.xml - 如果您的商店是英语,则读取同一个新文件中的另一个xml。每个国家/地区及其代码都位于xml标记<territory>

  2. 使用Zend_Cache_Core类缓存xml。

  3. /lib/Zend/Locale.php - function getTranslation调用lib / Zend / Cache / Core.php类 从缓存中加载。

  4. 示例:如果在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

中的switch case语句决定从数据中读取哪个节点

Magento缓存名称,因此如果您对XML文件进行任何更改,请务必清理缓存文件夹以获取所需内容。