共享程序集中的资源加载程序

本文关键字:程序 资源 加载 集中 程序集 共享 | 更新日期: 2023-09-27 18:35:05

class Library A

  • 字符串
    • en-US
      • Resources.resw
    • 中乙二氮
      • Resources.resw
  • 应用
    • 视图
      • 视图A.xaml

所以我有一个视图,ViewA我需要手动加载本地化字符串。但是,每当我执行此操作时,我都会收到一个空字符串。

我试过:

var loader = ResourceLoader.GetForCurrentView();
var myLocalizedText = loader.GetString("Foo");

var loader = new ResourceLoader();
var myLocalizedText = loader.GetString("Foo");

变量 myLocalizedText 始终为空字符串。

共享程序集中的资源加载程序

我试图重现您的问题,但是在使用ResourceLoader.GetForCurrentView()new ResourceLoader()时我只是得到了ResourceMap Not Found.例外。

如果我们想为库包中的资源构造资源加载器,我们需要使用ResourceLoader.GetForCurrentView(String)方法或ResourceLoader.ResourceLoader(String)构造函数。此处String是资源映射的资源标识符,新资源加载程序将其用于非限定资源引用。

组件或库文件通常在生成过程中添加到它们所包含的包的子文件夹中,类似于它们的字符串资源。其资源标识符通常采用以下形式:

类库或程序集名称/资源文件名/字符串名称

因此,对于您的情况,我们可以使用以下代码来加载本地化字符串:

var loader = ResourceLoader.GetForCurrentView("ClassLibraryA/Resources");
var myLocalizedText = loader.GetString("Foo");

有关详细信息,请参阅应用程序资源和本地化示例中的从库或控件加载字符串以及方案 6

此外,请注意,对于UWP应用程序,最好使用GetForCurrentView(String)方法:

[资源加载程序(字符串)可能会更改或不适用于 Windows 8.1 之后的版本。相反,请使用 GetForCurrentView(String)。

另外,如果您想添加中文,最好使用zh-Hans而不是zh-CN

当没有为语言定义抑制脚本值时,包括脚本。有关语言标记的详细信息,请参阅 IANA 子标记注册表。例如,使用 zh-Hant、zh-Hant-TW 或 zh-Hans,而不是 zh-CN 或 zh-TW。

有关详细信息,请参阅:使用资源的语言限定资源。