Resource.reswでローカライズした文言データの出力先の.priを、MakePri,exe dumpで見る

もくじ
https://tera1707.com/entry/2022/02/06/144447#WinUI3

やりたいこと

下記のページのやり方で、WinUI3でローカライズできることが分かった。

https://tera1707.com/entry/2022/03/24/224855

分かったのだが、ローカライズのためにResource.reswに書いた文言は、どこに出力されているのか?知りたい。

結論

色々調べた限り、下記だった。

パッケージPJでパッケージ&インストールしたアプリの場合

パッケージの中のresources.priに入る。

中身は、ただダブルクリックするだけでは開けない(中身が見れない)が、makepri.exeというツールを使えば見れる。

VisualStudioInstallerで、UWP開発ツール一式を入れると入るらしい。

下記のファイルに対して、

こういうコマンドを、開発者コマンドプロンプトで実行する。

makepri.exe dump /if resources.pri /of aaa.xml

/ifは、見たいpriファイル。

/ofは、出力ファイル。priの中身をxmlとして出すファイル。

上記だと、aaa.xmlに、下記のような感じでソースの値が含まれる。

        <ResourceMapSubtree name="Resources">
            <NamedResource name="SimpleText" uri="ms-resource://40a02821-ea29-4b39-90c3-aec0996185b4/Resources/SimpleText">
                <Candidate qualifiers="Language-JA-JP" type="String">
                    <Value>単純な文字列リソース</Value>
                </Candidate>
                <Candidate qualifiers="Language-EN-US" isDefault="true" type="String">
                    <Value>c</Value>
                </Candidate>
            </NamedResource>
            <ResourceMapSubtree name="MyButton">
                <NamedResource name="Content" uri="ms-resource://40a02821-ea29-4b39-90c3-aec0996185b4/Resources/MyButton/Content">
                    <Candidate qualifiers="Language-JA-JP" type="String">
                        <Value>ボタン名称</Value>
                    </Candidate>
                    <Candidate qualifiers="Language-EN-US" isDefault="true" type="String">
                        <Value>b</Value>
                    </Candidate>
                </NamedResource>
                <NamedResource name="Height" uri="ms-resource://40a02821-ea29-4b39-90c3-aec0996185b4/Resources/MyButton/Height">
                    <Candidate qualifiers="Language-JA-JP" type="String">
                        <Value>50</Value>
                    </Candidate>
                    <Candidate qualifiers="Language-EN-US" isDefault="true" type="String">
                        <Value>150</Value>
                    </Candidate>
                </NamedResource>
                <ResourceMapSubtree name="[using:Microsoft.UI.Xaml.Automation]AutomationProperties">
                    <NamedResource name="Name" uri="ms-resource://40a02821-ea29-4b39-90c3-aec0996185b4/Resources/MyButton/[using:Microsoft.UI.Xaml.Automation]AutomationProperties/Name">
                        <Candidate qualifiers="Language-JA-JP" type="String">
                            <Value>添付プロパティ文言</Value>
                        </Candidate>
                        <Candidate qualifiers="Language-EN-US" isDefault="true" type="String">
                            <Value>tenpu</Value>
                        </Candidate>
                    </NamedResource>
                </ResourceMapSubtree>
            </ResourceMapSubtree>
            <ResourceMapSubtree name="MyStackPanel">
                <NamedResource name="Background" uri="ms-resource://40a02821-ea29-4b39-90c3-aec0996185b4/Resources/MyStackPanel/Background">
                    <Candidate qualifiers="Language-JA-JP" type="String">
                        <Value>Black</Value>
                    </Candidate>
                    <Candidate qualifiers="Language-EN-US" isDefault="true" type="String">
                        <Value>red</Value>
                    </Candidate>
                </NamedResource>
            </ResourceMapSubtree>
            <ResourceMapSubtree name="MyTextBlock">
                <NamedResource name="Text" uri="ms-resource://40a02821-ea29-4b39-90c3-aec0996185b4/Resources/MyTextBlock/Text">
                    <Candidate qualifiers="Language-JA-JP" type="String">
                        <Value>テキストブロック文言</Value>
                    </Candidate>
                    <Candidate qualifiers="Language-EN-US" isDefault="true" type="String">
                        <Value>a</Value>
                    </Candidate>
                </NamedResource>
            </ResourceMapSubtree>
            <ResourceMapSubtree name="PackResource">
                <NamedResource name="Text" uri="ms-resource://40a02821-ea29-4b39-90c3-aec0996185b4/Resources/PackResource/Text">
                    <Candidate qualifiers="Language-JA-JP" type="String">
                        <Value>パックリソース1</Value>
                    </Candidate>
                    <Candidate qualifiers="Language-EN-US" isDefault="true" type="String">
                        <Value>PackResource1</Value>
                    </Candidate>
                </NamedResource>
            </ResourceMapSubtree>

下記のように、WinUI3のexeのプロジェクトと、パッケージのプロジェクトそれぞれにリソースを持たせて、パッケージをビルドすると、上のファイルのように、パッケージのプロジェクトの中のresources.priの中に、全部のPJのリソースが入る。

WinUI3単品で起動できるようにしたアプリの場合

下記の記事で試した、WinUI3単品で起動できるようにする方法でも、同じ方法でローカライズできた。

WinUI3プロジェクトをビルドしたexeを直叩きで起動する

https://tera1707.com/entry/2022/02/27/223359

WinUI3でSelfContained=trueでビルドすると出るエラー対処 その1
https://tera1707.com/entry/2022/03/19/000916

WinUI3でSelfContained=trueでビルドすると出るエラー対処 その2
https://tera1707.com/entry/2022/03/19/004221

WinUI3でSelfContained=trueでビルドすると出るエラー対処 その3
https://tera1707.com/entry/2022/03/19/010307

その場合は、出力先に、<プロジェクト名>.priという名前で、priができる。

上の実験コードのPJだと、下記のようになる。

そのpriをmakepri.exe dumpをすると、同じように、その中にリソースがあることが見れる。
※当然、そのPJの中にある各言語のResources.reswの内容のみが含まれる。パッケージPJの分は含まれない。

参考

makepri.exe

https://learn.microsoft.com/en-us/windows/uwp/app-resources/compile-resources-manually-with-makepri

makepri.exe dump コマンド

https://learn.microsoft.com/en-us/windows/uwp/app-resources/makepri-exe-command-options#dump-command

WinUI3でSelfContained=trueでビルドすると出るエラー対処 その1 https://tera1707.com/entry/2022/03/19/000916

WinUI3でSelfContained=trueでビルドすると出るエラー対処 その2 https://tera1707.com/entry/2022/03/19/004221

WinUI3でSelfContained=trueでビルドすると出るエラー対処 その3 https://tera1707.com/entry/2022/03/19/010307