From 5b2caa96be7006c6e726601bc0a03cfdf7a093b8 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Mon, 9 Feb 2026 21:34:44 +0530 Subject: [PATCH 01/10] Implement freeze card option --- assets/images/freeze-card.svg | 9 +++++++++ src/CONST/index.ts | 1 + src/components/Icon/Expensicons.ts | 2 ++ .../Icon/chunks/expensify-icons.chunk.ts | 2 ++ src/languages/en.ts | 1 + src/libs/CardUtils.ts | 5 +++++ src/libs/Permissions.ts | 2 +- .../Wallet/ExpensifyCardPage/index.tsx | 20 +++++++++++++++++-- 8 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 assets/images/freeze-card.svg diff --git a/assets/images/freeze-card.svg b/assets/images/freeze-card.svg new file mode 100644 index 000000000000..f01ae0cf1e13 --- /dev/null +++ b/assets/images/freeze-card.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/CONST/index.ts b/src/CONST/index.ts index 628246862f6a..a2be7e85c855 100755 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -754,6 +754,7 @@ const CONST = { SINGLE_USE_AND_EXPIRE_BY_CARDS: 'singleUseAndExpireByCards', PERSONAL_CARD_IMPORT: 'personalCardImport', SUGGESTED_FOLLOWUPS: 'suggestedFollowups', + FREEZE_CARD: 'freezeCard', }, BUTTON_STATES: { DEFAULT: 'default', diff --git a/src/components/Icon/Expensicons.ts b/src/components/Icon/Expensicons.ts index 60746b906dfc..d1d23b1bd084 100644 --- a/src/components/Icon/Expensicons.ts +++ b/src/components/Icon/Expensicons.ts @@ -162,6 +162,7 @@ import Wallet from '@assets/images/wallet.svg'; import Workflows from '@assets/images/workflows.svg'; import Workspace from '@assets/images/workspace-default-avatar.svg'; import Clear from '@assets/images/x-circle.svg'; +import FreezeCard from '@assets/images/freeze-card.svg'; export { Android, @@ -328,4 +329,5 @@ export { CertiniaSquare, ZenefitsSquare, GalleryPlus, + FreezeCard, }; diff --git a/src/components/Icon/chunks/expensify-icons.chunk.ts b/src/components/Icon/chunks/expensify-icons.chunk.ts index 8255f17c6f24..0912448c8291 100644 --- a/src/components/Icon/chunks/expensify-icons.chunk.ts +++ b/src/components/Icon/chunks/expensify-icons.chunk.ts @@ -240,6 +240,7 @@ import Workflows from '@assets/images/workflows.svg'; import Workspace from '@assets/images/workspace-default-avatar.svg'; import Clear from '@assets/images/x-circle.svg'; import Zoom from '@assets/images/zoom.svg'; +import FreezeCard from '@assets/images/freeze-card.svg'; const Expensicons = { ReceiptBody, @@ -324,6 +325,7 @@ const Expensicons = { FlagLevelTwo, FlagLevelThree, Fingerprint, + FreezeCard, Fullscreen, Folder, Tag, diff --git a/src/languages/en.ts b/src/languages/en.ts index 7607efb39599..e3d5de7ae026 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2293,6 +2293,7 @@ const translations = { alertMessage: ({cardLastFour, amount, merchant, date}: {cardLastFour: string; amount: string; merchant: string; date: string}) => `identified suspicious activity on card ending in ${cardLastFour}. Do you recognize this charge?\n\n${amount} for ${merchant} - ${date}`, }, + freezeCard: 'Freeze card', }, workflowsPage: { workflowTitle: 'Spend', diff --git a/src/libs/CardUtils.ts b/src/libs/CardUtils.ts index 9f09c100c581..bee4bed3a7ee 100644 --- a/src/libs/CardUtils.ts +++ b/src/libs/CardUtils.ts @@ -997,6 +997,10 @@ function hasDisplayableAssignedCards(cardList: CardList | undefined): boolean { ); } +function isCardFrozen(card?: OnyxEntry): boolean { + return card?.state === CONST.EXPENSIFY_CARD.STATE.STATE_SUSPENDED && card?.nameValuePairs?.frozen != null; +} + export { getAssignedCardSortKey, getDefaultExpensifyCardLimitType, @@ -1070,6 +1074,7 @@ export { isCardAlreadyAssigned, generateCardID, hasDisplayableAssignedCards, + isCardFrozen, }; export type {CompanyCardFeedIcons, CompanyCardBankIcons}; diff --git a/src/libs/Permissions.ts b/src/libs/Permissions.ts index 7d0e831f3100..8a699bcede29 100644 --- a/src/libs/Permissions.ts +++ b/src/libs/Permissions.ts @@ -5,7 +5,7 @@ import type BetaConfiguration from '@src/types/onyx/BetaConfiguration'; // eslint-disable-next-line rulesdir/no-beta-handler function canUseAllBetas(betas: OnyxEntry): boolean { - return !!betas?.includes(CONST.BETAS.ALL); + return true; } /** diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index 864cc595a500..2f227ef37cba 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -24,7 +24,7 @@ import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; import {resetValidateActionCodeSent} from '@libs/actions/User'; -import {formatCardExpiration, getDomainCards, maskCard, maskPin} from '@libs/CardUtils'; +import {formatCardExpiration, getDomainCards, isCardFrozen, maskCard, maskPin} from '@libs/CardUtils'; import {convertToDisplayString, getCurrencyKeyByCountryCode} from '@libs/CurrencyUtils'; import Navigation from '@libs/Navigation/Navigation'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; @@ -43,6 +43,8 @@ import ROUTES from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; import type {Card, PrivatePersonalDetails} from '@src/types/onyx'; import {useExpensifyCardActions, useExpensifyCardState} from './ExpensifyCardContextProvider'; +import { useSession } from '@components/OnyxListItemProvider'; +import usePermissions from '@hooks/usePermissions'; type ExpensifyCardPageProps = | PlatformStackScreenProps @@ -96,7 +98,7 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { const expensifyCardTitle = isTravelCard ? translate('cardPage.expensifyTravelCard') : translate('cardPage.expensifyCard'); const pageTitle = shouldDisplayCardDomain ? expensifyCardTitle : (cardList?.[cardID]?.nameValuePairs?.cardTitle ?? expensifyCardTitle); const {displayName} = useCurrentUserPersonalDetails(); - const expensifyIcons = useMemoizedLazyExpensifyIcons(['Flag', 'MoneySearch']); + const expensifyIcons = useMemoizedLazyExpensifyIcons(['Flag', 'MoneySearch', 'FreezeCard']); const [isNotFound, setIsNotFound] = useState(false); const cardsToShow = useMemo(() => { @@ -155,6 +157,11 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { const isSignedInAsDelegate = !!account?.delegatedAccess?.delegate || false; + const session = useSession(); + const isCardHolder = currentCard?.accountID === session?.accountID; + + const {isBetaEnabled} = usePermissions(); + if (isNotFound) { return Navigation.goBack(ROUTES.SETTINGS_WALLET)} />; } @@ -386,6 +393,15 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { ); }} /> + {isBetaEnabled(CONST.BETAS.FREEZE_CARD) && isCardHolder && !isCardFrozen(currentPhysicalCard) && ( + (setIsFreezeModalVisible(true))} + /> + )} )} {cardToAdd !== undefined && ( From dd5c63bbfbe76229c9ee05a45d7b7197d610454d Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Mon, 9 Feb 2026 21:44:59 +0530 Subject: [PATCH 02/10] Update icon and other changes --- assets/images/freeze-card.svg | 32 ++++++++++++++----- src/components/Icon/Expensicons.ts | 2 +- .../Icon/chunks/expensify-icons.chunk.ts | 2 +- .../Wallet/ExpensifyCardPage/index.tsx | 5 ++- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/assets/images/freeze-card.svg b/assets/images/freeze-card.svg index f01ae0cf1e13..8ef3e3ad22f7 100644 --- a/assets/images/freeze-card.svg +++ b/assets/images/freeze-card.svg @@ -1,9 +1,25 @@ - - - - - - - - + + + + diff --git a/src/components/Icon/Expensicons.ts b/src/components/Icon/Expensicons.ts index d1d23b1bd084..42a360430a40 100644 --- a/src/components/Icon/Expensicons.ts +++ b/src/components/Icon/Expensicons.ts @@ -59,6 +59,7 @@ import FlagLevelOne from '@assets/images/flag_level_01.svg'; import FlagLevelTwo from '@assets/images/flag_level_02.svg'; import FlagLevelThree from '@assets/images/flag_level_03.svg'; import Folder from '@assets/images/folder.svg'; +import FreezeCard from '@assets/images/freeze-card.svg'; import Fullscreen from '@assets/images/fullscreen.svg'; import GalleryNotFound from '@assets/images/gallery-not-found.svg'; import GalleryPlus from '@assets/images/gallery-plus.svg'; @@ -162,7 +163,6 @@ import Wallet from '@assets/images/wallet.svg'; import Workflows from '@assets/images/workflows.svg'; import Workspace from '@assets/images/workspace-default-avatar.svg'; import Clear from '@assets/images/x-circle.svg'; -import FreezeCard from '@assets/images/freeze-card.svg'; export { Android, diff --git a/src/components/Icon/chunks/expensify-icons.chunk.ts b/src/components/Icon/chunks/expensify-icons.chunk.ts index 0912448c8291..11072588ca01 100644 --- a/src/components/Icon/chunks/expensify-icons.chunk.ts +++ b/src/components/Icon/chunks/expensify-icons.chunk.ts @@ -98,6 +98,7 @@ import FlagLevelOne from '@assets/images/flag_level_01.svg'; import FlagLevelTwo from '@assets/images/flag_level_02.svg'; import FlagLevelThree from '@assets/images/flag_level_03.svg'; import Folder from '@assets/images/folder.svg'; +import FreezeCard from '@assets/images/freeze-card.svg'; import Fullscreen from '@assets/images/fullscreen.svg'; import GalleryNotFound from '@assets/images/gallery-not-found.svg'; import Gallery from '@assets/images/gallery.svg'; @@ -240,7 +241,6 @@ import Workflows from '@assets/images/workflows.svg'; import Workspace from '@assets/images/workspace-default-avatar.svg'; import Clear from '@assets/images/x-circle.svg'; import Zoom from '@assets/images/zoom.svg'; -import FreezeCard from '@assets/images/freeze-card.svg'; const Expensicons = { ReceiptBody, diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index 2f227ef37cba..f8cc606935ec 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -13,6 +13,7 @@ import HeaderWithBackButton from '@components/HeaderWithBackButton'; import {LockedAccountContext} from '@components/LockedAccountModalProvider'; import MenuItem from '@components/MenuItem'; import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; +import {useSession} from '@components/OnyxListItemProvider'; import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import useCurrencyList from '@hooks/useCurrencyList'; @@ -22,6 +23,7 @@ import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; +import usePermissions from '@hooks/usePermissions'; import useThemeStyles from '@hooks/useThemeStyles'; import {resetValidateActionCodeSent} from '@libs/actions/User'; import {formatCardExpiration, getDomainCards, isCardFrozen, maskCard, maskPin} from '@libs/CardUtils'; @@ -43,8 +45,6 @@ import ROUTES from '@src/ROUTES'; import SCREENS from '@src/SCREENS'; import type {Card, PrivatePersonalDetails} from '@src/types/onyx'; import {useExpensifyCardActions, useExpensifyCardState} from './ExpensifyCardContextProvider'; -import { useSession } from '@components/OnyxListItemProvider'; -import usePermissions from '@hooks/usePermissions'; type ExpensifyCardPageProps = | PlatformStackScreenProps @@ -399,7 +399,6 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { title={translate('cardPage.freezeCard')} style={styles.mt3} disabled={isOffline} - onPress={() => (setIsFreezeModalVisible(true))} /> )} From 2d013c8d1eeafdcd30568eea043b037a32a551c3 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:00:57 +0530 Subject: [PATCH 03/10] Add test and translation --- assets/images/freeze-card.svg | 26 +-------------------- src/languages/es.ts | 1 + tests/unit/CardUtilsTest.ts | 43 +++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/assets/images/freeze-card.svg b/assets/images/freeze-card.svg index 8ef3e3ad22f7..01f1c255b333 100644 --- a/assets/images/freeze-card.svg +++ b/assets/images/freeze-card.svg @@ -1,25 +1 @@ - - - - - + \ No newline at end of file diff --git a/src/languages/es.ts b/src/languages/es.ts index 50ee9fcef7b8..0ebbea82753d 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -2048,6 +2048,7 @@ const translations: TranslationDeepObject = { ${amount} para ${merchant} - ${date}`, }, + freezeCard: 'Congelar tarjeta', }, workflowsPage: { workflowTitle: 'Gasto', diff --git a/tests/unit/CardUtilsTest.ts b/tests/unit/CardUtilsTest.ts index 6727ae71574f..c3a55bca4a46 100644 --- a/tests/unit/CardUtilsTest.ts +++ b/tests/unit/CardUtilsTest.ts @@ -37,6 +37,7 @@ import { hasIssuedExpensifyCard, hasOnlyOneCardToAssign, isCSVFeedOrExpensifyCard, + isCardFrozen, isCustomFeed as isCustomFeedCardUtils, isExpensifyCard, isExpensifyCardFullySetUp, @@ -1629,4 +1630,46 @@ describe('CardUtils', () => { }); }); }); + + describe('isCardFrozen', () => { + it('Should return true when card state is suspended and frozen property is set', () => { + const card = { + state: CONST.EXPENSIFY_CARD.STATE.STATE_SUSPENDED, + nameValuePairs: { + frozen: true, + }, + } as unknown as Card; + expect(isCardFrozen(card)).toBe(true); + }); + + it('Should return false when card state is suspended but frozen property is missing', () => { + const card = { + state: CONST.EXPENSIFY_CARD.STATE.STATE_SUSPENDED, + nameValuePairs: {}, + } as unknown as Card; + expect(isCardFrozen(card)).toBe(false); + }); + + it('Should return false when card state is not suspended but frozen property is set', () => { + const card = { + state: CONST.EXPENSIFY_CARD.STATE.OPEN, + nameValuePairs: { + frozen: true, + }, + } as unknown as Card; + expect(isCardFrozen(card)).toBe(false); + }); + + it('Should return false when card is undefined', () => { + expect(isCardFrozen(undefined)).toBe(false); + }); + + it('Should return false when card is valid but not suspendedor frozen', () => { + const card = { + state: CONST.EXPENSIFY_CARD.STATE.OPEN, + nameValuePairs: {}, + } as unknown as Card; + expect(isCardFrozen(card)).toBe(false); + }); + }); }); From 5f23ab436d7bedd75ca88f39ffb9dedaa7427743 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:10:49 +0530 Subject: [PATCH 04/10] Update Permissions.ts --- src/libs/Permissions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/Permissions.ts b/src/libs/Permissions.ts index 8a699bcede29..7d0e831f3100 100644 --- a/src/libs/Permissions.ts +++ b/src/libs/Permissions.ts @@ -5,7 +5,7 @@ import type BetaConfiguration from '@src/types/onyx/BetaConfiguration'; // eslint-disable-next-line rulesdir/no-beta-handler function canUseAllBetas(betas: OnyxEntry): boolean { - return true; + return !!betas?.includes(CONST.BETAS.ALL); } /** From ed38cff3acab519d8c8282591679f4a6ea8371c8 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Mon, 9 Feb 2026 23:54:38 +0530 Subject: [PATCH 05/10] Prettier fix --- tests/unit/CardUtilsTest.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/CardUtilsTest.ts b/tests/unit/CardUtilsTest.ts index c3a55bca4a46..42e46404b410 100644 --- a/tests/unit/CardUtilsTest.ts +++ b/tests/unit/CardUtilsTest.ts @@ -36,8 +36,8 @@ import { getYearFromExpirationDateString, hasIssuedExpensifyCard, hasOnlyOneCardToAssign, - isCSVFeedOrExpensifyCard, isCardFrozen, + isCSVFeedOrExpensifyCard, isCustomFeed as isCustomFeedCardUtils, isExpensifyCard, isExpensifyCardFullySetUp, @@ -1664,7 +1664,7 @@ describe('CardUtils', () => { expect(isCardFrozen(undefined)).toBe(false); }); - it('Should return false when card is valid but not suspendedor frozen', () => { + it('Should return false when card is valid but not suspended or frozen', () => { const card = { state: CONST.EXPENSIFY_CARD.STATE.OPEN, nameValuePairs: {}, From 42350e27e43bf06bdcd610512b06afdfbf329fe5 Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Wed, 11 Feb 2026 11:56:49 +0530 Subject: [PATCH 06/10] Get rid of top margin of the freeze card row --- src/pages/settings/Wallet/ExpensifyCardPage/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index 0ca321fcc1fd..349dc1da6ed8 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -386,7 +386,6 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { )} From c607f8f6ded1aa361bee178cc89e49df24db982d Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Thu, 12 Feb 2026 02:29:28 +0530 Subject: [PATCH 07/10] Use currentCard --- src/pages/settings/Wallet/ExpensifyCardPage/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx index 349dc1da6ed8..f93b47699579 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx +++ b/src/pages/settings/Wallet/ExpensifyCardPage/index.tsx @@ -382,7 +382,7 @@ function ExpensifyCardPage({route}: ExpensifyCardPageProps) { ); }} /> - {isBetaEnabled(CONST.BETAS.FREEZE_CARD) && isCardHolder && !isCardFrozen(currentPhysicalCard) && ( + {isBetaEnabled(CONST.BETAS.FREEZE_CARD) && isCardHolder && !!currentCard && !isCardFrozen(currentCard) && ( Date: Fri, 13 Feb 2026 01:32:14 +0530 Subject: [PATCH 08/10] Add translations and update type --- src/languages/de.ts | 36 ++++++++++++++++------------------ src/languages/fr.ts | 27 +++++++++++-------------- src/languages/it.ts | 39 ++++++++++++++++--------------------- src/languages/ja.ts | 33 +++++++++++++------------------ src/languages/nl.ts | 37 +++++++++++++++-------------------- src/languages/pl.ts | 39 ++++++++++++++++--------------------- src/languages/pt-BR.ts | 29 ++++++++++++--------------- src/languages/zh-hans.ts | 37 +++++++++++++++-------------------- tests/unit/CardUtilsTest.ts | 8 ++++---- 9 files changed, 124 insertions(+), 161 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 756899b7f15b..9347475fc2df 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -262,7 +262,7 @@ const translations: TranslationDeepObject = { wallet: 'Brieftasche', preferences: 'Einstellungen', view: 'Anzeigen', - review: (reviewParams?: ReviewParams) => `Prüfen${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, + review: (reviewParams?: ReviewParams) => `Überprüfen${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, not: 'Nicht', signIn: 'Anmelden', signInWithGoogle: 'Mit Google anmelden', @@ -1271,8 +1271,8 @@ const translations: TranslationDeepObject = { settledElsewhere: 'Anderswo bezahlt', individual: 'Einzelperson', business: 'Business', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} mit Expensify bezahlen` : `Mit Expensify bezahlen`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} als Privatperson bezahlen` : `Mit Privatkonto bezahlen`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Bezahle ${formattedAmount} mit Expensify` : `Mit Expensify bezahlen`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} als Privatperson bezahlen` : `Mit privatem Konto bezahlen`), settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} mit Wallet bezahlen` : `Mit Wallet bezahlen`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `${formattedAmount} bezahlen`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} als Unternehmen bezahlen` : `Mit Geschäftskonto bezahlen`), @@ -1284,7 +1284,7 @@ const translations: TranslationDeepObject = { policyName, }: SettleExpensifyCardParams & { policyName: string; - }) => (formattedAmount ? `Bezahle ${formattedAmount} über ${policyName}` : `Bezahlen über ${policyName}`), + }) => (formattedAmount ? `Zahle ${formattedAmount} über ${policyName}` : `Bezahlen über ${policyName}`), businessBankAccount: (amount?: string, last4Digits?: string) => (amount ? `${amount} mit Bankkonto ${last4Digits} bezahlt` : `bezahlt mit Bankkonto ${last4Digits}`), automaticallyPaidWithBusinessBankAccount: (amount?: string, last4Digits?: string) => `${amount ? `${amount} ` : ''} mit Bankkonto ${last4Digits} über Workspace-Regeln bezahlt`, @@ -1325,7 +1325,7 @@ const translations: TranslationDeepObject = { canceledRequest: (amount: string, submitterDisplayName: string) => `${amount} Zahlung storniert, weil ${submitterDisplayName} ihr Expensify Wallet nicht innerhalb von 30 Tagen aktiviert hat`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} hat ein Bankkonto hinzugefügt. Die Zahlung über ${amount} wurde vorgenommen.`, + `${submitterDisplayName} hat ein Bankkonto hinzugefügt. Die Zahlung über ${amount} wurde durchgeführt.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}als bezahlt markiert${comment ? `und sagt „${comment}“` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}mit Wallet bezahlt`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1333,7 +1333,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Dieser Bericht enthält einen ungültigen Betrag', pendingConversionMessage: 'Die Gesamtsumme wird aktualisiert, sobald du wieder online bist', changedTheExpense: 'hat die Ausgabe geändert', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `den Wert ${valueName} auf ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `den ${valueName} in ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `lege ${translatedChangedField} auf ${newMerchant} fest, wodurch der Betrag auf ${newAmountToDisplay} gesetzt wurde`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `der/die/das ${valueName} (zuvor ${oldValueToDisplay})`, @@ -1531,7 +1531,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Wähle einen Arbeitsbereich', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `Report aufgrund des benutzerdefinierten Genehmigungsworkflows an ${to} weitergeleitet`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `Bericht aufgrund des benutzerdefinierten Genehmigungs-Workflows an ${to} weitergeleitet`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'Stunde' : 'Stunden'} @ ${rate} / Stunde`, hrs: 'Std.', @@ -2279,6 +2279,7 @@ const translations: TranslationDeepObject = { ${amount} für ${merchant} – ${date}`, }, + freezeCard: 'Karte sperren', }, workflowsPage: { workflowTitle: 'Ausgaben', @@ -2833,7 +2834,8 @@ ${ 5. Füge eine eigene Einladung hinzu, wenn du möchtest! [Zu den Workspace-Mitgliedern](${workspaceMembersLink}). - `), + + `), }, setupCategoriesAndTags: { title: ({workspaceCategoriesLink, workspaceTagsLink}) => `Richte [Kategorien](${workspaceCategoriesLink}) und [Tags](${workspaceTagsLink}) ein`, @@ -4682,7 +4684,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Wähle unten eine Option aus:', label: (importedTypes: string[]) => `Importiert als ${importedTypes.join('und')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Bitte gib ${fieldName} ein`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Bitte ${fieldName} eingeben`, customSegments: { title: 'Benutzerdefinierte Segmente/Datensätze', addText: 'Benutzerdefiniertes Segment/Datensatz hinzufügen', @@ -4756,7 +4758,7 @@ _Für detailliertere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSUI customRecordMappingTitle: 'Wie soll dieser benutzerdefinierte Datensatz in Expensify angezeigt werden?', }, errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Ein benutzerdefiniertes Segment/Datensatz mit dieser ${fieldName?.toLowerCase()} existiert bereits`, + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Ein benutzerdefiniertes Segment/Datensatz mit dieser ${fieldName?.toLowerCase()} ist bereits vorhanden`, }, }, customLists: { @@ -5027,7 +5029,7 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU limit: 'Limit', currentBalance: 'Aktueller Kontostand', currentBalanceDescription: 'Der aktuelle Saldo ist die Summe aller verbuchten Expensify-Card-Transaktionen, die seit dem letzten Abrechnungsdatum stattgefunden haben.', - balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `Der Saldo wird am ${settlementDate} ausgeglichen.`, + balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `Der Saldo wird am ${settlementDate} ausgeglichen`, settleBalance: 'Saldo ausgleichen', cardLimit: 'Kartenlimit', remainingLimit: 'Verbleibendes Limit', @@ -6470,7 +6472,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und }, defaultTaxRate: 'Standardsteuersatz', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Gehe zu [Weitere Funktionen](${moreFeaturesLink}) und aktiviere Workflows, füge dann Genehmigungen hinzu, um diese Funktion freizuschalten.`, + `Gehe zu [Weitere Funktionen](${moreFeaturesLink}) und aktiviere Workflows, dann füge Genehmigungen hinzu, um diese Funktion freizuschalten.`, }, customRules: { title: 'Spesenrichtlinie', @@ -6535,7 +6537,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und public_announceDescription: 'Jede Person kann diesen Raum finden', createRoom: 'Raum erstellen', roomAlreadyExistsError: 'Ein Raum mit diesem Namen existiert bereits', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} ist ein Standardraum in allen Arbeitsbereichen. Bitte wähle einen anderen Namen.`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} ist ein Standardraum in allen Workspaces. Bitte wähle einen anderen Namen.`, roomNameInvalidError: 'Raumnamen dürfen nur Kleinbuchstaben, Zahlen und Bindestriche enthalten', pleaseEnterRoomName: 'Bitte gib einen Raumnamen ein', pleaseSelectWorkspace: 'Bitte wähle einen Workspace aus', @@ -7545,11 +7547,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und tryDifferentEmail: 'Bitte versuche eine andere E-Mail-Adresse', }, }, - cardTransactions: { - notActivated: 'Nicht aktiviert', - outOfPocket: 'Auslagen-Spend', - companySpend: 'Unternehmensausgaben', - }, + cardTransactions: {notActivated: 'Nicht aktiviert', outOfPocket: 'Auslagen', companySpend: 'Unternehmensausgaben'}, distance: { addStop: 'Stopp hinzufügen', address: 'Adresse', @@ -8468,7 +8466,7 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`, forceCloseAccount: 'Konto zwangsweise schließen', safeCloseAccount: 'Konto sicher schließen', closeAccountInfo: - 'Wir empfehlen, das Konto sicher zu schließen, um das Schließen zu überspringen, falls Folgendes vorliegt:
  • Ausstehende Genehmigungen
  • Aktive Erstattungen
  • Keine alternativen Anmeldemethoden
Andernfalls können Sie die oben genannten Sicherheitsvorkehrungen ignorieren und das ausgewählte Konto zwangsweise schließen.', + 'Wir empfehlen, das Konto sicher zu schließen, um das Schließen zu überspringen, falls Folgendes vorliegt:
  • Ausstehende Genehmigungen
  • Aktive Erstattungen
  • Keine alternativen Anmeldemethoden
Andernfalls kannst du die Sicherheitshinweise oben ignorieren und das ausgewählte Konto zwangsweise schließen.', error: { removeMember: 'Dieser Benutzer kann nicht entfernt werden. Bitte versuche es erneut.', addMember: 'Dieses Mitglied kann nicht hinzugefügt werden. Bitte versuche es erneut.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 356754eb93a8..b8b448dc69a9 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -805,7 +805,7 @@ const translations: TranslationDeepObject = { phrase2: 'L’argent parle. Et maintenant que la messagerie et les paiements sont réunis au même endroit, c’est aussi simple.', phrase3: 'Vos paiements vous parviennent aussi vite que vous faites passer votre message.', enterPassword: 'Veuillez saisir votre mot de passe', - welcomeNewFace: ({login}: SignUpNewFaceCodeParams) => `${login}, c’est toujours un plaisir de voir un nouveau visage par ici !`, + welcomeNewFace: ({login}: SignUpNewFaceCodeParams) => `${login}, c’est toujours un plaisir de voir un nouveau visage parmi nous !`, welcomeEnterMagicCode: ({login}: WelcomeEnterMagicCodeParams) => `Veuillez saisir le code magique envoyé à ${login}. Il devrait arriver dans une minute ou deux.`, }, login: { @@ -1280,7 +1280,7 @@ const translations: TranslationDeepObject = { settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} en tant que particulier` : `Payer avec un compte personnel`), settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} avec le portefeuille` : `Payer avec le portefeuille`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Payer ${formattedAmount}`, - settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} en tant qu’entreprise` : `Payer avec le compte professionnel`), + settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} en tant qu’entreprise` : `Payer avec un compte professionnel`), payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Marquer ${formattedAmount} comme payé` : `Marquer comme payé`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `a payé ${amount} avec le compte personnel ${last4Digits}` : `Payé avec un compte personnel`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `a payé ${amount} avec le compte professionnel ${last4Digits}` : `Payé avec le compte professionnel`), @@ -1338,7 +1338,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Cette note de frais a un montant non valide', pendingConversionMessage: 'Le total sera mis à jour quand vous serez de nouveau en ligne', changedTheExpense: 'a modifié la dépense', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `le ${valueName} sur ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `le ${valueName} en ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `défini le ${translatedChangedField} sur ${newMerchant}, ce qui a défini le montant sur ${newAmountToDisplay}`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `le ${valueName} (anciennement ${oldValueToDisplay})`, @@ -1538,7 +1538,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Choisir un espace de travail', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `note de frais transmise à ${to} en raison du flux d’approbation personnalisé`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `note de frais acheminée vers ${to} en raison d’un processus d’approbation personnalisé`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'heure' : 'heures'} @ ${rate} / heure`, hrs: 'h', @@ -2286,6 +2286,7 @@ const translations: TranslationDeepObject = { ${amount} pour ${merchant} - ${date}`, }, + freezeCard: 'Geler la carte', }, workflowsPage: { workflowTitle: 'Dépense', @@ -4690,7 +4691,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Choisissez une option ci-dessous :', label: (importedTypes: string[]) => `Importé en tant que ${importedTypes.join('et')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Veuillez saisir le ${fieldName}`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Veuillez saisir le/la ${fieldName}`, customSegments: { title: 'Segments/enregistrements personnalisés', addText: 'Ajouter un segment/enregistrement personnalisé', @@ -4763,9 +4764,7 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. customSegmentMappingTitle: 'Comment ce segment personnalisé doit-il être affiché dans Expensify ?', customRecordMappingTitle: 'Comment cet enregistrement personnalisé doit-il être affiché dans Expensify ?', }, - errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Un segment/enregistrement personnalisé avec ce ${fieldName?.toLowerCase()} existe déjà`, - }, + errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Un segment/enregistrement personnalisé avec cet(te) ${fieldName?.toLowerCase()} existe déjà`}, }, customLists: { title: 'Listes personnalisées', @@ -6492,7 +6491,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip }, defaultTaxRate: 'Taux de taxe par défaut', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Allez dans [Plus de fonctionnalités](${moreFeaturesLink}) et activez les workflows, puis ajoutez des approbations pour déverrouiller cette fonctionnalité.`, + `Accédez à [Plus de fonctionnalités](${moreFeaturesLink}) et activez les workflows, puis ajoutez des approbations pour déverrouiller cette fonctionnalité.`, }, customRules: { title: 'Politique de dépenses', @@ -7567,11 +7566,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip tryDifferentEmail: 'Veuillez essayer une autre adresse e-mail', }, }, - cardTransactions: { - notActivated: 'Non activé', - outOfPocket: 'Dépenses personnelles', - companySpend: 'Dépenses de l’entreprise', - }, + cardTransactions: {notActivated: 'Non activé', outOfPocket: 'Dépenses à titre personnel', companySpend: 'Dépenses de l’entreprise'}, distance: { addStop: 'Ajouter un arrêt', address: 'Adresse', @@ -8486,10 +8481,10 @@ Voici un *reçu test* pour vous montrer comment ça fonctionne :`, email: 'Adresse e-mail', closeAccount: 'Fermer le compte', closeAccountPrompt: 'Êtes-vous sûr(e) ? Cette action est définitive.', - forceCloseAccount: 'Forcer la fermeture du compte', + forceCloseAccount: 'Forcer la clôture du compte', safeCloseAccount: 'Fermer le compte en toute sécurité', closeAccountInfo: - 'Nous recommandons de fermer le compte en toute sécurité afin d’éviter de le fermer dans le cas où il y aurait :
  • Des validations en attente
  • Des remboursements actifs
  • Aucune autre méthode de connexion
Sinon, vous pouvez ignorer les précautions de sécurité ci-dessus et forcer la fermeture du compte sélectionné.', + 'Nous vous recommandons de fermer le compte en toute sécurité pour éviter de le fermer dans les cas suivants :
  • Approbations en attente
  • Remboursements actifs
  • Aucune autre méthode de connexion
Sinon, vous pouvez ignorer les précautions de sécurité ci-dessus et forcer la fermeture du compte sélectionné.', error: { removeMember: 'Impossible de supprimer cet utilisateur. Veuillez réessayer.', addMember: 'Impossible d’ajouter ce membre. Veuillez réessayer.', diff --git a/src/languages/it.ts b/src/languages/it.ts index f87fb1cd3e7d..339773f0599a 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -262,7 +262,7 @@ const translations: TranslationDeepObject = { wallet: 'Portafoglio', preferences: 'Preferenze', view: 'Visualizza', - review: (reviewParams?: ReviewParams) => `Revisione${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, + review: (reviewParams?: ReviewParams) => `Revisiona${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, not: 'Non', signIn: 'Accedi', signInWithGoogle: 'Accedi con Google', @@ -999,7 +999,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `Correggi la connessione della carta aziendale ${feedName}` : 'Correggi connessione carta aziendale'), subtitle: 'Spazio di lavoro > Carte aziendali', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Correggi connessione ${integrationName}`, subtitle: 'Spazio di lavoro > Contabilità'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Correggi connessione ${integrationName}`, subtitle: 'Area di lavoro > Contabilità'}, }, announcements: 'Annunci', discoverSection: { @@ -1270,11 +1270,11 @@ const translations: TranslationDeepObject = { individual: 'Personale', business: 'Business', settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} con Expensify` : `Paga con Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} come persona fisica` : `Paga con conto personale`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} con il wallet` : `Paga con portafoglio`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} come individuo` : `Paga con conto personale`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} con il portafoglio` : `Paga con portafoglio`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Paga ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} come azienda` : `Paga con conto aziendale`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Segna ${formattedAmount} come pagato` : `Segna come pagata`), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Segna ${formattedAmount} come pagato` : `Contrassegna come pagato`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `pagato ${amount} con conto personale ${last4Digits}` : `Pagato con conto personale`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `ha pagato ${amount} con il conto aziendale ${last4Digits}` : `Pagato con conto aziendale`), payWithPolicy: ({ @@ -1291,7 +1291,7 @@ const translations: TranslationDeepObject = { nextStep: 'Prossimi passaggi', finished: 'Completato', flip: 'Ruota', - sendInvoice: ({amount}: RequestAmountParams) => `Invia fattura da ${amount}`, + sendInvoice: ({amount}: RequestAmountParams) => `Invia fattura di ${amount}`, expenseAmount: (formattedAmount: string, comment?: string) => `${formattedAmount}${comment ? `per ${comment}` : ''}`, submitted: ({memo}: SubmittedWithMemoParams) => `inviato${memo ? `, con nota: ${memo}` : ''}`, automaticallySubmitted: `inviato tramite invio posticipato`, @@ -1331,7 +1331,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Questo rendiconto contiene un importo non valido', pendingConversionMessage: 'Il totale verrà aggiornato quando torni online', changedTheExpense: 'ha modificato la spesa', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `${valueName} a ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `il/la ${valueName} in ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `imposta ${translatedChangedField} su ${newMerchant}, che ha impostato l’importo su ${newAmountToDisplay}`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `il/la ${valueName} (precedentemente ${oldValueToDisplay})`, @@ -1528,7 +1528,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Scegli uno spazio di lavoro', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `rendiconto instradato a ${to} a causa del flusso di approvazione personalizzato`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `report indirizzato a ${to} a causa del flusso di approvazione personalizzato`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'ora' : 'ore'} @ ${rate} / ora`, hrs: 'ore', @@ -2031,7 +2031,7 @@ const translations: TranslationDeepObject = { whatIsTwoFactorAuth: 'L’autenticazione a due fattori (2FA) contribuisce a mantenere il tuo account al sicuro. Quando effettui l’accesso, dovrai inserire un codice generato dalla tua app di autenticazione preferita.', disableTwoFactorAuth: 'Disattiva l’autenticazione a due fattori', - explainProcessToRemove: 'Per disattivare l’autenticazione a due fattori (2FA), inserisci un codice valido dalla tua app di autenticazione.', + explainProcessToRemove: 'Per disabilitare l’autenticazione a due fattori (2FA), inserisci un codice valido dalla tua app di autenticazione.', explainProcessToRemoveWithRecovery: 'Per disattivare l’autenticazione a due fattori (2FA), inserisci un codice di recupero valido.', disabled: "L'autenticazione a due fattori è ora disattivata", noAuthenticatorApp: 'Non sarà più necessaria un’app di autenticazione per accedere a Expensify.', @@ -2274,6 +2274,7 @@ const translations: TranslationDeepObject = { ${amount} per ${merchant} - ${date}`, }, + freezeCard: 'Blocca carta', }, workflowsPage: { workflowTitle: 'Spesa', @@ -4666,7 +4667,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Scegli un’opzione qui sotto:', label: (importedTypes: string[]) => `Importato come ${importedTypes.join('e')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Inserisci ${fieldName}`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Inserisci il/la ${fieldName}`, customSegments: { title: 'Segmenti/record personalizzati', addText: 'Aggiungi segmento/record personalizzato', @@ -4739,9 +4740,7 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. customSegmentMappingTitle: 'Come deve essere visualizzato questo segmento personalizzato in Expensify?', customRecordMappingTitle: 'Come deve essere visualizzato questo record personalizzato in Expensify?', }, - errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Esiste già un segmento/record personalizzato con questo ${fieldName?.toLowerCase()}`, - }, + errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Un segmento/record personalizzato con questo ${fieldName?.toLowerCase()} esiste già`}, }, customLists: { title: 'Elenchi personalizzati', @@ -6456,7 +6455,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo }, defaultTaxRate: 'Aliquota fiscale predefinita', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Vai su [Altre funzionalità](${moreFeaturesLink}) e abilita i flussi di lavoro, quindi aggiungi le approvazioni per sbloccare questa funzionalità.`, + `Vai su [Altre funzionalità](${moreFeaturesLink}) e abilita i workflow, quindi aggiungi le approvazioni per sbloccare questa funzione.`, }, customRules: { title: 'Politica di spesa', @@ -7533,11 +7532,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo tryDifferentEmail: 'Prova con un’altra email', }, }, - cardTransactions: { - notActivated: 'Non attivato', - outOfPocket: 'Spesa personale', - companySpend: 'Spese aziendali', - }, + cardTransactions: {notActivated: 'Non attivato', outOfPocket: 'Spese vive', companySpend: 'Spese aziendali'}, distance: { addStop: 'Aggiungi fermata', address: 'Indirizzo', @@ -8451,10 +8446,10 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`, email: 'Indirizzo email', closeAccount: 'Chiudi account', closeAccountPrompt: 'Sei sicuro? Questa azione è permanente.', - forceCloseAccount: 'Forza chiusura account', - safeCloseAccount: 'Chiudi il conto in sicurezza', + forceCloseAccount: 'Chiudi forzatamente l’account', + safeCloseAccount: 'Chiudi l’account in sicurezza', closeAccountInfo: - 'Consigliamo di chiudere l’account in modo sicuro per evitare problemi in caso di:
  • Approvazioni in sospeso
  • Rimborsi attivi
  • Nessun metodo di accesso alternativo
In caso contrario, puoi ignorare le precauzioni di sicurezza sopra indicate e forzare la chiusura dell’account selezionato.', + 'Consigliamo di chiudere l’account in modo sicuro per evitare di chiuderlo quando sono presenti:
  • Approvazioni in sospeso
  • Rimborsi attivi
  • Nessun metodo di accesso alternativo
In caso contrario, puoi ignorare le precauzioni di sicurezza sopra e forzare la chiusura dell’account selezionato.', error: { removeMember: 'Impossibile rimuovere questo utente. Riprova.', addMember: 'Impossibile aggiungere questo membro. Riprova.', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 026d934aef70..69034a0e9c9d 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -995,7 +995,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `${feedName} 会社カード接続を修正` : '法人クレジットカードの接続を修正'), subtitle: 'ワークスペース > 会社カード', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `${integrationName} 接続を修正`, subtitle: 'ワークスペース > 会計'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `${integrationName} 接続を修正`, subtitle: 'ワークスペース > 会計'}, }, announcements: 'お知らせ', discoverSection: { @@ -1265,12 +1265,12 @@ const translations: TranslationDeepObject = { settledElsewhere: '他で支払い済み', individual: '個人', business: 'ビジネス', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Expensifyで${formattedAmount}を支払う` : `Expensify で支払う`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Expensify で ${formattedAmount} を支払う` : `Expensifyで支払う`), settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `個人として${formattedAmount}を支払う` : `個人アカウントで支払う`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `ウォレットで ${formattedAmount} を支払う` : `ウォレットで支払う`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `ウォレットで${formattedAmount}を支払う` : `ウォレットで支払う`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `${formattedAmount} を支払う`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} をビジネスとして支払う` : `ビジネスアカウントで支払う`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} を支払済みにする` : `支払い済みにする`), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} を支払済みにする` : `支払済みにする`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `個人アカウント(下4桁 ${last4Digits})で ${amount} を支払いました` : `個人アカウントで支払い済み`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `ビジネス口座(末尾${last4Digits})で${amount}を支払いました` : `ビジネスアカウントで支払済み`), payWithPolicy: ({ @@ -1523,7 +1523,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'ワークスペースを選択', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `カスタム承認ワークフローにより、レポートは${to}に回付されました`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `カスタム承認ワークフローによりレポートが${to}に回覧されました`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? '時間' : '時間'} @ ${rate} / 時間`, hrs: '時間', @@ -2025,7 +2025,7 @@ const translations: TranslationDeepObject = { twoFactorAuthEnabled: '2要素認証が有効になりました', whatIsTwoFactorAuth: '2要素認証(2FA)は、アカウントを安全に保つのに役立ちます。ログインする際、お好みの認証アプリで生成されたコードを入力する必要があります。', disableTwoFactorAuth: '2 要素認証を無効にする', - explainProcessToRemove: '2要素認証(2FA)を無効にするには、認証アプリから有効なコードを入力してください。', + explainProcessToRemove: '2 要素認証(2FA)を無効にするには、認証アプリから有効なコードを入力してください。', explainProcessToRemoveWithRecovery: '2 要素認証(2FA)を無効にするには、有効なリカバリーコードを入力してください。', disabled: '二要素認証は現在無効になっています', noAuthenticatorApp: '今後、Expensify にログインする際に認証アプリは不要になります。', @@ -2262,6 +2262,7 @@ const translations: TranslationDeepObject = { ${date} の ${merchant} への ${amount}`, }, + freezeCard: 'カードを一時停止', }, workflowsPage: { workflowTitle: '支出', @@ -4709,9 +4710,7 @@ _より詳細な手順については、[ヘルプサイトをご覧ください customSegmentMappingTitle: 'このカスタムセグメントを Expensify でどのように表示しますか?', customRecordMappingTitle: 'このカスタムレコードを Expensify ではどのように表示しますか?', }, - errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `この ${fieldName?.toLowerCase()} を持つカスタムセグメント/レコードはすでに存在します`, - }, + errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `この${fieldName?.toLowerCase()}を持つカスタムセグメント/レコードはすでに存在します`}, }, customLists: { title: 'カスタムリスト', @@ -5559,7 +5558,7 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO genericRemove: 'そのワークスペースメンバーを削除する際に問題が発生しました', }, addedWithPrimary: '一部のメンバーは、プライマリーログインで追加されました。', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `セカンダリログイン${secondaryLogin}によって追加されました。`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `セカンダリログイン ${secondaryLogin} によって追加されました。`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `ワークスペースメンバー合計:${count}`, importMembers: 'メンバーをインポート', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6475,7 +6474,7 @@ ${reportName} const actor = actorName ? `${actorName} ` : ''; return isExpenseReport ? `${actor}は"${oldName}"から"${newName}"に名前を変更しました` : `${actor}はこのルーム名を「${newName}」(以前は「${oldName}」)に変更しました`; }, - roomRenamedTo: ({newName}: RoomRenamedToParams) => `ルーム名が${newName}に変更されました`, + roomRenamedTo: ({newName}: RoomRenamedToParams) => `ルーム名を${newName}に変更しました`, social: 'ソーシャル', selectAWorkspace: 'ワークスペースを選択', growlMessageOnRenameError: 'ワークスペースルームの名前を変更できません。接続を確認して、もう一度お試しください。', @@ -7463,11 +7462,7 @@ ${reportName} tryDifferentEmail: '別のメールアドレスをお試しください', }, }, - cardTransactions: { - notActivated: '未有効化', - outOfPocket: '立替経費支出', - companySpend: '会社の支出', - }, + cardTransactions: {notActivated: '未有効化', outOfPocket: '立替払い支出', companySpend: '会社の支出'}, distance: { addStop: '経由地を追加', address: '住所', @@ -7742,7 +7737,7 @@ ${reportName} noRoute: '有効な住所を選択してください', }, reportViolations: { - [CONST.REPORT_VIOLATIONS.FIELD_REQUIRED]: ({fieldName}: RequiredFieldParams) => `${fieldName} は必須です`, + [CONST.REPORT_VIOLATIONS.FIELD_REQUIRED]: ({fieldName}: RequiredFieldParams) => `${fieldName}は必須です`, reportContainsExpensesWithViolations: 'レポートに違反のある経費が含まれています。', }, violationDismissal: { @@ -8373,10 +8368,10 @@ ${reportName} email: 'メールアドレス', closeAccount: 'アカウントを閉じる', closeAccountPrompt: '本当によろしいですか?この操作は元に戻せません。', - forceCloseAccount: 'アカウントを強制的に閉鎖', + forceCloseAccount: 'アカウントを強制閉鎖', safeCloseAccount: 'アカウントを安全に閉じる', closeAccountInfo: - '保留中の承認、処理中の精算、代替ログイン方法がない場合などでもアカウントを閉鎖できるように、安全にアカウントを閉鎖することを推奨します:
  • 保留中の承認
  • 進行中の払い戻し
  • 代替ログイン方法なし
それ以外の場合は、上記の安全上の注意を無視して、選択したアカウントを強制的に閉鎖できます。', + '保留中の承認、進行中の払い戻し、代替ログイン方法がない場合を避けるため、安全にアカウントを閉鎖することをおすすめします。
  • 保留中の承認
  • 進行中の払い戻し
  • 代替ログイン方法がない
それ以外の場合は、上記の安全対策を無視して、選択したアカウントを強制的に閉鎖できます。', error: { removeMember: 'このユーザーを削除できません。もう一度お試しください。', addMember: 'このメンバーを追加できませんでした。もう一度お試しください。', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 65688200f062..217ac9ed7bf6 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -1270,7 +1270,7 @@ const translations: TranslationDeepObject = { individual: 'Individueel', business: 'Zakelijk', settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} met Expensify` : `Betalen met Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} als individu` : `Betalen met persoonlijke rekening`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} als individu` : `Betalen met privérekening`), settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} met wallet` : `Betalen met wallet`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Betaal ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} als bedrijf` : `Betalen met zakelijke rekening`), @@ -1282,7 +1282,7 @@ const translations: TranslationDeepObject = { policyName, }: SettleExpensifyCardParams & { policyName: string; - }) => (formattedAmount ? `Betaal ${formattedAmount} via ${policyName}` : `Betaal via ${policyName}`), + }) => (formattedAmount ? `Betaal ${formattedAmount} via ${policyName}` : `Betalen via ${policyName}`), businessBankAccount: (amount?: string, last4Digits?: string) => (amount ? `heeft ${amount} betaald met bankrekening ${last4Digits}` : `betaald met bankrekening ${last4Digits}`), automaticallyPaidWithBusinessBankAccount: (amount?: string, last4Digits?: string) => `betaald ${amount ? `${amount} ` : ''} met bankrekening ${last4Digits} via werkruimteregels`, @@ -1291,7 +1291,7 @@ const translations: TranslationDeepObject = { nextStep: 'Volgende stappen', finished: 'Voltooid', flip: 'Omkeren', - sendInvoice: ({amount}: RequestAmountParams) => `Verzend factuur van ${amount}`, + sendInvoice: ({amount}: RequestAmountParams) => `Factuur van ${amount} verzenden`, expenseAmount: (formattedAmount: string, comment?: string) => `${formattedAmount}${comment ? `voor ${comment}` : ''}`, submitted: ({memo}: SubmittedWithMemoParams) => `ingediend${memo ? `, met de omschrijving ${memo}` : ''}`, automaticallySubmitted: `ingediend via uitgestelde indieningen`, @@ -1323,7 +1323,7 @@ const translations: TranslationDeepObject = { canceledRequest: (amount: string, submitterDisplayName: string) => `heeft de betaling van ${amount} geannuleerd, omdat ${submitterDisplayName} hun Expensify Wallet niet binnen 30 dagen heeft geactiveerd`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} heeft een bankrekening toegevoegd. De betaling van ${amount} is voltooid.`, + `${submitterDisplayName} heeft een bankrekening toegevoegd. De betaling van ${amount} is gedaan.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}gemarkeerd als betaald${comment ? `, met de opmerking: "${comment}"` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}betaald met wallet`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1528,7 +1528,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Kies een werkruimte', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `rapport doorgestuurd naar ${to} vanwege aangepast goedkeuringsworkflow`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `rapport doorgestuurd naar ${to} vanwege aangepaste goedkeuringsworkflow`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'uur' : 'uren'} @ ${rate} / uur`, hrs: 'uur', @@ -2032,8 +2032,8 @@ const translations: TranslationDeepObject = { whatIsTwoFactorAuth: 'Tweestapsverificatie (2FA) helpt je account veilig te houden. Bij het inloggen moet je een code invoeren die is gegenereerd door je voorkeursauthenticator-app.', disableTwoFactorAuth: 'Tweefactorauthenticatie uitschakelen', - explainProcessToRemove: 'Voer een geldige code uit je authenticatie-app in om tweeledige verificatie (2FA) uit te schakelen.', - explainProcessToRemoveWithRecovery: 'Voer een geldige herstelcode in om twee-factor-authenticatie (2FA) uit te schakelen.', + explainProcessToRemove: 'Voer een geldige code uit je verificatie-app in om twee-factor-authenticatie (2FA) uit te schakelen.', + explainProcessToRemoveWithRecovery: 'Voer een geldige herstelcode in om de dubbele authenticatie (2FA) uit te schakelen.', disabled: 'Tweeledige verificatie is nu uitgeschakeld', noAuthenticatorApp: 'Je hebt geen authenticator-app meer nodig om in te loggen bij Expensify.', stepCodes: 'Herstelcodes', @@ -2276,6 +2276,7 @@ const translations: TranslationDeepObject = { ${amount} voor ${merchant} - ${date}`, }, + freezeCard: 'Kaart blokkeren', }, workflowsPage: { workflowTitle: 'Uitgaven', @@ -4736,9 +4737,7 @@ _Voor meer gedetailleerde instructies, [bezoek onze helpwebsite](${CONST.NETSUIT customSegmentMappingTitle: 'Hoe moet dit aangepaste segment worden weergegeven in Expensify?', customRecordMappingTitle: 'Hoe moet dit aangepaste record in Expensify worden weergegeven?', }, - errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Er bestaat al een aangepast segment/record met deze ${fieldName?.toLowerCase()}`, - }, + errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Er bestaat al een aangepast segment/record met deze ${fieldName?.toLowerCase()}`}, }, customLists: { title: 'Aangepaste lijsten', @@ -5594,7 +5593,7 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ genericRemove: 'Er is een probleem opgetreden bij het verwijderen van dat werkpleklid', }, addedWithPrimary: 'Sommige leden zijn toegevoegd met hun primaire login.', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Toegevoegd door secundair login ${secondaryLogin}.`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Toegevoegd door secundaire login ${secondaryLogin}.`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `Totaal aantal werkruimteleden: ${count}`, importMembers: 'Leden importeren', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6444,7 +6443,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar }, defaultTaxRate: 'Standaardbelastingtarief', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Ga naar [Meer functies](${moreFeaturesLink}) en schakel workflows in, voeg daarna goedkeuringen toe om deze functie te ontgrendelen.`, + `Ga naar [Meer functies](${moreFeaturesLink}) en schakel workflows in, voeg vervolgens goedkeuringen toe om deze functie te ontgrendelen.`, }, customRules: { title: 'Declaratiebeleid', @@ -6509,7 +6508,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar public_announceDescription: 'Iedereen kan deze ruimte vinden', createRoom: 'Ruimte maken', roomAlreadyExistsError: 'Er bestaat al een kamer met deze naam', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} is een standaardruimte in alle werkruimtes. Kies een andere naam.`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} is een standaardruimte in alle werkruimten. Kies een andere naam.`, roomNameInvalidError: 'Kamernamen mogen alleen kleine letters, cijfers en koppeltekens bevatten', pleaseEnterRoomName: 'Voer een kamernaam in', pleaseSelectWorkspace: 'Selecteer een werkruimte', @@ -6517,7 +6516,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar const actor = actorName ? `${actorName} ` : ''; return isExpenseReport ? `${actor}hernoemd naar "${newName}" (voorheen "${oldName}")` : `${actor}heeft deze ruimte hernoemd naar "${newName}" (voorheen "${oldName}")`; }, - roomRenamedTo: ({newName}: RoomRenamedToParams) => `Chatruimte hernoemd naar ${newName}`, + roomRenamedTo: ({newName}: RoomRenamedToParams) => `Ruimte hernoemd naar ${newName}`, social: 'sociaal', selectAWorkspace: 'Selecteer een werkruimte', growlMessageOnRenameError: 'Kan de werkruimtekamer niet hernoemen. Controleer je verbinding en probeer het opnieuw.', @@ -7519,11 +7518,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar tryDifferentEmail: 'Probeer een ander e-mailadres', }, }, - cardTransactions: { - notActivated: 'Niet geactiveerd', - outOfPocket: 'Uitgaven uit eigen zak', - companySpend: 'Uitgaven van het bedrijf', - }, + cardTransactions: {notActivated: 'Niet geactiveerd', outOfPocket: 'Uit eigen zak uitgegeven', companySpend: 'Bedrijfskosten'}, distance: { addStop: 'Stop toevoegen', address: 'Adres', @@ -7799,7 +7794,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar }, reportViolations: { [CONST.REPORT_VIOLATIONS.FIELD_REQUIRED]: ({fieldName}: RequiredFieldParams) => `${fieldName} is verplicht`, - reportContainsExpensesWithViolations: 'Rapport bevat onkosten met overtredingen.', + reportContainsExpensesWithViolations: 'Rapport bevat uitgaven met overtredingen.', }, violationDismissal: { rter: { @@ -8439,7 +8434,7 @@ Hier is een *proefbon* om je te laten zien hoe het werkt:`, forceCloseAccount: 'Account geforceerd sluiten', safeCloseAccount: 'Account veilig sluiten', closeAccountInfo: - 'We raden aan om de account veilig te sluiten om te vermijden dat je deze moet sluiten als er zijn:
  • Openstaande goedkeuringen
  • Actieve terugbetalingen
  • Geen alternatieve inlogmethoden
