Валюта, Календарь меняется на выбранный язык, но не метка в asp.net? - PullRequest
1 голос
/ 04 марта 2009

У меня есть веб-страница с календарем, меткой для обозначения значения валюты и меткой для приветствия. Когда я выбираю язык из выпадающего списка, он меняет метку валюты, календарь, но привет не меняется. Вот урезанный код для страницы aspx и файла cs:

ASPX:

<asp:Label ID="lblLanguageSelection" runat="server" 
           Text="Select a language: "></asp:Label>
    <asp:DropDownList ID="ddlLanguages" runat="server" AutoPostBack="true">
    <asp:ListItem Value="auto">Auto</asp:ListItem>
    <asp:ListItem Value="en-US">English (US)</asp:ListItem>
    <asp:ListItem Value="en-GB">English (GB)</asp:ListItem>
    <asp:ListItem Value="de">German</asp:ListItem>
    <asp:ListItem Value="fr">French</asp:ListItem>
    <asp:ListItem Value="fr-CA">French (Canada)</asp:ListItem>
    <asp:ListItem Value="hi">Hindi</asp:ListItem>
    <asp:ListItem Value="th">Thai</asp:ListItem>
    </asp:DropDownList>
    <br /><br />
    <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
    <br /><br />
    <asp:Label ID="lblCurrency" runat="server"></asp:Label>
    <br /><br />
    <asp:Label ID="lblHello" runat="server"></asp:Label>

CS:

protected void Page_Load(object sender, EventArgs e)
{
    decimal currency = 65542.43M;
    string hello = "Hello";

    lblCurrency.Text = string.Format("{0:c}", currency);
    lblHello.Text = string.Format("{0}",hello);
}

protected override void InitializeCulture()
{
    string language = Request["ddlLanguages"];

    if (language != null)
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
        Thread.CurrentThread.CurrentCulture = 
                             CultureInfo.CreateSpecificCulture(language);  
    }
}

Ответы [ 2 ]

1 голос
/ 04 марта 2009

Если вы хотите, чтобы метка была локализована, вам необходимо изучить возможность использования локализованных файлов ресурсов для строк (отсюда и вся лучшая практика "Не использовать строковые литералы".

Вам нужно будет вручную перевести текст, который вы хотите локализовать, и скомпилировать эти строки в файл ресурсов для конкретного языка, к которому затем можно получить доступ с помощью GetString метода ResourceManager объект в System.Resources .

// Create a resource manager to retrieve resources.
ResourceManager rm = new ResourceManager("items", 
        Assembly.GetExecutingAssembly());

// Retrieve the value of the string resource named "hello".
// The resource manager will retrieve the value of the  
// localized resource using the caller's current culture setting.
String hello = rm.GetString("hello");
lblHello.Text = hello;
1 голос
/ 04 марта 2009

Э-э ... что именно вы ожидаете? Валюта и даты имеют встроенные форматы в зависимости от локали. Вы хотите, чтобы ASP.NET выполнял для вас языковой перевод?!? Извините, вам не повезло в этом. :) Я скучаю по твоим намерениям?

Несколько дополнительных советов ... Избегайте кода, подобного этому:

string language = Request["ddlLanguages"];

Это нехорошо ... это работает только как побочный эффект возможностей объекта Request и быстро сломается, как только вы поместите этот код в контейнер именования, такой как страница контента. Сделайте это вместо:

string language = ddlLanguages.SelectedValue;
...