我正在使用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,但不知何故,框架忽略了它。 我做错了什么?
答案 0 :(得分:0)
我找到了问题的根源: 在模型中,为了简单起见,我在代码中切入了一个方法,我从应用程序中包含的XML文件中为“Character”对象加载了一些数据。
在该方法中,我将文化更改为InvariantCulture,以确保格式独立于用户的格式。 在该方法结束时,我将其更改回用户的文化,但有些事情出了问题。
问题发生在我进行双重交换之后,后来反映到整个软件,即使是来自View的本地化字符串。
问题不依赖于ViewModel,我会处理这个问题,如果我找不到任何内容,我会发布一个新问题。