diff --git a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt index e1b1b5bf..b1a6fd24 100644 --- a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row @@ -35,12 +36,13 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.filled.ChevronRight +import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.CloudDownload import androidx.compose.material.icons.filled.Delete -import androidx.compose.material.icons.filled.Language import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Public import androidx.compose.material.icons.filled.Share +import androidx.compose.material.icons.filled.UnfoldMore import androidx.compose.material.icons.filled.Warning import androidx.compose.material.icons.filled.Wifi import androidx.compose.material.icons.outlined.Info @@ -122,71 +124,6 @@ private fun ThemeChip( } } -@Composable -private fun LanguagePickerDialog( - languages: List, - selectedLanguageTag: String, - onLanguageSelected: (String) -> Unit, - onDismiss: () -> Unit, -) { - AlertDialog( - onDismissRequest = onDismiss, - title = { Text(stringResource(R.string.about_select_language)) }, - text = { - LazyColumn(modifier = Modifier.fillMaxWidth()) { - item(key = "system") { - LanguageOptionRow( - label = stringResource(R.string.about_system_default), - selected = selectedLanguageTag.isEmpty(), - onClick = { onLanguageSelected("") }, - ) - } - items( - count = languages.size, - key = { index -> languages[index].languageTag }, - ) { index -> - val language = languages[index] - LanguageOptionRow( - label = language.endonym, - selected = selectedLanguageTag == language.languageTag, - onClick = { onLanguageSelected(language.languageTag) }, - ) - } - } - }, - confirmButton = { - TextButton(onClick = onDismiss) { - Text(stringResource(android.R.string.cancel)) - } - }, - ) -} - -@Composable -private fun LanguageOptionRow( - label: String, - selected: Boolean, - onClick: () -> Unit, -) { - Row( - modifier = Modifier - .fillMaxWidth() - .clickable(onClick = onClick) - .padding(vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - RadioButton( - selected = selected, - onClick = null, - ) - Spacer(modifier = Modifier.width(12.dp)) - Text( - text = label, - style = MaterialTheme.typography.bodyLarge, - ) - } -} - @Composable private fun LanguageSettingsRow( selectedLanguageName: String, @@ -196,40 +133,59 @@ private fun LanguageSettingsRow( modifier = Modifier .fillMaxWidth() .clickable(onClick = onClick) - .padding(horizontal = 16.dp, vertical = 13.dp), + .padding(horizontal = 16.dp, vertical = 15.dp), verticalAlignment = Alignment.CenterVertically, ) { - Icon( - imageVector = Icons.Filled.Language, - contentDescription = null, - tint = MaterialTheme.colorScheme.primary, - modifier = Modifier.size(22.dp), - ) - Spacer(modifier = Modifier.width(16.dp)) Text( - text = stringResource(R.string.about_language), - style = MaterialTheme.typography.bodyMedium, - fontWeight = FontWeight.Medium, + text = stringResource(R.string.about_app_language), + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.SemiBold, modifier = Modifier.weight(1f), ) Text( text = selectedLanguageName, style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant, + color = MaterialTheme.colorScheme.primary, maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier.weight(1f, fill = false), ) Spacer(modifier = Modifier.width(8.dp)) Icon( - imageVector = Icons.Filled.ChevronRight, + imageVector = Icons.Filled.UnfoldMore, contentDescription = null, tint = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.size(20.dp), + modifier = Modifier.size(18.dp), ) } } +@Composable +private fun LanguageMenuItem( + label: String, + selected: Boolean, + onClick: () -> Unit, +) { + DropdownMenuItem( + text = { + Text( + text = label, + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = onClick, + trailingIcon = { + if (selected) { + Icon( + imageVector = Icons.Filled.Check, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + ) + } + }, + ) +} + /** * Unified settings toggle row with icon, title, subtitle, and switch * Apple-like design with proper spacing @@ -377,21 +333,6 @@ fun AboutSheet( } var showLanguagePicker by remember { mutableStateOf(false) } - if (showLanguagePicker) { - LanguagePickerDialog( - languages = supportedLanguages, - selectedLanguageTag = selectedLanguageTag, - onLanguageSelected = { languageTag -> - showLanguagePicker = false - if (languageTag != selectedLanguageTag) { - selectedLanguageTag = languageTag - LanguagePreferenceManager.setLanguage(languageTag) - } - }, - onDismiss = { showLanguagePicker = false }, - ) - } - if (isPresented) { BitchatBottomSheet( modifier = modifier, @@ -482,17 +423,52 @@ fun AboutSheet( Column { AboutSectionLabel(text = stringResource(R.string.about_language)) - Surface( + BoxWithConstraints( modifier = Modifier .fillMaxWidth() .padding(horizontal = AboutHorizontalPadding), - color = colorScheme.surface, - shape = AboutCardShape, ) { - LanguageSettingsRow( - selectedLanguageName = selectedLanguageName, - onClick = { showLanguagePicker = true }, - ) + Surface( + modifier = Modifier.fillMaxWidth(), + color = colorScheme.surface, + shape = AboutCardShape, + ) { + LanguageSettingsRow( + selectedLanguageName = selectedLanguageName, + onClick = { showLanguagePicker = true }, + ) + } + DropdownMenu( + expanded = showLanguagePicker, + onDismissRequest = { showLanguagePicker = false }, + modifier = Modifier.width(maxWidth), + ) { + LanguageMenuItem( + label = stringResource(R.string.about_system_default), + selected = selectedLanguageTag.isEmpty(), + onClick = { + showLanguagePicker = false + if (selectedLanguageTag.isNotEmpty()) { + selectedLanguageTag = "" + LanguagePreferenceManager.setLanguage("") + } + }, + ) + HorizontalDivider() + supportedLanguages.forEach { language -> + LanguageMenuItem( + label = language.endonym, + selected = selectedLanguageTag == language.languageTag, + onClick = { + showLanguagePicker = false + if (language.languageTag != selectedLanguageTag) { + selectedLanguageTag = language.languageTag + LanguagePreferenceManager.setLanguage(language.languageTag) + } + }, + ) + } + } } } } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 5ff9e58b..90769e98 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -390,6 +390,7 @@ تُركت ملاحظة واحدة هنا — انقر للقراءة تُركت %d ملاحظات هنا — انقر للقراءة اللغة + لغة التطبيق إعداد النظام الافتراضي اختر اللغة diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 6a68b222..23974fb7 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -377,6 +377,7 @@ এখানে 1টি নোট রাখা আছে — পড়তে ট্যাপ করুন এখানে %dটি নোট রাখা আছে — পড়তে ট্যাপ করুন ভাষা + অ্যাপের ভাষা সিস্টেম ডিফল্ট ভাষা নির্বাচন করুন diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index eb613160..ec8d1f1e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -391,6 +391,7 @@ 1 notiz hier hinterlassen — tippen zum lesen %d notizen hier hinterlassen — tippen zum lesen Sprache + App-Sprache Systemstandard Sprache auswählen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index fe5a9cc7..5b44bd1b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -390,6 +390,7 @@ 1 nota dejada aquí — toca para leer %d notas dejadas aquí — toca para leer Idioma + Idioma de la app Predeterminado del sistema Seleccionar idioma diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index e15eea5b..4b5dca76 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -377,6 +377,7 @@ ۱ یادداشت اینجا باقی مانده — برای خواندن ضربه بزنید %d یادداشت اینجا باقی مانده — برای خواندن ضربه بزنید زبان + زبان برنامه پیش‌فرض سیستم انتخاب زبان diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index dba9aea1..601dee04 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -394,6 +394,7 @@ 1 note ang naiwan dito — i-tap para basahin %d note ang naiwan dito — i-tap para basahin Wika + Wika ng app Default ng system Pumili ng wika diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4c53c77f..556d4103 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -408,6 +408,7 @@ 1 note laissée ici — appuyez pour lire %d notes laissées ici — appuyez pour lire Langue + Langue de l’appli Langue du système Choisir la langue diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 54712e1b..c60b5a9a 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -58,6 +58,7 @@ פתק אחד הושאר כאן — הקש לקריאה %d פתקים הושארו כאן — הקש לקריאה שפה + שפת האפליקציה ברירת המחדל של המערכת בחירת שפה diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 13a40c68..0d803bb1 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -390,6 +390,7 @@ यहाँ 1 नोट छोड़ा गया है — पढ़ने के लिए टैप करें यहाँ %d नोट छोड़े गए हैं — पढ़ने के लिए टैप करें भाषा + ऐप की भाषा सिस्टम डिफ़ॉल्ट भाषा चुनें diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 962af5b0..244a7ab6 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -390,6 +390,7 @@ 1 catatan ditinggalkan di sini — ketuk untuk membaca %d catatan ditinggalkan di sini — ketuk untuk membaca Bahasa + Bahasa aplikasi Default sistem Pilih bahasa diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 393a7f1c..00d31cee 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -423,6 +423,7 @@ 1 nota lasciata qui — tocca per leggere %d note lasciate qui — tocca per leggere Lingua + Lingua dell’app Predefinita di sistema Seleziona lingua diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 8d7ed0e6..6451731f 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -390,6 +390,7 @@ ここに1件のメモがあります — タップして読む ここに%d件のメモがあります — タップして読む 言語 + アプリの言語 システムのデフォルト 言語を選択 diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 18753531..9003398e 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -377,6 +377,7 @@ აქ 1 ჩანაწერია დატოვებული — წასაკითხად შეეხეთ აქ %d ჩანაწერია დატოვებული — წასაკითხად შეეხეთ ენა + აპის ენა სისტემის ნაგულისხმევი ენის არჩევა diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 435691fa..7f60c8f0 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -390,6 +390,7 @@ 여기 남겨진 쪽지 1개 — 탭하여 읽기 여기 남겨진 쪽지 %d개 — 탭하여 읽기 언어 + 앱 언어 시스템 기본값 언어 선택 diff --git a/app/src/main/res/values-mg/strings.xml b/app/src/main/res/values-mg/strings.xml index 1dade6f0..a1c75313 100644 --- a/app/src/main/res/values-mg/strings.xml +++ b/app/src/main/res/values-mg/strings.xml @@ -403,6 +403,7 @@ naoty 1 no navela teto — tsindrio raha hamaky naoty %d no navela teto — tsindrio raha hamaky Fiteny + Fitenin’ny app Fitenin’ny rafitra Safidio ny fiteny diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 0e673a37..625b9cf2 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -45,6 +45,7 @@ 1 nota ditinggalkan di sini — ketik untuk baca %d nota ditinggalkan di sini — ketik untuk baca Bahasa + Bahasa aplikasi Lalai sistem Pilih bahasa diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index be59a559..e9e8084c 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -394,6 +394,7 @@ यहाँ 1 नोट छोडिएको छ — पढ्न ट्याप गर्नुहोस् यहाँ %d नोटहरू छोडिएका छन् — पढ्न ट्याप गर्नुहोस् भाषा + एपको भाषा प्रणालीको पूर्वनिर्धारित भाषा छान्नुहोस् diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ff35eae6..9c3583ce 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -421,6 +421,7 @@ 1 notitie hier achtergelaten — tik om te lezen %d notities hier achtergelaten — tik om te lezen Taal + App-taal Systeemstandaard Taal selecteren diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index 8d9ee0db..da3638db 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -377,6 +377,7 @@ ایتھے 1 نوٹ چھڈیا گیا — پڑھݨ لئی ٹیپ کرو ایتھے %d نوٹس چھڈے گئے — پڑھݨ لئی ٹیپ کرو بولی + ایپ دی بولی سسٹم دی ڈیفالٹ بولی چݨو diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index bde25680..e2e8a631 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -58,6 +58,7 @@ 1 notatka zostawiona tutaj — stuknij, aby przeczytać %d notatek zostawionych tutaj — stuknij, aby przeczytać Język + Język aplikacji Domyślny systemu Wybierz język diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3c2008b3..6139fc98 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -389,6 +389,7 @@ 1 nota deixada aqui — toque para ler %d notas deixadas aqui — toque para ler Idioma + Idioma do app Padrão do sistema Selecionar idioma diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 76adeff2..42d52b07 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -390,6 +390,7 @@ 1 nota deixada aqui — toque para ler %d notas deixadas aqui — toque para ler Idioma + Idioma da aplicação Predefinição do sistema Selecionar idioma diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 77f9c1ff..ddf70d2a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -384,6 +384,7 @@ здесь оставлена 1 заметка — нажмите, чтобы прочитать здесь оставлено заметок: %d — нажмите, чтобы прочитать Язык + Язык приложения Системный язык Выбрать язык diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 7b21fd60..237d3a0d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -382,6 +382,7 @@ 1 anteckning lämnad här — tryck för att läsa %d anteckningar lämnade här — tryck för att läsa Språk + Appspråk Systemstandard Välj språk diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 5a303157..b086f191 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -45,6 +45,7 @@ இங்கே 1 குறிப்பு விடப்பட்டுள்ளது — படிக்க தட்டவும் இங்கே %d குறிப்புகள் விடப்பட்டுள்ளன — படிக்க தட்டவும் மொழி + பயன்பாட்டு மொழி கணினி இயல்புநிலை மொழியைத் தேர்ந்தெடுக்கவும் diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 7af338eb..72fea350 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -377,6 +377,7 @@ มี 1 โน้ตทิ้งไว้ที่นี่ — แตะเพื่ออ่าน มี %d โน้ตทิ้งไว้ที่นี่ — แตะเพื่ออ่าน ภาษา + ภาษาของแอป ค่าเริ่มต้นของระบบ เลือกภาษา diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 6158fb08..2da58993 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -382,6 +382,7 @@ buraya 1 not bırakıldı — okumak için dokun buraya %d not bırakıldı — okumak için dokun Dil + Uygulama dili Sistem varsayılanı Dil seçin diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 662890c0..8af93363 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -45,6 +45,7 @@ тут залишено 1 нотатку — торкніться, щоб прочитати тут залишено %d нотаток — торкніться, щоб прочитати Мова + Мова застосунку Системна мова Вибрати мову diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 9cc214de..00b89dde 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -390,6 +390,7 @@ یہاں 1 نوٹ چھوڑا گیا ہے — پڑھنے کے لیے تھپتھپائیں یہاں %d نوٹ چھوڑے گئے ہیں — پڑھنے کے لیے تھپتھپائیں زبان + ایپ کی زبان سسٹم ڈیفالٹ زبان منتخب کریں diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 226eae82..9a8cae47 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -377,6 +377,7 @@ có 1 ghi chú để lại ở đây — chạm để đọc có %d ghi chú để lại ở đây — chạm để đọc Ngôn ngữ + Ngôn ngữ ứng dụng Mặc định hệ thống Chọn ngôn ngữ diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 3a51c135..3a93a7f4 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -57,6 +57,7 @@ 这里留有 1 条留言 — 点按阅读 这里留有 %d 条留言 — 点按阅读 语言 + 应用语言 跟随系统 选择语言 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ce778247..77ed5799 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -57,6 +57,7 @@ 這裡留有 1 則留言 — 點按閱讀 這裡留有 %d 則留言 — 點按閱讀 語言 + 應用程式語言 跟隨系統 選擇語言 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index b142e9d2..7b8f937e 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -407,6 +407,7 @@ 这里留有 1 条留言 — 点按阅读 这里留有 %d 条留言 — 点按阅读 语言 + 应用语言 跟随系统 选择语言 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c415a569..d8f111ea 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -568,6 +568,7 @@ Bluetooth Recommended Language + App language System default Select language diff --git a/app/src/test/kotlin/com/bitchat/android/ui/LanguageCatalogContractTest.kt b/app/src/test/kotlin/com/bitchat/android/ui/LanguageCatalogContractTest.kt index 1fa49ea8..b8720e19 100644 --- a/app/src/test/kotlin/com/bitchat/android/ui/LanguageCatalogContractTest.kt +++ b/app/src/test/kotlin/com/bitchat/android/ui/LanguageCatalogContractTest.kt @@ -34,6 +34,7 @@ class LanguageCatalogContractTest { fun `language picker strings exist in every locale pack`() { val requiredKeys = setOf( "about_language", + "about_app_language", "about_system_default", "about_select_language", )