当前位置: 首页 > 面试题库 >

如何使用Flask + Babel选择语言?

冷翼
2023-03-14
问题内容

现在,我正在开发一个项目,该项目应支持两种语言:默认为英语和俄语。使用HTTP_ACCEPT_LANGUAGE标头很容易做到,代码如下:

babel = Babel(app)

@babel.localeselector
def get_locale():
    return request.accept_languages.best_match(app.config["LANGUAGES"].keys())

语言在应用程序配置文件中进行了硬编码:

LANGUAGES = {
    'en': 'English',
    'ru': 'Russian'
}

但我也想添加一个按钮,例如Switch language to English。实现它的最佳实践是什么?


问题答案:

这是我遇到的解决方案:

首先,您设置一条路由,该路由将处理语言更改并将所选语言存储在会话中:

@app.route('/language/<language>')
def set_language(language=None):
    session['language'] = language
    return redirect(url_for('index'))

其次,您必须修改一些代码才能从会话中获取所选语言:

@babel.localeselector
def get_locale():
    # if the user has set up the language manually it will be stored in the session,
    # so we use the locale from the user settings
    try:
        language = session['language']
    except KeyError:
        language = None
    if language is not None:
        return language
    return request.accept_languages.best_match(app.config['LANGUAGES'].keys())

您还必须能够从模板访问CURRENT_LANGUAGE,因此可以注入它:

@app.context_processor
    def inject_conf_var():
        return dict(
                    AVAILABLE_LANGUAGES=app.config['LANGUAGES'],
                    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 %}

应用程序config.py包含以下常量:

LANGUAGES = {
  'en': 'English',
  'es': 'Spanish'
}

希望这可以帮助!



 类似资料:
  • 问题内容: 可以说在employee表中,我在表的列上创建了一个索引(idx_name)。 我是否需要在select子句中明确指定索引名称,否则它将自动用于加速查询。 如果需要在select子句中指定,在select查询中使用index的语法是什么? 问题答案: 如果要测试索引以查看其是否有效,请使用以下语法: WITH语句将强制使用索引。

  • 如何选择shell编程语言 熟悉 vs 陌生 如果你已经掌握了一门编程语言(如PHP、Python、Java、JavaScript),建议你就直接使用这门语言编写脚本程序,虽然某些地方会有点啰嗦,但你能利用在这门语言领域里的经验(单元测试、单步调试、IDE、第三方类库)。 新增的学习成本很小,只要学会怎么使用shell解释器(Jshell、AdaScript)就可以了。 简单 vs 高级 如果你觉

  • 问题内容: 默认情况下,flask使用存储在“ template”目录中的模板文件: 有什么方法可以根据登录用户动态选择模板目录?这就是我想要的目录结构: 现在,如果我具有登录用户的用户名和用户激活的模板的名称,是否可以动态选择要加载模板文件的目录?例如, 而不是固定的 我要实现的目标是为我的Web应用程序提供一个类似wordpress的主题系统,用户可以在其中上传/选择其网站的主题。 问题答案:

  • 问题内容: 我想使用Hibernate选择单列而不是整个对象。到目前为止,我有这个: 我的问题是上述代码将整个People表返回为一个对象,而不仅仅是“ firstname”。我不确定如何指定仅返回“名字”而不是整个对象。 问题答案: 您可以像这样设置投影: 有了这个,您只能得到名字的回报。 我在同一情况下在堆栈上找到了另一个链接。希望这也将对您有所帮助。

  • 问题内容: 我的应用程序必须支持阿拉伯语(从右到左方向)和英语(从左到右方向)语言,我需要设置UI并基于用户 从我的应用程序中选择的语言。 我将使用NSLayoutConstraint实现UI,以便它可以根据前导和尾随约束自动更新UI 。 现在我的问题是我该如何实现?由于我的设备语言是英语,并且从我的应用程序用户中选择阿拉伯语(仅限于我的应用程序),因此我的Flow,UI,动画等应从右到左。 问题

  • 问题内容: 我正在尝试向表中插入其他行,该表要求从另一个表中检索一个值。以下是查询示例: 表的结构为。 我知道以上查询是错误的。有没有办法在插入行时从其他表中检索1个值? 问题答案: 一些DBMS会接受以下内容,并在SELECT语句的周围加上括号:

  • 喜欢程序员这份工作的独立的程序员可以为任务选择最好的语言。大多数职业程序员控制不了他们将要使用的语言。通常,这个话题会由执行行政决议而非技术决议的boss说出,他们缺少勇气去提升新型工具,即使他们知道,大多数时候使用最新的知识,最少被接受的工具是最好的。另一些情况下,这种团体中真实的好处,以及拓展一个更大的社区的好处,排除了个人的选择。通常管理者由能够雇用在给定的语言有些经验的程序员驱动。毫无疑问

  • 我有一些连接的选择工作良好。顺便说一句,我想把这些选择转换成很小的选择,但我发现这样做有些困难。例如,我有一个ID为的select。当我选择的一个大于零的选项时,应该会出现其他选择。之后,当我更改级联选择的选项(例如在中)时,该选项会正确更改。但是,当我选择另一次时,中的选项zero和我选择另一次时,中大于zero的选项会出现,而另一次选择中已经选择了选项。 这是我的javascript代码: 这