Как мне передать файл .resx
, соответствующий локали, клиенту http в ASP.NET?
например
GET /App_LocalResources/MeshModdler.resx
Фон
У меня есть клиентдвоичный файл, который должен запрашивать у веб-сервера соответствующие языковые ресурсы (т. е. он не имеет всех возможных переводов; он запрашивает тот, который ему нужен).
Сейчас двоичный файл на стороне клиента предпочитаетполучить файл xml , содержащий все локализованные ресурсы (строки и т. д.).Этот XML-файл имеет формат, который с любопытством выглядит как формат resx
от Microsoft (можно подумать, что формат был скопирован - и они не ошиблись).
В идеале мы можем использовать возможности сети ASP.NET.-сервер для поиска соответствующего файла resx на основе http-клиента Accept-Language
, например
GET /App_LocalResources/MeshModdler.resx
Accept-Language: az-Cyrl-AZ
В идеале веб-сервер попытается вернуться в порядке предпочтения:
MeshModdler.az-Cyrl-AZ.resx
MeshModdler.az-AZ.resx
MeshModdler.az.resx
MeshModdler.resx
Но вместо этого сервер возвращает:
HTTP/1.1 404 Not Found
Бонусная болтовня
Я знаю, что это невозможно.Таким образом, в дополнение к ответу cannot be done
я бы также принял ответ, который просто выполняет то, что я хочу:
- использует возможности веб-сервера ASP.NET для разрешения и восстановления ресурсов
- позволяет новым локализованным
resx
файлам быть помещенными в папку, и для их подбора не потребуется прибегать к созданию фиктивной страницы, которая создает то, что выглядит подобно 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
И заново придумать запасной код:
GET /MeshModdler.az-Cyrl-AZ.xml
404 Not found
GET /MeshModdler.az-AZ.xml
404 Not found
GET /MeshModdler.az.xml
200 Ok
Но было бы неплохо работать с ASP.NET, а не против него.