如何在ASP.NET中本地化App_GlobalResources?

时间:2012-02-08 22:22:07

标签: asp.net localization internationalization

我有一个带有一些“全球”资源的ASP.NET网站:

\App_GlobalResources
    ContosoFrobberResource.resx

这是与每个“aspx”文件关联的“本地”资源的补充:

\App_LocalResources
    Materials.aspx.resx
    Notes.aspx.resx
    OrderHistory.aspx.resx

现在我想将网站本地化为另一个区域设置(例如en)。我为每个“本地”资源创建一个resx文件:

\App_LocalResources
    Materials.aspx.en.resx
    Materials.aspx.en-us.resx
    Materials.aspx.en-uk.resx
    Materials.aspx.en-sg.resx
    Notes.aspx.en.resx
    Notes.aspx.en-us.resx
    Notes.aspx.en-uk.resx
    Notes.aspx.en-sg.resx
    OrderHistory.aspx.en.resx
    OrderHistory.aspx.en-us.resx
    OrderHistory.aspx.en-uk.resx
    OrderHistory.aspx.en-sg.resx

这一切都很好;

该网站显示英文定制版本
  • 美国(en-US)
  • 英国(英国)
  • 新加坡(en-SG)

以及通用

的后备
  • 英语(en)

当我尝试本地化App_GlobalResources中的资源时出现问题:

\App_GlobalResources
    ContosoFrobberResource.resx
    ContosoFrobberResource.en-us.resx

网站崩溃时出现错误:

  

CS0101:名称空间“资源”已包含“ContosoFrobberResource”的定义

如何在ASP.NET网站中本地化App_GlobalResources

Bonus Chatter

  

ContosoFrobberResource.resx

 <?xml version="1.0" encoding="utf-8"?>
 <root>
    <data name="ProjectDueDate" xml:space="preserve">
       <value>Proposal Due Date</value>
    </data>
 </root>

  

ContosoFrobberResource.qps.resx

 <?xml version="1.0" encoding="utf-8"?>
 <root>
    <data name="ProjectDueDate" xml:space="preserve">
       <value>Prȍposẳl Duɇ Dãtē</value>
    </data>
 </root>

1 个答案:

答案 0 :(得分:4)

找到答案。

ASP.NET不能正确回退到父语言。如果它无法将文件识别为“后备”语言环境,则无法解析它,并显示误导性错误。

e.g。

ContosoGrobber.resx
ContosoGrobber.en-us.resx

工作正常。但是:

ContosoGrobber.resx
ContosoGrobber.en.resx

在无法识别区域设置字符串的en部分时失败。更改它以使用完整的区域设置名称,并避免错误的后备代码是修复。 e.g:

ContosoGrobber.qps.resx

应该成为:

ContosoGrobber.qps-ploc.resx

换句话说:如果浏览器正在请求区域设置qps-ploc理想情况,则可以使用

ContosoGrobber.qps.resx

,本地qps-ploc将回退到qps。但由于ASP.NET中的错误,它无法正确回退。这意味着你不能它回退;你必须实际处理所有可能的语言环境:

ContosoGrobber.qps-ploc.resx
ContosoGrobber.qps-plocm.resx
ContosoGrobber.qps-ploca.resx