如何仅为英文版注册字体?

时间:2009-11-29 15:47:25

标签: cocoa macos fonts locale

我的客户给了我一个仅限英语的自定义TTF字体。所以我的意图是只为英语和其他语言加载TTF,它应该回退到可用的系统字体。

我正在执行以下步骤:

  1. 使用我的应用注册字体。 复制到Resources文件夹并添加到我的项目中。
  2. 使用名称加载字体。

    NSMutableDictionary * aTitleAttributes = [[[NSMutableDictionary alloc] initWithObjectsAndKeys:
                   [NSFont fontWithName:CP_FONT_NAME size:[NSFont systemFontSize]], NSFontAttributeName,
                    aParagraphStyle, NSParagraphStyleAttributeName,
                                           nil] autorelease];
    
  3. 但这会导致另一个问题,因为我以这种方式为所有语言加载字体,我的本地化文本看起来像英文。因此我认为我应该有一些像

    这样的条件
    NSFont *font = nil;
    If (currentLocaleIsEnglish()) {
    /// font to load my custom TTF
    }
    Then use [NSFont fontwithName:font ...]
    

    所以任何人都可以帮助我意识到我正在做的事情是用App注册字体是正确的。如果是这样,我怎么能只为英文版注册我的字体。因为对于其他语言环境,此字体不可用,因此NSFont::fontWithName将返回nil并自动回退到SystemFont,因此我的语言环境应正确显示。

    否则我必须像上面提到的那样,这是一种粗暴的做法。如果是这样,我如何编写这样的API来查找currentLocale是英文?

1 个答案:

答案 0 :(得分:1)

NSLocale获取当前区域设置,然后向其发送objectForKey:条消息,并要求NSLocaleLanguageCode。如果当前语言代码为enen_USen_GBen_AUen_CA,则当前语言为某种形式的英语。

为简化测试,您可以将语言代码放入数组或设置并测试当前语言代码在该集合中的成员身份。或者,更好的是,将它们作为键放入字典中,其中所有值都为CP_FONT_NAME;然后,如果客户端稍后为其他语言提供其他字体,则可以轻松添加这些新的字体语言对。