Windows Universal / Store App中的类库本地化

时间:2014-10-03 13:50:53

标签: c# localization windows-store-apps windows-8.1 windows-phone-8.1

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

2 个答案:

答案 0 :(得分:7)

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

  1. 将其添加到.resw文件
  2. 将其添加到提供资源访问权限的Static类
  3. 将其添加到每种语言特定的.resw文件(例如:en,fr,pt等)
  4. 您可以使用以下方法:

    1. 创建" Strings"文件夹并在类库中添加一个默认语言文件夹(例如" en-US")
    2. 将Resources.resw文件添加到" en-US"具有所需键/值的文件夹
    3. 安装Multilingual App Toolkit
    4. 在VS中为您的类库启用MAT(VS->工具 - >启用多语言应用工具包)
    5. 在课程库中添加所需的语言(VS->项目 - >添加翻译语言...)
    6. 安装ResW File Code Generator VS扩展程序
    7. 转到Resources.resw文件属性并将自定义工具设置为" ReswFileCodeGenerator" (您也可以在自定义工具命名空间中指定命名空间)
    8. 要解决支持的语言检测问题(当前生成的清单包含根据文件夹结构支持的语言" Strings / en-US"),您需要在App库中添加所有必需语言的文件夹(&# 34; fr-FR"," bg-BG"等)并将Resources.resw文件只用一个假密钥。
    9. 构建您的解决方案并享受!
    10. 使用这种方法,所有资源都可以通过ReswFileCodeGenerator生成的静态类获得,并且所有资源都可以在XAML中使用x:uid。您不需要关心不同语言之间的密钥同步。 MAT也可以为您翻译资源。

答案 1 :(得分:1)

好的,我找到了如何做到这一点并找到了一个示例项目here 基本上实施如下:

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