i18n(desktop): add project and worktree strings

This commit is contained in:
Brooklyn Nicholson 2026-06-25 16:40:27 -05:00
parent b8d220f268
commit a391523bcc
5 changed files with 661 additions and 18 deletions

View file

@ -42,6 +42,22 @@ export const en: Translations = {
off: 'Off'
},
fileMenu: {
revealFinder: 'Reveal in Finder',
revealExplorer: 'Reveal in File Explorer',
revealFileManager: 'Open Containing Folder',
revealInSidebar: 'Reveal in filetree',
copyPath: 'Copy Path',
copyRelativePath: 'Copy Relative Path',
rename: 'Rename…',
delete: 'Delete',
renameTitle: 'Rename',
renameLabel: 'New name',
deleteTitle: name => `Delete ${name}?`,
deleteBody: 'It will be moved to the Trash — you can restore it from there.',
pathCopied: 'Path copied'
},
boot: {
ready: 'Hermes Desktop is ready',
desktopBootFailedWithMessage: message => `Desktop boot failed: ${message}`,
@ -210,11 +226,13 @@ export const en: Translations = {
'session.slot.9': 'Switch to recent session 9',
'session.focusSearch': 'Search sessions',
'session.togglePin': 'Pin / unpin current session',
'workspace.newWorktree': 'New worktree',
'composer.focus': 'Focus composer',
'composer.modelPicker': 'Open model picker',
'composer.voice': 'Start / stop voice conversation',
'view.toggleSidebar': 'Toggle sessions sidebar',
'view.toggleRightSidebar': 'Toggle file browser',
'view.toggleReview': 'Toggle review pane',
'view.showFiles': 'Show file browser',
'view.showTerminal': 'Show terminal',
'view.terminalSelection': 'Send terminal selection to composer',
@ -759,6 +777,8 @@ export const en: Translations = {
searchPlaceholder: 'Search sessions, views, and actions',
goTo: 'Go to',
goToSession: 'Go to session',
branches: 'Branches',
startInBranch: branch => `New conversation in ${branch}`,
commandCenter: 'Command Center',
appearance: 'Appearance',
settings: 'Settings',
@ -1254,13 +1274,73 @@ export const en: Translations = {
cronJobs: 'Cron jobs',
groupAriaGrouped: 'Show sessions as a single list',
groupAriaUngrouped: 'Group sessions by workspace',
showProjects: 'Show projects',
showSessions: 'Show sessions',
groupTitleGrouped: 'Ungroup sessions',
groupTitleUngrouped: 'Group by workspace',
allPinned: 'Everything here is pinned. Unpin a chat to show it in recents.',
shiftClickHint: 'Shift-click a chat to pin',
noWorkspace: 'No workspace',
noProject: 'No project',
projectEmpty: 'No sessions yet',
noSessions: 'No sessions yet',
projects: {
sectionLabel: 'Projects',
newButton: 'New project',
createTitle: 'New project',
createDesc: 'Name a workspace and add one or more folders.',
renameTitle: 'Rename project',
addFolderTitle: 'Add folder',
namePlaceholder: 'e.g. Skunkworks',
foldersLabel: 'Folders',
ideaLabel: 'Idea',
ideaPlaceholder: "What's this project about? (saved to IDEA.md)",
ideaGenerate: 'Generate idea',
ideaGenerating: 'Generating…',
ideaShuffle: 'Shuffle templates',
noFolders: 'No folders added yet.',
addFolder: 'Add folder',
primaryBadge: 'primary',
removeFolder: 'Remove',
create: 'Create',
menu: 'Project actions',
menuRename: 'Rename',
menuAppearance: 'Appearance',
noColor: 'No color',
menuAddFolder: 'Add folder',
menuSetActive: 'Set active',
menuDelete: 'Delete',
reveal: 'Reveal in folder',
copyPath: 'Copy path',
removeFromSidebar: 'Hide from sidebar',
createFailed: 'Could not create project',
deleteConfirm: 'This removes the saved project from Hermes. Files, git repos, and worktrees stay untouched.',
startWork: 'New worktree',
newWorktreeTitle: 'New worktree',
newWorktreeDesc: 'Name the branch for this worktree.',
branchPlaceholder: 'e.g. my-feature',
startWorkFailed: 'Could not create worktree',
convertBranch: 'Convert a branch…',
convertBranchTitle: 'Convert a branch',
convertBranchDesc: 'Check an existing branch out into a new worktree.',
convertBranchPlaceholder: 'Search branches…',
convertBranchInstead: 'Convert an existing branch',
branchCheckedOut: 'checked out',
branchesLoading: 'Loading branches…',
noBranches: 'No branches found',
removeWorktree: 'Remove worktree',
removeWorktreeFailed: 'Could not remove worktree (uncommitted changes?)',
removeWorktreeConfirm:
'Remove it from git (deletes the worktree directory; the branch stays), or just hide the lane from the sidebar and leave the worktree on disk.',
removeWorktreeDirty:
'This worktree has uncommitted changes. Force-remove it (discards those changes), or just hide the lane and keep it on disk.',
forceRemove: 'Force remove',
enter: label => `Open ${label}`,
reorder: label => `Reorder ${label}`,
toggle: label => `Toggle ${label} sessions`,
back: 'All projects'
},
newSessionIn: label => `New session in ${label}`,
reorderWorkspace: label => `Reorder workspace ${label}`,
showMoreIn: (count, label) => `Show ${count} more in ${label}`,
loading: 'Loading…',
loadMore: 'Load more',
@ -1270,6 +1350,7 @@ export const en: Translations = {
unpin: 'Unpin',
copyId: 'Copy ID',
export: 'Export',
branchFrom: 'Branch',
rename: 'Rename',
archive: 'Archive',
newWindow: 'New window',
@ -1429,7 +1510,51 @@ export const en: Translations = {
running: 'Running',
stop: 'Stop',
dismiss: 'Dismiss',
exit: code => `exit ${code}`
exit: code => `exit ${code}`,
coding: {
title: 'Working tree',
noBranch: 'No branch',
detached: 'detached',
clean: 'Clean',
changed: count => `${count} changed`,
ahead: count => `${count} ahead`,
behind: count => `${count} behind`,
review: 'Review',
close: 'Close',
openChanges: 'Open Changes',
openFile: 'Open File',
stage: 'Stage',
unstage: 'Unstage',
stageAll: 'Stage all',
viewAsTree: 'View as tree',
viewAsList: 'View as list',
revert: 'Revert',
revertAll: 'Revert all',
revertConfirm: 'Discard changes to this file and restore it to the committed state? This cannot be undone.',
revertAllConfirm: 'Discard every change and restore files to the committed state? This cannot be undone.',
staged: 'Staged',
noChanges: 'No changes',
notRepo: 'Not a git repository',
noDiff: 'No diff to show',
scopeUncommitted: 'Uncommitted',
scopeBranch: 'Branch',
scopeLastTurn: 'Last turn',
commit: 'Commit',
commitAndPush: 'Commit & Push',
commitPlaceholder: 'Message (⌘↵ to commit)',
generateCommitMessage: 'Generate commit message',
stopGenerating: 'Stop generating',
createPr: 'Create PR',
openPr: 'Open PR',
ghMissing: 'Install the GitHub CLI (gh) and sign in to open PRs',
agentShip: 'Ask Hermes to open PR',
agentShipPrompt: 'Review the current changes, commit them with a clear conventional-commit message, push the branch, and open a pull request.',
newBranch: 'New branch',
branchOffFrom: base => `New branch from ${base}`,
switchTo: branch => `Switch to ${branch}`,
switchFailed: branch => `Could not switch to ${branch}`,
worktrees: 'Worktrees'
}
},
updates: {
@ -1732,7 +1857,9 @@ export const en: Translations = {
previewUnavailable: 'Preview unavailable',
couldNotPreview: path => `Could not preview ${path}`,
noProjectTitle: 'No project',
noProjectBody: 'Set a working directory from the status bar to browse files.',
noProjectBody: 'Open a project to browse its files and review changes.',
noProjectOpen: 'No project open',
noDiffs: 'No diffs',
unreadableTitle: 'Unreadable',
unreadableBody: error => `Could not read this folder (${error}).`,
emptyTitle: 'Empty',
@ -1749,6 +1876,9 @@ export const en: Translations = {
preview: {
tab: 'Preview',
closeTab: label => `Close ${label}`,
closeOthers: 'Close others',
closeToRight: 'Close to the right',
closeAll: 'Close all',
closePane: 'Close preview pane',
loading: 'Loading preview',
unavailable: 'Preview unavailable',
@ -1756,9 +1886,11 @@ export const en: Translations = {
hide: 'Hide',
openPreview: 'Open preview',
openInBrowser: 'Open in browser',
linkHint: '⌘/Ctrl-click for preview pane',
sourceLineTitle: 'Click to select · shift-click to extend · drag to composer',
source: 'SOURCE',
renderedPreview: 'PREVIEW',
diff: 'DIFF',
unknownSize: 'unknown size',
binaryTitle: 'This looks like a binary file',
binaryBody: label => `Previewing ${label} may show unreadable text.`,
@ -2018,7 +2150,7 @@ export const en: Translations = {
sessionBusy: 'Session busy',
branchStopCurrent: 'Stop the current turn before branching this chat.',
branchNoText: 'This message has no text to branch from.',
branchTitle: 'Branch',
branchTitle: n => `Draft: Branch #${n}`,
branchFailed: 'Branch failed',
deleteFailed: 'Delete failed',
archived: 'Archived',

View file

@ -42,6 +42,22 @@ export const ja = defineLocale({
off: 'オフ'
},
fileMenu: {
revealFinder: 'Finder で表示',
revealExplorer: 'エクスプローラーで表示',
revealFileManager: '格納フォルダーを開く',
revealInSidebar: 'ファイルツリーで表示',
copyPath: 'パスをコピー',
copyRelativePath: '相対パスをコピー',
rename: '名前を変更…',
delete: '削除',
renameTitle: '名前を変更',
renameLabel: '新しい名前',
deleteTitle: name => `${name} を削除しますか?`,
deleteBody: 'ゴミ箱に移動します。そこから復元できます。',
pathCopied: 'パスをコピーしました'
},
boot: {
ready: 'Hermes Desktop の準備ができました',
desktopBootFailedWithMessage: message => `デスクトップの起動に失敗しました: ${message}`,
@ -877,6 +893,8 @@ export const ja = defineLocale({
searchPlaceholder: 'セッション、ビュー、アクションを検索',
goTo: '移動',
goToSession: 'セッションへ移動',
branches: 'ブランチ',
startInBranch: branch => `${branch} で新しい会話`,
commandCenter: 'コマンドセンター',
appearance: '外観',
settings: '設定',
@ -1380,13 +1398,70 @@ export const ja = defineLocale({
cronJobs: 'Cronジョブ',
groupAriaGrouped: 'セッションを単一リストとして表示',
groupAriaUngrouped: 'ワークスペースごとにセッションをグループ化',
showProjects: 'プロジェクトを表示',
showSessions: 'セッションを表示',
groupTitleGrouped: 'セッションのグループ化を解除',
groupTitleUngrouped: 'ワークスペースでグループ化',
allPinned: 'ここにあるものはすべてピン留めされています。チャットのピン留めを解除すると最近のものに表示されます。',
shiftClickHint: 'Shift クリックでピン留め · ドラッグで並べ替え',
noWorkspace: 'ワークスペースなし',
noProject: 'プロジェクトなし',
projectEmpty: 'セッションはまだありません',
noSessions: 'セッションはまだありません',
projects: {
sectionLabel: 'プロジェクト',
newButton: '新規プロジェクト',
createTitle: '新規プロジェクト',
createDesc: 'ワークスペースに名前を付け、1つ以上のフォルダを追加します。',
renameTitle: 'プロジェクト名を変更',
addFolderTitle: 'フォルダを追加',
namePlaceholder: '例: Skunkworks',
foldersLabel: 'フォルダ',
ideaLabel: 'アイデア',
ideaPlaceholder: 'このプロジェクトは何ですかIDEA.md に保存)',
ideaGenerate: 'アイデアを生成',
ideaGenerating: '生成中…',
ideaShuffle: 'テンプレートをシャッフル',
noFolders: 'まだフォルダがありません。',
addFolder: 'フォルダを追加',
primaryBadge: 'メイン',
removeFolder: '削除',
create: '作成',
menu: 'プロジェクト操作',
menuRename: '名前を変更',
menuAppearance: '外観',
noColor: '色なし',
menuAddFolder: 'フォルダを追加',
menuSetActive: 'アクティブに設定',
menuDelete: '削除',
reveal: 'フォルダで表示',
copyPath: 'パスをコピー',
removeFromSidebar: 'サイドバーから削除',
createFailed: 'プロジェクトを作成できませんでした',
deleteConfirm: 'Hermes から保存済みプロジェクトを削除します。ファイル・git リポジトリ・ワークツリーはそのまま残ります。',
startWork: '新しいワークツリー',
newWorktreeTitle: '新しいワークツリー',
newWorktreeDesc: 'このワークツリーのブランチ名を入力してください。',
branchPlaceholder: '例: my-feature',
startWorkFailed: 'ワークツリーを作成できませんでした',
convertBranch: 'ブランチを変換…',
convertBranchTitle: 'ブランチを変換',
convertBranchDesc: '既存のブランチを新しいワークツリーにチェックアウトします。',
convertBranchPlaceholder: 'ブランチを検索…',
convertBranchInstead: '既存のブランチを変換',
branchCheckedOut: 'チェックアウト済み',
branchesLoading: 'ブランチを読み込み中…',
noBranches: 'ブランチが見つかりません',
removeWorktree: 'ワークツリーを削除',
removeWorktreeFailed: 'ワークツリーを削除できませんでした(コミットされていない変更?)',
removeWorktreeConfirm:
'git から削除(ワークツリーのディレクトリを削除しますが、ブランチは残ります)するか、サイドバーからレーンを隠してワークツリーをディスク上に残します。',
removeWorktreeDirty:
'このワークツリーにはコミットされていない変更があります。強制削除(変更を破棄)するか、レーンを隠してディスク上に残します。',
forceRemove: '強制削除',
enter: label => `${label} を開く`
},
newSessionIn: label => `${label} で新しいセッション`,
reorderWorkspace: label => `ワークスペース ${label} を並べ替え`,
showMoreIn: (count, label) => `${label} でさらに ${count} 件を表示`,
loading: '読み込み中…',
loadMore: 'さらに読み込む',
@ -1396,6 +1471,7 @@ export const ja = defineLocale({
unpin: 'ピン留めを解除',
copyId: 'ID をコピー',
export: 'エクスポート',
branchFrom: '分岐',
rename: '名前を変更',
archive: 'アーカイブ',
newWindow: '新しいウィンドウ',
@ -1555,7 +1631,52 @@ export const ja = defineLocale({
running: '実行中',
stop: '停止',
dismiss: '閉じる',
exit: code => `終了コード ${code}`
exit: code => `終了コード ${code}`,
coding: {
title: 'ワークツリー',
noBranch: 'ブランチなし',
detached: 'デタッチ',
clean: 'クリーン',
changed: count => `${count} 件変更`,
ahead: count => `${count} 先行`,
behind: count => `${count} 遅延`,
review: 'レビュー',
close: '閉じる',
openChanges: '変更を開く',
openFile: 'ファイルを開く',
stage: 'ステージ',
unstage: 'ステージ解除',
stageAll: 'すべてステージ',
viewAsTree: 'ツリー表示',
viewAsList: 'リスト表示',
revert: '取り消し',
revertAll: 'すべて取り消し',
revertConfirm: 'このファイルの変更を破棄してコミット済みの状態に戻しますか?この操作は元に戻せません。',
revertAllConfirm: 'すべての変更を破棄してコミット済みの状態に戻しますか?この操作は元に戻せません。',
staged: 'ステージ済み',
noChanges: '変更なし',
notRepo: 'Git リポジトリではありません',
noDiff: '表示する差分がありません',
scopeUncommitted: '未コミット',
scopeBranch: 'ブランチ',
scopeLastTurn: '前のターン',
commit: 'コミット',
commitAndPush: 'コミットしてプッシュ',
commitPlaceholder: 'メッセージ(⌘↵ でコミット)',
generateCommitMessage: 'コミットメッセージを生成',
stopGenerating: '生成を停止',
createPr: 'PR を作成',
openPr: 'PR を開く',
ghMissing: 'PR を開くには GitHub CLI (gh) をインストールしてサインインしてください',
agentShip: 'Hermes にコミットと PR を任せる',
agentShipPrompt:
'現在の変更を確認し、分かりやすい Conventional Commits 形式でコミットし、ブランチをプッシュして、プルリクエストを作成してください。',
newBranch: '新しいブランチ',
branchOffFrom: base => `${base} から新しいブランチ`,
switchTo: branch => `${branch} に切り替え`,
switchFailed: branch => `${branch} に切り替えできませんでした`,
worktrees: 'ワークツリー'
}
},
updates: {
@ -1860,7 +1981,9 @@ export const ja = defineLocale({
previewUnavailable: 'プレビューは利用できません',
couldNotPreview: path => `${path} をプレビューできませんでした`,
noProjectTitle: 'プロジェクトなし',
noProjectBody: 'ステータスバーから作業ディレクトリを設定してファイルを閲覧してください。',
noProjectBody: 'プロジェクトを開くと、ファイルの閲覧と変更の確認ができます。',
noProjectOpen: 'プロジェクト未選択',
noDiffs: '差分なし',
unreadableTitle: '読み取り不可',
unreadableBody: error => `このフォルダーを読み取れませんでした (${error})。`,
emptyTitle: '空',
@ -1877,6 +2000,9 @@ export const ja = defineLocale({
preview: {
tab: 'プレビュー',
closeTab: label => `${label} を閉じる`,
closeOthers: '他を閉じる',
closeToRight: '右側を閉じる',
closeAll: 'すべて閉じる',
closePane: 'プレビューペインを閉じる',
loading: 'プレビューを読み込み中',
unavailable: 'プレビューは利用できません',
@ -1884,9 +2010,11 @@ export const ja = defineLocale({
hide: '非表示',
openPreview: 'プレビューを開く',
openInBrowser: 'ブラウザで開く',
linkHint: '⌘/Ctrl+クリックでプレビューペイン',
sourceLineTitle: 'クリックして選択 · Shift クリックで拡張 · コンポーザーにドラッグ',
source: 'ソース',
renderedPreview: 'プレビュー',
diff: '差分',
unknownSize: 'サイズ不明',
binaryTitle: 'これはバイナリファイルのようです',
binaryBody: label => `${label} をプレビューすると読み取り不能なテキストが表示される場合があります。`,
@ -2162,7 +2290,7 @@ export const ja = defineLocale({
sessionBusy: 'セッションが使用中',
branchStopCurrent: 'このチャットをブランチする前に現在のターンを停止してください。',
branchNoText: 'このメッセージにはブランチするテキストがありません。',
branchTitle: 'ブランチ',
branchTitle: n => `下書き: ブランチ #${n}`,
branchFailed: 'ブランチに失敗しました',
deleteFailed: '削除に失敗しました',
archived: 'アーカイブしました',

View file

@ -87,6 +87,22 @@ export interface Translations {
off: string
}
fileMenu: {
revealFinder: string
revealExplorer: string
revealFileManager: string
revealInSidebar: string
copyPath: string
copyRelativePath: string
rename: string
delete: string
renameTitle: string
renameLabel: string
deleteTitle: (name: string) => string
deleteBody: string
pathCopied: string
}
boot: {
ready: string
desktopBootFailedWithMessage: (message: string) => string
@ -663,6 +679,8 @@ export interface Translations {
searchPlaceholder: string
goTo: string
goToSession: string
branches: string
startInBranch: (branch: string) => string
commandCenter: string
appearance: string
settings: string
@ -1007,13 +1025,71 @@ export interface Translations {
cronJobs: string
groupAriaGrouped: string
groupAriaUngrouped: string
showProjects: string
showSessions: string
groupTitleGrouped: string
groupTitleUngrouped: string
allPinned: string
shiftClickHint: string
noWorkspace: string
noProject: string
projectEmpty: string
noSessions: string
projects: {
sectionLabel: string
newButton: string
createTitle: string
createDesc: string
renameTitle: string
addFolderTitle: string
namePlaceholder: string
foldersLabel: string
ideaLabel: string
ideaPlaceholder: string
ideaGenerate: string
ideaGenerating: string
ideaShuffle: string
noFolders: string
addFolder: string
primaryBadge: string
removeFolder: string
create: string
menu: string
menuRename: string
menuAppearance: string
noColor: string
menuAddFolder: string
menuSetActive: string
menuDelete: string
reveal: string
copyPath: string
removeFromSidebar: string
createFailed: string
deleteConfirm: string
startWork: string
newWorktreeTitle: string
newWorktreeDesc: string
branchPlaceholder: string
startWorkFailed: string
convertBranch: string
convertBranchTitle: string
convertBranchDesc: string
convertBranchPlaceholder: string
convertBranchInstead: string
branchCheckedOut: string
branchesLoading: string
noBranches: string
removeWorktree: string
removeWorktreeFailed: string
removeWorktreeConfirm: string
removeWorktreeDirty: string
forceRemove: string
enter: (label: string) => string
reorder: (label: string) => string
toggle: (label: string) => string
back: string
}
newSessionIn: (label: string) => string
reorderWorkspace: (label: string) => string
showMoreIn: (count: number, label: string) => string
loading: string
loadMore: string
@ -1023,6 +1099,7 @@ export interface Translations {
unpin: string
copyId: string
export: string
branchFrom: string
rename: string
archive: string
newWindow: string
@ -1135,6 +1212,50 @@ export interface Translations {
stop: string
dismiss: string
exit: (code: number) => string
coding: {
title: string
noBranch: string
detached: string
clean: string
changed: (count: number) => string
ahead: (count: number) => string
behind: (count: number) => string
review: string
close: string
openChanges: string
openFile: string
stage: string
unstage: string
stageAll: string
viewAsTree: string
viewAsList: string
revert: string
revertAll: string
revertConfirm: string
revertAllConfirm: string
staged: string
noChanges: string
notRepo: string
noDiff: string
scopeUncommitted: string
scopeBranch: string
scopeLastTurn: string
commit: string
commitAndPush: string
commitPlaceholder: string
generateCommitMessage: string
stopGenerating: string
createPr: string
openPr: string
ghMissing: string
agentShip: string
agentShipPrompt: string
newBranch: string
branchOffFrom: (base: string) => string
switchTo: (branch: string) => string
switchFailed: (branch: string) => string
worktrees: string
}
}
updates: {
@ -1396,6 +1517,8 @@ export interface Translations {
couldNotPreview: (path: string) => string
noProjectTitle: string
noProjectBody: string
noProjectOpen: string
noDiffs: string
unreadableTitle: string
unreadableBody: (error: string) => string
emptyTitle: string
@ -1412,6 +1535,9 @@ export interface Translations {
preview: {
tab: string
closeTab: (label: string) => string
closeOthers: string
closeToRight: string
closeAll: string
closePane: string
loading: string
unavailable: string
@ -1419,9 +1545,11 @@ export interface Translations {
hide: string
openPreview: string
openInBrowser: string
linkHint: string
sourceLineTitle: string
source: string
renderedPreview: string
diff: string
unknownSize: string
binaryTitle: string
binaryBody: (label: string) => string
@ -1640,7 +1768,7 @@ export interface Translations {
sessionBusy: string
branchStopCurrent: string
branchNoText: string
branchTitle: string
branchTitle: (n: number) => string
branchFailed: string
deleteFailed: string
archived: string

View file

@ -42,6 +42,22 @@ export const zhHant = defineLocale({
off: '關閉'
},
fileMenu: {
revealFinder: '在 Finder 中顯示',
revealExplorer: '在檔案總管中顯示',
revealFileManager: '開啟所在資料夾',
revealInSidebar: '在檔案樹中顯示',
copyPath: '複製路徑',
copyRelativePath: '複製相對路徑',
rename: '重新命名…',
delete: '刪除',
renameTitle: '重新命名',
renameLabel: '新名稱',
deleteTitle: name => `刪除 ${name}`,
deleteBody: '將移至垃圾桶,你可以從那裡還原。',
pathCopied: '已複製路徑'
},
boot: {
ready: 'Hermes Desktop 已就緒',
desktopBootFailedWithMessage: message => `桌面啟動失敗:${message}`,
@ -849,6 +865,8 @@ export const zhHant = defineLocale({
searchPlaceholder: '搜尋工作階段、檢視和動作',
goTo: '前往',
goToSession: '前往工作階段',
branches: '分支',
startInBranch: branch => `${branch} 中開始新對話`,
commandCenter: '命令中心',
appearance: '外觀',
settings: '設定',
@ -1333,13 +1351,68 @@ export const zhHant = defineLocale({
cronJobs: '排程任務',
groupAriaGrouped: '以單一清單顯示工作階段',
groupAriaUngrouped: '依工作區分組工作階段',
showProjects: '顯示專案',
showSessions: '顯示工作階段',
groupTitleGrouped: '取消分組',
groupTitleUngrouped: '依工作區分組',
allPinned: '這裡的全部已釘選。取消釘選某個聊天即可在最近中顯示。',
shiftClickHint: 'Shift + 點擊聊天以釘選 · 拖曳以重新排序',
noWorkspace: '無工作區',
noProject: '無專案',
projectEmpty: '尚無工作階段',
noSessions: '尚無工作階段',
projects: {
sectionLabel: '專案',
newButton: '新增專案',
createTitle: '新增專案',
createDesc: '為工作區命名並新增一個或多個資料夾。',
renameTitle: '重新命名專案',
addFolderTitle: '新增資料夾',
namePlaceholder: '例如 Skunkworks',
foldersLabel: '資料夾',
ideaLabel: '想法',
ideaPlaceholder: '這個專案是關於什麼的?(儲存到 IDEA.md',
ideaGenerate: '產生想法',
ideaGenerating: '產生中…',
ideaShuffle: '隨機範本',
noFolders: '尚未新增資料夾。',
addFolder: '新增資料夾',
primaryBadge: '主要',
removeFolder: '移除',
create: '建立',
menu: '專案操作',
menuRename: '重新命名',
menuAppearance: '外觀',
noColor: '無顏色',
menuAddFolder: '新增資料夾',
menuSetActive: '設為使用中',
menuDelete: '刪除',
reveal: '在資料夾中顯示',
copyPath: '複製路徑',
removeFromSidebar: '從側邊欄移除',
createFailed: '無法建立專案',
deleteConfirm: '這會從 Hermes 中移除已儲存的專案。檔案、git 儲存庫和工作樹維持不變。',
startWork: '新增工作樹',
newWorktreeTitle: '新增工作樹',
newWorktreeDesc: '為這個工作樹命名分支。',
branchPlaceholder: '例如 my-feature',
startWorkFailed: '無法建立工作樹',
convertBranch: '轉換分支…',
convertBranchTitle: '轉換分支',
convertBranchDesc: '將現有分支簽出到新的工作樹。',
convertBranchPlaceholder: '搜尋分支…',
convertBranchInstead: '轉換現有分支',
branchCheckedOut: '已簽出',
branchesLoading: '正在載入分支…',
noBranches: '找不到分支',
removeWorktree: '移除工作樹',
removeWorktreeFailed: '無法移除工作樹(有未提交的變更?)',
removeWorktreeConfirm: '從 git 中移除(刪除工作樹目錄,但保留分支),或僅從側邊欄隱藏該軌道並將工作樹保留在磁碟上。',
removeWorktreeDirty: '此工作樹有未提交的變更。強制移除(捨棄這些變更),或僅隱藏軌道並保留在磁碟上。',
forceRemove: '強制移除',
enter: label => `開啟 ${label}`
},
newSessionIn: label => `${label} 中新建工作階段`,
reorderWorkspace: label => `重新排序工作區 ${label}`,
showMoreIn: (count, label) => `${label} 中再顯示 ${count}`,
loading: '載入中…',
loadMore: '載入更多',
@ -1349,6 +1422,7 @@ export const zhHant = defineLocale({
unpin: '取消釘選',
copyId: '複製 ID',
export: '匯出',
branchFrom: '分支',
rename: '重新命名',
archive: '封存',
newWindow: '新視窗',
@ -1507,7 +1581,51 @@ export const zhHant = defineLocale({
running: '執行中',
stop: '停止',
dismiss: '關閉',
exit: code => `結束碼 ${code}`
exit: code => `結束碼 ${code}`,
coding: {
title: '工作區',
noBranch: '無分支',
detached: '分離 HEAD',
clean: '乾淨',
changed: count => `${count} 處變更`,
ahead: count => `領先 ${count}`,
behind: count => `落後 ${count}`,
review: '審查',
close: '關閉',
openChanges: '開啟變更',
openFile: '開啟檔案',
stage: '暫存',
unstage: '取消暫存',
stageAll: '全部暫存',
viewAsTree: '樹狀檢視',
viewAsList: '清單檢視',
revert: '還原',
revertAll: '全部還原',
revertConfirm: '捨棄對此檔案的變更並將其還原至已提交狀態?此操作無法復原。',
revertAllConfirm: '捨棄所有變更並將檔案還原至已提交狀態?此操作無法復原。',
staged: '已暫存',
noChanges: '沒有變更',
notRepo: '不是 Git 儲存庫',
noDiff: '沒有可顯示的差異',
scopeUncommitted: '未提交',
scopeBranch: '分支',
scopeLastTurn: '上一輪',
commit: '提交',
commitAndPush: '提交並推送',
commitPlaceholder: '訊息(⌘↵ 提交)',
generateCommitMessage: '產生提交訊息',
stopGenerating: '停止產生',
createPr: '建立 PR',
openPr: '開啟 PR',
ghMissing: '安裝 GitHub CLI (gh) 並登入後可開啟 PR',
agentShip: '讓 Hermes 提交並開 PR',
agentShipPrompt: '檢查目前的變更,使用清晰的約定式提交訊息提交,推送分支,並開啟一個拉取請求。',
newBranch: '新增分支',
branchOffFrom: base => `${base} 建立新分支`,
switchTo: branch => `切換到 ${branch}`,
switchFailed: branch => `無法切換到 ${branch}`,
worktrees: '工作樹'
}
},
updates: {
@ -1802,7 +1920,9 @@ export const zhHant = defineLocale({
previewUnavailable: '預覽不可用',
couldNotPreview: path => `無法預覽 ${path}`,
noProjectTitle: '沒有專案',
noProjectBody: '從狀態列設定工作目錄後即可瀏覽檔案。',
noProjectBody: '開啟一個專案以瀏覽檔案並檢視變更。',
noProjectOpen: '未開啟專案',
noDiffs: '無差異',
unreadableTitle: '無法讀取',
unreadableBody: error => `無法讀取此資料夾 (${error})。`,
emptyTitle: '空資料夾',
@ -1819,6 +1939,9 @@ export const zhHant = defineLocale({
preview: {
tab: '預覽',
closeTab: label => `關閉 ${label}`,
closeOthers: '關閉其他',
closeToRight: '關閉右側',
closeAll: '全部關閉',
closePane: '關閉預覽窗格',
loading: '正在載入預覽',
unavailable: '預覽不可用',
@ -1826,9 +1949,11 @@ export const zhHant = defineLocale({
hide: '隱藏',
openPreview: '開啟預覽',
openInBrowser: '在瀏覽器中開啟',
linkHint: '⌘/Ctrl+點擊在預覽窗格開啟',
sourceLineTitle: '點擊選取 · shift 點擊擴展 · 拖曳至輸入框',
source: '原始碼',
renderedPreview: '預覽',
diff: '差異',
unknownSize: '大小未知',
binaryTitle: '這看起來像二進位檔案',
binaryBody: label => `預覽 ${label} 可能會顯示無法讀取的文字。`,
@ -2075,7 +2200,7 @@ export const zhHant = defineLocale({
sessionBusy: '工作階段忙碌中',
branchStopCurrent: '分支此聊天前請先停止目前回合。',
branchNoText: '此訊息沒有可用於分支的文字。',
branchTitle: '分支',
branchTitle: n => `草稿:分支 #${n}`,
branchFailed: '分支失敗',
deleteFailed: '刪除失敗',
archived: '已封存',

View file

@ -42,6 +42,22 @@ export const zh: Translations = {
off: '关'
},
fileMenu: {
revealFinder: '在访达中显示',
revealExplorer: '在文件资源管理器中显示',
revealFileManager: '打开所在文件夹',
revealInSidebar: '在文件树中显示',
copyPath: '复制路径',
copyRelativePath: '复制相对路径',
rename: '重命名…',
delete: '删除',
renameTitle: '重命名',
renameLabel: '新名称',
deleteTitle: name => `删除 ${name}`,
deleteBody: '将移至废纸篓,你可以从那里恢复。',
pathCopied: '已复制路径'
},
boot: {
ready: 'Hermes 桌面版已就绪',
desktopBootFailedWithMessage: message => `桌面启动失败:${message}`,
@ -205,11 +221,13 @@ export const zh: Translations = {
'session.slot.9': '切换到最近会话 9',
'session.focusSearch': '搜索会话',
'session.togglePin': '固定/取消固定当前会话',
'workspace.newWorktree': '新建工作树',
'composer.focus': '聚焦输入框',
'composer.modelPicker': '打开模型选择器',
'composer.voice': '开始 / 停止语音对话',
'view.toggleSidebar': '切换会话侧边栏',
'view.toggleRightSidebar': '切换文件浏览器',
'view.toggleReview': '切换审查面板',
'view.showFiles': '显示文件浏览器',
'view.showTerminal': '显示终端',
'view.terminalSelection': '将终端选区发送到输入框',
@ -947,6 +965,8 @@ export const zh: Translations = {
searchPlaceholder: '搜索会话、视图与操作',
goTo: '前往',
goToSession: '前往会话',
branches: '分支',
startInBranch: branch => `${branch} 中开始新对话`,
commandCenter: '命令中心',
appearance: '外观',
settings: '设置',
@ -1438,13 +1458,71 @@ export const zh: Translations = {
cronJobs: '定时任务',
groupAriaGrouped: '以单一列表显示会话',
groupAriaUngrouped: '按工作区分组会话',
showProjects: '显示项目',
showSessions: '显示会话',
groupTitleGrouped: '取消分组',
groupTitleUngrouped: '按工作区分组',
allPinned: '这里的全部已置顶。取消置顶某个对话即可在最近中显示。',
shiftClickHint: 'Shift+ 单击对话以置顶 · 拖动以重新排序',
noWorkspace: '无工作区',
noProject: '无项目',
projectEmpty: '暂无会话',
noSessions: '暂无会话',
projects: {
sectionLabel: '项目',
newButton: '新建项目',
createTitle: '新建项目',
createDesc: '为工作区命名并添加一个或多个文件夹。',
renameTitle: '重命名项目',
addFolderTitle: '添加文件夹',
namePlaceholder: '例如 Skunkworks',
foldersLabel: '文件夹',
ideaLabel: '想法',
ideaPlaceholder: '这个项目是关于什么的?(保存到 IDEA.md',
ideaGenerate: '生成想法',
ideaGenerating: '生成中…',
ideaShuffle: '随机模板',
noFolders: '尚未添加文件夹。',
addFolder: '添加文件夹',
primaryBadge: '主',
removeFolder: '移除',
create: '创建',
menu: '项目操作',
menuRename: '重命名',
menuAppearance: '外观',
noColor: '无颜色',
menuAddFolder: '添加文件夹',
menuSetActive: '设为活动',
menuDelete: '删除',
reveal: '在文件夹中显示',
copyPath: '复制路径',
removeFromSidebar: '从侧边栏移除',
createFailed: '无法创建项目',
deleteConfirm: '这会从 Hermes 中移除已保存的项目。文件、git 仓库和工作树保持不变。',
startWork: '新建工作树',
newWorktreeTitle: '新建工作树',
newWorktreeDesc: '为这个工作树命名分支。',
branchPlaceholder: '例如 my-feature',
startWorkFailed: '无法创建工作树',
convertBranch: '转换分支…',
convertBranchTitle: '转换分支',
convertBranchDesc: '将现有分支检出到新的工作树。',
convertBranchPlaceholder: '搜索分支…',
convertBranchInstead: '转换现有分支',
branchCheckedOut: '已检出',
branchesLoading: '正在加载分支…',
noBranches: '未找到分支',
removeWorktree: '移除工作树',
removeWorktreeFailed: '无法移除工作树(存在未提交更改?)',
removeWorktreeConfirm: '从 git 中移除(删除工作树目录,但保留分支),或仅从侧边栏隐藏该泳道并将工作树保留在磁盘上。',
removeWorktreeDirty: '此工作树有未提交的更改。强制移除(丢弃这些更改),或仅隐藏泳道并保留在磁盘上。',
forceRemove: '强制移除',
enter: label => `打开 ${label}`,
reorder: label => `重新排序 ${label}`,
toggle: label => `展开/收起 ${label} 会话`,
back: '全部项目'
},
newSessionIn: label => `${label} 中新建会话`,
reorderWorkspace: label => `重新排序工作区 ${label}`,
showMoreIn: (count, label) => `${label} 中再显示 ${count}`,
loading: '加载中…',
loadMore: '加载更多',
@ -1454,6 +1532,7 @@ export const zh: Translations = {
unpin: '取消置顶',
copyId: '复制 ID',
export: '导出',
branchFrom: '分支',
rename: '重命名',
archive: '归档',
newWindow: '新窗口',
@ -1613,7 +1692,51 @@ export const zh: Translations = {
running: '运行中',
stop: '停止',
dismiss: '关闭',
exit: code => `退出码 ${code}`
exit: code => `退出码 ${code}`,
coding: {
title: '工作区',
noBranch: '无分支',
detached: '分离头指针',
clean: '干净',
changed: count => `${count} 处更改`,
ahead: count => `领先 ${count}`,
behind: count => `落后 ${count}`,
review: '审查',
close: '关闭',
openChanges: '打开更改',
openFile: '打开文件',
stage: '暂存',
unstage: '取消暂存',
stageAll: '全部暂存',
viewAsTree: '树状视图',
viewAsList: '列表视图',
revert: '还原',
revertAll: '全部还原',
revertConfirm: '放弃对此文件的更改并将其恢复到已提交状态?此操作无法撤销。',
revertAllConfirm: '放弃所有更改并将文件恢复到已提交状态?此操作无法撤销。',
staged: '已暂存',
noChanges: '没有更改',
notRepo: '不是 Git 仓库',
noDiff: '没有可显示的差异',
scopeUncommitted: '未提交',
scopeBranch: '分支',
scopeLastTurn: '上一轮',
commit: '提交',
commitAndPush: '提交并推送',
commitPlaceholder: '信息(⌘↵ 提交)',
generateCommitMessage: '生成提交信息',
stopGenerating: '停止生成',
createPr: '创建 PR',
openPr: '打开 PR',
ghMissing: '安装 GitHub CLI (gh) 并登录后可打开 PR',
agentShip: '让 Hermes 提交并开 PR',
agentShipPrompt: '检查当前更改,使用清晰的约定式提交信息提交,推送分支,并开启一个拉取请求。',
newBranch: '新建分支',
branchOffFrom: base => `${base} 新建分支`,
switchTo: branch => `切换到 ${branch}`,
switchFailed: branch => `无法切换到 ${branch}`,
worktrees: '工作树'
}
},
updates: {
@ -1909,7 +2032,9 @@ export const zh: Translations = {
previewUnavailable: '预览不可用',
couldNotPreview: path => `无法预览 ${path}`,
noProjectTitle: '没有项目',
noProjectBody: '从状态栏设置工作目录后即可浏览文件。',
noProjectBody: '打开一个项目以浏览文件并查看更改。',
noProjectOpen: '未打开项目',
noDiffs: '无差异',
unreadableTitle: '无法读取',
unreadableBody: error => `无法读取此文件夹 (${error})。`,
emptyTitle: '空文件夹',
@ -1926,6 +2051,9 @@ export const zh: Translations = {
preview: {
tab: '预览',
closeTab: label => `关闭 ${label}`,
closeOthers: '关闭其他',
closeToRight: '关闭右侧',
closeAll: '全部关闭',
closePane: '关闭预览面板',
loading: '正在加载预览',
unavailable: '预览不可用',
@ -1933,9 +2061,11 @@ export const zh: Translations = {
hide: '隐藏',
openPreview: '打开预览',
openInBrowser: '在浏览器中打开',
linkHint: '⌘/Ctrl+点击在预览面板打开',
sourceLineTitle: '点击选择 · shift 点击扩展 · 拖到输入框',
source: '源码',
renderedPreview: '预览',
diff: '差异',
unknownSize: '大小未知',
binaryTitle: '这看起来像二进制文件',
binaryBody: label => `预览 ${label} 可能会显示不可读文本。`,
@ -2179,7 +2309,7 @@ export const zh: Translations = {
sessionBusy: '会话忙碌中',
branchStopCurrent: '分支此对话前请先停止当前回合。',
branchNoText: '此消息没有可用于分支的文本。',
branchTitle: '分支',
branchTitle: n => `草稿:分支 #${n}`,
branchFailed: '分支失败',
deleteFailed: '删除失败',
archived: '已归档',