ASP.net未使用其他语言环境的资源文件。

8
我有一个名为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所说的
例如,如果您在App_LocalResources文件夹中有一个名为Default.aspx的页面,则可以创建以下文件:
- Default.aspx.resx。如果没有找到语言匹配项,则这是默认的本地资源文件(回退资源文件)。 - Default.aspx.es.resx。这是西班牙语的资源文件,没有区域信息。 - Default.aspx.es-mx.resx。这是特定于西班牙语(墨西哥)的资源文件。 - Default.aspx.fr.resx。这是法语的资源文件,没有区域信息。
为什么.NET不做应该做的事情呢?
更新:
来自MSDN:
引用:

选择不同语言的资源文件

ASP.NET可以将页面的UICulture和Culture属性设置为浏览器传递的语言和文化值。...有关详细信息,请参阅如何:设置ASP.NET Web页面全球化的Culture和UI Culture
我该如何让ASP.NET将页面的UICultureCulture属性设置为浏览器传递的语言和文化值?
来自如何:为 ASP.NET Web 页面全球化设置区域性和 UI 区域性
用户可以在浏览器中设置UI文化和区域性。例如,在Microsoft Internet Explorer中,用户可以点击“工具”菜单,选择“Internet选项”,在“常规”选项卡中点击“语言”,然后设置他们的语言偏好。如果Web.config文件中全局化元素的enableClientBasedCulture属性设置为true,则ASP.NET可以根据浏览器发送的值自动设置Web页面的UI文化和区域性。
要在ASP.NET Web页面上声明式地设置文化和UI文化,请执行以下操作:
- 要让ASP.NET将UI文化和区域性设置为当前浏览器设置中指定的第一种语言,请将UICulture和Culture设置为auto。或者,您可以将此值设置为auto:culture_info_name,其中culture_info_name是一个区域名称。有关区域名称的列表,请参见CultureInfo。您可以在@ Page指令或Web.config文件中进行此设置。
3个回答

12

谢谢。问题已解决,现在根据Accept-Language HTTP头正确设置了区域设置。 - Maksym Kozlenko

6

默认情况下,浏览器语言不会影响应用程序的区域设置。您需要添加一些代码来实现这一点。其中一种方法是在 Global.asax 或 HttpModule 上添加一些代码,在 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);

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/zh-cn/library/bz9tc508.aspx作为起点的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接