Anders kun je de bovenstaande veiligheidsmaatregelen negeren en de geselecteerde account geforceerd sluiten.', + 'We raden aan om de account veilig te sluiten om het afsluiten over te slaan als er:
  • Openstaande goedkeuringen zijn
  • Actieve terugbetalingen zijn
  • Geen alternatieve inlogmethoden zijn
Anders kun je de bovenstaande veiligheidsmaatregelen negeren en de geselecteerde account geforceerd sluiten.', error: { removeMember: 'Kan deze gebruiker niet verwijderen. Probeer het opnieuw.', addMember: 'Kan dit lid niet toevoegen. Probeer het opnieuw.', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index e7cd884b63be..72bb68699e74 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -1000,7 +1000,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `Napraw połączenie karty firmowej ${feedName}` : 'Napraw połączenie karty firmowej'), subtitle: 'Workspace > Karty firmowe', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Napraw połączenie ${integrationName}`, subtitle: 'Przestrzeń robocza > Księgowość'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Napraw połączenie ${integrationName}`, subtitle: 'Obszar roboczy > Księgowość'}, }, announcements: 'Ogłoszenia', discoverSection: { @@ -1271,10 +1271,10 @@ const translations: TranslationDeepObject = { business: 'Firma', settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} z Expensify` : `Zapłać przez Expensify`), settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} jako osoba prywatna` : `Zapłać z konta osobistego`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} z portfela` : `Zapłać portfelem`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} portfelem` : `Zapłać portfelem`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Zapłać ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} jako firma` : `Zapłać z konta firmowego`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Oznacz ${formattedAmount} jako zapłaconą` : `Oznacz jako zapłacone`), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Oznacz ${formattedAmount} jako zapłacone` : `Oznacz jako opłacone`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `zapłacono ${amount} z konta osobistego ${last4Digits}` : `Zapłacono z konta osobistego`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `zapłacono ${amount} z firmowego konta ${last4Digits}` : `Zapłacono z konta firmowego`), payWithPolicy: ({ @@ -1291,7 +1291,7 @@ const translations: TranslationDeepObject = { nextStep: 'Następne kroki', finished: 'Zakończono', flip: 'Odwróć', - sendInvoice: ({amount}: RequestAmountParams) => `Wyślij fakturę na ${amount}`, + sendInvoice: ({amount}: RequestAmountParams) => `Wyślij fakturę na kwotę ${amount}`, expenseAmount: (formattedAmount: string, comment?: string) => `${formattedAmount}${comment ? `za ${comment}` : ''}`, submitted: ({memo}: SubmittedWithMemoParams) => `przesłano${memo ? `, wpisując ${memo}` : ''}`, automaticallySubmitted: `przesłano przez opóźnianie wysyłania`, @@ -1323,7 +1323,7 @@ const translations: TranslationDeepObject = { canceledRequest: (amount: string, submitterDisplayName: string) => `anulowano płatność ${amount}, ponieważ ${submitterDisplayName} nie aktywował(-a) swojego portfela Expensify w ciągu 30 dni`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} dodał konto bankowe. Płatność w wysokości ${amount} została wykonana.`, + `${submitterDisplayName} dodał(a) konto bankowe. Płatność w wysokości ${amount} została dokonana.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}oznaczone jako opłacone${comment ? `, mówiąc „${comment}”` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}zapłacono z portfela`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1527,7 +1527,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Wybierz przestrzeń roboczą', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `raport skierowano do ${to} z powodu niestandardowego przepływu zatwierdzania`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `raport przekazany do ${to} z powodu niestandardowego procesu akceptacji`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'godzina' : 'godziny'} @ ${rate} / godzinę`, hrs: 'godz.', @@ -2031,7 +2031,7 @@ const translations: TranslationDeepObject = { 'Uwierzytelnianie dwuskładnikowe (2FA) pomaga chronić Twoje konto. Podczas logowania musisz wprowadzić kod wygenerowany przez wybraną przez Ciebie aplikację uwierzytelniającą.', disableTwoFactorAuth: 'Wyłącz uwierzytelnianie dwuskładnikowe', explainProcessToRemove: 'Aby wyłączyć uwierzytelnianie dwuskładnikowe (2FA), wprowadź prawidłowy kod z aplikacji uwierzytelniającej.', - explainProcessToRemoveWithRecovery: 'Aby wyłączyć uwierzytelnianie dwuskładnikowe (2FA), wprowadź prawidłowy kod odzyskiwania.', + explainProcessToRemoveWithRecovery: 'Aby wyłączyć uwierzytelnianie dwuskładnikowe (2FA), wprowadź ważny kod odzyskiwania.', disabled: 'Uwierzytelnianie dwuskładnikowe jest teraz wyłączone', noAuthenticatorApp: 'Nie będziesz już potrzebować aplikacji uwierzytelniającej, aby logować się do Expensify.', stepCodes: 'Kody odzyskiwania', @@ -2269,6 +2269,7 @@ const translations: TranslationDeepObject = { ${amount} dla ${merchant} - ${date}`, }, + freezeCard: 'Zamroź kartę', }, workflowsPage: { workflowTitle: 'Wydatki', @@ -4654,7 +4655,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Wybierz jedną z poniższych opcji:', label: (importedTypes: string[]) => `Zaimportowano jako ${importedTypes.join('i')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Wpisz proszę ${fieldName}`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Wprowadź ${fieldName}`, customSegments: { title: 'Niestandardowe segmenty/rejestry', addText: 'Dodaj własny segment/rejestr', @@ -4727,9 +4728,7 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy customSegmentMappingTitle: 'Jak ten niestandardowy segment powinien być wyświetlany w Expensify?', customRecordMappingTitle: 'Jak powinien być wyświetlany ten niestandardowy rekord w Expensify?', }, - errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Niestandardowy segment/rekord z tym ${fieldName?.toLowerCase()} już istnieje`, - }, + errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Niestandardowy segment/rejestr z tym ${fieldName?.toLowerCase()} już istnieje`}, }, customLists: { title: 'Listy niestandardowe', @@ -5583,7 +5582,7 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy genericRemove: 'Wystąpił problem z usunięciem tego członka przestrzeni roboczej', }, addedWithPrimary: 'Niektóre osoby zostały dodane za pomocą swoich głównych loginów.', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Dodane przez dodatkowy login ${secondaryLogin}.`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Dodano przez dodatkowy login ${secondaryLogin}.`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `Łączna liczba członków przestrzeni roboczej: ${count}`, importMembers: 'Zaimportuj członków', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6498,7 +6497,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i public_announceDescription: 'Każdy może znaleźć ten pokój', createRoom: 'Utwórz pokój', roomAlreadyExistsError: 'Pokój o tej nazwie już istnieje', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} to domyślny pokój we wszystkich przestrzeniach roboczych. Wybierz inną nazwę.`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} jest domyślnym pokojem we wszystkich przestrzeniach roboczych. Wybierz inną nazwę.`, roomNameInvalidError: 'Nazwy pokojów mogą zawierać tylko małe litery, cyfry i łączniki', pleaseEnterRoomName: 'Wprowadź nazwę pokoju', pleaseSelectWorkspace: 'Wybierz przestrzeń roboczą', @@ -6506,7 +6505,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i const actor = actorName ? `${actorName} ` : ''; return isExpenseReport ? `${actor}zmieniono nazwę na „${newName}” (wcześniej „${oldName}”)` : `${actor} zmienił(a) nazwę tego pokoju na „${newName}” (wcześniej „${oldName}”)`; }, - roomRenamedTo: ({newName}: RoomRenamedToParams) => `Pokój zmieniono na ${newName}`, + roomRenamedTo: ({newName}: RoomRenamedToParams) => `Pokój przemianowany na ${newName}`, social: 'społeczny', selectAWorkspace: 'Wybierz przestrzeń roboczą', growlMessageOnRenameError: 'Nie można zmienić nazwy pokoju w przestrzeni roboczej. Sprawdź połączenie i spróbuj ponownie.', @@ -7142,7 +7141,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i `Wszystkie ${cardFeedBankName}${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Wszystkie zaimportowane karty CSV${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, }, - reportField: ({name, value}: OptionalParam) => `${name} to ${value}`, + reportField: ({name, value}: OptionalParam) => `${name} jest ${value}`, current: 'Bieżące', past: 'Przeszłe', submitted: 'Przesłano', @@ -7500,11 +7499,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i tryDifferentEmail: 'Spróbuj użyć innego adresu e-mail', }, }, - cardTransactions: { - notActivated: 'Nieaktywne', - outOfPocket: 'Wydatki z własnej kieszeni', - companySpend: 'Wydatki firmowe', - }, + cardTransactions: {notActivated: 'Nieaktywne', outOfPocket: 'Wydatki z własnej kieszeni', companySpend: 'Wydatki firmowe'}, distance: { addStop: 'Dodaj przystanek', address: 'Adres', @@ -8416,9 +8411,9 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`, closeAccount: 'Zamknij konto', closeAccountPrompt: 'Czy na pewno? Ta czynność jest nieodwracalna.', forceCloseAccount: 'Wymuś zamknięcie konta', - safeCloseAccount: 'Zamknij konto bezpiecznie', + safeCloseAccount: 'Bezpiecznie zamknij konto', closeAccountInfo: - 'Zalecamy bezpieczne zamknięcie konta, aby pominąć jego zamykanie w przypadku, gdy występują:
  • Oczekujące zatwierdzenia
  • Aktywne zwroty kosztów
  • Brak alternatywnych metod logowania
W przeciwnym razie możesz zignorować powyższe środki ostrożności i wymusić zamknięcie wybranego konta.', + 'Zalecamy bezpieczne zamknięcie konta, aby pominąć zamykanie go w przypadku, gdy występują:
  • Oczekujące zatwierdzenia
  • Aktywne zwroty kosztów
  • Brak alternatywnych metod logowania
W przeciwnym razie możesz zignorować powyższe środki ostrożności i wymusić zamknięcie wybranego konta.', error: { removeMember: 'Nie można usunąć tego użytkownika. Spróbuj ponownie.', addMember: 'Nie można dodać tego członka. Spróbuj ponownie.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 963735f49f0f..87b288aa3a9e 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -998,7 +998,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `Corrigir conexão do cartão corporativo ${feedName}` : 'Corrigir conexão do cartão corporativo'), subtitle: 'Área de trabalho > Cartões corporativos', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Corrigir conexão com ${integrationName}`, subtitle: 'Espaço de trabalho > Contabilidade'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Corrigir conexão com ${integrationName}`, subtitle: 'Workspace > Contabilidade'}, }, announcements: 'Comunicados', discoverSection: { @@ -1268,9 +1268,9 @@ const translations: TranslationDeepObject = { settledElsewhere: 'Pago em outro lugar', individual: 'Individual', business: 'Negócios', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} com o Expensify` : `Pagar com Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} como pessoa física` : `Pagar com conta pessoal`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} com a carteira` : `Pagar com carteira`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pague ${formattedAmount} com o Expensify` : `Pague com Expensify`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pague ${formattedAmount} como pessoa física` : `Pagar com conta pessoal`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} com carteira` : `Pagar com carteira`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Pagar ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} como empresa` : `Pagar com conta empresarial`), payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Marcar ${formattedAmount} como pago` : `Marcar como pago`), @@ -1321,7 +1321,7 @@ const translations: TranslationDeepObject = { adminCanceledRequest: 'cancelou o pagamento', canceledRequest: (amount: string, submitterDisplayName: string) => `cancelou o pagamento de ${amount} porque ${submitterDisplayName} não ativou a Carteira Expensify em 30 dias`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} adicionou uma conta bancária. O pagamento de ${amount} foi efetuado.`, + `${submitterDisplayName} adicionou uma conta bancária. O pagamento de ${amount} foi realizado.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}marcou como pago${comment ? `, dizendo "${comment}"` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}pago com carteira`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1329,7 +1329,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Este relatório tem um valor inválido', pendingConversionMessage: 'O total será atualizado quando você voltar a ficar online', changedTheExpense: 'alterou a despesa', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `o(a) ${valueName} para ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `o ${valueName} para ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `definiu ${translatedChangedField} como ${newMerchant}, o que definiu o valor como ${newAmountToDisplay}`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `o ${valueName} (antes ${oldValueToDisplay})`, @@ -2028,7 +2028,7 @@ const translations: TranslationDeepObject = { whatIsTwoFactorAuth: 'A autenticação em duas etapas (2FA) ajuda a manter sua conta segura. Ao fazer login, você precisará inserir um código gerado pelo seu aplicativo autenticador preferido.', disableTwoFactorAuth: 'Desativar autenticação em duas etapas', - explainProcessToRemove: 'Para desativar a autenticação de dois fatores (2FA), insira um código válido do seu app de autenticação.', + explainProcessToRemove: 'Para desativar a autenticação em duas etapas (2FA), insira um código válido do seu app de autenticação.', explainProcessToRemoveWithRecovery: 'Para desativar a autenticação de dois fatores (2FA), insira um código de recuperação válido.', disabled: 'A autenticação em duas etapas está desativada agora', noAuthenticatorApp: 'Você não vai mais precisar de um app autenticador para entrar no Expensify.', @@ -2269,6 +2269,7 @@ const translations: TranslationDeepObject = { ${amount} para ${merchant} - ${date}`, }, + freezeCard: 'Bloquear cartão', }, workflowsPage: { workflowTitle: 'Gastos', @@ -4728,9 +4729,7 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS customSegmentMappingTitle: 'Como esse segmento personalizado deve ser exibido no Expensify?', customRecordMappingTitle: 'Como este registro personalizado deve ser exibido no Expensify?', }, - errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Já existe um segmento/registro personalizado com este ${fieldName?.toLowerCase()}`, - }, + errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Um segmento/registro personalizado com este ${fieldName?.toLowerCase()} já existe`}, }, customLists: { title: 'Listas personalizadas', @@ -7504,11 +7503,7 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e tryDifferentEmail: 'Tente outro e-mail', }, }, - cardTransactions: { - notActivated: 'Não ativado', - outOfPocket: 'Gasto presencial', - companySpend: 'Gastos da empresa', - }, + cardTransactions: {notActivated: 'Não ativado', outOfPocket: 'Gastos reembolsáveis', companySpend: 'Gastos da empresa'}, distance: { addStop: 'Adicionar parada', address: 'Endereço', @@ -8420,10 +8415,10 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`, email: 'Endereço de e-mail', closeAccount: 'Encerrar conta', closeAccountPrompt: 'Tem certeza? Esta ação é permanente.', - forceCloseAccount: 'Forçar encerramento da conta', + forceCloseAccount: 'Encerrar conta à força', safeCloseAccount: 'Fechar conta com segurança', closeAccountInfo: - 'Recomendamos fechar a conta com segurança para evitar o fechamento caso haja:
  • aprovações pendentes
  • reembolsos ativos
  • nenhum método de login alternativo
