fix(html): preserve locale on cloned translators
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
b3b44ae432
commit
2a5e2ee5a3
3 changed files with 49 additions and 1 deletions
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue