Asp.net

ASP.net 未使用其他語言環境資源文件

  • September 23, 2011

我有一個Default.aspx文件,我可以在其中獲取本地化值:

預設.aspx

<asp:Localize meta:resourcekey="lblTitle" runat="server">Welcome</asp:Localize>

然後我創建一個匹配的備份資源文件:

預設.aspx.resx

lblTitle.Text    Welcome to Stackoverflow Localized

這有效:

在此處輸入圖像描述

現在我想創建例如法語本地化:

Default.aspx.fr.resx

lblTitle.Text    Bienvenue Stackoverflow

我更改了瀏覽器以發送法語語言環境:

在此處輸入圖像描述

(確實如此):

GET http://stackoverflow.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: fr-CH,qps-ploc;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: stackoverflow.com

除了它不起作用:

在此處輸入圖像描述

我正在關注微軟所說的:

例如,如果您在 App_LocalResources 文件夾中有一個名為 Default.aspx 的頁面,您可以創建以下文件:

  • Default.aspx.resx. 如果沒有找到語言匹配,這是預設的本地資源文件(備份資源文件)。
  • Default.aspx.es.resx. 這是西班牙語的資源文件,沒有文化資訊。
  • Default.aspx.es-mx.resx. 這是專門針對西班牙語(墨西哥)的資源文件。
  • Default.aspx.fr.resx. 這是法語的資源文件,沒有文化資訊。

為什麼 .NET 沒有做 .NET 應該做的事情?


更新:

來自 MSDN:

選擇不同語言的資源文件

ASP.NET 可以將頁面的 UICulture 和 Culture 屬性設置為瀏覽器傳遞的語言和區域性值。…有關詳細資訊,請參閱如何:為 ASP.NET 網頁全球化設置文化和 UI 文化。

如何讓 ASP.NET 將頁面的UICultureCulture屬性設置為瀏覽器傳遞的語言和文化值?


從**如何:為 ASP.NET 網頁全球化設置文化和 UI 文化:**

使用者可以在瀏覽器中設置 UI 文化和文化。例如,在 Microsoft Internet Explorer 中,在“工具”菜單上,使用者可以點擊“Internet 選項”,在“正常”選項卡上,點擊“語言”,然後設置他們的語言首選項。如果 Web.config 文件中全球化元素的 enableClientBasedCulture 屬性設置為 true,則 ASP.NET 可以根據瀏覽器發送的值自動設置網頁的 UI 文化和文化。

以聲明方式設置 ASP.NET 網頁的區域性和 UI 區域性

  • 要讓 ASP.NET 將 UI 文化和文化設置為目前瀏覽器設置中指定的第一種語言,請將 UICulture 和 Culture 設置為 auto。或者,您可以將此值設置為 auto: culture_info_name,其中culture_info_name是文化名稱。有關文化名稱的列表,請參閱CultureInfo。您可以在@ Page指令或 Web.config 文件中進行此設置。

嘗試在 .aspx 文件中的指令中設置UICulture="auto"和。Culture="auto"``@ Page

如何:設置 ASP.NET 網頁全球化的文化和 UI 文化

或者,您可以在 web.config 中完成相同的操作,但它適用於每個頁面:

<system.web>
   <globalization uiCulture="auto" culture="auto" />
</system.web>

預設情況下,瀏覽器語言不會影響應用程序區域設置。您需要添加一些程式碼來實現這一點。一種方法是在Global.asaxHttpModule中添加一些程式碼BeginRequest

要從瀏覽器讀取語言設置,您可以使用以下內容:

var languages = Request.UserLanguages
if (languages != null)
{
   var lang = languages[0];
   Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
}

如果你還想影響日期時間、數字格式等,那麼還要設置CurrentCulture.

Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);

引用自:https://stackoverflow.com/questions/7520287