実現したいこと
htmlにおいて、lang='ja'の時、
{{ _('home') }}について、「ホーム」と翻訳して表示したい。
発生している問題・分からないこと
langの指定を変えると、文体だけ変わるが翻訳が適用されない。
エラーメッセージ
error
1ターミナルやコンソールではエラーを確認できませんでした。
該当のソースコード
py
1#main.py2from app import create_app 3import webbrowser 4import threading 5 6def open_browser():7 webbrowser.open_new('http://127.0.0.1:5000/?lang=ja')8 #webbrowser.open_new('http://127.0.0.1:5000/?lang=en')9 10app = create_app()11 12if __name__ == '__main__':13 threading.Timer(1.25, open_browser).start()14 app.run(debug=True)15 16#config.py17class Config:18#秘密鍵は設定しています。19 SECRET_KEY = ""20 LANGUAGES = {21 'en': 'English',22 'ja': '日本語'23 }24 BABEL_DEFAULT_LOCALE = 'en'25 BABEL_TRANSLATION_DIRECTORIES = './locale'
app/.py
1#app/__init__.py 2from flask import Flask, request, g 3from flask_babel import Babel 4from config import Config 5 6def create_app(): 7 app = Flask(__name__) 8 app.config.from_object(Config) 9 10 # get_locale関数を定義 11 def get_locale(): 12 # リクエストの引数から言語設定を取得し、なければデフォルトの言語設定を使用 13 return request.args.get('lang', app.config['BABEL_DEFAULT_LOCALE']) 14 15 # Babelインスタンスを作成し、locale_selectorパラメータにget_locale関数を渡す 16 babel = Babel(app, locale_selector=get_locale) 17 18 # get_locale関数をテンプレートのグローバル関数として登録 19 @app.context_processor 20 def context_processor(): 21 return dict(get_locale=get_locale) 22 23 from . import routes 24 routes.init_app(app) 25 26 return app 27 28#app/routes.py 29from flask import render_template 30from flask import current_app as app 31 32def init_app(app): 33 @app.route('/') 34 def home(): 35 return render_template('01_home.html') 36 37 @app.route('/loading') 38 def loading(): 39 return render_template('02_loading.html') 40 41 @app.route('/select') 42 def select(): 43 return render_template('03_select.html') 44 45 @app.route('/answer') 46 def answer(): 47 return render_template('04_answer.html')
babel.cfg
1[python: **.py] 2[jinja2: app/templates/**.html] 3jinja2_extensions = jinja2.ext.autoescape,jinja2.ext.with_,jinja2.ext.i18n
messages.po
html
100_base.html 2<!DOCTYPE html>3<html lang="{{ get_locale() }}">4 <head>5 <meta charset="UTF-8" />6 <meta name="viewport" content="width=device-width, initial-scale=1.0" />7 <title>{% block title %}{{ _('title') }}{% endblock %}</title>8 <!--<link rel="stylesheet" href="00_base.css">-->9 </head>10 <body>11 {% block content %} 12 <header>13 <div>14 <h1>{{ _('title') }}</h1>15 </div>16 </header>17 {% endblock %} 18 </body>19</html>20 2101_home.html 22{% extends '00_base.html' %} 23 24{% block title %}{{ _('home') }} | {{ _('title') }}{% endblock %} 25 26{% block content %} 27 <h1>{{ _('home') }}</h1>28{% endblock %}
試したこと・調べたこと
上記の詳細・結果
がうまくいっていないのかと思い、コンソールを確認しましたが、下記のように正常に機能していました。webbrowser.open_new('http://127.0.0.1:5000/?lang=ja')の時
home | title<h1>home</h1> </body>
webbrowser.open_new('http://127.0.0.1:5000/?lang=en')の時
home | title<h1>home</h1> </body>
補足
初心者で、つまらない質問でしたら申し訳ありません。
よろしくお願いいたします。
0 コメント