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

时间:2020-06-04 14:00:46

标签: c# xaml localization uno-platform

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

我从Uno库中找到了使用字符串资源的方法。但是UWP以及Android或iOS的语法都不同。结果,我必须使用特定于平台的C#代码和XAML标记。对于所有平台,使用库资源都是一种语法。而我正在寻找它。

这是我现在拥有的:

我创建了演示解决方案,以找出如何在XAML和代码中使用本地化的字符串,用于存储在Uno App项目和Uno库(link to demo solution on GitHub)中的资源文件(.resw)。

我有一个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)Resources\en\Library.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中,如果项目不是当前项目,则必须指出资源文件所在的项目名称。

1 个答案:

答案 0 :(得分:1)

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

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

相关问题