如何在ASP.NET中提供resx文件?
如何向ASP.NET中的http客户机提供适合本地语言环境的如何在ASP.NET中提供resx文件?,asp.net,localization,resx,Asp.net,Localization,Resx,如何向ASP.NET中的http客户机提供适合本地语言环境的.resx文件 e、 g 背景 我有一个客户端二进制文件,需要向web服务器请求适当的语言资源(即,它没有所有可能的翻译;它需要它需要的翻译) 现在,客户端二进制文件更希望得到一个包含所有本地化资源(字符串等)的xml文件。这个XML文件的格式奇怪地类似于微软的resx格式(人们可能会认为该格式是复制的,他们不会错) 理想情况下,我们可以使用ASP.NET web服务器的功能,根据http客户端的接受语言来定位适当的resx文件,例如
.resx
文件
e、 g
背景
我有一个客户端二进制文件,需要向web服务器请求适当的语言资源(即,它没有所有可能的翻译;它需要它需要的翻译)
现在,客户端二进制文件更希望得到一个包含所有本地化资源(字符串等)的xml文件。这个XML文件的格式奇怪地类似于微软的resx
格式(人们可能会认为该格式是复制的,他们不会错)
理想情况下,我们可以使用ASP.NET web服务器的功能,根据http客户端的接受语言来定位适当的resx文件,例如
GET /App_LocalResources/MeshModdler.resx
Accept-Language: az-Cyrl-AZ
理想情况下,web服务器将尝试按优先顺序返回:
MeshModdler.az Cyrl az.resx
MeshModdler.az.resx
MeshModdler.az.resx
MeshModdler.resx
但是,服务器返回:
HTTP/1.1 404 Not Found
花言巧语
我知道这是不可能的。因此,除了一个不能做的回答
之外,我也会接受一个我想要的答案:
- 利用ASP.NET web服务器的强大功能执行资源解析和回退
- 允许将新的本地化
resx
文件放入文件夹并将其拾取
- 不需要创建一个虚拟页面来构建类似于
resx
文件的内容,但必须使用以下命令来关闭每个条目:
<root>
<data name="TesselateMesh.Caption">
<value><%$ Resources:MeshModdler, TesselateMesh.Caption1 %></value>
</data>
...
</root>
但是使用ASP.NET会很好,而不是反对它。您可以创建一个ASHX文件,该文件采用资源名称文件,并在服务器上查找正确的.ResX
文件。(将当前回退逻辑移动到/GetResource.ashx?Name=MeshModeler
)如何获取响应的内容?@IanBoyd:response.TransmitFile(Server.MapPath(“~/App\u LocalResources/”+Name))
这工作正常,并被接受。但是任何使用它的人都应该知道一个微妙的错误,即响应的编码与内容的编码不匹配。e、 g.MeshModdler-de-de.resx
是用代码页850
编码的(因为它们是德国的),那么地毯就与窗帘不匹配了。
<root>
<data name="TesselateMesh.Caption">
<value><%$ Resources:MeshModdler, TesselateMesh.Caption1 %></value>
</data>
...
</root>
GET /MeshModdler.az-Cyrl-AZ.xml
404 Not found
GET /MeshModdler.az-AZ.xml
404 Not found
GET /MeshModdler.az.xml
200 Ok