ADR-016: A localization layer we wrote
Status: Accepted (2026-08-30)
Decision: The panel reads text from catalogs the project wrote in lib/i18n/, roughly 100
lines with no dependency. It uses no library such as @wxt-dev/i18n, i18next, or react-intl.
The manifest still uses public/_locales/, because browser.i18n is the only mechanism that
can localize a manifest.
Why: the layer gives the panel exactly what it needs: a catalog for each language,
placeholders, plural forms from Intl.PluralRules, and a user-controlled setting. A
general-purpose library would add bytes, a second naming scheme, and a message format nothing
here uses.
The condition to open this decision again: a language with rules Intl cannot express, or
many more languages than Gopher has today.
Read localization and the stack.