こんにちは、JS2IIUです。
多言語対応についてはブラウザの機能でユーザ側が翻訳する方法が手っ取り早く、制作側は何も用意しなくても良いというメリットがありますが、内容によってはおかしな翻訳になってしまうこともあります。今回は多言語対応を制作側で準備する方法についてみていきます。今回もよろしくお願いします。
はじめに
WebアプリやGUIアプリを作成する際、ユーザーに合わせて複数の言語に対応(=国際化/i18n)することはとても重要です。たとえば、日本語・英語などを切り替えられることで、より多くのユーザーに使ってもらえるアプリになります。
この記事では、PythonのStreamlitで作るアプリを多言語対応にする方法を、初心者向けにやさしく解説します。具体的な事例を通して、実用的な知識を身につけましょう。
1. Streamlitで国際化する方法とは?
国際化の基本的な考え方は以下の3つです。
- テキストを辞書化して言語ごとの翻訳を用意する
- ユーザーが使いたい言語を選べるようにする
- 選ばれた言語に応じて画面上のテキストを切り替える
これをStreamlitでもシンプルな構造で実現できます。
国際化/i18nについて
i18n(Internationalization、国際化)とは、ソフトウェアやアプリケーションを複数の言語や文化圏に対応できるように設計・開発することを指します。「Internationalization」の単語の最初と最後の文字「i」と「n」の間に18文字あることから、略して「i18n」と呼ばれます。
i18nでは、文字の翻訳だけでなく、日付や数値の表記方法、通貨、右から左への文字表示など、地域固有の要素に柔軟に対応することが求められます。i18nを適切に実装することで、世界中のユーザーにとって使いやすいアプリケーションを提供できます。
2. 翻訳辞書を用意する(日本語・英語)
まずは、表示する文言を辞書形式で用意します。
# translations.py
translations = {
'en': {
'title': 'Welcome to the App',
'greeting': 'Hello!',
'description': 'This is a multilingual Streamlit application.',
'input_label': 'Enter your name',
'output_message': 'Nice to meet you, {name}!'
},
'ja': {
'title': 'アプリへようこそ',
'greeting': 'こんにちは!',
'description': 'これは多言語対応のStreamlitアプリです。',
'input_label': '名前を入力してください',
'output_message': 'はじめまして、{name}さん!'
}
}これは単純なPython辞書です。各言語ごとにキーを用意し、その中に表示する文言を格納しています。
3. 言語選択UIの作成
次に、Streamlitアプリ内で言語を選ぶためのUIを作成します。
# app.py
import streamlit as st
from translations import translations
# 利用可能な言語一覧(キー)
available_languages = {
'日本語': 'ja',
'English': 'en'
}
# サイドバーで言語を選ぶ
lang_display = st.sidebar.selectbox("言語を選択 / Choose Language", list(available_languages.keys()))
lang_code = available_languages[lang_display]
# 選択した言語の翻訳辞書
t = translations[lang_code]これで、ユーザーがサイドバーから言語を選ぶと、対応する翻訳データがtとして取得されます。
4. 選択言語に応じて表示を切り替える
以下は、言語によって表示を切り替えるStreamlitコードの一例です。
st.title(t['title'])
st.subheader(t['greeting'])
st.write(t['description'])
# ユーザーの名前を入力してもらう
name = st.text_input(t['input_label'])
if name:
st.success(t['output_message'].format(name=name))これだけで、日本語と英語の切り替えが可能になります。
5. 【応用編】複数ページ対応で共通の言語設定を使う
Streamlitの**複数ページ構成(Multipage App)**でも、選んだ言語を共有するにはst.session_stateを使います。
# サイドバーで選んだ言語をセッションに保持
if 'lang' not in st.session_state:
st.session_state.lang = 'ja' # デフォルト言語
# 選択があれば更新
if lang_code != st.session_state.lang:
st.session_state.lang = lang_code
# セッションから翻訳辞書を取得
t = translations[st.session_state.lang]このようにしておけば、ページをまたいでも選択した言語が保持され、統一された表示が可能になります。
6. 【応用編】動的テキスト(変数を含む文章)の翻訳
文の中にユーザー名などの変数を含む場合も、f-stringやstr.format()を使えば対応できます。
t['output_message'].format(name=name)この方法を使うことで、自由度の高い表示ができます。
7. よくある注意点とベストプラクティス
| 項目 | 内容 |
|---|---|
| ハードコーディング禁止 | テキストは直接書かず、必ず辞書から取得するようにしましょう。 |
| 辞書の管理 | 辞書が大きくなってきたら、JSON形式にして外部ファイルで管理すると便利です。 |
| スプレッドシート連携 | Googleスプレッドシートなどで翻訳管理 → JSONエクスポートで更新も効率化できます。 |
8. まとめ
Streamlitでの多言語対応は、辞書の活用と言語選択のUIさえしっかり作れば、驚くほど簡単に実現できます。
対応手順のおさらい:
- 翻訳辞書を用意する
- 言語選択のUIを用意する
- 選んだ言語の辞書でテキストを表示する
アプリの国際化に対応することで、世界中のユーザーに届けられるアプリに一歩近づきます!
9. 参考リンク
最後まで読んでいただきありがとうございます。

