@double_geste/agent-standup 1.24.1 → 1.24.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/index.html +31 -15
- package/public/locales/da.json +189 -0
- package/public/locales/de.json +11 -1
- package/public/locales/en.json +10 -0
- package/public/locales/es.json +11 -1
- package/public/locales/ja.json +11 -1
- package/public/locales/pt-BR.json +11 -1
- package/public/locales/zh-CN.json +11 -1
- package/public/locales/zh-TW.json +11 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@double_geste/agent-standup",
|
|
3
|
-
"version": "1.24.
|
|
3
|
+
"version": "1.24.3",
|
|
4
4
|
"description": "Your Claude Code agents as a live video call, from the terminal: a local page in your browser, plus one-line status for status bars. Free, open source, zero token cost.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agent-standup": "bin/agent-standup.js"
|
package/public/index.html
CHANGED
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
|
|
18
18
|
/* ---------- header ---------- */
|
|
19
19
|
header { height:48px; flex:none; display:flex; align-items:center; gap:10px; padding:0 12px; border-bottom:1px solid var(--line); background:var(--bg) }
|
|
20
|
-
.brand { display:flex; align-items:center; gap:9px; min-width:0 }
|
|
20
|
+
.brand { display:flex; align-items:center; gap:9px; min-width:0; overflow:hidden } .brand .logo { flex:none } .brand > div { min-width:0 } .brand b { overflow:hidden; text-overflow:ellipsis }
|
|
21
|
+
header > * { flex-shrink:0 } header .brand { flex-shrink:100 } header #board { flex-shrink:50 } .tok, .ctxp { flex-shrink:2; min-width:0; overflow:hidden; text-overflow:ellipsis } #pill { flex-shrink:.05; min-width:0; overflow:hidden; text-overflow:ellipsis } /* in a narrow window the buttons (the gear above all) stay whole: the name gives way first, then the counters */
|
|
22
|
+
@media (max-width:480px) { header { gap:6px; padding:0 8px } .ctxp { display:none !important } } @media (max-width:420px) { .tok { display:none !important } }
|
|
21
23
|
.logo { width:26px; height:26px; border-radius:8px; background:#d97757; display:grid; place-items:center; font-size:15px; flex:none }
|
|
22
24
|
.brand b { font:700 14px "Comic Sans MS","Chalkboard SE",system-ui,sans-serif; white-space:nowrap }
|
|
23
25
|
.brand small { display:block; color:var(--dim); font-size:11px; max-width:260px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
|
|
@@ -41,7 +43,7 @@
|
|
|
41
43
|
|
|
42
44
|
/* ---------- layout ---------- */
|
|
43
45
|
main { flex:1; display:flex; min-height:0; position:relative }
|
|
44
|
-
#center { flex:1; display:flex; flex-direction:column; min-width:0; min-height:0; position:relative }
|
|
46
|
+
#center { flex:1; display:flex; flex-direction:column; min-width:0; min-height:0; position:relative; overflow:hidden }
|
|
45
47
|
#stage { flex:1; overflow:auto; padding:14px; display:grid; gap:12px; align-content:start; grid-auto-flow:dense;
|
|
46
48
|
grid-template-columns:repeat(var(--cols,4),1fr); grid-auto-rows:var(--rh,160px) }
|
|
47
49
|
#tree { flex:1; overflow:auto; padding:16px 18px; display:none }
|
|
@@ -66,7 +68,7 @@
|
|
|
66
68
|
.stc { font-size:11.5px; padding:2px 9px; border-radius:99px; background:rgba(14,15,24,.6); white-space:nowrap } .stc.working { color:var(--gold) } .stc.waiting { color:#8fd3ff } .stc.blocked { color:#fff; background:#c0392b; font-weight:700 } .stc.stalled { color:#1b1d27; background:#ffb347; font-weight:700 } .stc.done, .stc.turn { color:var(--ok) } .stc.idle { color:var(--dim) }
|
|
67
69
|
.ctxp { font-size:11px; font-weight:600; padding:3px 9px; border-radius:99px; background:var(--panel2); white-space:nowrap; cursor:default } .ctxp.lo, .cx.lo { color:#7ee2a8 } .ctxp.mid, .cx.mid { color:#ffc857 } .ctxp.hi, .cx.hi { color:#fff; background:#c0392b }
|
|
68
70
|
.cx:empty { display:none } .tag .cx { font-size:10px }
|
|
69
|
-
#hl { display:none; flex-wrap:wrap; gap:6px; padding:5px 12px; border-top:1px solid var(--line); background:var(--panel) } body.replay #hl.has { display:flex } body.board #hl, body.tree #hl { display:none !important }
|
|
71
|
+
#hl { display:none; flex:0 0.01 auto; min-height:30px; max-height:66px; overflow-y:auto; scrollbar-width:thin; flex-wrap:wrap; gap:6px; padding:5px 12px; border-top:1px solid var(--line); background:var(--panel) } body.replay #hl.has { display:flex } body.board #hl, body.tree #hl { display:none !important }
|
|
70
72
|
.hlc { font-size:11.5px; padding:3px 10px; border-radius:99px; background:var(--panel2); border:1px solid var(--line); color:var(--text) } .hlc:hover { border-color:var(--accent) }
|
|
71
73
|
.tbadge .l { color:#ff9f1c } .tbadge span { font-size:11px } .tbadge .q { color:#b4bcd4 }
|
|
72
74
|
.ic:active, .btn:active { transform:scale(.96) } .rr, .ic, .bcard { transition:background .15s var(--ease), border-color .15s var(--ease), transform .15s var(--ease) }
|
|
@@ -84,7 +86,7 @@
|
|
|
84
86
|
.prop.waiting { animation:tick 2.4s ease-in-out infinite } @keyframes tick { 50% { transform:rotate(180deg) } }
|
|
85
87
|
.prop.cheer { animation:cheer 1.1s ease-out both } @keyframes cheer { 0% { transform:scale(.3) translateY(10px); opacity:0 } 40% { transform:scale(1.25); opacity:1 } 100% { transform:translateY(-14px); opacity:0 } }
|
|
86
88
|
/* ---------- screen sharing (presentation mode) ---------- */
|
|
87
|
-
#present { display:none; flex:
|
|
89
|
+
#present { display:none; flex:0 1 auto; min-height:96px; overflow:hidden; position:relative; height:clamp(190px,46vh,430px); background:radial-gradient(ellipse at 50% 0,#1b2033,#0b0d14); border-bottom:1px solid var(--line); padding:12px 16px; justify-content:center }
|
|
88
90
|
#present.on { display:flex; animation:fadein .3s } #present.pic { height:clamp(220px,60vh,640px) }
|
|
89
91
|
.pwin { flex:0 1 900px; display:flex; flex-direction:column; border-radius:10px; overflow:hidden; background:#0d1117; box-shadow:0 18px 50px rgba(0,0,0,.6), 0 0 0 2px rgba(240,160,32,.55) }
|
|
90
92
|
.pbar { display:flex; align-items:center; gap:6px; padding:7px 10px; background:#1c1f2b; font-size:11.5px; color:#9aa0b4 } .pbar i { width:10px; height:10px; border-radius:50%; display:inline-block }
|
|
@@ -97,7 +99,7 @@
|
|
|
97
99
|
.tl.new { animation:lineIn .28s ease-out } @keyframes lineIn { from { opacity:0; transform:translateY(5px) } }
|
|
98
100
|
.cursor { display:inline-block; width:7px; height:14px; background:#c9d1d9; vertical-align:-2px; animation:blinkc 1s steps(1) infinite } @keyframes blinkc { 50% { opacity:0 } }
|
|
99
101
|
#pstat { flex:none; padding:4px 12px; background:#161925; color:#8b95b0; font:11.5px ui-monospace,Menlo,monospace; border-top:1px solid #232637; white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
|
|
100
|
-
#ptodo { flex:0 0 230px; margin-left:12px; align-self:flex-start; max-height:
|
|
102
|
+
#ptodo { flex:0 0 230px; margin-left:12px; align-self:flex-start; position:relative; max-height:100%; overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin; background:rgba(20,22,32,.92); border:1px solid #2a2d3d; border-radius:10px; padding:8px 10px; font-size:12px }
|
|
101
103
|
#ptodo h5 { margin:0 0 6px; font-size:10.5px; letter-spacing:.08em; text-transform:uppercase; color:var(--dim) } .td { display:flex; gap:7px; padding:2px 0; color:#c3c6d4 } .td i { font-style:normal; flex:none } .td.completed { color:#6b7089; text-decoration:line-through } .td.completed i { color:var(--ok) } .td.in_progress { color:#fff } .td.in_progress i { color:var(--gold) }
|
|
102
104
|
.tl.out { color:#aab2c5 } .tl.err { color:#ff7b72 } .tl.dim { color:#6b7089 } .tl.run { color:#ffd24a } .tl.cmd { margin-top:5px }
|
|
103
105
|
.ln.ctx b { width:34px; text-align:right; color:#4b5069 } .ln.ctx { color:#d3d7e6 } .ln.err { color:#ff7b72 } .ln.dim { color:#6b7089 } .ln.run { color:#ffd24a }
|
|
@@ -108,6 +110,7 @@
|
|
|
108
110
|
#present.has-todo #pcam { right:270px } #pcam { position:absolute; right:28px; bottom:22px; width:158px; height:118px; z-index:2; cursor:default; box-shadow:0 8px 24px rgba(0,0,0,.6) }
|
|
109
111
|
#pcap { display:none; position:absolute; left:24px; right:200px; bottom:20px; z-index:2; background:rgba(10,11,16,.84); backdrop-filter:blur(6px); border-radius:10px; padding:6px 12px; font-size:13px } #pcap:not(:empty) { display:block }
|
|
110
112
|
body.narrow #present { height:clamp(150px,36vh,260px) } body.narrow #pcam { width:110px; height:82px } body.narrow #pcap { right:150px }
|
|
113
|
+
body.narrow #ptodo { display:none } body.narrow #present.has-todo #pcam { right:28px } /* too narrow for a terminal and a task list side by side: the terminal keeps the room */
|
|
111
114
|
#gantt { display:none; flex:none; width:100%; background:#0f1118; border-top:1px solid var(--line); cursor:pointer }
|
|
112
115
|
body.replay #gantt { display:block }
|
|
113
116
|
aside { display:none; width:320px; flex:none; border-left:1px solid var(--line); background:var(--panel); flex-direction:column; min-height:0 }
|
|
@@ -122,7 +125,7 @@
|
|
|
122
125
|
body.replay footer { display:flex }
|
|
123
126
|
input[type=range] { accent-color:var(--accent) } #seek { flex:1 }
|
|
124
127
|
@media (max-width:760px) { aside { position:absolute; right:0; top:0; bottom:0; z-index:6; box-shadow:-10px 0 30px rgba(0,0,0,.5) } .brand small, #viewSeg { display:none } }
|
|
125
|
-
@media (max-width:
|
|
128
|
+
@media (max-width:540px) { .brand b { display:none } }
|
|
126
129
|
@media (max-width:360px) { .logo { display:none } }
|
|
127
130
|
@media (max-height:640px) { #gantt { display:none !important } }
|
|
128
131
|
|
|
@@ -142,10 +145,11 @@
|
|
|
142
145
|
.status.working { color:var(--gold) } .status.done { color:var(--ok) }
|
|
143
146
|
.status.waiting { color:#8fd3ff } .status.blocked { color:#fff; background:#c0392b; font-weight:700 } .status.stalled { color:#1b1d27; background:#ffb347; font-weight:700 }
|
|
144
147
|
.tile.waiting { border-color:rgba(110,190,255,.85) } .tile.blocked { border-color:#ff5252 !important; animation:slowp 1.2s ease-in-out infinite } .tile.stalled { border-color:#ffb347 !important }
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
@media (max-width:
|
|
148
|
+
/* the header's status chips are styled by id: "board" is also the class the Sessions view puts on <body>, and a rule on .board used to hide the whole page in a narrow window */
|
|
149
|
+
#board { display:flex; gap:6px; font-size:11.5px; flex-wrap:nowrap; min-width:0; overflow:hidden } #board em { font-style:normal } #board span { flex:none; padding:2px 8px; border-radius:99px; background:var(--panel2); border:1px solid var(--line); white-space:nowrap }
|
|
150
|
+
#board .working { color:var(--gold) } #board .waiting { color:#8fd3ff } #board .blocked { color:#fff; background:#c0392b; border-color:#c0392b } #board .stalled { color:#1b1d27; background:#ffb347; border-color:#ffb347 } #board .done { color:var(--ok) }
|
|
151
|
+
@media (max-width:1180px) { #board em { display:none } .meet { display:none } }
|
|
152
|
+
@media (max-width:640px) { #board { display:none } }
|
|
149
153
|
.bubble { display:none; position:absolute; top:6px; left:6px; right:62px; background:#fff; color:#1b1d27; border-radius:11px; padding:6px 10px; font-size:12.5px; line-height:1.35; box-shadow:0 4px 14px rgba(0,0,0,.35); max-height:58%; overflow:hidden }
|
|
150
154
|
.tile.bye .bubble { display:block; font-size:13.5px; animation:fadein .25s } .tile.speaking .bubble { display:block; font-size:14.5px; max-height:50% } .bubble small { display:block; color:#6a6f85; font-size:10.5px }
|
|
151
155
|
.ticker { display:none; position:absolute; left:6px; right:6px; bottom:30px; font:10.5px/1.3 ui-monospace,Menlo,monospace; color:#fff; background:rgba(15,20,35,.8); border-radius:5px; padding:2px 7px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
|
|
@@ -221,7 +225,7 @@
|
|
|
221
225
|
<body>
|
|
222
226
|
<header>
|
|
223
227
|
<div class="brand"><div class="logo">🎥</div><div><b>Agent Standup</b><small id="subtitle"></small></div></div>
|
|
224
|
-
<span id="pill">REPLAY</span><button id="tok" class="tok" style="display:none"></button><button id="ctxp" class="ctxp" style="display:none"></button><span id="board"
|
|
228
|
+
<span id="pill">REPLAY</span><button id="tok" class="tok" style="display:none"></button><button id="ctxp" class="ctxp" style="display:none"></button><span id="board" aria-live="polite"></span><span id="meet" class="meet"></span>
|
|
225
229
|
<div class="sp"></div>
|
|
226
230
|
<div class="seg" id="viewSeg"><button data-v="call" class="on" data-fr="Appel" data-en="Call">Appel</button><button data-v="tree" data-fr="Arbre" data-en="Tree">Arbre</button><button data-v="board" data-fr="Sessions" data-en="Sessions">Sessions</button></div>
|
|
227
231
|
<button class="ic" id="bPlay" title="Pause / Lecture (espace)">⏸</button>
|
|
@@ -257,6 +261,7 @@
|
|
|
257
261
|
<div class="box"><div id="charInfo" class="dim" style="font-size:11.5px;line-height:1.5"></div><div style="display:flex;gap:6px;margin-top:6px"><button class="btn" id="charReload" data-fr="Recharger" data-en="Reload">Recharger</button><button class="btn" id="charOpen" style="display:none" data-fr="Ouvrir le dossier" data-en="Open folder">Ouvrir le dossier</button></div></div>
|
|
258
262
|
<h4 data-fr="Outils" data-en="Tools">Outils</h4>
|
|
259
263
|
<button class="mi" id="mCoffee" style="display:none"><span id="mCoffeeT"></span></button>
|
|
264
|
+
<button class="mi" id="mKeys"><span data-fr="⌨ Raccourcis clavier (?)" data-en="⌨ Keyboard shortcuts (?)">⌨ Raccourcis clavier (?)</span></button>
|
|
260
265
|
<button class="mi" id="mRecap"><span data-fr="📋 Récapitulatif" data-en="📋 Recap">📋 Récapitulatif</span></button>
|
|
261
266
|
<button class="mi" id="mExport"><span data-fr="🎞 Exporter la vidéo" data-en="🎞 Export video">🎞 Exporter la vidéo</span></button>
|
|
262
267
|
<button class="mi" id="mClip"><span data-fr="🎬 Clip à partager (25 s)" data-en="🎬 Clip to share (25 s)">🎬 Clip à partager (25 s)</span></button>
|
|
@@ -310,7 +315,7 @@ let prefsTimer = null;
|
|
|
310
315
|
const savePrefs = () => { prefs._t = Date.now(); try { localStorage.setItem('cc.prefs', JSON.stringify(prefs)); } catch {} clearTimeout(prefsTimer); prefsTimer = setTimeout(() => { fetch('/api/prefs', { method: 'PUT', headers: { 'content-type': 'application/json' }, body: JSON.stringify(prefs) }).catch(() => {}); }, 400); };
|
|
311
316
|
// Languages: French and English live in the code as pairs L(french, english); every other language is a catalogue public/locales/<code>.json mapping the English text to its translation.
|
|
312
317
|
// A missing string falls back to English, so a half-translated language still works. See public/locales/README.md to add one.
|
|
313
|
-
const LANGS = [['en', 'English', 'en'], ['fr', 'Français', 'fr'], ['zh-TW', '繁體中文', 'zh-Hant-TW'], ['zh-CN', '简体中文', 'zh-Hans-CN'], ['es', 'Español', 'es'], ['de', 'Deutsch', 'de'], ['pt-BR', 'Português (Brasil)', 'pt-BR'], ['ja', '日本語', 'ja']];
|
|
318
|
+
const LANGS = [['en', 'English', 'en'], ['fr', 'Français', 'fr'], ['zh-TW', '繁體中文', 'zh-Hant-TW'], ['zh-CN', '简体中文', 'zh-Hans-CN'], ['es', 'Español', 'es'], ['de', 'Deutsch', 'de'], ['da', 'Dansk', 'da'], ['pt-BR', 'Português (Brasil)', 'pt-BR'], ['ja', '日本語', 'ja']];
|
|
314
319
|
let LOC = {};
|
|
315
320
|
const FR = () => prefs.lang === 'fr';
|
|
316
321
|
const tr = (en) => (prefs.lang === 'en' || prefs.lang === 'fr' ? en : LOC[en] || en);
|
|
@@ -1116,8 +1121,12 @@ function renderPresent() {
|
|
|
1116
1121
|
if (shown) { if (pb.dataset.img !== shown) pb.innerHTML = m.imgs.map((u) => `<img src="${esc(u)}" alt="">`).join('') + (m.more > 0 ? `<span class="pmore">+${m.more}</span>` : ''); } // the same pictures are left in place: redrawing them would make them blink
|
|
1117
1122
|
else pb.innerHTML = (m.view === 'editor' ? `<div class="ptab"><span>${esc(m.tab.file)}</span><em>${esc(m.tab.path)}</em></div>` : '') + m.lines.map((l) => lineHtml(l, m.view)).join('') + (m.view === 'term' ? '<div class="tl"><span class="ps">❯</span> <span class="cursor"></span></div>' : '');
|
|
1118
1123
|
pb.dataset.img = shown; pb.scrollTop = m.view === 'term' ? pb.scrollHeight : 0; $('#pstat').textContent = m.stat;
|
|
1119
|
-
const td = S.todos[id], el = $('#ptodo')
|
|
1120
|
-
if (
|
|
1124
|
+
const td = S.todos[id], el = $('#ptodo'), tk = td && td.length ? prefs.lang + '\n' + td.map((x) => x.s + ' ' + x.c).join('\n') : ''; el.style.display = tk ? '' : 'none'; $('#present').classList.toggle('has-todo', !!tk);
|
|
1125
|
+
if (tk && el.dataset.k !== tk) { // redrawn only when it changes, so it stays where you scrolled it; the task in progress is brought into view
|
|
1126
|
+
el.innerHTML = `<h5>${L('Tâches', 'Tasks')} · ${td.filter((x) => x.s === 'completed').length}/${td.length}</h5>` + td.map((x) => `<div class="td ${x.s}"><i>${x.s === 'completed' ? '☑' : x.s === 'in_progress' ? '◐' : '☐'}</i>${esc(x.c)}</div>`).join('');
|
|
1127
|
+
const cur = el.querySelector('.in_progress'); el.scrollTop = cur ? Math.max(0, cur.offsetTop - el.clientHeight / 2) : 0;
|
|
1128
|
+
}
|
|
1129
|
+
el.dataset.k = tk;
|
|
1121
1130
|
$('#pbadge').textContent = `🖥 ${p.name} ${L('partage son écran', 'is sharing their screen')}`;
|
|
1122
1131
|
if (S.camFor !== id) { $('#pcam').innerHTML = avatarSVG(p, undefined, 'c' + p.gid + '_') + `<div class="tag"><b>${esc(p.name)}</b></div>`; S.camFor = id; }
|
|
1123
1132
|
$('#pcam').classList.toggle('speaking', S.speakers.has(id));
|
|
@@ -1790,9 +1799,16 @@ $('#gB').onclick = () => {
|
|
|
1790
1799
|
if (synth && !EMBED) { try { synth.speak(new SpeechSynthesisUtterance('')); } catch {} } // unlock browser speech
|
|
1791
1800
|
if (S.live && S.events.length) run(S.idx);
|
|
1792
1801
|
};
|
|
1802
|
+
function openKeys() {
|
|
1803
|
+
const rows = [['Space', L('Pause / lecture', 'Pause / play')], ['M', L('Son coupé / activé', 'Mute / unmute')], ['T', L('Vue arbre ↔ appel', 'Tree view ↔ call')], ['R', L('Récapitulatif', 'Recap')], ['L', L('Transcription', 'Transcript')], ['?', L('Cette aide', 'This help')], ['Esc', L('Fermer', 'Close')]];
|
|
1804
|
+
$('#recap .box').innerHTML = `<h1>${L('Raccourcis clavier', 'Keyboard shortcuts')}</h1><table>${rows.map(([k, d]) => `<tr><td class="f"><b>${esc(k)}</b></td><td>${esc(d)}</td></tr>`).join('')}</table><p class="dim" style="margin:14px 0 0;font-size:12px">${L('Les vues Appel, Arbre et Sessions se changent aussi en haut de la fenêtre.', 'You can also switch between Call, Tree and Sessions at the top of the window.')}</p><div style="margin-top:14px"><button class="btn" id="recapx">${L('Fermer', 'Close')}</button></div>`;
|
|
1805
|
+
$('#recapx').onclick = () => $('#recap').classList.remove('on'); $('#recap').classList.add('on');
|
|
1806
|
+
}
|
|
1807
|
+
$('#mKeys').onclick = () => { $('#menu').classList.remove('on'); openKeys(); };
|
|
1793
1808
|
addEventListener('keydown', (e) => {
|
|
1794
1809
|
if (/INPUT|SELECT|TEXTAREA/.test(e.target.tagName)) return;
|
|
1795
|
-
if (e.key === '
|
|
1810
|
+
if (e.key === '?') { openKeys(); return; }
|
|
1811
|
+
if (e.key === ' ') { e.preventDefault(); togglePlay(); } else if (e.key.toLowerCase() === 'm') toggleMute(); else if (e.key.toLowerCase() === 't') { const toTree = !document.body.classList.contains('tree'); setView(toTree ? 'tree' : 'call'); if (toTree) toast(L('Vue arbre : T pour revenir, ? pour l’aide', 'Tree view: T to go back, ? for help')); } else if (e.key.toLowerCase() === 'r') openRecap(); else if (e.key.toLowerCase() === 'l') $('#bLog').click(); else if (e.key === 'Escape') { $('#recap').classList.remove('on'); $('#menu').classList.remove('on'); }
|
|
1796
1812
|
});
|
|
1797
1813
|
if (EMBED) $('#mBrowser').style.display = '';
|
|
1798
1814
|
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"language": "da",
|
|
4
|
+
"reviewed": false
|
|
5
|
+
},
|
|
6
|
+
" full — compaction soon": " fuld — komprimering nærmer sig",
|
|
7
|
+
"”": "”",
|
|
8
|
+
"↗ Open in browser": "↗ Åbn i browser",
|
|
9
|
+
"⌨ Keyboard shortcuts (?)": "⌨ Tastaturgenveje (?)",
|
|
10
|
+
"▶ Join": "▶ Deltag",
|
|
11
|
+
"▶ Watch the demo": "▶ Se demoen",
|
|
12
|
+
"☕ Buy the (replaced) dev a coffee": "☕ Køb en kop kaffe til den (erstattede) udvikler",
|
|
13
|
+
"☕ This dev was replaced by his agents — buy him a coffee": "☕ Denne udvikler blev erstattet af sine agenter — køb en kop kaffe til ham",
|
|
14
|
+
"🎞 Export video": "🎞 Eksportér video",
|
|
15
|
+
"🎬 Clip to share (25 s)": "🎬 Klip til deling (25 s)",
|
|
16
|
+
"📋 Recap": "📋 Resumé",
|
|
17
|
+
"Agent voices": "Agentstemmer",
|
|
18
|
+
"Agents": "Agenter",
|
|
19
|
+
"Agents list (left)": "Agentliste (til venstre)",
|
|
20
|
+
"All projects (most recent)": "Alle projekter (nyeste)",
|
|
21
|
+
"Ambience volume": "Lydstyrke for stemning",
|
|
22
|
+
"An agent may be waiting for you ✋": "En agent venter måske på dig ✋",
|
|
23
|
+
"Animal Crossing (babble)": "Animal Crossing (pludren)",
|
|
24
|
+
"Asking a question": "Stiller et spørgsmål",
|
|
25
|
+
"brief": "brief",
|
|
26
|
+
"Busiest agents": "Travleste agenter",
|
|
27
|
+
"Buy a coffee": "Køb en kop kaffe",
|
|
28
|
+
"cache read": "cache-læsning",
|
|
29
|
+
"cache write": "cache-skrivning",
|
|
30
|
+
"Call": "Opkald",
|
|
31
|
+
"Cartoon voices (real voice)": "Tegnefilmsstemmer (rigtig stemme)",
|
|
32
|
+
"Characters": "Figurer",
|
|
33
|
+
"Claude Code is not logged in: run “claude” once in a terminal to sign in.": "Claude Code er ikke logget ind: kør “claude” én gang i en terminal for at logge ind.",
|
|
34
|
+
"Claude Code not found: install it (npm i -g @anthropic-ai/claude-code) or set its path in the “agentStandup.claudePath” setting.": "Claude Code blev ikke fundet: installér det (npm i -g @anthropic-ai/claude-code) eller angiv stien i indstillingen “agentStandup.claudePath”.",
|
|
35
|
+
"Click to enable sound and follow your Claude Code session live.": "Klik for at aktivere lyd og følge din Claude Code-session live.",
|
|
36
|
+
"Close": "Luk",
|
|
37
|
+
"commands": "kommandoer",
|
|
38
|
+
"compaction": "komprimering",
|
|
39
|
+
"Context": "Kontekst",
|
|
40
|
+
"context ": "kontekst ",
|
|
41
|
+
"context compacted 🗜": "kontekst komprimeret 🗜",
|
|
42
|
+
"Copied": "Kopieret",
|
|
43
|
+
"Copy as Markdown": "Kopiér som Markdown",
|
|
44
|
+
"Copy failed": "Kopiering mislykkedes",
|
|
45
|
+
"custom character(s) loaded": "egne figurer indlæst",
|
|
46
|
+
"Demo — a team fixes a slow login": "Demo — et team retter et langsomt login",
|
|
47
|
+
"done": "færdig",
|
|
48
|
+
"Done": "Færdig",
|
|
49
|
+
"Done. ": "Færdig. ",
|
|
50
|
+
"Downloading, you can carry on: system voices are used meanwhile.": "Henter, du kan fortsætte: imens bruges systemstemmerne.",
|
|
51
|
+
"Drop your pixel art (PNG) in this folder to replace the characters:": "Læg dit pixelart (PNG) i denne mappe for at erstatte figurerne:",
|
|
52
|
+
"duration": "varighed",
|
|
53
|
+
"Editing ": "Redigerer ",
|
|
54
|
+
"Editor": "Editor",
|
|
55
|
+
"EPISODE 1": "AFSNIT 1",
|
|
56
|
+
"Episode recap": "Afsnitsresumé",
|
|
57
|
+
"errors": "fejl",
|
|
58
|
+
"failing in a loop?": "fejler i ring?",
|
|
59
|
+
"Fetching ": "Henter ",
|
|
60
|
+
"files": "filer",
|
|
61
|
+
"Files": "Filer",
|
|
62
|
+
"files changed": "filer ændret",
|
|
63
|
+
"Files touched": "Berørte filer",
|
|
64
|
+
"Final report": "Slutrapport",
|
|
65
|
+
"first error": "første fejl",
|
|
66
|
+
"Good-quality local voices, mostly English (one French voice). Free, nothing leaves your machine.": "Lokale stemmer af god kvalitet, mest engelske (kun én fransk stemme). Gratis, intet forlader din computer.",
|
|
67
|
+
"Hide code & file names in videos": "Skjul kode og filnavne i videoer",
|
|
68
|
+
"Highlights": "Højdepunkter",
|
|
69
|
+
"Human": "Menneske",
|
|
70
|
+
"idle": "inaktiv",
|
|
71
|
+
"input": "input",
|
|
72
|
+
"Installing…": "Installerer…",
|
|
73
|
+
"is sharing their screen": "deler sin skærm",
|
|
74
|
+
"Join the call": "Deltag i opkaldet",
|
|
75
|
+
"Keyboard shortcuts": "Tastaturgenveje",
|
|
76
|
+
"Language": "Sprog",
|
|
77
|
+
"Lead": "Leder",
|
|
78
|
+
"Lead context": "Lederens kontekst",
|
|
79
|
+
"lead.png = the lead · you.png = you · others = the sub-agents · name-talk.png = open mouth": "lead.png = lederen · you.png = dig · øvrige = underagenterne · navn-talk.png = åben mund",
|
|
80
|
+
"left the call": "forlod opkaldet",
|
|
81
|
+
"lines": "linjer",
|
|
82
|
+
"Listing ": "Viser ",
|
|
83
|
+
"Little lines & animations": "Små replikker og animationer",
|
|
84
|
+
"Loading the model (downloaded on first use, about 305 MB)…": "Indlæser modellen (hentes ved første brug, ca. 305 MB)…",
|
|
85
|
+
"longest wait ": "længste ventetid ",
|
|
86
|
+
"Looking for a tool": "Leder efter et værktøj",
|
|
87
|
+
"looping?": "går i ring?",
|
|
88
|
+
"Music volume": "Lydstyrke for musik",
|
|
89
|
+
"Mute / unmute": "Slå lyd fra / til",
|
|
90
|
+
"Natural voices": "Naturlige stemmer",
|
|
91
|
+
"need you": "har brug for dig",
|
|
92
|
+
"needs you?": "har brug for dig?",
|
|
93
|
+
"needs you? ": "har brug for dig? ",
|
|
94
|
+
"No agents were harmed.": "Ingen agenter kom til skade.",
|
|
95
|
+
"No edits.": "Ingen ændringer.",
|
|
96
|
+
"No French voice installed (Windows: Settings › Time & language › Speech).": "Ingen fransk stemme installeret (Windows: Indstillinger › Tid og sprog › Tale).",
|
|
97
|
+
"No recent session": "Ingen nylig session",
|
|
98
|
+
"No system voice found: agents will mumble.": "Ingen systemstemme fundet: agenterne vil mumle.",
|
|
99
|
+
"Notify me when agents finish": "Giv mig besked, når agenterne er færdige",
|
|
100
|
+
"npm not found: install Node.js to enable this option.": "npm blev ikke fundet: installér Node.js for at aktivere denne mulighed.",
|
|
101
|
+
"Office ambience (keys, coffee…)": "Kontorstemning (tastatur, kaffe…)",
|
|
102
|
+
"Office music (FIP radio)": "Kontormusik (FIP Radio)",
|
|
103
|
+
"OFFLINE": "OFFLINE",
|
|
104
|
+
"Open folder": "Åbn mappe",
|
|
105
|
+
"Opening file…": "Åbner fil…",
|
|
106
|
+
"output": "output",
|
|
107
|
+
"Pause / play": "Pause / afspil",
|
|
108
|
+
"Pause / Play (space)": "Pause / afspil (mellemrum)",
|
|
109
|
+
"PAUSED": "PAUSET",
|
|
110
|
+
"Project to follow": "Projekt der skal følges",
|
|
111
|
+
"Prompt from": "Prompt fra",
|
|
112
|
+
"Radio unreachable: check your connection or pick another station.": "Radioen kan ikke nås: tjek din forbindelse eller vælg en anden station.",
|
|
113
|
+
"Reactions": "Reaktioner",
|
|
114
|
+
"Reactions & jokes": "Reaktioner og jokes",
|
|
115
|
+
"Reactions bar (👍 👏 ☕)": "Reaktionslinje (👍 👏 ☕)",
|
|
116
|
+
"read-only": "skrivebeskyttet",
|
|
117
|
+
"Reading ": "Læser ",
|
|
118
|
+
"READY": "KLAR",
|
|
119
|
+
"Recap": "Resumé",
|
|
120
|
+
"Recent activity": "Seneste aktivitet",
|
|
121
|
+
"Reload": "Genindlæs",
|
|
122
|
+
"Remove finished agents (2 min)": "Fjern færdige agenter (2 min)",
|
|
123
|
+
"Repeated failures": "Gentagne fejl",
|
|
124
|
+
"report": "rapport",
|
|
125
|
+
"report to": "rapport til",
|
|
126
|
+
"Role": "Rolle",
|
|
127
|
+
"running": "kører",
|
|
128
|
+
"Running ": "Kører ",
|
|
129
|
+
"running…": "kører…",
|
|
130
|
+
"Said": "Sagde",
|
|
131
|
+
"Same call repeated": "Samme kald gentaget",
|
|
132
|
+
"Search the transcript": "Søg i transskriptionen",
|
|
133
|
+
"Search…": "Søg…",
|
|
134
|
+
"Searching “": "Søger efter “",
|
|
135
|
+
"session": "session",
|
|
136
|
+
"Sessions": "Sessioner",
|
|
137
|
+
"Settings": "Indstillinger",
|
|
138
|
+
"Simlish (babble)": "Simlish (pludren)",
|
|
139
|
+
"Sound": "Lyd",
|
|
140
|
+
"Sound (M key)": "Lyd (tasten M)",
|
|
141
|
+
"Sound is playing in another Agent Standup window. Click 🔈 to take it over here.": "Lyden afspilles i et andet Agent Standup-vindue. Klik på 🔈 for at overtage den her.",
|
|
142
|
+
"Sound is playing in another window — click to take it over here": "Lyden afspilles i et andet vindue — klik for at overtage den her",
|
|
143
|
+
"Source": "Kilde",
|
|
144
|
+
"Speed": "Hastighed",
|
|
145
|
+
"stalled": "gået i stå",
|
|
146
|
+
"stalled · ": "gået i stå · ",
|
|
147
|
+
"standing by": "på standby",
|
|
148
|
+
"Start Claude Code in this folder — the call will start by itself.": "Start Claude Code i denne mappe — opkaldet starter af sig selv.",
|
|
149
|
+
"sub-agents active": "underagenter aktive",
|
|
150
|
+
"task": "opgave",
|
|
151
|
+
"Tasks": "Opgaver",
|
|
152
|
+
"THE END": "SLUT",
|
|
153
|
+
"The engine stopped: system voices are used instead.": "Motoren stoppede: systemstemmerne bruges i stedet.",
|
|
154
|
+
"This dev was replaced by his own agents. Spare a coffee for his career change? ☕": "Denne udvikler blev erstattet af sine egne agenter. Har du en kop kaffe til hans karriereskift? ☕",
|
|
155
|
+
"This help": "Denne hjælp",
|
|
156
|
+
"Time": "Tid",
|
|
157
|
+
"to": "til",
|
|
158
|
+
"tokens": "tokens",
|
|
159
|
+
"Tokens": "Tokens",
|
|
160
|
+
"Tokens recorded by Claude Code (counted once per message, not a bill)": "Tokens registreret af Claude Code (talt én gang pr. besked, ikke en regning)",
|
|
161
|
+
"tool calls": "værktøjskald",
|
|
162
|
+
"tool errors": "værktøjsfejl",
|
|
163
|
+
"tools": "værktøjer",
|
|
164
|
+
"Tools": "Værktøjer",
|
|
165
|
+
"Transcript": "Transskription",
|
|
166
|
+
"Translation unavailable right now: check that “claude” works in a terminal.": "Oversættelse er ikke tilgængelig lige nu: tjek at “claude” virker i en terminal.",
|
|
167
|
+
"Tree": "Træ",
|
|
168
|
+
"Tree view ↔ call": "Trævisning ↔ opkald",
|
|
169
|
+
"Tree view: T to go back, ? for help": "Trævisning: T for at gå tilbage, ? for hjælp",
|
|
170
|
+
"Untitled session": "Unavngivet session",
|
|
171
|
+
"Updating todo list": "Opdaterer opgavelisten",
|
|
172
|
+
"Using skill ": "Bruger skill ",
|
|
173
|
+
"Very natural voices (installs on demand)": "Meget naturlige stemmer (installeres efter behov)",
|
|
174
|
+
"Voices ready.": "Stemmer klar.",
|
|
175
|
+
"VS Code was started from inside a Claude Code session: restart VS Code normally (Dock, Spotlight) to enable translation.": "VS Code blev startet inde fra en Claude Code-session: genstart VS Code på normal vis (Dock, Spotlight) for at aktivere oversættelse.",
|
|
176
|
+
"waiting": "venter",
|
|
177
|
+
"WAITING": "VENTER",
|
|
178
|
+
"Waiting for a session": "Venter på en session",
|
|
179
|
+
"waiting on ": "venter på ",
|
|
180
|
+
"waiting on sub-agents": "venter på underagenter",
|
|
181
|
+
"Web search": "Websøgning",
|
|
182
|
+
"working": "arbejder",
|
|
183
|
+
"Writing ": "Skriver ",
|
|
184
|
+
"You": "Dig",
|
|
185
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "Du kan også skifte mellem Opkald, Træ og Sessioner øverst i vinduet.",
|
|
186
|
+
"Your agents are done 🎉": "Dine agenter er færdige 🎉",
|
|
187
|
+
"Your Claude Code agents as a live team call": "Dine Claude Code-agenter som et levende teammøde",
|
|
188
|
+
"your turn": "din tur"
|
|
189
|
+
}
|
package/public/locales/de.json
CHANGED
|
@@ -176,5 +176,15 @@
|
|
|
176
176
|
"npm not found: install Node.js to enable this option.": "npm nicht gefunden: Installiere Node.js, um diese Option zu nutzen.",
|
|
177
177
|
"The engine stopped: system voices are used instead.": "Die Engine wurde beendet: stattdessen kommen die Systemstimmen zum Einsatz.",
|
|
178
178
|
"Very natural voices (installs on demand)": "Sehr natürliche Stimmen (werden bei Bedarf installiert)",
|
|
179
|
-
"Voices ready.": "Stimmen bereit."
|
|
179
|
+
"Voices ready.": "Stimmen bereit.",
|
|
180
|
+
"⌨ Keyboard shortcuts (?)": "⌨ Tastenkürzel (?)",
|
|
181
|
+
"Keyboard shortcuts": "Tastenkürzel",
|
|
182
|
+
"Mute / unmute": "Ton aus / an",
|
|
183
|
+
"Pause / play": "Pause / Wiedergabe",
|
|
184
|
+
"Recap": "Zusammenfassung",
|
|
185
|
+
"This help": "Diese Hilfe",
|
|
186
|
+
"Transcript": "Transkript",
|
|
187
|
+
"Tree view ↔ call": "Baumansicht ↔ Anruf",
|
|
188
|
+
"Tree view: T to go back, ? for help": "Baumansicht: T zum Zurückkehren, ? für Hilfe",
|
|
189
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "Du kannst oben im Fenster auch zwischen Anruf, Baum und Sitzungen wechseln."
|
|
180
190
|
}
|
package/public/locales/en.json
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
" full — compaction soon": " full — compaction soon",
|
|
3
3
|
"”": "”",
|
|
4
4
|
"↗ Open in browser": "↗ Open in browser",
|
|
5
|
+
"⌨ Keyboard shortcuts (?)": "⌨ Keyboard shortcuts (?)",
|
|
5
6
|
"▶ Join": "▶ Join",
|
|
6
7
|
"▶ Watch the demo": "▶ Watch the demo",
|
|
7
8
|
"☕ Buy the (replaced) dev a coffee": "☕ Buy the (replaced) dev a coffee",
|
|
@@ -67,6 +68,7 @@
|
|
|
67
68
|
"Installing…": "Installing…",
|
|
68
69
|
"is sharing their screen": "is sharing their screen",
|
|
69
70
|
"Join the call": "Join the call",
|
|
71
|
+
"Keyboard shortcuts": "Keyboard shortcuts",
|
|
70
72
|
"Language": "Language",
|
|
71
73
|
"Lead": "Lead",
|
|
72
74
|
"Lead context": "Lead context",
|
|
@@ -80,6 +82,7 @@
|
|
|
80
82
|
"Looking for a tool": "Looking for a tool",
|
|
81
83
|
"looping?": "looping?",
|
|
82
84
|
"Music volume": "Music volume",
|
|
85
|
+
"Mute / unmute": "Mute / unmute",
|
|
83
86
|
"Natural voices": "Natural voices",
|
|
84
87
|
"need you": "need you",
|
|
85
88
|
"needs you?": "needs you?",
|
|
@@ -97,6 +100,7 @@
|
|
|
97
100
|
"Open folder": "Open folder",
|
|
98
101
|
"Opening file…": "Opening file…",
|
|
99
102
|
"output": "output",
|
|
103
|
+
"Pause / play": "Pause / play",
|
|
100
104
|
"Pause / Play (space)": "Pause / Play (space)",
|
|
101
105
|
"PAUSED": "PAUSED",
|
|
102
106
|
"Project to follow": "Project to follow",
|
|
@@ -108,6 +112,7 @@
|
|
|
108
112
|
"read-only": "read-only",
|
|
109
113
|
"Reading ": "Reading ",
|
|
110
114
|
"READY": "READY",
|
|
115
|
+
"Recap": "Recap",
|
|
111
116
|
"Recent activity": "Recent activity",
|
|
112
117
|
"Reload": "Reload",
|
|
113
118
|
"Remove finished agents (2 min)": "Remove finished agents (2 min)",
|
|
@@ -143,6 +148,7 @@
|
|
|
143
148
|
"THE END": "THE END",
|
|
144
149
|
"The engine stopped: system voices are used instead.": "The engine stopped: system voices are used instead.",
|
|
145
150
|
"This dev was replaced by his own agents. Spare a coffee for his career change? ☕": "This dev was replaced by his own agents. Spare a coffee for his career change? ☕",
|
|
151
|
+
"This help": "This help",
|
|
146
152
|
"Time": "Time",
|
|
147
153
|
"to": "to",
|
|
148
154
|
"tokens": "tokens",
|
|
@@ -152,8 +158,11 @@
|
|
|
152
158
|
"tool errors": "tool errors",
|
|
153
159
|
"tools": "tools",
|
|
154
160
|
"Tools": "Tools",
|
|
161
|
+
"Transcript": "Transcript",
|
|
155
162
|
"Translation unavailable right now: check that “claude” works in a terminal.": "Translation unavailable right now: check that “claude” works in a terminal.",
|
|
156
163
|
"Tree": "Tree",
|
|
164
|
+
"Tree view ↔ call": "Tree view ↔ call",
|
|
165
|
+
"Tree view: T to go back, ? for help": "Tree view: T to go back, ? for help",
|
|
157
166
|
"Untitled session": "Untitled session",
|
|
158
167
|
"Updating todo list": "Updating todo list",
|
|
159
168
|
"Using skill ": "Using skill ",
|
|
@@ -169,6 +178,7 @@
|
|
|
169
178
|
"working": "working",
|
|
170
179
|
"Writing ": "Writing ",
|
|
171
180
|
"You": "You",
|
|
181
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "You can also switch between Call, Tree and Sessions at the top of the window.",
|
|
172
182
|
"Your agents are done 🎉": "Your agents are done 🎉",
|
|
173
183
|
"Your Claude Code agents as a live team call": "Your Claude Code agents as a live team call",
|
|
174
184
|
"your turn": "your turn"
|
package/public/locales/es.json
CHANGED
|
@@ -176,5 +176,15 @@
|
|
|
176
176
|
"npm not found: install Node.js to enable this option.": "No se encontró npm: instala Node.js para activar esta opción.",
|
|
177
177
|
"The engine stopped: system voices are used instead.": "El motor se detuvo: se usan las voces del sistema.",
|
|
178
178
|
"Very natural voices (installs on demand)": "Voces muy naturales (se instalan bajo demanda)",
|
|
179
|
-
"Voices ready.": "Voces listas."
|
|
179
|
+
"Voices ready.": "Voces listas.",
|
|
180
|
+
"⌨ Keyboard shortcuts (?)": "⌨ Atajos de teclado (?)",
|
|
181
|
+
"Keyboard shortcuts": "Atajos de teclado",
|
|
182
|
+
"Mute / unmute": "Silenciar / activar sonido",
|
|
183
|
+
"Pause / play": "Pausa / reproducir",
|
|
184
|
+
"Recap": "Resumen",
|
|
185
|
+
"This help": "Esta ayuda",
|
|
186
|
+
"Transcript": "Transcripción",
|
|
187
|
+
"Tree view ↔ call": "Vista de árbol ↔ llamada",
|
|
188
|
+
"Tree view: T to go back, ? for help": "Vista de árbol: T para volver, ? para la ayuda",
|
|
189
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "También puedes cambiar entre Llamada, Árbol y Sesiones en la parte superior de la ventana."
|
|
180
190
|
}
|
package/public/locales/ja.json
CHANGED
|
@@ -176,5 +176,15 @@
|
|
|
176
176
|
"npm not found: install Node.js to enable this option.": "npm が見つかりません。このオプションを使うには Node.js をインストールしてください。",
|
|
177
177
|
"The engine stopped: system voices are used instead.": "エンジンが停止しました。代わりにシステム音声を使います。",
|
|
178
178
|
"Very natural voices (installs on demand)": "とても自然な音声(必要時にインストール)",
|
|
179
|
-
"Voices ready.": "音声の準備ができました。"
|
|
179
|
+
"Voices ready.": "音声の準備ができました。",
|
|
180
|
+
"⌨ Keyboard shortcuts (?)": "⌨ キーボードショートカット (?)",
|
|
181
|
+
"Keyboard shortcuts": "キーボードショートカット",
|
|
182
|
+
"Mute / unmute": "ミュート / 解除",
|
|
183
|
+
"Pause / play": "一時停止 / 再生",
|
|
184
|
+
"Recap": "要約",
|
|
185
|
+
"This help": "このヘルプ",
|
|
186
|
+
"Transcript": "文字起こし",
|
|
187
|
+
"Tree view ↔ call": "ツリー表示 ↔ 通話",
|
|
188
|
+
"Tree view: T to go back, ? for help": "ツリー表示:Tで戻る、?でヘルプ",
|
|
189
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "ウィンドウ上部で「通話」「ツリー」「セッション」を切り替えることもできます。"
|
|
180
190
|
}
|
|
@@ -176,5 +176,15 @@
|
|
|
176
176
|
"npm not found: install Node.js to enable this option.": "npm não encontrado: instale o Node.js para ativar esta opção.",
|
|
177
177
|
"The engine stopped: system voices are used instead.": "O mecanismo parou: as vozes do sistema são usadas no lugar.",
|
|
178
178
|
"Very natural voices (installs on demand)": "Vozes muito naturais (instaladas sob demanda)",
|
|
179
|
-
"Voices ready.": "Vozes prontas."
|
|
179
|
+
"Voices ready.": "Vozes prontas.",
|
|
180
|
+
"⌨ Keyboard shortcuts (?)": "⌨ Atalhos de teclado (?)",
|
|
181
|
+
"Keyboard shortcuts": "Atalhos de teclado",
|
|
182
|
+
"Mute / unmute": "Silenciar / ativar som",
|
|
183
|
+
"Pause / play": "Pausar / reproduzir",
|
|
184
|
+
"Recap": "Resumo",
|
|
185
|
+
"This help": "Esta ajuda",
|
|
186
|
+
"Transcript": "Transcrição",
|
|
187
|
+
"Tree view ↔ call": "Visão em árvore ↔ chamada",
|
|
188
|
+
"Tree view: T to go back, ? for help": "Visão em árvore: T para voltar, ? para ajuda",
|
|
189
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "Você também pode alternar entre Chamada, Árvore e Sessões no topo da janela."
|
|
180
190
|
}
|
|
@@ -176,5 +176,15 @@
|
|
|
176
176
|
"npm not found: install Node.js to enable this option.": "未找到 npm:请安装 Node.js 以启用此选项。",
|
|
177
177
|
"The engine stopped: system voices are used instead.": "引擎已停止:改用系统语音。",
|
|
178
178
|
"Very natural voices (installs on demand)": "超自然语音(按需安装)",
|
|
179
|
-
"Voices ready.": "语音已就绪。"
|
|
179
|
+
"Voices ready.": "语音已就绪。",
|
|
180
|
+
"⌨ Keyboard shortcuts (?)": "⌨ 键盘快捷键 (?)",
|
|
181
|
+
"Keyboard shortcuts": "键盘快捷键",
|
|
182
|
+
"Mute / unmute": "静音 / 取消静音",
|
|
183
|
+
"Pause / play": "暂停 / 播放",
|
|
184
|
+
"Recap": "回顾",
|
|
185
|
+
"This help": "此帮助",
|
|
186
|
+
"Transcript": "文字记录",
|
|
187
|
+
"Tree view ↔ call": "树状视图 ↔ 通话",
|
|
188
|
+
"Tree view: T to go back, ? for help": "树状视图:按 T 返回,按 ? 查看帮助",
|
|
189
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "你也可以在窗口顶部切换通话、树状和会话视图。"
|
|
180
190
|
}
|
|
@@ -176,5 +176,15 @@
|
|
|
176
176
|
"npm not found: install Node.js to enable this option.": "找不到 npm:請安裝 Node.js 才能啟用此選項。",
|
|
177
177
|
"The engine stopped: system voices are used instead.": "引擎已停止:改用系統語音。",
|
|
178
178
|
"Very natural voices (installs on demand)": "超自然語音(需要時才安裝)",
|
|
179
|
-
"Voices ready.": "語音已就緒。"
|
|
179
|
+
"Voices ready.": "語音已就緒。",
|
|
180
|
+
"⌨ Keyboard shortcuts (?)": "⌨ 鍵盤快速鍵 (?)",
|
|
181
|
+
"Keyboard shortcuts": "鍵盤快速鍵",
|
|
182
|
+
"Mute / unmute": "靜音 / 取消靜音",
|
|
183
|
+
"Pause / play": "暫停 / 播放",
|
|
184
|
+
"Recap": "回顧",
|
|
185
|
+
"This help": "此說明",
|
|
186
|
+
"Transcript": "逐字稿",
|
|
187
|
+
"Tree view ↔ call": "樹狀檢視 ↔ 通話",
|
|
188
|
+
"Tree view: T to go back, ? for help": "樹狀檢視:按 T 返回,按 ? 查看說明",
|
|
189
|
+
"You can also switch between Call, Tree and Sessions at the top of the window.": "你也可以在視窗上方切換通話、樹狀和工作階段檢視。"
|
|
180
190
|
}
|