やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

PythonコードをGoogle翻訳で国際化した

Babelでpyファイルからpot,po,moファイルを作成する。Google翻訳APIで翻訳したテキストを使う。

成果物

GitHubPython.i18n.Babel.Translate.Google.201709161734

前回

今回

msgidを原文として翻訳する。

ついにpypot翻訳pomoの自動化ができた。スクリプトを叩くだけで.pyファイル一式の特定部分が翻訳される。

  1. pythonソースコード(./src/配下の.py)に_('翻訳したいテキスト')を記入する
  2. ./res/i18n/script/run.pyを実行する
  3. .moファイルが作成される
  4. ./src/main.pyを実行する
  5. 翻訳されていることを確認する

実行結果

$ python run.py 
HTTP Code: 200
{'sentences': [{'trans': 'Hello World !!', 'orig': 'Hello World !!', 'backend': 0}], 'src': 'en', 'confidence': 0.7099877, 'ld_result': {'srclangs': ['en'], 'srclangs_confidences': [0.7099877], 'extended_srclangs': ['en']}}
Hello World !!
HTTP Code: 200
{'sentences': [{'trans': 'Good Luck !', 'orig': 'Good Luck !', 'backend': 0}], 'src': 'en', 'confidence': 1, 'ld_result': {'srclangs': ['en'], 'srclangs_confidences': [1], 'extended_srclangs': ['en']}}
Good Luck !
HTTP Code: 200
{'sentences': [{'trans': 'Hallo Welt !!', 'orig': 'Hello World !!', 'backend': 1}], 'src': 'en', 'confidence': 0.7099877, 'ld_result': {'srclangs': ['en'], 'srclangs_confidences': [0.7099877], 'extended_srclangs': ['en']}}
Hallo Welt !!
HTTP Code: 200
{'sentences': [{'trans': 'Viel Glück !', 'orig': 'Good Luck !', 'backend': 1}], 'src': 'en', 'confidence': 1, 'ld_result': {'srclangs': ['en'], 'srclangs_confidences': [1], 'extended_srclangs': ['en']}}
Viel Glück !
HTTP Code: 200
{'sentences': [{'trans': 'こんにちは世界 !!', 'orig': 'Hello World !!', 'backend': 1}, {'translit': "Kon'nichiwa sekai! !"}], 'src': 'en', 'confidence': 0.7099877, 'ld_result': {'srclangs': ['en'], 'srclangs_confidences': [0.7099877], 'extended_srclangs': ['en']}}
こんにちは世界 !!
HTTP Code: 200
{'sentences': [{'trans': 'がんばろう !', 'orig': 'Good Luck !', 'backend': 1}, {'translit': 'Ganbarou!'}], 'src': 'en', 'confidence': 1, 'ld_result': {'srclangs': ['en'], 'srclangs_confidences': [1], 'extended_srclangs': ['en']}}
がんばろう !

課題

  • pot, po, moファイルの更新を実装する(現在は新規作成のみ)
    • 新規追加、変更、の箇所は新たに翻訳処理を行う
  • 翻訳リクエスト回数を減らす工夫をする
    • 原文言語と翻訳言語が同一のときは翻訳しないようにする(原文をそのままmessage.stringに代入する)
    • 1回のリクエストに10件分(1000文字分)の文章を入力するなど
  • 翻訳リクエスト部分の抽象化
  • 異なる翻訳APIの実装

必要性があるか微妙な課題は以下。

所感

これはすごいんじゃないの?