Qual è il modo migliore per formattare una stringa localizzata in AppleScript?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Quando uno script viene salvato come un pacchetto, è possibile utilizzare l' localized string comando a trovare la stringa appropriata, ad esempioin Contents/Resources/English.lproj/Localizable.strings.Se questa è una stringa di formato, qual è il modo migliore per completare il segnaposto?In altre parole, che cosa è l'equivalente di AppleScript +[NSString stringWithFormat:]?

Una idea che ho avuto è stata di utilizzare do shell script con printf(1).C'è un modo migliore?

È stato utile?

Soluzione

Dal momento che OS X 10.10, è stato possibile, per qualsiasi script di AppleScript per utilizzare Objective-C.Ci sono un paio di modi per chiamare Objective-C metodi all'interno di AppleScript, come dettagliato nel questa traduzione guida.Un Obiettivo-sviluppatore C come me gravitano verso questa sintassi, che interpola i parametri del metodo con i loro valori:

use framework "Foundation"

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

Risultato:

true

+[NSString stringWithFormat:] è un caso complicato.Ci vuole un vararg lista come primo parametro, quindi hai bisogno di qualche modo per forzare sia la stringa di formato e i suoi argomenti nella stessa parametro del metodo.I seguenti risultati di un errore, in quanto AppleScript finisce il passaggio di un singolo NSArray il parametro che si aspetta, concettualmente, una matrice C di NSStrings:

use framework "Foundation"

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

Risultato:

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

Invece, è necessario utilizzare una sintassi alternativa che appare più come un AppleScript gestore di chiamata di un Obiettivo-C messaggio.È inoltre necessario assegnare il valore di ritorno (un oggetto NSString) in un text:

use framework "Foundation"

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

Risultato:

"2087 documents"

I “parametri” sintassi @nlanza menziona, infatti, che AppleScript è l'utilizzo di qualcosa di simile a NSInvocation sotto il cofano.In Objective-C, NSInvocation consente di inviare un messaggio ad un oggetto, con una matrice di valori di parametro, senza necessariamente corrispondenza di ogni valore di un determinato parametro.(Vedere questo articolo per alcuni esempi di utilizzo di NSInvocation direttamente.)

Altri suggerimenti

Brutto come è, chiamando printf(1) è la soluzione più comune.

Un pulitore, anche se un po ' più complessa, la soluzione è di usare AppleScript Studio, che consente di chiamare in Objective-C di oggetti/classi dal codice AppleScript con il call method sintassi documentata qui.

Con questo, devi essere in grado di utilizzare qualcosa di simile a questo:

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

Il rovescio della medaglia, naturalmente, è che avete bisogno di scrivere un AppleScript Studio app invece di scrivere un semplice script.Si ottiene un buon po ' più di flessibilità in generale, con Studio apps, però, quindi non tutti insieme un terribile percorso per andare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top