ResourceLoader возвращает неправильный язык внутри ViewModel

Я создаю приложение UWP с Template10, и в настоящее время у меня есть такая структура папок внутри моего проекта для локализации:

Localization
|_en
|  |_Resources.resw
|_it-IT
   |_Resources.resw

Язык приложения по умолчанию - en, а моя текущая культура - it-IT. Файлы ресурсов верны, и поведение в приложении одинаково, сначала всегда отображается итальянская версия.

Я использую класс ResourceLoader внутри кода View, но пока я использую его внутри ViewModel, он всегда возвращает английскую локализацию, даже если она не существует (= пустая строка, хотя она существует в итальянском файле) .

Я использую его внутри виртуальной машины, потому что я создаю нового персонажа и даю ему имя по умолчанию («Без имени») в качестве заполнителя для пользователя, привязывая имя внутри представления.

Это код, который я использую:

public class CharacterManagerViewModel : ViewModelBase
{
    public Character Character { get; set; }
    private ResourceLoader loader = new ResourceLoader();

    public override async void OnNavigatedTo(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
        if (parameter == null)
        {
            //Creating a default empty character
            Character = new Character();
            Character.Name = loader.GetString("NewCharacterName");
        }
        else
        {
            //Loading from the Model
        }
    }
}

Когда я вызываю метод GetString (), текущая культура - это ИТ, но каким-то образом фреймворк игнорирует это. Что я делаю неправильно?


person II ARROWS    schedule 26.10.2015    source источник
comment
Если я не ошибаюсь, важна текущая культура при создании ResourceLoader, а не текущая культура при вызове GetString. Вы должны использовать явный конструктор для своей модели просмотра и убедиться, что культура верна. Если это не сработает, вы можете попробовать создать свой ResourceLoader, используя ResourceLoader.GetForCurrentView()   -  person Kevin Gosse    schedule 27.10.2015
comment
Спасибо, но это не работает. Перед публикацией я попытался переместить инициализацию ResourceLoader внутрь события OnNavigatedTo, но это то же самое. Я тоже попробовал ваше предложение, но оно тоже не работает. Он по-прежнему использует язык по умолчанию.   -  person II ARROWS    schedule 27.10.2015


Ответы (1)


Я обнаружил источник своей проблемы: внутри модели с помощью метода, который я вырезал в коде для простоты, я загружаю некоторые данные для объекта «Персонаж» из файлов XML, включенных в приложение.

Внутри этого метода я меняю культуру на InvariantCulture, чтобы обеспечить независимость формата от пользовательского. В конце этого метода я возвращаю его к культуре пользователя, но что-то идет не так.

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

Проблема не зависит от ViewModel, я буду работать над проблемой, и если я ничего не найду, я опубликую новый вопрос.

person II ARROWS    schedule 02.11.2015