Settings storage with scopes, and project setup that can live in the repository (#3413)
* refactor(settings): settings registry and intent-gated writes
Problem: every setting lived in a flat document with ten hand-maintained
key lists that had drifted (three keys the server silently dropped, five
it kept that nothing read), and three code paths wrote to the server
without a person changing anything: the theme persist effect on mount,
bootstrap seeding of server-missing keys, and the auto-save echoing
values just adopted from the server.
Approach: one registry (packages/ui/src/lib/settings/registry.ts) names
every key with its scope (instance / profile / device), a boundary parser
and its store binding; DesktopSettings, the sanitizer, the mirror, the
apply step and the auto-save derive from it. A generated JSON snapshot
carries the key list to the server and the VS Code bridge. Writes carry
intent: the theme context writes only from its user-facing setters, a
missing server key leaves the local store alone instead of resetting it,
updateDesktopSettings drops values the server already holds, and the
auto-savers treat values applied from the server as a new baseline.
Testing: bun test packages/ui (registry + persistence suites cover zero
writes on load, dedup, toggle-back cancellation, failed-save retry, and
snapshot freshness); tsc for every workspace.
* refactor(ui): read and write settings through the shared path only
Problem: fourteen pages and stores fetched /api/config/settings on their
own and re-parsed the raw document by hand, so the registry could not
guard them and two of them treated a failed load as an empty list.
Approach: loadDesktopSettings() and updateDesktopSettings() (which now
resolves { ok }) replace every direct call; SkillsCatalogPage and
AddCatalogDialog refuse to write the catalog list until it is known.
Testing: bun test packages/ui (403 files), eslint on the changed files.
* refactor(server): validate settings writes against the registry snapshot
Problem: the server whitelist was the only guard on PUT /api/config/settings
and had drifted from the client; dead keys were still persisted.
Approach: settings-helpers.js drops any key the generated registry
snapshot does not list as persistable and strips secret keys from
responses; the dead keys (markdownDisplayMode, toolCallExpansion,
typographySizes, expandedEditorToolbar, gitProviderId/gitModelId) are
gone; the profile keys that were client-only now round-trip. A drift
test requires a valid sample for every persistable registry key.
Testing: vitest run in packages/web (182 files), including the packed
tarball import.
* refactor(vscode): gate bridge settings writes by the registry
Problem: the extension host wrote any key the webview sent straight into
settings.json, and commit-message generation read the dead
gitProviderId/gitModelId pair instead of the small-model setting.
Approach: filterPersistableSettingsChanges applies the registry snapshot
before the file write; chooseBridgeGitGenerationModel honours
smallModelUseDefault/smallModelOverride ahead of the zen fallback.
Testing: bun test packages/vscode (37 files), tsc, build:extension.
* feat(settings): split the user's profile into preferences.json
Problem: one flat settings.json held instance facts, the user's
preferences and device state together, so device state travelled between
installs and the profile had no document of its own to sync from.
Approach: the server keeps one merged document for clients but routes
each key by registry scope on disk (settings-files.js): profile keys go to
preferences.json as { value, updatedAt } entries stamped when the value
changes, everything else stays in settings.json, device keys are dropped
from writes. A missing preferences.json is seeded once from settings.json,
which is left intact; an unreadable one is a failure that pauses profile
writes and never gets overwritten. Server modules that read a profile key
off the disk use the merged sync read. Electron main reads the theme mode
from both files and now owns the splash colours, handed over the
window-theme IPC instead of the settings document. Clients stop sending
device keys, seed them once from a pre-split document, and persist
inputBarOffset locally. The PWA manifest keys are instance facts.
Testing: vitest in packages/web (seed, split write, timestamp retention,
unreadable file), bun test in packages/ui and packages/electron, tsc for
every workspace.
* feat(vscode): write the profile to preferences.json from the extension host
Problem: the extension host writes the shared settings files directly and
had to follow the server's split, and its file writes reported success on
failure.
Approach: settings-files.ts mirrors the server's format and split rules
(seed once, unreadable preferences.json is a failure); persistSettings
routes profile keys to preferences.json and the rest to settings.json,
and the atomic writers now throw so a failed save reaches the webview.
Clearing a key now actually removes it from the owning file.
Testing: bun test packages/vscode (38 files), tsc, build:extension.
* feat(settings): store the per-surface profile fields by surface kind
Problem: theme, chat-layout switches and typography sizes are one value
for every client of an instance, so the phone and the desktop cannot
disagree without a hard-coded runtime branch.
Approach: every settings request carries the client's surface kind in the
x-openchamber-surface header (web, desktop, vscode, mobile — the phone app
and the hosted mobile shell are one kind). For the registry's perSurface
keys the store writes a changed value under fields[key].surfaces[kind] in
preferences.json and never touches the base from a surface; reads resolve
the kind's own value, then the base, then nothing. Writes without a
surface (migrations, the seed) set the base. The VS Code host is always
vscode; Electron main resolves desktop for the native window theme. The
Settings UI is unchanged.
Testing: vitest in packages/web (surface write/read, no base copy, unknown
surface falls back to base), bun test in packages/vscode and packages/ui,
tsc for every workspace, build:extension.
* fix(settings): keep a legacy copy of the profile in settings.json
The first write after the split rewrote settings.json with the instance
part only, and that write happens on startup (relay reconcile). A build
from before the split reads only settings.json, so rolling back would
have lost every preference: theme, default model, all of it.
Every write now stores the profile's base values in settings.json next
to the instance part (`legacySettingsDocumentOf`), on the server and in
the VS Code extension host alike. Current builds ignore the copy because
preferences.json wins in the merged read. When preferences.json is
unreadable the copy already on disk is kept rather than dropped.
Testing: settings-runtime tests updated for the copy; full web suite
(182 files), VS Code tests and extension build, tsc clean. Verified live
on a scratch OPENCHAMBER_DATA_DIR: all 136 keys survive startup, theme
changes land per surface, plain keys land in the base.
* feat(settings): make the UI password and tunnel preset tokens write-only
GET /api/config/settings returned desktopUiPassword and the managed
remote tunnel preset tokens to every authenticated client, including
paired phones and the VS Code webview that never need them.
Both keys are now `secret` in the registry: accepted on write, withheld
from reads. The server answers with a hasDesktopUiPassword flag; the
desktop network page shows "Password set" and sends a value only when
the user types a new one or presses "Remove password" (an empty string
clears it and turns LAN access off). The tunnel page already learned
token presence from the status endpoint. The VS Code bridge strips
secret keys from what it hands the webview while still merging them
from disk on write.
Testing: registry, i18n parity, server settings, VS Code gate tests and
tsc; workspace type-check. Verified against a scratch server: GET
carries the flag and no password, PUT with '' clears, PUT with a value
sets. The desktop-only page itself awaits the owner's run.
* fix(settings): send the surface kind as a query parameter, not a header
The packaged desktop shell (openchamber-ui://app) and the phone app are
cross-origin to the OpenChamber server, so the x-openchamber-surface
header turned every settings request into a CORS preflight the server
did not allow. Settings looked reset and every save reported "Save
failed" without reaching persistSettings. An older remote instance would
refuse the header the same way even with the allow-list fixed.
The client now sends ?surface=<kind>, which keeps the request
CORS-simple on every server version; the server reads the query
parameter and still honours the header. The header is also in the CORS
allow-list for completeness.
Testing: workspace type-check, persistence and registry tests, server
opencode tests. On a scratch server: PUT with ?surface=vscode lands
under surfaces.vscode, GET without or with an unknown surface serves the
base, the header fallback resolves. Confirmed in the owner's rebuilt
desktop and on the phone.
* refactor(settings): drop the show-password toggle from the desktop network page
With the password write-only, the field only ever holds a value the user
is typing right now; the reveal toggle and its strings are gone from
every locale.
* refactor(projects): serve project setup through the server, drop the legacy migration
The shared UI read and wrote ~/.config/openchamber/projects/<id>.json
itself: it resolved the home directory, composed the path, and used the
Files API, which only desktop and VS Code have natively and which cannot
see a remote instance's file at all. It also still carried the months-old
migration from <repo>/.openchamber/openchamber.json, which deleted files in
the folder the upcoming shared project config will use.
The client-owned keys (worktree setup commands, project actions, draft
starters) now live behind GET/PUT /api/projects/:projectId/config.
project-setup.js sanitizes and builds the view; the project-config runtime
merges a patch under the same cross-process lock the scheduled-task writers
hold, so unknown and server-owned keys survive. A wrongly shaped key is a
400, not a silent drop. openchamberConfig.ts keeps its exported functions
and is now an HTTP client. The VS Code webview handles the route locally
and bridges to the extension host, which owns the file with a TS mirror of
the sanitizers.
Testing: server tests for sanitizers, round trip, lock, and invalid patch;
client tests against a mocked route; VS Code sanitizer and bridge tests;
workspace type-check, both VS Code builds, UI isolated suite (409 files),
server projects and project-context suites. Live GET/PUT against a
running server with the owner's real project config.
* feat(projects): read the team's shared config and merge it with the personal one
A project can now carry <repo>/.openchamber/project.json (version 1:
setupWorktree, setupWorktreeWait, projectActions, draftStarters,
plansDir). The server finds the checkout from the path-derived project
id, parses the file, and answers GET /api/projects/:id/config with one
merged view: what runs at the top level, plus shared and personal blocks
so a page can edit the personal file without copying a teammate's entry
into it.
Merge rules: shared setup commands run first (a personal
setupWorktreeMode of "replace" uses the personal list only); the
personal wait flag wins when set; actions union by id with a personal
action replacing the shared one and personal hiddenSharedActionIds
dropping shared ones; starters union by type:name; the primary action is
personal only. A shared file that exists but cannot be parsed, or that
names a plansDir outside the repo, is reported as invalid with a reason
and never treated as "no shared setup". Nothing writes the repo file yet.
Client: getProjectSetup exposes the view; the existing helpers return
effective values, while the Projects page sections and the draft
starters hook edit the personal block only. Shared entries show a quiet
"shared" mark in the actions dropdown and read-only lists above the
editable ones on the Projects page; shared starter chips have no remove
handle. The VS Code extension host mirrors the parser and merge.
Testing: server tests for the parser, plansDir guard, merge table, id
round trip, and a runtime test against a temp checkout; client tests
against a mocked route; VS Code sanitizer, merge, and bridge tests; the
section test covers the shared row; locale parity; workspace type-check;
UI isolated suite (409 files). Live: GET against a temp repo with a
shared file and with a broken one.
* feat(projects): ask before the team's shared commands run, once per set of commands
Shared setup commands and shared actions come from a file a git pull can
change, and they run on the machine of whoever pulls. The first time one
would run, a dialog now shows exactly what would run and asks: "Trust and
run" or "Not this time". A "trust" answer is recorded in the personal
config against a SHA-256 of the executable parts (setup commands and each
action's id, command, and runIn; renames and icons do not count), so a
pull that changes a command brings the prompt back. Nothing asks when the
shared file has nothing that executes.
Worktree creation (session creator, new-worktree dialog, session store,
multi-run launcher, agent-manager empty state) resolves its commands
through the prompt; "not this time" runs only the user's own commands.
The actions dropdown asks before a shared action runs. The Projects page
shows "Trusted on this instance" with a "Reset trust" button next to the
shared actions. The dialog is mounted beside the app-link confirmation on
every shell. The VS Code extension host mirrors the hash and the record.
Testing: server tests for hash stability, ordering, and the trusted flag,
plus a runtime test that changes the shared file and sees trust drop;
client tests for the confirmation store (ask, trust, skip, replace mode,
newer request, failed record, reset); VS Code mirror tests; the actions
button, new-worktree dialog, and issue-2039 tests updated for the trust
path; locale parity; workspace type-check; UI isolated suite (410 files).
* feat(projects): share and unshare setup with the team from the Projects page
The repo file <repo>/.openchamber/project.json is now written by the app,
and only when the user shares something: nothing appears in a repository
until then. PUT /api/projects/:id/config/shared replaces the keys it
names over the current file, writes it pretty-printed with version first
and only the keys that carry something, removes the file (and an empty
.openchamber folder) when nothing is left, refuses a missing checkout or
a plansDir outside the repo, and records trust for the writer, who has
seen what they shared.
On the Projects page, actions and setup commands get "Share with team"
and "Make personal"; shared actions can be hidden for this user; a
checkbox switches to "Use only my setup commands". Project starter chips
get share and make-personal hover buttons. A new "Shared config" block
shows the file's path and status, the shared plans folder, and the trust
status with "Reset trust". A share is a repo write followed by a personal
write; a failure after the first leaves the item visible once, as
personal. The VS Code extension host mirrors the writer.
Testing: server tests for the patch, serialization, emptiness, the write
and removal round trip, the writer's trust record, and the refusals;
client test for the shared route; VS Code bridge test for write and
removal; locale parity; workspace type-check; UI isolated suite (410
files). Live on a scratch server: share, invalid plansDir (400), unshare
to removal of file and folder.
* feat(projects): list, edit, and move plans in the team's shared plans folder
When the shared config names a plansDir, every markdown file in that
folder is a plan on the Plans tab: listed after the user's own plans,
marked shared, addressed as shared:<file>, read and edited in place
(the raw document is written verbatim, so a plan another tool wrote
keeps its shape), and deletable. Share moves one of the user's plans
into the folder; make personal moves it back under a new id; a name
collision gets a numeric suffix. Sharing is refused, with a hint in the
panel, until a shared plans folder is set in Project settings. This
answers the request to read plans from an existing folder such as
docs/plans.
Server: the project-context runtime takes resolveSharedPlansDir from the
project-config runtime; readContext reports sharedPlansDir; POST
.../plans/:id/share and /unshare. Client: movePlan in the context store,
a shared badge and a share / make-personal button per plan row. Session
attachments reference plan ids, so an attached plan that moves has to be
attached again.
Testing: runtime tests for listing, foreign markdown titles, id
traversal, in-place update and delete, share and unshare with a
collision, and the refusal without a folder; HTTP route tests; store and
locale parity tests; workspace type-check; full web suite (183 files);
UI isolated suite (410 files). Live on a scratch server against a temp
repo: list, share, read, unshare.
* fix(server): make OPENCHAMBER_DATA_DIR move every folder, not just the flat files
The variable is documented as the OpenChamber data directory, but only
settings, preferences, auth, and push files followed it; projects,
themes, speech models, and the chats default stayed under
~/.config/openchamber. A second instance started with a custom
directory therefore read and wrote the default instance's project
configs.
Every folder now hangs off the one root. An instance that already used
a custom directory gets projects, themes, and speech-models copied in
once at startup; copied, not moved, so a second instance beside the
default one cannot strip it, and nothing is merged into a folder that
already exists. Existing managed chats are not copied, as with
OPENCHAMBER_CHATS_DIR.
Testing: migration tests for copy-once, no-merge, and same-root no-op;
full web suite; a scratch server with an empty data dir copied the real
project configs and kept its writes in the copy.
* fix(projects): keep a plan's id when it moves into or out of the repository folder
A plan moved into the repository plans folder used to be listed under a
new shared:<file> id, so a session that had attached it lost the
attachment. The manifest entry now stays with a `shared` flag that says
which folder holds the file; the id survives both directions. Only a
plan that never had an entry (one written by another tool) gets an id
when it is brought in. A personal file and a repository file may share
a name because they live in different folders.
Testing: runtime tests for share and unshare with a stable id, reading
and editing the moved plan, the suffix on a name collision, and the
adoption of a foreign file.
* feat(projects): default repository plans folder, "move to repository" wording, tooltips
Plans now have a repository folder without any setup: .openchamber/plans
by default. A custom plansDir replaces the default outright (only that
folder is read and written; moving files between the two is the user's
job), and the field's placeholder and hint say so. The move buttons on
plans are therefore always available.
The word "share" is gone from the UI: it read like publishing, while
the action stores an item in the repository so everyone who pulls it
gets it. Labels are "Move to repository" / "Move to my settings", the
badge is "In repo", the block is "Repository config", and every button
on the Projects page carries a tooltip that says what happens (the
"Move to repository" button explains that edits save first while the
form is dirty). The trust status with "reset trust" moved from the
repository block into the Worktree section next to the commands it
guards; the plan row's badge sits beside the title.
Testing: locale parity, section test, workspace type-check, UI isolated
suite (410 files), full web suite.
* fix(projects): leave the icon key out of the repository file when an action has none
Actions without an icon were written as "icon": null into
.openchamber/project.json. The key is now omitted; readers already fall
back to the play icon. Server and VS Code serializers, tests updated.
* docs: describe the repository config file and how items move into it
A new page in every locale: what stays personal and what can move into
the repository, the .openchamber/project.json format with an example
and every key explained (setup commands, actions with the supported icon
names, starters, plansDir), the merge rules, the trust prompt, and plans
in the repository. Linked from the sidebar and from Project Actions.
Translations written by hand.
This commit is contained in:
committed by
GitHub
parent
ff75dc9bd5
commit
85c4320825
@@ -438,6 +438,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': 'Ablehnen',
|
||||
'settings.common.state.comingSoon': 'Demnächst verfügbar...',
|
||||
'settings.projects.actions.title': 'Aktionen',
|
||||
'settings.projects.shared.badge': 'Im Repo',
|
||||
'settings.projects.shared.actionsFromRepo': 'Im Repository gespeichert ({path}). Alle, die es pullen, bekommen diese.',
|
||||
'settings.projects.shared.commandsFromRepo': 'Laufen zuerst, im Repository gespeichert ({path})',
|
||||
'settings.projects.shared.invalid': 'Die Projektkonfiguration in {path} konnte nicht gelesen werden: {reason}',
|
||||
'settings.projects.shared.trusted': 'Repository-Befehle auf dieser Instanz vertraut',
|
||||
'settings.projects.shared.resetTrust': 'Vertrauen zurücksetzen',
|
||||
'settings.projects.shared.title': 'Repository-Konfiguration',
|
||||
'settings.projects.shared.description': 'Setup, das im Repository selbst liegt, damit alle, die es pullen, dieselben Aktionen, Setup-Befehle, Starter und Pläne bekommen. Es wird nichts geschrieben, bis du etwas dorthin verschiebst.',
|
||||
'settings.projects.shared.file': 'Datei',
|
||||
'settings.projects.shared.status.missing': 'Noch nicht im Repository',
|
||||
'settings.projects.shared.status.ok': 'Im Repository',
|
||||
'settings.projects.shared.plansDir': 'Ordner für Pläne',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': 'Wo Pläne im Repository liegen, relativ zum Repository. Leer bedeutet .openchamber/plans. Ein eigener Ordner wie docs/plans ersetzt den Standard vollständig: nur dieser Ordner wird gelesen und beschrieben. Vorhandene Dateien verschiebst du beim Wechsel selbst.',
|
||||
'settings.projects.shared.plansDirAria': 'Ordner für Pläne im Repository',
|
||||
'settings.projects.shared.actions.share': 'Ins Repository verschieben',
|
||||
'settings.projects.shared.actions.showTitle': 'Zeigt diese Repository-Aktion wieder in deinem Menü.',
|
||||
'settings.projects.shared.actions.hideTitle': 'Blendet diese Repository-Aktion nur in deinem Menü aus; das Repository bleibt unverändert.',
|
||||
'settings.projects.shared.actions.makePersonalTitle': 'Entfernt es aus dem Repository und behält es nur in deinen Einstellungen auf dieser Instanz.',
|
||||
'settings.projects.shared.actions.shareTitle': 'Speichert es in {path} im Repository, damit alle, die das Repository pullen, es bekommen. Es verlässt deine persönlichen Einstellungen.',
|
||||
'settings.projects.shared.actions.shareAfterSave': 'Speichert zuerst deine Änderungen, dann verschieben',
|
||||
'settings.projects.shared.actions.makePersonal': 'In meine Einstellungen verschieben',
|
||||
'settings.projects.shared.actions.hide': 'Für mich ausblenden',
|
||||
'settings.projects.shared.actions.show': 'Anzeigen',
|
||||
'settings.projects.shared.hiddenBadge': 'Ausgeblendet',
|
||||
'settings.projects.shared.replaceMode': 'Nur meine Setup-Befehle verwenden, die des Repositorys überspringen',
|
||||
'settings.projects.shared.replaceModeAria': 'Nur meine Setup-Befehle verwenden, die des Repositorys überspringen',
|
||||
'settings.projects.shared.toast.shareFailed': 'Repository-Konfiguration konnte nicht aktualisiert werden',
|
||||
'settings.projects.actions.description': 'Projektspezifische Befehle im Header.',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': 'Bitte Aktionsname und Befehl ausfüllen.',
|
||||
'settings.projects.actions.state.loading': 'Wird geladen...',
|
||||
@@ -948,6 +976,8 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'LAN-Zugriff erfordert ein Desktop-UI-Kennwort. Bis ein Kennwort festgelegt ist, startet die Desktop-App nur lokal.',
|
||||
'settings.openchamber.desktopPassword.field.password': 'Desktop-UI-Kennwort',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'Kein Kennwort erforderlich',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': 'Kennwort gesetzt. Neues eingeben, um es zu ersetzen.',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': 'Kennwort entfernen',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber fragt nach dem Neustart und dann, wenn die Anmeldesitzung abläuft: nach 12 Stunden oder 7 Tagen mit Vertrauen in dieses Gerät. Leer lassen, um die Anmeldung zu deaktivieren.',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': 'Nach dem Neustart von einem anderen Gerät aus öffnen: ',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': 'Von einem anderen Gerät aus öffnen: ',
|
||||
@@ -2212,8 +2242,6 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.macMenuBarAria': 'OpenChamber in der macOS-Menüleiste anzeigen',
|
||||
'settings.openchamber.desktopNetwork.field.macMenuBar': 'OpenChamber in der Menüleiste anzeigen',
|
||||
'settings.openchamber.desktopNetwork.field.macMenuBarDescription': 'Erfordert einen Neustart der App. Wenn deaktiviert, erstellt OpenChamber weder den Menüleisten-Eintrag noch führt es dessen Sitzungs-, Genehmigungs- und Nutzungsaktualisierungen aus.',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': 'Passwort anzeigen',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': 'Passwort verbergen',
|
||||
'settings.openchamber.defaults.walkthroughModel.title': 'Walkthrough-Modell ändern',
|
||||
'settings.openchamber.defaults.walkthroughModel.description': 'Die KI-Prüfung deiner Änderungen benötigt strukturierten Output und Platz für einen ganzen Diff, den ein günstiges kleines Modell oft nicht liefern kann. Modelle, die der Katalog als nicht in der Lage zu strukturiertem Output meldet, werden in diesem Auswahlfeld ausgeblendet. Lasse es leer, dann wird das kleine Modell verwendet.',
|
||||
'settings.openchamber.defaults.walkthroughModel.overrideModel': 'Walkthrough-Modell',
|
||||
|
||||
@@ -1515,6 +1515,9 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Plan aus Datei importieren',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': 'Noch keine gespeicherten Pläne.',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Plan löschen',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': 'Im Repo',
|
||||
'rightSidebar.contextNotesTodo.plans.share': 'In den Plan-Ordner des Repositorys verschieben, damit alle, die es pullen, ihn sehen',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': 'Zu meinen Plänen verschieben, aus dem Repository heraus',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Lösche Plan "{title}"',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': 'An neue Sitzung senden',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'An neuen Worktree senden',
|
||||
@@ -1533,6 +1536,7 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Fehler beim Senden des Todos',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Plan konnte nicht aktualisiert werden',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Fehler beim Löschen des Plans',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': 'Plan konnte nicht verschoben werden',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Plan-Datei ist leer',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Fehler beim Importieren des Plans',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': 'Plan importiert',
|
||||
@@ -1917,6 +1921,9 @@ export const dict = {
|
||||
'chat.draftStarters.sectionCommands': 'Befehle',
|
||||
'chat.draftStarters.sectionSkills': 'Fähigkeiten',
|
||||
'chat.draftStarters.remove': 'Entfernen',
|
||||
'chat.draftStarters.sharedTitle': 'In der Repository-Konfiguration angeheftet; dort ändern',
|
||||
'chat.draftStarters.share': 'In die Repository-Konfiguration verschieben',
|
||||
'chat.draftStarters.makePersonal': 'In meine Einstellungen verschieben',
|
||||
'chat.scrollToBottom.aria': 'Zum Ende scrollen',
|
||||
'chat.promptNavigator.aria': 'Prompt-Navigation',
|
||||
'chat.promptNavigator.currentPrompt': 'Aktueller Prompt',
|
||||
@@ -2524,6 +2531,13 @@ export const dict = {
|
||||
'projectActions.actions.addAction': 'Aktion hinzufügen',
|
||||
'projectActions.actions.addNewAction': 'Neue Aktion hinzufügen',
|
||||
'projectActions.actions.autoDiscover': 'Automatisch entdecken',
|
||||
'projectActions.menu.sharedBadge': 'Repo',
|
||||
'projects.sharedTrust.title': 'Die im Repository gespeicherten Befehle ausführen?',
|
||||
'projects.sharedTrust.description': '{path} in diesem Repository definiert Befehle, die auf diesem Rechner laufen. Einmal vertrauen, und OpenChamber fragt erst wieder, wenn sie sich ändern.',
|
||||
'projects.sharedTrust.setupCommands': 'Worktree-Setup-Befehle',
|
||||
'projects.sharedTrust.actions': 'Aktionen',
|
||||
'projects.sharedTrust.skip': 'Diesmal nicht',
|
||||
'projects.sharedTrust.trust': 'Vertrauen und ausführen',
|
||||
'projectActions.actions.chooseActionAria': 'Projektaktion auswählen',
|
||||
'projectActions.actions.openPreview': 'Vorschau öffnen',
|
||||
'projectActions.actions.runNamedAria': '{name} ausführen',
|
||||
|
||||
@@ -459,6 +459,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': 'Deny',
|
||||
'settings.common.state.comingSoon': 'Coming soon...',
|
||||
'settings.projects.actions.title': 'Actions',
|
||||
'settings.projects.shared.badge': 'In repo',
|
||||
'settings.projects.shared.actionsFromRepo': 'Stored in the repository ({path}). Everyone who pulls it gets these.',
|
||||
'settings.projects.shared.commandsFromRepo': 'Run first, stored in the repository ({path})',
|
||||
'settings.projects.shared.invalid': 'The project config in {path} could not be read: {reason}',
|
||||
'settings.projects.shared.trusted': 'Repository commands trusted on this instance',
|
||||
'settings.projects.shared.resetTrust': 'Reset trust',
|
||||
'settings.projects.shared.title': 'Repository config',
|
||||
'settings.projects.shared.description': 'Setup stored in the repository itself, so everyone who pulls it gets the same actions, setup commands, starters, and plans. Nothing is written there until you move an item into it.',
|
||||
'settings.projects.shared.file': 'File',
|
||||
'settings.projects.shared.status.missing': 'Not in the repository yet',
|
||||
'settings.projects.shared.status.ok': 'In the repository',
|
||||
'settings.projects.shared.plansDir': 'Plans folder',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': 'Where repository plans live, relative to the repository. Empty means .openchamber/plans. A custom folder such as docs/plans replaces the default entirely: only that folder is read and written. Move existing files yourself when you change it.',
|
||||
'settings.projects.shared.plansDirAria': 'Repository plans folder',
|
||||
'settings.projects.shared.actions.share': 'Move to repository',
|
||||
'settings.projects.shared.actions.showTitle': 'Shows this repository action in your menu again.',
|
||||
'settings.projects.shared.actions.hideTitle': 'Hides this repository action from your menu only; the repository is not changed.',
|
||||
'settings.projects.shared.actions.makePersonalTitle': 'Removes it from the repository and keeps it only in your settings on this instance.',
|
||||
'settings.projects.shared.actions.shareTitle': 'Stores it in {path} inside the repository, so everyone who pulls the repository gets it. It leaves your personal settings.',
|
||||
'settings.projects.shared.actions.shareAfterSave': 'Saves your edits first, then move',
|
||||
'settings.projects.shared.actions.makePersonal': 'Move to my settings',
|
||||
'settings.projects.shared.actions.hide': 'Hide for me',
|
||||
'settings.projects.shared.actions.show': 'Show',
|
||||
'settings.projects.shared.hiddenBadge': 'Hidden',
|
||||
'settings.projects.shared.replaceMode': 'Use only my setup commands, skip the repository\'s',
|
||||
'settings.projects.shared.replaceModeAria': 'Use only my setup commands, skip the repository\'s',
|
||||
'settings.projects.shared.toast.shareFailed': 'Failed to update the repository config',
|
||||
'settings.projects.actions.description': 'Per-project commands shown in header next to project name.',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': 'Fill action name and command before saving.',
|
||||
'settings.projects.actions.state.loading': 'Loading...',
|
||||
@@ -1008,10 +1036,10 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': 'Restarts the app so phones, tablets, and other computers on your Wi-Fi can open it.',
|
||||
'settings.openchamber.desktopNetwork.field.warning': 'Warning: while enabled, the app is reachable by anyone on the same local network.',
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'LAN access requires a Desktop UI Password. Until one is set, the desktop app starts local-only.',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': 'Show password',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': 'Hide password',
|
||||
'settings.openchamber.desktopPassword.field.password': 'Desktop UI Password',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'No password required',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': 'Password set. Type a new one to replace it.',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': 'Remove password',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber asks after restart, then when the login session expires: after 12 hours, or 7 days with Trust this device. Leave empty to disable login.',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': 'After restart, open from another device: ',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': 'Open from another device: ',
|
||||
|
||||
@@ -1715,6 +1715,9 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Import plan from file',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': 'No saved plans yet.',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Delete plan',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': 'In repo',
|
||||
'rightSidebar.contextNotesTodo.plans.share': 'Move to the repository plans folder, so everyone who pulls the repository sees it',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': 'Move to my plans, out of the repository',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Delete plan "{title}"',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': 'Send to new session',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'Send to new worktree',
|
||||
@@ -1733,6 +1736,7 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Failed to send todo',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Failed to update plan',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Failed to delete plan',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': 'Failed to move plan',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Plan file is empty',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Failed to import plan',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': 'Plan imported',
|
||||
@@ -2122,6 +2126,9 @@ export const dict = {
|
||||
'chat.draftStarters.sectionCommands': 'Commands',
|
||||
'chat.draftStarters.sectionSkills': 'Skills',
|
||||
'chat.draftStarters.remove': 'Remove',
|
||||
'chat.draftStarters.sharedTitle': 'Pinned in the repository config; change it there',
|
||||
'chat.draftStarters.share': 'Move to repository config',
|
||||
'chat.draftStarters.makePersonal': 'Move to my settings',
|
||||
'chat.scrollToBottom.aria': 'Scroll to bottom',
|
||||
'chat.promptNavigator.aria': 'Prompt navigation',
|
||||
'chat.promptNavigator.currentPrompt': 'Current prompt',
|
||||
@@ -2745,6 +2752,13 @@ export const dict = {
|
||||
'projectActions.actions.addAction': 'Add action',
|
||||
'projectActions.actions.addNewAction': 'Add new action',
|
||||
'projectActions.actions.autoDiscover': 'Auto-discover',
|
||||
'projectActions.menu.sharedBadge': 'repo',
|
||||
'projects.sharedTrust.title': 'Run the commands stored in this repository?',
|
||||
'projects.sharedTrust.description': '{path} in this repository defines commands that run on this machine. Trust them once, and OpenChamber asks again only when they change.',
|
||||
'projects.sharedTrust.setupCommands': 'Worktree setup commands',
|
||||
'projects.sharedTrust.actions': 'Actions',
|
||||
'projects.sharedTrust.skip': 'Not this time',
|
||||
'projects.sharedTrust.trust': 'Trust and run',
|
||||
'projectActions.actions.autoDiscoverTooltip': 'Automatically discover and run the development server',
|
||||
'projectActions.actions.chooseActionAria': 'Choose project action',
|
||||
'projectActions.actions.openPreview': 'Open Preview',
|
||||
|
||||
@@ -427,6 +427,34 @@ export const settingsDict = {
|
||||
"settings.common.permission.deny": "Denegar",
|
||||
"settings.common.state.comingSoon": "Próximamente...",
|
||||
"settings.projects.actions.title": "Acciones",
|
||||
"settings.projects.shared.badge": "En el repo",
|
||||
"settings.projects.shared.actionsFromRepo": "Guardadas en el repositorio ({path}). Todos los que lo clonen las tendrán.",
|
||||
"settings.projects.shared.commandsFromRepo": "Se ejecutan primero, guardados en el repositorio ({path})",
|
||||
"settings.projects.shared.invalid": "No se pudo leer la configuración del proyecto en {path}: {reason}",
|
||||
"settings.projects.shared.trusted": "Comandos del repositorio de confianza en esta instancia",
|
||||
"settings.projects.shared.resetTrust": "Restablecer confianza",
|
||||
"settings.projects.shared.title": "Configuración en el repositorio",
|
||||
"settings.projects.shared.description": "Configuración guardada en el propio repositorio, para que todos los que lo clonen tengan las mismas acciones, comandos de configuración, arranques y planes. No se escribe nada hasta que muevas un elemento allí.",
|
||||
"settings.projects.shared.file": "Archivo",
|
||||
"settings.projects.shared.status.missing": "Todavía no está en el repositorio",
|
||||
"settings.projects.shared.status.ok": "En el repositorio",
|
||||
"settings.projects.shared.plansDir": "Carpeta de planes",
|
||||
"settings.projects.shared.plansDirPlaceholder": ".openchamber/plans",
|
||||
"settings.projects.shared.plansDirInfo": "Dónde viven los planes del repositorio, relativo al repositorio. Vacío significa .openchamber/plans. Una carpeta propia como docs/plans reemplaza por completo la predeterminada: solo se lee y escribe esa carpeta. Mueve tú mismo los archivos existentes al cambiarla.",
|
||||
"settings.projects.shared.plansDirAria": "Carpeta de planes en el repositorio",
|
||||
"settings.projects.shared.actions.share": "Mover al repositorio",
|
||||
"settings.projects.shared.actions.showTitle": "Vuelve a mostrar esta acción del repositorio en tu menú.",
|
||||
"settings.projects.shared.actions.hideTitle": "Oculta esta acción del repositorio solo en tu menú; el repositorio no cambia.",
|
||||
"settings.projects.shared.actions.makePersonalTitle": "Lo quita del repositorio y lo conserva solo en tus ajustes de esta instancia.",
|
||||
"settings.projects.shared.actions.shareTitle": "Lo guarda en {path} dentro del repositorio, para que todos los que lo clonen lo tengan. Sale de tus ajustes personales.",
|
||||
"settings.projects.shared.actions.shareAfterSave": "Primero se guardan tus cambios, luego mueve",
|
||||
"settings.projects.shared.actions.makePersonal": "Mover a mis ajustes",
|
||||
"settings.projects.shared.actions.hide": "Ocultar para mí",
|
||||
"settings.projects.shared.actions.show": "Mostrar",
|
||||
"settings.projects.shared.hiddenBadge": "Oculto",
|
||||
"settings.projects.shared.replaceMode": "Usar solo mis comandos de configuración y omitir los del repositorio",
|
||||
"settings.projects.shared.replaceModeAria": "Usar solo mis comandos de configuración y omitir los del repositorio",
|
||||
"settings.projects.shared.toast.shareFailed": "No se pudo actualizar la configuración del repositorio",
|
||||
"settings.projects.actions.description": "Comandos por proyecto mostrados en el encabezado junto al nombre del proyecto.",
|
||||
"settings.projects.actions.validation.fillNameAndCommand": "Completa el nombre de la acción y el comando antes de guardar.",
|
||||
"settings.projects.actions.state.loading": "Cargando...",
|
||||
@@ -976,10 +1004,10 @@ export const settingsDict = {
|
||||
"settings.openchamber.desktopNetwork.field.allowLanAccessDescription": "Reinicia la aplicación para que los teléfonos, tablets y otros ordenadores en tu Wi-Fi puedan abrirla.",
|
||||
"settings.openchamber.desktopNetwork.field.warning": "Advertencia: mientras esté habilitado, la aplicación es accesible por cualquiera en la misma red local.",
|
||||
"settings.openchamber.desktopNetwork.field.passwordRequiredWarning": "El acceso LAN requiere una contraseña de UI de escritorio. Hasta que se configure, la app de escritorio se inicia solo localmente.",
|
||||
"settings.openchamber.desktopPassword.actions.showPassword": "Mostrar contraseña",
|
||||
"settings.openchamber.desktopPassword.actions.hidePassword": "Ocultar contraseña",
|
||||
"settings.openchamber.desktopPassword.field.password": "Contraseña de UI de escritorio",
|
||||
"settings.openchamber.desktopPassword.field.passwordPlaceholder": "No se requiere contraseña",
|
||||
"settings.openchamber.desktopPassword.field.passwordSetPlaceholder": "Contraseña establecida. Escribe una nueva para reemplazarla.",
|
||||
"settings.openchamber.desktopPassword.actions.removePassword": "Quitar contraseña",
|
||||
"settings.openchamber.desktopPassword.field.passwordDescription": "OpenChamber la pide después del reinicio y luego cuando vence la sesión: tras 12 horas, o 7 días con Confiar en este dispositivo. Déjalo vacío para desactivar el inicio de sesión.",
|
||||
"settings.openchamber.desktopNetwork.hint.openAfterRestart": "Después del reinicio, abre desde otro dispositivo: ",
|
||||
"settings.openchamber.desktopNetwork.hint.openNow": "Abrir desde otro dispositivo: ",
|
||||
|
||||
@@ -1693,6 +1693,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
"rightSidebar.contextNotesTodo.plans.importFromFile": "Importar plan desde archivo",
|
||||
"rightSidebar.contextNotesTodo.plans.empty": "Aún no hay plans guardados.",
|
||||
"rightSidebar.contextNotesTodo.plans.deletePlan": "Eliminar plan",
|
||||
"rightSidebar.contextNotesTodo.plans.sharedBadge": "En el repo",
|
||||
"rightSidebar.contextNotesTodo.plans.share": "Mover a la carpeta de planes del repositorio, para que todos los que lo clonen lo vean",
|
||||
"rightSidebar.contextNotesTodo.plans.makePersonal": "Mover a mis planes, fuera del repositorio",
|
||||
"rightSidebar.contextNotesTodo.plans.deletePlanWithTitle": "Eliminar plan \"{title}\"",
|
||||
"rightSidebar.contextNotesTodo.sendDialog.title.newSession": "Enviar a una nueva sesión",
|
||||
"rightSidebar.contextNotesTodo.sendDialog.title.newWorktree": "Enviar a una nueva sesión de worktree",
|
||||
@@ -1711,6 +1714,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"rightSidebar.contextNotesTodo.toast.sendTodoFailed": "No se pudo enviar la tarea",
|
||||
"rightSidebar.contextNotesTodo.toast.updatePlanFailed": "No se pudo actualizar el plan",
|
||||
"rightSidebar.contextNotesTodo.toast.deletePlanFailed": "No se pudo eliminar el plan",
|
||||
"rightSidebar.contextNotesTodo.toast.movePlanFailed": "No se pudo mover el plan",
|
||||
"rightSidebar.contextNotesTodo.toast.planFileEmpty": "El archivo del plan está vacío",
|
||||
"rightSidebar.contextNotesTodo.toast.importPlanFailed": "No se pudo importar el plan",
|
||||
"rightSidebar.contextNotesTodo.toast.planImported": "Plan importado",
|
||||
@@ -2100,6 +2104,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
"chat.draftStarters.sectionCommands": "Commands",
|
||||
"chat.draftStarters.sectionSkills": "Skills",
|
||||
"chat.draftStarters.remove": "Remove",
|
||||
"chat.draftStarters.sharedTitle": "Fijado en la configuración del repositorio; cámbialo allí",
|
||||
"chat.draftStarters.share": "Mover a la configuración del repositorio",
|
||||
"chat.draftStarters.makePersonal": "Mover a mis ajustes",
|
||||
"chat.scrollToBottom.aria": "Ir al final",
|
||||
"chat.promptNavigator.aria": "Navegación de prompts",
|
||||
"chat.promptNavigator.currentPrompt": "Prompt actual",
|
||||
@@ -2711,6 +2718,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
"projectActions.actions.addAction": "Añadir acción",
|
||||
"projectActions.actions.addNewAction": "Añadir nueva acción",
|
||||
"projectActions.actions.autoDiscover": "Autodetectar",
|
||||
"projectActions.menu.sharedBadge": "repo",
|
||||
"projects.sharedTrust.title": "¿Ejecutar los comandos guardados en este repositorio?",
|
||||
"projects.sharedTrust.description": "{path} en este repositorio define comandos que se ejecutan en esta máquina. Confía una vez y OpenChamber solo volverá a preguntar cuando cambien.",
|
||||
"projects.sharedTrust.setupCommands": "Comandos de configuración del worktree",
|
||||
"projects.sharedTrust.actions": "Acciones",
|
||||
"projects.sharedTrust.skip": "Esta vez no",
|
||||
"projects.sharedTrust.trust": "Confiar y ejecutar",
|
||||
"projectActions.actions.autoDiscoverTooltip": "Detecta y ejecuta automáticamente el servidor de desarrollo",
|
||||
"projectActions.actions.chooseActionAria": "Elegir acción del proyecto",
|
||||
"projectActions.actions.openPreview": "Abrir Preview",
|
||||
|
||||
@@ -350,6 +350,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': 'Refuser',
|
||||
'settings.common.state.comingSoon': 'À venir...',
|
||||
'settings.projects.actions.title': 'Actions',
|
||||
'settings.projects.shared.badge': 'Dans le dépôt',
|
||||
'settings.projects.shared.actionsFromRepo': 'Enregistrées dans le dépôt ({path}). Tous ceux qui le récupèrent les ont.',
|
||||
'settings.projects.shared.commandsFromRepo': 'Exécutées en premier, enregistrées dans le dépôt ({path})',
|
||||
'settings.projects.shared.invalid': 'La configuration du projet dans {path} n\'a pas pu être lue : {reason}',
|
||||
'settings.projects.shared.trusted': 'Commandes du dépôt approuvées sur cette instance',
|
||||
'settings.projects.shared.resetTrust': 'Réinitialiser la confiance',
|
||||
'settings.projects.shared.title': 'Configuration du dépôt',
|
||||
'settings.projects.shared.description': 'Configuration enregistrée dans le dépôt lui-même, pour que tous ceux qui le récupèrent aient les mêmes actions, commandes de configuration, amorces et plans. Rien n\'est écrit tant que vous n\'y déplacez pas un élément.',
|
||||
'settings.projects.shared.file': 'Fichier',
|
||||
'settings.projects.shared.status.missing': 'Pas encore dans le dépôt',
|
||||
'settings.projects.shared.status.ok': 'Dans le dépôt',
|
||||
'settings.projects.shared.plansDir': 'Dossier des plans',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': 'Où vivent les plans du dépôt, relativement au dépôt. Vide signifie .openchamber/plans. Un dossier personnalisé comme docs/plans remplace entièrement le dossier par défaut : seul ce dossier est lu et écrit. Déplacez vous-même les fichiers existants quand vous le changez.',
|
||||
'settings.projects.shared.plansDirAria': 'Dossier des plans du dépôt',
|
||||
'settings.projects.shared.actions.share': 'Déplacer vers le dépôt',
|
||||
'settings.projects.shared.actions.showTitle': 'Réaffiche cette action du dépôt dans votre menu.',
|
||||
'settings.projects.shared.actions.hideTitle': 'Masque cette action du dépôt dans votre menu seulement ; le dépôt n\'est pas modifié.',
|
||||
'settings.projects.shared.actions.makePersonalTitle': 'Le retire du dépôt et ne le garde que dans vos réglages sur cette instance.',
|
||||
'settings.projects.shared.actions.shareTitle': 'L\'enregistre dans {path} du dépôt, pour que tous ceux qui le récupèrent l\'aient. Il quitte vos réglages personnels.',
|
||||
'settings.projects.shared.actions.shareAfterSave': 'Enregistre d\'abord vos modifications, puis déplacez',
|
||||
'settings.projects.shared.actions.makePersonal': 'Déplacer vers mes réglages',
|
||||
'settings.projects.shared.actions.hide': 'Masquer pour moi',
|
||||
'settings.projects.shared.actions.show': 'Afficher',
|
||||
'settings.projects.shared.hiddenBadge': 'Masqué',
|
||||
'settings.projects.shared.replaceMode': 'Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt',
|
||||
'settings.projects.shared.replaceModeAria': 'Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt',
|
||||
'settings.projects.shared.toast.shareFailed': 'Impossible de mettre à jour la configuration du dépôt',
|
||||
'settings.projects.actions.description': 'Commandes par projet affichées dans l\'en-tête à côté du nom du projet.',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': 'Remplissez le nom de l\'action et la commande avant d\'enregistrer.',
|
||||
'settings.projects.actions.state.loading': 'Chargement...',
|
||||
@@ -894,10 +922,10 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': 'Redémarre l\'application afin que les téléphones, tablettes et autres ordinateurs connectés à votre réseau Wi-Fi puissent l\'ouvrir.',
|
||||
'settings.openchamber.desktopNetwork.field.warning': 'Attention : lorsqu\'elle est activée, l\'application est accessible à toute personne se trouvant sur le même réseau local.',
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'L\'accès LAN nécessite un mot de passe de l\'interface utilisateur du bureau. Tant qu\'il n\'est pas défini, l\'application de bureau démarre en accès local uniquement.',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': 'Afficher le mot de passe',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': 'Masquer le mot de passe',
|
||||
'settings.openchamber.desktopPassword.field.password': 'Mot de passe de l\'interface utilisateur du bureau',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'Aucun mot de passe requis',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': 'Mot de passe défini. Saisissez-en un nouveau pour le remplacer.',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': 'Supprimer le mot de passe',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber demande après le redémarrage, puis quand la session de connexion expire : après 12 heures, ou 7 jours avec Trust this device. Laissez vide pour désactiver la connexion.',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': 'Après redémarrage, ouvrez depuis un autre appareil :',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': 'Ouvrir depuis un autre appareil :',
|
||||
|
||||
@@ -1479,6 +1479,9 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Importer un plan à partir d\'un fichier',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': 'Aucun plan enregistré pour l\'instant.',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Supprimer le forfait',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': 'Dans le dépôt',
|
||||
'rightSidebar.contextNotesTodo.plans.share': 'Déplacer vers le dossier des plans du dépôt, pour que tous ceux qui le récupèrent le voient',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': 'Déplacer vers mes plans, hors du dépôt',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Supprimer le plan "{title}"',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': 'Envoyer à une nouvelle session',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'Envoyer vers un nouvel worktree',
|
||||
@@ -1497,6 +1500,7 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Échec de l\'envoi de la tâche',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Échec de la mise à jour du plan',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Échec de la suppression du plan',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': 'Impossible de déplacer le plan',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Le fichier de plan est vide',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Échec de l\'importation du plan',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': 'Forfait importé',
|
||||
@@ -2447,6 +2451,13 @@ export const dict = {
|
||||
'projectActions.actions.addAction': 'Ajouter une action',
|
||||
'projectActions.actions.addNewAction': 'Ajouter une nouvelle action',
|
||||
'projectActions.actions.autoDiscover': 'Découverte automatique',
|
||||
'projectActions.menu.sharedBadge': 'dépôt',
|
||||
'projects.sharedTrust.title': 'Exécuter les commandes enregistrées dans ce dépôt ?',
|
||||
'projects.sharedTrust.description': '{path} dans ce dépôt définit des commandes qui s\'exécutent sur cette machine. Faites-leur confiance une fois, et OpenChamber ne redemandera que si elles changent.',
|
||||
'projects.sharedTrust.setupCommands': 'Commandes de configuration du worktree',
|
||||
'projects.sharedTrust.actions': 'Actions',
|
||||
'projects.sharedTrust.skip': 'Pas cette fois',
|
||||
'projects.sharedTrust.trust': 'Faire confiance et exécuter',
|
||||
'projectActions.actions.autoDiscoverTooltip': 'Détecte et lance automatiquement le serveur de développement',
|
||||
'projectActions.actions.chooseActionAria': 'Choisir l\'action du projet',
|
||||
'projectActions.actions.openPreview': 'Ouvrir l\'aperçu',
|
||||
@@ -3152,6 +3163,9 @@ export const dict = {
|
||||
'chat.draftStarters.sectionCommands': 'Commandes',
|
||||
'chat.draftStarters.sectionSkills': 'Skills',
|
||||
'chat.draftStarters.remove': 'Retirer',
|
||||
'chat.draftStarters.sharedTitle': 'Épinglé dans la configuration du dépôt ; à modifier là-bas',
|
||||
'chat.draftStarters.share': 'Déplacer vers la configuration du dépôt',
|
||||
'chat.draftStarters.makePersonal': 'Déplacer vers mes réglages',
|
||||
'chat.commandAutocomplete.command.handoffReviewDescription': 'Créer ou réutiliser une session de revue séparée à partir d’un handoff généré.',
|
||||
'chat.commandAutocomplete.command.featurePlanDescription': 'Lancer une session guidée et interactive de planification pour une nouvelle fonctionnalité.',
|
||||
'chat.commandAutocomplete.command.craftGoalDescription': 'Transformer une idée ou une tâche en Goal clair et vérifiable.',
|
||||
|
||||
@@ -460,6 +460,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': '拒否',
|
||||
'settings.common.state.comingSoon': '近日公開...',
|
||||
'settings.projects.actions.title': 'アクション',
|
||||
'settings.projects.shared.badge': 'リポジトリ内',
|
||||
'settings.projects.shared.actionsFromRepo': 'リポジトリ内に保存 ({path})。pull した全員が使えます。',
|
||||
'settings.projects.shared.commandsFromRepo': '最初に実行。リポジトリ内に保存 ({path})',
|
||||
'settings.projects.shared.invalid': '{path} のプロジェクト設定を読み込めませんでした: {reason}',
|
||||
'settings.projects.shared.trusted': 'リポジトリのコマンドはこのインスタンスで信頼済み',
|
||||
'settings.projects.shared.resetTrust': '信頼をリセット',
|
||||
'settings.projects.shared.title': 'リポジトリ設定',
|
||||
'settings.projects.shared.description': 'リポジトリ自体に保存されるセットアップ。pull した全員が同じアクション、セットアップコマンド、スターター、プランを使えます。項目を移動するまで何も書き込まれません。',
|
||||
'settings.projects.shared.file': 'ファイル',
|
||||
'settings.projects.shared.status.missing': 'まだリポジトリにありません',
|
||||
'settings.projects.shared.status.ok': 'リポジトリにあります',
|
||||
'settings.projects.shared.plansDir': 'プランフォルダー',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': 'リポジトリのプランを置く場所(リポジトリ相対)。空なら .openchamber/plans。docs/plans のようなカスタムフォルダーはデフォルトを完全に置き換え、そのフォルダーだけを読み書きします。変更時は既存ファイルを自分で移動してください。',
|
||||
'settings.projects.shared.plansDirAria': 'リポジトリのプランフォルダー',
|
||||
'settings.projects.shared.actions.share': 'リポジトリへ移動',
|
||||
'settings.projects.shared.actions.showTitle': 'このリポジトリのアクションを自分のメニューに再表示します。',
|
||||
'settings.projects.shared.actions.hideTitle': 'このリポジトリのアクションを自分のメニューだけで非表示にします。リポジトリは変更されません。',
|
||||
'settings.projects.shared.actions.makePersonalTitle': 'リポジトリから削除し、このインスタンスのあなたの設定にだけ残します。',
|
||||
'settings.projects.shared.actions.shareTitle': 'リポジトリ内の {path} に保存し、pull した全員が使えるようにします。あなたの個人設定からは外れます。',
|
||||
'settings.projects.shared.actions.shareAfterSave': '先に編集内容が保存されてから移動できます',
|
||||
'settings.projects.shared.actions.makePersonal': '自分の設定へ移動',
|
||||
'settings.projects.shared.actions.hide': '自分には非表示',
|
||||
'settings.projects.shared.actions.show': '表示',
|
||||
'settings.projects.shared.hiddenBadge': '非表示',
|
||||
'settings.projects.shared.replaceMode': '自分のセットアップコマンドのみ使用し、リポジトリのものはスキップ',
|
||||
'settings.projects.shared.replaceModeAria': '自分のセットアップコマンドのみ使用し、リポジトリのものはスキップ',
|
||||
'settings.projects.shared.toast.shareFailed': 'リポジトリ設定を更新できませんでした',
|
||||
'settings.projects.actions.description': 'ヘッダーのプロジェクト名の横に表示されるプロジェクトごとのコマンド。',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': '保存する前にアクション名とコマンドを入力してください。',
|
||||
'settings.projects.actions.state.loading': '読み込み中...',
|
||||
@@ -1009,10 +1037,10 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': 'アプリを再起動して、Wi-Fi 上の他のデバイスから開けるようにします。',
|
||||
'settings.openchamber.desktopNetwork.field.warning': '警告: 有効にすると、アプリは同じローカルネットワーク上の誰からもアクセス可能になります。',
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'LAN アクセスには Desktop UI パスワードが必要です。設定されるまで、Desktop アプリはローカルのみで起動します。',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': 'パスワードを表示',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': 'パスワードを非表示',
|
||||
'settings.openchamber.desktopPassword.field.password': 'Desktop UI パスワード',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'パスワード不要',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': 'パスワード設定済み。置き換えるには新しいパスワードを入力してください。',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': 'パスワードを削除',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber は再起動後、およびログイン Session の有効期限後(12時間、または「このデバイスを信頼」の場合は7日)に確認を求めます。空のままにするとログインが無効になります。',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': '再起動後、別のデバイスから開く: ',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': '別のデバイスから開く: ',
|
||||
|
||||
@@ -1711,6 +1711,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': 'ファイルから計画をインポート',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': 'まだ保存された計画はありません。',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': '計画を削除',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': 'リポジトリ内',
|
||||
'rightSidebar.contextNotesTodo.plans.share': 'リポジトリのプランフォルダーへ移動し、pull した全員が見られるようにします',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': 'リポジトリから自分のプランへ移動',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': '計画「{title}」を削除',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': '新しいセッションに送信',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': '新しいワークツリーに送信',
|
||||
@@ -1729,6 +1732,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'TODOの送信に失敗しました',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '計画を更新できませんでした',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '計画の削除に失敗しました',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': 'プランを移動できませんでした',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '計画ファイルが空です',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '計画のインポートに失敗しました',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': '計画をインポートしました',
|
||||
@@ -2118,6 +2122,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'chat.draftStarters.sectionCommands': 'コマンド',
|
||||
'chat.draftStarters.sectionSkills': 'スキル',
|
||||
'chat.draftStarters.remove': '削除',
|
||||
'chat.draftStarters.sharedTitle': 'リポジトリ設定でピン留め。変更はそちらで',
|
||||
'chat.draftStarters.share': 'リポジトリ設定へ移動',
|
||||
'chat.draftStarters.makePersonal': '自分の設定へ移動',
|
||||
'chat.scrollToBottom.aria': '一番下にスクロール',
|
||||
'chat.promptNavigator.aria': 'プロンプトナビゲーション',
|
||||
'chat.promptNavigator.currentPrompt': '現在のプロンプト',
|
||||
@@ -2744,6 +2751,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
'projectActions.actions.addAction': 'アクションを追加',
|
||||
'projectActions.actions.addNewAction': '新しいアクションを追加',
|
||||
'projectActions.actions.autoDiscover': '自動検出',
|
||||
'projectActions.menu.sharedBadge': 'リポジトリ',
|
||||
'projects.sharedTrust.title': 'このリポジトリに保存されたコマンドを実行しますか?',
|
||||
'projects.sharedTrust.description': 'このリポジトリの {path} には、このマシンで実行されるコマンドが定義されています。一度信頼すると、変更があった場合のみ再度確認します。',
|
||||
'projects.sharedTrust.setupCommands': 'ワークツリーのセットアップコマンド',
|
||||
'projects.sharedTrust.actions': 'アクション',
|
||||
'projects.sharedTrust.skip': '今回は実行しない',
|
||||
'projects.sharedTrust.trust': '信頼して実行',
|
||||
'projectActions.actions.autoDiscoverTooltip': '開発サーバーを自動的に検出して実行します',
|
||||
'projectActions.actions.chooseActionAria': 'プロジェクトアクションを選択',
|
||||
'projectActions.actions.openPreview': 'プレビューを開く',
|
||||
|
||||
@@ -427,6 +427,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': '거부',
|
||||
'settings.common.state.comingSoon': '곧 제공됩니다...',
|
||||
'settings.projects.actions.title': '작업',
|
||||
'settings.projects.shared.badge': '저장소에 있음',
|
||||
'settings.projects.shared.actionsFromRepo': '저장소에 저장됨({path}). 저장소를 받는 모든 사람이 사용합니다.',
|
||||
'settings.projects.shared.commandsFromRepo': '먼저 실행됨, 저장소에 저장됨({path})',
|
||||
'settings.projects.shared.invalid': '{path}의 프로젝트 설정을 읽을 수 없습니다: {reason}',
|
||||
'settings.projects.shared.trusted': '이 인스턴스에서 저장소 명령을 신뢰함',
|
||||
'settings.projects.shared.resetTrust': '신뢰 초기화',
|
||||
'settings.projects.shared.title': '저장소 설정',
|
||||
'settings.projects.shared.description': '저장소 자체에 저장되는 설정입니다. 저장소를 받는 모든 사람이 같은 작업, 설정 명령, 스타터, 플랜을 사용합니다. 항목을 옮기기 전에는 아무것도 기록되지 않습니다.',
|
||||
'settings.projects.shared.file': '파일',
|
||||
'settings.projects.shared.status.missing': '아직 저장소에 없음',
|
||||
'settings.projects.shared.status.ok': '저장소에 있음',
|
||||
'settings.projects.shared.plansDir': '플랜 폴더',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': '저장소 플랜이 있는 위치입니다(저장소 기준 상대 경로). 비어 있으면 .openchamber/plans입니다. docs/plans 같은 사용자 지정 폴더는 기본값을 완전히 대체하며 그 폴더만 읽고 씁니다. 변경할 때 기존 파일은 직접 옮기세요.',
|
||||
'settings.projects.shared.plansDirAria': '저장소 플랜 폴더',
|
||||
'settings.projects.shared.actions.share': '저장소로 이동',
|
||||
'settings.projects.shared.actions.showTitle': '이 저장소 작업을 내 메뉴에 다시 표시합니다.',
|
||||
'settings.projects.shared.actions.hideTitle': '이 저장소 작업을 내 메뉴에서만 숨깁니다. 저장소는 바뀌지 않습니다.',
|
||||
'settings.projects.shared.actions.makePersonalTitle': '저장소에서 제거하고 이 인스턴스의 내 설정에만 남깁니다.',
|
||||
'settings.projects.shared.actions.shareTitle': '저장소 안의 {path}에 저장하여 저장소를 받는 모든 사람이 사용하게 합니다. 개인 설정에서는 빠집니다.',
|
||||
'settings.projects.shared.actions.shareAfterSave': '먼저 변경 사항이 저장된 뒤 이동할 수 있습니다',
|
||||
'settings.projects.shared.actions.makePersonal': '내 설정으로 이동',
|
||||
'settings.projects.shared.actions.hide': '나에게 숨기기',
|
||||
'settings.projects.shared.actions.show': '표시',
|
||||
'settings.projects.shared.hiddenBadge': '숨김',
|
||||
'settings.projects.shared.replaceMode': '내 설정 명령만 사용하고 저장소의 명령은 건너뛰기',
|
||||
'settings.projects.shared.replaceModeAria': '내 설정 명령만 사용하고 저장소의 명령은 건너뛰기',
|
||||
'settings.projects.shared.toast.shareFailed': '저장소 설정을 업데이트하지 못했습니다',
|
||||
'settings.projects.actions.description': '프로젝트 이름 옆 헤더에 표시할 프로젝트별 명령어입니다.',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': '저장하기 전에 작업 이름과 명령을 입력하세요.',
|
||||
'settings.projects.actions.state.loading': '로딩 중...',
|
||||
@@ -976,10 +1004,10 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': '휴대폰, 태블릿, Wi-Fi의 다른 컴퓨터에서 열 수 있도록 앱을 다시 시작합니다.',
|
||||
'settings.openchamber.desktopNetwork.field.warning': '경고: 활성화된 동안 같은 로컬 네트워크의 누구나 앱에 접속할 수 있습니다.',
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'LAN 접속에는 Desktop UI 비밀번호가 필요합니다. 설정하기 전까지 desktop 앱은 로컬 전용으로 시작됩니다.',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': '비밀번호 표시',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': '비밀번호 숨기기',
|
||||
'settings.openchamber.desktopPassword.field.password': 'Desktop UI 비밀번호',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': '비밀번호 필요 없음',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': '비밀번호가 설정되어 있습니다. 바꾸려면 새 비밀번호를 입력하세요.',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': '비밀번호 제거',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber는 다시 시작 후 비밀번호를 요청하고, 이후 로그인 세션이 만료되면 다시 요청합니다. 기본 12시간, 이 디바이스 신뢰 선택 시 7일입니다. 로그인을 끄려면 비워 두세요.',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': '다시 시작 후 다른 기기에서 열기: ',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': '다른 기기에서 열기: ',
|
||||
|
||||
@@ -1717,6 +1717,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': '파일에서 플랜 가져오기',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': '아직 저장된 플랜 없음',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': '플랜 삭제',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': '저장소에 있음',
|
||||
'rightSidebar.contextNotesTodo.plans.share': '저장소 플랜 폴더로 이동하여 저장소를 받는 모든 사람이 보게 합니다',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': '저장소에서 내 플랜으로 이동',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': '플랜 "{title}" 삭제',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': '새 세션으로 보내기',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': '새 워크트리로 보내기',
|
||||
@@ -1735,6 +1738,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Todo 전송 실패',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '계획을 업데이트하지 못했습니다',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '플랜 삭제 실패',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': '플랜을 이동하지 못했습니다',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '플랜 파일이 비어 있음',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '플랜 가져오기 실패',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': '플랜 가져옴',
|
||||
@@ -2124,6 +2128,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'chat.draftStarters.sectionCommands': 'Commands',
|
||||
'chat.draftStarters.sectionSkills': 'Skills',
|
||||
'chat.draftStarters.remove': 'Remove',
|
||||
'chat.draftStarters.sharedTitle': '저장소 설정에 고정됨. 그곳에서 변경하세요',
|
||||
'chat.draftStarters.share': '저장소 설정으로 이동',
|
||||
'chat.draftStarters.makePersonal': '내 설정으로 이동',
|
||||
'chat.scrollToBottom.aria': '맨 아래로 스크롤',
|
||||
'chat.promptNavigator.aria': '프롬프트 탐색',
|
||||
'chat.promptNavigator.currentPrompt': '현재 프롬프트',
|
||||
@@ -2745,6 +2752,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
'projectActions.actions.addAction': '작업 추가',
|
||||
'projectActions.actions.addNewAction': '새 작업 추가',
|
||||
'projectActions.actions.autoDiscover': '자동 검색',
|
||||
'projectActions.menu.sharedBadge': '저장소',
|
||||
'projects.sharedTrust.title': '이 저장소에 저장된 명령을 실행할까요?',
|
||||
'projects.sharedTrust.description': '이 저장소의 {path}에 이 컴퓨터에서 실행되는 명령이 정의되어 있습니다. 한 번 신뢰하면 명령이 바뀔 때만 다시 묻습니다.',
|
||||
'projects.sharedTrust.setupCommands': '워크트리 설정 명령',
|
||||
'projects.sharedTrust.actions': '작업',
|
||||
'projects.sharedTrust.skip': '이번에는 건너뛰기',
|
||||
'projects.sharedTrust.trust': '신뢰하고 실행',
|
||||
'projectActions.actions.autoDiscoverTooltip': '개발 서버를 자동으로 검색하고 실행합니다',
|
||||
'projectActions.actions.chooseActionAria': '프로젝트 작업 선택',
|
||||
'projectActions.actions.openPreview': '미리보기 열기',
|
||||
|
||||
@@ -789,10 +789,10 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': 'Aby telefony nadal mogły otwierać tę aplikację. Ekran nadal może się wyłączyć.',
|
||||
'settings.openchamber.desktopNetwork.field.warning': 'Ostrzeżenie: po włączeniu aplikacja jest dostępna dla każdego w tej samej sieci lokalnej.',
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'Dostęp LAN wymaga hasła UI pulpitu. Dopóki go nie ustawisz, aplikacja pulpitu uruchamia się tylko lokalnie.',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': 'Pokaż hasło',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': 'Ukryj hasło',
|
||||
'settings.openchamber.desktopPassword.field.password': 'Hasło UI pulpitu',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'Hasło nie jest wymagane',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': 'Hasło ustawione. Wpisz nowe, aby je zastąpić.',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': 'Usuń hasło',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber pyta po restarcie, a potem po wygaśnięciu sesji logowania: po 12 godzinach albo po 7 dniach z opcją Zaufaj temu urządzeniu. Zostaw puste, aby wyłączyć logowanie.',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': 'Po restarcie otwórz z innego urządzenia: ',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': 'Otwórz z innego urządzenia: ',
|
||||
@@ -1384,6 +1384,34 @@ export const settingsDict = {
|
||||
'settings.projects.actions.state.noDesktopSshForwards': 'Brak włączonych lokalnych przekierowań SSH.',
|
||||
'settings.projects.actions.state.untitled': 'Akcja bez nazwy',
|
||||
'settings.projects.actions.title': 'Akcje',
|
||||
'settings.projects.shared.badge': 'W repozytorium',
|
||||
'settings.projects.shared.actionsFromRepo': 'Zapisane w repozytorium ({path}). Każdy, kto je pobierze, je otrzyma.',
|
||||
'settings.projects.shared.commandsFromRepo': 'Uruchamiane najpierw, zapisane w repozytorium ({path})',
|
||||
'settings.projects.shared.invalid': 'Nie udało się odczytać konfiguracji projektu w {path}: {reason}',
|
||||
'settings.projects.shared.trusted': 'Polecenia z repozytorium zaufane w tej instancji',
|
||||
'settings.projects.shared.resetTrust': 'Resetuj zaufanie',
|
||||
'settings.projects.shared.title': 'Konfiguracja w repozytorium',
|
||||
'settings.projects.shared.description': 'Konfiguracja zapisana w samym repozytorium, dzięki czemu każdy, kto je pobierze, ma te same akcje, polecenia konfiguracji, startery i plany. Nic nie jest zapisywane, dopóki nie przeniesiesz tam elementu.',
|
||||
'settings.projects.shared.file': 'Plik',
|
||||
'settings.projects.shared.status.missing': 'Jeszcze nie ma w repozytorium',
|
||||
'settings.projects.shared.status.ok': 'W repozytorium',
|
||||
'settings.projects.shared.plansDir': 'Folder planów',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': 'Gdzie leżą plany w repozytorium, względem repozytorium. Puste oznacza .openchamber/plans. Własny folder, np. docs/plans, całkowicie zastępuje domyślny: czytany i zapisywany jest tylko ten folder. Istniejące pliki przenieś samodzielnie przy zmianie.',
|
||||
'settings.projects.shared.plansDirAria': 'Folder planów w repozytorium',
|
||||
'settings.projects.shared.actions.share': 'Przenieś do repozytorium',
|
||||
'settings.projects.shared.actions.showTitle': 'Ponownie pokazuje tę akcję z repozytorium w Twoim menu.',
|
||||
'settings.projects.shared.actions.hideTitle': 'Ukrywa tę akcję z repozytorium tylko w Twoim menu; repozytorium się nie zmienia.',
|
||||
'settings.projects.shared.actions.makePersonalTitle': 'Usuwa to z repozytorium i zostawia tylko w Twoich ustawieniach w tej instancji.',
|
||||
'settings.projects.shared.actions.shareTitle': 'Zapisuje to w {path} w repozytorium, więc każdy, kto je pobierze, to otrzyma. Znika z Twoich osobistych ustawień.',
|
||||
'settings.projects.shared.actions.shareAfterSave': 'Najpierw zapisz zmiany, potem przenieś',
|
||||
'settings.projects.shared.actions.makePersonal': 'Przenieś do moich ustawień',
|
||||
'settings.projects.shared.actions.hide': 'Ukryj dla mnie',
|
||||
'settings.projects.shared.actions.show': 'Pokaż',
|
||||
'settings.projects.shared.hiddenBadge': 'Ukryte',
|
||||
'settings.projects.shared.replaceMode': 'Używaj tylko moich poleceń konfiguracji, pomiń te z repozytorium',
|
||||
'settings.projects.shared.replaceModeAria': 'Używaj tylko moich poleceń konfiguracji, pomiń te z repozytorium',
|
||||
'settings.projects.shared.toast.shareFailed': 'Nie udało się zaktualizować konfiguracji w repozytorium',
|
||||
'settings.projects.actions.toast.saveFailed': 'Nie udało się zapisać akcji',
|
||||
'settings.projects.actions.toast.saved': 'Akcje projektu zostały zapisane',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': 'Przed zapisaniem uzupełnij nazwę akcji i polecenie.',
|
||||
|
||||
@@ -777,6 +777,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'chat.draftStarters.sectionCommands': 'Commands',
|
||||
'chat.draftStarters.sectionSkills': 'Skills',
|
||||
'chat.draftStarters.remove': 'Remove',
|
||||
'chat.draftStarters.sharedTitle': 'Przypięte w konfiguracji repozytorium; zmień to tam',
|
||||
'chat.draftStarters.share': 'Przenieś do konfiguracji repozytorium',
|
||||
'chat.draftStarters.makePersonal': 'Przenieś do moich ustawień',
|
||||
'chat.scrollToBottom.aria': 'Przewiń na dół',
|
||||
'chat.promptNavigator.aria': 'Nawigacja promptów',
|
||||
'chat.promptNavigator.currentPrompt': 'Bieżący prompt',
|
||||
@@ -2696,6 +2699,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
'projectActions.actions.addActionAria': 'Dodaj akcję',
|
||||
'projectActions.actions.addNewAction': 'Dodaj nową akcję',
|
||||
'projectActions.actions.autoDiscover': 'Wykryj automatycznie',
|
||||
'projectActions.menu.sharedBadge': 'repo',
|
||||
'projects.sharedTrust.title': 'Uruchomić polecenia zapisane w tym repozytorium?',
|
||||
'projects.sharedTrust.description': '{path} w tym repozytorium definiuje polecenia uruchamiane na tym komputerze. Zaufaj raz, a OpenChamber zapyta ponownie tylko wtedy, gdy się zmienią.',
|
||||
'projects.sharedTrust.setupCommands': 'Polecenia konfiguracji worktree',
|
||||
'projects.sharedTrust.actions': 'Akcje',
|
||||
'projects.sharedTrust.skip': 'Nie tym razem',
|
||||
'projects.sharedTrust.trust': 'Zaufaj i uruchom',
|
||||
'projectActions.actions.autoDiscoverTooltip': 'Automatycznie wykrywa i uruchamia serwer deweloperski',
|
||||
'projectActions.actions.chooseActionAria': 'Wybierz akcję projektu',
|
||||
'projectActions.actions.openPreview': 'Otwórz podgląd',
|
||||
@@ -2741,6 +2751,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.notes.placeholder': 'Zapisz kontekst, przypomnienia lub linki',
|
||||
'rightSidebar.contextNotesTodo.plan.defaultTitle': 'Plan',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Usuń plan',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': 'W repozytorium',
|
||||
'rightSidebar.contextNotesTodo.plans.share': 'Przenieś do folderu planów w repozytorium, aby każdy, kto je pobierze, go widział',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': 'Przenieś do moich planów, poza repozytorium',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Usuń plan „{title}”',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': 'Brak zapisanych planów.',
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Importuj plan z pliku',
|
||||
@@ -2753,6 +2766,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.toast.createSessionFailed': 'Nie udało się utworzyć sesji',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Nie udało się zaktualizować planu',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Nie udało się usunąć planu',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': 'Nie udało się przenieść planu',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Nie udało się zaimportować planu',
|
||||
'rightSidebar.contextNotesTodo.toast.loadNotesFailed': 'Nie udało się załadować notatek projektu',
|
||||
'rightSidebar.contextNotesTodo.toast.noActiveSession': 'Nie wybrano aktywnej sesji',
|
||||
|
||||
@@ -427,6 +427,34 @@ export const settingsDict = {
|
||||
"settings.common.permission.deny": "Negar",
|
||||
"settings.common.state.comingSoon": "Em breve...",
|
||||
"settings.projects.actions.title": "Ações",
|
||||
"settings.projects.shared.badge": "No repositório",
|
||||
"settings.projects.shared.actionsFromRepo": "Guardadas no repositório ({path}). Todos que o baixarem terão estas.",
|
||||
"settings.projects.shared.commandsFromRepo": "Executados primeiro, guardados no repositório ({path})",
|
||||
"settings.projects.shared.invalid": "A configuração do projeto em {path} não pôde ser lida: {reason}",
|
||||
"settings.projects.shared.trusted": "Comandos do repositório confiáveis nesta instância",
|
||||
"settings.projects.shared.resetTrust": "Redefinir confiança",
|
||||
"settings.projects.shared.title": "Configuração no repositório",
|
||||
"settings.projects.shared.description": "Configuração guardada no próprio repositório, para que todos que o baixarem tenham as mesmas ações, comandos de configuração, iniciadores e planos. Nada é gravado até você mover um item para lá.",
|
||||
"settings.projects.shared.file": "Arquivo",
|
||||
"settings.projects.shared.status.missing": "Ainda não está no repositório",
|
||||
"settings.projects.shared.status.ok": "No repositório",
|
||||
"settings.projects.shared.plansDir": "Pasta de planos",
|
||||
"settings.projects.shared.plansDirPlaceholder": ".openchamber/plans",
|
||||
"settings.projects.shared.plansDirInfo": "Onde ficam os planos do repositório, relativo ao repositório. Vazio significa .openchamber/plans. Uma pasta própria como docs/plans substitui a padrão por completo: só essa pasta é lida e gravada. Mova você mesmo os arquivos existentes ao trocar.",
|
||||
"settings.projects.shared.plansDirAria": "Pasta de planos no repositório",
|
||||
"settings.projects.shared.actions.share": "Mover para o repositório",
|
||||
"settings.projects.shared.actions.showTitle": "Mostra esta ação do repositório novamente no seu menu.",
|
||||
"settings.projects.shared.actions.hideTitle": "Oculta esta ação do repositório apenas no seu menu; o repositório não muda.",
|
||||
"settings.projects.shared.actions.makePersonalTitle": "Remove do repositório e mantém apenas nas suas configurações nesta instância.",
|
||||
"settings.projects.shared.actions.shareTitle": "Guarda em {path} dentro do repositório, para que todos que o baixarem tenham. Sai das suas configurações pessoais.",
|
||||
"settings.projects.shared.actions.shareAfterSave": "Salva suas edições primeiro, depois mova",
|
||||
"settings.projects.shared.actions.makePersonal": "Mover para minhas configurações",
|
||||
"settings.projects.shared.actions.hide": "Ocultar para mim",
|
||||
"settings.projects.shared.actions.show": "Mostrar",
|
||||
"settings.projects.shared.hiddenBadge": "Oculto",
|
||||
"settings.projects.shared.replaceMode": "Usar apenas meus comandos de configuração e ignorar os do repositório",
|
||||
"settings.projects.shared.replaceModeAria": "Usar apenas meus comandos de configuração e ignorar os do repositório",
|
||||
"settings.projects.shared.toast.shareFailed": "Falha ao atualizar a configuração no repositório",
|
||||
"settings.projects.actions.description": "Comandos por projeto mostrados no cabeçalho junto ao nome do projeto.",
|
||||
"settings.projects.actions.validation.fillNameAndCommand": "Preencha o nome da ação e o comando antes de salvar.",
|
||||
"settings.projects.actions.state.loading": "Carregando...",
|
||||
@@ -976,10 +1004,10 @@ export const settingsDict = {
|
||||
"settings.openchamber.desktopNetwork.field.allowLanAccessDescription": "Reinicia o aplicativo para que os telefones, tablets e outros computadores em seu Wi-Fi possam abri-lo.",
|
||||
"settings.openchamber.desktopNetwork.field.warning": "Aviso: enquanto estiver habilitado, o aplicativo ficará acessível a qualquer pessoa na mesma rede local.",
|
||||
"settings.openchamber.desktopNetwork.field.passwordRequiredWarning": "O acesso LAN exige uma senha da UI do desktop. Até configurar uma, o app de desktop inicia apenas localmente.",
|
||||
"settings.openchamber.desktopPassword.actions.showPassword": "Mostrar senha",
|
||||
"settings.openchamber.desktopPassword.actions.hidePassword": "Ocultar senha",
|
||||
"settings.openchamber.desktopPassword.field.password": "Senha da UI do desktop",
|
||||
"settings.openchamber.desktopPassword.field.passwordPlaceholder": "Nenhuma senha obrigatória",
|
||||
"settings.openchamber.desktopPassword.field.passwordSetPlaceholder": "Senha definida. Digite uma nova para substituí-la.",
|
||||
"settings.openchamber.desktopPassword.actions.removePassword": "Remover senha",
|
||||
"settings.openchamber.desktopPassword.field.passwordDescription": "O OpenChamber pede após reiniciar e depois quando a sessão expira: em 12 horas, ou 7 dias com Confiar neste dispositivo. Deixe vazio para desativar o login.",
|
||||
"settings.openchamber.desktopNetwork.hint.openAfterRestart": "Depois do reinício, abra de outro dispositivo: ",
|
||||
"settings.openchamber.desktopNetwork.hint.openNow": "Abrir de outro dispositivo: ",
|
||||
|
||||
@@ -1693,6 +1693,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
"rightSidebar.contextNotesTodo.plans.importFromFile": "Importar plano de arquivo",
|
||||
"rightSidebar.contextNotesTodo.plans.empty": "Ainda não há planos salvos.",
|
||||
"rightSidebar.contextNotesTodo.plans.deletePlan": "Excluir plano",
|
||||
"rightSidebar.contextNotesTodo.plans.sharedBadge": "No repositório",
|
||||
"rightSidebar.contextNotesTodo.plans.share": "Mover para a pasta de planos do repositório, para que todos que o baixarem o vejam",
|
||||
"rightSidebar.contextNotesTodo.plans.makePersonal": "Mover para meus planos, fora do repositório",
|
||||
"rightSidebar.contextNotesTodo.plans.deletePlanWithTitle": "Excluir plano \"{title}\"",
|
||||
"rightSidebar.contextNotesTodo.sendDialog.title.newSession": "Enviar a uma nova sessão",
|
||||
"rightSidebar.contextNotesTodo.sendDialog.title.newWorktree": "Enviar a uma nova sessão de worktree",
|
||||
@@ -1711,6 +1714,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"rightSidebar.contextNotesTodo.toast.sendTodoFailed": "Não foi possível enviar a tarefa",
|
||||
"rightSidebar.contextNotesTodo.toast.updatePlanFailed": "Falha ao atualizar o plano",
|
||||
"rightSidebar.contextNotesTodo.toast.deletePlanFailed": "Não foi possível excluir o plano",
|
||||
"rightSidebar.contextNotesTodo.toast.movePlanFailed": "Falha ao mover o plano",
|
||||
"rightSidebar.contextNotesTodo.toast.planFileEmpty": "O arquivo do plano está vazio",
|
||||
"rightSidebar.contextNotesTodo.toast.importPlanFailed": "Não foi possível importar o plano",
|
||||
"rightSidebar.contextNotesTodo.toast.planImported": "Plano importado",
|
||||
@@ -2100,6 +2104,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
"chat.draftStarters.sectionCommands": "Commands",
|
||||
"chat.draftStarters.sectionSkills": "Skills",
|
||||
"chat.draftStarters.remove": "Remove",
|
||||
"chat.draftStarters.sharedTitle": "Fixado na configuração do repositório; altere lá",
|
||||
"chat.draftStarters.share": "Mover para a configuração do repositório",
|
||||
"chat.draftStarters.makePersonal": "Mover para minhas configurações",
|
||||
"chat.scrollToBottom.aria": "Ir ao final",
|
||||
"chat.promptNavigator.aria": "Navegação de prompts",
|
||||
"chat.promptNavigator.currentPrompt": "Prompt atual",
|
||||
@@ -2711,6 +2718,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
"projectActions.actions.addAction": "Adicionar ação",
|
||||
"projectActions.actions.addNewAction": "Adicionar nova ação",
|
||||
"projectActions.actions.autoDiscover": "Detectar automaticamente",
|
||||
"projectActions.menu.sharedBadge": "repo",
|
||||
"projects.sharedTrust.title": "Executar os comandos guardados neste repositório?",
|
||||
"projects.sharedTrust.description": "{path} neste repositório define comandos que rodam nesta máquina. Confie uma vez e o OpenChamber só perguntará de novo quando eles mudarem.",
|
||||
"projects.sharedTrust.setupCommands": "Comandos de configuração do worktree",
|
||||
"projects.sharedTrust.actions": "Ações",
|
||||
"projects.sharedTrust.skip": "Agora não",
|
||||
"projects.sharedTrust.trust": "Confiar e executar",
|
||||
"projectActions.actions.autoDiscoverTooltip": "Detecta e executa automaticamente o servidor de desenvolvimento",
|
||||
"projectActions.actions.chooseActionAria": "Escolher ação do projeto",
|
||||
"projectActions.actions.openPreview": "Abrir Preview",
|
||||
|
||||
@@ -455,6 +455,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': 'Reddet',
|
||||
'settings.common.state.comingSoon': 'Yakında...',
|
||||
'settings.projects.actions.title': 'Eylemler',
|
||||
'settings.projects.shared.badge': 'Depoda',
|
||||
'settings.projects.shared.actionsFromRepo': 'Depoda saklanır ({path}). Depoyu çeken herkes bunları alır.',
|
||||
'settings.projects.shared.commandsFromRepo': 'Önce çalışır, depoda saklanır ({path})',
|
||||
'settings.projects.shared.invalid': '{path} içindeki proje yapılandırması okunamadı: {reason}',
|
||||
'settings.projects.shared.trusted': 'Depo komutlarına bu örnekte güveniliyor',
|
||||
'settings.projects.shared.resetTrust': 'Güveni sıfırla',
|
||||
'settings.projects.shared.title': 'Depo yapılandırması',
|
||||
'settings.projects.shared.description': 'Deponun kendisinde saklanan kurulum; depoyu çeken herkes aynı eylemleri, kurulum komutlarını, başlatıcıları ve planları alır. Oraya bir öğe taşıyana kadar hiçbir şey yazılmaz.',
|
||||
'settings.projects.shared.file': 'Dosya',
|
||||
'settings.projects.shared.status.missing': 'Henüz depoda değil',
|
||||
'settings.projects.shared.status.ok': 'Depoda',
|
||||
'settings.projects.shared.plansDir': 'Planlar klasörü',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': 'Depo planlarının bulunduğu yer (depoya göre). Boş bırakılırsa .openchamber/plans kullanılır. docs/plans gibi özel bir klasör varsayılanı tamamen değiştirir: yalnızca o klasör okunur ve yazılır. Değiştirdiğinde mevcut dosyaları kendin taşı.',
|
||||
'settings.projects.shared.plansDirAria': 'Depo planlar klasörü',
|
||||
'settings.projects.shared.actions.share': 'Depoya taşı',
|
||||
'settings.projects.shared.actions.showTitle': 'Bu depo eylemini menünde yeniden gösterir.',
|
||||
'settings.projects.shared.actions.hideTitle': 'Bu depo eylemini yalnızca senin menünden gizler; depo değişmez.',
|
||||
'settings.projects.shared.actions.makePersonalTitle': 'Depodan kaldırır ve yalnızca bu örnekteki ayarlarında tutar.',
|
||||
'settings.projects.shared.actions.shareTitle': 'Depodaki {path} içine kaydeder; depoyu çeken herkes alır. Kişisel ayarlarından çıkar.',
|
||||
'settings.projects.shared.actions.shareAfterSave': 'Önce değişikliklerin kaydedilir, sonra taşı',
|
||||
'settings.projects.shared.actions.makePersonal': 'Ayarlarıma taşı',
|
||||
'settings.projects.shared.actions.hide': 'Benim için gizle',
|
||||
'settings.projects.shared.actions.show': 'Göster',
|
||||
'settings.projects.shared.hiddenBadge': 'Gizli',
|
||||
'settings.projects.shared.replaceMode': 'Yalnızca kendi kurulum komutlarımı kullan, depodakileri atla',
|
||||
'settings.projects.shared.replaceModeAria': 'Yalnızca kendi kurulum komutlarımı kullan, depodakileri atla',
|
||||
'settings.projects.shared.toast.shareFailed': 'Depo yapılandırması güncellenemedi',
|
||||
'settings.projects.actions.description': 'Üst bilgide proje adının yanında gösterilen proje bazlı komutlar.',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': 'Kaydetmeden önce eylem adını ve komutu doldurun.',
|
||||
'settings.projects.actions.state.loading': 'Yükleniyor...',
|
||||
@@ -1004,10 +1032,10 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': 'Telefonlar, tabletler ve Wi-Fi ağınızdaki diğer bilgisayarların uygulamayı açabilmesi için uygulamayı yeniden başlatır.',
|
||||
'settings.openchamber.desktopNetwork.field.warning': 'Uyarı: Etkinken uygulamaya aynı yerel ağdaki herkes erişebilir.',
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': 'LAN erişimi Masaüstü UI Şifresi gerektirir. Şifre ayarlanana kadar masaüstü uygulaması yalnızca yerel olarak başlar.',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': 'Şifreyi göster',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': 'Şifreyi gizle',
|
||||
'settings.openchamber.desktopPassword.field.password': 'Masaüstü UI Şifresi',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': 'Şifre gerekmez',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': 'Şifre ayarlı. Değiştirmek için yeni bir şifre yazın.',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': 'Şifreyi kaldır',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber yeniden başlatma sonrasında sorar, ardından giriş session\'ı sona erdiğinde tekrar sorar: 12 saat sonra veya Trust this device ile 7 gün sonra. Girişi devre dışı bırakmak için boş bırakın.',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': 'Yeniden başlatma sonrasında başka bir cihazdan açın: ',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': 'Başka bir cihazdan açın: ',
|
||||
|
||||
@@ -1677,6 +1677,9 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': 'Planı dosyadan içe aktar',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': 'Henüz kaydedilmiş plan yok.',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': 'Planı sil',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': 'Depoda',
|
||||
'rightSidebar.contextNotesTodo.plans.share': 'Depo planlar klasörüne taşı; depoyu çeken herkes görür',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': 'Depodan çıkarıp planlarıma taşı',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': 'Planı sil: "{title}"',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': 'Yeni session\'a gönder',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': 'Yeni worktree\'ye gönder',
|
||||
@@ -1695,6 +1698,7 @@ export const dict = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': 'Yapılacak gönderilemedi',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': 'Plan güncellenemedi',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': 'Plan silinemedi',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': 'Plan taşınamadı',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': 'Plan dosyası boş',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': 'Plan içe aktarılamadı',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': 'Plan içe aktarıldı',
|
||||
@@ -2082,6 +2086,9 @@ export const dict = {
|
||||
'chat.draftStarters.sectionCommands': 'Komutlar',
|
||||
'chat.draftStarters.sectionSkills': 'Skill\'ler',
|
||||
'chat.draftStarters.remove': 'Kaldır',
|
||||
'chat.draftStarters.sharedTitle': 'Depo yapılandırmasında sabitlendi; orada değiştirin',
|
||||
'chat.draftStarters.share': 'Depo yapılandırmasına taşı',
|
||||
'chat.draftStarters.makePersonal': 'Ayarlarıma taşı',
|
||||
'chat.scrollToBottom.aria': 'En alta kaydır',
|
||||
'chat.promptNavigator.aria': 'Prompt gezinmesi',
|
||||
'chat.promptNavigator.currentPrompt': 'Mevcut prompt',
|
||||
@@ -2675,6 +2682,13 @@ export const dict = {
|
||||
'projectActions.actions.addAction': 'Eylem ekle',
|
||||
'projectActions.actions.addNewAction': 'Yeni eylem ekle',
|
||||
'projectActions.actions.autoDiscover': 'Otomatik keşfet',
|
||||
'projectActions.menu.sharedBadge': 'depo',
|
||||
'projects.sharedTrust.title': 'Bu depoda saklanan komutlar çalıştırılsın mı?',
|
||||
'projects.sharedTrust.description': 'Bu depodaki {path}, bu makinede çalışan komutlar tanımlıyor. Bir kez güvenin; OpenChamber yalnızca değiştiklerinde yeniden sorar.',
|
||||
'projects.sharedTrust.setupCommands': 'Worktree kurulum komutları',
|
||||
'projects.sharedTrust.actions': 'Eylemler',
|
||||
'projects.sharedTrust.skip': 'Bu sefer değil',
|
||||
'projects.sharedTrust.trust': 'Güven ve çalıştır',
|
||||
'projectActions.actions.autoDiscoverTooltip': 'Geliştirme sunucusunu otomatik keşfeder ve çalıştırır',
|
||||
'projectActions.actions.chooseActionAria': 'Proje eylemini seç',
|
||||
'projectActions.actions.openPreview': 'Önizlemeyi Aç',
|
||||
|
||||
@@ -427,6 +427,34 @@ export const settingsDict = {
|
||||
"settings.common.permission.deny": "Заборонити",
|
||||
"settings.common.state.comingSoon": "Незабаром...",
|
||||
"settings.projects.actions.title": "Дії",
|
||||
"settings.projects.shared.badge": "У репозиторії",
|
||||
"settings.projects.shared.actionsFromRepo": "Зберігаються в репозиторії ({path}). Їх отримує кожен, хто його клонує.",
|
||||
"settings.projects.shared.commandsFromRepo": "Виконуються першими, зберігаються в репозиторії ({path})",
|
||||
"settings.projects.shared.invalid": "Не вдалося прочитати конфіг проєкту в {path}: {reason}",
|
||||
"settings.projects.shared.trusted": "Командам із репозиторію довірено на цьому інстансі",
|
||||
"settings.projects.shared.resetTrust": "Скинути довіру",
|
||||
"settings.projects.shared.title": "Конфіг у репозиторії",
|
||||
"settings.projects.shared.description": "Налаштування, що лежать у самому репозиторії, тож кожен, хто його клонує, отримує ті самі дії, команди сетапу, стартери й плани. Туди нічого не записується, поки ви не перенесете елемент.",
|
||||
"settings.projects.shared.file": "Файл",
|
||||
"settings.projects.shared.status.missing": "Ще немає в репозиторії",
|
||||
"settings.projects.shared.status.ok": "У репозиторії",
|
||||
"settings.projects.shared.plansDir": "Тека планів",
|
||||
"settings.projects.shared.plansDirPlaceholder": ".openchamber/plans",
|
||||
"settings.projects.shared.plansDirInfo": "Де лежать плани репозиторію, відносно репозиторію. Порожнє означає .openchamber/plans. Своя тека, наприклад docs/plans, повністю замінює типову: читається й пишеться лише вона. Наявні файли при зміні перенесіть самі.",
|
||||
"settings.projects.shared.plansDirAria": "Тека планів у репозиторії",
|
||||
"settings.projects.shared.actions.share": "Перенести в репозиторій",
|
||||
"settings.projects.shared.actions.showTitle": "Знову показує цю дію з репозиторію у вашому меню.",
|
||||
"settings.projects.shared.actions.hideTitle": "Ховає цю дію з репозиторію лише у вашому меню; репозиторій не змінюється.",
|
||||
"settings.projects.shared.actions.makePersonalTitle": "Прибирає з репозиторію і лишає лише у ваших налаштуваннях на цьому інстансі.",
|
||||
"settings.projects.shared.actions.shareTitle": "Зберігає це в {path} у репозиторії, тож кожен, хто його клонує, це отримає. З ваших особистих налаштувань воно зникає.",
|
||||
"settings.projects.shared.actions.shareAfterSave": "Спочатку збережуться ваші правки, потім перенести",
|
||||
"settings.projects.shared.actions.makePersonal": "Перенести в мої налаштування",
|
||||
"settings.projects.shared.actions.hide": "Сховати для мене",
|
||||
"settings.projects.shared.actions.show": "Показати",
|
||||
"settings.projects.shared.hiddenBadge": "Сховано",
|
||||
"settings.projects.shared.replaceMode": "Використовувати лише мої команди налаштування, пропустити ті, що з репозиторію",
|
||||
"settings.projects.shared.replaceModeAria": "Використовувати лише мої команди налаштування, пропустити ті, що з репозиторію",
|
||||
"settings.projects.shared.toast.shareFailed": "Не вдалося оновити конфіг у репозиторії",
|
||||
"settings.projects.actions.description": "Команди для кожного проєкту відображаються в заголовку біля назви проєкту.",
|
||||
"settings.projects.actions.validation.fillNameAndCommand": "Введіть назву дії та команду перед збереженням.",
|
||||
"settings.projects.actions.state.loading": "Завантаження...",
|
||||
@@ -976,10 +1004,10 @@ export const settingsDict = {
|
||||
"settings.openchamber.desktopNetwork.field.allowLanAccessDescription": "Перезапускає застосунок, щоб телефони, планшети та інші комп’ютери в мережі Wi-Fi могли його відкрити.",
|
||||
"settings.openchamber.desktopNetwork.field.warning": "Попередження: якщо це ввімкнено, застосунок доступний усім у тій самій локальній мережі.",
|
||||
"settings.openchamber.desktopNetwork.field.passwordRequiredWarning": "Для LAN-доступу потрібен пароль десктопного UI. Доки його не задано, десктопний застосунок запускається лише локально.",
|
||||
"settings.openchamber.desktopPassword.actions.showPassword": "Показати пароль",
|
||||
"settings.openchamber.desktopPassword.actions.hidePassword": "Приховати пароль",
|
||||
"settings.openchamber.desktopPassword.field.password": "Пароль для десктопного UI",
|
||||
"settings.openchamber.desktopPassword.field.passwordPlaceholder": "Пароль не потрібен",
|
||||
"settings.openchamber.desktopPassword.field.passwordSetPlaceholder": "Пароль встановлено. Введіть новий, щоб замінити.",
|
||||
"settings.openchamber.desktopPassword.actions.removePassword": "Видалити пароль",
|
||||
"settings.openchamber.desktopPassword.field.passwordDescription": "OpenChamber попросить пароль після перезапуску, а потім коли сесія логіну спливе: через 12 годин або через 7 днів із «Довіряти цьому пристрою». Залиште порожнім, щоб вимкнути логін.",
|
||||
"settings.openchamber.desktopNetwork.hint.openAfterRestart": "Після перезавантаження відкрити з іншого пристрою: ",
|
||||
"settings.openchamber.desktopNetwork.hint.openNow": "Відкрити з іншого пристрою: ",
|
||||
|
||||
@@ -1693,6 +1693,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
"rightSidebar.contextNotesTodo.plans.importFromFile": "Імпортувати план із файлу",
|
||||
"rightSidebar.contextNotesTodo.plans.empty": "Ще немає збережених планів.",
|
||||
"rightSidebar.contextNotesTodo.plans.deletePlan": "Видалити план",
|
||||
"rightSidebar.contextNotesTodo.plans.sharedBadge": "У репозиторії",
|
||||
"rightSidebar.contextNotesTodo.plans.share": "Перенести в теку планів репозиторію, щоб його бачив кожен, хто клонує репозиторій",
|
||||
"rightSidebar.contextNotesTodo.plans.makePersonal": "Перенести в мої плани, з репозиторію",
|
||||
"rightSidebar.contextNotesTodo.plans.deletePlanWithTitle": "Видалити план \"{title}\"",
|
||||
"rightSidebar.contextNotesTodo.sendDialog.title.newSession": "Надіслати до нової сесії",
|
||||
"rightSidebar.contextNotesTodo.sendDialog.title.newWorktree": "Надіслати до нової сесії в worktree",
|
||||
@@ -1711,6 +1714,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"rightSidebar.contextNotesTodo.toast.sendTodoFailed": "Не вдалося надіслати завдання",
|
||||
"rightSidebar.contextNotesTodo.toast.updatePlanFailed": "Не вдалося оновити план",
|
||||
"rightSidebar.contextNotesTodo.toast.deletePlanFailed": "Не вдалося видалити план",
|
||||
"rightSidebar.contextNotesTodo.toast.movePlanFailed": "Не вдалося перемістити план",
|
||||
"rightSidebar.contextNotesTodo.toast.planFileEmpty": "Файл плану порожній",
|
||||
"rightSidebar.contextNotesTodo.toast.importPlanFailed": "Не вдалося імпортувати план",
|
||||
"rightSidebar.contextNotesTodo.toast.planImported": "План імпортовано",
|
||||
@@ -2100,6 +2104,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
"chat.draftStarters.sectionCommands": "Команди",
|
||||
"chat.draftStarters.sectionSkills": "Скіли",
|
||||
"chat.draftStarters.remove": "Прибрати",
|
||||
"chat.draftStarters.sharedTitle": "Закріплено в конфігу репозиторію; змінюйте там",
|
||||
"chat.draftStarters.share": "Перенести в конфіг репозиторію",
|
||||
"chat.draftStarters.makePersonal": "Перенести в мої налаштування",
|
||||
"chat.scrollToBottom.aria": "Прокрутити вниз",
|
||||
"chat.promptNavigator.aria": "Навігація за промптами",
|
||||
"chat.promptNavigator.currentPrompt": "Поточний промпт",
|
||||
@@ -2711,6 +2718,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
"projectActions.actions.addAction": "Додати дію",
|
||||
"projectActions.actions.addNewAction": "Додати нову дію",
|
||||
"projectActions.actions.autoDiscover": "Автовиявлення",
|
||||
"projectActions.menu.sharedBadge": "репо",
|
||||
"projects.sharedTrust.title": "Виконати команди, збережені в цьому репозиторії?",
|
||||
"projects.sharedTrust.description": "{path} у цьому репозиторії містить команди, які виконуються на цьому комп'ютері. Довірте їх один раз, і OpenChamber запитає знову лише коли вони зміняться.",
|
||||
"projects.sharedTrust.setupCommands": "Команди налаштування worktree",
|
||||
"projects.sharedTrust.actions": "Дії",
|
||||
"projects.sharedTrust.skip": "Не цього разу",
|
||||
"projects.sharedTrust.trust": "Довірити й виконати",
|
||||
"projectActions.actions.autoDiscoverTooltip": "Автоматично знаходить і запускає сервер розробки",
|
||||
"projectActions.actions.chooseActionAria": "Вибрати дію проєкту",
|
||||
"projectActions.actions.openPreview": "Відкрити Preview",
|
||||
|
||||
@@ -427,6 +427,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': '拒绝',
|
||||
'settings.common.state.comingSoon': '即将推出...',
|
||||
'settings.projects.actions.title': '操作',
|
||||
'settings.projects.shared.badge': '在仓库中',
|
||||
'settings.projects.shared.actionsFromRepo': '存储在仓库中({path})。拉取仓库的每个人都会获得。',
|
||||
'settings.projects.shared.commandsFromRepo': '首先运行,存储在仓库中({path})',
|
||||
'settings.projects.shared.invalid': '无法读取 {path} 中的项目配置:{reason}',
|
||||
'settings.projects.shared.trusted': '已在此实例上信任仓库命令',
|
||||
'settings.projects.shared.resetTrust': '重置信任',
|
||||
'settings.projects.shared.title': '仓库配置',
|
||||
'settings.projects.shared.description': '存储在仓库本身的设置,拉取仓库的每个人都会获得相同的操作、设置命令、启动项和计划。在你移入项目之前不会写入任何内容。',
|
||||
'settings.projects.shared.file': '文件',
|
||||
'settings.projects.shared.status.missing': '尚未在仓库中',
|
||||
'settings.projects.shared.status.ok': '已在仓库中',
|
||||
'settings.projects.shared.plansDir': '计划文件夹',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': '仓库计划的存放位置(相对于仓库)。留空表示 .openchamber/plans。自定义文件夹(如 docs/plans)会完全替代默认值:只读写该文件夹。更改时请自行移动现有文件。',
|
||||
'settings.projects.shared.plansDirAria': '仓库计划文件夹',
|
||||
'settings.projects.shared.actions.share': '移至仓库',
|
||||
'settings.projects.shared.actions.showTitle': '在你的菜单中重新显示此仓库操作。',
|
||||
'settings.projects.shared.actions.hideTitle': '仅在你的菜单中隐藏此仓库操作;仓库不会改变。',
|
||||
'settings.projects.shared.actions.makePersonalTitle': '从仓库中移除,仅保留在此实例上你的设置中。',
|
||||
'settings.projects.shared.actions.shareTitle': '存储到仓库内的 {path},拉取仓库的每个人都会获得。它会从你的个人设置中移除。',
|
||||
'settings.projects.shared.actions.shareAfterSave': '先保存你的修改,然后再移动',
|
||||
'settings.projects.shared.actions.makePersonal': '移至我的设置',
|
||||
'settings.projects.shared.actions.hide': '对我隐藏',
|
||||
'settings.projects.shared.actions.show': '显示',
|
||||
'settings.projects.shared.hiddenBadge': '已隐藏',
|
||||
'settings.projects.shared.replaceMode': '仅使用我的设置命令,跳过仓库中的命令',
|
||||
'settings.projects.shared.replaceModeAria': '仅使用我的设置命令,跳过仓库中的命令',
|
||||
'settings.projects.shared.toast.shareFailed': '更新仓库配置失败',
|
||||
'settings.projects.actions.description': '按项目显示在项目名旁边表头中的命令。',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': '保存前请填写操作名称和命令。',
|
||||
'settings.projects.actions.state.loading': '加载中...',
|
||||
@@ -976,10 +1004,10 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.allowLanAccessDescription': '会重启应用,以便手机、平板和同一 Wi‑Fi 下的其他电脑访问。',
|
||||
'settings.openchamber.desktopNetwork.field.warning': '警告:启用后,同一本地网络中的任何人都可访问此应用。',
|
||||
'settings.openchamber.desktopNetwork.field.passwordRequiredWarning': '局域网访问需要桌面 UI 密码。在设置密码之前,桌面应用只会以本机访问模式启动。',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': '显示密码',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': '隐藏密码',
|
||||
'settings.openchamber.desktopPassword.field.password': '桌面 UI 密码',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': '不需要密码',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': '已设置密码。输入新密码以替换。',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': '移除密码',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber 会在重启后要求输入密码,之后在登录会话过期时再次要求:12 小时后,或选择“信任此设备”后 7 天。留空可关闭登录。',
|
||||
'settings.openchamber.desktopNetwork.hint.openAfterRestart': '重启后可在其他设备打开:',
|
||||
'settings.openchamber.desktopNetwork.hint.openNow': '可在其他设备打开:',
|
||||
|
||||
@@ -1681,6 +1681,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': '从文件导入计划',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': '还没有已保存的计划。',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': '删除计划',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': '在仓库中',
|
||||
'rightSidebar.contextNotesTodo.plans.share': '移至仓库计划文件夹,拉取仓库的每个人都能看到',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': '移至我的计划,移出仓库',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': '删除计划“{title}”',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': '发送到新会话',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': '发送到新工作树',
|
||||
@@ -1699,6 +1702,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': '发送待办失败',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '更新计划失败',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '删除计划失败',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': '移动计划失败',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '计划文件为空',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '导入计划失败',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': '计划已导入',
|
||||
@@ -2088,6 +2092,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'chat.draftStarters.sectionCommands': 'Commands',
|
||||
'chat.draftStarters.sectionSkills': 'Skills',
|
||||
'chat.draftStarters.remove': 'Remove',
|
||||
'chat.draftStarters.sharedTitle': '固定在仓库配置中;请在那里修改',
|
||||
'chat.draftStarters.share': '移至仓库配置',
|
||||
'chat.draftStarters.makePersonal': '移至我的设置',
|
||||
'chat.scrollToBottom.aria': '滚动到底部',
|
||||
'chat.promptNavigator.aria': '提示词导航',
|
||||
'chat.promptNavigator.currentPrompt': '当前提示',
|
||||
@@ -2711,6 +2718,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
'projectActions.actions.addAction': '添加操作',
|
||||
'projectActions.actions.addNewAction': '添加新操作',
|
||||
'projectActions.actions.autoDiscover': '自动发现',
|
||||
'projectActions.menu.sharedBadge': '仓库',
|
||||
'projects.sharedTrust.title': '运行此仓库中存储的命令?',
|
||||
'projects.sharedTrust.description': '此仓库中的 {path} 定义了会在本机运行的命令。信任一次后,只有当命令变更时 OpenChamber 才会再次询问。',
|
||||
'projects.sharedTrust.setupCommands': '工作树设置命令',
|
||||
'projects.sharedTrust.actions': '操作',
|
||||
'projects.sharedTrust.skip': '这次不运行',
|
||||
'projects.sharedTrust.trust': '信任并运行',
|
||||
'projectActions.actions.autoDiscoverTooltip': '自动发现并运行开发服务器',
|
||||
'projectActions.actions.chooseActionAria': '选择项目操作',
|
||||
'projectActions.actions.openPreview': '打开 Preview',
|
||||
|
||||
@@ -424,6 +424,34 @@ export const settingsDict = {
|
||||
'settings.common.permission.deny': '拒絕',
|
||||
'settings.common.state.comingSoon': '即將推出...',
|
||||
'settings.projects.actions.title': '操作',
|
||||
'settings.projects.shared.badge': '在儲存庫中',
|
||||
'settings.projects.shared.actionsFromRepo': '儲存在儲存庫中({path})。拉取儲存庫的每個人都會取得。',
|
||||
'settings.projects.shared.commandsFromRepo': '優先執行,儲存在儲存庫中({path})',
|
||||
'settings.projects.shared.invalid': '無法讀取 {path} 中的專案設定:{reason}',
|
||||
'settings.projects.shared.trusted': '已在此執行個體上信任儲存庫命令',
|
||||
'settings.projects.shared.resetTrust': '重設信任',
|
||||
'settings.projects.shared.title': '儲存庫設定',
|
||||
'settings.projects.shared.description': '儲存在儲存庫本身的設定,拉取儲存庫的每個人都會取得相同的動作、設定命令、啟動項和計畫。在你移入項目之前不會寫入任何內容。',
|
||||
'settings.projects.shared.file': '檔案',
|
||||
'settings.projects.shared.status.missing': '尚未在儲存庫中',
|
||||
'settings.projects.shared.status.ok': '已在儲存庫中',
|
||||
'settings.projects.shared.plansDir': '計畫資料夾',
|
||||
'settings.projects.shared.plansDirPlaceholder': '.openchamber/plans',
|
||||
'settings.projects.shared.plansDirInfo': '儲存庫計畫的存放位置(相對於儲存庫)。留空表示 .openchamber/plans。自訂資料夾(如 docs/plans)會完全取代預設值:只讀寫該資料夾。變更時請自行移動現有檔案。',
|
||||
'settings.projects.shared.plansDirAria': '儲存庫計畫資料夾',
|
||||
'settings.projects.shared.actions.share': '移至儲存庫',
|
||||
'settings.projects.shared.actions.showTitle': '在你的選單中重新顯示此儲存庫動作。',
|
||||
'settings.projects.shared.actions.hideTitle': '僅在你的選單中隱藏此儲存庫動作;儲存庫不會改變。',
|
||||
'settings.projects.shared.actions.makePersonalTitle': '從儲存庫中移除,僅保留在此執行個體上你的設定中。',
|
||||
'settings.projects.shared.actions.shareTitle': '儲存到儲存庫內的 {path},拉取儲存庫的每個人都會取得。它會從你的個人設定中移除。',
|
||||
'settings.projects.shared.actions.shareAfterSave': '先儲存你的修改,然後再移動',
|
||||
'settings.projects.shared.actions.makePersonal': '移至我的設定',
|
||||
'settings.projects.shared.actions.hide': '對我隱藏',
|
||||
'settings.projects.shared.actions.show': '顯示',
|
||||
'settings.projects.shared.hiddenBadge': '已隱藏',
|
||||
'settings.projects.shared.replaceMode': '僅使用我的設定命令,略過儲存庫中的命令',
|
||||
'settings.projects.shared.replaceModeAria': '僅使用我的設定命令,略過儲存庫中的命令',
|
||||
'settings.projects.shared.toast.shareFailed': '更新儲存庫設定失敗',
|
||||
'settings.projects.actions.description': '按專案顯示在專案名稱旁標題列中的命令。',
|
||||
'settings.projects.actions.validation.fillNameAndCommand': '儲存前請填寫操作名稱和命令。',
|
||||
'settings.projects.actions.state.loading': '載入中...',
|
||||
@@ -2156,11 +2184,11 @@ export const settingsDict = {
|
||||
'settings.openchamber.desktopNetwork.field.keepAwakeAria': 'OpenChamber 執行時保持電腦喚醒',
|
||||
'settings.openchamber.desktopNetwork.field.keepAwake': 'OpenChamber 執行時保持電腦喚醒',
|
||||
'settings.openchamber.desktopNetwork.field.keepAwakeDescription': '讓手機可以持續開啟此應用程式。螢幕仍可關閉。',
|
||||
'settings.openchamber.desktopPassword.actions.showPassword': '顯示密碼',
|
||||
'settings.openchamber.desktopPassword.actions.hidePassword': '隱藏密碼',
|
||||
'settings.openchamber.desktopPassword.field.password': '桌面 UI 密碼',
|
||||
'settings.openchamber.desktopPassword.field.passwordDescription': 'OpenChamber 會在重新啟動後要求輸入密碼,之後會在登入工作階段過期時再次要求:12 小時後,或選擇「信任此裝置」後 7 天。留空可停用登入。',
|
||||
'settings.openchamber.desktopPassword.field.passwordPlaceholder': '不需要密碼',
|
||||
'settings.openchamber.desktopPassword.field.passwordSetPlaceholder': '已設定密碼。輸入新密碼以取代。',
|
||||
'settings.openchamber.desktopPassword.actions.removePassword': '移除密碼',
|
||||
'settings.page.plugins.title': '外掛',
|
||||
'settings.plugins.dialog.add.action.cancel': '取消',
|
||||
'settings.plugins.dialog.add.action.submit': '新增',
|
||||
|
||||
@@ -1691,6 +1691,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.plans.importFromFile': '從檔案匯入計畫',
|
||||
'rightSidebar.contextNotesTodo.plans.empty': '還沒有已儲存的計畫。',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlan': '刪除計畫',
|
||||
'rightSidebar.contextNotesTodo.plans.sharedBadge': '在儲存庫中',
|
||||
'rightSidebar.contextNotesTodo.plans.share': '移至儲存庫計畫資料夾,拉取儲存庫的每個人都能看到',
|
||||
'rightSidebar.contextNotesTodo.plans.makePersonal': '移至我的計畫,移出儲存庫',
|
||||
'rightSidebar.contextNotesTodo.plans.deletePlanWithTitle': '刪除計畫「{title}」',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newSession': '傳送到新會話',
|
||||
'rightSidebar.contextNotesTodo.sendDialog.title.newWorktree': '傳送到新 worktree',
|
||||
@@ -1709,6 +1712,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'rightSidebar.contextNotesTodo.toast.sendTodoFailed': '傳送待辦失敗',
|
||||
'rightSidebar.contextNotesTodo.toast.updatePlanFailed': '更新計畫失敗',
|
||||
'rightSidebar.contextNotesTodo.toast.deletePlanFailed': '刪除計畫失敗',
|
||||
'rightSidebar.contextNotesTodo.toast.movePlanFailed': '移動計畫失敗',
|
||||
'rightSidebar.contextNotesTodo.toast.planFileEmpty': '計畫檔案為空',
|
||||
'rightSidebar.contextNotesTodo.toast.importPlanFailed': '匯入計畫失敗',
|
||||
'rightSidebar.contextNotesTodo.toast.planImported': '計畫已匯入',
|
||||
@@ -2092,6 +2096,9 @@ export const dict: Record<I18nKey, string> = {
|
||||
'chat.draftStarters.sectionCommands': 'Commands',
|
||||
'chat.draftStarters.sectionSkills': 'Skills',
|
||||
'chat.draftStarters.remove': 'Remove',
|
||||
'chat.draftStarters.sharedTitle': '釘選在儲存庫設定中;請在那裡修改',
|
||||
'chat.draftStarters.share': '移至儲存庫設定',
|
||||
'chat.draftStarters.makePersonal': '移至我的設定',
|
||||
'chat.scrollToBottom.aria': '捲動到底部',
|
||||
'chat.promptNavigator.aria': '提示詞導覽',
|
||||
'chat.promptNavigator.currentPrompt': '目前提示',
|
||||
@@ -2715,6 +2722,13 @@ export const dict: Record<I18nKey, string> = {
|
||||
'projectActions.actions.addAction': '新增操作',
|
||||
'projectActions.actions.addNewAction': '新增新操作',
|
||||
'projectActions.actions.autoDiscover': '自動發現',
|
||||
'projectActions.menu.sharedBadge': '儲存庫',
|
||||
'projects.sharedTrust.title': '執行此儲存庫中儲存的命令?',
|
||||
'projects.sharedTrust.description': '此儲存庫中的 {path} 定義了會在本機執行的命令。信任一次後,只有當命令變更時 OpenChamber 才會再次詢問。',
|
||||
'projects.sharedTrust.setupCommands': '工作樹設定命令',
|
||||
'projects.sharedTrust.actions': '動作',
|
||||
'projects.sharedTrust.skip': '這次不執行',
|
||||
'projects.sharedTrust.trust': '信任並執行',
|
||||
'projectActions.actions.autoDiscoverTooltip': '自動探索並執行開發伺服器',
|
||||
'projectActions.actions.chooseActionAria': '選擇專案操作',
|
||||
'projectActions.actions.openPreview': '開啟預覽',
|
||||
|
||||
Reference in New Issue
Block a user