Je crée Localizable, un fichier de chaînes par programme. Je télécharge le fichier du serveur et montre la localisation de ce fichier.
Mais s'il y a une erreur dans le fichier, ma localisation ne fonctionne pas. Il me montre les clés. Si sur le serveur j'édite le fichier de localisation et que j'ai ajouté string comme
"HELLO_WORLD" = Bonjour
Ici, la clé est correcte mais la valeur n'est pas au format correct. Le format devrait être aussi
"HELLO_WORLD" = "Bonjour";
Comment puis-je vérifier par programme au moment de l'exécution si mon fichier Localizable.strings ne contient pas d'erreur et est valide.
S'il vous plaît aider
Utilisez plutil
depuis le terminal:
plutil -lint Localizable.strings
En plus de la réponse de @ Aderstedt:
plutil -lint Localizable.strings
fonctionne, mais vous devez l'exécuter pour chaque version du fichier. Par exemple
cd
dans la racine de votre projetcd en.lproj
- vous pouvez le remplacer par n’importe quelle localisation avec laquelle vous travaillez.plutil -lint Localizable.strings
Lorsque vous exécutez l'étape 3, une erreur s'affichera vous indiquant le problème de votre fichier. Ou on vous dira que le fichier est OK
Comme mentionné ci-dessus, plutil
(utilitaire de liste de propriétés) est un excellent outil pour valider vos fichiers .plist
et .strings
si vous les modifiez manuellement. Vous pouvez l'appliquer à tous vos fichiers .strings
en le combinant avec find
. Dans votre répertoire de projet, exécutez
find . -name *.strings -exec plutil -lint {} \;
ou utiliser
find . -path ./DerivedData -Prune -o -name *.strings -exec plutil -lint {} \;
si vous souhaitez exclure votre répertoire DerivedData
(comme je le fais habituellement).
J'avais le même problème et je trouvais que le pluriel n'était pas assez détaillé. Les personnes qui éditaient les fichiers voulaient quelque chose qui leur dirait plus précisément ce qui ne va pas
plutil est trop large.
j'ai donc écrit un outil Java rapide et sale pour tester un fichier de chaînes:
https://github.com/Daij-Djan/parseAndValidateAppleStringsFile
disclaimer: mon code
Il y a beaucoup de réponses mais elles ne sont pas centrées sur les points principaux " par programmation check à l'exécution " . Ma suggestion est la suivante:
Trouvez par programme le chemin du programme de votre fichier téléchargé (Like .../Documents/YourApp.bundle/fr-FR.lproj/Localizable.strings)
NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ja"];
Convertissez-le en tableau de chaînes
NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil];
NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
Vérifiez toutes les lignes de allLinedStrings manuellement ou avec une expression régulière. Le code suivant est un exemple de vérification manuelle avec quelques règles simples:
for (NSString *line in allLinedStrings) {
if (line.length >= 2) {
NSString *firstTwoCharacters = [line substringToIndex:2];
if (![firstTwoCharacters isEqualToString:@"//"]){
if (![line containsString:@"\";"]) {
NSLog(@"Invalid line");
}
NSUInteger numberOfOccurrences = [[line componentsSeparatedByString:@"\""] count];
if (numberOfOccurrences < 4) {
NSLog(@"Invalid line");
}
}
}
else if (line.length > 0) {
NSLog(@"Invalid line");
}
}