diff --git a/res/fonts/NotoSansCJK-Subset.ttf b/res/fonts/NotoSansCJK-Subset.ttf index 0a4b888..e24cba4 100644 Binary files a/res/fonts/NotoSansCJK-Subset.ttf and b/res/fonts/NotoSansCJK-Subset.ttf differ diff --git a/res/lang/de.json b/res/lang/de.json index a647db4..71c5d6d 100644 --- a/res/lang/de.json +++ b/res/lang/de.json @@ -123,6 +123,13 @@ "chat_select_hint": "Wähle eine Unterhaltung aus, um sie anzuzeigen.", "chat_send": "Senden", "chat_send_failed": "nicht gesendet", + "chat_toast_compose_failed": "Nachricht konnte nicht erstellt werden (zu lang?).", + "chat_toast_lite_busy": "Es wird bereits gesendet, oder es ist keine Wallet geöffnet.", + "chat_toast_no_zaddr": "Keine z-Adresse verfügbar, um den Chat zu senden.", + "chat_toast_not_connected": "Nicht verbunden – Nachricht nicht gesendet.", + "chat_toast_request_compose_failed": "Kontaktanfrage konnte nicht erstellt werden (ungültige Adresse / ungültiger Text?).", + "chat_toast_request_queued": "Kontaktanfrage in Warteschlange.", + "chat_toast_waiting_reply": "Warte auf die Antwort des Kontakts, bevor du ihm schreiben kannst.", "chat_waiting_reply": "Warte auf die Antwort dieses Kontakts – sobald er antwortet, kannst du ihm schreiben.", "chat_you": "Du", "choose_icon": "Symbol wählen", diff --git a/res/lang/es.json b/res/lang/es.json index b49f48b..593c4bc 100644 --- a/res/lang/es.json +++ b/res/lang/es.json @@ -123,6 +123,13 @@ "chat_select_hint": "Selecciona una conversación para verla.", "chat_send": "Enviar", "chat_send_failed": "no enviado", + "chat_toast_compose_failed": "No se pudo componer el mensaje (¿demasiado largo?).", + "chat_toast_lite_busy": "Ya hay un envío en curso, o no hay ningún monedero abierto.", + "chat_toast_no_zaddr": "No hay ninguna dirección z disponible desde la que enviar el chat.", + "chat_toast_not_connected": "Sin conexión: mensaje de chat no enviado.", + "chat_toast_request_compose_failed": "No se pudo componer la solicitud de contacto (¿dirección o texto no válidos?).", + "chat_toast_request_queued": "Solicitud de contacto en cola.", + "chat_toast_waiting_reply": "Espera a que este contacto responda antes de poder escribirle.", "chat_waiting_reply": "Esperando a que este contacto responda: podrás escribirle una vez lo haga.", "chat_you": "Tú", "choose_icon": "Elegir Icono", diff --git a/res/lang/fr.json b/res/lang/fr.json index a71b7ae..e8909f2 100644 --- a/res/lang/fr.json +++ b/res/lang/fr.json @@ -123,6 +123,13 @@ "chat_select_hint": "Sélectionnez une conversation pour l'afficher.", "chat_send": "Envoyer", "chat_send_failed": "non envoyé", + "chat_toast_compose_failed": "Impossible de composer le message (trop long ?).", + "chat_toast_lite_busy": "Un envoi est déjà en cours, ou aucun portefeuille n'est ouvert.", + "chat_toast_no_zaddr": "Aucune adresse Z disponible pour envoyer le message.", + "chat_toast_not_connected": "Non connecté — message non envoyé.", + "chat_toast_request_compose_failed": "Impossible de composer la demande de contact (adresse / texte invalide ?).", + "chat_toast_request_queued": "Demande de contact mise en file d'attente.", + "chat_toast_waiting_reply": "En attente de la réponse de ce contact avant de pouvoir lui écrire.", "chat_waiting_reply": "En attente de la réponse de ce contact — vous pourrez lui écrire dès qu'il aura répondu.", "chat_you": "Vous", "choose_icon": "Choisir une icône", diff --git a/res/lang/ja.json b/res/lang/ja.json index df2b838..444e103 100644 --- a/res/lang/ja.json +++ b/res/lang/ja.json @@ -123,6 +123,13 @@ "chat_select_hint": "表示する会話を選択してください。", "chat_send": "送信", "chat_send_failed": "未送信", + "chat_toast_compose_failed": "メッセージを作成できませんでした(長すぎませんか?)。", + "chat_toast_lite_busy": "すでに送信処理が進行中か、ウォレットが開かれていません。", + "chat_toast_no_zaddr": "送信元に使えるZアドレスがありません。", + "chat_toast_not_connected": "未接続 — チャットメッセージは送信されませんでした。", + "chat_toast_request_compose_failed": "連絡リクエストを作成できませんでした(アドレスまたはテキストが無効?)。", + "chat_toast_request_queued": "連絡リクエストを送信待ちに追加しました。", + "chat_toast_waiting_reply": "メッセージを送るには、この相手からの返信を待つ必要があります。", "chat_waiting_reply": "この相手からの返信を待っています — 返信があればメッセージを送れます。", "chat_you": "自分", "choose_icon": "アイコンを選択", diff --git a/res/lang/ko.json b/res/lang/ko.json index 17283bf..490cf24 100644 --- a/res/lang/ko.json +++ b/res/lang/ko.json @@ -123,6 +123,13 @@ "chat_select_hint": "볼 대화를 선택하세요.", "chat_send": "전송", "chat_send_failed": "전송 안 됨", + "chat_toast_compose_failed": "메시지를 작성할 수 없습니다 (너무 긴가요?).", + "chat_toast_lite_busy": "이미 전송이 진행 중이거나 열린 지갑이 없습니다.", + "chat_toast_no_zaddr": "채팅을 보낼 z-주소가 없습니다.", + "chat_toast_not_connected": "연결되지 않음 — 채팅 메시지가 전송되지 않았습니다.", + "chat_toast_request_compose_failed": "연락 요청을 작성할 수 없습니다 (잘못된 주소 / 텍스트?).", + "chat_toast_request_queued": "연락 요청이 대기열에 추가되었습니다.", + "chat_toast_waiting_reply": "상대방이 답장해야 메시지를 보낼 수 있습니다.", "chat_waiting_reply": "상대방의 답장을 기다리는 중입니다 — 답장하면 메시지를 보낼 수 있습니다.", "chat_you": "나", "choose_icon": "아이콘 선택", diff --git a/res/lang/pt.json b/res/lang/pt.json index aa1961f..2d7a19c 100644 --- a/res/lang/pt.json +++ b/res/lang/pt.json @@ -123,6 +123,13 @@ "chat_select_hint": "Selecione uma conversa para visualizá-la.", "chat_send": "Enviar", "chat_send_failed": "não enviada", + "chat_toast_compose_failed": "Não foi possível compor a mensagem (muito longa?).", + "chat_toast_lite_busy": "Já há um envio em andamento, ou nenhuma carteira está aberta.", + "chat_toast_no_zaddr": "Nenhum endereço-z disponível para enviar o chat.", + "chat_toast_not_connected": "Não conectado — mensagem de chat não enviada.", + "chat_toast_request_compose_failed": "Não foi possível compor a solicitação de contato (endereço / texto inválido?).", + "chat_toast_request_queued": "Solicitação de contato na fila.", + "chat_toast_waiting_reply": "Aguardando a resposta do contato antes que você possa enviar mensagens a ele.", "chat_waiting_reply": "Aguardando a resposta deste contato — você poderá enviar mensagens assim que ele responder.", "chat_you": "Você", "choose_icon": "Escolher Ícone", diff --git a/res/lang/ru.json b/res/lang/ru.json index 8fc67b4..631d06f 100644 --- a/res/lang/ru.json +++ b/res/lang/ru.json @@ -123,6 +123,13 @@ "chat_select_hint": "Выберите переписку для просмотра.", "chat_send": "Отправить", "chat_send_failed": "не отправлено", + "chat_toast_compose_failed": "Не удалось составить сообщение (слишком длинное?).", + "chat_toast_lite_busy": "Отправка уже выполняется, или кошелёк не открыт.", + "chat_toast_no_zaddr": "Нет доступного Z-адреса для отправки сообщений.", + "chat_toast_not_connected": "Нет подключения — сообщение не отправлено.", + "chat_toast_request_compose_failed": "Не удалось составить запрос контакта (неверный адрес / текст?).", + "chat_toast_request_queued": "Запрос контакта поставлен в очередь.", + "chat_toast_waiting_reply": "Ожидание ответа от контакта — вы сможете писать ему только после этого.", "chat_waiting_reply": "Ожидание ответа от контакта — вы сможете писать ему, как только он ответит.", "chat_you": "Вы", "choose_icon": "Выбрать иконку", diff --git a/res/lang/zh.json b/res/lang/zh.json index 1a1ba12..c34e962 100644 --- a/res/lang/zh.json +++ b/res/lang/zh.json @@ -123,6 +123,13 @@ "chat_select_hint": "选择一个对话以查看。", "chat_send": "发送", "chat_send_failed": "未发送", + "chat_toast_compose_failed": "无法编写该消息(内容过长?)。", + "chat_toast_lite_busy": "已有发送正在进行中,或未打开任何钱包。", + "chat_toast_no_zaddr": "没有可用于发送聊天的 z 地址。", + "chat_toast_not_connected": "未连接——聊天消息未发送。", + "chat_toast_request_compose_failed": "无法编写联系人请求(地址或文本无效?)。", + "chat_toast_request_queued": "联系人请求已排队。", + "chat_toast_waiting_reply": "等待该联系人回复——对方回复后您即可向其发送消息。", "chat_waiting_reply": "等待该联系人回复——对方回复后您即可向其发送消息。", "chat_you": "我", "choose_icon": "选择图标", diff --git a/src/app_network.cpp b/src/app_network.cpp index d5da0fb..e8a2137 100644 --- a/src/app_network.cpp +++ b/src/app_network.cpp @@ -2543,12 +2543,12 @@ bool App::broadcastChatMemos(const chat::OutgoingChatMemos& memos) } if (!state_.connected || !rpc_ || !worker_) { - ui::Notifications::instance().error("Not connected — chat message not sent."); + ui::Notifications::instance().error(TR("chat_toast_not_connected")); return false; } const std::string from = chatReplyZaddr(); // spendable + advertised as the reply-to address if (from.empty()) { - ui::Notifications::instance().error("No spendable z-address to send chat from."); + ui::Notifications::instance().error(TR("chat_toast_no_zaddr")); return false; } @@ -2588,7 +2588,7 @@ bool App::broadcastChatMemosLite(const chat::OutgoingChatMemos& memos) req.recipients.push_back(std::move(recipient)); } if (!lite_wallet_->sendTransaction(req)) { - ui::Notifications::instance().error("A send is already in progress, or no wallet is open."); + ui::Notifications::instance().error(TR("chat_toast_lite_busy")); return false; } return true; @@ -2607,19 +2607,19 @@ void App::sendChatMessage(const std::string& conversationId, const std::string& if (!m.peer_public_key_hex.empty()) peerPubKey = m.peer_public_key_hex; } if (peerPubKey.empty()) { - ui::Notifications::instance().info("Waiting for the contact to reply before you can message them."); + ui::Notifications::instance().info(TR("chat_toast_waiting_reply")); return; } const std::string myReply = chatReplyZaddr(); if (myReply.empty()) { - ui::Notifications::instance().error("No z-address available to send chat from."); + ui::Notifications::instance().error(TR("chat_toast_no_zaddr")); return; } chat::OutgoingChatMemos memos; if (chat_service_.composeMessage(myReply, peerPubKey, peerZaddr, conversationId, text, memos) != chat::ChatComposeStatus::Ok) { - ui::Notifications::instance().error("Could not compose the message (too long?)."); + ui::Notifications::instance().error(TR("chat_toast_compose_failed")); return; } const bool submitted = broadcastChatMemos(memos); @@ -2644,7 +2644,7 @@ void App::startChatConversation(const std::string& peerZaddr, const std::string& if (peerZaddr.empty() || text.empty()) return; const std::string myReply = chatReplyZaddr(); if (myReply.empty()) { - ui::Notifications::instance().error("No z-address available to send chat from."); + ui::Notifications::instance().error(TR("chat_toast_no_zaddr")); return; } @@ -2652,7 +2652,7 @@ void App::startChatConversation(const std::string& peerZaddr, const std::string& chat::OutgoingChatMemos memos; if (chat_service_.composeContactRequest(myReply, peerZaddr, cid, text, memos) != chat::ChatComposeStatus::Ok) { - ui::Notifications::instance().error("Could not compose the contact request (invalid address / text?)."); + ui::Notifications::instance().error(TR("chat_toast_request_compose_failed")); return; } const bool submitted = broadcastChatMemos(memos); @@ -2668,7 +2668,7 @@ void App::startChatConversation(const std::string& peerZaddr, const std::string& echo.payload_position = 0; echo.delivery = submitted ? chat::ChatDelivery::Sent : chat::ChatDelivery::Failed; chat_service_.recordOutgoing(echo); - if (submitted) ui::Notifications::instance().success("Contact request queued."); + if (submitted) ui::Notifications::instance().success(TR("chat_toast_request_queued")); } // HushChat (lite variant): the full-node harvest works off z_viewtransaction, but the lite wallet's diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index 078bdfa..90f7906 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -226,6 +226,13 @@ void I18n::loadBuiltinEnglish() strings_["chat_new_message"] = "Message"; strings_["chat_new_send"] = "Send request"; strings_["chat_cancel"] = "Cancel"; + strings_["chat_toast_not_connected"] = "Not connected — chat message not sent."; + strings_["chat_toast_no_zaddr"] = "No z-address available to send chat from."; + strings_["chat_toast_lite_busy"] = "A send is already in progress, or no wallet is open."; + strings_["chat_toast_waiting_reply"] = "Waiting for the contact to reply before you can message them."; + strings_["chat_toast_compose_failed"] = "Could not compose the message (too long?)."; + strings_["chat_toast_request_compose_failed"] = "Could not compose the contact request (invalid address / text?)."; + strings_["chat_toast_request_queued"] = "Contact request queued."; strings_["contacts_search_placeholder"] = "Search contacts..."; strings_["contacts_search_no_match"] = "No matching contacts"; strings_["address_book_confirm_delete"] = "Confirm delete?";