bitchat/bitchatTests/Localization/PrimaryLocalizationKeys.json
Jonathan Boice 0f7bcf17ff
Refactor: Migrate to Swift String Catalogs (.xcstrings) (#691)
* Automated update of relay data - Sun Sep 21 06:26:33 UTC 2025

* chore(l10n): add empty string catalogs

* chore(l10n): populate string catalogs from legacy resources

* test(l10n): add catalog guardrail suite

* chore(l10n): remove legacy localization files

* fix: Add localization resources to Package.swift targets

- Add .process("Localization") to bitchat target resources
- Add .process("Localization") to bitchatTests target resources
- Resolves Bundle.module resource loading for localization files
- Enables proper localization testing in Swift Package Manager builds

* feat: Add Korean localization and convert to UTF-8 format

Korean Language Support:
- Add complete Korean (ko) localization with 191 strings from PR #686
- Include all app strings: UI, features, system messages, alerts
- Include all share extension strings: status messages, errors
- Verified 100% translation coverage for Korean locale

UTF-8 Format Conversion:
- Convert 23,047 Unicode escape sequences to readable UTF-8 characters
- Transform \u sequences (e.g. \u0625\u063a\u0644\u0627\u0642) to native text (إغلاق)
- Improve maintainability across all 15 supported locales
- Preserve all existing translations while enhancing readability

Locales supported: en, ar, de, es, fr, he, id, it, ja, ko, ne, pt-BR, ru, uk, zh-Hans

* test: Enhance dynamic localization test framework

Dynamic Test Framework:
- Replace hardcoded locale tests with data-driven approach
- Add testLocalizationExpectedValues() for dynamic locale validation
- Add testConfiguredLocalesCompleteness() for coverage verification
- Tests now read configuration from PrimaryLocalizationKeys.json

Expanded Test Coverage:
- Increase from 14 to 33 key validations (135% increase)
- Add critical UI strings: common actions, app info, security, sharing
- Cover 364 total string validations across 15 locales
- Include Korean validation with native Korean expected values

Test Categories Added:
- Common UI: cancel, close, copy actions
- App Info: encryption, offline features, app name
- Bluetooth: permission and settings alerts
- Security: verification badges and actions
- Share Extension: all status and error messages
- Content Actions: accessibility and user actions

Maintains 100% test success rate across all supported locales.

* fix: Convert plural strings to correct xcstrings format

Three plural strings (content.accessibility.people_count,
location_channels.row_title, location_notes.header) were using
incorrect format causing runtime String(format:) errors.

Migrated from stringUnit.variations structure to proper
substitutions.variations format across all 14 languages.

* refactor(l10n): migrate to native String(localized:) APIs

Remove L10n.string wrapper in favor of Swift's native localization APIs.
Migrate 100+ localization call sites to use String(localized:) and String(localized:defaultValue:) with string interpolation.

- Update catalog to use interpolation syntax (\(var)) instead of format specifiers (%@)
- Migrate simple strings to String(localized:)
- Migrate strings with arguments to String(localized:defaultValue:) with interpolation
- Keep format strings for plural substitutions (String(format:locale:))
- Remove bitchat/Utils/Localization.swift

Net result: -407 insertions, +130 deletions across 15 files

* fix(l10n): correct interpolation to use format strings

Interpolation in String(localized:defaultValue:) doesn't work as expected -
the interpolation happens at the call site before localization lookup.

Convert dynamic strings to use String(format:String(localized:),args) pattern:
- Update catalog entries from \(var) syntax to %@ placeholders
- Wrap String(localized:) calls with String(format:locale:) for dynamic values
- Affects 17 strings across 6 files

This fixes UI showing literal "\(geohash)" text instead of actual values.

* chore(l10n): remove invalid catalog entries

Remove auto-extracted literal strings (@, #, ✔︎, @%@, bitchat/) that were
generated without proper localization structure. These caused test
decoding failures.

* fix(l10n): remove unused auto-extracted format string

Remove '%@/%@' key that was auto-extracted by Xcode but never used.
This key only existed in English causing locale parity test failures
across all 13 other languages.

Fixes locale parity tests - all 8 localization tests now pass with
only expected failures (incomplete translations in some locales).

* fix(l10n): copy format string to all locales for 100% completion

Add %@/%@ format string to all 14 non-English locales. Format strings
are locale-independent so using the same value everywhere is correct.

This brings all locales to 100% completion (189/189 strings) to prevent
Xcode from reporting incomplete translations when building.

* fix(l10n): prevent auto-extraction of UI literals

Use Text(verbatim:) for non-localizable UI elements:
- App branding ("bitchat/")
- Symbols (@, #, ✔︎)
- Dynamic usernames (@username)
- Count ratios (reached/total)

This prevents Xcode from auto-extracting these literals into the
String Catalog when building through Xcode GUI, which was causing
locales to show 96% completion instead of 100%.

* chore(l10n): remove auto-extracted UI literal entries

Delete 5 auto-extracted keys from catalog that are now using Text(verbatim:):
- @, #, ✔︎, %@, %@/%@

These were showing as stale/incomplete in Xcode causing 97% completion.
All locales now at 100% (188/188 strings).

* fix(l10n): prevent AttributedString from extracting @ symbol

Use string interpolation "\\(at)" instead of literal "@" in
AttributedString to prevent Xcode from auto-extracting it to the
String Catalog during build.

This was the last string causing locales to show 99% instead of 100%.

* fix(l10n): add %@ as non-translatable key in all locales

Mark %@ as non-translatable and add to all 15 locales with same value.
This prevents Xcode from showing incomplete translations when it
auto-extracts this format specifier during GUI builds.

All locales remain at 100% (189/189 strings).

* refactor: move Localizable.xcstrings to bitchat root

Move bitchat/Localization/Localizable.xcstrings to bitchat/ (after LaunchScreen)
and remove empty Localization directory.

* fix(test): update catalog path in localization tests

Update test paths from bitchat/Localization/Localizable.xcstrings to
bitchat/Localizable.xcstrings after moving the file.

---------

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: jack <jackjackbits@users.noreply.github.com>
2025-09-29 22:31:59 +02:00

450 lines
25 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"app": [
"app_info.app_name",
"app_info.close",
"app_info.done",
"app_info.features.encryption.title",
"app_info.features.offline.title",
"app_info.warning.message",
"common.cancel",
"common.close",
"common.copy",
"common.ok",
"content.accessibility.people_count",
"content.accessibility.send_message",
"content.actions.title",
"content.alert.bluetooth_required.permission",
"content.alert.bluetooth_required.settings",
"content.alert.bluetooth_required.title",
"content.delivery.delivered_to",
"content.input.message_placeholder",
"fingerprint.action.mark_verified",
"fingerprint.badge.not_verified",
"fingerprint.badge.verified",
"fingerprint.title",
"location_channels.action.open_settings",
"location_channels.action.request_permissions",
"location_channels.title",
"location_notes.header",
"system.tor.started"
],
"shareExtension": [
"share.fallback.shared_link_title",
"share.status.failed_to_encode",
"share.status.no_shareable_content",
"share.status.nothing_to_share",
"share.status.shared_link",
"share.status.shared_text"
],
"expectedValues": {
"ar": {
"common.ok": "موافق",
"content.input.message_placeholder": "اكتب رسالة...",
"location_channels.title": "#قنوات الموقع",
"system.tor.started": "tor يعمل. كل الدردشة تمر عبر tor للخصوصية.",
"share.status.shared_text": "✓ تم إرسال النص إلى bitchat",
"share.status.shared_link": "✓ تم إرسال الرابط إلى bitchat",
"share.status.failed_to_encode": "تعذر ترميز الرابط",
"common.cancel": "إلغاء",
"common.close": "إغلاق",
"common.copy": "نسخ",
"app_info.close": "إغلاق",
"app_info.done": "تم",
"content.alert.bluetooth_required.permission": "تحتاج bitchat إلى إذن bluetooth للاتصال بالأجهزة القريبة. فعّل الوصول في الإعدادات.",
"content.alert.bluetooth_required.settings": "الإعدادات",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "تشفير طرف لطرف",
"app_info.features.offline.title": "تواصل بدون اتصال",
"fingerprint.badge.verified": "✓ مُتحقق",
"fingerprint.badge.not_verified": "⚠️ غير مُتحقق",
"fingerprint.action.mark_verified": "وضع علامة تم التحقق",
"location_channels.action.open_settings": "فتح الإعدادات",
"content.actions.title": "إجراءات",
"content.accessibility.send_message": "إرسال رسالة",
"share.status.nothing_to_share": "لا شيء لمشاركته",
"share.status.no_shareable_content": "لا محتوى قابلاً للمشاركة",
"share.fallback.shared_link_title": "رابط مشترك"
},
"de": {
"common.ok": "OK",
"content.input.message_placeholder": "nachricht eingeben...",
"location_channels.title": "#standort-kanäle",
"system.tor.started": "tor läuft. der gesamte chat wird über tor geleitet.",
"share.status.shared_text": "✓ text zu bitchat geteilt",
"share.status.shared_link": "✓ link zu bitchat geteilt",
"share.status.failed_to_encode": "link konnte nicht codiert werden",
"common.cancel": "abbrechen",
"common.close": "schließen",
"common.copy": "kopieren",
"app_info.close": "schließen",
"app_info.done": "FERTIG",
"content.alert.bluetooth_required.permission": "bitchat benötigt bluetooth-berechtigung, um sich mit geräten in der nähe zu verbinden. erlaube den zugriff in den einstellungen.",
"content.alert.bluetooth_required.settings": "einstellungen",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "end-to-end-verschlüsselung",
"app_info.features.offline.title": "offline-kommunikation",
"fingerprint.badge.verified": "✓ VERIFIZIERT",
"fingerprint.badge.not_verified": "⚠️ NICHT VERIFIZIERT",
"fingerprint.action.mark_verified": "als verifiziert markieren",
"location_channels.action.open_settings": "einstellungen öffnen",
"content.actions.title": "aktionen",
"content.accessibility.send_message": "nachricht senden",
"share.status.nothing_to_share": "nichts zum teilen",
"share.status.no_shareable_content": "kein teilbarer inhalt",
"share.fallback.shared_link_title": "geteilter link"
},
"es": {
"common.ok": "aceptar",
"content.input.message_placeholder": "escribe un mensaje...",
"location_channels.title": "#canales de ubicación",
"system.tor.started": "tor se inició. Todo el chat se enruta por Tor para privacidad.",
"share.status.shared_text": "✓ texto compartido con bitchat",
"share.status.shared_link": "✓ enlace compartido con bitchat",
"share.status.failed_to_encode": "no se pudo codificar el enlace",
"common.cancel": "cancelar",
"common.close": "cerrar",
"common.copy": "copiar",
"app_info.close": "cerrar",
"app_info.done": "LISTO",
"content.alert.bluetooth_required.permission": "bitChat necesita permiso de Bluetooth para conectarse con dispositivos cercanos. Habilita el acceso en Ajustes.",
"content.alert.bluetooth_required.settings": "ajustes",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "cifrado de extremo a extremo",
"app_info.features.offline.title": "comunicación sin conexión",
"fingerprint.badge.verified": "✓ VERIFICADO",
"fingerprint.badge.not_verified": "⚠️ NO VERIFICADO",
"fingerprint.action.mark_verified": "marcar como verificado",
"location_channels.action.open_settings": "abrir ajustes",
"content.actions.title": "acciones",
"content.accessibility.send_message": "enviar mensaje",
"share.status.nothing_to_share": "nada que compartir",
"share.status.no_shareable_content": "sin contenido que se pueda compartir",
"share.fallback.shared_link_title": "enlace compartido"
},
"fr": {
"common.ok": "OK",
"content.input.message_placeholder": "écris un message...",
"location_channels.title": "#canaux localisation",
"system.tor.started": "tor a démarré. tout le chat passe par tor pour la confidentialité.",
"share.status.shared_text": "✓ texte partagé vers bitchat",
"share.status.shared_link": "✓ lien partagé vers bitchat",
"share.status.failed_to_encode": "échec de l'encodage du lien",
"common.cancel": "annuler",
"common.close": "fermer",
"common.copy": "copier",
"app_info.close": "fermer",
"app_info.done": "TERMINÉ",
"content.alert.bluetooth_required.permission": "bitchat a besoin de l'autorisation bluetooth pour se connecter aux appareils proches. active l'accès dans réglages.",
"content.alert.bluetooth_required.settings": "réglages",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "chiffrement de bout en bout",
"app_info.features.offline.title": "communication hors ligne",
"fingerprint.badge.verified": "✓ VÉRIFIÉ",
"fingerprint.badge.not_verified": "⚠️ NON VÉRIFIÉ",
"fingerprint.action.mark_verified": "marquer comme vérifié",
"location_channels.action.open_settings": "ouvrir réglages",
"content.actions.title": "actions",
"content.accessibility.send_message": "envoyer le message",
"share.status.nothing_to_share": "rien à partager",
"share.status.no_shareable_content": "aucun contenu partageable",
"share.fallback.shared_link_title": "lien partagé"
},
"he": {
"common.ok": "OK",
"content.input.message_placeholder": "כתוב הודעה...",
"location_channels.title": "#ערוצי מיקום",
"system.tor.started": "tor פעיל. כל הצ'אט עובר דרך tor לפרטיות.",
"share.status.shared_text": "✓ הטקסט נשלח אל bitchat",
"share.status.shared_link": "✓ הקישור נשלח אל bitchat",
"share.status.failed_to_encode": "לא ניתן לקודד את הקישור",
"common.cancel": "ביטול",
"common.close": "סגור",
"common.copy": "העתק",
"app_info.close": "סגור",
"app_info.done": "בוצע",
"content.alert.bluetooth_required.permission": "bitchat צריכה הרשאת bluetooth כדי להתחבר למכשירים קרובים. אפשר גישה בהגדרות.",
"content.alert.bluetooth_required.settings": "הגדרות",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "הצפנה מקצה לקצה",
"app_info.features.offline.title": "תקשורת לא מקוונת",
"fingerprint.badge.verified": "✓ מאומת",
"fingerprint.badge.not_verified": "⚠️ לא מאומת",
"fingerprint.action.mark_verified": "סמן כמאומת",
"location_channels.action.open_settings": "פתח הגדרות",
"content.actions.title": "פעולות",
"content.accessibility.send_message": "שלח הודעה",
"share.status.nothing_to_share": "אין מה לשתף",
"share.status.no_shareable_content": "אין תוכן שניתן לשתף",
"share.fallback.shared_link_title": "קישור משותף"
},
"id": {
"common.ok": "OK",
"content.input.message_placeholder": "ketik pesan...",
"location_channels.title": "#kanal lokasi",
"system.tor.started": "tor berjalan. seluruh chat dirutekan lewat tor demi privasi.",
"share.status.shared_text": "✓ teks dikirim ke bitchat",
"share.status.shared_link": "✓ tautan dikirim ke bitchat",
"share.status.failed_to_encode": "gagal mengodekan tautan",
"common.cancel": "batal",
"common.close": "tutup",
"common.copy": "salin",
"app_info.close": "tutup",
"app_info.done": "SELESAI",
"content.alert.bluetooth_required.permission": "bitchat memerlukan izin bluetooth untuk terhubung dengan perangkat dekat. aktifkan akses di pengaturan.",
"content.alert.bluetooth_required.settings": "pengaturan",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "enkripsi ujung ke ujung",
"app_info.features.offline.title": "komunikasi offline",
"fingerprint.badge.verified": "✓ TERVERIFIKASI",
"fingerprint.badge.not_verified": "⚠️ BELUM TERVERIFIKASI",
"fingerprint.action.mark_verified": "tandai sebagai terverifikasi",
"location_channels.action.open_settings": "buka pengaturan",
"content.actions.title": "aksi",
"content.accessibility.send_message": "kirim pesan",
"share.status.nothing_to_share": "tidak ada yang bisa dibagikan",
"share.status.no_shareable_content": "tidak ada konten yang bisa dibagikan",
"share.fallback.shared_link_title": "tautan dibagikan"
},
"it": {
"common.ok": "OK",
"content.input.message_placeholder": "scrivi un messaggio...",
"location_channels.title": "#canali posizione",
"system.tor.started": "tor è avviato. tutta la chat passa da tor per la privacy.",
"share.status.shared_text": "✓ testo inviato a bitchat",
"share.status.shared_link": "✓ link inviato a bitchat",
"share.status.failed_to_encode": "impossibile codificare il link",
"common.cancel": "annulla",
"common.close": "chiudi",
"common.copy": "copia",
"app_info.close": "chiudi",
"app_info.done": "FATTO",
"content.alert.bluetooth_required.permission": "bitchat richiede l'autorizzazione bluetooth per collegarsi ai dispositivi vicini. abilita l'accesso nelle impostazioni.",
"content.alert.bluetooth_required.settings": "impostazioni",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "crittografia end-to-end",
"app_info.features.offline.title": "comunicazione offline",
"fingerprint.badge.verified": "✓ VERIFICATO",
"fingerprint.badge.not_verified": "⚠️ NON VERIFICATO",
"fingerprint.action.mark_verified": "segna come verificato",
"location_channels.action.open_settings": "apri impostazioni",
"content.actions.title": "azioni",
"content.accessibility.send_message": "invia messaggio",
"share.status.nothing_to_share": "niente da condividere",
"share.status.no_shareable_content": "nessun contenuto condivisibile",
"share.fallback.shared_link_title": "link condiviso"
},
"ja": {
"common.ok": "OK",
"content.input.message_placeholder": "メッセージを入力...",
"location_channels.title": "#ロケーションチャンネル",
"system.tor.started": "torを起動しました。全チャットをtor経由で配信します。",
"share.status.shared_text": "✓ bitchatにテキストを共有",
"share.status.shared_link": "✓ bitchatにリンクを共有",
"share.status.failed_to_encode": "リンクのエンコードに失敗しました",
"common.cancel": "キャンセル",
"common.close": "閉じる",
"common.copy": "コピー",
"app_info.close": "閉じる",
"app_info.done": "完了",
"content.alert.bluetooth_required.permission": "bitchatは近くのデバイスと接続するためbluetooth権限が必要です。設定でアクセスを有効にしてください。",
"content.alert.bluetooth_required.settings": "設定",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "エンドツーエンド暗号",
"app_info.features.offline.title": "オフライン通信",
"fingerprint.badge.verified": "✓ 検証済み",
"fingerprint.badge.not_verified": "⚠️ 未検証",
"fingerprint.action.mark_verified": "検証済みにする",
"location_channels.action.open_settings": "設定を開く",
"content.actions.title": "アクション",
"content.accessibility.send_message": "メッセージ送信",
"share.status.nothing_to_share": "共有できるものがありません",
"share.status.no_shareable_content": "共有可能なコンテンツがありません",
"share.fallback.shared_link_title": "共有リンク"
},
"ko": {
"common.ok": "확인",
"content.input.message_placeholder": "메시지를 입력하세요...",
"location_channels.title": "#위치 채널",
"system.tor.started": "tor가 시작되었습니다. IP 보호를 위해 모든 대화를 tor를 통해 라우팅합니다.",
"share.status.shared_text": "✓ bitchat으로 텍스트를 공유했습니다",
"share.status.shared_link": "✓ bitchat으로 링크를 공유했습니다",
"share.status.failed_to_encode": "링크를 인코딩하는 데 실패했습니다",
"common.cancel": "취소",
"common.close": "닫기",
"common.copy": "복사",
"app_info.close": "닫기",
"app_info.done": "확인",
"content.alert.bluetooth_required.permission": "bitchat은 주변 기기와 연결하기 위해 bluetooth 권한이 필요합니다. 설정에서 bluetooth 접근을 활성화해주세요.",
"content.alert.bluetooth_required.settings": "설정",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "종단간 암호화",
"app_info.features.offline.title": "오프라인 통신",
"fingerprint.badge.verified": "✓ 인증됨",
"fingerprint.badge.not_verified": "⚠️ 인증되지 않음",
"fingerprint.action.mark_verified": "인증됨으로 표시",
"location_channels.action.open_settings": "설정 열기",
"content.actions.title": "작업",
"content.accessibility.send_message": "메시지 보내기",
"share.status.nothing_to_share": "공유할 내용이 없습니다",
"share.status.no_shareable_content": "공유할 수 있는 내용이 없습니다",
"share.fallback.shared_link_title": "공유된 링크"
},
"ne": {
"common.ok": "ठिक",
"content.input.message_placeholder": "सन्देश टाइप गर...",
"location_channels.title": "#स्थान च्यानल",
"system.tor.started": "tor सुरु भयो। गोपनीयताका लागि पूरा च्याट tor मार्फत जान्छ।",
"share.status.shared_text": "✓ bitchat मा पाठ पठाइयो",
"share.status.shared_link": "✓ bitchat मा लिङ्क पठाइयो",
"share.status.failed_to_encode": "लिङ्क सङ्केत गर्न सकेन",
"common.cancel": "रद्द",
"common.close": "बन्द",
"common.copy": "प्रतिलिपि",
"app_info.close": "बन्द",
"app_info.done": "सम्पन्न",
"content.alert.bluetooth_required.permission": "bitchat लाई नजिकका उपकरणसँग जडान हुन bluetooth अनुमति चाहिन्छ। सेटिङमा पहुँच सक्षम गर।",
"content.alert.bluetooth_required.settings": "सेटिङ",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "एन्ड-टु-एन्ड सङ्केत",
"app_info.features.offline.title": "अफलाइन सञ्चार",
"fingerprint.badge.verified": "✓ प्रमाणित",
"fingerprint.badge.not_verified": "⚠️ प्रमाणित छैन",
"fingerprint.action.mark_verified": "प्रमाणित चिन्ह लगाउ",
"location_channels.action.open_settings": "सेटिङ खोल",
"content.actions.title": "कार्य",
"content.accessibility.send_message": "सन्देश पठाउ",
"share.status.nothing_to_share": "बाँड्ने केही छैन",
"share.status.no_shareable_content": "बाँड्न मिल्ने सामग्री छैन",
"share.fallback.shared_link_title": "साझा गरिएको लिङ्क"
},
"pt-BR": {
"common.ok": "OK",
"content.input.message_placeholder": "digite uma mensagem...",
"location_channels.title": "#canais de localização",
"system.tor.started": "tor iniciou. todo o chat é roteado por tor para privacidade.",
"share.status.shared_text": "✓ texto enviado para bitchat",
"share.status.shared_link": "✓ link enviado para bitchat",
"share.status.failed_to_encode": "falha ao codificar link",
"common.cancel": "cancelar",
"common.close": "fechar",
"common.copy": "copiar",
"app_info.close": "fechar",
"app_info.done": "CONCLUÍDO",
"content.alert.bluetooth_required.permission": "bitchat precisa de permissão de bluetooth para conectar com dispositivos próximos. habilite o acesso em ajustes.",
"content.alert.bluetooth_required.settings": "ajustes",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "criptografia ponto a ponto",
"app_info.features.offline.title": "comunicação offline",
"fingerprint.badge.verified": "✓ VERIFICADO",
"fingerprint.badge.not_verified": "⚠️ NÃO VERIFICADO",
"fingerprint.action.mark_verified": "marcar como verificado",
"location_channels.action.open_settings": "abrir ajustes",
"content.actions.title": "ações",
"content.accessibility.send_message": "enviar mensagem",
"share.status.nothing_to_share": "nada para compartilhar",
"share.status.no_shareable_content": "nenhum conteúdo compartilhável",
"share.fallback.shared_link_title": "link compartilhado"
},
"ru": {
"common.ok": "OK",
"content.input.message_placeholder": "напиши сообщение...",
"location_channels.title": "#каналы локации",
"system.tor.started": "tor запущен. весь чат идёт через tor для приватности.",
"share.status.shared_text": "✓ текст отправлен в bitchat",
"share.status.shared_link": "✓ ссылка отправлена в bitchat",
"share.status.failed_to_encode": "не удалось закодировать ссылку",
"common.cancel": "отмена",
"common.close": "закрыть",
"common.copy": "копировать",
"app_info.close": "закрыть",
"app_info.done": "ГОТОВО",
"content.alert.bluetooth_required.permission": "bitchat нужен доступ к bluetooth, чтобы соединяться с ближайшими устройствами. включи разрешение в настройках.",
"content.alert.bluetooth_required.settings": "настройки",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "сквозное шифрование",
"app_info.features.offline.title": "офлайн-связь",
"fingerprint.badge.verified": "✓ ПРОВЕРЕНО",
"fingerprint.badge.not_verified": "⚠️ НЕ ПРОВЕРЕНО",
"fingerprint.action.mark_verified": "пометить как проверено",
"location_channels.action.open_settings": "открыть настройки",
"content.actions.title": "действия",
"content.accessibility.send_message": "отправить сообщение",
"share.status.nothing_to_share": "нечем поделиться",
"share.status.no_shareable_content": "нет подходящего контента",
"share.fallback.shared_link_title": "поделился ссылкой"
},
"uk": {
"common.ok": "OK",
"content.input.message_placeholder": "напиши повідомлення...",
"location_channels.title": "#канали локації",
"system.tor.started": "tor запущено. увесь чат іде через tor для приватності.",
"share.status.shared_text": "✓ текст надіслано в bitchat",
"share.status.shared_link": "✓ посилання надіслано в bitchat",
"share.status.failed_to_encode": "не вдалося закодувати посилання",
"common.cancel": "скасувати",
"common.close": "закрити",
"common.copy": "скопіювати",
"app_info.close": "закрити",
"app_info.done": "ГОТОВО",
"content.alert.bluetooth_required.permission": "bitchat потребує дозволу bluetooth для з'єднання з пристроями поруч. ввімкни доступ у налаштуваннях.",
"content.alert.bluetooth_required.settings": "налаштування",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "скрізьове шифрування",
"app_info.features.offline.title": "офлайн-зв'язок",
"fingerprint.badge.verified": "✓ ПЕРЕВІРЕНО",
"fingerprint.badge.not_verified": "⚠️ НЕ ПЕРЕВІРЕНО",
"fingerprint.action.mark_verified": "позначити як перевірено",
"location_channels.action.open_settings": "відкрити налаштування",
"content.actions.title": "дії",
"content.accessibility.send_message": "надіслати повідомлення",
"share.status.nothing_to_share": "нема чим ділитися",
"share.status.no_shareable_content": "нема відповідного контенту",
"share.fallback.shared_link_title": "спільне посилання"
},
"zh-Hans": {
"common.ok": "确定",
"content.input.message_placeholder": "输入消息...",
"location_channels.title": "#位置频道",
"system.tor.started": "tor 已启动。所有聊天通过 tor 路由以保护 IP。",
"share.status.shared_text": "✓ 已将文本分享至 bitchat",
"share.status.shared_link": "✓ 已将链接分享至 bitchat",
"share.status.failed_to_encode": "无法编码链接",
"common.cancel": "取消",
"common.close": "关闭",
"common.copy": "复制",
"app_info.close": "关闭",
"app_info.done": "完成",
"content.alert.bluetooth_required.permission": "bitchat 需要 bluetooth 权限以连接附近设备。请在设置中启用访问。",
"content.alert.bluetooth_required.settings": "设置",
"app_info.app_name": "bitchat",
"app_info.features.encryption.title": "端到端加密",
"app_info.features.offline.title": "离线通信",
"fingerprint.badge.verified": "✓ 已验证",
"fingerprint.badge.not_verified": "⚠️ 未验证",
"fingerprint.action.mark_verified": "标记为已验证",
"location_channels.action.open_settings": "打开设置",
"content.actions.title": "操作",
"content.accessibility.send_message": "发送消息",
"share.status.nothing_to_share": "没有可分享的内容",
"share.status.no_shareable_content": "没有可分享的素材",
"share.fallback.shared_link_title": "分享的链接"
}
},
"testLocales": [
"en",
"ar",
"de",
"es",
"fr",
"he",
"id",
"it",
"ja",
"ko",
"ne",
"pt-BR",
"ru",
"uk",
"zh-Hans"
]
}