Articles

Le mois de la fonction PHP : localisation

  • Ecrit par Rodolphe Eveilleau
Image pour le titre du contenu

This document is also available in English en 


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&eacute;cisant l'encodage
     */
    $locale = setlocale(LC_ALL, 'fr_FR.utf-8', 'fr_FR.iso-8859-15');
 
?>

Cet exemple va afficher :

janvier
Januar 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&eacute;faut
     */
    $myLanguages = array('fr_FR', 'en_US');
    /**
     * On r&eacute;cup&egrave;re les langues accept&eacute;es par le navigateur
     */
    $acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
   
    /**
     * On analyse et on formate les langues accept&eacute;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()


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