多言語への翻訳は大変な作業ですが、近年は機械翻訳の精度も上がってきました。
ふと思いついて .po
形式の翻訳ファイルをGoogle翻訳を通して自動で入力するスクリプト を作ったのですが、サクッと書いた割に予想以上に便利で料金も思ったより安かったので記事にしました。また実際に自分が公開している日本語で書かれたSphinxの資料を、このスクリプトを使って英語に翻訳してみます。
追記: ライセンスについて
id:beatdjam さんのコメントが気になったので共有です。 自分もGoogle Translate APIのドキュメントを読み返してみますが、利用される方も確認してからご利用ください。
以前こういった事例もあったので、OSSで利用することを推奨して良いのか心配。ドキュメントだけなら平気なのかな https://anond.hatelabo.jp/20170225195916
作ったもの
.po
形式の翻訳ファイルをパースし好きな言語にGoogle Translate APIを用いて翻訳するスクリプトを用意しました。
実行には google-cloud-translate とGCP service accountが必要です。
$ pip install --upgrade google-cloud-translate $ export GOOGLE_SERVICE_ACCOUNT_JSON=/path/to/service-account-credential.json $ python translate_po.py --help usage: translate_po.py [-h] [--lang LANG] [--currency CURRENCY] filepath positional arguments: filepath optional arguments: -h, --help show this help message and exit --lang LANG target language (default: "ja") --currency CURRENCY dollar per your currency. (default currency is yen: 111.90)
現状はとりあえずファイルの上書きオプションなどは用意せず、stdoutに書き出すようにしています。 Google Translate APIは、100万文字あたり20ドルかかります。 本一冊とかになると数百円かそれ以上かかりそうですが、手元の文章を翻訳したいなどの用途なら数十円に収まることがほとんどです。 ちなみにマルチバイト文字でも1文字は1文字としてカウントしてくれるようなので、日本語から英語の翻訳などは比較的お得です。 Google Translate APIに投げたテキストの文字数からかかった金額も算出し表示するようにしています。
$ python translate_po.py ./po/index.po 1>./po/index_ja.po Cost: 2.1417659999999996 yen
また翻訳結果はキャッシュしていて、実行したディレクトリの直下に json ファイルを書き出します。 なので2回目の実行は、キャッシュが効きお金を節約できます。
$ python translate_po.py ./po/index.po 1>./po/index_ja.po Cost: 0 yen
実際に翻訳してみる
Webアプリケーションフレームワークの作り方 in Python — c-bata.link (Githubはこちら) はSphinxで書かれた日本語の資料です。 今回はこちらを英語に翻訳していきます。Sphinxのドキュメントの国際化の方法は次のページに非常によくまとまっています。
まず sphinx-intl
をインストールします。
$ pip install sphinx-intl $ vim source/conf.py # add following settings # locale_dirs = ['locale/'] # gettext_compact = False $ make gettext $ ls build/locale/ index.pot kobin.pot middleware.pot request.pot response.pot routing.pot server.pot sphinx.pot template.pot wsgi.pot
potファイルができました。今回は日本語から英語に翻訳するので、次のようにします。
$ sphinx-intl update -p build/locale -l ja Create: source/locale/ja/LC_MESSAGES/kobin.po Create: source/locale/ja/LC_MESSAGES/template.po Create: source/locale/ja/LC_MESSAGES/middleware.po Create: source/locale/ja/LC_MESSAGES/sphinx.po Create: source/locale/ja/LC_MESSAGES/request.po Create: source/locale/ja/LC_MESSAGES/routing.po Create: source/locale/ja/LC_MESSAGES/wsgi.po Create: source/locale/ja/LC_MESSAGES/response.po Create: source/locale/ja/LC_MESSAGES/index.po Create: source/locale/ja/LC_MESSAGES/server.po
poファイルが出来上がったら変換をかけます。 このスクリプトは今のところ上書き用のオプションを用意していないので、一度stdoutをファイルに書き出して置き換える必要があります。 いくつかファイルがあるので変換用のスクリプトを用意しました。
$ cat > translate.sh <<EOF #!/bin/bash function translate { for f in ./ja/LC_MESSAGES/*.po; do python translate_po.py --lang en $f 1>${f%.po}_en.po mv ${f%.po}_en.po $f; done; } translate EOF $ chmod +x ./translate.sh $ ./translate.sh Cost: 3.6904620000000006 yen Cost: 0.024617999999999998 yen Cost: 1.60017 yen Cost: 4.728894 yen Cost: 3.8784539999999996 yen Cost: 5.8188 yen Cost: 1.087668 yen Cost: 1.4009880000000001 yen Cost: 7.00494 yen
トータル30円くらいかかりました。翻訳精度を考えるとすごくお得に感じます。 最後はこれをbuildしてみましょう。
$ make -e SPHINXOPTS="-D language='ja'" html $ open build/html/index.html
結果は次のような感じです。
reSTのリンクが壊れたり、いくつか変な文字が混ざっていたりはしますが予想以上にそれっぽくなりました。

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)
- 作者: Michal Jaworski,TarekZiade,稲田直哉,芝田将,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: ドワンゴ
- 発売日: 2018/02/26
- メディア: Kindle版
- この商品を含むブログを見る