J'utilise (comme tous les autres) NSLocalizedString
pour localiser mon application.
Malheureusement, il existe plusieurs "inconvénients" (qui ne sont pas nécessairement le fait de NSLocalizedString elle-même), notamment
- Pas d'autocomplétion pour les chaînes de caractères dans Xcode. Cela rend le travail non seulement source d'erreurs mais aussi fastidieux.
- Vous pourriez finir par redéfinir une chaîne simplement parce que vous ne saviez pas qu'il existait déjà une chaîne équivalente (par exemple, "Veuillez entrer le mot de passe" ou "Entrez d'abord le mot de passe").
- Comme pour le problème de l'autocomplétion, vous devez vous "souvenir"/copier les chaînes de commentaires, sinon
genstring
se retrouvera avec plusieurs commentaires pour une seule chaîne - Si vous voulez utiliser
genstring
après avoir déjà localisé certaines chaînes, vous devez faire attention à ne pas perdre vos anciennes localisations. - Les mêmes ficelles sont dispersées dans tout votre projet. Par exemple, vous avez utilisé
NSLocalizedString(@"Abort", @"Cancel action")
partout, et ensuite 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 rendu compte que beaucoup de personnes font cela), c'est d'avoir un fichier séparé strings.h
où je #define
tout le code de localisation. Par exemple
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Cela permet essentiellement la complétion du code, un endroit unique pour changer les noms de variables (donc plus besoin de genstring), et un mot-clé unique pour l'auto-réfactorisation. Cependant, cela a pour conséquence de se retrouver avec tout un tas de fichiers #define
qui ne sont pas intrinsèquement structurées (par exemple, LocString.Common.Cancel ou quelque chose comme ça).
Bien que cela fonctionne assez bien, je me demandais comment vous procédiez dans vos projets. Existe-t-il d'autres approches pour simplifier l'utilisation de NSLocalizedString ? Existe-t-il même un cadre qui l'encapsule ?
0 votes
Je fais presque la même chose que toi. Mais j'utilise la makro NSLocalizedStringWithDefaultValue pour créer différents fichiers de chaînes de caractères pour différents problèmes de localisation (comme les contrôleurs, les modèles, etc.) et pour créer une valeur par défaut initiale.
0 votes
Il semble que l'exportation vers la localisation de xcode6 ne prenne pas en compte les chaînes de caractères qui sont définies comme des macros dans un fichier d'en-tête. Quelqu'un peut-il confirmer ou me dire ce que je pourrais manquer ? Merci... !
0 votes
@Juddster, je peux confirmer, même avec le nouveau fonds Éditeur->Exportation pour la localisation, il n'est pas repris dans le fichier d'en-tête.