From c68889d276bf5604bc5bc90d6531d5ad548e818d Mon Sep 17 00:00:00 2001 From: DanS Date: Mon, 20 Jul 2026 22:22:59 -0500 Subject: [PATCH] i18n(chat): translate chat note-buffer status strings (8 languages) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The status-bar chat-buffer indicator was hardcoded English. Add semantic keys (chat_buffer_sending[_one]/preparing/loading/ready) to the English source and route chatBufferStatusText() through TR()+snprintf like the other counted strings — a singular/plural pair for the send count, %d/%d for the buffer fill. Translate all five into de/es/fr/ja/ko/pt/ru/zh (additive JSON edits, format specifiers preserved so the runtime overlay accepts them), and rebuild the CJK subset font for the two new glyphs (버퍼's 퍼 U+D37C, 缓冲's 冲 U+51B2). Co-Authored-By: Claude Opus 4.8 (1M context) --- res/fonts/NotoSansCJK-Subset.ttf | Bin 654080 -> 654344 bytes res/lang/de.json | 5 +++++ res/lang/es.json | 5 +++++ res/lang/fr.json | 5 +++++ res/lang/ja.json | 5 +++++ res/lang/ko.json | 5 +++++ res/lang/pt.json | 5 +++++ res/lang/ru.json | 5 +++++ res/lang/zh.json | 5 +++++ src/app_network.cpp | 20 +++++++++++++------- src/util/i18n.cpp | 7 +++++++ 11 files changed, 60 insertions(+), 7 deletions(-) diff --git a/res/fonts/NotoSansCJK-Subset.ttf b/res/fonts/NotoSansCJK-Subset.ttf index 183fd8f0b2eb5c5fe11fe85fcc9340b83b9e7d37..b61ac72292c954fdd3f41c4cc3478b286d4c0f27 100644 GIT binary patch delta 21601 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 delta 21211 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 I-m0SiKQrRZDF6Tf diff --git a/res/lang/de.json b/res/lang/de.json index 93704e1..a08a415 100644 --- a/res/lang/de.json +++ b/res/lang/de.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "Minimal", "chat_bubble_rounded": "Abgerundet", "chat_bubble_square": "Eckig", + "chat_buffer_loading": "Chat-Puffer: …", + "chat_buffer_preparing": "Chat-Puffer: bereite %d/%d vor…", + "chat_buffer_ready": "Chat-Puffer: %d/%d bereit", + "chat_buffer_sending": "Chat: sende %d Nachrichten…", + "chat_buffer_sending_one": "Chat: sende %d Nachricht…", "chat_cancel": "Abbrechen", "chat_contact_added": "Kontakt hinzugefügt – benenne ihn in Kontakte um", "chat_contact_request": "kontaktanfrage", diff --git a/res/lang/es.json b/res/lang/es.json index db8a5aa..48ab26f 100644 --- a/res/lang/es.json +++ b/res/lang/es.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "Mínima", "chat_bubble_rounded": "Redondeada", "chat_bubble_square": "Cuadrada", + "chat_buffer_loading": "Búfer de chat: …", + "chat_buffer_preparing": "Búfer de chat: preparando %d/%d…", + "chat_buffer_ready": "Búfer de chat: %d/%d listos", + "chat_buffer_sending": "Chat: enviando %d mensajes…", + "chat_buffer_sending_one": "Chat: enviando %d mensaje…", "chat_cancel": "Cancelar", "chat_contact_added": "Contacto añadido: renómbralo en Contactos", "chat_contact_request": "solicitud de contacto", diff --git a/res/lang/fr.json b/res/lang/fr.json index 0b6d3c2..25ba5e2 100644 --- a/res/lang/fr.json +++ b/res/lang/fr.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "Minimale", "chat_bubble_rounded": "Arrondie", "chat_bubble_square": "Carrée", + "chat_buffer_loading": "Tampon de chat: …", + "chat_buffer_preparing": "Tampon de chat: préparation %d/%d…", + "chat_buffer_ready": "Tampon de chat: %d/%d prêts", + "chat_buffer_sending": "Chat: envoi de %d messages…", + "chat_buffer_sending_one": "Chat: envoi de %d message…", "chat_cancel": "Annuler", "chat_contact_added": "Contact ajouté — renommez-le dans Contacts", "chat_contact_request": "demande de contact", diff --git a/res/lang/ja.json b/res/lang/ja.json index 0b0cc2c..e13d9bc 100644 --- a/res/lang/ja.json +++ b/res/lang/ja.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "ミニマル", "chat_bubble_rounded": "角丸", "chat_bubble_square": "角ばった", + "chat_buffer_loading": "チャットバッファ:…", + "chat_buffer_preparing": "チャットバッファ:%d/%d を準備中…", + "chat_buffer_ready": "チャットバッファ:%d/%d 準備完了", + "chat_buffer_sending": "チャット:%d 件のメッセージを送信中…", + "chat_buffer_sending_one": "チャット:%d 件のメッセージを送信中…", "chat_cancel": "キャンセル", "chat_contact_added": "連絡先を追加しました — 連絡先で名前を変更できます", "chat_contact_request": "連絡リクエスト", diff --git a/res/lang/ko.json b/res/lang/ko.json index fab66df..5b2a585 100644 --- a/res/lang/ko.json +++ b/res/lang/ko.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "미니멀", "chat_bubble_rounded": "둥근", "chat_bubble_square": "각진", + "chat_buffer_loading": "채팅 버퍼: …", + "chat_buffer_preparing": "채팅 버퍼: %d/%d 준비 중…", + "chat_buffer_ready": "채팅 버퍼: %d/%d 준비됨", + "chat_buffer_sending": "채팅: 메시지 %d개 보내는 중…", + "chat_buffer_sending_one": "채팅: 메시지 %d개 보내는 중…", "chat_cancel": "취소", "chat_contact_added": "연락처 추가됨 — 연락처에서 이름을 변경하세요", "chat_contact_request": "연락 요청", diff --git a/res/lang/pt.json b/res/lang/pt.json index 2c2217e..8f42661 100644 --- a/res/lang/pt.json +++ b/res/lang/pt.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "Mínimo", "chat_bubble_rounded": "Arredondado", "chat_bubble_square": "Quadrado", + "chat_buffer_loading": "Buffer de chat: …", + "chat_buffer_preparing": "Buffer de chat: preparando %d/%d…", + "chat_buffer_ready": "Buffer de chat: %d/%d prontos", + "chat_buffer_sending": "Chat: enviando %d mensagens…", + "chat_buffer_sending_one": "Chat: enviando %d mensagem…", "chat_cancel": "Cancelar", "chat_contact_added": "Contato adicionado — renomeie em Contatos", "chat_contact_request": "solicitação de contato", diff --git a/res/lang/ru.json b/res/lang/ru.json index e5567b9..b28ef24 100644 --- a/res/lang/ru.json +++ b/res/lang/ru.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "Минимальный", "chat_bubble_rounded": "Скруглённый", "chat_bubble_square": "Прямоугольный", + "chat_buffer_loading": "Буфер чата: …", + "chat_buffer_preparing": "Буфер чата: подготовка %d/%d…", + "chat_buffer_ready": "Буфер чата: %d/%d готово", + "chat_buffer_sending": "Чат: отправка %d сообщений…", + "chat_buffer_sending_one": "Чат: отправка %d сообщения…", "chat_cancel": "Отмена", "chat_contact_added": "Контакт добавлен — переименуйте его в Контактах", "chat_contact_request": "запрос контакта", diff --git a/res/lang/zh.json b/res/lang/zh.json index c24231e..fa16303 100644 --- a/res/lang/zh.json +++ b/res/lang/zh.json @@ -146,6 +146,11 @@ "chat_bubble_minimal": "极简", "chat_bubble_rounded": "圆角", "chat_bubble_square": "方形", + "chat_buffer_loading": "聊天缓冲:…", + "chat_buffer_preparing": "聊天缓冲:正在准备 %d/%d…", + "chat_buffer_ready": "聊天缓冲:%d/%d 已就绪", + "chat_buffer_sending": "聊天:正在发送 %d 条消息…", + "chat_buffer_sending_one": "聊天:正在发送 %d 条消息…", "chat_cancel": "取消", "chat_contact_added": "已添加联系人——可在联系人中重命名", "chat_contact_request": "联系人请求", diff --git a/src/app_network.cpp b/src/app_network.cpp index 5d7d12c..d331f35 100644 --- a/src/app_network.cpp +++ b/src/app_network.cpp @@ -3177,14 +3177,20 @@ std::string App::chatBufferStatusText() { if (!chat::hushChatFeatureEnabledAtBuild() || !chat_service_.hasIdentity()) return ""; const int queued = static_cast(chat_send_queue_.size()); const int verified = std::max(0, std::min(chat_verified_note_budget_, kChatBufferTarget)); - const std::string tgt = std::to_string(kChatBufferTarget); - if (queued > 0) - return "Chat: sending " + std::to_string(queued) + (queued == 1 ? " message…" : " messages…"); - if (chat_split_outstanding_) - return "Chat buffer: preparing " + std::to_string(verified) + "/" + tgt + "…"; + const int target = static_cast(kChatBufferTarget); + char buf[128]; + if (queued > 0) { + snprintf(buf, sizeof(buf), TR(queued == 1 ? "chat_buffer_sending_one" : "chat_buffer_sending"), queued); + return buf; + } + if (chat_split_outstanding_) { + snprintf(buf, sizeof(buf), TR("chat_buffer_preparing"), verified, target); + return buf; + } if (!chat_note_model_seen_) - return "Chat buffer: …"; - return "Chat buffer: " + std::to_string(verified) + "/" + tgt + " ready"; + return TR("chat_buffer_loading"); + snprintf(buf, sizeof(buf), TR("chat_buffer_ready"), verified, target); + return buf; } bool App::isTransientVerifiedFundsError(const std::string& error) { diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index 5d01ddb..0ac0c87 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -266,6 +266,13 @@ void I18n::loadBuiltinEnglish() strings_["chat_rename"] = "Rename contact"; strings_["chat_rename_hint"] = "Contact name"; strings_["chat_renamed"] = "Contact renamed"; + // Chat note-buffer status (status bar, while the Chat tab is active). %d are counts; + // keep the format specifiers intact in translations. + strings_["chat_buffer_sending_one"] = "Chat: sending %d message\xE2\x80\xA6"; + strings_["chat_buffer_sending"] = "Chat: sending %d messages\xE2\x80\xA6"; + strings_["chat_buffer_preparing"] = "Chat buffer: preparing %d/%d\xE2\x80\xA6"; + strings_["chat_buffer_loading"] = "Chat buffer: \xE2\x80\xA6"; + strings_["chat_buffer_ready"] = "Chat buffer: %d/%d ready"; // Chat customization (gear modal + Settings → Chat & Contacts) strings_["chat_settings_title"] = "Chat settings"; strings_["chat_settings_tip"] = "Chat customization";