From 606372cc1413b5dd704d771297aabbf1e8fc376c Mon Sep 17 00:00:00 2001 From: allgandaf Date: Tue, 14 Apr 2026 01:32:21 +0530 Subject: [PATCH 01/11] Add NVP_PRIVATE_FREEBIE_CREDITS Onyx key and type --- src/ONYXKEYS.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 0fa0a003371b..8e3002f8c677 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -272,8 +272,11 @@ const ONYXKEYS = { /** ID associated with the payment card added by the user. */ NVP_BILLING_FUND_ID: 'nvp_expensify_billingFundID', + /** The user’s freebie credits balance (in cents). */ + NVP_PRIVATE_FREEBIE_CREDITS: ‘nvp_private_freebieCredits’, + /** The amount owed by the workspace’s owner. */ - NVP_PRIVATE_AMOUNT_OWED: 'nvp_private_amountOwed', + NVP_PRIVATE_AMOUNT_OWED: ‘nvp_private_amountOwed’, /** The end date (epoch timestamp) of the workspace owner’s grace period after the free trial ends. */ NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END: 'nvp_private_billingGracePeriodEnd', @@ -1469,6 +1472,7 @@ type OnyxValuesMapping = { [ONYXKEYS.NVP_FIRST_DAY_FREE_TRIAL]: string; [ONYXKEYS.NVP_LAST_DAY_FREE_TRIAL]: string; [ONYXKEYS.NVP_BILLING_FUND_ID]: number; + [ONYXKEYS.NVP_PRIVATE_FREEBIE_CREDITS]: number; [ONYXKEYS.NVP_PRIVATE_AMOUNT_OWED]: number; [ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END]: number; [ONYXKEYS.NVP_DELETE_TRANSACTION_NAVIGATE_BACK_URL]: string | undefined; From acb2c59ca607d77b930232798f9fee5a204b88fa Mon Sep 17 00:00:00 2001 From: allgandaf Date: Tue, 14 Apr 2026 01:33:31 +0530 Subject: [PATCH 02/11] Add creditsBalance translation strings for all languages --- src/languages/de.ts | 1 + src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/languages/fr.ts | 3 ++- src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + 10 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 528a9d66c2a4..03d20833f534 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -8501,6 +8501,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc confirm: 'Workspace(s) löschen und herabstufen', }, viewPaymentHistory: 'Zahlungsverlauf anzeigen', + creditsBalance: ({amount}: {amount: string}) => `Sie haben ${amount} an Expensify-Guthaben`, }, yourPlan: { title: 'Ihr Tarif', diff --git a/src/languages/en.ts b/src/languages/en.ts index a04805947ab5..f7ff7031cb6c 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -8462,6 +8462,7 @@ const translations = { confirm: 'Delete workspace(s) and downgrade', }, viewPaymentHistory: 'View payment history', + creditsBalance: ({amount}: {amount: string}) => `You have ${amount} in Expensify credits`, }, yourPlan: { title: 'Your plan', diff --git a/src/languages/es.ts b/src/languages/es.ts index 0461da9f4139..cb7c812b8548 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -8692,6 +8692,7 @@ ${amount} para ${merchant} - ${date}`, confirm: 'Eliminar y bajar de categoría', }, viewPaymentHistory: 'Ver historial de pagos', + creditsBalance: ({amount}: {amount: string}) => `Tienes ${amount} en créditos de Expensify`, }, yourPlan: { title: 'Tu plan', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index bd20c4d0171a..2787ea8a74ec 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -8522,7 +8522,8 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e full: 'Obtenir un remboursement est facile, il vous suffit de rétrograder votre compte avant votre prochaine date de facturation et vous recevrez un remboursement.

Attention : rétrograder votre compte signifie que votre (vos) espace(s) de travail sera (seront) supprimé(s). Cette action est irréversible, mais vous pouvez toujours créer un nouvel espace de travail si vous changez d’avis.', confirm: 'Supprimer l’(les) espace(s) de travail et rétrograder', }, - viewPaymentHistory: 'Voir l’historique des paiements', + viewPaymentHistory: ‘Voir l’historique des paiements’, + creditsBalance: ({amount}: {amount: string}) => `Vous avez ${amount} en crédits Expensify`, }, yourPlan: { title: 'Votre offre', diff --git a/src/languages/it.ts b/src/languages/it.ts index addcfd8949a1..833b7b5be490 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -8489,6 +8489,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, confirm: 'Elimina area(e) di lavoro e esegui il downgrade', }, viewPaymentHistory: 'Visualizza cronologia pagamenti', + creditsBalance: ({amount}: {amount: string}) => `Hai ${amount} in crediti Expensify`, }, yourPlan: { title: 'Il tuo piano', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 7d6ff009425e..5c89159b85c1 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -8382,6 +8382,7 @@ ${reportName} confirm: 'ワークスペースを削除してダウングレード', }, viewPaymentHistory: '支払い履歴を表示', + creditsBalance: ({amount}: {amount: string}) => `Expensifyクレジットが${amount}あります`, }, yourPlan: { title: 'あなたのプラン', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 6185ff36c3f7..d5f1175ae204 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -8464,6 +8464,7 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, confirm: 'Werkruimte(s) verwijderen en downgraden', }, viewPaymentHistory: 'Betalingsgeschiedenis bekijken', + creditsBalance: ({amount}: {amount: string}) => `Je hebt ${amount} aan Expensify-tegoed`, }, yourPlan: { title: 'Uw abonnement', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 751218331082..da9f6c666bb9 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -8449,6 +8449,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, confirm: 'Usuń przestrzeń(e) roboczą(e) i zdegraduj plan', }, viewPaymentHistory: 'Wyświetl historię płatności', + creditsBalance: ({amount}: {amount: string}) => `Masz ${amount} w kredytach Expensify`, }, yourPlan: { title: 'Twój plan', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 550417b26fb6..6f8581924c1c 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -8457,6 +8457,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, confirm: 'Excluir espaço(s) de trabalho e rebaixar', }, viewPaymentHistory: 'Ver histórico de pagamentos', + creditsBalance: ({amount}: {amount: string}) => `Você tem ${amount} em créditos Expensify`, }, yourPlan: { title: 'Seu plano', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index e8286f24f5c2..0f54f58055a6 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -8222,6 +8222,7 @@ ${reportName} confirm: '删除工作区并降级', }, viewPaymentHistory: '查看付款记录', + creditsBalance: ({amount}: {amount: string}) => `您有 ${amount} 的 Expensify 积分`, }, yourPlan: { title: '您的方案', From 19352563869e1278293f4c9adea4350bcbd48132 Mon Sep 17 00:00:00 2001 From: allgandaf Date: Tue, 14 Apr 2026 01:40:25 +0530 Subject: [PATCH 03/11] Fix smart quotes in PRIVATE_FREEBIE_CREDITS Onyx key --- src/ONYXKEYS.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 8e3002f8c677..26e0a07bd4b6 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -272,8 +272,8 @@ const ONYXKEYS = { /** ID associated with the payment card added by the user. */ NVP_BILLING_FUND_ID: 'nvp_expensify_billingFundID', - /** The user’s freebie credits balance (in cents). */ - NVP_PRIVATE_FREEBIE_CREDITS: ‘nvp_private_freebieCredits’, + /** The user's freebie credits balance (in cents). */ + NVP_PRIVATE_FREEBIE_CREDITS: 'nvp_private_freebieCredits', /** The amount owed by the workspace’s owner. */ NVP_PRIVATE_AMOUNT_OWED: ‘nvp_private_amountOwed’, From ed7b57edc52108302ace92d31baba2c45e7c3c21 Mon Sep 17 00:00:00 2001 From: allgandaf Date: Tue, 14 Apr 2026 01:40:31 +0530 Subject: [PATCH 04/11] Display freebie credits balance in subscription CardSection --- .../settings/Subscription/CardSection/CardSection.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/pages/settings/Subscription/CardSection/CardSection.tsx b/src/pages/settings/Subscription/CardSection/CardSection.tsx index 5e41fb99d3a1..262086f05cde 100644 --- a/src/pages/settings/Subscription/CardSection/CardSection.tsx +++ b/src/pages/settings/Subscription/CardSection/CardSection.tsx @@ -1,5 +1,5 @@ import React, {useCallback, useEffect, useMemo, useState} from 'react'; -import {View} from 'react-native'; +import {Text, View} from 'react-native'; import MenuItem from '@components/MenuItem'; import {ModalActions} from '@components/Modal/Global/ModalContext'; import PaymentCardDetails from '@components/PaymentCardDetails'; @@ -15,6 +15,7 @@ import usePrivateSubscription from '@hooks/usePrivateSubscription'; import useSubscriptionPlan from '@hooks/useSubscriptionPlan'; import useThemeStyles from '@hooks/useThemeStyles'; import {requestRefund as requestRefundByUser} from '@libs/actions/User'; +import {convertToDisplayString} from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; import {buildQueryStringFromFilterFormValues} from '@libs/SearchQueryUtils'; import {hasCardAuthenticatedError, isUserOnFreeTrial, shouldShowDiscountBanner, shouldShowPreTrialBillingBanner, shouldShowTrialEndedUI} from '@libs/SubscriptionUtils'; @@ -67,6 +68,7 @@ function CardSection() { const [userBillingFundID] = useOnyx(ONYXKEYS.NVP_BILLING_FUND_ID); const [billingStatusOnyx] = useOnyx(ONYXKEYS.NVP_PRIVATE_BILLING_STATUS); const [amountOwed = 0] = useOnyx(ONYXKEYS.NVP_PRIVATE_AMOUNT_OWED); + const [freebieCredits] = useOnyx(ONYXKEYS.NVP_PRIVATE_FREEBIE_CREDITS); const [ownerBillingGracePeriodEnd] = useOnyx(ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END); const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); const [isGrandfatheredFree] = useOnyx(ONYXKEYS.NVP_PRIVATE_GRANDFATHERED_FREE); @@ -259,6 +261,12 @@ function CardSection() { /> )} + {!!freebieCredits && freebieCredits > 0 && ( + + {translate('subscription.cardSection.creditsBalance', {amount: convertToDisplayString(freebieCredits, defaultCard?.accountData?.currency ?? CONST.CURRENCY.USD)})} + + )} + {!!(subscriptionPlan && account?.isEligibleForRefund) && ( Date: Tue, 14 Apr 2026 02:10:57 +0530 Subject: [PATCH 05/11] Fix smart quote encoding in ONYXKEYS and fr.ts --- src/ONYXKEYS.ts | 2 +- src/languages/fr.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts index 26e0a07bd4b6..0a51908bce9c 100755 --- a/src/ONYXKEYS.ts +++ b/src/ONYXKEYS.ts @@ -276,7 +276,7 @@ const ONYXKEYS = { NVP_PRIVATE_FREEBIE_CREDITS: 'nvp_private_freebieCredits', /** The amount owed by the workspace’s owner. */ - NVP_PRIVATE_AMOUNT_OWED: ‘nvp_private_amountOwed’, + NVP_PRIVATE_AMOUNT_OWED: 'nvp_private_amountOwed', /** The end date (epoch timestamp) of the workspace owner’s grace period after the free trial ends. */ NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END: 'nvp_private_billingGracePeriodEnd', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index a46e0b2f1a3d..a2a34fc668b1 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -8544,7 +8544,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e full: 'Obtenir un remboursement est facile, il vous suffit de rétrograder votre compte avant votre prochaine date de facturation et vous recevrez un remboursement.

Attention : rétrograder votre compte signifie que votre (vos) espace(s) de travail sera (seront) supprimé(s). Cette action est irréversible, mais vous pouvez toujours créer un nouvel espace de travail si vous changez d’avis.', confirm: 'Supprimer l’(les) espace(s) de travail et rétrograder', }, - viewPaymentHistory: ‘Voir l’historique des paiements’, + viewPaymentHistory: 'Voir l’historique des paiements', creditsBalance: ({amount}: {amount: string}) => `Vous avez ${amount} en crédits Expensify`, }, yourPlan: { From d0dd4feff9fad1253eb15efdec3e3d6d3f1a5c3c Mon Sep 17 00:00:00 2001 From: allgandaf Date: Wed, 15 Apr 2026 00:50:47 +0530 Subject: [PATCH 06/11] Use Text from @components instead of react-native --- src/pages/settings/Subscription/CardSection/CardSection.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/settings/Subscription/CardSection/CardSection.tsx b/src/pages/settings/Subscription/CardSection/CardSection.tsx index 7d77c8b90861..b8de6b5a5bcc 100644 --- a/src/pages/settings/Subscription/CardSection/CardSection.tsx +++ b/src/pages/settings/Subscription/CardSection/CardSection.tsx @@ -1,10 +1,11 @@ import React, {useCallback, useEffect, useMemo, useState} from 'react'; -import {Text, View} from 'react-native'; +import {View} from 'react-native'; import MenuItem from '@components/MenuItem'; import {ModalActions} from '@components/Modal/Global/ModalContext'; import PaymentCardDetails from '@components/PaymentCardDetails'; import RenderHTML from '@components/RenderHTML'; import Section from '@components/Section'; +import Text from '@components/Text'; import useConfirmModal from '@hooks/useConfirmModal'; import useHasTeam2025Pricing from '@hooks/useHasTeam2025Pricing'; import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; From d337271f01c6f0d50a45a61646c031ae183d290f Mon Sep 17 00:00:00 2001 From: allgandaf Date: Wed, 15 Apr 2026 01:06:00 +0530 Subject: [PATCH 07/11] Remove credits display from CardSection --- .../settings/Subscription/CardSection/CardSection.tsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/pages/settings/Subscription/CardSection/CardSection.tsx b/src/pages/settings/Subscription/CardSection/CardSection.tsx index b8de6b5a5bcc..16f5338ce6cc 100644 --- a/src/pages/settings/Subscription/CardSection/CardSection.tsx +++ b/src/pages/settings/Subscription/CardSection/CardSection.tsx @@ -5,7 +5,6 @@ import {ModalActions} from '@components/Modal/Global/ModalContext'; import PaymentCardDetails from '@components/PaymentCardDetails'; import RenderHTML from '@components/RenderHTML'; import Section from '@components/Section'; -import Text from '@components/Text'; import useConfirmModal from '@hooks/useConfirmModal'; import useHasTeam2025Pricing from '@hooks/useHasTeam2025Pricing'; import {useMemoizedLazyExpensifyIcons, useMemoizedLazyIllustrations} from '@hooks/useLazyAsset'; @@ -16,7 +15,6 @@ import usePrivateSubscription from '@hooks/usePrivateSubscription'; import useSubscriptionPlan from '@hooks/useSubscriptionPlan'; import useThemeStyles from '@hooks/useThemeStyles'; import {requestRefund as requestRefundByUser} from '@libs/actions/User'; -import {convertToDisplayString} from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; import {buildQueryStringFromFilterFormValues} from '@libs/SearchQueryUtils'; import {hasCardAuthenticatedError, isUserOnFreeTrial, shouldShowDiscountBanner, shouldShowPreTrialBillingBanner, shouldShowTrialEndedUI} from '@libs/SubscriptionUtils'; @@ -69,7 +67,6 @@ function CardSection() { const [userBillingFundID] = useOnyx(ONYXKEYS.NVP_BILLING_FUND_ID); const [billingStatusOnyx] = useOnyx(ONYXKEYS.NVP_PRIVATE_BILLING_STATUS); const [amountOwed = 0] = useOnyx(ONYXKEYS.NVP_PRIVATE_AMOUNT_OWED); - const [freebieCredits] = useOnyx(ONYXKEYS.NVP_PRIVATE_FREEBIE_CREDITS); const [ownerBillingGracePeriodEnd] = useOnyx(ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END); const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); const [isGrandfatheredFree] = useOnyx(ONYXKEYS.NVP_PRIVATE_GRANDFATHERED_FREE); @@ -262,12 +259,6 @@ function CardSection() { /> )} - {!!freebieCredits && freebieCredits > 0 && ( - - {translate('subscription.cardSection.creditsBalance', {amount: convertToDisplayString(freebieCredits, defaultCard?.accountData?.currency ?? CONST.CURRENCY.USD)})} - - )} - {!!(subscriptionPlan && account?.isEligibleForRefund) && ( Date: Wed, 15 Apr 2026 01:06:06 +0530 Subject: [PATCH 08/11] Display credits balance in SubscriptionSettings page --- .../Subscription/SubscriptionSettings/index.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/pages/settings/Subscription/SubscriptionSettings/index.tsx b/src/pages/settings/Subscription/SubscriptionSettings/index.tsx index 4386da60d98e..c664ae1b2fb9 100644 --- a/src/pages/settings/Subscription/SubscriptionSettings/index.tsx +++ b/src/pages/settings/Subscription/SubscriptionSettings/index.tsx @@ -1,5 +1,5 @@ import {hasSeenTourSelector} from '@selectors/Onboarding'; -import React from 'react'; +import React, {useMemo} from 'react'; import type {StyleProp, TextStyle} from 'react-native'; import {View} from 'react-native'; import {useDelegateNoAccessActions, useDelegateNoAccessState} from '@components/DelegateNoAccessModalProvider'; @@ -30,7 +30,7 @@ import useTheme from '@hooks/useTheme'; import useThemeIllustrations from '@hooks/useThemeIllustrations'; import useThemeStyles from '@hooks/useThemeStyles'; import {openLink} from '@libs/actions/Link'; -import {convertToShortDisplayString} from '@libs/CurrencyUtils'; +import {convertToDisplayString, convertToShortDisplayString} from '@libs/CurrencyUtils'; import {isPolicyAdmin} from '@libs/PolicyUtils'; import {getSubscriptionPrice, isSubscriptionTypeOfInvoicing} from '@libs/SubscriptionUtils'; import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan'; @@ -70,6 +70,9 @@ function SubscriptionSettings() { const {accountID: currentUserAccountID} = useCurrentUserPersonalDetails(); const isAnnual = privateSubscription?.type === CONST.SUBSCRIPTION.TYPE.ANNUAL; const [privateTaxExempt] = useOnyx(ONYXKEYS.NVP_PRIVATE_TAX_EXEMPT); + const [freebieCredits] = useOnyx(ONYXKEYS.NVP_PRIVATE_FREEBIE_CREDITS); + const [fundList] = useOnyx(ONYXKEYS.FUND_LIST); + const defaultCard = useMemo(() => Object.values(fundList ?? {}).find((card) => card.accountData?.additionalData?.isBillingCard), [fundList]); const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID); const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED); const [betas] = useOnyx(ONYXKEYS.BETAS); @@ -328,6 +331,13 @@ function SubscriptionSettings() { } /> )} + {!!freebieCredits && freebieCredits > 0 && ( + + {translate('subscription.cardSection.creditsBalance', { + amount: convertToDisplayString(freebieCredits, defaultCard?.accountData?.currency ?? CONST.CURRENCY.USD), + })} + + )} Date: Wed, 15 Apr 2026 01:10:05 +0530 Subject: [PATCH 09/11] Use MenuItemWithTopDescription for credits balance display --- .../Subscription/SubscriptionSettings/index.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pages/settings/Subscription/SubscriptionSettings/index.tsx b/src/pages/settings/Subscription/SubscriptionSettings/index.tsx index c664ae1b2fb9..58056ca7b34a 100644 --- a/src/pages/settings/Subscription/SubscriptionSettings/index.tsx +++ b/src/pages/settings/Subscription/SubscriptionSettings/index.tsx @@ -332,11 +332,12 @@ function SubscriptionSettings() { /> )} {!!freebieCredits && freebieCredits > 0 && ( - - {translate('subscription.cardSection.creditsBalance', { - amount: convertToDisplayString(freebieCredits, defaultCard?.accountData?.currency ?? CONST.CURRENCY.USD), - })} - + )} Date: Wed, 15 Apr 2026 01:10:12 +0530 Subject: [PATCH 10/11] Move creditBalance translation to subscription.details section --- src/languages/de.ts | 2 +- src/languages/en.ts | 2 +- src/languages/es.ts | 2 +- src/languages/fr.ts | 8 ++++---- src/languages/it.ts | 2 +- src/languages/ja.ts | 2 +- src/languages/nl.ts | 2 +- src/languages/pl.ts | 2 +- src/languages/pt-BR.ts | 2 +- src/languages/zh-hans.ts | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index ee02544dec52..5d95e034a3a0 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -8540,7 +8540,6 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc confirm: 'Workspace(s) löschen und herabstufen', }, viewPaymentHistory: 'Zahlungsverlauf anzeigen', - creditsBalance: ({amount}: {amount: string}) => `Sie haben ${amount} an Expensify-Guthaben`, }, yourPlan: { title: 'Ihr Tarif', @@ -8593,6 +8592,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc details: { title: 'Abonnementdetails', annual: 'Jahresabonnement', + creditBalance: 'Guthaben', taxExempt: 'Steuerbefreiungsstatus beantragen', taxExemptEnabled: 'Steuerbefreit', taxExemptStatus: 'Steuerbefreiungsstatus', diff --git a/src/languages/en.ts b/src/languages/en.ts index 6b87402a5624..e02604427925 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -8522,7 +8522,6 @@ const translations = { confirm: 'Delete workspace(s) and downgrade', }, viewPaymentHistory: 'View payment history', - creditsBalance: ({amount}: {amount: string}) => `You have ${amount} in Expensify credits`, }, yourPlan: { title: 'Your plan', @@ -8575,6 +8574,7 @@ const translations = { details: { title: 'Subscription details', annual: 'Annual subscription', + creditBalance: 'Credit balance', taxExempt: 'Request tax exempt status', taxExemptEnabled: 'Tax exempt', taxExemptStatus: 'Tax exempt status', diff --git a/src/languages/es.ts b/src/languages/es.ts index e95c598d443a..5ba20d0aefc0 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -8751,7 +8751,6 @@ ${amount} para ${merchant} - ${date}`, confirm: 'Eliminar y bajar de categoría', }, viewPaymentHistory: 'Ver historial de pagos', - creditsBalance: ({amount}: {amount: string}) => `Tienes ${amount} en créditos de Expensify`, }, yourPlan: { title: 'Tu plan', @@ -8804,6 +8803,7 @@ ${amount} para ${merchant} - ${date}`, details: { title: 'Datos de suscripción', annual: 'Suscripción anual', + creditBalance: 'Saldo de crédito', taxExempt: 'Solicitar estado de exención de impuestos', taxExemptEnabled: 'Exento de impuestos', taxExemptStatus: 'Estado de exención de impuestos', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 4ad535cea43e..4087f107c27d 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -8560,8 +8560,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e full: 'Obtenir un remboursement est facile, il vous suffit de rétrograder votre compte avant votre prochaine date de facturation et vous recevrez un remboursement.

Attention : rétrograder votre compte signifie que votre (vos) espace(s) de travail sera (seront) supprimé(s). Cette action est irréversible, mais vous pouvez toujours créer un nouvel espace de travail si vous changez d’avis.', confirm: 'Supprimer l’(les) espace(s) de travail et rétrograder', }, - viewPaymentHistory: 'Voir l’historique des paiements', - creditsBalance: ({amount}: {amount: string}) => `Vous avez ${amount} en crédits Expensify`, + viewPaymentHistory: ‘Voir l’historique des paiements’, }, yourPlan: { title: 'Votre offre', @@ -8613,8 +8612,9 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e }, details: { title: 'Détails de l’abonnement', - annual: 'Abonnement annuel', - taxExempt: 'Demander le statut d’exonération fiscale', + annual: ‘Abonnement annuel’, + creditBalance: ‘Solde créditeur’, + taxExempt: ‘Demander le statut d’exonération fiscale’, taxExemptEnabled: 'Exonéré d’impôt', taxExemptStatus: 'Statut d’exonération fiscale', payPerUse: 'Paiement à l’usage', diff --git a/src/languages/it.ts b/src/languages/it.ts index 6fe51134537e..5cde8b234247 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -8527,7 +8527,6 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, confirm: 'Elimina area(e) di lavoro e esegui il downgrade', }, viewPaymentHistory: 'Visualizza cronologia pagamenti', - creditsBalance: ({amount}: {amount: string}) => `Hai ${amount} in crediti Expensify`, }, yourPlan: { title: 'Il tuo piano', @@ -8580,6 +8579,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, details: { title: 'Dettagli dell’abbonamento', annual: 'Abbonamento annuale', + creditBalance: 'Saldo del credito', taxExempt: 'Richiedi esenzione fiscale', taxExemptEnabled: 'Esente da imposte', taxExemptStatus: 'Stato di esenzione fiscale', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 056ff4e1ed51..f91b053ab876 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -8420,7 +8420,6 @@ ${reportName} confirm: 'ワークスペースを削除してダウングレード', }, viewPaymentHistory: '支払い履歴を表示', - creditsBalance: ({amount}: {amount: string}) => `Expensifyクレジットが${amount}あります`, }, yourPlan: { title: 'あなたのプラン', @@ -8473,6 +8472,7 @@ ${reportName} details: { title: 'サブスクリプションの詳細', annual: '年額サブスクリプション', + creditBalance: 'クレジット残高', taxExempt: '非課税扱いを申請', taxExemptEnabled: '非課税', taxExemptStatus: '非課税ステータス', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 5c78134f1c39..e863f3e02d32 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -8502,7 +8502,6 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, confirm: 'Werkruimte(s) verwijderen en downgraden', }, viewPaymentHistory: 'Betalingsgeschiedenis bekijken', - creditsBalance: ({amount}: {amount: string}) => `Je hebt ${amount} aan Expensify-tegoed`, }, yourPlan: { title: 'Uw abonnement', @@ -8555,6 +8554,7 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, details: { title: 'Abonnementsgegevens', annual: 'Jaarabonnement', + creditBalance: 'Creditsaldo', taxExempt: 'Vrijstelling van belasting aanvragen', taxExemptEnabled: 'Vrijgesteld van belasting', taxExemptStatus: 'Belastingvrijstellingstatus', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index b83eed3a23a2..cfc11e2d458a 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -8487,7 +8487,6 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, confirm: 'Usuń przestrzeń(e) roboczą(e) i zdegraduj plan', }, viewPaymentHistory: 'Wyświetl historię płatności', - creditsBalance: ({amount}: {amount: string}) => `Masz ${amount} w kredytach Expensify`, }, yourPlan: { title: 'Twój plan', @@ -8540,6 +8539,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, details: { title: 'Szczegóły subskrypcji', annual: 'Abonament roczny', + creditBalance: 'Saldo kredytowe', taxExempt: 'Poproś o status zwolnienia z podatku', taxExemptEnabled: 'Zwolnione z podatku', taxExemptStatus: 'Status zwolnienia z podatku', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index afc1213c03ef..3ed4d5d653c4 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -8495,7 +8495,6 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, confirm: 'Excluir espaço(s) de trabalho e rebaixar', }, viewPaymentHistory: 'Ver histórico de pagamentos', - creditsBalance: ({amount}: {amount: string}) => `Você tem ${amount} em créditos Expensify`, }, yourPlan: { title: 'Seu plano', @@ -8548,6 +8547,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, details: { title: 'Detalhes da assinatura', annual: 'Assinatura anual', + creditBalance: 'Saldo de crédito', taxExempt: 'Solicitar isenção de impostos', taxExemptEnabled: 'Isento de impostos', taxExemptStatus: 'Status de isenção de impostos', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 384aec506c61..43722c7c72f4 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -8267,7 +8267,6 @@ ${reportName} confirm: '删除工作区并降级', }, viewPaymentHistory: '查看付款记录', - creditsBalance: ({amount}: {amount: string}) => `您有 ${amount} 的 Expensify 积分`, }, yourPlan: { title: '您的方案', @@ -8320,6 +8319,7 @@ ${reportName} details: { title: '订阅详情', annual: '年度订阅', + creditBalance: '积分余额', taxExempt: '申请免税状态', taxExemptEnabled: '免税', taxExemptStatus: '免税状态', From 342e7b3e5caf42610ae74c984bf6f7969e5695f1 Mon Sep 17 00:00:00 2001 From: allgandaf Date: Wed, 15 Apr 2026 01:19:40 +0530 Subject: [PATCH 11/11] Fix smart quote corruption in fr.ts --- src/languages/fr.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 4087f107c27d..67b83be1cca4 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -8560,7 +8560,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e full: 'Obtenir un remboursement est facile, il vous suffit de rétrograder votre compte avant votre prochaine date de facturation et vous recevrez un remboursement.

Attention : rétrograder votre compte signifie que votre (vos) espace(s) de travail sera (seront) supprimé(s). Cette action est irréversible, mais vous pouvez toujours créer un nouvel espace de travail si vous changez d’avis.', confirm: 'Supprimer l’(les) espace(s) de travail et rétrograder', }, - viewPaymentHistory: ‘Voir l’historique des paiements’, + viewPaymentHistory: 'Voir l’historique des paiements', }, yourPlan: { title: 'Votre offre', @@ -8612,9 +8612,9 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e }, details: { title: 'Détails de l’abonnement', - annual: ‘Abonnement annuel’, - creditBalance: ‘Solde créditeur’, - taxExempt: ‘Demander le statut d’exonération fiscale’, + annual: 'Abonnement annuel', + creditBalance: 'Solde créditeur', + taxExempt: 'Demander le statut d’exonération fiscale', taxExemptEnabled: 'Exonéré d’impôt', taxExemptStatus: 'Statut d’exonération fiscale', payPerUse: 'Paiement à l’usage',