【发布时间】:2015-10-26 22:14:30
【问题描述】:
我正在使用 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,但不知何故框架忽略了它。 我做错了什么?
【问题讨论】:
-
如果我没记错的话,重要的是创建 ResourceLoader 时的当前文化,而不是调用 GetString 时的当前文化。您应该为您的视图模型使用显式构造函数并确保文化是正确的。如果这不起作用,您可以尝试使用
ResourceLoader.GetForCurrentView()构建您的 ResourceLoader -
谢谢,但这不起作用。在发布此之前,我尝试在 OnNavigatedTo 事件中移动 ResourceLoader 初始化,但它是相同的。我也试过你的建议,但这也不起作用。它仍然使用默认语言。
标签: xaml mvvm localization uwp