Пакет отвечает за локализацию CLI: собирает зарегистрированные пакетами встроенные каталоги, определяет язык интерфейса и предоставляет T() для получения переведённых строк.
См. также doc/requirements.md.
- registry встроенных catalog files, зарегистрированных owning-пакетами;
- определение языка по флагу, env и системной locale;
- нормализация locale-кодов;
- выдача локализованных строк через
T().
MustRegister(owner, fsys, paths...)SetCurrent(code)Detect(args)Normalize(raw)T(id, data...)Data
Входящие:
internal/app- все пакеты с пользовательскими строками
Исходящие:
go-i18ngo-locale- package-local
embedcatalogs
- Пакеты регистрируют свои
embed.FSкаталоги черезMustRegisterвinit. Detectсмотрит--lang, затемRAGCLI_LANG, затем системную locale.Normalizeсводит ввод к поддерживаемымru/en.SetCurrentсоздаёт и кешируетLocalizer.T()локализует строку по message id и template data.
Detectвозвращает(en, false)для неподдерживаемых override-значений.internal/appотклоняет неподдерживаемый явный--lang, а для env/system locale использует fallbacken.- Каталоги вшиты в бинарь через
embed, но живут рядом с owning-пакетами. - Регистрация новых каталогов после первой инициализации bundle запрещена.
- Дубликаты
(locale tag, message id)между каталогами считаются ошибкой и останавливают сборку bundle. - При отсутствии текущего localizer
T()возвращает message id как fallback.
- нормализация locale-кодов;
- precedence между флагом, env и системной locale;
- обработка невалидного override.
- сборка bundle из нескольких package registrations;
- защита от duplicate owners и duplicate message ids.
- Новые пользовательские строки добавляйте в каталог owning-пакета и регистрируйте его через
MustRegister. - Новую локаль добавляйте только вместе с каталогом, нормализацией и тестами.