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.
This commit is contained in:
Horváth Gergely
2026-02-15 23:22:32 +01:00
parent 812c1a008e
commit 748bff63ea
2 changed files with 29 additions and 1 deletions

View File

@@ -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

View File

@@ -190,7 +190,7 @@ void initTheme(AppInitialization data) {
Future<void> _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<void> _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);