Ian*_*oyd 6 asp.net globalization resources localization
我有一个Default.aspx文件,我获取本地化的值:
Default.aspx:
<asp:Localize meta:resourcekey="lblTitle" runat="server">Welcome</asp:Localize>
Run Code Online (Sandbox Code Playgroud)
然后我创建一个匹配的回退资源文件:
Default.aspx.resx:
lblTitle.Text Welcome to Stackoverflow Localized
Run Code Online (Sandbox Code Playgroud)
这有效:

现在我想创建一个法语本地化:
Default.aspx.fr.resx:
lblTitle.Text Bienvenue Stackoverflow
Run Code Online (Sandbox Code Playgroud)
我改变浏览器以发送法语语言环境:

(它确实如此):
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
Run Code Online (Sandbox Code Playgroud)
除了它不起作用:

我正在关注微软所说的话:
例如,如果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设置UICulture和Culture属性的页面由浏览器传递的语言和文化价值?
用户可以在其浏览器中设置UI文化和文化.例如,在Microsoft Internet Explorer的"工具"菜单上,用户可以单击"常规"选项卡上的"Internet选项",单击"语言",然后设置其语言首选项.如果Web.config文件中全球化元素的enableClientBasedCulture属性设置为true,则ASP.NET可以根据浏览器发送的值自动为Web页面设置UI文化和文化.
以声明方式为ASP.NET网页设置文化和UI文化
- 要让ASP.NET将UI文化和文化设置为当前浏览器设置中指定的第一种语言,请将UICulture和Culture设置为auto.或者,您可以将此值设置为auto:culture_info_name,其中culture_info_name是区域性名称.有关文化名称的列表,请参阅CultureInfo.您可以在@ Page指令或Web.config文件中进行此设置.
Cra*_*aig 11
尝试设置UICulture="auto"并Culture="auto"在@ Page您的.aspx文件指令.
或者,您可以在web.config中完成相同的操作,但它适用于每个页面:
<system.web>
<globalization uiCulture="auto" culture="auto" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
默认情况下,浏览器语言不会影响应用程序区域设置.您需要添加一些代码才能实现此目的.一种方法是在其中添加一些代码Global.asax或一个HttpModule BeginRequest.
要从浏览器中读取语言设置,您可以使用以下内容:
var languages = Request.UserLanguages
if (languages != null)
{
var lang = languages[0];
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
}
Run Code Online (Sandbox Code Playgroud)
如果您还想影响日期时间,数字格式等,那么也要设置CurrentCulture.
Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
Run Code Online (Sandbox Code Playgroud)