Bonjour,
Je crée un site web en anglais et en français, en utilisant les fichiers de ressources et la moteur interne de asp.net pour selectionner le bon fichier en fonction de la culture definie.
Le changement de la langue se fait en selectionnant la langue dans la liste deroulante, avec AutoPostBack activé. Tout ça est defini dans la page master. La page global.asax sert pour lire la cookie et appliquer la culture.
Le problème ce que le changement de la langue marche seulement pour la deuxieme fois, c'est a dire la premiere fois le changement de la valeur d'une combobox provoque seulement le refresh de la page, et la deuxieme fois la langue est changée.
J'ai l'impression que la cookie n'est pas bien sauvegardé à la fin du DropDownList1_SelectedIndexChanged
Aidez moi SVP, ça fait 3 jours que j'arrive pas a resoudre ce problème..
La master page:
Global.asax
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public partial class MasterPage : System.Web.UI.MasterPage { private string cookieName = "User-Language"; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //quant on passe ici après le DropDownList1_SelectedIndexChanged la cookie est incorrecte DropDownList drl = (DropDownList)Page.Master.FindControl("chooseLanguageDropDownList"); string language = String.Empty; HttpCookie oCookie = Request.Cookies[cookieName]; if (oCookie != null) { language = oCookie.Value; } if (language.Equals("en")) { drl.SelectedValue = "English"; } else if (language.Equals("fr")) { drl.SelectedValue = "Français"; } } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { DropDownList drl = (DropDownList)Page.Master.FindControl("chooseLanguageDropDownList"); HttpCookie cookie = new HttpCookie(cookieName); if (drl.SelectedValue == "English") { cookie.Value = "en"; } else if (drl.SelectedValue == "Français") { cookie.Value = "fr"; } //ici j'ai essayé tout pour sauvegarder cette cookie... Response.Cookies.Set(cookie); Response.Cookies.Add(cookie); Response.SetCookie(cookie); Response.Cookies[cookieName].Expires = DateTime.Now.AddYears(1); Server.Transfer(Request.Path); //aprés ça, la cookie reste bonne } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 private string cookieName = "User-Language"; void Application_BeginRequest(object sender, EventArgs e) { string sLang = string.Empty; HttpCookie oCookie = Request.Cookies[cookieName]; if (oCookie == null) { sLang = Request.UserLanguages[0]; HttpCookie oCookieSet = new HttpCookie(cookieName); oCookieSet.Value = sLang; Response.SetCookie(oCookieSet); } else if (oCookie.Value != null) { sLang = oCookie.Value; } Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(sLang); Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(sLang); }
Partager