У Рика Страла (MS MVP) есть отличный набор инструментов для управления локализацией через БД — он предлагает возможность обновлять и изменять по запросу через контролируемую среду и делает большую часть тяжелой работы за вас. Histoolkit предлагает следующие функции:
Resx или не Resx
Механизм хранения ресурсов по умолчанию в .NET использует ресурсы на основе Resx. Resx относится к расширению XML-файлов, которые служат необработанными входными данными для ресурсов, присущих .NET. Хотя XML — это входной формат хранения, который вы видите в Visual Studio и файлах .Resx, окончательный формат ресурсов — это двоичный формат (.Resources), который компилируется компилятором в сборки .NET. Эти скомпилированные ресурсы могут храниться либо вместе с кодом в двоичных сборках, либо отдельно в вспомогательных сборках ресурсов, единственной целью которых является предоставление ресурсов. Обычно в .NET ресурсы инвариантной культуры встраиваются в базовую сборку, а любые другие культуры размещаются во вспомогательных сборках, хранящихся в подкаталогах, специфичных для культуры.
Если вы используете Visual Studio, процесс компиляции ресурсов в значительной степени автоматический — когда вы добавляете файл .Resx в проект, VS.NET автоматически компилирует ресурсы и встраивает их в сборки, а также создает вспомогательные сборки вместе с необходимой структурой каталогов для каждой из поддерживаемых локалей. ASP.NET 2.0 расширяет этот базовый процесс, дополнительно автоматизируя модель обслуживания ресурсов и автоматически компилируя найденные ресурсы Resx App_GlobalResources и App_LocalResources и делая их доступными для приложения с помощью поставщика ресурсов, специфичного для ASP.NET. Поставщик ресурсов упрощает доступ к ресурсам и делает его более согласованным из приложений ASP.NET.
Сама платформа .NET использует ресурсы .Resx для обслуживания локализованного контента, поэтому кажется вполне естественным, что инструменты, предоставляемые платформой, делают инструменты создания ресурсов доступными для обслуживания той же модели.
Resx работает достаточно хорошо, но не очень гибок, когда дело доходит до фактического редактирования ресурсов. Поддержка инструментов в Visual Studio совершенно недостаточна для поддержки локализации, потому что VS не предоставляет простой способ перекрестной ссылки на ресурсы в разных локалях. И хотя редактор дизайна ASP.NET может помочь с созданием ресурсов изначально для всех элементов управления на странице — с помощью инструмента «Создать локальные ресурсы» — он работает только с данными в файле Invariant Culture Resx по умолчанию.
Ресурсы Resx также статичны — они ведь скомпилированы в сборку. Если вы хотите внести изменения в ресурсы, вам нужно будет перекомпилировать, чтобы увидеть эти изменения. В ASP.NET 2.0 представлены глобальные и локальные ресурсы, которые можно хранить на сервере и динамически обновлять — компилятор ASP.NET может компилировать их во время выполнения. Однако если вы используете предварительно скомпилированную модель веб-развертывания, ресурсы по-прежнему остаются статическими и не могут быть изменены во время выполнения. Поэтому, как только вы закончите компиляцию, ресурсы будут исправлены.
Изменение ресурсов во время выполнения может показаться не таким уж большим делом, но оно может оказаться весьма полезным в процессе локализации ресурсов. Было бы неплохо, если бы вы могли редактировать ресурсы во время выполнения, вносить изменения, а затем сразу же видеть это изменение в пользовательском интерфейсе?
Использование ресурсов базы данных
Это подводит меня к хранению ресурсов в базе данных. Базы данных по своей природе более динамичны, и вы можете вносить изменения в данные в базе данных без необходимости перекомпилировать приложение. Кроме того, данные базы данных легче передаются нескольким разработчикам и локализаторам, что упрощает внесение изменений в ресурсы в командной среде.
Когда вы думаете о редактировании ресурсов, это в основном задача ввода данных — вам нужно найти значения отдельных ресурсов, просмотреть все различные языковые варианты, а затем добавить и отредактировать значения для каждой из разных локалей. Хотя все это можно было бы сделать с помощью XML в файлах Resx напрямую, на самом деле гораздо проще создать внешний интерфейс для базы данных, чем XML-файлы, разбросанные повсюду. База данных также дает вам гораздо больше гибкости для отображения данных ресурсов в различных представлениях и упрощает выполнение таких действий, как пакетное обновление и переименование ключей и значений.
Хорошая новость заключается в том, что схемы ресурсов в .NET не являются фиксированными, и вы можете их расширять. .NET и ASP.NET 2.0 позволяют создавать настраиваемые менеджеры ресурсов (основная среда выполнения .NET) и поставщики ресурсов (ASP.NET 2.0) для обслуживания ресурсов из любого места, в том числе из базы данных.