PrimaryLanguageOverride在发布appxbundle中不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PrimaryLanguageOverride在发布appxbundle中不起作用相关的知识,希望对你有一定的参考价值。

我目前正在开发一个UWP项目,我已经实现了语言更改功能,下面是用于执行此操作的代码段

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = App.userLang;
await Task.Delay(100);
Frame.Navigate(typeof(MainPage));

调试时该功能正常,但从侧面加载的应用程序包安装的应用程序中的功能不起作用。为什么是这样? (该功能不适用于手机或PC)

答案

一个可能的原因是在安装期间未安装覆盖语言的资源。

默认情况下,在构建应用程序包(.appxbundle)时,只有语言,比例和DirectX功能级别的默认资源才会内置到应用程序包中。

您可以将.appxbundle文件重命名为.zip文件以查看其内容,appxbundle本质上是一个zip文件。

在捆绑包内,您可以找到具有默认资源的应用包,看起来像

YourPackage_1.0.0.1_x64.appx

其他语言的资源包,它们是单独的.appx,看起来像

YourPackage_1.0.0.1_language-fr.appx
YourPackage_1.0.0.1_language-de.appx

在安装期间,仅安装应用程序包和设备主要语言所需的资源。因此,如果您稍后切换到另一种语言,则该应用无法加载该资源。

如果您的应用程序是通过Windows应用商店分发的,则会自动从商店下载所需的资源,但这不会发生,因为您的应用是侧载的。

要验证它是否是原因,只需双击缺少语言的资源包即可安装它,然后重新启动应用程序以观察症状消失。

解决方案是Build resources into your app package, instead of into a resource pack

简短的回答

打开项目文件(.csproj),将以下行添加到PropertyGroup元素。

<AppxDefaultResourceQualifiers>Language=en-US;fr-FR;...(add all the languages you need to support)</AppxDefaultResourceQualifiers>

以上是关于PrimaryLanguageOverride在发布appxbundle中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

关于oozie在发邮件的报错Caused by: javax.mail.AuthenticationFailedException

如果 Outlook 关闭,则从 C# OOM 发送的电子邮件将保留在发件箱中,直到下一次 Outlook 启动

张书乐:在发尔康和葛优躺表情包时,你可能在侵权,他却在赚钱

为什么我建议你在发年终奖前跳槽(建议收藏)

在机器级别上,应用程序以二进制形式运行,然后在发生运行时错误时,如何呈现回错误代码?

outlook在发邮件时候,老是显示一个安装程序的进度条,每次都是,是因为盗版原因吗?谁有办法解决