From 3169728d3a66a4971c5cf0b6a767f8b41fc4ff06 Mon Sep 17 00:00:00 2001 From: Snider Date: Fri, 30 Jan 2026 11:32:25 +0000 Subject: [PATCH] refactor(i18n): consolidate duplicate translation keys into common section Add common.* keys for reusable translations: - common.label.* - UI labels (error, done, status, version, etc.) - common.status.* - status words (running, stopped, dirty, synced) - common.error.* - error messages (failed, not_found, working_dir) - common.flag.* - CLI flag descriptions (registry, verbose, etc.) - common.count.* - count templates (failed, passed, skipped) - common.result.* - result messages (all_passed, no_issues) - common.progress.* - progress messages (running, checking) - common.hint.* - help hints (install_with, fix_deps) Update all cmd/* files to use common keys instead of duplicated command-specific keys. Reduces translation maintenance burden and ensures consistency across the CLI. Co-Authored-By: Claude Opus 4.5 --- cmd/ai/ai_git.go | 10 +- cmd/ai/ai_tasks.go | 10 +- cmd/ai/ai_updates.go | 4 +- cmd/build/build.go | 2 +- cmd/build/build_project.go | 20 +-- cmd/build/build_pwa.go | 4 +- cmd/build/build_sdk.go | 12 +- cmd/ci/ci_changelog.go | 4 +- cmd/ci/ci_init.go | 6 +- cmd/ci/ci_publish.go | 10 +- cmd/ci/ci_version.go | 4 +- cmd/dev/dev_ci.go | 6 +- cmd/dev/dev_commit.go | 8 +- cmd/dev/dev_health.go | 8 +- cmd/dev/dev_impact.go | 4 +- cmd/dev/dev_issues.go | 4 +- cmd/dev/dev_pull.go | 8 +- cmd/dev/dev_push.go | 14 +- cmd/dev/dev_reviews.go | 6 +- cmd/dev/dev_sync.go | 2 +- cmd/dev/dev_vm.go | 14 +- cmd/dev/dev_work.go | 12 +- cmd/docs/list.go | 8 +- cmd/docs/sync.go | 6 +- cmd/go/go_format.go | 2 +- cmd/go/go_test_cmd.go | 18 +- cmd/go/go_tools.go | 6 +- cmd/php/php_build.go | 20 +-- cmd/php/php_deploy.go | 26 +-- cmd/php/php_dev.go | 22 +-- cmd/php/php_packages.go | 18 +- cmd/php/php_quality.go | 68 ++++---- cmd/pkg/pkg_install.go | 8 +- cmd/pkg/pkg_manage.go | 12 +- cmd/pkg/pkg_search.go | 4 +- cmd/sdk/sdk.go | 14 +- cmd/setup/setup_bootstrap.go | 2 +- cmd/setup/setup_registry.go | 16 +- cmd/test/test.go | 2 +- cmd/test/test_output.go | 8 +- cmd/test/test_runner.go | 12 +- cmd/vm/container.go | 10 +- cmd/vm/templates.go | 10 +- pkg/i18n/locales/en_GB.json | 318 +++++++++++++---------------------- 44 files changed, 350 insertions(+), 432 deletions(-) diff --git a/cmd/ai/ai_git.go b/cmd/ai/ai_git.go index fe1e6c7..8de7933 100644 --- a/cmd/ai/ai_git.go +++ b/cmd/ai/ai_git.go @@ -45,7 +45,7 @@ var taskCommitCmd = &cobra.Command{ cfg, err := agentic.LoadConfig("") if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } client := agentic.NewClientFromConfig(cfg) @@ -71,7 +71,7 @@ var taskCommitCmd = &cobra.Command{ // Get current directory cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Check for uncommitted changes @@ -116,7 +116,7 @@ var taskPRCmd = &cobra.Command{ cfg, err := agentic.LoadConfig("") if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } client := agentic.NewClientFromConfig(cfg) @@ -133,7 +133,7 @@ var taskPRCmd = &cobra.Command{ // Get current directory cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Check current branch @@ -174,7 +174,7 @@ var taskPRCmd = &cobra.Command{ } fmt.Printf("%s %s\n", successStyle.Render(">>"), i18n.T("cmd.ai.task_pr.created")) - fmt.Printf(" %s %s\n", i18n.T("cmd.ai.label.url"), prURL) + fmt.Printf(" %s %s\n", i18n.T("common.label.url"), prURL) return nil }, diff --git a/cmd/ai/ai_tasks.go b/cmd/ai/ai_tasks.go index ec87f05..145c05f 100644 --- a/cmd/ai/ai_tasks.go +++ b/cmd/ai/ai_tasks.go @@ -43,7 +43,7 @@ var tasksCmd = &cobra.Command{ cfg, err := agentic.LoadConfig("") if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } client := agentic.NewClientFromConfig(cfg) @@ -88,7 +88,7 @@ var taskCmd = &cobra.Command{ RunE: func(cmd *cobra.Command, args []string) error { cfg, err := agentic.LoadConfig("") if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } client := agentic.NewClientFromConfig(cfg) @@ -167,7 +167,7 @@ var taskCmd = &cobra.Command{ } fmt.Printf("%s %s\n", successStyle.Render(">>"), i18n.T("cmd.ai.task.claimed")) - fmt.Printf(" %s %s\n", i18n.T("cmd.ai.label.status"), formatTaskStatus(claimedTask.Status)) + fmt.Printf(" %s %s\n", i18n.T("common.label.status"), formatTaskStatus(claimedTask.Status)) } return nil @@ -224,10 +224,10 @@ func printTaskDetails(task *agentic.Task) { fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.ai.label.id")), taskIDStyle.Render(task.ID)) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.ai.label.title")), taskTitleStyle.Render(task.Title)) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.ai.label.priority")), formatTaskPriority(task.Priority)) - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.ai.label.status")), formatTaskStatus(task.Status)) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.status")), formatTaskStatus(task.Status)) if task.Project != "" { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.ai.label.project")), task.Project) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.project")), task.Project) } if len(task.Labels) > 0 { diff --git a/cmd/ai/ai_updates.go b/cmd/ai/ai_updates.go index 31cae93..9854238 100644 --- a/cmd/ai/ai_updates.go +++ b/cmd/ai/ai_updates.go @@ -40,7 +40,7 @@ var taskUpdateCmd = &cobra.Command{ cfg, err := agentic.LoadConfig("") if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } client := agentic.NewClientFromConfig(cfg) @@ -75,7 +75,7 @@ var taskCompleteCmd = &cobra.Command{ cfg, err := agentic.LoadConfig("") if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ai.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } client := agentic.NewClientFromConfig(cfg) diff --git a/cmd/build/build.go b/cmd/build/build.go index 5058685..888c035 100644 --- a/cmd/build/build.go +++ b/cmd/build/build.go @@ -119,7 +119,7 @@ func init() { pwaCmd.Flags().StringVar(&pwaURL, "url", "", i18n.T("cmd.build.pwa.flag.url")) // sdk subcommand flags - sdkBuildCmd.Flags().StringVar(&sdkSpec, "spec", "", i18n.T("cmd.build.sdk.flag.spec")) + sdkBuildCmd.Flags().StringVar(&sdkSpec, "spec", "", i18n.T("common.flag.spec")) sdkBuildCmd.Flags().StringVar(&sdkLang, "lang", "", i18n.T("cmd.build.sdk.flag.lang")) sdkBuildCmd.Flags().StringVar(&sdkVersion, "version", "", i18n.T("cmd.build.sdk.flag.version")) sdkBuildCmd.Flags().BoolVar(&sdkDryRun, "dry-run", false, i18n.T("cmd.build.sdk.flag.dry_run")) diff --git a/cmd/build/build_project.go b/cmd/build/build_project.go index c0e6818..5e71308 100644 --- a/cmd/build/build_project.go +++ b/cmd/build/build_project.go @@ -25,13 +25,13 @@ func runProjectBuild(buildType string, ciMode bool, targetsFlag string, outputDi // Get current working directory as project root projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.build.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Load configuration from .core/build.yaml (or defaults) buildCfg, err := buildpkg.LoadConfig(projectDir) if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.build.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } // Detect project type if not specified @@ -120,13 +120,13 @@ func runProjectBuild(buildType string, ciMode bool, targetsFlag string, outputDi artifacts, err := builder.Build(ctx, cfg, buildTargets) if err != nil { if !ciMode { - fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), i18n.T("cmd.build.error.build_failed"), err) + fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("common.error.build_failed"), err) } return err } if !ciMode { - fmt.Printf("%s %s\n", buildSuccessStyle.Render(i18n.T("cmd.build.label.success")), i18n.T("cmd.build.built_artifacts", map[string]interface{}{"Count": len(artifacts)})) + fmt.Printf("%s %s\n", buildSuccessStyle.Render(i18n.T("common.label.success")), i18n.T("cmd.build.built_artifacts", map[string]interface{}{"Count": len(artifacts)})) fmt.Println() for _, artifact := range artifacts { relPath, err := filepath.Rel(projectDir, artifact.Path) @@ -164,7 +164,7 @@ func runProjectBuild(buildType string, ciMode bool, targetsFlag string, outputDi if err := signing.SignBinaries(ctx, signCfg, signingArtifacts); err != nil { if !ciMode { - fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), i18n.T("cmd.build.error.signing_failed"), err) + fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.build.error.signing_failed"), err) } return err } @@ -172,7 +172,7 @@ func runProjectBuild(buildType string, ciMode bool, targetsFlag string, outputDi if signCfg.MacOS.Notarize { if err := signing.NotarizeBinaries(ctx, signCfg, signingArtifacts); err != nil { if !ciMode { - fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), i18n.T("cmd.build.error.notarization_failed"), err) + fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.build.error.notarization_failed"), err) } return err } @@ -190,7 +190,7 @@ func runProjectBuild(buildType string, ciMode bool, targetsFlag string, outputDi archivedArtifacts, err = buildpkg.ArchiveAll(artifacts) if err != nil { if !ciMode { - fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), i18n.T("cmd.build.error.archive_failed"), err) + fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.build.error.archive_failed"), err) } return err } @@ -258,7 +258,7 @@ func computeAndWriteChecksums(ctx context.Context, projectDir, outputDir string, checksummedArtifacts, err := buildpkg.ChecksumAll(artifacts) if err != nil { if !ciMode { - fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), i18n.T("cmd.build.error.checksum_failed"), err) + fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.build.error.checksum_failed"), err) } return nil, err } @@ -267,7 +267,7 @@ func computeAndWriteChecksums(ctx context.Context, projectDir, outputDir string, checksumPath := filepath.Join(outputDir, "CHECKSUMS.txt") if err := buildpkg.WriteChecksumFile(checksummedArtifacts, checksumPath); err != nil { if !ciMode { - fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), i18n.T("cmd.build.error.write_checksums"), err) + fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.build.error.write_checksums"), err) } return nil, err } @@ -276,7 +276,7 @@ func computeAndWriteChecksums(ctx context.Context, projectDir, outputDir string, if signCfg.Enabled { if err := signing.SignChecksums(ctx, signCfg, checksumPath); err != nil { if !ciMode { - fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), i18n.T("cmd.build.error.gpg_signing_failed"), err) + fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.build.error.gpg_signing_failed"), err) } return nil, err } diff --git a/cmd/build/build_pwa.go b/cmd/build/build_pwa.go index a6476f9..f25f3d5 100644 --- a/cmd/build/build_pwa.go +++ b/cmd/build/build_pwa.go @@ -66,7 +66,7 @@ func downloadPWA(baseURL, destDir string) error { manifestURL, err := findManifestURL(string(body), baseURL) if err != nil { // If no manifest, it's not a PWA, but we can still try to package it as a simple site. - fmt.Printf("%s %s\n", i18n.T("cmd.build.pwa.warning"), i18n.T("cmd.build.pwa.no_manifest")) + fmt.Printf("%s %s\n", i18n.T("common.label.warning"), i18n.T("cmd.build.pwa.no_manifest")) if err := os.WriteFile(filepath.Join(destDir, "index.html"), body, 0644); err != nil { return fmt.Errorf("%s: %w", i18n.T("cmd.build.pwa.error.write_index"), err) } @@ -85,7 +85,7 @@ func downloadPWA(baseURL, destDir string) error { assets := collectAssets(manifest, manifestURL) for _, assetURL := range assets { if err := downloadAsset(assetURL, destDir); err != nil { - fmt.Printf("%s %s %s: %v\n", i18n.T("cmd.build.pwa.warning"), i18n.T("cmd.build.pwa.asset_download_failed"), assetURL, err) + fmt.Printf("%s %s %s: %v\n", i18n.T("common.label.warning"), i18n.T("cmd.build.pwa.asset_download_failed"), assetURL, err) } } diff --git a/cmd/build/build_sdk.go b/cmd/build/build_sdk.go index fb7bec6..7a65037 100644 --- a/cmd/build/build_sdk.go +++ b/cmd/build/build_sdk.go @@ -21,7 +21,7 @@ func runBuildSDK(specPath, lang, version string, dryRun bool) error { projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.build.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Load config @@ -44,10 +44,10 @@ func runBuildSDK(specPath, lang, version string, dryRun bool) error { // Detect spec detectedSpec, err := s.DetectSpec() if err != nil { - fmt.Printf("%s %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), err) + fmt.Printf("%s %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), err) return err } - fmt.Printf(" %s %s\n", i18n.T("cmd.build.sdk.spec_label"), buildTargetStyle.Render(detectedSpec)) + fmt.Printf(" %s %s\n", i18n.T("common.label.spec"), buildTargetStyle.Render(detectedSpec)) if dryRun { if lang != "" { @@ -63,20 +63,20 @@ func runBuildSDK(specPath, lang, version string, dryRun bool) error { if lang != "" { // Generate single language if err := s.GenerateLanguage(ctx, lang); err != nil { - fmt.Printf("%s %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), err) + fmt.Printf("%s %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), err) return err } fmt.Printf(" %s %s\n", i18n.T("cmd.build.sdk.generated_label"), buildTargetStyle.Render(lang)) } else { // Generate all if err := s.Generate(ctx); err != nil { - fmt.Printf("%s %v\n", buildErrorStyle.Render(i18n.T("cmd.build.label.error")), err) + fmt.Printf("%s %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), err) return err } fmt.Printf(" %s %s\n", i18n.T("cmd.build.sdk.generated_label"), buildTargetStyle.Render(strings.Join(config.Languages, ", "))) } fmt.Println() - fmt.Printf("%s %s\n", buildSuccessStyle.Render(i18n.T("cmd.build.label.success")), i18n.T("cmd.build.sdk.complete")) + fmt.Printf("%s %s\n", buildSuccessStyle.Render(i18n.T("common.label.success")), i18n.T("cmd.build.sdk.complete")) return nil } diff --git a/cmd/ci/ci_changelog.go b/cmd/ci/ci_changelog.go index cdb75f8..4bf3049 100644 --- a/cmd/ci/ci_changelog.go +++ b/cmd/ci/ci_changelog.go @@ -12,13 +12,13 @@ import ( func runChangelog(fromRef, toRef string) error { projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ci.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Load config for changelog settings cfg, err := release.LoadConfig(projectDir) if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ci.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } // Generate changelog diff --git a/cmd/ci/ci_init.go b/cmd/ci/ci_init.go index b5c464b..36f8680 100644 --- a/cmd/ci/ci_init.go +++ b/cmd/ci/ci_init.go @@ -15,13 +15,13 @@ import ( func runCIReleaseInit() error { projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ci.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Check if config already exists if release.ConfigExists(projectDir) { fmt.Printf("%s %s %s\n", - releaseDimStyle.Render(i18n.T("cmd.ci.label.note")), + releaseDimStyle.Render(i18n.T("common.label.note")), i18n.T("cmd.ci.init.config_exists"), release.ConfigPath(projectDir)) @@ -66,7 +66,7 @@ func runCIReleaseInit() error { fmt.Println() fmt.Printf("%s %s %s\n", - releaseSuccessStyle.Render(i18n.T("cmd.ci.label.success")), + releaseSuccessStyle.Render(i18n.T("common.label.success")), i18n.T("cmd.ci.init.config_written"), release.ConfigPath(projectDir)) diff --git a/cmd/ci/ci_publish.go b/cmd/ci/ci_publish.go index 62efe74..d2b5883 100644 --- a/cmd/ci/ci_publish.go +++ b/cmd/ci/ci_publish.go @@ -17,13 +17,13 @@ func runCIPublish(dryRun bool, version string, draft, prerelease bool) error { // Get current directory projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ci.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Load configuration cfg, err := release.LoadConfig(projectDir) if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ci.error.load_config"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err) } // Apply CLI overrides @@ -60,14 +60,14 @@ func runCIPublish(dryRun bool, version string, draft, prerelease bool) error { // Publish pre-built artifacts rel, err := release.Publish(ctx, cfg, dryRun) if err != nil { - fmt.Printf("%s %v\n", releaseErrorStyle.Render(i18n.T("cmd.ci.label.error")), err) + fmt.Printf("%s %v\n", releaseErrorStyle.Render(i18n.T("common.label.error")), err) return err } // Print summary fmt.Println() - fmt.Printf("%s %s\n", releaseSuccessStyle.Render(i18n.T("cmd.ci.label.success")), i18n.T("cmd.ci.publish_completed")) - fmt.Printf(" %s %s\n", i18n.T("cmd.ci.label.version"), releaseValueStyle.Render(rel.Version)) + fmt.Printf("%s %s\n", releaseSuccessStyle.Render(i18n.T("common.label.success")), i18n.T("cmd.ci.publish_completed")) + fmt.Printf(" %s %s\n", i18n.T("common.label.version"), releaseValueStyle.Render(rel.Version)) fmt.Printf(" %s %d\n", i18n.T("cmd.ci.label.artifacts"), len(rel.Artifacts)) if !dryRun { diff --git a/cmd/ci/ci_version.go b/cmd/ci/ci_version.go index 1f833d4..832423c 100644 --- a/cmd/ci/ci_version.go +++ b/cmd/ci/ci_version.go @@ -12,7 +12,7 @@ import ( func runCIReleaseVersion() error { projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.ci.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } version, err := release.DetermineVersion(projectDir) @@ -20,6 +20,6 @@ func runCIReleaseVersion() error { return fmt.Errorf("%s: %w", i18n.T("cmd.ci.error.determine_version"), err) } - fmt.Printf("%s %s\n", i18n.T("cmd.ci.label.version"), releaseValueStyle.Render(version)) + fmt.Printf("%s %s\n", i18n.T("common.label.version"), releaseValueStyle.Render(version)) return nil } diff --git a/cmd/dev/dev_ci.go b/cmd/dev/dev_ci.go index 2200913..75f350a 100644 --- a/cmd/dev/dev_ci.go +++ b/cmd/dev/dev_ci.go @@ -58,7 +58,7 @@ func addCICommand(parent *cobra.Command) { }, } - ciCmd.Flags().StringVar(&ciRegistryPath, "registry", "", i18n.T("cmd.dev.ci.flag.registry")) + ciCmd.Flags().StringVar(&ciRegistryPath, "registry", "", i18n.T("common.flag.registry")) ciCmd.Flags().StringVarP(&ciBranch, "branch", "b", "main", i18n.T("cmd.dev.ci.flag.branch")) ciCmd.Flags().BoolVar(&ciFailedOnly, "failed", false, i18n.T("cmd.dev.ci.flag.failed")) @@ -154,7 +154,7 @@ func runCI(registryPath string, branch string, failedOnly bool) error { fmt.Printf(" * %s", ciFailureStyle.Render(i18n.T("cmd.dev.ci.failing", map[string]interface{}{"Count": failed}))) } if pending > 0 { - fmt.Printf(" * %s", ciPendingStyle.Render(i18n.T("cmd.dev.ci.pending", map[string]interface{}{"Count": pending}))) + fmt.Printf(" * %s", ciPendingStyle.Render(i18n.T("common.count.pending", map[string]interface{}{"Count": pending}))) } if len(noCI) > 0 { fmt.Printf(" * %s", ciSkippedStyle.Render(i18n.T("cmd.dev.ci.no_ci", map[string]interface{}{"Count": len(noCI)}))) @@ -182,7 +182,7 @@ func runCI(registryPath string, branch string, failedOnly bool) error { if len(fetchErrors) > 0 { fmt.Println() for _, err := range fetchErrors { - fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("cmd.dev.ci.error_label")), err) + fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("common.label.error")), err) } } diff --git a/cmd/dev/dev_commit.go b/cmd/dev/dev_commit.go index aa67aa9..0cc54bd 100644 --- a/cmd/dev/dev_commit.go +++ b/cmd/dev/dev_commit.go @@ -30,7 +30,7 @@ func addCommitCommand(parent *cobra.Command) { }, } - commitCmd.Flags().StringVar(&commitRegistryPath, "registry", "", i18n.T("cmd.dev.commit.flag.registry")) + commitCmd.Flags().StringVar(&commitRegistryPath, "registry", "", i18n.T("common.flag.registry")) commitCmd.Flags().BoolVar(&commitAll, "all", false, i18n.T("cmd.dev.commit.flag.all")) parent.AddCommand(commitCmd) @@ -54,7 +54,7 @@ func runCommit(registryPath string, all bool) error { if err != nil { return fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { registryPath, err = repos.FindRegistry() if err == nil { @@ -62,7 +62,7 @@ func runCommit(registryPath string, all bool) error { if err != nil { return fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { // Fallback: scan current directory for repos reg, err = repos.ScanDirectory(cwd) @@ -154,7 +154,7 @@ func runCommit(registryPath string, all bool) error { // Summary fmt.Printf("%s", successStyle.Render(i18n.T("cmd.dev.done_succeeded", map[string]interface{}{"Count": succeeded}))) if failed > 0 { - fmt.Printf(", %s", errorStyle.Render(i18n.T("cmd.dev.count_failed", map[string]interface{}{"Count": failed}))) + fmt.Printf(", %s", errorStyle.Render(i18n.T("common.count.failed", map[string]interface{}{"Count": failed}))) } fmt.Println() diff --git a/cmd/dev/dev_health.go b/cmd/dev/dev_health.go index d10e62a..2f42c99 100644 --- a/cmd/dev/dev_health.go +++ b/cmd/dev/dev_health.go @@ -30,7 +30,7 @@ func addHealthCommand(parent *cobra.Command) { }, } - healthCmd.Flags().StringVar(&healthRegistryPath, "registry", "", i18n.T("cmd.dev.health.flag.registry")) + healthCmd.Flags().StringVar(&healthRegistryPath, "registry", "", i18n.T("common.flag.registry")) healthCmd.Flags().BoolVarP(&healthVerbose, "verbose", "v", false, i18n.T("cmd.dev.health.flag.verbose")) parent.AddCommand(healthCmd) @@ -149,7 +149,7 @@ func printHealthSummary(total int, dirty, ahead, behind, errors []string) { // Dirty status if len(dirty) > 0 { - parts = append(parts, cli.StatusPart(len(dirty), i18n.T("cmd.dev.health.dirty"), cli.WarningStyle)) + parts = append(parts, cli.StatusPart(len(dirty), i18n.T("common.status.dirty"), cli.WarningStyle)) } else { parts = append(parts, cli.StatusText(i18n.T("cmd.dev.status.clean"), cli.SuccessStyle)) } @@ -158,14 +158,14 @@ func printHealthSummary(total int, dirty, ahead, behind, errors []string) { if len(ahead) > 0 { parts = append(parts, cli.StatusPart(len(ahead), i18n.T("cmd.dev.health.to_push"), cli.ValueStyle)) } else { - parts = append(parts, cli.StatusText(i18n.T("cmd.dev.health.synced"), cli.SuccessStyle)) + parts = append(parts, cli.StatusText(i18n.T("common.status.synced"), cli.SuccessStyle)) } // Pull status if len(behind) > 0 { parts = append(parts, cli.StatusPart(len(behind), i18n.T("cmd.dev.health.to_pull"), cli.WarningStyle)) } else { - parts = append(parts, cli.StatusText(i18n.T("cmd.dev.health.up_to_date"), cli.SuccessStyle)) + parts = append(parts, cli.StatusText(i18n.T("common.status.up_to_date"), cli.SuccessStyle)) } // Errors (only if any) diff --git a/cmd/dev/dev_impact.go b/cmd/dev/dev_impact.go index 1c495aa..4825d6f 100644 --- a/cmd/dev/dev_impact.go +++ b/cmd/dev/dev_impact.go @@ -32,7 +32,7 @@ func addImpactCommand(parent *cobra.Command) { }, } - impactCmd.Flags().StringVar(&impactRegistryPath, "registry", "", i18n.T("cmd.dev.impact.flag.registry")) + impactCmd.Flags().StringVar(&impactRegistryPath, "registry", "", i18n.T("common.flag.registry")) parent.AddCommand(impactCmd) } @@ -138,7 +138,7 @@ func runImpact(registryPath string, repoName string) error { // Summary fmt.Printf("%s %s\n", - dimStyle.Render(i18n.T("cmd.dev.impact.summary")), + dimStyle.Render(i18n.T("common.label.summary")), i18n.T("cmd.dev.impact.changes_affect", map[string]interface{}{ "Repo": repoNameStyle.Render(repoName), "Affected": len(allAffected), diff --git a/cmd/dev/dev_issues.go b/cmd/dev/dev_issues.go index 41f05a8..d42c980 100644 --- a/cmd/dev/dev_issues.go +++ b/cmd/dev/dev_issues.go @@ -72,7 +72,7 @@ func addIssuesCommand(parent *cobra.Command) { }, } - issuesCmd.Flags().StringVar(&issuesRegistryPath, "registry", "", i18n.T("cmd.dev.issues.flag.registry")) + issuesCmd.Flags().StringVar(&issuesRegistryPath, "registry", "", i18n.T("common.flag.registry")) issuesCmd.Flags().IntVarP(&issuesLimit, "limit", "l", 10, i18n.T("cmd.dev.issues.flag.limit")) issuesCmd.Flags().StringVarP(&issuesAssignee, "assignee", "a", "", i18n.T("cmd.dev.issues.flag.assignee")) @@ -150,7 +150,7 @@ func runIssues(registryPath string, limit int, assignee string) error { if len(fetchErrors) > 0 { fmt.Println() for _, err := range fetchErrors { - fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("cmd.dev.issues.error_label")), err) + fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("common.label.error")), err) } } diff --git a/cmd/dev/dev_pull.go b/cmd/dev/dev_pull.go index 3116546..c66d8d0 100644 --- a/cmd/dev/dev_pull.go +++ b/cmd/dev/dev_pull.go @@ -29,7 +29,7 @@ func addPullCommand(parent *cobra.Command) { }, } - pullCmd.Flags().StringVar(&pullRegistryPath, "registry", "", i18n.T("cmd.dev.pull.flag.registry")) + pullCmd.Flags().StringVar(&pullRegistryPath, "registry", "", i18n.T("common.flag.registry")) pullCmd.Flags().BoolVar(&pullAll, "all", false, i18n.T("cmd.dev.pull.flag.all")) parent.AddCommand(pullCmd) @@ -47,7 +47,7 @@ func runPull(registryPath string, all bool) error { if err != nil { return fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { registryPath, err = repos.FindRegistry() if err == nil { @@ -55,7 +55,7 @@ func runPull(registryPath string, all bool) error { if err != nil { return fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { // Fallback: scan current directory cwd, _ := os.Getwd() @@ -138,7 +138,7 @@ func runPull(registryPath string, all bool) error { fmt.Println() fmt.Printf("%s", successStyle.Render(i18n.T("cmd.dev.pull.done_pulled", map[string]interface{}{"Count": succeeded}))) if failed > 0 { - fmt.Printf(", %s", errorStyle.Render(i18n.T("cmd.dev.count_failed", map[string]interface{}{"Count": failed}))) + fmt.Printf(", %s", errorStyle.Render(i18n.T("common.count.failed", map[string]interface{}{"Count": failed}))) } fmt.Println() diff --git a/cmd/dev/dev_push.go b/cmd/dev/dev_push.go index 7abdde7..a7e1307 100644 --- a/cmd/dev/dev_push.go +++ b/cmd/dev/dev_push.go @@ -30,7 +30,7 @@ func addPushCommand(parent *cobra.Command) { }, } - pushCmd.Flags().StringVar(&pushRegistryPath, "registry", "", i18n.T("cmd.dev.push.flag.registry")) + pushCmd.Flags().StringVar(&pushRegistryPath, "registry", "", i18n.T("common.flag.registry")) pushCmd.Flags().BoolVarP(&pushForce, "force", "f", false, i18n.T("cmd.dev.push.flag.force")) parent.AddCommand(pushCmd) @@ -54,7 +54,7 @@ func runPush(registryPath string, force bool) error { if err != nil { return fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { registryPath, err = repos.FindRegistry() if err == nil { @@ -62,7 +62,7 @@ func runPush(registryPath string, force bool) error { if err != nil { return fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { // Fallback: scan current directory for repos reg, err = repos.ScanDirectory(cwd) @@ -109,12 +109,12 @@ func runPush(registryPath string, force bool) error { } // Show repos to push - fmt.Printf("\n%s\n\n", i18n.T("cmd.dev.push.repos_with_unpushed", map[string]interface{}{"Count": len(aheadRepos)})) + fmt.Printf("\n%s\n\n", i18n.T("common.count.repos_unpushed", map[string]interface{}{"Count": len(aheadRepos)})) totalCommits := 0 for _, s := range aheadRepos { fmt.Printf(" %s: %s\n", repoNameStyle.Render(s.Name), - aheadStyle.Render(i18n.T("cmd.dev.push.commits_count", map[string]interface{}{"Count": s.Ahead})), + aheadStyle.Render(i18n.T("common.count.commits", map[string]interface{}{"Count": s.Ahead})), ) totalCommits += s.Ahead } @@ -185,7 +185,7 @@ func runPush(registryPath string, force bool) error { fmt.Println() fmt.Printf("%s", successStyle.Render(i18n.T("cmd.dev.push.done_pushed", map[string]interface{}{"Count": succeeded}))) if failed > 0 { - fmt.Printf(", %s", errorStyle.Render(i18n.T("cmd.dev.count_failed", map[string]interface{}{"Count": failed}))) + fmt.Printf(", %s", errorStyle.Render(i18n.T("common.count.failed", map[string]interface{}{"Count": failed}))) } fmt.Println() @@ -255,7 +255,7 @@ func runPushSingleRepo(ctx context.Context, repoPath string, force bool) error { // Show commits to push fmt.Printf("%s: %s\n", repoNameStyle.Render(s.Name), - aheadStyle.Render(i18n.T("cmd.dev.push.commits_count", map[string]interface{}{"Count": s.Ahead}))) + aheadStyle.Render(i18n.T("common.count.commits", map[string]interface{}{"Count": s.Ahead}))) // Confirm unless --force if !force { diff --git a/cmd/dev/dev_reviews.go b/cmd/dev/dev_reviews.go index 262f1d7..8e7cad8 100644 --- a/cmd/dev/dev_reviews.go +++ b/cmd/dev/dev_reviews.go @@ -69,7 +69,7 @@ func addReviewsCommand(parent *cobra.Command) { }, } - reviewsCmd.Flags().StringVar(&reviewsRegistryPath, "registry", "", i18n.T("cmd.dev.reviews.flag.registry")) + reviewsCmd.Flags().StringVar(&reviewsRegistryPath, "registry", "", i18n.T("common.flag.registry")) reviewsCmd.Flags().StringVar(&reviewsAuthor, "author", "", i18n.T("cmd.dev.reviews.flag.author")) reviewsCmd.Flags().BoolVar(&reviewsShowAll, "all", false, i18n.T("cmd.dev.reviews.flag.all")) @@ -166,7 +166,7 @@ func runReviews(registryPath string, author string, showAll bool) error { fmt.Println() fmt.Printf("%s", i18n.T("cmd.dev.reviews.open_prs", map[string]interface{}{"Count": len(allPRs)})) if pending > 0 { - fmt.Printf(" * %s", prPendingStyle.Render(i18n.T("cmd.dev.reviews.pending", map[string]interface{}{"Count": pending}))) + fmt.Printf(" * %s", prPendingStyle.Render(i18n.T("common.count.pending", map[string]interface{}{"Count": pending}))) } if approved > 0 { fmt.Printf(" * %s", prApprovedStyle.Render(i18n.T("cmd.dev.reviews.approved", map[string]interface{}{"Count": approved}))) @@ -185,7 +185,7 @@ func runReviews(registryPath string, author string, showAll bool) error { if len(fetchErrors) > 0 { fmt.Println() for _, err := range fetchErrors { - fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("cmd.dev.issues.error_label")), err) + fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("common.label.error")), err) } } diff --git a/cmd/dev/dev_sync.go b/cmd/dev/dev_sync.go index ba4bdec..9a9b136 100644 --- a/cmd/dev/dev_sync.go +++ b/cmd/dev/dev_sync.go @@ -24,7 +24,7 @@ func addSyncCommand(parent *cobra.Command) { Long: i18n.T("cmd.dev.sync.long"), RunE: func(cmd *cobra.Command, args []string) error { if err := runSync(); err != nil { - return fmt.Errorf("%s %w", i18n.T("cmd.dev.sync.error_prefix"), err) + return fmt.Errorf("%s %w", i18n.T("common.label.error"), err) } fmt.Println(i18n.T("cmd.dev.sync.success")) return nil diff --git a/cmd/dev/dev_vm.go b/cmd/dev/dev_vm.go index 39af6d9..40edbf7 100644 --- a/cmd/dev/dev_vm.go +++ b/cmd/dev/dev_vm.go @@ -52,7 +52,7 @@ func runVMInstall() error { return nil } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.image_label")), devops.ImageName()) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.image")), devops.ImageName()) fmt.Println() fmt.Println(i18n.T("cmd.dev.vm.downloading")) fmt.Println() @@ -185,7 +185,7 @@ func runVMStop() error { return err } - fmt.Println(successStyle.Render(i18n.T("cmd.dev.vm.stopped"))) + fmt.Println(successStyle.Render(i18n.T("common.status.stopped"))) return nil } @@ -222,7 +222,7 @@ func runVMStatus() error { if status.Installed { fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.installed_label")), successStyle.Render(i18n.T("cmd.dev.vm.installed_yes"))) if status.ImageVersion != "" { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.version_label")), status.ImageVersion) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.version")), status.ImageVersion) } } else { fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.installed_label")), errorStyle.Render(i18n.T("cmd.dev.vm.installed_no"))) @@ -235,14 +235,14 @@ func runVMStatus() error { // Running status if status.Running { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.status_label")), successStyle.Render(i18n.T("cmd.dev.vm.status_running"))) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.status")), successStyle.Render(i18n.T("common.status.running"))) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.container_label")), status.ContainerID[:8]) fmt.Printf("%s %dMB\n", dimStyle.Render(i18n.T("cmd.dev.vm.memory_label")), status.Memory) fmt.Printf("%s %d\n", dimStyle.Render(i18n.T("cmd.dev.vm.cpus_label")), status.CPUs) fmt.Printf("%s %d\n", dimStyle.Render(i18n.T("cmd.dev.vm.ssh_port")), status.SSHPort) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.uptime_label")), formatVMUptime(status.Uptime)) } else { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.status_label")), dimStyle.Render(i18n.T("cmd.dev.vm.status_stopped"))) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.status")), dimStyle.Render(i18n.T("common.status.stopped"))) fmt.Println() fmt.Println(i18n.T("cmd.dev.vm.start_with", map[string]interface{}{"Command": dimStyle.Render("core dev boot")})) } @@ -452,7 +452,7 @@ func runVMUpdate(apply bool) error { ctx := context.Background() - fmt.Println(i18n.T("cmd.dev.vm.checking_updates")) + fmt.Println(i18n.T("common.progress.checking_updates")) fmt.Println() current, latest, hasUpdate, err := d.CheckUpdate(ctx) @@ -460,7 +460,7 @@ func runVMUpdate(apply bool) error { return fmt.Errorf("failed to check for updates: %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.current_label")), valueStyle.Render(current)) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.current")), valueStyle.Render(current)) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.dev.vm.latest_label")), valueStyle.Render(latest)) fmt.Println() diff --git a/cmd/dev/dev_work.go b/cmd/dev/dev_work.go index d35976a..87d04bd 100644 --- a/cmd/dev/dev_work.go +++ b/cmd/dev/dev_work.go @@ -36,7 +36,7 @@ func addWorkCommand(parent *cobra.Command) { workCmd.Flags().BoolVar(&workStatusOnly, "status", false, i18n.T("cmd.dev.work.flag.status")) workCmd.Flags().BoolVar(&workAutoCommit, "commit", false, i18n.T("cmd.dev.work.flag.commit")) - workCmd.Flags().StringVar(&workRegistryPath, "registry", "", i18n.T("cmd.dev.work.flag.registry")) + workCmd.Flags().StringVar(&workRegistryPath, "registry", "", i18n.T("common.flag.registry")) parent.AddCommand(workCmd) } @@ -162,9 +162,9 @@ func runWork(registryPath string, statusOnly, autoCommit bool) error { } fmt.Println() - fmt.Printf("%s\n", i18n.T("cmd.dev.work.repos_with_unpushed", map[string]interface{}{"Count": len(aheadRepos)})) + fmt.Printf("%s\n", i18n.T("common.count.repos_unpushed", map[string]interface{}{"Count": len(aheadRepos)})) for _, s := range aheadRepos { - fmt.Printf(" %s: %s\n", s.Name, i18n.T("cmd.dev.work.commits_count", map[string]interface{}{"Count": s.Ahead})) + fmt.Printf(" %s: %s\n", s.Name, i18n.T("common.count.commits", map[string]interface{}{"Count": s.Ahead})) } fmt.Println() @@ -244,7 +244,7 @@ func printStatusTable(statuses []git.RepoStatus) { // Print header with fixed-width formatting fmt.Printf("%-*s %8s %9s %6s %5s\n", nameWidth, - cli.TitleStyle.Render(i18n.T("cmd.dev.work.table_repo")), + cli.TitleStyle.Render(i18n.T("common.label.repo")), cli.TitleStyle.Render(i18n.T("cmd.dev.work.table_modified")), cli.TitleStyle.Render(i18n.T("cmd.dev.work.table_untracked")), cli.TitleStyle.Render(i18n.T("cmd.dev.work.table_staged")), @@ -341,7 +341,7 @@ func loadRegistry(registryPath string) ([]string, map[string]string, error) { if err != nil { return nil, nil, fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { registryPath, err = repos.FindRegistry() if err == nil { @@ -349,7 +349,7 @@ func loadRegistry(registryPath string) ([]string, map[string]string, error) { if err != nil { return nil, nil, fmt.Errorf("failed to load registry: %w", err) } - fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.dev.registry_label")), registryPath) + fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) } else { // Fallback: scan current directory cwd, _ := os.Getwd() diff --git a/cmd/docs/list.go b/cmd/docs/list.go index df85906..aa34403 100644 --- a/cmd/docs/list.go +++ b/cmd/docs/list.go @@ -22,7 +22,7 @@ var docsListCmd = &cobra.Command{ } func init() { - docsListCmd.Flags().StringVar(&docsListRegistryPath, "registry", "", i18n.T("cmd.docs.list.flag.registry")) + docsListCmd.Flags().StringVar(&docsListRegistryPath, "registry", "", i18n.T("common.flag.registry")) } func runDocsList(registryPath string) error { @@ -32,7 +32,7 @@ func runDocsList(registryPath string) error { } fmt.Printf("\n%-20s %-8s %-8s %-10s %s\n", - headerStyle.Render(i18n.T("cmd.docs.list.header.repo")), + headerStyle.Render(i18n.T("common.label.repo")), headerStyle.Render(i18n.T("cmd.docs.list.header.readme")), headerStyle.Render(i18n.T("cmd.docs.list.header.claude")), headerStyle.Render(i18n.T("cmd.docs.list.header.changelog")), @@ -50,7 +50,7 @@ func runDocsList(registryPath string) error { docsDir := cli.CheckMark(false) if len(info.DocsFiles) > 0 { - docsDir = docsFoundStyle.Render(i18n.T("cmd.docs.list.files_count", map[string]interface{}{"Count": len(info.DocsFiles)})) + docsDir = docsFoundStyle.Render(i18n.T("common.count.files", map[string]interface{}{"Count": len(info.DocsFiles)})) } fmt.Printf("%-20s %-8s %-8s %-10s %s\n", @@ -70,7 +70,7 @@ func runDocsList(registryPath string) error { fmt.Println() fmt.Printf("%s %s\n", - cli.Label(i18n.T("cmd.docs.list.coverage_label")), + cli.Label(i18n.T("common.label.coverage")), i18n.T("cmd.docs.list.coverage_summary", map[string]interface{}{"WithDocs": withDocs, "WithoutDocs": withoutDocs}), ) diff --git a/cmd/docs/sync.go b/cmd/docs/sync.go index d3f44c6..bb50562 100644 --- a/cmd/docs/sync.go +++ b/cmd/docs/sync.go @@ -27,7 +27,7 @@ var docsSyncCmd = &cobra.Command{ } func init() { - docsSyncCmd.Flags().StringVar(&docsSyncRegistryPath, "registry", "", i18n.T("cmd.docs.sync.flag.registry")) + docsSyncCmd.Flags().StringVar(&docsSyncRegistryPath, "registry", "", i18n.T("common.flag.registry")) docsSyncCmd.Flags().BoolVar(&docsSyncDryRun, "dry-run", false, i18n.T("cmd.docs.sync.flag.dry_run")) docsSyncCmd.Flags().StringVar(&docsSyncOutputDir, "output", "", i18n.T("cmd.docs.sync.flag.output")) } @@ -105,7 +105,7 @@ func runDocsSync(registryPath string, outputDir string, dryRun bool) error { } fmt.Printf("\n%s %s\n", - dimStyle.Render(i18n.T("cmd.docs.sync.total_label")), + dimStyle.Render(i18n.T("common.label.total")), i18n.T("cmd.docs.sync.total_summary", map[string]interface{}{"Files": totalFiles, "Repos": len(docsInfo), "Output": outputDir})) if dryRun { @@ -150,7 +150,7 @@ func runDocsSync(registryPath string, outputDir string, dryRun bool) error { synced++ } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.docs.sync.done_label")), i18n.T("cmd.docs.sync.synced_packages", map[string]interface{}{"Count": synced})) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.docs.sync.synced_packages", map[string]interface{}{"Count": synced})) return nil } diff --git a/cmd/go/go_format.go b/cmd/go/go_format.go index 52ff5a9..18b4ec0 100644 --- a/cmd/go/go_format.go +++ b/cmd/go/go_format.go @@ -47,7 +47,7 @@ func addGoFmtCommand(parent *cobra.Command) { } fmtCmd.Flags().BoolVar(&fmtFix, "fix", false, i18n.T("cmd.go.fmt.flag.fix")) - fmtCmd.Flags().BoolVar(&fmtDiff, "diff", false, i18n.T("cmd.go.fmt.flag.diff")) + fmtCmd.Flags().BoolVar(&fmtDiff, "diff", false, i18n.T("common.flag.diff")) fmtCmd.Flags().BoolVar(&fmtCheck, "check", false, i18n.T("cmd.go.fmt.flag.check")) parent.AddCommand(fmtCmd) diff --git a/cmd/go/go_test_cmd.go b/cmd/go/go_test_cmd.go index 801fba7..ab6cb9e 100644 --- a/cmd/go/go_test_cmd.go +++ b/cmd/go/go_test_cmd.go @@ -33,13 +33,13 @@ func addGoTestCommand(parent *cobra.Command) { }, } - testCmd.Flags().BoolVar(&testCoverage, "coverage", false, i18n.T("cmd.go.test.flag.coverage")) - testCmd.Flags().StringVar(&testPkg, "pkg", "", i18n.T("cmd.go.test.flag.pkg")) + testCmd.Flags().BoolVar(&testCoverage, "coverage", false, i18n.T("common.flag.coverage")) + testCmd.Flags().StringVar(&testPkg, "pkg", "", i18n.T("common.flag.pkg")) testCmd.Flags().StringVar(&testRun, "run", "", i18n.T("cmd.go.test.flag.run")) testCmd.Flags().BoolVar(&testShort, "short", false, i18n.T("cmd.go.test.flag.short")) testCmd.Flags().BoolVar(&testRace, "race", false, i18n.T("cmd.go.test.flag.race")) testCmd.Flags().BoolVar(&testJSON, "json", false, i18n.T("cmd.go.test.flag.json")) - testCmd.Flags().BoolVarP(&testVerbose, "verbose", "v", false, i18n.T("cmd.go.test.flag.verbose")) + testCmd.Flags().BoolVarP(&testVerbose, "verbose", "v", false, i18n.T("common.flag.verbose")) parent.AddCommand(testCmd) } @@ -73,8 +73,8 @@ func runGoTest(coverage bool, pkg, run string, short, race, jsonOut, verbose boo args = append(args, pkg) if !jsonOut { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.go.test.label")), i18n.T("cmd.go.test.running")) - fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("cmd.go.test.package_label")), pkg) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.test")), i18n.T("common.result.running_tests")) + fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("common.label.package")), pkg) fmt.Println() } @@ -113,7 +113,7 @@ func runGoTest(coverage bool, pkg, run string, short, race, jsonOut, verbose boo // Summary if err == nil { - fmt.Printf(" %s %s\n", successStyle.Render("✓"), i18n.T("cmd.go.test.passed", map[string]interface{}{"Count": passed})) + fmt.Printf(" %s %s\n", successStyle.Render("✓"), i18n.T("common.count.passed", map[string]interface{}{"Count": passed})) } else { fmt.Printf(" %s %s\n", errorStyle.Render("✗"), i18n.T("cmd.go.test.passed_failed", map[string]interface{}{"Passed": passed, "Failed": failed})) } @@ -193,13 +193,13 @@ func addGoCovCommand(parent *cobra.Command) { covFile.Close() defer os.Remove(covPath) - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.go.cov.label")), i18n.T("cmd.go.cov.running")) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.coverage")), i18n.T("cmd.go.cov.running")) // Truncate package list if too long for display displayPkg := pkg if len(displayPkg) > 60 { displayPkg = displayPkg[:57] + "..." } - fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("cmd.go.test.package_label")), displayPkg) + fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("common.label.package")), displayPkg) fmt.Println() // Run tests with coverage @@ -287,7 +287,7 @@ func addGoCovCommand(parent *cobra.Command) { }, } - covCmd.Flags().StringVar(&covPkg, "pkg", "", i18n.T("cmd.go.cov.flag.pkg")) + covCmd.Flags().StringVar(&covPkg, "pkg", "", i18n.T("common.flag.pkg")) covCmd.Flags().BoolVar(&covHTML, "html", false, i18n.T("cmd.go.cov.flag.html")) covCmd.Flags().BoolVar(&covOpen, "open", false, i18n.T("cmd.go.cov.flag.open")) covCmd.Flags().Float64Var(&covThreshold, "threshold", 0, i18n.T("cmd.go.cov.flag.threshold")) diff --git a/cmd/go/go_tools.go b/cmd/go/go_tools.go index 9c266e8..d9a264b 100644 --- a/cmd/go/go_tools.go +++ b/cmd/go/go_tools.go @@ -38,8 +38,8 @@ func addGoInstallCommand(parent *cobra.Command) { } } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.go.install.label")), i18n.T("cmd.go.install.installing")) - fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("cmd.go.install.path_label")), installPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.install")), i18n.T("common.status.installing")) + fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("common.label.path")), installPath) if installNoCgo { fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("cmd.go.install.cgo_label")), i18n.T("cmd.go.install.cgo_disabled")) } @@ -75,7 +75,7 @@ func addGoInstallCommand(parent *cobra.Command) { }, } - installCmd.Flags().BoolVarP(&installVerbose, "verbose", "v", false, i18n.T("cmd.go.install.flag.verbose")) + installCmd.Flags().BoolVarP(&installVerbose, "verbose", "v", false, i18n.T("common.flag.verbose")) installCmd.Flags().BoolVar(&installNoCgo, "no-cgo", false, i18n.T("cmd.go.install.flag.no_cgo")) parent.AddCommand(installCmd) diff --git a/cmd/php/php_build.go b/cmd/php/php_build.go index 0660f6e..73ea315 100644 --- a/cmd/php/php_build.go +++ b/cmd/php/php_build.go @@ -31,7 +31,7 @@ func addPHPBuildCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } ctx := context.Background() @@ -57,7 +57,7 @@ func addPHPBuildCommand(parent *cobra.Command) { buildCmd.Flags().StringVar(&buildType, "type", "", i18n.T("cmd.php.build.flag.type")) buildCmd.Flags().StringVar(&buildImageName, "name", "", i18n.T("cmd.php.build.flag.name")) - buildCmd.Flags().StringVar(&buildTag, "tag", "", i18n.T("cmd.php.build.flag.tag")) + buildCmd.Flags().StringVar(&buildTag, "tag", "", i18n.T("common.flag.tag")) buildCmd.Flags().StringVar(&buildPlatform, "platform", "", i18n.T("cmd.php.build.flag.platform")) buildCmd.Flags().StringVar(&buildDockerfile, "dockerfile", "", i18n.T("cmd.php.build.flag.dockerfile")) buildCmd.Flags().StringVar(&buildOutputPath, "output", "", i18n.T("cmd.php.build.flag.output")) @@ -128,17 +128,17 @@ func runPHPBuildDocker(ctx context.Context, projectDir string, opts dockerBuildO buildOpts.Tag = "latest" } - fmt.Printf("%s %s:%s\n", dimStyle.Render(i18n.T("cmd.php.build.image")), buildOpts.ImageName, buildOpts.Tag) + fmt.Printf("%s %s:%s\n", dimStyle.Render(i18n.T("common.label.image")), buildOpts.ImageName, buildOpts.Tag) if opts.Platform != "" { fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.build.platform")), opts.Platform) } fmt.Println() if err := phppkg.BuildDocker(ctx, buildOpts); err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.build_failed"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.build_failed"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.build.docker_success")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.build.docker_success")) fmt.Printf("%s docker run -p 80:80 -p 443:443 %s:%s\n", dimStyle.Render(i18n.T("cmd.php.build.docker_run_with")), buildOpts.ImageName, buildOpts.Tag) @@ -168,15 +168,15 @@ func runPHPBuildLinuxKit(ctx context.Context, projectDir string, opts linuxKitBu buildOpts.Template = "server-php" } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.build.template")), buildOpts.Template) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.template")), buildOpts.Template) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.build.format")), buildOpts.Format) fmt.Println() if err := phppkg.BuildLinuxKit(ctx, buildOpts); err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.build_failed"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.build_failed"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.build.linuxkit_success")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.build.linuxkit_success")) return nil } @@ -225,7 +225,7 @@ func addPHPServeCommand(parent *cobra.Command) { } fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.label.php")), i18n.T("cmd.php.serve.running")) - fmt.Printf("%s %s:%s\n", dimStyle.Render(i18n.T("cmd.php.build.image")), imageName, func() string { + fmt.Printf("%s %s:%s\n", dimStyle.Render(i18n.T("common.label.image")), imageName, func() string { if serveTag == "" { return "latest" } @@ -258,7 +258,7 @@ func addPHPServeCommand(parent *cobra.Command) { } serveCmd.Flags().StringVar(&serveImageName, "name", "", i18n.T("cmd.php.serve.flag.name")) - serveCmd.Flags().StringVar(&serveTag, "tag", "", i18n.T("cmd.php.serve.flag.tag")) + serveCmd.Flags().StringVar(&serveTag, "tag", "", i18n.T("common.flag.tag")) serveCmd.Flags().StringVar(&serveContainerName, "container", "", i18n.T("cmd.php.serve.flag.container")) serveCmd.Flags().IntVar(&servePort, "port", 0, i18n.T("cmd.php.serve.flag.port")) serveCmd.Flags().IntVar(&serveHTTPSPort, "https-port", 0, i18n.T("cmd.php.serve.flag.https_port")) diff --git a/cmd/php/php_deploy.go b/cmd/php/php_deploy.go index 09b41fa..a8675c3 100644 --- a/cmd/php/php_deploy.go +++ b/cmd/php/php_deploy.go @@ -47,7 +47,7 @@ func addPHPDeployCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } env := phppkg.EnvProduction @@ -75,12 +75,12 @@ func addPHPDeployCommand(parent *cobra.Command) { if deployWait { if phppkg.IsDeploymentSuccessful(status.Status) { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.deploy.success")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.deploy.success")) } else { - fmt.Printf("\n%s %s\n", errorStyle.Render(i18n.T("cmd.php.label.warning")), i18n.T("cmd.php.deploy.warning_status", map[string]interface{}{"Status": status.Status})) + fmt.Printf("\n%s %s\n", errorStyle.Render(i18n.T("common.label.warning")), i18n.T("cmd.php.deploy.warning_status", map[string]interface{}{"Status": status.Status})) } } else { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.deploy.triggered")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.deploy.triggered")) } return nil @@ -107,7 +107,7 @@ func addPHPDeployStatusCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } env := phppkg.EnvProduction @@ -156,7 +156,7 @@ func addPHPDeployRollbackCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } env := phppkg.EnvProduction @@ -184,12 +184,12 @@ func addPHPDeployRollbackCommand(parent *cobra.Command) { if rollbackWait { if phppkg.IsDeploymentSuccessful(status.Status) { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.deploy_rollback.success")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.deploy_rollback.success")) } else { - fmt.Printf("\n%s %s\n", errorStyle.Render(i18n.T("cmd.php.label.warning")), i18n.T("cmd.php.deploy_rollback.warning_status", map[string]interface{}{"Status": status.Status})) + fmt.Printf("\n%s %s\n", errorStyle.Render(i18n.T("common.label.warning")), i18n.T("cmd.php.deploy_rollback.warning_status", map[string]interface{}{"Status": status.Status})) } } else { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.deploy_rollback.triggered")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.deploy_rollback.triggered")) } return nil @@ -216,7 +216,7 @@ func addPHPDeployListCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } env := phppkg.EnvProduction @@ -267,14 +267,14 @@ func printDeploymentStatus(status *phppkg.DeploymentStatus) { statusStyle = phpDeployFailedStyle } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.status")), statusStyle.Render(status.Status)) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.status")), statusStyle.Render(status.Status)) if status.ID != "" { fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.id")), status.ID) } if status.URL != "" { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.url")), linkStyle.Render(status.URL)) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.url")), linkStyle.Render(status.URL)) } if status.Branch != "" { @@ -298,7 +298,7 @@ func printDeploymentStatus(status *phppkg.DeploymentStatus) { } if !status.StartedAt.IsZero() { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.started")), status.StartedAt.Format(time.RFC3339)) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.started")), status.StartedAt.Format(time.RFC3339)) } if !status.CompletedAt.IsZero() { diff --git a/cmd/php/php_dev.go b/cmd/php/php_dev.go index 853171f..17d2573 100644 --- a/cmd/php/php_dev.go +++ b/cmd/php/php_dev.go @@ -155,7 +155,7 @@ func runPHPDev(opts phpDevOptions) error { // Stream unified logs logsReader, err := server.Logs("", true) if err != nil { - fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("cmd.php.label.warning")), i18n.T("cmd.php.dev.logs_failed", map[string]interface{}{"Error": err})) + fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("common.label.warning")), i18n.T("cmd.php.dev.logs_failed", map[string]interface{}{"Error": err})) } else { defer logsReader.Close() @@ -174,10 +174,10 @@ func runPHPDev(opts phpDevOptions) error { shutdown: // Stop services if err := server.Stop(); err != nil { - fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("cmd.php.label.error")), i18n.T("cmd.php.dev.stop_error", map[string]interface{}{"Error": err})) + fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.php.dev.stop_error", map[string]interface{}{"Error": err})) } - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.dev.all_stopped")) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.dev.all_stopped")) return nil } @@ -196,7 +196,7 @@ func addPHPLogsCommand(parent *cobra.Command) { }, } - logsCmd.Flags().BoolVar(&logsFollow, "follow", false, i18n.T("cmd.php.logs.flag.follow")) + logsCmd.Flags().BoolVar(&logsFollow, "follow", false, i18n.T("common.flag.follow")) logsCmd.Flags().StringVar(&logsService, "service", "", i18n.T("cmd.php.logs.flag.service")) parent.AddCommand(logsCmd) @@ -217,7 +217,7 @@ func runPHPLogs(service string, follow bool) error { logsReader, err := server.Logs(service, follow) if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.get_logs"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.get_logs"), err) } defer logsReader.Close() @@ -273,7 +273,7 @@ func runPHPStop() error { return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.stop_services"), err) } - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.dev.all_stopped")) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.dev.all_stopped")) return nil } @@ -304,7 +304,7 @@ func runPHPStatus() error { appName = "Laravel" } - fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.status.project")), appName) + fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("common.label.project")), appName) // Detect available services services := phppkg.DetectServices(cwd) @@ -373,8 +373,8 @@ func runPHPSSL(domain string) error { // Check if mkcert is installed if !phppkg.IsMkcertInstalled() { - fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("cmd.php.label.error")), i18n.T("cmd.php.ssl.mkcert_not_installed")) - fmt.Printf("\n%s\n", i18n.T("cmd.php.ssl.install_with")) + fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.php.ssl.mkcert_not_installed")) + fmt.Printf("\n%s\n", i18n.T("common.hint.install_with")) fmt.Printf(" %s\n", i18n.T("cmd.php.ssl.install_macos")) fmt.Printf(" %s\n", i18n.T("cmd.php.ssl.install_linux")) return fmt.Errorf(i18n.T("cmd.php.error.mkcert_not_installed")) @@ -384,7 +384,7 @@ func runPHPSSL(domain string) error { // Check if certs already exist if phppkg.CertsExist(domain, phppkg.SSLOptions{}) { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.skip")), i18n.T("cmd.php.ssl.certs_exist")) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.skip")), i18n.T("cmd.php.ssl.certs_exist")) certFile, keyFile, _ := phppkg.CertPaths(domain, phppkg.SSLOptions{}) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.ssl.cert_label")), certFile) @@ -399,7 +399,7 @@ func runPHPSSL(domain string) error { certFile, keyFile, _ := phppkg.CertPaths(domain, phppkg.SSLOptions{}) - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.ssl.certs_created")) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.ssl.certs_created")) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.ssl.cert_label")), certFile) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.ssl.key_label")), keyFile) diff --git a/cmd/php/php_packages.go b/cmd/php/php_packages.go index ce59233..c181ce9 100644 --- a/cmd/php/php_packages.go +++ b/cmd/php/php_packages.go @@ -32,7 +32,7 @@ func addPHPPackagesLinkCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.label.php")), i18n.T("cmd.php.packages.link.linking")) @@ -41,7 +41,7 @@ func addPHPPackagesLinkCommand(parent *cobra.Command) { return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.link_packages"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.packages.link.done")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.packages.link.done")) return nil }, } @@ -58,7 +58,7 @@ func addPHPPackagesUnlinkCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.label.php")), i18n.T("cmd.php.packages.unlink.unlinking")) @@ -67,7 +67,7 @@ func addPHPPackagesUnlinkCommand(parent *cobra.Command) { return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.unlink_packages"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.packages.unlink.done")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.packages.unlink.done")) return nil }, } @@ -83,7 +83,7 @@ func addPHPPackagesUpdateCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.label.php")), i18n.T("cmd.php.packages.update.updating")) @@ -92,7 +92,7 @@ func addPHPPackagesUpdateCommand(parent *cobra.Command) { return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.update_packages"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.packages.update.done")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.packages.update.done")) return nil }, } @@ -108,7 +108,7 @@ func addPHPPackagesListCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } packages, err := phppkg.ListLinkedPackages(cwd) @@ -134,8 +134,8 @@ func addPHPPackagesListCommand(parent *cobra.Command) { } fmt.Printf(" %s %s\n", successStyle.Render("*"), name) - fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("cmd.php.packages.list.path")), pkg.Path) - fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("cmd.php.packages.list.version")), version) + fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("common.label.path")), pkg.Path) + fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("common.label.version")), version) fmt.Println() } diff --git a/cmd/php/php_quality.go b/cmd/php/php_quality.go index b385ec4..33236e0 100644 --- a/cmd/php/php_quality.go +++ b/cmd/php/php_quality.go @@ -30,7 +30,7 @@ func addPHPTestCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -56,7 +56,7 @@ func addPHPTestCommand(parent *cobra.Command) { } if err := phppkg.RunTests(ctx, opts); err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.tests_failed"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.tests_failed"), err) } return nil @@ -84,7 +84,7 @@ func addPHPFmtCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -127,9 +127,9 @@ func addPHPFmtCommand(parent *cobra.Command) { } if fmtFix { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.fmt.success")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.fmt.success")) } else { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.fmt.no_issues")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.fmt.no_issues")) } return nil @@ -137,7 +137,7 @@ func addPHPFmtCommand(parent *cobra.Command) { } fmtCmd.Flags().BoolVar(&fmtFix, "fix", false, i18n.T("cmd.php.fmt.flag.fix")) - fmtCmd.Flags().BoolVar(&fmtDiff, "diff", false, i18n.T("cmd.php.fmt.flag.diff")) + fmtCmd.Flags().BoolVar(&fmtDiff, "diff", false, i18n.T("common.flag.diff")) parent.AddCommand(fmtCmd) } @@ -155,7 +155,7 @@ func addPHPAnalyseCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -188,7 +188,7 @@ func addPHPAnalyseCommand(parent *cobra.Command) { return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.analysis_issues"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.analyse.no_issues")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("common.result.no_issues")) return nil }, } @@ -218,7 +218,7 @@ func addPHPPsalmCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -228,8 +228,8 @@ func addPHPPsalmCommand(parent *cobra.Command) { // Check if Psalm is available _, found := phppkg.DetectPsalm(cwd) if !found { - fmt.Printf("%s %s\n\n", errorStyle.Render(i18n.T("cmd.php.label.error")), i18n.T("cmd.php.psalm.not_found")) - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.install")), i18n.T("cmd.php.psalm.install")) + fmt.Printf("%s %s\n\n", errorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.php.psalm.not_found")) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.install")), i18n.T("cmd.php.psalm.install")) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.setup")), i18n.T("cmd.php.psalm.setup")) return fmt.Errorf(i18n.T("cmd.php.error.psalm_not_installed")) } @@ -257,13 +257,13 @@ func addPHPPsalmCommand(parent *cobra.Command) { return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.psalm_issues"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.psalm.no_issues")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("common.result.no_issues")) return nil }, } psalmCmd.Flags().IntVar(&psalmLevel, "level", 0, i18n.T("cmd.php.psalm.flag.level")) - psalmCmd.Flags().BoolVar(&psalmFix, "fix", false, i18n.T("cmd.php.psalm.flag.fix")) + psalmCmd.Flags().BoolVar(&psalmFix, "fix", false, i18n.T("common.flag.fix")) psalmCmd.Flags().BoolVar(&psalmBaseline, "baseline", false, i18n.T("cmd.php.psalm.flag.baseline")) psalmCmd.Flags().BoolVar(&psalmShowInfo, "show-info", false, i18n.T("cmd.php.psalm.flag.show_info")) @@ -283,7 +283,7 @@ func addPHPAuditCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -341,8 +341,8 @@ func addPHPAuditCommand(parent *cobra.Command) { fmt.Println() if totalVulns > 0 { - fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("cmd.php.label.warning")), i18n.T("cmd.php.audit.found_vulns", map[string]interface{}{"Count": totalVulns})) - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.fix")), i18n.T("cmd.php.audit.fix_hint")) + fmt.Printf("%s %s\n", errorStyle.Render(i18n.T("common.label.warning")), i18n.T("cmd.php.audit.found_vulns", map[string]interface{}{"Count": totalVulns})) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.fix")), i18n.T("common.hint.fix_deps")) return fmt.Errorf(i18n.T("cmd.php.error.vulns_found")) } @@ -350,12 +350,12 @@ func addPHPAuditCommand(parent *cobra.Command) { return fmt.Errorf(i18n.T("cmd.php.audit.completed_errors")) } - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.audit.all_secure")) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.audit.all_secure")) return nil }, } - auditCmd.Flags().BoolVar(&auditJSONOutput, "json", false, i18n.T("cmd.php.audit.flag.json")) + auditCmd.Flags().BoolVar(&auditJSONOutput, "json", false, i18n.T("common.flag.json")) auditCmd.Flags().BoolVar(&auditFix, "fix", false, i18n.T("cmd.php.audit.flag.fix")) parent.AddCommand(auditCmd) @@ -376,7 +376,7 @@ func addPHPSecurityCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -420,7 +420,7 @@ func addPHPSecurityCommand(parent *cobra.Command) { if !check.Passed && check.Message != "" { fmt.Printf(" %s\n", dimStyle.Render(check.Message)) if check.Fix != "" { - fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("cmd.php.security.fix_label")), check.Fix) + fmt.Printf(" %s %s\n", dimStyle.Render(i18n.T("common.label.fix")), check.Fix) } } } @@ -428,7 +428,7 @@ func addPHPSecurityCommand(parent *cobra.Command) { fmt.Println() // Print summary - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.summary")), i18n.T("cmd.php.security.summary")) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.summary")), i18n.T("cmd.php.security.summary")) fmt.Printf(" %s %d/%d\n", dimStyle.Render(i18n.T("cmd.php.security.passed")), result.Summary.Passed, result.Summary.Total) if result.Summary.Critical > 0 { @@ -453,7 +453,7 @@ func addPHPSecurityCommand(parent *cobra.Command) { } securityCmd.Flags().StringVar(&securitySeverity, "severity", "", i18n.T("cmd.php.security.flag.severity")) - securityCmd.Flags().BoolVar(&securityJSONOutput, "json", false, i18n.T("cmd.php.security.flag.json")) + securityCmd.Flags().BoolVar(&securityJSONOutput, "json", false, i18n.T("common.flag.json")) securityCmd.Flags().BoolVar(&securitySarif, "sarif", false, i18n.T("cmd.php.security.flag.sarif")) securityCmd.Flags().StringVar(&securityURL, "url", "", i18n.T("cmd.php.security.flag.url")) @@ -474,7 +474,7 @@ func addPHPQACommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -566,7 +566,7 @@ func addPHPQACommand(parent *cobra.Command) { qaCmd.Flags().BoolVar(&qaQuick, "quick", false, i18n.T("cmd.php.qa.flag.quick")) qaCmd.Flags().BoolVar(&qaFull, "full", false, i18n.T("cmd.php.qa.flag.full")) - qaCmd.Flags().BoolVar(&qaFix, "fix", false, i18n.T("cmd.php.qa.flag.fix")) + qaCmd.Flags().BoolVar(&qaFix, "fix", false, i18n.T("common.flag.fix")) parent.AddCommand(qaCmd) } @@ -574,7 +574,7 @@ func addPHPQACommand(parent *cobra.Command) { func getQAFixCommand(checkName string, fixEnabled bool) string { switch checkName { case "audit": - return i18n.T("cmd.php.qa.fix_audit") + return i18n.T("common.hint.fix_deps") case "fmt": if fixEnabled { return "" @@ -682,7 +682,7 @@ func addPHPRectorCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -691,8 +691,8 @@ func addPHPRectorCommand(parent *cobra.Command) { // Check if Rector is available if !phppkg.DetectRector(cwd) { - fmt.Printf("%s %s\n\n", errorStyle.Render(i18n.T("cmd.php.label.error")), i18n.T("cmd.php.rector.not_found")) - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.install")), i18n.T("cmd.php.rector.install")) + fmt.Printf("%s %s\n\n", errorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.php.rector.not_found")) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.install")), i18n.T("cmd.php.rector.install")) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.setup")), i18n.T("cmd.php.rector.setup")) return fmt.Errorf(i18n.T("cmd.php.error.rector_not_installed")) } @@ -725,9 +725,9 @@ func addPHPRectorCommand(parent *cobra.Command) { } if rectorFix { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.rector.refactored")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.rector.refactored")) } else { - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.rector.no_changes")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.rector.no_changes")) } return nil }, @@ -756,7 +756,7 @@ func addPHPInfectionCommand(parent *cobra.Command) { RunE: func(cmd *cobra.Command, args []string) error { cwd, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } if !phppkg.IsPHPProject(cwd) { @@ -765,8 +765,8 @@ func addPHPInfectionCommand(parent *cobra.Command) { // Check if Infection is available if !phppkg.DetectInfection(cwd) { - fmt.Printf("%s %s\n\n", errorStyle.Render(i18n.T("cmd.php.label.error")), i18n.T("cmd.php.infection.not_found")) - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.php.label.install")), i18n.T("cmd.php.infection.install")) + fmt.Printf("%s %s\n\n", errorStyle.Render(i18n.T("common.label.error")), i18n.T("cmd.php.infection.not_found")) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.install")), i18n.T("cmd.php.infection.install")) return fmt.Errorf(i18n.T("cmd.php.error.infection_not_installed")) } @@ -789,7 +789,7 @@ func addPHPInfectionCommand(parent *cobra.Command) { return fmt.Errorf("%s: %w", i18n.T("cmd.php.error.infection_failed"), err) } - fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("cmd.php.label.done")), i18n.T("cmd.php.infection.complete")) + fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.infection.complete")) return nil }, } diff --git a/cmd/pkg/pkg_install.go b/cmd/pkg/pkg_install.go index 7ff0153..05527d1 100644 --- a/cmd/pkg/pkg_install.go +++ b/cmd/pkg/pkg_install.go @@ -73,7 +73,7 @@ func runPkgInstall(repoArg, targetDir string, addToRegistry bool) error { repoPath := filepath.Join(targetDir, repoName) if _, err := os.Stat(filepath.Join(repoPath, ".git")); err == nil { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.pkg.install.skip_label")), i18n.T("cmd.pkg.install.already_exists", map[string]string{"Name": repoName, "Path": repoPath})) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.skip")), i18n.T("cmd.pkg.install.already_exists", map[string]string{"Name": repoName, "Path": repoPath})) return nil } @@ -82,10 +82,10 @@ func runPkgInstall(repoArg, targetDir string, addToRegistry bool) error { } fmt.Printf("%s %s/%s\n", dimStyle.Render(i18n.T("cmd.pkg.install.installing_label")), org, repoName) - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.pkg.install.target_label")), repoPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.target")), repoPath) fmt.Println() - fmt.Printf(" %s... ", dimStyle.Render(i18n.T("cmd.pkg.install.cloning"))) + fmt.Printf(" %s... ", dimStyle.Render(i18n.T("common.status.cloning"))) err := gitClone(ctx, org, repoName, repoPath) if err != nil { fmt.Printf("%s\n", errorStyle.Render("✗ "+err.Error())) @@ -102,7 +102,7 @@ func runPkgInstall(repoArg, targetDir string, addToRegistry bool) error { } fmt.Println() - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.pkg.install.done_label")), i18n.T("cmd.pkg.install.installed", map[string]string{"Name": repoName})) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.pkg.install.installed", map[string]string{"Name": repoName})) return nil } diff --git a/cmd/pkg/pkg_manage.go b/cmd/pkg/pkg_manage.go index 3d1cd0b..067a4c1 100644 --- a/cmd/pkg/pkg_manage.go +++ b/cmd/pkg/pkg_manage.go @@ -82,7 +82,7 @@ func runPkgList() error { } fmt.Println() - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.pkg.list.total_label")), i18n.T("cmd.pkg.list.summary", map[string]int{"Installed": installed, "Missing": missing})) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.total")), i18n.T("cmd.pkg.list.summary", map[string]int{"Installed": installed, "Missing": missing})) if missing > 0 { fmt.Printf("\n%s %s\n", i18n.T("cmd.pkg.list.install_missing"), dimStyle.Render("core setup")) @@ -164,7 +164,7 @@ func runPkgUpdate(packages []string, all bool) error { } if strings.Contains(string(output), "Already up to date") { - fmt.Printf("%s\n", dimStyle.Render(i18n.T("cmd.pkg.update.up_to_date"))) + fmt.Printf("%s\n", dimStyle.Render(i18n.T("common.status.up_to_date"))) } else { fmt.Printf("%s\n", successStyle.Render("✓")) } @@ -173,7 +173,7 @@ func runPkgUpdate(packages []string, all bool) error { fmt.Println() fmt.Printf("%s %s\n", - dimStyle.Render(i18n.T("cmd.pkg.update.done_label")), i18n.T("cmd.pkg.update.summary", map[string]int{"Updated": updated, "Skipped": skipped, "Failed": failed})) + dimStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.pkg.update.summary", map[string]int{"Updated": updated, "Skipped": skipped, "Failed": failed})) return nil } @@ -211,7 +211,7 @@ func runPkgOutdated() error { basePath = filepath.Join(filepath.Dir(regPath), basePath) } - fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.pkg.outdated.outdated_label")), i18n.T("cmd.pkg.outdated.checking")) + fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.pkg.outdated.outdated_label")), i18n.T("common.progress.checking_updates")) var outdated, upToDate, notInstalled int @@ -245,10 +245,10 @@ func runPkgOutdated() error { fmt.Println() if outdated == 0 { - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.pkg.outdated.done_label")), i18n.T("cmd.pkg.outdated.all_up_to_date")) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.pkg.outdated.all_up_to_date")) } else { fmt.Printf("%s %s\n", - dimStyle.Render(i18n.T("cmd.pkg.outdated.summary_label")), i18n.T("cmd.pkg.outdated.summary", map[string]int{"Outdated": outdated, "UpToDate": upToDate})) + dimStyle.Render(i18n.T("common.label.summary")), i18n.T("cmd.pkg.outdated.summary", map[string]int{"Outdated": outdated, "UpToDate": upToDate})) fmt.Printf("\n%s %s\n", i18n.T("cmd.pkg.outdated.update_with"), dimStyle.Render("core pkg update --all")) } diff --git a/cmd/pkg/pkg_search.go b/cmd/pkg/pkg_search.go index 689cd6c..368de22 100644 --- a/cmd/pkg/pkg_search.go +++ b/cmd/pkg/pkg_search.go @@ -97,7 +97,7 @@ func runPkgSearch(org, pattern, repoType string, limit int, refresh bool) error } if os.Getenv("GH_TOKEN") != "" { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.pkg.search.note_label")), i18n.T("cmd.pkg.search.gh_token_warning")) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.note")), i18n.T("cmd.pkg.search.gh_token_warning")) fmt.Printf("%s %s\n\n", dimStyle.Render(""), i18n.T("cmd.pkg.search.gh_token_unset")) } @@ -170,7 +170,7 @@ func runPkgSearch(org, pattern, repoType string, limit int, refresh bool) error } fmt.Println() - fmt.Printf("%s %s\n", i18n.T("cmd.pkg.search.install_with"), dimStyle.Render(fmt.Sprintf("core pkg install %s/", org))) + fmt.Printf("%s %s\n", i18n.T("common.hint.install_with"), dimStyle.Render(fmt.Sprintf("core pkg install %s/", org))) return nil } diff --git a/cmd/sdk/sdk.go b/cmd/sdk/sdk.go index e5bb59d..9be3976 100644 --- a/cmd/sdk/sdk.go +++ b/cmd/sdk/sdk.go @@ -54,7 +54,7 @@ func init() { sdkDiffCmd.Flags().StringVar(&diffSpecPath, "spec", "", i18n.T("cmd.sdk.diff.flag.spec")) // sdk validate flags - sdkValidateCmd.Flags().StringVar(&validateSpecPath, "spec", "", i18n.T("cmd.sdk.validate.flag.spec")) + sdkValidateCmd.Flags().StringVar(&validateSpecPath, "spec", "", i18n.T("common.flag.spec")) // Add subcommands sdkCmd.AddCommand(sdkDiffCmd) @@ -64,7 +64,7 @@ func init() { func runSDKDiff(basePath, specPath string) error { projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.sdk.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } // Detect current spec if not provided @@ -82,12 +82,12 @@ func runSDKDiff(basePath, specPath string) error { fmt.Printf("%s %s\n", sdkHeaderStyle.Render(i18n.T("cmd.sdk.diff.label")), i18n.T("cmd.sdk.diff.checking")) fmt.Printf(" %s %s\n", i18n.T("cmd.sdk.diff.base_label"), sdkDimStyle.Render(basePath)) - fmt.Printf(" %s %s\n", i18n.T("cmd.sdk.diff.current_label"), sdkDimStyle.Render(specPath)) + fmt.Printf(" %s %s\n", i18n.T("common.label.current"), sdkDimStyle.Render(specPath)) fmt.Println() result, err := sdkpkg.Diff(basePath, specPath) if err != nil { - fmt.Printf("%s %v\n", sdkErrorStyle.Render(i18n.T("cmd.sdk.label.error")), err) + fmt.Printf("%s %v\n", sdkErrorStyle.Render(i18n.T("common.label.error")), err) os.Exit(2) } @@ -106,7 +106,7 @@ func runSDKDiff(basePath, specPath string) error { func runSDKValidate(specPath string) error { projectDir, err := os.Getwd() if err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.sdk.error.working_dir"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err) } s := sdkpkg.New(projectDir, &sdkpkg.Config{Spec: specPath}) @@ -115,11 +115,11 @@ func runSDKValidate(specPath string) error { detectedPath, err := s.DetectSpec() if err != nil { - fmt.Printf("%s %v\n", sdkErrorStyle.Render(i18n.T("cmd.sdk.label.error")), err) + fmt.Printf("%s %v\n", sdkErrorStyle.Render(i18n.T("common.label.error")), err) return err } - fmt.Printf(" %s %s\n", i18n.T("cmd.sdk.validate.spec_label"), sdkDimStyle.Render(detectedPath)) + fmt.Printf(" %s %s\n", i18n.T("common.label.spec"), sdkDimStyle.Render(detectedPath)) fmt.Printf("%s %s\n", sdkSuccessStyle.Render(i18n.T("cmd.sdk.label.ok")), i18n.T("cmd.sdk.validate.valid")) return nil } diff --git a/cmd/setup/setup_bootstrap.go b/cmd/setup/setup_bootstrap.go index 59ca9ae..afada06 100644 --- a/cmd/setup/setup_bootstrap.go +++ b/cmd/setup/setup_bootstrap.go @@ -103,7 +103,7 @@ func runBootstrap(ctx context.Context, only string, dryRun, all bool, projectNam // Clone core-devops first devopsPath := filepath.Join(targetDir, devopsRepo) if _, err := os.Stat(filepath.Join(devopsPath, ".git")); os.IsNotExist(err) { - fmt.Printf("%s %s %s...\n", dimStyle.Render(">>"), i18n.T("cmd.setup.cloning"), devopsRepo) + fmt.Printf("%s %s %s...\n", dimStyle.Render(">>"), i18n.T("common.status.cloning"), devopsRepo) if !dryRun { if err := gitClone(ctx, defaultOrg, devopsRepo, devopsPath); err != nil { diff --git a/cmd/setup/setup_registry.go b/cmd/setup/setup_registry.go index 5ca43f3..2253e34 100644 --- a/cmd/setup/setup_registry.go +++ b/cmd/setup/setup_registry.go @@ -30,7 +30,7 @@ func runRegistrySetup(ctx context.Context, registryPath, only string, dryRun, al // runRegistrySetupWithReg runs setup with an already-loaded registry. func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryPath, only string, dryRun, all, runBuild bool) error { - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.setup.registry_label")), registryPath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.registry")), registryPath) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.setup.org_label")), reg.Org) // Determine base path for cloning @@ -48,7 +48,7 @@ func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryP basePath = filepath.Join(home, basePath[2:]) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.setup.target_label")), basePath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.target")), basePath) // Parse type filter var typeFilter []string @@ -56,7 +56,7 @@ func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryP for _, t := range strings.Split(only, ",") { typeFilter = append(typeFilter, strings.TrimSpace(t)) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.setup.filter_label")), only) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.filter")), only) } // Ensure base path exists @@ -140,7 +140,7 @@ func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryP fmt.Printf("%s, %s, %s\n", i18n.T("cmd.setup.to_clone", map[string]interface{}{"Count": len(toClone)}), i18n.T("cmd.setup.exist", map[string]interface{}{"Count": exists}), - i18n.T("cmd.setup.skipped", map[string]interface{}{"Count": skipped})) + i18n.T("common.count.skipped", map[string]interface{}{"Count": skipped})) if len(toClone) == 0 { fmt.Printf("\n%s\n", i18n.T("cmd.setup.nothing_to_clone")) @@ -172,7 +172,7 @@ func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryP var succeeded, failed int for _, repo := range toClone { - fmt.Printf(" %s %s... ", dimStyle.Render(i18n.T("cmd.setup.cloning")), repo.Name) + fmt.Printf(" %s %s... ", dimStyle.Render(i18n.T("common.status.cloning")), repo.Name) repoPath := filepath.Join(basePath, repo.Name) @@ -188,9 +188,9 @@ func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryP // Summary fmt.Println() - fmt.Printf("%s %s", successStyle.Render(i18n.T("cmd.setup.done_label")), i18n.T("cmd.setup.cloned_count", map[string]interface{}{"Count": succeeded})) + fmt.Printf("%s %s", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.setup.cloned_count", map[string]interface{}{"Count": succeeded})) if failed > 0 { - fmt.Printf(", %s", errorStyle.Render(i18n.T("cmd.setup.failed_count", map[string]interface{}{"Count": failed}))) + fmt.Printf(", %s", errorStyle.Render(i18n.T("common.count.failed", map[string]interface{}{"Count": failed}))) } if exists > 0 { fmt.Printf(", %s", i18n.T("cmd.setup.already_exist_count", map[string]interface{}{"Count": exists})) @@ -206,7 +206,7 @@ func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryP buildCmd.Stdout = os.Stdout buildCmd.Stderr = os.Stderr if err := buildCmd.Run(); err != nil { - return fmt.Errorf("%s: %w", i18n.T("cmd.setup.error.build_failed"), err) + return fmt.Errorf("%s: %w", i18n.T("common.error.build_failed"), err) } } diff --git a/cmd/test/test.go b/cmd/test/test.go index 0d04ee8..06d9d56 100644 --- a/cmd/test/test.go +++ b/cmd/test/test.go @@ -43,7 +43,7 @@ var testCmd = &cobra.Command{ func init() { testCmd.Flags().BoolVar(&testVerbose, "verbose", false, i18n.T("cmd.test.flag.verbose")) - testCmd.Flags().BoolVar(&testCoverage, "coverage", false, i18n.T("cmd.test.flag.coverage")) + testCmd.Flags().BoolVar(&testCoverage, "coverage", false, i18n.T("common.flag.coverage")) testCmd.Flags().BoolVar(&testShort, "short", false, i18n.T("cmd.test.flag.short")) testCmd.Flags().StringVar(&testPkg, "pkg", "", i18n.T("cmd.test.flag.pkg")) testCmd.Flags().StringVar(&testRun, "run", "", i18n.T("cmd.test.flag.run")) diff --git a/cmd/test/test_output.go b/cmd/test/test_output.go index abe15ed..20c449b 100644 --- a/cmd/test/test_output.go +++ b/cmd/test/test_output.go @@ -85,12 +85,12 @@ func printTestSummary(results testResults, showCoverage bool) { // Print pass/fail summary total := results.passed + results.failed if total > 0 { - fmt.Printf(" %s %s", testPassStyle.Render("✓"), i18n.T("cmd.test.passed", map[string]interface{}{"Count": results.passed})) + fmt.Printf(" %s %s", testPassStyle.Render("✓"), i18n.T("common.count.passed", map[string]interface{}{"Count": results.passed})) if results.failed > 0 { - fmt.Printf(" %s %s", testFailStyle.Render("✗"), i18n.T("cmd.test.failed", map[string]interface{}{"Count": results.failed})) + fmt.Printf(" %s %s", testFailStyle.Render("✗"), i18n.T("common.count.failed", map[string]interface{}{"Count": results.failed})) } if results.skipped > 0 { - fmt.Printf(" %s %s", testSkipStyle.Render("○"), i18n.T("cmd.test.skipped", map[string]interface{}{"Count": results.skipped})) + fmt.Printf(" %s %s", testSkipStyle.Render("○"), i18n.T("common.count.skipped", map[string]interface{}{"Count": results.skipped})) } fmt.Println() } @@ -108,7 +108,7 @@ func printTestSummary(results testResults, showCoverage bool) { printCoverageSummary(results) } else if results.covCount > 0 { avgCov := results.totalCov / float64(results.covCount) - fmt.Printf("\n %s %s\n", i18n.T("cmd.test.label.coverage"), formatCoverage(avgCov)) + fmt.Printf("\n %s %s\n", i18n.T("common.label.coverage"), formatCoverage(avgCov)) } } diff --git a/cmd/test/test_runner.go b/cmd/test/test_runner.go index 1cf0fb0..347ebbc 100644 --- a/cmd/test/test_runner.go +++ b/cmd/test/test_runner.go @@ -54,10 +54,10 @@ func runTest(verbose, coverage, short bool, pkg, run string, race, jsonOutput bo cmd.Env = append(os.Environ(), getMacOSDeploymentTarget()) if !jsonOutput { - fmt.Printf("%s %s\n", testHeaderStyle.Render(i18n.T("cmd.test.label.test")), i18n.T("cmd.test.running")) - fmt.Printf(" %s %s\n", i18n.T("cmd.test.label.package"), testDimStyle.Render(pkg)) + fmt.Printf("%s %s\n", testHeaderStyle.Render(i18n.T("common.label.test")), i18n.T("common.result.running_tests")) + fmt.Printf(" %s %s\n", i18n.T("common.label.package"), testDimStyle.Render(pkg)) if run != "" { - fmt.Printf(" %s %s\n", i18n.T("cmd.test.label.filter"), testDimStyle.Render(run)) + fmt.Printf(" %s %s\n", i18n.T("common.label.filter"), testDimStyle.Render(run)) } fmt.Println() } @@ -93,7 +93,7 @@ func runTest(verbose, coverage, short bool, pkg, run string, race, jsonOutput bo // JSON output for CI/agents printJSONResults(results, exitCode) if exitCode != 0 { - return fmt.Errorf(i18n.T("cmd.test.error.tests_failed")) + return fmt.Errorf(i18n.T("common.error.tests_failed")) } return nil } @@ -109,10 +109,10 @@ func runTest(verbose, coverage, short bool, pkg, run string, race, jsonOutput bo if exitCode != 0 { fmt.Printf("\n%s %s\n", testFailStyle.Render(i18n.T("cli.fail")), i18n.T("cmd.test.tests_failed")) - return fmt.Errorf(i18n.T("cmd.test.error.tests_failed")) + return fmt.Errorf(i18n.T("common.error.tests_failed")) } - fmt.Printf("\n%s %s\n", testPassStyle.Render(i18n.T("cli.pass")), i18n.T("cmd.test.all_passed")) + fmt.Printf("\n%s %s\n", testPassStyle.Render(i18n.T("cli.pass")), i18n.T("common.result.all_passed")) return nil } diff --git a/cmd/vm/container.go b/cmd/vm/container.go index 1560632..ad710dd 100644 --- a/cmd/vm/container.go +++ b/cmd/vm/container.go @@ -80,7 +80,7 @@ func runContainer(image, name string, detach bool, memory, cpus, sshPort int) er SSHPort: sshPort, } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.vm.label.image")), image) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.image")), image) if name != "" { fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.vm.label.name")), name) } @@ -94,7 +94,7 @@ func runContainer(image, name string, detach bool, memory, cpus, sshPort int) er } if detach { - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.vm.label.started")), c.ID) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.started")), c.ID) fmt.Printf("%s %d\n", dimStyle.Render(i18n.T("cmd.vm.label.pid")), c.PID) fmt.Println() fmt.Println(i18n.T("cmd.vm.hint.view_logs", map[string]interface{}{"ID": c.ID[:8]})) @@ -238,7 +238,7 @@ func stopContainer(id string) error { return fmt.Errorf(i18n.T("cmd.vm.error.stop_container")+": %w", err) } - fmt.Printf("%s\n", successStyle.Render(i18n.T("cmd.vm.stop.stopped"))) + fmt.Printf("%s\n", successStyle.Render(i18n.T("common.status.stopped"))) return nil } @@ -283,7 +283,7 @@ func addVMLogsCommand(parent *cobra.Command) { }, } - logsCmd.Flags().BoolVarP(&logsFollow, "follow", "f", false, i18n.T("cmd.vm.logs.flag.follow")) + logsCmd.Flags().BoolVarP(&logsFollow, "follow", "f", false, i18n.T("common.flag.follow")) parent.AddCommand(logsCmd) } @@ -302,7 +302,7 @@ func viewLogs(id string, follow bool) error { ctx := context.Background() reader, err := manager.Logs(ctx, fullID, follow) if err != nil { - return fmt.Errorf(i18n.T("cmd.vm.error.get_logs")+": %w", err) + return fmt.Errorf(i18n.T("common.error.get_logs")+": %w", err) } defer reader.Close() diff --git a/cmd/vm/templates.go b/cmd/vm/templates.go index 783e00d..b96a680 100644 --- a/cmd/vm/templates.go +++ b/cmd/vm/templates.go @@ -103,7 +103,7 @@ func showTemplate(name string) error { return err } - fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.vm.label.template")), repoNameStyle.Render(name)) + fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("common.label.template")), repoNameStyle.Render(name)) fmt.Println(content) return nil @@ -117,7 +117,7 @@ func showTemplateVars(name string) error { required, optional := container.ExtractVariables(content) - fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.vm.label.template")), repoNameStyle.Render(name)) + fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("common.label.template")), repoNameStyle.Render(name)) if len(required) > 0 { fmt.Printf("%s\n", errorStyle.Render(i18n.T("cmd.vm.templates.vars.required"))) @@ -165,7 +165,7 @@ func RunFromTemplate(templateName string, vars map[string]string, runOpts contai return fmt.Errorf(i18n.T("cmd.vm.error.write_template")+": %w", err) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.vm.label.template")), repoNameStyle.Render(templateName)) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.template")), repoNameStyle.Render(templateName)) fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.vm.label.building")), yamlPath) // Build the image using linuxkit @@ -180,7 +180,7 @@ func RunFromTemplate(templateName string, vars map[string]string, runOpts contai return fmt.Errorf(i18n.T("cmd.vm.error.no_image_found")) } - fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("cmd.vm.label.image")), imagePath) + fmt.Printf("%s %s\n", dimStyle.Render(i18n.T("common.label.image")), imagePath) fmt.Println() // Run the image @@ -199,7 +199,7 @@ func RunFromTemplate(templateName string, vars map[string]string, runOpts contai } if runOpts.Detach { - fmt.Printf("%s %s\n", successStyle.Render(i18n.T("cmd.vm.label.started")), c.ID) + fmt.Printf("%s %s\n", successStyle.Render(i18n.T("common.label.started")), c.ID) fmt.Printf("%s %d\n", dimStyle.Render(i18n.T("cmd.vm.label.pid")), c.PID) fmt.Println() fmt.Println(i18n.T("cmd.vm.hint.view_logs", map[string]interface{}{"ID": c.ID[:8]})) diff --git a/pkg/i18n/locales/en_GB.json b/pkg/i18n/locales/en_GB.json index 401fb38..eee2551 100644 --- a/pkg/i18n/locales/en_GB.json +++ b/pkg/i18n/locales/en_GB.json @@ -1,4 +1,94 @@ { + "common": { + "label": { + "error": "Error:", + "done": "Done:", + "status": "Status:", + "version": "Version:", + "summary": "Summary:", + "image": "Image:", + "success": "Success:", + "warning": "Warning:", + "note": "Note:", + "registry": "Registry:", + "current": "Current:", + "total": "Total:", + "coverage": "Coverage:", + "install": "Install:", + "path": "Path:", + "test": "Test:", + "package": "Package:", + "spec": "Spec:", + "template": "Template:", + "fix": "Fix:", + "skip": "Skip:", + "started": "Started:", + "target": "Target:", + "filter": "Filter:", + "project": "Project:", + "url": "URL:", + "repo": "Repo" + }, + "status": { + "running": "Running", + "stopped": "Stopped", + "dirty": "dirty", + "synced": "synced", + "up_to_date": "up to date", + "installing": "Installing", + "cloning": "Cloning" + }, + "error": { + "failed": "Failed to {{.Action}}", + "not_found": "{{.Item}} not found", + "no_items": "No {{.Items}} found", + "working_dir": "Failed to get working directory", + "load_config": "Failed to load config", + "build_failed": "Build failed", + "tests_failed": "Tests failed", + "get_logs": "Failed to get logs" + }, + "success": { + "completed": "{{.Action}} completed successfully", + "passed": "{{.Action}} passed" + }, + "progress": { + "running": "Running {{.Task}}", + "checking": "Checking {{.Item}}", + "checking_updates": "Checking for updates..." + }, + "flag": { + "registry": "Path to repos.yaml (auto-detected if not specified)", + "spec": "Path to OpenAPI spec file", + "diff": "Show diff of changes", + "verbose": "Verbose output", + "coverage": "Show detailed per-package coverage", + "json": "Output in JSON format", + "tag": "Image tag (default: latest)", + "follow": "Follow log output", + "fix": "Auto-fix issues where possible", + "pkg": "Package to test (default: ./...)" + }, + "count": { + "failed": "{{.Count}} failed", + "passed": "{{.Count}} passed", + "skipped": "{{.Count}} skipped", + "pending": "{{.Count}} pending", + "files": "{{.Count}} files", + "commits": "{{.Count}} commit(s)", + "repos_unpushed": "{{.Count}} repo(s) with unpushed commits:" + }, + "result": { + "all_passed": "All tests passed", + "no_issues": "No issues found", + "running_tests": "Running tests", + "run_with_coverage": "Run tests with coverage" + }, + "hint": { + "install_with": "Install with:", + "fix_deps": "composer update && npm update" + } + }, "cli": { "aborted": "Aborted", "cancelled": "Cancelled", @@ -15,10 +105,6 @@ "one": "{{.Count}} commit", "other": "{{.Count}} commits" }, - "files": { - "one": "{{.Count}} file", - "other": "{{.Count}} files" - }, "items": { "one": "{{.Count}} item", "other": "{{.Count}} items" @@ -41,12 +127,10 @@ "checking": "Checking", "deploying": "Deploying", "fetching": "Fetching", - "installing": "Installing", "loading": "Loading", "processing": "Processing", "testing": "Testing" }, - "running": "Running", "skip": "Skipped", "success": "Success", "time": { @@ -84,11 +168,9 @@ "get_task": "failed to get task", "git_status": "failed to check git status", "list_tasks": "failed to list tasks", - "load_config": "failed to load config", "push": "failed to push", "push_branch": "failed to push branch", - "update_task": "failed to update task", - "working_dir": "failed to get working directory" + "update_task": "failed to update task" }, "label": { "blocked_by": "Blocked by:", @@ -98,11 +180,8 @@ "id": "ID:", "labels": "Labels:", "priority": "Priority:", - "project": "Project:", "related_files": "Related files:", - "status": "Status:", - "title": "Title:", - "url": "URL:" + "title": "Title:" }, "long": "Manage tasks from the core-agentic service for AI-assisted development.\n\nCommands:\n tasks List tasks (filterable by status, priority, labels)\n task View task details or auto-select highest priority\n task:update Update task status or progress\n task:complete Mark task as completed or failed\n task:commit Create git commit with task reference\n task:pr Create GitHub PR linked to task\n claude Claude Code integration\n\nWorkflow:\n core ai tasks # List pending tasks\n core ai task --auto --claim # Auto-select and claim a task\n core ai task:commit -m 'msg' # Commit with task reference\n core ai task:complete # Mark task done", "priority": { @@ -205,12 +284,10 @@ "creating_archives": "Creating archives...", "error": { "archive_failed": "archive failed", - "build_failed": "build failed", "checksum_failed": "checksum failed", "detect_type": "failed to detect project type", "gpg_signing_failed": "GPG signing failed", "invalid_target": "invalid target format \"{{.Target}}\", expected OS/arch (e.g., linux/amd64)", - "load_config": "failed to load config", "marshal_artifacts": "failed to marshal artifacts", "no_project_type": "no supported project type detected in {{.Dir}}\nSupported types: go (go.mod), wails (wails.json), node (package.json), php (composer.json)", "no_targets": "no valid targets specified", @@ -219,7 +296,6 @@ "php_not_implemented": "PHP builder not yet implemented", "signing_failed": "signing failed", "unsupported_type": "unsupported project type", - "working_dir": "failed to get working directory", "write_checksums": "failed to write CHECKSUMS.txt" }, "flag": { @@ -263,11 +339,9 @@ "binary": "Binary:", "build": "Build:", "checksum": "Checksum:", - "error": "Error:", "ok": "OK:", "output": "Output:", "sign": "Sign:", - "success": "Success:", "targets": "Targets:", "type": "Type:" }, @@ -291,8 +365,7 @@ "found_manifest": "Found manifest:", "no_manifest": "no manifest file found. Proceeding with basic site download.", "short": "Build from a live PWA URL", - "starting": "Starting PWA build from URL:", - "warning": "Warning:" + "starting": "Starting PWA build from URL:" }, "sdk": { "complete": "SDK generation complete", @@ -300,7 +373,6 @@ "flag": { "dry_run": "Show what would be generated without writing files", "lang": "Generate only this language (typescript, python, go, php)", - "spec": "Path to OpenAPI spec file", "version": "Version to embed in generated SDKs" }, "generated_label": "Generated:", @@ -310,7 +382,6 @@ "languages_label": "Languages:", "long": "Generates typed API clients from OpenAPI specifications.\nSupports TypeScript, Python, Go, and PHP.\n\nExamples:\n core build sdk # Generate all configured SDKs\n core build sdk --lang typescript # Generate only TypeScript SDK\n core build sdk --spec api.yaml # Use specific OpenAPI spec", "short": "Generate API SDKs from OpenAPI spec", - "spec_label": "Spec:", "would_generate": "Would generate SDKs (dry-run)" }, "short": "Build projects with auto-detection and cross-compilation", @@ -329,9 +400,7 @@ "error": { "determine_version": "failed to determine version", "generate_changelog": "failed to generate changelog", - "load_config": "failed to load config", "no_publishers": "no publishers configured in .core/release.yaml", - "working_dir": "failed to get working directory", "write_config": "failed to write config" }, "flag": { @@ -354,12 +423,8 @@ "label": { "artifacts": "Artifacts:", "ci": "CI:", - "error": "Error:", "init": "Init:", - "note": "Note:", - "published": "Published:", - "success": "Success:", - "version": "Version:" + "published": "Published:" }, "long": "Publishes pre-built artifacts from dist/ to configured targets.\nRun 'core build' first to create artifacts.\n\nSAFE BY DEFAULT: Runs in dry-run mode unless --we-are-go-for-launch is specified.\n\nConfiguration: .core/release.yaml", "publish_completed": "Publish completed!", @@ -378,17 +443,14 @@ "short": "Tools for managing service APIs" }, "ci": { - "error_label": "Error:", "failing": "{{.Count}} failing", "flag": { "branch": "Filter by branch", - "failed": "Show only failed runs", - "registry": "Path to repos.yaml (auto-detected if not specified)" + "failed": "Show only failed runs" }, "long": "Fetches GitHub Actions workflow status for all repos.\nShows latest run status for each repo.\nRequires the 'gh' CLI to be installed and authenticated.", "no_ci": "{{.Count}} no CI", "passing": "{{.Count}} passing", - "pending": "{{.Count}} pending", "repos_checked": "{{.Count}} repos checked", "short": "Check CI status across all repos" }, @@ -396,8 +458,7 @@ "committing": "Committing dirty repos with Claude...", "failed": "Commit failed", "flag": { - "all": "Commit all dirty repos without prompting", - "registry": "Path to repos.yaml (auto-detected if not specified)" + "all": "Commit all dirty repos without prompting" }, "long": "Uses Claude to create commits for dirty repos.\nShows uncommitted changes and invokes Claude to generate commit messages.", "short": "Claude-assisted commits across repos", @@ -406,48 +467,37 @@ "committed": "committed", "committing": "Committing", "confirm_claude_commit": "Have Claude commit these repos?", - "count_failed": "{{.Count}} failed", "done_succeeded": "Done: {{.Count}} succeeded", "health": { "ahead_label": "Ahead:", "behind_label": "Behind:", - "dirty": "dirty", "dirty_label": "Dirty:", "errors": "errors", "errors_label": "Errors:", "flag": { - "registry": "Path to repos.yaml (auto-detected if not specified)", "verbose": "Show detailed breakdown" }, "long": "Shows a summary of repository health:\ntotal repos, dirty repos, unpushed commits, etc.", "more": "+{{.Count}} more", "repos": "repos", "short": "Quick health check across all repos", - "synced": "synced", "to_pull": "to pull", - "to_push": "to push", - "up_to_date": "up to date" + "to_push": "to push" }, "impact": { "analysis_for": "Impact analysis for", "changes_affect": "Changes to {{.Repo}} affect {{.Affected}}/{{.Total}} repos", "direct_dependents": "{{.Count}} direct dependent(s):", - "flag": { - "registry": "Path to repos.yaml (auto-detected if not specified)" - }, "long": "Analyzes the dependency graph to show which repos\nwould be affected by changes to the specified repo.", "no_dependents": "No repos depend on {{.Name}}", "requires_registry": "impact analysis requires repos.yaml with dependency information", "short": "Show impact of changing a repo", - "summary": "Summary:", "transitive_dependents": "{{.Count}} transitive dependent(s):" }, "issues": { - "error_label": "Error:", "flag": { "assignee": "Filter by assignee (use @me for yourself)", - "limit": "Max issues per repo", - "registry": "Path to repos.yaml (auto-detected if not specified)" + "limit": "Max issues per repo" }, "long": "Fetches open issues from GitHub for all repos in the registry.\nRequires the 'gh' CLI to be installed and authenticated.", "no_issues": "No open issues found.", @@ -463,8 +513,7 @@ "commits_behind": "{{.Count}} commit(s) behind", "done_pulled": "Done: {{.Count}} pulled", "flag": { - "all": "Pull all repos, not just those behind", - "registry": "Path to repos.yaml (auto-detected if not specified)" + "all": "Pull all repos, not just those behind" }, "long": "Pulls updates for all repos.\nBy default only pulls repos that are behind. Use --all to pull all repos.", "pulling": "Pulling", @@ -474,7 +523,6 @@ }, "push": { "all_up_to_date": "All repos up to date. Nothing to push.", - "commits_count": "{{.Count}} commit(s)", "confirm": "Push all?", "confirm_push": "Push {{.Commits}} commit(s) to {{.Repos}} repo(s)?", "diverged": "branch has diverged from remote", @@ -482,18 +530,15 @@ "done_pushed": "Done: {{.Count}} pushed", "failed": "Push failed", "flag": { - "force": "Skip confirmation prompt", - "registry": "Path to repos.yaml (auto-detected if not specified)" + "force": "Skip confirmation prompt" }, "long": "Pushes unpushed commits for all repos.\nShows repos with commits to push and confirms before pushing.", "nothing": "Nothing to push", "pull_and_retry": "Pull changes and retry push?", - "repos_with_unpushed": "{{.Count}} repo(s) with unpushed commits:", "short": "Push commits across all repos", "success": "Pushed successfully", "uncommitted_changes_commit": "You have uncommitted changes. Commit with Claude first?" }, - "registry_label": "Registry:", "repos_with_changes": "{{.Count}} repo(s) with uncommitted changes:", "reviews": { "approved": "{{.Count}} approved", @@ -501,13 +546,11 @@ "draft": "[draft]", "flag": { "all": "Show all PRs including drafts", - "author": "Filter by PR author", - "registry": "Path to repos.yaml (auto-detected if not specified)" + "author": "Filter by PR author" }, "long": "Fetches open PRs from GitHub for all repos in the registry.\nShows review status (approved, changes requested, pending).\nRequires the 'gh' CLI to be installed and authenticated.", "no_prs": "No open PRs found.", "open_prs": "{{.Count}} open PR(s)", - "pending": "{{.Count}} pending", "short": "List PRs needing review across all repos", "status_approved": "v approved", "status_changes": "* changes requested", @@ -521,12 +564,9 @@ "behind": "behind", "clean": "clean", "conflict": "conflict", - "dirty": "dirty", - "diverged": "diverged", - "synced": "synced" + "diverged": "diverged" }, "sync": { - "error_prefix": "Error:", "long": "This command scans the 'pkg' directory for services and ensures that the\ntop-level public API for each service is in sync with its internal implementation.\nIt automatically generates the necessary Go files with type aliases.", "short": "Synchronizes public service APIs with internal implementations", "success": "Public APIs synchronized successfully." @@ -545,7 +585,6 @@ }, "booting": "Booting dev environment...", "check_updates": "Use {{.Command}} to check for updates", - "checking_updates": "Checking for updates...", "claude": { "flag": { "auth": "Selective auth forwarding (gh,anthropic,ssh,git)", @@ -560,10 +599,8 @@ "connect_with": "Connect with: {{.Command}}", "container_label": "Container:", "cpus_label": "CPUs:", - "current_label": "Current:", "downloading": "Downloading dev environment...", "downloading_update": "Downloading update...", - "image_label": "Image:", "install": { "long": "Downloads the platform-specific dev environment image.\n\nThe image includes Go, PHP, Node.js, Python, Docker, and Claude CLI.\nDownloads are cached at ~/.core/images/\n\nExamples:\n core dev install", "short": "Download and install the dev environment image" @@ -601,15 +638,11 @@ "long": "Shows the current status of the dev environment.\n\nExamples:\n core dev vm-status", "short": "Show dev environment status" }, - "status_label": "Status:", - "status_running": "Running", - "status_stopped": "Stopped", "status_title": "Dev Environment Status", "stop": { "long": "Stops the running dev environment VM.\n\nExamples:\n core dev stop", "short": "Stop the dev environment" }, - "stopped": "Stopped", "stopping": "Stopping dev environment...", "stopping_current": "Stopping current instance...", "test": { @@ -629,24 +662,19 @@ }, "update_available": "Update available", "updated_in": "Updated in {{.Duration}}", - "uptime_label": "Uptime:", - "version_label": "Version:" + "uptime_label": "Uptime:" }, "work": { "all_up_to_date": "All repos up to date.", - "commits_count": "{{.Count}} commit(s)", "error_prefix": "error:", "flag": { "commit": "Use Claude to commit dirty repos before pushing", - "registry": "Path to repos.yaml (auto-detected if not specified)", "status": "Show status only, don't push" }, "long": "Manage git status, commits, and pushes across multiple repositories.\n\nReads repos.yaml to discover repositories and their relationships.\nShows status, optionally commits with Claude, and pushes changes.", - "repos_with_unpushed": "{{.Count}} repo(s) with unpushed commits:", "short": "Multi-repo git operations", "table_ahead": "Ahead", "table_modified": "Modified", - "table_repo": "Repo", "table_staged": "Staged", "table_untracked": "Untracked", "use_commit_flag": "Use --commit to have Claude create commits" @@ -658,18 +686,12 @@ "scan_directory": "failed to scan directory" }, "list": { - "coverage_label": "Coverage", "coverage_summary": "{{.WithDocs}} with docs, {{.WithoutDocs}} without", - "files_count": "{{.Count}} files", - "flag": { - "registry": "Path to repos.yaml (auto-detected if not specified)" - }, "header": { "changelog": "CHANGELOG", "claude": "CLAUDE", "docs": "docs/", - "readme": "README", - "repo": "Repo" + "readme": "README" }, "long": "List documentation files for all repos in the workspace.\n\nShows README.md, CLAUDE.md, CHANGELOG.md, and docs/ directory status\nfor each repository.", "short": "List documentation across repos" @@ -678,13 +700,11 @@ "short": "Documentation management", "sync": { "confirm": "Sync?", - "done_label": "Done:", "dry_run_notice": "Dry run - no files copied", "files_count": "({{.Count}} files)", "flag": { "dry_run": "Show what would be synced without copying", - "output": "Output directory (default: core-php/docs/packages)", - "registry": "Path to repos.yaml (auto-detected if not specified)" + "output": "Output directory (default: core-php/docs/packages)" }, "found_label": "Found", "long": "Sync documentation from all repos to a central location.\n\nCopies docs/ directories from each package to core-php/docs/packages/\nfor unified documentation builds.", @@ -692,7 +712,6 @@ "repos_with_docs": "{{.Count}} repo(s) with docs/ directories", "short": "Sync documentation to core-php/docs/packages/", "synced_packages": "Synced {{.Count}} packages", - "total_label": "Total:", "total_summary": "{{.Files}} files from {{.Repos}} repos → {{.Output}}" } }, @@ -777,11 +796,9 @@ "flag": { "html": "Generate HTML coverage report", "open": "Generate and open HTML report in browser", - "pkg": "Package to test (default: ./...)", "threshold": "Minimum coverage percentage (exit 1 if below)" }, "html_label": "HTML:", - "label": "Coverage:", "long": "Run tests and generate coverage report.\n\nExamples:\n core go cov # Run with coverage summary\n core go cov --html # Generate HTML report\n core go cov --open # Generate and open HTML report\n core go cov --threshold 80 # Fail if coverage < 80%", "open_manually": "(open manually)", "running": "Running tests with coverage", @@ -790,7 +807,6 @@ "fmt": { "flag": { "check": "Check only, exit 1 if not formatted", - "diff": "Show diff of changes", "fix": "Fix formatting in place" }, "long": "Format Go code using gofmt or goimports.\n\nExamples:\n core go fmt # Check formatting\n core go fmt --fix # Fix formatting\n core go fmt --diff # Show diff", @@ -801,14 +817,10 @@ "cgo_label": "CGO:", "failed": "FAIL Install failed", "flag": { - "no_cgo": "Disable CGO (CGO_ENABLED=0)", - "verbose": "Verbose output" + "no_cgo": "Disable CGO (CGO_ENABLED=0)" }, "installed_to": "Installed to {{.Path}}", - "installing": "Installing", - "label": "Install:", "long": "Install Go binary to $GOPATH/bin.\n\nExamples:\n core go install # Install current module\n core go install ./cmd/core # Install specific path\n core go install --no-cgo # Pure Go (no C dependencies)\n core go install -v # Verbose output", - "path_label": "Path:", "short": "Install Go binary", "success": "OK" }, @@ -841,21 +853,13 @@ "all_passed": "PASS All tests passed", "coverage": "Coverage", "flag": { - "coverage": "Show detailed per-package coverage", "json": "Output JSON results", - "pkg": "Package to test (default: ./...)", "race": "Enable race detector", "run": "Run only tests matching regexp", - "short": "Run only short tests", - "verbose": "Verbose output" + "short": "Run only short tests" }, - "label": "Test:", "long": "Run Go tests with coverage reporting.\n\nSets MACOSX_DEPLOYMENT_TARGET=26.0 to suppress linker warnings.\nFilters noisy output and provides colour-coded coverage.\n\nExamples:\n core go test\n core go test --coverage\n core go test --pkg ./pkg/crypt\n core go test --run TestHash", - "package_label": "Package:", - "passed": "{{.Count}} passed", "passed_failed": "{{.Passed}} passed, {{.Failed}} failed", - "running": "Running tests", - "short": "Run tests with coverage", "some_failed": "FAIL Some tests failed" }, "work": { @@ -884,7 +888,6 @@ }, "long": "Run PHPStan or Larastan static analysis.\n\nAuto-detects Larastan if installed, otherwise uses PHPStan.", "no_analyser": "no static analyser found (install PHPStan: composer require phpstan/phpstan --dev)", - "no_issues": "No issues found", "running": "Running static analysis with {{.Analyser}}", "short": "Run PHPStan static analysis" }, @@ -892,10 +895,8 @@ "all_secure": "All dependencies are secure", "completed_errors": "audit completed with errors", "error": "error", - "fix_hint": "composer update && npm update", "flag": { - "fix": "Auto-fix vulnerabilities (npm only)", - "json": "Output in JSON format" + "fix": "Auto-fix vulnerabilities (npm only)" }, "found_vulns": "Found {{.Count}} vulnerabilities across dependencies", "long": "Check PHP and JavaScript dependencies for known vulnerabilities.\n\nRuns composer audit and npm audit (if package.json exists).", @@ -917,21 +918,18 @@ "no_cache": "Build without cache", "output": "Output path for LinuxKit image", "platform": "Target platform (e.g., linux/amd64, linux/arm64)", - "tag": "Image tag (default: latest)", "template": "LinuxKit template name (default: server-php)", "type": "Build type: docker (default) or linuxkit" }, "format": "Format:", "frontend": "Frontend:", - "image": "Image:", "laravel": "Laravel:", "linuxkit_success": "LinuxKit image built successfully", "long": "Build a production-ready container image for the PHP project.\n\nBy default, builds a Docker image using FrankenPHP.\nUse --type linuxkit to build a LinuxKit VM image instead.", "octane": "Octane:", "php_version": "PHP Version:", "platform": "Platform:", - "short": "Build Docker or LinuxKit image", - "template": "Template:" + "short": "Build Docker or LinuxKit image" }, "deploy": { "deploying": "Deploying to {{.Environment}}...", @@ -1002,13 +1000,11 @@ "error": { "analysis_issues": "analysis found issues", "audit_failed": "audit failed", - "build_failed": "build failed", "critical_high_issues": "critical or high severity issues found", "deploy_failed": "deployment failed", "detect_config": "failed to detect project configuration", "fmt_failed": "formatting failed", "fmt_issues": "formatting issues found", - "get_logs": "failed to get logs", "infection_failed": "mutation testing failed", "infection_not_installed": "infection not installed", "link_packages": "failed to link packages", @@ -1030,16 +1026,13 @@ "start_services": "failed to start services", "status_failed": "failed to get status", "stop_services": "failed to stop services", - "tests_failed": "tests failed", "unlink_packages": "failed to unlink packages", "update_packages": "composer update failed", - "vulns_found": "vulnerabilities found", - "working_dir": "failed to get working directory" + "vulns_found": "vulnerabilities found" }, "fmt": { "checking": "Checking code with {{.Formatter}}", "flag": { - "diff": "Show diff of changes", "fix": "Auto-fix formatting issues" }, "formatting": "Formatting code with {{.Formatter}}", @@ -1072,14 +1065,10 @@ "commit": "Commit:", "completed": "Completed:", "deploy": "Deploy:", - "done": "Done:", "duration": "Duration:", - "error": "Error:", - "fix": "Fix:", "id": "ID:", "infection": "Infection:", "info": "Info:", - "install": "Install:", "message": "Message:", "php": "PHP:", "psalm": "Psalm:", @@ -1089,17 +1078,10 @@ "security": "Security:", "services": "Services:", "setup": "Setup:", - "skip": "Skip:", - "started": "Started:", - "status": "Status:", - "summary": "Summary:", - "url": "URL:", - "vite": "Vite:", - "warning": "Warning:" + "vite": "Vite:" }, "logs": { "flag": { - "follow": "Follow log output", "service": "Specific service (default: all)" }, "long": "Stream logs from Laravel services.\n\nServices: frankenphp, vite, horizon, reverb, redis", @@ -1117,10 +1099,8 @@ "linked": "Linked packages:", "long": "List all locally linked packages.\n\nShows package name, path, and version for each linked package.", "none_found": "No linked packages found", - "path": "Path:", "short": "List linked packages", - "unknown": "(unknown)", - "version": "Version:" + "unknown": "(unknown)" }, "long": "Link and manage local PHP packages for development.\n\nSimilar to npm link, this adds path repositories to composer.json\nfor developing packages alongside your project.", "short": "Manage local PHP packages", @@ -1142,13 +1122,11 @@ "analysing_fixing": "Analysing and fixing code with Psalm", "flag": { "baseline": "Generate/update baseline file", - "fix": "Auto-fix issues where possible", "level": "Error level (1=strictest, 8=most lenient)", "show_info": "Show info-level issues" }, "install": "composer require --dev vimeo/psalm", "long": "Run Psalm deep static analysis with Laravel plugin support.\n\nPsalm provides deeper type inference than PHPStan and catches\ndifferent classes of bugs. Both should be run for best coverage.", - "no_issues": "No issues found", "not_found": "Psalm not found", "setup": "./vendor/bin/psalm --init", "short": "Run Psalm static analysis" @@ -1156,13 +1134,11 @@ "qa": { "all_passed": "All checks passed ({{.Passed}}/{{.Total}})", "failed": "failed", - "fix_audit": "composer update && npm update", "fix_infection": "Improve test coverage for mutated code", "fix_phpstan": "Fix PHPStan errors shown above", "fix_psalm": "Fix Psalm errors shown above", "fix_tests": "Fix failing tests shown above", "flag": { - "fix": "Auto-fix issues where possible", "full": "Run all stages including slow checks", "quick": "Only run quick checks" }, @@ -1204,9 +1180,7 @@ "security": { "checks_suffix": " CHECKS:", "critical": "Critical:", - "fix_label": "Fix:", "flag": { - "json": "Output in JSON format", "sarif": "Output in SARIF format (for GitHub Security)", "severity": "Minimum severity (critical, high, medium, low)", "url": "URL to check HTTP headers (optional)" @@ -1227,8 +1201,7 @@ "env_file": "Path to environment file", "https_port": "HTTPS port (default: 443)", "name": "Docker image name (required)", - "port": "HTTP port (default: 80)", - "tag": "Image tag (default: latest)" + "port": "HTTP port (default: 80)" }, "long": "Run a production PHP container.\n\nThis starts the built Docker image in production mode.", "name_required": "--name is required: specify the Docker image name", @@ -1252,7 +1225,6 @@ }, "install_linux": "Linux: see https://github.com/FiloSottile/mkcert", "install_macos": "macOS: brew install mkcert", - "install_with": "Install with:", "key_label": "Key:", "mkcert_not_installed": "mkcert is not installed", "setting_up": "Setting up SSL for {{.Domain}}", @@ -1265,7 +1237,6 @@ "package_manager": "Package manager:", "pid": "pid {{.PID}}", "port": "port {{.Port}}", - "project": "Project:", "running": "running", "short": "Show service status", "ssl_certs": "SSL certificates:", @@ -1286,7 +1257,6 @@ "parallel": "Run tests in parallel" }, "long": "Run PHP tests using PHPUnit or Pest.\n\nAuto-detects Pest if tests/Pest.php exists, otherwise uses PHPUnit.", - "passed": "All tests passed", "running": "Running tests with {{.Runner}}", "short": "Run PHP tests (PHPUnit/Pest)" } @@ -1309,8 +1279,6 @@ "add_to_registry": "add to registry", "added_to_registry": "added to repos.yaml", "already_exists": "{{.Name}} already exists at {{.Path}}", - "cloning": "Cloning", - "done_label": "Done:", "flag": { "add": "Add to repos.yaml registry", "dir": "Target directory (default: ./packages or current dir)" @@ -1318,9 +1286,7 @@ "installed": "Installed {{.Name}}", "installing_label": "Installing:", "long": "Clones a repository from GitHub.\n\nExamples:\n core pkg install host-uk/core-php\n core pkg install host-uk/core-tenant --dir ./packages\n core pkg install host-uk/core-admin --add", - "short": "Clone a package from GitHub", - "skip_label": "Skip:", - "target_label": "Target:" + "short": "Clone a package from GitHub" }, "list": { "install_missing": "Install missing:", @@ -1328,21 +1294,17 @@ "no_packages": "No packages in registry.", "short": "List installed packages", "summary": "{{.Installed}} installed, {{.Missing}} missing", - "title": "Installed Packages", - "total_label": "Total:" + "title": "Installed Packages" }, "long": "Manage host-uk/core-* packages and repositories.\n\nCommands:\n search Search GitHub for packages\n install Clone a package from GitHub\n list List installed packages\n update Update installed packages\n outdated Check for outdated packages", "no_description": "(no description)", "outdated": { "all_up_to_date": "All packages up to date", - "checking": "Checking for updates...", "commits_behind": "{{.Count}} commits behind", - "done_label": "Done:", "long": "Checks which packages have unpulled commits.\n\nExamples:\n core pkg outdated", "outdated_label": "Outdated:", "short": "Check for outdated packages", "summary": "{{.Outdated}} outdated, {{.UpToDate}} up to date", - "summary_label": "Summary:", "update_with": "Update with:" }, "search": { @@ -1358,16 +1320,13 @@ "found_repos": "Found {{.Count}} repositories:", "gh_token_unset": "Unset it with: unset GH_TOKEN", "gh_token_warning": "GH_TOKEN env var is set - this may cause auth issues", - "install_with": "Install with:", "long": "Searches GitHub for repositories matching a pattern.\nUses gh CLI for authenticated search. Results are cached for 1 hour.\n\nExamples:\n core pkg search # List all host-uk repos\n core pkg search --pattern 'core-*' # Search for core-* repos\n core pkg search --org mycompany # Search different org\n core pkg search --refresh # Bypass cache", "no_repos_found": "No repositories found matching pattern.", - "note_label": "Note:", "private_label": "[private]", "short": "Search GitHub for packages" }, "short": "Package management for core-* repos", "update": { - "done_label": "Done:", "flag": { "all": "Update all packages" }, @@ -1375,7 +1334,6 @@ "not_installed": "not installed", "short": "Update installed packages", "summary": "{{.Updated}} updated, {{.Skipped}} skipped, {{.Failed}} failed", - "up_to_date": "up to date", "update_label": "Update:", "updating": "Updating {{.Count}} package(s)" } @@ -1385,7 +1343,6 @@ "base_label": "Base:", "breaking": "Breaking:", "checking": "Checking for breaking changes", - "current_label": "Current:", "error": { "base_required": "--base is required (version tag or file path)" }, @@ -1397,23 +1354,15 @@ "long": "Check for breaking API changes between spec versions.\n\nCompares a base spec (version tag or file) against the current spec\nand reports any breaking changes that would affect API consumers.", "short": "Check for breaking API changes" }, - "error": { - "working_dir": "failed to get working directory" - }, "label": { - "error": "Error:", "ok": "OK:", "sdk": "SDK:" }, "long": "Tools for validating OpenAPI specs and checking API compatibility.\nTo generate SDKs, use: core build sdk\n\nCommands:\n diff Check for breaking API changes\n validate Validate OpenAPI spec syntax", "short": "SDK validation and API compatibility tools", "validate": { - "flag": { - "spec": "Path to OpenAPI spec file" - }, "long": "Validate OpenAPI spec syntax.\n\nChecks that the OpenAPI specification file is valid and well-formed.", "short": "Validate OpenAPI spec", - "spec_label": "Spec:", "valid": "Spec is valid", "validating": "Validating OpenAPI spec" } @@ -1425,18 +1374,11 @@ "cancelled": "Cancelled.", "cloned": "cloned", "cloned_count": "{{.Count}} cloned", - "cloning": "Cloning", "cloning_current_dir": "Cloning into current directory", "complete": "Setup complete", "creating_project_dir": "Creating project directory", "done": "done", - "done_label": "Done:", - "error": { - "build_failed": "build failed" - }, "exist": "{{.Count}} exist", - "failed_count": "{{.Count}} failed", - "filter_label": "Filter:", "flag": { "all": "Skip wizard, clone all packages (non-interactive)", "build": "Run build after cloning", @@ -1448,7 +1390,6 @@ "long": "Sets up a development workspace.\n\nREGISTRY MODE (repos.yaml exists):\n Clones all repositories defined in repos.yaml into packages/.\n Skips repos that already exist. Use --only to filter by type.\n\nBOOTSTRAP MODE (no repos.yaml):\n 1. Clones core-devops to set up the workspace\n 2. Presents an interactive wizard to select packages\n 3. Clones selected packages\n\nUse --all to skip the wizard and clone everything.", "nothing_to_clone": "Nothing to clone.", "org_label": "Org:", - "registry_label": "Registry:", "repo": { "created": "Created", "detected_type": "Detected project type", @@ -1457,8 +1398,6 @@ }, "running_build": "Running build...", "short": "Bootstrap workspace or clone packages from registry", - "skipped": "{{.Count}} skipped", - "target_label": "Target:", "to_clone": "{{.Count}} to clone", "wizard": { "confirm_cancel": "Cancel", @@ -1479,16 +1418,12 @@ "would_load_registry": "Would load registry from" }, "test": { - "all_passed": "All tests passed", "coverage_by_package": "Coverage by package:", "error": { - "no_go_mod": "no go.mod found - run from a Go project directory", - "tests_failed": "tests failed" + "no_go_mod": "no go.mod found - run from a Go project directory" }, - "failed": "{{.Count}} failed", "failed_packages": "Failed packages:", "flag": { - "coverage": "Show detailed per-package coverage", "json": "Output JSON for CI/agents", "pkg": "Package pattern to test (default: ./...)", "race": "Enable race detector (-race)", @@ -1497,17 +1432,9 @@ "verbose": "Show test output as it runs (-v)" }, "label": { - "average": "Average", - "coverage": "Coverage:", - "filter": "Filter:", - "package": "Package:", - "test": "Test:" + "average": "Average" }, "long": "Runs Go tests with coverage reporting.\n\nSets MACOSX_DEPLOYMENT_TARGET=26.0 to suppress linker warnings on macOS.\n\nExamples:\n core test # Run all tests with coverage summary\n core test --verbose # Show test output as it runs\n core test --coverage # Show detailed per-package coverage\n core test --pkg ./pkg/... # Test specific packages\n core test --run TestName # Run specific test by name\n core test --short # Skip long-running tests\n core test --race # Enable race detector\n core test --json # Output JSON for CI/agents", - "passed": "{{.Count}} passed", - "running": "Running tests", - "short": "Run tests with coverage", - "skipped": "{{.Count}} skipped", "tests_failed": "Tests failed" }, "vm": { @@ -1515,7 +1442,6 @@ "apply_template": "failed to apply template", "build_image": "failed to build image", "create_temp": "failed to create temp directory", - "get_logs": "failed to get logs", "id_and_cmd_required": "container ID and command are required", "id_required": "container ID is required", "init_manager": "failed to initialize container manager", @@ -1541,16 +1467,10 @@ "building": "Building:", "container_stopped": "Container stopped:", "hypervisor": "Hypervisor:", - "image": "Image:", "name": "Name:", - "pid": "PID:", - "started": "Started:", - "template": "Template:" + "pid": "PID:" }, "logs": { - "flag": { - "follow": "Follow log output" - }, "long": "View logs from a VM.\n\nExamples:\n core vm logs abc12345\n core vm logs -f abc1", "short": "View VM logs" }, @@ -1585,7 +1505,6 @@ "stop": { "long": "Stops a running VM by ID.\n\nExamples:\n core vm stop abc12345\n core vm stop abc1", "short": "Stop a running VM", - "stopped": "Stopped", "stopping": "Stopping:" }, "templates": { @@ -1627,7 +1546,6 @@ "author": "Author", "branch": "Branch", "commit": "Commit", - "coverage": "Coverage", "date": "Date", "duration": "Duration", "message": "Message",