我有一个Default.aspx
文件,我在其中获取本地化值:
Default.aspx :
<asp:Localize meta:resourcekey="lblTitle" runat="server">Welcome</asp:Localize>
然后我创建一个匹配的后备资源文件:
为Default.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
除非它不起作用:
我正在关注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将页面的UICulture
和Culture
属性设置为浏览器传递的语言和文化值?
来自 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文件中进行此设置。
答案 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.asax
或BeginRequest
上的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以获取示例作为起点。