如何在Windows Store UWP应用中始终安装所有本地化资源?

8
默认情况下,Windows Store UWP应用程序仅安装针对目标机器的特定资源。例如,如果应用程序本地化为5种不同的语言,并且用户的机器是en-US,则只安装en-US资源。
问题在于,如果我想在我的应用程序中进行按需语言切换。即使我发布了带有fr-FR资源的应用程序,我也无法切换到fr-FR,因为未安装该语言包。
是否有一种方法或设置可以在从Windows Store安装应用程序时强制下载所有资源?
请注意,解决此问题的一种方法不是将应用程序打包为appxbundle,但是一旦将应用程序发布为appxbundle,就无法返回非appxbundle格式。
编辑,下面接受的解决方案有效,我只是将此配置添加到我的.csproj文件中,现在它在安装期间下载所有资源文件:
<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>
<AppxDefaultResourceQualifiers>Language=cs-CZ;de-DE;en-US;es-ES;fr-FR;it-IT;pt-PT;ru-RU</AppxDefaultResourceQualifiers>

如果我们想添加所有资源,是否需要添加AppxDefaultResourceQualifiers? - Pavlo Datsiuk
在这个例子中,所有的语言资源都将被包含在您的应用程序包的应用程序包中,并且用户将下载它们,无论设备的用户语言偏好如何。 - Pavlo Datsiuk
3个回答

6
注意一种解决方法,即不将应用程序打包为appxbundle,但是一旦应用程序作为appxbundle发布,就无法返回非appxbundle格式。如果需要保留appxbundle,但仍想安装所有语言资源,则可以通过向应用程序包添加配置文件或直接修改项目文件来包含资源。这样,用户可以离线更改语言首选项,并且他们的设备可以切换到新设置的最佳资源。有关详细步骤,请参阅确保在设备上安装资源,无论设备是否需要它们,该步骤针对Windows Store 8.1应用程序,但对UWP应用程序也适用。此外,您还可以在MSDN论坛上查看@Amy Peng的回答this thread

是的,我也找到了这个MSDN页面,这种方法在我的UWP应用程序中也有效,尽管它是针对Windows 8.1的。不过很遗憾,我不得不深入挖掘文档才找到它。 - Martin Suchan
它也适用于新的MSIX软件包格式吗? - Oleg Mikhailov

1
我认为系统不允许您在不违反约定的情况下强制执行此操作。
作为一种解决方法,您可以以这样的方式命名资源文件,使系统本身不会识别它正在处理本地化资源——而不是有 Resources.en-US.resw、Resources.fr-FR.resw 等,您可以将它们命名为 Resources_enUS.resw、Resources_frFR.resw 。
然后,您可以拥有一个 LocalizationService 类,它将接受文化标记作为构造函数参数,并手动加载该特定文化的资源。
public class LocalizationService
{
    private readonly ResourceLoader _loader = null;

    public LocalizationService(string culture)
    {
        culture = culture.Replace("-", "");
        _loader = ResourceLoader.GetForCurrentView($"Resources_{culture}");
    }
}

然后,您可以使用请求的语言环境创建LocalizationService

var localizer = new LocalizationService( "fr-FR" )

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接