package text import ( "fmt" "runtime" "slices" "strings" ) type Key string const FlashPrefix = "flash." type entry struct { text string site string } var catalog = map[Key]entry{} func Register(entries map[Key]string) bool { _, file, line, _ := runtime.Caller(1) site := fmt.Sprintf("%s:%d", file, line) for k, v := range entries { if prev, ok := catalog[k]; ok { panic(fmt.Sprintf("duplicate catalog key %q registered at %s and %s", k, prev.site, site)) } catalog[k] = entry{text: v, site: site} } return true } func Lookup(k Key) (string, bool) { e, ok := catalog[k] return e.text, ok } func Keys() []Key { keys := make([]Key, 0, len(catalog)) for k := range catalog { keys = append(keys, k) } slices.Sort(keys) return keys } func (k Key) IsFlash() bool { return strings.HasPrefix(string(k), FlashPrefix) }