(この記事内容には少々自信が持てない内容があります。間違い等ありましたら指摘していただけると幸いです。)
Windows アプリケーションを作成する際、 開発者はダイアログボックスで使用するフォント(以下ダイアログフォント)を指定する事ができます。 とはいえ、変にフォントを変更すると互換性の問題が出てくるので標準のフォントを使用するのが常です。 例えばそれは日本語版 Visual C++ 6.0 では "MS P ゴシック" であり、 英語版のそれは "MS Sans Serif" であります。
ところで英語のオンラインソフトには日本語が入力、表示できないアプリケーションが多くあります。 これはこのダイアログフォントが英語版 Visual C++ 6 (Delphi も?)で前述の "MS Sans Serif" になっている事が原因で、このフォントには日本語文字が含まれていないからです。
さて、苦労してデザインした一つのダイアログボックスを多国語に対応させたいとします。 するとこのフォント指定が非常に困った事になってくるわけです。 "MS Sans Serif" にすれば英語環境で動く一方日本語はダメになり、 "MS P ゴシック" にすれば日本語で動く一方英語環境にはこんなフォントは存在しません (まあ存在しないフォントが指定された場合標準フォントが使用されるのでその意味で問題は無いのですが)。 この事をふまえ、Microsoft は Windows 2000 以降に FontSubstitute という機能を導入しました。 これは簡単に言うと、存在しないフォントが要求された時にそれが FontSubstitute 機能に登録されたフォントであれば登録された情報を元に別のフォントを代わりに返す機能です。 具体的に言うと、日本語版 Windows 2000 では Helvetica を指定された時に Arial を返すような設定などがされています(そりゃ一般人は Helvetica なんて持ってない)。 存在しないフォントのマッピングを行うわけですね。
ではこの機能を使って "MS Sans Serif" を "MS P ゴシック" や "MS UI ゴシック" にマッピングすれば英語ソフトも使えるようになる・・・そう思うのが自然です。
しかしそれでは上手くいきません。 何故なら日本語環境にも何故か"MS Sans Serif"が英語フォントとして存在しているからです。 つまり MS Sans Serif を違うフォントにマッピングしようとしても、 MS Sans Serif が存在しているのでそのまま使用されてしまうのです。
2004年10月24日現在、私は PSPad という海外製エディタの日本語化をまったりと行っているのですが、 どうも中国語環境でダイアログボックスに中国語を表示、入力できているようなのです(フォーラムで苦情や要望が出ていない)。 これは中国語だけではなく、他の言語環境についても言えます。
改めて考えてみると不自然な点がいくつかあります。 まず前述の通り PSPad が中国語を含む 20 もの言語環境で使用されているにも関わらず、 ダイアログフォントに関する苦情が出ていない事。 MS Sans Serif という英語フォントが日本語環境にも存在している事。 何故か日本人は「Sans Serif」という文字体を「ゴシック」と呼ぶ事。
・・・要するに、日本語版 Windows を作るにあたって日本語フォントを作る必要が出た時、
「日本人には Sans Serif や Serif といった字体の表現は慣れていないから慣れているゴシックと明朝にしよう」
とした事がそもそもの間違いだったのでしょう(市場戦略的にはごく当然の決断だと思いますが)。
他の言語では、恐らくその言語特有の文字を MS Sans Serif に「追加」したと推測できます。
一方日本では日本語語特有の文字を MS Sans Serif に追加、それを新しく「MS ゴシック」としたのでしょう。
また、別のフォントにしたので MS Sans Serif は日本語環境で不要になるのですが、
英語アプリケーションとの互換性の為に恐らく「そのまま」残したと考えられます。
以上から、ダイアログフォントを MS Sans Serif に指定されて困るのはどうも日本語環境だけだと推測できます。
そこで、Microsoft は FontSubstitute と一緒に "MS Shell Dlg" が登場させました。 実を言うとこのような名前のフォントは存在しません。 FontSubstitute を利用して、MS Shell Dlg を指定された時は各言語の標準ダイアログフォントにマッピングするようにしたのです。 ちなみにコントロールパネルで言語設定を変更した時はこの値も同時に変更されます。 つまり、このフォント指定を使用すればどのような言語環境でも文字化けしないダイアログを作れる事になります。
Visual Studio .NET 2003 Academic で試したところ、 日本語以外(なんでまた日本語だけ・・・(怒))の言語環境で開発するとダイアログフォントは皆 MS Shell Dlg になっています。 恐らく最近の海外アプリケーションで日本語表示が上手くいく理由はこれなのでしょう。 ありがたい話ではあります。
なお、元来ゴシックとは古めかしい、といった意味なので Sans Serif より明らかに Serif 体に近いニュアンスがあります。 従ってそのあたりの、日本語英語的な解釈違いに対するサポートの手間を考えてそのような決断をしたのだと思います 何故昔の日本人がそのような解釈違いをしてしまったのかは知りませんが、 この何百年前(?)の間違いが現代のダイアログフォント問題につながっているのです。
また、FontSubstitute 機能は無駄なのかというと、そうでもありません。 例えば Garamond を指定された時はサンセリフ体の MS UI Gothic で表示されてしまうよりも Georgea で表示した方が幾分好ましいでしょう。 レジストリエディタを使う以外に登録方法を知りませんが、もう少し手軽に使えれば悪くない機能だとは思います。