I. Prérequis▲
Cet article n'étant pas technique, pour ceux qui désirent en savoir plus sur le principe d'internationalisation d'applications avec Dotnet, je vous recommande les articles suivants :
II. Introduction▲
Comme vous avez pu le constater dans le tome 5 de Didier Danse (Internationalisation d'une Application Asp.NET), il est possible avec Visual Studio 2003 de créer son site web qui affichera le contenu (traductions, formatage des dates, unités monétaires…) dans la langue du client. Malgré les nombreuses solutions possibles, chacune nécessite un minimum d'investissement de la part du développeur.
La version 2005 de Visual Studio a rendu la création et gestion d'un site web multilangue encore plus facile. Dans cet article, nous verrons comment créer un site web qui s'affichera dans la langue du navigateur du client et le tout sans aucune ligne de code !
III. Présentation de l'exemple▲
Prenons comme exemple, une simple page web qui affichera son contenu :
- en anglais, si c'est la langue du navigateur web du client ;
- sinon en français.
Pour ce faire, nous allons remplir notre page avec un contrôle Calendar et deux contrôles Label, ce qui nous donne comme code source de la page :
<%@ Page Language
=
"C#"
AutoEventWireup
=
"true"
CodeBehind
=
"Default.aspx.cs"
Inherits
=
"ArticleLocalisation._Default"
%>
<!
DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<html xmlns
=
"http://www.w3.org/1999/xhtml"
>
<head runat
=
"server"
>
<title>Untitled Page</title>
</head>
<body>
<form id
=
"form1"
runat
=
"server"
>
<div>
<asp:
Calendar ID
=
"Calendar1"
runat
=
"server"
DayNameFormat
=
"Full"
NextPrevFormat
=
"FullMonth"
OnSelectionChanged
=
"Calendar1_SelectionChanged"
>
</asp
:
Calendar>
</div>
<br />
<asp:
Label ID
=
"Label_AfficheTexte"
runat
=
"server"
Text
=
"La date sélectionnée est : "
></asp
:
Label>
<asp:
Label ID
=
"Label_AfficheDateSelectionnee"
runat
=
"server"
Text
=
" - "
></asp
:
Label>
</form>
</body>
</html>
Et pour que l'exemple soit plus parlant, nous allons traiter l'évènement SelectionChanged du contrôle Calendar afin d'afficher la date sélectionnée dans le Label Label_AfficheDateSelectionnee :
public
partial
class
_Default :
System.
Web.
UI.
Page
{
protected
void
Page_Load
(
object
sender,
EventArgs e)
{
}
protected
void
Calendar1_SelectionChanged
(
object
sender,
EventArgs e)
{
Label_AfficheDateSelectionnee.
Text =
Calendar1.
SelectedDate.
ToString
(
);
}
}
Avec comme résultat :
IV. Exportation des textes dans les fichiers de ressources▲
Pour l'instant, les textes se trouvent directement dans la source de la page. Ce qui ne pose pas encore de problème étant donné le peu de contrôles et de textes que contient cette page. Mais imaginez une page professionnelle où on se retrouverait avec des centaines de lignes de contrôles entremêlées de texte… On serait vite perdu !
La technique la plus efficace serait d'exporter tous les textes que contiennent les contrôles dans un fichier des ressources… Mais encore une fois, imaginez le travail si on a des dizaines de contrôles sur une page. Pas de panique, Visual Studio a pensé à vous en vous proposant de générer automatiquement les textes possibles pour chaque contrôle dans un fichier des ressources. Pour ce faire, mettez la page en mode Design, ensuite allez dans le menu Tools et sélectionnez Generate Local Resource.
Comme vous pouvez le constater, Visual Studio a ajouté le répertoire App_LocalResources au projet et a créé le fichier Default.aspx.resx.
Comme vous l'avez déjà constaté, le fichier ressource a le même nom que notre page aspx avec l'extension .resx. De plus, ce fichier contient les textes traduits dans la langue par défaut de notre site web (dans notre cas, nous avons opté pour le français).
Si on ouvre à présent le fichier Default.aspx.resx, nous pouvons effectivement y trouver toutes les propriétés de chaque contrôle de la page qui peuvent avoir du texte.
Si vous retournez dans le code source de la page Default.aspx, vous vous apercevrez qu'il a un peu changé. Tout d'abord, vous pouvez voir l'apparition de tag meta:resourcekey dans chaque contrôle :
<
asp:
Label ID=
"Label_AfficheTexte"
runat=
"server"
Text=
"La date sélectionnée est : "
meta:
resourcekey=
"Label_AfficheTexteResource1"
></
asp:
Label>
C'est ce tag qui permettra de retrouver dans le fichier des ressources le bon texte à afficher.
Ensuite, deux informations ont été ajoutées dans les directives de la page :
Culture=
"auto"
UICulture=
"auto"
Ceci permet à Asp.NET d'initialiser automatiquement les paramètres culturels en examinant les entêtes HTTP envoyés par les navigateurs.
À noter au passage que vous pouvez supprimer Text=« La date sélectionnée est : » si vous le désirez, car il ne servira plus à rien.
V. Prise en charge d'une autre langue▲
À présent, nous voudrions pouvoir afficher les textes en anglais (l'anglais général) qui est représenté par le code en dans la norme ISO. Mais comment faire ?…
- Utiliser le fichier ressource Default.aspx.resx ?
- Créer un nouveau fichier aspx ?
- Écrire la logique en code-behind ? (Pas de code j'ai dit !)
Et bien rien de tout ça ! Ou presque… Il suffit de créer un autre fichier des ressources (cette fois-ci à la main) qui porte comme nom Default.aspx.en.resx et d'y insérer les mêmes clés/valeurs qui se trouvent dans le premier fichier des ressources. Il ne vous reste ensuite plus qu'à traduire les textes en anglais et c'est terminé.
Il n'y a apparemment pas moyen de générer automatiquement le fichier Default.asp.en.resx via Visual Studio… Cependant, j'ai une petite astuce pour vous qui est de faire une copie du premier fichier des ressources et d'ensuite de le renommer Default.aspx.en.resx.
Après avoir traduit les textes en anglais, vous obtiendrez le résultat suivant :
VI. Exécution du site web dans la langue du navigateur du client▲
À présent que tout est prêt, nous allons pouvoir tester le site web avec des navigateurs dans des langues différentes. Pour commencer, nous allons mettre la langue du navigateur comme étant l'Anglais. Pour ce faire, voici la marche à suivre pour FireFox et IE 7 :
Marche à suivre pour FireFox |
Marche à suivre pour IE 7 |
---|---|
Allez dans le menu Outils et cliquez sur Options. Dans la boite de dialogue des options, allez dans l'onglet Avancé et cliquez sur le bouton Choisir… |
Allez dans le menu Outils et cliquez sur Options Internet. Dans la boite de dialogue, allez dans l'onglet Général et cliquez sur le bouton Langues. |
Une fois l'opération terminée, allez sur votre site web et vous pourrez constater le résultat suivant :
Comme vous pouvez le constater, notre texte, 'The selected date is :', que nous avions écrit dans le fichier des ressources Default.aspx.en.resx apparaît à l'endroit espéré. Notez aussi que sans rien faire, la date ainsi que le contrôle Calendar ont été formatés et affichés dans la langue du navigateur du client.
À présent, modifiez la langue de votre navigateur pour la mettre en Allemand. Rafraichissez le navigateur pour obtenir le résultat suivant :
Cette fois-ci, les choses sont différentes : le texte a été pris dans le fichier Default.aspx.resx étant donné que l'allemand n'est pas pris en charge par notre site web. Cependant, les textes affichés pour la date et le contrôle Calendar sont bien en allemand. Cela s'explique par le fait que l'espace de noms System.Globalization contient des classes qui définissent les informations se rapportant à la culture, notamment la langue, le pays ou la région, les calendriers utilisés, le format en vigueur pour les dates, les devises, les nombres ainsi que l'ordre de tri des chaînes.
Maintenant, pour ceux qui voudraient supporter l'allemand pour la page Default.aspx, il suffit de suivre les mêmes étapes que pour la version anglaise afin d'obtenir finalement le fichier des ressources Default.de.aspx avec les traductions en allemand.
Pour plus d'informations sur l'espace de noms System.Globalization,
voici le lien MSDN : http://msdn2.microsoft.com/fr-fr/library/system.globalization(VS.80).aspx
VII. Comment tout cela fonctionne ?▲
Comme nous l'avons vu tout à l'heure, Visual Studio a ajouté pour nous les propriétés Culture=« auto » et UICulture=« auto » permettant à Asp.NET d'initialiser les paramètres culturels en fonction du navigateur du client lorsqu'il a soumis la requête. Donc si la langue de votre navigateur est le français de France, vous aurez donc Culture=« fr-fr » et UICulture=« fr-fr ».
Une fois la langue récupérée, ASP.NET va vérifier si le fichier des ressources est disponible et si ce n'est pas le cas, il prendra le fichier par défaut, c'est-à-dire : Nomdelapage.aspx.resx. Pour finir, Asp.NET va parcourir chaque contrôle de la page pour récupérer la valeur qui se trouve dans la propriété meta:resourcekey. Cette valeur représente la clé qui sera utilisée pour retrouver les bons textes dans le fichier des ressources.
VIII. Conclusion▲
Au travers de cet article, vous avez pu voir ce qu'apportait Visual Studio 2005 en termes d'internationalisation d'un Site Web et tout ça sans écrire une seule ligne de code.
La question qu'on se pose à présent, c'est : qu'est-ce que Visual Studio Orcas nous réserve en matière d'Internationalisation ?
IX. Remerciements▲
Je remercie toute l'équipe Dotnet pour son aide durant la rédaction de cet article…
Et plus particulièrement khany pour la relecture de cet article.