Most of this release is translation. The locale files were complete in the sense that every key existed, which is why nothing looked broken and every test passed - but in many languages the value behind the key was still the English original. The second half is about money: an amount field now knows what currency it holds, and says so before you save rather than after.
Fixed
- Large parts of the app were still English in up to 21 languages. The locale files carried every key, so nothing looked broken and every test passed, but in many languages the value was simply the untranslated English text. Those screens read as English to everyone outside the German and English households. Just over 4,000 strings are now actually translated, across subscriptions, the budget categories and the loan screens, the shared category manager, calendar attachments and sync targets, the SMTP form, bulk actions on tasks, document folders, dashboard widgets, meals, onboarding, reminder lead times, the offline banner, the whole Housekeeping module, and the installer.
- Greek, Arabic, Hindi, Japanese, Korean, Russian, Ukrainian, Persian and Chinese showed German text in places, not English. Anyone reading those languages got a string they had no way to parse. The last of these are gone: the contact nickname field and the weekday initials in the cycle calendar, which stood at "Mo Di Mi Do" in all 21 languages and now use each language's own abbreviations. Arabic gets short forms rather than the full weekday names it uses elsewhere, because the calendar header is seven fixed columns and long names spill into the next one.
- Six settings strings were German in the English locale file too, among them the CalDAV and CardDAV help tooltips and the sync status. English is the file every other translation was written against, so ten languages had copied the German text into their own files from there. The English wording is now actually English, and the copies are corrected.
- The Swedish word for a file attachment was wrong: calendar attachments were labelled "Fastsättning", which means fastening something in place, not a file attached to an entry. It now reads "Bilaga", the word the rest of the Swedish translation already used.
- Amount fields showed the wrong number format. The placeholder was a fixed string per language, so Czech, Hungarian and Vietnamese got a decimal point where those languages use a comma, and Swiss German got a comma where it uses a point. The placeholder, the step size and the lower bound now follow the currency and the configured region: euro amounts step in cents, yen, won, forint, rupiah, rial and Chilean peso in whole units. This covers every field that carries a currency - budget entries and plans, account balances, loans, subscriptions and the subscription budget, shared expenses and settlements, and the housekeeping rates. Where the currency can be picked in the same form, the field follows the choice instead of keeping the format of the previous currency. The step size is also enforced when saving, not just displayed: none of these dialogues is a form, so the browser never checked it, and a loan of 12.5 yen was stored as entered while the app displayed it rounded.
- Amounts typed the way the app itself suggested were rejected on saving. A shared expense showed "0,00" as its hint, and in Persian or Egyptian Arabic even "۰٫۰۰", but only a dot-separated ASCII number ever reached the server. Entering the suggested format now works in every language. Amounts written with a thousands separator are refused instead of guessed at: "1.000" means a thousand in German and one as a decimal number, and taking the wrong reading would be off by a factor of a thousand. That refusal keys on the pattern rather than the character, so "12.50" still counts as twelve-fifty.
- The translations follow the vocabulary each language already used for the module itself rather than introducing a second term for the same thing, so Housekeeping stays Limpieza, Ménage, Уборка or 家事 throughout, including in the calendar entries, payment tasks and receipts it generates.