2011-05-21 1 views
0

Enter image description hereressources de localisation ne changent pas sur certains contrôles de lien hypertexte dans une page

Au-dessus de la capture d'écran du site dans le développement ...

Nous avons un contrôle DropDownList et sur son SelectedIndexChanged il postbacks, et nous avons ensuite changer la culture du site et il charge ensuite les fichiers de ressources respectifs.

DropDownList ASP.NET code

<asp:DropDownList ID="ddlLanguage" runat="server" CssClass="select-language" AutoPostBack="true"> 
     <asp:ListItem Value="en-US" Text="English" title="/images/Flag_USA.gif"></asp:ListItem> 
     <asp:ListItem Value="it-IT" Text="Italiano" title="/images/Flag_Italian.gif"></asp:ListItem> 
     <asp:ListItem Value="fr-FR" Text="Française" title="/images/Flag_French.gif"></asp:ListItem> 
</asp:DropDownList> 

classe commune héritée par toutes les pages web

using System; 
using System.Web; 
using System.Threading; 
using System.Globalization; 

public class languagebase : System.Web.UI.Page 
{ 
    protected override void InitializeCulture() 
    { 
     try 
     { 
      string LanguageCode = Request["ctl00$ucMenu$ddlLanguage"]; // Language Drop Down Control in Front End 
      if (!LanguageCode.IsNullOrEmpty()) 
      { 
       setCulture(LanguageCode); // Set Culture language from drop down 
       Request.Cookies["LanguageCode"].Value = LanguageCode; // Update REQUEST Cookie language from drop down 
       SetCookies(LanguageCode); // Set Cookie language from drop down 
      } 
     } 
     catch(Exception ex) 
     { 
      setCulture("en-US"); // Set default language 
      Request.Cookies["LanguageCode"].Value = "en-US"; // Update REQUEST Cookie language to default 
      SetCookies("en-US"); // Set default language 
     } 
     base.InitializeCulture(); 
    } 

    private static void setCulture(string LanguageValue) 
    { 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanguageValue); 
     Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(LanguageValue); 
    } 

    public void SetCookies(string strLanguage) 
    { 
     System.Web.HttpContext.Current.Response.Cookies["LanguageCode"].Value = strLanguage; 
     System.Web.HttpContext.Current.Response.Cookies["LanguageCode"].Expires = DateTime.Now.AddDays(15); 
    } 
} 

Méthode d'extension (juste pour l'amour de l'info)

public static Boolean IsNullOrEmpty(this String original) 
{ 
    return string.IsNullOrEmpty(original); 
} 

Exemple de contrôle sur lequel des ressources Localized ne se charge pas

<li> 
    <img src="/images/my-listing.png" alt="" align="absmiddle" /><asp:HyperLink ID="hlnkMyProperties" runat="server" meta:resourcekey="hlnkMyProperties"></asp:HyperLink> 
</li> 

problème à la main

Ici, si je recharger la page depuis la barre d'adresses du navigateur, puis les ressources sont correctement chargées . Je suis juste en train d'imaginer comment il est possible que certains contrôles ont des ressources en anglais et certains ont des ressources italiennes anciennes lors du changement de culture?

J'espère que je l'ai bien expliqué.

+0

cela se produit uniquement si vous rechargez la page à partir de la barre d'adresse du navigateur ou à chaque rechargement de la page? – jams

+0

Problème @Thomas se produit lorsque la langue est changée de dropdownlist et quand je recharge la page i.e 'F5' ou Ctrl + F5 il charge les pages correctement! –

+0

cela peut se produire en raison du cache du navigateur. Pour le vérifier, chargez votre page puis effacez le cache du navigateur puis appuyez sur 'F5'. – jams

Répondre

0

J'ai changé le contrôle HyperLink à la syntaxe suivante et voila! Ça marche maintenant.

<li> 
    <img src="/images/my-listing.png" alt="" align="absmiddle" /><a ID="hlnkMyProperties" runat="server"><%= GetLocalResourceObject("hlnkMyProperties")%></a> 
</li> 
Questions connexes