货币,日历更改为所选语言,但不是asp.net中的标签?
-
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 ResourceManager 对象.aspx“rel =”nofollow noreferrer“> 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;
其他提示
呃......你到底想要发生什么?货币和日期具有基于区域设置的内置格式。您希望ASP.NET为您进行语言翻译吗?!?对不起,那个你运气不好。 :)我错过了你的意图吗?
一些进一步的建议......避免这样的代码:
string language = Request["ddlLanguages"];
这不好......这仅作为Request对象功能的副作用,并且只要将此代码放在命名容器(如内容页面)中,就会很快破坏。这样做:
string language = ddlLanguages.SelectedValue;
不隶属于 StackOverflow