【问题标题】:ASP.net is not using other locale resource filesASP.net 未使用其他语言环境资源文件
【发布时间】:2011-11-23 03:11:12
【问题描述】:

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

Default.aspx

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

然后我创建一个匹配的 fallback 资源文件:

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 将页面的 UICultureCulture 属性设置为浏览器传递的语言和文化值?


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

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

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

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

【问题讨论】:

    标签: asp.net resources localization globalization


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 谢谢。这解决了问题,现在根据 Accept-Language HTTP 标头正确设置了语言环境
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我不相信 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 作为起点的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 2015-05-13
        相关资源
        最近更新 更多