Как я могу гарантировать, что соответствующая языковая версия строкового ресурса загружается во время выполнения?
-
12-11-2019 - |
Вопрос
У меня есть файл строковых ресурсов с именем «strings.resx» в моем проекте VB.NET, определенный как встроенный ресурс.У меня есть еще один файл под названием strings.es.resx
, который содержит все те же строки на испанском языке.Я загружаю ресурс во время выполнения, используя следующий код:
MyStrings = New ResourceManager("myprog.strings", GetType(MainForm).Assembly)
Я установил языковой стандарт Espanol в Windows и снова вошел в систему, но я все еще получаю загрузку английских строковых ресурсов при выполнении вышеуказанного.Как загрузить ресурсы на испанском языке, если локаль Windows — ES?Я ожидал, что это будет обработано автоматически.
Решение
Посмотрите на свойство System.Threading.Thread.CurrentThread.CurrentUICulture
- у него привычка быть прикрепленной к нам.
Если это так, попробуйте установить его к тому же, как CurrentCulture
.
<Сильное> Обновление
С тех пор, как это не работало, убедитесь, что выходная папка вашего приложения имеет папку es
, внутри которой находится dll rings.resources.dll.Если нет, то, в принципе, Manager Resource не обнаруживает, что у специфики для культуры строки, потому что он там нет, в этом случае их копирует их, и он должен работать.
Другие советы
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ - это все по памяти и может быть не на 100% точным :-)
Ресурсы .NET загружаются с помощью Thread.CurrentUICulture
(если вы явно не переопределите его при загрузке ресурсов в коде). Thread.CurrentUICulture
задается языком пользовательского интерфейса, используемым при установке Windows, и не может быть изменен.Это не то же самое, что Thread.CurrentCulture
, который задается в Панели управления и может быть изменен в любое время.
Например, на моем компьютере CurrentCulture
возвращает "en-GB"
потому что я там, но CurrentUICulture
возвращает "en-US"
потому что Microsoft предоставляет только одну англоязычную версию Windows.