Как зарегистрировать шрифт только для английской версии?

Мой клиент дал мне собственный шрифт TTF только для английского языка. Поэтому я намерен загрузить этот TTF только для английского языка, а для других языков он должен использовать доступный системный шрифт.

Я делаю следующие шаги:

  1. Регистрация шрифтов в моем приложении. Копирую в папку Resources и добавляю в свой проект.
  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 ...]

Так может ли кто-нибудь помочь мне понять, что все, что я делаю, правильно с регистрацией шрифта в приложении. Если да, то как я могу зарегистрировать свой шрифт только для английской версии. Поскольку для других локалей этот шрифт недоступен, тогда NSFont::fontWithName вернет nil и автоматически вернется к SystemFont, и, следовательно, моя локаль будет отображаться правильно.

В противном случае у меня должно быть условие, подобное тому, что я упомянул выше, что является грубым способом сделать. Если да, то как я могу написать такой API для поиска английского языка currentLocale?


person symadept    schedule 29.11.2009    source источник
comment
Нет такой вещи, как NSFont::fontWithName. Правильная сигнатура метода — +[NSFont fontWithName:] — обратите внимание на +, который указывает, что это метод класса, и на :, который указывает, что он принимает один аргумент.   -  person Peter Hosey    schedule 29.11.2009


Ответы (1)


Получите текущую локаль из NSLocale, затем отправьте ему сообщение objectForKey: и запросите NSLocaleLanguageCode. Если текущий код языка — en, en_US, en_GB, en_AU или en_CA, то текущим языком является некоторая форма английского языка.

Чтобы упростить тест, вы можете поместить коды языков в массив или установить и проверить членство текущего кода языка в этой коллекции. Или, что еще лучше, поместите их в словарь в качестве ключей со значением для всех них CP_FONT_NAME; затем, если клиент позже предоставит другие шрифты для других языков, вы можете легко добавить эти новые пары шрифт-язык.

person Peter Hosey    schedule 29.11.2009