基于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
相关产品推荐
相关产品推荐

