2009-03-03 7 views
1

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 la liste déroulante, cela change le libellé de la devise, le calendrier, mais bonjour ne change pas. Voici le code dépouillé pour la page ASPX et le fichier cs:Devise, le calendrier change-t-il dans la langue sélectionnée, mais pas dans l'étiquette asp.net?

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

Répondre

1

Si vous voulez que l'étiquette soit localisée, vous devrez regarder dans les fichiers de ressources localisées pour les cordes (qui est l'endroit où l'ensemble « Ne pas utiliser les chaînes littérales » meilleures pratiques vient.

vous devrez traduire manuellement le texte que vous souhaitez être localisé et compilez ces chaînes vers le haut dans un fichier de ressource spécifique de la langue, qui peut ensuite être accessible par la méthode GetString de l'objet 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; 
1

Er ... qu'est-ce que vous attendez exactement arriver? La devise et les dates ont des formats intégrés basés sur les paramètres régionaux. Vous voulez qu'ASP.NET fasse la traduction de la langue pour vous?!? Désolé, vous n'avez pas de chance sur celui-là. :) Ai-je manqué votre intention?

Certains autres conseils ... Évitez le code comme ceci:

string language = Request["ddlLanguages"]; 

Ce n'est pas bon ... cela ne fonctionne comme un effet secondaire des caractéristiques de l'objet de demande, et va rapidement briser dès vous mettez ce code dans un conteneur de nommage tel qu'une page de contenu. Pour ce faire, à la place:

string language = ddlLanguages.SelectedValue; 
+0

Merci, j'ai pris l'échantillon d'une vidéo que j'ai regardée. Je n'ai jamais utilisé la demande auparavant. Je crois que la personne a dit qu'ils ont utilisé la requête parce que la valeur ne peut pas être initialisée à l'exécution, et SelectetdValue lancerait une erreur. – Xaisoft

Questions connexes