Devise, le calendrier change pour la langue sélectionnée, mais pas l'étiquette dans asp.net?

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai une page Web avec un calendrier, une étiquette pour contenir une valeur monétaire et une étiquette pour dire bonjour. Lorsque je sélectionne une langue dans le menu déroulant, le libellé de la devise, le calendrier, mais bonjour ne sont pas modifiés. Voici le code réduit pour la page aspx et le fichier 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);  
    }
}
Était-ce utile?

La solution

Si vous souhaitez que l’étiquette soit localisée, vous devez envisager d’utiliser des fichiers de ressources localisées pour les chaînes (c’est de là que provient la règle "Ne pas utiliser de littéraux de chaîne".

Vous devrez traduire manuellement le texte que vous souhaitez localiser, puis compiler ces chaînes dans un fichier de ressources spécifique à la langue, accessible via le GetString de la méthode ResourceManager dans 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;

Autres conseils

Euh ... qu'attendez-vous exactement? Les devises et les dates ont des formats intégrés basés sur les paramètres régionaux. Vous voulez qu'ASP.NET traduise la langue pour vous?!? Désolé, la chance vous manque. :) Votre intention me manque-t-elle?

Quelques conseils supplémentaires ... Évitez un code comme celui-ci:

string language = Request["ddlLanguages"];

Cela ne sert à rien ... cela ne fonctionne que comme un effet secondaire des fonctionnalités de l'objet Requête, et va rapidement casser dès que vous aurez inséré ce code dans un conteneur de nommage tel qu'une page de contenu. Faites ceci à la place:

string language = ddlLanguages.SelectedValue;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top