53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
# Copyright (C) 2025 AIDC-AI
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""
|
|
Header components for web UI
|
|
"""
|
|
|
|
import streamlit as st
|
|
|
|
from web.i18n import tr, get_available_languages, set_language
|
|
from web.utils.streamlit_helpers import safe_rerun
|
|
|
|
|
|
def render_header():
|
|
"""Render page header with title and language selector"""
|
|
col1, col2 = st.columns([4, 1])
|
|
with col1:
|
|
st.markdown(f"<h3>{tr('app.title')}</h3>", unsafe_allow_html=True)
|
|
with col2:
|
|
render_language_selector()
|
|
|
|
|
|
def render_language_selector():
|
|
"""Render language selector at the top"""
|
|
languages = get_available_languages()
|
|
lang_options = [f"{code} - {name}" for code, name in languages.items()]
|
|
|
|
current_lang = st.session_state.get("language", "zh_CN")
|
|
current_index = list(languages.keys()).index(current_lang) if current_lang in languages else 0
|
|
|
|
selected = st.selectbox(
|
|
tr("language.select"),
|
|
options=lang_options,
|
|
index=current_index,
|
|
label_visibility="collapsed"
|
|
)
|
|
|
|
selected_code = selected.split(" - ")[0]
|
|
if selected_code != current_lang:
|
|
st.session_state.language = selected_code
|
|
set_language(selected_code)
|
|
safe_rerun()
|
|
|