Caso contrário, você pode ignorar as precauções de segurança acima e forçar o fechamento da conta selecionada.', + 'Recomendamos fechar a conta com segurança para evitar problemas caso haja:
  • Aprovações pendentes
  • Reembolsos ativos
  • Nenhum método de login alternativo
Caso contrário, você pode ignorar as precauções de segurança acima e forçar o fechamento da conta selecionada.', error: { removeMember: 'Não foi possível remover este usuário. Tente novamente.', addMember: 'Não foi possível adicionar este membro. Tente novamente.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index a1c0e035bf96..d7e85619286b 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -1246,11 +1246,11 @@ const translations: TranslationDeepObject = { settledElsewhere: '在其他地方支付', individual: '个人', business: '商务', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `使用 Expensify 支付 ${formattedAmount}` : `使用 Expensify 付款`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `使用 Expensify 支付 ${formattedAmount}` : `使用 Expensify 支付`), settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `以个人身份支付 ${formattedAmount}` : `使用个人账户付款`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `用钱包支付 ${formattedAmount}` : `使用钱包支付`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `使用钱包支付 ${formattedAmount}` : `使用钱包支付`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `支付 ${formattedAmount}`, - settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `以企业身份支付 ${formattedAmount}` : `使用公司账户付款`), + settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `以公司身份支付 ${formattedAmount}` : `使用企业账户支付`), payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `将 ${formattedAmount} 标记为已支付` : `标记为已支付`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `使用个人账户 ${last4Digits} 支付了 ${amount}` : `使用个人账户支付`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `已使用商务账户 ${last4Digits} 支付 ${amount}` : `使用公司账户支付`), @@ -1298,7 +1298,7 @@ const translations: TranslationDeepObject = { waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `已开始付款,但正在等待${submitterDisplayName}添加银行账户。`, adminCanceledRequest: '已取消付款', canceledRequest: (amount: string, submitterDisplayName: string) => `已取消金额为 ${amount} 的付款,因为 ${submitterDisplayName} 未在 30 天内启用其 Expensify 钱包`, - settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => `${submitterDisplayName} 已添加了一个银行账户。已完成 ${amount} 付款。`, + settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => `${submitterDisplayName} 添加了一个银行账户。已完成 ${amount} 付款。`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}标记为已支付${comment ? `,内容为“${comment}”` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}用钱包支付`, automaticallyPaidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}已通过工作区规则使用 Expensify 支付`, @@ -1998,8 +1998,8 @@ const translations: TranslationDeepObject = { twoFactorAuthEnabled: '已启用双重身份验证', whatIsTwoFactorAuth: '双重身份验证(2FA)有助于保护您的账户安全。登录时,您需要输入由首选身份验证应用生成的验证码。', disableTwoFactorAuth: '禁用双重身份验证', - explainProcessToRemove: '若要禁用双重身份验证 (2FA),请在验证器应用中输入有效验证码。', - explainProcessToRemoveWithRecovery: '若要停用双重身份验证(2FA),请输入有效的恢复代码。', + explainProcessToRemove: '若要停用双重身份验证(2FA),请输入来自您身份验证应用中的有效验证码。', + explainProcessToRemoveWithRecovery: '若要禁用双重身份验证(2FA),请输入有效的恢复代码。', disabled: '已关闭双重身份验证', noAuthenticatorApp: '你今后登录 Expensify 时将不再需要验证器应用程序。', stepCodes: '恢复代码', @@ -2235,6 +2235,7 @@ const translations: TranslationDeepObject = { ${amount},商户:${merchant} - 日期:${date}`, }, + freezeCard: '冻结卡片', }, workflowsPage: { workflowTitle: '支出', @@ -2484,7 +2485,7 @@ ${amount},商户:${merchant} - 日期:${date}`, }, }, reportDetailsPage: { - inWorkspace: ({policyName}: ReportPolicyNameParams) => `在 ${policyName} 中`, + inWorkspace: ({policyName}: ReportPolicyNameParams) => `在${policyName} 中`, generatingPDF: '生成 PDF', waitForPDF: '正在生成 PDF,请稍候。', errorPDF: '尝试生成您的 PDF 时出错', @@ -4644,9 +4645,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM customSegmentMappingTitle: '此自定义分段在 Expensify 中应如何显示?', customRecordMappingTitle: '此自定义记录应在 Expensify 中如何显示?', }, - errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `已存在使用此 ${fieldName?.toLowerCase()} 的自定义分段/记录`, - }, + errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `已存在使用此 ${fieldName?.toLowerCase()} 的自定义分段/记录`}, }, customLists: { title: '自定义列表', @@ -4908,7 +4907,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM limit: '限额', currentBalance: '当前余额', currentBalanceDescription: '当前余额是自上次结算日期以来所有已入账 Expensify Card 交易的总和。', - balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `余额将于 ${settlementDate} 结清`, + balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `余额将在 ${settlementDate} 结清`, settleBalance: '结清余额', cardLimit: '卡片限额', remainingLimit: '剩余额度', @@ -5487,7 +5486,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM genericRemove: '移除该工作区成员时出现问题', }, addedWithPrimary: '某些成员已通过其主登录名添加。', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `由次要登录账号 ${secondaryLogin} 添加。`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `由辅助登录账号 ${secondaryLogin} 添加。`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `工作区成员总数:${count}`, importMembers: '导入成员', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6310,7 +6309,7 @@ ${reportName} always: '始终要求明细收据', }, defaultTaxRate: '默认税率', - enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => `前往 [更多功能](${moreFeaturesLink}) 并启用工作流,然后添加审批以解锁此功能。`, + enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => `前往 [更多功能](${moreFeaturesLink}) 并启用工作流程,然后添加审批以解锁此功能。`, }, customRules: { title: '报销政策', @@ -6375,7 +6374,7 @@ ${reportName} public_announceDescription: '任何人都可以找到此房间', createRoom: '创建聊天室', roomAlreadyExistsError: '已存在同名房间', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} 是所有工作区中的默认聊天室名称。请选择其他名称。`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} 是所有工作区中的默认聊天室名称。请选择另一个名称。`, roomNameInvalidError: '房间名称只能包含小写字母、数字和连字符', pleaseEnterRoomName: '请输入房间名称', pleaseSelectWorkspace: '请选择一个工作区', @@ -7001,7 +7000,7 @@ ${reportName} `所有 ${cardFeedBankName}${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `所有导入的 CSV 卡片${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, }, - reportField: ({name, value}: OptionalParam) => `${name} 为 ${value}`, + reportField: ({name, value}: OptionalParam) => `${name} 是 ${value}`, current: '当前', past: '过去', submitted: '已提交', @@ -7352,11 +7351,7 @@ ${reportName} tryDifferentEmail: '请尝试使用其他邮箱', }, }, - cardTransactions: { - notActivated: '未启用', - outOfPocket: '个人垫付支出', - companySpend: '公司支出', - }, + cardTransactions: {notActivated: '未启用', outOfPocket: '自付支出', companySpend: '公司支出'}, distance: { addStop: '添加站点', address: '地址', @@ -8250,7 +8245,7 @@ ${reportName} forceCloseAccount: '强制关闭账户', safeCloseAccount: '安全关闭账户', closeAccountInfo: - '我们建议安全地关闭该账户,以便在存在以下情况时跳过关闭操作:
  • 待处理的审批
  • 正在进行的报销
  • 没有其他登录方式
否则,您可以忽略上述安全预防措施并强制关闭所选账户。', + '我们建议安全关闭账户,以免在以下情况下无法关闭:
  • 有待处理的审批
  • 有正在进行的报销
  • 没有其他登录方式
否则,你可以忽略以上安全防范措施并强制关闭所选账户。', error: { removeMember: '无法移除此用户。请重试。', addMember: '无法添加此成员。请重试。', diff --git a/tests/unit/CardUtilsTest.ts b/tests/unit/CardUtilsTest.ts index bf2fd4927853..07b4fc80b042 100644 --- a/tests/unit/CardUtilsTest.ts +++ b/tests/unit/CardUtilsTest.ts @@ -1887,7 +1887,7 @@ describe('CardUtils', () => { nameValuePairs: { frozen: true, }, - } as unknown as Card; + } as Card; expect(isCardFrozen(card)).toBe(true); }); @@ -1895,7 +1895,7 @@ describe('CardUtils', () => { const card = { state: CONST.EXPENSIFY_CARD.STATE.STATE_SUSPENDED, nameValuePairs: {}, - } as unknown as Card; + } as Card; expect(isCardFrozen(card)).toBe(false); }); @@ -1905,7 +1905,7 @@ describe('CardUtils', () => { nameValuePairs: { frozen: true, }, - } as unknown as Card; + } as Card; expect(isCardFrozen(card)).toBe(false); }); @@ -1917,7 +1917,7 @@ describe('CardUtils', () => { const card = { state: CONST.EXPENSIFY_CARD.STATE.OPEN, nameValuePairs: {}, - } as unknown as Card; + } as Card; expect(isCardFrozen(card)).toBe(false); }); }); From 279d58a8df9dd44e7501a6f843a856a8659b7d6b Mon Sep 17 00:00:00 2001 From: ShridharGoel <35566748+ShridharGoel@users.noreply.github.com> Date: Fri, 13 Feb 2026 01:39:25 +0530 Subject: [PATCH 09/10] Update translations --- src/languages/de.ts | 35 +++++++++++++++++++---------------- src/languages/fr.ts | 26 ++++++++++++++++---------- src/languages/it.ts | 38 ++++++++++++++++++++++---------------- src/languages/ja.ts | 32 +++++++++++++++++++------------- src/languages/nl.ts | 36 +++++++++++++++++++++--------------- src/languages/pl.ts | 38 ++++++++++++++++++++++---------------- src/languages/pt-BR.ts | 28 +++++++++++++++++----------- src/languages/zh-hans.ts | 36 +++++++++++++++++++++--------------- 8 files changed, 157 insertions(+), 112 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 9347475fc2df..c3348219c14c 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -262,7 +262,7 @@ const translations: TranslationDeepObject = { wallet: 'Brieftasche', preferences: 'Einstellungen', view: 'Anzeigen', - review: (reviewParams?: ReviewParams) => `Überprüfen${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, + review: (reviewParams?: ReviewParams) => `Prüfen${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, not: 'Nicht', signIn: 'Anmelden', signInWithGoogle: 'Mit Google anmelden', @@ -1271,8 +1271,8 @@ const translations: TranslationDeepObject = { settledElsewhere: 'Anderswo bezahlt', individual: 'Einzelperson', business: 'Business', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Bezahle ${formattedAmount} mit Expensify` : `Mit Expensify bezahlen`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} als Privatperson bezahlen` : `Mit privatem Konto bezahlen`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} mit Expensify bezahlen` : `Mit Expensify bezahlen`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} als Privatperson bezahlen` : `Mit Privatkonto bezahlen`), settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} mit Wallet bezahlen` : `Mit Wallet bezahlen`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `${formattedAmount} bezahlen`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} als Unternehmen bezahlen` : `Mit Geschäftskonto bezahlen`), @@ -1284,7 +1284,7 @@ const translations: TranslationDeepObject = { policyName, }: SettleExpensifyCardParams & { policyName: string; - }) => (formattedAmount ? `Zahle ${formattedAmount} über ${policyName}` : `Bezahlen über ${policyName}`), + }) => (formattedAmount ? `Bezahle ${formattedAmount} über ${policyName}` : `Bezahlen über ${policyName}`), businessBankAccount: (amount?: string, last4Digits?: string) => (amount ? `${amount} mit Bankkonto ${last4Digits} bezahlt` : `bezahlt mit Bankkonto ${last4Digits}`), automaticallyPaidWithBusinessBankAccount: (amount?: string, last4Digits?: string) => `${amount ? `${amount} ` : ''} mit Bankkonto ${last4Digits} über Workspace-Regeln bezahlt`, @@ -1325,7 +1325,7 @@ const translations: TranslationDeepObject = { canceledRequest: (amount: string, submitterDisplayName: string) => `${amount} Zahlung storniert, weil ${submitterDisplayName} ihr Expensify Wallet nicht innerhalb von 30 Tagen aktiviert hat`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} hat ein Bankkonto hinzugefügt. Die Zahlung über ${amount} wurde durchgeführt.`, + `${submitterDisplayName} hat ein Bankkonto hinzugefügt. Die Zahlung über ${amount} wurde vorgenommen.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}als bezahlt markiert${comment ? `und sagt „${comment}“` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}mit Wallet bezahlt`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1333,7 +1333,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Dieser Bericht enthält einen ungültigen Betrag', pendingConversionMessage: 'Die Gesamtsumme wird aktualisiert, sobald du wieder online bist', changedTheExpense: 'hat die Ausgabe geändert', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `den ${valueName} in ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `den Wert ${valueName} auf ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `lege ${translatedChangedField} auf ${newMerchant} fest, wodurch der Betrag auf ${newAmountToDisplay} gesetzt wurde`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `der/die/das ${valueName} (zuvor ${oldValueToDisplay})`, @@ -1531,7 +1531,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Wähle einen Arbeitsbereich', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `Bericht aufgrund des benutzerdefinierten Genehmigungs-Workflows an ${to} weitergeleitet`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `Report aufgrund des benutzerdefinierten Genehmigungsworkflows an ${to} weitergeleitet`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'Stunde' : 'Stunden'} @ ${rate} / Stunde`, hrs: 'Std.', @@ -2834,8 +2834,7 @@ ${ 5. Füge eine eigene Einladung hinzu, wenn du möchtest! [Zu den Workspace-Mitgliedern](${workspaceMembersLink}). - - `), + `), }, setupCategoriesAndTags: { title: ({workspaceCategoriesLink, workspaceTagsLink}) => `Richte [Kategorien](${workspaceCategoriesLink}) und [Tags](${workspaceTagsLink}) ein`, @@ -4684,7 +4683,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Wähle unten eine Option aus:', label: (importedTypes: string[]) => `Importiert als ${importedTypes.join('und')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Bitte ${fieldName} eingeben`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Bitte gib ${fieldName} ein`, customSegments: { title: 'Benutzerdefinierte Segmente/Datensätze', addText: 'Benutzerdefiniertes Segment/Datensatz hinzufügen', @@ -4758,7 +4757,7 @@ _Für detailliertere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSUI customRecordMappingTitle: 'Wie soll dieser benutzerdefinierte Datensatz in Expensify angezeigt werden?', }, errors: { - uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Ein benutzerdefiniertes Segment/Datensatz mit dieser ${fieldName?.toLowerCase()} ist bereits vorhanden`, + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Ein benutzerdefiniertes Segment/Datensatz mit dieser ${fieldName?.toLowerCase()} existiert bereits`, }, }, customLists: { @@ -5029,7 +5028,7 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU limit: 'Limit', currentBalance: 'Aktueller Kontostand', currentBalanceDescription: 'Der aktuelle Saldo ist die Summe aller verbuchten Expensify-Card-Transaktionen, die seit dem letzten Abrechnungsdatum stattgefunden haben.', - balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `Der Saldo wird am ${settlementDate} ausgeglichen`, + balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `Der Saldo wird am ${settlementDate} ausgeglichen.`, settleBalance: 'Saldo ausgleichen', cardLimit: 'Kartenlimit', remainingLimit: 'Verbleibendes Limit', @@ -6472,7 +6471,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und }, defaultTaxRate: 'Standardsteuersatz', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Gehe zu [Weitere Funktionen](${moreFeaturesLink}) und aktiviere Workflows, dann füge Genehmigungen hinzu, um diese Funktion freizuschalten.`, + `Gehe zu [Weitere Funktionen](${moreFeaturesLink}) und aktiviere Workflows, füge dann Genehmigungen hinzu, um diese Funktion freizuschalten.`, }, customRules: { title: 'Spesenrichtlinie', @@ -6537,7 +6536,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und public_announceDescription: 'Jede Person kann diesen Raum finden', createRoom: 'Raum erstellen', roomAlreadyExistsError: 'Ein Raum mit diesem Namen existiert bereits', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} ist ein Standardraum in allen Workspaces. Bitte wähle einen anderen Namen.`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} ist ein Standardraum in allen Arbeitsbereichen. Bitte wähle einen anderen Namen.`, roomNameInvalidError: 'Raumnamen dürfen nur Kleinbuchstaben, Zahlen und Bindestriche enthalten', pleaseEnterRoomName: 'Bitte gib einen Raumnamen ein', pleaseSelectWorkspace: 'Bitte wähle einen Workspace aus', @@ -7547,7 +7546,11 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und tryDifferentEmail: 'Bitte versuche eine andere E-Mail-Adresse', }, }, - cardTransactions: {notActivated: 'Nicht aktiviert', outOfPocket: 'Auslagen', companySpend: 'Unternehmensausgaben'}, + cardTransactions: { + notActivated: 'Nicht aktiviert', + outOfPocket: 'Auslagen-Spend', + companySpend: 'Unternehmensausgaben', + }, distance: { addStop: 'Stopp hinzufügen', address: 'Adresse', @@ -8466,7 +8469,7 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`, forceCloseAccount: 'Konto zwangsweise schließen', safeCloseAccount: 'Konto sicher schließen', closeAccountInfo: - 'Wir empfehlen, das Konto sicher zu schließen, um das Schließen zu überspringen, falls Folgendes vorliegt:
  • Ausstehende Genehmigungen
  • Aktive Erstattungen
  • Keine alternativen Anmeldemethoden
Andernfalls kannst du die Sicherheitshinweise oben ignorieren und das ausgewählte Konto zwangsweise schließen.', + 'Wir empfehlen, das Konto sicher zu schließen, um das Schließen zu überspringen, falls Folgendes vorliegt:
  • Ausstehende Genehmigungen
  • Aktive Erstattungen
  • Keine alternativen Anmeldemethoden
Andernfalls können Sie die oben genannten Sicherheitsvorkehrungen ignorieren und das ausgewählte Konto zwangsweise schließen.', error: { removeMember: 'Dieser Benutzer kann nicht entfernt werden. Bitte versuche es erneut.', addMember: 'Dieses Mitglied kann nicht hinzugefügt werden. Bitte versuche es erneut.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index b8b448dc69a9..f0724dc41c1a 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -805,7 +805,7 @@ const translations: TranslationDeepObject = { phrase2: 'L’argent parle. Et maintenant que la messagerie et les paiements sont réunis au même endroit, c’est aussi simple.', phrase3: 'Vos paiements vous parviennent aussi vite que vous faites passer votre message.', enterPassword: 'Veuillez saisir votre mot de passe', - welcomeNewFace: ({login}: SignUpNewFaceCodeParams) => `${login}, c’est toujours un plaisir de voir un nouveau visage parmi nous !`, + welcomeNewFace: ({login}: SignUpNewFaceCodeParams) => `${login}, c’est toujours un plaisir de voir un nouveau visage par ici !`, welcomeEnterMagicCode: ({login}: WelcomeEnterMagicCodeParams) => `Veuillez saisir le code magique envoyé à ${login}. Il devrait arriver dans une minute ou deux.`, }, login: { @@ -1280,7 +1280,7 @@ const translations: TranslationDeepObject = { settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} en tant que particulier` : `Payer avec un compte personnel`), settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} avec le portefeuille` : `Payer avec le portefeuille`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Payer ${formattedAmount}`, - settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} en tant qu’entreprise` : `Payer avec un compte professionnel`), + settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Payer ${formattedAmount} en tant qu’entreprise` : `Payer avec le compte professionnel`), payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Marquer ${formattedAmount} comme payé` : `Marquer comme payé`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `a payé ${amount} avec le compte personnel ${last4Digits}` : `Payé avec un compte personnel`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `a payé ${amount} avec le compte professionnel ${last4Digits}` : `Payé avec le compte professionnel`), @@ -1338,7 +1338,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Cette note de frais a un montant non valide', pendingConversionMessage: 'Le total sera mis à jour quand vous serez de nouveau en ligne', changedTheExpense: 'a modifié la dépense', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `le ${valueName} en ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `le ${valueName} sur ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `défini le ${translatedChangedField} sur ${newMerchant}, ce qui a défini le montant sur ${newAmountToDisplay}`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `le ${valueName} (anciennement ${oldValueToDisplay})`, @@ -1538,7 +1538,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Choisir un espace de travail', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `note de frais acheminée vers ${to} en raison d’un processus d’approbation personnalisé`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `note de frais transmise à ${to} en raison du flux d’approbation personnalisé`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'heure' : 'heures'} @ ${rate} / heure`, hrs: 'h', @@ -4691,7 +4691,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Choisissez une option ci-dessous :', label: (importedTypes: string[]) => `Importé en tant que ${importedTypes.join('et')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Veuillez saisir le/la ${fieldName}`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Veuillez saisir le ${fieldName}`, customSegments: { title: 'Segments/enregistrements personnalisés', addText: 'Ajouter un segment/enregistrement personnalisé', @@ -4764,7 +4764,9 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. customSegmentMappingTitle: 'Comment ce segment personnalisé doit-il être affiché dans Expensify ?', customRecordMappingTitle: 'Comment cet enregistrement personnalisé doit-il être affiché dans Expensify ?', }, - errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Un segment/enregistrement personnalisé avec cet(te) ${fieldName?.toLowerCase()} existe déjà`}, + errors: { + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Un segment/enregistrement personnalisé avec ce ${fieldName?.toLowerCase()} existe déjà`, + }, }, customLists: { title: 'Listes personnalisées', @@ -6491,7 +6493,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip }, defaultTaxRate: 'Taux de taxe par défaut', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Accédez à [Plus de fonctionnalités](${moreFeaturesLink}) et activez les workflows, puis ajoutez des approbations pour déverrouiller cette fonctionnalité.`, + `Allez dans [Plus de fonctionnalités](${moreFeaturesLink}) et activez les workflows, puis ajoutez des approbations pour déverrouiller cette fonctionnalité.`, }, customRules: { title: 'Politique de dépenses', @@ -7566,7 +7568,11 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip tryDifferentEmail: 'Veuillez essayer une autre adresse e-mail', }, }, - cardTransactions: {notActivated: 'Non activé', outOfPocket: 'Dépenses à titre personnel', companySpend: 'Dépenses de l’entreprise'}, + cardTransactions: { + notActivated: 'Non activé', + outOfPocket: 'Dépenses personnelles', + companySpend: 'Dépenses de l’entreprise', + }, distance: { addStop: 'Ajouter un arrêt', address: 'Adresse', @@ -8481,10 +8487,10 @@ Voici un *reçu test* pour vous montrer comment ça fonctionne :`, email: 'Adresse e-mail', closeAccount: 'Fermer le compte', closeAccountPrompt: 'Êtes-vous sûr(e) ? Cette action est définitive.', - forceCloseAccount: 'Forcer la clôture du compte', + forceCloseAccount: 'Forcer la fermeture du compte', safeCloseAccount: 'Fermer le compte en toute sécurité', closeAccountInfo: - 'Nous vous recommandons de fermer le compte en toute sécurité pour éviter de le fermer dans les cas suivants :
  • Approbations en attente
  • Remboursements actifs
  • Aucune autre méthode de connexion
Sinon, vous pouvez ignorer les précautions de sécurité ci-dessus et forcer la fermeture du compte sélectionné.', + 'Nous recommandons de fermer le compte en toute sécurité afin d’éviter de le fermer dans le cas où il y aurait :
  • Des validations en attente
  • Des remboursements actifs
  • Aucune autre méthode de connexion
Sinon, vous pouvez ignorer les précautions de sécurité ci-dessus et forcer la fermeture du compte sélectionné.', error: { removeMember: 'Impossible de supprimer cet utilisateur. Veuillez réessayer.', addMember: 'Impossible d’ajouter ce membre. Veuillez réessayer.', diff --git a/src/languages/it.ts b/src/languages/it.ts index 339773f0599a..c4a7268334f6 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -262,7 +262,7 @@ const translations: TranslationDeepObject = { wallet: 'Portafoglio', preferences: 'Preferenze', view: 'Visualizza', - review: (reviewParams?: ReviewParams) => `Revisiona${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, + review: (reviewParams?: ReviewParams) => `Revisione${reviewParams?.amount ? ` ${reviewParams?.amount}` : ''}`, not: 'Non', signIn: 'Accedi', signInWithGoogle: 'Accedi con Google', @@ -999,7 +999,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `Correggi la connessione della carta aziendale ${feedName}` : 'Correggi connessione carta aziendale'), subtitle: 'Spazio di lavoro > Carte aziendali', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Correggi connessione ${integrationName}`, subtitle: 'Area di lavoro > Contabilità'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Correggi connessione ${integrationName}`, subtitle: 'Spazio di lavoro > Contabilità'}, }, announcements: 'Annunci', discoverSection: { @@ -1270,11 +1270,11 @@ const translations: TranslationDeepObject = { individual: 'Personale', business: 'Business', settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} con Expensify` : `Paga con Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} come individuo` : `Paga con conto personale`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} con il portafoglio` : `Paga con portafoglio`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} come persona fisica` : `Paga con conto personale`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} con il wallet` : `Paga con portafoglio`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Paga ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Paga ${formattedAmount} come azienda` : `Paga con conto aziendale`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Segna ${formattedAmount} come pagato` : `Contrassegna come pagato`), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Segna ${formattedAmount} come pagato` : `Segna come pagata`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `pagato ${amount} con conto personale ${last4Digits}` : `Pagato con conto personale`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `ha pagato ${amount} con il conto aziendale ${last4Digits}` : `Pagato con conto aziendale`), payWithPolicy: ({ @@ -1291,7 +1291,7 @@ const translations: TranslationDeepObject = { nextStep: 'Prossimi passaggi', finished: 'Completato', flip: 'Ruota', - sendInvoice: ({amount}: RequestAmountParams) => `Invia fattura di ${amount}`, + sendInvoice: ({amount}: RequestAmountParams) => `Invia fattura da ${amount}`, expenseAmount: (formattedAmount: string, comment?: string) => `${formattedAmount}${comment ? `per ${comment}` : ''}`, submitted: ({memo}: SubmittedWithMemoParams) => `inviato${memo ? `, con nota: ${memo}` : ''}`, automaticallySubmitted: `inviato tramite invio posticipato`, @@ -1331,7 +1331,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Questo rendiconto contiene un importo non valido', pendingConversionMessage: 'Il totale verrà aggiornato quando torni online', changedTheExpense: 'ha modificato la spesa', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `il/la ${valueName} in ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `${valueName} a ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `imposta ${translatedChangedField} su ${newMerchant}, che ha impostato l’importo su ${newAmountToDisplay}`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `il/la ${valueName} (precedentemente ${oldValueToDisplay})`, @@ -1528,7 +1528,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Scegli uno spazio di lavoro', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `report indirizzato a ${to} a causa del flusso di approvazione personalizzato`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `rendiconto instradato a ${to} a causa del flusso di approvazione personalizzato`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'ora' : 'ore'} @ ${rate} / ora`, hrs: 'ore', @@ -2031,7 +2031,7 @@ const translations: TranslationDeepObject = { whatIsTwoFactorAuth: 'L’autenticazione a due fattori (2FA) contribuisce a mantenere il tuo account al sicuro. Quando effettui l’accesso, dovrai inserire un codice generato dalla tua app di autenticazione preferita.', disableTwoFactorAuth: 'Disattiva l’autenticazione a due fattori', - explainProcessToRemove: 'Per disabilitare l’autenticazione a due fattori (2FA), inserisci un codice valido dalla tua app di autenticazione.', + explainProcessToRemove: 'Per disattivare l’autenticazione a due fattori (2FA), inserisci un codice valido dalla tua app di autenticazione.', explainProcessToRemoveWithRecovery: 'Per disattivare l’autenticazione a due fattori (2FA), inserisci un codice di recupero valido.', disabled: "L'autenticazione a due fattori è ora disattivata", noAuthenticatorApp: 'Non sarà più necessaria un’app di autenticazione per accedere a Expensify.', @@ -4667,7 +4667,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Scegli un’opzione qui sotto:', label: (importedTypes: string[]) => `Importato come ${importedTypes.join('e')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Inserisci il/la ${fieldName}`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Inserisci ${fieldName}`, customSegments: { title: 'Segmenti/record personalizzati', addText: 'Aggiungi segmento/record personalizzato', @@ -4740,7 +4740,9 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. customSegmentMappingTitle: 'Come deve essere visualizzato questo segmento personalizzato in Expensify?', customRecordMappingTitle: 'Come deve essere visualizzato questo record personalizzato in Expensify?', }, - errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Un segmento/record personalizzato con questo ${fieldName?.toLowerCase()} esiste già`}, + errors: { + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Esiste già un segmento/record personalizzato con questo ${fieldName?.toLowerCase()}`, + }, }, customLists: { title: 'Elenchi personalizzati', @@ -6455,7 +6457,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo }, defaultTaxRate: 'Aliquota fiscale predefinita', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Vai su [Altre funzionalità](${moreFeaturesLink}) e abilita i workflow, quindi aggiungi le approvazioni per sbloccare questa funzione.`, + `Vai su [Altre funzionalità](${moreFeaturesLink}) e abilita i flussi di lavoro, quindi aggiungi le approvazioni per sbloccare questa funzionalità.`, }, customRules: { title: 'Politica di spesa', @@ -7532,7 +7534,11 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo tryDifferentEmail: 'Prova con un’altra email', }, }, - cardTransactions: {notActivated: 'Non attivato', outOfPocket: 'Spese vive', companySpend: 'Spese aziendali'}, + cardTransactions: { + notActivated: 'Non attivato', + outOfPocket: 'Spesa personale', + companySpend: 'Spese aziendali', + }, distance: { addStop: 'Aggiungi fermata', address: 'Indirizzo', @@ -8446,10 +8452,10 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`, email: 'Indirizzo email', closeAccount: 'Chiudi account', closeAccountPrompt: 'Sei sicuro? Questa azione è permanente.', - forceCloseAccount: 'Chiudi forzatamente l’account', - safeCloseAccount: 'Chiudi l’account in sicurezza', + forceCloseAccount: 'Forza chiusura account', + safeCloseAccount: 'Chiudi il conto in sicurezza', closeAccountInfo: - 'Consigliamo di chiudere l’account in modo sicuro per evitare di chiuderlo quando sono presenti:
  • Approvazioni in sospeso
  • Rimborsi attivi
  • Nessun metodo di accesso alternativo
