[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/i18n/RFC.md fully. Find features de... #138

Merged
Virgil merged 1 commit from agent/read---spec-code-core-go-i18n-rfc-md-ful into dev 2026-04-02 06:31:50 +00:00
2 changed files with 41 additions and 1 deletions

View file

@ -131,6 +131,7 @@ func NewWithLoader(loader Loader, opts ...Option) (*Service, error) {
if err != nil {
return nil, log.E("NewWithLoader", "load locale: "+lang, err)
}
lang = normalizeLanguageTag(lang)
s.messages[lang] = messages
if grammarDataHasContent(grammar) {
SetGrammarData(lang, grammar)
@ -290,7 +291,11 @@ func (s *Service) SetMode(m Mode) { s.mu.Lock(); s.mode = m; s.mu.Unlo
func (s *Service) Mode() Mode { s.mu.RLock(); defer s.mu.RUnlock(); return s.mode }
func (s *Service) SetFormality(f Formality) { s.mu.Lock(); s.formality = f; s.mu.Unlock() }
func (s *Service) Formality() Formality { s.mu.RLock(); defer s.mu.RUnlock(); return s.formality }
func (s *Service) SetFallback(lang string) { s.mu.Lock(); s.fallbackLang = normalizeLanguageTag(lang); s.mu.Unlock() }
func (s *Service) SetFallback(lang string) {
s.mu.Lock()
s.fallbackLang = normalizeLanguageTag(lang)
s.mu.Unlock()
}
func (s *Service) Fallback() string {
s.mu.RLock()
defer s.mu.RUnlock()
@ -829,6 +834,7 @@ func (s *Service) AddLoader(loader Loader) error {
if err != nil {
return log.E("Service.AddLoader", "load locale: "+lang, err)
}
lang = normalizeLanguageTag(lang)
s.mu.Lock()
if s.messages[lang] == nil {

View file

@ -33,6 +33,18 @@ func (h serviceMutatingHandler) Handle(key string, args []any, next func() strin
return "mutated"
}
type underscoreLangLoader struct{}
func (underscoreLangLoader) Languages() []string {
return []string{"en_US"}
}
func (underscoreLangLoader) Load(lang string) (map[string]Message, *GrammarData, error) {
return map[string]Message{
"greeting": {Text: "hello"},
}, nil, nil
}
func TestNewService(t *testing.T) {
svc, err := New()
if err != nil {
@ -148,6 +160,28 @@ func TestServiceTDirectKeys(t *testing.T) {
}
}
func TestNewWithLoaderNormalisesLanguageTags(t *testing.T) {
svc, err := NewWithLoader(underscoreLangLoader{})
if err != nil {
t.Fatalf("NewWithLoader() failed: %v", err)
}
langs := svc.AvailableLanguages()
if len(langs) != 1 || langs[0] != "en-US" {
t.Fatalf("AvailableLanguages() = %v, want [en-US]", langs)
}
if err := svc.SetLanguage("en_US"); err != nil {
t.Fatalf("SetLanguage(en_US) failed: %v", err)
}
if got, want := svc.Language(), "en-US"; got != want {
t.Fatalf("Language() after SetLanguage(en_US) = %q, want %q", got, want)
}
if got := svc.T("greeting"); got != "hello" {
t.Fatalf("T(greeting) after SetLanguage(en_US) = %q, want %q", got, "hello")
}
}
func TestServiceTPluralMessage(t *testing.T) {
svc, err := New()
if err != nil {