0

我有同一个静态 html 文件的几种翻译(不同语言)。这些是通过Sphinx-Python获得的,使用国际化功能,最终以 mo 文件结尾。这一切都很好。

但是,我不知道如何允许用户的浏览器选择与Accept-Languages浏览器本身发送的标头相对应的正确翻译。

静态文件将通过 Flask 的send_static_file.

非常感谢有关如何强制浏览器从一堆静态文件中选择“好”翻译的任何提示。

4

1 回答 1

1

我有一个我想分享的解决方案。

我已按照此处给出的说明进行操作,只要生产服务器是 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'))
于 2014-09-07T09:29:57.653 回答