もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
以前書いた下記の記事で調べた内容をまとめたい。
https://tera1707.com/entry/2023/03/16/222146
前提
- .NET6
- WindowsAppSDK 1.2.221109.1
結果
- resw方式は、言語の優先順位が1位の言語で表示を行う。
正確には、アプリが持っている言語リソースの中で、言語の優先順位が一番高い言語で表示を行う。 - resx方式は、OSの表示言語設定の言語で表示を行う。
ざっくりまとめると下表のようになった。
WInUI3(resw方式)
「優先順位」の高い言語に従う。
WinUI3(パッケージ)(resw) | WinUI3(非パッケージ)(resw) | |
---|---|---|
優先順位表にある言語と、言語コードと地域コードが一致する言語リソースをアプリが持っている | 条件に合う一番優先順位が高い言語で表示を行う | 条件に合う一番優先順位が高い言語で表示を行う |
優先順位表にある言語と、言語コードのみ一致する言語リソースをアプリが持っている | 条件に合う一番優先順位が高い言語で表示を行う | 条件に合う一番優先順位が高い言語で表示を行う |
優先順位表にある言語が、アプリのもつ言語リソースにない(アプリがen-USのリソースを持っている) | en-USのリソースで表示を行う | en-USのリソースで表示を行う |
優先順位表にある言語が、アプリのもつ言語リソースにない(アプリがen-USのリソースを持っていない) | アプリのもつリソースを言語-地域コードでABC順に並べたときの先頭のリソースを使う | InitializeComponent()で例外を吐いてアプリ落ちる |
WPF(resx方式)
「OSの表示言語」に従う。
WPF(resx) | |
---|---|
OS表示言語と、言語コードと地域コードが一致する言語リソースをアプリが持っている | その言語のリソースを表示 |
OS表示言語と、言語コードのみ一致する言語リソースをアプリが持っている | その言語のリソースを表示 |
OS表示言語のリソースを、アプリが持っていない | アプリの「ニュートラル言語」設定の言語リソースを表示 |
resw/resx
試せてないのだが、
上の表では
- WinUI3は優先順位が高い言語に従って表示
- WPFはOSの表示言語設定に従って表示
とも読める書き方をしたが、おそらくそうではなくて、
- resw方式は優先順位が高い言語に従って表示
- resxはOSの表示言語設定に従って表示
だと思われる。
今回たまたまreswを使ったのがWinUI3で、resxがWPFだっただけ。
なので、UWPでresw方式を使った場合はそのUWPアプリは優先順位に従うし、WinUI3でresx方式を使った場合はOSの表示言語に従うと思われる。(すみません、未確認)
用語
フォールバック
OSにインストールされている言語が、アプリに言語コードは一致だが地域コードは違う言語のリソースがある場合に、ドンピシャじゃないけどそのリソースで表示すること。
例)OSには「ドイツ語(リヒテンシュタイン)」(de-li)がインストールされてるが、アプリには「ドイツ語」(de)のリソースがある場合に、アプリがdeで表示を行うこと。
下記のページのような感じ。
https://learn.microsoft.com/en-us/windows/apps/design/globalizing/manage-language-and-region#examples
OS表示言語/優先順位
これ。
言語-地域
ja-JPなら
- 日本語(日本)
- jaが言語
- JPが地域
en-USなら
- 英語(米国)
- enが言語
- USが地域
みたいなこと。
所感
上のように表にまとめたが、あくまで今回私が試した結果の表。
特にreswの方の「WinUI3(非パッケージ)(resw)」の全くリソースがない場合に「InitializeComponent()で例外を吐いてアプリ落ちる」なんてのは、ホンマか?と思ってしまうほど自信がないのだが、試した限りそうなってしまった。
もしかすると、私の環境や設定の作り方がまずかったり、現時点のWinUI3のバグだったりするのかもだが、とりあえず現状こうなるということでノウハウ残しておく。
実験に使ったコード
https://github.com/tera1707/ResourceTest
参考
前回リソースがないときの動きを調べた記事
https://tera1707.com/entry/2023/03/16/222146
resw方式のやり方
https://tera1707.com/entry/2022/03/24/224855
resw方式のやり方
① https://qiita.com/tera1707/items/fb6570f3894a607f9dce ② https://tera1707.com/entry/2023/03/01/221055