ChatGPTのAPIキーの申請(無料枠は$20):
https://platform.openai.com/account/api-keys

ChatGPTの素晴らしい言語能力をうまく活用できたら、印刷物の多言語展開に期待できると思います。

使い方: InDesign上の翻訳したいtextFrameを選択、翻訳、訳文を修正(必要に応じて)、InDesignに戻す 。
注意:書体、textFrame内部の段落又は文字の個別処理は全て無視される。 

バッチ処理の考え方:
1、全てのtextFrame内容とidを抽出、紐付ける(例:ExcelのA列にid、B列を内容)
2、ChatGPTに投げる
3、翻訳後の文書をチェック
4、InDesignに確認済みの訳文を戻し、書体・レイアウト等を調整

import wx
from appscript import *
indd = app("Adobe InDesign 2023")

import openai
openai.api_key = "**********" # ここに自分のAPIを


def openai_translate(lan, contents):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": f"下記の文章を{lan}に翻訳してください"},
            {"role": "user", "content": contents},
        ],
    )
    return response.choices[0]["message"]["content"]


class MyFrame (wx.Frame):

    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=-1, title="ChatInDesign",
                          size=wx.Size(300, 400))

        bSizer1 = wx.BoxSizer(wx.VERTICAL)
        #
        languageChoices = ["英語", "中国語", "韓国語"]
        self.language = wx.RadioBox(self, -1, u"Translate to", wx.DefaultPosition,
                                    wx.DefaultSize, languageChoices, 1, wx.RA_SPECIFY_ROWS)
        self.language.SetSelection(0)

        bSizer2 = wx.BoxSizer(wx.HORIZONTAL)
        self.m_button1 = wx.Button(self, -1, "翻訳")
        bSizer2.Add(self.m_button1, 0, wx.ALL, 5)
        self.m_button2 = wx.Button(self, -1, "InDesignに戻す")
        bSizer2.Add(self.m_button2, 0, wx.ALL, 5)

        self.tc = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE)
        #
        bSizer1.Add(self.language, 0, wx.ALL, 5)
        bSizer1.Add(bSizer2, 0, wx.EXPAND, 5)
        bSizer1.Add(self.tc, 1, wx.ALL | wx.EXPAND, 5)

        self.SetSizer(bSizer1)
        self.Layout()

        self.Centre(wx.BOTH)

        self.m_button1.Bind(wx.EVT_BUTTON, self.translate)
        self.m_button2.Bind(wx.EVT_BUTTON, self.return_to_indesign)

    def translate(self, event):
        if len(indd.selection()) == 0:
            wx.MessageBox("textFrameを選択してください", "")
            return
        sel = indd.selection()[0]
        if sel.class_() != k.text_frame:
            wx.MessageBox("textFrameを選択してください", "")
            return
        lan = self.language.GetStringSelection()
        contents = sel.contents()  # contents of InDesign text_frame
        r = openai_translate(lan, contents)  # translated text
        self.tc.SetValue(r)

    def return_to_indesign(self, event):
        indd.selection()[0].contents.set(self.tc.GetValue())


if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame(None)
    frame.Show()
    app.MainLoop()