Встроенная система локализации .NET Framework уже справляется с этой аварийной ситуацией. Вы просто устанавливаете сателлитные библиотеки DLL, которые локализуют ваши формы и элементы управления, а затем, если правильная соответствует локали пользователя, .NET будет использовать ее, в противном случае она вернется к следующей родственной локали. Например, если языком вашего приложения по умолчанию является en-US, но вы предоставили перевод en-GB и en перевод, то запасной вариант:
ан-GB-> ен> ан-US
т.е. когда en-GB недоступен, он ищет en, а если его нет, он использует значение по умолчанию en-US.
Следовательно, при распространении вы можете распространять только ваше основное приложение en-US, а затем предоставлять дополнительные сателлитные библиотеки DLL для определенных языков, например, языковые пакеты. Существует атрибут SatelliteContractVersionAttribute
, который позволяет основным сборкам приложения указывать нужные версии сателлитов, что позволяет вашим локализациям работать между версиями сборок (например, если ваши версии сборок увеличиваются со сборкой - вы можете эффективно игнорировать номер сборки).
MSDN имеет много информации о глобализации и локализации и о том, как это работает, даже в контексте развертывания ClickOnce. Проверьте раздел Глобализация Windows Forms .
Конечно, если вы решили не полагаться на систему .NET для поддержки глобализованных продуктов, вам придется придумать что-то, что соответствует выбранному вами направлению.