[ASP .NET]Localisation dynamique
Pour localiser un site Web en plusieurs langues, il existe différentes façon de faire. L'une d'elle est l'utilisation de fichier ressources. Nous allons voir ici comment générer automatiquement ces fichiers de ressources et comment mettre en place le changement de langues dynamiquement sur une page Web.
Créez un nouveau projet de site Web et construisez la page "Default.aspx". Le mieux est de mettre vos différents textes dans des labels. Pour générer le fichier de ressource associée à votre page, aller dans le menu Tools > Generate Local Ressource (Remarque : il faut être en mode design pour avoir accès à cette option). Visual Studio vous générer un fichier "Default.aspx.resx" dans un répertoire App_LocalRessources.
Si vous regardez rapidement la source de la page vous constaterez que vos label, button... ont été modifiés :
| <asp:Label ID="lblMenu1" runat="server" Text="Accueil" /> |
<asp:Label ID="lblMenu1" runat="server" Text="Accueil" meta:resourcekey="lblMenu1Resource1" />
Pour créer un fichier de ressources pour une autre langue, il suffit de dupliquer le fichier .resx et de la renommer de la forme :
- /repertoireRessource/nom_de_la_page.extension_de_la_page.resx (pour la page par défault, c'est à dire la page neutre).
- /repertoireRessource/nom_de_la_page.extension_de_la_page.pays[-region].resx (pour les pages des différentes langues).
Exemple :
- Default.aspx.resx
- Default.aspx.en.resx
- Default.aspx.es-ES.resx
|
 Figure 1
|
 Figure 2
|
 Figure 3
|
Vous n'avez plus qu'à ouvrir les différents fichiers .resx et à traduire les éléments :

Default.aspx.resx

Default.aspx.en.resx
Maintenant, nos différents fichiers sont prêts. Le but serai de pouvoir change la langue du site "a la volée", par exmple en cliquant sur un drapeaux. Comment faire ? c'est assez simple. Voici une méthode parmis d'autre.
Ajoutez par exemple deux images boutons sur votre site. Nous allons maintenant travaillez le code behind. Dans l'événement click de chaque image bouton, nous allons référencer une variable de session pour stocker la langue :
protected void UK_Click(object sender, ImageClickEventArgs e) { Session["user-language"] = "en-GB"; Response.Redirect(Request.ServerVariables["HTTP_REFERER"]); } |
Ici, sur le click de l'image bouton "UK" on renseigne la variable de session avec le code de la langue. Puis on redirige la page vers elle même.
Il faut encore applique ce changement de langue. Pour cela, redéfinissez la méthode "InitialiseCulture".
|
protected override void InitializeCulture() { if (Session["user-language"] != null) Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["user-language"].ToString()); } |
Dans une page Web ASP.NET, vous pouvez affecter à deux valeurs de culture les propriétés Culture et UICulture. La valeur Culture détermine les résultats de fonctions spécifiques à une culture, comme la mise en forme de la date, des nombres et de la monnaie, etc. La valeur UICulture détermine les ressources qui sont chargées pour la page.
Il ne vous reste plus qu'à tester. Pour les plus pressé d'entre vous, vous pouvez recupérer un exemple ici.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :