2020/06/25
FastAPIベースのアプリを多言語化対応しました
概要
FastAPIベースのWebアプリ(Rest API)をpython-i18nを使って多言語化しました。
実装内容
install
% poetry add python-i18n
config
main.py
import i18n
i18n.load_path.append("path/to/locales_dir")
i18n.set("file_format", "json")
i18n.set("locale", "ja")
i18n.set("fallback", "ja")
i18n.set("skip_locale_root_data", True)
リソースの定義
locales
ディレクトリを作って、その中に日本語と英語の定義ファイルを作成します。locales/message.ja.json
locales/message.en.json
- このように定義すると
"message"
という namespace でjsonファイル内に定義されたものが呼び出せるようになります。 "skip_locale_root_data"
をTrue
に設定しているので、messsage.en.json の top の property が “en” でなくてもよくなります。
message.ja.json
{
"complete": "完了しました"
}
message.en.json
{
"complete": "completed successfully"
}
api側での利用
- リソースファイルに定義されたものを呼び出す際は、
i18n.t("{namespace}.{key}")
で呼び出すことができます。- 先ほど、
"message"
というnamespace
の中に"complete"
という key でメッセージを登録していたので、"message.complete"
で呼び出すことができます。
- 先ほど、
import i18n
from fastapi import APIRouter, Header
router = APIRouter()
@router.get("/hoge")
def hoge(accept_language: str = Header("ja")):
# 実際には fastapi の Depends を使って、正しいロケールを取得するようにします
message = i18n.t("message.complete", locale=accept_language) # "完了しました" or "completed successfully"
return {"message": message}
以上です。
関連する記事
[Python]ハイフンなし電話番号からハイフン付きに復元
Pythonでハイフンなしの日本の電話番号をハイフン付きのものに変換する
[Python]BeautifulSoup4でhtmlの解析
BeautifulSoup4というPythonのライブラリを使って、特定のURLのコンテンツを取得し、タイトルや説明文を取得できるようにしました。
[Python]銀行コードと支店コードの取扱
Pythonで銀行コード、支店コードデータを取り扱う便利なライブラリzengin-codeを導入しました。
Sendgridを使ってメールの受信を行う
Inbound Email Parse Webhookという機能を利用してメールを受信したらWebhookを呼び出すようにしました