You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Due for payment 2026-01-09] [$250] Create expense - Some currencies show the name and some show the currency signs before entering the amount #75709
Version Number: 9.2.61 Reproducible in staging?: Y Reproducible in production?: Y If this was caught during regression testing, add the test name, ID and link from TestRail: N/A Email or phone of affected tester (no customers):mootuswami698@gmail.com Issue reported by: Applause - Internal Team
🚨 Edited by proposal-police: This proposal was edited at 2025-12-12 14:50:34 UTC.
Proposal
Please re-state the problem that we are trying to solve in this issue.
In the Create expense flow, when the user selects a currency and sees the amount input:
Some currencies show a currency sign/symbol before entering the amount.
Other currencies show a text value (like the currency code/name) instead of a symbol.
We want to show the currency symbol when we have one, and otherwise keep the existing localized display behavior, so the prefix is as clear and consistent as possible across devices.
What is the root cause of that problem?
The amount input uses MoneyRequestAmountInput, which in turn sets the symbol by calling:
getLocalizedCurrencySymbol(currencyCode)
getLocalizedCurrencySymbol relies on Intl.NumberFormat via formatToParts and IntlStore.getCurrentLocale() to extract the currency part.
For some currencies and locales, Intl.NumberFormat does not return a dedicated symbol and instead returns the currency code/name (e.g. CLP, COP, etc.). This means:
Some currencies render as a symbol.
Some render as a code/name.
The behavior can also vary by browser/OS support.
At the same time, the app already has a canonical currency list in Onyx (CURRENCY_LIST), where each currency entry includes a symbol field. This list is what we use in other parts of the app to represent currencies consistently.
So the root cause is:
We are relying on Intl (via getLocalizedCurrencySymbol) to derive the prefix symbol in MoneyRequestAmountInput, instead of using the existing CURRENCY_LIST.symbol, which leads to inconsistent display between currencies and environments.
What changes do you think we should make in order to solve the problem?
I propose that we stop depending solely on getLocalizedCurrencySymbol for the amount input symbol and instead use the currency symbol from CURRENCY_LIST.
Concretely:
Read the symbol from CURRENCY_LIST in the Create expense step container
In IOURequestStepAmount (the step that renders MoneyRequestAmountInput for Create expense), we already have access to Onyx hooks.
We can read the full currency list from Onyx and derive the symbol for the currently selected currency, for example:
Get currencyList from ONYXKEYS.CURRENCY_LIST.
Compute currencySymbol from currencyList[currency].symbol.
Else use the existing getLocalizedCurrencySymbol(currency) fallback (so locale-specific currency text remains possible)
With this change, the symbol shown before entering the amount on the Create expense screen will always come from CURRENCY_LIST.symbol, so all supported currencies will:
Display a consistent sign.
No longer depend on Intl differences between devices.
What alternative solutions did you explore? (Optional)
None.
Reminder: Please use plain English, be brief and avoid jargon. Feel free to use images, charts or pseudo-code if necessary. Do not post large multi-line diffs or write walls of text. Do not create PRs unless you have been hired for this job.
Please re-state the problem that we are trying to solve in this issue.
When creating an expense and selecting different currencies, some currencies display currency symbols (like $, €, ₹) while others display currency codes (like INR, JPY, RSD) in the amount input field. This creates an inconsistent user experience.
What is the root cause of that problem?
The currency selection list uses getCurrencySymbol() to display symbols, but the amount input components use getLocalizedCurrencySymbol(). The getLocalizedCurrencySymbol() function relies on the browser's Intl API, which may return the currency code itself when a proper symbol isn't available, causing the inconsistency.
What changes do you think we should make in order to solve the problem?
Replace getLocalizedCurrencySymbol() with getCurrencySymbol() in both amount input components to ensure all currency symbols are retrieved from the same source.
What alternative solutions did you explore? (Optional)
An alternative would be to update CurrencySelectionList to use getLocalizedCurrencySymbol() instead, but this would be less reliable since it depends on browser support and could show different symbols for different users based on their browser/locale settings.
changed the title [-]Create expense - Some currencies show the name and some show the currency signs before entering the amount[/-][+][$250] Create expense - Some currencies show the name and some show the currency signs before entering the amount[/+]on Dec 3, 2025
@parasharrajat The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the BugZero Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]
Issue is ready for payment but no BZ is assigned. @lydiabarclay you are the lucky winner! Please verify the payment summary looks correct and complete the checklist. Thanks!
changed the title [-][Due for payment 2026-01-09] [Due for payment 2026-01-07] [$250] Create expense - Some currencies show the name and some show the currency signs before entering the amount[/-][+][Due for payment 2026-01-09] [$250] Create expense - Some currencies show the name and some show the currency signs before entering the amount[/+]on Jan 10, 2026
Activity
melvin-bot commentedon Nov 20, 2025
Triggered auto assignment to @muttmuure (
Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details. Please add this bug to a GH project, as outlined in the SO.thedavos commentedon Nov 21, 2025
🚨 Edited by proposal-police: This proposal was edited at 2025-12-12 14:50:34 UTC.
Proposal
Please re-state the problem that we are trying to solve in this issue.
In the Create expense flow, when the user selects a currency and sees the amount input:
We want to show the currency symbol when we have one, and otherwise keep the existing localized display behavior, so the prefix is as clear and consistent as possible across devices.
What is the root cause of that problem?
The amount input uses
MoneyRequestAmountInput, which in turn sets thesymbolby calling:getLocalizedCurrencySymbol relies on Intl.NumberFormat via formatToParts and IntlStore.getCurrentLocale() to extract the currency part.
For some currencies and locales, Intl.NumberFormat does not return a dedicated symbol and instead returns the currency code/name (e.g. CLP, COP, etc.). This means:
At the same time, the app already has a canonical currency list in Onyx (CURRENCY_LIST), where each currency entry includes a
symbolfield. This list is what we use in other parts of the app to represent currencies consistently.So the root cause is:
We are relying on
Intl(viagetLocalizedCurrencySymbol) to derive the prefix symbol inMoneyRequestAmountInput, instead of using the existingCURRENCY_LIST.symbol, which leads to inconsistent display between currencies and environments.What changes do you think we should make in order to solve the problem?
I propose that we stop depending solely on getLocalizedCurrencySymbol for the amount input symbol and instead use the currency symbol from CURRENCY_LIST.
Concretely:
In IOURequestStepAmount (the step that renders MoneyRequestAmountInput for Create expense), we already have access to Onyx hooks.
We can read the full currency list from Onyx and derive the symbol for the currently selected currency, for example:
With this change, the symbol shown before entering the amount on the Create expense screen will always come from CURRENCY_LIST.symbol, so all supported currencies will:
What alternative solutions did you explore? (Optional)
None.
Reminder: Please use plain English, be brief and avoid jargon. Feel free to use images, charts or pseudo-code if necessary. Do not post large multi-line diffs or write walls of text. Do not create PRs unless you have been hired for this job.
abbasifaizan70 commentedon Nov 21, 2025
Proposal
Please re-state the problem that we are trying to solve in this issue.
When creating an expense and selecting different currencies, some currencies display currency symbols (like $, €, ₹) while others display currency codes (like INR, JPY, RSD) in the amount input field. This creates an inconsistent user experience.
What is the root cause of that problem?
The currency selection list uses
getCurrencySymbol()to display symbols, but the amount input components usegetLocalizedCurrencySymbol(). ThegetLocalizedCurrencySymbol()function relies on the browser's Intl API, which may return the currency code itself when a proper symbol isn't available, causing the inconsistency.What changes do you think we should make in order to solve the problem?
Replace
getLocalizedCurrencySymbol()withgetCurrencySymbol()in both amount input components to ensure all currency symbols are retrieved from the same source.1. Update
MoneyRequestAmountInput.tsxhttps://github.com/Expensify/App/blob/main/src/components/MoneyRequestAmountInput.tsx
Change the import on line 4:
Change the symbol prop on line 226:
2. Update
AmountForm.tsxhttps://github.com/Expensify/App/blob/main/src/components/AmountForm.tsx
Change the import on line 4:
Change the symbol prop on line 90:
What alternative solutions did you explore? (Optional)
An alternative would be to update
CurrencySelectionListto usegetLocalizedCurrencySymbol()instead, but this would be less reliable since it depends on browser support and could show different symbols for different users based on their browser/locale settings.melvin-bot commentedon Nov 28, 2025
@muttmuure Still overdue 6 days?! Let's take care of this!
[-]Create expense - Some currencies show the name and some show the currency signs before entering the amount[/-][+][$250] Create expense - Some currencies show the name and some show the currency signs before entering the amount[/+]melvin-bot commentedon Dec 3, 2025
Job added to Upwork: https://www.upwork.com/jobs/~021996314749314410515
melvin-bot commentedon Dec 3, 2025
Triggered auto assignment to Contributor-plus team member for initial proposal review - @parasharrajat (
External)43 remaining items
melvin-bot commentedon Jan 2, 2026
@parasharrajat The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the BugZero Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]
melvin-bot commentedon Jan 9, 2026
Issue is ready for payment but no BZ is assigned. @lydiabarclay you are the lucky winner! Please verify the payment summary looks correct and complete the checklist. Thanks!
lydiabarclay commentedon Jan 10, 2026
Payment Summary
Contributor: @thedavos paid $250 via Upwork
Contributor+: @parasharrajat due $250 via NewDot
✅ No regression test necessary
lydiabarclay commentedon Jan 10, 2026
@parasharrajat can you please fill out the bz checklist
[-][Due for payment 2026-01-09] [Due for payment 2026-01-07] [$250] Create expense - Some currencies show the name and some show the currency signs before entering the amount[/-][+][Due for payment 2026-01-09] [$250] Create expense - Some currencies show the name and some show the currency signs before entering the amount[/+]parasharrajat commentedon Jan 10, 2026
@lydiabarclay We don't need this change so no checklist here.
parasharrajat commentedon Mar 19, 2026
Payment requested as per #75709 (comment)
twisterdotcom commentedon Mar 23, 2026
Confirming Payment Summary. @parasharrajat paid via New Expensify