如何在AppleScript中仅对部分串联字符串进行URL编码

问题描述

尝试创建将使用https://translate.google.com翻译所选文本的服务。

当我选择诸如“ Please”之类的文本时,它可以正常工作并生成URL: https://translate.google.com/#view=home&op=translate&sl=auto&tl=da&text=Please

当我选择“请帮助我”之类的文本时,它会生成URL: https://translate.google.com/%23view=home&op=translate&sl=auto&tl=da&text=Please%20help%20me 这是行不通的。我猜整个URL都经过URLEncoded编码。 “ .com /#view”中的“#”(标签)被转换为“%23”,我认为这是问题所在。

如何仅对变量“输入”进行URL编码?

on run {input,parameters}
    
    set thelist to {"Afrikaans","Albansk","Amharisk","Arabisk","Armensk","Aserbajdsjansk","Baskisk","Bengali","Bosnisk","Bulgarsk","Burmesisk","Cebuano","Chichewa","Dansk","Engelsk","Esperanto","Estisk","Finsk","Fransk","Frisisk","Galicisk","Georgisk","Græsk","Gujarati","Haitisk kreolsk","Hausa","Hawaiiansk","Hebraisk","Hindi","Hmong","Hollandsk","Hviderussisk","Igbo","Indonesisk","Irsk","Islandsk","Italiensk","Japansk","Javanesisk","Jiddisch","Kannada","Kasakhisk","Katalansk","Khmer","Kinesisk (forenklet)","Kinesisk (traditionelt)","Kinyarwanda","Kirgisk","Koreansk","Korsikansk","Kroatisk","Kurdisk","Laotisk","Latin","Lettisk","Litauisk","Luxembourgsk","Makedonsk","Malagassisk","Malajisk","Malayalam","Maltesisk","Maori","Marathi","Mongolsk","Nepalesisk","Norsk","Odia (Oriya)","Pashto","Persisk","Polsk","Portugisisk","Punjabi","Rumænsk","Russisk","Samoansk","Serbisk","Sesotho","Shona","Sindhi","Sinhala","Skotsk gælisk","Slovakisk","Slovensk","Somalisk","Spansk","Sundanesisk","Svensk","Swahili","Tadsjikisk","Tagalog","Tamil","Tatarisk","Telugu","Thailandsk","Tjekkisk","Turkmensk","Tyrkisk","Tysk","Uighursk","Ukrainsk","Ungarsk","Urdu","Usbekisk","Vietnamesisk","Walisisk","Xhosa","Yoruba","Zulu"}
    set theItem to choose from list thelist with prompt "Hvad vil du oversætte til?" default items {"Dansk"}
    
    if theItem = {"Afrikaans"} then
        set language to "af"
    else if theItem = {"Albansk"} then
        set language to "sq"
    else if theItem = {"Amharisk"} then
        set language to "am"
    else if theItem = {"Arabisk"} then
        set language to "ar"
    else if theItem = {"Armensk"} then
        set language to "hy"
    else if theItem = {"Aserbajdsjansk"} then
        set language to "az"
    else if theItem = {"Baskisk"} then
        set language to "eu"
    else if theItem = {"Bengali"} then
        set language to "bn"
    else if theItem = {"Bosnisk"} then
        set language to "bs"
    else if theItem = {"Bulgarsk"} then
        set language to "bg"
    else if theItem = {"Burmesisk"} then
        set language to "my"
    else if theItem = {"Cebuano"} then
        set language to "ceb"
    else if theItem = {"Chichewa"} then
        set language to "ny"
    else if theItem = {"Dansk"} then
        set language to "da"
    else if theItem = {"Engelsk"} then
        set language to "en"
    else if theItem = {"Esperanto"} then
        set language to "eo"
    else if theItem = {"Estisk"} then
        set language to "et"
    else if theItem = {"Finsk"} then
        set language to "fi"
    else if theItem = {"Fransk"} then
        set language to "fr"
    else if theItem = {"Frisisk"} then
        set language to "fy"
    else if theItem = {"Galicisk"} then
        set language to "gl"
    else if theItem = {"Georgisk"} then
        set language to "ka"
    else if theItem = {"Græsk"} then
        set language to "el"
    else if theItem = {"Haitisk kreolsk"} then
        set language to "ht"
    else if theItem = {"Hausa"} then
        set language to "ha"
    else if theItem = {"Hawaiiansk"} then
        set language to "haw"
    else if theItem = {"Hebraisk"} then
        set language to "iw"
    else if theItem = {"Hindi"} then
        set language to "hi"
    else if theItem = {"Hmong"} then
        set language to "hmn"
    else if theItem = {"Hollandsk"} then
        set language to "nl"
    else if theItem = {"Hviderussisk"} then
        set language to "be"
    else if theItem = {"Igbo"} then
        set language to "ig"
    else if theItem = {"Indonesisk"} then
        set language to "id"
    else if theItem = {"Irsk"} then
        set language to "ga"
    else if theItem = {"Islandsk"} then
        set language to "is"
    else if theItem = {"Italiensk"} then
        set language to "it"
    else if theItem = {"Japansk"} then
        set language to "ja"
    else if theItem = {"Javanesisk"} then
        set language to "jw"
    else if theItem = {"Jiddisch"} then
        set language to "yi"
    else if theItem = {"Kannada"} then
        set language to "kn"
    else if theItem = {"Kasakhisk"} then
        set language to "kk"
    else if theItem = {"Katalansk"} then
        set language to "ca"
    else if theItem = {"Khmer"} then
        set language to "km"
    else if theItem = {"Kinesisk (forenklet)"} then
        set language to "zh-CN"
    else if theItem = {"Kinesisk (traditionelt)"} then
        set language to "zh-TW"
    else if theItem = {"Kinyarwanda"} then
        set language to "rw"
    else if theItem = {"Kirgisk"} then
        set language to "ky"
    else if theItem = {"Koreansk"} then
        set language to "ko"
    else if theItem = {"Korsikansk"} then
        set language to "co"
    else if theItem = {"Kroatisk"} then
        set language to "hr"
    else if theItem = {"Kurdisk"} then
        set language to "ku"
    else if theItem = {"Laotisk"} then
        set language to "lo"
    else if theItem = {"Latin"} then
        set language to "la"
    else if theItem = {"Lettisk"} then
        set language to "lv"
    else if theItem = {"Litauisk"} then
        set language to "lt"
    else if theItem = {"Luxembourgsk"} then
        set language to "lb"
    else if theItem = {"Malagassisk"} then
        set language to "mg"
    else if theItem = {"Malayalam"} then
        set language to "ml"
    else if theItem = {"Maltesisk"} then
        set language to "mt"
    else if theItem = {"Maori"} then
        set language to "mi"
    else if theItem = {"Marathi"} then
        set language to "mr"
    else if theItem = {"Mongolsk"} then
        set language to "mn"
    else if theItem = {"Nepalesisk"} then
        set language to "ne"
    else if theItem = {"Norsk"} then
        set language to "no"
    else if theItem = {"Odia (Oriya)"} then
        set language to "or"
    else if theItem = {"Pashto"} then
        set language to "ps"
    else if theItem = {"Persisk"} then
        set language to "fa"
    else if theItem = {"Polsk"} then
        set language to "pl"
    else if theItem = {"Portugisisk"} then
        set language to "pt"
    else if theItem = {"Punjabi"} then
        set language to "pa"
    else if theItem = {"Rumænsk"} then
        set language to "ro"
    else if theItem = {"Russisk"} then
        set language to "ru"
    else if theItem = {"Samoansk"} then
        set language to "sm"
    else if theItem = {"Serbisk"} then
        set language to "sr"
    else if theItem = {"Sesotho"} then
        set language to "st"
    else if theItem = {"Shona"} then
        set language to "sn"
    else if theItem = {"Sindhi"} then
        set language to "sd"
    else if theItem = {"Sinhala"} then
        set language to "si"
    else if theItem = {"Skotsk gælisk"} then
        set language to "gd"
    else if theItem = {"Slovakisk"} then
        set language to "sk"
    else if theItem = {"Slovensk"} then
        set language to "sl"
    else if theItem = {"Somalisk"} then
        set language to "so"
    else if theItem = {"Spansk"} then
        set language to "es"
    else if theItem = {"Sundanesisk"} then
        set language to "su"
    else if theItem = {"Svensk"} then
        set language to "sv"
    else if theItem = {"Swahili"} then
        set language to "sw"
    else if theItem = {"Tadsjikisk"} then
        set language to "tg"
    else if theItem = {"Tagalog"} then
        set language to "tl"
    else if theItem = {"Tamil"} then
        set language to "ta"
    else if theItem = {"Tatarisk"} then
        set language to "tt"
    else if theItem = {"Telugu"} then
        set language to "te"
    else if theItem = {"Thailandsk"} then
        set language to "th"
    else if theItem = {"Tjekkisk"} then
        set language to "cs"
    else if theItem = {"Turkmensk"} then
        set language to "tk"
    else if theItem = {"Tyrkisk"} then
        set language to "tr"
    else if theItem = {"Tysk"} then
        set language to "de"
    else if theItem = {"Uighursk"} then
        set language to "ug"
    else if theItem = {"Ukrainsk"} then
        set language to "uk"
    else if theItem = {"Ungarsk"} then
        set language to "hu"
    else if theItem = {"Urdu"} then
        set language to "ur"
    else if theItem = {"Usbekisk"} then
        set language to "uz"
    else if theItem = {"Vietnamesisk"} then
        set language to "vi"
    else if theItem = {"Walisisk"} then
        set language to "cy"
    else if theItem = {"Xhosa"} then
        set language to "xh"
    else if theItem = {"Yoruba"} then
        set language to "yo"
    else if theItem = {"Zulu"} then
        set language to "zu"
    end if
    
    open location "https://translate.google.com/#view=home&op=translate&sl=auto&tl=" & language & "&text=" & input
    
    
