add language info

This commit is contained in:
Your Name 2026-01-09 03:27:48 +03:00
parent f2e5126fb7
commit d68451230f
4 changed files with 136 additions and 0 deletions

14
app.py
View File

@ -6,12 +6,15 @@ from PySide6.QtWidgets import QApplication
import build_info
from audio.system_volume import set_volume
from themes import THEME_DAY, THEME_NIGHT
from ui.language_dialog import LanguageDialog
from ui.main_window_new import MainWindowNew
def run_app():
app = QApplication(sys.argv)
_apply_reset_if_requested()
_ensure_language_selected(app)
_apply_startup_sound_defaults()
_apply_startup_display_defaults()
window = MainWindowNew(app)
@ -61,3 +64,14 @@ def _apply_reset_if_requested():
if settings_path.exists():
settings_path.unlink()
reset_marker.unlink()
def _ensure_language_selected(app: QApplication):
settings = QSettings("car_ui", "ui")
if settings.contains("ui/language"):
return
theme_key = settings.value("display/theme", "night")
app.setStyleSheet(THEME_NIGHT if theme_key != "day" else THEME_DAY)
dialog = LanguageDialog()
if dialog.exec() == LanguageDialog.Accepted:
settings.setValue("ui/language", dialog.selected_language())

View File

@ -167,4 +167,27 @@ QMenu::item:selected { background: #F3F4F6; }
font-size: 14px;
font-weight: 600;
}
#LanguageDialog { background: #F4F6F8; }
#LanguageCard {
background: #FFFFFF;
border-radius: 16px;
border: 1px solid #E5E7EB;
}
#LanguageTitle { color: #111827; }
#LanguageOption {
background: #FFFFFF;
color: #111827;
border-radius: 12px;
border: 1px solid #E5E7EB;
padding: 8px 14px;
}
#LanguageOption:checked { background: #E5E7EB; }
#LanguageConfirm {
background: #111827;
color: #FFFFFF;
border-radius: 12px;
padding: 10px 16px;
}
#LanguageConfirm:hover { background: #0B1220; }
"""

View File

@ -154,4 +154,26 @@ QMenu::item:selected { background: #1B2330; }
font-size: 14px;
font-weight: 600;
}
#LanguageDialog { background: #0B0E11; }
#LanguageCard {
background: #141A22;
border-radius: 16px;
}
#LanguageTitle { color: #E6EAF0; }
#LanguageOption {
background: #141A22;
color: #E6EAF0;
border-radius: 12px;
border: 1px solid #1B2330;
padding: 8px 14px;
}
#LanguageOption:checked { background: #2A3A52; }
#LanguageConfirm {
background: #2A3A52;
color: #E6EAF0;
border-radius: 12px;
padding: 10px 16px;
}
#LanguageConfirm:hover { background: #344968; }
"""

77
ui/language_dialog.py Normal file
View File

@ -0,0 +1,77 @@
from PySide6.QtCore import Qt, QSize
from PySide6.QtGui import QFont
from PySide6.QtWidgets import (
QDialog,
QWidget,
QLabel,
QVBoxLayout,
QHBoxLayout,
QPushButton,
QButtonGroup,
QSpacerItem,
QSizePolicy,
)
class LanguageDialog(QDialog):
def __init__(self):
super().__init__()
self.setObjectName("LanguageDialog")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
self.setWindowModality(Qt.ApplicationModal)
self.setMinimumSize(QSize(1024, 600))
root = QVBoxLayout(self)
root.setContentsMargins(24, 24, 24, 24)
root.setSpacing(16)
root.addItem(QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding))
card = QWidget()
card.setObjectName("LanguageCard")
card_layout = QVBoxLayout(card)
card_layout.setContentsMargins(18, 18, 18, 18)
card_layout.setSpacing(14)
title = QLabel("Сначала выберите язык")
title.setObjectName("LanguageTitle")
title.setFont(QFont("", 20, 700))
title.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
options_row = QHBoxLayout()
options_row.setContentsMargins(0, 0, 0, 0)
options_row.setSpacing(12)
self._group = QButtonGroup(self)
self._group.setExclusive(True)
self._btn_ru = QPushButton("Русский")
self._btn_ru.setObjectName("LanguageOption")
self._btn_ru.setCheckable(True)
self._btn_ru.setChecked(True)
self._btn_ru.setMinimumHeight(48)
self._btn_ru.setFont(QFont("", 14, 600))
self._group.addButton(self._btn_ru)
options_row.addWidget(self._btn_ru, 1)
options_row.addStretch(1)
confirm = QPushButton("Продолжить")
confirm.setObjectName("LanguageConfirm")
confirm.setMinimumHeight(52)
confirm.setFont(QFont("", 15, 700))
confirm.clicked.connect(self.accept)
card_layout.addWidget(title)
card_layout.addLayout(options_row)
card_layout.addWidget(confirm)
root.addWidget(card)
root.addItem(QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding))
def reject(self):
# Ignore reject to force a language choice.
return
def selected_language(self) -> str:
return "ru"