Валюта, Календарь меняется на выбранный язык, но не на метку в asp.net ?

StackOverflow https://stackoverflow.com/questions/608226

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть веб-страница с календарем, меткой для хранения значения валюты и меткой для приветствия.Когда я выбираю язык из выпадающего списка, он меняет метку валюты, календарь, но hello не меняется.Вот урезанный код для 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);  
    }
}
Это было полезно?

Решение

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

Вам нужно будет вручную перевести текст, который вы хотите локализовать, и скомпилировать эти строки в файл ресурсов для конкретного языка, доступ к которому затем можно получить через getString (получить строку) способ проведения Менеджер ресурсов объект в Система.Ресурсы.

// 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;

Другие советы

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

Еще один совет...Избегайте подобного кода:

string language = Request["ddlLanguages"];

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

string language = ddlLanguages.SelectedValue;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top