Sto (come tutti gli altri) usando NSLocalizedString
per localizzare la mia app.
Sfortunatamente, ci sono diversi "svantaggi" (non necessariamente colpa di NSLocalizedString stesso), incluso
- Nessuna compilazione automatica per le stringhe in Xcode. Ciò rende il lavoro non solo soggetto a errori ma anche noioso.
- Potresti finire per ridefinire una stringa semplicemente perché non sapevi che esistesse già una stringa equivalente (es. "Inserisci la password" anziché "Inserisci prima la password")
- Analogamente al problema del completamento automatico, è necessario "ricordare" / copiare le stringhe di commento, altrimenti
genstring
finiranno con più commenti per una stringa - Se si desidera utilizzare
genstring
dopo aver già localizzato alcune stringhe, è necessario fare attenzione a non perdere le vecchie localizzazioni. - Le stesse stringhe sono sparse per l'intero progetto. Ad esempio, hai usato
NSLocalizedString(@"Abort", @"Cancel action")
ovunque, quindi Code Review ti chiede di rinominare la stringaNSLocalizedString(@"Cancel", @"Cancel action")
per rendere il codice più coerente.
Quello che faccio (e dopo alcune ricerche su SO ho immaginato che molte persone lo facciano) è avere un strings.h
file separato in cui ho #define
tutto il codice localizzato. Per esempio
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Ciò fornisce essenzialmente il completamento del codice, un unico posto per cambiare i nomi delle variabili (quindi non c'è più bisogno di genstring) e una parola chiave unica per il refactoring automatico. Tuttavia, questo ha il costo di finire con un mucchio di #define
affermazioni che non sono intrinsecamente strutturate (cioè come LocString.Common.Cancel o qualcosa del genere).
Quindi, mentre funziona un po 'bene, mi chiedevo come lo facciate nei vostri progetti. Esistono altri approcci per semplificare l'uso di NSLocalizedString? C'è forse anche un framework che lo incapsula?