Вспомогательная сборка .NET, содержащая код

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

Есть ли простой способ реализовать это в .NET (например, вспомогательные сборки для ресурсов)?


person Dmitry Khalatov    schedule 04.02.2014    source источник
comment
Не могли бы вы указать мне на какой-нибудь пример или объяснение?   -  person Dmitry Khalatov    schedule 04.02.2014
comment
У вас могут быть ресурсы, в которых рассказывается, как угрожать текущему региону, тогда вы хорошо разбираетесь в спутниках (которые переведут пользовательский интерфейс и расскажут, как себя вести). Одна из возможностей - указать имя метода, например, настройка CalculateTaxes может иметь значение CalculateTaxesUK, CalculateTaxesFR, тогда вы можете использовать отражение для выполнения метода. Точно так же вы можете кодировать формулы (используя Expression или CodeDOM). Другой подход - покрыть все переменными (включить все в формулы), если переменная отсутствует в переводе, то не используйте ее. Кажется широким, и делать это должно быть весело.   -  person Sinatr    schedule 04.02.2014


Ответы (1)


Прямая локализация строк приложения довольно проста: вы используете файлы ресурсов с соответствующими именами и позволяете среде выполнения .Net выполнять тяжелую работу по обеспечению того, чтобы у вас были загружены соответствующие ресурсы в соответствии с вашими настройками UICulture.

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

Подход, который я использовал и который хорошо работает, заключается в следующем:

  • при запуске приложения определите местоположение / языковой стандарт, применимый к бизнес-правилам. В моем случае эта информация хранится в базе данных. Если у вас есть более сложное требование, чем просто локализация строк, вы не можете полагаться на UICulture начального потока - при установке Windows по умолчанию используется культура en-US, вам необходимо учитывать частое количество пользователей, которые не могут исправить это.
  • используйте эту информацию о языковом стандарте для динамической загрузки любых подключаемых сборок (используя _ 1_). Здесь поможет хорошая структура IoC, например Unity, вы можете программно регистрировать и разрешать интерфейсы к фактическим экземплярам классов. В качестве альтернативы Корпоративная библиотека Microsoft («EntLib») предоставляет вам декларативные функции подключаемого модуля. поэтому вы можете использовать файл конфигурации, чтобы указать, какие сборки обнаруживаются и загружаются.
  • применение ранее обнаруженного языкового стандарта к UICulture исходного (UI) потока * помогает получить специфические для локали строки и темы из тем и общие ресурсные (т.е. не специфичные для строки) сборки. При использовании WPF это позволяет мне загружать цвета для конкретных языков, шаблоны элементов управления, изображения (некоторые с текстом) и т. Д.
  • Я написал настраиваемую разметку extension для использования в XAML для вставки строк, которые динамически загружаются в файлы темы (расширение разметки DynamicResource было недостаточным для того, что мне было нужно) .
  • Я написал специальный конвертер, чтобы помочь с использованием изображений, специфичных для локали (встроенная функция локализации .Net framework вам не поможет, когда у вас есть изображения с текстом в них)

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

* обычно вам не нужно устанавливать культуру в фоновых потоках (до .Net 4.5), если вы не выполняете сравнение строк для конкретной культуры. Если вам действительно нужно установить определенную культуру в фоновом потоке, знайте, когда вам это нужно, и проектируйте для этого. Думайте о введении культуры как о параметре функций, которым она нужна. Или сохраните региональный стандарт предприятия в переменной уровня приложения и при необходимости прочтите его.

person slugster    schedule 04.02.2014