2010-07-09 6 views
5

J'essaie de définir la culture de mon site Web par programme, donc lorsqu'un utilisateur clique sur un bouton, il peut changer le texte de la page de l'anglais à l'espagnol. voici mon code:ASP.NET: Modification de la culture d'un site par programme

protected void btnChangeLanguage(object sender, EventArgs e) 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("es"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es); 
} 

<asp:Label ID="lblDisplay" runat="server" meta:ResourceKey="lblDisplay" /> 

<asp:Button ID="btnChangeLanguage" runat="server" Text="Change Language" 
     OnClick="btnChangeLanguage_Click" /> 

j'ai un fichier Default.aspx.resx avec une clé/valeur: lblDisplay.text/anglais et un fichier Default.aspx.es.resx avec une clé/valeur de: lblDisplay.text/Espanol

Je ne peux pas obtenir le texte de mon label pour passer de "anglais" à "espagnol". Quelqu'un voit-il ce que je fais mal?

Répondre

11

Les threads ASP.Net sont utilisés pour la durée de vie d'une requête et non pour l'intégralité de la session d'un utilisateur. Pire, parfois le framework va recycler le même thread pour gérer des requêtes supplémentaires plutôt que de le renvoyer au pool et d'en obtenir un nouveau (ce n'est pas un gros problème car la prochaine requête va à nouveau initialiser la culture, mais quand même). Au lieu de cela, vous devez remplacer la méthode InitializeCulture() pour votre page. Voir ce lien pour plus de détails:
http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

+0

+1 Excellente réponse, juste me battre :) – armannvg

+0

Salut, merci pour votre réponse. le programme d'exemple du lien que vous m'avez donné est ce que je cherchais. J'ai quelques questions cependant, car je ne peux toujours pas faire fonctionner mon site. L'exemple de programme définit la culture en fonction de la langue choisie dans une liste. Je ne peux pas comprendre ce que le code devrait être en utilisant un linkbutton. Puisque je n'utilise pas une liste, cliquer sur mon lien devrait basculer entre anglais et espagnol. devrait-il y avoir du code dans l'événement click de mon linkbutton? –

+0

vous aurez besoin de code dans l'événement click de votre bouton, et vous aurez besoin de garder une variable quelque part comme la session que vous pouvez utiliser pour savoir ce qui est actuellement basculé. –

8
  1. Créer une variable de session appelée "CurrentUI". et le modifier sur les boutons de lien événement par exemple:

    Ici, j'ai deux boutons de lien pour chaque langue

    protected void EnglishLinkButton_Click(object sender, EventArgs e) { 
        Session["CurrentUI"] = "en-US"; 
        Response.Redirect(Request.Url.OriginalString); 
    
    } 
    
    protected void SinhalaLinkButton_Click(object sender, EventArgs e) { 
        // සිංහල (ශ්‍රී ලංකා) 
        Session["CurrentUI"] = "si-LK"; 
        Response.Redirect(Request.Url.OriginalString); 
    
    } 
    
  2. Maintenant, vous devez remplacer le InitializeCulture() dans la classe de base de la page

    protected override void InitializeCulture() { 
        if (Session["CurrentUI"] != null) { 
         String selectedLanguage = (string)Session["CurrentUI"]; 
         UICulture = selectedLanguage; 
         Culture = selectedLanguage; 
    
         Thread.CurrentThread.CurrentCulture = 
          CultureInfo.CreateSpecificCulture(selectedLanguage); 
         Thread.CurrentThread.CurrentUICulture = new 
          CultureInfo(selectedLanguage); 
        } 
    
        base.InitializeCulture(); 
    } 
    
  3. Notez que je

    //Response.Redirect(Request.Url.OriginalString); 
    

    après l'affectation de la clé de culture dans la session afin de créer un deuxième message sur la page. Parce que InitializeCulture() se produit avant l'événement et que la modification sera applicable dans la requête suivante uniquement.

+3

+1 pour «සිංහල (ශ්රී ලංකා)» :) –

Questions connexes