Le blog du pangolin

Accueil > Programmation > PHP > CodeIgniter > L’internationalisation avec codeIgniter

L’internationalisation avec codeIgniter

jeudi 19 janvier 2012, par Super Pangolin

C’est très simple (comme la plupart des composants codeIgniter).

Les différentes traductions de vos textes sont à placer dans des répertoires nommés application\language. La seule contrainte est que les noms de fichier divent finir par "_lang.php" (et évidemment s’appeler pareil pour toutes les langues).

Pour faire simple, choisissons de ne traiter que le français et l’anglais. Donnons un nom explicite à notre fichier de langue. Pour stocker les libellés d’un formulaire, créons les fichiers labels_lang.php. Nous aurons donc deux fichiers :
application\language\english\labels_lang.php
et
application\language\french\labels_lang.php

Dans ces fichiers, il suffit de déclarer un tableau $lang contenant les libellés et leurs identifiants.

Exemple (j’ai repris les fichiers de mon générateur de code) :

  1. <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. $lang['form_select_database']="Choisissez une base : ";
  4. $lang['form_select_table']="Choisissez une table : ";
  5. $lang['entete_tableau_champ']="Champ";
  6. $lang['entete_tableau_type_champ']="Type du champ";

Télécharger

Et la version anglaise :

  1. <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. $lang['form_select_database']="Select a database : ";
  4. $lang['form_select_table']="Select a table table : ";
  5. $lang['entete_tableau_champ']="Field";
  6. $lang['entete_tableau_type_champ']="Field type";

Télécharger

Pour charger ces fichiers, il suffit d’insérer le code :

  1.         //--- Chargement du fichier de langue
  2.         $this->lang->load('labels', 'french');

Télécharger

En remplaçant ’french’ par la langue qui vous intéresse.

Si vous voulez structurer encore un peu plus votre application (par exemple regrouper vos différents fichiers par module), vous pouvez les ranger dans des sous répertoires dans vos répertoires de langue.

Par exemple, déplaçons notre fichier labels_lang.php dans un répertoire "formulaire". Ceci donne la structure

  1. language\french\formulaire\labels_lang.php

et on chargera le fichier ainsi :

  1. $this->lang->load('formulaire\labels', 'french');

On accède ensuite à ce texte par le code

  1. $this->lang->line('form_select_database');

Vous pouvez choisir d’afficher ce texte directement par un "echo" dans une vue ou le passer au parser.

Quand à la gestion du choix de la langue, vous pouvez utiliser celle du navigateur ou donner le choix à l’utilisateur.

Pour détecter la langue préférée du navigateur :

  1. $tLang_l = preg_split('/[;,]/', $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
  2. switch ($tLang_l[0]) {
  3.     case 'fr':$langue="french";
  4.         break;
  5.     case 'en':$langue="english";
  6.         break;
  7.     default:
  8.         $langue="english";
  9. }

Télécharger

Ensuite, la langue sera choisie automatiquement par

  1. $this->lang->load('formulaire\labels', $langue);

En insérant ce code dans le constructeur de votre contrôleur, vous n’aurez qu’une version de code pour toutes les langues gérées par votre application.

Il faut quand même laisser à l’utilisateur la possibilité de choisir un autre langage (avec par exemple une liste déroulante ou équivalent) et enregistrer le choix en session ou dans un cookie.

Messages

  • Bonjour,

    Article intéressant.

    Pour aller plus loin, il est intéressant aussi de traiter les urls, dans le but d’avoir des urls propres à la langue.

    On peut utiliser ici la possibilité de rerouting de CodeIgniter (cf. Class Route).

    Il peut être préférable de charger les routes correspondantes à la langue choisie directement dans le fichier route.php du répertoire config.

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.