【问题标题】:ResourceLoader returns wrong language inside ViewModelResourceLoader 在 ViewModel 中返​​回错误的语言
【发布时间】: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


【解决方案1】:

我找到了问题的根源: 在模型内部,为了简单起见,我在代码中删减了一些数据,我从应用程序中包含的 XML 文件中为“字符”对象加载了一些数据。

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

这个问题发生在我进行双重交换之后,它会在之后反映到整个软件中,即使是视图中的本地化字符串也是如此。

这个问题不依赖于 ViewModel,我会解决这个问题,如果我找不到任何东西,我会发布一个新问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多