From 748bff63ea9d485cadb72887edd6084750be793c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Horv=C3=A1th=20Gergely?= Date: Sun, 15 Feb 2026 23:22:32 +0100 Subject: [PATCH] Send language to Watch and handle locale changes iOS: Update WatchSessionManager to send the current language via WCSession.default.updateApplicationContext with logging and error handling, in addition to existing transferUserInfo. Dart: await initLang during startup and add dispatcher.onLocaleChanged handler that re-initializes language when the app is in auto-language mode, logs locale changes, and triggers a global UI update. --- firka/ios/Runner/WatchSessionManager.swift | 7 +++++++ firka/lib/main.dart | 23 +++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/firka/ios/Runner/WatchSessionManager.swift b/firka/ios/Runner/WatchSessionManager.swift index 2801aa85..8acd1833 100644 --- a/firka/ios/Runner/WatchSessionManager.swift +++ b/firka/ios/Runner/WatchSessionManager.swift @@ -242,6 +242,13 @@ class WatchSessionManager: NSObject, WCSessionDelegate { return } + do { + try WCSession.default.updateApplicationContext(["language": languageCode]) + print("[WatchSessionManager] Language '\(languageCode)' sent to Watch via applicationContext") + } catch { + print("[WatchSessionManager] Failed to update applicationContext for language: \(error)") + } + WCSession.default.transferUserInfo([ "id": "language_update", "language": languageCode diff --git a/firka/lib/main.dart b/firka/lib/main.dart index 47d52a46..047a4314 100644 --- a/firka/lib/main.dart +++ b/firka/lib/main.dart @@ -190,7 +190,7 @@ void initTheme(AppInitialization data) { Future _initData(AppInitialization init) async { await init.settings.load(init.isar.appSettingsModels); - initLang(init); + await initLang(init); initTheme(init); init.settings = SettingsStore(init.l10n); await init.settings.load(init.isar.appSettingsModels); @@ -202,6 +202,27 @@ Future _initData(AppInitialization init) async { initTheme(init); }; + dispatcher.onLocaleChanged = () { + final languageSetting = + init.settings.group("settings").subGroup("application")["language"] + as SettingsItemsRadio; + final isAutoLanguage = languageSetting.activeIndex == 0; + if (!isAutoLanguage) { + return; + } + + final previousLocale = init.l10n.localeName; + unawaited(() async { + await initLang(init); + final nextLocale = init.l10n.localeName; + if (previousLocale != nextLocale) { + logger.info( + "[Init] System locale changed in auto mode: $previousLocale -> $nextLocale"); + } + globalUpdate.update(); + }()); + }; + resetOldTimeTableCache(init.isar); resetOldHomeworkCache(init.isar);