end run

解决方法

这不是您问题的直接答案。但是,您实际上可能会选择完全不同的方法。基本上,这种方法将把您复制的文本复制到剪贴板,然后为您翻译……以您选择的语言。然后,它将在弹出的对话框中为您显示翻译的文本,还将翻译内容复制到剪贴板。

以下动画演示了该过程。我将使用在“服务偏好设置”中创建的键盘快捷键来触发翻译脚本。

enter image description here

入门:

  1. 需要在系统上安装Homebrew。如果不是 安装后,您可以找到有关其的逐步说明 安装…在这里-> Install Homebrew
  2. 成功安装Homebrew后,您需要安装 translate-shell公式。将此粘贴到macOS终端或 Linux Shell提示符。 brew install translate-shell
  3. 成功安装自制软件translate-shell之后 公式中,trans命令具有大量选项。将此粘贴到 macOS Terminal Shell提示符man trans了解其功能。
  4. 现在您可以将“翻译”代码合并到Automator中 快速操作,然后在服务中为其分配键盘快捷键 首选项。您可以确切地了解如何使用trans shell AppleScript的脚本命令在这里---> Run Translate Shell from an AppleScript

这是我在脚本编辑器和Automator中使用的代码

copy (the clipboard) to theText

delay 0.1

set detectedLanguage to (do shell script "export PATH=\"/usr/local/bin:$PATH\";/usr/local/bin/trans -identify -no-ansi " & quoted form of theText & " | " & "grep Name " & "| " & "cut -c 23-")

