Zend_Framework - 在区域"zh"中找不到区域

Jam*_*mes 6 php zend-framework

我已经浏览了互联网,似乎无法找到解决我遇到的问题的方法.我正在尝试使用Zend_Currency来获取中国的货币,如下所示:

$currency = new Zend_Currency('CN');
Run Code Online (Sandbox Code Playgroud)

但是,我一直收到以下错误:

Fatal error: Uncaught exception 'Zend_Currency_Exception' with message 'No region found within the locale 'zh'' in /Library/WebServer/Documents/vendor/zendframework/zendframework1/library/Zend/Currency.php on line 561
Run Code Online (Sandbox Code Playgroud)

这是在Zend Framework 1.12.3的全新安装上,据我所知,我在这里没有做任何不正确的事情.从错误中我可以看出Zend已将国家/地区代码与区域设置相匹配.

这是一个问题,因为我的应用程序依赖于从国家/地区代码获取货币信息.我对GB,US等没有任何问题.

我已经查看Zend/Locale/Data并且可以确认zh.xml,zh_CN.xmllocale文件在那里,但我承认我不是100%我在寻找每个!

任何人对这个问题是什么以及如何解决这个问题都有任何想法?

谢谢

编辑:

这是一个反映评论讨论的编辑.

似乎Zend_Locale zh在给定国家代码时返回CN,而不是预期的字符串zh_CN.这意味着我无法找到任何可以传递给Zend_Currency以避免错误的一致性.

doy*_*y44 3

我认为这是 Zend 对 CN 区域管理不当的一个错误。
事实上,如果我没有记错的话,语言环境的名称是zh_Hans_CN,当它管理CN区域时,Zend 会查看它是否是变量的一部分$_localeData(在 Zend/Locale.php 文件中),因为情况并非如此,它会分解zh_Hans_CN只有zh他自己也不知道。

如果你想保持同样的原则,$currency = new Zend_Currency('CN');
你可以尝试一下:

Zend_Locale::getLocaleToTerritory('CN');
Run Code Online (Sandbox Code Playgroud)

默认情况下将检索正确的区域设置。(比如'US'Give 'en_US'
给出:

$currency = new Zend_Currency(Zend_Locale::getLocaleToTerritory('CN'));
Run Code Online (Sandbox Code Playgroud)