2015-10-26 3 views
1

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

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

Язык приложения по умолчанию еп, и моя нынешняя культура это-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(), текущая культура это-IT, но как-то рамки его игнорирует. Что я делаю неправильно?

+0

Если я не ошибаюсь, важна текущая культура при создании ResourceLoader, а не текущей культуры при вызове GetString. Вы должны использовать явный конструктор для вашей модели viewmodel и убедиться, что культура верна. Если это не сработает, вы можете попытаться создать свой ResourceLoader с помощью 'ResourceLoader.GetForCurrentView()' –

+0

Спасибо, но это не работает. Прежде чем отправлять это сообщение, я попытался переместить инициализацию ResourceLoader внутри события OnNavigatedTo, но это то же самое. Я также попробовал ваше предложение, но это тоже не сработает. Он по-прежнему использует язык по умолчанию. –

ответ

0

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

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

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

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

Смежные вопросы