同一静态html文件的不同翻译:如何强制用户的浏览器选择其中一个?

2024-05-15 05:52:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个相同的静态html文件的翻译(到不同的语言)。这些文件是通过Sphinx-Python获得的,使用internationalization特性,最终生成mo文件。这一切都很好

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

静态文件将通过Flask的send_static_file提供

非常感谢您提供任何提示,说明如何强制浏览器从一堆静态文件中选择“好”的翻译


Tags: 文件用户send语言flaskhtmlsphinx静态
1条回答
网友
1楼 · 发布于 2024-05-15 05:52:14

我想和大家分享一个解决方案

我遵循了here给出的说明,只要生产服务器是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-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'))

相关问题 更多 >

    热门问题