PrimaryLanguageOverride在发行版appxbundle中不起作用

时间:2018-07-27 01:03:01

标签: c# uwp win-universal-app windows-10-universal uwp-xaml

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

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

该功能在调试时工作正常,但是从侧面加载的应用程序包安装的应用程序中的功能不起作用。为什么是这样? (该功能在移动设备或PC上不起作用)

1 个答案:

答案 0 :(得分:1)

一个可能的原因是在安装过程中未安装替代语言的资源。

  

默认情况下,在构建应用程序捆绑包(.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>
相关问题