import gradio as gr from i18n import get_text def create_welcome_tab(initial_lang: str): """ Creates the UI components for the Welcome Tab. Returns a dictionary of all component handles that need dynamic updates. """ with gr.TabItem(get_text("welcome_tab_title", initial_lang)) as welcome_tab: with gr.Column(elem_classes=["welcome-container"]): welcome_header_md = gr.Markdown(f"# {get_text('welcome_header', initial_lang)}") welcome_desc_md = gr.Markdown(get_text('welcome_description', initial_lang)) with gr.Row(): with gr.Column(scale=1): welcome_chat_desc_md = gr.Markdown(f"### {get_text('tab_chat', initial_lang)}\n{get_text('welcome_chat_desc', initial_lang)}") with gr.Column(scale=1): welcome_code_desc_md = gr.Markdown(f"### {get_text('tab_code', initial_lang)}\n{get_text('welcome_code_desc', initial_lang)}") with gr.Column(scale=1): welcome_writer_desc_md = gr.Markdown(f"### {get_text('tab_writer', initial_lang)}\n{get_text('welcome_writer_desc', initial_lang)}") gr.Markdown("---") with gr.Row(): welcome_lang_select_md = gr.Markdown(f"### {get_text('welcome_select_language', initial_lang)}") with gr.Row(): en_button = gr.Button(get_text('lang_en', initial_lang)) zh_button = gr.Button(get_text('lang_zh', initial_lang)) en_button.click( fn=None, inputs=[], js="() => { window.dispatchEvent(new CustomEvent('langChange.SpaceApp', { detail: { lang: 'en' } })); }" ) zh_button.click( fn=None, inputs=[], js="() => { window.dispatchEvent(new CustomEvent('langChange.SpaceApp', { detail: { lang: 'zh' } })); }" ) # Return a dictionary for easier access in app.py components = { "tab": welcome_tab, "header": welcome_header_md, "description": welcome_desc_md, "chat_description": welcome_chat_desc_md, "code_description": welcome_code_desc_md, "writer_description": welcome_writer_desc_md, "lang_select_header": welcome_lang_select_md, "en_button": en_button, "zh_button": zh_button } return components def update_language(lang: str, components: dict): """ Returns a dictionary mapping components to their gr.update calls. """ updates = { components["tab"]: gr.update(label=get_text("welcome_tab_title", lang)), components["header"]: gr.update(value=f"# {get_text('welcome_header', lang)}"), components["description"]: gr.update(value=get_text('welcome_description', lang)), components["chat_description"]: gr.update(value=f"### {get_text('tab_chat', lang)}\n{get_text('welcome_chat_desc', lang)}"), components["code_description"]: gr.update(value=f"### {get_text('tab_code', lang)}\n{get_text('welcome_code_desc', lang)}"), components["writer_description"]: gr.update(value=f"### {get_text('tab_writer', lang)}\n{get_text('welcome_writer_desc', lang)}"), components["lang_select_header"]: gr.update(value=f"### {get_text('welcome_select_language', lang)}"), components["en_button"]: gr.update(value=get_text('lang_en', lang)), components["zh_button"]: gr.update(value=get_text('lang_zh', lang)), } return updates