Bonjour à tous,
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 1
er => 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 <%@PageLanguage="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:ImageButtonID="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:LabelID="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é)
//proprités
string langue = "";protectedvoid Page_Load(object sender, EventArgs e)
{
/*
if (!Page.IsPostBack)
{
HeaderTitle.Text = Resources.Dictionnaire.HeaderTitle;
HeaderSubTitle.Text = Resources.Dictionnaire.HeaderSubTitle;
BodyTitle.Text = Resources.Dictionnaire.BodyTitle;
SearchTitle.Text = Resources.Dictionnaire.SearchTitle;
SideBarActu.Text = Resources.Dictionnaire.SideBarActu;
SideBarFaq.Text = Resources.Dictionnaire.SideBarFaq;
SearchGamme.Text = Resources.Dictionnaire.SearchGamme;
SearchProduit.Text = Resources.Dictionnaire.SearchProduit;
Button2.Text = Resources.Dictionnaire.ButtonSearch;
SideBarLogin.Text = Resources.Dictionnaire.SideBarLogin;
LabelMail.Text = Resources.Dictionnaire.LabelMail;
LabelPass.Text = Resources.Dictionnaire.LabelPass;
Button1.Text = Resources.Dictionnaire.ButtonConnection;
MessageTeam.Text = Resources.Dictionnaire.MessageTeam;
}
*/
}//Mes fonctions pour traduire les contenus statiques et dynamiques
protectedvoid ImgBtFr_Click(object sender, ImageClickEventArgs e)
{
this.langue = "";
//InitializeCulture();
//FrameworkInitialize()
ChangeLangue();
}protectedvoid ImgBtEn_Click(object sender, ImageClickEventArgs e)
{
this.langue = "en-US";
//InitializeCulture();
//FrameworkInitialize()
ChangeLangue();
}protectedvoid ImgBtDe_Click(object sender, ImageClickEventArgs e){
this.langue = "de-DE";
//InitializeCulture();
//FrameworkInitialize()
ChangeLangue();
}protectedvoid ImgBtEs_Click(object sender, ImageClickEventArgs e)
{
this.langue = "es-MX";
//InitializeCulture();
//FrameworkInitialize()
ChangeLangue();
}protectedvoid ChangeLangue()
{
string selectedLanguage = this.langue;UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = newCultureInfo(selectedLanguage);
}
/*
protected override void FrameworkInitialize()
{
string selectedLanguage = this.langue;
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
base.FrameworkInitialize();
}
protected override void InitializeCulture()
{
string selectedLanguage = this.langue;
UICulture = selectedLanguage;
Culture = selectedLanguage;
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...
Merci à tous par avance.