いつブロ

いつまで続くか分からないブログ(仮)主に趣味やプログラミングに関するメモを書いています。

Microsoft Store 向け MSIX アプリの多言語対応方法まとめ【2026年1月版】

Microsoft Store 向け MSIX アプリの多言語対応方法まとめ

この記事では、WPF アプリ + MSIX プロジェクト構成において、
Microsoft Store に「パッケージでサポートされている言語」を正しく認識させるための手順をまとめます。

対象読者は以下のような方です。(1,000人に1人ぐらいかも知れませんが)

  • WPF アプリを MSIX で配布している
  • Store の「パッケージでサポートされている言語」が増えない
  • PRIResource / Resources.resw / UWP ツール周りでハマった
  • 昔多言語対応したけどやり方を忘れてしまった

結論(先に要点)

  • Store の多言語判定は MSIX パッケージ側のみを見る
  • MSIX プロジェクトに Resources.resw が存在することが必須
    • 中身は空でも OK
  • WPF 本体の Resources.resw を MSIX 側にリンクコピーする構成が実用的
  • 「ユニバーサル Windows プラットフォーム ツール」が無いと PRI が生成されない

成功するとこの設定ができるようになります。


基本構成

今回の構成は以下です。

  • メインプロジェクト:WPF アプリ
  • 配布用プロジェクト:MSIX(.wapproj)
Solution
├─ MyApp (WPF)
│  └─ Strings
│     ├─ ja-JP
│     │  └─ Resources.resw
│     ├─ en-US
│     │  └─ Resources.resw
│     └─ ...
└─ MyApp.Msix (MSIX)

なぜ MSIX 側に Resources.resw が必要なのか

Microsoft Store は以下のように言語対応を判定します。

  • WPF プロジェクトの Resources.resw → 見ない
  • ✅ MSIX パッケージに含まれる PRI → これだけを見る

つまり、

MSIX プロジェクトに Resources.resw(= PRI の元)が存在しないと、
Store は多言語対応していないと判断する

という仕様です。


実践:WPF 側の Resources.resw を MSIX に取り込む

私の場合、WPF 本体の Strings フォルダーをそのまま使い回す構成にしています。

MSIX プロジェクトファイル(.wapproj)に追加する設定

<!-- Strings フォルダーを MSIX パッケージに含める -->
<ItemGroup>
  <PRIResource Include="..\MyApp\Strings\**\*.resw">
    <Link>Strings\%(RecursiveDir)%(Filename)%(Extension)</Link>
  </PRIResource>
</ItemGroup>

この設定の意味

  • Include
    • WPF プロジェクト側の resw を再帰的に取得
  • Link
    • MSIX 側では Strings\xx-XX\Resources.resw として見せる
  • コピーではなく リンク扱い
    • 二重管理を避けられる

Resources.resw の中身は空でもいい?

はい、空でも問題ありません

Store の判定に必要なのは:

  • 言語フォルダーの存在
  • PRI としてビルドされること

そのため、 - 実体の翻訳は WPF 側で使用 - Store 用には「存在」だけあれば OK

という割り切りが可能です。


「PRIResource」が UI に出ない問題

Visual Studio 2026 環境では、

  • ファイルのプロパティに PRIResource が表示されない

というケースが多くあります。

解決策

  • .wapproj直接 PRIResource を定義する
  • UI に出なくても MSBuild は正しく処理する

必須ツール:「ユニバーサル Windows プラットフォーム ツール」

MSIX の多言語対応には、以下が必要です。

  • makepri.exe
  • PRI 生成用ビルドタスク

これらは 「ユニバーサル Windows プラットフォーム ツール」に含まれます。

Visual Studio Installer で確認

これが無いと:

  • language-ja.msix
  • language-en.msix

などの 言語別 MSIX が生成されません。私はこれに1日ハマりました。


正しくビルドできた状態

MSIX をビルドすると、以下のような構成になります。

MyApp.Msix_1.0.0_x64.msix
MyApp.Msix_1.0.0_language-ja.msix
MyApp.Msix_1.0.0_language-en.msix
MyApp.Msix_1.0.0_language-fr.msix
...

language-xx.msix の中には:

resources.pri

が含まれています。

Contributionsというアプリを多言語化したときの例を示します。
Contributions.Msix_1.1.0.0_x64_bundle.msixuploadがあるので拡張子をzipにして展開します。

Contributions.Msix_1.1.0.0_x64.appxsymの拡張子をzipにして展開します。

Contributions.Msix_1.1.0.0_language-en.msixがある時点でOKですが確認のためzipにして展開します。

ここにresources.priがあります。

👉 これが Store が多言語対応を認識する言語ファイルです。


よくある勘違い

  • ❌ 本体 MSIX に resources.pri が無い → 問題なし
  • ❌ language-xx.msix を個別に提出 → 不要
  • ❌ Store 側の言語設定だけ追加 → 不十分

まとめ

  • Store の多言語対応は MSIX 側がすべて
  • Resources.resw は MSIX に存在する必要がある
  • WPF 側の resw を リンクで流用するのが現実解
  • UWP ツール必須

WPF + MSIX + Store の組み合わせは情報が少なく、
かなりハマりやすいポイントなので、同じ罠にハマる人の助けになれば幸いです。


おまけ

私の場合人口の多い言語に対応していればいいかなと思い、以下の言語対応をしています。


宣伝

GitHubのContoributionを簡単にシェアできるアプリを作りました。
この記事が役に立ったという方はぜひお試しください。 apps.microsoft.com

Windows11標準のエクスプローラーよりも高速に動くエクスプローラーを作りました。あのFilesよりも高速です。 apps.microsoft.com