Application Localization

Application developers know perfectly well what software localization and L10n are (Localization: L, N, and 10 letters in between). Usually, localization looks like a set of keys and values in different languages. For example:
lang["ru"]["name_of_label"] = "Название лейбла";
lang["en"]["name_of_label"] = "Label name";
It works simply: depending on the selected language, the user sees the corresponding translation in the interface.
While working on the Streaklane app, whose target audience is fairly broad - from children to top managers - I had a thought: what if a localization file were tied not only to language, but also to age, level of digital literacy, role, or other user characteristics?
For example, an interface for a preschool child could be more visual and built around emojis and simple words. For a user who is not comfortable with technical terms, the wording could be clearer. For a teenager - more lively and informal. For a professional - more precise and compact terminology.
Technically, this idea is already quite feasible at the i18n level. If localization can account for plurals, cases, gender, and other parameters, then another layer can be added - a user profile:
lang["ru"]["child"]["start_button"] = "🚀 Поехали!";
lang["ru"]["teen"]["start_button"] = "Погнали";
lang["ru"]["adult"]["start_button"] = "Начать";
lang["ru"]["senior"]["start_button"] = "Начать работу";
lang["ru"]["expert"]["start_button"] = "Инициализировать трек";
In practice, I would implement this not as a hard binding to age, but as an additional localization context. For example: language = ru, profile = simple, playful, standard, expert. Age can be used only as an initial setting, while the user should preferably be given the option to choose the interface style themselves.
In i18next, this can be done using the context mechanism. Then the same key will have different variants depending on the profile passed in:
t("start_button", { context: "child" });
t("start_button", { context: "expert" });
In ICU MessageFormat, a similar task can be solved through select, meaning by choosing a message variant based on a parameter:
{profile, select, child {🚀 Поехали!} teen {Погнали} expert {Инициализировать трек} other {Начать}}
In Mozilla Fluent, selectors exist for this. They allow you to describe several variants of one string and choose the needed one using an external variable:
start-button = { $profile -> [child] 🚀 Поехали! [teen] Погнали [expert] Инициализировать трек *[other] Начать }