fix(html): preserve locale on cloned translators
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-04 02:07:05 +00:00
parent b3b44ae432
commit 2a5e2ee5a3
3 changed files with 49 additions and 1 deletions

View file

@ -37,6 +37,33 @@ func (t *localeTranslator) Clone() Translator {
return &clone
}
type resettingTranslator struct {
language string
}
func (t *resettingTranslator) T(key string, args ...any) string {
if key == "prompt.yes" && t.language == "fr" {
return "o"
}
if key == "prompt.yes" && t.language == "en" {
return "y"
}
return key
}
func (t *resettingTranslator) SetLanguage(language string) error {
t.language = language
return nil
}
func (t *resettingTranslator) Clone() Translator {
if t == nil {
return (*resettingTranslator)(nil)
}
return &resettingTranslator{}
}
func TestContext_NewContextWithService_AppliesLocale(t *testing.T) {
svc := &localeTranslator{}
ctx := NewContextWithService(svc, "fr-FR")
@ -228,6 +255,25 @@ func TestContext_CloneClonesMutableTranslator(t *testing.T) {
}
}
func TestContext_CloneReappliesLocaleAfterTranslatorClone(t *testing.T) {
svc := &resettingTranslator{}
ctx := NewContextWithService(svc, "fr-FR")
clone := ctx.Clone()
if clone == nil {
t.Fatal("Clone should return a context")
}
if clone.service == ctx.service {
t.Fatal("Clone should duplicate cloneable translators")
}
if got := Text("prompt.yes").Render(clone); got != "o" {
t.Fatalf("Clone should reapply locale after cloning the translator, got %q", got)
}
if got := clone.Locale; got != "fr-FR" {
t.Fatalf("Clone should preserve locale, got %q", got)
}
}
func TestContext_WithDataReturnsClonedContext(t *testing.T) {
ctx := NewContext()
ctx.SetData("theme", "dark")

View file

@ -13,6 +13,7 @@ func cloneTranslator(svc Translator, locale string) Translator {
if cloner, ok := svc.(translatorCloner); ok && cloner != nil {
if clone := cloner.Clone(); clone != nil {
applyLocaleToService(clone, locale)
return clone
}
}

View file

@ -4,13 +4,14 @@
package html
func cloneTranslator(svc Translator, _ string) Translator {
func cloneTranslator(svc Translator, locale string) Translator {
if svc == nil {
return nil
}
if cloner, ok := svc.(translatorCloner); ok && cloner != nil {
if clone := cloner.Clone(); clone != nil {
applyLocaleToService(clone, locale)
return clone
}
}