In caso contrario, puoi ignorare le precauzioni di sicurezza sopra e forzare la chiusura dell’account selezionato.', + 'Consigliamo di chiudere l’account in modo sicuro per evitare problemi in caso di:
  • Approvazioni in sospeso
  • Rimborsi attivi
  • Nessun metodo di accesso alternativo
In caso contrario, puoi ignorare le precauzioni di sicurezza sopra indicate e forzare la chiusura dell’account selezionato.', error: { removeMember: 'Impossibile rimuovere questo utente. Riprova.', addMember: 'Impossibile aggiungere questo membro. Riprova.', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 69034a0e9c9d..22b0f9dc690d 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -995,7 +995,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `${feedName} 会社カード接続を修正` : '法人クレジットカードの接続を修正'), subtitle: 'ワークスペース > 会社カード', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `${integrationName} 接続を修正`, subtitle: 'ワークスペース > 会計'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `${integrationName} 接続を修正`, subtitle: 'ワークスペース > 会計'}, }, announcements: 'お知らせ', discoverSection: { @@ -1265,12 +1265,12 @@ const translations: TranslationDeepObject = { settledElsewhere: '他で支払い済み', individual: '個人', business: 'ビジネス', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Expensify で ${formattedAmount} を支払う` : `Expensifyで支払う`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Expensifyで${formattedAmount}を支払う` : `Expensify で支払う`), settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `個人として${formattedAmount}を支払う` : `個人アカウントで支払う`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `ウォレットで${formattedAmount}を支払う` : `ウォレットで支払う`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `ウォレットで ${formattedAmount} を支払う` : `ウォレットで支払う`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `${formattedAmount} を支払う`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} をビジネスとして支払う` : `ビジネスアカウントで支払う`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} を支払済みにする` : `支払済みにする`), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `${formattedAmount} を支払済みにする` : `支払い済みにする`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `個人アカウント(下4桁 ${last4Digits})で ${amount} を支払いました` : `個人アカウントで支払い済み`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `ビジネス口座(末尾${last4Digits})で${amount}を支払いました` : `ビジネスアカウントで支払済み`), payWithPolicy: ({ @@ -1523,7 +1523,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'ワークスペースを選択', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `カスタム承認ワークフローによりレポートが${to}に回覧されました`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `カスタム承認ワークフローにより、レポートは${to}に回付されました`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? '時間' : '時間'} @ ${rate} / 時間`, hrs: '時間', @@ -2025,7 +2025,7 @@ const translations: TranslationDeepObject = { twoFactorAuthEnabled: '2要素認証が有効になりました', whatIsTwoFactorAuth: '2要素認証(2FA)は、アカウントを安全に保つのに役立ちます。ログインする際、お好みの認証アプリで生成されたコードを入力する必要があります。', disableTwoFactorAuth: '2 要素認証を無効にする', - explainProcessToRemove: '2 要素認証(2FA)を無効にするには、認証アプリから有効なコードを入力してください。', + explainProcessToRemove: '2要素認証(2FA)を無効にするには、認証アプリから有効なコードを入力してください。', explainProcessToRemoveWithRecovery: '2 要素認証(2FA)を無効にするには、有効なリカバリーコードを入力してください。', disabled: '二要素認証は現在無効になっています', noAuthenticatorApp: '今後、Expensify にログインする際に認証アプリは不要になります。', @@ -4710,7 +4710,9 @@ _より詳細な手順については、[ヘルプサイトをご覧ください customSegmentMappingTitle: 'このカスタムセグメントを Expensify でどのように表示しますか?', customRecordMappingTitle: 'このカスタムレコードを Expensify ではどのように表示しますか?', }, - errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `この${fieldName?.toLowerCase()}を持つカスタムセグメント/レコードはすでに存在します`}, + errors: { + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `この ${fieldName?.toLowerCase()} を持つカスタムセグメント/レコードはすでに存在します`, + }, }, customLists: { title: 'カスタムリスト', @@ -5558,7 +5560,7 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO genericRemove: 'そのワークスペースメンバーを削除する際に問題が発生しました', }, addedWithPrimary: '一部のメンバーは、プライマリーログインで追加されました。', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `セカンダリログイン ${secondaryLogin} によって追加されました。`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `セカンダリログイン${secondaryLogin}によって追加されました。`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `ワークスペースメンバー合計:${count}`, importMembers: 'メンバーをインポート', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6474,7 +6476,7 @@ ${reportName} const actor = actorName ? `${actorName} ` : ''; return isExpenseReport ? `${actor}は"${oldName}"から"${newName}"に名前を変更しました` : `${actor}はこのルーム名を「${newName}」(以前は「${oldName}」)に変更しました`; }, - roomRenamedTo: ({newName}: RoomRenamedToParams) => `ルーム名を${newName}に変更しました`, + roomRenamedTo: ({newName}: RoomRenamedToParams) => `ルーム名が${newName}に変更されました`, social: 'ソーシャル', selectAWorkspace: 'ワークスペースを選択', growlMessageOnRenameError: 'ワークスペースルームの名前を変更できません。接続を確認して、もう一度お試しください。', @@ -7462,7 +7464,11 @@ ${reportName} tryDifferentEmail: '別のメールアドレスをお試しください', }, }, - cardTransactions: {notActivated: '未有効化', outOfPocket: '立替払い支出', companySpend: '会社の支出'}, + cardTransactions: { + notActivated: '未有効化', + outOfPocket: '立替経費支出', + companySpend: '会社の支出', + }, distance: { addStop: '経由地を追加', address: '住所', @@ -7737,7 +7743,7 @@ ${reportName} noRoute: '有効な住所を選択してください', }, reportViolations: { - [CONST.REPORT_VIOLATIONS.FIELD_REQUIRED]: ({fieldName}: RequiredFieldParams) => `${fieldName}は必須です`, + [CONST.REPORT_VIOLATIONS.FIELD_REQUIRED]: ({fieldName}: RequiredFieldParams) => `${fieldName} は必須です`, reportContainsExpensesWithViolations: 'レポートに違反のある経費が含まれています。', }, violationDismissal: { @@ -8368,10 +8374,10 @@ ${reportName} email: 'メールアドレス', closeAccount: 'アカウントを閉じる', closeAccountPrompt: '本当によろしいですか?この操作は元に戻せません。', - forceCloseAccount: 'アカウントを強制閉鎖', + forceCloseAccount: 'アカウントを強制的に閉鎖', safeCloseAccount: 'アカウントを安全に閉じる', closeAccountInfo: - '保留中の承認、進行中の払い戻し、代替ログイン方法がない場合を避けるため、安全にアカウントを閉鎖することをおすすめします。
  • 保留中の承認
  • 進行中の払い戻し
  • 代替ログイン方法がない
