共享程序集中的ResourceLoader

时间:2016-02-18 03:36:08

标签: c# win-universal-app

班级图书馆A

  • 字符串
    • 的en-US
      • Resources.resw
    • ZH-CN
      • Resources.resw
  • 应用
      • ViewA.xaml

所以我有一个View,ViewA我需要手动加载本地化的字符串。但是,每当我这样做时,我都会收到一个空字符串。

我试过了:

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

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

变量myLocalizedText始终为空字符串。

1 个答案:

答案 0 :(得分:0)

我尝试重现您的问题,但在使用ResourceMap Not Found.ResourceLoader.GetForCurrentView()时,我遇到new ResourceLoader()例外。

如果我们想为库包中的资源构建资源加载器,我们需要使用ResourceLoader.GetForCurrentView(String) methodResourceLoader.ResourceLoader(String) constructor。这里String是新资源加载器用于非限定资源引用的ResourceMap的资源标识符。

  

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

     

ClassLibraryOrAssemblyName / ResourceFileName /字符串名称

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

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

有关详细信息,请参阅Loading strings from libraries or controls中的Application resources and localization sample方案6

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

  

在Windows 8.1之后,[ResourceLoader(String)可能会被更改或不可用于发布。相反,使用 GetForCurrentView(String)。]

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

  

在没有为该语言定义的抑制脚本值时包含脚本。有关语言标记的详细信息,请参阅IANA subtag registry。例如,使用zh-Hant,zh-Hant-TW或zh-Hans,而不是zh-CN或zh-TW。

有关详细信息,请参阅:Qualify resources with their language