Articles
This document is also available in English
Localiser facilement avec setlocale()
En général dans une application vous avez besoin de franciser les dates, les nombres représentants de l'argent, et bien d'autres choses.
Pour les dates vous faîtes souvent appel à des tableaux PHP contenants les jours de la semaine et les mois en Français.
Pour les sommes d'argent vous utilisez number_format() ou vous remplacez avec str_replace() les points en virgules.
Oubliez tout ça désormais car la fonction setlocale() va faire se travail pour vous. En effet cette fonction permet de localiser toute ou différentes parties d'une application. Exemple
Dans l'exemple ci-dessous on localise toute l'application en Français. On a indiqué plusieurs codes internationnaux car sur Microsoft Windows ça sera fra ou france et sur GNU Linux le code sera fr ou fr_FR.
<?php /** * Localise toute l'application pour la France */ $locale = setlocale(LC_ALL, 'fr_FR@euro', 'fr_FR', 'fra'); /** * Localisation des dates uniquement */ $locale = setlocale(LC_TIME, 'fr_FR', 'fra'); // francais print strftime('%B', mktime(0,0,0,1,1,2007)); $locale = setlocale(LC_TIME, 'de_DE'); // Allemand print strftime('%B', mktime(0,0,0,1,1,2007)); $locale = setlocale(LC_TIME, 'it_IT'); // Italien print strftime('%B', mktime(0,0,0,1,1,2007)); $locale = setlocale(LC_TIME, 'zh_TW'); // chinois print strftime('%B', mktime(0,0,0,1,1,2007)); /** * Localisation de toute l'application en précisant l'encodage */ $locale = setlocale(LC_ALL, 'fr_FR.utf-8', 'fr_FR.iso-8859-15'); ?>
Cet exemple va afficher :
janvierJanuar Gennaio 1月
Exemple: localiser une application en fonction du navigateur
Dans l'exemple ci-dessous on localise toute l'application en fonction du navigateur de notre visiteur. Dans la variable $locale sera stocké le code de la langue finalement adoptée.
<?php /** * Langues que vous souhaitez mettre par défaut */ $myLanguages = array('fr_FR', 'en_US'); /** * On récupère les langues acceptées par le navigateur */ $acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE']; /** * On analyse et on formate les langues acceptées */ if (preg_match_all('`[a-z]{2}-[a-z]{2}`', $acceptLanguage, $languages)) { $myLanguages = <a href="http://www.php.net/array">array()</a>; foreach ($languages[0] as $language) { list($prefix, $sufix) = explode('-', $language); $myLanguages[] = $prefix . '_' . strtoupper($sufix); } } /** * On rend l'application disponible dans la langue choisie par le visiteur */ $locale = setlocale(LC_ALL, $myLanguages); ?>Fonctions impactées par setlocale()
- strcoll()
- strtoupper() et strtolower()
- localeconv()
- strftime()
- ctype_*
- money_format()
- La liste complète des fonctions impactée est difficile à établir, car l'utilisation des locales est souvent implicite dans les appels système.
A mémoriser
- setlocale() est disponible depuis PHP 4.
- setlocale() renvoie FALSE si la localisation n'est pas implémentée sur votre plate-forme.
- Les codes internationnaux dépendent du système d'exploitation.
- setlocale() est aussi utile pour la comparaison des chaînes de caractères, notamment quand il y a des accents.
- setlocale() prend les valeurs de votre environnement par défaut.
- La commande unix : locale -a permet de récupérer la liste des langues disponibles.
Commentaires
Vous pouvez ajouter votre commentaire! |
Vous devez vous connecter pour commenter


