流用元のソースコードのコメントがドイツ語でさすがに分からん、ということで、ドイツ語から英語に翻訳するスクリプトを作成しました。Google Translateを使用しています。
ポイントは、コメントをリストで抽出後、一度すべて〈translate〉という文字に置き換え、翻訳後上から順に戻すというやり方にしている点です。(文字の位置にしようかとも思いましたが、それだと置き換えるたびにズレてしまうので。)
英語コメントを日本語にして読むような用途にも使えると思います!
translate.py
# -*- coding: utf-8 -*-
# Google Translateはエラーが出るため以下バージョン使用
# python -m pip install googletrans==4.0.0rc1
from chardet import detect
import re
from googletrans import Translator
import glob
def translate(filename):
# エンコードを検出してファイルを開く
with open(filename, "rb") as f:
b = f.read()
enc = detect(b)
data = b.decode(enc["encoding"], "ignore") # デコードエラーは無視
# 正規表現でコメントを抽出
# 置換用に一度別の文字列に置き換え
pattern = "/\*[\s\S]*?\*/|//.*"
key = "<translate>"
comments = re.findall(pattern, data)
trans_data = re.sub(pattern, key, data)
# Google Translateで翻訳
translator = Translator()
trans = []
for c in comments:
trans.append(translator.translate(c, dest='en', src='de').text) # 翻訳元、翻訳先の言語を指定
print(".", end="")
print("")
# 翻訳結果で文字列を置換
# 改行コードを統一
for t in trans:
trans_data = trans_data.replace("<translate>", t, 1)
trans_data = trans_data.replace("\r", "")
# 元のファイルにUTF-8で書き戻す
with open(filename, "w", encoding="utf-8") as f:
f.write(trans_data)
if __name__ == '__main__':
file_list = glob.glob('folder/*.[ch]') # 翻訳対象のフォルダを指定
for file in file_list:
print(file, end="")
translate(file)