Как обслуживать файл resx в ASP.NET? - PullRequest
4 голосов
/ 14 февраля 2012

Как мне передать файл .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, а не против него.

1 Ответ

5 голосов
/ 14 февраля 2012

Вы можете создать файл ASHX, который принимает файл имени ресурса и ищет правильный файл .ResX на сервере. (перемещение текущей резервной логики на /GetResource.ashx?Name=MeshModeler)

...