Локализация с использованием файла ресурсов не работает

Я добавил новый файл Rosource UserNotification.resx. Затем я добавил два файла для локализации и назвал их UserNotification.hr-HR.resx и UserNotification.sl-SI.resx. (следующий поток: Как использовать локализацию в C #)

Затем я изменил язык Windows на «си». Если я печатаю текущую культуру, используя System.Globalization.CultureInfo.CurrentCulture.ToString(), вывод si sl-SI

Но я всегда получаю строку из UserNotification.resx. Швы, он не распознает файлы ресурсов локализации.


person davor    schedule 15.10.2011    source источник
comment
Попробуйте изменить CurrentUICulture в своем коде и посмотрите, что произойдет?   -  person kv-prajapati    schedule 15.10.2011
comment
Это сработает, если я добавлю это в свой конструктор App.xaml.cs: Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo (System.Globalization.CultureInfo.CurrentCulture.ToString ()); Но правильно ли это? Что делать, если я использую многопоточность?   -  person davor    schedule 15.10.2011


Ответы (1)


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

После создания нового потока и перед его запуском вы должны установить для него Культуру культуры основного потока (которая обычно использует культуру окон по умолчанию).

Итак, система показывает хорошую CurrentCulture. Но что говорит текущий поток? Может быть, приложение по какой-то причине запускается с другой культурой, поэтому загружает файл ресурсов по умолчанию? В любом случае, нет причин, по которым вы не должны вручную устанавливать текущую культуру. В основном это нужно делать, когда вы хотите дать пользователю возможность изменить язык приложения.

person Goran Genter    schedule 15.10.2011
comment
System.Globalization.CultureInfo.CurrentUICulture.ToString () и Thread.CurrentThread.CurrentUICulture.ToString () возвращает тот же результат: en-US, но System.Globalization.CultureInfo.CurrentCulture.ToString () возвращает hr-HR (== Windows - ›Панель управления -› Свойство формата региона и языка). Поэтому я должен установить CurrentThread.CurrentUICulture, потому что для System.Globalization.CultureInfo.CurrentUICulture нет установщика? - person davor; 15.10.2011
comment
Да, вы должны установить CurrentThread.CurrentUICulture и CurrentThread.CurrentCulture на то, что хотите. Вы ошибаетесь System.Globalization.CultureInfo, английский, поэтому ваше приложение использует файл ресурсов по умолчанию. Как указано в MSDN для Thread.CurrentUICulture - получает или задает текущий язык и региональные параметры, используемые диспетчером ресурсов для поиска ресурсов, связанных с языком и региональными параметрами, во время выполнения. - person Goran Genter; 15.10.2011