From d424c95cb0cbdf28a9e8a4a3e718e773f2e7b759 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 18 Jul 2019 17:45:31 -0700 Subject: [PATCH 01/11] Translating help text --- cmd/minikube/cmd/root.go | 17 ++++++++++++++++- cmd/minikube/cmd/start.go | 2 +- cmd/minikube/main.go | 2 -- translations/fr-FR.json | 2 +- translations/zh-CN.json | 2 +- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index 40907bbaee37..4274084ab56d 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -37,6 +37,7 @@ import ( "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/exit" "k8s.io/minikube/pkg/minikube/notify" + "k8s.io/minikube/pkg/minikube/translate" ) var dirs = [...]string{ @@ -100,6 +101,20 @@ var RootCmd = &cobra.Command{ // Execute adds all child commands to the root command sets flags appropriately. // This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() { + for _, c := range RootCmd.Commands() { + c.Use = translate.T(c.Use) + c.Short = translate.T(c.Short) + c.Long = translate.T(c.Long) + c.Flags().VisitAll(func(flag *pflag.Flag) { + flag.Usage = translate.T(flag.Usage) + }) + } + RootCmd.Use = translate.T(RootCmd.Use) + RootCmd.Short = translate.T(RootCmd.Short) + RootCmd.Long = translate.T(RootCmd.Long) + RootCmd.Flags().VisitAll(func(flag *pflag.Flag) { + flag.Usage = translate.T(flag.Usage) + }) if err := RootCmd.Execute(); err != nil { // Cobra already outputs the error, typically because the user provided an unknown command. os.Exit(exit.BadUsage) @@ -126,6 +141,7 @@ func setFlagsUsingViper() { } func init() { + translate.DetermineLocale() RootCmd.PersistentFlags().StringP(config.MachineProfile, "p", constants.DefaultMachineName, `The name of the minikube VM being used. This can be set to allow having multiple instances of minikube independently.`) RootCmd.PersistentFlags().StringP(configCmd.Bootstrapper, "b", constants.DefaultClusterBootstrapper, "The name of the cluster bootstrapper that will set up the kubernetes cluster.") RootCmd.AddCommand(configCmd.ConfigCmd) @@ -135,7 +151,6 @@ func init() { if err := viper.BindPFlags(RootCmd.PersistentFlags()); err != nil { exit.WithError("Unable to bind flags", err) } - cobra.OnInitialize(initConfig) } diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index a6ca6c66e902..2f970d9ffa65 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -348,7 +348,7 @@ func showKubectlConnectInfo(kubeconfig *pkgutil.KubeConfigSetup) { console.OutT(console.Kubectl, "To connect to this cluster, use: kubectl --context={{.name}}", console.Arg{"name": kubeconfig.ClusterName}) } else { if !viper.GetBool(waitUntilHealthy) { - console.OutT(console.Ready, "kubectl has been configured configured to use {{.name}}", console.Arg{"name": cfg.GetMachineName()}) + console.OutT(console.Ready, "kubectl has been configured to use {{.name}}", console.Arg{"name": cfg.GetMachineName()}) } else { console.OutT(console.Ready, "Done! kubectl is now configured to use {{.name}}", console.Arg{"name": cfg.GetMachineName()}) } diff --git a/cmd/minikube/main.go b/cmd/minikube/main.go index fdc47903b511..df78d316a64b 100644 --- a/cmd/minikube/main.go +++ b/cmd/minikube/main.go @@ -29,7 +29,6 @@ import ( "k8s.io/minikube/pkg/minikube/console" "k8s.io/minikube/pkg/minikube/constants" "k8s.io/minikube/pkg/minikube/machine" - "k8s.io/minikube/pkg/minikube/translate" _ "k8s.io/minikube/pkg/provision" ) @@ -47,7 +46,6 @@ func main() { } console.SetOutFile(os.Stdout) console.SetErrFile(os.Stderr) - translate.DetermineLocale() cmd.Execute() } diff --git a/translations/fr-FR.json b/translations/fr-FR.json index 999a0221e429..63c06fc39348 100644 --- a/translations/fr-FR.json +++ b/translations/fr-FR.json @@ -255,7 +255,7 @@ "failed to open browser: {{.error}}": "", "kube-system": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "", - "kubectl has been configured configured to use {{.name}}": "", + "kubectl has been configured to use {{.name}}": "", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "kubectl proxy": "", "logdir set failed": "", diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 35c6a4ea21ff..2f8af9516e70 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -255,7 +255,7 @@ "failed to open browser: {{.error}}": "", "kube-system": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "", - "kubectl has been configured configured to use {{.name}}": "", + "kubectl has been configured to use {{.name}}": "", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "kubectl proxy": "", "logdir set failed": "", From 97999dd14b4a6804352a00be0a356c581957d043 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 19 Jul 2019 15:40:41 -0700 Subject: [PATCH 02/11] explicity set usage template so we can localize it --- cmd/minikube/cmd/root.go | 33 +++++++++++++++++++++++++++++++++ pkg/minikube/cluster/cluster.go | 4 ++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index 4274084ab56d..5ae1747691bb 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -108,6 +108,8 @@ func Execute() { c.Flags().VisitAll(func(flag *pflag.Flag) { flag.Usage = translate.T(flag.Usage) }) + + c.SetUsageTemplate(usageTemplate()) } RootCmd.Use = translate.T(RootCmd.Use) RootCmd.Short = translate.T(RootCmd.Short) @@ -115,12 +117,43 @@ func Execute() { RootCmd.Flags().VisitAll(func(flag *pflag.Flag) { flag.Usage = translate.T(flag.Usage) }) + RootCmd.SetUsageTemplate(usageTemplate()) if err := RootCmd.Execute(); err != nil { // Cobra already outputs the error, typically because the user provided an unknown command. os.Exit(exit.BadUsage) } } +// usageTemplate just calls translate.T on the default usage template +// explicitly using the raw string instead of calling c.UsageTemplate() +// so the extractor can find this monstrosity of a string +func usageTemplate() string { + return translate.T(`Usage:{{if .Runnable}} + {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} + {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} + + Aliases: + {{.NameAndAliases}}{{end}}{{if .HasExample}} + + Examples: + {{.Example}}{{end}}{{if .HasAvailableSubCommands}} + + Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}} + {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} + + Flags: + {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} + + Global Flags: + {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} + + Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} + {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} + + Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} + `) +} + // Handle config values for flags used in external packages (e.g. glog) // by setting them directly, using values from viper when not passed in as args func setFlagsUsingViper() { diff --git a/pkg/minikube/cluster/cluster.go b/pkg/minikube/cluster/cluster.go index 76cc8a13ceb0..15c1a0911f25 100644 --- a/pkg/minikube/cluster/cluster.go +++ b/pkg/minikube/cluster/cluster.go @@ -363,12 +363,12 @@ func createHost(api libmachine.API, config cfg.MachineConfig) (*host.Host, error To disable this message, run [minikube config set ShowDriverDeprecationNotification false]`) } if config.VMDriver != constants.DriverNone { - console.OutT(console.StartingVM, "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}MB, Disk={{.disk_size}}MB) ...", console.Arg{"driver_name": config.VMDriver, "number_of_cpus": config.CPUs, "memory_size": config.Memory, "disk_size": config.DiskSize}) + console.OutT(console.StartingVM, "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", console.Arg{"driver_name": config.VMDriver, "number_of_cpus": config.CPUs, "memory_size": config.Memory, "disk_size": config.DiskSize}) } else { info, err := getHostInfo() if err == nil { - console.OutT(console.StartingNone, "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}MB, Disk={{.disk_size}}MB) ...", console.Arg{"number_of_cpus": info.CPUs, "memory_size": info.Memory, "disk_size": info.DiskSize}) + console.OutT(console.StartingNone, "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...", console.Arg{"number_of_cpus": info.CPUs, "memory_size": info.Memory, "disk_size": info.DiskSize}) } } From 16d92e687548ddbf129d934f1cb0724b4cbbff3b Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Mon, 22 Jul 2019 10:31:05 -0700 Subject: [PATCH 03/11] cleaning up extract and translation files --- cmd/minikube/cmd/config/profile_list.go | 2 +- cmd/minikube/cmd/dashboard.go | 2 +- cmd/minikube/cmd/start.go | 8 ++++---- pkg/minikube/extract/extract.go | 19 +++++++++---------- translations/fr-FR.json | 22 ++++++++-------------- translations/zh-CN.json | 22 ++++++++-------------- 6 files changed, 31 insertions(+), 44 deletions(-) diff --git a/cmd/minikube/cmd/config/profile_list.go b/cmd/minikube/cmd/config/profile_list.go index 4498e6d33c9e..b6aa8b91e74d 100644 --- a/cmd/minikube/cmd/config/profile_list.go +++ b/cmd/minikube/cmd/config/profile_list.go @@ -45,7 +45,7 @@ var profileListCmd = &cobra.Command{ validProfiles, invalidProfiles, err := config.ListProfiles() if len(validProfiles) == 0 || err != nil { - exit.UsageT("No minikube profile was found. you could create one using: `minikube start`") + exit.UsageT("No minikube profile was found. You can create one using `minikube start`.") } for _, p := range validProfiles { validData = append(validData, []string{p.Name, p.Config.MachineConfig.VMDriver, p.Config.KubernetesConfig.NodeIP, strconv.Itoa(p.Config.KubernetesConfig.NodePort), p.Config.KubernetesConfig.KubernetesVersion}) diff --git a/cmd/minikube/cmd/dashboard.go b/cmd/minikube/cmd/dashboard.go index b47f6870d648..fadbdbb8059e 100644 --- a/cmd/minikube/cmd/dashboard.go +++ b/cmd/minikube/cmd/dashboard.go @@ -129,7 +129,7 @@ var dashboardCmd = &cobra.Command{ if dashboardURLMode { out.Ln(url) } else { - out.ErrT(out.Celebrate, "Opening %s in your default browser...", out.V{"url": url}) + out.T(out.Celebrate, "Opening {{.url}} in your default browser...", out.V{"url": url}) if err = browser.OpenURL(url); err != nil { exit.WithCodeT(exit.Software, "failed to open browser: {{.error}}", out.V{"error": err}) } diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 847dbc637450..b96e7dc1100b 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -348,7 +348,7 @@ func showKubectlConnectInfo(kubeconfig *pkgutil.KubeConfigSetup) { out.T(out.Kubectl, "To connect to this cluster, use: kubectl --context={{.name}}", out.V{"name": kubeconfig.ClusterName}) } else { if !viper.GetBool(waitUntilHealthy) { - out.T(out.Ready, "kubectl has been configured configured to use {{.name}}", out.V{"name": cfg.GetMachineName()}) + out.T(out.Ready, "kubectl has been configured to use {{.name}}", out.V{"name": cfg.GetMachineName()}) } else { out.T(out.Ready, "Done! kubectl is now configured to use {{.name}}", out.V{"name": cfg.GetMachineName()}) } @@ -433,7 +433,7 @@ func validateUser() { func validateConfig() { diskSizeMB := pkgutil.CalculateSizeInMB(viper.GetString(humanReadableDiskSize)) if diskSizeMB < pkgutil.CalculateSizeInMB(constants.MinimumDiskSize) { - exit.WithCodeT(exit.Config, "Requested disk size {{.size_in_mb}} is less than minimum of {{.size_in_mb2}}", out.V{"size_in_mb": diskSizeMB, "size_in_mb2": pkgutil.CalculateSizeInMB(constants.MinimumDiskSize)}) + exit.WithCodeT(exit.Config, "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}", out.V{"requested_size": diskSizeMB, "minimum_size": pkgutil.CalculateSizeInMB(constants.MinimumDiskSize)}) } err := autoSetOptions(viper.GetString(vmDriver)) @@ -443,7 +443,7 @@ func validateConfig() { memorySizeMB := pkgutil.CalculateSizeInMB(viper.GetString(memory)) if memorySizeMB < pkgutil.CalculateSizeInMB(constants.MinimumMemorySize) { - exit.UsageT("Requested memory allocation {{.size_in_mb}} is less than the minimum allowed of {{.size_in_mb2}}", out.V{"size_in_mb": memorySizeMB, "size_in_mb2": pkgutil.CalculateSizeInMB(constants.MinimumMemorySize)}) + exit.UsageT("Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}", out.V{"requested_size": memorySizeMB, "minimum_size": pkgutil.CalculateSizeInMB(constants.MinimumMemorySize)}) } if memorySizeMB < pkgutil.CalculateSizeInMB(constants.DefaultMemorySize) { out.T(out.Notice, "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.", @@ -715,7 +715,7 @@ func validateKubernetesVersions(old *cfg.Config) (string, bool) { nvs, err := semver.Make(strings.TrimPrefix(rawVersion, version.VersionPrefix)) if err != nil { - exit.WithCodeT(exit.Data, `Unable to parse "{{.kubenretes_version}}": {{.error}}`, out.V{"kubenretes_version": rawVersion, "error": err}) + exit.WithCodeT(exit.Data, `Unable to parse "{{.kubernetes_version}}": {{.error}}`, out.V{"kubernetes_version": rawVersion, "error": err}) } nv := version.VersionPrefix + nvs.String() diff --git a/pkg/minikube/extract/extract.go b/pkg/minikube/extract/extract.go index b8b1b806f2d9..675d92fb2f44 100644 --- a/pkg/minikube/extract/extract.go +++ b/pkg/minikube/extract/extract.go @@ -35,16 +35,15 @@ import ( // blacklist is a list of strings to explicitly omit from translation files. var blacklist = []string{ - "%s: %v", - "%s.%s=%s", - "%s/%d", - "%s=%s", - "%v", - "GID: %s", - "MSize: %d", - "UID: %s", - "env %s", - "opt %s", + "{{.error}}", + "{{.url}}", + "{{.msg}}: {{.err}}", + "{{.key}}={{.value}}", + "opt {{.docker_option}}", + "kube-system", + "env {{.docker_env}}", + "\\n", + "==\u003e {{.name}} \u003c==", } // ErrMapFile is a constant to refer to the err_map file, which contains the Advice strings. diff --git a/translations/fr-FR.json b/translations/fr-FR.json index 424b57e531e4..fda2a2b568e7 100644 --- a/translations/fr-FR.json +++ b/translations/fr-FR.json @@ -8,7 +8,6 @@ "'none' driver does not support 'minikube docker-env' command": "", "'none' driver does not support 'minikube mount' command": "", "'none' driver does not support 'minikube ssh' command": "", - "==\u003e {{.name}} \u003c==": "", "A firewall is blocking Docker within the minikube VM from reaching the internet. You may need to configure it to use a proxy.": "", "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", @@ -112,6 +111,7 @@ "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "For more information, see:": "", "Found network options:": "", + "Found {{.number}} invalid profile(s) ! ": "", "Group ID: {{.groupID}}": "", "Have you set up libvirt correctly?": "", "If the above advice does not help, please let us know: ": "", @@ -130,10 +130,11 @@ "Mount type: {{.name}}": "", "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", + "No minikube profile was found. You can create one using `minikube start`.": "", "None of known repositories in your location is accessible. Use {{.image_repository_name}} as fallback.": "", "None of known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "", - "Opening %s in your default browser...": "", "Opening kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", + "Opening {{.url}} in your default browser...": "", "Options: {{.options}}": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", "Please check your BIOS, and ensure that you are running without HyperV or other nested virtualization that may interfere": "", @@ -157,9 +158,9 @@ "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", "Related issues:": "", "Relaunching Kubernetes {{.version}} using {{.bootstrapper}} ... ": "", - "Requested disk size {{.size_in_mb}} is less than minimum of {{.size_in_mb2}}": "", + "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "", - "Requested memory allocation {{.size_in_mb}} is less than the minimum allowed of {{.size_in_mb2}}": "", + "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "", "Restarting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Run 'minikube delete' to delete the stale VM": "", "Run 'minikube delete'. If the problem persists, check your proxy or firewall configuration": "", @@ -209,7 +210,7 @@ "Unable to load cached images from config file.": "", "Unable to load cached images: {{.error}}": "", "Unable to load config: {{.error}}": "", - "Unable to parse \"{{.kubenretes_version}}\": {{.error}}": "", + "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "", "Unable to pull images, which may be OK: {{.error}}": "", "Unable to start VM": "", "Unable to stop VM": "", @@ -218,6 +219,7 @@ "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", "Usage: minikube completion SHELL": "", + "Usage:{{if .Runnable}}\n\t{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n\t{{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}\n \n Aliases:\n\t{{.NameAndAliases}}{{end}}{{if .HasExample}}\n \n Examples:\n {{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n \n Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n\t{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n \n Flags:\n {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n \n Global Flags:\n {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\n \n Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n\t{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n \n Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n ": "", "User ID: {{.userID}}": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", @@ -231,10 +233,10 @@ "Wait failed: {{.error}}": "", "Waiting for SSH access ...": "Attendant l'accès SSH ...", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see https://github.com/kubernetes/minikube/blob/master/docs/http_proxy.md for more details": "", + "You can delete them using the following command(s): ": "", "You must specify a service name": "", "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", - "\\n": "", "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addon list failed": "", @@ -246,14 +248,12 @@ "dashboard service is not running: {{.error}}": "", "disable failed": "", "enable failed": "", - "env {{.docker_env}}": "", "error creating clientset": "", "error creating machine client": "", "error getting driver": "", "error parsing the input ip address for mount": "", "error starting tunnel": "", "failed to open browser: {{.error}}": "", - "kube-system": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "", "kubectl has been configured to use {{.name}}": "", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", @@ -268,13 +268,11 @@ "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", "mount failed": "", "need to relocate them. For example, to overwrite your own settings:": "", - "opt {{.docker_option}}": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", "stat failed": "", "unable to bind flags": "", "unable to set logtostderr": "", "unset failed": "", - "unsupported driver: {{.driver_name}}": "", "unsupported driver: {{.name}}": "", "update config": "", "usage: minikube addons configure ADDON_NAME": "", @@ -288,16 +286,12 @@ "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", "zsh completion failed": "", "{{.addonName}} was successfully enabled": "", - "{{.error}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", - "{{.key}}={{.value}}": "", "{{.machine}} IP has been updated to point at {{.ip}}": "", "{{.machine}} IP was already correctly configured for {{.ip}}": "", - "{{.msg}}: {{.err}}": "", "{{.name}} cluster does not exist": "", "{{.name}} has no available configuration options": "", "{{.name}} was successfully configured": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", - "{{.url}}": "", "{{.url}} is not accessible: {{.error}}": "" } \ No newline at end of file diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 2ce56b029610..9794f73b993f 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -8,7 +8,6 @@ "'none' driver does not support 'minikube docker-env' command": "", "'none' driver does not support 'minikube mount' command": "", "'none' driver does not support 'minikube ssh' command": "", - "==\u003e {{.name}} \u003c==": "", "A firewall is blocking Docker within the minikube VM from reaching the internet. You may need to configure it to use a proxy.": "", "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", @@ -112,6 +111,7 @@ "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "For more information, see:": "", "Found network options:": "", + "Found {{.number}} invalid profile(s) ! ": "", "Group ID: {{.groupID}}": "", "Have you set up libvirt correctly?": "", "If the above advice does not help, please let us know: ": "", @@ -130,10 +130,11 @@ "Mount type: {{.name}}": "", "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", + "No minikube profile was found. You can create one using `minikube start`.": "", "None of known repositories in your location is accessible. Use {{.image_repository_name}} as fallback.": "", "None of known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "", - "Opening %s in your default browser...": "", "Opening kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", + "Opening {{.url}} in your default browser...": "", "Options: {{.options}}": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", "Please check your BIOS, and ensure that you are running without HyperV or other nested virtualization that may interfere": "", @@ -157,9 +158,9 @@ "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", "Related issues:": "", "Relaunching Kubernetes {{.version}} using {{.bootstrapper}} ... ": "", - "Requested disk size {{.size_in_mb}} is less than minimum of {{.size_in_mb2}}": "", + "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "", - "Requested memory allocation {{.size_in_mb}} is less than the minimum allowed of {{.size_in_mb2}}": "", + "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "", "Restarting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Run 'minikube delete' to delete the stale VM": "", "Run 'minikube delete'. If the problem persists, check your proxy or firewall configuration": "", @@ -209,7 +210,7 @@ "Unable to load cached images from config file.": "", "Unable to load cached images: {{.error}}": "", "Unable to load config: {{.error}}": "", - "Unable to parse \"{{.kubenretes_version}}\": {{.error}}": "", + "Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "", "Unable to pull images, which may be OK: {{.error}}": "", "Unable to start VM": "", "Unable to stop VM": "", @@ -218,6 +219,7 @@ "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", "Usage: minikube completion SHELL": "", + "Usage:{{if .Runnable}}\n\t{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n\t{{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}\n \n Aliases:\n\t{{.NameAndAliases}}{{end}}{{if .HasExample}}\n \n Examples:\n {{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n \n Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n\t{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n \n Flags:\n {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n \n Global Flags:\n {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\n \n Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n\t{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n \n Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n ": "", "User ID: {{.userID}}": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", @@ -231,10 +233,10 @@ "Wait failed: {{.error}}": "", "Waiting for SSH access ...": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see https://github.com/kubernetes/minikube/blob/master/docs/http_proxy.md for more details": "", + "You can delete them using the following command(s): ": "", "You must specify a service name": "", "Your host does not support KVM virtualization. Ensure that qemu-kvm is installed, and run 'virt-host-validate' to debug the problem": "", "Your host is failing to route packets to the minikube VM. If you have VPN software, try turning it off or configuring it so that it does not re-route traffic to the VM IP. If not, check your VM environment routing options.": "", - "\\n": "", "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addon list failed": "", @@ -246,14 +248,12 @@ "dashboard service is not running: {{.error}}": "", "disable failed": "", "enable failed": "", - "env {{.docker_env}}": "", "error creating clientset": "", "error creating machine client": "", "error getting driver": "", "error parsing the input ip address for mount": "", "error starting tunnel": "", "failed to open browser: {{.error}}": "", - "kube-system": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "", "kubectl has been configured to use {{.name}}": "", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", @@ -268,13 +268,11 @@ "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", "mount failed": "", "need to relocate them. For example, to overwrite your own settings:": "", - "opt {{.docker_option}}": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", "stat failed": "", "unable to bind flags": "", "unable to set logtostderr": "", "unset failed": "", - "unsupported driver: {{.driver_name}}": "", "unsupported driver: {{.name}}": "", "update config": "", "usage: minikube addons configure ADDON_NAME": "", @@ -288,16 +286,12 @@ "usage: minikube profile [MINIKUBE_PROFILE_NAME]": "", "zsh completion failed": "", "{{.addonName}} was successfully enabled": "", - "{{.error}}": "", "{{.extra_option_component_name}}.{{.key}}={{.value}}": "", - "{{.key}}={{.value}}": "", "{{.machine}} IP has been updated to point at {{.ip}}": "", "{{.machine}} IP was already correctly configured for {{.ip}}": "", - "{{.msg}}: {{.err}}": "", "{{.name}} cluster does not exist": "", "{{.name}} has no available configuration options": "", "{{.name}} was successfully configured": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", - "{{.url}}": "", "{{.url}} is not accessible: {{.error}}": "" } \ No newline at end of file From ec6e126d319dfd0943a49e74ebf2523223aaa4a0 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 23 Jul 2019 14:01:41 -0700 Subject: [PATCH 04/11] Add extraction for flags help text --- cmd/minikube/cmd/logs.go | 2 +- cmd/minikube/cmd/root.go | 2 - pkg/minikube/extract/extract.go | 179 +++++++++++++++++++++++++++----- translations/fr-FR.json | 132 +++++++++++++++++++++++ translations/zh-CN.json | 132 +++++++++++++++++++++++ 5 files changed, 417 insertions(+), 30 deletions(-) diff --git a/cmd/minikube/cmd/logs.go b/cmd/minikube/cmd/logs.go index 575762aeba2b..923684512e1c 100644 --- a/cmd/minikube/cmd/logs.go +++ b/cmd/minikube/cmd/logs.go @@ -44,7 +44,7 @@ var ( // logsCmd represents the logs command var logsCmd = &cobra.Command{ Use: "logs", - Short: "Gets the logs of the running instance, used for debugging minikube, not user code", + Short: "Gets the logs of the running instance, used for debugging minikube, not user code.", Long: `Gets the logs of the running instance, used for debugging minikube, not user code.`, Run: func(cmd *cobra.Command, args []string) { cfg, err := config.Load() diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index 5ae1747691bb..a7a08830dc95 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -102,7 +102,6 @@ var RootCmd = &cobra.Command{ // This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() { for _, c := range RootCmd.Commands() { - c.Use = translate.T(c.Use) c.Short = translate.T(c.Short) c.Long = translate.T(c.Long) c.Flags().VisitAll(func(flag *pflag.Flag) { @@ -111,7 +110,6 @@ func Execute() { c.SetUsageTemplate(usageTemplate()) } - RootCmd.Use = translate.T(RootCmd.Use) RootCmd.Short = translate.T(RootCmd.Short) RootCmd.Long = translate.T(RootCmd.Long) RootCmd.Flags().VisitAll(func(flag *pflag.Flag) { diff --git a/pkg/minikube/extract/extract.go b/pkg/minikube/extract/extract.go index 675d92fb2f44..f3a586e07128 100644 --- a/pkg/minikube/extract/extract.go +++ b/pkg/minikube/extract/extract.go @@ -193,6 +193,11 @@ func checkNode(stmt ast.Node, e *state) { if expr, ok := stmt.(*ast.CallExpr); ok { checkCallExpression(expr, e) } + + // Check all key value pairs for possible help text + if kvp, ok := stmt.(*ast.KeyValueExpr); ok { + checkKeyValueExpression(kvp, e) + } } // checkCallExpression takes a function call, and checks its arguments for strings @@ -215,6 +220,10 @@ func checkCallExpression(s *ast.CallExpr, e *state) { // Parse out the package of the call sfi, ok := sf.X.(*ast.Ident) if !ok { + if sfc, ok := sf.X.(*ast.CallExpr); ok { + extractFlagHelpText(s, sfc, e) + return + } return } packageName = sfi.Name @@ -246,7 +255,8 @@ func checkArguments(s *ast.CallExpr, e *state) { for _, arg := range s.Args { // This argument is an identifier. if i, ok := arg.(*ast.Ident); ok { - if checkIdentForStringValue(i, e) { + if s := checkIdentForStringValue(i, e); s != "" { + e.translations[s] = "" matched = true break } @@ -254,7 +264,8 @@ func checkArguments(s *ast.CallExpr, e *state) { // This argument is a string. if argString, ok := arg.(*ast.BasicLit); ok { - if addStringToList(argString.Value, e) { + if s := checkString(argString.Value, e); s != "" { + e.translations[s] = "" matched = true break } @@ -268,38 +279,47 @@ func checkArguments(s *ast.CallExpr, e *state) { } // checkIdentForStringValye takes a identifier and sees if it's a variable assigned to a string -func checkIdentForStringValue(i *ast.Ident, e *state) bool { +func checkIdentForStringValue(i *ast.Ident, e *state) string { // This identifier is nil if i.Obj == nil { - return false + return "" } - as, ok := i.Obj.Decl.(*ast.AssignStmt) - - // This identifier wasn't assigned anything - if !ok { - return false - } + var s string - rhs, ok := as.Rhs[0].(*ast.BasicLit) + // This identifier was directly assigned a value + if as, ok := i.Obj.Decl.(*ast.AssignStmt); ok { + if rhs, ok := as.Rhs[0].(*ast.BasicLit); ok { + s = rhs.Value + } - // This identifier was not assigned a string/basic value - if !ok { - return false } - if addStringToList(rhs.Value, e) { - return true + // This Identifier is part of the const or var declaration + if vs, ok := i.Obj.Decl.(*ast.ValueSpec); ok { + for j, n := range vs.Names { + if n.Name == i.Name { + if len(vs.Values) < j+1 { + // There's no way anything was assigned here, abort + return "" + } + if v, ok := vs.Values[j].(*ast.BasicLit); ok { + s = v.Value + break + } + } + } } - return false + return checkString(s, e) + } -// addStringToList takes a string, makes sure it's meant to be translated then adds it to the list if so -func addStringToList(s string, e *state) bool { +// checkString checks if a string is meant to be translated +func checkString(s string, e *state) string { // Empty strings don't need translating if len(s) <= 2 { - return false + return "" } // Parse out quote marks @@ -307,29 +327,107 @@ func addStringToList(s string, e *state) bool { // Don't translate integers if _, err := strconv.Atoi(stringToTranslate); err == nil { - return false + return "" } // Don't translate URLs if u, err := url.Parse(stringToTranslate); err == nil && u.Scheme != "" && u.Host != "" { - return false + return "" } // Don't translate commands if strings.HasPrefix(stringToTranslate, "sudo ") { - return false + return "" } // Don't translate blacklisted strings for _, b := range blacklist { if b == stringToTranslate { - return false + return "" } } // Hooray, we can translate the string! - e.translations[stringToTranslate] = "" - return true + return stringToTranslate +} + +// checkKeyValueExpression checks all kvps for help text +func checkKeyValueExpression(kvp *ast.KeyValueExpr, e *state) { + // The key must be an identifier + i, ok := kvp.Key.(*ast.Ident) + if !ok { + return + } + + // Specifically, it needs to be "Short" or "Long" + if i.Name == "Short" || i.Name == "Long" { + // The help text is directly a string, the most common case + if help, ok := kvp.Value.(*ast.BasicLit); ok { + s := checkString(help.Value, e) + if s != "" { + e.translations[s] = "" + } + } + + // The help text is assigned to a variable, only happens if it's very long + if help, ok := kvp.Value.(*ast.Ident); ok { + s := checkIdentForStringValue(help, e) + if s != "" { + e.translations[s] = "" + } + } + + // Ok now this is just a mess + if help, ok := kvp.Value.(*ast.BinaryExpr); ok { + s := checkBinaryExpression(help, e) + if s != "" { + e.translations[s] = "" + } + } + } +} + +func checkBinaryExpression(b *ast.BinaryExpr, e *state) string { + // Check the left side + var s string + if l, ok := b.X.(*ast.BasicLit); ok { + if x := checkString(l.Value, e); x != "" { + s += x + } + } + + if i, ok := b.X.(*ast.Ident); ok { + if x := checkIdentForStringValue(i, e); x != "" { + s += x + } + } + + if b1, ok := b.X.(*ast.BinaryExpr); ok { + if x := checkBinaryExpression(b1, e); x != "" { + s += x + } + } + + //Check the right side + if l, ok := b.Y.(*ast.BasicLit); ok { + if x := checkString(l.Value, e); x != "" { + s += x + } + } + + if i, ok := b.Y.(*ast.Ident); ok { + if x := checkIdentForStringValue(i, e); x != "" { + s += x + } + } + + if b1, ok := b.Y.(*ast.BinaryExpr); ok { + if x := checkBinaryExpression(b1, e); x != "" { + s += x + } + } + + return s } // writeStringsToFiles writes translations to all translation files in output @@ -410,10 +508,37 @@ func extractAdvice(f ast.Node, e *state) error { if i.Name == "Advice" { // At this point we know the value in the kvp is guaranteed to be a string advice, _ := kvp.Value.(*ast.BasicLit) - addStringToList(advice.Value, e) + s := checkString(advice.Value, e) + if s != "" { + e.translations[s] = "" + } } return true }) return nil } + +// extractFlagHelpText finds usage text for all command flags and adds them to the list to translate +func extractFlagHelpText(c *ast.CallExpr, sfc *ast.CallExpr, e *state) { + // We're looking for calls of the form cmd.Flags().VarP() + flags, ok := sfc.Fun.(*ast.SelectorExpr) + if !ok { + return + } + + if flags.Sel.Name != "Flags" || len(c.Args) == 1 { + return + } + + // The usage text for flags is always the final argument in the Flags() call + usage, ok := c.Args[len(c.Args)-1].(*ast.BasicLit) + if !ok { + // Something has gone wrong, abort + return + } + s := checkString(usage.Value, e) + if s != "" { + e.translations[s] = "" + } +} diff --git a/translations/fr-FR.json b/translations/fr-FR.json index fda2a2b568e7..9fc3ea3017b6 100644 --- a/translations/fr-FR.json +++ b/translations/fr-FR.json @@ -1,4 +1,5 @@ { + "\n\tOutputs minikube shell completion for the given shell (bash or zsh)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash-completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n": "", "\"{{.minikube_addon}}\" was successfully disabled": "", "\"{{.name}}\" cluster does not exist": "", "\"{{.profile_name}}\" VM does not exist, nothing to stop": "", @@ -11,20 +12,47 @@ "A firewall is blocking Docker within the minikube VM from reaching the internet. You may need to configure it to use a proxy.": "", "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "", + "Access the kubernetes dashboard running within the minikube cluster": "", + "Add an image to local cache.": "", + "Add machine IP to NO_PROXY environment variable": "", + "Add or delete an image from the local cache.": "", + "Additional mount options, such as cache=fscache": "", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", "Alternatively, you may delete the existing VM using `minikube delete -p {{.profile_name}}`": "", + "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", + "Amount of time to wait for a service in seconds": "", + "Amount of time to wait for service in seconds": "", "Cannot find directory {{.path}} for mount": "", "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "", "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list ": "", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "Configurant l'environment pour Kubernetes {{.k8sVersion}} sur {{.runtime}} {{.runtimeVersion}}", "Configuring local host environment ...": "", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn": "", "Creating %s VM (CPUs=%d, Memory=%dMB, Disk=%dMB) ...": "Créant un VM %s (CPUs=%d, Mémoire=%dMB, Disque=%dMB)", "Creating mount {{.name}} ...": "", "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "Default group id used for the mount": "", + "Default user id used for the mount": "", + "Delete an image from the local cache.": "", + "Deletes a local kubernetes cluster": "", + "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "", "Disable Hyper-V when you want to run VirtualBox to boot the VM": "", + "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox)": "", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", "Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", + "Display dashboard URL instead of opening a browser": "", + "Display the kubernetes addons URL in the CLI instead of opening it in the default browser": "", + "Display the kubernetes service URL in the CLI instead of opening it in the default browser": "", + "Display values currently set in the minikube config file": "", + "Display values currently set in the minikube config file.": "", "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", "Documentation: {{.url}}": "", "Done! kubectl is now configured to use {{.name}}": "Fini! kubectl est maintenant configuré pour utiliser {{.name}}.", @@ -34,7 +62,13 @@ "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", "ERROR creating `registry-creds-gcr` secret: {{.error}}": "", + "Enable experimental NVIDIA GPU support in minikube": "", + "Enable host resolver for NAT DNS requests (virtualbox)": "", + "Enable proxy for NAT DNS requests (virtualbox)": "", + "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\\"": "", + "Enables the addon w/ADDON_NAME within minikube (example: minikube addons enable dashboard). For a list of available addons use: minikube addons list ": "", "Enabling dashboard ...": "", + "Environment variables to pass to the Docker daemon. (format: key=value)": "", "Error checking driver version: {{.error}}": "", "Error creating list template": "", "Error creating minikube directory": "", @@ -107,35 +141,75 @@ "Failed to update cluster": "", "Failed to update config": "", "Failed unmount: {{.error}}": "", + "File permissions used for the mount": "", "Follow": "", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "For more information, see:": "", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", "Found network options:": "", "Found {{.number}} invalid profile(s) ! ": "", + "Gets the kubernetes URL(s) for the specified service in your local cluster": "", + "Gets the kubernetes URL(s) for the specified service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "", + "Gets the status of a local kubernetes cluster": "", + "Gets the status of a local kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for kubernetes NOK)": "", + "Gets the value of PROPERTY_NAME from the minikube config file": "", + "Go template format string for the addon list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#AddonListTemplate": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", + "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", + "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", "Group ID: {{.groupID}}": "", "Have you set up libvirt correctly?": "", + "Hide the hypervisor signature from the guest in minikube": "", "If the above advice does not help, please let us know: ": "", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "", + "If true, only download and cache files for later use - don't install or start anything.": "", "If using the none driver, ensure that systemctl is installed": "", "Ignoring --vm-driver={{.driver_name}}, as the existing \"{{.profile_name}}\" VM was created using the {{.driver_name2}} driver.": "", "In some environments, this message is incorrect. Try 'minikube start --no-vtx-check'": "", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox, ensure that VBoxManage is executable and in path, or select an alternative value for --vm-driver": "", "Install the latest kvm2 driver and run 'virt-host-validate'": "", "Install the latest minikube hyperkit driver, and run 'minikube delete'": "", "Invalid size passed in argument: {{.error}}": "", "IsEnabled failed": "", + "Kill the mount process spawned by minikube start": "", "Kubernetes downgrade is not supported, will continue to use {{.version}}": "", "Launching Kubernetes ... ": "Lançant Kubernetes ...", "Launching proxy ...": "", + "List all available images from the local cache.": "", + "List of guest VSock ports that should be exposed as sockets on the host (Only supported on with hyperkit now).": "", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", + "Lists all minikube profiles.": "", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "", + "Lists the URLs for the services in your local cluster": "", + "Local folders to share with Guest via NFS mounts (Only supported on with hyperkit now)": "", + "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock.": "", + "Location of the minikube iso": "", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'": "", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", "Message Size: {{.size}}": "", + "Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows.": "", + "Minikube is a tool for managing local Kubernetes clusters.": "", + "Modify minikube config": "", + "Modify minikube's kubernetes addons": "", "Mount type: {{.name}}": "", "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", + "Mounts the specified directory into minikube": "", + "Mounts the specified directory into minikube.": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", "No minikube profile was found. You can create one using `minikube start`.": "", "None of known repositories in your location is accessible. Use {{.image_repository_name}} as fallback.": "", "None of known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "", + "Number of CPUs allocated to the minikube VM": "", + "Number of lines back to go within the log": "", + "Open the addons URL with https instead of http": "", + "Open the service URL with https instead of http": "", "Opening kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening {{.url}} in your default browser...": "", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", "Options: {{.options}}": "", + "Outputs minikube shell completion for the given shell (bash or zsh)": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", "Please check your BIOS, and ensure that you are running without HyperV or other nested virtualization that may interfere": "", "Please don't run minikube as root or with 'sudo' privileges. It isn't necessary with {{.driver}} driver.": "", @@ -147,14 +221,20 @@ "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please upgrade the 'docker-machine-driver-kvm2'. {{.documentation_url}}": "", "Powering off \"{{.profile_name}}\" via SSH ...": "", + "Print current and latest version number": "", + "Print the version of minikube": "", + "Print the version of minikube.": "", "Problems detected in {{.entry}}:": "", "Problems detected in {{.name}}:": "", + "Profile gets or sets the current minikube profile": "", + "Provide VM UUID to restore MAC address (only supported with Hyperkit driver).": "", "Pulling images ...": "Extrayant les images ... ", "Re-run 'minikube start' with --alsologtostderr -v=8 to see the VM driver error message": "", "Re-using the currently running {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Reboot to complete VirtualBox installation, and verify that VirtualBox is not blocked by your system": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", + "Registry mirrors to pass to the Docker daemon": "", "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", "Related issues:": "", "Relaunching Kubernetes {{.version}} using {{.bootstrapper}} ... ": "", @@ -162,13 +242,27 @@ "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "", "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "", "Restarting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", + "Retrieve the ssh identity key path of the specified cluster": "", + "Retrieve the ssh identity key path of the specified cluster.": "", + "Retrieves the IP address of the running cluster": "", + "Retrieves the IP address of the running cluster, and writes it to STDOUT.": "", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", "Run 'minikube delete' to delete the stale VM": "", "Run 'minikube delete'. If the problem persists, check your proxy or firewall configuration": "", "Run 'sudo modprobe vboxdrv' and reinstall VirtualBox if it fails.": "", + "Run kubectl": "", "Run minikube from the C: drive.": "", + "Run the kubernetes client, download it if necessary.\nExamples:\nminikube kubectl -- --help\nkubectl get pods --namespace kube-system": "", "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", "Set failed": "", + "Sets an individual value in a minikube config file": "", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", + "Sets up docker env variables; similar to '$(docker-machine env)'": "", + "Sets up docker env variables; similar to '$(docker-machine env)'.": "", "Setting profile failed": "", + "Show only log entries which point to known problems": "", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", "Skipped switching kubectl context for {{.profile_name}} , because --keep-context": "", "Sorry that minikube crashed. If this was unexpected, we would love to hear from you:": "", "Sorry, completion support is not yet implemented for {{.name}}": "", @@ -176,24 +270,50 @@ "Sorry, url provided with --registry-mirror flag is invalid {{.url}}": "", "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "", + "Specify the 9p version that the mount should use": "", + "Specify the ip that the mount should be setup on": "", + "Specify the mount filesystem type (supported types: 9p)": "", + "Starts a local kubernetes cluster": "", "Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "", + "Stops a local kubernetes cluster running in Virtualbox. This command stops the VM\nitself, leaving all files intact. The cluster can be started again with the \"start\" command.": "", + "Stops a running local kubernetes cluster": "", "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", "Suggestion: {{.advice}}": "", "Target directory {{.path}} must be an absolute path": "", "The \"{{.cluster_name}}\" cluster has been deleted.": "", "The 'docker-machine-driver-kvm2' version is old. Please consider upgrading. {{.documentation_url}}": "", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "", + "The CIDR to be used for service cluster IPs.": "", + "The CIDR to be used for the minikube VM (only supported with Virtualbox driver)": "", + "The KVM QEMU connection URI. (works only with kvm2 driver on linux)": "", "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The KVM network name. (only supported with KVM driver)": "", "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", + "The apiserver listening port": "", + "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "The argument to pass the minikube mount command on start": "", + "The cluster dns domain name used in the kubernetes cluster": "", + "The container runtime to be used (docker, crio, containerd)": "", + "The cri socket path to be used": "", "The docker host is currently not running": "", "The docker service is currently not active": "", + "The hyperv virtual switch name. Defaults to first found. (only supported with HyperV driver)": "", + "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "", "The minikube VM is offline. Please run 'minikube start' to start it again.": "", + "The name of the network plugin": "", + "The number of bytes to use for 9p packet payload": "", + "The service namespace": "", + "The services namespace": "", + "The time interval for each check that wait performs in seconds": "", "The value passed to --format is invalid": "", "The value passed to --format is invalid: {{.error}}": "", "The vmwarefusion driver is deprecated and support for it will be removed in a future release.\n\t\t\tPlease consider switching to the new vmware unified driver, which is intended to replace the vmwarefusion driver.\n\t\t\tSee https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#vmware-unified-driver for more information.\n\t\t\tTo disable this message, run [minikube config set ShowDriverDeprecationNotification false]": "", "These changes will take effect upon a minikube delete and then a minikube start": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", + "This will keep the existing kubectl context and will create a minikube context.": "", + "This will start the mount daemon and automatically mount files into minikube": "", "Tip: Use 'minikube start -p \u003cname\u003e' to create a new cluster, or 'minikube delete' to delete this one.": "", "To connect to this cluster, use: kubectl --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", @@ -216,6 +336,7 @@ "Unable to stop VM": "", "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "", "Unmounting {{.path}} ...": "", + "Unset variables instead of setting them": "", "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", "Usage: minikube completion SHELL": "", @@ -225,13 +346,16 @@ "Userspace file server: ": "", "Using image repository {{.name}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", + "Verify the IP address of the running cluster in kubeconfig.": "", "Verifying dashboard health ...": "", "Verifying proxy health ...": "", "Verifying:": "Vérifiant:", "Version: {{.version}}": "", "Wait failed": "", "Wait failed: {{.error}}": "", + "Wait until Kubernetes core services are healthy before exiting": "", "Waiting for SSH access ...": "Attendant l'accès SSH ...", + "Where to root the NFS Shares (defaults to /nfsshares, only supported with hyperkit now)": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see https://github.com/kubernetes/minikube/blob/master/docs/http_proxy.md for more details": "", "You can delete them using the following command(s): ": "", "You must specify a service name": "", @@ -240,10 +364,13 @@ "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addon list failed": "", + "addons modifies minikube addons files using subcommands like \"minikube addons enable heapster\"": "", "api load": "", "bash completion failed": "", "browser failed to open url: {{.error}}": "", + "call with cleanup=true to remove old tunnels": "", "command runner": "", + "config modifies minikube config files using subcommands like \"minikube config set vm-driver kvm\"\nConfigurable fields: \\n\\n": "", "config view failed": "", "dashboard service is not running: {{.error}}": "", "disable failed": "", @@ -268,11 +395,16 @@ "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", "mount failed": "", "need to relocate them. For example, to overwrite your own settings:": "", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", "stat failed": "", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP": "", + "tunnel makes services of type LoadBalancer accessible on localhost": "", "unable to bind flags": "", "unable to set logtostderr": "", "unset failed": "", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", + "unsets an individual value in a minikube config file": "", "unsupported driver: {{.name}}": "", "update config": "", "usage: minikube addons configure ADDON_NAME": "", diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 9794f73b993f..83571fcc34f9 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -1,4 +1,5 @@ { + "\n\tOutputs minikube shell completion for the given shell (bash or zsh)\n\n\tThis depends on the bash-completion binary. Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion # for zsh users\n\t\t$ source ~/.minikube-completion\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash-completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n": "", "\"{{.minikube_addon}}\" was successfully disabled": "", "\"{{.name}}\" cluster does not exist": "", "\"{{.profile_name}}\" VM does not exist, nothing to stop": "", @@ -11,20 +12,47 @@ "A firewall is blocking Docker within the minikube VM from reaching the internet. You may need to configure it to use a proxy.": "", "A firewall is interfering with minikube's ability to make outgoing HTTPS requests. You may need to change the value of the HTTPS_PROXY environment variable.": "", "A firewall is likely blocking minikube from reaching the internet. You may need to configure minikube to use a proxy.": "", + "A set of apiserver IP Addresses which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of apiserver names which are used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "A set of key=value pairs that describe feature gates for alpha/experimental features.": "", + "Access the kubernetes dashboard running within the minikube cluster": "", + "Add an image to local cache.": "", + "Add machine IP to NO_PROXY environment variable": "", + "Add or delete an image from the local cache.": "", + "Additional mount options, such as cache=fscache": "", + "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", "Alternatively, you may delete the existing VM using `minikube delete -p {{.profile_name}}`": "", + "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", + "Amount of time to wait for a service in seconds": "", + "Amount of time to wait for service in seconds": "", "Cannot find directory {{.path}} for mount": "", "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "", "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", + "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list ": "", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "开始为Kubernetes {{.k8sVersion}},{{.runtime}} {{.runtimeVersion}} 配置环境变量", "Configuring local host environment ...": "", + "Country code of the image mirror to be used. Leave empty to use the global one. For Chinese mainland users, set it to cn": "", "Creating %s VM (CPUs=%d, Memory=%dMB, Disk=%dMB) ...": "正在创建%s虚拟机(CPU=%d,内存=%dMB,磁盘=%dMB)...", "Creating mount {{.name}} ...": "", "Creating {{.driver_name}} VM (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", + "Default group id used for the mount": "", + "Default user id used for the mount": "", + "Delete an image from the local cache.": "", + "Deletes a local kubernetes cluster": "", + "Deletes a local kubernetes cluster. This command deletes the VM, and removes all\nassociated files.": "", "Deleting \"{{.profile_name}}\" in {{.driver_name}} ...": "", "Disable Hyper-V when you want to run VirtualBox to boot the VM": "", + "Disable checking for the availability of hardware virtualization before the vm is started (virtualbox)": "", "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", "Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", + "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", + "Display dashboard URL instead of opening a browser": "", + "Display the kubernetes addons URL in the CLI instead of opening it in the default browser": "", + "Display the kubernetes service URL in the CLI instead of opening it in the default browser": "", + "Display values currently set in the minikube config file": "", + "Display values currently set in the minikube config file.": "", "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", "Documentation: {{.url}}": "", "Done! kubectl is now configured to use {{.name}}": "完成!kubectl已经配置至{{.name}}", @@ -34,7 +62,13 @@ "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", "ERROR creating `registry-creds-gcr` secret: {{.error}}": "", + "Enable experimental NVIDIA GPU support in minikube": "", + "Enable host resolver for NAT DNS requests (virtualbox)": "", + "Enable proxy for NAT DNS requests (virtualbox)": "", + "Enable the default CNI plugin (/etc/cni/net.d/k8s.conf). Used in conjunction with \\\"--network-plugin=cni\\\"": "", + "Enables the addon w/ADDON_NAME within minikube (example: minikube addons enable dashboard). For a list of available addons use: minikube addons list ": "", "Enabling dashboard ...": "", + "Environment variables to pass to the Docker daemon. (format: key=value)": "", "Error checking driver version: {{.error}}": "", "Error creating list template": "", "Error creating minikube directory": "", @@ -107,35 +141,75 @@ "Failed to update cluster": "", "Failed to update config": "", "Failed unmount: {{.error}}": "", + "File permissions used for the mount": "", "Follow": "", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "For more information, see:": "", + "Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, bash, zsh], default is auto-detect": "", "Found network options:": "", "Found {{.number}} invalid profile(s) ! ": "", + "Gets the kubernetes URL(s) for the specified service in your local cluster": "", + "Gets the kubernetes URL(s) for the specified service in your local cluster. In the case of multiple URLs they will be printed one at a time.": "", + "Gets the logs of the running instance, used for debugging minikube, not user code.": "", + "Gets the status of a local kubernetes cluster": "", + "Gets the status of a local kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for kubernetes NOK)": "", + "Gets the value of PROPERTY_NAME from the minikube config file": "", + "Go template format string for the addon list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#AddonListTemplate": "", + "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", + "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", + "Go template format string for the status output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status": "", "Group ID: {{.groupID}}": "", "Have you set up libvirt correctly?": "", + "Hide the hypervisor signature from the guest in minikube": "", "If the above advice does not help, please let us know: ": "", + "If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --vm-driver=none.": "", + "If true, only download and cache files for later use - don't install or start anything.": "", "If using the none driver, ensure that systemctl is installed": "", "Ignoring --vm-driver={{.driver_name}}, as the existing \"{{.profile_name}}\" VM was created using the {{.driver_name2}} driver.": "", "In some environments, this message is incorrect. Try 'minikube start --no-vtx-check'": "", + "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox, ensure that VBoxManage is executable and in path, or select an alternative value for --vm-driver": "", "Install the latest kvm2 driver and run 'virt-host-validate'": "", "Install the latest minikube hyperkit driver, and run 'minikube delete'": "", "Invalid size passed in argument: {{.error}}": "", "IsEnabled failed": "", + "Kill the mount process spawned by minikube start": "", "Kubernetes downgrade is not supported, will continue to use {{.version}}": "", "Launching Kubernetes ... ": "正在启动 Kubernetes ... ", "Launching proxy ...": "", + "List all available images from the local cache.": "", + "List of guest VSock ports that should be exposed as sockets on the host (Only supported on with hyperkit now).": "", + "Lists all available minikube addons as well as their current statuses (enabled/disabled)": "", + "Lists all minikube profiles.": "", + "Lists all valid minikube profiles and detects all possible invalid profiles.": "", + "Lists the URLs for the services in your local cluster": "", + "Local folders to share with Guest via NFS mounts (Only supported on with hyperkit now)": "", + "Location of the VPNKit socket used for networking. If empty, disables Hyperkit VPNKitSock, if 'auto' uses Docker for Mac VPNKit connection, otherwise uses the specified VSock.": "", + "Location of the minikube iso": "", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'": "", + "Log into or run a command on a machine with SSH; similar to 'docker-machine ssh'.": "", "Message Size: {{.size}}": "", + "Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows.": "", + "Minikube is a tool for managing local Kubernetes clusters.": "", + "Modify minikube config": "", + "Modify minikube's kubernetes addons": "", "Mount type: {{.name}}": "", "Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "", + "Mounts the specified directory into minikube": "", + "Mounts the specified directory into minikube.": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", "No minikube profile was found. You can create one using `minikube start`.": "", "None of known repositories in your location is accessible. Use {{.image_repository_name}} as fallback.": "", "None of known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "", + "Number of CPUs allocated to the minikube VM": "", + "Number of lines back to go within the log": "", + "Open the addons URL with https instead of http": "", + "Open the service URL with https instead of http": "", "Opening kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", "Opening {{.url}} in your default browser...": "", + "Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "", "Options: {{.options}}": "", + "Outputs minikube shell completion for the given shell (bash or zsh)": "", "Permissions: {{.octalMode}} ({{.writtenMode}})": "", "Please check your BIOS, and ensure that you are running without HyperV or other nested virtualization that may interfere": "", "Please don't run minikube as root or with 'sudo' privileges. It isn't necessary with {{.driver}} driver.": "", @@ -147,14 +221,20 @@ "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", "Please upgrade the 'docker-machine-driver-kvm2'. {{.documentation_url}}": "", "Powering off \"{{.profile_name}}\" via SSH ...": "", + "Print current and latest version number": "", + "Print the version of minikube": "", + "Print the version of minikube.": "", "Problems detected in {{.entry}}:": "", "Problems detected in {{.name}}:": "", + "Profile gets or sets the current minikube profile": "", + "Provide VM UUID to restore MAC address (only supported with Hyperkit driver).": "", "Pulling images ...": "拉取镜像 ...", "Re-run 'minikube start' with --alsologtostderr -v=8 to see the VM driver error message": "", "Re-using the currently running {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Reboot to complete VirtualBox installation, and verify that VirtualBox is not blocked by your system": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", + "Registry mirrors to pass to the Docker daemon": "", "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", "Related issues:": "", "Relaunching Kubernetes {{.version}} using {{.bootstrapper}} ... ": "", @@ -162,13 +242,27 @@ "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "", "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "", "Restarting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", + "Retrieve the ssh identity key path of the specified cluster": "", + "Retrieve the ssh identity key path of the specified cluster.": "", + "Retrieves the IP address of the running cluster": "", + "Retrieves the IP address of the running cluster, and writes it to STDOUT.": "", + "Retrieves the IP address of the running cluster, checks it\n\t\t\twith IP in kubeconfig, and corrects kubeconfig if incorrect.": "", + "Returns the value of PROPERTY_NAME from the minikube config file. Can be overwritten at runtime by flags or environmental variables.": "", "Run 'minikube delete' to delete the stale VM": "", "Run 'minikube delete'. If the problem persists, check your proxy or firewall configuration": "", "Run 'sudo modprobe vboxdrv' and reinstall VirtualBox if it fails.": "", + "Run kubectl": "", "Run minikube from the C: drive.": "", + "Run the kubernetes client, download it if necessary.\nExamples:\nminikube kubectl -- --help\nkubectl get pods --namespace kube-system": "", "Running on localhost (CPUs={{.number_of_cpus}}, Memory={{.memory_size}}MB, Disk={{.disk_size}}MB) ...": "", "Set failed": "", + "Sets an individual value in a minikube config file": "", + "Sets the PROPERTY_NAME config value to PROPERTY_VALUE\n\tThese values can be overwritten by flags or environment variables at runtime.": "", + "Sets up docker env variables; similar to '$(docker-machine env)'": "", + "Sets up docker env variables; similar to '$(docker-machine env)'.": "", "Setting profile failed": "", + "Show only log entries which point to known problems": "", + "Show only the most recent journal entries, and continuously print new entries as they are appended to the journal.": "", "Skipped switching kubectl context for {{.profile_name}} , because --keep-context": "", "Sorry that minikube crashed. If this was unexpected, we would love to hear from you:": "", "Sorry, completion support is not yet implemented for {{.name}}": "", @@ -176,24 +270,50 @@ "Sorry, url provided with --registry-mirror flag is invalid {{.url}}": "", "Specify --kubernetes-version in v\u003cmajor\u003e.\u003cminor.\u003cbuild\u003e form. example: 'v1.1.14'": "", "Specify an alternate --host-only-cidr value, such as 172.16.0.1/24": "", + "Specify arbitrary flags to pass to the Docker daemon. (format: key=value)": "", + "Specify the 9p version that the mount should use": "", + "Specify the ip that the mount should be setup on": "", + "Specify the mount filesystem type (supported types: 9p)": "", + "Starts a local kubernetes cluster": "", "Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "", + "Stops a local kubernetes cluster running in Virtualbox. This command stops the VM\nitself, leaving all files intact. The cluster can be started again with the \"start\" command.": "", + "Stops a running local kubernetes cluster": "", "Successfully mounted {{.sourcePath}} to {{.destinationPath}}": "", "Suggestion: {{.advice}}": "", "Target directory {{.path}} must be an absolute path": "", "The \"{{.cluster_name}}\" cluster has been deleted.": "", "The 'docker-machine-driver-kvm2' version is old. Please consider upgrading. {{.documentation_url}}": "", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "", + "The CIDR to be used for service cluster IPs.": "", + "The CIDR to be used for the minikube VM (only supported with Virtualbox driver)": "", + "The KVM QEMU connection URI. (works only with kvm2 driver on linux)": "", "The KVM driver is unable to resurrect this old VM. Please run `minikube delete` to delete it and try again.": "", + "The KVM network name. (only supported with KVM driver)": "", "The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error": "", + "The apiserver listening port": "", + "The apiserver name which is used in the generated certificate for kubernetes. This can be used if you want to make the apiserver available from outside the machine": "", + "The argument to pass the minikube mount command on start": "", + "The cluster dns domain name used in the kubernetes cluster": "", + "The container runtime to be used (docker, crio, containerd)": "", + "The cri socket path to be used": "", "The docker host is currently not running": "", "The docker service is currently not active": "", + "The hyperv virtual switch name. Defaults to first found. (only supported with HyperV driver)": "", + "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "", "The minikube VM is offline. Please run 'minikube start' to start it again.": "", + "The name of the network plugin": "", + "The number of bytes to use for 9p packet payload": "", + "The service namespace": "", + "The services namespace": "", + "The time interval for each check that wait performs in seconds": "", "The value passed to --format is invalid": "", "The value passed to --format is invalid: {{.error}}": "", "The vmwarefusion driver is deprecated and support for it will be removed in a future release.\n\t\t\tPlease consider switching to the new vmware unified driver, which is intended to replace the vmwarefusion driver.\n\t\t\tSee https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#vmware-unified-driver for more information.\n\t\t\tTo disable this message, run [minikube config set ShowDriverDeprecationNotification false]": "", "These changes will take effect upon a minikube delete and then a minikube start": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", + "This will keep the existing kubectl context and will create a minikube context.": "", + "This will start the mount daemon and automatically mount files into minikube": "", "Tip: Use 'minikube start -p \u003cname\u003e' to create a new cluster, or 'minikube delete' to delete this one.": "", "To connect to this cluster, use: kubectl --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", @@ -216,6 +336,7 @@ "Unable to stop VM": "", "Uninstalling Kubernetes {{.kubernetes_version}} using {{.bootstrapper_name}} ...": "", "Unmounting {{.path}} ...": "", + "Unset variables instead of setting them": "", "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", "Usage: minikube completion SHELL": "", @@ -225,13 +346,16 @@ "Userspace file server: ": "", "Using image repository {{.name}}": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", + "Verify the IP address of the running cluster in kubeconfig.": "", "Verifying dashboard health ...": "", "Verifying proxy health ...": "", "Verifying:": "正在验证:", "Version: {{.version}}": "", "Wait failed": "", "Wait failed: {{.error}}": "", + "Wait until Kubernetes core services are healthy before exiting": "", "Waiting for SSH access ...": "", + "Where to root the NFS Shares (defaults to /nfsshares, only supported with hyperkit now)": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see https://github.com/kubernetes/minikube/blob/master/docs/http_proxy.md for more details": "", "You can delete them using the following command(s): ": "", "You must specify a service name": "", @@ -240,10 +364,13 @@ "addon '{{.name}}' is currently not enabled.\nTo enable this addon run:\nminikube addons enable {{.name}}": "", "addon '{{.name}}' is not a valid addon packaged with minikube.\nTo see the list of available addons run:\nminikube addons list": "", "addon list failed": "", + "addons modifies minikube addons files using subcommands like \"minikube addons enable heapster\"": "", "api load": "", "bash completion failed": "", "browser failed to open url: {{.error}}": "", + "call with cleanup=true to remove old tunnels": "", "command runner": "", + "config modifies minikube config files using subcommands like \"minikube config set vm-driver kvm\"\nConfigurable fields: \\n\\n": "", "config view failed": "", "dashboard service is not running: {{.error}}": "", "disable failed": "", @@ -268,11 +395,16 @@ "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", "mount failed": "", "need to relocate them. For example, to overwrite your own settings:": "", + "profile sets the current minikube profile, or gets the current profile if no arguments are provided. This is used to run and manage multiple minikube instance. You can return to the default minikube profile by running `minikube profile default`": "", "service {{.namespace_name}}/{{.service_name}} has no node port": "", "stat failed": "", + "tunnel creates a route to services deployed with type LoadBalancer and sets their Ingress to their ClusterIP": "", + "tunnel makes services of type LoadBalancer accessible on localhost": "", "unable to bind flags": "", "unable to set logtostderr": "", "unset failed": "", + "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", + "unsets an individual value in a minikube config file": "", "unsupported driver: {{.name}}": "", "update config": "", "usage: minikube addons configure ADDON_NAME": "", From f8b54827b904a4729854d22569453b6272a559bc Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 23 Jul 2019 14:09:58 -0700 Subject: [PATCH 05/11] some comments for extract --- pkg/minikube/extract/extract.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/minikube/extract/extract.go b/pkg/minikube/extract/extract.go index f3a586e07128..70cfffde2ffc 100644 --- a/pkg/minikube/extract/extract.go +++ b/pkg/minikube/extract/extract.go @@ -250,6 +250,7 @@ func checkCallExpression(s *ast.CallExpr, e *state) { checkArguments(s, e) } +// checkArguments checks the arguments of a function call for strings func checkArguments(s *ast.CallExpr, e *state) { matched := false for _, arg := range s.Args { @@ -272,6 +273,7 @@ func checkArguments(s *ast.CallExpr, e *state) { } } + // No string arguments were found, check everything the calls this function for strings if !matched { addParentFuncToList(e) } @@ -387,6 +389,7 @@ func checkKeyValueExpression(kvp *ast.KeyValueExpr, e *state) { } } +// checkBinaryExpression checks binary expressions, stuff of the form x + y, for strings and concats them func checkBinaryExpression(b *ast.BinaryExpr, e *state) string { // Check the left side var s string From d25832ab77b9ed49e2ec4c68d33bad1095f99067 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Tue, 23 Jul 2019 15:07:30 -0700 Subject: [PATCH 06/11] refactor to account for new behavior --- pkg/minikube/extract/extract.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pkg/minikube/extract/extract.go b/pkg/minikube/extract/extract.go index 70cfffde2ffc..2ee8cbb281b9 100644 --- a/pkg/minikube/extract/extract.go +++ b/pkg/minikube/extract/extract.go @@ -256,7 +256,7 @@ func checkArguments(s *ast.CallExpr, e *state) { for _, arg := range s.Args { // This argument is an identifier. if i, ok := arg.(*ast.Ident); ok { - if s := checkIdentForStringValue(i, e); s != "" { + if s := checkIdentForStringValue(i); s != "" { e.translations[s] = "" matched = true break @@ -265,7 +265,7 @@ func checkArguments(s *ast.CallExpr, e *state) { // This argument is a string. if argString, ok := arg.(*ast.BasicLit); ok { - if s := checkString(argString.Value, e); s != "" { + if s := checkString(argString.Value); s != "" { e.translations[s] = "" matched = true break @@ -281,7 +281,7 @@ func checkArguments(s *ast.CallExpr, e *state) { } // checkIdentForStringValye takes a identifier and sees if it's a variable assigned to a string -func checkIdentForStringValue(i *ast.Ident, e *state) string { +func checkIdentForStringValue(i *ast.Ident) string { // This identifier is nil if i.Obj == nil { return "" @@ -313,12 +313,12 @@ func checkIdentForStringValue(i *ast.Ident, e *state) string { } } - return checkString(s, e) + return checkString(s) } // checkString checks if a string is meant to be translated -func checkString(s string, e *state) string { +func checkString(s string) string { // Empty strings don't need translating if len(s) <= 2 { return "" @@ -365,7 +365,7 @@ func checkKeyValueExpression(kvp *ast.KeyValueExpr, e *state) { if i.Name == "Short" || i.Name == "Long" { // The help text is directly a string, the most common case if help, ok := kvp.Value.(*ast.BasicLit); ok { - s := checkString(help.Value, e) + s := checkString(help.Value) if s != "" { e.translations[s] = "" } @@ -373,7 +373,7 @@ func checkKeyValueExpression(kvp *ast.KeyValueExpr, e *state) { // The help text is assigned to a variable, only happens if it's very long if help, ok := kvp.Value.(*ast.Ident); ok { - s := checkIdentForStringValue(help, e) + s := checkIdentForStringValue(help) if s != "" { e.translations[s] = "" } @@ -394,13 +394,13 @@ func checkBinaryExpression(b *ast.BinaryExpr, e *state) string { // Check the left side var s string if l, ok := b.X.(*ast.BasicLit); ok { - if x := checkString(l.Value, e); x != "" { + if x := checkString(l.Value); x != "" { s += x } } if i, ok := b.X.(*ast.Ident); ok { - if x := checkIdentForStringValue(i, e); x != "" { + if x := checkIdentForStringValue(i); x != "" { s += x } } @@ -413,13 +413,13 @@ func checkBinaryExpression(b *ast.BinaryExpr, e *state) string { //Check the right side if l, ok := b.Y.(*ast.BasicLit); ok { - if x := checkString(l.Value, e); x != "" { + if x := checkString(l.Value); x != "" { s += x } } if i, ok := b.Y.(*ast.Ident); ok { - if x := checkIdentForStringValue(i, e); x != "" { + if x := checkIdentForStringValue(i); x != "" { s += x } } @@ -511,7 +511,7 @@ func extractAdvice(f ast.Node, e *state) error { if i.Name == "Advice" { // At this point we know the value in the kvp is guaranteed to be a string advice, _ := kvp.Value.(*ast.BasicLit) - s := checkString(advice.Value, e) + s := checkString(advice.Value) if s != "" { e.translations[s] = "" } @@ -540,7 +540,7 @@ func extractFlagHelpText(c *ast.CallExpr, sfc *ast.CallExpr, e *state) { // Something has gone wrong, abort return } - s := checkString(usage.Value, e) + s := checkString(usage.Value) if s != "" { e.translations[s] = "" } From 98c66807c21eac37d7d8ccc823caa28c265cd920 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 25 Jul 2019 10:42:26 -0700 Subject: [PATCH 07/11] Make usage template translations more palatable. --- cmd/minikube/cmd/root.go | 73 +++++++++++++++++++++++++++------------- translations/fr-FR.json | 9 ++++- translations/zh-CN.json | 9 ++++- 3 files changed, 65 insertions(+), 26 deletions(-) diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index a7a08830dc95..3475c92be2c3 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -126,30 +126,55 @@ func Execute() { // explicitly using the raw string instead of calling c.UsageTemplate() // so the extractor can find this monstrosity of a string func usageTemplate() string { - return translate.T(`Usage:{{if .Runnable}} - {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} - {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} - - Aliases: - {{.NameAndAliases}}{{end}}{{if .HasExample}} - - Examples: - {{.Example}}{{end}}{{if .HasAvailableSubCommands}} - - Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}} - {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} - - Flags: - {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} - - Global Flags: - {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} - - Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} - {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} - - Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} - `) + /*return translate.T(`Usage:{{if .Runnable}} + {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} + {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} + + Aliases: + {{.NameAndAliases}}{{end}}{{if .HasExample}} + + Examples: + {{.Example}}{{end}}{{if .HasAvailableSubCommands}} + + Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}} + {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} + + Flags: + {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} + + Global Flags: + {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} + + Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} + {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} + + Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} + `)*/ + + return fmt.Sprintf(`%s:{{if .Runnable}} + {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} + {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} + +%s: + {{.NameAndAliases}}{{end}}{{if .HasExample}} + +%s: +{{.Example}}{{end}}{{if .HasAvailableSubCommands}} + +%s:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}} + {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} + +%s: +{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} + +%s: +{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} + +%s:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} + {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} + +%s{{end}} +`, translate.T("Usage"), translate.T("Aliases"), translate.T("Examples"), translate.T("Available Commands"), translate.T("Flags"), translate.T("Global Flags"), translate.T("Additional help topics"), translate.T(`Use "{{.CommandPath}} [command] --help" for more information about a command.`)) } // Handle config values for flags used in external packages (e.g. glog) diff --git a/translations/fr-FR.json b/translations/fr-FR.json index 9fc3ea3017b6..1debd6eeb42d 100644 --- a/translations/fr-FR.json +++ b/translations/fr-FR.json @@ -19,12 +19,15 @@ "Add an image to local cache.": "", "Add machine IP to NO_PROXY environment variable": "", "Add or delete an image from the local cache.": "", + "Additional help topics": "", "Additional mount options, such as cache=fscache": "", + "Aliases": "", "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", "Alternatively, you may delete the existing VM using `minikube delete -p {{.profile_name}}`": "", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", "Amount of time to wait for a service in seconds": "", "Amount of time to wait for service in seconds": "", + "Available Commands": "", "Cannot find directory {{.path}} for mount": "", "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "", @@ -110,6 +113,7 @@ "Error while setting kubectl current context : {{.error}}": "", "Error writing mount pid": "", "Error: [{{.id}}] {{.error}}": "", + "Examples": "", "Failed runtime": "", "Failed to cache ISO": "", "Failed to cache and load images": "", @@ -142,6 +146,7 @@ "Failed to update config": "", "Failed unmount: {{.error}}": "", "File permissions used for the mount": "", + "Flags": "", "Follow": "", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "For more information, see:": "", @@ -154,6 +159,7 @@ "Gets the status of a local kubernetes cluster": "", "Gets the status of a local kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for kubernetes NOK)": "", "Gets the value of PROPERTY_NAME from the minikube config file": "", + "Global Flags": "", "Go template format string for the addon list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#AddonListTemplate": "", "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", @@ -339,8 +345,9 @@ "Unset variables instead of setting them": "", "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Usage": "", "Usage: minikube completion SHELL": "", - "Usage:{{if .Runnable}}\n\t{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n\t{{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}\n \n Aliases:\n\t{{.NameAndAliases}}{{end}}{{if .HasExample}}\n \n Examples:\n {{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n \n Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n\t{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n \n Flags:\n {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n \n Global Flags:\n {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\n \n Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n\t{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n \n Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n ": "", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", "User ID: {{.userID}}": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 83571fcc34f9..113bff613644 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -19,12 +19,15 @@ "Add an image to local cache.": "", "Add machine IP to NO_PROXY environment variable": "", "Add or delete an image from the local cache.": "", + "Additional help topics": "", "Additional mount options, such as cache=fscache": "", + "Aliases": "", "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", "Alternatively, you may delete the existing VM using `minikube delete -p {{.profile_name}}`": "", "Amount of RAM allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", "Amount of time to wait for a service in seconds": "", "Amount of time to wait for service in seconds": "", + "Available Commands": "", "Cannot find directory {{.path}} for mount": "", "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "", @@ -110,6 +113,7 @@ "Error while setting kubectl current context : {{.error}}": "", "Error writing mount pid": "", "Error: [{{.id}}] {{.error}}": "", + "Examples": "", "Failed runtime": "", "Failed to cache ISO": "", "Failed to cache and load images": "", @@ -142,6 +146,7 @@ "Failed to update config": "", "Failed unmount: {{.error}}": "", "File permissions used for the mount": "", + "Flags": "", "Follow": "", "For best results, install kubectl: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "For more information, see:": "", @@ -154,6 +159,7 @@ "Gets the status of a local kubernetes cluster": "", "Gets the status of a local kubernetes cluster.\n\tExit status contains the status of minikube's VM, cluster and kubernetes encoded on it's bits in this order from right to left.\n\tEg: 7 meaning: 1 (for minikube NOK) + 2 (for cluster NOK) + 4 (for kubernetes NOK)": "", "Gets the value of PROPERTY_NAME from the minikube config file": "", + "Global Flags": "", "Go template format string for the addon list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#AddonListTemplate": "", "Go template format string for the cache list output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#CacheListTemplate": "", "Go template format string for the config view output. The format for Go templates can be found here: https://golang.org/pkg/text/template/\nFor the list of accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd/config#ConfigViewTemplate": "", @@ -339,8 +345,9 @@ "Unset variables instead of setting them": "", "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Usage": "", "Usage: minikube completion SHELL": "", - "Usage:{{if .Runnable}}\n\t{{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n\t{{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}\n \n Aliases:\n\t{{.NameAndAliases}}{{end}}{{if .HasExample}}\n \n Examples:\n {{.Example}}{{end}}{{if .HasAvailableSubCommands}}\n \n Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n\t{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n \n Flags:\n {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n \n Global Flags:\n {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\n \n Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n\t{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n \n Use \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n ": "", + "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", "User ID: {{.userID}}": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", From e81e052863d0ce14451f2da96b612976693ead9a Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 25 Jul 2019 10:58:35 -0700 Subject: [PATCH 08/11] remove commented code --- cmd/minikube/cmd/root.go | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index 3475c92be2c3..c6ae0150dd14 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -126,31 +126,6 @@ func Execute() { // explicitly using the raw string instead of calling c.UsageTemplate() // so the extractor can find this monstrosity of a string func usageTemplate() string { - /*return translate.T(`Usage:{{if .Runnable}} - {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} - {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} - - Aliases: - {{.NameAndAliases}}{{end}}{{if .HasExample}} - - Examples: - {{.Example}}{{end}}{{if .HasAvailableSubCommands}} - - Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}} - {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} - - Flags: - {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} - - Global Flags: - {{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} - - Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} - {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} - - Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} - `)*/ - return fmt.Sprintf(`%s:{{if .Runnable}} {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} From da3c4a4584afd47353f0dae30a3b63e4aef8ea0f Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Wed, 7 Aug 2019 13:02:44 -0700 Subject: [PATCH 09/11] fix go mod --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 39ca21b95d27..a664445ebf6c 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect github.com/docker/docker v1.13.1 // indirect github.com/docker/go-units v0.3.3 - github.com/docker/machine v0.16.1-0.20190718054102-a555e4f7a8f5 + github.com/docker/machine v0.16.1 github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f // indirect github.com/go-ole/go-ole v1.2.4 // indirect diff --git a/go.sum b/go.sum index d984677ef817..7357c6c874e2 100644 --- a/go.sum +++ b/go.sum @@ -106,8 +106,8 @@ github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libnetwork v0.0.0-20180830151422-a9cd636e3789/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= -github.com/docker/machine v0.16.1-0.20190718054102-a555e4f7a8f5 h1:5OiV/JwT55JRKNJsM9HZrTlJH/TRp97Ee89ahtB78+w= -github.com/docker/machine v0.16.1-0.20190718054102-a555e4f7a8f5/go.mod h1:I8mPNDeK1uH+JTcUU7X0ZW8KiYz0jyAgNaeSJ1rCfDI= +github.com/docker/machine v0.16.1 h1:zrgroZounGVkxLmBqMyc1uT2GgapXVjIWHCfBf0udrA= +github.com/docker/machine v0.16.1/go.mod h1:I8mPNDeK1uH+JTcUU7X0ZW8KiYz0jyAgNaeSJ1rCfDI= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= From 2c58438802c1fbd2c15ac45a499a72b590c9a18e Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 9 Aug 2019 14:11:40 -0700 Subject: [PATCH 10/11] pin to proper version in go.mod --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index a664445ebf6c..9833a15bb563 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect github.com/docker/docker v1.13.1 // indirect github.com/docker/go-units v0.3.3 - github.com/docker/machine v0.16.1 + github.com/docker/machine v0.7.1-0.20190718054102-a555e4f7a8f5 github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f github.com/elazarl/goproxy/ext v0.0.0-20190421051319-9d40249d3c2f // indirect github.com/go-ole/go-ole v1.2.4 // indirect From 307947c1367462669d840401de671fd7cb089e87 Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Fri, 9 Aug 2019 16:30:17 -0700 Subject: [PATCH 11/11] translate command grouping headers --- cmd/minikube/cmd/root.go | 16 ++++----- go.sum | 4 +-- .../minikube_cross_build_and_upload.sh | 4 +-- hack/jenkins/minikube_set_pending.sh | 2 +- translations/fr-FR.json | 36 +++++++++++++------ translations/zh-CN.json | 32 ++++++++++++----- 6 files changed, 61 insertions(+), 33 deletions(-) diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go index 9509b470ba8c..f7f2e38aa620 100644 --- a/cmd/minikube/cmd/root.go +++ b/cmd/minikube/cmd/root.go @@ -116,7 +116,7 @@ func Execute() { RootCmd.Flags().VisitAll(func(flag *pflag.Flag) { flag.Usage = translate.T(flag.Usage) }) - RootCmd.SetUsageTemplate(usageTemplate()) + if err := RootCmd.Execute(); err != nil { // Cobra already outputs the error, typically because the user provided an unknown command. os.Exit(exit.BadUsage) @@ -179,7 +179,7 @@ func init() { groups := templates.CommandGroups{ { - Message: "Basic Commands:", + Message: translate.T("Basic Commands:"), Commands: []*cobra.Command{ startCmd, statusCmd, @@ -189,14 +189,14 @@ func init() { }, }, { - Message: "Images Commands:", + Message: translate.T("Images Commands:"), Commands: []*cobra.Command{ dockerEnvCmd, cacheCmd, }, }, { - Message: "Configuration and Management Commands:", + Message: translate.T("Configuration and Management Commands:"), Commands: []*cobra.Command{ configCmd.AddonsCmd, configCmd.ConfigCmd, @@ -205,14 +205,14 @@ func init() { }, }, { - Message: "Networking and Connectivity Commands:", + Message: translate.T("Networking and Connectivity Commands:"), Commands: []*cobra.Command{ serviceCmd, tunnelCmd, }, }, { - Message: "Advanced Commands:", + Message: translate.T("Advanced Commands:"), Commands: []*cobra.Command{ mountCmd, sshCmd, @@ -220,7 +220,7 @@ func init() { }, }, { - Message: "Troubleshooting Commands:", + Message: translate.T("Troubleshooting Commands:"), Commands: []*cobra.Command{ sshKeyCmd, ipCmd, @@ -232,7 +232,7 @@ func init() { } groups.Add(RootCmd) - // any not grouped command will show in Other Commands group. + // Ungrouped commands will show up in the "Other Commands" section RootCmd.AddCommand(completionCmd) templates.ActsAsRootCommand(RootCmd, []string{"options"}, groups...) diff --git a/go.sum b/go.sum index 7357c6c874e2..14dbc2dbec2a 100644 --- a/go.sum +++ b/go.sum @@ -106,8 +106,8 @@ github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libnetwork v0.0.0-20180830151422-a9cd636e3789/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= -github.com/docker/machine v0.16.1 h1:zrgroZounGVkxLmBqMyc1uT2GgapXVjIWHCfBf0udrA= -github.com/docker/machine v0.16.1/go.mod h1:I8mPNDeK1uH+JTcUU7X0ZW8KiYz0jyAgNaeSJ1rCfDI= +github.com/docker/machine v0.7.1-0.20190718054102-a555e4f7a8f5 h1:/2G2PrqxKga8hAVGPri/5NEv24rvDwXoH5pjPXUBCpA= +github.com/docker/machine v0.7.1-0.20190718054102-a555e4f7a8f5/go.mod h1:I8mPNDeK1uH+JTcUU7X0ZW8KiYz0jyAgNaeSJ1rCfDI= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= diff --git a/hack/jenkins/minikube_cross_build_and_upload.sh b/hack/jenkins/minikube_cross_build_and_upload.sh index 25167ae42e45..adbb0189da12 100755 --- a/hack/jenkins/minikube_cross_build_and_upload.sh +++ b/hack/jenkins/minikube_cross_build_and_upload.sh @@ -49,8 +49,8 @@ git diff ${ghprbActualCommit} --name-only \ | grep -q deploy/iso/minikube && rebuild=1 || rebuild=0 if [[ "${rebuild}" -eq 1 ]]; then - echo "ISO changes detected ... rebuilding ISO" - make release-iso + echo "ISO changes detected ... rebuilding ISO" + make release-iso fi cp -r test/integration/testdata out/ diff --git a/hack/jenkins/minikube_set_pending.sh b/hack/jenkins/minikube_set_pending.sh index 23d3511b9e44..a595773ff8bf 100755 --- a/hack/jenkins/minikube_set_pending.sh +++ b/hack/jenkins/minikube_set_pending.sh @@ -36,7 +36,7 @@ jobs=( 'Hyper-V_Windows' 'VirtualBox_Linux' 'VirtualBox_macOS' - 'VirtualBox_Windows' + 'VirtualBox_Windows' # 'KVM-GPU_Linux' - Disabled 'KVM_Linux' 'none_Linux' diff --git a/translations/fr-FR.json b/translations/fr-FR.json index 1debd6eeb42d..13f25a56e005 100644 --- a/translations/fr-FR.json +++ b/translations/fr-FR.json @@ -21,6 +21,7 @@ "Add or delete an image from the local cache.": "", "Additional help topics": "", "Additional mount options, such as cache=fscache": "", + "Advanced Commands:": "", "Aliases": "", "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", "Alternatively, you may delete the existing VM using `minikube delete -p {{.profile_name}}`": "", @@ -28,9 +29,11 @@ "Amount of time to wait for a service in seconds": "", "Amount of time to wait for service in seconds": "", "Available Commands": "", + "Basic Commands:": "", "Cannot find directory {{.path}} for mount": "", "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "", + "Configuration and Management Commands:": "", "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list ": "", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "Configurant l'environment pour Kubernetes {{.k8sVersion}} sur {{.runtime}} {{.runtimeVersion}}", @@ -50,6 +53,7 @@ "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", "Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disables the filesystem mounts provided by the hypervisors": "", "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", "Display dashboard URL instead of opening a browser": "", "Display the kubernetes addons URL in the CLI instead of opening it in the default browser": "", @@ -58,9 +62,9 @@ "Display values currently set in the minikube config file.": "", "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", "Documentation: {{.url}}": "", - "Done! kubectl is now configured to use {{.name}}": "Fini! kubectl est maintenant configuré pour utiliser {{.name}}.", + "Done! kubectl is now configured to use \"{{.name}}\"": "Fini! kubectl est maintenant configuré pour utiliser \"{{.name}}\".", "Download complete!": "", - "Downloading Minikube ISO ...": "", + "Downloading VM boot image ...": "", "Downloading {{.name}} {{.version}}": "", "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", @@ -172,6 +176,7 @@ "If true, only download and cache files for later use - don't install or start anything.": "", "If using the none driver, ensure that systemctl is installed": "", "Ignoring --vm-driver={{.driver_name}}, as the existing \"{{.profile_name}}\" VM was created using the {{.driver_name2}} driver.": "", + "Images Commands:": "", "In some environments, this message is incorrect. Try 'minikube start --no-vtx-check'": "", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox, ensure that VBoxManage is executable and in path, or select an alternative value for --vm-driver": "", @@ -204,11 +209,13 @@ "Mounts the specified directory into minikube": "", "Mounts the specified directory into minikube.": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", + "Networking and Connectivity Commands:": "", "No minikube profile was found. You can create one using `minikube start`.": "", "None of known repositories in your location is accessible. Use {{.image_repository_name}} as fallback.": "", "None of known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "", "Number of CPUs allocated to the minikube VM": "", "Number of lines back to go within the log": "", + "OS release is {{.pretty_name}}": "", "Open the addons URL with https instead of http": "", "Open the service URL with https instead of http": "", "Opening kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", @@ -225,8 +232,9 @@ "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", "Please run with sudo. the vm-driver \"{{.driver_name}}\" requires sudo.": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please upgrade the 'docker-machine-driver-kvm2'. {{.documentation_url}}": "", + "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "", "Powering off \"{{.profile_name}}\" via SSH ...": "", + "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "", "Print current and latest version number": "", "Print the version of minikube": "", "Print the version of minikube.": "", @@ -236,18 +244,16 @@ "Provide VM UUID to restore MAC address (only supported with Hyperkit driver).": "", "Pulling images ...": "Extrayant les images ... ", "Re-run 'minikube start' with --alsologtostderr -v=8 to see the VM driver error message": "", - "Re-using the currently running {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Reboot to complete VirtualBox installation, and verify that VirtualBox is not blocked by your system": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", "Registry mirrors to pass to the Docker daemon": "", "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", "Related issues:": "", - "Relaunching Kubernetes {{.version}} using {{.bootstrapper}} ... ": "", + "Relaunching Kubernetes using {{.bootstrapper}} ... ": "", "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "", "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "", - "Restarting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Retrieve the ssh identity key path of the specified cluster": "", "Retrieve the ssh identity key path of the specified cluster.": "", "Retrieves the IP address of the running cluster": "", @@ -280,7 +286,8 @@ "Specify the 9p version that the mount should use": "", "Specify the ip that the mount should be setup on": "", "Specify the mount filesystem type (supported types: 9p)": "", - "Starts a local kubernetes cluster": "", + "Starting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", + "Starts a local kubernetes cluster": "Démarre un cluster Kubernetes", "Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "", "Stops a local kubernetes cluster running in Virtualbox. This command stops the VM\nitself, leaving all files intact. The cluster can be started again with the \"start\" command.": "", "Stops a running local kubernetes cluster": "", @@ -288,7 +295,6 @@ "Suggestion: {{.advice}}": "", "Target directory {{.path}} must be an absolute path": "", "The \"{{.cluster_name}}\" cluster has been deleted.": "", - "The 'docker-machine-driver-kvm2' version is old. Please consider upgrading. {{.documentation_url}}": "", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "", "The CIDR to be used for service cluster IPs.": "", "The CIDR to be used for the minikube VM (only supported with Virtualbox driver)": "", @@ -304,6 +310,7 @@ "The cri socket path to be used": "", "The docker host is currently not running": "", "The docker service is currently not active": "", + "The driver '{{.driver}}' is not supported on {{.os}}": "", "The hyperv virtual switch name. Defaults to first found. (only supported with HyperV driver)": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "", "The minikube VM is offline. Please run 'minikube start' to start it again.": "", @@ -315,6 +322,7 @@ "The value passed to --format is invalid": "", "The value passed to --format is invalid: {{.error}}": "", "The vmwarefusion driver is deprecated and support for it will be removed in a future release.\n\t\t\tPlease consider switching to the new vmware unified driver, which is intended to replace the vmwarefusion driver.\n\t\t\tSee https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#vmware-unified-driver for more information.\n\t\t\tTo disable this message, run [minikube config set ShowDriverDeprecationNotification false]": "", + "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "", "These changes will take effect upon a minikube delete and then a minikube start": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", @@ -324,8 +332,10 @@ "To connect to this cluster, use: kubectl --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", "To disable this notice, run: 'minikube config set WantUpdateNotification false'": "", + "To start minikube with HyperV Powershell must be in your PATH`": "", "To switch drivers, you may create a new VM using `minikube start -p \u003cname\u003e --vm-driver={{.driver_name}}`": "", "To use kubectl or minikube commands as your own user, you may": "", + "Troubleshooting Commands:": "", "Unable to bind flags": "", "Unable to enable dashboard": "", "Unable to fetch latest version info": "", @@ -345,13 +355,15 @@ "Unset variables instead of setting them": "", "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", - "Usage": "", + "Upgrading from Kubernetes {{.old}} to {{.new}}": "", + "Usage": "Usage", "Usage: minikube completion SHELL": "", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", "User ID: {{.userID}}": "", "Userspace file server is shutdown": "", "Userspace file server: ": "", "Using image repository {{.name}}": "", + "Using the running {{.driver_name}} \"{{.profile_name}}\" VM ...": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verify the IP address of the running cluster in kubeconfig.": "", "Verifying dashboard health ...": "", @@ -362,6 +374,8 @@ "Wait failed: {{.error}}": "", "Wait until Kubernetes core services are healthy before exiting": "", "Waiting for SSH access ...": "Attendant l'accès SSH ...", + "Waiting for the host to be provisioned ...": "", + "Waiting for:": "", "Where to root the NFS Shares (defaults to /nfsshares, only supported with hyperkit now)": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see https://github.com/kubernetes/minikube/blob/master/docs/http_proxy.md for more details": "", "You can delete them using the following command(s): ": "", @@ -389,14 +403,12 @@ "error starting tunnel": "", "failed to open browser: {{.error}}": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "", - "kubectl has been configured to use {{.name}}": "", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "kubectl proxy": "", "logdir set failed": "", "minikube is not running, so the service cannot be accessed": "", "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", "minikube profile was successfully set to {{.profile_name}}": "", - "minikube will upgrade the local cluster from Kubernetes {{.old}} to {{.new}}": "", "minikube {{.version}} is available! Download it: {{.url}}": "", "minikube {{.version}} on {{.os}} ({{.arch}})": "minikube {{.version}} sur {{.os}} ({{.arch}})", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", @@ -410,6 +422,7 @@ "unable to bind flags": "", "unable to set logtostderr": "", "unset failed": "", + "unset minikube profile": "", "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", "unsets an individual value in a minikube config file": "", "unsupported driver: {{.name}}": "", @@ -431,6 +444,7 @@ "{{.name}} cluster does not exist": "", "{{.name}} has no available configuration options": "", "{{.name}} was successfully configured": "", + "{{.prefix}}minikube {{.version}} on {{.platform}}": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "" } \ No newline at end of file diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 113bff613644..6b08ab56670e 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -21,6 +21,7 @@ "Add or delete an image from the local cache.": "", "Additional help topics": "", "Additional mount options, such as cache=fscache": "", + "Advanced Commands:": "", "Aliases": "", "Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to \\\"auto\\\" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers": "", "Alternatively, you may delete the existing VM using `minikube delete -p {{.profile_name}}`": "", @@ -28,9 +29,11 @@ "Amount of time to wait for a service in seconds": "", "Amount of time to wait for service in seconds": "", "Available Commands": "", + "Basic Commands:": "", "Cannot find directory {{.path}} for mount": "", "Check that minikube is running and that you have specified the correct namespace (-n flag) if required.": "", "Check that your --kubernetes-version has a leading 'v'. For example: 'v1.1.14'": "", + "Configuration and Management Commands:": "", "Configure an external network switch following the official documentation, then add `--hyperv-virtual-switch=\u003cswitch-name\u003e` to `minikube start`": "", "Configures the addon w/ADDON_NAME within minikube (example: minikube addons configure registry-creds). For a list of available addons use: minikube addons list ": "", "Configuring environment for Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}}": "开始为Kubernetes {{.k8sVersion}},{{.runtime}} {{.runtimeVersion}} 配置环境变量", @@ -50,6 +53,7 @@ "Disable dynamic memory in your VM manager, or pass in a larger --memory value": "", "Disable real-time anti-virus software, reboot, and reinstall VirtualBox if the problem continues.": "", "Disables the addon w/ADDON_NAME within minikube (example: minikube addons disable dashboard). For a list of available addons use: minikube addons list ": "", + "Disables the filesystem mounts provided by the hypervisors": "", "Disk size allocated to the minikube VM (format: \u003cnumber\u003e[\u003cunit\u003e], where unit = b, k, m or g)": "", "Display dashboard URL instead of opening a browser": "", "Display the kubernetes addons URL in the CLI instead of opening it in the default browser": "", @@ -58,9 +62,10 @@ "Display values currently set in the minikube config file.": "", "Docker inside the VM is unavailable. Try running 'minikube delete' to reset the VM.": "", "Documentation: {{.url}}": "", + "Done! kubectl is now configured to use \"{{.name}}\"": "", "Done! kubectl is now configured to use {{.name}}": "完成!kubectl已经配置至{{.name}}", "Download complete!": "", - "Downloading Minikube ISO ...": "", + "Downloading VM boot image ...": "", "Downloading {{.name}} {{.version}}": "", "ERROR creating `registry-creds-dpr` secret": "", "ERROR creating `registry-creds-ecr` secret: {{.error}}": "", @@ -172,6 +177,7 @@ "If true, only download and cache files for later use - don't install or start anything.": "", "If using the none driver, ensure that systemctl is installed": "", "Ignoring --vm-driver={{.driver_name}}, as the existing \"{{.profile_name}}\" VM was created using the {{.driver_name2}} driver.": "", + "Images Commands:": "", "In some environments, this message is incorrect. Try 'minikube start --no-vtx-check'": "", "Insecure Docker registries to pass to the Docker daemon. The default service CIDR range will automatically be added.": "", "Install VirtualBox, ensure that VBoxManage is executable and in path, or select an alternative value for --vm-driver": "", @@ -204,11 +210,13 @@ "Mounts the specified directory into minikube": "", "Mounts the specified directory into minikube.": "", "NOTE: This process must stay alive for the mount to be accessible ...": "", + "Networking and Connectivity Commands:": "", "No minikube profile was found. You can create one using `minikube start`.": "", "None of known repositories in your location is accessible. Use {{.image_repository_name}} as fallback.": "", "None of known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "", "Number of CPUs allocated to the minikube VM": "", "Number of lines back to go within the log": "", + "OS release is {{.pretty_name}}": "", "Open the addons URL with https instead of http": "", "Open the service URL with https instead of http": "", "Opening kubernetes service {{.namespace_name}}/{{.service_name}} in default browser...": "", @@ -225,8 +233,9 @@ "Please make sure the service you are looking for is deployed or is in the correct namespace.": "", "Please run with sudo. the vm-driver \"{{.driver_name}}\" requires sudo.": "", "Please specify the directory to be mounted: \n\tminikube mount \u003csource directory\u003e:\u003ctarget directory\u003e (example: \"/host-home:/vm-home\")": "", - "Please upgrade the 'docker-machine-driver-kvm2'. {{.documentation_url}}": "", + "Please upgrade the '{{.driver_executable}}'. {{.documentation_url}}": "", "Powering off \"{{.profile_name}}\" via SSH ...": "", + "Preparing Kubernetes {{.k8sVersion}} on {{.runtime}} {{.runtimeVersion}} ...": "", "Print current and latest version number": "", "Print the version of minikube": "", "Print the version of minikube.": "", @@ -236,18 +245,16 @@ "Provide VM UUID to restore MAC address (only supported with Hyperkit driver).": "", "Pulling images ...": "拉取镜像 ...", "Re-run 'minikube start' with --alsologtostderr -v=8 to see the VM driver error message": "", - "Re-using the currently running {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Reboot to complete VirtualBox installation, and verify that VirtualBox is not blocked by your system": "", "Rebuild libvirt with virt-network support": "", "Received {{.name}} signal": "", "Registry mirrors to pass to the Docker daemon": "", "Reinstall VirtualBox and verify that it is not blocked: System Preferences -\u003e Security \u0026 Privacy -\u003e General -\u003e Some system software was blocked from loading": "", "Related issues:": "", - "Relaunching Kubernetes {{.version}} using {{.bootstrapper}} ... ": "", + "Relaunching Kubernetes using {{.bootstrapper}} ... ": "", "Requested disk size {{.requested_size}} is less than minimum of {{.minimum_size}}": "", "Requested memory allocation ({{.memory}}MB) is less than the default memory allocation of {{.default_memorysize}}MB. Beware that minikube might not work correctly or crash unexpectedly.": "", "Requested memory allocation {{.requested_size}} is less than the minimum allowed of {{.minimum_size}}": "", - "Restarting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Retrieve the ssh identity key path of the specified cluster": "", "Retrieve the ssh identity key path of the specified cluster.": "", "Retrieves the IP address of the running cluster": "", @@ -280,6 +287,7 @@ "Specify the 9p version that the mount should use": "", "Specify the ip that the mount should be setup on": "", "Specify the mount filesystem type (supported types: 9p)": "", + "Starting existing {{.driver_name}} VM for \"{{.profile_name}}\" ...": "", "Starts a local kubernetes cluster": "", "Stopping \"{{.profile_name}}\" in {{.driver_name}} ...": "", "Stops a local kubernetes cluster running in Virtualbox. This command stops the VM\nitself, leaving all files intact. The cluster can be started again with the \"start\" command.": "", @@ -288,7 +296,6 @@ "Suggestion: {{.advice}}": "", "Target directory {{.path}} must be an absolute path": "", "The \"{{.cluster_name}}\" cluster has been deleted.": "", - "The 'docker-machine-driver-kvm2' version is old. Please consider upgrading. {{.documentation_url}}": "", "The 'none' driver provides limited isolation and may reduce system security and reliability.": "", "The CIDR to be used for service cluster IPs.": "", "The CIDR to be used for the minikube VM (only supported with Virtualbox driver)": "", @@ -304,6 +311,7 @@ "The cri socket path to be used": "", "The docker host is currently not running": "", "The docker service is currently not active": "", + "The driver '{{.driver}}' is not supported on {{.os}}": "", "The hyperv virtual switch name. Defaults to first found. (only supported with HyperV driver)": "", "The kubernetes version that the minikube VM will use (ex: v1.2.3)": "", "The minikube VM is offline. Please run 'minikube start' to start it again.": "", @@ -315,6 +323,7 @@ "The value passed to --format is invalid": "", "The value passed to --format is invalid: {{.error}}": "", "The vmwarefusion driver is deprecated and support for it will be removed in a future release.\n\t\t\tPlease consider switching to the new vmware unified driver, which is intended to replace the vmwarefusion driver.\n\t\t\tSee https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#vmware-unified-driver for more information.\n\t\t\tTo disable this message, run [minikube config set ShowDriverDeprecationNotification false]": "", + "There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "", "These changes will take effect upon a minikube delete and then a minikube start": "", "This addon does not have an endpoint defined for the 'addons open' command.\nYou can add one by annotating a service with the label {{.labelName}}:{{.addonName}}": "", "This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true": "", @@ -324,8 +333,10 @@ "To connect to this cluster, use: kubectl --context={{.name}}": "", "To connect to this cluster, use: kubectl --context={{.profile_name}}": "", "To disable this notice, run: 'minikube config set WantUpdateNotification false'": "", + "To start minikube with HyperV Powershell must be in your PATH`": "", "To switch drivers, you may create a new VM using `minikube start -p \u003cname\u003e --vm-driver={{.driver_name}}`": "", "To use kubectl or minikube commands as your own user, you may": "", + "Troubleshooting Commands:": "", "Unable to bind flags": "", "Unable to enable dashboard": "", "Unable to fetch latest version info": "", @@ -345,6 +356,7 @@ "Unset variables instead of setting them": "", "Update server returned an empty list": "", "Upgrade to QEMU v3.1.0+, run 'virt-host-validate', or ensure that you are not running in a nested VM environment.": "", + "Upgrading from Kubernetes {{.old}} to {{.new}}": "", "Usage": "", "Usage: minikube completion SHELL": "", "Use \"{{.CommandPath}} [command] --help\" for more information about a command.": "", @@ -352,6 +364,7 @@ "Userspace file server is shutdown": "", "Userspace file server: ": "", "Using image repository {{.name}}": "", + "Using the running {{.driver_name}} \"{{.profile_name}}\" VM ...": "", "Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.": "", "Verify the IP address of the running cluster in kubeconfig.": "", "Verifying dashboard health ...": "", @@ -361,7 +374,8 @@ "Wait failed": "", "Wait failed: {{.error}}": "", "Wait until Kubernetes core services are healthy before exiting": "", - "Waiting for SSH access ...": "", + "Waiting for the host to be provisioned ...": "", + "Waiting for:": "", "Where to root the NFS Shares (defaults to /nfsshares, only supported with hyperkit now)": "", "You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see https://github.com/kubernetes/minikube/blob/master/docs/http_proxy.md for more details": "", "You can delete them using the following command(s): ": "", @@ -389,14 +403,12 @@ "error starting tunnel": "", "failed to open browser: {{.error}}": "", "kubectl and minikube configuration will be stored in {{.home_folder}}": "", - "kubectl has been configured to use {{.name}}": "", "kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "", "kubectl proxy": "", "logdir set failed": "", "minikube is not running, so the service cannot be accessed": "", "minikube is unable to access the Google Container Registry. You may need to configure it to use a HTTP proxy.": "", "minikube profile was successfully set to {{.profile_name}}": "", - "minikube will upgrade the local cluster from Kubernetes {{.old}} to {{.new}}": "", "minikube {{.version}} is available! Download it: {{.url}}": "", "minikube {{.version}} on {{.os}} ({{.arch}})": "您正在使用minikube {{.version}}, 运行平台:{{.os}} ({{.arch}})", "mount argument \"{{.value}}\" must be in form: \u003csource directory\u003e:\u003ctarget directory\u003e": "", @@ -410,6 +422,7 @@ "unable to bind flags": "", "unable to set logtostderr": "", "unset failed": "", + "unset minikube profile": "", "unsets PROPERTY_NAME from the minikube config file. Can be overwritten by flags or environmental variables": "", "unsets an individual value in a minikube config file": "", "unsupported driver: {{.name}}": "", @@ -431,6 +444,7 @@ "{{.name}} cluster does not exist": "", "{{.name}} has no available configuration options": "", "{{.name}} was successfully configured": "", + "{{.prefix}}minikube {{.version}} on {{.platform}}": "", "{{.type}} is not yet a supported filesystem. We will try anyways!": "", "{{.url}} is not accessible: {{.error}}": "" } \ No newline at end of file