Прямая локализация строк приложения довольно проста: вы используете файлы ресурсов с соответствующими именами и позволяете среде выполнения .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
CalculateTaxes
может иметь значениеCalculateTaxesUK
,CalculateTaxesFR
, тогда вы можете использовать отражение для выполнения метода. Точно так же вы можете кодировать формулы (используяExpression
илиCodeDOM
). Другой подход - покрыть все переменными (включить все в формулы), если переменная отсутствует в переводе, то не используйте ее. Кажется широким, и делать это должно быть весело. - person Sinatr   schedule 04.02.2014