ling-series-spaces / tab_welcome.py
GitHub Action
Sync ling-space changes from GitHub commit 0c0ec4d
efd0da0
import gradio as gr
from i18n import get_text
def create_welcome_tab(initial_lang: str, tabs: gr.Tabs):
"""
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-content"], scale=1):
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(equal_height=True):
welcome_chat_desc_btn = gr.Button(get_text('welcome_chat_desc', initial_lang))
welcome_code_desc_btn = gr.Button(get_text('welcome_code_desc', initial_lang))
welcome_writer_desc_btn = gr.Button(get_text('welcome_writer_desc', initial_lang))
gr.Markdown(" ")
welcome_model_links_header_md = gr.Markdown(get_text('welcome_model_links_header', initial_lang))
with gr.Row(equal_height=True):
welcome_hf_link_md = gr.Markdown(get_text('welcome_hf_link', initial_lang), padding=True, container=True)
welcome_hf_report_md = gr.Markdown(get_text('welcome_hf_report', initial_lang), padding=True, container=True)
welcome_x_account_md = gr.Markdown(get_text('welcome_x_account', initial_lang), padding=True, container=True)
gr.Markdown(" ")
welcome_lang_select_md = gr.Markdown(get_text('welcome_select_language', initial_lang))
with gr.Row():
with gr.Column(elem_classes=["language-buttons"]):
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' } })); }"
)
welcome_chat_desc_btn.click(
fn=lambda: gr.Tabs(selected="chat"),
inputs=[],
outputs=[tabs]
)
welcome_code_desc_btn.click(
fn=lambda: gr.Tabs(selected="code"),
inputs=[],
outputs=[tabs]
)
welcome_writer_desc_btn.click(
fn=lambda: gr.Tabs(selected="writer"),
inputs=[],
outputs=[tabs]
)
# 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_btn,
"code_description": welcome_code_desc_btn,
"writer_description": welcome_writer_desc_btn,
"model_links_header": welcome_model_links_header_md,
"hf_link": welcome_hf_link_md,
"hf_report": welcome_hf_report_md,
"x_account": welcome_x_account_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=get_text('welcome_chat_desc', lang)),
components["code_description"]: gr.update(value=get_text('welcome_code_desc', lang)),
components["writer_description"]: gr.update(value=get_text('welcome_writer_desc', lang)),
components["model_links_header"]: gr.update(value=get_text('welcome_model_links_header', lang)),
components["hf_link"]: gr.update(value=get_text('welcome_hf_link', lang)),
components["hf_report"]: gr.update(value=get_text('welcome_hf_report', lang)),
components["x_account"]: gr.update(value=get_text('welcome_x_account', lang)),
components["lang_select_header"]: gr.update(value=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