如何使用 babel 和 flask 添加 link 来更改和保留新语言?
How do I add a link to change and keep a new language using babel and flask?
我已经正确设置了 Babel,并且翻译工作按预期进行。我坚持的是能够使用 link 切换语言,而不是保持该设置处于活动状态,即使用户单击网页上的任何其他 links。
这是我的设置:
app = Flask(__name__)
app.config["BABEL_DEFAULT_LOCALE"] = "en"
babel = Babel(app)
@babel.localeselector
def get_locale():
if request.args.get("lang"):
session["lang"] = request.args.get("lang")
return session.get("lang", "en")
这按预期工作,新用户看到 'en' 版本的网页。我可以通过在搜索字段中的地址后键入“/?lang=sv”或“/?lang=en”来手动切换,但是如何使用 link 来实现?
这可能是最基本的,但根据他们的文档我不明白如何去做。我也是第一次,所以感觉头上被水淋湿了。
可能类似这样的内容会对您有所帮助。
设置处理语言更改并将所选语言存储在会话中的路由:
@app.route('/language/<language>')
def set_language(language=None):
session['language'] = language
return redirect(url_for('index'))
您已 get_locale()
设置 returns 所选语言,但您需要能够从模板访问它。所以
@app.context_processor
def inject_conf_var():
return dict(CURRENT_LANGUAGE=session.get(CURRENT_LANGUAGE=session.get('language'', request.accept_languages.best_match(app.config['LANGUAGES'].keys())))
最后,在模板中,选择您想要的语言:
{% for language in AVAILABLE_LANGUAGES.items() %}
{% if CURRENT_LANGUAGE == language[0] %}
{{ language[1] }}
{% else %}
<a href="{{ url_for('set_language', language=language[0]) }}" >{{ language[1] }}</a>
{% endif %}
{% endfor %}
可能是最糟糕的方法,但它确实有效。
首先我必须更改索引以接受 GET 方法:
@app.route("/", methods=['GET'])
def index():
return render_template("index.html", me=me)
然后在HTML文件中添加一个表单方法
<form method="GET">
<input type="submit" name="lang" value="sv">
<input type="submit" name="lang" value="en">
</form>
不会接受这个答案,因为它看起来不对,必须有更好的方法
我已经正确设置了 Babel,并且翻译工作按预期进行。我坚持的是能够使用 link 切换语言,而不是保持该设置处于活动状态,即使用户单击网页上的任何其他 links。
这是我的设置:
app = Flask(__name__)
app.config["BABEL_DEFAULT_LOCALE"] = "en"
babel = Babel(app)
@babel.localeselector
def get_locale():
if request.args.get("lang"):
session["lang"] = request.args.get("lang")
return session.get("lang", "en")
这按预期工作,新用户看到 'en' 版本的网页。我可以通过在搜索字段中的地址后键入“/?lang=sv”或“/?lang=en”来手动切换,但是如何使用 link 来实现?
这可能是最基本的,但根据他们的文档我不明白如何去做。我也是第一次,所以感觉头上被水淋湿了。
可能类似这样的内容会对您有所帮助。
设置处理语言更改并将所选语言存储在会话中的路由:
@app.route('/language/<language>')
def set_language(language=None):
session['language'] = language
return redirect(url_for('index'))
您已 get_locale()
设置 returns 所选语言,但您需要能够从模板访问它。所以
@app.context_processor
def inject_conf_var():
return dict(CURRENT_LANGUAGE=session.get(CURRENT_LANGUAGE=session.get('language'', request.accept_languages.best_match(app.config['LANGUAGES'].keys())))
最后,在模板中,选择您想要的语言:
{% for language in AVAILABLE_LANGUAGES.items() %}
{% if CURRENT_LANGUAGE == language[0] %}
{{ language[1] }}
{% else %}
<a href="{{ url_for('set_language', language=language[0]) }}" >{{ language[1] }}</a>
{% endif %}
{% endfor %}
可能是最糟糕的方法,但它确实有效。
首先我必须更改索引以接受 GET 方法:
@app.route("/", methods=['GET'])
def index():
return render_template("index.html", me=me)
然后在HTML文件中添加一个表单方法
<form method="GET">
<input type="submit" name="lang" value="sv">
<input type="submit" name="lang" value="en">
</form>
不会接受这个答案,因为它看起来不对,必须有更好的方法