Вот решение, которое не требует какого-либо кодирования и работает даже для текстов исключений, которые загружаются слишком рано, чтобы мы могли изменять их по коду (например, в mscorlib).
Это может быть не всегда применимо в каждом случае (это зависит от ваших настроек, так как вам нужно иметь возможность создавать файл .config помимо основного файла .exe), но это работает для меня. Итак, просто создайте app.config
в dev (или [myapp].exe.config
или web.config
в производстве), который содержит следующие строки, например:
<configuration>
...
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="mscorlib.resources" publicKeyToken="b77a5c561934e089"
culture="fr" /> <!-- change this to your language -->
<bindingRedirect oldVersion="1.0.0.0-999.0.0.0" newVersion="999.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml.resources" publicKeyToken="b77a5c561934e089"
culture="fr" /> <!-- change this to your language -->
<bindingRedirect oldVersion="1.0.0.0-999.0.0.0" newVersion="999.0.0.0"/>
</dependentAssembly>
<!-- add other assemblies and other languages here -->
</assemblyBinding>
</runtime>
...
</configuration>
То, что это делает, говорит фреймворку перенаправить привязки сборки для ресурсов mscorlib
и System.Xml
, для версий между 1 и 999, на французском языке (культура установлена в "fr
") для сборка, которая ... не существует (произвольная версия 999).
Поэтому, когда CLR будет искать французские ресурсы для этих двух сборок (mscorlib и System.xml), он не найдет их и изящно переключится на английский. В зависимости от контекста и тестирования вы можете добавить другие сборки в эти перенаправления (сборки, содержащие локализованные ресурсы).
Конечно, я не думаю, что это поддерживается Microsoft, поэтому используйте на свой страх и риск. Что ж, в случае, если вы обнаружите проблему, вы можете просто удалить эту конфигурацию и проверить, что она не связана.