Генерация Resx файлов для MVC - PullRequest
4 голосов
/ 03 ноября 2011

Мы используем файлы resx для глобализации вместе с поиском в базе данных для вещей, которые могут быть настроены (например, имена вкладок, которые могут отличаться в зависимости от продукта) нашими сотрудниками CS, и, следовательно, не известны во время разработки.

Я создал пользовательский инструмент, который считывает файлы resx и интеллектуально записывает пары ключ / значение в реляционную базу данных (совпадающие значения, поэтому у нас нет дубликатов).

Это очень помоглодля нашего бизнеса - нам не нужно отправлять каждый рекс для перевода (и платить за дубликаты переводов общих слов), и у нас есть «золотой стандарт» со всеми нашими переводами (в базе данных).

созданный мной инструмент также считывает базу данных, подбирает пары ключ / значение и переводы каждого значения и создает текстовые файлы для каждого файла resx (и перевод текстового файла на каждом языке) и автоматизирует запуск resgen.exe, командыинструмент line, поставляемый с Visual Studio, для компиляции файлов resx из сгенерированных текстовых файлов.

Я неу меня есть какая-либо интеграция управления исходным кодом, поэтому мы должны вручную проверять файлы resx и вручную регистрировать созданные файлы при использовании инструмента, но это не было большой проблемой.

Моя проблема в том, чтоэтот метод не работает для наших новых проектов MVC: проекты MVC требуют, чтобы файлы resx были встроены в ресурсы с помощью модификатора доступа 'public'.

Таким образом, мы исправили это вручную, что представляет возможностьчеловеческих ошибок и добавляет нетривиальный объем работы.

Есть ли способ получить resgen.exe для создания файлов ресурсов, которые являются встроенными и общедоступными?Если нет, есть ли другой способ создания файлов resx, который будет делать это?

Обновление, дополнительный вопрос: Файлы resx, которые мы генерируем этим способом, также вызывают предупреждение:

A custom tool 'PublicResXFileCodeGenerator' is associated with file '(resxname)',
but the output of the custom tool was not found in the project.
You may try re-running the custom tool by right-clicking on the file in the
Solution Explorer and choosing Run Custom Tool. 

Упомянутый инструмент - это инструмент, который мы изначально используем для создания файлов resx.Есть ли способ предотвратить это предупреждение?

Ответы [ 3 ]

2 голосов
/ 08 ноября 2011

Прежде всего, вы можете генерировать ресурсы как публичные, используя параметр командной строки /publicClass.См. Также: Resgen.exe - Генератор файлов ресурсов @ msdn

Во-вторых, я не думаю, что вы можете позволить resgen делать файлы ресурсов встроенными по умолчанию, просто потому, что это не свойстворесурса, но настройка проекта.

Например: когда вы добавляете новый ресурс "Resource1" с помощью мастера, новая группа элементов будет добавлена ​​в файл проекта:

<ItemGroup>
  <EmbeddedResource Include="Resource1.resx">
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>Resource1.Designer.cs</LastGenOutput>
  </EmbeddedResource>
</ItemGroup>

Может быть, есть библиотеки для программного изменения файлов проекта, но я не знаю о них.

Я бы просто попытался сериализовать и десериализовать файл проекта самостоятельно и добавить этот раздел в него., для каждого генерируемого вами ресурса.

РЕДАКТИРОВАТЬ:

Он также добавит в другую группу элементов:

<ItemGroup>
  <Compile Include="Resource1.Designer.cs">
    <AutoGen>True</AutoGen>
    <DependentUpon>Resource1.resx</DependentUpon>
    <DesignTime>True</DesignTime>
  </Compile>
</ItemGroup>

Так что, если у вас нет хорошей сторонней программысериализовать, редактировать, десериализовать файл проекта.Вероятно, лучше позволить волшебнику сделать это.

0 голосов
/ 21 августа 2012

В итоге мы нашли решение этой проблемы.

Для проектов MVC мы изменили инструмент для использования класса ResXResourceWriter для обновления файлов resx, сопоставления существующих ключей и добавления новых по мере необходимости.

При этом сохраняется статус «Встроенный ресурс», а также все другие необходимые сведения.

Нам все еще нужно правильно настроить файл при первом его создании, но этогораздо более управляемая проблема.

0 голосов
/ 15 ноября 2011

Я боролся с этим раньше, но у меня хорошо работают ресурсы. Это может помочь, хотя я не уверен. Всегда стоит пройтись по основам, так как иногда это что-то очень простое, и .NET-ресурсы могут быть негибкими.

Я объясню, как я использую ресурсы, и, надеюсь, вы сможете применить их к своему сценарию (я не могу понять, в чем именно заключается их проблема, исходя из вашего вопроса).

Шаги по настройке ресурсов 1. Добавьте папку ASP.NET в свое веб-решение, щелкните правой кнопкой мыши решение, выберите Добавить> Добавить папку ASP.NET> App_GlobalResources

  1. Добавьте файл ресурса в папку, назовите его MyResourceFile.resx

  2. Откройте Свойства для файла и выберите

    • Действие построения : встроенный ресурс
    • Пользовательский инструмент : PublicResXFileCodeGenerator
  3. Затем добавьте свои разные файлы ресурсов для разных языков и т. Д. (Укажите одинаковые свойства для всех файлов ресурсов и т. Д. Build Action и Custom Tool)

    • MyResourceFile.en-GB.resx
    • MyResourceFile.fr-FR.resx
    • MyResourceFile.ja-JP.resx

Это должно автоматически сгенерировать ваш менеджер ресурсов, к которому можно обратиться через вызов

MyResourceFile.MyResourceText

Стоит отметить, что если у вас нет установленной культуры или она неправильно определена, она не будет работать и вы получите всевозможные ошибки.

Etc MyResourceFile.en-JP.resx не будет работать (если вы не создадите эту пользовательскую культуру) и вызовет всевозможные другие проблемы. Эта культура будет отображаться из CultureInfo в приложении, чтобы определить, какой файл ресурсов использовать, поэтому он должен быть действительным CultureInfo.

...