AlfredワークフローでPDF等の改行が含まれるテキストをサクッと正確に翻訳

Summary

前提条件

  • Alfred Powerpackを導入している(=Alfredのワークフロー機能が利用できる)

PDFからコピペした文章の翻訳を、「選択したテキストが翻訳される」という体験で実現したい

「PDFをコピペしたい時に改行が含まれて翻訳結果が変になる問題」って何?というイメージがこちらです。文章途中で改行が混ざった結果、翻訳結果が変になる、という事象です。同じ経験をされた方も多いのではないかと思います。

PDF 翻訳 改行 等でググると様々な解決策がHITしますが、普段ChromeのGoogle翻訳拡張に慣れている筆者としては、やはり「ドラッグして選択したテキストが翻訳される」という体験をPDF(等のE-Books)翻訳でも再現したいな と考え、「選択したテキストに対して何かをする事が出来ると言えば AlfredワークフローのHotkeyトリガー だ」と雑に思いついて作ってみたワークフローがこちらです。

https://github.com/goldeneggg/alfred-workflow-selected-text-translator

このワークフローを使うことで

  1. PDF等のE-Booksのテキストをドラッグ&選択し、
  2. 設定したHotkey(例: Option + Shift + Command + T など)を押せば、
  3. ブラウザで 改行が混ざっていない文章の翻訳結果が Google翻訳で表示される

ようになります。

インストール手順は 上記reposのREADME を参照ください。

ワークフローの構成紹介

ワークフロー全体のイメージはこんな感じです。

まず AlfredワークフローのHotkeyトリガー を下記のように設定します。ArgumentSelection in macOS にすることで、ドラッグして選択しているテキストの内容を後続のアクションに渡す事が出来ます。

次にHotkeyトリガーから渡されてきたテキストを Write File Output に渡してtemporaryなテキストファイルに出力しておきます。

そしてRun Script Action で、このファイルをcatした結果を tr コマンドをかまして改行除去します。Run Script Actionから後続アクションに渡される内容は「スクリプトで標準出力に出力した内容」になりますので、特にAlfredワークフローだからと言って何かを意識せず、普段bashでスクリプトを書く時と同様に書けばOKです。

次にConditional Utility でGoogle翻訳かDeepLを使うか?で分岐します。この機能は完全におまけで用意したもので、ワークフローの環境変数 USE_DEEPL に 1 をセットする事でDeepLを使います(デフォルトは 0 = Google翻訳)

最後に、渡されてきた内容 = {query} というプレースホルダー をGoogle翻訳のURLにセットし、そのURLをOpen URL Action のURLにセットすれば、普段使いのブラウザでGoogle翻訳の結果が開きます。

DeepLの場合の設定はこうなっています。