2009-03-03 43 views
1

我有一個帶有日曆的網頁,一個用於存放貨幣價值的標籤以及一個打招呼的標籤。當我從下拉列表中選擇一種語言時,它會更改貨幣標籤,日曆,但是您不會更改。下面是aspx頁面和CS文件的精簡代碼:貨幣,日曆更改爲選定的語言,但在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); 
    } 
} 

回答

1

如果要進行本地化的標籤,你需要考慮使用本地化的資源文件的字符串(這是整個「不要使用字符串常量」最佳實踐從何而來。

你需要要進行本地化文本人工翻譯,最多編譯這些字符串放到特定語言的資源文件,然後可以通過ResourceManager對象在System.ResourcesGetString方法訪問。

// 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

呃......正是你期待發生什麼呢?貨幣和日期具有基於區域設置的內置格式。你希望ASP.NET爲你做語言翻譯?!?對不起,你在這一個運氣不好。 :)我錯過了你的意圖嗎?

一些進一步的建議......避免這樣的代碼:

string language = Request["ddlLanguages"]; 

這是沒有好...這只是作品的Request對象的功能的副作用,並會很快,一旦突破你把這段代碼放在一個命名的容器中,比如內容頁面。而是執行此操作:

string language = ddlLanguages.SelectedValue; 
+0

謝謝,我從我觀看的視頻中抽取了樣本。我從來沒有真正使用過請求。我相信這個人說他們使用了Request,因爲這個值可能不會在運行時初始化,而SelectetdValue會拋出一個錯誤。 – Xaisoft 2009-03-03 21:48:37