[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/i18n/RFC.md fully. Find ONE feature... #116
2 changed files with 40 additions and 1 deletions
|
|
@ -375,11 +375,17 @@ func (s *Service) T(messageID string, args ...any) string {
|
|||
return result
|
||||
}
|
||||
|
||||
// resolveDirect performs exact-key lookup in the current language and fallback language.
|
||||
// resolveDirect performs exact-key lookup in the current language, its base
|
||||
// language tag, and then the configured fallback language.
|
||||
func (s *Service) resolveDirect(messageID string, data any) string {
|
||||
if text := s.tryResolve(s.currentLang, messageID, data); text != "" {
|
||||
return text
|
||||
}
|
||||
if base := baseLanguageTag(s.currentLang); base != "" && base != s.currentLang {
|
||||
if text := s.tryResolve(base, messageID, data); text != "" {
|
||||
return text
|
||||
}
|
||||
}
|
||||
return s.tryResolve(s.fallbackLang, messageID, data)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,16 @@ import (
|
|||
"testing/fstest"
|
||||
)
|
||||
|
||||
type messageBaseFallbackLoader struct{}
|
||||
|
||||
func (messageBaseFallbackLoader) Languages() []string {
|
||||
return []string{"en-GB", "en", "fr"}
|
||||
}
|
||||
|
||||
func (messageBaseFallbackLoader) Load(lang string) (map[string]Message, *GrammarData, error) {
|
||||
return map[string]Message{}, nil, nil
|
||||
}
|
||||
|
||||
func TestNewService(t *testing.T) {
|
||||
svc, err := New()
|
||||
if err != nil {
|
||||
|
|
@ -244,6 +254,29 @@ func TestServiceFallback(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestServiceMessageFallbackUsesBaseLanguageTagBeforeConfiguredFallback(t *testing.T) {
|
||||
svc, err := NewWithLoader(messageBaseFallbackLoader{})
|
||||
if err != nil {
|
||||
t.Fatalf("NewWithLoader() failed: %v", err)
|
||||
}
|
||||
|
||||
svc.AddMessages("en", map[string]string{
|
||||
"greeting": "hello",
|
||||
})
|
||||
svc.AddMessages("fr", map[string]string{
|
||||
"greeting": "bonjour",
|
||||
})
|
||||
|
||||
if err := svc.SetLanguage("en-GB"); err != nil {
|
||||
t.Fatalf("SetLanguage(en-GB) failed: %v", err)
|
||||
}
|
||||
svc.SetFallback("fr")
|
||||
|
||||
if got := svc.T("greeting"); got != "hello" {
|
||||
t.Fatalf("T(greeting) = %q, want %q", got, "hello")
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceDebug(t *testing.T) {
|
||||
svc, err := New()
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue