如何在 C# 中始终通过 PrivateFontCollection 获取英文字体名称?

How to always get English font name via PrivateFontCollection in C#?

现在我通过以下代码获取字体名称:

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

在英文Win7系统上,我得到"DFPHeiMedium-UN",但在中文Win7系统上,我得到“华康中黑体(P)-UN”。 所以,不同系统语言的字体名称是不同的。

我的问题是如何编写我的代码以确保无论系统语言如何都能始终获得"DFPHeiMedium-UN"?

谢谢。

顺便说一下,我尝试了 CurrentCulture。我把这一行放在上面的代码之前。还是不行。 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");

您可以使用接受语言标识符的 GetName 函数,或 0 表示中性语言:

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

至于为什么你的文化改变没有奏效,我们可以看看Name in the reference source的实现:

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

如果我们检查 CurrentLanguage,我们可以看到它使用的是 System.Globalization.CultureInfo.CurrentUICulture.LCID,即当前的 UI 文化,而不是比 CurrentCulture.