magento 存储国家全名的地方

Posted

技术标签:

【中文标题】magento 存储国家全名的地方【英文标题】:where magento stores country full name 【发布时间】:2014-09-15 22:47:34 【问题描述】:

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

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

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

目录县

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

提前致谢。

【问题讨论】:

为什么需要表名。目的是什么? 【参考方案1】:

好的,以弥补我的错误答案。以下是它的工作原理:

    /lib/Zend/Locale/Data/en.xml - 如果您的商店是英文的,则读取同一目录中的另一个 xml。每个国家都在那里,其代码在 xml 标签下<territory>

    使用 Zend_Cache_Core 类缓存 xml。

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

示例:如果您在 en.xml 中更改某个国家/地区的名称并清除 magento 缓存。当您再次调用您的代码时,您将看到更改。

【讨论】:

我也在用en.xml,也改了也没出现,你试过了吗?看看我是否修改了错误的文件 这些不是语言名称吗?【参考方案2】:

完整的国家名称不存储在数据库中。 Magento 使用内置的 Zend 功能。

查看文件:lib/Zend/Locale/Data/Translation.php 查看完整列表。

【讨论】:

是的,这个文件包含完整列表..但我修改了一个国家名称并打印出所有国家..更改没有出现:(我不明白为什么!!!!!(我确保浏览器中没有缓存)【参考方案3】:

使用 Zend_Local 翻译。

<?php
$code = 'EN';
echo Mage::app()->getLocale()->getTranslation($code, 'Territory', null, 2);
?>

使用表“directory_country”中的“iso2_code”列作为您的 $code。

【讨论】:

【参考方案4】:

Magneto 仅将国家代码存储在 DB 中,并依赖 Zend 的 Locale 模块中的名称来为不同的语言环境提供翻译名称。

通过toOptionArray 方法,它调用Zend_Locale 类来获取转换后的值。

参考$name = Mage::app()-&gt;getLocale()-&gt;getCountryTranslation($data['value']);,它会到达Mage_Core_Model_Locale,然后是Zend_Locale

通过Zend_Locale_Data::getContent() line# 962, 963中的switch case语句来决定读取数据中的哪个节点

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

【讨论】:

以上是关于magento 存储国家全名的地方的主要内容,如果未能解决你的问题,请参考以下文章

Magento:为国家/地区 magento 设置默认商店视图

Magento - 客户地址国家下拉问题

Magento - 我如何通过 GeoIP 按国家/地区运行商店?

Magento:获取国家和地区集合

如何获得 Magento 商店货币

将新国家/地区添加到Magento