ResourceLoader在ViewModel中返回错误的语言

时间:2015-10-26 22:14:31

标签: xaml mvvm localization uwp

我正在使用Template10制作UWP应用程序,我目前在我的项目中有这个文件夹结构用于本地化:

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

默认的应用语言是en,我目前的文化是IT-IT。 资源文件是正确的,并且行为在应用程序中是一致的,首先显示意大利语版本。

我在View的代码中使用ResourceLoader类就好了,但只要我在ViewModel中使用它,它总会返回英文本地化,即使它不存在( =空字符串,虽然它存在于意大利文件中。)

我在VM中使用它是因为我正在创建一个新角色并给它一个默认名称("没有名称"),作为用户的占位符,绑定视图中的名称。

这是我使用的代码:

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-IT,但不知何故,框架忽略了它。 我做错了什么?

1 个答案:

答案 0 :(得分:0)

我找到了问题的根源: 在模型中,为了简单起见,我在代码中切入了一个方法,我从应用程序中包含的XML文件中为“Character”对象加载了一些数据。

在该方法中,我将文化更改为InvariantCulture,以确保格式独立于用户的格式。 在该方法结束时,我将其更改回用户的文化,但有些事情出了问题。

问题发生在我进行双重交换之后,后来反映到整个软件,即使是来自View的本地化字符串。

问题不依赖于ViewModel,我会处理这个问题,如果我找不到任何内容,我会发布一个新问题。