header.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # Copyright (C) 2025 AIDC-AI
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. # Unless required by applicable law or agreed to in writing, software
  8. # distributed under the License is distributed on an "AS IS" BASIS,
  9. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. # See the License for the specific language governing permissions and
  11. # limitations under the License.
  12. """
  13. Header components for web UI
  14. """
  15. import streamlit as st
  16. from web.i18n import tr, get_available_languages, set_language
  17. from web.utils.streamlit_helpers import safe_rerun
  18. def render_header():
  19. """Render page header with title and language selector"""
  20. col1, col2 = st.columns([4, 1])
  21. with col1:
  22. st.markdown(f"<h3>{tr('app.title')}</h3>", unsafe_allow_html=True)
  23. with col2:
  24. render_language_selector()
  25. def render_language_selector():
  26. """Render language selector at the top"""
  27. languages = get_available_languages()
  28. lang_options = [f"{code} - {name}" for code, name in languages.items()]
  29. current_lang = st.session_state.get("language", "zh_CN")
  30. current_index = list(languages.keys()).index(current_lang) if current_lang in languages else 0
  31. selected = st.selectbox(
  32. tr("language.select"),
  33. options=lang_options,
  34. index=current_index,
  35. label_visibility="collapsed"
  36. )
  37. selected_code = selected.split(" - ")[0]
  38. if selected_code != current_lang:
  39. st.session_state.language = selected_code
  40. set_language(selected_code)
  41. safe_rerun()