web-dev-qa-db-fra.com

Vérifier si le fichier Localizable.strings est valide

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

30
Chetan

Utilisez plutil depuis le terminal:

plutil -lint Localizable.strings
67
Aderstedt

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

  1. cd dans la racine de votre projet
  2. cd en.lproj - vous pouvez le remplacer par n’importe quelle localisation avec laquelle vous travaillez.
  3. 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

26
JackColley

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).

9
Patru

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

1
Daij-Djan

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:

  1. 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"];
    
  2. Convertissez-le en tableau de chaînes

    NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil];
    NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
    
  3. 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");
        }
    }
    
0
Tony TRAN