AlphOne 0.16.0
Nothing changes for the language you already read. English stays the default, and an account that picks nothing keeps it.
What changes is that the interface is no longer English only. Each account chooses its language on the new Language screen, the choice is stored against that account rather than the installation, and the whole interface answers in it from the next page load. Spanish ships complete, so a Spanish reader gets the navigation, the screens, the buttons, the empty states and the error messages in Spanish.
Every plugin keeps its own catalogue and its own translation project, so a plugin ships translations without touching the core and a new plugin arrives translatable from birth. The plugins that ship with AlphOne, custom fields, the contact importer and WhatsApp, are all translated.
Translating needs no Git and no code. The projects are open on POEditor, linked from Translate AlphOne in the documentation, and a weekly job collects whatever translators finish and opens one pull request for a maintainer to review.
Changes that may affect existing integrations
The graph answers locale and takes setLocale(locale: String!), both under the meta scope. locale is public and answers the default before a reader signs in, while setLocale needs an account. An unsupported language is refused rather than stored.
Errors now carry a stable reason in their extensions beside the coarse code, and some carry a meta object naming the values the reason refers to. The message text still reads as before, so anything matching on it keeps working, but match on reason instead because it is the part that will not move. Read the reason catalogue in the documentation for the full list.
The server answers in English whatever language the reader chose. It holds no catalogue of its own, and the interface turns the reason into a sentence in the reader's language, so an integration reading the graph sees the same text it always did.
Upgrading
This is a normal migration and runs on container start. Migration 00015 creates core.user_settings, which holds each account's language beside any later per-account setting. Rolling it back drops the table and every stored language choice with it, so take a backup first. See Updates and backups.
Adding a language needs a small change in AlphOne itself, because the server keeps its own list of the languages a reader may pick. Ask a maintainer rather than only translating on the platform.