2015-08-21 28 views
16

Sto creando localizzabile, file di stringhe programmaticamente. Sto scaricando il file dal server e mostrando la localizzazione da quel file.Verifica se il file Localizable.strings è valido

Ma se c'è qualche errore nel file, la mia localizzazione non funziona. Mi mostra le chiavi. Se sul server di modifico il file di localizzazione e ho aggiunto stringa come

"hello_world" = Ciao

Qui, la chiave è corretto, ma il valore non è nel formato corretto. Il formato deve essere come

"HELLO_WORLD" = "Ciao";

Come posso controllare a livello di programmazione in fase di esecuzione se il mio file Localizable.strings non contiene errori ed è valido.

Si prega di aiutare

risposta

42

Usa plutil dal Terminal:

plutil -lint Localizable.strings 
+0

grande grazie. Xcode 9 e il terminale sono utilizzati e continuano a funzionare per facilitare il debug –

1

Ho avuto lo stesso problema e ha trovato il plurale non è abbastanza 'dettagliata'. La gente che modificava i file voleva qualcosa che potesse dire loro esattamente cosa fosse sbagliato

plutil è semplicemente troppo ampio.

così ho scritto un rapido & strumento java sporca per testare un file di stringhe:

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

disclaimer: il mio codice

13

Oltre a @ risposta di Aderstedt:

plutil -lint Localizable.strings fa lavoro, ma devi eseguirlo per ogni versione del file. Per esempio

  1. cd nel progetto principale
  2. cd en.lproj - è possibile sostituire questo con qualsiasi localizzazione si sta lavorando.
  3. plutil -lint Localizable.strings

Quando si esegue il passaggio 3, si potrà essere visualizzato un errore, che ti dice ciò che è sbagliato con il file. Oppure si sarà detto il file è OK

4

Come accennato in precedenza plutil (utility elenco di proprietà) è un ottimo strumento per convalidare i file .plist e .strings se si modifica manualmente. È possibile applicarlo a tutti i file .strings combinandolo con find. Nella directory di progetto gestito

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

o utilizzare

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

se ti piace per escludere la directory DerivedData (come faccio di solito).

0

ci sono molte risposte, ma non è stato concentrarsi sui punti principali è "programmazione controllo in fase di esecuzione". Il mio suggerimento è:

  1. programmazione trovare il percorso del programma di file scaricato (come .../Documenti/YourApp.bundle/FR-fr.lproj/Localizable.strings)

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ja"]; 
    
  2. Convertire ad array di stringhe

    NSString *fileContents = [NSString stringWithContentsOfFile:localizablePath encoding:NSUTF8StringEncoding error:nil]; 
    NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]]; 
    
  3. visualizzate tutte linea da allLinedStrings manualmente o con espressione regolare. Segue codice è un esempio di controllare manualmente con alcune semplici regole:

    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"); 
        } 
    }