diff --git a/scripts/i18n-perm-translations.mjs b/scripts/i18n-perm-translations.mjs index 6491e1ab7..1e4ef2000 100644 --- a/scripts/i18n-perm-translations.mjs +++ b/scripts/i18n-perm-translations.mjs @@ -1,8 +1,19 @@ -// One-off: insert translations for the standalone permission UI strings -// (3 decision buttons + 4 settings labels) into every non-English locale, in -// both builds. Idempotent. The question/verbs/long warnings are intentionally -// left to English fallback (word-order coupling / paragraph-length security -// copy that needs native review). Run: node scripts/i18n-perm-translations.mjs +// Batch-patches specific locale strings across every non-English locale, in +// both builds. Idempotent — safe to re-run. +// +// Pass 1 — INSERT the standalone permission UI strings (3 decision buttons + +// 4 settings labels) where missing (original pass, commit 703bbb347). The +// question/verbs/long warnings are intentionally left to English fallback +// (word-order coupling / paragraph-length security copy that needs native +// review). +// +// Pass 2 — REPLACE-IN-PLACE the 'st.display.openai_ask_streaming.label'/'.desc' +// values where they are damaged (literal runs of '?' from a past encoding +// mangling), restoring native-quality copy (issue #2950). Only touched when the +// stored value contains '?', so intact translations are never clobbered and a +// re-run is a no-op. +// +// Run: node scripts/i18n-perm-translations.mjs import fs from 'node:fs'; const T = { @@ -10,24 +21,30 @@ const T = { fr: { allow_once: 'Autoriser une fois', always_allow: 'Toujours autoriser sur {host}', dont_allow: 'Ne pas autoriser', permissions: 'Autorisations', revoke: 'Révoquer', clear_all: 'Effacer toutes les autorisations', gate_label: 'Demander avant les actions importantes' }, tr: { allow_once: 'Bir kez izin ver', always_allow: '{host} için her zaman izin ver', dont_allow: 'İzin verme', permissions: 'İzinler', revoke: 'Kaldır', clear_all: 'Tüm izinleri temizle', gate_label: 'Önemli işlemlerden önce sor' }, zh: { allow_once: '允许一次', always_allow: '始终允许 {host}', dont_allow: '不允许', permissions: '权限', revoke: '撤销', clear_all: '清除所有权限', gate_label: '执行重要操作前询问' }, - ru: { allow_once: 'Разрешить один раз', always_allow: 'Всегда разрешать на {host}', dont_allow: 'Не разрешать', permissions: 'Разрешения', revoke: 'Отозвать', clear_all: 'Очистить все разрешения', gate_label: 'Спрашивать перед важными действиями' }, - uk: { allow_once: 'Дозволити один раз', always_allow: 'Завжди дозволяти на {host}', dont_allow: 'Не дозволяти', permissions: 'Дозволи', revoke: 'Відкликати', clear_all: 'Очистити всі дозволи', gate_label: 'Питати перед важливими діями' }, - ar: { allow_once: 'السماح مرة واحدة', always_allow: 'السماح دائمًا على {host}', dont_allow: 'عدم السماح', permissions: 'الأذونات', revoke: 'إلغاء', clear_all: 'مسح كل الأذونات', gate_label: 'السؤال قبل الإجراءات المهمة' }, - ja: { allow_once: '今回のみ許可', always_allow: '{host} で常に許可', dont_allow: '許可しない', permissions: '権限', revoke: '取り消す', clear_all: 'すべての権限を消去', gate_label: '重要な操作の前に確認する' }, - ko: { allow_once: '한 번 허용', always_allow: '{host}에서 항상 허용', dont_allow: '허용 안 함', permissions: '권한', revoke: '취소', clear_all: '모든 권한 지우기', gate_label: '중요한 작업 전에 확인' }, + ru: { allow_once: 'Разрешить один раз', always_allow: 'Всегда разрешать на {host}', dont_allow: 'Не разрешать', permissions: 'Разрешения', revoke: 'Отозвать', clear_all: 'Очистить все разрешения', gate_label: 'Спрашивать перед важными действиями', ask_label: 'Потоковое отображение ответов в режиме Ask', ask_desc: 'Показывает текст по мере поступления в режиме Ask для поддерживаемых провайдеров. Прерванные потоки показывают уведомление и один раз повторяются без потоковой передачи; ошибки провайдера/API по-прежнему отображаются. Вызовы инструментов ожидают завершения потока; запуски Act, Dev, по расписанию, в облаке и Continue остаются без потоковой передачи. Включено по умолчанию.' }, + uk: { allow_once: 'Дозволити один раз', always_allow: 'Завжди дозволяти на {host}', dont_allow: 'Не дозволяти', permissions: 'Дозволи', revoke: 'Відкликати', clear_all: 'Очистити всі дозволи', gate_label: 'Питати перед важливими діями', ask_label: 'Потокове відображення відповідей у режимі Ask', ask_desc: 'Показує текст у міру надходження в режимі Ask для підтримуваних провайдерів. Перервані потоки показують сповіщення та один раз повторюються без потокової передачі; помилки провайдера/API все одно відображаються. Виклики інструментів чекають на завершення потоку; запуски Act, Dev, за розкладом, у хмарі та Continue залишаються без потокової передачі. Увімкнено за замовчуванням.' }, + ar: { allow_once: 'السماح مرة واحدة', always_allow: 'السماح دائمًا على {host}', dont_allow: 'عدم السماح', permissions: 'الأذونات', revoke: 'إلغاء', clear_all: 'مسح كل الأذونات', gate_label: 'السؤال قبل الإجراءات المهمة', ask_label: 'بث استجابات وضع Ask', ask_desc: 'يعرض النص فور وصوله في وضع Ask لدى المزوّدين المدعومين. تُظهر التدفّقات المنقطعة إشعارًا وتُعاد المحاولة مرة واحدة دون تدفّق، مع بقاء أخطاء المزوّد/واجهة البرمجة (API) ظاهرة. تنتظر استدعاءات الأدوات اكتمال التدفّق؛ بينما تبقى عمليات Act وDev والمجدولة والسحاب وContinue دون تدفّق. مفعّل افتراضيًا.' }, + ja: { allow_once: '今回のみ許可', always_allow: '{host} で常に許可', dont_allow: '許可しない', permissions: '権限', revoke: '取り消す', clear_all: 'すべての権限を消去', gate_label: '重要な操作の前に確認する', ask_label: 'Ask モードの応答をストリーミング', ask_desc: '対応プロバイダーの Ask モードで、テキストが届いたら表示します。中断されたストリームは通知を表示し、ストリーミングなしで一度だけ再試行します。プロバイダー/API エラーは引き続き表示されます。ツール呼び出しはストリームの完了まで待機し、Act・Dev・スケジュール・クラウド・Continue の実行はストリーミングされません。デフォルトでオン。' }, + ko: { allow_once: '한 번 허용', always_allow: '{host}에서 항상 허용', dont_allow: '허용 안 함', permissions: '권한', revoke: '취소', clear_all: '모든 권한 지우기', gate_label: '중요한 작업 전에 확인', ask_label: 'Ask 모드에서 응답 스트리밍', ask_desc: '지원되는 공급자의 경우 Ask 모드에서 텍스트가 도착하면 표시합니다. 중단된 스트림은 알림을 표시하고 스트리밍 없이 한 번 다시 시도하며, 공급자/API 오류는 계속 표시됩니다. 도구 호출은 스트림 완료를 기다리며, Act, Dev, 예약, 클라우드 및 Continue 실행은 스트리밍되지 않습니다. 기본적으로 켜져 있습니다.' }, id: { allow_once: 'Izinkan sekali', always_allow: 'Selalu izinkan di {host}', dont_allow: 'Jangan izinkan', permissions: 'Izin', revoke: 'Cabut', clear_all: 'Hapus semua izin', gate_label: 'Tanya sebelum tindakan penting' }, - th: { allow_once: 'อนุญาตครั้งเดียว', always_allow: 'อนุญาตเสมอบน {host}', dont_allow: 'ไม่อนุญาต', permissions: 'สิทธิ์', revoke: 'เพิกถอน', clear_all: 'ล้างสิทธิ์ทั้งหมด', gate_label: 'ถามก่อนการดำเนินการสำคัญ' }, + th: { allow_once: 'อนุญาตครั้งเดียว', always_allow: 'อนุญาตเสมอบน {host}', dont_allow: 'ไม่อนุญาต', permissions: 'สิทธิ์', revoke: 'เพิกถอน', clear_all: 'ล้างสิทธิ์ทั้งหมด', gate_label: 'ถามก่อนการดำเนินการสำคัญ', ask_label: 'สตรีมการตอบกลับในโหมด Ask', ask_desc: 'แสดงข้อความทันทีที่ได้รับในโหมด Ask สำหรับผู้ให้บริการที่รองรับ สตรีมที่ถูกขัดจังหวะจะแสดงประกาศแล้วลองใหม่อีกครั้งหนึ่งโดยไม่ใช้การสตรีม และยังคงแสดงข้อผิดพลาดของผู้ให้บริการ/API การเรียกใช้เครื่องมือจะรอให้สตรีมเสร็จสมบูรณ์ ส่วนการรัน Act, Dev, ตามกำหนดเวลา, คลาวด์ และ Continue ไม่ใช้การสตรีม เปิดใช้งานตามค่าเริ่มต้น' }, ms: { allow_once: 'Benarkan sekali', always_allow: 'Sentiasa benarkan di {host}', dont_allow: 'Jangan benarkan', permissions: 'Kebenaran', revoke: 'Batalkan', clear_all: 'Kosongkan semua kebenaran', gate_label: 'Tanya sebelum tindakan penting' }, tl: { allow_once: 'Payagan minsan', always_allow: 'Palaging payagan sa {host}', dont_allow: 'Huwag payagan', permissions: 'Mga pahintulot', revoke: 'Bawiin', clear_all: 'I-clear ang lahat ng pahintulot', gate_label: 'Magtanong bago ang mahahalagang aksyon' }, + bn: { allow_once: 'একবার অনুমতি দিন', always_allow: 'সবসময় {host} এ অনুমতি দিন', dont_allow: 'অনুমতি দেবেন না', permissions: 'অনুমতি', revoke: 'প্রত্যাহার করুন', clear_all: 'সমস্ত অনুমতি সাফ করুন', gate_label: 'গুরুত্বপূর্ণ কাজের আগে জিজ্ঞাসা করুন', ask_label: 'Ask মোডে প্রতিক্রিয়া স্ট্রিম করুন', ask_desc: 'সমর্থিত প্রদানকারীদের জন্য Ask মোডে পাঠ্য আসার সাথে সাথেই দেখান। বিঘ্নিত স্ট্রিম একটি বিজ্ঞপ্তি দেখায় এবং স্ট্রিম ছাড়াই একবার পুনরায় চেষ্টা করে; প্রদানকারী/API ত্রুটিগুলি এখনও দেখানো হয়। টুল কল স্ট্রিম শেষ হওয়ার অপেক্ষা করে; Act, Dev, নির্ধারিত, ক্লাউড ও Continue চালনা স্ট্রিমবিহীন থাকে। ডিফল্টভাবে চালু।' }, + fa: { allow_once: 'یکبار اجازه دهید', always_allow: '{host} همیشه مجاز باشد', dont_allow: 'اجازه نده', permissions: 'مجوزها', revoke: 'لغو', clear_all: 'تمام مجوزها را پاک کنید', gate_label: 'قبل از اقدامات مهم بپرسید', ask_label: 'پخش پاسخ‌ها در حالت Ask', ask_desc: 'متن را هنگام رسیدن در حالت Ask برای ارائه‌دهندگان پشتیبانی‌شده نمایش می‌دهد. جریان‌های قطع‌شده یک اعلان نشان می‌دهند و یک بار بدون پخش، دوباره تلاش می‌کنند؛ خطاهای ارائه‌دهنده/API همچنان نمایش داده می‌شوند. فراخوانی ابزارها منتظر تکمیل جریان می‌مانند؛ اجراهای Act، Dev، زمان‌بندی‌شده، ابری و Continue بدون پخش باقی می‌مانند. به‌صورت پیش‌فرض روشن است.' }, + he: { allow_once: 'אפשר פעם אחת', always_allow: 'אפשר תמיד {host}', dont_allow: 'אל תאפשר', permissions: 'הרשאות', revoke: 'לְבַטֵל', clear_all: 'נקה את כל ההרשאות', gate_label: 'שאל לפני פעולות חשובות', ask_label: 'הזרמת תשובות במצב Ask', ask_desc: 'הצג טקסט בזמן הגעתו במצב Ask עבור ספקים נתמכים. זרמים שהופסקו מציגים הודעה ומנסים שוב פעם אחת ללא הזרמה; שגיאות של ספק/API עדיין מוצגות. קריאות לכלים ממתינות להשלמת הזרם; ריצות Act, Dev, מתוזמנות, ענן ו-Continue נותרות ללא הזרמה. מופעל כברירת מחדל.' }, + hi: { allow_once: 'एक बार अनुमति दें', always_allow: 'हमेशा {host} पर अनुमति दें', dont_allow: 'अनुमति न दें', permissions: 'अनुमतियाँ', revoke: 'निरस्त करें', clear_all: 'सभी अनुमतियाँ साफ़ करें', gate_label: 'महत्वपूर्ण कार्यों से पहले पूछें', ask_label: 'Ask मोड में उत्तर स्ट्रीम करें', ask_desc: 'समर्थित प्रदाताओं के लिए Ask मोड में आते ही टेक्स्ट दिखाएँ। बाधित स्ट्रीम एक सूचना दिखाती हैं और स्ट्रीमिंग के बिना एक बार फिर प्रयास करती हैं; प्रदाता/API त्रुटियाँ अभी भी दिखाई देती हैं। टूल कॉल स्ट्रीम पूरी होने की प्रतीक्षा करते हैं; Act, Dev, निर्धारित, क्लाउड और Continue रन बिना स्ट्रीमिंग के रहते हैं। डिफ़ॉल्ट रूप से चालू।' }, }; const dirs = ['src/firefox/src/ui/locales', 'src/chrome/src/ui/locales']; for (const dir of dirs) { + // Pass 1 — insert permission UI strings where the block is missing. for (const [lang, v] of Object.entries(T)) { + if (v.allow_once === undefined) continue; const file = `${dir}/${lang}.js`; let src = fs.readFileSync(file, 'utf8'); - if (src.includes("'sp.perm.allow_once'")) { console.log('skip (already present)', file); continue; } + if (/['"]sp\.perm\.allow_once['"]/.test(src)) continue; const lines = [ ` 'sp.perm.allow_once': ${JSON.stringify(v.allow_once)},`, ` 'sp.perm.always_allow': ${JSON.stringify(v.always_allow)},`, @@ -42,5 +59,27 @@ for (const dir of dirs) { fs.writeFileSync(file, src); console.log('patched', file); } + + // Pass 2 — replace damaged Ask-streaming copy in place. + for (const [lang, v] of Object.entries(T)) { + if (v.ask_label === undefined) continue; + const file = `${dir}/${lang}.js`; + let src = fs.readFileSync(file, 'utf8'); + let changed = false; + for (const [key, value] of [ + ['st.display.openai_ask_streaming.label', v.ask_label], + ['st.display.openai_ask_streaming.desc', v.ask_desc], + ]) { + const re = new RegExp(`('${key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}'\\s*:\\s*)("[^"]*")`, 'm'); + const before = src; + src = src.replace(re, (_m, p1, p2) => (p2.includes('?') ? `${p1}${JSON.stringify(value)}` : _m)); + if (src !== before) changed = true; + else if (!re.test(src)) console.log('!warn (key not found)', file, key); + } + if (changed) { + fs.writeFileSync(file, src); + console.log('fixed', file); + } + } } -console.log('done'); +console.log('done'); \ No newline at end of file diff --git a/src/chrome/src/ui/locales/ar.js b/src/chrome/src/ui/locales/ar.js index cb5a01108..e61989baf 100644 --- a/src/chrome/src/ui/locales/ar.js +++ b/src/chrome/src/ui/locales/ar.js @@ -754,8 +754,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "اسمح لـ WebBrain باستخدام POST وPUT وPATCH وDELETE عبر fetch_url أو research_url دون الحاجة إلى /allow-api في كل محادثة. تظل إرشادات أولوية واجهة المستخدم وفحوصات التأكيد سارية. معطّل افتراضيًا.", 'st.display.api_mutation_observer.label': 'مراقب تحولات API', 'st.display.api_mutation_observer.desc': 'مراقبة عناوين URL وطرق طلبات XHR/fetch في نفس التبويب ليتمكن WebBrain من اكتشاف إجراءات الواجهة المتكررة واقتراح أنماط اختصارات API. معطل افتراضياً؛ قم بتفعيله فقط أثناء التحقيق في سلوك الاختصار أو زمن الاستجابة.', - 'st.display.openai_ask_streaming.label': "?? ?????? ?? ??? ??????", - 'st.display.openai_ask_streaming.desc': "???? ???? ??????? ??? ?????? ?? ??? ??????. ????? ????????? ??????? ??? ?????? ??????? ???? ?????? Act ?Dev ????????? ????????? ?Continue ??? ??. ????? ?????????.", + 'st.display.openai_ask_streaming.label': "بث استجابات وضع Ask", + 'st.display.openai_ask_streaming.desc': "يعرض النص فور وصوله في وضع Ask لدى المزوّدين المدعومين. تُظهر التدفّقات المنقطعة إشعارًا وتُعاد المحاولة مرة واحدة دون تدفّق، مع بقاء أخطاء المزوّد/واجهة البرمجة (API) ظاهرة. تنتظر استدعاءات الأدوات اكتمال التدفّق؛ بينما تبقى عمليات Act وDev والمجدولة والسحاب وContinue دون تدفّق. مفعّل افتراضيًا.", 'st.display.plan_before_act.label': 'التخطيط قبل التنفيذ', 'st.display.plan_before_act.desc': "يجري وضعا Act وDev دائمًا فحصًا منظمًا للنية قبل تشغيل الأدوات. وضع المحاولة (الافتراضي) ينشئ أيضًا خططًا كاملة، وقد يعيد استخدام خطة معتمدة حديثًا لمتابعة قصيرة؛ والوضع الصارم ينشئ خطة كاملة في كل دورة. يعيد وضع المحاولة المحاولة مرة واحدة، ثم يتابع في وضع Act مع تحذير إذا ظل القصد أو التخطيط غير صالح؛ ويتوقف الوضع الصارم قبل تشغيل الأدوات.", 'st.display.plan_before_act.try': 'محاولة التخطيط (افتراضياً)', diff --git a/src/chrome/src/ui/locales/bn.js b/src/chrome/src/ui/locales/bn.js index 27c541d1f..535e8211e 100644 --- a/src/chrome/src/ui/locales/bn.js +++ b/src/chrome/src/ui/locales/bn.js @@ -592,8 +592,8 @@ export default { 'st.display.api_mutation_observer.desc': "একই-ট্যাব XHR/ফেচ অনুরোধ URL এবং পদ্ধতিগুলি পর্যবেক্ষণ করুন যাতে WebBrain বারবার UI অ্যাকশন সনাক্ত করতে পারে এবং API শর্টকাট প্যাটার্নের পরামর্শ দিতে পারে। ডিফল্টরূপে বন্ধ; শুধুমাত্র শর্টকাট আচরণ বা লেটেন্সি তদন্ত করার সময় সক্ষম করুন।", 'st.display.webmcp.label': "পরীক্ষামূলক WebMCP", 'st.display.webmcp.desc': "WebBrain সমর্থিত Chrome পৃষ্ঠাগুলির দ্বারা প্রকাশিত কাঠামোগত সরঞ্জামগুলি আবিষ্কার এবং চালানোর অনুমতি দিন৷ এটি সক্ষম করলে মডেল প্রসঙ্গে পরীক্ষামূলক WebMCP টুল এবং নির্দেশিকা যোগ হয়। ডিফল্টরূপে বন্ধ।", - 'st.display.openai_ask_streaming.label': "Ask ????? ????? ??????? ????", - 'st.display.openai_ask_streaming.desc': "Ask ???? ???????????? ????? ???? ????? ????? ?????? ??? ?? ???? ???????? ??????? ???????? ???? ??????? ???; Act, Dev, ?????????, ?????? ? Continue ??? ??????? ??? ??? ?????????? ?????", + 'st.display.openai_ask_streaming.label': "Ask মোডে প্রতিক্রিয়া স্ট্রিম করুন", + 'st.display.openai_ask_streaming.desc': "সমর্থিত প্রদানকারীদের জন্য Ask মোডে পাঠ্য আসার সাথে সাথেই দেখান। বিঘ্নিত স্ট্রিম একটি বিজ্ঞপ্তি দেখায় এবং স্ট্রিম ছাড়াই একবার পুনরায় চেষ্টা করে; প্রদানকারী/API ত্রুটিগুলি এখনও দেখানো হয়। টুল কল স্ট্রিম শেষ হওয়ার অপেক্ষা করে; Act, Dev, নির্ধারিত, ক্লাউড ও Continue চালনা স্ট্রিমবিহীন থাকে। ডিফল্টভাবে চালু।", 'st.display.plan_before_act.label': "আইনের আগে পরিকল্পনা করুন", 'st.display.plan_before_act.desc': "Act এবং Dev মোড টুল চালানোর আগে সবসময় কাঠামোবদ্ধ উদ্দেশ্য যাচাই করে। চেষ্টা (ডিফল্ট) পূর্ণ পরিকল্পনাও তৈরি করে, তবে সংক্ষিপ্ত ফলো-আপে সম্প্রতি অনুমোদিত পরিকল্পনা পুনরায় ব্যবহার করতে পারে; কঠোর মোড প্রতি টার্নে পূর্ণ পরিকল্পনা তৈরি করে। উদ্দেশ্য বা পরিকল্পনা এখনও অবৈধ থাকলে চেষ্টা মোড আর একবার চেষ্টা করে, তারপর সতর্কতা দেখিয়ে Act মোডে এগিয়ে যায়; কঠোর মোড টুল চালানোর আগে থামে।", 'st.display.plan_before_act.try': "পরিকল্পনা করার চেষ্টা করুন (ডিফল্ট)", diff --git a/src/chrome/src/ui/locales/fa.js b/src/chrome/src/ui/locales/fa.js index 6ffd42771..5782c1f3f 100644 --- a/src/chrome/src/ui/locales/fa.js +++ b/src/chrome/src/ui/locales/fa.js @@ -592,8 +592,8 @@ export default { 'st.display.api_mutation_observer.desc': "نشانی‌های وب و روش‌های درخواستی XHR/واکشی همان تب را مشاهده کنید تا WebBrain بتواند اقدامات مکرر UI را تشخیص دهد و الگوهای میانبر API را پیشنهاد کند. خاموش به طور پیش فرض؛ فقط هنگام بررسی رفتار میانبر یا تأخیر فعال شود.", 'st.display.webmcp.label': "WebMCP آزمایشی", 'st.display.webmcp.desc': "به WebBrain اجازه دهید ابزارهای ساخت یافته ای را که توسط صفحات پشتیبانی شده Chrome در معرض دید قرار گرفته اند را کشف و اجرا کند. فعال کردن این، ابزارهای آزمایشی WebMCP و راهنمایی را به بافت مدل اضافه می کند. به طور پیش فرض خاموش است.", - 'st.display.openai_ask_streaming.label': "??? ??????? ?? ???? Ask", - 'st.display.openai_ask_streaming.desc': "???????? ??????????? ?? ????? ?????? ?? ???? Ask ????? ????. ???????? ????? ????? ?????? ?????? ????? ???????? ??????? Act? Dev? ?????????????? ???? ? Continue ???? ??? ???? ????????. ?????? ??????? ???? ???.", + 'st.display.openai_ask_streaming.label': "پخش پاسخ‌ها در حالت Ask", + 'st.display.openai_ask_streaming.desc': "متن را هنگام رسیدن در حالت Ask برای ارائه‌دهندگان پشتیبانی‌شده نمایش می‌دهد. جریان‌های قطع‌شده یک اعلان نشان می‌دهند و یک بار بدون پخش، دوباره تلاش می‌کنند؛ خطاهای ارائه‌دهنده/API همچنان نمایش داده می‌شوند. فراخوانی ابزارها منتظر تکمیل جریان می‌مانند؛ اجراهای Act، Dev، زمان‌بندی‌شده، ابری و Continue بدون پخش باقی می‌مانند. به‌صورت پیش‌فرض روشن است.", 'st.display.plan_before_act.label': "قبل از قانون برنامه ریزی کنید", 'st.display.plan_before_act.desc': "حالت‌های Act و Dev همیشه پیش از اجرای ابزارها یک بررسی ساختاریافتهٔ قصد انجام می‌دهند. حالت «تلاش» (پیش‌فرض) برنامه‌های کامل نیز می‌سازد، اما ممکن است برای یک پیگیری کوتاه از برنامهٔ تازه‌تأییدشده استفاده کند؛ حالت «سخت‌گیرانه» در هر نوبت برنامهٔ کامل می‌سازد. «تلاش» یک بار دیگر امتحان می‌کند و اگر قصد یا برنامه همچنان نامعتبر باشد، با یک هشدار در حالت Act ادامه می‌دهد؛ «سخت‌گیرانه» پیش از ابزارها متوقف می‌شود.", 'st.display.plan_before_act.try': "برنامه ریزی را امتحان کنید (پیش فرض)", diff --git a/src/chrome/src/ui/locales/he.js b/src/chrome/src/ui/locales/he.js index 6468be3d9..13e0a6b29 100644 --- a/src/chrome/src/ui/locales/he.js +++ b/src/chrome/src/ui/locales/he.js @@ -560,8 +560,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "אפשר ל-WebBrain להשתמש ב-POST, PUT, PATCH ו-DELETE דרך fetch_url או research_url בלי לדרוש /allow-api בכל שיחה. הנחיות להעדפת הממשק ובדיקות אישור עדיין חלות. כבוי כברירת מחדל.", "st.display.api_mutation_observer.label": "מעקב אחר שינויי API", "st.display.api_mutation_observer.desc": "עקוב אחר כתובות URL ושיטות של בקשות XHR/fetch באותה כרטיסייה, כדי ש-WebBrain יוכל לזהות פעולות חוזרות בממשק ולהציע דפוסי קיצור דרך דרך ה-API. כבוי כברירת מחדל; הפעל רק בעת בדיקת קיצורי דרך או זמני תגובה.", - 'st.display.openai_ask_streaming.label': "????? ?????? ???? Ask", - 'st.display.openai_ask_streaming.desc': "??? ?? ?????? ???? ???? ????? ???? Ask. ?????? ????? ??????? ?????? ???? ?? ????; ?????? Act, Dev, ????????, ???? ?-Continue ?????? ??? ?????. ????? ?????? ????.", + 'st.display.openai_ask_streaming.label': "הזרמת תשובות במצב Ask", + 'st.display.openai_ask_streaming.desc': "הצג טקסט בזמן הגעתו במצב Ask עבור ספקים נתמכים. זרמים שהופסקו מציגים הודעה ומנסים שוב פעם אחת ללא הזרמה; שגיאות של ספק/API עדיין מוצגות. קריאות לכלים ממתינות להשלמת הזרם; ריצות Act, Dev, מתוזמנות, ענן ו-Continue נותרות ללא הזרמה. מופעל כברירת מחדל.", "st.display.webmcp.label": "WebMCP ניסיוני", "st.display.webmcp.desc": "אפשר ל-WebBrain לגלות ולהפעיל כלים מובנים שדפי Chrome נתמכים חושפים. הפעלה מוסיפה את כלי WebMCP הניסיוניים ואת ההנחיות שלהם להקשר של המודל. כבוי כברירת מחדל.", "st.display.plan_before_act.label": "תכנן לפני מעשה", diff --git a/src/chrome/src/ui/locales/hi.js b/src/chrome/src/ui/locales/hi.js index 4e4a9c3a3..64d39fee4 100644 --- a/src/chrome/src/ui/locales/hi.js +++ b/src/chrome/src/ui/locales/hi.js @@ -592,8 +592,8 @@ export default { 'st.display.api_mutation_observer.desc': "समान-टैब XHR/फ़ेच अनुरोध URL और विधियों का निरीक्षण करें ताकि WebBrain बार-बार होने वाली UI क्रियाओं का पता लगा सके और API शॉर्टकट पैटर्न सुझा सके। डिफ़ॉल्ट रूप से बंद; शॉर्टकट व्यवहार या विलंबता की जांच करते समय ही सक्षम करें।", 'st.display.webmcp.label': "प्रायोगिक वेबएमसीपी", 'st.display.webmcp.desc': "WebBrain को समर्थित Chrome पृष्ठों द्वारा प्रदर्शित संरचित टूल को खोजने और चलाने की अनुमति दें। इसे सक्षम करने से मॉडल संदर्भ में प्रयोगात्मक WebMCP उपकरण और मार्गदर्शन जुड़ जाता है। डिफ़ॉल्ट रूप से बंद.", - 'st.display.openai_ask_streaming.label': "Ask ??? ??? ????? ??????? ????", - 'st.display.openai_ask_streaming.desc': "Ask ??? ??? ??????? ?? ????? ??? ?? ??????? ??? ??? ????? ??????? ????? ?? ????????? ???? ???; Act, Dev, ?????????, ?????? ?? Continue ?? ???? ?????????? ?? ???? ???? ???????? ??? ?? ?????", + 'st.display.openai_ask_streaming.label': "Ask मोड में उत्तर स्ट्रीम करें", + 'st.display.openai_ask_streaming.desc': "समर्थित प्रदाताओं के लिए Ask मोड में आते ही टेक्स्ट दिखाएँ। बाधित स्ट्रीम एक सूचना दिखाती हैं और स्ट्रीमिंग के बिना एक बार फिर प्रयास करती हैं; प्रदाता/API त्रुटियाँ अभी भी दिखाई देती हैं। टूल कॉल स्ट्रीम पूरी होने की प्रतीक्षा करते हैं; Act, Dev, निर्धारित, क्लाउड और Continue रन बिना स्ट्रीमिंग के रहते हैं। डिफ़ॉल्ट रूप से चालू।", 'st.display.plan_before_act.label': "अधिनियम से पहले योजना बनाएं", 'st.display.plan_before_act.desc': "Act और Dev मोड टूल चलाने से पहले हमेशा संरचित इरादा जाँचते हैं। प्रयास (डिफ़ॉल्ट) पूरी योजनाएँ भी बनाता है, लेकिन छोटे फ़ॉलो-अप के लिए हाल में स्वीकृत योजना का दोबारा उपयोग कर सकता है; सख़्त मोड हर टर्न में पूरी योजना बनाता है। इरादा या योजना फिर भी अमान्य हो तो प्रयास एक बार दोबारा कोशिश करता है और चेतावनी के साथ Act मोड में आगे बढ़ता है; सख़्त मोड टूल चलाने से पहले रुकता है।", 'st.display.plan_before_act.try': "योजना बनाने का प्रयास करें (डिफ़ॉल्ट)", diff --git a/src/chrome/src/ui/locales/ja.js b/src/chrome/src/ui/locales/ja.js index af64e9de6..9aa7c0e8e 100644 --- a/src/chrome/src/ui/locales/ja.js +++ b/src/chrome/src/ui/locales/ja.js @@ -754,8 +754,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "会話ごとに /allow-api を必要とせず、WebBrain が fetch_url または research_url で POST、PUT、PATCH、DELETE を使用できるようにします。UI優先の指針と確認チェックは引き続き適用されます。既定ではオフです。", 'st.display.api_mutation_observer.label': 'API変更オブザーバー', 'st.display.api_mutation_observer.desc': '同じタブの XHR/fetch リクエスト URL とメソッドを監視し、WebBrain が繰り返しの UI アクションを検出して API ショートカットパターンを提案できるようにします。デフォルトではオフ。ショートカット動作やレイテンシの調査中のみ有効にしてください。', - 'st.display.openai_ask_streaming.label': "Ask ???????????", - 'st.display.openai_ask_streaming.desc': "Ask ??????????????????????????????????????????????????Act?Dev?????????????Continue ?????????????????????????????", + 'st.display.openai_ask_streaming.label': "Ask モードの応答をストリーミング", + 'st.display.openai_ask_streaming.desc': "対応プロバイダーの Ask モードで、テキストが届いたら表示します。中断されたストリームは通知を表示し、ストリーミングなしで一度だけ再試行します。プロバイダー/API エラーは引き続き表示されます。ツール呼び出しはストリームの完了まで待機し、Act・Dev・スケジュール・クラウド・Continue の実行はストリーミングされません。デフォルトでオン。", 'st.display.plan_before_act.label': '実行前に計画', 'st.display.plan_before_act.desc': "Act と Dev はツール実行前に必ず構造化された意図確認を行います。試行(デフォルト)は完全な計画も作成しますが、短いフォローアップでは直近に承認された計画を再利用できます。厳格は毎ターン完全な計画を作成します。意図または計画が無効な場合、試行は1回再試行してから警告を表示し、Act モードで続行します。厳格はツール実行前に停止します。", 'st.display.plan_before_act.try': '計画を試す(デフォルト)', diff --git a/src/chrome/src/ui/locales/ko.js b/src/chrome/src/ui/locales/ko.js index f5a9c8788..5b9b9a5ad 100644 --- a/src/chrome/src/ui/locales/ko.js +++ b/src/chrome/src/ui/locales/ko.js @@ -754,8 +754,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "대화마다 /allow-api를 입력하지 않아도 WebBrain이 fetch_url 또는 research_url을 통해 POST, PUT, PATCH, DELETE를 사용하도록 허용합니다. UI 우선 지침과 확인 검사는 계속 적용됩니다. 기본적으로 꺼져 있습니다.", 'st.display.api_mutation_observer.label': 'API 변경 관찰자', 'st.display.api_mutation_observer.desc': '동일한 탭의 XHR/fetch 요청 URL 및 메서드를 관찰하여 WebBrain이 반복되는 UI 작업을 감지하고 API 바로가기 패턴을 제안할 수 있도록 합니다. 기본적으로 꺼져 있습니다. 바로가기 동작이나 지연 시간을 조사할 때만 활성화하세요.', - 'st.display.openai_ask_streaming.label': "Ask ?? ????", - 'st.display.openai_ask_streaming.desc': "Ask ???? ??? ??? ???? ?? ?????. ?? ??? ??? ?? ???? ???? Act, Dev, ??, ???? ? Continue ??? ?????? ????. ????? ?? ????.", + 'st.display.openai_ask_streaming.label': "Ask 모드에서 응답 스트리밍", + 'st.display.openai_ask_streaming.desc': "지원되는 공급자의 경우 Ask 모드에서 텍스트가 도착하면 표시합니다. 중단된 스트림은 알림을 표시하고 스트리밍 없이 한 번 다시 시도하며, 공급자/API 오류는 계속 표시됩니다. 도구 호출은 스트림 완료를 기다리며, Act, Dev, 예약, 클라우드 및 Continue 실행은 스트리밍되지 않습니다. 기본적으로 켜져 있습니다.", 'st.display.plan_before_act.label': '실행 전 계획', 'st.display.plan_before_act.desc': "Act 및 Dev 모드는 도구 실행 전에 항상 구조화된 의도 확인을 수행합니다. 시도(기본값)는 전체 계획도 만들지만 짧은 후속 요청에서는 최근 승인된 계획을 재사용할 수 있습니다. 엄격 모드는 매 턴 전체 계획을 만듭니다. 의도나 계획이 계속 유효하지 않으면 시도 모드는 한 번 더 시도한 뒤 경고를 표시하고 Act 모드로 계속하며, 엄격 모드는 도구 실행 전에 중지합니다.", 'st.display.plan_before_act.try': '계획 시도 (기본값)', diff --git a/src/chrome/src/ui/locales/ru.js b/src/chrome/src/ui/locales/ru.js index b18e88b2f..5b20b2592 100644 --- a/src/chrome/src/ui/locales/ru.js +++ b/src/chrome/src/ui/locales/ru.js @@ -754,8 +754,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "Разрешить WebBrain использовать POST, PUT, PATCH и DELETE через fetch_url или research_url без команды /allow-api в каждом разговоре. Правило приоритета интерфейса и проверки подтверждения продолжают действовать. По умолчанию выключено.", 'st.display.api_mutation_observer.label': 'Наблюдатель мутаций API', 'st.display.api_mutation_observer.desc': 'Наблюдайте за URL-адресами и методами запросов XHR/fetch на той же вкладке, чтобы WebBrain мог обнаруживать повторяющиеся действия UI и предлагать шаблоны API-шорткатов. Отключено по умолчанию; включайте только при исследовании поведения шорткатов или задержек.', - 'st.display.openai_ask_streaming.label': "????????? ?????? ? ?????? Ask", - 'st.display.openai_ask_streaming.desc': "?????????? ?????? ?????????? ?? ???? ??????????? ? ?????? Ask. ?????? ???????????? ???? ???????????? ??????? ??????; Act, Dev, ???????????????, ???????? ? Continue-??????? ???????? ??? ????????? ????????. ???????? ?? ?????????.", + 'st.display.openai_ask_streaming.label': "Потоковое отображение ответов в режиме Ask", + 'st.display.openai_ask_streaming.desc': "Показывает текст по мере поступления в режиме Ask для поддерживаемых провайдеров. Прерванные потоки показывают уведомление и один раз повторяются без потоковой передачи; ошибки провайдера/API по-прежнему отображаются. Вызовы инструментов ожидают завершения потока; запуски Act, Dev, по расписанию, в облаке и Continue остаются без потоковой передачи. Включено по умолчанию.", 'st.display.plan_before_act.label': 'Планировать перед действием', 'st.display.plan_before_act.desc': "Режимы Act и Dev всегда выполняют структурированную проверку намерения перед запуском инструментов. Попытка (по умолчанию) также строит полные планы, но для короткого продолжения может повторно использовать недавно одобренный план; Строгий режим строит полный план на каждом ходу. Попытка повторяет запрос один раз и, если намерение или план всё ещё недействительны, продолжает в режиме Act с предупреждением; Строгий режим останавливается до запуска инструментов.", 'st.display.plan_before_act.try': 'Попробовать планирование (по умолчанию)', diff --git a/src/chrome/src/ui/locales/th.js b/src/chrome/src/ui/locales/th.js index ba9ef28eb..380003251 100644 --- a/src/chrome/src/ui/locales/th.js +++ b/src/chrome/src/ui/locales/th.js @@ -754,8 +754,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "อนุญาตให้ WebBrain ใช้ POST, PUT, PATCH และ DELETE ผ่าน fetch_url หรือ research_url โดยไม่ต้องใช้ /allow-api ในทุกการสนทนา แนวทางที่ให้ความสำคัญกับ UI และการตรวจสอบการยืนยันยังคงมีผล ปิดไว้โดยค่าเริ่มต้น", 'st.display.api_mutation_observer.label': 'ตัวสังเกตการกลายพันธุ์ของ API', 'st.display.api_mutation_observer.desc': 'สังเกต URL และวิธีการของคำขอ XHR/fetch ในแท็บเดียวกัน เพื่อให้ WebBrain ตรวจจับการกระทำ UI ที่ซ้ำและแนะนำรูปแบบทางลัด API ปิดโดยค่าเริ่มต้น เปิดใช้งานเฉพาะเมื่อตรวจสอบพฤติกรรมทางลัดหรือความหน่วง', - 'st.display.openai_ask_streaming.label': "???????????????? Ask", - 'st.display.openai_ask_streaming.desc': "??????????????????????????????????????????? Ask ??????????????????????????????????????????? ???? Act, Dev, ??????????????? ????????? ??? Continue ????????????? ??????????????????", + 'st.display.openai_ask_streaming.label': "สตรีมการตอบกลับในโหมด Ask", + 'st.display.openai_ask_streaming.desc': "แสดงข้อความทันทีที่ได้รับในโหมด Ask สำหรับผู้ให้บริการที่รองรับ สตรีมที่ถูกขัดจังหวะจะแสดงประกาศแล้วลองใหม่อีกครั้งหนึ่งโดยไม่ใช้การสตรีม และยังคงแสดงข้อผิดพลาดของผู้ให้บริการ/API การเรียกใช้เครื่องมือจะรอให้สตรีมเสร็จสมบูรณ์ ส่วนการรัน Act, Dev, ตามกำหนดเวลา, คลาวด์ และ Continue ไม่ใช้การสตรีม เปิดใช้งานตามค่าเริ่มต้น", 'st.display.plan_before_act.label': 'วางแผนก่อนดำเนินการ', 'st.display.plan_before_act.desc': "โหมด Act และ Dev จะตรวจสอบเจตนาแบบมีโครงสร้างก่อนใช้เครื่องมือเสมอ โหมดลอง (ค่าเริ่มต้น) จะสร้างแผนฉบับเต็มด้วย แต่อาจใช้แผนที่เพิ่งอนุมัติซ้ำสำหรับคำขอต่อเนื่องสั้น ๆ ส่วนโหมดเข้มงวดจะสร้างแผนฉบับเต็มทุกครั้ง หากเจตนาหรือแผนยังไม่ถูกต้อง โหมดลองจะลองอีกหนึ่งครั้งแล้วดำเนินต่อในโหมด Act พร้อมคำเตือน ส่วนโหมดเข้มงวดจะหยุดก่อนใช้เครื่องมือ", 'st.display.plan_before_act.try': 'ลองวางแผน (ค่าเริ่มต้น)', diff --git a/src/chrome/src/ui/locales/uk.js b/src/chrome/src/ui/locales/uk.js index 3fc2c1252..b9927e5a9 100644 --- a/src/chrome/src/ui/locales/uk.js +++ b/src/chrome/src/ui/locales/uk.js @@ -754,8 +754,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "Дозволити WebBrain використовувати POST, PUT, PATCH і DELETE через fetch_url або research_url без команди /allow-api в кожній розмові. Правило пріоритету інтерфейсу та перевірки підтвердження залишаються чинними. Типово вимкнено.", 'st.display.api_mutation_observer.label': 'Спостерігач мутацій API', 'st.display.api_mutation_observer.desc': 'Спостерігайте за URL-адресами та методами запитів XHR/fetch на тій самій вкладці, щоб WebBrain міг виявляти повторювані дії інтерфейсу та пропонувати шаблони API-скорочень. Вимкнено за замовчуванням; вмикайте лише під час дослідження поведінки скорочень або затримки.', - 'st.display.openai_ask_streaming.label': "???????? ????????? ? ?????? Ask", - 'st.display.openai_ask_streaming.desc': "?????????? ????????? ?????????? ? ???? ??????????? ? ?????? Ask. ??????? ???????????? ??????? ?? ??????????? ????? ??????; Act, Dev, ???????????, ?????? ?? Continue-??????? ??????????? ??? ????????? ????????. ????????? ?? ?????????????.", + 'st.display.openai_ask_streaming.label': "Потокове відображення відповідей у режимі Ask", + 'st.display.openai_ask_streaming.desc': "Показує текст у міру надходження в режимі Ask для підтримуваних провайдерів. Перервані потоки показують сповіщення та один раз повторюються без потокової передачі; помилки провайдера/API все одно відображаються. Виклики інструментів чекають на завершення потоку; запуски Act, Dev, за розкладом, у хмарі та Continue залишаються без потокової передачі. Увімкнено за замовчуванням.", 'st.display.plan_before_act.label': 'Планувати перед дією', 'st.display.plan_before_act.desc': "Режими Act і Dev завжди виконують структуровану перевірку наміру перед запуском інструментів. Спроба (типово) також створює повні плани, але для короткого продовження може повторно використати нещодавно схвалений план; Суворий режим створює повний план на кожному кроці. Спроба повторює запит один раз і, якщо намір або план усе ще недійсні, продовжує в режимі Act із попередженням; Суворий режим зупиняється до запуску інструментів.", 'st.display.plan_before_act.try': 'Спробувати планування (за замовчуванням)', diff --git a/src/firefox/src/ui/locales/ar.js b/src/firefox/src/ui/locales/ar.js index 66bb3df41..a50917f86 100644 --- a/src/firefox/src/ui/locales/ar.js +++ b/src/firefox/src/ui/locales/ar.js @@ -729,8 +729,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "اسمح لـ WebBrain باستخدام POST وPUT وPATCH وDELETE عبر fetch_url أو research_url دون الحاجة إلى /allow-api في كل محادثة. تظل إرشادات أولوية واجهة المستخدم وفحوصات التأكيد سارية. معطّل افتراضيًا.", 'st.display.api_mutation_observer.label': 'مراقب تحولات API', 'st.display.api_mutation_observer.desc': 'مراقبة عناوين URL وطرق طلبات XHR/fetch في نفس التبويب ليتمكن WebBrain من اكتشاف إجراءات الواجهة المتكررة واقتراح أنماط اختصارات API. معطل افتراضياً؛ قم بتفعيله فقط أثناء التحقيق في سلوك الاختصار أو زمن الاستجابة.', - 'st.display.openai_ask_streaming.label': "?? ?????? ?? ??? ??????", - 'st.display.openai_ask_streaming.desc': "???? ???? ??????? ??? ?????? ?? ??? ??????. ????? ????????? ??????? ??? ?????? ??????? ???? ?????? Act ?Dev ????????? ????????? ?Continue ??? ??. ????? ?????????.", + 'st.display.openai_ask_streaming.label': "بث استجابات وضع Ask", + 'st.display.openai_ask_streaming.desc': "يعرض النص فور وصوله في وضع Ask لدى المزوّدين المدعومين. تُظهر التدفّقات المنقطعة إشعارًا وتُعاد المحاولة مرة واحدة دون تدفّق، مع بقاء أخطاء المزوّد/واجهة البرمجة (API) ظاهرة. تنتظر استدعاءات الأدوات اكتمال التدفّق؛ بينما تبقى عمليات Act وDev والمجدولة والسحاب وContinue دون تدفّق. مفعّل افتراضيًا.", 'st.display.plan_before_act.label': 'التخطيط قبل التنفيذ', 'st.display.plan_before_act.desc': "يجري وضعا Act وDev دائمًا فحصًا منظمًا للنية قبل تشغيل الأدوات. وضع المحاولة (الافتراضي) ينشئ أيضًا خططًا كاملة، وقد يعيد استخدام خطة معتمدة حديثًا لمتابعة قصيرة؛ والوضع الصارم ينشئ خطة كاملة في كل دورة. يعيد وضع المحاولة المحاولة مرة واحدة، ثم يتابع في وضع Act مع تحذير إذا ظل القصد أو التخطيط غير صالح؛ ويتوقف الوضع الصارم قبل تشغيل الأدوات.", 'st.display.plan_before_act.try': 'محاولة التخطيط (افتراضياً)', diff --git a/src/firefox/src/ui/locales/bn.js b/src/firefox/src/ui/locales/bn.js index f81c6a38c..bf082f4a2 100644 --- a/src/firefox/src/ui/locales/bn.js +++ b/src/firefox/src/ui/locales/bn.js @@ -578,8 +578,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "প্রতিটি কথোপকথনে /allow-api ছাড়াই WebBrain-কে fetch_url বা research_url-এর মাধ্যমে POST, PUT, PATCH ও DELETE ব্যবহার করতে দিন। UI-প্রথম নির্দেশনা ও নিশ্চিতকরণ যাচাই এখনও প্রযোজ্য। ডিফল্টভাবে বন্ধ।", 'st.display.api_mutation_observer.label': "API মিউটেশন পর্যবেক্ষক", 'st.display.api_mutation_observer.desc': "একই-ট্যাব XHR/ফেচ অনুরোধ URL এবং পদ্ধতিগুলি পর্যবেক্ষণ করুন যাতে WebBrain বারবার UI অ্যাকশন সনাক্ত করতে পারে এবং API শর্টকাট প্যাটার্নের পরামর্শ দিতে পারে। ডিফল্টরূপে বন্ধ; শুধুমাত্র শর্টকাট আচরণ বা লেটেন্সি তদন্ত করার সময় সক্ষম করুন।", - 'st.display.openai_ask_streaming.label': "Ask ????? ????? ??????? ????", - 'st.display.openai_ask_streaming.desc': "Ask ???? ???????????? ????? ???? ????? ????? ?????? ??? ?? ???? ???????? ??????? ???????? ???? ??????? ???; Act, Dev, ?????????, ?????? ? Continue ??? ??????? ??? ??? ?????????? ?????", + 'st.display.openai_ask_streaming.label': "Ask মোডে প্রতিক্রিয়া স্ট্রিম করুন", + 'st.display.openai_ask_streaming.desc': "সমর্থিত প্রদানকারীদের জন্য Ask মোডে পাঠ্য আসার সাথে সাথেই দেখান। বিঘ্নিত স্ট্রিম একটি বিজ্ঞপ্তি দেখায় এবং স্ট্রিম ছাড়াই একবার পুনরায় চেষ্টা করে; প্রদানকারী/API ত্রুটিগুলি এখনও দেখানো হয়। টুল কল স্ট্রিম শেষ হওয়ার অপেক্ষা করে; Act, Dev, নির্ধারিত, ক্লাউড ও Continue চালনা স্ট্রিমবিহীন থাকে। ডিফল্টভাবে চালু।", 'st.display.plan_before_act.label': "আইনের আগে পরিকল্পনা করুন", 'st.display.plan_before_act.desc': "Act এবং Dev মোড টুল চালানোর আগে সবসময় কাঠামোবদ্ধ উদ্দেশ্য যাচাই করে। চেষ্টা (ডিফল্ট) পূর্ণ পরিকল্পনাও তৈরি করে, তবে সংক্ষিপ্ত ফলো-আপে সম্প্রতি অনুমোদিত পরিকল্পনা পুনরায় ব্যবহার করতে পারে; কঠোর মোড প্রতি টার্নে পূর্ণ পরিকল্পনা তৈরি করে। উদ্দেশ্য বা পরিকল্পনা এখনও অবৈধ থাকলে চেষ্টা মোড আর একবার চেষ্টা করে, তারপর সতর্কতা দেখিয়ে Act মোডে এগিয়ে যায়; কঠোর মোড টুল চালানোর আগে থামে।", 'st.display.plan_before_act.try': "পরিকল্পনা করার চেষ্টা করুন (ডিফল্ট)", diff --git a/src/firefox/src/ui/locales/fa.js b/src/firefox/src/ui/locales/fa.js index 75fe329a9..2da1b1465 100644 --- a/src/firefox/src/ui/locales/fa.js +++ b/src/firefox/src/ui/locales/fa.js @@ -578,8 +578,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "به WebBrain اجازه دهید بدون نیاز به /allow-api در هر گفتگو، از POST، PUT، PATCH و DELETE از طریق fetch_url یا research_url استفاده کند. راهنمای اولویت رابط کاربری و بررسی‌های تأیید همچنان اعمال می‌شوند. به‌طور پیش‌فرض خاموش است.", 'st.display.api_mutation_observer.label': "مشاهده گر جهش API", 'st.display.api_mutation_observer.desc': "نشانی‌های وب و روش‌های درخواستی XHR/واکشی همان تب را مشاهده کنید تا WebBrain بتواند اقدامات مکرر UI را تشخیص دهد و الگوهای میانبر API را پیشنهاد کند. خاموش به طور پیش فرض؛ فقط هنگام بررسی رفتار میانبر یا تأخیر فعال شود.", - 'st.display.openai_ask_streaming.label': "??? ??????? ?? ???? Ask", - 'st.display.openai_ask_streaming.desc': "???????? ??????????? ?? ????? ?????? ?? ???? Ask ????? ????. ???????? ????? ????? ?????? ?????? ????? ???????? ??????? Act? Dev? ?????????????? ???? ? Continue ???? ??? ???? ????????. ?????? ??????? ???? ???.", + 'st.display.openai_ask_streaming.label': "پخش پاسخ‌ها در حالت Ask", + 'st.display.openai_ask_streaming.desc': "متن را هنگام رسیدن در حالت Ask برای ارائه‌دهندگان پشتیبانی‌شده نمایش می‌دهد. جریان‌های قطع‌شده یک اعلان نشان می‌دهند و یک بار بدون پخش، دوباره تلاش می‌کنند؛ خطاهای ارائه‌دهنده/API همچنان نمایش داده می‌شوند. فراخوانی ابزارها منتظر تکمیل جریان می‌مانند؛ اجراهای Act، Dev، زمان‌بندی‌شده، ابری و Continue بدون پخش باقی می‌مانند. به‌صورت پیش‌فرض روشن است.", 'st.display.plan_before_act.label': "قبل از قانون برنامه ریزی کنید", 'st.display.plan_before_act.desc': "حالت‌های Act و Dev همیشه پیش از اجرای ابزارها یک بررسی ساختاریافتهٔ قصد انجام می‌دهند. حالت «تلاش» (پیش‌فرض) برنامه‌های کامل نیز می‌سازد، اما ممکن است برای یک پیگیری کوتاه از برنامهٔ تازه‌تأییدشده استفاده کند؛ حالت «سخت‌گیرانه» در هر نوبت برنامهٔ کامل می‌سازد. «تلاش» یک بار دیگر امتحان می‌کند و اگر قصد یا برنامه همچنان نامعتبر باشد، با یک هشدار در حالت Act ادامه می‌دهد؛ «سخت‌گیرانه» پیش از ابزارها متوقف می‌شود.", 'st.display.plan_before_act.try': "برنامه ریزی را امتحان کنید (پیش فرض)", diff --git a/src/firefox/src/ui/locales/he.js b/src/firefox/src/ui/locales/he.js index a98241109..d9515c0db 100644 --- a/src/firefox/src/ui/locales/he.js +++ b/src/firefox/src/ui/locales/he.js @@ -541,8 +541,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "אפשר ל-WebBrain להשתמש ב-POST, PUT, PATCH ו-DELETE דרך fetch_url או research_url בלי לדרוש /allow-api בכל שיחה. הנחיות להעדפת הממשק ובדיקות אישור עדיין חלות. כבוי כברירת מחדל.", "st.display.api_mutation_observer.label": "מעקב אחר שינויי API", "st.display.api_mutation_observer.desc": "עקוב אחר כתובות URL ושיטות של בקשות XHR/fetch באותה כרטיסייה, כדי ש-WebBrain יוכל לזהות פעולות חוזרות בממשק ולהציע דפוסי קיצור דרך דרך ה-API. כבוי כברירת מחדל; הפעל רק בעת בדיקת קיצורי דרך או זמני תגובה.", - 'st.display.openai_ask_streaming.label': "????? ?????? ???? Ask", - 'st.display.openai_ask_streaming.desc': "??? ?? ?????? ???? ???? ????? ???? Ask. ?????? ????? ??????? ?????? ???? ?? ????; ?????? Act, Dev, ????????, ???? ?-Continue ?????? ??? ?????. ????? ?????? ????.", + 'st.display.openai_ask_streaming.label': "הזרמת תשובות במצב Ask", + 'st.display.openai_ask_streaming.desc': "הצג טקסט בזמן הגעתו במצב Ask עבור ספקים נתמכים. זרמים שהופסקו מציגים הודעה ומנסים שוב פעם אחת ללא הזרמה; שגיאות של ספק/API עדיין מוצגות. קריאות לכלים ממתינות להשלמת הזרם; ריצות Act, Dev, מתוזמנות, ענן ו-Continue נותרות ללא הזרמה. מופעל כברירת מחדל.", "st.display.plan_before_act.label": "תכנן לפני מעשה", 'st.display.plan_before_act.desc': "מצבי Act ו-Dev מבצעים תמיד בדיקת כוונה מובנית לפני הפעלת כלים. מצב ניסיון (ברירת המחדל) גם יוצר תוכניות מלאות, אך עשוי להשתמש שוב בתוכנית שאושרה לאחרונה לצורך המשך קצר; מצב קפדני יוצר תוכנית מלאה בכל תור. מצב ניסיון מנסה שוב פעם אחת, ואם הכוונה או התכנון עדיין אינם תקינים הוא ממשיך במצב Act עם אזהרה; מצב קפדני נעצר לפני הכלים.", "st.display.plan_before_act.try": "נסה לתכנן (ברירת מחדל)", diff --git a/src/firefox/src/ui/locales/hi.js b/src/firefox/src/ui/locales/hi.js index 2374d2bd4..867310e47 100644 --- a/src/firefox/src/ui/locales/hi.js +++ b/src/firefox/src/ui/locales/hi.js @@ -578,8 +578,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "WebBrain को हर बातचीत में /allow-api की आवश्यकता के बिना fetch_url या research_url के माध्यम से POST, PUT, PATCH और DELETE का उपयोग करने दें। UI-प्रथम मार्गदर्शन और पुष्टि जाँचें लागू रहेंगी। डिफ़ॉल्ट रूप से बंद।", 'st.display.api_mutation_observer.label': "एपीआई उत्परिवर्तन पर्यवेक्षक", 'st.display.api_mutation_observer.desc': "समान-टैब XHR/फ़ेच अनुरोध URL और विधियों का निरीक्षण करें ताकि WebBrain बार-बार होने वाली UI क्रियाओं का पता लगा सके और API शॉर्टकट पैटर्न सुझा सके। डिफ़ॉल्ट रूप से बंद; शॉर्टकट व्यवहार या विलंबता की जांच करते समय ही सक्षम करें।", - 'st.display.openai_ask_streaming.label': "Ask ??? ??? ????? ??????? ????", - 'st.display.openai_ask_streaming.desc': "Ask ??? ??? ??????? ?? ????? ??? ?? ??????? ??? ??? ????? ??????? ????? ?? ????????? ???? ???; Act, Dev, ?????????, ?????? ?? Continue ?? ???? ?????????? ?? ???? ???? ???????? ??? ?? ?????", + 'st.display.openai_ask_streaming.label': "Ask मोड में उत्तर स्ट्रीम करें", + 'st.display.openai_ask_streaming.desc': "समर्थित प्रदाताओं के लिए Ask मोड में आते ही टेक्स्ट दिखाएँ। बाधित स्ट्रीम एक सूचना दिखाती हैं और स्ट्रीमिंग के बिना एक बार फिर प्रयास करती हैं; प्रदाता/API त्रुटियाँ अभी भी दिखाई देती हैं। टूल कॉल स्ट्रीम पूरी होने की प्रतीक्षा करते हैं; Act, Dev, निर्धारित, क्लाउड और Continue रन बिना स्ट्रीमिंग के रहते हैं। डिफ़ॉल्ट रूप से चालू।", 'st.display.plan_before_act.label': "अधिनियम से पहले योजना बनाएं", 'st.display.plan_before_act.desc': "Act और Dev मोड टूल चलाने से पहले हमेशा संरचित इरादा जाँचते हैं। प्रयास (डिफ़ॉल्ट) पूरी योजनाएँ भी बनाता है, लेकिन छोटे फ़ॉलो-अप के लिए हाल में स्वीकृत योजना का दोबारा उपयोग कर सकता है; सख़्त मोड हर टर्न में पूरी योजना बनाता है। इरादा या योजना फिर भी अमान्य हो तो प्रयास एक बार दोबारा कोशिश करता है और चेतावनी के साथ Act मोड में आगे बढ़ता है; सख़्त मोड टूल चलाने से पहले रुकता है।", 'st.display.plan_before_act.try': "योजना बनाने का प्रयास करें (डिफ़ॉल्ट)", diff --git a/src/firefox/src/ui/locales/ja.js b/src/firefox/src/ui/locales/ja.js index a4f3534e0..b6c71d7be 100644 --- a/src/firefox/src/ui/locales/ja.js +++ b/src/firefox/src/ui/locales/ja.js @@ -729,8 +729,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "会話ごとに /allow-api を必要とせず、WebBrain が fetch_url または research_url で POST、PUT、PATCH、DELETE を使用できるようにします。UI優先の指針と確認チェックは引き続き適用されます。既定ではオフです。", 'st.display.api_mutation_observer.label': 'API変更オブザーバー', 'st.display.api_mutation_observer.desc': '同じタブの XHR/fetch リクエスト URL とメソッドを監視し、WebBrain が繰り返しの UI アクションを検出して API ショートカットパターンを提案できるようにします。デフォルトではオフ。ショートカット動作やレイテンシの調査中のみ有効にしてください。', - 'st.display.openai_ask_streaming.label': "Ask ???????????", - 'st.display.openai_ask_streaming.desc': "Ask ??????????????????????????????????????????????????Act?Dev?????????????Continue ?????????????????????????????", + 'st.display.openai_ask_streaming.label': "Ask モードの応答をストリーミング", + 'st.display.openai_ask_streaming.desc': "対応プロバイダーの Ask モードで、テキストが届いたら表示します。中断されたストリームは通知を表示し、ストリーミングなしで一度だけ再試行します。プロバイダー/API エラーは引き続き表示されます。ツール呼び出しはストリームの完了まで待機し、Act・Dev・スケジュール・クラウド・Continue の実行はストリーミングされません。デフォルトでオン。", 'st.display.plan_before_act.label': '実行前に計画', 'st.display.plan_before_act.desc': "Act と Dev はツール実行前に必ず構造化された意図確認を行います。試行(デフォルト)は完全な計画も作成しますが、短いフォローアップでは直近に承認された計画を再利用できます。厳格は毎ターン完全な計画を作成します。意図または計画が無効な場合、試行は1回再試行してから警告を表示し、Act モードで続行します。厳格はツール実行前に停止します。", 'st.display.plan_before_act.try': '計画を試す(デフォルト)', diff --git a/src/firefox/src/ui/locales/ko.js b/src/firefox/src/ui/locales/ko.js index e03208068..408c9fb11 100644 --- a/src/firefox/src/ui/locales/ko.js +++ b/src/firefox/src/ui/locales/ko.js @@ -729,8 +729,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "대화마다 /allow-api를 입력하지 않아도 WebBrain이 fetch_url 또는 research_url을 통해 POST, PUT, PATCH, DELETE를 사용하도록 허용합니다. UI 우선 지침과 확인 검사는 계속 적용됩니다. 기본적으로 꺼져 있습니다.", 'st.display.api_mutation_observer.label': 'API 변경 관찰자', 'st.display.api_mutation_observer.desc': '동일한 탭의 XHR/fetch 요청 URL 및 메서드를 관찰하여 WebBrain이 반복되는 UI 작업을 감지하고 API 바로가기 패턴을 제안할 수 있도록 합니다. 기본적으로 꺼져 있습니다. 바로가기 동작이나 지연 시간을 조사할 때만 활성화하세요.', - 'st.display.openai_ask_streaming.label': "Ask ?? ????", - 'st.display.openai_ask_streaming.desc': "Ask ???? ??? ??? ???? ?? ?????. ?? ??? ??? ?? ???? ???? Act, Dev, ??, ???? ? Continue ??? ?????? ????. ????? ?? ????.", + 'st.display.openai_ask_streaming.label': "Ask 모드에서 응답 스트리밍", + 'st.display.openai_ask_streaming.desc': "지원되는 공급자의 경우 Ask 모드에서 텍스트가 도착하면 표시합니다. 중단된 스트림은 알림을 표시하고 스트리밍 없이 한 번 다시 시도하며, 공급자/API 오류는 계속 표시됩니다. 도구 호출은 스트림 완료를 기다리며, Act, Dev, 예약, 클라우드 및 Continue 실행은 스트리밍되지 않습니다. 기본적으로 켜져 있습니다.", 'st.display.plan_before_act.label': '실행 전 계획', 'st.display.plan_before_act.desc': "Act 및 Dev 모드는 도구 실행 전에 항상 구조화된 의도 확인을 수행합니다. 시도(기본값)는 전체 계획도 만들지만 짧은 후속 요청에서는 최근 승인된 계획을 재사용할 수 있습니다. 엄격 모드는 매 턴 전체 계획을 만듭니다. 의도나 계획이 계속 유효하지 않으면 시도 모드는 한 번 더 시도한 뒤 경고를 표시하고 Act 모드로 계속하며, 엄격 모드는 도구 실행 전에 중지합니다.", 'st.display.plan_before_act.try': '계획 시도 (기본값)', diff --git a/src/firefox/src/ui/locales/ru.js b/src/firefox/src/ui/locales/ru.js index fbe8f368e..2712ef973 100644 --- a/src/firefox/src/ui/locales/ru.js +++ b/src/firefox/src/ui/locales/ru.js @@ -729,8 +729,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "Разрешить WebBrain использовать POST, PUT, PATCH и DELETE через fetch_url или research_url без команды /allow-api в каждом разговоре. Правило приоритета интерфейса и проверки подтверждения продолжают действовать. По умолчанию выключено.", 'st.display.api_mutation_observer.label': 'Наблюдатель мутаций API', 'st.display.api_mutation_observer.desc': 'Наблюдайте за URL-адресами и методами запросов XHR/fetch на той же вкладке, чтобы WebBrain мог обнаруживать повторяющиеся действия UI и предлагать шаблоны API-шорткатов. Отключено по умолчанию; включайте только при исследовании поведения шорткатов или задержек.', - 'st.display.openai_ask_streaming.label': "????????? ?????? ? ?????? Ask", - 'st.display.openai_ask_streaming.desc': "?????????? ?????? ?????????? ?? ???? ??????????? ? ?????? Ask. ?????? ???????????? ???? ???????????? ??????? ??????; Act, Dev, ???????????????, ???????? ? Continue-??????? ???????? ??? ????????? ????????. ???????? ?? ?????????.", + 'st.display.openai_ask_streaming.label': "Потоковое отображение ответов в режиме Ask", + 'st.display.openai_ask_streaming.desc': "Показывает текст по мере поступления в режиме Ask для поддерживаемых провайдеров. Прерванные потоки показывают уведомление и один раз повторяются без потоковой передачи; ошибки провайдера/API по-прежнему отображаются. Вызовы инструментов ожидают завершения потока; запуски Act, Dev, по расписанию, в облаке и Continue остаются без потоковой передачи. Включено по умолчанию.", 'st.display.plan_before_act.label': 'Планировать перед действием', 'st.display.plan_before_act.desc': "Режимы Act и Dev всегда выполняют структурированную проверку намерения перед запуском инструментов. Попытка (по умолчанию) также строит полные планы, но для короткого продолжения может повторно использовать недавно одобренный план; Строгий режим строит полный план на каждом ходу. Попытка повторяет запрос один раз и, если намерение или план всё ещё недействительны, продолжает в режиме Act с предупреждением; Строгий режим останавливается до запуска инструментов.", 'st.display.plan_before_act.try': 'Попробовать планирование (по умолчанию)', diff --git a/src/firefox/src/ui/locales/th.js b/src/firefox/src/ui/locales/th.js index 421869401..04252fb3a 100644 --- a/src/firefox/src/ui/locales/th.js +++ b/src/firefox/src/ui/locales/th.js @@ -729,8 +729,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "อนุญาตให้ WebBrain ใช้ POST, PUT, PATCH และ DELETE ผ่าน fetch_url หรือ research_url โดยไม่ต้องใช้ /allow-api ในทุกการสนทนา แนวทางที่ให้ความสำคัญกับ UI และการตรวจสอบการยืนยันยังคงมีผล ปิดไว้โดยค่าเริ่มต้น", 'st.display.api_mutation_observer.label': 'ตัวสังเกตการกลายพันธุ์ของ API', 'st.display.api_mutation_observer.desc': 'สังเกต URL และวิธีการของคำขอ XHR/fetch ในแท็บเดียวกัน เพื่อให้ WebBrain ตรวจจับการกระทำ UI ที่ซ้ำและแนะนำรูปแบบทางลัด API ปิดโดยค่าเริ่มต้น เปิดใช้งานเฉพาะเมื่อตรวจสอบพฤติกรรมทางลัดหรือความหน่วง', - 'st.display.openai_ask_streaming.label': "???????????????? Ask", - 'st.display.openai_ask_streaming.desc': "??????????????????????????????????????????? Ask ??????????????????????????????????????????? ???? Act, Dev, ??????????????? ????????? ??? Continue ????????????? ??????????????????", + 'st.display.openai_ask_streaming.label': "สตรีมการตอบกลับในโหมด Ask", + 'st.display.openai_ask_streaming.desc': "แสดงข้อความทันทีที่ได้รับในโหมด Ask สำหรับผู้ให้บริการที่รองรับ สตรีมที่ถูกขัดจังหวะจะแสดงประกาศแล้วลองใหม่อีกครั้งหนึ่งโดยไม่ใช้การสตรีม และยังคงแสดงข้อผิดพลาดของผู้ให้บริการ/API การเรียกใช้เครื่องมือจะรอให้สตรีมเสร็จสมบูรณ์ ส่วนการรัน Act, Dev, ตามกำหนดเวลา, คลาวด์ และ Continue ไม่ใช้การสตรีม เปิดใช้งานตามค่าเริ่มต้น", 'st.display.plan_before_act.label': 'วางแผนก่อนดำเนินการ', 'st.display.plan_before_act.desc': "โหมด Act และ Dev จะตรวจสอบเจตนาแบบมีโครงสร้างก่อนใช้เครื่องมือเสมอ โหมดลอง (ค่าเริ่มต้น) จะสร้างแผนฉบับเต็มด้วย แต่อาจใช้แผนที่เพิ่งอนุมัติซ้ำสำหรับคำขอต่อเนื่องสั้น ๆ ส่วนโหมดเข้มงวดจะสร้างแผนฉบับเต็มทุกครั้ง หากเจตนาหรือแผนยังไม่ถูกต้อง โหมดลองจะลองอีกหนึ่งครั้งแล้วดำเนินต่อในโหมด Act พร้อมคำเตือน ส่วนโหมดเข้มงวดจะหยุดก่อนใช้เครื่องมือ", 'st.display.plan_before_act.try': 'ลองวางแผน (ค่าเริ่มต้น)', diff --git a/src/firefox/src/ui/locales/uk.js b/src/firefox/src/ui/locales/uk.js index a59508d76..5ce086cf6 100644 --- a/src/firefox/src/ui/locales/uk.js +++ b/src/firefox/src/ui/locales/uk.js @@ -729,8 +729,8 @@ export default { 'st.display.always_allow_api_mutations.desc': "Дозволити WebBrain використовувати POST, PUT, PATCH і DELETE через fetch_url або research_url без команди /allow-api в кожній розмові. Правило пріоритету інтерфейсу та перевірки підтвердження залишаються чинними. Типово вимкнено.", 'st.display.api_mutation_observer.label': 'Спостерігач мутацій API', 'st.display.api_mutation_observer.desc': 'Спостерігайте за URL-адресами та методами запитів XHR/fetch на тій самій вкладці, щоб WebBrain міг виявляти повторювані дії інтерфейсу та пропонувати шаблони API-скорочень. Вимкнено за замовчуванням; вмикайте лише під час дослідження поведінки скорочень або затримки.', - 'st.display.openai_ask_streaming.label': "???????? ????????? ? ?????? Ask", - 'st.display.openai_ask_streaming.desc': "?????????? ????????? ?????????? ? ???? ??????????? ? ?????? Ask. ??????? ???????????? ??????? ?? ??????????? ????? ??????; Act, Dev, ???????????, ?????? ?? Continue-??????? ??????????? ??? ????????? ????????. ????????? ?? ?????????????.", + 'st.display.openai_ask_streaming.label': "Потокове відображення відповідей у режимі Ask", + 'st.display.openai_ask_streaming.desc': "Показує текст у міру надходження в режимі Ask для підтримуваних провайдерів. Перервані потоки показують сповіщення та один раз повторюються без потокової передачі; помилки провайдера/API все одно відображаються. Виклики інструментів чекають на завершення потоку; запуски Act, Dev, за розкладом, у хмарі та Continue залишаються без потокової передачі. Увімкнено за замовчуванням.", 'st.display.plan_before_act.label': 'Планувати перед дією', 'st.display.plan_before_act.desc': "Режими Act і Dev завжди виконують структуровану перевірку наміру перед запуском інструментів. Спроба (типово) також створює повні плани, але для короткого продовження може повторно використати нещодавно схвалений план; Суворий режим створює повний план на кожному кроці. Спроба повторює запит один раз і, якщо намір або план усе ще недійсні, продовжує в режимі Act із попередженням; Суворий режим зупиняється до запуску інструментів.", 'st.display.plan_before_act.try': 'Спробувати планування (за замовчуванням)', diff --git a/test/run.js b/test/run.js index d79dc9717..59b01868f 100644 --- a/test/run.js +++ b/test/run.js @@ -35646,32 +35646,21 @@ test('all locales cover English keys and preserve interpolation placeholders', a `${label}/${filename}: ${key} must preserve interpolation placeholders`, ); } - } - } -}); -test('zh Ask-streaming setting copy is not damaged/mojibake placeholder text', async () => { - // Regression test for the corruption fixed by PR #2949: 'st.display.openai_ask_streaming.label'/'.desc' - // in zh.js had shipped as literal runs of '?' (e.g. "? Ask ????????") instead of translated Chinese text. - // The generic locale-parity test above only checks key presence and {placeholder} token parity, so a - // value that is entirely '?' characters (zero placeholders, same as its English source) passes it - // trivially and would not have caught this. This check is intentionally scoped to zh only — several - // other locales (ar, bn, fa, he, hi, ja, ko, ru, th, uk) have the identical unfixed corruption for this - // same key today and are tracked separately rather than failing this PR's build. - for (const [label, localeDir] of [ - ['chrome', 'src/chrome/src/ui/locales'], - ['firefox', 'src/firefox/src/ui/locales'], - ]) { - const dir = path.join(ROOT, localeDir); - const zh = (await import('file://' + path.join(dir, 'zh.js').replace(/\\/g, '/'))).default; - for (const key of ['st.display.openai_ask_streaming.label', 'st.display.openai_ask_streaming.desc']) { - assert.doesNotMatch( - String(zh[key]), - /\?{4,}/, - `${label}/zh.js: ${key} contains damaged/mojibake placeholder text`, - ); + // Regression guard (generalized from the zh.js-only check added by PR #2949): + // 'st.display.openai_ask_streaming.label'/'.desc' had shipped as literal runs of '?' (e.g. + // "? Ask ????????") in many locales instead of native text. That value contains zero + // interpolation placeholders (matching its English source), so the placeholder-parity + // assertion above passes it trivially; this doesNotMatch catches damaged values directly. + for (const key of ['st.display.openai_ask_streaming.label', 'st.display.openai_ask_streaming.desc']) { + assert.doesNotMatch( + String(dict[key]), + /\?{4,}/, + `${label}/${filename}: ${key} contains damaged/mojibake placeholder text`, + ); + } } - } + } }); test('Apocalypse Mode translation blocks cover every canonical key with matching placeholders in all 22 locales', async () => {