GPD WIN/Pocketの英語環境を(APIから見て)日本語環境化する

GPD WIN/GPD Pocketでは標準でインストールされているOSが純粋な日本語版ではなく
英語(en_US)版に、お好みで日本語言語パックを入れるという形になっています。

日本語化については、ログオン後のUnicodeなUI部分の表示は
コンパネ->時計、言語、および地域->言語を追加するを選び、日本語を選択してダウンロードして
規定の言語にすることで設定できます。

また、Welcomeスクリーン、非Unicode、環境の日本語表示は上記設定後
コンパネ->時計、言語、及び地域->地域を選び、場所に日本、管理で
「ようこそ画面と新しいユーザアカウント」の設定のコピー及び
その下の「Unicode対応でないプログラム言語」のシステムロケールの変更で日本語を選ぶことで設定できます。

ここまでやると大部分の場所が日本語化されるのですが、完全に日本語OSとなる訳ではありません。
この時点でAPIで言語関係の関数を叩くと
GetSystemDefaultLCID()
GetUserDefaultLCID()
GetSystemDefaultLangID()
GetUserDefaultLangID()
GetUserDefaultUILanguage()
についてはロケール ID (LCID)が0x0411(ja_JP)で帰ってきますが

GetSystemDefaultUILanguage()
に関しては0x0409(en_US)が帰ってきます。

GetSystemDefaultUILanguage()に関してはMSのリファレンス

>This function never returns a language identifier for a Language Interface Pack (LIP).

とありますので、言語パックの影響を受けず、インストール時に設定された初期言語が返されます。
このため、一部の日本製アプリケーションでは、主にDRM的な観点からこの関数を用いて
ユーザのOS言語を検出し動作しないことがあります。(逆もしかり)
上記理由から具体的にどれが該当するかは書きませんが主にゲーム系のアプリケーションで多い様です。

これはレジストリの
HKLM\System\CurrentControlSet\Control\Nls\Language\InstallLanguageキー
en_USである0409からja_JPである0411に変更することで解決することができます。
ここを変更後再起動すると、GetSystemDefaultUILanguage()の値も0x0411となり、上記の様なアプリケーションでの動作が改善されます。
#ちなみに、日本語言語を既定にしてProにアップグレードするとここの値は0x411となるようです。

軽く確認しただけなので他の関数ではまた違う値が出るかもうしれませんし
WinRTに関しては触ってもいないので一緒に変わるかは全く不明ですが
日本製のゲームが動かない、という方は一度試してみてはいかがでしょうか。

添付に上記で挙げた関数の値をベタ出力するコピペプログラムを貼り付けておきます。
現在のOS設定値を確認する参考としてどうぞ。
#Defenderだと”Trojan:Win32/Sprisky.C!cl”と出る場合がありますが誤検知です。MSに解除申請が通ったのでそのうち表示されなくなるはずです。

#6月に買ったものの、セットアップで蹴られて積んでいた某ゲームがこれでやっと出来る. やったー

  1. コメントはまだありません。

  1. トラックバックはまだありません。