我有一个国家/地区列表(例如'de' => 'Deutschland'
,'at' => 'Austria'
)
我现在需要的是从国家/地区代码中获取区域设置字符串('de_DE'
或'de_AT'
)。
我需要这个来验证所选国家/地区的邮政编码。为实现此目的,邮政编码验证程序需要具有区域('de_AT'
或'en_US'
)的区域设置字符串。 'de'
或'en'
无效。
有没有简单的方法呢?
答案 0 :(得分:1)
另一种解决方案:
$contry = 'at';
$locale = Zend_Locale::getLocaleToTerritory($contry);
$validator = new Zend_Validate_PostCode($locale);
Zend_Locale::getLocaleToTerritory()
默认检索正确的语言环境。 (例如'美国'给予' en_US')
答案 1 :(得分:0)
试试这个:
$locale = new Zend_Locale('de');
var_dump($locale->toString());
以下是文档: http://framework.zend.com/manual/1.0/en/zend.locale.functions.html
答案 2 :(得分:0)
假设$ contry是' de'或者' at'。
我猜这种语言是德语(' de')
所以你可以得到这样的语言环境:
$locale = new Zend_Locale('de_' . strtoupper($contry));
你可以使用这样的验证器:
$validator = new Zend_Validate_PostCode('de_' . strtoupper($contry));
或
$validator = new Zend_Validate_PostCode($locale);
Edit1
你的评论:
如果您只有该地区,则无法获得该地区。
例如,如果区域为'et'
,则您无法知道区域设置是'aa_ET'
还是'am_ET'
。
所以我认为更好的解决方案是修改你的列表以获得POST的好价值。
例如,添加'en_ZW'
而不是'zw'
Edit2
验证后,如果您只是想要验证器Zend_Validate_PostCode
,那么就有办法
实际上,每个本地xx_XX表示语言和区域,对于同一地区的所有语言,邮政编码格式相同。
以下是您将恢复验证器的代码:
$contry = 'at';
$list_locale = Zend_Locale::getLocaleList();
$contry_caps = strtoupper($contry);
foreach($list_locale as $locale_str => $bool){
$locale_obj = new Zend_Locale($locale_str);
if ($contry_caps == $locale_obj->getRegion()){
$locale = $locale_str;
break;
}
}
$validator = new Zend_Validate_PostCode($locale);
但是,请注意某些地区没有Zend中定义的邮政编码(我使用的版本是1.12.6)。
以下是没有邮政编码验证器的区域:
001
AE
EH
LY
PS
QA
YE
BT
150
AG
BS
BZ
DM
FJ
GD
GI
GM
GY
JM
KI
KN
KY
LC
MW
SB
SL
SS
TT
UM
VC
VG
WS
419
BO
CO
CU
EA
IC
PA
PE
SV
IR
BF
BJ
BL
CI
GA
MF
KP
MM
AW
CW
SR
SX
ST
TL
AL
VN