Il m’a été donné récemment la mission d’importer une base client où le champ « pays » d’origine des clients n’était pas du tout normalisé et contenait les noms des pays en francais.

J’ai alors créé mon propre Dataflow CustomerAdapter et rajouté une fonction _normalizeCountry($countryName) décrite ci-dessous :


private function _normalizeCountry($countryName) {
   // et oui le dump de base SQL était également mal encodé pour mon usage
   $countryName=utf8_decode($countryName);
   $countryCode='';

    try {
    //countryName à convertir en countryCode
    $countryName='Nouvelle-Zélande';

      //Récupérer tous les couples countryName => countryCode grâce à   Zend Framework Locale
      $locale = new Zend_Locale('fr_FR');
  //  $countryList = $locale->getCountryTranslationList(); //Deprecated	
      $countryList = $locale->getTranslationList('territory','fr_FR', 2);

      //Pour conclure une recherche
      $countryCode = array_search($countryName,$countryList);
      echo $countryCode;

   }
   catch (Exception $e) {
   Mage::logException($e);
}
return $countryCode;
}

Si on veut rester dans le Magento spirit of coding, la méthode suivante n’est pas mal non plus :

    //Magento way
    $countryList=Mage::app()->getLocale()->getCountryTranslationList('fr_FR');
    echo "Magento way returns : ".array_search($country_name,$countryList)."\n\r";