Skip to content

Commit 5804ec5

Browse files
committed
Implement cross-platform system UI language detection
1 parent 41b5452 commit 5804ec5

File tree

4 files changed

+54
-9
lines changed

4 files changed

+54
-9
lines changed

app/__main__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from qasync import QApplication, run
77

88
from app.builtin.gitlab_updater import GitlabUpdater
9+
from app.builtin.locale import detect_system_ui_language
910
from app.main_window import MainWindow
1011
from qdarktheme import enable_hi_dpi
1112

@@ -48,7 +49,7 @@ def main(enable_updater: bool = True):
4849

4950
# i18n
5051
translator = QTranslator()
51-
lang_code = QLocale.system().name()
52+
lang_code = detect_system_ui_language()
5253
translator.load(f":/i18n/{lang_code}.qm")
5354
app.installTranslator(translator)
5455

app/builtin/locale.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
def detect_system_ui_language():
2+
import platform
3+
system = platform.system()
4+
5+
if system == "Windows":
6+
import ctypes, locale
7+
lang_id = ctypes.windll.kernel32.GetUserDefaultUILanguage()
8+
return locale.windows_locale.get(lang_id)
9+
10+
elif system == "Darwin": # macOS
11+
from Foundation import NSUserDefaults
12+
langs = NSUserDefaults.standardUserDefaults().objectForKey_("AppleLanguages")
13+
return langs[0] if langs else None
14+
15+
else: # Linux
16+
import os
17+
return (os.environ.get("LANG") or
18+
os.environ.get("LC_ALL") or
19+
os.environ.get("LC_MESSAGES"))

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@ dependencies = [
1010
"qasync>=0.28.0",
1111
"glom>=24.11.0",
1212
"pyside6>=6.1.3",
13+
"pyqtdarktheme-fork>=2.3.4",
1314
"singleton-decorator>=1.0.0",
1415
]
1516

1617
[dependency-groups]
1718
dev = [
1819
"nuitka>=2.8.1",
1920
"pyinstaller>=6.16.0",
20-
"pyside-cli>=0.3.1",
21+
"pyside-cli>=0.3.2",
2122
"pytest>=8.3.5",
2223
"pytest-benchmark>=4.0.0",
2324
"pytest-cov>=5.0.0",

uv.lock

Lines changed: 31 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)