【发布时间】:2017-05-02 05:22:47
【问题描述】:
我正在开发一个烧瓶项目 (Python3)。我的项目中的国际化工作正常。这是create_app工厂中启动的配置方法:
def configure_languages(app):
# flask-babel
babel = Babel(app)
@babel.localeselector
def get_locale():
languages = ['en', 'fr', 'de']
lang = request.args.get('lang')
if lang is None:
return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
elif lang not in languages:
return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
else:
g.lang_code = lang
return g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
@app.before_request
def ensure_lang_support():
lang_code = g.get('lang_code', app.config['BABEL_DEFAULT_LOCALE'])
if lang_code and lang_code not in app.config['SUPPORTED_LANGUAGES']:
return abort(404)
@app.url_defaults
def set_language_code(endpoint, values):
if 'lang_code' in values or not g.get('lang_code',
app.config['BABEL_DEFAULT_LOCALE']):
return
if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
values['lang_code'] = g.get('lang_code',
app.config['BABEL_DEFAULT_LOCALE'])
@app.url_value_preprocessor
def get_lang_code(endpoint, values):
if values is not None:
g.lang_code = values.pop('lang_code',
app.config['BABEL_DEFAULT_LOCALE'])
这是我定义其中一个蓝图的方式:
frontend_blueprint = Blueprint('frontend', __name__, url_prefix='/<lang_code>')
应用程序运行良好。我可以在网址中看到语言代码。例如:
http://localhost:5000/en/posts
http://localhost:5000/fr/posts
http://localhost:5000/de/posts
en 是我的应用程序配置中的默认语言。
不过,我有一个问题:
如何将默认语言设为空?
我希望我的网络应用程序默认不显示任何语言代码如果我使用英语:
http://localhost:5000/posts
http://localhost:5000/about
http://localhost:5000/help
只有当我选择某种特定语言(如法语或德语)时,url 才会变成这样:
http://localhost:5000/fr/posts
http://localhost:5000/fr/about
http://localhost:5000/fr/help
或者
http://localhost:5000/de/posts
http://localhost:5000/de/about
http://localhost:5000/de/help
我该怎么做?我尝试将配置中的默认语言代码从 'en' 设置为 '' 但显然它不起作用。
【问题讨论】:
-
好问题 - 正在寻找答案 atm xD
标签: python flask localization internationalization python-babel