Summary
Testing translations/swahili.json on BTCPay Server v2.4.0 revealed untranslated English text, mixed English/Swahili sentences, missing dynamic strings and case-sensitive key mismatches.
Affected areas
Missing or untranslated strings were found in:
- Reports and debug pages
- Payout status tabs
- Invoice, payment-request and wallet date filters
- Store users and role names
- Role permission descriptions
- Wallet transaction empty states
- Email configuration
Examples include:
Create fake data
Report: Invoices
Raw data
No data
Awaiting Approval
Awaiting Payment
In Progress
Cancelled
Today, Yesterday, This week, Last month
Owner, Manager, Employee, Guest
There are no transactions yet.
Use mailpit
Some existing translations—including Active, Expired, Completed and Name—still appear in English in certain components. This may indicate stale translation data or a separate client-side localization path.
There is also a case mismatch between the existing Custom Range key and the UI string Custom range.
Native browser labels such as Choose file and No file chosen are not controlled by the BTCPay language pack.
Proposed work
- Compare the live English strings from
/cheat/translations/default-en with swahili.json
- Add and translate missing keys
- Fix mixed or incomplete Swahili translations
- Audit the rest of the file for English fallbacks and inconsistent terminology
- Preserve placeholders, HTML and technical terms
- Validate the JSON and retest the affected pages
Acceptance criteria
- No unexplained English fallbacks or mixed-language sentences
- Consistent translations for statuses, roles and permissions
- Valid JSON with intact placeholders and markup
- Upstream or browser-controlled strings documented separately
Screenshots from the local test instance:

Summary
Testing
translations/swahili.jsonon BTCPay Serverv2.4.0revealed untranslated English text, mixed English/Swahili sentences, missing dynamic strings and case-sensitive key mismatches.Affected areas
Missing or untranslated strings were found in:
Examples include:
Create fake dataReport: InvoicesRaw dataNo dataAwaiting ApprovalAwaiting PaymentIn ProgressCancelledToday,Yesterday,This week,Last monthOwner,Manager,Employee,GuestThere are no transactions yet.Use mailpitSome existing translations—including
Active,Expired,CompletedandName—still appear in English in certain components. This may indicate stale translation data or a separate client-side localization path.There is also a case mismatch between the existing
Custom Rangekey and the UI stringCustom range.Native browser labels such as
Choose fileandNo file chosenare not controlled by the BTCPay language pack.Proposed work
/cheat/translations/default-enwithswahili.jsonAcceptance criteria
Screenshots from the local test instance: