Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: symadeptОтветов: 1

Мой клиент дал мне собственный шрифт 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?

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

macoscocoafontslocale

Ответы

Ответ 1 · рейтинг 1 · Peter Hosey

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы