From d5cb9699a36c4be6e2656f933bc3e8745c76181c Mon Sep 17 00:00:00 2001
From: Goutte <antoine@goutenoir.com>
Date: Wed, 10 Jan 2024 16:07:48 +0100
Subject: [PATCH] feat(i18n): only embed locale files when using the build tag
 'locales'

---
 localizer.go            | 22 ++++++++++++++--------
 localizer_locales.go    | 29 +++++++++++++++++++++++++++++
 localizer_notlocales.go | 30 ++++++++++++++++++++++++++++++
 localizer_test.go       | 14 ++++++++++++++
 4 files changed, 87 insertions(+), 8 deletions(-)
 create mode 100644 localizer_locales.go
 create mode 100644 localizer_notlocales.go

diff --git a/localizer.go b/localizer.go
index 90a94a83..9cc54d4c 100644
--- a/localizer.go
+++ b/localizer.go
@@ -1,7 +1,20 @@
+// Copyright 2013-2024 The Cobra Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package cobra
 
 import (
-	"embed"
 	"fmt"
 	"os"
 
@@ -27,13 +40,6 @@ var availableLocalizationDomains = []string{
 	"default",
 }
 
-// localeFS points to an embedded filesystem of binary gettext translation files.
-// For performance and smaller builds, only the binary MO files are included.
-// Their sibling PO files should still be considered their authoritative source.
-//
-//go:embed locales/*/*.mo
-var localeFS embed.FS
-
 // i18nCommandGlossary wraps the translated strings passed to the command usage template.
 // This is used in CommandUsageTemplateData.
 type i18nCommandGlossary struct {
diff --git a/localizer_locales.go b/localizer_locales.go
new file mode 100644
index 00000000..be33bbb2
--- /dev/null
+++ b/localizer_locales.go
@@ -0,0 +1,29 @@
+// Copyright 2013-2024 The Cobra Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//go:build locales
+// +build locales
+
+package cobra
+
+import (
+	"embed"
+)
+
+// localeFS points to an embedded filesystem of binary gettext translation files.
+// For performance and smaller builds, only the binary MO files are included.
+// Their sibling PO files should still be considered their authoritative source.
+//
+//go:embed locales/*/*.mo
+var localeFS embed.FS
diff --git a/localizer_notlocales.go b/localizer_notlocales.go
new file mode 100644
index 00000000..cafb9ffe
--- /dev/null
+++ b/localizer_notlocales.go
@@ -0,0 +1,30 @@
+// Copyright 2013-2024 The Cobra Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//go:build !locales
+// +build !locales
+
+package cobra
+
+import (
+	"embed"
+)
+
+// localeFS points to an embedded filesystem of binary gettext translation files,
+// but only for the default (english) language, as the locales build tag was not set.
+// For performance and smaller builds, only the binary MO files are included.
+// Their sibling PO files should still be considered their authoritative source.
+//
+//go:embed locales/*/en.mo
+var localeFS embed.FS
diff --git a/localizer_test.go b/localizer_test.go
index 16efdc01..94dfa434 100644
--- a/localizer_test.go
+++ b/localizer_test.go
@@ -1,3 +1,17 @@
+// Copyright 2013-2024 The Cobra Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package cobra
 
 import (