2014-06-09 4 views
6

Wenn Sie localizable.strings mit vielen Einträgen in Ihrem XCode-Projekt verwenden, können Sie früher oder später einen Schlüssel mehrmals verwenden. Ist es möglich, dass XCode diesen Fall findet und eine Warnung darüber ausgibt?Wie finden Sie doppelte Schlüssel in Localizable.strings-Dateien automatisch?

Apples Resource Programming erwähnt das genstrings-Tool, aber normalerweise verwenden Sie das nicht selbst in XCode. Also, wie kann ich XCode doppelte Schlüssel in solchen Dateien erkennen lassen, ohne genestrings manuell auszuführen?

Bounty note: die Prämie eine Lösung verdienen voll mit XCode integrieren muß, wenn es externe Ressourcen wie Skripte verwendet, das heißt, es mit Eingabedateien angegeben in XCode arbeiten muß, einen Build markiert, wie im Fall von Duplikaten scheitern und darf nicht für falsche Positive wie Leerzeilen oder Kommentare ausgelöst werden.

+2

Ich glaube nicht, Xcode kann das tun, also müssten Sie wahrscheinlich ein Skript in Python oder so etwas schreiben und es als Teil eines Builds nennen. – trojanfoe

Antwort

13

cut -d' ' -f1 Localizable.strings | sort | uniq -c

Typ dieser Befehl im Terminal und Sie erhalten eine Liste zu sagen, wie oft jeder Schlüssel verwendet wird.

Verwendung statt -c -d und nur Duplikate

das Skript erhalten:

#!/bin/bash 

c=`expr $SCRIPT_INPUT_FILE_COUNT - 1` 
for i in $(seq 0 $c) 
    do 

    var="SCRIPT_INPUT_FILE_$i" 
    FILENAME=${!var} 

    DUPES=`cut -d' ' -f1 "$FILENAME" | sort | uniq -d` 

    while read -r line; do 
     if [[ $line == "\""* ]] ; 
     then 
      echo "warning: $line used multiple times -" 
     fi 
    done <<< "$DUPES" 
done 

screenshot

+0

Dies kann im Build-Prozess verwendet werden - einfach den Dateinamen so ändern, dass er auf die richtige Position zeigt –

+0

in einem Build-Prozess ist es z. etwas wie "$ {PROJECT_DIR} /app/en.lproj/Localizable.strings" –

+0

Das ist ziemlich cool. Können Sie das Skript so ändern, dass es Eingabedateien verwendet, die für die Skript-Erstellungsphase angegeben wurden, und nur auf echte Einträge der Form 'key =" text "wirkt;'? Auf diese Weise ignoriert es leere Zeilen, Kommentare und dergleichen. –

-1
more Filename.strings | tr -d ' ' | sort | uniq -d | grep -v '^$' 
+0

Es wird nur nach doppelten Zeilen gesucht, nicht nach doppelten Schlüsseln – basvk

0

cut -d '=' -F1 Localizable. Saiten | sortieren | uniq -d

Sie suchen Phrasen getrennt durch Gleichheitszeichen, nicht ein erstes Wort in jeder Zeichenfolge.