ASP.net没有使用其他语言环境资源文件

时间:2011-09-22 19:26:30

标签: asp.net resources localization globalization

我有一个Default.aspx文件,我在其中获取本地化值:

Default.aspx

<asp:Localize meta:resourcekey="lblTitle" runat="server">Welcome</asp:Localize>
然后我创建一个匹配的后备资源文件:

为Default.aspx.resx

lblTitle.Text    Welcome to Stackoverflow Localized

这有效:

enter image description here

现在我想创建一个法语本地化:

Default.aspx.fr.resx

lblTitle.Text    Bienvenue Stackoverflow

我改变浏览器以发送法语语言环境:

enter image description here

(它确实如此):

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

除非它不起作用:

enter image description here

我正在关注Microsoft says

  

例如,如果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属性设置为浏览器传递的语言和文化值。 ...有关详细信息,请参阅How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization.

如何让ASP.NET将页面的UICultureCulture属性设置为浏览器传递的语言和文化值?


来自 How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization

  

用户可以在浏览器中设置UI文化和文化。对于   例如,在Microsoft Internet Explorer中,在“工具”菜单上,用户可以   单击Internet选项,在常规选项卡上,单击语言,然后单击   设定他们的语言偏好。如果是enableClientBasedCulture   设置了Web.config文件中的globalization元素的属性   如果是这样,ASP.NET可以为网页设置UI文化和文化   自动,基于浏览器发送的值。

     

以声明方式设置ASP.NET网页的文化和UI文化

     
      
  • 要让ASP.NET将UI文化和文化设置为当前浏览器设置中指定的第一种语言,请将UICulture和Culture设置为auto。或者,您可以将此值设置为auto: culture_info_name ,其中 culture_info_name 是文化名称。有关文化名称列表,请参阅CultureInfo。您可以在@ Page指令或Web.config文件中进行此设置。
  •   

3 个答案:

答案 0 :(得分:11)

尝试在.aspx文件的UICulture="auto"指令中设置Culture="auto"@ Page

How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization

或者,您可以在web.config中完成相同的操作,但它适用于每个页面:

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

答案 1 :(得分:6)

默认情况下,浏览器语言不会影响应用程序区域设置。您需要添加一些代码才能实现此目的。一种方法是在Global.asaxBeginRequest上的HttpModule中添加一些代码。

要从浏览器中阅读语言设置,您可以使用以下内容:

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

如果您还想影响日期时间,数字格式等,还要设置CurrentCulture

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

答案 2 :(得分:1)

我不相信ASP.NET运行时默认设置处理线程的UI文化。你必须明确地分配它。您可以使用自己的自定义HttpModule,甚至在Global.asax.cs中执行此操作。

有些事情:

string selectedCulture = browserPreferredCulture;
Thread.CurrentThread.CurrentUICulture = new
  CultureInfo(selectedCulture);
Thread.CurrentThread.CurrentCulture =
  CultureInfo.CreateSpecificCulture(selectedCulture);

请参阅http://msdn.microsoft.com/en-us/library/bz9tc508.aspx以获取示例作为起点。