J'utilise (comme tous les autres) NSLocalizedString
pour localiser mon application.
Malheureusement, il existe plusieurs «inconvénients» (pas nécessairement la faute de NSLocalizedString lui-même), y compris
- Pas de saisie semi-automatique pour les chaînes dans Xcode. Cela rend le travail non seulement sujet aux erreurs, mais aussi fastidieux.
- Vous pourriez finir par redéfinir une chaîne simplement parce que vous ne saviez pas qu'une chaîne équivalente existait déjà (c'est-à-dire «Veuillez saisir le mot de passe» ou «Saisissez d'abord le mot de passe»)
- De la même manière que pour le problème de la saisie semi-automatique, vous devez "vous souvenir" / copier-coller les chaînes de commentaires, sinon vous
genstring
obtiendrez plusieurs commentaires pour une chaîne - Si vous souhaitez utiliser
genstring
après avoir déjà localisé certaines chaînes, vous devez faire attention à ne pas perdre vos anciennes localisations. - Les mêmes chaînes sont dispersées tout au long de votre projet. Par exemple, vous avez utilisé
NSLocalizedString(@"Abort", @"Cancel action")
partout, puis Code Review vous demande de renommer la chaîne enNSLocalizedString(@"Cancel", @"Cancel action")
pour rendre le code plus cohérent.
Ce que je fais (et après quelques recherches sur SO, je me suis dit que beaucoup de gens le faisaient), c'est d'avoir un strings.h
fichier séparé où je #define
localisais tout le code. Par exemple
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Cela fournit essentiellement la complétion de code, un endroit unique pour changer les noms de variables (donc plus besoin de genstring) et un mot clé unique pour l'auto-refactorisation. Cependant, cela se fait au prix de se retrouver avec tout un tas d' #define
instructions qui ne sont pas intrinsèquement structurées (c'est-à-dire comme LocString.Common.Cancel ou quelque chose comme ça).
Donc, bien que cela fonctionne plutôt bien, je me demandais comment vous le faites dans vos projets. Existe-t-il d'autres approches pour simplifier l'utilisation de NSLocalizedString? Y a-t-il peut-être même un cadre qui l'encapsule?