2010-04-06 4 views
1

Mon application possède plusieurs centaines de points de localisation, dont certains peuvent être réutilisés plusieurs fois. Pour empêcher la recherche et le contrôle du code pour trouver les occurrences d'un NSLocalizedString particulier, je crée une macro pour chacun d'eux dans un fichier d'en-tête à l'aide de la directive du préprocesseur #define. Par exemple:Gestion de plusieurs centaines d'occurrences de NSLocalizedString

#define kLocFirstString NSLocalizedString(@"Default Text", @"Comment") 
#define kLocSecondString NSLocalizedString(@"More Text", @"Another comment") 
... 

Lorsque je veux faire référence à une chaîne particulière, je le fais par son nom de macro. Cette méthode a bien fonctionné pour moi, mais je suis inquiet qu'un tel abus flagrant de #define soit désapprouvé. Du point de vue de la "correction", devrais-je simplement ajouter NSLocalizedString au code, ou y a-t-il une autre méthode (extern NSString *aString; peut-être?) Que je peux utiliser pour collecter les déclarations en un seul endroit?

+1

Rien à redire d'utiliser #define de cette façon. C'est ce que ça veut dire. –

+0

Je suppose que je n'aurais pas dû être si inquiet après tout! Merci Jason. –

Répondre

0

Apple fournit l'utilitaire Genstream qui peut générer automatiquement votre fichier de chaînes à partir du code source. Cela signifie que vous pouvez probablement simplement ajouter vos NSLocalizedStrings.

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/genstrings.1.html

+0

Vrai, bien qu'il y ait un certain degré de répétition avec un certain nombre de chaînes. Ma principale préoccupation était que ma mise en œuvre actuelle était contre les meilleures pratiques, mais la réponse de Jason a confirmé que tout allait bien. –

+1

Oui, je suis d'accord, il n'y a rien de mal dans votre approche originale. J'ai tendance à utiliser l'approche que j'ai décrite parce que c'est selon les directives d'Apple. Les gaines de NB sont assez intelligentes pour enlever les cordes répétées. – JeremyP

Questions connexes