Ресурсы локализации не изменяются на определенных элементах управления гиперссылкой на странице - PullRequest
0 голосов
/ 21 мая 2011

Enter image description here

Выше скриншот сайта в разработке ...

У нас есть элемент управления DropdownList, и на его SelectedIndexChanged он выполняет обратную передачу, затем мы меняем культуру сайта и затем загружаем соответствующие файлы ресурсов.

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>

Общий класс, унаследованный всеми веб-страницами

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);
    }
}

Метод расширения (просто для информации)

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

Пример элемента управления, на котором не загружается локализованный ресурс

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

Проблема под рукой

Здесь, если я перезагрузлю страницу из адресной строки браузера, ресурсы будут загружены правильно. Я просто представляю, как это возможно, что определенные элементы управления имеют английские ресурсы, а некоторые имеют старые итальянские ресурсы при переключении культуры?

Надеюсь, я хорошо это объяснил.

1 Ответ

0 голосов
/ 21 мая 2011

Я изменил элемент управления HyperLink на следующий синтаксис и вуаля! Сейчас работает.

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