それ以外の場合は、上記の安全対策を無視して、選択したアカウントを強制的に閉鎖できます。', + '保留中の承認、処理中の精算、代替ログイン方法がない場合などでもアカウントを閉鎖できるように、安全にアカウントを閉鎖することを推奨します:
  • 保留中の承認
  • 進行中の払い戻し
  • 代替ログイン方法なし
それ以外の場合は、上記の安全上の注意を無視して、選択したアカウントを強制的に閉鎖できます。', error: { removeMember: 'このユーザーを削除できません。もう一度お試しください。', addMember: 'このメンバーを追加できませんでした。もう一度お試しください。', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 217ac9ed7bf6..0cce886bd668 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -1270,7 +1270,7 @@ const translations: TranslationDeepObject = { individual: 'Individueel', business: 'Zakelijk', settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} met Expensify` : `Betalen met Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} als individu` : `Betalen met privérekening`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} als individu` : `Betalen met persoonlijke rekening`), settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} met wallet` : `Betalen met wallet`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Betaal ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Betaal ${formattedAmount} als bedrijf` : `Betalen met zakelijke rekening`), @@ -1282,7 +1282,7 @@ const translations: TranslationDeepObject = { policyName, }: SettleExpensifyCardParams & { policyName: string; - }) => (formattedAmount ? `Betaal ${formattedAmount} via ${policyName}` : `Betalen via ${policyName}`), + }) => (formattedAmount ? `Betaal ${formattedAmount} via ${policyName}` : `Betaal via ${policyName}`), businessBankAccount: (amount?: string, last4Digits?: string) => (amount ? `heeft ${amount} betaald met bankrekening ${last4Digits}` : `betaald met bankrekening ${last4Digits}`), automaticallyPaidWithBusinessBankAccount: (amount?: string, last4Digits?: string) => `betaald ${amount ? `${amount} ` : ''} met bankrekening ${last4Digits} via werkruimteregels`, @@ -1291,7 +1291,7 @@ const translations: TranslationDeepObject = { nextStep: 'Volgende stappen', finished: 'Voltooid', flip: 'Omkeren', - sendInvoice: ({amount}: RequestAmountParams) => `Factuur van ${amount} verzenden`, + sendInvoice: ({amount}: RequestAmountParams) => `Verzend factuur van ${amount}`, expenseAmount: (formattedAmount: string, comment?: string) => `${formattedAmount}${comment ? `voor ${comment}` : ''}`, submitted: ({memo}: SubmittedWithMemoParams) => `ingediend${memo ? `, met de omschrijving ${memo}` : ''}`, automaticallySubmitted: `ingediend via uitgestelde indieningen`, @@ -1323,7 +1323,7 @@ const translations: TranslationDeepObject = { canceledRequest: (amount: string, submitterDisplayName: string) => `heeft de betaling van ${amount} geannuleerd, omdat ${submitterDisplayName} hun Expensify Wallet niet binnen 30 dagen heeft geactiveerd`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} heeft een bankrekening toegevoegd. De betaling van ${amount} is gedaan.`, + `${submitterDisplayName} heeft een bankrekening toegevoegd. De betaling van ${amount} is voltooid.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}gemarkeerd als betaald${comment ? `, met de opmerking: "${comment}"` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}betaald met wallet`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1528,7 +1528,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Kies een werkruimte', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `rapport doorgestuurd naar ${to} vanwege aangepaste goedkeuringsworkflow`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `rapport doorgestuurd naar ${to} vanwege aangepast goedkeuringsworkflow`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'uur' : 'uren'} @ ${rate} / uur`, hrs: 'uur', @@ -2032,8 +2032,8 @@ const translations: TranslationDeepObject = { whatIsTwoFactorAuth: 'Tweestapsverificatie (2FA) helpt je account veilig te houden. Bij het inloggen moet je een code invoeren die is gegenereerd door je voorkeursauthenticator-app.', disableTwoFactorAuth: 'Tweefactorauthenticatie uitschakelen', - explainProcessToRemove: 'Voer een geldige code uit je verificatie-app in om twee-factor-authenticatie (2FA) uit te schakelen.', - explainProcessToRemoveWithRecovery: 'Voer een geldige herstelcode in om de dubbele authenticatie (2FA) uit te schakelen.', + explainProcessToRemove: 'Voer een geldige code uit je authenticatie-app in om tweeledige verificatie (2FA) uit te schakelen.', + explainProcessToRemoveWithRecovery: 'Voer een geldige herstelcode in om twee-factor-authenticatie (2FA) uit te schakelen.', disabled: 'Tweeledige verificatie is nu uitgeschakeld', noAuthenticatorApp: 'Je hebt geen authenticator-app meer nodig om in te loggen bij Expensify.', stepCodes: 'Herstelcodes', @@ -4737,7 +4737,9 @@ _Voor meer gedetailleerde instructies, [bezoek onze helpwebsite](${CONST.NETSUIT customSegmentMappingTitle: 'Hoe moet dit aangepaste segment worden weergegeven in Expensify?', customRecordMappingTitle: 'Hoe moet dit aangepaste record in Expensify worden weergegeven?', }, - errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Er bestaat al een aangepast segment/record met deze ${fieldName?.toLowerCase()}`}, + errors: { + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Er bestaat al een aangepast segment/record met deze ${fieldName?.toLowerCase()}`, + }, }, customLists: { title: 'Aangepaste lijsten', @@ -5593,7 +5595,7 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ genericRemove: 'Er is een probleem opgetreden bij het verwijderen van dat werkpleklid', }, addedWithPrimary: 'Sommige leden zijn toegevoegd met hun primaire login.', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Toegevoegd door secundaire login ${secondaryLogin}.`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Toegevoegd door secundair login ${secondaryLogin}.`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `Totaal aantal werkruimteleden: ${count}`, importMembers: 'Leden importeren', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6443,7 +6445,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar }, defaultTaxRate: 'Standaardbelastingtarief', enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => - `Ga naar [Meer functies](${moreFeaturesLink}) en schakel workflows in, voeg vervolgens goedkeuringen toe om deze functie te ontgrendelen.`, + `Ga naar [Meer functies](${moreFeaturesLink}) en schakel workflows in, voeg daarna goedkeuringen toe om deze functie te ontgrendelen.`, }, customRules: { title: 'Declaratiebeleid', @@ -6508,7 +6510,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar public_announceDescription: 'Iedereen kan deze ruimte vinden', createRoom: 'Ruimte maken', roomAlreadyExistsError: 'Er bestaat al een kamer met deze naam', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} is een standaardruimte in alle werkruimten. Kies een andere naam.`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} is een standaardruimte in alle werkruimtes. Kies een andere naam.`, roomNameInvalidError: 'Kamernamen mogen alleen kleine letters, cijfers en koppeltekens bevatten', pleaseEnterRoomName: 'Voer een kamernaam in', pleaseSelectWorkspace: 'Selecteer een werkruimte', @@ -6516,7 +6518,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar const actor = actorName ? `${actorName} ` : ''; return isExpenseReport ? `${actor}hernoemd naar "${newName}" (voorheen "${oldName}")` : `${actor}heeft deze ruimte hernoemd naar "${newName}" (voorheen "${oldName}")`; }, - roomRenamedTo: ({newName}: RoomRenamedToParams) => `Ruimte hernoemd naar ${newName}`, + roomRenamedTo: ({newName}: RoomRenamedToParams) => `Chatruimte hernoemd naar ${newName}`, social: 'sociaal', selectAWorkspace: 'Selecteer een werkruimte', growlMessageOnRenameError: 'Kan de werkruimtekamer niet hernoemen. Controleer je verbinding en probeer het opnieuw.', @@ -7518,7 +7520,11 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar tryDifferentEmail: 'Probeer een ander e-mailadres', }, }, - cardTransactions: {notActivated: 'Niet geactiveerd', outOfPocket: 'Uit eigen zak uitgegeven', companySpend: 'Bedrijfskosten'}, + cardTransactions: { + notActivated: 'Niet geactiveerd', + outOfPocket: 'Uitgaven uit eigen zak', + companySpend: 'Uitgaven van het bedrijf', + }, distance: { addStop: 'Stop toevoegen', address: 'Adres', @@ -7794,7 +7800,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar }, reportViolations: { [CONST.REPORT_VIOLATIONS.FIELD_REQUIRED]: ({fieldName}: RequiredFieldParams) => `${fieldName} is verplicht`, - reportContainsExpensesWithViolations: 'Rapport bevat uitgaven met overtredingen.', + reportContainsExpensesWithViolations: 'Rapport bevat onkosten met overtredingen.', }, violationDismissal: { rter: { @@ -8434,7 +8440,7 @@ Hier is een *proefbon* om je te laten zien hoe het werkt:`, forceCloseAccount: 'Account geforceerd sluiten', safeCloseAccount: 'Account veilig sluiten', closeAccountInfo: - 'We raden aan om de account veilig te sluiten om het afsluiten over te slaan als er:
  • Openstaande goedkeuringen zijn
  • Actieve terugbetalingen zijn
  • Geen alternatieve inlogmethoden zijn
