Moneda, ¿El calendario cambia al idioma seleccionado, pero no se etiqueta en asp.net?
-
03-07-2019 - |
Pregunta
Tengo una página web con un calendario, una etiqueta para guardar un valor de moneda y una etiqueta para saludar. Cuando selecciono un idioma del menú desplegable, cambia la etiqueta de moneda, el calendario, pero no cambia. Aquí está el código simplificado para la página aspx y el archivo 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);
}
}
Solución
Si quieres que la etiqueta se localice, deberás considerar el uso de archivos de recursos localizados para las cadenas (que es de donde proviene todo el " No usar literales de cadenas " la mejor práctica proviene de
Deberá traducir manualmente el texto que desea localizar y compilar estas cadenas en un archivo de recursos específico del idioma, al que se podrá acceder a través de GetString del método ResourceManager en el objeto 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;
Otros consejos
Er ... ¿qué esperas que suceda exactamente? La moneda y las fechas tienen formatos incorporados basados ??en la configuración regional. ¿Quieres que ASP.NET haga la traducción de idiomas por ti? Lo siento, estás de suerte en eso. :) ¿Estoy perdiendo tu intención?
Algunos consejos adicionales ... Evita código como este:
string language = Request["ddlLanguages"];
Esto no es bueno ... esto solo funciona como un efecto secundario de las características del objeto Solicitar, y se romperá rápidamente tan pronto como coloque este código en un contenedor de nombres, como una página de contenido. Haz esto en su lugar:
string language = ddlLanguages.SelectedValue;