Je développe actuellement un site web sous Visual Studio Web Developer en ASP.NET / C# avec le .NET FRAMEWORK 3.5 SP1.
Pour la gestion des langues, j'ai choisi d'utiliser les fichiers de ressources qui me semblent être une très bonne solution.
Le problème, c'est que ça ne fonctionne pas! Ou plutôt, je n'arrive à faire fonctionner cette mécannique.
Il n'y a aucun problème concernant les données par défaut, en langue française mais les changements de langue ne se font pas.
Je vous explique ma démarche:
J'ai créé mes fichiers .resx, le 1er => Dictionnaire.resx et les autres => Dictionnaire.en-GB.resx, Dictionnaire.de.DE.resx, Dictionnaire.es-MX.resx. Dans le répertoire /App_GlobalResources.
Dans le web.config, j'ai mis la balise suivante => <globalizationuiCulture="
fr"
culture="
fr-FR"
/>, pour indiquer la langue par défaut.
Dans la page .aspx en entête j'ai mis <%
@
Page
Language="C#"
AutoEventWireup="true"
CodeFile="index.aspx.cs"
Inherits="_Index"
UICulture="auto" %>
Et j'utilise des control ImageButton pour chaque langue avec un petit drapeau dont je vous met un exemplaire: <asp:ImageButton
ID="ImgBtEn"
runat="server"
ImageUrl="/images/en.gif"
CssClass="img_langues" AlternateText="en"
title="en"
onclick="ImgBtEn_Click"
ValidationGroup="langue"
PostBackUrl="/"
/>
Ensuite, pour chaque control que je souhaite traduire j'ai utilisé la propriété Expression et ça donne ceci :
<asp:Label
ID="HeaderTitle"
runat="Server"
Text="<%$ Resources:Dictionnaire, HeaderTitle %>
"
/>
Dans le code-behind C#, j'ai dans un premier temps fait mes using :
using System.Globalization;
using System.Resources;
using System.Threading;
Puis j'ai fais mes fonctions attachés à mes drapeaux :
(J'ai volontairement laissé du code en commentaire pour vous montrer ce que j'ai essayé et qui n'a pas fonctionné)
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
base.InitializeCulture();
}
*/
Voilà, je pense avoir fait le tour.
Je tiens à préciser que ça fait déjà plusieurs jours que je bloc la dessus.
Donc SVP, si quelqu'un pouvais m'aider ou me donner une solution...
J'ai enfin trouvé la solution!!!
Il fallait tout simplement un control asp qui supporte l'autopostback, et auquel on peut renseigner la propriété Value.
En faisant comme ci-dessous ça fonctionne
Code-behind :
protected override void InitializeCulture()
{
string lang = Request["language"];
if (lang != null && lang != "")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
}
}