Anders kun je de bovenstaande veiligheidsmaatregelen negeren en de geselecteerde account geforceerd sluiten.', + 'We raden aan om de account veilig te sluiten om te vermijden dat je deze moet sluiten als er zijn:
  • Openstaande goedkeuringen
  • Actieve terugbetalingen
  • Geen alternatieve inlogmethoden
Anders kun je de bovenstaande veiligheidsmaatregelen negeren en de geselecteerde account geforceerd sluiten.', error: { removeMember: 'Kan deze gebruiker niet verwijderen. Probeer het opnieuw.', addMember: 'Kan dit lid niet toevoegen. Probeer het opnieuw.', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 72bb68699e74..b9a975362034 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -1000,7 +1000,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `Napraw połączenie karty firmowej ${feedName}` : 'Napraw połączenie karty firmowej'), subtitle: 'Workspace > Karty firmowe', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Napraw połączenie ${integrationName}`, subtitle: 'Obszar roboczy > Księgowość'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Napraw połączenie ${integrationName}`, subtitle: 'Przestrzeń robocza > Księgowość'}, }, announcements: 'Ogłoszenia', discoverSection: { @@ -1271,10 +1271,10 @@ const translations: TranslationDeepObject = { business: 'Firma', settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} z Expensify` : `Zapłać przez Expensify`), settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} jako osoba prywatna` : `Zapłać z konta osobistego`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} portfelem` : `Zapłać portfelem`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} z portfela` : `Zapłać portfelem`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Zapłać ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Zapłać ${formattedAmount} jako firma` : `Zapłać z konta firmowego`), - payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Oznacz ${formattedAmount} jako zapłacone` : `Oznacz jako opłacone`), + payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Oznacz ${formattedAmount} jako zapłaconą` : `Oznacz jako zapłacone`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `zapłacono ${amount} z konta osobistego ${last4Digits}` : `Zapłacono z konta osobistego`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `zapłacono ${amount} z firmowego konta ${last4Digits}` : `Zapłacono z konta firmowego`), payWithPolicy: ({ @@ -1291,7 +1291,7 @@ const translations: TranslationDeepObject = { nextStep: 'Następne kroki', finished: 'Zakończono', flip: 'Odwróć', - sendInvoice: ({amount}: RequestAmountParams) => `Wyślij fakturę na kwotę ${amount}`, + sendInvoice: ({amount}: RequestAmountParams) => `Wyślij fakturę na ${amount}`, expenseAmount: (formattedAmount: string, comment?: string) => `${formattedAmount}${comment ? `za ${comment}` : ''}`, submitted: ({memo}: SubmittedWithMemoParams) => `przesłano${memo ? `, wpisując ${memo}` : ''}`, automaticallySubmitted: `przesłano przez opóźnianie wysyłania`, @@ -1323,7 +1323,7 @@ const translations: TranslationDeepObject = { canceledRequest: (amount: string, submitterDisplayName: string) => `anulowano płatność ${amount}, ponieważ ${submitterDisplayName} nie aktywował(-a) swojego portfela Expensify w ciągu 30 dni`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} dodał(a) konto bankowe. Płatność w wysokości ${amount} została dokonana.`, + `${submitterDisplayName} dodał konto bankowe. Płatność w wysokości ${amount} została wykonana.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}oznaczone jako opłacone${comment ? `, mówiąc „${comment}”` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}zapłacono z portfela`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1527,7 +1527,7 @@ const translations: TranslationDeepObject = { }, }, chooseWorkspace: 'Wybierz przestrzeń roboczą', - routedDueToDEW: ({to}: RoutedDueToDEWParams) => `raport przekazany do ${to} z powodu niestandardowego procesu akceptacji`, + routedDueToDEW: ({to}: RoutedDueToDEWParams) => `raport skierowano do ${to} z powodu niestandardowego przepływu zatwierdzania`, timeTracking: { hoursAt: (hours: number, rate: string) => `${hours} ${hours === 1 ? 'godzina' : 'godziny'} @ ${rate} / godzinę`, hrs: 'godz.', @@ -2031,7 +2031,7 @@ const translations: TranslationDeepObject = { 'Uwierzytelnianie dwuskładnikowe (2FA) pomaga chronić Twoje konto. Podczas logowania musisz wprowadzić kod wygenerowany przez wybraną przez Ciebie aplikację uwierzytelniającą.', disableTwoFactorAuth: 'Wyłącz uwierzytelnianie dwuskładnikowe', explainProcessToRemove: 'Aby wyłączyć uwierzytelnianie dwuskładnikowe (2FA), wprowadź prawidłowy kod z aplikacji uwierzytelniającej.', - explainProcessToRemoveWithRecovery: 'Aby wyłączyć uwierzytelnianie dwuskładnikowe (2FA), wprowadź ważny kod odzyskiwania.', + explainProcessToRemoveWithRecovery: 'Aby wyłączyć uwierzytelnianie dwuskładnikowe (2FA), wprowadź prawidłowy kod odzyskiwania.', disabled: 'Uwierzytelnianie dwuskładnikowe jest teraz wyłączone', noAuthenticatorApp: 'Nie będziesz już potrzebować aplikacji uwierzytelniającej, aby logować się do Expensify.', stepCodes: 'Kody odzyskiwania', @@ -4655,7 +4655,7 @@ ${ importCustomFields: { chooseOptionBelow: 'Wybierz jedną z poniższych opcji:', label: (importedTypes: string[]) => `Zaimportowano jako ${importedTypes.join('i')}`, - requiredFieldError: ({fieldName}: RequiredFieldParams) => `Wprowadź ${fieldName}`, + requiredFieldError: ({fieldName}: RequiredFieldParams) => `Wpisz proszę ${fieldName}`, customSegments: { title: 'Niestandardowe segmenty/rejestry', addText: 'Dodaj własny segment/rejestr', @@ -4728,7 +4728,9 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy customSegmentMappingTitle: 'Jak ten niestandardowy segment powinien być wyświetlany w Expensify?', customRecordMappingTitle: 'Jak powinien być wyświetlany ten niestandardowy rekord w Expensify?', }, - errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Niestandardowy segment/rejestr z tym ${fieldName?.toLowerCase()} już istnieje`}, + errors: { + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Niestandardowy segment/rekord z tym ${fieldName?.toLowerCase()} już istnieje`, + }, }, customLists: { title: 'Listy niestandardowe', @@ -5582,7 +5584,7 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy genericRemove: 'Wystąpił problem z usunięciem tego członka przestrzeni roboczej', }, addedWithPrimary: 'Niektóre osoby zostały dodane za pomocą swoich głównych loginów.', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Dodano przez dodatkowy login ${secondaryLogin}.`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `Dodane przez dodatkowy login ${secondaryLogin}.`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `Łączna liczba członków przestrzeni roboczej: ${count}`, importMembers: 'Zaimportuj członków', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6497,7 +6499,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i public_announceDescription: 'Każdy może znaleźć ten pokój', createRoom: 'Utwórz pokój', roomAlreadyExistsError: 'Pokój o tej nazwie już istnieje', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} jest domyślnym pokojem we wszystkich przestrzeniach roboczych. Wybierz inną nazwę.`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} to domyślny pokój we wszystkich przestrzeniach roboczych. Wybierz inną nazwę.`, roomNameInvalidError: 'Nazwy pokojów mogą zawierać tylko małe litery, cyfry i łączniki', pleaseEnterRoomName: 'Wprowadź nazwę pokoju', pleaseSelectWorkspace: 'Wybierz przestrzeń roboczą', @@ -6505,7 +6507,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i const actor = actorName ? `${actorName} ` : ''; return isExpenseReport ? `${actor}zmieniono nazwę na „${newName}” (wcześniej „${oldName}”)` : `${actor} zmienił(a) nazwę tego pokoju na „${newName}” (wcześniej „${oldName}”)`; }, - roomRenamedTo: ({newName}: RoomRenamedToParams) => `Pokój przemianowany na ${newName}`, + roomRenamedTo: ({newName}: RoomRenamedToParams) => `Pokój zmieniono na ${newName}`, social: 'społeczny', selectAWorkspace: 'Wybierz przestrzeń roboczą', growlMessageOnRenameError: 'Nie można zmienić nazwy pokoju w przestrzeni roboczej. Sprawdź połączenie i spróbuj ponownie.', @@ -7141,7 +7143,7 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i `Wszystkie ${cardFeedBankName}${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `Wszystkie zaimportowane karty CSV${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, }, - reportField: ({name, value}: OptionalParam) => `${name} jest ${value}`, + reportField: ({name, value}: OptionalParam) => `${name} to ${value}`, current: 'Bieżące', past: 'Przeszłe', submitted: 'Przesłano', @@ -7499,7 +7501,11 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i tryDifferentEmail: 'Spróbuj użyć innego adresu e-mail', }, }, - cardTransactions: {notActivated: 'Nieaktywne', outOfPocket: 'Wydatki z własnej kieszeni', companySpend: 'Wydatki firmowe'}, + cardTransactions: { + notActivated: 'Nieaktywne', + outOfPocket: 'Wydatki z własnej kieszeni', + companySpend: 'Wydatki firmowe', + }, distance: { addStop: 'Dodaj przystanek', address: 'Adres', @@ -8411,9 +8417,9 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`, closeAccount: 'Zamknij konto', closeAccountPrompt: 'Czy na pewno? Ta czynność jest nieodwracalna.', forceCloseAccount: 'Wymuś zamknięcie konta', - safeCloseAccount: 'Bezpiecznie zamknij konto', + safeCloseAccount: 'Zamknij konto bezpiecznie', closeAccountInfo: - 'Zalecamy bezpieczne zamknięcie konta, aby pominąć zamykanie go w przypadku, gdy występują:
  • Oczekujące zatwierdzenia
  • Aktywne zwroty kosztów
  • Brak alternatywnych metod logowania
