Währung, Kalender Änderungen auf die ausgewählte Sprache, aber nicht in asp.net beschriften?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe eine Webseite mit einem Kalender, ein Label einen Währungswert zu halten, und ein Etikett zu sagen, hallo. Wenn ich eine Sprache aus dem Dropdown auswählen, ändert es die Währung Etikett, den Kalender, aber hallo ändert sich nicht. Hier ist der abgespeckte Code für die aspx Seite und die cs-Datei:

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);  
    }
}
War es hilfreich?

Lösung

Wenn Sie das Etikett zu lokalisierenden wollen, werden Sie für die Saiten in mit lokalisierten Ressource-Dateien suchen müssen (das ist, wo die ganze beste Praxis kommt von „nicht Stringliterale Verwenden Sie“.

Sie müssen manuell den Text, den Sie übersetzen möchten lokalisiert werden, und diese Strings kompilieren bis in eine sprachspezifische Ressourcendatei, die dann durch die GetString Methode eines href der <=" http://msdn.microsoft.com/en- us / library / system.resources.resourcemanager.aspx "rel = "nofollow noreferrer"> Resourcemanager Objekt in 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;

Andere Tipps

Er ... was genau erwarten Sie passieren? Währung und Daten haben integrierte Formate auf locale basiert. Sie wollen ASP.NET Sprachübersetzung für Sie tun?!? Sorry, du bist kein Glück auf, dass ein. :) Bin ich Ihre Absicht fehlt?

Einige weitere Hinweise ... Vermeiden Sie Code wie folgt:

string language = Request["ddlLanguages"];

Das ist nicht gut ... funktioniert dies nur als Nebeneffekt der Request-Objekt Funktionen und wird schnell so schnell brechen, wie Sie diesen Code in einem Namenscontainer setzen wie eine Content-Seite. Tun Sie dies statt:

string language = ddlLanguages.SelectedValue;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top