openclacky 1.5.21 → 1.5.22
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +61 -0
- data/lib/clacky/billing/platform_billing.rb +3 -0
- data/lib/clacky/default_extensions/git/panels/git/view.js +1911 -398
- data/lib/clacky/default_extensions/preview/panels/preview/view.js +199 -34
- data/lib/clacky/providers.rb +43 -17
- data/lib/clacky/search_config.rb +33 -11
- data/lib/clacky/server/git_panel.rb +360 -34
- data/lib/clacky/server/http_server.rb +145 -47
- data/lib/clacky/server/preview.rb +118 -17
- data/lib/clacky/server/scheduler.rb +81 -2
- data/lib/clacky/server/web_ui_controller.rb +35 -27
- data/lib/clacky/session_manager.rb +52 -5
- data/lib/clacky/utils/mac_app_detector.rb +8 -7
- data/lib/clacky/utils/model_pricing.rb +60 -2
- data/lib/clacky/utils/windows_app_detector.rb +3 -1
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +650 -96
- data/lib/clacky/web/app.js +59 -6
- data/lib/clacky/web/auth.js +1 -1
- data/lib/clacky/web/components/composer.js +107 -8
- data/lib/clacky/web/components/image-zoom.js +165 -0
- data/lib/clacky/web/components/model-picker.js +6 -4
- data/lib/clacky/web/components/notify.js +2 -2
- data/lib/clacky/web/core/aside.js +60 -3
- data/lib/clacky/web/features/billing/view.js +2 -2
- data/lib/clacky/web/features/channels/view.js +5 -2
- data/lib/clacky/web/features/extensions/view.js +2 -2
- data/lib/clacky/web/features/new-session/store.js +79 -2
- data/lib/clacky/web/features/new-session/view.js +496 -58
- data/lib/clacky/web/features/skills/store.js +1 -1
- data/lib/clacky/web/features/tasks/view.js +162 -51
- data/lib/clacky/web/features/workspace/store.js +13 -6
- data/lib/clacky/web/features/workspace/view.js +153 -163
- data/lib/clacky/web/i18n.js +238 -56
- data/lib/clacky/web/index.html +173 -157
- data/lib/clacky/web/projects.js +37 -4
- data/lib/clacky/web/sessions.js +181 -105
- data/lib/clacky/web/settings.js +26 -8
- data/lib/clacky/web/skills.js +2 -2
- data/lib/clacky/web/theme.js +17 -2
- data/lib/clacky/web/utils.js +17 -2
- data/lib/clacky/web/weixin-qr.html +2 -1
- data/lib/clacky/web/ws-dispatcher.js +8 -29
- metadata +2 -1
data/lib/clacky/web/i18n.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
// Usage:
|
|
5
5
|
// I18n.t("key") → translated string
|
|
6
6
|
// I18n.t("key", {name:"X"})→ translated string with {{name}} replaced
|
|
7
|
-
// I18n.applyAll() → apply data-i18n / data-i18n-placeholder
|
|
7
|
+
// I18n.applyAll() → apply data-i18n / data-i18n-placeholder / data-i18n-title
|
|
8
|
+
// / data-i18n-tooltip to DOM
|
|
8
9
|
|
|
9
10
|
const I18n = (() => {
|
|
10
11
|
const STORAGE_KEY = "clacky-lang";
|
|
@@ -90,6 +91,8 @@ const I18n = (() => {
|
|
|
90
91
|
"chat.input.placeholderMobile": "What can I help you with today?",
|
|
91
92
|
"chat.input.placeholderRunningMobile": "Add more info…",
|
|
92
93
|
"chat.btn.send": "Send",
|
|
94
|
+
"chat.btn.sendTitle": "Send message",
|
|
95
|
+
"chat.btn.stopTitle": "Stop",
|
|
93
96
|
"chat.thinking": "Thinking…",
|
|
94
97
|
"chat.vision": "Reading image…",
|
|
95
98
|
"chat.videoVision": "Reading video…",
|
|
@@ -234,6 +237,7 @@ const I18n = (() => {
|
|
|
234
237
|
"workspace.title": "Files",
|
|
235
238
|
"workspace.toggleTree": "Toggle file tree",
|
|
236
239
|
"workspace.backToFiles": "Back to files",
|
|
240
|
+
"workspace.preview": "Preview",
|
|
237
241
|
"workspace.splitPreview": "Split preview",
|
|
238
242
|
"workspace.expand": "Open workspace",
|
|
239
243
|
"workspace.collapse": "Collapse workspace",
|
|
@@ -245,6 +249,11 @@ const I18n = (() => {
|
|
|
245
249
|
"workspace.error": "Failed to load files",
|
|
246
250
|
"workspace.refreshed": "Refreshed",
|
|
247
251
|
"workspace.refreshFailed": "Refresh failed",
|
|
252
|
+
"workspace.dirMissingTitle": "Working folder no longer exists",
|
|
253
|
+
"workspace.dirMissingDesc": "It may have been deleted, moved or renamed. Pick another folder to keep browsing files.",
|
|
254
|
+
"workspace.dirMissingAction": "Choose folder",
|
|
255
|
+
"workspace.dirGoneTitle": "Folder no longer exists",
|
|
256
|
+
"workspace.dirGoneDesc": "Refresh the file tree to update the listing.",
|
|
248
257
|
"workspace.downloadFailed": "Download failed",
|
|
249
258
|
"workspace.previewFailed": "Failed to preview file",
|
|
250
259
|
"workspace.previewUnsupported": "Cannot preview this file type",
|
|
@@ -253,6 +262,7 @@ const I18n = (() => {
|
|
|
253
262
|
"workspace.tableTruncated": "Showing the first %{rows} rows only. Use \"Open\" to view the full file.",
|
|
254
263
|
"workspace.open": "Open",
|
|
255
264
|
"workspace.openDefault": "Open with default app",
|
|
265
|
+
"workspace.openWithMenu": "Open with…",
|
|
256
266
|
"workspace.openWith": "Open with {{app}}",
|
|
257
267
|
"workspace.openWithFailed": "Failed to open file",
|
|
258
268
|
"workspace.openedInSystem": "Opened it in your default application.",
|
|
@@ -284,36 +294,73 @@ const I18n = (() => {
|
|
|
284
294
|
"changes.loading": "Loading changes…",
|
|
285
295
|
"changes.error": "Failed to load changes",
|
|
286
296
|
"changes.noRepo": "This project has no version control enabled.",
|
|
287
|
-
"changes.
|
|
288
|
-
"changes.
|
|
289
|
-
"changes.
|
|
290
|
-
"changes.
|
|
291
|
-
"changes.
|
|
292
|
-
"changes.
|
|
293
|
-
"changes.
|
|
294
|
-
"changes.
|
|
295
|
-
"changes.
|
|
296
|
-
"changes.
|
|
297
|
-
"changes.
|
|
298
|
-
"changes.
|
|
299
|
-
"changes.
|
|
300
|
-
"changes.
|
|
301
|
-
"changes.
|
|
302
|
-
"changes.
|
|
303
|
-
"changes.
|
|
304
|
-
"changes.
|
|
305
|
-
"changes.
|
|
306
|
-
"changes.
|
|
307
|
-
"changes.
|
|
297
|
+
"changes.empty": "No changes since the last commit.",
|
|
298
|
+
"changes.noMatch": "No matching files",
|
|
299
|
+
"changes.filter": "Filter files…",
|
|
300
|
+
"changes.resizeTree": "Drag to resize the file tree (double-click to reset)",
|
|
301
|
+
"changes.refresh": "Refresh",
|
|
302
|
+
"changes.copy": "Copy patch",
|
|
303
|
+
"changes.copied": "Patch copied",
|
|
304
|
+
"changes.copyFail": "Copy failed",
|
|
305
|
+
"changes.expandAll": "Expand all",
|
|
306
|
+
"changes.collapseAll": "Collapse all",
|
|
307
|
+
"changes.find.title": "Jump to file",
|
|
308
|
+
"changes.find.placeholder": "Jump to file",
|
|
309
|
+
"changes.find.empty": "No matching files",
|
|
310
|
+
"changes.layout.hint": "Diff layout: {{mode}}",
|
|
311
|
+
"changes.layout.auto": "Auto",
|
|
312
|
+
"changes.layout.split": "Side by side",
|
|
313
|
+
"changes.layout.unified": "Inline",
|
|
314
|
+
"changes.wrap": "Wrap lines",
|
|
315
|
+
"changes.tree.hide": "Collapse file tree",
|
|
316
|
+
"changes.tree.show": "Expand file tree",
|
|
317
|
+
"changes.menu.more": "More",
|
|
318
|
+
"changes.menu.expandFile": "Expand file",
|
|
319
|
+
"changes.menu.collapseFile": "Collapse file",
|
|
320
|
+
"changes.menu.copyPath": "Copy path",
|
|
321
|
+
"changes.menu.openInEditor": "Open in editor",
|
|
322
|
+
"changes.worktree": "uncommitted",
|
|
323
|
+
"changes.scope.title": "Review scope",
|
|
324
|
+
"changes.scope.lastTurn": "Last turn",
|
|
325
|
+
"changes.scope.worktree": "Uncommitted",
|
|
326
|
+
"changes.scope.unstaged": "Unstaged",
|
|
327
|
+
"changes.scope.staged": "Staged",
|
|
328
|
+
"changes.scope.committed": "Committed",
|
|
329
|
+
"changes.scope.branch": "Branch",
|
|
330
|
+
"changes.scope.searchBranch": "Search branches",
|
|
331
|
+
"changes.scope.loadingBranches": "Loading branches…",
|
|
332
|
+
"changes.scope.noBranches": "No matching branches",
|
|
333
|
+
"changes.scope.commits": "Commits",
|
|
334
|
+
"changes.scope.unpushedCommits": "Unpushed commits",
|
|
335
|
+
"changes.scope.noUnpushed": "No unpushed commits",
|
|
336
|
+
"changes.scope.commitCount": "{{n}} commit(s)",
|
|
337
|
+
"changes.scope.searchCommit": "Search commits",
|
|
338
|
+
"changes.scope.loadingCommits": "Loading commits…",
|
|
339
|
+
"changes.scope.noCommits": "No matching commits",
|
|
340
|
+
"changes.compare.title": "Compare against",
|
|
341
|
+
"changes.compare.unset": "Pick a branch",
|
|
342
|
+
"changes.scope.noBase": "No base branch to compare against.",
|
|
343
|
+
"changes.scope.emptyLastTurn": "Nothing changed in the last turn.",
|
|
344
|
+
"changes.scope.emptyUnstaged": "No unstaged changes.",
|
|
345
|
+
"changes.scope.emptyStaged": "Nothing staged.",
|
|
346
|
+
"changes.scope.emptyCommitted": "No commits on top of the base branch.",
|
|
347
|
+
"changes.tag.add": "A",
|
|
348
|
+
"changes.tag.mod": "M",
|
|
349
|
+
"changes.tag.del": "D",
|
|
350
|
+
"changes.fold": "{{n}} unmodified lines",
|
|
351
|
+
"changes.foldHint": "Click to expand",
|
|
308
352
|
"changes.diff.same": "No content change in this file.",
|
|
353
|
+
"changes.diff.emptyNew": "Empty file.",
|
|
309
354
|
"changes.diff.binary": "Binary file - line diff not available.",
|
|
310
|
-
"changes.diff.truncated": "Diff too
|
|
355
|
+
"changes.diff.truncated": "Diff too large - showing the first {{n}} lines",
|
|
356
|
+
"changes.diff.lazy": "Large change - click to load this file's diff",
|
|
357
|
+
"changes.diff.loading": "Loading diff…",
|
|
358
|
+
"changes.diff.skipped": "Diff too large to show here",
|
|
359
|
+
"changes.diff.fail": "Failed to load diff",
|
|
311
360
|
"changes.restore.title": "Revert this file's changes",
|
|
312
|
-
"changes.restore.confirm":
|
|
313
|
-
"changes.restore.
|
|
314
|
-
"changes.restore.
|
|
315
|
-
"changes.restore.done": "Reverted: {{path}}",
|
|
316
|
-
"changes.restore.failed": "Revert failed",
|
|
361
|
+
"changes.restore.confirm": "Discard?",
|
|
362
|
+
"changes.restore.done": "Reverted: {{path}}",
|
|
363
|
+
"changes.restore.failed": "Revert failed",
|
|
317
364
|
"preview.tab": "Preview",
|
|
318
365
|
"preview.empty.title": "Start browsing",
|
|
319
366
|
"preview.empty.sub": "Enter a local file path or localhost address to open the page",
|
|
@@ -325,6 +372,11 @@ const I18n = (() => {
|
|
|
325
372
|
"preview.back": "Back",
|
|
326
373
|
"preview.forward": "Forward",
|
|
327
374
|
"preview.go": "Go",
|
|
375
|
+
"preview.more": "More",
|
|
376
|
+
"preview.zoom": "Zoom",
|
|
377
|
+
"preview.zoom.in": "Zoom in",
|
|
378
|
+
"preview.zoom.out": "Zoom out",
|
|
379
|
+
"preview.zoom.reset": "Reset to 100%",
|
|
328
380
|
"tm.tab": "History",
|
|
329
381
|
"sib.model.tooltip": "Click to switch model",
|
|
330
382
|
"sib.model.tooltip.busy": "Model switching is disabled while the agent is responding",
|
|
@@ -346,7 +398,7 @@ const I18n = (() => {
|
|
|
346
398
|
"sib.mode.autoHelp": "Confirm automatically. If you don’t answer a question in time, AI decides and continues.",
|
|
347
399
|
"sib.mode.confirm_all": "Manual",
|
|
348
400
|
"sib.mode.auto_approve": "Auto",
|
|
349
|
-
"sib.mode.tooltip": "
|
|
401
|
+
"sib.mode.tooltip": "Click to change permission mode",
|
|
350
402
|
"sib.cost.tooltip": "Estimated token cost for this session",
|
|
351
403
|
"sib.reasoning.label": "Reasoning",
|
|
352
404
|
"sib.reasoning.heading": "Reasoning effort",
|
|
@@ -486,6 +538,14 @@ const I18n = (() => {
|
|
|
486
538
|
"tasks.section.active": "Active",
|
|
487
539
|
"tasks.section.paused": "Paused",
|
|
488
540
|
"tasks.section.activeEmpty": "No active tasks. Resume one from its … menu below.",
|
|
541
|
+
"tasks.section.pausedEmpty": "No paused tasks.",
|
|
542
|
+
"tasks.filter.all": "All",
|
|
543
|
+
"tasks.filter.active": "Enabled",
|
|
544
|
+
"tasks.filter.paused": "Paused",
|
|
545
|
+
"tasks.next.soon": "Due now",
|
|
546
|
+
"tasks.next.minutes": "in {{n}} min",
|
|
547
|
+
"tasks.next.hours": "in {{n}} hr",
|
|
548
|
+
"tasks.next.days": "in {{n}} days",
|
|
489
549
|
"tasks.btn.more": "More",
|
|
490
550
|
"tasks.btn.history": "Run history",
|
|
491
551
|
"tasks.day.today": "Today",
|
|
@@ -1422,6 +1482,35 @@ const I18n = (() => {
|
|
|
1422
1482
|
"billing.headerMiss": "Miss",
|
|
1423
1483
|
"billing.headerOutput": "Output",
|
|
1424
1484
|
"billing.disclaimer": "Costs are estimated based on token usage and may differ from your provider's actual bill. If you notice discrepancies, please check your provider's billing dashboard.",
|
|
1485
|
+
|
|
1486
|
+
// ── Tooltips ──
|
|
1487
|
+
"tooltip.toggleSidebar": "Toggle sidebar",
|
|
1488
|
+
"tooltip.newSession": "New Session",
|
|
1489
|
+
"tooltip.back": "Back",
|
|
1490
|
+
"tooltip.organize": "Organize",
|
|
1491
|
+
"tooltip.newProject": "New Project",
|
|
1492
|
+
"tooltip.settings": "Settings",
|
|
1493
|
+
"tooltip.attach": "Attach file (image, pdf, docx, md, tar.gz…) — drag & drop / Ctrl+V also work",
|
|
1494
|
+
"tooltip.slash": "Insert skill command (/)",
|
|
1495
|
+
"tooltip.createTask": "Create a new task",
|
|
1496
|
+
"tooltip.collapsePanel": "Collapse panel",
|
|
1497
|
+
"tooltip.importSkill": "Import skill from ZIP or GitHub URL",
|
|
1498
|
+
"tooltip.createSkill": "Create a new skill with AI",
|
|
1499
|
+
"tooltip.refreshBrandSkills": "Refresh from cloud",
|
|
1500
|
+
"tooltip.chooseZip": "Choose local ZIP file",
|
|
1501
|
+
"tooltip.enlargeQr": "Click to enlarge",
|
|
1502
|
+
"tooltip.toggleKey": "Show/hide key",
|
|
1503
|
+
"tooltip.remove": "Remove",
|
|
1504
|
+
"tooltip.swatch.indigo": "Indigo",
|
|
1505
|
+
"tooltip.swatch.auroraBlue": "Aurora Blue",
|
|
1506
|
+
"tooltip.swatch.forestGreen": "Forest Green",
|
|
1507
|
+
"tooltip.swatch.sunriseOrange": "Sunrise Orange",
|
|
1508
|
+
"tooltip.swatch.roseViolet": "Rose Violet",
|
|
1509
|
+
"tooltip.swatch.coralRed": "Coral Red",
|
|
1510
|
+
"tooltip.swatch.skyBlue": "Sky Blue",
|
|
1511
|
+
"tooltip.swatch.hotPink": "Hot Pink",
|
|
1512
|
+
"tooltip.swatch.warmBrown": "Warm Brown",
|
|
1513
|
+
"tooltip.swatch.slateGray": "Slate Gray",
|
|
1425
1514
|
},
|
|
1426
1515
|
zh: {
|
|
1427
1516
|
// ── Phases ──
|
|
@@ -1500,6 +1589,8 @@ const I18n = (() => {
|
|
|
1500
1589
|
"chat.input.placeholderMobile": "今天帮你做些什么?",
|
|
1501
1590
|
"chat.input.placeholderRunningMobile": "可输入补充消息…",
|
|
1502
1591
|
"chat.btn.send": "发送",
|
|
1592
|
+
"chat.btn.sendTitle": "发送消息",
|
|
1593
|
+
"chat.btn.stopTitle": "停止",
|
|
1503
1594
|
"chat.thinking": "思考中…",
|
|
1504
1595
|
"chat.vision": "识别图片内容…",
|
|
1505
1596
|
"chat.videoVision": "理解视频内容…",
|
|
@@ -1642,6 +1733,7 @@ const I18n = (() => {
|
|
|
1642
1733
|
"workspace.title": "文件",
|
|
1643
1734
|
"workspace.toggleTree": "切换目录树",
|
|
1644
1735
|
"workspace.backToFiles": "返回文件列表",
|
|
1736
|
+
"workspace.preview": "预览",
|
|
1645
1737
|
"workspace.splitPreview": "并排预览",
|
|
1646
1738
|
"workspace.expand": "打开工作区",
|
|
1647
1739
|
"workspace.collapse": "收起工作区",
|
|
@@ -1653,6 +1745,11 @@ const I18n = (() => {
|
|
|
1653
1745
|
"workspace.error": "加载文件失败",
|
|
1654
1746
|
"workspace.refreshed": "已刷新",
|
|
1655
1747
|
"workspace.refreshFailed": "刷新失败",
|
|
1748
|
+
"workspace.dirMissingTitle": "工作目录已不存在",
|
|
1749
|
+
"workspace.dirMissingDesc": "该目录可能已被删除、移动或重命名,重新选择目录后即可继续查看文件。",
|
|
1750
|
+
"workspace.dirMissingAction": "重新选择目录",
|
|
1751
|
+
"workspace.dirGoneTitle": "文件夹已不存在",
|
|
1752
|
+
"workspace.dirGoneDesc": "刷新文件树即可更新列表。",
|
|
1656
1753
|
"workspace.downloadFailed": "下载失败",
|
|
1657
1754
|
"workspace.previewFailed": "文件预览失败",
|
|
1658
1755
|
"workspace.previewUnsupported": "无法预览此类型文件",
|
|
@@ -1661,6 +1758,7 @@ const I18n = (() => {
|
|
|
1661
1758
|
"workspace.tableTruncated": "仅显示前 %{rows} 行,点击「打开」查看完整文件",
|
|
1662
1759
|
"workspace.open": "打开",
|
|
1663
1760
|
"workspace.openDefault": "用默认应用打开",
|
|
1761
|
+
"workspace.openWithMenu": "打开方式",
|
|
1664
1762
|
"workspace.openWith": "用 {{app}} 打开",
|
|
1665
1763
|
"workspace.openedInSystem": "已用系统默认程序打开",
|
|
1666
1764
|
"workspace.openWithFailed": "打开文件失败",
|
|
@@ -1692,34 +1790,71 @@ const I18n = (() => {
|
|
|
1692
1790
|
"changes.loading": "正在读取改动…",
|
|
1693
1791
|
"changes.error": "读取改动失败",
|
|
1694
1792
|
"changes.noRepo": "这个项目还没有启用版本管理。",
|
|
1695
|
-
"changes.
|
|
1696
|
-
"changes.
|
|
1697
|
-
"changes.
|
|
1698
|
-
"changes.
|
|
1699
|
-
"changes.
|
|
1700
|
-
"changes.
|
|
1701
|
-
"changes.
|
|
1702
|
-
"changes.
|
|
1703
|
-
"changes.
|
|
1704
|
-
"changes.
|
|
1705
|
-
"changes.
|
|
1706
|
-
"changes.
|
|
1707
|
-
"changes.
|
|
1708
|
-
"changes.
|
|
1709
|
-
"changes.
|
|
1710
|
-
"changes.
|
|
1711
|
-
"changes.
|
|
1712
|
-
"changes.
|
|
1713
|
-
"changes.
|
|
1714
|
-
"changes.
|
|
1715
|
-
"changes.
|
|
1716
|
-
"changes.
|
|
1717
|
-
"changes.
|
|
1793
|
+
"changes.empty": "自上次提交以来没有改动。",
|
|
1794
|
+
"changes.noMatch": "没有匹配的文件",
|
|
1795
|
+
"changes.filter": "筛选文件…",
|
|
1796
|
+
"changes.resizeTree": "拖动调整文件树宽度(双击复位)",
|
|
1797
|
+
"changes.refresh": "刷新",
|
|
1798
|
+
"changes.copy": "复制补丁",
|
|
1799
|
+
"changes.copied": "已复制补丁",
|
|
1800
|
+
"changes.copyFail": "复制失败",
|
|
1801
|
+
"changes.expandAll": "展开全部",
|
|
1802
|
+
"changes.collapseAll": "收起全部",
|
|
1803
|
+
"changes.find.title": "跳转到文件",
|
|
1804
|
+
"changes.find.placeholder": "跳转到文件",
|
|
1805
|
+
"changes.find.empty": "没有匹配的文件",
|
|
1806
|
+
"changes.layout.hint": "差异视图布局:{{mode}}",
|
|
1807
|
+
"changes.layout.auto": "自动",
|
|
1808
|
+
"changes.layout.split": "并排",
|
|
1809
|
+
"changes.layout.unified": "行内",
|
|
1810
|
+
"changes.wrap": "自动换行",
|
|
1811
|
+
"changes.tree.hide": "收起文件树",
|
|
1812
|
+
"changes.tree.show": "展开文件树",
|
|
1813
|
+
"changes.menu.more": "更多",
|
|
1814
|
+
"changes.menu.expandFile": "展开文件",
|
|
1815
|
+
"changes.menu.collapseFile": "折叠文件",
|
|
1816
|
+
"changes.menu.copyPath": "复制路径",
|
|
1817
|
+
"changes.menu.openInEditor": "在编辑器中打开",
|
|
1818
|
+
"changes.worktree": "未提交",
|
|
1819
|
+
"changes.scope.title": "查看范围",
|
|
1820
|
+
"changes.scope.lastTurn": "上一轮",
|
|
1821
|
+
"changes.scope.worktree": "未提交",
|
|
1822
|
+
"changes.scope.unstaged": "未暂存",
|
|
1823
|
+
"changes.scope.staged": "已暂存",
|
|
1824
|
+
"changes.scope.committed": "已提交",
|
|
1825
|
+
"changes.scope.branch": "分支",
|
|
1826
|
+
"changes.scope.searchBranch": "搜索分支",
|
|
1827
|
+
"changes.scope.loadingBranches": "正在读取分支…",
|
|
1828
|
+
"changes.scope.noBranches": "没有匹配的分支",
|
|
1829
|
+
"changes.scope.commits": "提交",
|
|
1830
|
+
"changes.scope.unpushedCommits": "未推送的提交",
|
|
1831
|
+
"changes.scope.noUnpushed": "没有未推送的提交",
|
|
1832
|
+
"changes.scope.commitCount": "{{n}} 个提交",
|
|
1833
|
+
"changes.scope.searchCommit": "搜索提交",
|
|
1834
|
+
"changes.scope.loadingCommits": "正在读取提交…",
|
|
1835
|
+
"changes.scope.noCommits": "没有匹配的提交",
|
|
1836
|
+
"changes.compare.title": "选择对比分支",
|
|
1837
|
+
"changes.compare.unset": "选择对比分支",
|
|
1838
|
+
"changes.scope.noBase": "没有可比较的基线分支。",
|
|
1839
|
+
"changes.scope.emptyLastTurn": "上一轮没有改动记录。",
|
|
1840
|
+
"changes.scope.emptyUnstaged": "工作区没有未暂存的改动。",
|
|
1841
|
+
"changes.scope.emptyStaged": "暂存区没有改动。",
|
|
1842
|
+
"changes.scope.emptyCommitted": "当前分支相对基线没有提交。",
|
|
1843
|
+
"changes.tag.add": "A",
|
|
1844
|
+
"changes.tag.mod": "M",
|
|
1845
|
+
"changes.tag.del": "D",
|
|
1846
|
+
"changes.fold": "{{n}} 行未修改",
|
|
1847
|
+
"changes.foldHint": "点击展开",
|
|
1848
|
+
"changes.diff.same": "这个文件的内容没有变化。",
|
|
1849
|
+
"changes.diff.emptyNew": "空文件。",
|
|
1850
|
+
"changes.diff.binary": "二进制文件,无法逐行对比。",
|
|
1718
1851
|
"changes.diff.truncated": "差异过大,仅显示前 {{n}} 行",
|
|
1852
|
+
"changes.diff.lazy": "改动较大,点按加载此文件的差异",
|
|
1853
|
+
"changes.diff.loading": "加载差异…",
|
|
1854
|
+
"changes.diff.skipped": "差异过大,未在此处显示",
|
|
1855
|
+
"changes.diff.fail": "读取差异失败",
|
|
1719
1856
|
"changes.restore.title": "撤销此文件的改动",
|
|
1720
|
-
"changes.restore.confirm":
|
|
1721
|
-
"changes.restore.diffBtn": "撤销改动",
|
|
1722
|
-
"changes.restore.doing": "正在撤销…",
|
|
1857
|
+
"changes.restore.confirm": "确认丢弃?",
|
|
1723
1858
|
"changes.restore.done": "已撤销:{{path}}",
|
|
1724
1859
|
"changes.restore.failed": "撤销失败",
|
|
1725
1860
|
"preview.tab": "预览",
|
|
@@ -1733,6 +1868,11 @@ const I18n = (() => {
|
|
|
1733
1868
|
"preview.back": "后退",
|
|
1734
1869
|
"preview.forward": "前进",
|
|
1735
1870
|
"preview.go": "前往",
|
|
1871
|
+
"preview.more": "更多",
|
|
1872
|
+
"preview.zoom": "缩放",
|
|
1873
|
+
"preview.zoom.in": "放大",
|
|
1874
|
+
"preview.zoom.out": "缩小",
|
|
1875
|
+
"preview.zoom.reset": "重置为 100%",
|
|
1736
1876
|
"tm.tab": "时光机",
|
|
1737
1877
|
"sib.model.tooltip": "点击切换模型",
|
|
1738
1878
|
"sib.model.tooltip.busy": "Agent 回复中,暂时无法切换模型",
|
|
@@ -1754,7 +1894,7 @@ const I18n = (() => {
|
|
|
1754
1894
|
"sib.mode.autoHelp": "需要确认时自动同意;提问后若未回答,由 AI 决定并继续。",
|
|
1755
1895
|
"sib.mode.confirm_all": "手动",
|
|
1756
1896
|
"sib.mode.auto_approve": "自动",
|
|
1757
|
-
"sib.mode.tooltip": "
|
|
1897
|
+
"sib.mode.tooltip": "点击切换权限模式",
|
|
1758
1898
|
"sib.cost.tooltip": "本次会话的预估 Token 费用",
|
|
1759
1899
|
"sib.reasoning.label": "思考",
|
|
1760
1900
|
"sib.reasoning.heading": "思考等级",
|
|
@@ -1892,6 +2032,14 @@ const I18n = (() => {
|
|
|
1892
2032
|
"tasks.section.active": "启用中",
|
|
1893
2033
|
"tasks.section.paused": "已暂停",
|
|
1894
2034
|
"tasks.section.activeEmpty": "暂无启用中的任务,可在下方任务的 ⋯ 菜单里启用",
|
|
2035
|
+
"tasks.section.pausedEmpty": "暂无已暂停的任务。",
|
|
2036
|
+
"tasks.filter.all": "全部",
|
|
2037
|
+
"tasks.filter.active": "已启用",
|
|
2038
|
+
"tasks.filter.paused": "已暂停",
|
|
2039
|
+
"tasks.next.soon": "即将执行",
|
|
2040
|
+
"tasks.next.minutes": "{{n}} 分钟后执行",
|
|
2041
|
+
"tasks.next.hours": "{{n}} 小时后执行",
|
|
2042
|
+
"tasks.next.days": "{{n}} 天后执行",
|
|
1895
2043
|
"tasks.btn.more": "更多",
|
|
1896
2044
|
"tasks.btn.history": "运行记录",
|
|
1897
2045
|
"tasks.day.today": "今天",
|
|
@@ -2836,6 +2984,35 @@ const I18n = (() => {
|
|
|
2836
2984
|
"billing.headerMiss": "未命中",
|
|
2837
2985
|
"billing.headerOutput": "输出",
|
|
2838
2986
|
"billing.disclaimer": "费用为估算值,基于 Token 用量和模型定价计算,可能与 API 提供商实际账单有所差异。如有异常,请前往 API 提供商查看实际账单。",
|
|
2987
|
+
|
|
2988
|
+
// ── Tooltips ──
|
|
2989
|
+
"tooltip.toggleSidebar": "展开/收起侧边栏",
|
|
2990
|
+
"tooltip.newSession": "新建会话",
|
|
2991
|
+
"tooltip.back": "返回",
|
|
2992
|
+
"tooltip.organize": "整理",
|
|
2993
|
+
"tooltip.newProject": "新建项目",
|
|
2994
|
+
"tooltip.settings": "设置",
|
|
2995
|
+
"tooltip.attach": "上传文件(图片、pdf、docx、md、tar.gz…)— 支持拖拽 / Ctrl+V 粘贴",
|
|
2996
|
+
"tooltip.slash": "插入技能命令(/)",
|
|
2997
|
+
"tooltip.createTask": "新建定时任务",
|
|
2998
|
+
"tooltip.collapsePanel": "收起面板",
|
|
2999
|
+
"tooltip.importSkill": "从 ZIP 或 GitHub URL 导入技能",
|
|
3000
|
+
"tooltip.createSkill": "让 AI 创建一个新技能",
|
|
3001
|
+
"tooltip.refreshBrandSkills": "从云端刷新",
|
|
3002
|
+
"tooltip.chooseZip": "选择本地 ZIP 文件",
|
|
3003
|
+
"tooltip.enlargeQr": "点击放大",
|
|
3004
|
+
"tooltip.toggleKey": "显示/隐藏密钥",
|
|
3005
|
+
"tooltip.remove": "移除",
|
|
3006
|
+
"tooltip.swatch.indigo": "靛蓝",
|
|
3007
|
+
"tooltip.swatch.auroraBlue": "极光蓝",
|
|
3008
|
+
"tooltip.swatch.forestGreen": "森林绿",
|
|
3009
|
+
"tooltip.swatch.sunriseOrange": "日出橙",
|
|
3010
|
+
"tooltip.swatch.roseViolet": "玫瑰紫",
|
|
3011
|
+
"tooltip.swatch.coralRed": "珊瑚红",
|
|
3012
|
+
"tooltip.swatch.skyBlue": "天蓝",
|
|
3013
|
+
"tooltip.swatch.hotPink": "亮粉",
|
|
3014
|
+
"tooltip.swatch.warmBrown": "暖棕",
|
|
3015
|
+
"tooltip.swatch.slateGray": "石板灰",
|
|
2839
3016
|
}
|
|
2840
3017
|
};
|
|
2841
3018
|
// ── State ──────────────────────────────────────────────────────────────────
|
|
@@ -2920,6 +3097,11 @@ const I18n = (() => {
|
|
|
2920
3097
|
const vars = _extractVars(el);
|
|
2921
3098
|
el.title = t(key, vars);
|
|
2922
3099
|
});
|
|
3100
|
+
document.querySelectorAll("[data-i18n-tooltip]").forEach(el => {
|
|
3101
|
+
const key = el.getAttribute("data-i18n-tooltip");
|
|
3102
|
+
const vars = _extractVars(el);
|
|
3103
|
+
el.setAttribute("data-tooltip", t(key, vars));
|
|
3104
|
+
});
|
|
2923
3105
|
|
|
2924
3106
|
// Update <html lang=""> attribute
|
|
2925
3107
|
document.documentElement.lang = _lang;
|