PythonのFlask-BabelでWebサイトを多言語化!初心者向け徹底ガイド
生徒
「先生、Pythonで簡単なWebサイトを作ってみたのですが、日本だけでなく世界中の人に見てもらうにはどうすればいいですか?」
先生
「それは素晴らしい目標ですね!Webサイトを多言語に対応させるには、Flask-Babelという拡張機能を使うのが一般的ですよ。」
生徒
「多言語化って、ページを何枚も英語用や日本語用に作るということですか?すごく大変そうです……。」
先生
「いいえ、そんなことはありません。Flask-Babelを使えば、一つの型紙に、その時の言葉を当てはめるだけで自動的に切り替えができるんです。さあ、一緒に設定方法を学んでいきましょう!」
1. Flask-Babelとは何かを理解しよう
多言語対応、つまり「国際化(i18n)」とは、Webサイトを閲覧しているユーザーの地域や言語に合わせて、表示される文字を自動で切り替える仕組みのことです。 Pythonの有名なWebフレームワークであるFlaskには、この国際化を助けてくれる「Flask-Babel(フラスク・バベル)」という強力な道具があります。
例えば、日本からアクセスした人には「こんにちは」と表示し、アメリカからアクセスした人には「Hello」と表示させることができます。 これを手動で、英語用のHTMLファイルと日本語用のHTMLファイルに分けて作成するのは非常に手間がかかります。 Flask-Babelを使えば、翻訳データを一箇所にまとめて管理し、プログラムが状況に応じて適切な言葉を選んでくれるようになります。
ここで言う「フレームワーク」とは、Webサイトを作るための便利な道具箱のようなものです。 そして「ライブラリ」や「拡張機能」は、その道具箱に後から追加できる便利なパーツのようなものだと考えてください。 Flask-Babelは、まさに多言語化という機能を後付けするためのパーツなのです。
2. 必要な準備とインストール方法
まずは、自分のパソコンでFlask-Babelを使える状態にしましょう。 プログラミング未経験の方は「コマンドプロンプト」や「ターミナル」という、真っ黒な画面に文字を打ち込むソフトを使うことに抵抗があるかもしれません。 しかし、基本的には決まった呪文をコピーして貼り付けるだけなので安心してください。
以下の命令をコマンド画面に打ち込んで実行します。これにより、多言語化に必要なツールがインターネットからあなたのパソコンにダウンロードされます。
# FlaskとFlask-Babelをインストールする命令です
pip install Flask Flask-Babel
インストールが終わったら、Webアプリの設計図となるPythonファイルを作成します。 ここでは「app.py」という名前にしましょう。このファイルの中で、Flask-Babelを使うための初期設定を書いていきます。
3. Flask-Babelの初期設定を記述する
次に、Pythonプログラムの中でFlask-Babelを動かすための設定を行います。 ここでは「今アクセスしている人は何語を求めているのか?」を判断する仕組みを作ります。 これを「ロケール・セレクター」と呼びます。ロケールとは、言語や地域の設定のことです。
from flask import Flask, render_template, request
from flask_babel import Babel
app = Flask(__name__)
# 多言語化の設定を行うための合言葉です
def get_locale():
# ユーザーのブラウザ設定から一番適した言語を選びます
# 日本語(ja)か英語(en)を優先するように設定します
return request.accept_languages.best_match(['ja', 'en'])
# Babelを初期化します
babel = Babel(app, locale_selector=get_locale)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
このコードでは、ブラウザが「私は日本語が得意です」と伝えてきたら「ja(日本語)」を、そうでなければ「en(英語)」などを選ぶように指示しています。 パソコンが自動的にユーザーの好みを読み取ってくれる仕組みの第一歩です。
4. 翻訳したい箇所を指定する魔法の言葉
プログラムの設定ができたら、次はHTMLファイルの中で「ここは翻訳してほしい場所ですよ」と印をつけます。 普段、HTMLに文字を書くときは「こんにちは」と直接書きますが、多言語化する場合は「gettext」という関数を使います。 HTMLの中では短縮して「_()」と書くのが一般的です。
例えば、トップページに表示する挨拶を多言語化したい場合は、以下のように記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>多言語サイト</title>
</head>
<body>
<h1>{{ _('Welcome to our Website') }}</h1>
<p>{{ _('Hello, how are you today?') }}</p>
</body>
</html>
このように「_()」で囲まれた部分は、後で「日本語ならこれ」「英語ならこれ」と置き換えるための目印になります。 これを忘れると、どんなに翻訳データを用意しても画面には元の英語のまま表示されてしまうので注意しましょう。
5. 翻訳リストを作成するための設定ファイル
目印をつけた後、パソコンに「どのファイルの、どの場所を翻訳すべきか」を教えてあげる必要があります。 そのための指示書として「babel.cfg」という名前のファイルを作成します。 このファイルの中身は以下のようになります。
# HTMLファイルの中から翻訳対象を探す設定です
[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
この設定は「Pythonファイルの中」と「templatesフォルダの中にあるHTMLファイル」を全部確認して、翻訳が必要な「_()」の部分を見つけ出してね、という意味です。 専門用語でこれを「抽出(ちゅうしゅつ)」と呼びます。 これで、手作業で一つ一つ文字を拾い上げる必要がなくなります。
6. 翻訳の種となるテンプレートファイルを生成する
設定ファイルができたら、実際に文字を抜き出します。 ここで使うのが「pybabel」というコマンドです。 コマンドプロンプトで以下の命令を実行すると、プロジェクト内の翻訳対象が「messages.pot」という一つのファイルにまとめられます。
pybabel extract -F babel.cfg -o messages.pot .
この「.pot」ファイルは、いわば翻訳の「型」です。 まだこの段階では翻訳はされておらず、「このサイトにはこれらの文章がありますよ」というリストができただけの状態です。 料理で言えば、材料をまな板の上に並べ終わった状態だと思ってください。
7. 日本語用の翻訳ファイルを作成しよう
次に、先ほどの「型」を元にして、具体的な言語(今回は日本語)のためのファイルを作成します。 以下のコマンドを打つと、日本語用のフォルダとファイルが自動的に作られます。
pybabel init -i messages.pot -d translations -l ja
ここで「-l ja」というのは「言語(Language)を日本語(ja)にする」という意味です。 実行すると「translations」というフォルダの中に「messages.po」というファイルが出来上がります。 この「.po」ファイルこそが、私たちが実際に翻訳を書き込むファイルになります。
ファイルを開くと、以下のような構成になっています。 「msgid」には元の英語が、「msgstr」には空欄があります。 この空欄に、対応する日本語を書き込んでいきます。
msgid "Welcome to our Website"
msgstr "私たちのウェブサイトへようこそ"
msgid "Hello, how are you today?"
msgstr "こんにちは、今日はご機嫌いかがですか?"
8. 翻訳ファイルをコンピュータが読める形式に変換する
人間が日本語を書き込んだ「.po」ファイルですが、実はコンピュータはこのままでは読むことができません。 最後の一仕事として、コンピュータ専用の形式「.mo」ファイルに変換する必要があります。 この作業を「コンパイル」と呼びます。
難しい響きですが、やることはコマンドを一回打つだけです。
pybabel compile -d translations
これで準備はすべて完了です! Pythonのプログラムを実行して、ブラウザで確認してみましょう。 ブラウザの言語設定が日本語になっていれば、先ほど書き込んだ日本語が画面に表示されるはずです。 もし英語で表示したい場合は、同じ手順で「-l en」として英語用のファイルを作り、翻訳を書き込めばOKです。
9. 言語を切り替えるための仕組みをより詳しく
サイトを運営していると、ブラウザの設定に頼るだけでなく、ユーザーがボタン一つで「日本語」「English」と切り替えられるようにしたい場合もありますよね。 その場合は、URLに「/ja/」や「/en/」といった文字を含めるようにプログラムを改良します。
例えば、URLの最初を見て言語を判断するような仕組みに書き換えることができます。 これにより、海外の友人に「このURLを見て!」と送ったときに、相手が日本にいても英語のページを見せることが可能になります。
Flask-Babelは、非常に柔軟性が高いツールです。 最初は難しく感じるかもしれませんが、「抜き出す」「書く」「変換する」という3つのステップを覚えるだけで、世界中に情報を発信できるWebサイトが作れるようになります。 一歩ずつ、楽しみながらプログラミングの世界を広げていきましょう。