Files
bitchat/bitchatTests/Localization/PrimaryLocalizationKeys.json
T
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

{
"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"
]
}