Python
google
python3

ペースト不要のリアルタイム翻訳アプリケーションを作った。in Python

TL;DR

こんなやつ

コピーすると、PythonアプリケーションがGoogle翻訳して即コンソールに表示してくれる。

動作環境

macOS High Sierra
Python 3.6.0

Usage

usage: python test.py [option] [-s src_language] [-d dest_language]

ClipBoardTransrate

optional arguments:
  -h, --help            show this help message and exit
  -v VERSION, --version VERSION
                        Show version
  -s SRC, --src SRC     Source language. default English.
  -d DEST, --dest DEST  Source language. default Japanese.
  -l, --list            Show supported language.

end

ソースコード

※厳密な文字列のチェックは行なっていないので、使用時にはトークンやアクセスキーをコピーしないように注意してください。

test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyperclip
from googletrans import Translator
import argparse as ap
import time
import re

tr = None

# テキストを翻訳
def trans_text(text, src, dest):
    check_result, message = check_text(text)
    if not check_result:
        print(message)
        return
    transtext = tr.translate(text, src=src, dest=dest).text
    print("============================")
    print("%s => %s " % (text, transtext))


# テキストに不正な文字列が含まれていないかチェック
def check_text(text):
    # テキストにIPaddressが含まれていないかチェック
    if re.search("(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}" +
                 "([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])", text):
        return False, "Invalid string included."
    # 他にもテキストチェックはするべき
    # トークンとか
    return True, "OK"


if __name__ == '__main__':
    parser = ap.ArgumentParser(
                prog='ClipBoardTransrate',
                usage='python test.py [option] [-s src_language] [-d dest_language]',
                description='ClipBoardTransrate',
                epilog='end',
                add_help=True,
            )

    parser.add_argument('-v', '--version', help="Show version")
    parser.add_argument('-s', '--src', default="en",
                        help="Source language. default English.")
    parser.add_argument('-d', '--dest', default="ja",
                        help="Source language. default Japanese.")
    parser.add_argument('-l', '--list', default=False,
                        action="store_true", help="Show supported language.")

    args = parser.parse_args()


    print("===============Start===============")
    try:
        tr = Translator()
        clip_text = pyperclip.paste()
        src_lang = args.src
        dest_lang = args.dest
        print(src_lang)
        print(dest_lang)
        while True:
            if clip_text != pyperclip.paste():
                clip_text = pyperclip.paste()
                trans_text(clip_text, src_lang, dest_lang)
        time.sleep(1)
    except KeyboardInterrupt:
        print("===============End===============")

参考

pythonでクリップボードの監視をしてチェックをする
Python3 正規表現を用いてIPアドレスを判定したい