Windows通用/商店应用程序中的类库本地化

我有一个Windows Store应用程序项目和类库项目的解决方案,我想添加本地化支持。
如何将所有资源文件添加到我的类库并在我的应用程序和类库中使用它们?

为了避免在添加新资源字符串时编写大量样板代码和容易出错的代码,例如:

  1. 将其添加到.resw文件
  2. 将其添加到提供对资源的访问的Static类中
  3. 将其添加到每个特定语言的.resw文件中(例如:en,fr,pt等)

您可以使用以下方法:

  1. 创建“字符串”文件夹,并在类库中添加一个默认语言文件夹(例如“en-US”)
  2. 将Resources.resw文件添加到具有所需键/值的“en-US”文件夹中
  3. 安装Multilingual App Toolkit
  4. 在VS中为类库启用MAT(VS->工具 – >启用多语言应用工具包)
  5. 将所需语言添加到类库(VS->项目 – >添加翻译语言…)
  6. 安装ResW文件代码生成器 VS扩展
  7. 转到Resources.resw文件属性并将自定义工具设置为“ReswFileCodeGenerator”(您还可以在自定义工具命名空间中指定命名空间)
  8. 要解决支持的语言检测问题(当前生成的清单包含根据文件夹结构“Strings / en-US”支持的语言),您需要在App库中添加所有必需语言的文件夹(“fr-FR”,“bg-BG” “等,并将Resources.resw文件只包含一个假密钥。
  9. 构建您的解决方案并享受!

使用这种方法,所有资源都可以通过ReswFileCodeGenerator生成的静态类获得,并且所有资源都可以在XAML中使用x:uid。 您不需要关心不同语言之间的密钥同步。 MAT也可以为您翻译资源。

好的,我发现了如何做到这一点以及在此处找到的示例项目基本上实现如下:

  • 在ClassLibrary中创建一个名为“Strings”的文件夹
  • 在Strings文件夹中为每种语言创建一个(例如:en,fr,pt等)
  • 并使用您的键/值在每个文件夹中添加一个Resources.resw

现在在ClassLibrary中添加一个具有以下代码的新类(适用于您的项目):

using System; using Windows.ApplicationModel.Resources; namespace MyClassLibraryName.Tools { public static class LocalizationTool { static ResourceLoader resourceLoader = null; public static string MyStringOne { get { String name; GetLibraryName("MyStringOne", out name); return name; } } private static void GetLibraryName(string resourceName, out string resourceValue) { if(resourceLoader == null) { resourceLoader = ResourceLoader.GetForCurrentView("MyClassLibraryName/Resources"); } resourceValue = resourceLoader.GetString(resourceName); } } } 

在您的ClassLibrary或MainApp中,只需调用以下内容:

 string text = LocalizationTool.MyStringOne;