Languages
Vietnamese first, English second: screens, errors, export, the setup guide.
Vietnamese first, English second. How it works:
users.language:vi(the default) oren. Chosen before sign-up (the screens before sign-in open in Vietnamese with a switch to English, remembered in the browser), saved with the account, and changeable in Profile. Everything the app writes for the user follows it; nothing stored in the ledger is translated.- No email, so no email templates.
- Screens: one string file per language (
web/src/i18n/vi.json,en.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. - 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, Vietnamese at
/. - AI advice, when it ships: written in the language of the owner who turned AI on.