fix(ui): localize expired pairing QR notice

This commit is contained in:
Vincent Koc
2026-07-01 03:14:27 -07:00
parent cd571faeaf
commit d39ac85f99
42 changed files with 269 additions and 86 deletions
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+7 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+7 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+8 -4
View File
@@ -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
}
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -1391,6 +1391,11 @@ export const fr: TranslationMap = {
retrySend: "Réessayer lenvoi",
retryQueuedMessage: "Réessayer le message en file dattente",
},
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...",
+5
View File
@@ -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: "संदेश जोड़ें या और छवियाँ पेस्ट करें...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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: "Добавьте сообщение или вставьте еще изображения...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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...",
+5
View File
@@ -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: "添加消息或继续粘贴图片...",
+5
View File
@@ -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...",
+6 -6
View File
@@ -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<string, ReturnType<typeof setTi
const pairingQrExpiryRefreshTimers = new Map<string, PairingQrExpiryRefreshTimer>();
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<string, unknown>;
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[]) {
<span class="chat-assistant-attachment-card__icon">${icons.alertTriangle}</span>
<span class="chat-assistant-attachment-card__title">${notice.title}</span>
<span class="chat-assistant-attachment-badge chat-assistant-attachment-badge--muted"
>Expired</span
>${t("chat.pairingQrExpired.badge")}</span
>
</div>
<div class="chat-assistant-attachment-card__reason">${notice.reason}</div>