首页 文章

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

提问于
浏览
6

默认情况下,Windows应用商店UWP应用仅安装 resources specific for the target machine . 例如,如果应用程序已本地化为5种不同语言,并且用户在en-US中具有计算机,则仅安装en-US资源 .

问题是,如果我想在我的应用程序 on-demand language switching . 即使我发布了使用fr-FR资源发布的应用程序,我也无法切换到fr-FR,因为未安装此语言包 .

从Windows应用商店安装应用时,有没有办法或设置 force all resources to download

注意一种方法,如何解决这个问题是将应用程序打包为appxbundle,但是一旦app发布为appxbundle,就不可能回到非appxbundle格式了 .

Edit ,下面接受的解决方案有效,我刚刚将此配置添加到我的.csproj文件中,现在它在安装过程中下载了所有资源文件:

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>
<AppxDefaultResourceQualifiers>Language=cs-CZ;de-DE;en-US;es-ES;fr-FR;it-IT;pt-PT;ru-RU</AppxDefaultResourceQualifiers>

3 回答

  • 4

    注意一种方法,如何解决这个问题并不是将app打包为appxbundle,但是一旦app发布为appxbundle,就不可能回到非appxbundle格式了 .

    如果您需要保留appxbundle,但仍希望保留所有语言资源 . 您可以通过将配置文件添加到应用程序包或直接修改项目文件来包含资源 .

    通过这种方式,用户可以离线更改语言首选项,并且他们的设备可以切换到新设置的最佳资源 .

    有关详细步骤,请遵循Ensure that resources are installed on a device regardless of whether a device requires them,该目标在Windows Store 8.1应用程序上,但它也适用于UWP应用程序 . 另外,您可以在MSDN论坛上的this thread查看@Amy Peng的答案 .

  • 0

    我认为系统不允许你在不欺骗惯例的情况下强行执行此操作 .

    作为一种解决方法,您可以将系统本身 doesn't recognize 处理 localized resources 的方式命名为资源文件 - 而不是使用 Resources.en-US.reswResources.fr-FR.resw 等,您可以将它们命名为 Resources_enUS.reswResources_frFR.resw .

    然后你可以有一个 LocalizationService 类,它接受culture标签作为构造函数参数并手动加载该特定文化的资源:

    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

相关问题