Was ist der beste Weg, um eine lokalisierte Zeichenfolge in Applescript zu formatieren?

StackOverflow https://stackoverflow.com/questions/64146

  •  09-06-2019
  •  | 
  •  

Frage

Wenn ein Skript als ein Bündel gespeichert wird, kann es den localized string Befehl verwenden Sie die entsprechende Zeichenfolge zu finden, zum Beispiel in Contents/Resources/English.lproj/Localizable.strings. Wenn dies ein Format-String ist, was ist die beste Art und Weise in den Platzhalter zu füllen? Mit anderen Worten, was ist das Äquivalent von Apple +[NSString stringWithFormat:]?

Eine Idee, die ich hatte, war do shell script mit printf(1) zu verwenden. Gibt es einen besseren Weg?

War es hilfreich?

Lösung

Seit OS X 10.10 , ist es möglich, für jedes Applescript-Skript Objective-C zu verwenden. Es gibt ein paar Möglichkeiten, Objective-C-Methoden aus Apple zu nennen, wie detailliert in diese Übersetzung Führung . Ein Objective-C-Entwickler wie mich wäre zu dieser Syntax gravitieren, die die Methode der Parameter mit ihren Werten interpoliert:

use framework "Foundation"

tell the current application's NSWorkspace's sharedWorkspace to openFile:"/Users/me/Desktop/filter.png" withApplication:"Preview"

Ergebnis:

true

+[NSString stringWithFormat:] ist ein heikeler Fall. Es dauert eine Vararg Liste als erste Parameter, so müssen Sie einen Weg, sowohl den Format-String und seine Argumente in den gleichen Verfahrensparameter zu erzwingen. Die folgenden Ergebnisse in einem Fehler, weil Apple endet ein einzelnes NSArray in den Parameter übergeben, die vom Konzept her, eine C Array von NSStrings erwartet:

use framework "Foundation"

the current application's NSString's stringWithFormat:{"%lu documents", 8}

Ergebnis:

error "-[__NSArrayM length]: unrecognized selector sent to instance 0x7fd8d59f3bf0" number -10000

Stattdessen müssen Sie eine alternative Syntax verwenden, die eher wie ein Applescript-Handler Aufruf als eine Objective-C-Nachricht aussieht. Sie müssen auch den Rückgabewert (ein NSString-Objekt) in ein text zwingen:

use framework "Foundation"

the current application's NSString's stringWithFormat_("%lu documents", 8) as text

Ergebnis:

"2087 documents"

Die „mit den Parametern“ Syntax, die @nlanza verweist auf die Tatsache erwähnt, dass Applescript ist mit so etwas wie dieser Artikel für einige Beispiele für die Verwendung NSInvocation direkt.)

Andere Tipps

So hässlich wie es ist, zu printf(1) rufend ist die gemeinsame Lösung.

Ein sauberer, wenn auch etwas komplexere Lösung ist Applescript Studio zu verwenden, die Sie in Objective-C-Objekte / Klassen aus Ihrem Applescript-Code mit dem call method Syntax dokumentiert hier .

Damit würden Sie in der Lage sein, so etwas zu verwenden:

call method "stringWithFormat:" of class "NSString" with parameters {formatString, arguments}

Die Kehrseite der Medaille, natürlich, ist, dass Sie ein Applescript Studio App statt nur ein einfaches Skript zu schreiben schreiben müssen. Sie tun ein gutes Stück mehr Flexibilität im Allgemeinen mit Studio-Anwendungen bekommen, aber es ist so nicht alle zusammen ein schrecklicher Weg zu gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top