set theList to {"Afrikaans","Albansk","Amharisk","Arabisk","Armensk","Aserbajdsjansk","Baskisk","Bengali","Bosnisk","Bulgarsk","Burmesisk","Cebuano","Chichewa","Dansk","Engelsk","Esperanto","Estisk","Finsk","Fransk","Frisisk","Galicisk","Georgisk","Græsk","Gujarati","Haitisk kreolsk","Hausa","Hawaiiansk","Hebraisk","Hindi","Hmong","Hollandsk","Hviderussisk","Igbo","Indonesisk","Irsk","Islandsk","Italiensk","Japansk","Javanesisk","Jiddisch","Kannada","Kasakhisk","Katalansk","Khmer","Kinesisk (forenklet)","Kinesisk (traditionelt)","Kinyarwanda","Kirgisk","Koreansk","Korsikansk","Kroatisk","Kurdisk","Laotisk","Latin","Lettisk","Litauisk","Luxembourgsk","Makedonsk","Malagassisk","Malajisk","Malayalam","Maltesisk","Maori","Marathi","Mongolsk","Nepalesisk","Norsk","Odia (Oriya)","Pashto","Persisk","Polsk","Portugisisk","Punjabi","Rumænsk","Russisk","Samoansk","Serbisk","Sesotho","Shona","Sindhi","Sinhala","Skotsk gælisk","Slovakisk","Slovensk","Somalisk","Spansk","Sundanesisk","Svensk","Swahili","Tadsjikisk","Tagalog","Tamil","Tatarisk","Telugu","Thailandsk","Tjekkisk","Turkmensk","Tyrkisk","Tysk","Uighursk","Ukrainsk","Ungarsk","Urdu","Usbekisk","Vietnamesisk","Walisisk","Xhosa","Yoruba","Zulu"}

