¿Cuál es la mejor manera de dar formato a una cadena localizada en AppleScript?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Cuando un script se guarda como un paquete, se puede utilizar el localized string comando para buscar la cadena apropiada, por ejemplo,en Contents/Resources/English.lproj/Localizable.strings.Si esto es una cadena de formato, ¿cuál es la mejor manera de rellenar los marcadores de posición?En otras palabras, ¿cuál es el equivalente de AppleScript +[NSString stringWithFormat:]?

Una idea que yo tenía era utilizar do shell script con printf(1).Hay una manera mejor?

¿Fue útil?

Solución

Ya OS X 10.10, ha sido posible para cualquier secuencia de comandos de AppleScript para el uso de Objective-C.Hay un par de maneras de llamar a Objective-C métodos en AppleScript, como se detalla en esta guía de traducción.Un Objetivo-programador de C como me iba a gravitar hacia esta sintaxis, que interpola los parámetros del método con sus valores:

use framework "Foundation"

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

Resultado:

true

+[NSString stringWithFormat:] es un difícil caso.Se necesita un vararg lista como primer parámetro, por lo que usted necesita para forzar tanto la cadena de formato y sus argumentos en el mismo parámetro de método.Los siguientes resultados en un error, porque AppleScript termina pasando una sola NSArray en el parámetro que se espera que, conceptualmente, una matriz C de NSStrings:

use framework "Foundation"

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

Resultado:

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

En su lugar, usted tiene que utilizar una sintaxis alternativa que se parece más a un AppleScript controlador de llamada de un Objetivo-C mensaje.También es necesario convertir el valor de retorno (un objeto NSString) en un text:

use framework "Foundation"

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

Resultado:

"2087 documents"

El "con" parámetros de sintaxis que @nlanza menciona apunta al hecho de que AppleScript es el uso de algo parecido a NSInvocation bajo el capó.En Objective-C, NSInvocation le permite enviar un mensaje a un objeto, junto con una serie de valores de los parámetros, sin necesidad de coincidencia de cada valor a un parámetro en particular.(Ver este artículo para algunos ejemplos de la utilización de NSInvocation directamente).

Otros consejos

Tan feo como es, llamando a la printf(1) es la solución más común.

Un limpiador, aunque algo más complejo, la solución es utilizar AppleScript Studio, que permite llamar a Objective-C objetos/clases de su AppleScript código con la call method sintaxis documentado aquí.

Con eso, deberías ser capaz de usar algo como esto:

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

La desventaja de esto, por supuesto, es que usted necesita para escribir un AppleScript Studio de la aplicación en lugar de sólo escribir un guión simple.Usted consigue un buen poco más de flexibilidad en general con el Estudio de las aplicaciones, aunque, por lo que no todos juntos un terrible camino a seguir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top