it-swarm.com.de

Prüfen Sie, ob die Localizable.strings-Datei gültig ist

Ich erstelle lokalisierbare, String-Dateien programmgesteuert. Ich lade die Datei vom Server herunter und zeige die Lokalisierung von dieser Datei.

Wenn jedoch ein Fehler in der Datei vorliegt, funktioniert meine Lokalisierung nicht. Es zeigt mir die Schlüssel. Wenn auf dem Server, bearbeite ich die Lokalisierungsdatei und fügte als Zeichenfolge hinzu 

"HELLO_WORLD" = Hallo

Hier ist der Schlüssel korrekt, aber der Wert ist nicht im richtigen Format. Das Format sollte so sein 

"HELLO_WORLD" = "Hallo";

Wie kann ich zur Laufzeit programmgesteuert prüfen, ob meine Localizable.strings-Datei keinen Fehler enthält und gültig ist.

Bitte helfen

30
Chetan

Verwenden Sie plutil vom Terminal:

plutil -lint Localizable.strings
67
Aderstedt

Zusätzlich zur Antwort von @ Aderstedt:

plutil -lint Localizable.strings funktioniert, aber Sie müssen es für jede Version der Datei ausführen. Z.B

  1. cd in Ihr Projektstammverzeichnis
  2. cd en.lproj - Sie können dies durch jede Lokalisierung ersetzen, mit der Sie arbeiten.
  3. plutil -lint Localizable.strings

Wenn Sie Schritt 3 ausführen, wird entweder ein Fehler angezeigt, der Sie darüber informiert, was mit Ihrer Datei nicht stimmt. Oder Sie erfahren, dass die Datei in Ordnung ist

26
JackColley

Wie oben erwähnt, ist plutil (Eigenschaftslisten-Dienstprogramm) ein hervorragendes Werkzeug zum Überprüfen Ihrer .plist- und .strings-Dateien, wenn Sie sie manuell bearbeiten. Sie können es auf alle Ihre .strings-Datei anwenden, indem Sie es mit find kombinieren. In Ihrem Projektverzeichnis ausführen

find . -name *.strings -exec plutil -lint {} \;

oder verwenden

find . -path ./DerivedData -Prune -o -name *.strings -exec plutil -lint {} \;

wenn Sie Ihr DerivedData-Verzeichnis (wie ich es normalerweise tue) ausschließen möchte.

9
Patru

Ich hatte das gleiche Problem und fand, dass der Plural nicht detailliert genug ist. Die Leute, die die Dateien bearbeiteten, wollten etwas, was ihnen genauer sagt, was falsch ist

plutil ist einfach zu breit.

also habe ich ein schnelles und schmutziges Java-Tool zum Testen einer String-Datei geschrieben:

https://github.com/Daij-Djan/parseAndValidateAppleStringsFile

haftungsausschluss: mein Code

1
Daij-Djan

Es gibt viele Antworten, aber sie konzentrierten sich nicht auf die Hauptpunkte " programmgesteuert check zur Laufzeit " . Mein Vorschlag ist:

  1. Suchen Sie programmgesteuert den Pfad Ihres heruntergeladenen Dateiprogramms (z. B. .../Documents/YourApp.bundle/fr-FR.lproj/Localizable.strings).

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ja"];
    
  2. Konvertieren Sie es in ein String-Array

    NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil];
    NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
    
  3. Überprüfen Sie alle Zeilen von allLinedStrings manuell oder mit regulärem Ausdruck. Der folgende Code ist ein Beispiel für die manuelle Überprüfung mit einigen einfachen Regeln:

    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