2014-04-23 6 views
6

Ich bezahle immer noch teuer für das Lernen von iOS-Entwicklung, also bitte sei nett.
Ich habe eine iOS-Anwendung rund 400 NSString litterals enthält. Ich hätte nie gedacht, dass ich diese App später lokalisieren möchte, also habe ich mich bei NSLocalizedString bewusst dafür entschieden, sie nicht für mein Projekt zu verwenden.
Jetzt hat sich die Welt verändert und ich muss diese Anwendung lokalisieren. Gibt es ein Tool/script ich, dass meine durch .m Dateien ausführen können und „Suchen/Ersetzen“ mein NSStrings mit NSLocalizedStrings, bevor ich sie mit genstrings extrahieren?NSString automatisch in NSLocalizedString transformieren?

Dank Roger

Antwort

1

Aus der Frage und Ihren Kommentaren scheint es, dass Sie etwa 400 Strings haben, von denen nur 20 nicht lokalisiert werden sollten. Mit diesem Verhältnis, wie du selbst sagst, kann es sinnvoll sein, sie alle zu ändern und dann die Änderung für 20 rückgängig zu machen.

Um dies zu tun, TextWrangler oder BBEdit, und führen Sie eine Multi-Datei-Muster-Suche und ersetzen.Sie können die Suche auf Dateien beschränken, die auf .m oder .h enden. Die Aufgabe wird schnell und einfach sein, abgesehen von denen, 20 ...

HTH

+0

Dank CRD. Ich gebe zu, nicht gedacht «out of the box» (mit Xcode ist die Box, sozusagen.) Raten Sie es ist Zeit zu putze meine Regex-Fähigkeiten auf und probiere es aus ... – theremin

+0

Das hat einfach perfekt geklappt und mir Stunden des Tippens erspart Du bist mein Held des Tages, CRD! – theremin

+0

Der Vollständigkeit halber: Das ist der Regex Ich benutze (die meisten meiner Strings waren in Arrays). Ich suchte nach/@ "[^ ,;] +"/g und ersetzt durch NSLocalizedString ($ &, Null) – theremin

2

Sie in der Regel wollen nicht alle NSStrings mit NSLocalizedString, da nicht alle Saiten sind notwendigerweise ‚Benutzer zugewandten‘ ersetzen. Sie haben möglicherweise intern verwendete Zeichenfolgenkonstanten, die der Benutzer nie sieht, und diese sollten im Allgemeinen nicht übersetzt werden. Daher ist das blinde Ersetzen aller NSS-Strings durch NSLocalizedString wahrscheinlich keine großartige Idee.

Es ist ein gutes Stück Arbeit, dies manuell durchzuführen, aber es ist ein einmaliger Versuch - sobald Sie es einmal getan haben, werden Sie den richtigen Umgang mit neuen Strings kennen lernen Mach es so wie du willst. Wenn man das gesagt hat, könnte es irgendwo ein Werkzeug geben, das elegant damit umgeht, aber man muss sich nicht vor der manuellen Auswahl stellen, welche Saiten übersetzt werden müssen und welche nicht.

+0

Guter Punkt, Rob! Aber von meinen 400 Strings sind wahrscheinlich etwa 380 Benutzer zugewandt. Es wäre also viel weniger Arbeit, sie alle zu konvertieren, um Strings zu lokalisieren und diese 20 nicht benutzerorientierten Strings wieder in normale NSS-Strings umzuwandeln. – theremin

2

Von ich habe gelernt und ausgecheckt, gibt es keine automatisierte Methode, um Ihre Saiten auf lokalisierte eine Sie wünschen. Aber es gibt ein Plugin für XCode namens Lin, das Ihren Prozess vereinfacht.

Wenn Sie sich auf NSLocalizedString oder andere Funktionen konzentrieren, um eine lokalisierte Version eines Strings zu erhalten, zeigt Lin die Liste der Lokalisierungen an, die den eingegebenen Schlüssel enthält.

Lin

6

Sie haben einen Fehler nicht, Ihren Code beim ersten Mal richtig zu schreiben, und jetzt müssen Sie den Preis zahlen.

Sie müssen Ihr Programm manuell durchlaufen und benutzerdefinierbare Zeichenfolgenliterale in Aufrufe von NSLocalizedString ändern.

Beachten Sie, dass Sie wollen alle Stringliterale nicht global ändern. Dinge wie Wörterbuchschlüssel sollten nicht lokalisiert werden.

Verwenden Sie IMMER immer NSLocalizedString, um lokalisierte Zeichenfolgen zu erstellen. Es sind nur noch ein paar Zeichen mehr einzugeben, und es erleichtert die Internationalisierung Ihres Codes DRAMATICALLY.

Die gute Nachricht ist, dass der Schmerz dabei eine bittere Lektion sein wird und Sie wahrscheinlich nicht den gleichen Fehler machen werden.

+3

manchmal tut die Wahrheit weh ;-) – theremin

+0

Ich habe einen Spanking :(Beten Sie für meine Handgelenke – braden

3

Ja! Ein Regex zum Suchen und Ersetzen wird dies beschleunigen.

In der Suchleiste Put:

(".*") 

Im ersetzen bar:

NSLocalizedString($1,comment:"") 

Dieses "normalString" zu NSLocalizedString ändern wird ("normalString" Kommentar: "")

Also gehen Sie durch Ihren Code und auf diejenigen, die Sie ersetzen möchten, drücken Sie einfach ersetzen, das ist ein enormer Zeitsparer!

+0

Vergessen Sie nicht, die Suchoptionen auf Regex zu setzen – Pbk