我有一个带有一些“全球”资源的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
这一切都很好;
该网站显示英文定制版本以及通用
的后备当我尝试本地化App_GlobalResources
中的资源时出现问题:
\App_GlobalResources
ContosoFrobberResource.resx
ContosoFrobberResource.en-us.resx
网站崩溃时出现错误:
CS0101:名称空间“资源”已包含“ContosoFrobberResource”的定义
如何在ASP.NET网站中本地化App_GlobalResources
?
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>
答案 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