GitNexus/gitnexus-web/src/locales/en/onboarding.json
Ahmad Othman Ammar Adi 5d32e345bb
feat(web): drop a folder onto the analyzer to upload it (#3315)
* feat(web): drop a folder onto the analyzer to upload it

The Local Folder panel of RepoAnalyzer is now a drop target. A dropped
folder is walked with the File and Directory Entries API
(DataTransferItem.webkitGetAsEntry), directories on the shared exclusion
list are pruned before they are read, and the resulting File objects are
handed to the existing filterRepoFiles -> uploadFolder -> trackJob path
with webkitRelativePath set to <folder>/<rest>, so the server receives the
same manifest shape the webkitdirectory picker produces.

Compared with the picker, the walk never enumerates node_modules or .git,
stops at the server's 20000 file cap and 64 path segments, skips
unreadable entries instead of failing, and reports progress while it runs.
Loose files and several folders at once are refused with a message (the
server accepts one top-level folder). The walk runs under the request
controller, so a mode switch or unmount aborts it; Analyze and the picker
are blocked while it runs. The panel-wide target also stops the browser
from navigating to a file dropped a few pixels off the button.

New strings in en and zh-CN; browsers without webkitGetAsEntry keep the
picker button and get an explanation.

* Address PR review feedback (#3315)

Clear readingCount only when this drop still owns the request controller, and skip oversized files before they count toward the 20k drop cap.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Address PR review feedback (#3315)

Count oversized files the drop walk skips in the summary droppedCount, and correct the 250-file batch-read comment.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(autofix): apply prettier + eslint fixes via /autofix command

---------

Co-authored-by: Gergő Magyar <gergomagyar@icloud.com>
Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-20 10:12:54 +01:00

85 lines
4 KiB
JSON

{
"success": {
"title": "Server Connected",
"description": "Preparing your code knowledge graph..."
},
"loading": {
"largeRepoHint": "This may take a moment for large repositories"
},
"guide": {
"copyAria": "Copy to clipboard",
"copiedAria": "Copied!",
"startServer": "Start your local server",
"devDescription": "Fire up the Express backend in a separate terminal to unlock the full graph.",
"prodDescription": "One command is all it takes. The browser connects automatically.",
"copyCommand": "Copy the command",
"copyCommandDescription": "Click the icon in the terminal to copy.",
"done": "done",
"orInstallGlobally": "or install globally",
"globalInstall": "Global install",
"startBackend": "Start backend",
"terminal": "Terminal",
"waitingForServer": "Waiting for server to start",
"pasteAndRun": "Paste and run in your terminal",
"pasteAndRunDescription": "Open a terminal at the project root, paste, and hit Enter.",
"listeningForServer": "Listening for server",
"willAutoConnect": "Will auto-connect when detected",
"autoConnects": "Auto-connects and opens the graph",
"autoConnectsDescription": "No refresh needed — the page detects the server automatically.",
"requires": "Requires",
"port": "Port 4747"
},
"analyzeFirst": {
"title": "Analyze your first repository",
"description": "Paste a repository URL and GitNexus will clone it, parse the code, and build a live knowledge graph — right in your browser.",
"footer": "Public repos only · Cloned locally by the server · No data leaves your machine"
},
"landing": {
"chooseRepository": "Choose a repository",
"description": "Select an indexed repository to explore, or analyze a new one.",
"indexed": "Indexed {{time}}",
"orAnalyzeNew": "or analyze new",
"footer": "Public & private repos · Cloned locally by the server · No data leaves your machine",
"time": {
"justNow": "just now",
"minutesAgo": "{{count}}m ago",
"hoursAgo": "{{count}}h ago",
"daysAgo": "{{count}}d ago"
}
},
"repoAnalyzer": {
"inputType": "Input type",
"githubUrl": "GitHub URL",
"gitlabUrl": "GitLab URL",
"azureDevOpsUrl": "Azure DevOps",
"localFolder": "Local Folder",
"starting": "Starting analysis...",
"analyzeRepository": "Analyze Repository",
"complete": "Analysis complete",
"loadingGraph": "Loading graph...",
"defaultRepoName": "repository",
"githubRepositoryUrl": "GitHub Repository URL",
"githubTokenLabel": "Personal Access Token (optional)",
"githubTokenPlaceholder": "ghp_… or github_pat_…",
"githubTokenHelp": "Required for private repos. Needs the 'repo' (or fine-grained Contents:read) scope. Sent once, not stored.",
"gitlabRepositoryUrl": "GitLab Repository URL",
"gitlabSupported": "Supports GitLab.com and self-hosted GitLab instances.",
"azureDevOpsRepositoryUrl": "Azure DevOps Repository URL",
"azureDevOpsSupported": "Format: https://dev.azure.com/organization/project/_git/repository",
"localFolderPath": "Local Folder Path",
"hideBackground": "Hide (analysis continues in background)",
"upload": {
"button": "Upload a folder",
"uploading": "Uploading…",
"selected": "{{fileCount}} files ready ({{dropped}} skipped: .git, node_modules, build output)",
"selectedDrop": "{{fileCount, number}} files ready ({{skippedDirs, number}} folders and {{dropped, number}} files skipped: .git, node_modules, build output, files over 25 MB)",
"empty": "No analyzable files found in that folder.",
"dropHint": "or drop a folder here",
"dropActive": "Release to upload this folder",
"reading": "Reading folder… {{fileCount, number}} files found",
"dropSingleFolder": "Drop a single folder, not files or several folders.",
"dropTooManyFiles": "That folder holds more than {{max, number}} files. Drop a subfolder instead.",
"dropUnsupported": "This browser cannot read a dropped folder. Use the “Upload a folder” button instead."
}
}
}