我正在为Windows8.1专业环境在XAML/C#中构建一个Windows Store应用程序。
我的项目有一个要求,除了支持任何给定语言的多个翻译之外,我还必须支持多种语言。例如,我可能有一个标签将以英语或法语显示,但在英语中,它可能需要显示单词“标题”或“标题”,这取决于客户的喜好。
我的问题是,在仍然使用XAML为WinRT提供的内置本地化功能(即使用控件上的Uid属性将它们绑定到资源字典)时,我无法找到一种方法在同一语言的多个资源字典之间进行打包和切换。
我注意到了两个函数,ResourceManager.LoadPriFiles和ResourceManager.UnloadPriFiles,我认为这两个函数可能允许我在运行时交换资源字典,但我想不出如何将PRI文件打包到应用程序的主资源映射之外,以允许加载和卸载。
我还考虑过创建一个自定义数据绑定或转换器,用于手动绑定控件的文本,但这将使我无法在设计时看到标签的混合,并牺牲内置本地化功能的方便性。
另一种选择是为客户可能需要的每个自定义翻译编译应用程序的单独实例,但显然这不是解决问题的一种非常可维护的方法.
最后,我曾经考虑过重新使用像ResourceContext的同源限定符这样的东西来解决这个问题;然而,这似乎非常有限,因为已经有一些预先建立好的主页可以供我选择。一般说来,重新定位字段似乎是个坏主意。
发布于 2015-05-12 12:28:40
您可以使用多个资源文件并使用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-其他”语言。在语言标记的第二部分中,最多可以使用8个字符。
https://stackoverflow.com/questions/30128426
复制相似问题