WinRT本地化 - 每种语言的多种翻译

时间:2015-05-08 16:16:43

标签: windows localization windows-runtime store

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

我的项目要求除了针对任何给定语言的多个翻译外,我还必须支持多种语言。例如,我可能有一个标签,将以英语或法语显示,但在英语中,它可能需要显示单词" Title"或者#34; Heading"取决于客户的偏好。

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

我注意到两个函数,ResourceManager.LoadPriFiles和ResourceManager.UnloadPriFiles,我认为可能允许我在运行时交换资源字典,但我无法弄清楚如何将PRI文件转换为在应用程序的主要资源图之外打包以允许加载和卸载。

我还考虑创建一个自定义数据绑定或转换器,我可以使用它来绑定控件'手动编写文本,但这会让我失去在Blend设计时看标签的能力以及牺牲内置本地化功能的便利性。

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用多个资源文件并使用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个字符。