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

标签 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-UK)
  • 新加坡 (en-SG)

  • 以及通用的后备
  • 英语 (en)

  • 当我尝试本地化 App_GlobalResources 中的资源时出现问题:
    \App_GlobalResources
        ContosoFrobberResource.resx
        ContosoFrobberResource.en-us.resx
    

    该网站因以下错误而崩溃:

    CS0101: The namespace 'Resources' already contains a definition for 'ContosoFrobberResource'



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

    奖金喋喋不休

    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>
    

    最佳答案

    找到了答案。

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

    例如

    ContosoGrobber.resx
    ContosoGrobber.en-us.resx
    

    工作正常。但:
    ContosoGrobber.resx
    ContosoGrobber.en.resx
    

    失败时 "en "无法识别区域设置字符串的一部分。更改它以使用完整的语言环境名称,并避免错误的回退代码是修复。例如。:
    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
    

    关于asp.net - 如何在 ASP.NET 中本地化 App_GlobalResources?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202428/

    相关文章:

    asp.net - 使用 javascript 应用样式并不总是有效

    c# - 如何找出文本框中的第一个字符索引

    c# - 如何使用 List<String> 变量过滤强类型列表

    Android 以编程方式检查应用程序是否针对某种语言进行了本地化

    c++ - 在 MFC 中加载字幕字符串的最佳位置?

    javascript - 如何从一个模板创建多个不同语言的页面?

    c# - <customErrors mode=RemoteOnly/> 行为的等效实现

    linux - 用不同的语言运行 Qt 应用程序?

    java - 国际化电话号码、地址、货币本地化

    jsp - 在Velocity或FreeMarker中更好地支持国际化?