You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于python-i18n的DASH多语言应用运行时切换语言问题

Dash多语言切换问题(基于python-i18n)

问题描述

  • 基于python-i18n和yml文件搭建多语言Dash应用,支持通过下拉框切换标题、标签等文本语言
  • 手动修改LOCALE变量后启动应用,语言切换正常;但通过回调结合dcc.Location触发页面刷新时,原语言未改变
  • 问题根源:初始加载阶段已执行i18n.set("locale", loc_code)和i18n.load_path.append(locale_path)配置,运行时修改配置后刷新无法激活新设置;尝试在回调中执行这些配置代码也无效,教程提及需在定义app.layout前调用相关配置,不确定页面刷新的影响范围及配置生效方式
  • 更新:单文件示例代码可正常运行,但我的大型应用采用子文件夹结构,回调与布局拆分到不同文件中,问题与应用结构相关

可正常运行的单文件示例代码

import dash
from dash.dependencies import Input, Output
from dash import dcc, html

import i18n
from pathlib import Path


def setlang(loc):
    global LOCALE
    LOCALE = loc
    i18n.set("locale", LOCALE)
    i18n.load_path.append(locale_path)

# 初始语言代码
LOCALE = "se"
# 翻译yml文件路径
parent_directory = Path(__file__).parent
locale_path = parent_directory / "locale"

setlang(LOCALE)

INITIAL = '1+1=2'

app = dash.Dash(__name__)


def serve_layout():
    return html.Div([
        dcc.Location(id='url', refresh=True),
        i18n.t("general.designation"),
        html.Br(),
        dcc.Input(id='important-info', value=INITIAL, persistence=True),
        html.Button("Forget it!", id='clear-info'),
        dcc.Dropdown(
                id='ldropdown',
                options=['se', 'en'],
                placeholder='placeholder_text')
    ])


app.layout = serve_layout


@app.callback(
   Output("url", "href"),
   Input(component_id='ldropdown', component_property='value'),
   prevent_initial_call=True
)
def create_dow(lang_code_dd):
    setlang(lang_code_dd)
    return "/"


@app.callback(
    Output('important-info', 'value'),
    Input('clear-info', 'n_clicks')
)
def clear_persistence(n):
    return INITIAL if n else dash.no_update


if __name__ == '__main__':
    app.run_server(debug=True)

内容的提问来源于stack exchange,提问作者SilverPy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:30:34