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



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

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

这是我现在拥有的:

我创建了演示解决方案,以了解如何在 XAML 和代码中使用本地化字符串,用于存储在 Uno 应用项目和 Uno 库中的资源文件 (.resw((链接到 GitHub 上的演示解决方案(。

我有Uno跨平台应用程序项目"ReswUseApplication",其中包含两个资源文件:"Resources.resw"和"Custom.resw"。我在每个密钥中存储两个密钥:

SomeLabel.Text
SomeText

我使用下一个语法从这个文件中按键获取字符串资源:

XAML:

x:Uid="SomeLabel" //from Resources.resw
x:Uid="/Custom/SomeLabel" //from Custom.resw

在代码中:

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)ResourcesenLibrary.resw" />
</ItemGroup>

然后在"ReswUseApplication"中,对于所有需要的头(UWP,Android和iOS(,我添加了对这个库项目的引用。

我找到了一种适用于UWP的语法,另一种适用于Android和iOS的语法。

UWP XAML:

x:Uid="ms-resource:///LibraryWithResw/Library/SomeLabel"

代码中的 UWP:

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

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

Android, iOS XAML:

x:Uid="/Library/SomeLabel"

Android,iOS代码:

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

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

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

谢谢你的问题。这确实是一个Uno问题,缺少对ms-resource:///的支持。

这是相关的Uno问题:https://github.com/unoplatform/uno/issues/3346

最新更新