0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C言語ソースのコメントを翻訳するPythonスクリプト

Last updated at Posted at 2022-11-04

流用元のソースコードのコメントがドイツ語でさすがに分からん、ということで、ドイツ語から英語に翻訳するスクリプトを作成しました。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)


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?