如何在ASP.NET中提供resx文件?

Ian*_*oyd 4 asp.net localization resx

如何将适用于语言环境的.resx文件提供给ASP.NET中的http客户端?

例如

GET /App_LocalResources/MeshModdler.resx
Run Code Online (Sandbox Code Playgroud)

背景

我有一个客户端二进制文件,需要向Web服务器询问相应的语言资源(即它没有所有可能的翻译;它要求它需要的那个).

现在,客户端二进制文件更喜欢给出一个包含所有本地化资源(字符串等)的xml文件.这个XML文件的格式看起来很奇怪,就像微软的resx格式一样(人们可能认为格式被复制了 - 而且它们不会出错).

理想情况下,我们可以使用ASP.NET Web服务器的强大功能来定位基于http客户端的相应resx文件Accept-Language,例如

GET /App_LocalResources/MeshModdler.resx
Accept-Language: az-Cyrl-AZ
Run Code Online (Sandbox Code Playgroud)

理想情况下,Web服务器会尝试按优先顺序返回:

  • MeshModdler.az-Cyrl-AZ.resx
  • MeshModdler.az-AZ.resx
  • MeshModdler.az.resx
  • MeshModdler.resx

但相反,服务器返回:

HTTP/1.1 404 Not Found
Run Code Online (Sandbox Code Playgroud)

奖金Chatter

我知道这是不可能的.所以除了cannot be done答案之外,我还会接受一个只做我想要的答案:

  • 利用ASP.NET Web服务器的强大功能来执行资源解析和回退
  • 允许将新的本地化resx文件放入文件夹并将其拾取
  • 不需要求助于创建一个构建看起来resx文件的虚拟页面,但必须使用以下内容来破坏每个条目:

    <root> 
       <data name="TesselateMesh.Caption">
           <value><%$ Resources:MeshModdler, TesselateMesh.Caption1 %></value>
       </data>
       ...
    </root>
    
    Run Code Online (Sandbox Code Playgroud)

额外的Chatter

现在的黑客将是将resx文件重命名为xml:

  • MeshModdler.az-Cyrl-AZ.xml
  • MeshModdler.az-AZ.xml
  • MeshModdler.az.xml
  • MeshModdler.xml

并重新发明了后备代码:

GET /MeshModdler.az-Cyrl-AZ.xml
404 Not found

GET /MeshModdler.az-AZ.xml
404 Not found

GET /MeshModdler.az.xml
200 Ok
Run Code Online (Sandbox Code Playgroud)

但是使用 ASP.NET 会很好,而不是反对它.

SLa*_*aks 5

您可以创建一个ASHX文件,该文件接受资源名称文件并.ResX在服务器上查找正确的文件.(将当前的回退逻辑移动到/GetResource.ashx?Name=MeshModeler)