diff --git a/bitchat/Localizable.xcstrings b/bitchat/Localizable.xcstrings index f869ab85..a1ce3a9b 100644 --- a/bitchat/Localizable.xcstrings +++ b/bitchat/Localizable.xcstrings @@ -78651,6 +78651,1116 @@ } } }, + "app_info.settings.icon.neutral" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "محايد" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নিউট্রাল" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutral" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutral" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutro" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "خنثی" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutral" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutre" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ניטרלי" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "न्यूट्रल" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "netral" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutra" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ニュートラル" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "뉴트럴" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutral" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "न्यूट्रल" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutraal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutralna" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutro" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutro" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "нейтральная" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "neutral" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நியூட்ரல்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กลาง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "nötr" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "нейтральна" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "نیوٹرل" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "trung tính" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "中性" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "中性" + } + } + } + }, + "app_info.settings.icon.notes" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ملاحظات" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নোটস" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "notizen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "notes" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "notas" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "یادداشت‌ها" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "notes" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "notes" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פתקים" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नोट्स" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "catatan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "note" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "メモ" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "메모" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "nota" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "नोटहरू" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "notities" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "notatki" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "notas" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "notas" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "заметки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "anteckningar" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "குறிப்புகள்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "โน้ต" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "notlar" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "нотатки" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "نوٹس" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ghi chú" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "备忘录" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "備忘錄" + } + } + } + }, + "app_info.settings.icon.primary" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "bitchat" + } + } + } + }, + "app_info.settings.icon.quiet" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هادئ" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কোয়াইয়েট" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "leise" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "quiet" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "discreto" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آرام" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "quiet" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "discret" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שקטה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "क्वाइएट" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tenang" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "discreta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "クワイエット" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "콰이어트" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "senyap" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "शान्त" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "stil" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "cicha" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "discreto" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "discreto" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "тихая" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "tyst" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அமைதி" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เงียบ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "sessiz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "тиха" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "خاموش" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "yên" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "低调" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "低調" + } + } + } + }, + "app_info.settings.icon.subtitle" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أيقونات اختيارية منخفضة البروفايل. تسمية الشاشة الرئيسية ما زالت “bitchat”، والاسم الحقيقي يظهر في الإعدادات والبحث — يتغير الشكل فقط." + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ঐচ্ছিক লো-প্রোফাইল আইকন। হোম-স্ক্রিন লেবেল এখনও “bitchat”, আর আসল নাম সেটিংস ও সার্চে থাকে — শুধু গ্লিফ বদলায়।" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "optionale unauffällige icons. die home-screen-beschriftung lautet weiterhin „bitchat“, und der echte name erscheint weiter in einstellungen und suche — geändert wird nur das symbol." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "optional low-profile icons. the home-screen label still reads “bitchat”, and the real name still shows in settings and search — this only changes the glyph." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "iconos discretos opcionales. la etiqueta en la pantalla de inicio sigue diciendo “bitchat”, y el nombre real sigue en ajustes y búsqueda: solo cambia el glifo." + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آیکون‌های اختیاری کم‌جلوه. برچسب صفحه اصلی هنوز «bitchat» است و نام واقعی در تنظیمات و جستجو دیده می‌شود — فقط شکلک عوض می‌شود." + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "opsyonal na low-profile na icon. ang label sa home screen ay “bitchat” pa rin, at ang tunay na pangalan ay nasa settings at search pa rin — glyph lang ang nagbabago." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "icônes discrètes optionnelles. le libellé de l’écran d’accueil reste « bitchat », et le vrai nom apparaît encore dans réglages et recherche — seul le glyphe change." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אייקונים אופציונליים בעלי פרופיל נמוך. התווית במסך הבית עדיין “bitchat”, והשם האמיתי עדיין מופיע בהגדרות ובחיפוש — רק הגליף משתנה." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "वैकल्पिक लो-प्रोफ़ाइल आइकन। होम-स्क्रीन लेबल अभी भी “bitchat” है, और असली नाम सेटिंग्स व खोज में दिखता है — केवल ग्लिफ़ बदलता है।" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "ikon low-profile opsional. label layar beranda tetap “bitchat”, dan nama asli tetap di pengaturan serta pencarian — hanya glif yang berubah." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "icone discrete opzionali. l’etichetta sulla home resta “bitchat”, e il nome reale resta in impostazioni e ricerca — cambia solo il glifo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "任意の控えめなアイコン。ホーム画面のラベルは引き続き「bitchat」で、設定や検索にも本名が出ます。変わるのはアイコン画像だけです。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "선택적 저프로필 아이콘. 홈 화면 라벨은 여전히 “bitchat”이고, 설정과 검색에도 실제 이름이 보입니다. 바뀌는 것은 글자 모양뿐입니다." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "ikon berprofil rendah pilihan. label skrin utama masih “bitchat”, dan nama sebenar masih dalam tetapan serta carian — hanya glif berubah." + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "वैकल्पिक लो-प्रोफाइल आइकन। होम-स्क्रिन लेबल अझै “bitchat” छ, र वास्तविक नाम सेटिङ र खोजमा देखिन्छ — ग्लिफ मात्र परिवर्तन हुन्छ।" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "optionele discrete pictogrammen. het label op het beginscherm blijft “bitchat”, en de echte naam blijft in instellingen en zoeken — alleen het icoon verandert." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "opcjonalne dyskretne ikony. etykieta na ekranie głównym nadal brzmi „bitchat”, a prawdziwa nazwa nadal widać w ustawieniach i wyszukiwaniu — zmienia się tylko glif." + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "ícones discretos opcionais. o rótulo no ecrã principal continua “bitchat”, e o nome real continua em definições e pesquisa — só muda o glifo." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "ícones discretos opcionais. o rótulo na tela inicial continua “bitchat”, e o nome real continua em ajustes e busca — só muda o glifo." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "необязательные скромные значки. подпись на домашнем экране по-прежнему «bitchat», а настоящее имя видно в настройках и поиске — меняется только глиф." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "valfria diskreta ikoner. etiketten på hemskärmen står fortfarande “bitchat”, och det riktiga namnet syns fortfarande i inställningar och sök — bara glyfen ändras." + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "விருப்ப குறைந்த தோற்ற ஐகான்கள். முகப்புத் திரை லேபிள் இன்னும் “bitchat”; உண்மைப் பெயர் அமைப்புகள் மற்றும் தேடலில் தெரியும் — கிளிஃப் மட்டும் மாறும்." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไอคอนโปรไฟล์ต่ำแบบเลือกได้ ป้ายบนโฮมสกรีนยังเป็น “bitchat” และชื่อจริงยังโชว์ในตั้งค่าและการค้นหา — เปลี่ยนเฉพาะรูปไอคอน" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "isteğe bağlı düşük profilli simgeler. ana ekran etiketi hâlâ “bitchat” yazar; gerçek ad ayarlar ve aramada görünür — yalnızca glif değişir." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "необов’язкові стримані іконки. підпис на головному екрані й далі «bitchat», а справжня назва лишається в параметрах і пошуку — змінюється лише гліф." + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "اختیاری لو-پروفائل آئیکنز۔ ہوم اسکرین لیبل اب بھی “bitchat” ہے، اور اصل نام سیٹنگز اور تلاش میں دکھتا ہے — صرف گلف بدلتا ہے۔" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "biểu tượng thấp profile tùy chọn. nhãn màn hình chính vẫn là “bitchat”, và tên thật vẫn hiện trong cài đặt và tìm kiếm — chỉ đổi glyph." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "可选低调图标。主屏幕标签仍显示“bitchat”,设置和搜索里仍是真名——只改图标字形。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "可選低調圖示。主畫面標籤仍顯示「bitchat」,設定與搜尋仍是真名——只改圖示字形。" + } + } + } + }, + "app_info.settings.icon.title" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أيقونة الشاشة الرئيسية" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "হোম স্ক্রিন আইকন" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "HOME-SCREEN-SYMBOL" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "HOME SCREEN ICON" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "ICONO DE INICIO" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آیکون صفحه اصلی" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "ICON SA HOME SCREEN" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ICÔNE ÉCRAN D’ACCUEIL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סמל מסך הבית" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "होम स्क्रीन आइकन" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "IKON LAYAR BERANDA" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "ICONA SCHERMATA HOME" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ホーム画面アイコン" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "홈 화면 아이콘" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "IKON SKRIN UTAMA" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "होम स्क्रिन आइकन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "BEGINSCHERMICOON" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "IKONA EKRANU GŁÓWNEGO" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "ÍCONE DO ECRÃ PRINCIPAL" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "ÍCONE DA TELA INICIAL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ЗНАЧОК ДОМАШНЕГО ЭКРАНА" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "HEMSKÄRMSIKON" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "முகப்புத் திரை ஐகான்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไอคอนหน้าจอโฮม" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ANA EKRAN SİMGESİ" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "ІКОНКА ГОЛОВНОГО ЕКРАНА" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ہوم اسکرین آئیکن" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "BIỂU TƯỢNG MÀN HÌNH CHÍNH" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "主屏幕图标" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "主畫面圖示" + } + } + } + }, "app_info.settings.language.picker_label" : { "comment" : "Label of the app language picker row in settings", "extractionState" : "manual", diff --git a/bitchat/Services/AlternateAppIconSettings.swift b/bitchat/Services/AlternateAppIconSettings.swift index e713882a..8b3ca8b7 100644 --- a/bitchat/Services/AlternateAppIconSettings.swift +++ b/bitchat/Services/AlternateAppIconSettings.swift @@ -67,11 +67,10 @@ enum AlternateAppIconSettings { } } - // periphery:ignore - convenience for iOS settings; storage APIs below are - // what panic wipe and tests exercise on the macOS scan. + /// Current preference (UserDefaults). The App Info picker calls + /// `setSelected` directly — no setter here. static var selected: Icon { - get { selected(in: .standard) } - set { setSelected(newValue, in: .standard, applySystem: true) } + selected(in: .standard) } static func selected(in defaults: UserDefaults) -> Icon { @@ -95,9 +94,12 @@ enum AlternateAppIconSettings { apply(selected(in: .standard)) } + /// Panic wipe clears the *stored* preference only — do not call `apply`. + /// `setAlternateIconName` pops a system alert that names "bitchat", which + /// would un-disguise the phone at the worst moment. The home-screen glyph + /// stays until the next intentional picker change or relaunch policy. static func reset(in defaults: UserDefaults = .standard) { defaults.removeObject(forKey: storageKey) - apply(.primary) } private static func apply(_ icon: Icon) { diff --git a/bitchat/Views/AppInfoView.swift b/bitchat/Views/AppInfoView.swift index 59c48ab2..63c7c329 100644 --- a/bitchat/Views/AppInfoView.swift +++ b/bitchat/Views/AppInfoView.swift @@ -65,7 +65,7 @@ struct AppInfoView: View { static let tabInfo = String(localized: "app_info.tab.info", defaultValue: "info", comment: "Segmented control label for the info pane of the app info sheet") static let iconTitle = String(localized: "app_info.settings.icon.title", defaultValue: "HOME SCREEN ICON", comment: "Section header (uppercase) for alternate app icon picker") // periphery:ignore - iOS App Info settings UI - static let iconSubtitle = String(localized: "app_info.settings.icon.subtitle", defaultValue: "optional low-profile icons. the real app name still shows in settings and search — this only changes the home-screen glyph.", comment: "Caption under the alternate app icon picker explaining the limits of disguise") // periphery:ignore - iOS App Info settings UI + static let iconSubtitle = String(localized: "app_info.settings.icon.subtitle", defaultValue: "optional low-profile icons. the home-screen label still reads “bitchat”, and the real name still shows in settings and search — this only changes the glyph.", comment: "Caption under the alternate app icon picker explaining the limits of disguise") // periphery:ignore - iOS App Info settings UI static let connectivityTitle = String(localized: "app_info.settings.connectivity.title", defaultValue: "CONNECTIVITY", comment: "Section header (uppercase) for the connectivity toggles: mesh bridge, internet gateway, tor routing") diff --git a/bitchatTests/Services/AlternateAppIconSettingsTests.swift b/bitchatTests/Services/AlternateAppIconSettingsTests.swift index 66405f19..39d25e7d 100644 --- a/bitchatTests/Services/AlternateAppIconSettingsTests.swift +++ b/bitchatTests/Services/AlternateAppIconSettingsTests.swift @@ -3,9 +3,13 @@ import Testing @testable import bitchat struct AlternateAppIconSettingsTests { - private func makeDefaults() -> UserDefaults { + private func makeDefaults() -> (suite: String, defaults: UserDefaults) { let suite = "bitchat.tests.alticon.\(UUID().uuidString)" - return UserDefaults(suiteName: suite)! + return (suite, UserDefaults(suiteName: suite)!) + } + + private func cleanup(_ suite: String) { + UserDefaults().removePersistentDomain(forName: suite) } @Test func primarySystemNameIsNil() { @@ -24,7 +28,8 @@ struct AlternateAppIconSettingsTests { } @Test func selectedPersistsRawValueWithoutTouchingSystem() { - let defaults = makeDefaults() + let (suite, defaults) = makeDefaults() + defer { cleanup(suite) } #expect(AlternateAppIconSettings.selected(in: defaults) == .primary) AlternateAppIconSettings.setSelected(.notes, in: defaults, applySystem: false) @@ -36,10 +41,12 @@ struct AlternateAppIconSettingsTests { #expect(AlternateAppIconSettings.selected(in: defaults) == .primary) } - @Test func resetClearsStoredPreference() { - let defaults = makeDefaults() + @Test func resetClearsStoredPreferenceWithoutApplyingPrimary() { + let (suite, defaults) = makeDefaults() + defer { cleanup(suite) } AlternateAppIconSettings.setSelected(.quiet, in: defaults, applySystem: false) - defaults.removeObject(forKey: AlternateAppIconSettings.storageKey) + AlternateAppIconSettings.reset(in: defaults) + #expect(defaults.string(forKey: AlternateAppIconSettings.storageKey) == nil) #expect(AlternateAppIconSettings.selected(in: defaults) == .primary) } }