如何始终在 Windows Store UWP 应用程序中安装所有本地化资源?
How to always install all localized resources in Windows Store UWP app?
默认情况下Windows Store UWP 应用仅安装目标机器特定的资源。例如,如果应用程序被本地化为 5 种不同的语言,并且用户的机器使用的是 en-US,则只会安装 en-US 资源。
问题是如果我想在我的应用程序中按需语言切换。还以为我发布了fr-FR资源的app,却无法切换到fr-FR,因为没有安装这个语言包
当应用程序从 Windows 商店安装时,有没有办法或设置强制下载所有资源?
注意一种方法,如何解决这个问题不将应用程序打包为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>
我认为系统不会允许你在不违反约定的情况下强制执行此操作。
作为解决方法,您可以使用系统本身无法识别它正在处理本地化资源[=28]的方式来命名资源文件=] - 您可以将它们命名为 Resources_enUS.resw
、Resources_frFR.resw
,而不是 Resources.en-US.resw
、Resources.fr-FR.resw
等。
然后你可以有一个 LocalizationService
class,它将接受文化标签作为构造函数参数并手动加载该特定文化的资源:
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" )
Note one way, how to solve this is not package the app as appxbundle, but once the app is published as appxbundle, it's not possible to go back to non-appxbundle format.
如果您需要保留appxbundle,但又想保留所有已安装的语言资源。您可以通过将配置文件添加到您的应用程序包或直接修改您的项目文件来包含资源。
这样,用户可以离线更改语言首选项,他们的设备可以切换到新设置的最佳资源。
详细步骤请参考Ensure that resources are installed on a device regardless of whether a device requires them, which targets on Windows Store 8.1 app, but it works to UWP app as well. Also, you can check @Amy Peng's answer in this threadMSDN论坛。
关注此 link 以获得您的答案..
https://msdn.microsoft.com/en-us/library/dn482043.aspx
默认情况下Windows Store UWP 应用仅安装目标机器特定的资源。例如,如果应用程序被本地化为 5 种不同的语言,并且用户的机器使用的是 en-US,则只会安装 en-US 资源。
问题是如果我想在我的应用程序中按需语言切换。还以为我发布了fr-FR资源的app,却无法切换到fr-FR,因为没有安装这个语言包
当应用程序从 Windows 商店安装时,有没有办法或设置强制下载所有资源?
注意一种方法,如何解决这个问题不将应用程序打包为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>
我认为系统不会允许你在不违反约定的情况下强制执行此操作。
作为解决方法,您可以使用系统本身无法识别它正在处理本地化资源[=28]的方式来命名资源文件=] - 您可以将它们命名为 Resources_enUS.resw
、Resources_frFR.resw
,而不是 Resources.en-US.resw
、Resources.fr-FR.resw
等。
然后你可以有一个 LocalizationService
class,它将接受文化标签作为构造函数参数并手动加载该特定文化的资源:
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" )
Note one way, how to solve this is not package the app as appxbundle, but once the app is published as appxbundle, it's not possible to go back to non-appxbundle format.
如果您需要保留appxbundle,但又想保留所有已安装的语言资源。您可以通过将配置文件添加到您的应用程序包或直接修改您的项目文件来包含资源。
这样,用户可以离线更改语言首选项,他们的设备可以切换到新设置的最佳资源。
详细步骤请参考Ensure that resources are installed on a device regardless of whether a device requires them, which targets on Windows Store 8.1 app, but it works to UWP app as well. Also, you can check @Amy Peng's answer in this threadMSDN论坛。
关注此 link 以获得您的答案.. https://msdn.microsoft.com/en-us/library/dn482043.aspx