@mizumotokのブログ

テクノロジー、投資、書評、映画、筋トレなどについて

Windows XPの新元号(令和)対応

元号が「令和」と発表され、世間もお祝いムードです。ITの世界では新元号対応で盛り上がっています。
Windows XPはサポートが終了しているので、当然新元号対応はされません。自力でWindows XPの新元号対応をやってみます。

f:id:mizumotok:20190424181514j:plain

Windows 7以降の新元号対応

Windows 7以降は元号レジストリで管理されています。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras]
"1868 01 01"="明治_明_Meiji_M"
"1912 07 30"="大正_大_Taisho_T"
"1926 12 25"="昭和_昭_Showa_S"
"1989 01 08"="平成_平_Heisei_H"
"2019 05 01"="令和_令_Reiwa_R"

見て分かる通り

[開始年月日]=[元号]_[元号(1文字)]_[元号(英語表記)]_[元号(英字1文字)]

という形式です。

そもそもWindows Updateで対応されるので、対応は不要ですが。

docs.microsoft.com

半年くらい前のWindows Updateで以下のレジストリが追加されて問題になりました。

"2019 05 01"="??_?_?????_?

その頃はまだ新元号が発表されていなかったので苦肉の対応だったのでしょうが、勇み足でしたね。

locale.nlsの編集

Windows XPレジストリでは対応できません。
サポートも切れているので、Windows Updateでも対応されません。

どうしても対応したい場合は、システムのファイルを直接編集することになります。

C:¥Windows¥System32¥locale.nls

このファイルをデスクトップにでもコピーして編集しましょう。
ファイルはバイナリなのでバイナリエディタで編集します。

バイナリエディタは何でもいいのですが、例えばこんなものがあります。
freesoft-100.com

0x03F8F0の位置に元号の情報が入っています。

平成はの定義は以下のようになっています。

01 00 08 00 C5 07 0C 00 31 00 39 00 38 00 39 00 00 00 73 5E 10 62 00 00

これはリトルエンディアン形式で、文字はUTF-16、数値は16進数で表現されています。

分解すると、こうなります。

01000800C5070C0031003900380039000000735E10620000
181989121989\0\0
データ長年(文字列)\0年号\0
1989年1月8日以降だと「平成」となります。

同様に令和を表すとこうです。

05000100E3070C0032003000310039000000E44E8C540000
512019122019\0\0

これを平成の定義の前に挿入すればよいです。

05 00 01 00 E3 07 0C 00 32 00 30 00 31 00 39 00 00 00 E4 4E 8C 54 00 00

locale.nlsファイルの置換

locale.nlsが無事作成できたとして、ファイルを置換するのが意外と難しいです。
単純に C:¥Windows¥System32¥ にコピーしようとしても拒否されます。
C:¥Windows¥System32¥locale.nls をリネームしてからならコピーできますが、Windowsを再起動すると元のファイルが再作成されてしまいます。

Windowsが動いていない状態でコピーするしかありません。

つまり

  1. デュアルブートにして別のOSで起動してから、該当のファイルをコピーする
  2. XPのハードディスクを別のPCでNTFSマウントしてから、該当のファイルをコピーする

といった作業が必要になります。

どちらも面倒ですが、これで無事XPの新元号(令和)対応は完成です。

それっぽく動いていますが、実行は自己責任で。

元号 年号から読み解く日本史 (文春新書)

元号 年号から読み解く日本史 (文春新書)