Pythonで多言語対応してみたいなーと思っていました。
思っていましたが、実際になかなか使うタイミングがない・・・。
今回自作ゲームでユーザー数の増加がみられ、かつ海外からのアクセスも複数確認できたので追加することにしました。
目的
名将と呼ばれた者達+のアクティブ人口を増やすために、少しアクセスがあった中国語と英語に対応する。
バージョン情報
flask-babel==2.0.0
作業
5が一番つらい
1. 翻訳ファイルテンプレート作成
pybabel extract -F babel.cfg -k lazy_gettext -o translations/base.pot .2. 各言語の翻訳ファイルを定義
pybabel init -i translations/base.pot -d translations -l ja
pybabel init -i translations/base.pot -d translations -l en
pybabel init -i translations/base.pot -d translations -l zh
pybabel init -i translations/base.pot -d translations -l ko
# 日本語, 英語, 中国語, 韓国語に対応3. テンプレートを翻訳ファイルに定義
pybabel update -i translations/base.pot -d translations4. view, functions, templatesのファイルを書き換える
・view, functions
from flask_babel import gettext
gettext(”)・templates
{{ gettext(”) }}5. 各言語の.poファイルを書き換える
gettext(‘文字列’)内の文字列がリストアップされて、自分で翻訳文を書く。自動翻訳ではない。つらい。6. .poファイルをバイナリ.moファイルに書き換える
pybabel compile -d translations
Flaskの構成
Flaskの詳細な構成については、VPSでつくるPythonでのWebアプリ運用環境(連載記事)をご覧ください。基本的な設計思考は同じです。
下記をapp.pyのreturn app前に定義してください。
# 多言語対応 babel = Babel(app) @babel.localeselector def get_locale(): return request.accept_languages.best_match(['ja', 'ja_JP', 'en', 'zh', 'ko'])
※ja_JPがないとバグが起こる可能性もあるようなので追加しています
※ko(韓国語)は記載例。他の言語も同様に追加可能です。
どれだけ変わるの?
メイン画面で比較してみました。
日本語
英語
中国語
注意することは何?
コードの書き方です。
コードの書き方如何で作業量がかなり変動します…。
Flask-Babelの課題点もわかったし、次はもっと早くできるわね🥳
注意点
・単語を統一する
・適切な文字区切りを行う
個別にまとめて{{練習: 特訓}}ではなく、{{練習}}: {{特訓}}のように、単語で区切れるものは区切る
・わかる言語を使う
中国語の違い(匹配度、练习赛の違いとは)— R@Meisyo (@Rei_Farms) December 13, 2021
さいごに
今回はFlask-Babelで多言語対応を行いました。
目的はあくまでアクティブ人数の増加、それを目指すためのアクセス数の増加です。
そちらの続報については1~2か月後に記事を書きます。