activate
set theItem to choose from list theList with prompt "What Language Do You Want To Translate To?" default items {"Engelsk"}

if theItem = {"Afrikaans"} then
    set theLanguage to "af"
else if theItem = {"Albansk"} then
    set theLanguage to "sq"
else if theItem = {"Amharisk"} then
    set theLanguage to "am"
else if theItem = {"Arabisk"} then
    set theLanguage to "ar"
else if theItem = {"Armensk"} then
    set theLanguage to "hy"
else if theItem = {"Aserbajdsjansk"} then
    set theLanguage to "az"
else if theItem = {"Baskisk"} then
    set theLanguage to "eu"
else if theItem = {"Bengali"} then
    set theLanguage to "bn"
else if theItem = {"Bosnisk"} then
    set theLanguage to "bs"
else if theItem = {"Bulgarsk"} then
    set theLanguage to "bg"
else if theItem = {"Burmesisk"} then
    set theLanguage to "my"
else if theItem = {"Cebuano"} then
    set theLanguage to "ceb"
else if theItem = {"Chichewa"} then
    set theLanguage to "ny"
else if theItem = {"Dansk"} then
    set theLanguage to "da"
else if theItem = {"Engelsk"} then
    set theLanguage to "en"
else if theItem = {"Esperanto"} then
    set theLanguage to "eo"
else if theItem = {"Estisk"} then
    set theLanguage to "et"
else if theItem = {"Finsk"} then
    set theLanguage to "fi"
else if theItem = {"Fransk"} then
    set theLanguage to "fr"
else if theItem = {"Frisisk"} then
    set theLanguage to "fy"
else if theItem = {"Galicisk"} then
    set theLanguage to "gl"
else if theItem = {"Georgisk"} then
    set theLanguage to "ka"
else if theItem = {"Græsk"} then
    set theLanguage to "el"
else if theItem = {"Haitisk kreolsk"} then
    set theLanguage to "ht"
else if theItem = {"Hausa"} then
    set theLanguage to "ha"
else if theItem = {"Hawaiiansk"} then
    set theLanguage to "haw"
else if theItem = {"Hebraisk"} then
    set theLanguage to "iw"
else if theItem = {"Hindi"} then
    set theLanguage to "hi"
else if theItem = {"Hmong"} then
    set theLanguage to "hmn"
else if theItem = {"Hollandsk"} then
    set theLanguage to "nl"
else if theItem = {"Hviderussisk"} then
    set theLanguage to "be"
else if theItem = {"Igbo"} then
    set theLanguage to "ig"
else if theItem = {"Indonesisk"} then
    set theLanguage to "id"
else if theItem = {"Irsk"} then
    set theLanguage to "ga"
else if theItem = {"Islandsk"} then
    set theLanguage to "is"
else if theItem = {"Italiensk"} then
    set theLanguage to "it"
else if theItem = {"Japansk"} then
    set theLanguage to "ja"
else if theItem = {"Javanesisk"} then
    set theLanguage to "jw"
else if theItem = {"Jiddisch"} then
    set theLanguage to "yi"
else if theItem = {"Kannada"} then
    set theLanguage to "kn"
else if theItem = {"Kasakhisk"} then
    set theLanguage to "kk"
else if theItem = {"Katalansk"} then
    set theLanguage to "ca"
else if theItem = {"Khmer"} then
    set theLanguage to "km"
else if theItem = {"Kinesisk (forenklet)"} then
    set theLanguage to "zh-CN"
else if theItem = {"Kinesisk (traditionelt)"} then
    set theLanguage to "zh-TW"
else if theItem = {"Kinyarwanda"} then
    set theLanguage to "rw"
else if theItem = {"Kirgisk"} then
    set theLanguage to "ky"
else if theItem = {"Koreansk"} then
    set theLanguage to "ko"
else if theItem = {"Korsikansk"} then
    set theLanguage to "co"
else if theItem = {"Kroatisk"} then
    set theLanguage to "hr"
else if theItem = {"Kurdisk"} then
    set theLanguage to "ku"
else if theItem = {"Laotisk"} then
    set theLanguage to "lo"
else if theItem = {"Latin"} then
    set theLanguage to "la"
else if theItem = {"Lettisk"} then
    set theLanguage to "lv"
