fix(desktop): shorten Actions aria-labels and tautological copy

Use short static labels (Session actions / Actions) instead of
Actions for <name>. Trim toast fallback, settings echoes, YOLO click
lectures, and fat gateway/appearance/notifications intros.
This commit is contained in:
Brooklyn Nicholson 2026-07-27 22:03:37 -05:00
parent 9b5c15727c
commit 970c4b5336
12 changed files with 111 additions and 139 deletions

View file

@ -250,7 +250,7 @@ function CronJobSidebarRow({
return (
<div>
<ActionsContextMenu ariaLabel={c.actionsFor(label)} contentClassName="w-44" items={items}>
<ActionsContextMenu ariaLabel={c.actionsTitle} contentClassName="w-44" items={items}>
<div className="group/cron relative grid min-h-[1.625rem] grid-cols-[minmax(0,1fr)_auto] items-center rounded-md hover:bg-(--chrome-action-hover)">
{/* Lead with the dot in the same w-3.5 cell + pl-2 the session rows use
so the cron dots line up with the sessions above; the caret sits next

View file

@ -672,7 +672,7 @@ function ProfileSquare({
{/* The rail sits at the very bottom, so pad off the chrome (esp. the
statusbar) Radix then flips the menu up instead of squishing it. */}
<ContextMenuContent
aria-label={p.actionsFor(label)}
aria-label={p.actions}
className="w-40"
collisionPadding={{ bottom: 44, left: 8, right: 8, top: 8 }}
// Menu close refocuses the trigger — which doubles as the popover
@ -704,7 +704,7 @@ function ProfileSquare({
</ContextMenu>
<PopoverContent
aria-label={p.colorFor(label)}
aria-label={p.colorFor}
className="w-auto p-2"
collisionPadding={{ bottom: 44, left: 8, right: 8, top: 8 }}
side="top"

View file

@ -22,7 +22,6 @@ import { CopyButton } from '@/components/ui/copy-button'
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle
@ -403,7 +402,7 @@ export function SessionActionsMenu({
<>
<ActionsMenu
align={align}
ariaLabel={t.sidebar.row.actionsFor(actions.title)}
ariaLabel={t.sidebar.row.sessionActions}
contentClassName="w-40"
items={renderItems}
sideOffset={sideOffset}
@ -426,7 +425,7 @@ export function SessionContextMenu({ children, ...actions }: SessionContextMenuP
return (
<>
<ActionsContextMenu
ariaLabel={t.sidebar.row.actionsFor(actions.title)}
ariaLabel={t.sidebar.row.sessionActions}
contentClassName="w-40"
items={renderItems}
>
@ -492,7 +491,6 @@ function RenameSessionDialog({ open, onOpenChange, sessionId, currentTitle, prof
<DialogContent className="max-w-md">
<DialogHeader>
<DialogTitle>{r.renameTitle}</DialogTitle>
<DialogDescription>{r.renameDesc}</DialogDescription>
</DialogHeader>
<Input
autoFocus

View file

@ -118,7 +118,7 @@ export function SidebarSessionRow({
title={title}
>
<Button
aria-label={r.actionsFor(title)}
aria-label={r.sessionActions}
className="size-5 rounded-[4px] bg-transparent text-transparent transition-colors duration-100 hover:bg-(--ui-control-active-background) hover:text-foreground focus-visible:bg-(--ui-control-active-background) focus-visible:text-foreground focus-visible:ring-0 data-[state=open]:bg-(--ui-control-active-background) data-[state=open]:text-foreground group-hover:text-(--ui-text-tertiary) [&_svg]:size-3.5!"
size="icon"
variant="ghost"

View file

@ -137,7 +137,7 @@ export function EnvVarActionsMenu({ align = 'end', children, sideOffset = 6, ...
return (
<ActionsMenu
align={align}
ariaLabel={copy.actionsFor(actions.label)}
ariaLabel={copy.actions}
contentClassName="w-44"
items={items}
sideOffset={sideOffset}
@ -158,23 +158,22 @@ export function EnvVarContextMenu({ children, ...actions }: EnvVarContextMenuPro
const items = useEnvVarItems(actions)
return (
<ActionsContextMenu ariaLabel={copy.actionsFor(actions.label)} contentClassName="w-44" items={items}>
<ActionsContextMenu ariaLabel={copy.actions} contentClassName="w-44" items={items}>
{children}
</ActionsContextMenu>
)
}
interface EnvVarActionsTriggerProps extends Omit<React.ComponentProps<typeof Button>, 'size' | 'variant'> {
label: string
}
export function EnvVarActionsTrigger({ className, label, ...props }: EnvVarActionsTriggerProps) {
export function EnvVarActionsTrigger({
className,
...props
}: Omit<React.ComponentProps<typeof Button>, 'size' | 'variant'>) {
const { t } = useI18n()
const copy = t.settings.envActions
return (
<Button
aria-label={copy.actionsFor(label)}
aria-label={copy.actions}
className={cn('text-muted-foreground hover:text-foreground', className)}
size="icon-sm"
variant="ghost"

View file

@ -180,7 +180,7 @@ function EnvVarField({ envVar, isSet, onSaved, onCleared }: EnvVarFieldProps) {
</div>
{!editing && (
<EnvVarActionsMenu {...actionProps}>
<EnvVarActionsTrigger label={envVar.key} onClick={event => event.stopPropagation()} />
<EnvVarActionsTrigger onClick={event => event.stopPropagation()} />
</EnvVarActionsMenu>
)}
</div>

View file

@ -149,7 +149,7 @@ export const ar = defineLocale({
inputTitle: 'مطلوب إدخال',
inputBody: 'ينتظر Hermes ردّك.',
turnDoneTitle: 'أنهى Hermes',
turnDoneBody: 'الرد جاهز.',
turnDoneBody: '',
turnErrorTitle: 'فشلت الجولة',
backgroundDoneTitle: 'انتهت المهمة في الخلفية',
backgroundFailedTitle: 'فشلت المهمة في الخلفية'
@ -164,7 +164,6 @@ export const ar = defineLocale({
search: 'بحث',
searchTitle: 'البحث في الجلسات والعروض والإجراءات',
swapSidebarSides: 'تبديل جانبي الأشرطة',
swapSidebarSidesTitle: 'تبديل موضعي شريط الجلسات ومستكشف الملفات',
hideRightSidebar: 'إخفاء الشريط الأيمن',
showRightSidebar: 'إظهار الشريط الأيمن',
muteHaptics: 'كتم الاهتزازات',
@ -319,7 +318,7 @@ export const ar = defineLocale({
intro:
'إشعارات سطح المكتب الأصلية، منفصلة عن التنبيهات داخل التطبيق. هذه محلية على الجهاز — كل حاسوب يحتفظ بإعداداته الخاصة.',
enableAll: 'تفعيل الإشعارات',
enableAllDesc: 'مفتاح رئيسي. أوقفه لإسكات كل الإشعارات أدناه.',
enableAllDesc: 'إيقافه يصمت كل الإشعارات أدناه.',
focusedHint: 'تنبيهات الاكتمال تظهر فقط عندما يكون Hermes في الخلفية.',
kinds: {
approval: {
@ -336,7 +335,7 @@ export const ar = defineLocale({
},
turnError: {
label: 'فشل الدور',
description: 'انتهى دور بخطأ.'
description: 'أخطاء الأدوار في الخلفية.'
},
backgroundDone: {
label: 'اكتملت مهمة الخلفية',
@ -639,7 +638,7 @@ export const ar = defineLocale({
saving: 'جار الحفظ'
},
envActions: {
actionsFor: label => `إجراءات ${label}`,
actions: 'إجراءات',
docs: 'الوثائق',
hideValue: 'إخفاء القيمة',
revealValue: 'إظهار القيمة',
@ -1288,9 +1287,9 @@ export const ar = defineLocale({
showAllProfiles: 'إظهار كل الملفات الشخصية',
switchToProfile: name => `التبديل إلى ${name}`,
manageProfiles: 'إدارة الملفات الشخصية',
actionsFor: name => `إجراءات ${name}`,
actions: 'إجراءات',
color: 'اللون',
colorFor: name => `لون ${name}`,
colorFor: 'اللون',
setColor: color => `ضبط اللون ${color}`,
autoColor: 'لون تلقائي',
noProfiles: 'لا توجد ملفات شخصية',
@ -1419,7 +1418,7 @@ export const ar = defineLocale({
showRuns: 'إظهار التشغيلات',
hideRuns: 'إخفاء التشغيلات',
runHistory: 'سجل التشغيل',
actionsFor: title => `إجراءات ${title}`,
actionsTitle: 'الإجراءات',
resume: 'استئناف',
pause: 'إيقاف مؤقت',
@ -1564,7 +1563,7 @@ export const ar = defineLocale({
primaryBadge: 'أساسي',
removeFolder: 'إزالة',
create: 'إنشاء',
menu: 'إجراءات المشروع',
menu: 'إجراءات',
menuRename: 'إعادة تسمية',
menuAppearance: 'المظهر',
noColor: 'بلا لون',
@ -1618,7 +1617,7 @@ export const ar = defineLocale({
archive: 'أرشفة',
newWindow: 'فتح في نافذة جديدة',
copyIdFailed: 'فشل نسخ المعرف',
actionsFor: title => `إجراءات ${title}`,
sessionActions: 'إجراءات الجلسة',
sessionRunning: 'الجلسة تعمل',
needsInput: 'تحتاج إدخالا',
@ -1634,7 +1633,7 @@ export const ar = defineLocale({
renamed: 'تمت إعادة التسمية',
renameFailed: 'فشلت إعادة التسمية',
renameTitle: 'إعادة تسمية الجلسة',
renameDesc: 'اختر اسما جديدا لهذه الجلسة.',
renameDesc: '',
untitledPlaceholder: 'جلسة بلا عنوان',
ageNow: 'الآن',
ageDay: 'يوم',
@ -2070,7 +2069,7 @@ export const ar = defineLocale({
gatewayConnecting: 'جار اتصال البوابة',
gatewayOffline: 'البوابة غير متصلة',
gatewayRestarting: 'جار إعادة التشغيل...',
gatewayTitle: 'حالة البوابة',
gatewayTitle: 'البوابة',
agents: 'الوكلاء',
closeAgents: 'إغلاق الوكلاء',
openAgents: 'فتح الوكلاء',
@ -2080,10 +2079,8 @@ export const ar = defineLocale({
cron: 'المهام',
openCron: 'فتح المهام المجدولة',
turnRunning: 'الدور يعمل',
currentTurnElapsed: 'وقت الدور الحالي',
contextUsage: 'استخدام السياق',
session: 'الجلسة',
runtimeSessionElapsed: 'وقت الجلسة',
yoloOn: 'YOLO مفعل',
yoloOff: 'YOLO معطل',
modelNone: 'لا نموذج',
@ -2105,7 +2102,7 @@ export const ar = defineLocale({
remotePickerTitle: 'اختر مجلدا بعيدا',
remotePickerDescription: 'استعرض المجلدات على الخادم الخلفي المتصل.',
remotePickerSelect: 'تحديد المجلد',
folderTip: cwd => `المجلد الحالي: ${cwd}`,
folderTip: cwd => cwd,
openFolder: 'فتح مجلد',
refreshTree: 'تحديث الشجرة',
collapseAll: 'طي الكل',

View file

@ -166,7 +166,7 @@ export const en: Translations = {
inputTitle: 'Input needed',
inputBody: 'Hermes is waiting for your response.',
turnDoneTitle: 'Hermes finished',
turnDoneBody: 'The response is ready.',
turnDoneBody: '',
turnErrorTitle: 'Turn failed',
backgroundDoneTitle: 'Background task finished',
backgroundFailedTitle: 'Background task failed',
@ -194,8 +194,7 @@ export const en: Translations = {
search: 'Search',
searchTitle: 'Search sessions, views, and actions',
swapSidebarSides: 'Swap sidebar sides',
swapSidebarSidesTitle: 'Swap the sessions and file browser sides',
hideRightSidebar: 'Hide right sidebar',
hideRightSidebar: 'Hide right sidebar',
showRightSidebar: 'Show right sidebar',
muteHaptics: 'Mute haptics',
unmuteHaptics: 'Unmute haptics',
@ -351,7 +350,7 @@ export const en: Translations = {
plugins: {
title: 'Desktop plugins',
blurb:
'UI extensions loaded into this app — bundled with the build, or dropped into the desktop-plugins folder (including ones Hermes writes). Disabling unloads a plugin live and survives restarts.',
'Bundled or dropped into the desktop-plugins folder. Disable to unload live.',
count: n => `${n} installed`,
openFolder: 'Open plugins folder',
rescan: 'Rescan',
@ -365,9 +364,9 @@ export const en: Translations = {
notifications: {
title: 'Notifications',
intro:
'Native desktop notifications, separate from in-app toasts. These are device-local — each computer keeps its own settings.',
'OS notifications (not in-app toasts). Per device.',
enableAll: 'Enable notifications',
enableAllDesc: 'Master switch. Turn this off to silence every notification below.',
enableAllDesc: 'Off silences every notification below.',
focusedHint: 'Completion alerts only fire while Hermes is in the background.',
kinds: {
approval: {
@ -384,7 +383,7 @@ export const en: Translations = {
},
turnError: {
label: 'Turn failed',
description: 'A turn ended with an error.'
description: 'Background turn errors.'
},
backgroundDone: {
label: 'Background task finished',
@ -430,7 +429,7 @@ export const en: Translations = {
appearance: {
title: 'Appearance',
intro:
'These are desktop-only display preferences. Mode controls brightness; theme controls the accent palette and chat surface styling.',
'Desktop-only. Mode is brightness; theme is palette and chat chrome.',
colorMode: 'Color Mode',
colorModeDesc: 'Pick a fixed mode or let Hermes follow your system setting.',
toolViewTitle: 'Tool Call Display',
@ -573,7 +572,7 @@ export const en: Translations = {
saving: 'Saving'
},
envActions: {
actionsFor: label => `Actions for ${label}`,
actions: 'Actions',
manageInKeys: 'Manage in API Keys',
docs: 'Docs',
hideValue: 'Hide value',
@ -589,7 +588,7 @@ export const en: Translations = {
title: 'Gateway Connection',
envOverride: 'env override',
intro:
'Hermes Desktop starts its own local gateway by default. Use a remote gateway when you want this app to control an already-running Hermes backend on another machine or behind a trusted proxy. Pick a profile below to give it its own remote host.',
'Local by default. Use remote when this app should drive a Hermes backend elsewhere. Per-profile overrides below.',
appliesTo: 'Applies to',
allProfiles: 'All profiles',
defaultConnection: 'Default connection for every profile that has no override of its own.',
@ -1520,9 +1519,9 @@ export const en: Translations = {
showAllProfiles: 'Show all profiles',
switchToProfile: name => `Switch to ${name}`,
manageProfiles: 'Manage profiles…',
actionsFor: name => `Actions for ${name}`,
actions: 'Actions',
color: 'Color…',
colorFor: name => `Color for ${name}`,
colorFor: 'Color',
setColor: color => `Set color ${color}`,
autoColor: 'Auto',
noProfiles: 'No profiles yet.',
@ -1656,7 +1655,6 @@ export const en: Translations = {
showRuns: 'Show runs',
hideRuns: 'Hide runs',
runHistory: 'Run history',
actionsFor: title => `Actions for ${title}`,
actionsTitle: 'Cron job actions',
resume: 'Resume cron',
pause: 'Pause cron',
@ -1823,7 +1821,7 @@ export const en: Translations = {
primaryBadge: 'primary',
removeFolder: 'Remove',
create: 'Create',
menu: 'Project actions',
menu: 'Actions',
menuRename: 'Rename',
menuAppearance: 'Appearance',
noColor: 'No color',
@ -1885,7 +1883,6 @@ export const en: Translations = {
openInNewTab: 'Open in new tab',
openInSplit: 'Open in split',
copyIdFailed: 'Could not copy session ID',
actionsFor: title => `Actions for ${title}`,
sessionActions: 'Session actions',
sessionRunning: 'Session running',
needsInput: 'Needs your input',
@ -1897,7 +1894,7 @@ export const en: Translations = {
renamed: 'Renamed',
renameFailed: 'Rename failed',
renameTitle: 'Rename session',
renameDesc: 'Give this chat a memorable title. Leave empty to clear.',
renameDesc: 'Leave empty to clear.',
untitledPlaceholder: 'Untitled session',
untitledChat: id => `Chat ${id}`,
ageNow: 'now',
@ -2405,9 +2402,9 @@ export const en: Translations = {
connectionSsh: host => `SSH: ${host}`,
connectionRemote: host => `Remote: ${host}`,
connectionCloud: host => `Cloud: ${host}`,
connectionCloudTooltip: host => `Connected to Hermes Cloud at ${host} · click to manage`,
connectionSshTooltip: host => `Connected over SSH to ${host} · click to manage`,
connectionRemoteTooltip: host => `Connected to remote backend ${host} · click to manage`,
connectionCloudTooltip: host => `Hermes Cloud · ${host}`,
connectionSshTooltip: host => `SSH · ${host}`,
connectionRemoteTooltip: host => `Remote · ${host}`,
backendLabel: version => `backend v${version}`,
commit: sha => `commit ${sha}`,
branch: branch => `branch ${branch}`,
@ -2422,7 +2419,7 @@ export const en: Translations = {
gatewayConnecting: 'connecting',
gatewayOffline: 'offline',
gatewayRestarting: 'restarting…',
gatewayTitle: 'Hermes inference gateway status',
gatewayTitle: 'Gateway',
customizeTitle: 'Show in status bar',
hideStatusbar: 'Hide status bar',
toggleApprovalMode: 'Approvals',
@ -2447,8 +2444,7 @@ export const en: Translations = {
starmap: 'Memory Graph',
openStarmap: 'Open memory graph',
turnRunning: 'Running',
currentTurnElapsed: 'Current turn elapsed',
contextUsage: 'Context usage',
contextUsage: 'Context usage',
contextUsagePanel: {
categories: {
conversation: 'Conversation',
@ -2466,11 +2462,9 @@ export const en: Translations = {
title: 'Context Usage',
tokenSummary: (used, max) => `${used} / ${max} Tokens`
},
openContextUsage: 'Open context usage breakdown',
session: 'Session',
runtimeSessionElapsed: 'Runtime session elapsed',
yoloOn: 'YOLO on — auto-approving dangerous commands. Click to turn off. Shift+click toggles it globally.',
yoloOff: 'YOLO off — click to auto-approve dangerous commands. Shift+click toggles it globally.',
session: 'Session',
yoloOn: 'YOLO on — auto-approving dangerous commands. Shift+click toggles globally.',
yoloOff: 'YOLO off. Shift+click toggles globally.',
modelNone: 'none',
noModel: 'no model',
switchModel: 'Switch model',
@ -2491,7 +2485,7 @@ export const en: Translations = {
remotePickerTitle: 'Choose remote folder',
remotePickerDescription: 'Browse folders on the connected backend.',
remotePickerSelect: 'Select folder',
folderTip: cwd => `${cwd} — click to change folder`,
folderTip: cwd => cwd,
openFolder: 'Open folder',
refreshTree: 'Refresh tree',
collapseAll: 'Collapse all folders',

View file

@ -167,7 +167,7 @@ export const ja = defineLocale({
inputTitle: '入力が必要です',
inputBody: 'Hermes が応答を待っています。',
turnDoneTitle: 'Hermes が完了しました',
turnDoneBody: '応答の準備ができました。',
turnDoneBody: '',
turnErrorTitle: 'ターンが失敗しました',
backgroundDoneTitle: 'バックグラウンドタスクが完了しました',
backgroundFailedTitle: 'バックグラウンドタスクが失敗しました',
@ -195,8 +195,7 @@ export const ja = defineLocale({
search: '検索',
searchTitle: 'セッション、ビュー、アクションを検索',
swapSidebarSides: 'サイドバーの向きを切り替え',
swapSidebarSidesTitle: 'セッションとファイルブラウザーの位置を入れ替える',
hideRightSidebar: '右サイドバーを非表示',
hideRightSidebar: '右サイドバーを非表示',
showRightSidebar: '右サイドバーを表示',
muteHaptics: '触覚フィードバックをオフ',
unmuteHaptics: '触覚フィードバックをオン',
@ -242,7 +241,7 @@ export const ja = defineLocale({
title: '通知',
intro: 'アプリ内トーストとは別の、ネイティブのデスクトップ通知です。設定は端末ごとに保存されます。',
enableAll: '通知を有効にする',
enableAllDesc: 'マスタースイッチ。オフにすると以下のすべての通知を無効にします。',
enableAllDesc: 'オフで以下の通知をすべて無効にします。',
focusedHint: '完了通知は Hermes がバックグラウンドにあるときのみ表示されます。',
kinds: {
approval: {
@ -259,7 +258,7 @@ export const ja = defineLocale({
},
turnError: {
label: 'ターン失敗',
description: 'ターンエラーで終了しました。'
description: 'バックグラウンドのターンエラー。'
},
backgroundDone: {
label: 'バックグラウンドタスク完了',
@ -671,7 +670,8 @@ export const ja = defineLocale({
saving: '保存中'
},
envActions: {
actionsFor: label => `${label} のアクション`,
actions: 'アクション',
manageInKeys: 'API キーで管理',
docs: 'ドキュメント',
hideValue: '値を非表示',
@ -1381,9 +1381,10 @@ export const ja = defineLocale({
showAllProfiles: 'すべてのプロファイルを表示',
switchToProfile: name => `${name} に切り替え`,
manageProfiles: 'プロファイルを管理…',
actionsFor: name => `${name} のアクション`,
actions: 'アクション',
color: 'カラー…',
colorFor: name => `${name} のカラー`,
colorFor: 'カラー',
setColor: color => `カラー ${color} に設定`,
autoColor: '自動',
noProfiles: 'プロファイルが見つかりません。',
@ -1518,7 +1519,7 @@ export const ja = defineLocale({
showRuns: '実行履歴を表示',
hideRuns: '実行履歴を隠す',
runHistory: '実行履歴',
actionsFor: title => `${title} のアクション`,
actionsTitle: 'Cron ジョブのアクション',
resume: '再開',
pause: '一時停止',
@ -1686,7 +1687,7 @@ export const ja = defineLocale({
primaryBadge: 'メイン',
removeFolder: '削除',
create: '作成',
menu: 'プロジェクト操作',
menu: 'アクション',
menuRename: '名前を変更',
menuAppearance: '外観',
noColor: '色なし',
@ -1743,7 +1744,7 @@ export const ja = defineLocale({
archive: 'アーカイブ',
newWindow: '新しいウィンドウ',
copyIdFailed: 'セッション ID をコピーできませんでした',
actionsFor: title => `${title} のアクション`,
sessionActions: 'セッションアクション',
sessionRunning: 'セッション実行中',
needsInput: '入力が必要です',
@ -1755,7 +1756,7 @@ export const ja = defineLocale({
renamed: '名前を変更しました',
renameFailed: '名前の変更に失敗しました',
renameTitle: 'セッションの名前を変更',
renameDesc: 'このチャットにわかりやすいタイトルをつけてください。空欄にするとクリアされます。',
renameDesc: '空欄にするとクリアされます。',
untitledPlaceholder: '無題のセッション',
untitledChat: id => `セッション ${id}`,
ageNow: 'たった今',
@ -2268,9 +2269,9 @@ export const ja = defineLocale({
connectionSsh: host => `SSH: ${host}`,
connectionRemote: host => `リモート: ${host}`,
connectionCloud: host => `クラウド: ${host}`,
connectionCloudTooltip: host => `Hermes Cloud ${host} に接続中 · クリックして管理`,
connectionSshTooltip: host => `SSH 経由で ${host} に接続中 · クリックして管理`,
connectionRemoteTooltip: host => `リモートバックエンド ${host} に接続中 · クリックして管理`,
connectionCloudTooltip: host => `Hermes Cloud · ${host}`,
connectionSshTooltip: host => `SSH · ${host}`,
connectionRemoteTooltip: host => `Remote · ${host}`,
backendLabel: version => `バックエンド v${version}`,
commit: sha => `コミット ${sha}`,
branch: branch => `ブランチ ${branch}`,
@ -2285,7 +2286,7 @@ export const ja = defineLocale({
gatewayConnecting: '接続中',
gatewayOffline: 'オフライン',
gatewayRestarting: '再起動中…',
gatewayTitle: 'Hermes 推論ゲートウェイのステータス',
gatewayTitle: 'ゲートウェイ',
agents: 'エージェント',
closeAgents: 'エージェントを閉じる',
openAgents: 'エージェントを開く',
@ -2297,8 +2298,7 @@ export const ja = defineLocale({
starmap: 'メモリグラフ',
openStarmap: 'メモリグラフを開く',
turnRunning: '実行中',
currentTurnElapsed: '現在のターン経過時間',
contextUsage: 'コンテキスト使用状況',
contextUsage: 'コンテキスト使用状況',
contextUsagePanel: {
categories: {
conversation: '会話',
@ -2316,11 +2316,9 @@ export const ja = defineLocale({
title: 'コンテキスト使用状況',
tokenSummary: (used, max) => `${used} / ${max} Tokens`
},
openContextUsage: 'コンテキスト使用状況の内訳を開く',
session: 'セッション',
runtimeSessionElapsed: 'ランタイムセッション経過時間',
yoloOn: 'YOLO オン — 危険なコマンドを自動承認中。クリックでオフに。Shift+クリックで全体に切り替え。',
yoloOff: 'YOLO オフ — クリックで危険なコマンドを自動承認。Shift+クリックで全体に切り替え。',
session: 'セッション',
yoloOn: 'YOLO オン — 危険なコマンドを自動承認中。Shift+クリックで全体に切り替え。',
yoloOff: 'YOLO オフ。Shift+クリックで全体に切り替え。',
modelNone: 'なし',
noModel: 'モデルなし',
switchModel: 'モデルを切り替え',
@ -2341,7 +2339,7 @@ export const ja = defineLocale({
remotePickerTitle: 'リモートフォルダーを選択',
remotePickerDescription: '接続中のバックエンド上のフォルダーを参照します。',
remotePickerSelect: 'フォルダーを選択',
folderTip: cwd => `${cwd} — クリックしてフォルダーを変更`,
folderTip: cwd => cwd,
openFolder: 'フォルダーを開く',
refreshTree: 'ツリーを更新',
collapseAll: 'すべてのフォルダーを折りたたむ',

View file

@ -236,8 +236,7 @@ export interface Translations {
search: string
searchTitle: string
swapSidebarSides: string
swapSidebarSidesTitle: string
hideRightSidebar: string
hideRightSidebar: string
showRightSidebar: string
muteHaptics: string
unmuteHaptics: string
@ -476,7 +475,7 @@ export interface Translations {
saving: string
}
envActions: {
actionsFor: (label: string) => string
actions: string
manageInKeys: string
docs: string
hideValue: string
@ -1268,9 +1267,9 @@ export interface Translations {
showAllProfiles: string
switchToProfile: (name: string) => string
manageProfiles: string
actionsFor: (name: string) => string
actions: string
color: string
colorFor: (name: string) => string
colorFor: string
setColor: (color: string) => string
autoColor: string
noProfiles: string
@ -1364,7 +1363,6 @@ export interface Translations {
showRuns: string
hideRuns: string
runHistory: string
actionsFor: (title: string) => string
actionsTitle: string
resume: string
pause: string
@ -1585,7 +1583,6 @@ export interface Translations {
openInNewTab: string
openInSplit: string
copyIdFailed: string
actionsFor: (title: string) => string
sessionActions: string
sessionRunning: string
needsInput: string
@ -2052,8 +2049,7 @@ export interface Translations {
starmap: string
openStarmap: string
turnRunning: string
currentTurnElapsed: string
contextUsage: string
contextUsage: string
contextUsagePanel: {
categories: {
conversation: string
@ -2071,10 +2067,8 @@ export interface Translations {
title: string
tokenSummary: (used: string, max: string) => string
}
openContextUsage: string
session: string
runtimeSessionElapsed: string
yoloOn: string
session: string
yoloOn: string
yoloOff: string
modelNone: string
noModel: string

View file

@ -162,7 +162,7 @@ export const zhHant = defineLocale({
inputTitle: '需要輸入',
inputBody: 'Hermes 正在等待你的回應。',
turnDoneTitle: 'Hermes 已完成',
turnDoneBody: '回覆已就緒。',
turnDoneBody: '',
turnErrorTitle: '本輪失敗',
backgroundDoneTitle: '背景工作已完成',
backgroundFailedTitle: '背景工作失敗',
@ -189,7 +189,6 @@ export const zhHant = defineLocale({
search: '搜尋',
searchTitle: '搜尋工作階段、檢視和動作',
swapSidebarSides: '交換側邊欄位置',
swapSidebarSidesTitle: '交換工作階段欄和檔案瀏覽器的位置',
hideRightSidebar: '隱藏右側邊欄',
showRightSidebar: '顯示右側邊欄',
muteHaptics: '靜音觸感回饋',
@ -236,7 +235,7 @@ export const zhHant = defineLocale({
title: '通知',
intro: '原生桌面通知,與應用程式內提示不同。設定會依裝置保存,每台電腦各自獨立。',
enableAll: '啟用通知',
enableAllDesc: '總開關。關閉後靜音下方所有通知。',
enableAllDesc: '關閉後靜音下方所有通知。',
focusedHint: '完成提醒僅在 Hermes 位於背景時觸發。',
kinds: {
approval: {
@ -253,7 +252,7 @@ export const zhHant = defineLocale({
},
turnError: {
label: '本輪失敗',
description: '本輪以錯誤結束。'
description: '背景回合錯誤。'
},
backgroundDone: {
label: '背景工作完成',
@ -658,7 +657,7 @@ export const zhHant = defineLocale({
saving: '儲存中'
},
envActions: {
actionsFor: label => `${label} 的動作`,
actions: '動作',
manageInKeys: '在 API 金鑰中管理',
docs: '文件',
hideValue: '隱藏值',
@ -1332,9 +1331,9 @@ export const zhHant = defineLocale({
showAllProfiles: '顯示全部設定檔',
switchToProfile: name => `切換至 ${name}`,
manageProfiles: '管理設定檔…',
actionsFor: name => `${name} 的動作`,
actions: '動作',
color: '顏色…',
colorFor: name => `${name} 的顏色`,
colorFor: '顏色',
setColor: color => `設定顏色 ${color}`,
autoColor: '自動',
noProfiles: '找不到設定檔。',
@ -1467,7 +1466,7 @@ export const zhHant = defineLocale({
showRuns: '顯示執行記錄',
hideRuns: '隱藏執行記錄',
runHistory: '執行記錄',
actionsFor: title => `${title} 的動作`,
actionsTitle: '排程工作動作',
resume: '繼續',
pause: '暫停',
@ -1634,7 +1633,7 @@ export const zhHant = defineLocale({
primaryBadge: '主要',
removeFolder: '移除',
create: '建立',
menu: '專案操作',
menu: '作',
menuRename: '重新命名',
menuAppearance: '外觀',
noColor: '無顏色',
@ -1688,7 +1687,7 @@ export const zhHant = defineLocale({
archive: '封存',
newWindow: '新視窗',
copyIdFailed: '無法複製工作階段 ID',
actionsFor: title => `${title} 的動作`,
sessionActions: '工作階段動作',
sessionRunning: '工作階段執行中',
needsInput: '需要您的輸入',
@ -1700,7 +1699,7 @@ export const zhHant = defineLocale({
renamed: '已重新命名',
renameFailed: '重新命名失敗',
renameTitle: '重新命名工作階段',
renameDesc: '為此聊天取一個好記的標題。留空則清除。',
renameDesc: '留空則清除。',
untitledPlaceholder: '未命名工作階段',
untitledChat: id => `工作階段 ${id}`,
ageNow: '剛才',
@ -2194,9 +2193,9 @@ export const zhHant = defineLocale({
connectionSsh: host => `SSH: ${host}`,
connectionRemote: host => `遠端: ${host}`,
connectionCloud: host => `雲端: ${host}`,
connectionCloudTooltip: host => `已連線到 Hermes Cloud ${host} · 點擊管理`,
connectionSshTooltip: host => `已透過 SSH 連線到 ${host} · 點擊管理`,
connectionRemoteTooltip: host => `已連線到遠端後端 ${host} · 點擊管理`,
connectionCloudTooltip: host => `Hermes Cloud · ${host}`,
connectionSshTooltip: host => `SSH · ${host}`,
connectionRemoteTooltip: host => `Remote · ${host}`,
backendLabel: version => `後端 v${version}`,
commit: sha => `提交 ${sha}`,
branch: branch => `分支 ${branch}`,
@ -2211,7 +2210,7 @@ export const zhHant = defineLocale({
gatewayConnecting: '連線中',
gatewayOffline: '離線',
gatewayRestarting: '重新啟動中…',
gatewayTitle: 'Hermes 推論閘道狀態',
gatewayTitle: '閘道',
agents: '代理',
closeAgents: '關閉代理',
openAgents: '開啟代理',
@ -2223,7 +2222,6 @@ export const zhHant = defineLocale({
starmap: '記憶圖譜',
openStarmap: '開啟記憶圖譜',
turnRunning: '執行中',
currentTurnElapsed: '目前回合已用時間',
contextUsage: '上下文使用量',
contextUsagePanel: {
categories: {
@ -2242,11 +2240,9 @@ export const zhHant = defineLocale({
title: '上下文使用量',
tokenSummary: (used, max) => `${used} / ${max} Tokens`
},
openContextUsage: '開啟上下文使用量明細',
session: '工作階段',
runtimeSessionElapsed: '執行時工作階段已用時間',
yoloOn: 'YOLO 已開啟 — 自動核准危險指令。點擊關閉。Shift+點擊可全域切換。',
yoloOff: 'YOLO 已關閉 — 點擊自動核准危險指令。Shift+點擊可全域切換。',
yoloOn: 'YOLO 已開啟 — 自動核准危險指令。Shift+點擊可全域切換。',
yoloOff: 'YOLO 已關閉。Shift+點擊可全域切換。',
modelNone: '無',
noModel: '無模型',
switchModel: '切換模型',
@ -2267,7 +2263,7 @@ export const zhHant = defineLocale({
remotePickerTitle: '選擇遠端資料夾',
remotePickerDescription: '瀏覽已連線後端上的資料夾。',
remotePickerSelect: '選擇資料夾',
folderTip: cwd => `${cwd} — 點擊以變更資料夾`,
folderTip: cwd => cwd,
openFolder: '開啟資料夾',
refreshTree: '重新整理檔案樹',
collapseAll: '收合所有資料夾',

View file

@ -162,7 +162,7 @@ export const zh: Translations = {
inputTitle: '需要输入',
inputBody: 'Hermes 正在等待你的回应。',
turnDoneTitle: 'Hermes 已完成',
turnDoneBody: '回复已就绪。',
turnDoneBody: '',
turnErrorTitle: '本轮失败',
backgroundDoneTitle: '后台任务已完成',
backgroundFailedTitle: '后台任务失败',
@ -189,7 +189,6 @@ export const zh: Translations = {
search: '搜索',
searchTitle: '搜索会话、视图与操作',
swapSidebarSides: '交换侧边栏位置',
swapSidebarSidesTitle: '交换会话栏和文件浏览器的位置',
hideRightSidebar: '隐藏右侧栏',
showRightSidebar: '显示右侧栏',
muteHaptics: '关闭触感反馈',
@ -357,7 +356,7 @@ export const zh: Translations = {
title: '通知',
intro: '原生桌面通知,区别于应用内提示。设置按设备保存,每台电脑各自独立。',
enableAll: '启用通知',
enableAllDesc: '总开关。关闭后静音下方所有通知。',
enableAllDesc: '关闭后静音下方所有通知。',
focusedHint: '完成提醒仅在 Hermes 处于后台时触发。',
kinds: {
approval: {
@ -374,7 +373,7 @@ export const zh: Translations = {
},
turnError: {
label: '本轮失败',
description: '本轮以错误结束。'
description: '后台回合错误。'
},
backgroundDone: {
label: '后台任务完成',
@ -779,7 +778,7 @@ export const zh: Translations = {
saving: '保存中'
},
envActions: {
actionsFor: label => `${label} 的操作`,
actions: '操作',
manageInKeys: '在 API 密钥中管理',
docs: '文档',
hideValue: '隐藏值',
@ -1711,9 +1710,9 @@ export const zh: Translations = {
showAllProfiles: '显示全部配置档案',
switchToProfile: name => `切换到 ${name}`,
manageProfiles: '管理配置档案…',
actionsFor: name => `${name} 的操作`,
actions: '操作',
color: '颜色…',
colorFor: name => `${name} 的颜色`,
colorFor: '颜色',
setColor: color => `设置颜色 ${color}`,
autoColor: '自动',
noProfiles: '暂无配置档案。',
@ -1846,7 +1845,7 @@ export const zh: Translations = {
showRuns: '显示运行记录',
hideRuns: '隐藏运行记录',
runHistory: '运行记录',
actionsFor: title => `${title} 的操作`,
actionsTitle: '定时任务操作',
resume: '恢复定时任务',
pause: '暂停定时任务',
@ -2013,7 +2012,7 @@ export const zh: Translations = {
primaryBadge: '主',
removeFolder: '移除',
create: '创建',
menu: '项目操作',
menu: '操作',
menuRename: '重命名',
menuAppearance: '外观',
noColor: '无颜色',
@ -2073,7 +2072,7 @@ export const zh: Translations = {
openInNewTab: '在新标签页中打开',
openInSplit: '在分屏中打开',
copyIdFailed: '无法复制会话 ID',
actionsFor: title => `${title} 的操作`,
sessionActions: '会话操作',
sessionRunning: '会话运行中',
needsInput: '需要你输入',
@ -2085,7 +2084,7 @@ export const zh: Translations = {
renamed: '已重命名',
renameFailed: '重命名失败',
renameTitle: '重命名会话',
renameDesc: '给这个对话起一个好记的标题。留空则清除。',
renameDesc: '留空则清除。',
untitledPlaceholder: '无标题会话',
untitledChat: id => `会话 ${id}`,
ageNow: '刚刚',
@ -2581,9 +2580,9 @@ export const zh: Translations = {
connectionSsh: host => `SSH: ${host}`,
connectionRemote: host => `远程: ${host}`,
connectionCloud: host => `云端: ${host}`,
connectionCloudTooltip: host => `已连接到 Hermes Cloud ${host} · 点击管理`,
connectionSshTooltip: host => `已通过 SSH 连接到 ${host} · 点击管理`,
connectionRemoteTooltip: host => `已连接到远程后端 ${host} · 点击管理`,
connectionCloudTooltip: host => `Hermes Cloud · ${host}`,
connectionSshTooltip: host => `SSH · ${host}`,
connectionRemoteTooltip: host => `Remote · ${host}`,
backendLabel: version => `后端 v${version}`,
commit: sha => `提交 ${sha}`,
branch: branch => `分支 ${branch}`,
@ -2598,7 +2597,7 @@ export const zh: Translations = {
gatewayConnecting: '连接中',
gatewayOffline: '离线',
gatewayRestarting: '重启中…',
gatewayTitle: 'Hermes 推理网关状态',
gatewayTitle: '网关',
customizeTitle: '在状态栏中显示',
hideStatusbar: '隐藏状态栏',
toggleApprovalMode: '审批',
@ -2623,7 +2622,6 @@ export const zh: Translations = {
starmap: '记忆图谱',
openStarmap: '打开记忆图谱',
turnRunning: '运行中',
currentTurnElapsed: '当前回合已用时间',
contextUsage: '上下文用量',
contextUsagePanel: {
categories: {
@ -2642,11 +2640,9 @@ export const zh: Translations = {
title: '上下文用量',
tokenSummary: (used, max) => `${used} / ${max} Tokens`
},
openContextUsage: '打开上下文用量明细',
session: '会话',
runtimeSessionElapsed: '运行时会话已用时间',
yoloOn: 'YOLO 已开启 - 自动批准危险命令。点击关闭。Shift+点击可全局切换。',
yoloOff: 'YOLO 已关闭 - 点击自动批准危险命令。Shift+点击可全局切换。',
yoloOn: 'YOLO 已开启 — 自动批准危险命令。Shift+点击可全局切换。',
yoloOff: 'YOLO 已关闭。Shift+点击可全局切换。',
modelNone: '无',
noModel: '无模型',
switchModel: '切换模型',
@ -2667,7 +2663,7 @@ export const zh: Translations = {
remotePickerTitle: '选择远程文件夹',
remotePickerDescription: '浏览已连接后端上的文件夹。',
remotePickerSelect: '选择文件夹',
folderTip: cwd => `${cwd} — 点击更改文件夹`,
folderTip: cwd => cwd,
openFolder: '打开文件夹',
refreshTree: '刷新文件树',
collapseAll: '折叠所有文件夹',