«

»

Avr 11

Internationalisation (i18n)

Cet article correspond à une traduction adaptée (il ne s’agit d’une version synthétisée et non une traduction exacte) du tutorial en anglais que l’on retrouve dans la documentation Yii à cette adresse http://www.yiiframework.com/doc/guide/1.1/fr/topics.i18n

Avant de commencer, définition le champ d’action. Merci wikipédia

Extrait de Wikipedia :

L’internationalisation est le processus de conception d’un logiciel afin qu’il puisse être adapté aux différentes langues et régions sans modifications techniques.

La régionalisation est le processus d’adaptation des logiciels à une région spécifique ou à une langue en y ajoutant des éléments spécifiques locaux et la traduction du texte.

Dans un contexte comme le Web, cette notion devient très importante puisque vous touchez le monde entier.

Yii fournit un mécanisme afin d’assurer un support de I18N sur plusieurs aspects :

  • Il met à disposition des données local
  • il propose un service de traduction des messages ou de textes
  • il permet de formater une date, une heure, un nombre selon la région…

 

La Culture de l’utilisateur et sa langue

Les caractéristiques i18n sont basées sur la culture de l’utilisateur. La culture est la combinaison de la langue et du pays de l’utilisateur. Par exemple, la culture pour un utilisateur qui parle français est fr et la culture pour un utilisateur de la France est fr_fr.

Nous aurons donc dans Yii, les formats suivants « LanguageID" ou « LanguageID_RegionID", ces données devant être en minuscule (e.g. en, en_us).

Les données locales (culture) seront représentées par une instance de la classe CLocale. Celle-ci fournira les données relatives aux nombres, symboles (comme la monnaies), le format de la date ou de l’heure…

Les données locales sont identifiées via un code du type fr (francais), en (anglais)…

Notice

Info: Yii apporte des informations sur les données locales sur la plupart des langues et régions. Ces données sont issus du référentiel commun des données locales (« Common Locale Data Repository » (CLDR)). Vous pouvez retrouver les informations dans l’arborescence du framework  « framework/i18n/data".

Si l’on prend par exemple le fichier « fr.php », nous constatons que Yii fournit la traduction de l’ensemble des données locales comme par exemple les jours de la semaine :

'weekDayNames' =>
array (
'wide' =>
array (
0 => 'dimanche',
1 => 'lundi',
2 => 'mardi',
3 => 'mercredi',
4 => 'jeudi',
5 => 'vendredi',
6 => 'samedi',
),

L’utilisation des données locales passe par la classe CApplication à travers la propriété « locale ».

 

Traduction

La traduction des messages est stockée dans un référentiel appelé source du message (message source). Un mmessage source est représenté par une implémentation de la classe CMessageSource ou par héritage l’une des classes filles.
La traduction d’un texte se fait via la fonction t(), de la classe de base « Yii ».
Lorsque la fonction Yii::t() est appelée, celle-ci recherche le message dans la source et retourne la traduction associée si elle est trouvée..

Yii permet de stocker la traduction d’un texte selon 3 types de support :

  • CPhpMessageSource: la traduction est stockée dans un tableau PHP avec le format clé -> valeur. ce tableau est stocké dans un fichier au format PHP ayant comme nom l’identifiant de la langue. Par exemple f »r.PHP » pour le francais ou « de.php » pour l’allemand..
  • CGettextMessageSource: la traduction est stockée dans un fichier au format  GNU Gettext.
  • CDbMessageSource: la traduction est stockée dans une table de la base de données. Voir la classe dans l’API de Yii CDbMessageSource.

 

La fonction Yii est définit comme suit :

 

public static string t(string $category, string $message, array $params=array ( ), string $source=NULL, string $language=NULL)
$category string Catégorie du message. Utiliser un mot simple (excepter le mot « yii » réservé). Pour plus d’information regarder la classe CPhpMessageSource.
$message string le message à traduire (source)
$params array Dans le cas ou vous souhaitez faire des messages personnalisés. Il s’agit d’un tableau qui contiendra le nom du tag à remplacer associé à la valeur.Ce tag devra être entre accolade. Le tableau sera de la forme array(‘{tag}’=>$valeurTag)
$source string Par défaut prend la valeur null. Source du texte.
$language string langue du message que vous voulez récupérer. si cette donnée est omise, le système récupère la langue de l’application c’est à dire la langue renvoyé par CApplication::getLanguage().
{return} string retourne le message traduit

 

Nous venons dans cet article d’aborder la notion de traduction multi-langues d’une application. Nous verrons dans un prochain article un petit exemple de traduction d’un texte.

J’espère que cet article vous a plu. Si vous souhaitez que des thèmes ou sujet soit abordé, n’hésitez pas à laisser un petit commentaire.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>