昨年の話なんですが、記録し忘れていたので。
米国製のコンポーネント(GUIを伴うもので、テキスト入力なども処理する)を利用していて、フォント名プロパティに日本語フォント名を指定すると、次にフォント設定を表示させたらフォント名が文字化け、おまけにフォント自体も「フォントが無かった時に指定される標準的なもの」が選択されて外観が変わってしまうという問題が。
まぁコンポーネント側が国際化対応仕切れてないのが根本的にまずいのでしょうけど、そんなのを対応してもらうのを待ってるわけにはいかないので、フォント選択用ダイアログで指定されたあと、日本語フォント名を元に、対応する英語フォント名を取得するロジックを用意しました。
たとえば
- MS ゴシック → MS Gothic
- MS Pゴシック → MS PGothic
- MS 明朝 → MS Mincho
- MS P明朝 → MS PMincho
のように変換します。こうすれば、日本語対応していないツールでもとりあえず受け付けてくれました。
もっと洗練された方法があるのかもしれませんが、とりあえず動きます(笑)。ロジックはこんな。
''' <summary>
''' 日本語フォント名から英語フォント名を取得する。
''' </summary>
''' <param name="jpnName">日本語フォント名文字列。</param>
''' <returns>英語フォント名文字列。</returns>
''' <remarks>
''' 英語名が無い場合は日本語名がそのまま返されます。
''' </remarks>
Protected Function GetEnglishFontName(ByVal jpnName As String) As String
Dim fontCollection As New System.Drawing.Text.InstalledFontCollection
Dim fonts As Drawing.FontFamily() = fontCollection.Families
Dim cultureId As Integer = System.Globalization.CultureInfo.GetCultureInfo("en-us").LCID
Dim result As String = String.Empty
For Each ff As Drawing.FontFamily In fonts
If ff.Name = jpnName Then
result = ff.GetName(cultureId)
Exit For
End If
Next
If String.IsNullOrEmpty(result) Then
result = jpnName
End If
Return result
End Function元ネタはここにある「インストールされているフォント取得」のロジックだったような…(覚えてません)。
- DOBON.NETプログラミング道/インストールされているフォントを取得する
- http://dobon.net/vb/dotnet/system/getinstalledfonts.html

- 作者: 大谷秀映
- 出版社/メーカー: 翔泳社
- 発売日: 2010/12/02
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 289回
- この商品を含むブログ (5件) を見る