libra: i18n the expense form (AddExpense.vue) to match the income form #140
Labels
No labels
app:activities
app:chat
app:events
app:forum
app:libra
app:market
app:restaurant
app:tasks
app:wallet
app:webapp
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiolabs/webapp#140
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Neither libra entry form is fully translated, but they diverge in how much they i18n — and the expense form does none of it, so French/Spanish users get a mismatched experience.
src/modules/expenses/components/AddExpense.vue: no i18n at all (nouseI18n/t()calls). Every string is hardcoded: step instructions,Description *,Amount *,Currency *,Reference, allFormDescriptionhelper texts, placeholders, the success-dialog copy, buttons, etc.src/accounting-app/views/AddIncome.vue: partially i18n'd — onlylibra.income.{title,description,selectAccount,submitIncome}go throught(). The field labels, placeholders, helper texts, success dialog, "Pending Admin Approval" badge, and the Back button are also hardcoded English.This surfaced while adding the "Other" account note to both forms (#139): the income note went in as a proper i18n key across en/fr/es, but the expense form's equivalent note (from #138) is hardcoded English and won't translate.
Scope
Fully internationalize both forms — extract all remaining hardcoded strings into
libra.expense.*/libra.income.*keys and translate them, mirroring the partial structure already present for income.libra.expense.*andlibra.income.*keys insrc/i18n/locales/en.ts,fr.ts,es.ts(and thesrc/i18n/types.tsinterface).AddExpense.vue: wire upuseI18n, replace every hardcoded string witht('libra.expense.…')— Step 1 instruction + "Other" note (from #138), Step 2 labels/placeholders/helper texts, equity checkbox label/description, success-dialog copy, Back/Submit buttons, dialog title/description.AddIncome.vue: replace the remaining hardcoded strings (field labels, placeholders, helper texts, success dialog, badge, Back button) witht('libra.income.…').expense.*andincome.*where the two forms share concepts (e.g.selectAccount, amount/currency helpers, success copy) so they stay parallel.\uescapes, es uses raw UTF-8).Notes
AccountSelector.vueis shared by both forms; check whether it has its own hardcoded strings that also need extracting.Source: surfaced during #139 review, 2026-06-25.