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

Merged
Virgil merged 1 commit from agent/read---spec-code-core-go-i18n-rfc-md-ful into dev 2026-04-02 07:18:11 +00:00
2 changed files with 37 additions and 0 deletions

15
i18n.go
View file

@ -2,6 +2,7 @@ package i18n
import (
"bytes"
"io/fs"
"strings"
"text/template"
@ -171,6 +172,20 @@ func AddHandler(handlers ...KeyHandler) {
}
}
// LoadFS loads additional translations from an fs.FS into the default service.
//
// Call this from init() in packages that ship their own locale files:
//
// //go:embed locales/*.json
// var localeFS embed.FS
//
// func init() { i18n.LoadFS(localeFS, "locales") }
func LoadFS(fsys fs.FS, dir string) {
if svc := Default(); svc != nil {
_ = svc.LoadFS(fsys, dir)
}
}
// PrependHandler inserts one or more handlers at the start of the default service's handler chain.
func PrependHandler(handlers ...KeyHandler) {
if svc := Default(); svc != nil {

View file

@ -2,6 +2,7 @@ package i18n
import (
"testing"
"testing/fstest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@ -86,6 +87,27 @@ func TestRaw_Good_BypassesHandlers(t *testing.T) {
assert.Equal(t, "i18n.label.status", got)
}
func TestLoadFS_Good(t *testing.T) {
svc, err := New()
require.NoError(t, err)
prev := Default()
SetDefault(svc)
t.Cleanup(func() {
SetDefault(prev)
})
fsys := fstest.MapFS{
"locales/en.json": &fstest.MapFile{
Data: []byte(`{"loadfs.key": "loaded via package helper"}`),
},
}
LoadFS(fsys, "locales")
got := T("loadfs.key")
assert.Equal(t, "loaded via package helper", got)
}
// --- SetLanguage / CurrentLanguage ---
func TestSetLanguage_Good(t *testing.T) {