Windows Universal/Store应用程序中的类库本地化

本文关键字:类库 本地化 应用程序 Universal Store Windows | 更新日期: 2023-09-27 18:25:37

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

Windows Universal/Store应用程序中的类库本地化

为了避免在添加诸如之类的新资源字符串时编写大量样板文件和容易出错的代码

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

您可以使用以下方法:

  1. 创建"Strings"文件夹,在类库中只添加一个默认语言的文件夹(例如"en-US")
  2. 将Resources.resw文件添加到具有所需键/值的"en-US"文件夹
  3. 安装多语言应用程序工具包
  4. 为您的类库启用VS中的MAT(VS->工具->启用多语言应用程序工具包)
  5. 将所需语言添加到类库(VS->Project->Add Translation languages…)
  6. 安装ResW文件代码生成器VS扩展
  7. 转到Resources.resw文件属性并将Custom Tool设置为"ReswFileCodeGenerator"(也可以在Custom Tool namespace中指定命名空间)
  8. 要解决支持的语言检测问题(根据文件夹结构"Strings/en-US",当前生成的清单包含支持的语言),您需要在应用程序库中添加所有必需语言的文件夹("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;