簡単にWebサイトを英語対応する方法(Flask-Babel、初心者向け)

HTML
  • webサイトの英語対応(国際化)に必要な、最低限の情報を得たい方向け。
  • PythonやHTMLを触ったことがある方向け。

この記事では、Flask-Babelを用いた、webサイトの英語対応(国際化)についてまとめてみました。必要最低限の情報だけを記載したので、とりあえず英語対応させたい方はぜひご覧ください。

内容をある程度理解するためには、HTMLとPythonの基礎知識が必要です。不安がある方は、下記サイトなどおすすめなので、ぜひ目を通してみてください。

必要な構造

webサイトを多言語化するために、Flaskというフレームワークを活用します。簡単に説明すると、HTMLとPythonを結びつけるイメージです。
ここでポイントになるのが、プログラムフォルダの構造です。プログラムがしっかり書けていても、フォルダ構造が間違っているとうまく動きません。
下に最低限のフォルダ構造を示したので、対応したいプログラムフォルダに加えてみてください。

各ファイルのコード

各ファイルのコードは以下の通りです。他の機能をすでに実装している方は、追記する形で書いてください。

簡単な解説を表示

コードを書いた後、ターミナルを使って翻訳の準備を行います。その時に参照されるファイルがbabel.cfgです。

簡単な解説を表示

英語対応(国際化)に関する基本設定のためのファイルです。

簡単な解説を表示

プログラムの起動を行うファイルです。
下記のように「open_browser」関数を設定するとデバッグに便利です。

import webbrowser
import threading

def open_browser():
      #webbrowser.open_new('http://127.0.0.1:5000/?lang=ja')
      webbrowser.open_new('http://127.0.0.1:5000/?lang=en')

if __name__ == '__main__':
      threading.Timer(1.25, open_browser).start()

#英語版で開く場合は、('http...lang=ja')をコメントアウトするなどの使い方がおすすめです。
簡単な解説を表示

英語対応(国際化)されたHTMLの一例です。
「<html lang=”{{ get_locale() }}”>」の部分で、ブラウザの言語を確認し対応しています。
翻訳可能なテキストを書きたい場合は、下記のように書きます。

<h1>{{ _('適当な文字列') }}</h1>
簡単な解説を表示

ここが最も難しい部分かと思います。
端的に説明すると、Flaskの初期化と「get_locale」の定義を行っています。とりあえずはコピペで問題ないです。

下記のようなコードはFlaskのアップデートによって使えなくなっている可能性があります。注意してください。

@babel.localeselector
簡単な解説を表示

Flaskのroutingと呼ばれる機能を活用しています。やっていることは、HTMLファイルにURLを結びつけています。
下記のようにコードを足していくことで、webサイトのページ数を増やすことが出来ます。

@app.route('/02')
    def loading():
        return render_template('02.html')

詳しく知りたい方は、下記のサイトがおすすめです。

翻訳ファイルの準備

これでプログラムは完成です。いよいよ翻訳を設定するフォルダを作成していきます。
下記のコマンドをターミナルで実行してください。

pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .

コマンドの実行後、「messages.pot」が作成されるはずです。続けて打ち込んでいきます。

pybabel init -i messages.pot -d app/translations -l en

「app/translations/en/LC_MESSAGES/messages.po」が作成される事を確認してください。
ここまで来たら、おめでとうございます。準備完了です。

翻訳の書き方

最後にこのプログラムフォルダの使い方を解説します。
先ほど作成した「translations/en/LC_MESSAGES/messages.po」ファイルを見ると、下記のようになっているかと思います。

...
...
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.14.0\n"

#: app/templates/01.html:6
msgid "タイトル"
msgstr ""

#: app/templates/01.html:12
msgid "適当な文字列"
msgstr ""

#01.htmlをカスタマイズした場合"タイトル"と"適当な文字列"は他の文章になっています。

この「タイトル」と「適当な文字列」に英語版での表記を追記していきます。下記のようにファイルに書き込んでください。

#: app/templates/01.html:6
msgid "タイトル"
msgstr "title"

#: app/templates/01.html:12
msgid "適当な文字列"
msgstr "character string"

次にこのファイルを使えるようにするため、コンパイルしていきます。下記をターミナルで実行してください。

pybabel compile -d app/translations

「en/LC_MESSAGES/messages.mo」ファイルが追加されていれば完成です!
新しく翻訳可能テキストを生成した場合は、翻訳ファイルの準備からもう一度行ってくださいね。

というわけで今回の記事は以上になります。

この記事を書いた人
hirotsune

上智大学情報理工学科に所属していて、プログラミングが大好きです。
自分の勉強のアウトプットも兼ねてブログを書いています!
お仕事依頼はXかメールアドレスまで。

hirotsuneのアカウント
HTMLPythonプログラム
ひろつねの開発ログ