From 92b2f2ce943fc3b69f3fb480e88c284e87c75cea Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 08:23:19 +0000 Subject: [PATCH] feat(i18n): localize failure prefix Co-Authored-By: Virgil --- grammar.go | 16 +++++++++++++--- grammar_test.go | 20 ++++++++++++++++++++ locales/fr.json | 3 ++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/grammar.go b/grammar.go index 16f5f4c..3551f84 100644 --- a/grammar.go +++ b/grammar.go @@ -913,11 +913,21 @@ func ActionFailed(verb, subject string) string { if verb == "" { return "" } - verb = renderWord(currentLangForGrammar(), verb) + lang := currentLangForGrammar() + verb = renderWord(lang, verb) + prefix := failedPrefix(lang) if subject == "" { - return "Failed to " + verb + return prefix + " " + verb } - return "Failed to " + verb + " " + renderWord(currentLangForGrammar(), subject) + return prefix + " " + verb + " " + renderWord(lang, subject) +} + +func failedPrefix(lang string) string { + prefix := renderWord(lang, "failed_to") + if prefix == "" || prefix == "failed_to" { + return "Failed to" + } + return prefix } // Label returns a label with suffix: "Status:" (EN) or "Statut :" (FR) diff --git a/grammar_test.go b/grammar_test.go index 4a2a60a..436768c 100644 --- a/grammar_test.go +++ b/grammar_test.go @@ -841,6 +841,26 @@ func TestActionFailed_RespectsWordMap(t *testing.T) { } } +func TestActionFailedFrenchLocale(t *testing.T) { + prev := Default() + svc, err := New() + if err != nil { + t.Fatalf("New() failed: %v", err) + } + SetDefault(svc) + t.Cleanup(func() { + SetDefault(prev) + }) + + if err := SetLanguage("fr"); err != nil { + t.Fatalf("SetLanguage(fr) failed: %v", err) + } + + if got, want := ActionFailed("supprimer", ""), "Impossible de supprimer"; got != want { + t.Fatalf("ActionFailed(%q, %q) = %q, want %q", "supprimer", "", got, want) + } +} + func TestGrammarData_Signals(t *testing.T) { svc, err := New() if err != nil { diff --git a/locales/fr.json b/locales/fr.json index 9199b21..590d785 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -92,7 +92,8 @@ "ssh": "SSH", "ssl": "SSL", "pr": "PR", - "ci": "CI" + "ci": "CI", + "failed_to": "Impossible de" }, "punct": { "label": " :",