【问题标题】:WinRT Localization - Multiple Translations per LanguageWinRT 本地化 - 每种语言的多种翻译
【发布时间】:2015-05-12 20:28:40
【问题描述】:

我正在为 Windows 8.1 Professional 环境使用 XAML/C# 构建 Windows 应用商店应用程序。

我的项目要求除了任何给定语言的多种翻译外,我还必须支持多种语言。例如,我可能有一个以英语或法语显示的标签,但在英语中它可能需要根据客户的喜好显示“标题”或“标题”一词。

我的问题是,我无法找到一种方法来打包和在同一语言的多个资源字典之间切换,同时仍然使用 XAML 为 WinRT 提供的内置本地化功能(即使用我的控件上的 Uid 属性进行绑定将它们添加到资源字典中)。

我注意到两个函数,ResourceManager.LoadPriFiles 和 ResourceManager.UnloadPriFiles,我认为这可能允许我在运行时交换资源字典,但我不知道如何将 PRI 文件打包到外部应用程序的主要资源映射,以允许加载和卸载。

我还考虑过创建一个自定义数据绑定或转换器,我可以使用它来手动绑定控件的文本,但这会让我无法在设计时在 Blend 中查看标签,并且牺牲了内置本地化功能。

另一种选择是为客户可能需要的每个自定义翻译编译一个单独的应用程序实例,但显然这不是解决问题的一种非常易于维护的方式...

最后,我考虑重新利用类似 ResourceContext 的 homeregion 限定符来解决问题;然而,这似乎非常有限,因为已经有预先建立的家庭区域可供我选择。一般来说,重新利用字段似乎是个坏主意。

【问题讨论】:

    标签: windows localization windows-runtime store


    【解决方案1】:

    您可以使用多个资源文件并使用PrimaryLanguageOverride 属性来选择与默认语言不同的语言。这将允许您更改当前资源集,而无需执行任何特定操作。

    您可以将这样的结构用于您的资源:

    Strings
    +- en-US
      +-Resources.resw
    +- fr-FR
      +-Resources.resw
    +- fr-other
      +-Resources.resw
    

    然后在您的代码中,您只需调用以下任何行:

    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride  = "fr-other";
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride  = "en-US";
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride  = "fr-FR";
    

    您的应用程序现在将使用“fr-other”语言。语言标签的第二部分最多可以使用 8 个字符。

    【讨论】:

    • 行得通!需要注意的是,自定义代码需要超过 2 个字母。 “en-custom”有效,“en-ja”无效。此外,许多示例建议使用 CultureInfo 对象并将其分配给 PrimaryLanguageOverride 以切换语言。这将不起作用,因为自定义语言字符串将引发 CultureNotFoundException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2011-01-04
    • 2020-01-03
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多