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

时间:2012-02-13 20:10:00

标签: asp.net localization resx

如何将适用于.resx文件的区域设置提供给ASP.NET中的http客户端?

e.g。

GET /App_LocalResources/MeshModdler.resx

背景

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

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

理想情况下,我们可以使用ASP.NET Web服务器的强大功能,根据http客户端的Accept-Language找到合适的resx文件,例如

GET /App_LocalResources/MeshModdler.resx
Accept-Language: az-Cyrl-AZ

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

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

但服务器返回:

HTTP/1.1 404 Not Found

Bonus Chatter

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

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

    resx

追加聊天

现在的黑客将<root> <data name="TesselateMesh.Caption"> <value><%$ Resources:MeshModdler, TesselateMesh.Caption1 %></value> </data> ... </root> 文件重命名为resx

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

重新发明后备代码:

MeshModdler.xml

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

1 个答案:

答案 0 :(得分:5)

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