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

3

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

2个回答

7
为了避免在添加新的资源字符串时编写大量样板和容易出错的代码,您可以采用以下方法:
  1. 将其添加到.resw文件中
  2. 将其添加到提供对资源访问的静态类中
  3. 将其添加到每个特定语言的.resw文件中(例如:en、fr、pt等)
请按上述步骤进行操作。
  1. 在你的类库中创建一个“Strings”文件夹,并添加一个默认语言的文件夹(例如“en-US”)
  2. 在“en-US”文件夹中添加Resources.resw文件,包含所需的键/值
  3. 安装多语言应用工具包
  4. 在VS中启用MAT,用于您的类库(VS->工具->启用多语言应用工具包)
  5. 将所需的语言添加到您的类库中(VS->项目->添加翻译语言...)
  6. 安装ResW文件代码生成器 VS扩展程序
  7. 转到Resources.resw文件属性,并将自定义工具设置为“ReswFileCodeGenerator”(您还可以在自定义工具命名空间中指定命名空间)
  8. 为了解决支持的语言检测问题(当前生成的清单根据文件夹结构“Strings/en-US”包含支持的语言),您需要在您的应用程序库中添加所有所需语言的文件夹(“fr-FR”,“bg-BG”等),并放置只有一个虚假键的Resources.resw文件。
  9. 构建您的解决方案并享受!
使用这种方法,您的所有资源都可以通过由ReswFileCodeGenerator生成的静态类访问,并且它们都可以在XAML中使用x:uid。您不需要关心不同语言之间的键同步。此外,MAT可以为您翻译资源。

2

好的,我找到了如何做这件事,并在这里找到了一个示例项目。

  • 在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);
        }
    }
}

在您的类库或主应用程序中,只需调用以下内容:
string text = LocalizationTool.MyStringOne;

非常感谢你,你救了我的一天。我搜索了三个多小时才来到这里。 :) - hellodear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接