diff --git a/ui/src/i18n/.i18n/ar.meta.json b/ui/src/i18n/.i18n/ar.meta.json index 9de857beab47..06743fc00e06 100644 --- a/ui/src/i18n/.i18n/ar.meta.json +++ b/ui/src/i18n/.i18n/ar.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:07:19.847Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:09.439Z", "locale": "ar", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/de.meta.json b/ui/src/i18n/.i18n/de.meta.json index 2b2fb3578712..837999aae062 100644 --- a/ui/src/i18n/.i18n/de.meta.json +++ b/ui/src/i18n/.i18n/de.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:06:02.814Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:08.633Z", "locale": "de", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/es.meta.json b/ui/src/i18n/.i18n/es.meta.json index f422c121ebaa..dadff34c3b91 100644 --- a/ui/src/i18n/.i18n/es.meta.json +++ b/ui/src/i18n/.i18n/es.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:06:39.921Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:08.761Z", "locale": "es", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/fa.meta.json b/ui/src/i18n/.i18n/fa.meta.json index 0eb5c2c3d60b..15284f830bb0 100644 --- a/ui/src/i18n/.i18n/fa.meta.json +++ b/ui/src/i18n/.i18n/fa.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:08:55.391Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:10.600Z", "locale": "fa", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/fr.meta.json b/ui/src/i18n/.i18n/fr.meta.json index d26d6786f7eb..2accde3a8f01 100644 --- a/ui/src/i18n/.i18n/fr.meta.json +++ b/ui/src/i18n/.i18n/fr.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:07:07.541Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:09.141Z", "locale": "fr", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/hi.meta.json b/ui/src/i18n/.i18n/hi.meta.json index 31b98c8bab1a..f5bb80eb5330 100644 --- a/ui/src/i18n/.i18n/hi.meta.json +++ b/ui/src/i18n/.i18n/hi.meta.json @@ -1,14 +1,17 @@ { "fallbackKeys": [ "chat.commentaryLabel", - "chat.commentaryToggle" + "chat.commentaryToggle", + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" ], - "generatedAt": "2026-06-30T23:31:03.557Z", + "generatedAt": "2026-07-01T10:12:09.276Z", "locale": "hi", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1416, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/id.meta.json b/ui/src/i18n/.i18n/id.meta.json index b799d0b90273..17d42a74fe97 100644 --- a/ui/src/i18n/.i18n/id.meta.json +++ b/ui/src/i18n/.i18n/id.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:07:58.632Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:09.928Z", "locale": "id", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/it.meta.json b/ui/src/i18n/.i18n/it.meta.json index 946915c3234f..c33248ccb1b0 100644 --- a/ui/src/i18n/.i18n/it.meta.json +++ b/ui/src/i18n/.i18n/it.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:07:32.299Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:09.557Z", "locale": "it", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/ja-JP.meta.json b/ui/src/i18n/.i18n/ja-JP.meta.json index 96f4482d6d05..afea6ef23105 100644 --- a/ui/src/i18n/.i18n/ja-JP.meta.json +++ b/ui/src/i18n/.i18n/ja-JP.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:06:53.052Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:08.879Z", "locale": "ja-JP", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/ko.meta.json b/ui/src/i18n/.i18n/ko.meta.json index 2107406961ef..fdfeebe3a161 100644 --- a/ui/src/i18n/.i18n/ko.meta.json +++ b/ui/src/i18n/.i18n/ko.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:07:03.501Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:09.018Z", "locale": "ko", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/nl.meta.json b/ui/src/i18n/.i18n/nl.meta.json index 4e8f8fd96f6e..d6b24896886a 100644 --- a/ui/src/i18n/.i18n/nl.meta.json +++ b/ui/src/i18n/.i18n/nl.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:08:53.816Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:10.475Z", "locale": "nl", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/pl.meta.json b/ui/src/i18n/.i18n/pl.meta.json index 541361da0852..f7036cc31159 100644 --- a/ui/src/i18n/.i18n/pl.meta.json +++ b/ui/src/i18n/.i18n/pl.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:08:13.118Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:10.054Z", "locale": "pl", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/pt-BR.meta.json b/ui/src/i18n/.i18n/pt-BR.meta.json index 30e8d433cd95..d836664ac36b 100644 --- a/ui/src/i18n/.i18n/pt-BR.meta.json +++ b/ui/src/i18n/.i18n/pt-BR.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:06:19.020Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:08.504Z", "locale": "pt-BR", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/ru.meta.json b/ui/src/i18n/.i18n/ru.meta.json index e1da15016009..933c0945fd13 100644 --- a/ui/src/i18n/.i18n/ru.meta.json +++ b/ui/src/i18n/.i18n/ru.meta.json @@ -1,14 +1,17 @@ { "fallbackKeys": [ "chat.commentaryLabel", - "chat.commentaryToggle" + "chat.commentaryToggle", + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" ], - "generatedAt": "2026-06-30T23:31:04.740Z", + "generatedAt": "2026-07-01T10:12:10.727Z", "locale": "ru", "model": "gpt-5.5", "provider": "openai", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1416, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/th.meta.json b/ui/src/i18n/.i18n/th.meta.json index 0e412542054f..ffcd597fee2b 100644 --- a/ui/src/i18n/.i18n/th.meta.json +++ b/ui/src/i18n/.i18n/th.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:08:34.116Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:10.217Z", "locale": "th", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/tr.meta.json b/ui/src/i18n/.i18n/tr.meta.json index a4c8f1ec04b5..efbdefa47587 100644 --- a/ui/src/i18n/.i18n/tr.meta.json +++ b/ui/src/i18n/.i18n/tr.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:07:50.773Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:09.674Z", "locale": "tr", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/uk.meta.json b/ui/src/i18n/.i18n/uk.meta.json index 0f74a24ba823..e6c89aebbbc2 100644 --- a/ui/src/i18n/.i18n/uk.meta.json +++ b/ui/src/i18n/.i18n/uk.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:07:59.462Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:09.793Z", "locale": "uk", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/vi.meta.json b/ui/src/i18n/.i18n/vi.meta.json index 4124afb161f8..f1efc26ce06c 100644 --- a/ui/src/i18n/.i18n/vi.meta.json +++ b/ui/src/i18n/.i18n/vi.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:08:40.347Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:10.348Z", "locale": "vi", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/zh-CN.meta.json b/ui/src/i18n/.i18n/zh-CN.meta.json index eef0c59af02f..e883b783d391 100644 --- a/ui/src/i18n/.i18n/zh-CN.meta.json +++ b/ui/src/i18n/.i18n/zh-CN.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:06:06.608Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:11:55.768Z", "locale": "zh-CN", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/.i18n/zh-TW.meta.json b/ui/src/i18n/.i18n/zh-TW.meta.json index e9c7775b90d8..bf6a263f5b91 100644 --- a/ui/src/i18n/.i18n/zh-TW.meta.json +++ b/ui/src/i18n/.i18n/zh-TW.meta.json @@ -1,11 +1,15 @@ { - "fallbackKeys": [], - "generatedAt": "2026-07-01T01:06:02.445Z", + "fallbackKeys": [ + "chat.pairingQrExpired.badge", + "chat.pairingQrExpired.reason", + "chat.pairingQrExpired.title" + ], + "generatedAt": "2026-07-01T10:12:08.369Z", "locale": "zh-TW", "model": "claude-opus-4-8", "provider": "anthropic", - "sourceHash": "2efa88c26ff88470a76b18ae218dd9c325165f98587f359ed51dbfb51a7d8428", - "totalKeys": 1418, + "sourceHash": "234bc2c00f309d086f9b545f11736fafab8d3f127c441d839695beeee014a53d", + "totalKeys": 1421, "translatedKeys": 1418, "workflow": 1 } diff --git a/ui/src/i18n/locales/ar.ts b/ui/src/i18n/locales/ar.ts index 2e1707ab4fd4..b7149c73a7ab 100644 --- a/ui/src/i18n/locales/ar.ts +++ b/ui/src/i18n/locales/ar.ts @@ -1360,6 +1360,11 @@ export const ar: TranslationMap = { retrySend: "إعادة محاولة الإرسال", retryQueuedMessage: "إعادة محاولة الرسالة في قائمة الانتظار", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/de.ts b/ui/src/i18n/locales/de.ts index b2669bcc28a2..1ad78a6b3a6b 100644 --- a/ui/src/i18n/locales/de.ts +++ b/ui/src/i18n/locales/de.ts @@ -1387,6 +1387,11 @@ export const de: TranslationMap = { retrySend: "Senden wiederholen", retryQueuedMessage: "Nachricht in der Warteschlange erneut senden", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/en.ts b/ui/src/i18n/locales/en.ts index 86b6da452c42..3b4b41c8c5d9 100644 --- a/ui/src/i18n/locales/en.ts +++ b/ui/src/i18n/locales/en.ts @@ -1366,6 +1366,11 @@ export const en: TranslationMap = { retrySend: "Retry send", retryQueuedMessage: "Retry queued message", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/es.ts b/ui/src/i18n/locales/es.ts index e275f91595bd..3b5693ca8b03 100644 --- a/ui/src/i18n/locales/es.ts +++ b/ui/src/i18n/locales/es.ts @@ -1384,6 +1384,11 @@ export const es: TranslationMap = { retrySend: "Reintentar envío", retryQueuedMessage: "Reintentar mensaje en cola", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/fa.ts b/ui/src/i18n/locales/fa.ts index 8f8ddbd3fe4c..7bbf4886fb80 100644 --- a/ui/src/i18n/locales/fa.ts +++ b/ui/src/i18n/locales/fa.ts @@ -1378,6 +1378,11 @@ export const fa: TranslationMap = { retrySend: "تلاش دوباره برای ارسال", retryQueuedMessage: "تلاش دوباره برای پیام در صف", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/fr.ts b/ui/src/i18n/locales/fr.ts index 1af3b2e68e2f..43ff8a6c642a 100644 --- a/ui/src/i18n/locales/fr.ts +++ b/ui/src/i18n/locales/fr.ts @@ -1391,6 +1391,11 @@ export const fr: TranslationMap = { retrySend: "Réessayer l’envoi", retryQueuedMessage: "Réessayer le message en file d’attente", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/hi.ts b/ui/src/i18n/locales/hi.ts index 48d1d93f2092..13eefc82917d 100644 --- a/ui/src/i18n/locales/hi.ts +++ b/ui/src/i18n/locales/hi.ts @@ -1362,6 +1362,11 @@ export const hi: TranslationMap = { retrySend: "भेजने का पुनः प्रयास करें", retryQueuedMessage: "कतारबद्ध संदेश का पुनः प्रयास करें", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "{name} को संदेश भेजें (भेजने के लिए Enter)", placeholderWithAttachments: "संदेश जोड़ें या और छवियाँ पेस्ट करें...", diff --git a/ui/src/i18n/locales/id.ts b/ui/src/i18n/locales/id.ts index d3e7699c7ac4..b0ea2196ea8e 100644 --- a/ui/src/i18n/locales/id.ts +++ b/ui/src/i18n/locales/id.ts @@ -1376,6 +1376,11 @@ export const id: TranslationMap = { retrySend: "Coba kirim lagi", retryQueuedMessage: "Coba lagi pesan dalam antrean", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/it.ts b/ui/src/i18n/locales/it.ts index 3804882ada7f..e745bcde4df0 100644 --- a/ui/src/i18n/locales/it.ts +++ b/ui/src/i18n/locales/it.ts @@ -1383,6 +1383,11 @@ export const it: TranslationMap = { retrySend: "Riprova invio", retryQueuedMessage: "Riprova messaggio in coda", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/ja-JP.ts b/ui/src/i18n/locales/ja-JP.ts index 1b4e1cbaa7bb..0915a6e1b2a1 100644 --- a/ui/src/i18n/locales/ja-JP.ts +++ b/ui/src/i18n/locales/ja-JP.ts @@ -1381,6 +1381,11 @@ export const ja_JP: TranslationMap = { retrySend: "送信を再試行", retryQueuedMessage: "キュー内のメッセージを再試行", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/ko.ts b/ui/src/i18n/locales/ko.ts index 9115d0108cf5..8f9a32779140 100644 --- a/ui/src/i18n/locales/ko.ts +++ b/ui/src/i18n/locales/ko.ts @@ -1367,6 +1367,11 @@ export const ko: TranslationMap = { retrySend: "보내기 다시 시도", retryQueuedMessage: "대기 중인 메시지 다시 시도", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/nl.ts b/ui/src/i18n/locales/nl.ts index 7ae822bf0135..dfbdebadb2b9 100644 --- a/ui/src/i18n/locales/nl.ts +++ b/ui/src/i18n/locales/nl.ts @@ -1382,6 +1382,11 @@ export const nl: TranslationMap = { retrySend: "Verzenden opnieuw proberen", retryQueuedMessage: "Bericht in wachtrij opnieuw proberen", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/pl.ts b/ui/src/i18n/locales/pl.ts index 9f1bfe45e7d3..d9ed008ae308 100644 --- a/ui/src/i18n/locales/pl.ts +++ b/ui/src/i18n/locales/pl.ts @@ -1381,6 +1381,11 @@ export const pl: TranslationMap = { retrySend: "Ponów wysłanie", retryQueuedMessage: "Ponów wiadomość w kolejce", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/pt-BR.ts b/ui/src/i18n/locales/pt-BR.ts index a6c007362e5a..efba41119704 100644 --- a/ui/src/i18n/locales/pt-BR.ts +++ b/ui/src/i18n/locales/pt-BR.ts @@ -1378,6 +1378,11 @@ export const pt_BR: TranslationMap = { retrySend: "Tentar enviar novamente", retryQueuedMessage: "Tentar novamente mensagem na fila", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/ru.ts b/ui/src/i18n/locales/ru.ts index be6949395328..47fc79587718 100644 --- a/ui/src/i18n/locales/ru.ts +++ b/ui/src/i18n/locales/ru.ts @@ -1386,6 +1386,11 @@ export const ru: TranslationMap = { retrySend: "Повторить отправку", retryQueuedMessage: "Повторить сообщение в очереди", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Сообщение {name} (Enter для отправки)", placeholderWithAttachments: "Добавьте сообщение или вставьте еще изображения...", diff --git a/ui/src/i18n/locales/th.ts b/ui/src/i18n/locales/th.ts index 6a47377c5652..27b02030cae0 100644 --- a/ui/src/i18n/locales/th.ts +++ b/ui/src/i18n/locales/th.ts @@ -1344,6 +1344,11 @@ export const th: TranslationMap = { retrySend: "ลองส่งอีกครั้ง", retryQueuedMessage: "ลองส่งข้อความในคิวอีกครั้ง", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/tr.ts b/ui/src/i18n/locales/tr.ts index 8d8195a385db..d8c417ca82b7 100644 --- a/ui/src/i18n/locales/tr.ts +++ b/ui/src/i18n/locales/tr.ts @@ -1382,6 +1382,11 @@ export const tr: TranslationMap = { retrySend: "Göndermeyi yeniden dene", retryQueuedMessage: "Kuyruğa alınan iletiyi yeniden dene", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/uk.ts b/ui/src/i18n/locales/uk.ts index de8b431f2bc9..666b7d5d82db 100644 --- a/ui/src/i18n/locales/uk.ts +++ b/ui/src/i18n/locales/uk.ts @@ -1380,6 +1380,11 @@ export const uk: TranslationMap = { retrySend: "Повторити надсилання", retryQueuedMessage: "Повторити повідомлення в черзі", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/vi.ts b/ui/src/i18n/locales/vi.ts index 02ad86788450..92834b3718f0 100644 --- a/ui/src/i18n/locales/vi.ts +++ b/ui/src/i18n/locales/vi.ts @@ -1368,6 +1368,11 @@ export const vi: TranslationMap = { retrySend: "Thử gửi lại", retryQueuedMessage: "Thử lại tin nhắn trong hàng đợi", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/i18n/locales/zh-CN.ts b/ui/src/i18n/locales/zh-CN.ts index 7a01f1940670..09034d7c6633 100644 --- a/ui/src/i18n/locales/zh-CN.ts +++ b/ui/src/i18n/locales/zh-CN.ts @@ -1339,6 +1339,11 @@ export const zh_CN: TranslationMap = { retrySend: "重试发送", retryQueuedMessage: "重试排队消息", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "给 {name} 发消息(Enter 发送)", placeholderWithAttachments: "添加消息或继续粘贴图片...", diff --git a/ui/src/i18n/locales/zh-TW.ts b/ui/src/i18n/locales/zh-TW.ts index bc607f42f7c5..3619e0540852 100644 --- a/ui/src/i18n/locales/zh-TW.ts +++ b/ui/src/i18n/locales/zh-TW.ts @@ -1341,6 +1341,11 @@ export const zh_TW: TranslationMap = { retrySend: "重新傳送", retryQueuedMessage: "重試佇列中的訊息", }, + pairingQrExpired: { + title: "Pairing QR expired", + reason: "Run /pair qr again to generate a fresh setup code.", + badge: "Expired", + }, composer: { placeholder: "Message {name} (Enter to send)", placeholderWithAttachments: "Add a message or paste more images...", diff --git a/ui/src/ui/chat/grouped-render.ts b/ui/src/ui/chat/grouped-render.ts index e7c0cd45fa2e..4b8c5e5bc182 100644 --- a/ui/src/ui/chat/grouped-render.ts +++ b/ui/src/ui/chat/grouped-render.ts @@ -2,6 +2,7 @@ import { html, nothing } from "lit"; import { unsafeHTML } from "lit/directives/unsafe-html.js"; import { until } from "lit/directives/until.js"; +import { t } from "../../i18n/index.ts"; import { getSafeLocalStorage } from "../../local-storage.ts"; import type { AssistantIdentity } from "../assistant-identity.ts"; import type { EmbedSandboxMode } from "../embed-sandbox.ts"; @@ -58,10 +59,6 @@ const assistantAttachmentRefreshTimers = new Map(); const ASSISTANT_ATTACHMENT_UNAVAILABLE_RETRY_MS = 5_000; const ASSISTANT_ATTACHMENT_MEDIA_TICKET_REFRESH_SKEW_MS = 30_000; -const PAIRING_QR_EXPIRED_NOTICE: PairingQrExpiryNotice = { - title: "Pairing QR expired", - reason: "Run /pair qr again to generate a fresh setup code.", -}; let assistantAttachmentAvailabilityRenderVersion = 0; export type ChatTimestampDisplay = { @@ -388,7 +385,10 @@ function extractPairingQrExpiryNotices( } const b = block as Record; if (b.type === "openclaw_pairing_qr" && isExpiredPairingQrBlock(b, nowMs)) { - notices.push(PAIRING_QR_EXPIRED_NOTICE); + notices.push({ + title: t("chat.pairingQrExpired.title"), + reason: t("chat.pairingQrExpired.reason"), + }); } } return notices; @@ -1153,7 +1153,7 @@ function renderPairingQrExpiryNotices(notices: PairingQrExpiryNotice[]) { ${icons.alertTriangle} ${notice.title} Expired${t("chat.pairingQrExpired.badge")}
${notice.reason}