2014-05-01 5 views
2

J'ai une liste de pays (par exemple, 'de' => 'Deutschland', 'at' => 'Austria').
Ce dont j'ai besoin maintenant est d'obtenir la chaîne locale ('de_DE' ou 'de_AT') du code de pays.Zend: obtenez les paramètres régionaux du code pays

J'ai besoin de ceci pour la validation du code postal par le pays sélectionné. Pour ce faire, le validateur de code postal a besoin d'une chaîne de paramètres régionaux avec la région ('de_AT' ou 'en_US'). 'de' ou 'en' ne fonctionne pas.

Existe-t-il un moyen simple de faire cela?

Répondre

1

Une autre solution:

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

Zend_Locale::getLocaleToTerritory() récupérer les paramètres régionaux correct par défaut. (comme 'US' donne 'en_US')

+0

C'est exactement ce que je cherchais, merci – andrepolo

0

Suppose contry de $ est 'de' ou 'à'.
Je suppose que la langue est l'allemand ('de')
vous pouvez donc obtenir les paramètres régionaux comme celui-ci:

$locale = new Zend_Locale('de_' . strtoupper($contry)); 

Vous pouvez utiliser un validateur comme ceci:

$validator = new Zend_Validate_PostCode('de_' . strtoupper($contry)); 

ou

$validator = new Zend_Validate_PostCode($locale); 

Éditer1
avec votre commentaire:

Si vous avez seulement la région, vous ne pouvez pas obtenir les paramètres régionaux. Par exemple, si la région est 'et', vous ne pouvez pas savoir si les paramètres régionaux sont 'aa_ET' ou 'am_ET'.
Donc je pense que le meilleur soluton est de modifier votre liste pour obtenir la bonne valeur dans le POST.
Par exemple, au lieu de mettre 'en_ZW''zw'


Edit2

Après vérification, si vous juste veulent que le validateur Zend_Validate_PostCode, il y a un moyen.

En effet, chaque local xx_XX signifie la langue et la région et pour toutes les langues dans la même région, il y a le même code postal.
Voici le code que vous récupérerez le validateur:

$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); 

Cependant, sachez que Somes régions n'a pas un code postal défini dans Zend (la version est je 1.12.6).
Voici la région qui ne dispose pas d'un validateur pour le Code postal:

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

non, $ pays peut être n'importe quoi de la liste des pays – andrepolo

+0

Cela vient de la poste, la valeur est 'de' ou 'at' ou quoi que ce soit dans la liste. La liste commence par Afghanistan (af) et se termine par Zimbabwe (zw) – andrepolo

+0

Désolé mais non, ce n'est pas une solution à mon problème. Mais votre liste peut m'aider à créer une liste de mappage. Donc merci pour votre effort :-) – andrepolo

Questions connexes