|
L'internationalisation est un processus consistant à
définir une application de telle sorte qu'elle puisse être
adaptée à divers langages et régions sans devoir
y apporter des changements profonds. Le terme "internationalisation"
est de plus en plus abrégé en "i18n", du
fait que l'on trouve 18 lettres entre la première et la dernière
lettre. A différencier de la "localisation" (ou
l10n), qui consiste à ajouter de nouveaux langages à
un programme déjà passé par le stage i18n...
Un script PHP destiné à être diffusé
(surtout librement) se doit de passer par l'étape de l'internationalisation
le plus tôt possible dans son cycle de création. Une
fois le programme terminé, il est souvent trop tard ou trop
compliqué de revenir en arrière pour faire en sorte
que le programme puisse s'afficher dans plusieurs langues plutôt
que celle de son concepteur. Néanmoins, avec un minimum de
méthode et un code propre et bien organisé, elle ne
saurait poser trop de problèmes.
En règle
général, pour une internationalisation effective,
il est largement préférable de mettre l'ensemble des
traductions dans un fichier externe qui sera ensuite appellé
(avec include()
ou consorts) par les fichiers en ayant besoin.
Mettre les mots/phrases directement dans le code n'est pas une bonne
solution, car cela oblige les traducteurs à venir chercher
dans ces fichiers les éléments à traduire,
et met de fait en péril votre programme pour peu que le traducteur
ne sache pas vraiment où il est...
Il existe plusieurs manières d'aborder le problème,
chacun ayant ses petits avantages. Nous en verrons trois dans cet
article, allant du plus simple au plus compliqué. Nous ne
parlerons cependant ici que de l'internationalisation de l'interface
graphique, il ne sera pas fait mention de la gestion de données
multi-lingues et autres variations dans ce vaste domaine.
Les
tableaux associatifs
Le fichier externe contiendra ici un tableau associatif, c'est à
dire un tableau contenant d'autres tableaux. Le premier tableau
peut contenir les descriptions des messages à afficher (sous
forme d'une constante) et chaque constante fait office de "clé"
vers un second tableau identifié par un code langue/région,
donnant le message lui-même correspondant à la langue
donnée. On peut aussi inverser le classement, selon son organisation.
Cela donne ceci:
|
identifiant
|
fr-fr
|
en-uk
|
|
'FIRST_NAME'
|
"prénom"
|
"first
name"
|
|
'LAST_NAME'
|
"nom"
|
"last
name"
|
|
'COUNTRY'
|
"pays"
|
"country"
|
Il est préférable d'avoir des identifiants en lettre
capitales (pour indiquer que ce sont des constantes) et en anglais
(on ne sait jamais qui décidera de traduire plus en avant
le programme, et l'anglais étant la langue la plus utilisée
dans le développement...).
En PHP, notre tableau prendre donc la forme suivante:
(fichier global_lang.inc)
<?php
$string_lang = array(
'FIRST_NAME' => array(
'fr-fr' => "prénom",
'en-uk' => "first name"),
'LAST_NAME' => array(
'fr-fr' => "nom",
'en-uk' => "last name"),
'COUNTRY' => array(
'fr-fr' => "pays",
'en-uk' => "country")
);
?>
Il ne vous reste plus, après avoir relié votre fichier
à global_lang.inc, qu'à
faire appel directement à la chaîne nécessaire.
Pour cela, vous pouvez définir une variable $lang
qui permettra à votre utilisateur de configurer la langage
qu'il souhaite utiliser, et insérer les chaînes traduites
directement dans le HTML grâce à la version courte
de la structure de langage echo:
$lang = "fr-fr";
<?=$string_lang['FIRST_NAME'][$lang];?>
N.B.: ne pas oublier de déclarer $lang
comme globale si les textes sont affichés par le biais d'une
fonction...
Il n'est guère plus difficile d'afficher à la volée
l'image qui correspond à la langue en cours, il suffit de
remplir un nouveau tableau associatif dans le fichier externe. Par
exemple:
...
$img_lang = array(
'MENU_HOMEPAGE' => array(
'fr-fr' => "fr-fr/menu/home",
'en-uk' => "en-uk/menu/home"),
);
...
puis dans le code HTML...
<img src="/img/<?=$img_lang['MENU_HOMEPAGE']['fr-fr'];?>.gif">
A vous d'agencer cette pratique à votre manière...
Page 1 | 2
|