Как всегда получить английское имя шрифта через PrivateFontCollection в C#?

Теперь я получаю имя шрифта с помощью следующего кода:

PrivateFontCollection fontCollection = new PrivateFontCollection();
fontCollection.AddFontFile("path_to_my_Thai_font");
return fontCollection.Families[0].Name;

В английской системе Win7 я получаю "DFPHeiMedium-UN", а в китайской системе Win7 я получаю "華康中黑ustoms (P)-UN". Таким образом, имя шрифта отличается на разных языках системы.

У меня вопрос, как написать свой код, чтобы я всегда мог получить "DFPHeiMedium-UN" независимо от языка системы?

Спасибо.

Кстати, я пробовал CurrentCulture. Я поставил эту строку перед кодом выше. Все еще не работает. Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");

1 ответ

Решение

Вы можете использовать GetName функция, которая принимает идентификатор языка или 0 для нейтрального языка:

PrivateFontCollection fontCollection = new PrivateFontCollection();
fontCollection.AddFontFile("path_to_my_Thai_font");
return fontCollection.Families[0].GetName(0);

Относительно того, почему изменение вашей культуры не сработало, мы можем посмотреть на реализацию Name в справочном источнике:

    public String Name 
    {
        get 
        {   
            return GetName(CurrentLanguage);
        }
    }

И если мы проверяем CurrentLanguage мы можем видеть, что он использует System.Globalization.CultureInfo.CurrentUICulture.LCID текущая культура интерфейса, а не CurrentCulture,

Другие вопросы по тегам