C# 是否有一种语法可供所有平台使用uno跨平台库项目中存储的.resw文件中的本地化资源

C# 是否有一种语法可供所有平台使用uno跨平台库项目中存储的.resw文件中的本地化资源,c#,xaml,localization,uno-platform,C#,Xaml,Localization,Uno Platform,我尝试将现有的通用Windows类库项目迁移到Uno跨平台库项目。在通用Windows库中,我有用于本地化的带字符串的资源文件(.resw)。我把它们复制到Uno图书馆项目 我已经找到了使用Uno图书馆的字符串资源的方法。但UWP和Android或iOS的语法不同。因此,我必须使用特定于平台的C#代码和XAML标记。它应该是一种语法,用于对所有平台使用相同的库资源。我正在找它 以下是我现在拥有的: 我创建了一个演示解决方案,以了解如何在XAML和代码中使用本地化字符串,这两种方法都适用于存储在U

我尝试将现有的通用Windows类库项目迁移到Uno跨平台库项目。在通用Windows库中,我有用于本地化的带字符串的资源文件(.resw)。我把它们复制到Uno图书馆项目

我已经找到了使用Uno图书馆的字符串资源的方法。但UWP和Android或iOS的语法不同。因此,我必须使用特定于平台的C#代码和XAML标记。它应该是一种语法,用于对所有平台使用相同的库资源。我正在找它

以下是我现在拥有的:

我创建了一个演示解决方案,以了解如何在XAML和代码中使用本地化字符串,这两种方法都适用于存储在Uno应用程序项目和Uno库()中的资源文件(.resw)

我有一个Uno跨平台应用程序项目“ReswUseApplication”,其中包含两个资源文件:“Resources.resw”和“Custom.resw”。我在每把钥匙里都放了两把钥匙:

SomeLabel.Text
SomeText
我使用下一个语法从以下文件中按键获取字符串资源:

XAML:

代码:

var resourceLoader = ResourceLoader.GetForCurrentView();
DefaultText = resourceLoader.GetString("SomeText"); //from Resources.resw
CustomText = resourceLoader.GetString("/Custom/SomeText"); //from Custom.resw
它适用于我测试过的所有平台(UWP、Android、iOS)

我还有Uno跨平台库项目“LibraryWithResw”,资源文件为“Library.resw”。我无法在Uno库项目中创建新的(.resw)文件,所以我获取了一个现有的(.resw)文件并粘贴了它。我无法在属性中将其标记为PRIResource,因此我必须将其作为PRIResource手写包含在库项目文件中:

<ItemGroup>
  <PRIResource Include="$(MSBuildThisFileDirectory)Resources\en\Library.resw" />
</ItemGroup>
代码中的UWP:

var resourceLoader = ResourceLoader.GetForCurrentView("LibraryWithResw");
TextFromLibrary = resourceLoader.GetString("Library/SomeText");

Android、iOS和XAML:

x:Uid="/Library/SomeLabel"
Android、iOS的代码:

var resourceLoader = ResourceLoader.GetForCurrentView();
TextFromLibrary = resourceLoader.GetString("/Library/SomeText");


正如我发现的:对于Android和iOS来说,资源文件在哪里并不重要。对于当前项目中的资源文件或库中的文件,语法相同。但在UWP中,如果项目不是最新的,我必须指出资源文件所在的项目名称。

谢谢您的提问。这确实是Uno的一个问题,并且缺少对
ms资源的支持://


这是联合国办事处的相关问题:

谢谢你的回答。将监控此问题的进展。我知道这不是问题所在,但感谢您在一个地方概述这些本地化技术!我真的很难找到UWP的例子。
var resourceLoader = ResourceLoader.GetForCurrentView("LibraryWithResw/Library");
TextFromLibrary = resourceLoader.GetString("SomeText");
x:Uid="/Library/SomeLabel"
var resourceLoader = ResourceLoader.GetForCurrentView();
TextFromLibrary = resourceLoader.GetString("/Library/SomeText");
var resourceLoader = ResourceLoader.GetForCurrentView("Library");
TextFromLibrary = resourceLoader.GetString("SomeText");