Невозможно загрузить RESX, зависящий от конкретной культуры, с помощью ResourceManager.GetResourceSet

#c# #localization

#c# #локализация

Вопрос:

У меня есть следующие файлы RESX, объявленные в моем проекте .NET Framework MVC:

введите описание изображения здесь

Язык по умолчанию de-CH .

У меня есть следующий код для получения ResourceSet :

 public CultureInfo Culture { get; set; }

public ResourceSet ResourceSet
{
    get
    {
        var resMgr = new ResourceManager(nameOfResource, Assembly.Load(assemblyName));

        return resMgr.GetResourceSet(cultureInfo: Culture, createIfNotExists: false, tryParents: true);
    }
}
 

У меня есть некоторый код, который для заданного набора CultureInfo объектов пытался загрузить соответствующие ResourceSet объекты.

Но по какой-то причине он всегда загружает только ResourceSet для культуры по умолчанию, de-CH . И если я установил tryParents false значение, то оно возвращается null .

Что я делаю не так? Если я установил…

 Culture = CultureInfo.GetCultureInfo("en-US")
 

…и затем вызовите ResourceSet , почему он не загружает содержимое из Create.en-US.resx?

Ответ №1:

Я понял это сам: второй аргумент, переданный GetResourceSet createIfNotExists имеет вводящее в заблуждение имя. Название подразумевает, что объект ресурса будет создан, если он еще не существует, тогда как документация объясняет это по-другому (мой акцент):

значение true для загрузки набора ресурсов, если он еще не был загружен; в противном случае значение false .

Как только я установил это значение на true ожидаемые наборы ресурсов, зависящие от конкретной культуры, были загружены.