project-auto-wizard 0.13.3 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +2 -0
- package/README.ko.md +2 -0
- package/README.md +3 -1
- package/README.zh-CN.md +2 -0
- package/bin/project-auto-wizard.js +18 -4
- package/package.json +2 -2
- package/payload/config/breaking-changes.json +28 -14
- package/payload/config/wizard-prompts.yml +102 -46
- package/payload/flutter-app/android/fastlane/Fastfile.playstore +44 -32
- package/payload/flutter-app/ios/ExportOptions.plist +8 -8
- package/payload/flutter-app/ios/fastlane/Fastfile +57 -43
- package/payload/scripts/changelog_manager.py +304 -265
- package/payload/scripts/issue_helper.py +54 -50
- package/payload/scripts/messages.py +2585 -0
- package/payload/scripts/truncate_release_notes.py +7 -6
- package/payload/scripts/version_manager.py +110 -107
- package/payload/version.yml.template +2 -1
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +23 -16
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +106 -63
- package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +17 -15
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +55 -45
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +90 -72
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +59 -45
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +194 -184
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +226 -213
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +46 -42
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +334 -241
- package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +152 -128
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +246 -188
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +353 -238
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +96 -85
- package/payload/workflows/go/PROJECT-GO-CI.yaml +47 -36
- package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +945 -508
- package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +155 -133
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +76 -60
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +97 -77
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +62 -47
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +942 -505
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +148 -126
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +86 -70
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +112 -92
- package/payload/workflows/spring/PROJECT-SPRING-CI.yml +112 -82
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +180 -150
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +161 -131
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +970 -549
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +193 -162
- package/src/cli/args.js +98 -52
- package/src/cli/help.js +8 -41
- package/src/commands/doctor.js +90 -89
- package/src/commands/dry-run.js +64 -43
- package/src/commands/full.js +79 -77
- package/src/commands/install-settings.js +16 -15
- package/src/commands/interactive-flutter.js +20 -19
- package/src/commands/interactive.js +135 -132
- package/src/commands/purge.js +47 -42
- package/src/commands/status.js +36 -36
- package/src/commands/uninstall.js +43 -41
- package/src/context.js +12 -11
- package/src/core/assets.js +12 -11
- package/src/core/baseline.js +27 -27
- package/src/core/branches.js +29 -27
- package/src/core/branding.js +7 -6
- package/src/core/breaking-check.js +22 -21
- package/src/core/breaking.js +15 -8
- package/src/core/copy/app-files.js +5 -4
- package/src/core/copy/flutter-app.js +8 -8
- package/src/core/copy/gitignore.js +58 -50
- package/src/core/copy/readme.js +102 -36
- package/src/core/copy/simple.js +16 -15
- package/src/core/copy/workflows.js +131 -124
- package/src/core/deploy-style.js +51 -48
- package/src/core/detect-fs.js +57 -57
- package/src/core/detect.js +67 -65
- package/src/core/errors.js +2 -2
- package/src/core/flutter-doctor.js +17 -16
- package/src/core/flutter-hooks.js +33 -32
- package/src/core/flutter-options.js +34 -33
- package/src/core/fsutil.js +12 -12
- package/src/core/installed-stores.js +4 -4
- package/src/core/logger.js +42 -40
- package/src/core/paths-resolve.js +88 -86
- package/src/core/paths.js +10 -10
- package/src/core/release-options.js +8 -8
- package/src/core/removal-exec.js +14 -13
- package/src/core/removal-plan.js +37 -37
- package/src/core/types.js +47 -47
- package/src/core/verify.js +44 -38
- package/src/core/version-yml.js +76 -68
- package/src/core/wizard-env.js +46 -46
- package/src/core/wizard-labels.js +63 -41
- package/src/i18n/catalog/en/cli.js +50 -0
- package/src/i18n/catalog/en/commands.js +188 -0
- package/src/i18n/catalog/en/copy.js +20 -0
- package/src/i18n/catalog/en/core.js +74 -0
- package/src/i18n/catalog/en/core2.js +15 -0
- package/src/i18n/catalog/en/ui.js +221 -0
- package/src/i18n/catalog/en.js +12 -0
- package/src/i18n/catalog/index.js +5 -0
- package/src/i18n/catalog/ko/cli.js +50 -0
- package/src/i18n/catalog/ko/commands.js +188 -0
- package/src/i18n/catalog/ko/copy.js +20 -0
- package/src/i18n/catalog/ko/core.js +74 -0
- package/src/i18n/catalog/ko/core2.js +15 -0
- package/src/i18n/catalog/ko/ui.js +221 -0
- package/src/i18n/catalog/ko.js +10 -0
- package/src/i18n/index.js +44 -0
- package/src/i18n/languages.js +9 -0
- package/src/index.js +132 -97
- package/src/ui/ansi.js +7 -7
- package/src/ui/banner.js +7 -6
- package/src/ui/env-plan.js +82 -81
- package/src/ui/prompts.js +97 -122
- package/src/ui/readline-engine.js +59 -58
- package/src/ui/status-cards.js +37 -31
- package/src/ui/summary.js +90 -89
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// English messages: ui area (src/ui, src/commands/interactive*).
|
|
2
|
+
export default {
|
|
3
|
+
"ui.banner.compact": "{mode} mode (--force)",
|
|
4
|
+
"ui.status-cards.detect.title": "🔍 Inspecting the project...",
|
|
5
|
+
"ui.status-cards.detect.foundWithMarker": "{marker} found → detected {type}",
|
|
6
|
+
"ui.status-cards.detect.found": "detected {type}",
|
|
7
|
+
"ui.status-cards.detect.none": "no marker files → {type} (can be chosen manually)",
|
|
8
|
+
"ui.status-cards.detect.versionBranch": "Version: {version} · Branch: {branch}",
|
|
9
|
+
"ui.status-cards.card.title": "Project analysis",
|
|
10
|
+
"ui.status-cards.card.labelWidth": "12",
|
|
11
|
+
"ui.status-cards.card.typeMulti": "Types",
|
|
12
|
+
"ui.status-cards.card.type": "Type",
|
|
13
|
+
"ui.status-cards.card.version": "Version",
|
|
14
|
+
"ui.status-cards.card.branch": "Branch",
|
|
15
|
+
"ui.status-cards.card.mode": "Mode",
|
|
16
|
+
"ui.status-cards.card.envMode": "Env vars",
|
|
17
|
+
"ui.status-cards.card.stores": "Stores",
|
|
18
|
+
"ui.status-cards.card.none": "none",
|
|
19
|
+
"ui.status-cards.card.deployMode": "Deploy mode",
|
|
20
|
+
"ui.status-cards.card.on": "on",
|
|
21
|
+
"ui.status-cards.card.off": "off",
|
|
22
|
+
"ui.status-cards.card.autoBump": "Auto-bump",
|
|
23
|
+
"ui.status-cards.card.paths": "Paths",
|
|
24
|
+
"ui.status-cards.kind.update": "{title} — template {from} → {to}",
|
|
25
|
+
"ui.status-cards.kind.updateTitle": "Update",
|
|
26
|
+
"ui.status-cards.kind.fresh": "{title} — first install in this project (template {version})",
|
|
27
|
+
"ui.status-cards.kind.freshTitle": "New install",
|
|
28
|
+
"ui.summary.features.title": "Installed features:",
|
|
29
|
+
"ui.summary.features.versionSystem": " ✅ Version management (version.yml)",
|
|
30
|
+
"ui.summary.features.readmeAuto": " ✅ Automatic README.md version updates",
|
|
31
|
+
"ui.summary.features.workflows": " ✅ GitHub Actions workflows (including release automation)",
|
|
32
|
+
"ui.summary.features.gitignore": " ✅ .gitignore entries for backup files (*.bak/*.template.yaml)",
|
|
33
|
+
"ui.summary.branches.title": "Branch layout:",
|
|
34
|
+
"ui.summary.branches.trunk": " 🌿 Single branch {main} (trunk-based) — one RELEASE-PUBLISH workflow handles version confirm → changelog → tag → Release in sequence",
|
|
35
|
+
"ui.summary.branches.prFlow": " 🌿 Development {develop} → release {main} (pr-flow) — version confirm, changelog and automerge happen on the release PR",
|
|
36
|
+
"ui.summary.branches.developMissing": " ⚠️ Branch '{develop}' does not exist on the remote yet — development-branch workflows will not run until it is created",
|
|
37
|
+
"ui.summary.branches.developHint": " → After committing the installed files and pushing {main}: git push origin {main}:{develop}",
|
|
38
|
+
"ui.summary.engine.title": "Release-note summary engine:",
|
|
39
|
+
"ui.summary.engine.chain": " 🤖 AI_API_KEY (optional) → Copilot (optional, consumes AI Credits, off by default) → rule-based fallback — releases are never blocked",
|
|
40
|
+
"ui.summary.files.title": "Added files:",
|
|
41
|
+
"ui.summary.files.versionYml": " 📄 version.yml (version: {version}, types: {types})",
|
|
42
|
+
"ui.summary.files.buildNumber": " Build number: {code}",
|
|
43
|
+
"ui.summary.files.readmeAdded": " 📝 README.md (version section added)",
|
|
44
|
+
"ui.summary.files.readmeMissing": " ℹ️ README.md not found, so the version section was not added",
|
|
45
|
+
"ui.summary.files.readmeMissingHint": " → Create README.md and run again to add it (until then the README version-update workflow is skipped)",
|
|
46
|
+
"ui.summary.workflows.title": "Added workflows:",
|
|
47
|
+
"ui.summary.workflows.installed": " 📦 Newly installed ({count}):",
|
|
48
|
+
"ui.summary.workflows.updated": " 🔄 Updated ({count}, unmodified files replaced with the latest):",
|
|
49
|
+
"ui.summary.scripts.overwritten": "(existing file overwritten with the new version)",
|
|
50
|
+
"ui.summary.answers.title": " ⚙️ Applied environment settings:",
|
|
51
|
+
"ui.summary.answers.default": " (default)",
|
|
52
|
+
"ui.summary.cleanup.previousDeploy": "Previous deploy style cleanup",
|
|
53
|
+
"ui.summary.cleanup.deselectedStores": "Deselected store deploy cleanup",
|
|
54
|
+
"ui.summary.cleanup.removed": "removed (untouched file)",
|
|
55
|
+
"ui.summary.cleanup.backedUp": "backed up (you had modified it)",
|
|
56
|
+
"ui.summary.flutterApp.title": " 📱 Flutter store deploy files:",
|
|
57
|
+
"ui.summary.flutterApp.created": "created",
|
|
58
|
+
"ui.summary.flutterApp.kept": "existing file kept",
|
|
59
|
+
"ui.summary.flutterApp.plistHint": " → Fill in __TEAM_ID__, __BUNDLE_ID__ and __PROVISIONING_PROFILE_NAME__ in ExportOptions.plist with real values for iOS deployment to work",
|
|
60
|
+
"ui.summary.log.path": " 📋 Run log: {path}",
|
|
61
|
+
"ui.summary.log.hint": " → Records what was installed with which values, in chronological order (not committed to git)",
|
|
62
|
+
"ui.summary.legacyLogs": " ℹ️ Install records (.md) from an earlier version are tracked by git:",
|
|
63
|
+
"ui.summary.spring.title": " 💡 Extra setup for Spring projects:",
|
|
64
|
+
"ui.summary.spring.sync": " • Version info in build.gradle / build.gradle.kts / pom.xml is synced automatically",
|
|
65
|
+
"ui.summary.todo.title": "⚠️ Please check the following:",
|
|
66
|
+
"ui.summary.todo.unresolved": "Some values are still unfilled — fill them in for it to work",
|
|
67
|
+
"ui.summary.title": "✨ project-auto-wizard Setup Complete!",
|
|
68
|
+
"ui.summary.todo.patPath": " → Repository Settings > Secrets > Actions",
|
|
69
|
+
"ui.summary.todo.patName": " → Secret Name: WORKFLOW_PAT (Scopes: repo, workflow)",
|
|
70
|
+
"ui.summary.todo.secrets": "Register the GitHub Secrets below for the deploy workflows to work ({count})",
|
|
71
|
+
"ui.summary.todo.secretsPath": " → Settings > Secrets and variables > Actions",
|
|
72
|
+
"ui.summary.todo.either": " (either one)",
|
|
73
|
+
"ui.summary.todo.optionalSecrets": "Optional Secrets (works without them — register when needed, {count})",
|
|
74
|
+
"ui.summary.todo.commit": "Commit the installed files and push them to {main}",
|
|
75
|
+
"ui.summary.todo.commitDevelop": " → {develop} needs the same files — commit to one branch, then merge into the other",
|
|
76
|
+
"ui.summary.todo.commitExample": " e.g. git checkout {develop} && git merge {main} && git push",
|
|
77
|
+
"ui.summary.todo.changelogLink": " → The README's 'View full version history' (CHANGELOG.md) link works once the first release generates the CHANGELOG",
|
|
78
|
+
"ui.summary.todo.pat": "PAT for release automerge (optional — falls back to GITHUB_TOKEN automatically if missing)",
|
|
79
|
+
"ui.summary.todo.patAccount": " → Issue it from an organization bot/machine account rather than a personal account",
|
|
80
|
+
"ui.summary.todo.patOptional": " → Without it, tag/Release publishing and deploy workflow runs still proceed automatically; with it, it is slightly faster",
|
|
81
|
+
"ui.summary.todo.permissions": "GitHub Actions permissions (no change needed)",
|
|
82
|
+
"ui.summary.todo.permissionsRead": " → Installed workflows work even when Workflow permissions is left at the default Read",
|
|
83
|
+
"ui.summary.todo.permissionsWrite": " → Raise it to Read and write only if a workflow you added yourself does write operations without declaring permissions",
|
|
84
|
+
"ui.summary.footer": "📖 See the README for the workflow layout and release flow.",
|
|
85
|
+
"ui.env-plan.card.example": " e.g. {example}",
|
|
86
|
+
"ui.env-plan.card.default": " Default: {value}",
|
|
87
|
+
"ui.env-plan.validate.port": "Enter a number between 1 and 65535.",
|
|
88
|
+
"ui.env-plan.validate.sshAuth": "Enter either password or key.",
|
|
89
|
+
"ui.env-plan.validate.javaVersion": "Enter a JDK version number (e.g. 21, 17).",
|
|
90
|
+
"ui.env-plan.each.intro": " Enter a value. To keep it as is, just press Enter without typing anything and the default is applied.",
|
|
91
|
+
"ui.env-plan.each.enable": "↳ {label} — enable it?",
|
|
92
|
+
"ui.env-plan.each.input": "↳ Enter a value (Enter = keep default «{def}»):",
|
|
93
|
+
"ui.env-plan.each.invalid": " ⚠️ '{input}' — {problem}",
|
|
94
|
+
"ui.env-plan.each.result": " → {label} = {input}",
|
|
95
|
+
"ui.env-plan.intro.title": "▶ Filling in the workflow environment settings",
|
|
96
|
+
"ui.env-plan.intro.line1": " These are the values the installed workflows will use. Each item shows what it is used for,",
|
|
97
|
+
"ui.env-plan.intro.line2": " a description, an example and its default. You can keep them all or change only what you want.",
|
|
98
|
+
"ui.env-plan.intro.rule": " ─────────────────────────────────────────────",
|
|
99
|
+
"ui.env-plan.choice.message": "How would you like to fill them in?",
|
|
100
|
+
"ui.env-plan.choice.all": "① Install with all the defaults above (proceed without typing)",
|
|
101
|
+
"ui.env-plan.choice.each": "② Enter each one myself (all items in order)",
|
|
102
|
+
"ui.env-plan.choice.some": "③ Pick a few to change (enter only those · the rest use defaults)",
|
|
103
|
+
"ui.env-plan.some.option": "{label} (default: {def})",
|
|
104
|
+
"ui.env-plan.some.message": "Choose the items to change (Space to select · Enter to confirm)",
|
|
105
|
+
"ui.readline-engine.aborted": "Aborted by the user.",
|
|
106
|
+
"ui.readline-engine.footer.select": "└ ↑/↓ move · Enter confirm · ESC cancel",
|
|
107
|
+
"ui.readline-engine.footer.multiselect": "└ ↑/↓ move · Space toggle · Enter confirm · ESC cancel",
|
|
108
|
+
"ui.readline-engine.footer.confirm": "└ ←/→ or y/n · Enter confirm · ESC cancel",
|
|
109
|
+
"ui.readline-engine.warn.disabled": "This item cannot be selected.",
|
|
110
|
+
"ui.readline-engine.warn.required": "Select at least one item.",
|
|
111
|
+
"ui.readline-engine.none": "(none)",
|
|
112
|
+
"ui.readline-engine.yes": "Yes",
|
|
113
|
+
"ui.readline-engine.no": "No",
|
|
114
|
+
"ui.readline-engine.cancelled": "Cancelled.",
|
|
115
|
+
"ui.prompts.mode.messageAgain": "What would you like to do next?",
|
|
116
|
+
"ui.prompts.mode.message": "What would you like to install?",
|
|
117
|
+
"ui.prompts.mode.full": "Install / update — version management + automation workflows (recommended for first time)",
|
|
118
|
+
"ui.prompts.mode.uninstall": "Full uninstall — remove everything the wizard installed or modified (after confirmation, including README, gitignore and version.yml)",
|
|
119
|
+
"ui.prompts.mode.status": "Check install status — read-only, shows version, types and drift",
|
|
120
|
+
"ui.prompts.mode.doctor": "Environment diagnosis — read-only, checks gh CLI, permissions and secret setup",
|
|
121
|
+
"ui.prompts.confirm.message": "Proceed with this information?",
|
|
122
|
+
"ui.prompts.confirm.continue": "Yes, continue",
|
|
123
|
+
"ui.prompts.confirm.edit": "Edit",
|
|
124
|
+
"ui.prompts.confirm.cancel": "No, cancel",
|
|
125
|
+
"ui.prompts.edit.type": "Project type",
|
|
126
|
+
"ui.prompts.edit.version": "Version",
|
|
127
|
+
"ui.prompts.edit.branch": "Default branch",
|
|
128
|
+
"ui.prompts.edit.semverAuto": "Auto version bump",
|
|
129
|
+
"ui.prompts.edit.copilotAi": "Copilot AI summary",
|
|
130
|
+
"ui.prompts.edit.envMode": "Env variable mode",
|
|
131
|
+
"ui.prompts.edit.flutterStore": "Store deploy targets",
|
|
132
|
+
"ui.prompts.edit.deployMode": "Deploy mode",
|
|
133
|
+
"ui.prompts.edit.done": "All correct, continue",
|
|
134
|
+
"ui.prompts.edit.message": "Which item would you like to edit?",
|
|
135
|
+
"ui.prompts.types.select": "Select the project types (Space to toggle, Enter to confirm)",
|
|
136
|
+
"ui.prompts.types.confirmNote": "The CI/CD workflows installed and the files kept in version sync depend on the selected types.\nIf the detection is correct, just press Enter.",
|
|
137
|
+
"ui.prompts.types.confirmTitle": "Confirm project types",
|
|
138
|
+
"ui.prompts.types.confirmMessage": "These are this project's types (Space to toggle, Enter to confirm)",
|
|
139
|
+
"ui.prompts.types.withMarker": "{type} — {marker} found",
|
|
140
|
+
"ui.prompts.deployStyle.note": "Server deploy workflows are alternatives to each other (Nginx and Traefik are never used together).\nOnly the chosen style is installed and its automatic run (push trigger) is enabled. The PR preview is installed together with the deploy style,\nand choosing \"No server deploy\" excludes both CD and the PR preview for every type.\nZero-downtime deploy exists only for spring - other types (python·go·react·next) get the single-server deploy.",
|
|
141
|
+
"ui.prompts.deployStyle.title": "Deploy style",
|
|
142
|
+
"ui.prompts.deployStyle.message": "How should the server be deployed?",
|
|
143
|
+
"ui.prompts.deployStyle.none": "No server deploy — do not generate CD / PR preview workflows or deploy settings",
|
|
144
|
+
"ui.prompts.envMode.label.dart-define": "dart-define (default for new installs) — passes secrets to the build via --dart-define-from-file, no .env is created in the project",
|
|
145
|
+
"ui.prompts.envMode.label.dotenv": "dotenv — creates .env in the Flutter root for flutter_dotenv / envied to read (kept for existing installs)",
|
|
146
|
+
"ui.prompts.stores.label.android": "Android — Google Play Store (fastlane)",
|
|
147
|
+
"ui.prompts.stores.label.ios": "iOS — TestFlight / App Store Connect (fastlane)",
|
|
148
|
+
"ui.prompts.deployMode.label.android.store_only": "store_only — upload to the internal track (default)",
|
|
149
|
+
"ui.prompts.deployMode.label.android.store_prepare": "store_prepare — upload to the production track as a draft (release manually in Play Console)",
|
|
150
|
+
"ui.prompts.deployMode.label.android.store_submit": "store_submit — all the way to production review submission",
|
|
151
|
+
"ui.prompts.deployMode.label.ios.store_only": "store_only — upload to TestFlight (default)",
|
|
152
|
+
"ui.prompts.deployMode.label.ios.store_prepare": "store_prepare — prepare the app version and metadata (no review submission)",
|
|
153
|
+
"ui.prompts.deployMode.label.ios.store_submit": "store_submit — all the way to review submission",
|
|
154
|
+
"ui.prompts.deployMode.platform.android": "Android (Play Store)",
|
|
155
|
+
"ui.prompts.deployMode.platform.ios": "iOS (TestFlight)",
|
|
156
|
+
"ui.prompts.deployMode.message": "Select the {platform} deploy mode",
|
|
157
|
+
"ui.prompts.envMode.note": "How the secret ENV_FILE (.env format) is passed to the Flutter build.\ndart-define is read with String.fromEnvironment, while dotenv has flutter_dotenv / envied read the .env file.\nYou can change this later under 'Edit > Env variable mode' on the confirmation screen.",
|
|
158
|
+
"ui.prompts.envMode.title": "Env variable mode",
|
|
159
|
+
"ui.prompts.envMode.message": "How should Flutter environment variables be passed?",
|
|
160
|
+
"ui.prompts.stores.note": "Only the store deploy workflows and fastlane files (Fastfile etc.) of the chosen platforms are installed.\nIf you choose none, it installs without store deployment (Firebase, Selfhosted, Test APK and CI are always installed).",
|
|
161
|
+
"ui.prompts.stores.title": "Store deploy targets",
|
|
162
|
+
"ui.prompts.stores.message": "Select the platforms to deploy to the stores (Space to toggle, Enter to confirm)",
|
|
163
|
+
"ui.prompts.branch.note": "pr-flow is a team workflow: work on develop and open PRs into main.\ntrunk-based is a simple flow with a single branch where you work directly.",
|
|
164
|
+
"ui.prompts.branch.title": "Branch strategy",
|
|
165
|
+
"ui.prompts.branch.message": "Select the branch strategy",
|
|
166
|
+
"ui.prompts.branch.prFlow": "develop → main PR flow (pr-flow) — when you need a team collaboration / review process",
|
|
167
|
+
"ui.prompts.branch.trunk": "Single main branch (trunk-based) — for personal / small projects that want to keep it simple without extra branches",
|
|
168
|
+
"interactive.flutter.deployModeTitle": "Deploy mode",
|
|
169
|
+
"interactive.flutter.storeFirst": "Select the store deploy targets first (the 'Store deploy targets' item).",
|
|
170
|
+
"interactive.question.semverAuto": "Enable automatic version bumping? (major/minor/patch is decided from the commit types)",
|
|
171
|
+
"interactive.question.copilotAi": "Generate the AI summary with Copilot? (This consumes GitHub Copilot AI Credits, and falls back to the rule-based summary automatically if unavailable)",
|
|
172
|
+
"interactive.banner.modeLabel": "Interactive integration wizard",
|
|
173
|
+
"interactive.intro": "project-auto-wizard — interactive integration wizard",
|
|
174
|
+
"interactive.cancel.install": "Installation cancelled.",
|
|
175
|
+
"interactive.cancel.integration": "Integration cancelled safely.",
|
|
176
|
+
"interactive.outro.uninstall": "Uninstall complete.",
|
|
177
|
+
"interactive.outro.done": "Integration complete — installed in {mode} mode.",
|
|
178
|
+
"interactive.hint.version": "You can fix it right away under 'Edit > Version' on the next screen.",
|
|
179
|
+
"interactive.hint.branch": "If it is wrong, you can change it in the 'release branch' question later.",
|
|
180
|
+
"interactive.summary.title": "Project analysis",
|
|
181
|
+
"interactive.edit.versionPrompt": "New version (e.g. 1.0.0)",
|
|
182
|
+
"interactive.edit.versionInvalid": "Invalid version format (expected x.y.z) — keeping the existing value.",
|
|
183
|
+
"interactive.edit.versionInvalidTitle": "⚠ Version",
|
|
184
|
+
"interactive.edit.branchPrompt": "Default branch",
|
|
185
|
+
"interactive.branch.releasePrompt": "Select the release branch (default: {branch})",
|
|
186
|
+
"interactive.branch.developPrompt": "Select the development branch (default: develop)",
|
|
187
|
+
"interactive.branch.trunkNote": "Installing in trunk-based mode with the single release branch ({main}) (RELEASE-PUBLISH only).",
|
|
188
|
+
"interactive.branch.modeTitle": "Branch mode",
|
|
189
|
+
"interactive.branch.title": "Branch",
|
|
190
|
+
"interactive.branch.defaultNew": "{name} (default — created if missing)",
|
|
191
|
+
"interactive.branch.defaultMark": "{name} (default)",
|
|
192
|
+
"interactive.branch.custom": "Enter manually...",
|
|
193
|
+
"interactive.branch.namePrompt": "Branch name",
|
|
194
|
+
"interactive.branch.invalid": "'{name}' cannot be used as a branch name (no spaces, special characters, '..', etc.) — enter it again.",
|
|
195
|
+
"interactive.branch.invalidTitle": "⚠ Branch",
|
|
196
|
+
"interactive.removed.title": "Workflows that existed in the previous install but are missing now ({count})",
|
|
197
|
+
"interactive.removed.message": "{filename} — it looks like you deleted this yourself. Add it back?",
|
|
198
|
+
"interactive.removed.keep": "Do not add — keep it deleted (default)",
|
|
199
|
+
"interactive.removed.restore": "Add again — install the latest version",
|
|
200
|
+
"interactive.conflict.message": "Your edits and the upstream changes overlap ({type}) — what should be done?",
|
|
201
|
+
"interactive.conflict.skip": "Skip — keep the existing file (default)",
|
|
202
|
+
"interactive.conflict.backup": "Back up as .bak, then replace with the new version",
|
|
203
|
+
"interactive.conflict.template": "Keep existing + add the new version as .template.yaml for reference",
|
|
204
|
+
"interactive.notices.title": "Previous workflow cleanup",
|
|
205
|
+
"interactive.summary.mode": "Mode: {value}",
|
|
206
|
+
"interactive.summary.types": "Project types: {value}",
|
|
207
|
+
"interactive.summary.multi": " (multiple)",
|
|
208
|
+
"interactive.summary.version": "Version: {value}",
|
|
209
|
+
"interactive.summary.branch": "Default branch: {value}",
|
|
210
|
+
"interactive.summary.envMode": "Env variable mode: {value}",
|
|
211
|
+
"interactive.summary.stores": "Store deploy targets: {value}",
|
|
212
|
+
"interactive.summary.deployMode": "Deploy mode: {value}",
|
|
213
|
+
"interactive.summary.none": "none",
|
|
214
|
+
"interactive.summary.semverAuto": "Auto version bump: {value}",
|
|
215
|
+
"interactive.summary.copilotAi": "Copilot AI summary: {value}",
|
|
216
|
+
"interactive.summary.on": "on",
|
|
217
|
+
"interactive.summary.off": "off",
|
|
218
|
+
"interactive.modeLabel.full": "Full install",
|
|
219
|
+
"interactive.modeLabel.version": "Version management only",
|
|
220
|
+
"interactive.modeLabel.workflows": "Workflows only",
|
|
221
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// English message catalog (default language), assembled from per-area parts in ./en/.
|
|
2
|
+
// Keys are flat and dotted: `<area>.<topic>.<name>`. Params are written as {name}.
|
|
3
|
+
// Every key must also exist in ko.js (checked by tests); a key may be defined in one part only.
|
|
4
|
+
import cli from "./en/cli.js";
|
|
5
|
+
import commands from "./en/commands.js";
|
|
6
|
+
import ui from "./en/ui.js";
|
|
7
|
+
import core from "./en/core.js";
|
|
8
|
+
import core2 from "./en/core2.js";
|
|
9
|
+
import copy from "./en/copy.js";
|
|
10
|
+
|
|
11
|
+
export const PARTS = { cli, commands, ui, core, core2, copy };
|
|
12
|
+
export default Object.assign({}, cli, commands, ui, core, core2, copy);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// 한국어 메시지: 인자 파싱, --help, 진입점(bin/, src/index.js, src/cli, src/context.js).
|
|
2
|
+
export default {
|
|
3
|
+
"cli.lang.invalid": "지원하지 않는 언어: '{value}' ({source}). 지원 언어: {supported}",
|
|
4
|
+
"cli.lang.defaultNotice": "워크플로우 메시지의 기본 언어가 영어로 바뀌었습니다. 한국어를 유지하려면 --lang ko를 사용하세요.",
|
|
5
|
+
"cli.lang.missing": "--lang 값이 필요합니다. 지원 언어: {supported}",
|
|
6
|
+
"cli.lang.help": "메시지 언어: {supported} (기본: en)",
|
|
7
|
+
"cli.bin.nodeVersion": "Node.js 20.12 이상이 필요합니다 (현재: {current})",
|
|
8
|
+
"cli.help.text": "project-auto-wizard — One command DevOps: GitHub-native 릴리스 자동화 설치 마법사\n\n사용법:\n npx project-auto-wizard [옵션]\n\n옵션:\n -m, --mode MODE 통합 모드 (full | uninstall | status | doctor)\n 기본: interactive (대화형). full = 설치 및 업데이트\n uninstall = 완전 삭제(대화형 체크리스트, --force 시 --purge-*로 opt-in)\n status = 설치 상태·드리프트 확인(읽기 전용). doctor = 환경 진단(읽기 전용)\n -t, --type CSV 프로젝트 타입 csv (예: spring,react,python)\n 지원: {types}\n --project-version V 통합 대상의 초기 버전 (예: 1.0.0). 미지정 시 자동 감지\n --paths \"t=p,...\" 타입별 프로젝트 경로 (모노레포). 예: flutter=app,react=client\n --main-branch B 릴리스 브랜치 (기본: 감지된 default branch)\n --develop-branch B 개발 브랜치 (기본: develop). 릴리스 브랜치와 같으면 trunk-based 모드\n --deploy-style STYLE 서버 배포 방식: simple | nginx | traefik | none (기본: simple)\n --flutter-env-mode MODE Flutter 환경변수 방식: dart-define | dotenv (기본: 신규 설치 dart-define, 기존 설치는 저장값·dotenv 유지)\n --flutter-store CSV Flutter 스토어 배포 대상: android,ios | android | ios | none (기본: 둘 다 설치)\n --android-deploy-mode MODE Play Store 배포 모드: store_only | store_prepare | store_submit (기본: store_only)\n --ios-deploy-mode MODE iOS 배포 모드: store_only | store_prepare | store_submit (기본: store_only)\n --semver-auto / --no-semver-auto 커밋 타입 기반 자동 major/minor/patch 승격 (기본: 사용함)\n --copilot / --no-copilot Copilot으로 AI 요약 생성 (기본: 사용 안 함, GitHub Copilot AI Credits 소비)\n --lang LANG {langHelp}\n --force full 실행에 필수, uninstall은 비대화형 삭제 (모든 확인 생략, 기본값 사용)\n --dry-run 실제 파일 변경 없이 무엇이 바뀔지만 미리 보여줌 (full/uninstall 지원)\n --purge-readme --mode uninstall --force 시 README.md 버전 섹션도 제거\n --purge-gitignore --mode uninstall --force 시 .gitignore 자동 추가 항목도 제거\n --purge-version --mode uninstall --force 시 version.yml도 제거\n -v, --version project-auto-wizard 버전 출력\n -h, --help 이 도움말 표시\n\n예시:\n npx project-auto-wizard --mode full --force --type spring,react\n npx project-auto-wizard --mode full --force --type flutter --paths \"flutter=app\"\n npx project-auto-wizard --mode status\n npx project-auto-wizard --mode doctor\n npx project-auto-wizard --mode full --force --type node --dry-run\n npx project-auto-wizard --mode uninstall --force --purge-readme --purge-gitignore --purge-version\n",
|
|
9
|
+
"cli.args.projectVersionInvalid": "--project-version 값이 올바르지 않습니다: '{raw}' (x.y.z 형식, 예: 1.0.0)",
|
|
10
|
+
"cli.args.typeUnsupported": "지원하지 않는 타입: '{type}'\n지원 타입: {valid}",
|
|
11
|
+
"cli.args.typeEmpty": "--type 인자가 비어 있습니다",
|
|
12
|
+
"cli.args.noValue": "(없음)",
|
|
13
|
+
"cli.args.deployStyleInvalid": "--deploy-style 값이 올바르지 않습니다: {value} ({choices})",
|
|
14
|
+
"cli.args.semverConflict": "--semver-auto와 --no-semver-auto는 동시에 지정할 수 없습니다",
|
|
15
|
+
"cli.args.copilotConflict": "--copilot과 --no-copilot은 동시에 지정할 수 없습니다",
|
|
16
|
+
"cli.args.pathsEmpty": "--paths 인자가 비어 있습니다 (예: --paths flutter=app,react=client)",
|
|
17
|
+
"cli.args.branchEmpty": "{flag}에 빈 값을 지정할 수 없습니다",
|
|
18
|
+
"cli.args.branchInvalid": "{flag} 값이 브랜치 이름으로 올바르지 않습니다: '{value}'",
|
|
19
|
+
"cli.args.flagNoValue": "{flag} 옵션은 값을 받지 않습니다 ({flag}={value} 형태로 지정됨)",
|
|
20
|
+
"cli.args.unknownOption": "알 수 없는 옵션: {option}",
|
|
21
|
+
"cli.args.modeUnsupported": "지원하지 않는 모드: '{mode}'\n지원 모드: interactive full uninstall status doctor",
|
|
22
|
+
"cli.args.pathsTypeUnsupported": "--paths에 지원하지 않는 타입: '{type}'",
|
|
23
|
+
"cli.args.pathsRelativeOnly": "--paths는 레포 안의 상대경로만 지정할 수 있습니다: '{pair}'",
|
|
24
|
+
"cli.index.purgePrompt": "purge를 실행하려면 정확히 이 레포명을 입력하세요: {repoName}\n> ",
|
|
25
|
+
"cli.index.dryRunNeedsMode": "--dry-run은 --mode <full|uninstall>와 함께 사용하세요 (대화형 모드에서는 지원하지 않습니다).",
|
|
26
|
+
"cli.index.noTty": "대화형 입력이 불가능한 환경입니다. --mode <full|uninstall> 와 --force 를 지정하세요.",
|
|
27
|
+
"cli.index.ignoredFlags": "대화형 모드에서는 {flags}를 사용하지 않습니다 — 질문에서 고르거나 --mode full --force와 함께 쓰세요.",
|
|
28
|
+
"cli.index.purgeNotGit": "git 레포가 아닙니다(.git 없음) — purge는 git 레포 안에서만 실행할 수 있습니다.",
|
|
29
|
+
"cli.index.deleteDevelopSkipDry": "(--delete-develop-branch 지정됨: trunk-based 구성(develop === main)이라 실제 실행 시에도 삭제를 건너뜁니다)",
|
|
30
|
+
"cli.index.deleteDevelopTryDry": "(--delete-develop-branch 지정됨: 실제 실행 시 로컬 develop 브랜치도 삭제를 시도합니다)",
|
|
31
|
+
"cli.index.purgeNeedsYes": "--yes 없이는 purge를 실행할 수 없습니다 (--force로 대체할 수 없습니다).",
|
|
32
|
+
"cli.index.purgeGitStatusFailed": "git 상태를 확인할 수 없습니다 — 안전을 위해 purge를 중단합니다.",
|
|
33
|
+
"cli.index.purgeDirty": "작업트리에 커밋되지 않은 변경 사항이 있습니다 — purge 후 복구할 수 없습니다. 커밋하거나 --allow-dirty를 사용하세요.",
|
|
34
|
+
"cli.index.forceRequiredNonTty": "비대화형 환경에서는 --force 옵션이 필요합니다.",
|
|
35
|
+
"cli.index.purgeRepoMismatch": "입력한 레포명이 일치하지 않습니다 — purge를 중단합니다.",
|
|
36
|
+
"cli.index.deleteDevelopSkip": "trunk-based 구성(develop === main)입니다 — 릴리스 브랜치 삭제는 건너뜁니다.",
|
|
37
|
+
"cli.index.reasonUnknown": "이유 확인 불가",
|
|
38
|
+
"cli.index.deleteDevelopFailed": "로컬 '{branch}' 브랜치 삭제 실패 ({reason}) — 수동으로 확인하세요.",
|
|
39
|
+
"cli.index.deleteDevelopDone": "로컬 '{branch}' 브랜치를 삭제했습니다.",
|
|
40
|
+
"cli.index.removedWorkflows": "워크플로우 {n}개",
|
|
41
|
+
"cli.index.removedScripts": "스크립트 {n}개",
|
|
42
|
+
"cli.index.removedAppFiles": "Flutter 앱 파일 {n}개",
|
|
43
|
+
"cli.index.removedReadme": "README 버전 섹션",
|
|
44
|
+
"cli.index.removedGitignore": ".gitignore 자동 추가 항목",
|
|
45
|
+
"cli.index.removed": "제거됨 — {removed}",
|
|
46
|
+
"cli.index.forceRequired": "--force 없이는 이 모드를 실행할 수 없습니다 (확인 절차가 없습니다).",
|
|
47
|
+
"cli.index.mainBranchHint": "다르면 --main-branch로 지정하세요.",
|
|
48
|
+
"cli.index.deployFallback": "{types}에는 {style} 무중단 배포 워크플로우가 없어 단일 서버 배포(simple)로 설치합니다.",
|
|
49
|
+
"cli.index.aborted": "중단했습니다 — 변경 없이 종료합니다.",
|
|
50
|
+
};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
// 한국어 메시지: 명령 (status, doctor, dry-run, full, uninstall, purge).
|
|
2
|
+
export default {
|
|
3
|
+
"cmd.status.title": "project-auto-wizard status — 설치 상태",
|
|
4
|
+
"cmd.status.notInstalled": "이 디렉터리에 project-auto-wizard가 설치되어 있지 않습니다 (version.yml 없음).",
|
|
5
|
+
"cmd.status.version": "버전 : {value}",
|
|
6
|
+
"cmd.status.templateVersion": "템플릿 버전 : {value}",
|
|
7
|
+
"cmd.status.types": "프로젝트 타입 : {value}",
|
|
8
|
+
"cmd.status.none": "(없음)",
|
|
9
|
+
"cmd.status.branchMode": "브랜치 모드 : {mode} ({main} / {develop})",
|
|
10
|
+
"cmd.status.unsetDefaultFalse": "미설정(기본 false)",
|
|
11
|
+
"cmd.status.options": "옵션 : {value}",
|
|
12
|
+
"cmd.status.modified": "사용자가 수정한 워크플로우 파일 ({n}개):",
|
|
13
|
+
"cmd.status.unmodified": "모든 워크플로우 파일이 설치 시점 기본값과 동일합니다 (수정 없음).",
|
|
14
|
+
"cmd.status.stale": "현재 버전에 없는 이전 워크플로우 ({n}개 — 다음 업데이트에서 정리됨):",
|
|
15
|
+
"cmd.status.bucketsTitle": "지금 업데이트하면:",
|
|
16
|
+
"cmd.status.bucketAuto": " 업스트림 변경 — 자동 적용 가능 {n}",
|
|
17
|
+
"cmd.status.bucketLocalKept": " 내가 수정 · 업스트림 그대로 {n} (유지)",
|
|
18
|
+
"cmd.status.bucketConflicts": " 양쪽 변경 — 검토 필요 {n}",
|
|
19
|
+
"cmd.status.bucketRemoved": " 내가 삭제함 — 복원 안 함 {n}",
|
|
20
|
+
"cmd.doctor.docPath.postInstall": "/ko/start/quickstart/#post-install",
|
|
21
|
+
"cmd.doctor.docPath.flutterStore": "/ko/project-types/flutter/#flutter-store",
|
|
22
|
+
"cmd.doctor.install.name": "설치 여부",
|
|
23
|
+
"cmd.doctor.install.label": "설치 상태",
|
|
24
|
+
"cmd.doctor.install.purpose": "이 폴더의 마법사 설치 여부",
|
|
25
|
+
"cmd.doctor.install.value": "version.yml 있음",
|
|
26
|
+
"cmd.doctor.install.note": "이 폴더엔 아직 설치되지 않았습니다 — 지금 설치하면 됩니다.",
|
|
27
|
+
"cmd.doctor.gh.purpose": "레포 설정 조회용",
|
|
28
|
+
"cmd.doctor.gh.notFound": "gh CLI를 찾을 수 없습니다.",
|
|
29
|
+
"cmd.doctor.gh.notFoundImpact": "레포 권한·secret 설정을 조회할 수 없어 아래 원격 점검을 모두 건너뜁니다.",
|
|
30
|
+
"cmd.doctor.gh.notFoundAction": "https://cli.github.com/ 에서 gh CLI를 설치한 뒤 다시 실행하세요",
|
|
31
|
+
"cmd.doctor.gh.installed": "설치됨",
|
|
32
|
+
"cmd.doctor.auth.name": "gh 인증",
|
|
33
|
+
"cmd.doctor.auth.label": "GitHub 로그인",
|
|
34
|
+
"cmd.doctor.auth.purpose": "레포 설정 조회 권한",
|
|
35
|
+
"cmd.doctor.auth.notLoggedIn": "로그인되어 있지 않습니다.",
|
|
36
|
+
"cmd.doctor.auth.impact": "레포 설정을 읽을 수 없어 아래 원격 점검을 모두 건너뜁니다.",
|
|
37
|
+
"cmd.doctor.auth.action": "터미널에서 `gh auth login` 실행",
|
|
38
|
+
"cmd.doctor.auth.ok": "인증됨",
|
|
39
|
+
"cmd.doctor.remote.name": "GitHub 원격",
|
|
40
|
+
"cmd.doctor.remote.purpose": "점검 대상 레포 식별",
|
|
41
|
+
"cmd.doctor.remote.notFound": "origin 리모트에서 GitHub owner/repo를 찾지 못했습니다.",
|
|
42
|
+
"cmd.doctor.remote.impact": "어느 레포를 점검해야 할지 알 수 없어 아래 원격 점검을 모두 건너뜁니다.",
|
|
43
|
+
"cmd.doctor.remote.action": "`git remote -v`로 origin이 GitHub 주소를 가리키는지 확인하세요",
|
|
44
|
+
"cmd.doctor.perm.purpose": "직접 추가한 워크플로우의 기본 권한",
|
|
45
|
+
"cmd.doctor.adminImpact": "레포 관리자 권한이 없으면 이 설정은 조회되지 않습니다 — 값 자체는 정상일 수 있습니다.",
|
|
46
|
+
"cmd.doctor.perm.lookupFailed": "설정을 조회하지 못했습니다.",
|
|
47
|
+
"cmd.doctor.perm.action": "레포 관리자에게 Settings → Actions → General → Workflow permissions 값을 확인하세요",
|
|
48
|
+
"cmd.doctor.perm.unknown": "확인불가",
|
|
49
|
+
"cmd.doctor.perm.infoCurrent": "현재 {value} 입니다 — 마법사가 설치한 워크플로우는 각자 권한을 선언하므로 그대로 동작합니다.",
|
|
50
|
+
"cmd.doctor.perm.infoAdvice": "직접 추가한 워크플로우에서 permissions를 생략했다면 이 기본값을 따르므로, 그때만 Read and write로 올리세요.",
|
|
51
|
+
"cmd.doctor.pat.purpose": "자동 태그·Release 발행",
|
|
52
|
+
"cmd.doctor.pat.registered": "등록됨",
|
|
53
|
+
"cmd.doctor.pat.note1": "secret이 없어도 폴백이 자동으로 이어받아 태그·Release 발행과 main 배포 워크플로우 실행까지 진행됩니다 — 실제 병합 후 최대 ~20초 정도 더 걸릴 뿐입니다.",
|
|
54
|
+
"cmd.doctor.pat.note2": "속도를 더 원한다면 PAT을 등록할 수 있습니다 — 반드시 개인 계정이 아닌 조직 bot/machine 계정으로 발급하세요 (scopes: repo, workflow).",
|
|
55
|
+
"cmd.doctor.pat.note3": "등록: 레포 Settings → Secrets and variables → Actions → New repository secret · 이름은 WORKFLOW_PAT",
|
|
56
|
+
"cmd.doctor.merge.name": "automerge 호환성(merge commit 허용)",
|
|
57
|
+
"cmd.doctor.merge.label": "merge commit 허용",
|
|
58
|
+
"cmd.doctor.merge.purpose": "릴리스 PR 자동 머지 조건",
|
|
59
|
+
"cmd.doctor.merge.lookupFailed": "설정을 조회하지 못했습니다.",
|
|
60
|
+
"cmd.doctor.merge.lookupAction": "레포 관리자에게 Settings → General → Pull Requests 설정을 확인하세요",
|
|
61
|
+
"cmd.doctor.merge.allowed": "허용됨",
|
|
62
|
+
"cmd.doctor.merge.disabled": "이 레포는 merge commit이 꺼져 있습니다.",
|
|
63
|
+
"cmd.doctor.merge.impact": "RELEASE-PUBLISH가 머지 커밋 제목으로 릴리스를 감지하므로 자동 머지 흐름이 어긋날 수 있습니다.",
|
|
64
|
+
"cmd.doctor.merge.action1": "레포 Settings → General → Pull Requests",
|
|
65
|
+
"cmd.doctor.merge.action2": "Allow merge commits 체크",
|
|
66
|
+
"cmd.doctor.copilot.on": "켜져 있습니다 (version.yml의 copilot_ai: true).",
|
|
67
|
+
"cmd.doctor.copilot.off": "꺼져 있습니다 (version.yml의 copilot_ai: false) — 켜려면 --copilot으로 다시 설치하거나 대화형 '수정하기 > Copilot AI 요약'을 쓰세요.",
|
|
68
|
+
"cmd.doctor.copilot.default": "기본은 꺼져 있습니다 (version.yml의 copilot_ai: false).",
|
|
69
|
+
"cmd.doctor.copilot.name": "Copilot AI 요약",
|
|
70
|
+
"cmd.doctor.copilot.purpose": "AI 릴리스 노트 생성(선택)",
|
|
71
|
+
"cmd.doctor.copilot.creditsOn": "GitHub Copilot AI Credits가 소비됩니다 — 조직은 'Allow use of Copilot CLI billed to the organization' 정책이 필요합니다.",
|
|
72
|
+
"cmd.doctor.copilot.creditsOff": "켜면 GitHub Copilot AI Credits가 소비됩니다 — 조직은 'Allow use of Copilot CLI billed to the organization' 정책이 필요합니다.",
|
|
73
|
+
"cmd.doctor.copilot.fallback": "꺼져 있거나 사용할 수 없으면 규칙 기반 요약으로 자동 전환되므로 그대로 두셔도 됩니다.",
|
|
74
|
+
"cmd.doctor.heading": "환경 진단",
|
|
75
|
+
"cmd.doctor.details": "자세히: ",
|
|
76
|
+
"cmd.doctor.summaryNone": "문제를 찾지 못했습니다.",
|
|
77
|
+
"cmd.doctor.summaryFail": "{n}개 항목에서 문제를 찾았습니다 — 일부 점검은 실행하지 못했습니다.",
|
|
78
|
+
"cmd.doctor.summaryWarn": "{n}개 항목에서 문제를 찾았습니다.",
|
|
79
|
+
"cmd.doctor.summaryWarnNote": "설치 자체는 지금 진행할 수 있고, 위 {n}개는 나중에 설정해도 됩니다.",
|
|
80
|
+
"cmd.dryRun.header": "project-auto-wizard --dry-run (mode: {mode}) — 미리보기, 실제 파일은 바뀌지 않았습니다",
|
|
81
|
+
"cmd.dryRun.uninstall.workflows": "제거될 워크플로우 ({n}개):",
|
|
82
|
+
"cmd.dryRun.uninstall.scripts": "제거될 스크립트 ({n}개):",
|
|
83
|
+
"cmd.dryRun.uninstall.appFile": "제거될 Flutter 앱 파일: {file}",
|
|
84
|
+
"cmd.dryRun.uninstall.readme": "제거될 항목: README.md 버전 섹션 (AUTO-VERSION-SECTION)",
|
|
85
|
+
"cmd.dryRun.uninstall.gitignore": "제거될 항목: .gitignore 자동 추가 항목",
|
|
86
|
+
"cmd.dryRun.uninstall.versionYml": "제거될 파일: version.yml",
|
|
87
|
+
"cmd.dryRun.full.newFiles": "신규 파일 ({n}개):",
|
|
88
|
+
"cmd.dryRun.full.changed": "변경될 파일 ({n}개, 기존 설치가 사용자 수정본이면 충돌):",
|
|
89
|
+
"cmd.dryRun.full.autoUpdated": "자동 갱신될 파일 ({n}개, 사용자가 수정하지 않은 파일을 최신으로 교체):",
|
|
90
|
+
"cmd.dryRun.full.localKept": "그대로 유지할 파일 ({n}개, 사용자 수정본 유지 — 업스트림 변경 없음):",
|
|
91
|
+
"cmd.dryRun.full.removed": "사용자가 삭제해 복원하지 않는 파일 ({n}개):",
|
|
92
|
+
"cmd.dryRun.full.unchanged": "동일한 파일 ({n}개, 변경 없음)",
|
|
93
|
+
"cmd.dryRun.reason.cleanup": "이전 배포 방식 정리",
|
|
94
|
+
"cmd.dryRun.reason.storeCleanup": "선택 해제된 스토어 워크플로우 정리",
|
|
95
|
+
"cmd.dryRun.reason.staleCleanup": "현재 버전에 없는 이전 워크플로우 정리",
|
|
96
|
+
"cmd.dryRun.cleanup.removedLine": " - {file} ({reason})",
|
|
97
|
+
"cmd.dryRun.cleanup.backedUpLine": " > {file} → {file}.bak ({reason}, 수정본이라 백업)",
|
|
98
|
+
"cmd.dryRun.cleanup.removedHeading": "삭제될 파일 ({n}개):",
|
|
99
|
+
"cmd.dryRun.cleanup.backedUpHeading": ".bak으로 옮겨질 파일 ({n}개):",
|
|
100
|
+
"cmd.dryRun.gitignore.created": ".gitignore: 새로 생성될 예정 ({added})",
|
|
101
|
+
"cmd.dryRun.gitignore.append": ".gitignore: {added} 추가될 예정",
|
|
102
|
+
"cmd.dryRun.gitignore.unchanged": ".gitignore: 변경 없음 (이미 있는 항목)",
|
|
103
|
+
"cmd.dryRun.flutter.created": "Flutter 스토어 배포 파일 — 신규 ({n}개):",
|
|
104
|
+
"cmd.dryRun.flutter.kept": "Flutter 스토어 배포 파일 — 기존 파일 유지 ({n}개, 덮어쓰지 않음):",
|
|
105
|
+
"cmd.dryRun.flutter.keptLine": " = {file} (기존 파일 유지)",
|
|
106
|
+
"cmd.dryRun.versionYml.update": "version.yml: 갱신될 예정",
|
|
107
|
+
"cmd.dryRun.versionYml.unchanged": "version.yml: 변경 없음",
|
|
108
|
+
"cmd.dryRun.versionYml.create": "version.yml: 새로 생성될 예정",
|
|
109
|
+
"cmd.dryRun.versionYml.note": " (참고: 배포 설정 질문이 있는 타입(spring 등)은 deploy: 블록이 미리보기에 반영되지 않아 실제 설치와 다르게 보일 수 있습니다.)",
|
|
110
|
+
"cmd.dryRun.scripts.create": "새로 생성",
|
|
111
|
+
"cmd.dryRun.scripts.overwrite": "기존 파일을 새 버전으로 덮어씀 — 직접 고친 내용은 사라집니다",
|
|
112
|
+
"cmd.dryRun.scripts.unchanged": "변경 없음",
|
|
113
|
+
"cmd.dryRun.scripts.heading": "스크립트 ({dir}/, {n}개 — 항상 새 버전으로 교체):",
|
|
114
|
+
"cmd.dryRun.readme.added": "README.md: 끝에 버전 섹션이 추가될 예정",
|
|
115
|
+
"cmd.dryRun.readme.skipNoReadme": "README.md: 파일이 없어 버전 섹션을 추가하지 않음",
|
|
116
|
+
"cmd.dryRun.readme.skipMarker": "README.md: 이미 버전 섹션이 있어 변경 없음",
|
|
117
|
+
"cmd.dryRun.readme.skipVersionLine": "README.md: 이미 버전 줄이 있어 변경 없음",
|
|
118
|
+
"cmd.dryRun.readme.headingUpdated": "README.md: 버전 제목이 현재 언어로 교체될 예정 (기본 제목 그대로인 경우)",
|
|
119
|
+
"cmd.dryRun.readme.other": "README.md: {status}",
|
|
120
|
+
"cmd.dryRun.baseline.update": "{path}: 갱신될 예정 (다음 업데이트의 비교 기준)",
|
|
121
|
+
"cmd.dryRun.baseline.create": "{path}: 새로 생성될 예정 (다음 업데이트의 비교 기준)",
|
|
122
|
+
"cmd.full.noWritePermission": "쓰기 권한이 없어 설치를 시작하지 않았습니다 (아무 파일도 바꾸지 않았습니다):\n{list}\n권한을 확인한 뒤 다시 실행하세요.",
|
|
123
|
+
"cmd.full.log.typeEvidence": "{type} (근거: {evidence})",
|
|
124
|
+
"cmd.full.log.userChosen": "직접 선택",
|
|
125
|
+
"cmd.full.log.keepExisting": "{file} (기존 파일 유지)",
|
|
126
|
+
"cmd.full.log.versionUnchanged": "version.yml (v{version}, code={code}, 변경 없음)",
|
|
127
|
+
"cmd.full.log.scriptOverwritten": " (기존 내용과 달라 새 버전으로 덮어씀)",
|
|
128
|
+
"cmd.full.log.bytecodeRemoved": "{file} (예전 버전이 커밋한 바이트코드 — 삭제를 함께 커밋하세요)",
|
|
129
|
+
"cmd.full.log.gitignoreExisting": ".gitignore (이미 있는 항목)",
|
|
130
|
+
"cmd.full.log.secretOptional": "{name} (선택) ← {users}",
|
|
131
|
+
"cmd.full.summary.installed": "설치",
|
|
132
|
+
"cmd.full.summary.installedValue": "{n}개 파일",
|
|
133
|
+
"cmd.full.summary.autoUpdated": "자동 갱신",
|
|
134
|
+
"cmd.full.summary.autoUpdatedValue": "{n}개 (사용자 미수정)",
|
|
135
|
+
"cmd.full.summary.kept": "유지",
|
|
136
|
+
"cmd.full.summary.keptValue": "{n}개 (사용자 수정본)",
|
|
137
|
+
"cmd.full.summary.unchanged": "변경 없음",
|
|
138
|
+
"cmd.full.summary.unchangedValue": "{n}개",
|
|
139
|
+
"cmd.full.summary.backup": "백업 교체",
|
|
140
|
+
"cmd.full.summary.backupValue": "{n}개 (.bak 생성)",
|
|
141
|
+
"cmd.full.summary.cleanup": "정리",
|
|
142
|
+
"cmd.full.summary.cleanupValue": "삭제 {removed}개, .bak 이동 {backedUp}개",
|
|
143
|
+
"cmd.full.summary.unresolved": "미치환",
|
|
144
|
+
"cmd.full.summary.unresolvedValue": "{n}건",
|
|
145
|
+
"cmd.full.summary.unresolvedActionValue": "{n}건 ← 조치 필요",
|
|
146
|
+
"cmd.full.summary.secrets": "필요 Secret",
|
|
147
|
+
"cmd.full.summary.secretsValue": "{n}개",
|
|
148
|
+
"cmd.full.summary.result": "결과",
|
|
149
|
+
"cmd.full.summary.resultWarn": "주의 (미치환 {n}건)",
|
|
150
|
+
"cmd.full.notice.staleHeading": "현재 버전에 없는 이전 워크플로우를 정리했습니다 (이름이 바뀌었거나 제거된 파일):",
|
|
151
|
+
"cmd.full.notice.staleRemoved": " • {file} — 삭제 (손대지 않은 파일)",
|
|
152
|
+
"cmd.full.notice.staleBackedUp": " • {file} → {file}.bak — 수정하신 내용이 있어 백업",
|
|
153
|
+
"cmd.full.notice.conflictKept": "충돌 {n}개 — 기존 파일을 유지했습니다 (업스트림 변경 미반영): {files}",
|
|
154
|
+
"cmd.full.notice.conflictHint": " 파일마다 고르려면 대화형(npx project-auto-wizard)으로 다시 실행하세요.",
|
|
155
|
+
"cmd.uninstall.gitignoreDetail": ".gitignore 자동 추가 항목 ({status})",
|
|
156
|
+
"cmd.uninstall.item.workflows": "워크플로우 (.github/workflows/PROJECT-*.yaml) + 설치 기록 (.github/.wizard) + 수정하지 않은 Flutter 앱 파일",
|
|
157
|
+
"cmd.uninstall.item.scripts": "스크립트 (.github/scripts/*.py)",
|
|
158
|
+
"cmd.uninstall.item.readme": "README.md 버전 섹션 (AUTO-VERSION-SECTION)",
|
|
159
|
+
"cmd.uninstall.item.gitignore": ".gitignore 자동 추가 항목",
|
|
160
|
+
"cmd.uninstall.item.versionYml": "version.yml (버전/브랜치 설정 전체)",
|
|
161
|
+
"cmd.uninstall.noneSelected": "(선택된 항목 없음)",
|
|
162
|
+
"cmd.uninstall.result.workflows": "워크플로우 {n}개 제거",
|
|
163
|
+
"cmd.uninstall.result.scripts": "스크립트 {n}개 제거",
|
|
164
|
+
"cmd.uninstall.result.appFiles": "Flutter 앱 파일 {n}개 제거",
|
|
165
|
+
"cmd.uninstall.result.readme": "README.md 버전 섹션 제거",
|
|
166
|
+
"cmd.uninstall.result.gitignore": ".gitignore 자동 추가 항목 제거",
|
|
167
|
+
"cmd.uninstall.result.versionYml": "version.yml 제거",
|
|
168
|
+
"cmd.uninstall.result.none": "제거된 항목이 없습니다.",
|
|
169
|
+
"cmd.uninstall.flow.nothing": "제거할 항목이 없습니다.",
|
|
170
|
+
"cmd.uninstall.flow.title": "완전 삭제",
|
|
171
|
+
"cmd.uninstall.flow.select": "삭제할 항목을 선택하세요 (Space 토글, Enter 확정)",
|
|
172
|
+
"cmd.uninstall.flow.cancelled": "완전 삭제를 취소했습니다.",
|
|
173
|
+
"cmd.uninstall.flow.plannedTitle": "삭제 예정 항목",
|
|
174
|
+
"cmd.uninstall.flow.confirm": "정말 삭제할까요? 되돌릴 수 없습니다.",
|
|
175
|
+
"cmd.uninstall.flow.doneTitle": "완전 삭제 완료",
|
|
176
|
+
"cmd.purge.headerDry": "project-auto-wizard --mode purge --dry-run — 미리보기, 실제 파일은 바뀌지 않았습니다",
|
|
177
|
+
"cmd.purge.header": "project-auto-wizard --mode purge — 아래 항목을 제거합니다",
|
|
178
|
+
"cmd.purge.workflows": "워크플로우 ({n}개):",
|
|
179
|
+
"cmd.purge.scripts": "스크립트 ({n}개):",
|
|
180
|
+
"cmd.purge.appFile": "Flutter 앱 파일: {file}",
|
|
181
|
+
"cmd.purge.versionYml": "파일: version.yml",
|
|
182
|
+
"cmd.purge.readmeSection": "README.md: AUTO-VERSION-SECTION 블록",
|
|
183
|
+
"cmd.purge.gitignore": ".gitignore: 자동 추가 항목(*.bak, *.template.yaml)",
|
|
184
|
+
"cmd.purge.gitignoreKept": ".gitignore: 자동 추가 항목 유지 (남겨 둔 워크플로우의 백업 파일을 가리는 항목)",
|
|
185
|
+
"cmd.purge.file": "파일: {file}",
|
|
186
|
+
"cmd.purge.gitignoreLog": ".gitignore 자동 추가 항목",
|
|
187
|
+
"cmd.purge.removedHeading": "제거됨:",
|
|
188
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// 한국어 메시지: copy 영역 (src/core/copy).
|
|
2
|
+
export default {
|
|
3
|
+
"copy.readme.status.added": "README.md 끝에 버전 섹션 추가",
|
|
4
|
+
"copy.readme.status.skipNoReadme": "README.md가 없어 버전 섹션을 추가하지 않음",
|
|
5
|
+
"copy.readme.status.skipMarker": "이미 버전 섹션이 있어 그대로 둠",
|
|
6
|
+
"copy.readme.status.skipVersionLine": "이미 버전 줄이 있어 그대로 둠",
|
|
7
|
+
"copy.readme.status.headingUpdated": "버전 제목을 현재 언어로 교체",
|
|
8
|
+
"copy.readme.versionHeading": "## 최신 버전 : v{version}",
|
|
9
|
+
"copy.readme.historyLink": "[전체 버전 기록 보기](CHANGELOG.md)",
|
|
10
|
+
"copy.gitignore.newFileHeader": "# project-auto-wizard: 충돌 처리 시 생성되는 백업 파일 (안전하게 무시해도 됩니다)",
|
|
11
|
+
"copy.workflows.error.noPayloadWorkflows": "패키지 구조 오류 — payload/workflows 폴더를 찾지 못했습니다.",
|
|
12
|
+
"copy.workflows.log.keepLocal": "{f} (업스트림 무변경, 사용자 수정본 유지)",
|
|
13
|
+
"copy.workflows.log.autoUpdate": "{f} (사용자 미수정, 최신으로 교체)",
|
|
14
|
+
"copy.workflows.log.restore": "{f} (사용자가 지웠지만 복원 결정)",
|
|
15
|
+
"copy.workflows.log.removedKept": "{f} (사용자가 지움, 되살리지 않음)",
|
|
16
|
+
"copy.workflows.log.backup": "{filename} → {filename}.bak (사용자 결정, 새 버전으로 교체)",
|
|
17
|
+
"copy.workflows.log.template": "{filename} 유지 + {templateName} 생성 (사용자 결정)",
|
|
18
|
+
"copy.workflows.log.skipDecided": "{filename} (사용자 결정: 기존 유지, 업스트림 변경 미반영)",
|
|
19
|
+
"copy.workflows.log.skipForce": "{filename} (--force 기본값: 기존 유지, 업스트림 변경 미반영)",
|
|
20
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// 한국어 메시지: core 영역 (detect·paths·branches·deploy-style·flutter-* 등).
|
|
2
|
+
export default {
|
|
3
|
+
"core.detect.versionFallbackHint": "--project-version으로 직접 지정하거나 version.yml을 확인하세요.",
|
|
4
|
+
"core.detect.versionFallbackWarn": "⚠️ 버전을 자동 감지하지 못해 기본값 0.0.1을 사용합니다 — {tail}",
|
|
5
|
+
"core.detect.buildNumber.pubspecMissing": "⚠️ pubspec.yaml에 빌드 번호(+N)가 없어 version_code를 감지하지 못했습니다 — 기본값 1을 사용합니다. 실제 빌드 번호를 확인하세요.",
|
|
6
|
+
"core.detect.buildNumber.gradleMissing": "⚠️ android/app/build.gradle에 versionCode가 없어 version_code를 감지하지 못했습니다 — 기본값 1을 사용합니다. 실제 빌드 번호를 확인하세요.",
|
|
7
|
+
"core.detect.buildNumber.expoMissing": "⚠️ app.json의 expo.android.versionCode가 없어 version_code를 감지하지 못했습니다 — 기본값 1을 사용합니다. 실제 빌드 번호를 확인하세요.",
|
|
8
|
+
"core.detectFs.monorepoWarn": "⚠️ 루트에서 프로젝트 파일을 찾지 못해 basic으로 설치합니다. 하위 폴더에서 발견: {list}\n 모노레포라면 --paths \"{hint}\"로 다시 실행하세요.",
|
|
9
|
+
"core.detectFs.defaultBranchWarn": "⚠️ 원격 기본 브랜치를 확인할 수 없어(빈 원격 레포 등) 릴리스 브랜치를 '{fallback}'(으)로 가정합니다.{hint}",
|
|
10
|
+
"core.branches.developMissing": "원격에 '{develop}' 브랜치가 없습니다 — 설치 파일을 커밋해 '{main}'을 push한 뒤 만들어 주세요: git push origin {main}:{develop}",
|
|
11
|
+
"core.branches.confirmCreate": "원격에 '{develop}' 브랜치가 없습니다. 현재 HEAD 기준으로 생성하고 push할까요?",
|
|
12
|
+
"core.branches.alreadyExists": "이미 존재",
|
|
13
|
+
"core.branches.localSkipped": "'{develop}' 로컬 브랜치 생성 생략 ({reason})",
|
|
14
|
+
"core.branches.pushFailed": "⚠️ '{develop}' 브랜치 push 실패 — 원격 설정을 확인한 뒤 수동으로 push하세요 (git push -u origin {develop})",
|
|
15
|
+
"core.branches.created": "'{develop}' 브랜치를 생성하고 push했습니다.",
|
|
16
|
+
"core.assets.missingWorkflows": "패키지 구조 오류 — payload/workflows 폴더를 찾지 못했습니다.",
|
|
17
|
+
"core.assets.missingScripts": "패키지 구조 오류 — payload/scripts 폴더를 찾지 못했습니다.",
|
|
18
|
+
"core.branding.unknownPlaceholder": "알 수 없는 플레이스홀더가 남았습니다: {{{name}}}",
|
|
19
|
+
"core.deploy.label.simple": "단일 서버 배포 — 컨테이너를 내렸다 올린다 (가장 단순, 짧은 다운타임)",
|
|
20
|
+
"core.deploy.label.nginx": "무중단 배포 (Nginx) — nginx config의 proxy_pass 포트를 Blue/Green으로 토글",
|
|
21
|
+
"core.deploy.label.traefik": "무중단 배포 (Traefik) — Traefik 라우팅으로 Blue/Green 전환",
|
|
22
|
+
"core.flutterOptions.storeSubmitWarning": "store_submit을 고르면 main push마다 심사가 자동 제출됩니다.",
|
|
23
|
+
"core.flutterHooks.status.envModeUnset": "미설정(dotenv 유지)",
|
|
24
|
+
"core.flutterHooks.status.storeUnset": "미설정(둘 다 설치)",
|
|
25
|
+
"core.flutterHooks.status.deployModeUnset": "미설정(store_only)",
|
|
26
|
+
"core.flutterHooks.comment.envMode": "(Flutter 환경변수 주입 방식)",
|
|
27
|
+
"core.flutterHooks.comment.store": "(스토어 배포 대상)",
|
|
28
|
+
"core.flutterHooks.comment.androidDeployMode": "(Play Store 배포 모드)",
|
|
29
|
+
"core.flutterHooks.comment.iosDeployMode": "(iOS 배포 모드)",
|
|
30
|
+
"core.flutterHooks.err.invalidFlag": "{flag} 값이 올바르지 않습니다: {value} ({allowed})",
|
|
31
|
+
"core.flutterHooks.noValue": "(없음)",
|
|
32
|
+
"core.flutterHooks.log.storesNone": "없음",
|
|
33
|
+
"core.flutterHooks.log.storesUndecided": "미결정(둘 다)",
|
|
34
|
+
"core.flutterDoctor.row.android": "Flutter Android 배포 파일",
|
|
35
|
+
"core.flutterDoctor.row.ios": "Flutter iOS 배포 파일",
|
|
36
|
+
"core.flutterDoctor.purpose.storeFiles": "fastlane 스토어 업로드에 필요한 파일",
|
|
37
|
+
"core.flutterDoctor.value.missing": "없는 파일: {files}",
|
|
38
|
+
"core.flutterDoctor.impact.missing": "이 파일이 없으면 스토어 배포 워크플로우가 fastlane 단계에서 실패합니다.",
|
|
39
|
+
"core.flutterDoctor.action.missing": "마법사를 다시 실행하면 없는 파일만 새로 만들어 줍니다 (이미 있는 파일은 덮어쓰지 않음)",
|
|
40
|
+
"core.flutterDoctor.value.present": "{count}개 있음",
|
|
41
|
+
"core.flutterDoctor.purpose.exportOptions": "iOS 서명·내보내기 설정",
|
|
42
|
+
"core.flutterDoctor.value.unfilled": "채워지지 않은 값: {left}",
|
|
43
|
+
"core.flutterDoctor.impact.unfilled": "채우지 않으면 IOS-TESTFLIGHT 워크플로우가 ExportOptions.plist 검증 단계에서 중단됩니다.",
|
|
44
|
+
"core.flutterDoctor.action.unfilled": "{path} 의 플레이스홀더를 실제 값(Team ID · 번들 ID · 프로비저닝 프로파일 이름)으로 바꾸세요",
|
|
45
|
+
"core.flutterDoctor.value.noPlaceholder": "플레이스홀더 없음",
|
|
46
|
+
"core.paths.intro.multi": "🔍 멀티타입 프로젝트가 감지되었습니다 — 총 {total}개 타입",
|
|
47
|
+
"core.paths.intro.single": "🔍 {type} 프로젝트가 감지되었습니다 — 총 1개 타입",
|
|
48
|
+
"core.paths.intro.rootDef": "💡 '프로젝트 루트' = 그 타입의 버전 파일이 있는 폴더 (레포 루트 기준 상대경로)",
|
|
49
|
+
"core.paths.err.pathMissing": "--paths로 지정한 경로가 존재하지 않습니다: '{type}={path}'",
|
|
50
|
+
"core.paths.say.explicit": " {type} → {path} (--paths 지정)",
|
|
51
|
+
"core.paths.warn.noMarker": " ⚠️ {path}에 {type} 프로젝트 파일({marker})이 없습니다 — 경로가 맞는지 확인하세요.",
|
|
52
|
+
"core.paths.say.rootMarker": " {type} → . (루트의 {marker})",
|
|
53
|
+
"core.paths.say.keepExisting": " {type} → {path} (기존 project_paths 유지)",
|
|
54
|
+
"core.paths.say.auto": " {type} → {path} (자동 감지)",
|
|
55
|
+
"core.paths.err.none": "{type}: 프로젝트 경로를 찾지 못했습니다. --paths \"{type}=경로\"로 직접 지정하세요.",
|
|
56
|
+
"core.paths.err.ambiguous": "{type}: 경로 후보가 {count}개로 모호합니다({list}). --paths \"{type}=경로\"로 직접 지정하세요.",
|
|
57
|
+
"core.paths.found.one": " {prog} 🔍 {type} — {marker} 발견",
|
|
58
|
+
"core.paths.found.location": " 위치: <레포루트>/{file}",
|
|
59
|
+
"core.paths.confirm.candidate": " {type} 프로젝트 루트를 '{cand}'(으)로 설정할까요? ({file} 기준 — 아니오 선택 시 직접 입력)",
|
|
60
|
+
"core.paths.found.many": " {prog} 🔍 {type}: 경로 후보 {count}개 발견",
|
|
61
|
+
"core.paths.manualInput": "직접 입력",
|
|
62
|
+
"core.paths.select.root": " {type} 프로젝트 루트를 선택하세요",
|
|
63
|
+
"core.paths.found.none": " ⚠️ {prog} {type}: 프로젝트를 찾지 못했습니다 (maxdepth 3).",
|
|
64
|
+
"core.paths.prompt.base": " {type} 프로젝트 루트 경로 입력 ({marker} 이 있는 폴더, 예: server, app — 루트면 그냥 Enter",
|
|
65
|
+
"core.paths.prompt.current": ", 현재값: {existing}",
|
|
66
|
+
"core.paths.warn.outsideRepo": " ⚠️ '{input}'은(는) 레포 밖 경로입니다 — 레포 루트 기준 상대경로로 입력하세요.",
|
|
67
|
+
"core.paths.warn.noFile": " ⚠️ {input}/{marker} 파일이 없습니다.",
|
|
68
|
+
"core.paths.confirm.useAnyway": " 그래도 이 경로를 사용할까요? (아니오 = 다시 입력)",
|
|
69
|
+
"core.paths.say.chosen": " ✅ {type} → {chosen}",
|
|
70
|
+
"core.paths.summary.title": "📂 타입별 버전 파일 경로 확정:",
|
|
71
|
+
"core.paths.summary.row": " {type} → {file}",
|
|
72
|
+
"core.paths.dup.warn": " ⚠️ 같은 파일({file})을 여러 타입({types})이 바라봅니다.",
|
|
73
|
+
"core.paths.dup.note": " → sync 때 모두 같은 버전이 기록됩니다. 동작에는 문제없지만 의도한 구성인지 확인하세요.",
|
|
74
|
+
};
|