Posted at

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

More than 1 year has passed since last update.


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アドレスを判定したい