我有同一个静态 html 文件的几种翻译(不同语言)。这些是通过Sphinx-Python获得的,使用国际化功能,最终以 mo 文件结尾。这一切都很好。
但是,我不知道如何允许用户的浏览器选择与Accept-Languages
浏览器本身发送的标头相对应的正确翻译。
静态文件将通过 Flask 的send_static_file
.
非常感谢有关如何强制浏览器从一堆静态文件中选择“好”翻译的任何提示。
我有同一个静态 html 文件的几种翻译(不同语言)。这些是通过Sphinx-Python获得的,使用国际化功能,最终以 mo 文件结尾。这一切都很好。
但是,我不知道如何允许用户的浏览器选择与Accept-Languages
浏览器本身发送的标头相对应的正确翻译。
静态文件将通过 Flask 的send_static_file
.
非常感谢有关如何强制浏览器从一堆静态文件中选择“好”翻译的任何提示。
我有一个我想分享的解决方案。
我已按照此处给出的说明进行操作,只要生产服务器是 Apache 就适用。为相同 Sphinx 文件的每个翻译添加以下行。
Alias /doc_en /location/of/sphinx/english_version/html
<Directory /location/of/sphinx/english_version/html>
Order deny,allow
Allow from all
</Directory>
从 Flask 的角度来看,在Flask-Babel扩展的帮助下,可以引导用户使用最合适的翻译(由用户的浏览器定义) :
app = Flask(__name__)
app.config.from_pyfile('mysettings.cfg')
babel = Babel(app)
@babel.localeselector
def get_locale():
bestl = request.accept_languages.best_match(['de', 'fr', 'en'])
if bestl:
return request.accept_languages.best_match(['de', 'fr', 'en'])
else:
return "en"
然后,通过以下方式提供静态文件send_static_file
:
@app.route('/<dir>/<filename>', methods=['GET'])
def doc(dir, filename):
path = os.path.join(dir, filename)
return app.send_static_file(path)
@app.route('/help')
def docs():
return redirect(url_for('doc', dir = 'doc_'+get_locale(), filename='index.html'))