昨年の話なんですが、記録し忘れていたので。
米国製のコンポーネント(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件) を見る