refactor(i18n): resolve the locale per request
The locale belongs to the request, the translator is shared. LocaleResolver holds the
choice (?setlng, then the session, the profile, the system default) and the kernel
applies it once the current user is known.
Setting the locale is no longer enough on its own: addTranslationDomain() loads
<locale>.lng.php at registration time, and domains are registered from the constructors
of the shared controllers — once per process. So setLocale() now reloads the dictionary
of every registered domain and restores the default one; the same locale stays a no-op.
choice (?setlng, then the session, the profile, the system default) and the kernel
applies it once the current user is known.
Setting the locale is no longer enough on its own: addTranslationDomain() loads
<locale>.lng.php at registration time, and domains are registered from the constructors
of the shared controllers — once per process. So setLocale() now reloads the dictionary
of every registered domain and restores the default one; the same locale stays a no-op.