2016-12-04 5 views
6

デフォルトでは、WindowsストアUWPアプリは、ターゲットマシンに固有のリソースのみをインストールします。たとえば、アプリケーションが5つの異なる言語にローカライズされ、ユーザーがen-USにマシンを持っている場合、en-USリソースのみがインストールされます。WindowsストアUWPアプリにローカライズされたすべてのリソースを常にインストールするには?

問題は、私のアプリケーションに持っていたい場合ですオンデマンド言語の切り替え。 fr-FRリソースを使ってアプリケーションを公開したとしても、この言語パックがインストールされていないためfr-FRに切り替えることはできません。

Windowsストアからアプリをインストールすると、すべてのリソースを強制的にダウンロードしてにダウンロードできますか?これを解決する方法を

注1つの方法は、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> 

答えて

4

注1つの方法、どのようにこの問題を解決するには、appxbundleとしてアプリをパッケージ化されていませんが、アプリがappxbundleとして公開されたら、それは可能トンではありませんo非appxbundle形式に戻ります。

appxbundleを維持する必要がある場合でも、すべての言語リソースをインストールしたままにしたい場合。アプリケーションパッケージに設定ファイルを追加することによってリソースを組み込むことも、プロジェクトファイルを直接変更することもできます。

このようにして、ユーザーは言語設定をオフラインで変更でき、そのデバイスは新しい設定のための最良のリソースに切り替えることができます。

詳細な手順については、Ensure that resources are installed on a device regardless of whether a device requires themに従ってください。これはWindows Store 8.1アプリを対象にしていますが、UWPアプリにも適用されます。また、@Amy Pengの答えをMSDNフォーラムのthis threadで確認することもできます。

+0

はい、私もこのMSDNのページを発見し、このアプローチは、それがWindowsの8.1をターゲットだにもかかわらず、私のUWPのアプリで働いていました。あまりにも私はそれを見つけるためにドキュメンタリーを深く掘り下げなければならなかった。 –

1

私はシステムが許可しないだろうと思いますあなたは慣習を欺くことなくこれを強制する。回避策として

、あなたはシステム自体がそれはローカライズされたリソースを扱っているを認識しないようにリソースファイルに名前を付けることができ - 代わりResources.en-US.reswResources.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") 
関連する問題