He encontrado una solución por mi cuenta y me gustaría compartir el resultado contigo: construí una especie de función torpe que busca y reemplaza los caracteres no deseados si aparecen en la cadena (desafortunadamente AppleScript devuelve malos resultados si la búsqueda y reemplazo no encuentra una ocurrencia).
Edit: Como encontré que los caracteres de los corchetes no son críticos, su transformación está excluida del script pegado a continuación. Por lo tanto, las agujas dadas al final de la función UnAccentString()
deben ajustarse, si los corchetes también deben ser reemplazados.
La función findAndReplace()
es cortesía de MacScripter, gracias.
Ten en cuenta que el orden de los reemplazos dentro de la función UnAccentString()
es crucial. Cuando colocas la transformación de 'Ü' antes que la de 'ü', obtendrás malos resultados. Curiosamente, macOS parece considerar una 'ü' como válida al buscar 'Ü', pero no viceversa ni con otros* diacríticos. No tengo idea de por qué esto sucede pero funciona con este orden:
en UnAccentString(LaCadena)
si LaCadena contiene "ü" then
set LaCadena to findAndReplace("ü", "Ue", LaCadena)
end if
si LaCadena contiene "ä" then
set LaCadena to findAndReplace("ä", "ae", LaCadena)
end if
si LaCadena contiene "ö" then
set LaCadena to findAndReplace("ö", "oe", LaCadena)
end if
si LaCadena contiene "Ü" then
set LaCadena to findAndReplace("Ü", "Ue", LaCadena)
end if
si LaCadena contiene "Ä" then
set LaCadena to findAndReplace("Ä", "Ae", LaCadena)
end if
si LaCadena contiene "Ö" then
set LaCadena to findAndReplace("Ö", "Oe", LaCadena)
end if
si LaCadena contiene "é" then
set LaCadena to findAndReplace("é", "e", LaCadena)
end if
si LaCadena contiene "è" then
set LaCadena to findAndReplace("è", "e", LaCadena)
end if
si LaCadena contiene "à" then
set LaCadena to findAndReplace("à", "a", LaCadena)
end if
si LaCadena contiene "ó" then
set LaCadena to findAndReplace("ó", "o", LaCadena)
end if
si LaCadena contiene "á" then
set LaCadena to findAndReplace("á", "a", LaCadena)
end if
si LaCadena contiene "ú" then
set LaCadena to findAndReplace("ú", "u", LaCadena)
end if
si LaCadena contiene "í" then
set LaCadena to findAndReplace("í", "i", LaCadena)
end if
si LaCadena contiene "Á" then
set LaCadena to findAndReplace("Á", "A", LaCadena)
end if
si LaCadena contiene "É" then
set LaCadena to findAndReplace("É", "E", LaCadena)
end if
si LaCadena contiene "Í" then
set LaCadena to findAndReplace("Í", "I", LaCadena)
end if
si LaCadena contiene "Ó" then
set LaCadena to findAndReplace("Ó", "O", LaCadena)
end if
si LaCadena contiene "Ú" then
set LaCadena to findAndReplace("Ú", "U", LaCadena)
end if
si LaCadena contiene "ñ" then
set LaCadena to findAndReplace("ñ", "n", LaCadena)
end if
si LaCadena contiene "Ñ" then
set LaCadena to findAndReplace("Ñ", "N", LaCadena)
end if
si LaCadena contiene "ê" then
set LaCadena to findAndReplace("ê", "e", LaCadena)
end if
si LaCadena contiene "Ê" then
set LaCadena to findAndReplace("Ê", "E", LaCadena)
end if
si LaCadena contiene "ë" then
set LaCadena to findAndReplace("ë", "e", LaCadena)
end if
si LaCadena contiene "Ë" then
set LaCadena to findAndReplace("Ë", "E", LaCadena)
end if
si LaCadena contiene "È" then
set LaCadena to findAndReplace("È", "E", LaCadena)
end if
si LaCadena contiene ":" then
set LaCadena to findAndReplace(":", "", LaCadena)
end if
si LaCadena contiene "," then
set LaCadena to findAndReplace(",", "", LaCadena)
end if
si LaCadena contiene " " then
set LaCadena to findAndReplace(" ", "-", LaCadena)
end if
si LaCadena contiene "%" then
set LaCadena to findAndReplace("%", "", LaCadena)
end if
si LaCadena contiene "'" then
set LaCadena to findAndReplace("'", "", LaCadena)
end if
return LaCadena & ".pdf" as text
end UnAccentString
en findAndReplace(parabuscar, parareemplazar, LaCadena)
establecer ditd a separadores de elementos de texto
establecer res a valor faltante
establecer separadores de elementos de texto a parabuscar
repetir con tis en elementos de texto de LaCadena
si res es valor faltante then
establecer res a tis
de lo contrario
establecer res a res & parareemplazar & tis
fin si
fin repetir
establecer separadores de elementos de texto a ditd
return res
end findAndReplace
Por lo tanto, llamar a la función con la siguiente cadena:
return UnAccentString("Übersetzungen im alltäglichen Leben eines Riñóns und eines Négligée à Noël") as text
devolverá
Uebersetzungen-im-alltaeglichen-Leben-eines-Rinons-und-eines-Negligee-a-Noel
Esta es una lista de todos los caracteres que la función busca y sus respectivos contrapartes con los que se reemplazan:
- Ü --> Ue
- Ä --> Ae
- Ö --> Oe
- ü --> Ue
- ä --> ae
- ö --> oe
- é --> e
- è --> e
- à --> a
- ó --> o
- á --> a
- ú --> u
- í --> i
- Á --> A
- É --> E
- Í --> I
- Ó --> O
- Ú --> U
- ñ --> n
- Ñ --> N
- ê --> e
- Ê --> E
- ë --> e
- Ë --> E
- È --> E
- : --> (vacío)
- , --> (vacío)
- (espacio) --> -
- % --> (vacío)
- ' --> (vacío)
Espero que esto ayude a alguien. ¡Saludos, nic!