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()