WinRT 本地化 - 每种语言的多种翻译
WinRT Localization - Multiple Translations per Language
我正在 Windows# 中为 Windows 8.1 Professional 环境构建一个 Windows Store 应用程序。
我的项目要求我必须支持多种语言以及任何给定语言的多种翻译。例如,我可能有一个将以英语或法语显示的标签,但在英语中它可能需要显示单词 "Title" 或单词 "Heading",具体取决于客户的偏好。
我的问题是我无法找到一种方法来打包和切换相同语言的多个资源字典,同时仍然使用 XAML 为 WinRT 提供的内置本地化功能(即使用 Uid 属性 在我的控件上将它们绑定到资源字典)。
我注意到两个函数,ResourceManager.LoadPriFiles 和 ResourceManager.UnloadPriFiles,我认为它们可能允许我在运行时交换资源字典,但我不知道如何获得 PRI要在应用程序的主要资源映射之外打包的文件,以允许加载和卸载。
我也考虑过创建一个自定义数据绑定或转换器,我可以用它来手动绑定控件的文本,但这会让我失去在设计时在 Blend 中查看标签的能力,同时也会牺牲便利性的内置本地化功能。
另一种选择是为客户可能需要的每个自定义翻译编译一个单独的应用程序实例,但显然这不是解决问题的一种非常易于维护的方法...
最后,我考虑过重新利用 ResourceContext 的 homeregion 限定符来解决问题;然而,这似乎非常有限,因为已经有我必须从中选择的预先建立的家庭区域。总的来说,重新利用字段似乎不是一个好主意。
您可以使用多个资源文件并使用 PrimaryLanguageOverride 属性 到 select 与默认语言不同的语言。这将允许您更改当前资源集而无需执行任何特定操作。
您可以为您的资源使用这样的结构:
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 个字符。
我正在 Windows# 中为 Windows 8.1 Professional 环境构建一个 Windows Store 应用程序。
我的项目要求我必须支持多种语言以及任何给定语言的多种翻译。例如,我可能有一个将以英语或法语显示的标签,但在英语中它可能需要显示单词 "Title" 或单词 "Heading",具体取决于客户的偏好。
我的问题是我无法找到一种方法来打包和切换相同语言的多个资源字典,同时仍然使用 XAML 为 WinRT 提供的内置本地化功能(即使用 Uid 属性 在我的控件上将它们绑定到资源字典)。
我注意到两个函数,ResourceManager.LoadPriFiles 和 ResourceManager.UnloadPriFiles,我认为它们可能允许我在运行时交换资源字典,但我不知道如何获得 PRI要在应用程序的主要资源映射之外打包的文件,以允许加载和卸载。
我也考虑过创建一个自定义数据绑定或转换器,我可以用它来手动绑定控件的文本,但这会让我失去在设计时在 Blend 中查看标签的能力,同时也会牺牲便利性的内置本地化功能。
另一种选择是为客户可能需要的每个自定义翻译编译一个单独的应用程序实例,但显然这不是解决问题的一种非常易于维护的方法...
最后,我考虑过重新利用 ResourceContext 的 homeregion 限定符来解决问题;然而,这似乎非常有限,因为已经有我必须从中选择的预先建立的家庭区域。总的来说,重新利用字段似乎不是一个好主意。
您可以使用多个资源文件并使用 PrimaryLanguageOverride 属性 到 select 与默认语言不同的语言。这将允许您更改当前资源集而无需执行任何特定操作。
您可以为您的资源使用这样的结构:
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 个字符。