v1.8.9
- Fix Two-factor authentication could never be enabled: the recovery-codes table was referenced by every setup since 1.6.0 but created by no migration, so a valid code was reported as invalid
- Feature The customer panel is translated into ten languages: German, French, Spanish, Italian, Dutch, Portuguese, Turkish, Russian, Polish and Romanian
- Feature Restore a single site from a backup instead of the whole account, leaving your other sites at their current state
- Feature Publish a staging site to live - files only, or files and database - with a backup of production taken first
- Fix The notification dropdown could not be scrolled and its View all link did nothing; marking a notification read now updates immediately
- Feature Notification titles and messages are translated too, including notifications already in your list
- Feature Dates, times and counts follow the language you chose rather than your browser's, with correct plural forms per language
- Fix A rejected two-factor code now says whether the two clocks disagree, and by how much, instead of only 'invalid code'
- Feature Your language choice is stored on your account, so it follows you to another device
- Infra New tests catch a whole class of shipped bugs: SQL naming a table no migration creates, the language list's two halves drifting apart, plural forms a language is missing, and untranslated text in the interface