Languages
English first, Vietnamese second: screens, errors, export, the docs.
English first, Vietnamese second. How it works:
- The screens before sign-in open in the language this browser remembers: the last signed-in user’s, kept after signing out, or the one picked before sign-in. A browser that remembers none, as on a first visit, gets English. Sign-in has no language choice; joining asks for the language with the invite code, before the account’s details; setup and reset have a language dropdown.
users.language:en(the default) orvi, picked when joining or on the setup screen, saved with the account and changeable in Profile. Once signed in, everything the app writes for the user follows it, and the browser remembers it so a reload starts in it; nothing stored in the ledger is translated. An account made before 0.2.0 keeps the language it has.- No email, so no email templates.
- Screens: one string file per language (
web/src/i18n/en.json,vi.json), shared with mobile later. The tests fail if the two files don’t have the same keys. Numbers, dates and money use the language’s locale throughIntl(1.250.000 ₫ in Vietnamese, 1,250,000 ₫ in English). Amount fields group thousands while typing and parse by the same locale and the currency’s decimals, so “1.250” typed in Vietnamese for VND is 1250, not 1.25. Date fields are typed and shown day first (DD-MM-YYYY) in both languages, whatever the browser’s own language, with the calendar in the UI language. - Errors: every error a user can cause starts with a code (
currency_locked,txn_shape,owner_required,invite_invalid, …; Error codes). The clients show a message for the code in the user’s language; the English text after it in the database is for developers. - Labels from the database are English and translated by the app:
book_peopleandmy_pending_invites()return “Deleted user” (Vietnamese: “Người dùng đã xóa”), andcurrencies.nameis English. - Starter categories (backend/app/domain/book_setup.py) are created in the user’s language when a book is made, then are ordinary text the user can rename.
- Export: README, column headers and fixed values (types, roles, periods) in the user’s language; names, payees and notes as typed.
- Documentation (these docs, the README, code comments): English only. The landing site’s pages are in both
languages: English at
/, Vietnamese at/vi/. - AI advice, when it ships: written in the language of the owner who turned AI on.