W przeciwnym razie możesz zignorować powyższe środki ostrożności i wymusić zamknięcie wybranego konta.', + 'Zalecamy bezpieczne zamknięcie konta, aby pominąć jego zamykanie w przypadku, gdy występują:
  • Oczekujące zatwierdzenia
  • Aktywne zwroty kosztów
  • Brak alternatywnych metod logowania
W przeciwnym razie możesz zignorować powyższe środki ostrożności i wymusić zamknięcie wybranego konta.', error: { removeMember: 'Nie można usunąć tego użytkownika. Spróbuj ponownie.', addMember: 'Nie można dodać tego członka. Spróbuj ponownie.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 87b288aa3a9e..ecc1ba8b8af3 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -998,7 +998,7 @@ const translations: TranslationDeepObject = { title: ({feedName}: {feedName: string}) => (feedName ? `Corrigir conexão do cartão corporativo ${feedName}` : 'Corrigir conexão do cartão corporativo'), subtitle: 'Área de trabalho > Cartões corporativos', }, - fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Corrigir conexão com ${integrationName}`, subtitle: 'Workspace > Contabilidade'}, + fixAccountingConnection: {title: ({integrationName}: {integrationName: string}) => `Corrigir conexão com ${integrationName}`, subtitle: 'Espaço de trabalho > Contabilidade'}, }, announcements: 'Comunicados', discoverSection: { @@ -1268,9 +1268,9 @@ const translations: TranslationDeepObject = { settledElsewhere: 'Pago em outro lugar', individual: 'Individual', business: 'Negócios', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pague ${formattedAmount} com o Expensify` : `Pague com Expensify`), - settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pague ${formattedAmount} como pessoa física` : `Pagar com conta pessoal`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} com carteira` : `Pagar com carteira`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} com o Expensify` : `Pagar com Expensify`), + settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} como pessoa física` : `Pagar com conta pessoal`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} com a carteira` : `Pagar com carteira`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `Pagar ${formattedAmount}`, settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Pagar ${formattedAmount} como empresa` : `Pagar com conta empresarial`), payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `Marcar ${formattedAmount} como pago` : `Marcar como pago`), @@ -1321,7 +1321,7 @@ const translations: TranslationDeepObject = { adminCanceledRequest: 'cancelou o pagamento', canceledRequest: (amount: string, submitterDisplayName: string) => `cancelou o pagamento de ${amount} porque ${submitterDisplayName} não ativou a Carteira Expensify em 30 dias`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => - `${submitterDisplayName} adicionou uma conta bancária. O pagamento de ${amount} foi realizado.`, + `${submitterDisplayName} adicionou uma conta bancária. O pagamento de ${amount} foi efetuado.`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}marcou como pago${comment ? `, dizendo "${comment}"` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}pago com carteira`, automaticallyPaidWithExpensify: (payer?: string) => @@ -1329,7 +1329,7 @@ const translations: TranslationDeepObject = { noReimbursableExpenses: 'Este relatório tem um valor inválido', pendingConversionMessage: 'O total será atualizado quando você voltar a ficar online', changedTheExpense: 'alterou a despesa', - setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `o ${valueName} para ${newValueToDisplay}`, + setTheRequest: ({valueName, newValueToDisplay}: SetTheRequestParams) => `o(a) ${valueName} para ${newValueToDisplay}`, setTheDistanceMerchant: ({translatedChangedField, newMerchant, newAmountToDisplay}: SetTheDistanceMerchantParams) => `definiu ${translatedChangedField} como ${newMerchant}, o que definiu o valor como ${newAmountToDisplay}`, removedTheRequest: (valueName: string, oldValueToDisplay: string) => `o ${valueName} (antes ${oldValueToDisplay})`, @@ -2028,7 +2028,7 @@ const translations: TranslationDeepObject = { whatIsTwoFactorAuth: 'A autenticação em duas etapas (2FA) ajuda a manter sua conta segura. Ao fazer login, você precisará inserir um código gerado pelo seu aplicativo autenticador preferido.', disableTwoFactorAuth: 'Desativar autenticação em duas etapas', - explainProcessToRemove: 'Para desativar a autenticação em duas etapas (2FA), insira um código válido do seu app de autenticação.', + explainProcessToRemove: 'Para desativar a autenticação de dois fatores (2FA), insira um código válido do seu app de autenticação.', explainProcessToRemoveWithRecovery: 'Para desativar a autenticação de dois fatores (2FA), insira um código de recuperação válido.', disabled: 'A autenticação em duas etapas está desativada agora', noAuthenticatorApp: 'Você não vai mais precisar de um app autenticador para entrar no Expensify.', @@ -4729,7 +4729,9 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS customSegmentMappingTitle: 'Como esse segmento personalizado deve ser exibido no Expensify?', customRecordMappingTitle: 'Como este registro personalizado deve ser exibido no Expensify?', }, - errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Um segmento/registro personalizado com este ${fieldName?.toLowerCase()} já existe`}, + errors: { + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `Já existe um segmento/registro personalizado com este ${fieldName?.toLowerCase()}`, + }, }, customLists: { title: 'Listas personalizadas', @@ -7503,7 +7505,11 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e tryDifferentEmail: 'Tente outro e-mail', }, }, - cardTransactions: {notActivated: 'Não ativado', outOfPocket: 'Gastos reembolsáveis', companySpend: 'Gastos da empresa'}, + cardTransactions: { + notActivated: 'Não ativado', + outOfPocket: 'Gasto presencial', + companySpend: 'Gastos da empresa', + }, distance: { addStop: 'Adicionar parada', address: 'Endereço', @@ -8415,10 +8421,10 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`, email: 'Endereço de e-mail', closeAccount: 'Encerrar conta', closeAccountPrompt: 'Tem certeza? Esta ação é permanente.', - forceCloseAccount: 'Encerrar conta à força', + forceCloseAccount: 'Forçar encerramento da conta', safeCloseAccount: 'Fechar conta com segurança', closeAccountInfo: - 'Recomendamos fechar a conta com segurança para evitar problemas caso haja:
  • Aprovações pendentes
  • Reembolsos ativos
  • Nenhum método de login alternativo
Caso contrário, você pode ignorar as precauções de segurança acima e forçar o fechamento da conta selecionada.', + 'Recomendamos fechar a conta com segurança para evitar o fechamento caso haja:
  • aprovações pendentes
  • reembolsos ativos
  • nenhum método de login alternativo
Caso contrário, você pode ignorar as precauções de segurança acima e forçar o fechamento da conta selecionada.', error: { removeMember: 'Não foi possível remover este usuário. Tente novamente.', addMember: 'Não foi possível adicionar este membro. Tente novamente.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index d7e85619286b..9bd05f1de0db 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -1246,11 +1246,11 @@ const translations: TranslationDeepObject = { settledElsewhere: '在其他地方支付', individual: '个人', business: '商务', - settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `使用 Expensify 支付 ${formattedAmount}` : `使用 Expensify 支付`), + settleExpensify: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `使用 Expensify 支付 ${formattedAmount}` : `使用 Expensify 付款`), settlePersonal: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `以个人身份支付 ${formattedAmount}` : `使用个人账户付款`), - settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `使用钱包支付 ${formattedAmount}` : `使用钱包支付`), + settleWallet: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `用钱包支付 ${formattedAmount}` : `使用钱包支付`), settlePayment: ({formattedAmount}: SettleExpensifyCardParams) => `支付 ${formattedAmount}`, - settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `以公司身份支付 ${formattedAmount}` : `使用企业账户支付`), + settleBusiness: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `以企业身份支付 ${formattedAmount}` : `使用公司账户付款`), payElsewhere: ({formattedAmount}: SettleExpensifyCardParams) => (formattedAmount ? `将 ${formattedAmount} 标记为已支付` : `标记为已支付`), settleInvoicePersonal: (amount?: string, last4Digits?: string) => (amount ? `使用个人账户 ${last4Digits} 支付了 ${amount}` : `使用个人账户支付`), settleInvoiceBusiness: (amount?: string, last4Digits?: string) => (amount ? `已使用商务账户 ${last4Digits} 支付 ${amount}` : `使用公司账户支付`), @@ -1298,7 +1298,7 @@ const translations: TranslationDeepObject = { waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `已开始付款,但正在等待${submitterDisplayName}添加银行账户。`, adminCanceledRequest: '已取消付款', canceledRequest: (amount: string, submitterDisplayName: string) => `已取消金额为 ${amount} 的付款,因为 ${submitterDisplayName} 未在 30 天内启用其 Expensify 钱包`, - settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => `${submitterDisplayName} 添加了一个银行账户。已完成 ${amount} 付款。`, + settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => `${submitterDisplayName} 已添加了一个银行账户。已完成 ${amount} 付款。`, paidElsewhere: ({payer, comment}: PaidElsewhereParams = {}) => `${payer ? `${payer} ` : ''}标记为已支付${comment ? `,内容为“${comment}”` : ''}`, paidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}用钱包支付`, automaticallyPaidWithExpensify: (payer?: string) => `${payer ? `${payer} ` : ''}已通过工作区规则使用 Expensify 支付`, @@ -1998,8 +1998,8 @@ const translations: TranslationDeepObject = { twoFactorAuthEnabled: '已启用双重身份验证', whatIsTwoFactorAuth: '双重身份验证(2FA)有助于保护您的账户安全。登录时,您需要输入由首选身份验证应用生成的验证码。', disableTwoFactorAuth: '禁用双重身份验证', - explainProcessToRemove: '若要停用双重身份验证(2FA),请输入来自您身份验证应用中的有效验证码。', - explainProcessToRemoveWithRecovery: '若要禁用双重身份验证(2FA),请输入有效的恢复代码。', + explainProcessToRemove: '若要禁用双重身份验证 (2FA),请在验证器应用中输入有效验证码。', + explainProcessToRemoveWithRecovery: '若要停用双重身份验证(2FA),请输入有效的恢复代码。', disabled: '已关闭双重身份验证', noAuthenticatorApp: '你今后登录 Expensify 时将不再需要验证器应用程序。', stepCodes: '恢复代码', @@ -2485,7 +2485,7 @@ ${amount},商户:${merchant} - 日期:${date}`, }, }, reportDetailsPage: { - inWorkspace: ({policyName}: ReportPolicyNameParams) => `在${policyName} 中`, + inWorkspace: ({policyName}: ReportPolicyNameParams) => `在 ${policyName} 中`, generatingPDF: '生成 PDF', waitForPDF: '正在生成 PDF,请稍候。', errorPDF: '尝试生成您的 PDF 时出错', @@ -4645,7 +4645,9 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM customSegmentMappingTitle: '此自定义分段在 Expensify 中应如何显示?', customRecordMappingTitle: '此自定义记录应在 Expensify 中如何显示?', }, - errors: {uniqueFieldError: ({fieldName}: RequiredFieldParams) => `已存在使用此 ${fieldName?.toLowerCase()} 的自定义分段/记录`}, + errors: { + uniqueFieldError: ({fieldName}: RequiredFieldParams) => `已存在使用此 ${fieldName?.toLowerCase()} 的自定义分段/记录`, + }, }, customLists: { title: '自定义列表', @@ -4907,7 +4909,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM limit: '限额', currentBalance: '当前余额', currentBalanceDescription: '当前余额是自上次结算日期以来所有已入账 Expensify Card 交易的总和。', - balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `余额将在 ${settlementDate} 结清`, + balanceWillBeSettledOn: ({settlementDate}: SettlementDateParams) => `余额将于 ${settlementDate} 结清`, settleBalance: '结清余额', cardLimit: '卡片限额', remainingLimit: '剩余额度', @@ -5486,7 +5488,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM genericRemove: '移除该工作区成员时出现问题', }, addedWithPrimary: '某些成员已通过其主登录名添加。', - invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `由辅助登录账号 ${secondaryLogin} 添加。`, + invitedBySecondaryLogin: ({secondaryLogin}: SecondaryLoginParams) => `由次要登录账号 ${secondaryLogin} 添加。`, workspaceMembersCount: ({count}: WorkspaceMembersCountParams) => `工作区成员总数:${count}`, importMembers: '导入成员', removeMemberPromptApprover: ({approver, workspaceOwner}: {approver: string; workspaceOwner: string}) => @@ -6309,7 +6311,7 @@ ${reportName} always: '始终要求明细收据', }, defaultTaxRate: '默认税率', - enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => `前往 [更多功能](${moreFeaturesLink}) 并启用工作流程,然后添加审批以解锁此功能。`, + enableWorkflows: ({moreFeaturesLink}: RulesEnableWorkflowsParams) => `前往 [更多功能](${moreFeaturesLink}) 并启用工作流,然后添加审批以解锁此功能。`, }, customRules: { title: '报销政策', @@ -6374,7 +6376,7 @@ ${reportName} public_announceDescription: '任何人都可以找到此房间', createRoom: '创建聊天室', roomAlreadyExistsError: '已存在同名房间', - roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} 是所有工作区中的默认聊天室名称。请选择另一个名称。`, + roomNameReservedError: ({reservedName}: RoomNameReservedErrorParams) => `${reservedName} 是所有工作区中的默认聊天室名称。请选择其他名称。`, roomNameInvalidError: '房间名称只能包含小写字母、数字和连字符', pleaseEnterRoomName: '请输入房间名称', pleaseSelectWorkspace: '请选择一个工作区', @@ -7000,7 +7002,7 @@ ${reportName} `所有 ${cardFeedBankName}${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, cardFeedNameCSV: ({cardFeedLabel}: {cardFeedLabel?: string}) => `所有导入的 CSV 卡片${cardFeedLabel ? ` - ${cardFeedLabel}` : ''}`, }, - reportField: ({name, value}: OptionalParam) => `${name} 是 ${value}`, + reportField: ({name, value}: OptionalParam) => `${name} 为 ${value}`, current: '当前', past: '过去', submitted: '已提交', @@ -7351,7 +7353,11 @@ ${reportName} tryDifferentEmail: '请尝试使用其他邮箱', }, }, - cardTransactions: {notActivated: '未启用', outOfPocket: '自付支出', companySpend: '公司支出'}, + cardTransactions: { + notActivated: '未启用', + outOfPocket: '个人垫付支出', + companySpend: '公司支出', + }, distance: { addStop: '添加站点', address: '地址', @@ -8245,7 +8251,7 @@ ${reportName} forceCloseAccount: '强制关闭账户', safeCloseAccount: '安全关闭账户', closeAccountInfo: - '我们建议安全关闭账户,以免在以下情况下无法关闭:
  • 有待处理的审批
  • 有正在进行的报销
  • 没有其他登录方式
否则,你可以忽略以上安全防范措施并强制关闭所选账户。', + '我们建议安全地关闭该账户,以便在存在以下情况时跳过关闭操作:
  • 待处理的审批
  • 正在进行的报销
  • 没有其他登录方式
否则,您可以忽略上述安全预防措施并强制关闭所选账户。', error: { removeMember: '无法移除此用户。请重试。', addMember: '无法添加此成员。请重试。', From 39366df0c6338fc5b5965ac58f355de1018ad247 Mon Sep 17 00:00:00 2001 From: Shridhar Goel <35566748+ShridharGoel@users.noreply.github.com> Date: Fri, 13 Feb 2026 17:05:33 +0530 Subject: [PATCH 10/10] Update CardUtilsTest.ts --- tests/unit/CardUtilsTest.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/unit/CardUtilsTest.ts b/tests/unit/CardUtilsTest.ts index 07b4fc80b042..bf2fd4927853 100644 --- a/tests/unit/CardUtilsTest.ts +++ b/tests/unit/CardUtilsTest.ts @@ -1887,7 +1887,7 @@ describe('CardUtils', () => { nameValuePairs: { frozen: true, }, - } as Card; + } as unknown as Card; expect(isCardFrozen(card)).toBe(true); }); @@ -1895,7 +1895,7 @@ describe('CardUtils', () => { const card = { state: CONST.EXPENSIFY_CARD.STATE.STATE_SUSPENDED, nameValuePairs: {}, - } as Card; + } as unknown as Card; expect(isCardFrozen(card)).toBe(false); }); @@ -1905,7 +1905,7 @@ describe('CardUtils', () => { nameValuePairs: { frozen: true, }, - } as Card; + } as unknown as Card; expect(isCardFrozen(card)).toBe(false); }); @@ -1917,7 +1917,7 @@ describe('CardUtils', () => { const card = { state: CONST.EXPENSIFY_CARD.STATE.OPEN, nameValuePairs: {}, - } as Card; + } as unknown as Card; expect(isCardFrozen(card)).toBe(false); }); });