2009-11-29 40 views
0

我的客戶給了我一個只有英文的自定義TTF字體。所以我的意圖是隻爲英文加載TTF,對於其他語言,它應該回退到可用的System字體。如何爲英文版本註冊字體?

我做以下步驟:

  1. 與我的應用程序註冊字體。 複製到資源文件夾並添加到我的項目。
  2. 加載名稱的字體。

    NSMutableDictionary * aTitleAttributes = [[[NSMutableDictionary alloc] initWithObjectsAndKeys: 
           [NSFont fontWithName:CP_FONT_NAME size:[NSFont systemFontSize]], NSFontAttributeName, 
           aParagraphStyle, NSParagraphStyleAttributeName, 
                 nil] autorelease]; 
    

但這會導致到另一個問題,因爲我加載這樣的字體爲所有的語言,我的本地化文字看起來英語。因此,我想我應該有一個像

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

一些條件,使任何人可以幫助我實現什麼我做​​的是正確的註冊與使用App的字體。如果是這樣,我怎麼才能註冊我的字體只有英文版。因爲對於其他語言環境,此字體不可用,那麼NSFont::fontWithName將返回nil並自動回退到SystemFont,因此我的語言環境應該正確顯示。

否則,我必須有一個像我上面提到的條件,這是一種粗糙的做法。如果是這樣,我怎麼能寫這樣一個API來查找currentLocale是否是英文的?

+0

沒有'NSFont :: fontWithName'這樣的東西。正確的方法簽名是'+ [NSFont fontWithName:]'-note表示這是一個類方法,而::表示它需要一個參數。 – 2009-11-29 17:05:04

回答

1

NSLocale獲取當前語言環境,然後發送objectForKey:消息並要求NSLocaleLanguageCode。如果當前的語言代碼是en,en_US,en_GB,en_AUen_CA,那麼當前語言是某種形式的英語。

爲了簡化測試,您可以將語言代碼放入數組中,或設置並測試當前語言代碼在該集合中的成員身份。或者,更好的是,把它們放到字典中作爲鍵,其中所有的值都是CP_FONT_NAME;那麼,如果客戶端稍後爲其他語言提供了其他字體,則可以輕鬆添加這些新的字體 - 語言對。