else if theItem = {"Litauisk"} then
    set theLanguage to "lt"
else if theItem = {"Luxembourgsk"} then
    set theLanguage to "lb"
else if theItem = {"Malagassisk"} then
    set theLanguage to "mg"
else if theItem = {"Malayalam"} then
    set theLanguage to "ml"
else if theItem = {"Maltesisk"} then
    set theLanguage to "mt"
else if theItem = {"Maori"} then
    set theLanguage to "mi"
else if theItem = {"Marathi"} then
    set theLanguage to "mr"
else if theItem = {"Mongolsk"} then
    set theLanguage to "mn"
else if theItem = {"Nepalesisk"} then
    set theLanguage to "ne"
else if theItem = {"Norsk"} then
    set theLanguage to "no"
else if theItem = {"Odia (Oriya)"} then
    set theLanguage to "or"
else if theItem = {"Pashto"} then
    set theLanguage to "ps"
else if theItem = {"Persisk"} then
    set theLanguage to "fa"
else if theItem = {"Polsk"} then
    set theLanguage to "pl"
else if theItem = {"Portugisisk"} then
    set theLanguage to "pt"
else if theItem = {"Punjabi"} then
    set theLanguage to "pa"
else if theItem = {"Rumænsk"} then
    set theLanguage to "ro"
else if theItem = {"Russisk"} then
    set theLanguage to "ru"
else if theItem = {"Samoansk"} then
    set theLanguage to "sm"
else if theItem = {"Serbisk"} then
    set theLanguage to "sr"
else if theItem = {"Sesotho"} then
    set theLanguage to "st"
else if theItem = {"Shona"} then
    set theLanguage to "sn"
else if theItem = {"Sindhi"} then
    set theLanguage to "sd"
else if theItem = {"Sinhala"} then
    set theLanguage to "si"
else if theItem = {"Skotsk gælisk"} then
    set theLanguage to "gd"
else if theItem = {"Slovakisk"} then
    set theLanguage to "sk"
else if theItem = {"Slovensk"} then
    set theLanguage to "sl"
else if theItem = {"Somalisk"} then
    set theLanguage to "so"
else if theItem = {"Spansk"} then
    set theLanguage to "es"
else if theItem = {"Sundanesisk"} then
    set theLanguage to "su"
else if theItem = {"Svensk"} then
    set theLanguage to "sv"
else if theItem = {"Swahili"} then
    set theLanguage to "sw"
else if theItem = {"Tadsjikisk"} then
    set theLanguage to "tg"
else if theItem = {"Tagalog"} then
    set theLanguage to "tl"
else if theItem = {"Tamil"} then
    set theLanguage to "ta"
else if theItem = {"Tatarisk"} then
    set theLanguage to "tt"
else if theItem = {"Telugu"} then
    set theLanguage to "te"
else if theItem = {"Thailandsk"} then
    set theLanguage to "th"
else if theItem = {"Tjekkisk"} then
    set theLanguage to "cs"
else if theItem = {"Turkmensk"} then
    set theLanguage to "tk"
else if theItem = {"Tyrkisk"} then
    set theLanguage to "tr"
else if theItem = {"Tysk"} then
    set theLanguage to "de"
else if theItem = {"Uighursk"} then
    set theLanguage to "ug"
else if theItem = {"Ukrainsk"} then
    set theLanguage to "uk"
else if theItem = {"Ungarsk"} then
    set theLanguage to "hu"
else if theItem = {"Urdu"} then
    set theLanguage to "ur"
else if theItem = {"Usbekisk"} then
    set theLanguage to "uz"
else if theItem = {"Vietnamesisk"} then
    set theLanguage to "vi"
else if theItem = {"Walisisk"} then
    set theLanguage to "cy"
else if theItem = {"Xhosa"} then
    set theLanguage to "xh"
else if theItem = {"Yoruba"} then
    set theLanguage to "yo"
else if theItem = {"Zulu"} then
    set theLanguage to "zu"
end if

set theTranslation to (do shell script "export PATH=\"/usr/local/bin:$PATH\";/usr/local/bin/trans -b :" & theLanguage & " " & quoted form of theText)

set the clipboard to theTranslation

activate
display dialog "The Translation Has Been Copied To The Clipboard For Your Convenience" & linefeed & linefeed & theTranslation with title "Your Translation Results From " & detectedLanguage & " To " & theItem buttons {"OK"}

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...