2009-11-29 5 views
0

Mon client m'a donné une police TTF personnalisée uniquement pour l'anglais. Donc, mon intention est de charger ce TTF uniquement pour l'anglais et pour d'autres langues, il devrait se replier sur la police système disponible.Comment enregistrer une police uniquement pour une version anglaise?

que je fais les étapes suivantes:

  1. polices avec mon application Enregistrement. Copie dans le dossier Ressources et ajout à mon projet.
  2. Chargement de la police avec le nom.

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

Mais il en résulte un autre problème, puisque je suis le chargement des polices de cette manière pour toutes les langues, le texte de mon localisation regarde l'anglais. Par conséquent, je pense que je devrais avoir une certaine condition comme

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

Alors quelqu'un peut me aider à réaliser tout ce que je fais est juste avec l'enregistrement de la police avec App. Si oui, comment puis-je enregistrer ma police uniquement pour la version anglaise. Parce que pour les autres paramètres régionaux, cette police n'est pas disponible, alors NSFont::fontWithName retournera zéro et retombera automatiquement sur le SystemFont et donc mes paramètres régionaux seront affichés correctement.

Sinon, je dois avoir une condition comme celle que j'ai mentionnée ci-dessus, ce qui est une façon grossière de faire. Si oui, comment puis-je écrire une telle API pour trouver currentLocale Is English?

+0

Il n'existe pas de 'NSFont :: fontWithName'. La signature de méthode correcte est '+ [NSFont fontWithName:]' -note le +, ce qui indique qu'il s'agit d'une méthode de classe, et le:, qui indique qu'il prend un argument. –

Répondre

1

Obtenez l'environnement local actuel de NSLocale, puis envoyez-lui un message objectForKey: et demandez NSLocaleLanguageCode. Si le code de langue actuel est en, en_US, en_GB, en_AU ou en_CA, la langue actuelle est une forme d'anglais.

Pour simplifier le test, vous pouvez placer les codes de langue dans un tableau ou définir et tester l'appartenance du code de langue actuel à cette collection. Ou, mieux encore, les mettre dans un dictionnaire comme les clés, avec la valeur pour tous d'être CP_FONT_NAME; ensuite, si le client fournit ultérieurement d'autres polices pour d'autres langues, vous pouvez facilement ajouter ces nouvelles paires de polices de caractères.

Questions connexes