2014-05-01 54 views
2

我有一個國家/地區列表(即'de' => 'Deutschland''at' => 'Austria')。
我現在需要的是從國家代碼中獲取區域設置字符串('de_DE''de_AT')。Zend:從國家/地區獲取語言代碼

我需要這個來驗證所選國家的郵編。爲了達到這個目的,郵編驗證器需要一個帶區域的區域設置字符串('de_AT''en_US')。 'de''en'不起作用。

有沒有簡單的方法來做到這一點?

回答

1

另一個解決方法:

$contry = 'at'; 
$locale = Zend_Locale::getLocaleToTerritory($contry); 
$validator = new Zend_Validate_PostCode($locale); 

Zend_Locale::getLocaleToTerritory()默認情況下獲取正確的語言環境。 (如'US'給'en_US')

+0

這正是我所期待的,謝謝 – andrepolo

0

假設$ 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 
+0

不,$ country可以是任何國家的名單 – andrepolo

+0

這是來自post,值是'de'或'at'或列表中的任何內容。名單以阿富汗(af)開始,以津巴布韋(zw)結尾 – andrepolo

+0

對不起,但沒有,這是我的問題沒有解決方案。但是你的列表可以幫助我創建一個映射列表。所以感謝您的努力:-) – andrepolo

相關問題