From 5c4b814c5658dd35b50f1ba2a27a17648aa854c8 Mon Sep 17 00:00:00 2001 From: jack <212554440+jackjackbits@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:21:02 +0200 Subject: [PATCH] Localize CommandProcessor: all 48 command strings, 30 locales (#1657) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add 26 code-referenced keys to the catalog + a test that closes the gap LocalizationCoverageTests validated the catalog but never the code: a String(localized:) whose key is missing from every catalog compiles fine and silently ships its English defaultValue to all 29 non-source locales. That blind spot let 26 keys go untranslated while CI stayed green: the entire notices/board composer (10), the private-media encryption warnings and delivery-failure reasons (9), both courier-header strings, two delivery states, two media failure reasons, and the [? people] channel row. - All 26 keys added with full 30-locale coverage. - New everyCodeReferencedKeyExistsInACatalog scans the source for literal String(localized:) keys and fails on any key absent from both catalogs. (The audit's original count of 17 was itself an undercount — its scan missed multi-line String( localized: calls; the test's regex does not.) Co-Authored-By: Claude Fable 5 * Localize CommandProcessor: all 48 command strings, 30 locales CommandProcessor had zero String(localized:) calls — every command error, usage hint, and the entire /help reference was hardcoded English. The autocomplete panel (CommandInfo) is fully localized, so a non-English speaker got localized suggestions while typing and English the moment anything went wrong or they asked for help. - 47 literal sites converted to String(localized:)/String(format:) with positional specifiers where languages reorder (%1$@, %2$lld). - /trace's "hop"/"hops" pluralization split into path_one/path_many; the "you" chain label localized too. - helpText and groupUsage become computed so they resolve per-locale. - 49 command.* keys added with full 30-locale coverage (command syntax stays verbatim; only prose translates). - Copy fix from the audit: "blocked X. you will no longer receive messages from them" → "…no longer see their messages" (blocking filters at display time; packets still arrive and relay). Co-Authored-By: Claude Fable 5 --------- Co-authored-by: jack Co-authored-by: Claude Fable 5 --- bitchat/Localizable.xcstrings | 9114 ++++++++++++++++++++++ bitchat/Services/CommandProcessor.swift | 133 +- bitchatTests/CommandProcessorTests.swift | 4 +- 3 files changed, 9180 insertions(+), 71 deletions(-) diff --git a/bitchat/Localizable.xcstrings b/bitchat/Localizable.xcstrings index 7a223545..f7002d0c 100644 --- a/bitchat/Localizable.xcstrings +++ b/bitchat/Localizable.xcstrings @@ -4279,6 +4279,9120 @@ } } }, + "command.action.not_found" : { + "comment" : "Error when an action command can't resolve its target; placeholders are the command and the nickname", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعذّر %1$@ %2$@: غير موجود" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@-কে %1$@ করা গেল না: পাওয়া যায়নি" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ geht nicht: nicht gefunden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "cannot %1$@ %2$@: not found" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no se puede %1$@ a %2$@: no encontrado" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نمی‌توان %2$@ را %1$@ کرد: پیدا نشد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi ma-%1$@ si %2$@: hindi nahanap" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossible de %1$@ %2$@ : introuvable" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אי אפשר לעשות %1$@ ל-%2$@: לא נמצא" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ को %1$@ नहीं कर सकते: नहीं मिला" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak bisa %1$@ %2$@: tidak ditemukan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossibile %1$@ %2$@: non trovato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ を %1$@ できない: 見つからない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@에게 %1$@ 할 수 없어요: 찾을 수 없음" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak dapat %1$@ %2$@: tidak dijumpai" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ लाई %1$@ गर्न सकिएन: फेला परेन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan %2$@ niet %1$@: niet gevonden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nie można %1$@ %2$@: nie znaleziono" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "não é possível %1$@ %2$@: não encontrado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "não dá para %1$@ %2$@: não encontrado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "не получается %1$@ %2$@: не найден" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan inte %1$@ %2$@: hittades inte" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ ஐ %1$@ செய்ய முடியாது: கிடைக்கவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถ %1$@ %2$@ ได้: ไม่พบ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ için %1$@ yapılamıyor: bulunamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "не вдалося %1$@ %2$@: не знайдено" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ کو %1$@ نہیں کر سکتے: نہیں ملا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không thể %1$@ %2$@: không tìm thấy" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法 %1$@ %2$@:未找到" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法 %1$@ %2$@:找不到" + } + } + } + }, + "command.action.not_found_mesh" : { + "comment" : "Error when a mesh-only command can't resolve its target; placeholders are the command and the nickname", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعذّر %1$@ %2$@: غير موجود على شبكة mesh" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@-কে %1$@ করা গেল না: mesh-এ পাওয়া যায়নি" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ geht nicht: nicht im mesh gefunden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "cannot %1$@ %2$@: not found on mesh" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no se puede %1$@ a %2$@: no encontrado en la mesh" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نمی‌توان %2$@ را %1$@ کرد: در mesh پیدا نشد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi ma-%1$@ si %2$@: hindi nahanap sa mesh" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossible de %1$@ %2$@ : introuvable sur le mesh" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אי אפשר לעשות %1$@ ל-%2$@: לא נמצא ב-mesh" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ को %1$@ नहीं कर सकते: mesh पर नहीं मिला" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak bisa %1$@ %2$@: tidak ditemukan di mesh" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossibile %1$@ %2$@: non trovato sulla mesh" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ を %1$@ できない: メッシュ上に見つからない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@에게 %1$@ 할 수 없어요: 메시에서 찾을 수 없음" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak dapat %1$@ %2$@: tidak dijumpai di mesh" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ लाई %1$@ गर्न सकिएन: मेसमा फेला परेन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan %2$@ niet %1$@: niet gevonden op mesh" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nie można %1$@ %2$@: nie znaleziono w mesh" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "não é possível %1$@ %2$@: não encontrado na mesh" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "não dá para %1$@ %2$@: não encontrado na mesh" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "не получается %1$@ %2$@: не найден в mesh" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan inte %1$@ %2$@: hittades inte på meshen" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ ஐ %1$@ செய்ய முடியாது: mesh இல் கிடைக்கவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถ %1$@ %2$@ ได้: ไม่พบใน mesh" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ için %1$@ yapılamıyor: mesh'te bulunamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "не вдалося %1$@ %2$@: не знайдено в mesh" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ کو %1$@ نہیں کر سکتے: mesh پر نہیں ملا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không thể %1$@ %2$@: không tìm thấy trên mesh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法 %1$@ %2$@:在 mesh 上未找到" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法 %1$@ %2$@:在 mesh 上找不到" + } + } + } + }, + "command.action.usage" : { + "comment" : "Usage hint for a command that takes a nickname; placeholder is the command name", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاستخدام: /%@ " + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহার: /%@ <ডাকনাম>" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "verwendung: /%@ " + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage: /%@ " + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /%@ " + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربرد: /%@ " + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "paggamit: /%@ " + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage : /%@ " + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שימוש: /%@ " + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोग: /%@ <उपनाम>" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "penggunaan: /%@ " + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /%@ " + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "使い方: /%@ <ニックネーム>" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용법: /%@ <닉네임>" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "cara guna: /%@ " + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोग: /%@ <उपनाम>" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "gebruik: /%@ " + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "użycie: /%@ " + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /%@ " + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /%@ " + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "использование: /%@ <ник>" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "användning: /%@ " + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பயன்பாடு: /%@ <புனைப்பெயர்>" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีใช้: /%@ <ชื่อเล่น>" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kullanım: /%@ " + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "використання: /%@ <нікнейм>" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعمال: /%@ <عرفی نام>" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cách dùng: /%@ " + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/%@ <昵称>" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/%@ <暱稱>" + } + } + } + }, + "command.block.already" : { + "comment" : "Reply when /block targets an already-blocked nickname", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ محظور بالفعل" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ আগেই ব্লক করা আছে" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ist bereits blockiert" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is already blocked" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ya está bloqueado" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ از قبل مسدود است" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "naka-block na si %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ est déjà bloqué" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ כבר חסום" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पहले से ब्लॉक है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sudah diblokir" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ è già bloccato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ はすでにブロック済み" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@은(는) 이미 차단되어 있어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sudah disekat" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पहिले नै ब्लक गरिएको छ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is al geblokkeerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ znajduje się już na liście zablokowanych" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ já está bloqueado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ já está bloqueado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ уже заблокирован" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ är redan blockerad" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ஏற்கனவே தடுக்கப்பட்டுள்ளார்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ถูกบล็อกอยู่แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ zaten engelli" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ вже заблоковано" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ پہلے سے بلاک ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ đã bị chặn rồi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 已被屏蔽" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 已被封鎖" + } + } + } + }, + "command.block.done" : { + "comment" : "Confirmation after blocking a mesh peer", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم حظر %@. لن ترى رسائل هذا الشخص بعد الآن" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-কে ব্লক করা হলো। এই ব্যক্তির বার্তা আর দেখতে পাবে না" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ blockiert. du siehst die nachrichten dieser person nicht mehr" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "blocked %@. you will no longer see their messages" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqueado. ya no verás sus mensajes" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ مسدود شد. دیگر پیام‌های این شخص را نمی‌بینی" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "na-block si %@. hindi mo na makikita ang mga mensahe niya" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqué. tu ne verras plus ses messages" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ נחסם. ההודעות של האדם הזה לא יוצגו יותר" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ब्लॉक किया गया। अब तुम्हें इस व्यक्ति के संदेश नहीं दिखेंगे" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ diblokir. kamu tidak akan melihat pesannya lagi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloccato. non vedrai più i suoi messaggi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ をブロックした。相手のメッセージはもう表示されない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@을(를) 차단했어요. 이제 그 사람의 메시지가 보이지 않아요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ disekat. mesejnya tidak akan kelihatan lagi" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ब्लक गरियो। अब यस व्यक्तिका सन्देशहरू देखिने छैनन्" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ geblokkeerd. je ziet berichten van deze persoon niet meer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "zablokowano %@. nie zobaczysz już wiadomości od tej osoby" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqueado. deixas de ver as mensagens dessa pessoa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqueado. você não vai mais ver as mensagens dessa pessoa" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ заблокирован. сообщения этого человека больше не показываются" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "blockerade %@. du ser inte längre deras meddelanden" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ தடுக்கப்பட்டார். இனி அவர்களின் செய்திகளை நீங்கள் பார்க்க மாட்டீர்கள்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บล็อก %@ แล้ว คุณจะไม่เห็นข้อความของเขาอีก" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ engellendi. artık mesajlarını görmeyeceksin" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ заблоковано. ти більше не бачитимеш повідомлень від них" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کو بلاک کر دیا گیا۔ اب آپ کو ان کے پیغامات نظر نہیں آئیں گے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã chặn %@. bạn sẽ không thấy tin nhắn của họ nữa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已屏蔽 %@,你不会再看到对方的消息" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已封鎖 %@,你不會再看到對方的訊息" + } + } + } + }, + "command.block.done_geo" : { + "comment" : "Confirmation after blocking a geohash participant", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم حظر %@ في محادثات geohash" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash চ্যাটে %@-কে ব্লক করা হলো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ in geohash-chats blockiert" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "blocked %@ in geohash chats" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqueado en los chats de geohash" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ در چت‌های geohash مسدود شد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "na-block si %@ sa mga geohash chat" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqué dans les chats geohash" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ נחסם בצ'אטים של geohash" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash चैट में %@ को ब्लॉक किया गया" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ diblokir di chat geohash" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloccato nelle chat geohash" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash チャットで %@ をブロックした" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash 채팅에서 %@을(를) 차단했어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ disekat dalam sembang geohash" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash च्याटहरूमा %@ ब्लक गरियो" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ geblokkeerd in geohash-chats" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "zablokowano %@ w czatach geohash" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqueado nas conversas geohash" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bloqueado nos chats geohash" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ заблокирован в geohash-чатах" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "blockerade %@ i geohash-chattar" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash அரட்டைகளில் %@ தடுக்கப்பட்டார்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บล็อก %@ ในแชท geohash แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ geohash sohbetlerinde engellendi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ заблоковано в geohash-чатах" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash چیٹس میں %@ کو بلاک کر دیا گیا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã chặn %@ trong các kênh trò chuyện geohash" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已在 geohash 聊天中屏蔽 %@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已在 geohash 聊天中封鎖 %@" + } + } + } + }, + "command.block.failed" : { + "comment" : "Error when /block can't resolve or verify the target", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعذّر حظر %@: غير موجود أو تعذّر التحقق من الهوية" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-কে ব্লক করা গেল না: পাওয়া যায়নি বা পরিচয় যাচাই করা যায়নি" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "kann %@ nicht blockieren: nicht gefunden oder identität nicht überprüfbar" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "cannot block %@: not found or unable to verify identity" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no se puede bloquear a %@: no encontrado o no se pudo verificar la identidad" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نمی‌توان %@ را مسدود کرد: پیدا نشد یا هویتش قابل تأیید نیست" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi ma-block si %@: hindi nahanap o hindi ma-verify ang identity" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossible de bloquer %@ : introuvable ou identité invérifiable" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אי אפשר לחסום את %@: לא נמצא או שאי אפשר לאמת את הזהות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ को ब्लॉक नहीं कर सकते: नहीं मिला या पहचान सत्यापित नहीं हो सकी" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak bisa memblokir %@: tidak ditemukan atau identitas tidak bisa diverifikasi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossibile bloccare %@: non trovato o identità non verificabile" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ をブロックできない: 見つからないか身元を確認できない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@을(를) 차단할 수 없어요: 찾을 수 없거나 신원을 확인할 수 없어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak dapat menyekat %@: tidak dijumpai atau identiti tidak dapat disahkan" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ लाई ब्लक गर्न सकिएन: फेला परेन वा पहिचान प्रमाणित गर्न सकिएन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan %@ niet blokkeren: niet gevonden of identiteit niet te verifiëren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nie można zablokować %@: nie znaleziono lub nie udało się zweryfikować tożsamości" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "não é possível bloquear %@: não encontrado ou identidade impossível de verificar" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "não dá para bloquear %@: não encontrado ou não foi possível verificar a identidade" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "не получается заблокировать %@: не найден или не удалось проверить личность" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan inte blockera %@: hittades inte eller kunde inte verifiera identiteten" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ஐ தடுக்க முடியாது: கிடைக்கவில்லை அல்லது அடையாளத்தை சரிபார்க்க முடியவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "บล็อก %@ ไม่ได้: ไม่พบหรือยืนยันตัวตนไม่ได้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ engellenemiyor: bulunamadı veya kimliği doğrulanamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "не вдалося заблокувати %@: не знайдено або неможливо перевірити особу" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کو بلاک نہیں کیا جا سکا: نہیں ملا یا شناخت کی تصدیق ممکن نہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không thể chặn %@: không tìm thấy hoặc không xác minh được danh tính" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法屏蔽 %@:未找到或无法验证身份" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法封鎖 %@:找不到或無法驗證身分" + } + } + } + }, + "command.block.list" : { + "comment" : "Reply to /block with no argument; placeholders are the mesh and geohash block lists", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الأقران المحظورون: %1$@ | حظر geohash: %2$@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্লক করা পিয়ার: %1$@ | geohash ব্লক: %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "blockierte peers: %1$@ | geohash-blockierungen: %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "blocked peers: %1$@ | geohash blocks: %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "peers bloqueados: %1$@ | bloqueos de geohash: %2$@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "همتاهای مسدود: %1$@ | مسدودی‌های geohash: %2$@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "mga naka-block na peer: %1$@ | mga geohash block: %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "pairs bloqués : %1$@ | blocages geohash : %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עמיתים חסומים: %1$@ | חסימות geohash: %2$@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ब्लॉक किए गए पीयर: %1$@ | geohash ब्लॉक: %2$@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "peer yang diblokir: %1$@ | blokir geohash: %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "peer bloccati: %1$@ | blocchi geohash: %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ブロック中のピア: %1$@ | geohash のブロック: %2$@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "차단한 피어: %1$@ | geohash 차단: %2$@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "rakan disekat: %1$@ | sekatan geohash: %2$@" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "ब्लक गरिएका पियरहरू: %1$@ | geohash ब्लकहरू: %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "geblokkeerde peers: %1$@ | geohash-blokkades: %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "zablokowane peery: %1$@ | blokady geohash: %2$@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "peers bloqueados: %1$@ | bloqueios geohash: %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "peers bloqueados: %1$@ | bloqueios geohash: %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "заблокированные пиры: %1$@ | блокировки geohash: %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "blockerade personer: %1$@ | geohash-blockeringar: %2$@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தடுக்கப்பட்ட நபர்கள்: %1$@ | geohash தடைகள்: %2$@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คนที่ถูกบล็อก: %1$@ | บล็อกใน geohash: %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "engellenen kişiler: %1$@ | geohash engelleri: %2$@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "заблоковані люди: %1$@ | блокування geohash: %2$@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "بلاک شدہ لوگ: %1$@ | geohash بلاکس: %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "người bị chặn: %1$@ | chặn geohash: %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已屏蔽的人:%1$@ | geohash 屏蔽:%2$@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已封鎖的人:%1$@ | geohash 封鎖:%2$@" + } + } + } + }, + "command.drop.finding_place" : { + "comment" : "Error when /drop runs before a location fix arrives", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ما زلنا نحدد هذا المكان — حاول مجددًا بعد لحظات" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই জায়গাটা এখনও খুঁজে পাচ্ছি — একটু পরে আবার চেষ্টা করো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "dieser ort wird noch gesucht — versuch es gleich nochmal" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "still finding this place — try again in a moment" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "todavía buscando este lugar — inténtalo de nuevo en un momento" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "هنوز داریم این مکان را پیدا می‌کنیم — چند لحظه دیگر دوباره امتحان کن" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hinahanap pa ang lugar na ito — subukan ulit maya-maya" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "on cherche encore cet endroit — réessaie dans un instant" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עוד מאתרים את המקום הזה — נסו שוב עוד רגע" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यह जगह अभी ढूँढी जा रही है — थोड़ी देर में फिर कोशिश करो" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "masih mencari tempat ini — coba lagi sebentar lagi" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "sto ancora individuando questo posto — riprova tra un attimo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "この場所をまだ特定中 — 少ししてからもう一度試して" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "아직 이 장소를 찾는 중이에요 — 잠시 후 다시 시도해 주세요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "masih mencari tempat ini — cuba lagi sebentar nanti" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "यो ठाउँ अझै पत्ता लगाउँदै — एकछिनमा फेरि प्रयास गर्नुहोस्" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "deze plek wordt nog gezocht — probeer het zo nog eens" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "wciąż ustalam to miejsce — spróbuj ponownie za chwilę" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "ainda a localizar este sítio — tenta outra vez daqui a pouco" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "ainda localizando este lugar — tente de novo daqui a pouco" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "всё ещё определяю это место — попробуй снова чуть позже" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "letar fortfarande efter den här platsen — försök igen om en stund" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இந்த இடத்தை இன்னும் கண்டறிகிறோம் — சிறிது நேரம் கழித்து மீண்டும் முயற்சிக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ยังหาตำแหน่งของที่นี่อยู่ — ลองใหม่อีกสักครู่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "bu yer hâlâ tespit ediliyor — az sonra tekrar dene" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "ще визначаємо це місце — спробуй за мить" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ابھی اس جگہ کا پتہ لگایا جا رہا ہے — تھوڑی دیر میں دوبارہ کوشش کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "vẫn đang xác định nơi này — thử lại sau một lát nhé" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "还在定位这个地方 — 请稍后再试" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "還在定位這個地方 — 請稍後再試" + } + } + } + }, + "command.drop.left" : { + "comment" : "Confirmation after /drop pins a note", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 تُركت ملاحظة هنا — تتلاشى خلال 24 ساعة" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 এখানে নোট রাখা হলো — ২৪ ঘণ্টায় মিলিয়ে যাবে" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 notiz hier hinterlassen — sie verblasst in 24h" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 note left here — it fades in 24h" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 nota dejada aquí — se desvanece en 24h" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 یادداشت اینجا گذاشته شد — تا ۲۴ ساعت دیگر محو می‌شود" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 nag-iwan ng note dito — maglalaho ito sa loob ng 24h" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 note laissée ici — elle s'efface dans 24h" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 הושארה כאן הערה — היא תיעלם בעוד 24 שעות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 यहाँ नोट छोड़ा गया — यह 24 घंटे में मिट जाएगा" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 catatan ditinggalkan di sini — akan hilang dalam 24 jam" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 nota lasciata qui — svanisce in 24h" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 ここにノートを残した — 24時間で消える" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 여기에 노트를 남겼어요 — 24시간 후에 사라져요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 nota ditinggalkan di sini — hilang dalam 24 jam" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 यहाँ नोट छोडियो — 24 घण्टामा हराउँछ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 notitie hier achtergelaten — verdwijnt na 24 uur" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 notka zostawiona tutaj — zniknie za 24 h" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 nota deixada aqui — desaparece em 24h" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 nota deixada aqui — some em 24h" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 заметка оставлена здесь — исчезнет через 24 ч" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 anteckning lämnad här — den tonar bort om 24h" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 குறிப்பு இங்கே விடப்பட்டது — 24 மணி நேரத்தில் மறைந்துவிடும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 ทิ้งโน้ตไว้ที่นี่แล้ว — จะเลือนหายใน 24 ชม." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 buraya not bırakıldı — 24 saat içinde kaybolur" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 нотатку залишено тут — вона зникне за 24 год" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 نوٹ یہاں چھوڑ دیا گیا — یہ 24 گھنٹے میں مٹ جائے گا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 đã để lại ghi chú ở đây — nó sẽ mờ dần sau 24 giờ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 便签已留在这里 — 24 小时后消失" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "📍 便箋已留在這裡 — 24 小時後會消失" + } + } + } + }, + "command.drop.needs_location" : { + "comment" : "Error when /drop is used without location permission", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ترك ملاحظة يحتاج إلى الموقع — فعّله من شاشة المعلومات" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "নোট রাখতে লোকেশন লাগবে — ইনফো স্ক্রিন থেকে চালু করো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "eine notiz zu hinterlassen braucht den standort — aktiviere ihn im info-bildschirm" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "leaving a note needs location — enable it in the info screen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "dejar una nota necesita ubicación — actívala en la pantalla de info" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "گذاشتن یادداشت به موقعیت مکانی نیاز دارد — از صفحه اطلاعات فعالش کن" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "kailangan ng location para mag-iwan ng note — i-enable ito sa info screen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "laisser une note nécessite la localisation — active-la dans l'écran info" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כדי להשאיר הערה צריך מיקום — הפעילו אותו במסך המידע" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नोट छोड़ने के लिए लोकेशन चाहिए — इसे इन्फो स्क्रीन में चालू करो" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "meninggalkan catatan butuh lokasi — aktifkan di layar info" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "per lasciare una nota serve la posizione — attivala nella schermata info" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ノートを残すには位置情報が必要 — 情報画面で有効にして" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "노트를 남기려면 위치 정보가 필요해요 — 정보 화면에서 켜 주세요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "meninggalkan nota memerlukan lokasi — hidupkannya di skrin info" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "नोट छोड्न स्थान चाहिन्छ — जानकारी स्क्रिनमा सक्रिय गर्नुहोस्" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "een notitie achterlaten vereist locatie — zet die aan in het infoscherm" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "zostawienie notki wymaga lokalizacji — włącz ją na ekranie informacji" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "deixar uma nota precisa de localização — ativa-a no ecrã de info" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "deixar uma nota precisa de localização — ative na tela de info" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "чтобы оставить заметку, нужна геолокация — включи её на экране информации" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "att lämna en anteckning kräver plats — slå på det i infoskärmen" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "குறிப்பு விட்டுச்செல்ல இருப்பிடம் தேவை — தகவல் திரையில் அதை இயக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การทิ้งโน้ตต้องใช้ตำแหน่งที่ตั้ง — เปิดได้ในหน้าข้อมูล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "not bırakmak için konum gerekli — bilgi ekranından aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "щоб залишити нотатку, потрібна геолокація — увімкни її на інформаційному екрані" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "نوٹ چھوڑنے کے لیے مقام درکار ہے — اسے معلوماتی اسکرین سے آن کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "để lại ghi chú cần vị trí — bật trong màn hình thông tin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "留下便签需要位置信息 — 请在信息页面开启" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "留下便箋需要位置資訊 — 請在資訊畫面開啟" + } + } + } + }, + "command.drop.no_relays" : { + "comment" : "Error when /drop finds no reachable geo relays", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يمكن الوصول إلى أي مرحّلات جغرافية — لم تُترك الملاحظة" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কোনো জিও রিলে পাওয়া যাচ্ছে না — নোট রাখা হয়নি" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "keine geo-relays erreichbar — notiz nicht hinterlassen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "no geo relays reachable — note not left" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no hay relés geo alcanzables — la nota no se dejó" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "هیچ رله جغرافیایی در دسترس نیست — یادداشت گذاشته نشد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "walang maabot na geo relay — hindi naiwan ang note" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "aucun relais géo joignable — note non laissée" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין ממסרי geo זמינים — ההערה לא הושארה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कोई geo रिले उपलब्ध नहीं — नोट नहीं छोड़ा गया" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak ada relay geo yang bisa dijangkau — catatan tidak ditinggalkan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "nessun relay geo raggiungibile — nota non lasciata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "到達できる geo リレーがない — ノートは残せなかった" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "연결할 수 있는 geo 릴레이가 없어요 — 노트를 남기지 못했어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tiada geo relay yang dapat dihubungi — nota tidak ditinggalkan" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "कुनै geo रिले उपलब्ध छैन — नोट छोडिएन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "geen geo-relays bereikbaar — notitie niet achtergelaten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "żaden geo-przekaźnik nie jest osiągalny — notka nie została zostawiona" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "nenhum relay geo alcançável — a nota não foi deixada" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "nenhum relay geo alcançável — a nota não foi deixada" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "гео-релеи недоступны — заметка не оставлена" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "inga geo-reläer nåbara — anteckningen lämnades inte" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "எந்த geo ரிலேயும் எட்டவில்லை — குறிப்பு விடப்படவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ติดต่อรีเลย์ geo ไม่ได้เลย — ยังไม่ได้ทิ้งโน้ตไว้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ulaşılabilir geo rölesi yok — not bırakılmadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "гео-релеї недоступні — нотатку не залишено" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کوئی geo ریلے دستیاب نہیں — نوٹ نہیں چھوڑا گیا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không kết nối được relay geo nào — chưa để lại ghi chú" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有可达的地理中继 — 便签没有留下" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "沒有可連上的地理中繼 — 便箋沒有留下" + } + } + } + }, + "command.drop.notes_off" : { + "comment" : "Error when /drop is used while location notes are disabled", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ملاحظات الموقع متوقفة — فعّلها من شاشة المعلومات" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "লোকেশন নোট বন্ধ আছে — ইনফো স্ক্রিন থেকে চালু করো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "orts-notizen sind aus — aktiviere sie im info-bildschirm" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "location notes are off — enable them in the info screen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "las notas de ubicación están desactivadas — actívalas en la pantalla de info" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "یادداشت‌های مکانی خاموش‌اند — از صفحه اطلاعات فعال‌شان کن" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "naka-off ang mga location note — i-enable ang mga ito sa info screen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "les notes de lieu sont désactivées — active-les dans l'écran info" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הערות מיקום כבויות — הפעילו אותן במסך המידע" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "लोकेशन नोट बंद हैं — इन्हें इन्फो स्क्रीन में चालू करो" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "catatan lokasi sedang nonaktif — aktifkan di layar info" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "le note di posizione sono disattivate — attivale nella schermata info" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "位置ノートはオフ — 情報画面で有効にして" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "위치 노트가 꺼져 있어요 — 정보 화면에서 켜 주세요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "nota lokasi dimatikan — hidupkannya di skrin info" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "स्थान नोटहरू बन्द छन् — जानकारी स्क्रिनमा सक्रिय गर्नुहोस्" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "locatienotities staan uit — zet ze aan in het infoscherm" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "notki lokalizacyjne są wyłączone — włącz je na ekranie informacji" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "as notas de localização estão desligadas — ativa-as no ecrã de info" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "notas de localização estão desativadas — ative-as na tela de info" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "гео-заметки выключены — включи их на экране информации" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "platsanteckningar är av — slå på dem i infoskärmen" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இருப்பிடக் குறிப்புகள் அணைந்துள்ளன — தகவல் திரையில் அவற்றை இயக்கவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "โน้ตตามสถานที่ปิดอยู่ — เปิดได้ในหน้าข้อมูล" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "konum notları kapalı — bilgi ekranından aç" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "нотатки про місце вимкнено — увімкни їх на інформаційному екрані" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "مقام کے نوٹس بند ہیں — انہیں معلوماتی اسکرین سے آن کریں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ghi chú vị trí đang tắt — bật trong màn hình thông tin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "位置便签已关闭 — 请在信息页面开启" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "位置便箋已關閉 — 請在資訊畫面開啟" + } + } + } + }, + "command.drop.usage" : { + "comment" : "Usage hint for /drop", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاستخدام: /drop " + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহার: /drop <বার্তা>" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "verwendung: /drop " + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage: /drop " + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /drop " + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربرد: /drop " + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "paggamit: /drop " + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage : /drop " + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שימוש: /drop " + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोग: /drop <संदेश>" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "penggunaan: /drop " + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /drop " + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "使い方: /drop <メッセージ>" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용법: /drop <메시지>" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "cara guna: /drop " + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोग: /drop <सन्देश>" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "gebruik: /drop " + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "użycie: /drop " + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /drop " + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /drop " + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "использование: /drop <сообщение>" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "användning: /drop " + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பயன்பாடு: /drop <செய்தி>" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีใช้: /drop <ข้อความ>" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kullanım: /drop " + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "використання: /drop <повідомлення>" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعمال: /drop <پیغام>" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cách dùng: /drop " + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/drop <消息>" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/drop <訊息>" + } + } + } + }, + "command.error.favorites_mesh_only" : { + "comment" : "Error when a favorites command is used outside the mesh channel", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المفضلة متاحة فقط لأقران شبكة mesh في #mesh" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "প্রিয় তালিকা শুধু #mesh-এ থাকা mesh পিয়ারদের জন্য" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "favoriten gibt es nur für mesh-peers in #mesh" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "favorites are only for mesh peers in #mesh" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "los favoritos son solo para peers de la mesh en #mesh" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "موردعلاقه‌ها فقط برای همتاهای mesh در #mesh هستند" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "para lang sa mga mesh peer sa #mesh ang mga favorite" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "les favoris sont réservés aux pairs du mesh dans #mesh" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מועדפים זמינים רק לעמיתי mesh ב-#mesh" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पसंदीदा सिर्फ #mesh के mesh पीयर के लिए हैं" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "favorit hanya untuk peer mesh di #mesh" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "i preferiti sono solo per i peer mesh in #mesh" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "お気に入りは #mesh のメッシュピア専用" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "즐겨찾기는 #mesh의 메시 피어에게만 쓸 수 있어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "kegemaran hanya untuk rakan mesh di #mesh" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "मनपर्नेहरू #mesh का मेस पियरहरूका लागि मात्र हुन्" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "favorieten zijn alleen voor mesh-peers in #mesh" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ulubione są tylko dla peerów mesh w #mesh" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "os favoritos são só para peers mesh no #mesh" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "favoritos são só para peers mesh no #mesh" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "избранное только для mesh-пиров в #mesh" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "favoriter är bara för mesh-deltagare i #mesh" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பிடித்தவை #mesh இல் உள்ள mesh நபர்களுக்கு மட்டும்தான்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รายการโปรดมีไว้สำหรับคนในเครือข่าย mesh ใน #mesh เท่านั้น" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "favoriler sadece #mesh'teki mesh kişileri için" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "обране доступне лише людям у mesh у #mesh" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "پسندیدہ صرف #mesh میں mesh والے لوگوں کے لیے ہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mục yêu thích chỉ dành cho những người trong mesh ở #mesh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "收藏只对 #mesh 里的 mesh 成员可用" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "最愛只限 #mesh 裡的 mesh 成員使用" + } + } + } + }, + "command.error.groups_mesh_only" : { + "comment" : "Error when a group command is used outside the mesh channel", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المجموعات متاحة فقط لأقران شبكة mesh في #mesh" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "গ্রুপ শুধু #mesh-এ থাকা mesh পিয়ারদের জন্য" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "gruppen gibt es nur für mesh-peers in #mesh" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "groups are only for mesh peers in #mesh" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "los grupos son solo para peers de la mesh en #mesh" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "گروه‌ها فقط برای همتاهای mesh در #mesh هستند" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "para lang sa mga mesh peer sa #mesh ang mga group" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "les groupes sont réservés aux pairs du mesh dans #mesh" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "קבוצות זמינות רק לעמיתי mesh ב-#mesh" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ग्रुप सिर्फ #mesh के mesh पीयर के लिए हैं" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "grup hanya untuk peer mesh di #mesh" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "i gruppi sono solo per i peer mesh in #mesh" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "グループは #mesh のメッシュピア専用" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "그룹은 #mesh의 메시 피어끼리만 쓸 수 있어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "kumpulan hanya untuk rakan mesh di #mesh" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "समूहहरू #mesh का मेस पियरहरूका लागि मात्र हुन्" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "groepen zijn alleen voor mesh-peers in #mesh" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "grupy są tylko dla peerów mesh w #mesh" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "os grupos são só para peers mesh no #mesh" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "grupos são só para peers mesh no #mesh" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "группы только для mesh-пиров в #mesh" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "grupper är bara för mesh-deltagare i #mesh" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "குழுக்கள் #mesh இல் உள்ள mesh நபர்களுக்கு மட்டும்தான்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กลุ่มมีไว้สำหรับคนในเครือข่าย mesh ใน #mesh เท่านั้น" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gruplar sadece #mesh'teki mesh kişileri için" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "групи доступні лише людям у mesh у #mesh" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "گروپ صرف #mesh میں mesh والے لوگوں کے لیے ہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "nhóm chỉ dành cho những người trong mesh ở #mesh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "群组只对 #mesh 里的 mesh 成员开放" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "群組只限 #mesh 裡的 mesh 成員使用" + } + } + } + }, + "command.error.invalid" : { + "comment" : "Error for an empty or unparseable slash command", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أمر غير صالح" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অবৈধ কমান্ড" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ungültiger befehl" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "invalid command" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando no válido" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "دستور نامعتبر" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "invalid na command" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "commande invalide" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פקודה לא חוקית" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अमान्य कमांड" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "perintah tidak valid" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando non valido" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無効なコマンド" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "잘못된 명령어" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "arahan tidak sah" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "अवैध कमाण्ड" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ongeldig commando" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nieprawidłowe polecenie" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando inválido" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando inválido" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "неверная команда" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "ogiltigt kommando" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தவறான கட்டளை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คำสั่งไม่ถูกต้อง" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "geçersiz komut" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "неправильна команда" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "غلط کمانڈ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "lệnh không hợp lệ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无效命令" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無效的指令" + } + } + } + }, + "command.error.ping_mesh_only" : { + "comment" : "Error when /ping is used outside the mesh channel", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping يعمل فقط مع أقران شبكة mesh في #mesh" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping শুধু #mesh-এ থাকা mesh পিয়ারদের সাথে কাজ করে" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping funktioniert nur für mesh-peers in #mesh" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping only works for mesh peers in #mesh" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping solo funciona con peers de la mesh en #mesh" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping فقط برای همتاهای mesh در #mesh کار می‌کند" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "gumagana lang ang ping sa mga mesh peer sa #mesh" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping ne fonctionne qu'avec les pairs du mesh dans #mesh" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping עובד רק עם עמיתי mesh ב-#mesh" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping सिर्फ #mesh के mesh पीयर के साथ काम करता है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping hanya berfungsi untuk peer mesh di #mesh" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping funziona solo per i peer mesh in #mesh" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping は #mesh のメッシュピアにのみ使える" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping은 #mesh의 메시 피어에게만 작동해요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping hanya berfungsi untuk rakan mesh di #mesh" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping #mesh का मेस पियरहरूका लागि मात्र काम गर्छ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping werkt alleen voor mesh-peers in #mesh" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping działa tylko dla peerów mesh w #mesh" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "o ping só funciona para peers mesh no #mesh" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping só funciona para peers mesh no #mesh" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping работает только для mesh-пиров в #mesh" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping funkar bara för mesh-deltagare i #mesh" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping #mesh இல் உள்ள mesh நபர்களுக்கு மட்டுமே வேலை செய்யும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping ใช้ได้กับคนในเครือข่าย mesh ใน #mesh เท่านั้น" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping sadece #mesh'teki mesh kişileri için çalışır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping працює лише для людей у mesh у #mesh" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping صرف #mesh میں mesh والے لوگوں کے لیے کام کرتا ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping chỉ hoạt động với những người trong mesh ở #mesh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping 只对 #mesh 里的 mesh 成员有效" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping 只對 #mesh 裡的 mesh 成員有效" + } + } + } + }, + "command.error.trace_mesh_only" : { + "comment" : "Error when /trace is used outside the mesh channel", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace يعمل فقط مع أقران شبكة mesh في #mesh" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace শুধু #mesh-এ থাকা mesh পিয়ারদের সাথে কাজ করে" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace funktioniert nur für mesh-peers in #mesh" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace only works for mesh peers in #mesh" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace solo funciona con peers de la mesh en #mesh" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace فقط برای همتاهای mesh در #mesh کار می‌کند" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "gumagana lang ang trace sa mga mesh peer sa #mesh" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace ne fonctionne qu'avec les pairs du mesh dans #mesh" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace עובד רק עם עמיתי mesh ב-#mesh" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace सिर्फ #mesh के mesh पीयर के साथ काम करता है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace hanya berfungsi untuk peer mesh di #mesh" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace funziona solo per i peer mesh in #mesh" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace は #mesh のメッシュピアにのみ使える" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace는 #mesh의 메시 피어에게만 작동해요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace hanya berfungsi untuk rakan mesh di #mesh" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace #mesh का मेस पियरहरूका लागि मात्र काम गर्छ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace werkt alleen voor mesh-peers in #mesh" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace działa tylko dla peerów mesh w #mesh" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "o trace só funciona para peers mesh no #mesh" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace só funciona para peers mesh no #mesh" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace работает только для mesh-пиров в #mesh" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace funkar bara för mesh-deltagare i #mesh" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace #mesh இல் உள்ள mesh நபர்களுக்கு மட்டுமே வேலை செய்யும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace ใช้ได้กับคนในเครือข่าย mesh ใน #mesh เท่านั้น" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace sadece #mesh'teki mesh kişileri için çalışır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace працює лише для людей у mesh у #mesh" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace صرف #mesh میں mesh والے لوگوں کے لیے کام کرتا ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace chỉ hoạt động với những người trong mesh ở #mesh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace 只对 #mesh 里的 mesh 成员有效" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "trace 只對 #mesh 裡的 mesh 成員有效" + } + } + } + }, + "command.error.unknown" : { + "comment" : "Error for an unrecognized slash command; placeholder is the typed command", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أمر غير معروف: %@ — اكتب /help لعرض الأوامر" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অজানা কমান্ড: %@ — কমান্ডের তালিকা দেখতে /help লেখো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "unbekannter befehl: %@ — tippe /help für alle befehle" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "unknown command: %@ — type /help for commands" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando desconocido: %@ — escribe /help para ver los comandos" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "دستور ناشناخته: %@ — برای دیدن دستورها /help را بنویس" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi kilalang command: %@ — i-type ang /help para sa mga command" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "commande inconnue : %@ — tape /help pour voir les commandes" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פקודה לא מוכרת: %@ — הקלידו /help לרשימת הפקודות" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनजान कमांड: %@ — कमांड देखने के लिए /help लिखो" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "perintah tak dikenal: %@ — ketik /help untuk melihat daftar perintah" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando sconosciuto: %@ — digita /help per i comandi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "不明なコマンド: %@ — /help でコマンド一覧を表示" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알 수 없는 명령어: %@ — /help를 입력하면 명령어 목록을 볼 수 있어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "arahan tidak dikenali: %@ — taip /help untuk senarai arahan" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "अज्ञात कमाण्ड: %@ — कमाण्डहरूका लागि /help टाइप गर्नुहोस्" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "onbekend commando: %@ — typ /help voor commando's" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nieznane polecenie: %@ — wpisz /help, aby zobaczyć polecenia" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando desconhecido: %@ — escreve /help para veres os comandos" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "comando desconhecido: %@ — digite /help para ver os comandos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "неизвестная команда: %@ — набери /help для списка команд" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "okänt kommando: %@ — skriv /help för kommandon" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "தெரியாத கட்டளை: %@ — கட்டளைகளுக்கு /help என தட்டச்சு செய்யவும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่รู้จักคำสั่ง: %@ — พิมพ์ /help เพื่อดูคำสั่งทั้งหมด" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "bilinmeyen komut: %@ — komutlar için /help yaz" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "невідома команда: %@ — введи /help для списку команд" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "نامعلوم کمانڈ: %@ — کمانڈز کے لیے /help لکھیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "lệnh không xác định: %@ — gõ /help để xem các lệnh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未知命令:%@ — 输入 /help 查看命令" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "未知的指令:%@ — 輸入 /help 查看指令" + } + } + } + }, + "command.fav.added" : { + "comment" : "Confirmation after /fav", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تمت إضافة %@ إلى المفضلة" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-কে প্রিয় তালিকায় যোগ করা হলো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ zu den favoriten hinzugefügt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "added %@ to favorites" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ añadido a favoritos" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ به موردعلاقه‌ها اضافه شد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "idinagdag si %@ sa mga favorite" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ajouté aux favoris" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ נוסף למועדפים" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ को पसंदीदा में जोड़ा गया" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ditambahkan ke favorit" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ aggiunto ai preferiti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ をお気に入りに追加した" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@을(를) 즐겨찾기에 추가했어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ditambah ke kegemaran" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ मनपर्नेहरूमा थपियो" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ toegevoegd aan favorieten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dodano %@ do ulubionych" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ adicionado aos favoritos" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ adicionado aos favoritos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ добавлен в избранное" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "la till %@ i favoriter" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ பிடித்தவர்களில் சேர்க்கப்பட்டார்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เพิ่ม %@ ในรายการโปรดแล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ favorilere eklendi" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ додано до обраного" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کو پسندیدہ میں شامل کر دیا گیا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã thêm %@ vào mục yêu thích" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已将 %@ 加入收藏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已將 %@ 加入最愛" + } + } + } + }, + "command.fav.already" : { + "comment" : "Reply when /fav targets an existing favorite", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ضمن المفضلة بالفعل" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ আগে থেকেই প্রিয় তালিকায় আছে" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ist bereits ein favorit" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is already a favorite" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ya es un favorito" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ از قبل موردعلاقه است" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "favorite na si %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ est déjà en favori" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ כבר במועדפים" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पहले से पसंदीदा है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sudah jadi favorit" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ è già nei preferiti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ はすでにお気に入り" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@은(는) 이미 즐겨찾기예요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sudah menjadi kegemaran" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पहिले नै मनपर्ने हो" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is al een favoriet" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ już jest w ulubionych" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ já é um favorito" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ já é um favorito" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ уже в избранном" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ är redan en favorit" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ஏற்கனவே பிடித்தவர்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ อยู่ในรายการโปรดอยู่แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ zaten favori" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ вже в обраному" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ پہلے سے پسندیدہ ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ đã có trong mục yêu thích rồi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 已在收藏中" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 已在最愛中" + } + } + } + }, + "command.fav.not_favorite" : { + "comment" : "Reply when /unfav targets someone who isn't a favorite", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ليس ضمن المفضلة" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ প্রিয় তালিকায় নেই" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ist kein favorit" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is not a favorite" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ no es un favorito" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ موردعلاقه نیست" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi favorite si %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ n'est pas en favori" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ לא במועדפים" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पसंदीदा नहीं है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bukan favorit" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ non è nei preferiti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ はお気に入りじゃない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@은(는) 즐겨찾기가 아니에요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ bukan kegemaran" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ मनपर्ने होइन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is geen favoriet" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ nie jest w ulubionych" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ não é um favorito" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ não é um favorito" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не в избранном" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ är inte en favorit" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ பிடித்தவர்களில் இல்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ไม่ได้อยู่ในรายการโปรด" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ favori değil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не в обраному" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ پسندیدہ نہیں ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ không có trong mục yêu thích" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 不在收藏中" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 不在最愛中" + } + } + } + }, + "command.fav.not_found" : { + "comment" : "Error when /fav or /unfav can't resolve the nickname", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعذّر العثور على القرين: %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "পিয়ার খুঁজে পাওয়া যাচ্ছে না: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "peer nicht gefunden: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "can't find peer: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no se encuentra el peer: %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "همتا پیدا نشد: %@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi mahanap ang peer: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "pair introuvable : %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא נמצא עמית: %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "पीयर नहीं मिला: %@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "peer tidak ditemukan: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "peer non trovato: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ピアが見つからない: %@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "피어를 찾을 수 없어요: %@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "rakan tidak dijumpai: %@" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "पियर फेला परेन: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "peer niet gevonden: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nie można znaleźć peera: %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "não encontro o peer: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "não achei o peer: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "пир не найден: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "hittar inte personen: %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நபரை கண்டுபிடிக்க முடியவில்லை: %@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "หาคนนี้ไม่เจอ: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kişi bulunamıyor: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "не вдалося знайти людину: %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ شخص نہیں مل رہا: %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không tìm thấy người này: %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到这个人:%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到這個人:%@" + } + } + } + }, + "command.fav.removed" : { + "comment" : "Confirmation after /unfav", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تمت إزالة %@ من المفضلة" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-কে প্রিয় তালিকা থেকে সরানো হলো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ aus den favoriten entfernt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "removed %@ from favorites" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ eliminado de favoritos" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ از موردعلاقه‌ها حذف شد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "inalis si %@ sa mga favorite" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ retiré des favoris" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ הוסר מהמועדפים" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ को पसंदीदा से हटाया गया" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ dihapus dari favorit" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ rimosso dai preferiti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ をお気に入りから外した" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@을(를) 즐겨찾기에서 삭제했어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ dibuang daripada kegemaran" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ मनपर्नेहरूबाट हटाइयो" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ verwijderd uit favorieten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "usunięto %@ z ulubionych" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ removido dos favoritos" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ removido dos favoritos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ удалён из избранного" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "tog bort %@ från favoriter" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ பிடித்தவர்களிலிருந்து நீக்கப்பட்டார்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "นำ %@ ออกจากรายการโปรดแล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ favorilerden çıkarıldı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ вилучено з обраного" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کو پسندیدہ سے نکال دیا گیا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã xóa %@ khỏi mục yêu thích" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已将 %@ 移出收藏" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已將 %@ 移出最愛" + } + } + } + }, + "command.group.usage" : { + "comment" : "Usage hint for /group subcommands", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاستخدام: /group create · invite @name · remove @name · leave · list" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহার: /group create <নাম> · invite @name · remove @name · leave · list" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "verwendung: /group create · invite @name · remove @name · leave · list" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage: /group create · invite @name · remove @name · leave · list" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /group create · invite @name · remove @name · leave · list" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربرد: /group create · invite @name · remove @name · leave · list" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "paggamit: /group create · invite @name · remove @name · leave · list" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage : /group create · invite @name · remove @name · leave · list" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שימוש: /group create · invite @name · remove @name · leave · list" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोग: /group create <नाम> · invite @name · remove @name · leave · list" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "penggunaan: /group create · invite @name · remove @name · leave · list" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /group create · invite @name · remove @name · leave · list" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "使い方: /group create <名前> · invite @name · remove @name · leave · list" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용법: /group create <이름> · invite @name · remove @name · leave · list" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "cara guna: /group create · invite @name · remove @name · leave · list" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोग: /group create <नाम> · invite @name · remove @name · leave · list" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "gebruik: /group create · invite @name · remove @name · leave · list" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "użycie: /group create · invite @name · remove @name · leave · list" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /group create · invite @name · remove @name · leave · list" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /group create · invite @name · remove @name · leave · list" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "использование: /group create <название> · invite @name · remove @name · leave · list" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "användning: /group create · invite @name · remove @name · leave · list" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பயன்பாடு: /group create <பெயர்> · invite @name · remove @name · leave · list" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีใช้: /group create <ชื่อ> · invite @name · remove @name · leave · list" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kullanım: /group create · invite @name · remove @name · leave · list" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "використання: /group create <назва> · invite @name · remove @name · leave · list" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعمال: /group create <نام> · invite @name · remove @name · leave · list" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cách dùng: /group create · invite @name · remove @name · leave · list" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/group create <名称> · invite @name · remove @name · leave · list" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/group create <名稱> · invite @name · remove @name · leave · list" + } + } + } + }, + "command.help.text" : { + "comment" : "The /help reference list; command syntax stays verbatim, only the descriptions after each dash are translated", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الأوامر:\n/msg @name [message] — بدء محادثة خاصة\n/who — عرض من هنا\n/clear — مسح هذه المحادثة\n/hug @name — إرسال عناق\n/slap @name — صفعة بسمكة تراوت ضخمة\n/block @name · /unblock @name\n/fav @name · /unfav @name — المفضلة (mesh فقط)\n/group create — إنشاء مجموعة مشفّرة\n/group invite @name · /group remove @name — إدارة الأعضاء (المنشئ)\n/group leave · /group list — مغادرة مجموعاتك أو عرضها\n/ping @name — قياس زمن الذهاب والإياب (mesh فقط)\n/trace @name — مسار mesh المقدّر (mesh فقط)\n/pay — إرسال رمز cashu (ecash) في هذه المحادثة\n/drop — تثبيت ملاحظة في هذا المكان لمدة 24 ساعة (يحتاج إلى الموقع)\n/help — هذه القائمة" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "কমান্ড:\n/msg @name [message] — প্রাইভেট চ্যাট শুরু করো\n/who — কে কে আছে দেখো\n/clear — এই চ্যাট মুছে ফেলো\n/hug @name — একটা আলিঙ্গন পাঠাও\n/slap @name — বিশাল এক ট্রাউট মাছ দিয়ে চড় মারো\n/block @name · /unblock @name\n/fav @name · /unfav @name — প্রিয় তালিকা (শুধু mesh)\n/group create — এনক্রিপ্ট করা গ্রুপ শুরু করো\n/group invite @name · /group remove @name — সদস্য ব্যবস্থাপনা (নির্মাতা)\n/group leave · /group list — গ্রুপ ছাড়ো বা তালিকা দেখো\n/ping @name — রাউন্ড-ট্রিপ সময় মাপো (শুধু mesh)\n/trace @name — আনুমানিক mesh পথ (শুধু mesh)\n/pay — এই চ্যাটে একটি cashu ecash টোকেন পাঠাও\n/drop — এই জায়গায় ২৪ ঘণ্টার জন্য একটা নোট আটকে দাও (লোকেশন লাগবে)\n/help — এই তালিকা" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "befehle:\n/msg @name [message] — privaten chat starten\n/who — zeigen, wer hier ist\n/clear — diesen chat leeren\n/hug @name — eine umarmung senden\n/slap @name — mit einer großen forelle ohrfeigen\n/block @name · /unblock @name\n/fav @name · /unfav @name — favoriten (nur mesh)\n/group create — eine verschlüsselte gruppe starten\n/group invite @name · /group remove @name — mitglieder verwalten (ersteller)\n/group leave · /group list — gruppen verlassen oder auflisten\n/ping @name — round-trip-zeit messen (nur mesh)\n/trace @name — geschätzter mesh-pfad (nur mesh)\n/pay — einen cashu-ecash-token in diesem chat senden\n/drop — eine notiz für 24h an diesem ort anpinnen (braucht standort)\n/help — diese liste" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "commands:\n/msg @name [message] — start a private chat\n/who — list who's here\n/clear — clear this chat\n/hug @name — send a hug\n/slap @name — slap with a large trout\n/block @name · /unblock @name\n/fav @name · /unfav @name — favorites (mesh only)\n/group create — start an encrypted group\n/group invite @name · /group remove @name — manage members (creator)\n/group leave · /group list — leave or list your groups\n/ping @name — measure round-trip time (mesh only)\n/trace @name — estimated mesh path (mesh only)\n/pay — send a cashu ecash token in this chat\n/drop — pin a note to this place for 24h (needs location)\n/help — this list" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "comandos:\n/msg @name [message] — iniciar un chat privado\n/who — listar quién está aquí\n/clear — limpiar este chat\n/hug @name — enviar un abrazo\n/slap @name — dar un golpe con una trucha enorme\n/block @name · /unblock @name\n/fav @name · /unfav @name — favoritos (solo mesh)\n/group create — iniciar un grupo cifrado\n/group invite @name · /group remove @name — gestionar miembros (creador)\n/group leave · /group list — salir o listar tus grupos\n/ping @name — medir el tiempo de ida y vuelta (solo mesh)\n/trace @name — ruta estimada por la mesh (solo mesh)\n/pay — enviar un token ecash de cashu en este chat\n/drop — fijar una nota en este lugar por 24h (necesita ubicación)\n/help — esta lista" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "دستورها:\n/msg @name [message] — شروع چت خصوصی\n/who — فهرست کسانی که اینجا هستند\n/clear — پاک کردن این چت\n/hug @name — فرستادن یک بغل\n/slap @name — سیلی با یک قزل‌آلای گنده\n/block @name · /unblock @name\n/fav @name · /unfav @name — موردعلاقه‌ها (فقط mesh)\n/group create — شروع یک گروه رمزگذاری‌شده\n/group invite @name · /group remove @name — مدیریت اعضا (سازنده)\n/group leave · /group list — ترک گروه‌هایت یا فهرست‌شان\n/ping @name — اندازه‌گیری زمان رفت‌وبرگشت (فقط mesh)\n/trace @name — مسیر تخمینی mesh (فقط mesh)\n/pay — ارسال توکن ecash از cashu در این چت\n/drop — سنجاق کردن یادداشت به این مکان برای ۲۴ ساعت (به موقعیت نیاز دارد)\n/help — همین فهرست" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "mga command:\n/msg @name [message] — magsimula ng pribadong chat\n/who — ilista kung sino ang narito\n/clear — i-clear ang chat na ito\n/hug @name — magpadala ng yakap\n/slap @name — sampalin gamit ang malaking trout\n/block @name · /unblock @name\n/fav @name · /unfav @name — mga favorite (mesh lang)\n/group create — magsimula ng encrypted na group\n/group invite @name · /group remove @name — pamahalaan ang mga miyembro (creator)\n/group leave · /group list — umalis o ilista ang mga group mo\n/ping @name — sukatin ang round-trip time (mesh lang)\n/trace @name — tinatayang mesh path (mesh lang)\n/pay — magpadala ng cashu ecash token sa chat na ito\n/drop — mag-pin ng note sa lugar na ito nang 24h (kailangan ng location)\n/help — ang listahang ito" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "commandes :\n/msg @name [message] — démarrer un chat privé\n/who — lister qui est là\n/clear — effacer ce chat\n/hug @name — envoyer un câlin\n/slap @name — mettre une claque avec une grosse truite\n/block @name · /unblock @name\n/fav @name · /unfav @name — favoris (mesh uniquement)\n/group create — démarrer un groupe chiffré\n/group invite @name · /group remove @name — gérer les membres (créateur)\n/group leave · /group list — quitter ou lister tes groupes\n/ping @name — mesurer le temps aller-retour (mesh uniquement)\n/trace @name — chemin mesh estimé (mesh uniquement)\n/pay — envoyer un token ecash cashu dans ce chat\n/drop — épingler une note à cet endroit pour 24h (nécessite la localisation)\n/help — cette liste" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פקודות:\n/msg @name [message] — פתיחת צ'אט פרטי\n/who — מי נמצא כאן\n/clear — ניקוי הצ'אט הזה\n/hug @name — שליחת חיבוק\n/slap @name — סטירה עם פורל ענק\n/block @name · /unblock @name\n/fav @name · /unfav @name — מועדפים (mesh בלבד)\n/group create — פתיחת קבוצה מוצפנת\n/group invite @name · /group remove @name — ניהול חברים (יוצר הקבוצה)\n/group leave · /group list — עזיבה או הצגת הקבוצות שלכם\n/ping @name — מדידת זמן הלוך-חזור (mesh בלבד)\n/trace @name — נתיב mesh משוער (mesh בלבד)\n/pay — שליחת טוקן ecash של cashu בצ'אט הזה\n/drop — הצמדת הערה למקום הזה ל-24 שעות (דורש מיקום)\n/help — הרשימה הזאת" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "कमांड:\n/msg @name [message] — निजी चैट शुरू करो\n/who — देखो यहाँ कौन-कौन है\n/clear — यह चैट साफ़ करो\n/hug @name — झप्पी भेजो\n/slap @name — एक बड़ी ट्राउट मछली से थप्पड़ मारो\n/block @name · /unblock @name\n/fav @name · /unfav @name — पसंदीदा (सिर्फ mesh)\n/group create — एक एन्क्रिप्टेड ग्रुप शुरू करो\n/group invite @name · /group remove @name — सदस्य प्रबंधन (निर्माता)\n/group leave · /group list — ग्रुप छोड़ो या अपने ग्रुप की सूची देखो\n/ping @name — राउंड-ट्रिप समय मापो (सिर्फ mesh)\n/trace @name — अनुमानित mesh रास्ता (सिर्फ mesh)\n/pay — इस चैट में cashu ecash टोकन भेजो\n/drop — इस जगह 24 घंटे के लिए नोट पिन करो (लोकेशन चाहिए)\n/help — यही सूची" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "perintah:\n/msg @name [message] — mulai chat pribadi\n/who — daftar siapa saja yang ada di sini\n/clear — bersihkan chat ini\n/hug @name — kirim pelukan\n/slap @name — tampar dengan ikan trout besar\n/block @name · /unblock @name\n/fav @name · /unfav @name — favorit (khusus mesh)\n/group create — mulai grup terenkripsi\n/group invite @name · /group remove @name — kelola anggota (pembuat)\n/group leave · /group list — keluar dari grup atau lihat daftar grupmu\n/ping @name — ukur waktu bolak-balik (khusus mesh)\n/trace @name — perkiraan jalur mesh (khusus mesh)\n/pay — kirim token ecash cashu di chat ini\n/drop — sematkan catatan di tempat ini selama 24 jam (butuh lokasi)\n/help — daftar ini" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "comandi:\n/msg @name [messaggio] — avvia una chat privata\n/who — elenca chi c'è\n/clear — pulisci questa chat\n/hug @name — manda un abbraccio\n/slap @name — schiaffeggia con una grossa trota\n/block @name · /unblock @name\n/fav @name · /unfav @name — preferiti (solo mesh)\n/group create — avvia un gruppo cifrato\n/group invite @name · /group remove @name — gestisci i membri (creatore)\n/group leave · /group list — esci dai tuoi gruppi o elencali\n/ping @name — misura il tempo di andata e ritorno (solo mesh)\n/trace @name — percorso mesh stimato (solo mesh)\n/pay — invia un token ecash cashu in questa chat\n/drop — appunta una nota in questo posto per 24h (serve la posizione)\n/help — questa lista" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コマンド:\n/msg @name [メッセージ] — プライベートチャットを開始\n/who — 誰がいるか一覧表示\n/clear — このチャットをクリア\n/hug @name — ハグを送る\n/slap @name — 大きなマスでひっぱたく\n/block @name · /unblock @name\n/fav @name · /unfav @name — お気に入り (メッシュのみ)\n/group create <名前> — 暗号化グループを開始\n/group invite @name · /group remove @name — メンバー管理 (作成者)\n/group leave · /group list — グループから抜ける・一覧表示\n/ping @name — 往復時間を測定 (メッシュのみ)\n/trace @name — 推定メッシュ経路 (メッシュのみ)\n/pay <トークン> — このチャットで cashu ecash トークンを送る\n/drop <メッセージ> — この場所に24時間ノートをピン留め (位置情報が必要)\n/help — この一覧" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "명령어:\n/msg @name [메시지] — 개인 채팅 시작\n/who — 여기 누가 있는지 보기\n/clear — 이 채팅 지우기\n/hug @name — 포옹 보내기\n/slap @name — 큰 송어로 찰싹 때리기\n/block @name · /unblock @name\n/fav @name · /unfav @name — 즐겨찾기 (메시 전용)\n/group create <이름> — 암호화 그룹 만들기\n/group invite @name · /group remove @name — 멤버 관리 (만든 사람)\n/group leave · /group list — 그룹 나가기 또는 목록 보기\n/ping @name — 왕복 시간 측정 (메시 전용)\n/trace @name — 예상 메시 경로 (메시 전용)\n/pay <토큰> — 이 채팅에서 cashu ecash 토큰 보내기\n/drop <메시지> — 이 장소에 24시간 노트 고정 (위치 정보 필요)\n/help — 이 목록" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "arahan:\n/msg @name [mesej] — mulakan sembang peribadi\n/who — senaraikan siapa yang ada di sini\n/clear — kosongkan sembang ini\n/hug @name — hantar pelukan\n/slap @name — tampar dengan ikan trout besar\n/block @name · /unblock @name\n/fav @name · /unfav @name — kegemaran (mesh sahaja)\n/group create — mulakan kumpulan tersulit\n/group invite @name · /group remove @name — urus ahli (pencipta)\n/group leave · /group list — keluar atau senaraikan kumpulan anda\n/ping @name — ukur masa pergi balik (mesh sahaja)\n/trace @name — laluan mesh anggaran (mesh sahaja)\n/pay — hantar token ecash cashu dalam sembang ini\n/drop — sematkan nota di tempat ini selama 24 jam (perlukan lokasi)\n/help — senarai ini" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "कमाण्डहरू:\n/msg @name [सन्देश] — निजी च्याट सुरु गर्नुहोस्\n/who — यहाँ को छ भनेर हेर्नुहोस्\n/clear — यो च्याट खाली गर्नुहोस्\n/hug @name — अँगालो पठाउनुहोस्\n/slap @name — ठूलो ट्राउट माछाले हिर्काउनुहोस्\n/block @name · /unblock @name\n/fav @name · /unfav @name — मनपर्नेहरू (मेस मात्र)\n/group create <नाम> — इन्क्रिप्टेड समूह सुरु गर्नुहोस्\n/group invite @name · /group remove @name — सदस्य व्यवस्थापन (सर्जक)\n/group leave · /group list — समूह छोड्नुहोस् वा सूची हेर्नुहोस्\n/ping @name — राउन्ड-ट्रिप समय नाप्नुहोस् (मेस मात्र)\n/trace @name — अनुमानित मेस बाटो (मेस मात्र)\n/pay <टोकन> — यो च्याटमा cashu ecash टोकन पठाउनुहोस्\n/drop <सन्देश> — यो ठाउँमा 24 घण्टाका लागि नोट राख्नुहोस् (स्थान चाहिन्छ)\n/help — यो सूची" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "commando's:\n/msg @name [bericht] — start een privéchat\n/who — toon wie er is\n/clear — wis deze chat\n/hug @name — stuur een knuffel\n/slap @name — sla met een grote forel\n/block @name · /unblock @name\n/fav @name · /unfav @name — favorieten (alleen mesh)\n/group create — start een versleutelde groep\n/group invite @name · /group remove @name — beheer leden (maker)\n/group leave · /group list — verlaat of toon je groepen\n/ping @name — meet de rondreistijd (alleen mesh)\n/trace @name — geschat mesh-pad (alleen mesh)\n/pay — stuur een cashu-ecash-token in deze chat\n/drop — pin 24 uur lang een notitie op deze plek (vereist locatie)\n/help — deze lijst" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "polecenia:\n/msg @name [wiadomość] — rozpocznij prywatny czat\n/who — pokaż, kto tu jest\n/clear — wyczyść ten czat\n/hug @name — wyślij przytulasa\n/slap @name — trzaśnij wielkim pstrągiem\n/block @name · /unblock @name\n/fav @name · /unfav @name — ulubione (tylko mesh)\n/group create — załóż szyfrowaną grupę\n/group invite @name · /group remove @name — zarządzaj członkami (założyciel)\n/group leave · /group list — opuść grupę lub pokaż swoje grupy\n/ping @name — zmierz czas podróży w obie strony (tylko mesh)\n/trace @name — szacowana ścieżka mesh (tylko mesh)\n/pay — wyślij token ecash cashu na tym czacie\n/drop — przypnij notkę w tym miejscu na 24 h (wymaga lokalizacji)\n/help — ta lista" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "comandos:\n/msg @name [mensagem] — inicia uma conversa privada\n/who — lista quem está aqui\n/clear — limpa esta conversa\n/hug @name — envia um abraço\n/slap @name — dá uma chapada com uma truta enorme\n/block @name · /unblock @name\n/fav @name · /unfav @name — favoritos (só mesh)\n/group create — cria um grupo encriptado\n/group invite @name · /group remove @name — gere os membros (criador)\n/group leave · /group list — sai dos teus grupos ou lista-os\n/ping @name — mede o tempo de ida e volta (só mesh)\n/trace @name — caminho mesh estimado (só mesh)\n/pay — envia um token ecash cashu nesta conversa\n/drop — fixa uma nota neste sítio por 24h (precisa de localização)\n/help — esta lista" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "comandos:\n/msg @name [mensagem] — comece um chat privado\n/who — veja quem está aqui\n/clear — limpe este chat\n/hug @name — mande um abraço\n/slap @name — dê um tapa com uma truta gigante\n/block @name · /unblock @name\n/fav @name · /unfav @name — favoritos (só mesh)\n/group create — crie um grupo criptografado\n/group invite @name · /group remove @name — gerencie os membros (criador)\n/group leave · /group list — saia dos seus grupos ou liste-os\n/ping @name — meça o tempo de ida e volta (só mesh)\n/trace @name — caminho mesh estimado (só mesh)\n/pay — envie um token ecash cashu neste chat\n/drop — fixe uma nota neste lugar por 24h (precisa de localização)\n/help — esta lista" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "команды:\n/msg @name [сообщение] — начать личный чат\n/who — показать, кто здесь\n/clear — очистить этот чат\n/hug @name — отправить обнимашку\n/slap @name — шлёпнуть большой форелью\n/block @name · /unblock @name\n/fav @name · /unfav @name — избранное (только mesh)\n/group create <название> — создать зашифрованную группу\n/group invite @name · /group remove @name — управление участниками (создатель)\n/group leave · /group list — выйти из групп или показать их список\n/ping @name — измерить время туда-обратно (только mesh)\n/trace @name — примерный путь по mesh (только mesh)\n/pay <токен> — отправить cashu-токен (ecash) в этот чат\n/drop <сообщение> — закрепить заметку в этом месте на 24 ч (нужна геолокация)\n/help — этот список" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "kommandon:\n/msg @name [message] — starta en privat chatt\n/who — lista vilka som är här\n/clear — rensa den här chatten\n/hug @name — skicka en kram\n/slap @name — daska till med en stor forell\n/block @name · /unblock @name\n/fav @name · /unfav @name — favoriter (endast mesh)\n/group create — starta en krypterad grupp\n/group invite @name · /group remove @name — hantera medlemmar (skapare)\n/group leave · /group list — lämna eller lista dina grupper\n/ping @name — mät tur- och returtid (endast mesh)\n/trace @name — uppskattad mesh-väg (endast mesh)\n/pay — skicka en cashu ecash-token i den här chatten\n/drop — fäst en anteckning på den här platsen i 24h (kräver plats)\n/help — den här listan" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "கட்டளைகள்:\n/msg @name [message] — தனி அரட்டையைத் தொடங்கு\n/who — இங்கு யார் இருக்கிறார்கள் என்று பட்டியலிடு\n/clear — இந்த அரட்டையை அழி\n/hug @name — ஒரு அணைப்பை அனுப்பு\n/slap @name — ஒரு பெரிய ட்ரவுட் மீனால் அறை\n/block @name · /unblock @name\n/fav @name · /unfav @name — பிடித்தவை (mesh மட்டும்)\n/group create — மறைகுறியாக்கப்பட்ட குழுவைத் தொடங்கு\n/group invite @name · /group remove @name — உறுப்பினர்களை நிர்வகி (உருவாக்கியவர்)\n/group leave · /group list — உங்கள் குழுக்களிலிருந்து வெளியேறு அல்லது பட்டியலிடு\n/ping @name — சுற்றுப்பயண நேரத்தை அளவிடு (mesh மட்டும்)\n/trace @name — மதிப்பிடப்பட்ட mesh பாதை (mesh மட்டும்)\n/pay — இந்த அரட்டையில் cashu ecash டோக்கனை அனுப்பு\n/drop — இந்த இடத்தில் 24 மணி நேரத்திற்கு ஒரு குறிப்பை பொருத்து (இருப்பிடம் தேவை)\n/help — இந்த பட்டியல்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คำสั่ง:\n/msg @name [message] — เริ่มแชทส่วนตัว\n/who — ดูว่าใครอยู่ที่นี่บ้าง\n/clear — ล้างแชทนี้\n/hug @name — ส่งอ้อมกอด\n/slap @name — ตบด้วยปลาเทราต์ตัวใหญ่\n/block @name · /unblock @name\n/fav @name · /unfav @name — รายการโปรด (เฉพาะ mesh)\n/group create — เริ่มกลุ่มที่เข้ารหัส\n/group invite @name · /group remove @name — จัดการสมาชิก (ผู้สร้าง)\n/group leave · /group list — ออกจากกลุ่มหรือดูรายชื่อกลุ่มของคุณ\n/ping @name — วัดเวลาไปกลับ (เฉพาะ mesh)\n/trace @name — เส้นทาง mesh โดยประมาณ (เฉพาะ mesh)\n/pay — ส่งโทเคน ecash ของ cashu ในแชทนี้\n/drop — ปักโน้ตไว้ที่นี่นาน 24 ชม. (ต้องใช้ตำแหน่งที่ตั้ง)\n/help — รายการนี้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "komutlar:\n/msg @name [message] — özel sohbet başlat\n/who — burada kimler var, listele\n/clear — bu sohbeti temizle\n/hug @name — sarılma gönder\n/slap @name — koca bir alabalıkla tokat at\n/block @name · /unblock @name\n/fav @name · /unfav @name — favoriler (sadece mesh)\n/group create — şifreli bir grup başlat\n/group invite @name · /group remove @name — üyeleri yönet (kurucu)\n/group leave · /group list — gruplarından ayrıl veya listele\n/ping @name — gidiş-dönüş süresini ölç (sadece mesh)\n/trace @name — tahmini mesh yolu (sadece mesh)\n/pay — bu sohbette cashu ecash token'ı gönder\n/drop — buraya 24 saatliğine not sabitle (konum gerekli)\n/help — bu liste" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "команди:\n/msg @name [message] — почати приватний чат\n/who — показати, хто тут є\n/clear — очистити цей чат\n/hug @name — надіслати обійми\n/slap @name — ляснути великою фореллю\n/block @name · /unblock @name\n/fav @name · /unfav @name — обране (лише mesh)\n/group create — створити зашифровану групу\n/group invite @name · /group remove @name — керувати учасниками (творець)\n/group leave · /group list — вийти з груп або показати список\n/ping @name — виміряти час проходження туди й назад (лише mesh)\n/trace @name — орієнтовний шлях у mesh (лише mesh)\n/pay — надіслати cashu ecash-токен у цей чат\n/drop — закріпити нотатку в цьому місці на 24 год (потрібна геолокація)\n/help — цей список" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "کمانڈز:\n/msg @name [message] — نجی چیٹ شروع کریں\n/who — دیکھیں یہاں کون کون ہے\n/clear — یہ چیٹ صاف کریں\n/hug @name — جھپی بھیجیں\n/slap @name — ایک بڑی ٹراؤٹ مچھلی سے تھپڑ ماریں\n/block @name · /unblock @name\n/fav @name · /unfav @name — پسندیدہ (صرف mesh)\n/group create — ایک انکرپٹڈ گروپ بنائیں\n/group invite @name · /group remove @name — اراکین کا انتظام کریں (بنانے والا)\n/group leave · /group list — اپنے گروپ چھوڑیں یا فہرست دیکھیں\n/ping @name — راؤنڈ ٹرپ وقت ناپیں (صرف mesh)\n/trace @name — تخمینی mesh راستہ (صرف mesh)\n/pay — اس چیٹ میں cashu ای کیش ٹوکن بھیجیں\n/drop — اس جگہ 24 گھنٹے کے لیے نوٹ لگائیں (مقام درکار)\n/help — یہ فہرست" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "các lệnh:\n/msg @name [message] — bắt đầu trò chuyện riêng\n/who — xem ai đang ở đây\n/clear — xóa cuộc trò chuyện này\n/hug @name — gửi một cái ôm\n/slap @name — tát bằng một con cá hồi vân to\n/block @name · /unblock @name\n/fav @name · /unfav @name — mục yêu thích (chỉ mesh)\n/group create — tạo nhóm mã hóa\n/group invite @name · /group remove @name — quản lý thành viên (người tạo)\n/group leave · /group list — rời hoặc xem danh sách nhóm của bạn\n/ping @name — đo thời gian khứ hồi (chỉ mesh)\n/trace @name — đường đi mesh ước tính (chỉ mesh)\n/pay — gửi token ecash cashu trong cuộc trò chuyện này\n/drop — ghim ghi chú tại nơi này trong 24 giờ (cần vị trí)\n/help — danh sách này" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "命令:\n/msg @name [message] — 开始私聊\n/who — 列出谁在这里\n/clear — 清空当前聊天\n/hug @name — 送出一个拥抱\n/slap @name — 用一条大鳟鱼拍过去\n/block @name · /unblock @name\n/fav @name · /unfav @name — 收藏(仅 mesh)\n/group create — 创建加密群组\n/group invite @name · /group remove @name — 管理成员(创建者)\n/group leave · /group list — 退出或列出你的群组\n/ping @name — 测量往返时间(仅 mesh)\n/trace @name — 估计的 mesh 路径(仅 mesh)\n/pay — 在当前聊天发送 cashu ecash 代币\n/drop — 在这个地方钉一条便签,保留 24 小时(需要位置)\n/help — 本列表" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "指令:\n/msg @name [message] — 開始私人聊天\n/who — 列出誰在這裡\n/clear — 清除這個聊天\n/hug @name — 送出一個擁抱\n/slap @name — 用一條大鱒魚巴下去\n/block @name · /unblock @name\n/fav @name · /unfav @name — 最愛(僅限 mesh)\n/group create — 建立加密群組\n/group invite @name · /group remove @name — 管理成員(建立者)\n/group leave · /group list — 離開或列出你的群組\n/ping @name — 測量來回時間(僅限 mesh)\n/trace @name — 估計的 mesh 路徑(僅限 mesh)\n/pay — 在這個聊天中傳送 cashu ecash 代幣\n/drop — 在這個地方釘一張便箋 24 小時(需要位置)\n/help — 這份清單" + } + } + } + }, + "command.msg.not_found" : { + "comment" : "Error when /msg can't resolve the nickname", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' غير موجود" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' পাওয়া যায়নি" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' nicht gefunden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' not found" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' no encontrado" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' پیدا نشد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi nahanap ang '%@'" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' introuvable" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' לא נמצא" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' नहीं मिला" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' tidak ditemukan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' non trovato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' が見つからない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@'을(를) 찾을 수 없어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' tidak dijumpai" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' फेला परेन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' niet gevonden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nie znaleziono '%@'" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' não encontrado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' não encontrado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' не найден" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' hittades inte" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' கிடைக்கவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่พบ '%@'" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' bulunamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' не знайдено" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "'%@' نہیں ملا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không tìm thấy '%@'" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未找到 '%@'" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "找不到 '%@'" + } + } + } + }, + "command.msg.started" : { + "comment" : "Confirmation after /msg opens a private chat", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بدأت محادثة خاصة مع %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-এর সাথে প্রাইভেট চ্যাট শুরু হলো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "privater chat mit %@ gestartet" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "started private chat with %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "chat privado iniciado con %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "چت خصوصی با %@ شروع شد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "nagsimula ng pribadong chat kay %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "chat privé démarré avec %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נפתח צ'אט פרטי עם %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ के साथ निजी चैट शुरू हुई" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "chat pribadi dengan %@ dimulai" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "chat privata avviata con %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ とのプライベートチャットを開始した" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@와(과) 개인 채팅을 시작했어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "sembang peribadi dengan %@ dimulakan" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ सँग निजी च्याट सुरु भयो" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "privéchat met %@ gestart" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "rozpoczęto prywatny czat z %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "conversa privada iniciada com %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "chat privado iniciado com %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "начат личный чат с %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "startade privat chatt med %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ உடன் தனி அரட்டை தொடங்கியது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เริ่มแชทส่วนตัวกับ %@ แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ile özel sohbet başlatıldı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "розпочато приватний чат з %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کے ساتھ نجی چیٹ شروع ہو گئی" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã bắt đầu trò chuyện riêng với %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已开始与 %@ 的私聊" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已與 %@ 開始私人聊天" + } + } + } + }, + "command.msg.usage" : { + "comment" : "Usage hint for /msg", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاستخدام: /msg @nickname [message]" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহার: /msg @nickname [বার্তা]" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "verwendung: /msg @nickname [nachricht]" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage: /msg @nickname [message]" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /msg @nickname [mensaje]" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربرد: /msg @nickname [message]" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "paggamit: /msg @nickname [mensahe]" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage : /msg @nickname [message]" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שימוש: /msg @nickname [message]" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोग: /msg @nickname [संदेश]" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "penggunaan: /msg @nickname [pesan]" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /msg @nickname [messaggio]" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "使い方: /msg @nickname [メッセージ]" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용법: /msg @nickname [메시지]" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "cara guna: /msg @nickname [mesej]" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोग: /msg @nickname [सन्देश]" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "gebruik: /msg @nickname [bericht]" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "użycie: /msg @nickname [wiadomość]" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /msg @nickname [mensagem]" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /msg @nickname [mensagem]" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "использование: /msg @nickname [сообщение]" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "användning: /msg @nickname [message]" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பயன்பாடு: /msg @nickname [message]" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีใช้: /msg @nickname [message]" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kullanım: /msg @nickname [message]" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "використання: /msg @nickname [message]" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعمال: /msg @nickname [message]" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cách dùng: /msg @nickname [message]" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/msg @nickname [message]" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/msg @nickname [message]" + } + } + } + }, + "command.pay.invalid" : { + "comment" : "Error when /pay input fails to decode", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "رمز cashu غير صالح — لا يمكن فك ترميزه إلى رمز معروف بمبلغ، لن يتم إرساله" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অবৈধ cashu টোকেন — পরিমাণসহ কোনো পরিচিত টোকেনে ডিকোড হচ্ছে না, পাঠানো হচ্ছে না" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "ungültiger cashu-token — er lässt sich nicht zu einem bekannten token mit betrag dekodieren, wird nicht gesendet" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "invalid cashu token — it doesn't decode to a known token with an amount, not sending it" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu no válido — no se decodifica a un token conocido con un importe, no se envía" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "توکن cashu نامعتبر — به توکن شناخته‌شده‌ای با مبلغ رمزگشایی نمی‌شود، ارسال نمی‌شود" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "invalid na cashu token — hindi ito nade-decode sa kilalang token na may halaga, hindi ipapadala" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu invalide — il ne se décode pas en un token connu avec un montant, envoi annulé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "טוקן cashu לא חוקי — הוא לא מפוענח לטוקן מוכר עם סכום, לא נשלח" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अमान्य cashu टोकन — यह रकम वाले किसी ज्ञात टोकन में डिकोड नहीं होता, नहीं भेजा जा रहा" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu tidak valid — tidak bisa didekode jadi token dikenal dengan nominal, tidak jadi dikirim" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu non valido — non si decodifica in un token noto con un importo, non lo invio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無効な cashu トークン — 金額付きの既知のトークンとしてデコードできないので送らない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "잘못된 cashu 토큰이에요 — 금액이 있는 토큰으로 디코딩되지 않아서 보내지 않아요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu tidak sah — tidak dapat dinyahkod sebagai token yang dikenali dengan jumlah, tidak akan dihantar" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "अवैध cashu टोकन — रकम भएको ज्ञात टोकनमा डिकोड हुँदैन, पठाइँदैन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ongeldig cashu-token — het decodeert niet naar een bekend token met een bedrag, wordt niet verzonden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nieprawidłowy token cashu — nie dekoduje się do znanego tokenu z kwotą, nie wysyłam" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu inválido — não descodifica para um token conhecido com um montante, não vai ser enviado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu inválido — não decodifica para um token conhecido com um valor, não vou enviar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "неверный cashu-токен — он не декодируется в известный токен с суммой, отправки не будет" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "ogiltig cashu-token — den avkodas inte till en känd token med ett belopp, skickar den inte" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "செல்லாத cashu டோக்கன் — தொகையுடன் கூடிய அறியப்பட்ட டோக்கனாக இது டிகோட் ஆகவில்லை, அதை அனுப்பவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "โทเคน cashu ไม่ถูกต้อง — ถอดรหัสออกมาไม่เป็นโทเคนที่รู้จักพร้อมจำนวนเงิน จะไม่ส่งให้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "geçersiz cashu token'ı — tutarı olan bilinen bir token'a çözülemiyor, gönderilmiyor" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "недійсний cashu-токен — він не декодується у відомий токен із сумою, не надсилаю" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "غلط cashu ٹوکن — یہ رقم والے کسی معلوم ٹوکن میں ڈی کوڈ نہیں ہوتا، اسے نہیں بھیجا جا رہا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "token cashu không hợp lệ — không giải mã được thành token đã biết kèm số tiền, sẽ không gửi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无效的 cashu 代币 — 无法解码成带金额的已知代币,不会发送" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無效的 cashu 代幣 — 無法解碼成帶金額的已知代幣,不會送出" + } + } + } + }, + "command.pay.not_token" : { + "comment" : "Error when /pay input has no cashu prefix", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هذا لا يبدو رمز cashu — المتوقع cashuA… أو cashuB…" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এটা cashu টোকেনের মতো দেখাচ্ছে না — cashuA… বা cashuB… হওয়ার কথা" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "das sieht nicht nach einem cashu-token aus — erwartet wird cashuA… oder cashuB…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "that doesn't look like a cashu token — expected cashuA… or cashuB…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "eso no parece un token cashu — se esperaba cashuA… o cashuB…" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این شبیه توکن cashu نیست — انتظار cashuA… یا cashuB… می‌رفت" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "mukhang hindi iyan cashu token — inaasahan ay cashuA… o cashuB…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ça ne ressemble pas à un token cashu — attendu : cashuA… ou cashuB…" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "זה לא נראה כמו טוקן cashu — אמור להיות cashuA… או cashuB…" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यह cashu टोकन जैसा नहीं लगता — cashuA… या cashuB… होना चाहिए" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "itu tidak terlihat seperti token cashu — seharusnya cashuA… atau cashuB…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "non sembra un token cashu — atteso cashuA… o cashuB…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "cashu トークンには見えない — cashuA… か cashuB… のはず" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "cashu 토큰이 아닌 것 같아요 — cashuA… 또는 cashuB…여야 해요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "itu tidak kelihatan seperti token cashu — sepatutnya cashuA… atau cashuB…" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "त्यो cashu टोकन जस्तो देखिँदैन — cashuA… वा cashuB… हुनुपर्छ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dat ziet er niet uit als een cashu-token — verwacht cashuA… of cashuB…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "to nie wygląda na token cashu — oczekiwano cashuA… lub cashuB…" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "isso não parece um token cashu — esperava-se cashuA… ou cashuB…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "isso não parece um token cashu — esperado cashuA… ou cashuB…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "это не похоже на cashu-токен — ожидается cashuA… или cashuB…" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "det där ser inte ut som en cashu-token — väntade cashuA… eller cashuB…" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அது cashu டோக்கன் போல தெரியவில்லை — cashuA… அல்லது cashuB… எதிர்பார்க்கப்பட்டது" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อันนั้นดูไม่เหมือนโทเคน cashu — ควรเป็น cashuA… หรือ cashuB…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "bu bir cashu token'ına benzemiyor — cashuA… veya cashuB… bekleniyordu" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "це не схоже на cashu-токен — очікується cashuA… або cashuB…" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ cashu ٹوکن جیسا نہیں لگتا — cashuA… یا cashuB… متوقع تھا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cái đó không giống token cashu — cần dạng cashuA… hoặc cashuB…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "这看起来不像 cashu 代币 — 应为 cashuA… 或 cashuB…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "這看起來不像 cashu 代幣 — 應該是 cashuA… 或 cashuB…" + } + } + } + }, + "command.pay.public_confirm" : { + "comment" : "Confirmation gate before sending a cashu token to a public channel", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هذه قناة عامة — أي شخص يقرأها يمكنه استبدال الرمز. للإرسال رغم ذلك: /pay public" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এটা একটা পাবলিক চ্যানেল — যে কেউ পড়ে টোকেনটা ভাঙিয়ে নিতে পারে। তবুও পাঠাতে: /pay <টোকেন> public" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "dies ist ein öffentlicher kanal — alle, die mitlesen, können den token einlösen. trotzdem senden: /pay public" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "this is a public channel — anyone reading it can redeem the token. send anyway: /pay public" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "este es un canal público — cualquiera que lo lea puede canjear el token. enviar de todos modos: /pay public" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "این یک کانال عمومی است — هرکسی که آن را بخواند می‌تواند توکن را نقد کند. برای ارسال به‌هرحال: /pay public" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "pampublikong channel ito — kahit sinong nakakabasa ay puwedeng mag-redeem ng token. ipadala pa rin: /pay public" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ceci est un canal public — quiconque le lit peut encaisser le token. envoyer quand même : /pay public" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "זה ערוץ ציבורי — כל מי שקורא אותו יכול לפדות את הטוקן. לשלוח בכל זאת: /pay public" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "यह एक सार्वजनिक चैनल है — इसे पढ़ने वाला कोई भी टोकन भुना सकता है। फिर भी भेजना हो तो: /pay <टोकन> public" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "ini channel publik — siapa pun yang membacanya bisa menukarkan token itu. tetap kirim: /pay public" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "questo è un canale pubblico — chiunque lo legga può riscattare il token. invia comunque: /pay public" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ここは公開チャンネル — 読める人なら誰でもトークンを換金できる。それでも送るなら: /pay <トークン> public" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "여기는 공개 채널이에요 — 읽는 사람 누구나 토큰을 상환할 수 있어요. 그래도 보내려면: /pay <토큰> public" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "ini saluran awam — sesiapa yang membacanya boleh menebus token itu. hantar juga: /pay public" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "यो सार्वजनिक च्यानल हो — पढ्ने जो कोहीले टोकन भुनाउन सक्छ। जे होस् पठाउन: /pay <टोकन> public" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dit is een openbaar kanaal — iedereen die meeleest kan het token inwisselen. toch versturen: /pay public" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "to jest kanał publiczny — każdy, kto go czyta, może wykupić token. wyślij mimo to: /pay public" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "este é um canal público — qualquer pessoa que o leia pode resgatar o token. enviar mesmo assim: /pay public" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "este é um canal público — qualquer pessoa lendo pode resgatar o token. enviar mesmo assim: /pay public" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "это публичный канал — любой, кто его читает, может обналичить токен. всё равно отправить: /pay <токен> public" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "det här är en offentlig kanal — vem som helst som läser den kan lösa in tokenen. skicka ändå: /pay public" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இது பொது சேனல் — இதை படிக்கும் யார் வேண்டுமானாலும் டோக்கனை மீட்கலாம். எப்படியும் அனுப்ப: /pay <டோக்கன்> public" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "นี่คือช่องสาธารณะ — ใครที่อ่านอยู่ก็แลกโทเคนได้ ถ้าจะส่งจริง ๆ: /pay <โทเคน> public" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "burası herkese açık bir kanal — okuyan herkes token'ı bozdurabilir. yine de göndermek için: /pay public" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "це публічний канал — будь-хто, хто його читає, може погасити токен. надіслати все одно: /pay <токен> public" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "یہ ایک عوامی چینل ہے — جو بھی اسے پڑھ رہا ہے وہ ٹوکن ریڈیم کر سکتا ہے۔ پھر بھی بھیجنا ہو تو: /pay <ٹوکن> public" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đây là kênh công khai — bất kỳ ai đọc được đều có thể đổi token. vẫn muốn gửi: /pay public" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "这是公开频道 — 任何看到的人都能兑换这个代币。仍要发送:/pay <代币> public" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "這是公開頻道 — 任何看到的人都能兌換這個代幣。仍要送出:/pay <代幣> public" + } + } + } + }, + "command.pay.sent_private" : { + "comment" : "Confirmation after sending a cashu token in a private chat; placeholder is the amount summary", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم إرسال %@ — cashu رمز لحامله؛ من يستبدله أولًا يحصل على المال" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ পাঠানো হলো — cashu একটি বেয়ারার টোকেন; যে আগে ভাঙাবে, টাকা তারই" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ gesendet — cashu ist ein inhaber-token; wer ihn zuerst einlöst, bekommt das geld" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "sent %@ — cashu is a bearer token; whoever redeems it first gets the funds" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ enviado — cashu es un token al portador; quien lo canjee primero se queda con los fondos" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ارسال شد — cashu توکن حامل است؛ هرکس اول نقدش کند پول را می‌گیرد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "naipadala ang %@ — bearer token ang cashu; ang unang maka-redeem ang makakakuha ng pondo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ envoyé — cashu est un token au porteur ; la première personne qui l'encaisse récupère les fonds" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ נשלח — cashu הוא טוקן למחזיק בו; מי שפודה אותו ראשון מקבל את הכסף" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ भेजा गया — cashu एक बेयरर टोकन है; जो इसे पहले भुनाएगा, पैसे उसी के" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ terkirim — cashu adalah token pembawa; siapa yang menukarkannya lebih dulu, dia yang mendapat dananya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ inviato — cashu è un token al portatore; chi lo riscatta per primo ottiene i fondi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ を送った — cashu は持参人払いのトークン。最初に換金した人が資金を受け取る" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 보냈어요 — cashu는 소지자 토큰이라 먼저 상환하는 사람이 돈을 가져가요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ dihantar — cashu ialah token pembawa; sesiapa yang menebusnya dahulu mendapat dananya" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ पठाइयो — cashu वाहक टोकन हो; जसले पहिले भुनाउँछ, उसैले रकम पाउँछ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ verzonden — cashu is een token aan toonder; wie het als eerste inwisselt krijgt het geld" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "wysłano %@ — cashu to token na okaziciela; środki dostaje ten, kto pierwszy go wykupi" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ enviado — o cashu é um token ao portador; quem o resgatar primeiro fica com os fundos" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ enviado — cashu é um token ao portador; quem resgatar primeiro fica com os fundos" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ отправлено — cashu — это токен на предъявителя; средства получит тот, кто первым его обналичит" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "skickade %@ — cashu är en innehavartoken; den som löser in den först får pengarna" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ அனுப்பப்பட்டது — cashu வைத்திருப்பவருக்கே உரிய டோக்கன்; யார் முதலில் மீட்கிறாரோ அவருக்கே பணம் கிடைக்கும்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่ง %@ แล้ว — cashu เป็นโทเคนแบบผู้ถือ ใครแลกก่อนได้เงินไป" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ gönderildi — cashu hamiline yazılı bir token; kim önce bozdurursa parayı o alır" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "надіслано %@ — cashu — це токен на пред'явника; кошти отримає той, хто першим його погасить" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ بھیج دیا گیا — cashu ایک bearer ٹوکن ہے؛ جو پہلے اسے ریڈیم کرے گا رقم اسے ملے گی" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã gửi %@ — cashu là token theo người cầm giữ; ai đổi trước sẽ nhận được tiền" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已发送 %@ — cashu 是不记名代币,谁先兑换资金就归谁" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已送出 %@ — cashu 是不記名代幣,誰先兌換錢就是誰的" + } + } + } + }, + "command.pay.sent_public" : { + "comment" : "Confirmation after sending a cashu token to a public channel; placeholder is the amount summary", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم إرسال %@ إلى القناة العامة — يمكن لأي شخص هنا استبداله" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ পাবলিক চ্যানেলে পাঠানো হলো — এখানে যে কেউ এটা ভাঙিয়ে নিতে পারে" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ in den öffentlichen kanal gesendet — alle hier können ihn einlösen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "sent %@ to the public channel — anyone here can redeem it" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ enviado al canal público — cualquiera aquí puede canjearlo" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ به کانال عمومی ارسال شد — هرکسی اینجا می‌تواند نقدش کند" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "naipadala ang %@ sa pampublikong channel — kahit sino rito ay puwede itong i-redeem" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ envoyé sur le canal public — tout le monde ici peut l'encaisser" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ נשלח לערוץ הציבורי — כל אחד כאן יכול לפדות אותו" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ सार्वजनिक चैनल पर भेजा गया — यहाँ कोई भी इसे भुना सकता है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ terkirim ke channel publik — siapa pun di sini bisa menukarkannya" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ inviato al canale pubblico — chiunque qui può riscattarlo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ を公開チャンネルに送った — ここにいる誰でも換金できる" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "공개 채널에 %@ 보냈어요 — 여기 있는 누구나 상환할 수 있어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ dihantar ke saluran awam — sesiapa di sini boleh menebusnya" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ सार्वजनिक च्यानलमा पठाइयो — यहाँ भएको जो कोहीले भुनाउन सक्छ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ naar het openbare kanaal gestuurd — iedereen hier kan het inwisselen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "wysłano %@ na kanał publiczny — każdy tutaj może go wykupić" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ enviado para o canal público — qualquer pessoa aqui pode resgatá-lo" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ enviado para o canal público — qualquer pessoa aqui pode resgatar" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ отправлено в публичный канал — любой здесь может его обналичить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "skickade %@ till den offentliga kanalen — vem som helst här kan lösa in den" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பொது சேனலுக்கு %@ அனுப்பப்பட்டது — இங்குள்ள யார் வேண்டுமானாலும் அதை மீட்கலாம்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ส่ง %@ ไปยังช่องสาธารณะแล้ว — ใครในนี้ก็แลกได้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ herkese açık kanala gönderildi — buradaki herkes bozdurabilir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "надіслано %@ у публічний канал — будь-хто тут може його погасити" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ عوامی چینل پر بھیج دیا گیا — یہاں کوئی بھی اسے ریڈیم کر سکتا ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã gửi %@ vào kênh công khai — bất kỳ ai ở đây cũng có thể đổi nó" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已把 %@ 发送到公开频道 — 这里任何人都能兑换" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已把 %@ 送到公開頻道 — 這裡任何人都能兌換" + } + } + } + }, + "command.pay.usage" : { + "comment" : "Usage hint for /pay", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاستخدام: /pay — الصق رمز cashu: /pay cashuA…" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহার: /pay <টোকেন> — একটি cashu টোকেন পেস্ট করো: /pay cashuA…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "verwendung: /pay — füge einen cashu-token ein: /pay cashuA…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage: /pay — paste a cashu token: /pay cashuA…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /pay — pega un token cashu: /pay cashuA…" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربرد: /pay — یک توکن cashu را جای‌گذاری کن: /pay cashuA…" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "paggamit: /pay — i-paste ang isang cashu token: /pay cashuA…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage : /pay — colle un token cashu : /pay cashuA…" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שימוש: /pay — הדביקו טוקן cashu: /pay cashuA…" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोग: /pay <टोकन> — एक cashu टोकन पेस्ट करो: /pay cashuA…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "penggunaan: /pay — tempel token cashu: /pay cashuA…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /pay — incolla un token cashu: /pay cashuA…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "使い方: /pay <トークン> — cashu トークンを貼り付けて: /pay cashuA…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용법: /pay <토큰> — cashu 토큰을 붙여넣어요: /pay cashuA…" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "cara guna: /pay — tampal token cashu: /pay cashuA…" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोग: /pay <टोकन> — cashu टोकन टाँस्नुहोस्: /pay cashuA…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "gebruik: /pay — plak een cashu-token: /pay cashuA…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "użycie: /pay — wklej token cashu: /pay cashuA…" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /pay — cola um token cashu: /pay cashuA…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /pay — cole um token cashu: /pay cashuA…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "использование: /pay <токен> — вставь cashu-токен: /pay cashuA…" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "användning: /pay — klistra in en cashu-token: /pay cashuA…" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பயன்பாடு: /pay <டோக்கன்> — ஒரு cashu டோக்கனை ஒட்டவும்: /pay cashuA…" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีใช้: /pay <โทเคน> — วางโทเคน cashu: /pay cashuA…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kullanım: /pay — bir cashu token'ı yapıştır: /pay cashuA…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "використання: /pay <токен> — встав cashu-токен: /pay cashuA…" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعمال: /pay <ٹوکن> — cashu ٹوکن پیسٹ کریں: /pay cashuA…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cách dùng: /pay — dán một token cashu: /pay cashuA…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/pay <代币> — 粘贴一个 cashu 代币:/pay cashuA…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/pay <代幣> — 貼上 cashu 代幣:/pay cashuA…" + } + } + } + }, + "command.ping.started" : { + "comment" : "Confirmation that /ping sent a probe", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جارٍ إرسال ping إلى %@…" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-কে ping করা হচ্ছে…" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "pinge %@…" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "pinging %@…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "haciendo ping a %@…" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "در حال ping به %@…" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "pini-ping si %@…" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping de %@ en cours…" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שולחים ping אל %@…" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ को ping किया जा रहा है…" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "melakukan ping ke %@…" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "ping a %@…" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ に ping 中…" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@에게 ping 보내는 중…" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "sedang ping %@…" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ लाई ping गर्दै…" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ wordt gepingd…" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "pinguję %@…" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "a fazer ping a %@…" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "fazendo ping em %@…" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "пингую %@…" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "pingar %@…" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ க்கு ping அனுப்புகிறது…" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "กำลัง ping %@…" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ için ping atılıyor…" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "пінгуємо %@…" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کو ping کیا جا رہا ہے…" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đang ping %@…" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在 ping %@…" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在 ping %@…" + } + } + } + }, + "command.trace.no_path" : { + "comment" : "Reply when /trace has no mesh path to the target", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يوجد مسار معروف إلى %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-এর কোনো জানা পথ নেই" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "kein bekannter pfad zu %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "no known path to %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no hay ruta conocida hacia %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مسیر شناخته‌شده‌ای به %@ وجود ندارد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "walang kilalang path papunta kay %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "aucun chemin connu vers %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין נתיב מוכר אל %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ तक कोई ज्ञात रास्ता नहीं" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak ada jalur yang diketahui ke %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "nessun percorso noto verso %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ への既知の経路がない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@(으)로 가는 알려진 경로가 없어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tiada laluan diketahui ke %@" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ सम्मको कुनै ज्ञात बाटो छैन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "geen bekend pad naar %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "brak znanej ścieżki do %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "nenhum caminho conhecido até %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "nenhum caminho conhecido até %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "нет известного пути до %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "ingen känd väg till %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ க்கு தெரிந்த பாதை இல்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่รู้เส้นทางไปยัง %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ için bilinen bir yol yok" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "немає відомого шляху до %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ تک کوئی معلوم راستہ نہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không có đường đi nào đã biết tới %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有到 %@ 的已知路径" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "沒有通往 %@ 的已知路徑" + } + } + } + }, + "command.trace.path_many" : { + "comment" : "Reply to /trace; placeholders are the node chain and hop count", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المسار المقدّر: %1$@ (%2$lld قفزات)" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আনুমানিক পথ: %1$@ (%2$lld হপ)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "geschätzter pfad: %1$@ (%2$lld hops)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "estimated path: %1$@ (%2$lld hops)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "ruta estimada: %1$@ (%2$lld saltos)" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مسیر تخمینی: %1$@ (%2$lld هاپ)" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "tinatayang path: %1$@ (%2$lld na hop)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "chemin estimé : %1$@ (%2$lld sauts)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נתיב משוער: %1$@ (%2$lld הופים)" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनुमानित रास्ता: %1$@ (%2$lld हॉप)" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "perkiraan jalur: %1$@ (%2$lld hop)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "percorso stimato: %1$@ (%2$lld hop)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推定経路: %1$@ (%2$lldホップ)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예상 경로: %1$@ (%2$lld홉)" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "laluan anggaran: %1$@ (%2$lld hop)" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनुमानित बाटो: %1$@ (%2$lld हप)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "geschat pad: %1$@ (%2$lld hops)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "szacowana ścieżka: %1$@ (liczba przeskoków: %2$lld)" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "caminho estimado: %1$@ (%2$lld saltos)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "caminho estimado: %1$@ (%2$lld saltos)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "примерный путь: %1$@ (хопов: %2$lld)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "uppskattad väg: %1$@ (%2$lld hopp)" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மதிப்பிடப்பட்ட பாதை: %1$@ (%2$lld தாவல்கள்)" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เส้นทางโดยประมาณ: %1$@ (%2$lld ฮอป)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "tahmini yol: %1$@ (%2$lld atlama)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "орієнтовний шлях: %1$@ (%2$lld хопів)" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تخمینی راستہ: %1$@ (%2$lld ہاپس)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đường đi ước tính: %1$@ (%2$lld chặng)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "估计路径:%1$@(%2$lld 跳)" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "估計路徑:%1$@(%2$lld 跳)" + } + } + } + }, + "command.trace.path_one" : { + "comment" : "Reply to /trace for a single-hop path; placeholder is the node chain", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المسار المقدّر: %@ (قفزة واحدة)" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আনুমানিক পথ: %@ (১ হপ)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "geschätzter pfad: %@ (1 hop)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "estimated path: %@ (1 hop)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "ruta estimada: %@ (1 salto)" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مسیر تخمینی: %@ (۱ هاپ)" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "tinatayang path: %@ (1 hop)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "chemin estimé : %@ (1 saut)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נתיב משוער: %@ (הופ אחד)" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनुमानित रास्ता: %@ (1 हॉप)" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "perkiraan jalur: %@ (1 hop)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "percorso stimato: %@ (1 hop)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推定経路: %@ (1ホップ)" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "예상 경로: %@ (1홉)" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "laluan anggaran: %@ (1 hop)" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनुमानित बाटो: %@ (1 हप)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "geschat pad: %@ (1 hop)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "szacowana ścieżka: %@ (1 przeskok)" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "caminho estimado: %@ (1 salto)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "caminho estimado: %@ (1 salto)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "примерный путь: %@ (1 хоп)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "uppskattad väg: %@ (1 hopp)" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "மதிப்பிடப்பட்ட பாதை: %@ (1 தாவல்)" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เส้นทางโดยประมาณ: %@ (1 ฮอป)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "tahmini yol: %@ (1 atlama)" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "орієнтовний шлях: %@ (1 хоп)" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تخمینی راستہ: %@ (1 ہاپ)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đường đi ước tính: %@ (1 chặng)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "估计路径:%@(1 跳)" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "估計路徑:%@(1 跳)" + } + } + } + }, + "command.trace.you" : { + "comment" : "Label for the local device at the start of a /trace path", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنت" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "তুমি" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "du" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "you" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "tú" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "تو" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "ikaw" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "toi" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "את/ה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "तुम" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "kamu" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "tu" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "あなた" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "나" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "kamu" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "तिमी" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "jij" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ty" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "tu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "você" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ты" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "du" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "நீ" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "sen" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "ти" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "bạn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "你" + } + } + } + }, + "command.unblock.done" : { + "comment" : "Confirmation after unblocking a mesh peer", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم رفع الحظر عن %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-কে আনব্লক করা হলো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "blockierung von %@ aufgehoben" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "unblocked %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ desbloqueado" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مسدودیت %@ برداشته شد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "na-unblock si %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ débloqué" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "החסימה של %@ הוסרה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ अनब्लॉक किया गया" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "blokir %@ dibuka" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sbloccato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ のブロックを解除した" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 차단을 해제했어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ dinyahsekat" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ अनब्लक गरियो" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ gedeblokkeerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "odblokowano %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ desbloqueado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ desbloqueado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ разблокирован" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "avblockerade %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ தடைநீக்கப்பட்டார்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลิกบล็อก %@ แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ engeli kaldırıldı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ розблоковано" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کو ان بلاک کر دیا گیا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã bỏ chặn %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已解除屏蔽 %@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已解除封鎖 %@" + } + } + } + }, + "command.unblock.done_geo" : { + "comment" : "Confirmation after unblocking a geohash participant", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم رفع الحظر عن %@ في محادثات geohash" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash চ্যাটে %@-কে আনব্লক করা হলো" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "blockierung von %@ in geohash-chats aufgehoben" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "unblocked %@ in geohash chats" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ desbloqueado en los chats de geohash" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "مسدودیت %@ در چت‌های geohash برداشته شد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "na-unblock si %@ sa mga geohash chat" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ débloqué dans les chats geohash" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "החסימה של %@ הוסרה בצ'אטים של geohash" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash चैट में %@ को अनब्लॉक किया गया" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "blokir %@ dibuka di chat geohash" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sbloccato nelle chat geohash" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash チャットで %@ のブロックを解除した" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash 채팅에서 %@ 차단을 해제했어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ dinyahsekat dalam sembang geohash" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash च्याटहरूमा %@ अनब्लक गरियो" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ gedeblokkeerd in geohash-chats" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "odblokowano %@ w czatach geohash" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ desbloqueado nas conversas geohash" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ desbloqueado nos chats geohash" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ разблокирован в geohash-чатах" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "avblockerade %@ i geohash-chattar" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash அரட்டைகளில் %@ தடைநீக்கப்பட்டார்" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลิกบล็อก %@ ในแชท geohash แล้ว" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash sohbetlerinde %@ engeli kaldırıldı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ розблоковано в geohash-чатах" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "geohash چیٹس میں %@ کو ان بلاک کر دیا گیا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "đã bỏ chặn %@ trong các kênh trò chuyện geohash" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已在 geohash 聊天中解除屏蔽 %@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "已在 geohash 聊天中解除封鎖 %@" + } + } + } + }, + "command.unblock.failed" : { + "comment" : "Error when /unblock can't resolve the target", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعذّر رفع الحظر عن %@: غير موجود" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@-কে আনব্লক করা গেল না: পাওয়া যায়নি" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "kann %@ nicht entblocken: nicht gefunden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "cannot unblock %@: not found" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no se puede desbloquear a %@: no encontrado" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "نمی‌توان مسدودیت %@ را برداشت: پیدا نشد" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi ma-unblock si %@: hindi nahanap" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossible de débloquer %@ : introuvable" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אי אפשר לבטל את החסימה של %@: לא נמצא" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ को अनब्लॉक नहीं कर सकते: नहीं मिला" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak bisa membuka blokir %@: tidak ditemukan" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "impossibile sbloccare %@: non trovato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ のブロックを解除できない: 見つからない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 차단을 해제할 수 없어요: 찾을 수 없음" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak dapat menyahsekat %@: tidak dijumpai" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ लाई अनब्लक गर्न सकिएन: फेला परेन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan %@ niet deblokkeren: niet gevonden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nie można odblokować %@: nie znaleziono" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "não é possível desbloquear %@: não encontrado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "não dá para desbloquear %@: não encontrado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "не получается разблокировать %@: не найден" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "kan inte avblockera %@: hittades inte" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ஐ தடைநீக்க முடியாது: கிடைக்கவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เลิกบล็อก %@ ไม่ได้: ไม่พบ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ engeli kaldırılamıyor: bulunamadı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "не вдалося розблокувати %@: не знайдено" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ کو ان بلاک نہیں کیا جا سکا: نہیں ملا" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không thể bỏ chặn %@: không tìm thấy" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法解除屏蔽 %@:未找到" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "無法解除封鎖 %@:找不到" + } + } + } + }, + "command.unblock.not_blocked" : { + "comment" : "Reply when /unblock targets a nickname that isn't blocked", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ليس محظورًا" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ব্লক করা নেই" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ist nicht blockiert" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is not blocked" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ no está bloqueado" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ مسدود نیست" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "hindi naka-block si %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ n'est pas bloqué" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ לא חסום" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ब्लॉक नहीं है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ tidak diblokir" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ non è bloccato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ はブロックされていない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@은(는) 차단되어 있지 않아요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ tidak disekat" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ब्लक गरिएको छैन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ is niet geblokkeerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ nie jest na liście zablokowanych" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ não está bloqueado" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ não está bloqueado" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не заблокирован" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ är inte blockerad" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ தடுக்கப்படவில்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ไม่ได้ถูกบล็อก" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ engelli değil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ не заблоковано" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ بلاک نہیں ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ không bị chặn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 未被屏蔽" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 沒有被封鎖" + } + } + } + }, + "command.unblock.usage" : { + "comment" : "Usage hint for /unblock", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاستخدام: /unblock " + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "ব্যবহার: /unblock <ডাকনাম>" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "verwendung: /unblock " + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage: /unblock " + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /unblock " + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کاربرد: /unblock " + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "paggamit: /unblock " + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "usage : /unblock " + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שימוש: /unblock " + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "उपयोग: /unblock <उपनाम>" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "penggunaan: /unblock " + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /unblock " + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "使い方: /unblock <ニックネーム>" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "사용법: /unblock <닉네임>" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "cara guna: /unblock " + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "प्रयोग: /unblock <उपनाम>" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "gebruik: /unblock " + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "użycie: /unblock " + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /unblock " + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "uso: /unblock " + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "использование: /unblock <ник>" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "användning: /unblock " + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "பயன்பாடு: /unblock <புனைப்பெயர்>" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "วิธีใช้: /unblock <ชื่อเล่น>" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kullanım: /unblock " + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "використання: /unblock <нікнейм>" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "استعمال: /unblock <عرفی نام>" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cách dùng: /unblock " + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/unblock <昵称>" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "用法:/unblock <暱稱>" + } + } + } + }, + "command.who.nobody" : { + "comment" : "Reply to /who when no context is available", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا أحد في الجوار" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "আশেপাশে কেউ নেই" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "niemand in der nähe" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "nobody around" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "no hay nadie cerca" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "کسی این اطراف نیست" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "walang tao sa paligid" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "personne dans les parages" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין אף אחד בסביבה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "आस-पास कोई नहीं" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "tidak ada orang di sekitar" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "nessuno nei paraggi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "周りに誰もいない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "주변에 아무도 없어요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tiada sesiapa berdekatan" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "वरपर कोही छैन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "niemand in de buurt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nikogo w pobliżu" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "ninguém por perto" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "ninguém por perto" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "рядом никого" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "ingen i närheten" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "அருகில் யாரும் இல்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่มีใครอยู่แถวนี้" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "etrafta kimse yok" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "нікого поруч" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آس پاس کوئی نہیں" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "không có ai quanh đây" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "附近没有人" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "附近沒有人" + } + } + } + }, + "command.who.none_online" : { + "comment" : "Reply to /who when nobody else is online", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا أحد آخر متصل الآن" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "এই মুহূর্তে আর কেউ অনলাইনে নেই" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "gerade ist sonst niemand online" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "no one else is online right now" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "nadie más está en línea ahora mismo" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "الان کس دیگری آنلاین نیست" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "walang ibang online ngayon" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "personne d'autre n'est en ligne pour l'instant" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אף אחד אחר לא מחובר כרגע" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "अभी कोई और ऑनलाइन नहीं है" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "belum ada orang lain yang online sekarang" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "nessun altro è online in questo momento" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今は他に誰もオンラインじゃない" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "지금은 다른 사람이 아무도 온라인이 아니에요" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "tiada orang lain dalam talian sekarang" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "अहिले अरू कोही अनलाइन छैन" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "er is nu verder niemand online" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "nikt inny nie jest teraz online" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "não está mais ninguém online neste momento" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "ninguém mais está online agora" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "сейчас больше никого нет в сети" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "ingen annan är online just nu" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "இப்போது வேறு யாரும் ஆன்லைனில் இல்லை" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตอนนี้ไม่มีคนอื่นออนไลน์อยู่" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "şu anda başka kimse çevrimiçi değil" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "зараз більше нікого немає онлайн" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "ابھی کوئی اور آن لائن نہیں ہے" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "hiện không có ai khác trực tuyến" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "现在没有其他人在线" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "現在沒有其他人在線上" + } + } + } + }, + "command.who.online" : { + "comment" : "Reply to /who; placeholder is the list of names", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "متصلون: %@" + } + }, + "bn" : { + "stringUnit" : { + "state" : "translated", + "value" : "অনলাইনে: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "en línea: %@" + } + }, + "fa" : { + "stringUnit" : { + "state" : "translated", + "value" : "آنلاین: %@" + } + }, + "fil" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "en ligne : %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחוברים: %@" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ऑनलाइन: %@" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オンライン: %@" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "온라인: %@" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "dalam talian: %@" + } + }, + "ne" : { + "stringUnit" : { + "state" : "translated", + "value" : "अनलाइन: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "pt" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "в сети: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "online: %@" + } + }, + "ta" : { + "stringUnit" : { + "state" : "translated", + "value" : "ஆன்லைன்: %@" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ออนไลน์: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "çevrimiçi: %@" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "онлайн: %@" + } + }, + "ur" : { + "stringUnit" : { + "state" : "translated", + "value" : "آن لائن: %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "trực tuyến: %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在线:%@" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "在線上:%@" + } + } + } + }, "content.delivery.reason.legacy_media_consent_required" : { "comment" : "Failure reason when a legacy private-media send lacks per-send consent", "extractionState" : "manual", diff --git a/bitchat/Services/CommandProcessor.swift b/bitchat/Services/CommandProcessor.swift index f86f2eca..c37aa3dc 100644 --- a/bitchat/Services/CommandProcessor.swift +++ b/bitchat/Services/CommandProcessor.swift @@ -105,7 +105,7 @@ final class CommandProcessor { @MainActor func process(_ command: String) -> CommandResult { let parts = command.split(separator: " ", maxSplits: 1, omittingEmptySubsequences: false) - guard let cmd = parts.first else { return .error(message: "Invalid command") } + guard let cmd = parts.first else { return .error(message: String(localized: "command.error.invalid", defaultValue: "invalid command", comment: "Error for an empty or unparseable slash command")) } let args = parts.count > 1 ? String(parts[1]) : "" // Geohash context: disable favoriting in public geohash or GeoDM @@ -133,19 +133,19 @@ final class CommandProcessor { case "/unblock": return handleUnblock(args) case "/group": - if inGeoPublic || inGeoDM { return .error(message: "groups are only for mesh peers in #mesh") } + if inGeoPublic || inGeoDM { return .error(message: String(localized: "command.error.groups_mesh_only", defaultValue: "groups are only for mesh peers in #mesh", comment: "Error when a group command is used outside the mesh channel")) } return handleGroup(args) case "/fav": - if inGeoPublic || inGeoDM { return .error(message: "favorites are only for mesh peers in #mesh") } + if inGeoPublic || inGeoDM { return .error(message: String(localized: "command.error.favorites_mesh_only", defaultValue: "favorites are only for mesh peers in #mesh", comment: "Error when a favorites command is used outside the mesh channel")) } return handleFavorite(args, add: true) case "/unfav": - if inGeoPublic || inGeoDM { return .error(message: "favorites are only for mesh peers in #mesh") } + if inGeoPublic || inGeoDM { return .error(message: String(localized: "command.error.favorites_mesh_only", defaultValue: "favorites are only for mesh peers in #mesh", comment: "Error when a favorites command is used outside the mesh channel")) } return handleFavorite(args, add: false) case "/ping": - if inGeoPublic || inGeoDM { return .error(message: "ping only works for mesh peers in #mesh") } + if inGeoPublic || inGeoDM { return .error(message: String(localized: "command.error.ping_mesh_only", defaultValue: "ping only works for mesh peers in #mesh", comment: "Error when /ping is used outside the mesh channel")) } return handlePing(args) case "/trace": - if inGeoPublic || inGeoDM { return .error(message: "trace only works for mesh peers in #mesh") } + if inGeoPublic || inGeoDM { return .error(message: String(localized: "command.error.trace_mesh_only", defaultValue: "trace only works for mesh peers in #mesh", comment: "Error when /trace is used outside the mesh channel")) } return handleTrace(args) case "/pay": return handlePay(args) @@ -154,31 +154,16 @@ final class CommandProcessor { case "/help": return .success(message: Self.helpText) default: - return .error(message: "unknown command: \(cmd) — type /help for commands") + return .error(message: String(format: String(localized: "command.error.unknown", defaultValue: "unknown command: %@ — type /help for commands", comment: "Error for an unrecognized slash command; placeholder is the typed command"), locale: .current, String(cmd))) } } /// Local-only command reference, printed as a system message. The /// suggestion panel hides once arguments are typed, and typos used to /// dead-end in a bare "unknown command" — this is the way out. - static let helpText = """ - commands: - /msg @name [message] — start a private chat - /who — list who's here - /clear — clear this chat - /hug @name — send a hug - /slap @name — slap with a large trout - /block @name · /unblock @name - /fav @name · /unfav @name — favorites (mesh only) - /group create — start an encrypted group - /group invite @name · /group remove @name — manage members (creator) - /group leave · /group list — leave or list your groups - /ping @name — measure round-trip time (mesh only) - /trace @name — estimated mesh path (mesh only) - /pay — send a cashu ecash token in this chat - /drop — pin a note to this place for 24h (needs location) - /help — this list - """ + static var helpText: String { + String(localized: "command.help.text", defaultValue: "commands:\n/msg @name [message] — start a private chat\n/who — list who's here\n/clear — clear this chat\n/hug @name — send a hug\n/slap @name — slap with a large trout\n/block @name · /unblock @name\n/fav @name · /unfav @name — favorites (mesh only)\n/group create — start an encrypted group\n/group invite @name · /group remove @name — manage members (creator)\n/group leave · /group list — leave or list your groups\n/ping @name — measure round-trip time (mesh only)\n/trace @name — estimated mesh path (mesh only)\n/pay — send a cashu ecash token in this chat\n/drop — pin a note to this place for 24h (needs location)\n/help — this list", comment: "The /help reference list; command syntax stays verbatim, only the descriptions after each dash are translated") + } /// /drop — a dead drop: pins a note to the current building-level /// geohash with a 24h NIP-40 expiry. Anyone who passes through here and @@ -186,28 +171,28 @@ final class CommandProcessor { /// reads it. private func handleDrop(_ args: String) -> CommandResult { guard LocationNotesSettings.enabled else { - return .error(message: "location notes are off — enable them in the info screen") + return .error(message: String(localized: "command.drop.notes_off", defaultValue: "location notes are off — enable them in the info screen", comment: "Error when /drop is used while location notes are disabled")) } guard let content = args.trimmedOrNilIfEmpty else { - return .error(message: "usage: /drop ") + return .error(message: String(localized: "command.drop.usage", defaultValue: "usage: /drop ", comment: "Usage hint for /drop")) } let location = LocationChannelManager.shared guard location.permissionState == .authorized else { - return .error(message: "leaving a note needs location — enable it in the info screen") + return .error(message: String(localized: "command.drop.needs_location", defaultValue: "leaving a note needs location — enable it in the info screen", comment: "Error when /drop is used without location permission")) } guard let geohash = location.availableChannels.first(where: { $0.level == .building })?.geohash else { location.refreshChannels() - return .error(message: "still finding this place — try again in a moment") + return .error(message: String(localized: "command.drop.finding_place", defaultValue: "still finding this place — try again in a moment", comment: "Error when /drop runs before a location fix arrives")) } guard let nickname = contextProvider?.nickname, LocationNotesManager.postDrop(content: content, nickname: nickname, geohash: geohash) else { - return .error(message: "no geo relays reachable — note not left") + return .error(message: String(localized: "command.drop.no_relays", defaultValue: "no geo relays reachable — note not left", comment: "Error when /drop finds no reachable geo relays")) } // Leaving a note is an explicit notes act: it unlocks the passive // nearby-notes counter (tap-to-reveal) so the sender sees their own // drop counted on the timeline. NearbyNotesCounter.shared.reveal() - return .success(message: "📍 note left here — it fades in 24h") + return .success(message: String(localized: "command.drop.left", defaultValue: "📍 note left here — it fades in 24h", comment: "Confirmation after /drop pins a note")) } // MARK: - Command Handlers @@ -215,14 +200,14 @@ final class CommandProcessor { private func handleMessage(_ args: String) -> CommandResult { let parts = args.split(separator: " ", maxSplits: 1, omittingEmptySubsequences: false) guard !parts.isEmpty else { - return .error(message: "usage: /msg @nickname [message]") + return .error(message: String(localized: "command.msg.usage", defaultValue: "usage: /msg @nickname [message]", comment: "Usage hint for /msg")) } let targetName = String(parts[0]) let nickname = targetName.hasPrefix("@") ? String(targetName.dropFirst()) : targetName guard let peerID = contextProvider?.getPeerIDForNickname(nickname) else { - return .error(message: "'\(nickname)' not found") + return .error(message: String(format: String(localized: "command.msg.not_found", defaultValue: "'%@' not found", comment: "Error when /msg can't resolve the nickname"), locale: .current, nickname)) } contextProvider?.startPrivateChat(with: peerID) @@ -232,7 +217,7 @@ final class CommandProcessor { contextProvider?.sendPrivateMessage(message, to: peerID) } - return .success(message: "started private chat with \(nickname)") + return .success(message: String(format: String(localized: "command.msg.started", defaultValue: "started private chat with %@", comment: "Confirmation after /msg opens a private chat"), locale: .current, nickname)) } private func handleWho() -> CommandResult { @@ -240,22 +225,22 @@ final class CommandProcessor { switch contextProvider?.activeChannel ?? .mesh { case .location(let ch): // Geohash context: show visible geohash participants (exclude self) - guard let vm = contextProvider else { return .success(message: "nobody around") } + guard let vm = contextProvider else { return .success(message: String(localized: "command.who.nobody", defaultValue: "nobody around", comment: "Reply to /who when no context is available")) } let myHex = (try? vm.idBridge.deriveIdentity(forGeohash: ch.geohash))?.publicKeyHex.lowercased() let people = vm.getVisibleGeoParticipants().filter { person in if let me = myHex { return person.id.lowercased() != me } return true } let names = people.map { $0.displayName } - if names.isEmpty { return .success(message: "no one else is online right now") } - return .success(message: "online: " + names.sorted().joined(separator: ", ")) + if names.isEmpty { return .success(message: String(localized: "command.who.none_online", defaultValue: "no one else is online right now", comment: "Reply to /who when nobody else is online")) } + return .success(message: String(format: String(localized: "command.who.online", defaultValue: "online: %@", comment: "Reply to /who; placeholder is the list of names"), locale: .current, names.sorted().joined(separator: ", "))) case .mesh: // Mesh context: show connected peer nicknames guard let peers = meshService?.getPeerNicknames(), !peers.isEmpty else { - return .success(message: "no one else is online right now") + return .success(message: String(localized: "command.who.none_online", defaultValue: "no one else is online right now", comment: "Reply to /who when nobody else is online")) } let onlineList = peers.values.sorted().joined(separator: ", ") - return .success(message: "online: \(onlineList)") + return .success(message: String(format: String(localized: "command.who.online", defaultValue: "online: %@", comment: "Reply to /who; placeholder is the list of names"), locale: .current, onlineList)) } } @@ -271,14 +256,14 @@ final class CommandProcessor { private func handleEmote(_ args: String, command: String, action: String, emoji: String, suffix: String = "") -> CommandResult { let targetName = args.trimmed guard !targetName.isEmpty else { - return .error(message: "usage: /\(command) ") + return .error(message: String(format: String(localized: "command.action.usage", defaultValue: "usage: /%@ ", comment: "Usage hint for a command that takes a nickname; placeholder is the command name"), locale: .current, command)) } let nickname = targetName.hasPrefix("@") ? String(targetName.dropFirst()) : targetName guard let targetPeerID = contextProvider?.getPeerIDForNickname(nickname), let myNickname = contextProvider?.nickname else { - return .error(message: "cannot \(command) \(nickname): not found") + return .error(message: String(format: String(localized: "command.action.not_found", defaultValue: "cannot %1$@ %2$@: not found", comment: "Error when an action command can't resolve its target; placeholders are the command and the nickname"), locale: .current, command, nickname)) } let emoteContent = "* \(emoji) \(myNickname) \(action) \(nickname)\(suffix) *" @@ -345,7 +330,7 @@ final class CommandProcessor { let meshList = blockedNicknames.isEmpty ? "none" : blockedNicknames.sorted().joined(separator: ", ") let geoList = geoNames.isEmpty ? "none" : geoNames.sorted().joined(separator: ", ") - return .success(message: "blocked peers: \(meshList) | geohash blocks: \(geoList)") + return .success(message: String(format: String(localized: "command.block.list", defaultValue: "blocked peers: %1$@ | geohash blocks: %2$@", comment: "Reply to /block with no argument; placeholders are the mesh and geohash block lists"), locale: .current, meshList, geoList)) } let nickname = targetName.hasPrefix("@") ? String(targetName.dropFirst()) : targetName @@ -353,7 +338,7 @@ final class CommandProcessor { if let peerID = contextProvider?.getPeerIDForNickname(nickname), let fingerprint = meshService?.getFingerprint(for: peerID) { if identityManager.isBlocked(fingerprint: fingerprint) { - return .success(message: "\(nickname) is already blocked") + return .success(message: String(format: String(localized: "command.block.already", defaultValue: "%@ is already blocked", comment: "Reply when /block targets an already-blocked nickname"), locale: .current, nickname)) } // Block the user (mesh/noise identity) if var identity = identityManager.getSocialIdentity(for: fingerprint) { @@ -375,24 +360,24 @@ final class CommandProcessor { // Scrub their carried public messages now, while the peerID is // resolvable, so they can't resurface as archived echoes. meshArchive?.purgeArchivedPublicMessages(from: peerID) - return .success(message: "blocked \(nickname). you will no longer receive messages from them") + return .success(message: String(format: String(localized: "command.block.done", defaultValue: "blocked %@. you will no longer see their messages", comment: "Confirmation after blocking a mesh peer"), locale: .current, nickname)) } // Mesh lookup failed; try geohash (Nostr) participant by display name if let pub = contextProvider?.nostrPubkeyForDisplayName(nickname) { if identityManager.isNostrBlocked(pubkeyHexLowercased: pub) { - return .success(message: "\(nickname) is already blocked") + return .success(message: String(format: String(localized: "command.block.already", defaultValue: "%@ is already blocked", comment: "Reply when /block targets an already-blocked nickname"), locale: .current, nickname)) } identityManager.setNostrBlocked(pub, isBlocked: true) - return .success(message: "blocked \(nickname) in geohash chats") + return .success(message: String(format: String(localized: "command.block.done_geo", defaultValue: "blocked %@ in geohash chats", comment: "Confirmation after blocking a geohash participant"), locale: .current, nickname)) } - return .error(message: "cannot block \(nickname): not found or unable to verify identity") + return .error(message: String(format: String(localized: "command.block.failed", defaultValue: "cannot block %@: not found or unable to verify identity", comment: "Error when /block can't resolve or verify the target"), locale: .current, nickname)) } private func handleUnblock(_ args: String) -> CommandResult { let targetName = args.trimmed guard !targetName.isEmpty else { - return .error(message: "usage: /unblock ") + return .error(message: String(localized: "command.unblock.usage", defaultValue: "usage: /unblock ", comment: "Usage hint for /unblock")) } let nickname = targetName.hasPrefix("@") ? String(targetName.dropFirst()) : targetName @@ -400,23 +385,23 @@ final class CommandProcessor { if let peerID = contextProvider?.getPeerIDForNickname(nickname), let fingerprint = meshService?.getFingerprint(for: peerID) { if !identityManager.isBlocked(fingerprint: fingerprint) { - return .success(message: "\(nickname) is not blocked") + return .success(message: String(format: String(localized: "command.unblock.not_blocked", defaultValue: "%@ is not blocked", comment: "Reply when /unblock targets a nickname that isn't blocked"), locale: .current, nickname)) } identityManager.setBlocked(fingerprint, isBlocked: false) - return .success(message: "unblocked \(nickname)") + return .success(message: String(format: String(localized: "command.unblock.done", defaultValue: "unblocked %@", comment: "Confirmation after unblocking a mesh peer"), locale: .current, nickname)) } // Try geohash unblock if let pub = contextProvider?.nostrPubkeyForDisplayName(nickname) { if !identityManager.isNostrBlocked(pubkeyHexLowercased: pub) { - return .success(message: "\(nickname) is not blocked") + return .success(message: String(format: String(localized: "command.unblock.not_blocked", defaultValue: "%@ is not blocked", comment: "Reply when /unblock targets a nickname that isn't blocked"), locale: .current, nickname)) } identityManager.setNostrBlocked(pub, isBlocked: false) - return .success(message: "unblocked \(nickname) in geohash chats") + return .success(message: String(format: String(localized: "command.unblock.done_geo", defaultValue: "unblocked %@ in geohash chats", comment: "Confirmation after unblocking a geohash participant"), locale: .current, nickname)) } - return .error(message: "cannot unblock \(nickname): not found") + return .error(message: String(format: String(localized: "command.unblock.failed", defaultValue: "cannot unblock %@: not found", comment: "Error when /unblock can't resolve the target"), locale: .current, nickname)) } - private static let groupUsage = "usage: /group create · invite @name · remove @name · leave · list" + private static var groupUsage: String { String(localized: "command.group.usage", defaultValue: "usage: /group create · invite @name · remove @name · leave · list", comment: "Usage hint for /group subcommands") } private func handleGroup(_ args: String) -> CommandResult { let parts = args.split(separator: " ", maxSplits: 1, omittingEmptySubsequences: true) @@ -454,12 +439,12 @@ final class CommandProcessor { private func resolveMeshPeer(_ args: String, command: String) -> MeshPeerResolution { let targetName = args.trimmed guard !targetName.isEmpty else { - return .failed(.error(message: "usage: /\(command) ")) + return .failed(.error(message: String(format: String(localized: "command.action.usage", defaultValue: "usage: /%@ ", comment: "Usage hint for a command that takes a nickname; placeholder is the command name"), locale: .current, command))) } let nickname = targetName.hasPrefix("@") ? String(targetName.dropFirst()) : targetName guard let peerID = contextProvider?.getPeerIDForNickname(nickname), !peerID.isGeoDM, !peerID.isGeoChat else { - return .failed(.error(message: "cannot \(command) \(nickname): not found on mesh")) + return .failed(.error(message: String(format: String(localized: "command.action.not_found_mesh", defaultValue: "cannot %1$@ %2$@: not found on mesh", comment: "Error when a mesh-only command can't resolve its target; placeholders are the command and the nickname"), locale: .current, command, nickname))) } return .resolved(peerID: peerID, nickname: nickname) } @@ -488,7 +473,7 @@ final class CommandProcessor { } ?? "" provider?.addCommandOutput("pong from \(nickname): \(result.rttMs) ms\(hopText)", to: destination) } - return .success(message: "pinging \(nickname)…") + return .success(message: String(format: String(localized: "command.ping.started", defaultValue: "pinging %@…", comment: "Confirmation that /ping sent a probe"), locale: .current, nickname)) } private func handleTrace(_ args: String) -> CommandResult { @@ -500,16 +485,20 @@ final class CommandProcessor { guard let mesh = meshService, let intermediates = meshDiagnostics?.computeMeshPath(to: target.peerID) else { - return .success(message: "no known path to \(target.nickname)") + return .success(message: String(format: String(localized: "command.trace.no_path", defaultValue: "no known path to %@", comment: "Reply when /trace has no mesh path to the target"), locale: .current, target.nickname)) } // Graph-derived from gossiped neighbor claims, not route-recorded — // present it as an estimate. let hopNames = intermediates.map { hop in mesh.peerNickname(peerID: hop) ?? "\(hop.id.prefix(8))…" } - let chain = (["you"] + hopNames + [target.nickname]).joined(separator: " → ") + let you = String(localized: "command.trace.you", defaultValue: "you", comment: "Label for the local device at the start of a /trace path") + let chain = ([you] + hopNames + [target.nickname]).joined(separator: " → ") let hops = intermediates.count + 1 - return .success(message: "estimated path: \(chain) (\(hops) hop\(hops == 1 ? "" : "s"))") + let pathMessage = hops == 1 + ? String(format: String(localized: "command.trace.path_one", defaultValue: "estimated path: %@ (1 hop)", comment: "Reply to /trace for a single-hop path; placeholder is the node chain"), locale: .current, chain) + : String(format: String(localized: "command.trace.path_many", defaultValue: "estimated path: %1$@ (%2$lld hops)", comment: "Reply to /trace; placeholders are the node chain and hop count"), locale: .current, chain, hops) + return .success(message: pathMessage) } /// `/pay ` — validates the token decodes, then sends it as @@ -520,44 +509,44 @@ final class CommandProcessor { private func handlePay(_ args: String) -> CommandResult { var parts = args.trimmed.split(separator: " ").map(String.init) guard !parts.isEmpty else { - return .success(message: "usage: /pay — paste a cashu token: /pay cashuA…") + return .success(message: String(localized: "command.pay.usage", defaultValue: "usage: /pay — paste a cashu token: /pay cashuA…", comment: "Usage hint for /pay")) } let confirmedPublic = parts.count > 1 && parts.last?.lowercased() == "public" if confirmedPublic { parts.removeLast() } guard parts.count == 1, let token = CashuTokenDecoder.bareToken(from: parts[0]) else { - return .error(message: "that doesn't look like a cashu token — expected cashuA… or cashuB…") + return .error(message: String(localized: "command.pay.not_token", defaultValue: "that doesn't look like a cashu token — expected cashuA… or cashuB…", comment: "Error when /pay input has no cashu prefix")) } guard let info = CashuTokenDecoder.decode(token, strict: true) else { - return .error(message: "invalid cashu token — it doesn't decode to a known token with an amount, not sending it") + return .error(message: String(localized: "command.pay.invalid", defaultValue: "invalid cashu token — it doesn't decode to a known token with an amount, not sending it", comment: "Error when /pay input fails to decode")) } let summary = info.displayAmount ?? "a cashu token" if let peerID = contextProvider?.selectedPrivateChatPeer { contextProvider?.sendPrivateMessage(token, to: peerID) - return .success(message: "sent \(summary) — cashu is a bearer token; whoever redeems it first gets the funds") + return .success(message: String(format: String(localized: "command.pay.sent_private", defaultValue: "sent %@ — cashu is a bearer token; whoever redeems it first gets the funds", comment: "Confirmation after sending a cashu token in a private chat; placeholder is the amount summary"), locale: .current, summary)) } guard confirmedPublic else { - return .error(message: "this is a public channel — anyone reading it can redeem the token. send anyway: /pay public") + return .error(message: String(localized: "command.pay.public_confirm", defaultValue: "this is a public channel — anyone reading it can redeem the token. send anyway: /pay public", comment: "Confirmation gate before sending a cashu token to a public channel")) } contextProvider?.sendPublicMessage(token) - return .success(message: "sent \(summary) to the public channel — anyone here can redeem it") + return .success(message: String(format: String(localized: "command.pay.sent_public", defaultValue: "sent %@ to the public channel — anyone here can redeem it", comment: "Confirmation after sending a cashu token to a public channel; placeholder is the amount summary"), locale: .current, summary)) } private func handleFavorite(_ args: String, add: Bool) -> CommandResult { let targetName = args.trimmed guard !targetName.isEmpty else { - return .error(message: "usage: /\(add ? "fav" : "unfav") ") + return .error(message: String(format: String(localized: "command.action.usage", defaultValue: "usage: /%@ ", comment: "Usage hint for a command that takes a nickname; placeholder is the command name"), locale: .current, (add ? "fav" : "unfav"))) } let nickname = targetName.hasPrefix("@") ? String(targetName.dropFirst()) : targetName guard let peerID = contextProvider?.getPeerIDForNickname(nickname) else { - return .error(message: "can't find peer: \(nickname)") + return .error(message: String(format: String(localized: "command.fav.not_found", defaultValue: "can't find peer: %@", comment: "Error when /fav or /unfav can't resolve the nickname"), locale: .current, nickname)) } // Resolve current state by the peer's real noise key. The resolved @@ -571,13 +560,17 @@ final class CommandProcessor { } guard add != isCurrentlyFavorite else { - return .success(message: add ? "\(nickname) is already a favorite" : "\(nickname) is not a favorite") + return .success(message: add + ? String(format: String(localized: "command.fav.already", defaultValue: "%@ is already a favorite", comment: "Reply when /fav targets an existing favorite"), locale: .current, nickname) + : String(format: String(localized: "command.fav.not_favorite", defaultValue: "%@ is not a favorite", comment: "Reply when /unfav targets someone who isn't a favorite"), locale: .current, nickname)) } // toggleFavorite persists by the real noise key and notifies the peer. contextProvider?.toggleFavorite(peerID: peerID) - return .success(message: add ? "added \(nickname) to favorites" : "removed \(nickname) from favorites") + return .success(message: add + ? String(format: String(localized: "command.fav.added", defaultValue: "added %@ to favorites", comment: "Confirmation after /fav"), locale: .current, nickname) + : String(format: String(localized: "command.fav.removed", defaultValue: "removed %@ from favorites", comment: "Confirmation after /unfav"), locale: .current, nickname)) } } diff --git a/bitchatTests/CommandProcessorTests.swift b/bitchatTests/CommandProcessorTests.swift index e2d9d561..232aa265 100644 --- a/bitchatTests/CommandProcessorTests.swift +++ b/bitchatTests/CommandProcessorTests.swift @@ -255,7 +255,9 @@ struct CommandProcessorTests { } switch blockResult { case .success(let message): - #expect(message == "blocked bob. you will no longer receive messages from them") + // "no longer see" — blocking filters at display time; packets still + // arrive and relay, so "receive" overpromised (UX audit fix). + #expect(message == "blocked bob. you will no longer see their messages") default: Issue.record("Expected success result") }