我有一個國家/地區列表(即'de' => 'Deutschland'
,'at' => 'Austria'
)。
我現在需要的是從國家代碼中獲取區域設置字符串('de_DE'
或'de_AT'
)。Zend:從國家/地區獲取語言代碼
我需要這個來驗證所選國家的郵編。爲了達到這個目的,郵編驗證器需要一個帶區域的區域設置字符串('de_AT'
或'en_US'
)。 'de'
或'en'
不起作用。
有沒有簡單的方法來做到這一點?
我有一個國家/地區列表(即'de' => 'Deutschland'
,'at' => 'Austria'
)。
我現在需要的是從國家代碼中獲取區域設置字符串('de_DE'
或'de_AT'
)。Zend:從國家/地區獲取語言代碼
我需要這個來驗證所選國家的郵編。爲了達到這個目的,郵編驗證器需要一個帶區域的區域設置字符串('de_AT'
或'en_US'
)。 'de'
或'en'
不起作用。
有沒有簡單的方法來做到這一點?
另一個解決方法:
$contry = 'at';
$locale = Zend_Locale::getLocaleToTerritory($contry);
$validator = new Zend_Validate_PostCode($locale);
Zend_Locale::getLocaleToTerritory()
默認情況下獲取正確的語言環境。 (如'US'給'en_US')
試試這個:
$locale = new Zend_Locale('de');
var_dump($locale->toString());
這裏的文檔: http://framework.zend.com/manual/1.0/en/zend.locale.functions.html
假設$ contry是 '去' 或 '在'。
我想語言是德語( '德')
這樣你就可以得到這樣的語言環境:
$locale = new Zend_Locale('de_' . strtoupper($contry));
您可以使用這樣的驗證:
$validator = new Zend_Validate_PostCode('de_' . strtoupper($contry));
或
$validator = new Zend_Validate_PostCode($locale);
編輯1
與您的評論:
如果您只是該地區,您不能獲得區域設置。
例如,如果區域是'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
這正是我所期待的,謝謝 – andrepolo