La manière la plus simple consiste à se reposer sur la locale de l'utilisateur. Lorsque vous créez
une instance de Zend_Currency
sans préciser d'options, la locale du client sera alors
utilisée.
Exemple 156. Créer une monnaie avec les paramètres du client
Imaginons un client dont la locale est "en_US" dans son navigateur. Dans ce cas,
Zend_Currency
détectera automatiquement la monnaie à utiliser.
$currency = new Zend_Currency(); // Voyons les paramètres par défaut régis par la locale utilisateur // var_dump($currency);
L'objet crée va alors contenir une monnaie "US Dollar" car il s'agit de la monnaie affectée aux USA. D'autres options ont aussi été affectées comme le signe "$" ou l'abbréviation "USD".
La détection automatique par locale ne fonctionne pas toujours
La détection automatique par locale ne fonctionne pas toujours car
Zend_Currency
nécessite une locale incluant la région. Si le client
utilise une locale courte ("en"), Zend_Currency
ne sait pas quelle
région parmi les 30 possibles choisir. Une exception sera alors levée.
Un client peut aussi déregler la locale dans son navigateur, ou la supprimer. Ainsi le paramètre de l'environnement sera alors utilisé pour la locale, ce qui peut mener à des comportements non attendus ou des exceptions.
Pour éviter ce genre de problème, précisez manuellement la locale à utiliser.
$currency = new Zend_Currency('en_US'); // Utilisation de l'option 'locale' // $currency = new Zend_Currency(array('locale' => 'en_US')); // Voir la monnaie avec les paramètres actuels fixés à 'en_US' // var_dump($currency);
Dans l'exemple ci-dessus, nous ne sommes plus dépendant du client.
Zend_Currency
supporte aussi l'utilisation d'une locale globale.
Mettez une instance de Zend_Locale
dans le registre comme montré
ci-après. Dans un tel cas, l'option locale n'est plus obligatoire pour chaque instance
et la même locale sera utilisée partout, tout le temps.
// dans le bootstrap $locale = new Zend_Locale('de_AT'); Zend_Registry::set('Zend_Locale', $locale); // quelque part dans l'application $currency = new Zend_Currency();
Zend_Currency
est aussi capable de travailler à partir d'un pays
fourni en utilisant Zend_Locale
en interne.
$currency = new Zend_Currency('US'); // Voir le réglage courant qui vaut 'en_US' // var_dump($currency);
Mettre en majuscule les pays
Quand vous savez que vous utilisez un pays, vous devez le mettre en majuscule. Sinon vous pourriez croire que vous recevez un fausse locale. Par exemple quan vous donnez "om", vous pourriez alors espérer retrouver "ar_OM". Mais en ait il s'agira de "om" qui est aussi une langue.
Ainsi mettez toujours en majuscule l'entrée quand vous savez qu'il s'agit d'un pays.