diff --git a/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx b/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx
index 05d0909d709d3..8d4e7df8c0458 100644
--- a/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx
+++ b/src/components/MultifactorAuthentication/components/AuthenticationMethodDescription.tsx
@@ -26,7 +26,7 @@ function AuthenticationMethodDescription() {
const authType = translate(AUTH_TYPE_TRANSLATION_KEY[authenticationMethod?.name ?? SECURE_STORE_VALUES.AUTH_TYPE.UNKNOWN.NAME]);
- return {translate('multifactorAuthentication.biometricsTest.successfullyAuthenticatedUsing', {authType})};
+ return {translate('multifactorAuthentication.biometricsTest.successfullyAuthenticatedUsing', authType)};
}
AuthenticationMethodDescription.displayName = 'AuthenticationMethodDescription';
diff --git a/src/languages/de.ts b/src/languages/de.ts
index bba57482d7017..cf3b26ee2408a 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -11,6 +11,7 @@
*/
import {CONST as COMMON_CONST} from 'expensify-common';
import startCase from 'lodash/startCase';
+import type {ValueOf} from 'type-fest';
import type {OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
import StringUtils from '@libs/StringUtils';
import dedent from '@libs/StringUtils/dedent';
@@ -40,14 +41,11 @@ import type {
MarkReimbursedFromIntegrationParams,
MissingPropertyParams,
MovedFromPersonalSpaceParams,
- MultifactorAuthenticationTranslationParams,
- NextStepParams,
NotAllowedExtensionParams,
OptionalParam,
PaidElsewhereParams,
ParentNavigationSummaryParams,
RemovedFromApprovalWorkflowParams,
- RemovedPolicyCustomUnitSubRateParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams,
ReportArchiveReasonsMergedParams,
@@ -60,43 +58,20 @@ import type {
UnshareParams,
UpdatedBudgetParams,
UpdatedPolicyApprovalRuleParams,
- UpdatedPolicyBudgetNotificationParams,
UpdatedPolicyCategoryMaxAmountNoReceiptParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyCustomTaxNameParams,
- UpdatedPolicyCustomUnitSubRateParams,
- UpdatedPolicyDefaultTitleParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
UpdatedPolicyManualApprovalThresholdParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyReimburserParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTimeRateParams,
UpdatedTheDistanceMerchantParams,
UpdatedTheRequestParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdateRoleParams,
- UpgradeSuccessMessageParams,
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsProhibitedExpenseParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
WorkspaceLockedPlanTypeParams,
- WorkspaceMemberList,
- WorkspaceYouMayJoin,
YourPlanPriceParams,
} from './params';
import type {TranslationDeepObject} from './types';
@@ -652,8 +627,8 @@ const translations: TranslationDeepObject = {
biometricsTest: {
biometricsTest: 'Biometrie-Test',
authenticationSuccessful: 'Authentifizierung erfolgreich',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `Sie haben sich erfolgreich mit ${authType} authentifiziert.`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `Biometrische Daten (${status})`,
+ successfullyAuthenticatedUsing: (authType?: string) => `Sie haben sich erfolgreich mit ${authType} authentifiziert.`,
+ troubleshootBiometricsStatus: ({status}: {status?: string}) => `Biometrische Daten (${status})`,
yourAttemptWasUnsuccessful: 'Dein Authentifizierungsversuch war nicht erfolgreich.',
youCouldNotBeAuthenticated: 'Du konntest nicht authentifiziert werden',
areYouSureToReject: 'Sind Sie sicher? Der Authentifizierungsversuch wird abgelehnt, wenn Sie diesen Bildschirm schließen.',
@@ -704,7 +679,7 @@ const translations: TranslationDeepObject = {
confirmationPromptAll: 'Sind Sie sicher? Sie benötigen einen Magic Code für die nächste Verifizierung auf jedem Gerät.',
ctaAll: 'Alle widerrufen',
thisDevice: 'Dieses Gerät',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['Eins', 'Zwei', 'Drei', 'Vier', 'Fünf', 'Sechs', 'Sieben', 'Acht', 'Neun'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `${displayCount} weitere ${otherDeviceCount === 1 ? 'Gerät' : 'Geräte'}`;
@@ -1665,8 +1640,15 @@ const translations: TranslationDeepObject = {
backdropLabel: 'Modal-Hintergrund',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten darauf, dass du Ausgaben hinzufügst.`;
@@ -1676,7 +1658,13 @@ const translations: TranslationDeepObject = {
return `Warten auf eine*n Admin, der Ausgaben hinzufügt.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte darauf, dass du Spesen einreichst.`;
@@ -1686,8 +1674,19 @@ const translations: TranslationDeepObject = {
return `Warten darauf, dass ein Admin Spesen einreicht.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `Keine weiteren Schritte erforderlich!`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => `Keine weiteren Schritte erforderlich!`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten darauf, dass du ein Bankkonto hinzufügst.`;
@@ -1697,11 +1696,17 @@ const translations: TranslationDeepObject = {
return `Warten auf eine:n Admin, um ein Bankkonto hinzuzufügen.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` am ${eta}. eines jeden Monats` : ` ${eta}`;
}
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte, bis deine Ausgaben automatisch eingereicht werden${formattedETA}.`;
@@ -1711,7 +1716,13 @@ const translations: TranslationDeepObject = {
return `Warten, bis die Spesen eines Admins automatisch eingereicht werden${formattedETA}.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten auf dich, um die Probleme zu beheben.`;
@@ -1721,7 +1732,13 @@ const translations: TranslationDeepObject = {
return `Warten auf eine*n Admin, um die Probleme zu beheben.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte darauf, dass du Spesen genehmigst.`;
@@ -1731,7 +1748,13 @@ const translations: TranslationDeepObject = {
return `Warte darauf, dass eine Admin-Person Spesen genehmigt.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte darauf, dass du diesen Bericht exportierst.`;
@@ -1741,7 +1764,13 @@ const translations: TranslationDeepObject = {
return `Warten auf eine*n Admin, um diesen Bericht zu exportieren.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warte auf dich, um Spesen zu bezahlen.`;
@@ -1751,7 +1780,13 @@ const translations: TranslationDeepObject = {
return `Warten darauf, dass ein Admin Spesen bezahlt.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Warten darauf, dass du die Einrichtung eines Geschäftskontos abschließt.`;
@@ -1761,16 +1796,27 @@ const translations: TranslationDeepObject = {
return `Warten, bis ein Admin die Einrichtung eines Geschäftskontos abgeschlossen hat.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: (
+ _actor: string,
+ _actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` bis ${eta}` : ` ${eta}`;
}
return `Warte, bis die Zahlung abgeschlossen ist${formattedETA}.`;
},
- [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_: NextStepParams) =>
+ [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) =>
`Ups! Sie scheinen diesen Bericht an sich selbst einzureichen. Die Genehmigung eigener Berichte ist in Ihrem Arbeitsbereich verboten. Bitte reichen Sie diesen Bericht bei einer anderen Person ein oder wenden Sie sich an Ihre Admin, um die empfangende Person zu ändern.`,
},
+ /* eslint-enable @typescript-eslint/no-unused-vars */
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'in Kürze',
[CONST.NEXT_STEP.ETA_KEY.TODAY]: 'heute später',
@@ -2708,11 +2754,11 @@ ${amount} für ${merchant} – ${date}`,
getStarted: 'Loslegen',
whatsYourName: 'Wie heißt du?',
peopleYouMayKnow: 'Personen, die du vielleicht kennst, sind bereits hier! Bestätige deine E-Mail-Adresse, um dich ihnen anzuschließen.',
- workspaceYouMayJoin: ({domain, email}: WorkspaceYouMayJoin) =>
+ workspaceYouMayJoin: (domain: string, email: string) =>
`Jemand von ${domain} hat bereits einen Workspace erstellt. Bitte gib den magischen Code ein, der an ${email} gesendet wurde.`,
joinAWorkspace: 'Einem Arbeitsbereich beitreten',
listOfWorkspaces: 'Hier ist die Liste der Arbeitsbereiche, denen du beitreten kannst. Keine Sorge, du kannst ihnen auch später jederzeit beitreten, wenn du möchtest.',
- workspaceMemberList: ({employeeCount, policyOwner}: WorkspaceMemberList) => `${employeeCount} Mitglied${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
+ workspaceMemberList: (employeeCount: number, policyOwner: string) => `${employeeCount} Mitglied${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
whereYouWork: 'Wo arbeitest du?',
errorSelection: 'Wähle eine Option, um fortzufahren',
purpose: {
@@ -3086,8 +3132,7 @@ ${
},
resendValidationForm: {
linkHasBeenResent: 'Link wurde erneut gesendet',
- weSentYouMagicSignInLink: ({login, loginType}: WeSentYouMagicSignInLinkParams) =>
- `Ich habe einen magischen Anmeldelink an ${login} gesendet. Bitte überprüfe dein ${loginType}, um dich anzumelden.`,
+ weSentYouMagicSignInLink: (login: string, loginType: string) => `Ich habe einen magischen Anmeldelink an ${login} gesendet. Bitte überprüfe dein ${loginType}, um dich anzumelden.`,
resendLink: 'Link erneut senden',
},
unlinkLoginForm: {
@@ -6383,7 +6428,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
upgradeToUnlock: 'Diese Funktion freischalten',
completed: {
headline: `Du hast deinen Arbeitsbereich aktualisiert!`,
- successMessage: ({policyName, subscriptionLink}: UpgradeSuccessMessageParams) =>
+ successMessage: (policyName: string, subscriptionLink: string) =>
`Du hast ${policyName} erfolgreich auf den Control-Tarif hochgestuft! Abonnement ansehen für mehr Details.`,
categorizeMessage: `Du hast erfolgreich auf den Collect‑Tarif upgegradet. Jetzt kannst du deine Ausgaben kategorisieren!`,
travelMessage: `Du hast erfolgreich auf den Collect‑Tarif upgegradet. Jetzt kannst du mit dem Buchen und Verwalten von Reisen beginnen!`,
@@ -6781,13 +6826,13 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
: `hat den Hinweis zur Beschreibung der Kategorie „${categoryName}“ in „${newValue}“ geändert (zuvor „${oldValue}“)`;
},
updateTagListName: (oldName: string, newName: string) => `hat den Schlagwortlistennamen in „${newName}“ geändert (zuvor „${oldName}“)`,
- addTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `den Tag „${tagName}“ zur Liste „${tagListName}“ hinzugefügt`,
- updateTagName: ({tagListName, newName, oldName}: UpdatedPolicyTagNameParams) =>
+ addTag: (tagListName: string, tagName?: string) => `den Tag „${tagName}“ zur Liste „${tagListName}“ hinzugefügt`,
+ updateTagName: (tagListName: string, newName: string, oldName: string) =>
`hat die Tag-Liste „${tagListName}“ aktualisiert, indem der Tag „${oldName}“ in „${newName}“ geändert wurde`,
- updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? 'aktiviert' : 'deaktiviert'} das Tag „${tagName}“ in der Liste „${tagListName}“`,
- deleteTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `hat das Tag „${tagName}“ aus der Liste „${tagListName}“ entfernt`,
- deleteMultipleTags: ({count, tagListName}: UpdatedPolicyTagParams) => `„${count}“ Tags aus der Liste „${tagListName}“ entfernt`,
- updateTag: ({tagListName, newValue, tagName, updatedField, oldValue}: UpdatedPolicyTagFieldParams) => {
+ updateTagEnabled: (tagListName: string, tagName?: string, enabled?: boolean) => `${enabled ? 'aktiviert' : 'deaktiviert'} das Tag „${tagName}“ in der Liste „${tagListName}“`,
+ deleteTag: (tagListName: string, tagName?: string) => `hat das Tag „${tagName}“ aus der Liste „${tagListName}“ entfernt`,
+ deleteMultipleTags: (count?: string, tagListName?: string) => `„${count}“ Tags aus der Liste „${tagListName}“ entfernt`,
+ updateTag: (tagListName: string, newValue: string, tagName: string, updatedField: string, oldValue?: string) => {
if (oldValue) {
return `hat das Tag „${tagName}“ in der Liste „${tagListName}“ aktualisiert, indem das Feld ${updatedField} auf „${newValue}“ geändert wurde (zuvor „${oldValue}“)`;
}
@@ -6816,8 +6861,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
},
deleteCustomUnitRate: ({customUnitName, rateName}: AddOrDeletePolicyCustomUnitRateParams) => `hat den „${customUnitName}“-Satz „${rateName}“ entfernt`,
addedReportField: ({fieldType, fieldName}: AddedOrDeletedPolicyReportFieldParams) => `${fieldType}-Berichtsfenster „${fieldName}“ hinzugefügt`,
- updateReportFieldDefaultValue: ({defaultValue, fieldName}: UpdatedPolicyReportFieldDefaultValueParams) =>
- `Standardwert des Berichtsfeldes „${fieldName}“ auf „${defaultValue}“ festlegen`,
+ updateReportFieldDefaultValue: (defaultValue?: string, fieldName?: string) => `Standardwert des Berichtsfeldes „${fieldName}“ auf „${defaultValue}“ festlegen`,
addedReportFieldOption: (fieldName: string, optionName: string) => `die Option „${optionName}“ zum Berichtsfeld „${fieldName}“ hinzugefügt`,
removedReportFieldOption: (fieldName: string, optionName: string) => `hat die Option „${optionName}“ aus dem Berichtsfeld „${fieldName}“ entfernt`,
updateReportFieldOptionDisabled: (fieldName: string, optionName: string, optionEnabled: boolean) =>
@@ -6829,7 +6873,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
return `${allEnabled ? 'aktiviert' : 'deaktiviert'} die Option „${optionName}“ für das Berichtsfeld „${fieldName}“, wodurch alle Optionen ${allEnabled ? 'aktiviert' : 'deaktiviert'}`;
},
deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `${fieldType}-Berichts-Feld „${fieldName}“ entfernt`,
- preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) =>
+ preventSelfApproval: (oldValue: string, newValue: string) =>
`aktualisierte „Selbstgenehmigung verhindern“ auf „${newValue === 'true' ? 'Aktiviert' : 'Deaktiviert'}“ (zuvor „${oldValue === 'true' ? 'Aktiviert' : 'Deaktiviert'}“)`,
updateMonthlyOffset: (oldValue: string, newValue: string) => {
if (!oldValue) {
@@ -6970,7 +7014,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
oldValue ? `hat den Firmennamen der Rechnung in „${newValue}“ geändert (zuvor „${oldValue}“)` : `setze den Rechnungsfirmennamen auf „${newValue}“`,
changedInvoiceCompanyWebsite: ({newValue, oldValue}: {newValue: string; oldValue?: string}) =>
oldValue ? `hat die Unternehmenswebsite der Rechnung in „${newValue}“ geändert (zuvor „${oldValue}“)` : `Rechnungsunternehmens-Website auf „${newValue}“ festlegen`,
- changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) =>
+ changedReimburser: (newReimburser: string, previousReimburser?: string) =>
previousReimburser
? `hat die/den autorisierte:n Zahler:in in „${newReimburser}“ geändert (zuvor „${previousReimburser}“)`
: `den/die autorisierte/n Zahler/in in „${newReimburser}“ geändert`,
@@ -6979,9 +7023,9 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
updateCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyCurrencyDefaultTaxParams) => `Standard-Steuerbetrag der Workspace-Währung auf „${newName}" geändert (zuvor „${oldName}")`,
updateForeignCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyForeignCurrencyDefaultTaxParams) =>
`den Standardsteuersatz für Fremdwährungen in „${newName}" geändert (zuvor „${oldName}")`,
- addTax: ({taxName}: UpdatedPolicyTaxParams) => `die Steuer „${taxName}" hinzugefügt`,
- deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `hat die Steuer „${taxName}“ entfernt`,
- updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => {
+ addTax: (taxName: string) => `die Steuer „${taxName}" hinzugefügt`,
+ deleteTax: (taxName: string) => `hat die Steuer „${taxName}“ entfernt`,
+ updateTax: (oldValue?: string | boolean | number, taxName?: string, updatedField?: string, newValue?: string | boolean | number) => {
if (!updatedField) {
return '';
}
@@ -7013,16 +7057,15 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
changedMaxExpenseAge: (oldValue: string, newValue: string) => `maximales Ausgabenalter auf „${newValue}“ Tage geändert (zuvor „${oldValue}“)`,
updateCategories: (count: number) => `${count} Kategorien aktualisiert`,
updateTagList: (tagListName: string) => `Tags in der Liste „${tagListName}“ aktualisiert`,
- updateTagListRequired: ({tagListsName, isRequired}: UpdatedPolicyTagListRequiredParams) =>
- `Tag-Liste „${tagListsName}“ in ${isRequired ? 'erforderlich' : 'nicht erforderlich'} geändert`,
+ updateTagListRequired: (tagListsName: string, isRequired: boolean) => `Tag-Liste „${tagListsName}“ in ${isRequired ? 'erforderlich' : 'nicht erforderlich'} geändert`,
importTags: 'Tags aus einer Tabelle importiert',
deletedAllTags: 'alle Tags gelöscht',
updateCustomUnitDefaultCategory: ({customUnitName, newValue, oldValue}: UpdatePolicyCustomUnitDefaultCategoryParams) =>
`hat die Standardkategorie für ${customUnitName} in „${newValue}“ geändert ${oldValue ? `(zuvor „${oldValue}“)` : ''}`,
importCustomUnitRates: (customUnitName: string) => `importierte Preise für benutzerdefinierte Einheit „${customUnitName}“`,
- updateCustomUnitSubRate: ({customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField}: UpdatedPolicyCustomUnitSubRateParams) =>
+ updateCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, customUnitSubRateName: string, oldValue: string, newValue: string, updatedField: string) =>
`hat Tarif „${customUnitName}“ mit Satz „${customUnitRateName}“ und Untersatz „${customUnitSubRateName}“ ${updatedField} auf „${newValue}“ geändert (zuvor „${oldValue}“)`,
- removedCustomUnitSubRate: ({customUnitName, customUnitRateName, removedSubRateName}: RemovedPolicyCustomUnitSubRateParams) =>
+ removedCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, removedSubRateName: string) =>
`entfernte „${customUnitName}“-Rate „${customUnitRateName}“ Unterrate „${removedSubRateName}“`,
addBudget: ({frequency, entityName, entityType, shared, individual, notificationThreshold}: AddBudgetParams) => {
const thresholdSuffix = typeof notificationThreshold === 'number' ? `mit Benachrichtigungsschwelle von „${notificationThreshold}%“` : '';
@@ -7096,18 +7139,16 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
updatedTimeEnabled: (enabled?: boolean) => {
return `${enabled ? 'aktiviert' : 'deaktiviert'} Zeiterfassung`;
},
- updatedTimeRate: ({newRate, oldRate}: UpdatedPolicyTimeRateParams) => {
+ updatedTimeRate: (newRate?: string, oldRate?: string) => {
return `Stundensatz auf „${newRate}“ geändert (zuvor „${oldRate}“)`;
},
addedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `„${prohibitedExpense}“ zu verbotenen Ausgaben hinzugefügt`,
removedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `„${prohibitedExpense}“ aus verbotenen Ausgaben entfernt`,
- updatedReimbursementChoice: ({newReimbursementChoice, oldReimbursementChoice}: UpdatedPolicyReimbursementChoiceParams) =>
+ updatedReimbursementChoice: (newReimbursementChoice: string, oldReimbursementChoice: string) =>
`Erstattungmethode zu „${newReimbursementChoice}“ geändert (vorher „${oldReimbursementChoice}“)`,
setAutoJoin: ({enabled}: {enabled: boolean}) => `${enabled ? 'aktiviert' : 'deaktiviert'} Vorabgenehmigung von Arbeitsbereich-Beitrittsanfragen`,
- updatedDefaultTitle: ({newDefaultTitle, oldDefaultTitle}: UpdatedPolicyDefaultTitleParams) =>
- `benutzerdefinierte Berichtstitelformel in „${newDefaultTitle}“ geändert (zuvor „${oldDefaultTitle}“)`,
- updatedOwnership: ({oldOwnerEmail, oldOwnerName, policyName}: UpdatedPolicyOwnershipParams) =>
- `hat die Inhaberschaft von ${policyName} von ${oldOwnerName} (${oldOwnerEmail}) übernommen`,
+ updatedDefaultTitle: (newDefaultTitle: string, oldDefaultTitle: string) => `benutzerdefinierte Berichtstitelformel in „${newDefaultTitle}“ geändert (zuvor „${oldDefaultTitle}“)`,
+ updatedOwnership: (oldOwnerEmail: string, oldOwnerName: string, policyName: string) => `hat die Inhaberschaft von ${policyName} von ${oldOwnerName} (${oldOwnerEmail}) übernommen`,
updatedAutoHarvesting: (enabled: boolean) => `${enabled ? 'aktiviert' : 'deaktiviert'} geplante Einreichung`,
updatedIndividualBudgetNotification: ({
budgetAmount,
@@ -7121,20 +7162,32 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
userEmail,
awaitingApprovalSpend,
approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ }: {
+ budgetAmount: string;
+ budgetFrequency: string;
+ budgetName: string;
+ budgetTypeForNotificationMessage: string;
+ summaryLink?: string;
+ thresholdPercentage: number;
+ totalSpend: number;
+ unsubmittedSpend: number;
+ userEmail?: string;
+ awaitingApprovalSpend: number;
+ approvedReimbursedClosedSpend: number;
+ }) =>
`Achtung! Dieser Workspace hat ein ${budgetFrequency}-Budget von „${budgetAmount}“ für den/die/das ${budgetTypeForNotificationMessage} „${budgetName}“. ${userEmail} liegt derzeit bei ${approvedReimbursedClosedSpend}, was über ${thresholdPercentage}% des Budgets liegt. Außerdem warten ${awaitingApprovalSpend} noch auf Genehmigung und ${unsubmittedSpend} wurden noch nicht eingereicht, für insgesamt ${totalSpend}.${summaryLink ? `Hier ist ein Bericht mit all diesen Ausgaben für Ihre Unterlagen!` : ''}`,
- updatedSharedBudgetNotification: ({
- budgetAmount,
- budgetFrequency,
- budgetName,
- budgetTypeForNotificationMessage,
- summaryLink,
- thresholdPercentage,
- totalSpend,
- unsubmittedSpend,
- awaitingApprovalSpend,
- approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ updatedSharedBudgetNotification: (
+ budgetAmount: string,
+ budgetFrequency: string,
+ budgetName: string,
+ budgetTypeForNotificationMessage: string,
+ summaryLink: string | undefined,
+ thresholdPercentage: number,
+ totalSpend: number,
+ unsubmittedSpend: number,
+ awaitingApprovalSpend: number,
+ approvedReimbursedClosedSpend: number,
+ ) =>
`Achtung! Dieser Workspace hat ein ${budgetFrequency}-Budget von „${budgetAmount}“ für den ${budgetTypeForNotificationMessage} „${budgetName}“. Du liegst derzeit bei ${approvedReimbursedClosedSpend}, was über ${thresholdPercentage}% des Budgets liegt. Außerdem warten ${awaitingApprovalSpend} auf Genehmigung und ${unsubmittedSpend} wurden noch nicht eingereicht, für insgesamt ${totalSpend}. ${summaryLink ? `Hier ist ein Bericht mit all diesen Ausgaben für Ihre Unterlagen!` : ''}`,
removedMaxExpenseAge: (oldValue: string) => `maximales Spesenalter entfernt (zuvor „${oldValue}“ Tage)`,
},
@@ -7890,7 +7943,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
overLimitAttendee: (formattedLimit: string) => `Betrag über dem Limit von ${formattedLimit}/Person`,
perDayLimit: (formattedLimit: string) => `Betrag über dem täglichen Kategorienlimit von ${formattedLimit}/Person`,
receiptNotSmartScanned: 'Beleg- und Ausgabendetails manuell hinzugefügt.',
- receiptRequired: ({formattedLimit, category}: ViolationsReceiptRequiredParams) => {
+ receiptRequired: (formattedLimit?: string, category?: string) => {
if (formattedLimit && category) {
return `Beleg erforderlich bei Überschreitung der Kategoriegrenze von ${formattedLimit}`;
}
@@ -7903,7 +7956,7 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
return 'Beleg erforderlich';
},
itemizedReceiptRequired: (formattedLimit?: string) => `Einzelpostenbeleg erforderlich${formattedLimit ? `über ${formattedLimit}` : ''}`,
- prohibitedExpense: ({prohibitedExpenseTypes}: ViolationsProhibitedExpenseParams) => {
+ prohibitedExpense: (prohibitedExpenseTypes: string | string[]) => {
const preMessage = 'Unzulässige Ausgabe:';
const getProhibitedExpenseTypeText = (prohibitedExpenseType: string) => {
switch (prohibitedExpenseType) {
@@ -7934,7 +7987,17 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
},
customRules: (message: string) => message,
reviewRequired: 'Überprüfung erforderlich',
- rter: ({brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash}: ViolationsRterParams) => {
+ rter: (
+ brokenBankConnection: boolean,
+ isAdmin: boolean,
+ isTransactionOlderThan7Days: boolean,
+ member?: string,
+ rterType?: ValueOf,
+ companyCardPageURL?: string,
+ connectionLink?: string,
+ isPersonalCard?: boolean,
+ isMarkAsCash?: boolean,
+ ) => {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Beleg kann wegen unterbrochener Bankverbindung nicht automatisch zugeordnet werden.';
}
@@ -7963,10 +8026,10 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
markAsCashToIgnore: 'Als Barzahlung markieren, um sie zu ignorieren und Zahlung anzufordern.',
smartscanFailed: ({canEdit = true}) => `Beleg-Scan fehlgeschlagen.${canEdit ? 'Details manuell eingeben.' : ''}`,
receiptGeneratedWithAI: 'Mögliche KI-generierte Quittung',
- someTagLevelsRequired: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `Fehlende ${tagName ?? 'Tag'}`,
- tagOutOfPolicy: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'Tag'} nicht mehr gültig`,
+ someTagLevelsRequired: (tagName?: string) => `Fehlende ${tagName ?? 'Tag'}`,
+ tagOutOfPolicy: (tagName?: string) => `${tagName ?? 'Tag'} nicht mehr gültig`,
taxAmountChanged: 'Steuerbetrag wurde geändert',
- taxOutOfPolicy: ({taxName}: ViolationsTaxOutOfPolicyParams = {}) => `${taxName ?? 'Steuer'} nicht mehr gültig`,
+ taxOutOfPolicy: (taxName?: string) => `${taxName ?? 'Steuer'} nicht mehr gültig`,
taxRateChanged: 'Steuersatz wurde geändert',
taxRequired: 'Fehlender Steuersatz',
none: 'Keine',
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 5a62c2013fc2a..a235e529c6423 100644
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -1,5 +1,6 @@
import {CONST as COMMON_CONST} from 'expensify-common';
import startCase from 'lodash/startCase';
+import type {ValueOf} from 'type-fest';
import type {OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
import StringUtils from '@libs/StringUtils';
import dedent from '@libs/StringUtils/dedent';
@@ -28,14 +29,11 @@ import type {
MarkReimbursedFromIntegrationParams,
MissingPropertyParams,
MovedFromPersonalSpaceParams,
- MultifactorAuthenticationTranslationParams,
- NextStepParams,
NotAllowedExtensionParams,
OptionalParam,
PaidElsewhereParams,
ParentNavigationSummaryParams,
RemovedFromApprovalWorkflowParams,
- RemovedPolicyCustomUnitSubRateParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams,
ReportArchiveReasonsMergedParams,
@@ -48,43 +46,20 @@ import type {
UnshareParams,
UpdatedBudgetParams,
UpdatedPolicyApprovalRuleParams,
- UpdatedPolicyBudgetNotificationParams,
UpdatedPolicyCategoryMaxAmountNoReceiptParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyCustomTaxNameParams,
- UpdatedPolicyCustomUnitSubRateParams,
- UpdatedPolicyDefaultTitleParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
UpdatedPolicyManualApprovalThresholdParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyReimburserParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTimeRateParams,
UpdatedTheDistanceMerchantParams,
UpdatedTheRequestParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdateRoleParams,
- UpgradeSuccessMessageParams,
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsProhibitedExpenseParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
WorkspaceLockedPlanTypeParams,
- WorkspaceMemberList,
- WorkspaceYouMayJoin,
YourPlanPriceParams,
} from './params';
import type {TranslationDeepObject} from './types';
@@ -677,8 +652,8 @@ const translations = {
biometricsTest: {
biometricsTest: 'Biometrics test',
authenticationSuccessful: 'Authentication successful',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `You’ve successfully authenticated using ${authType}.`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `Biometrics (${status})`,
+ successfullyAuthenticatedUsing: (authType?: string) => `You’ve successfully authenticated using ${authType}.`,
+ troubleshootBiometricsStatus: ({status}: {status?: string}) => `Biometrics (${status})`,
statusNeverRegistered: 'Never registered',
statusNotRegistered: 'Not registered',
statusRegisteredOtherDevice: () => ({one: 'Another device registered', other: 'Other devices registered'}),
@@ -731,7 +706,7 @@ const translations = {
dismiss: 'Got it',
error: 'Request failed. Try again later.',
thisDevice: 'This device',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `${displayCount} other ${otherDeviceCount === 1 ? 'device' : 'devices'}`;
@@ -1695,8 +1670,14 @@ const translations = {
backdropLabel: 'Modal Backdrop',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1708,7 +1689,12 @@ const translations = {
return `Waiting for an admin to add expenses.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1720,9 +1706,18 @@ const translations = {
return `Waiting for an admin to submit expenses.`;
}
},
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `No further action required!`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => `No further action required!`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1734,7 +1729,12 @@ const translations = {
return `Waiting for an admin to add a bank account.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` on the ${eta} of each month` : ` ${eta}`;
@@ -1751,7 +1751,12 @@ const translations = {
return `Waiting for an admin's expenses to automatically submit${formattedETA}.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1763,7 +1768,12 @@ const translations = {
return `Waiting for an admin to fix the issues.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1775,7 +1785,12 @@ const translations = {
return `Waiting for an admin to approve expenses.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1787,7 +1802,12 @@ const translations = {
return `Waiting for an admin to export this report.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1799,7 +1819,12 @@ const translations = {
return `Waiting for an admin to pay expenses.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
// Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive
// eslint-disable-next-line default-case
switch (actorType) {
@@ -1811,7 +1836,12 @@ const translations = {
return `Waiting for an admin to finish setting up a business bank account.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: (
+ _actor: string,
+ _actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` by ${eta}` : ` ${eta}`;
@@ -1819,10 +1849,15 @@ const translations = {
return `Waiting for payment to complete${formattedETA}.`;
},
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_: NextStepParams) =>
+ [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) =>
`Oops! Looks like you're submitting to yourself. Approving your own reports is forbidden by your workspace. Please submit this report to someone else or contact your admin to change the person you submit to.`,
},
+ /* eslint-enable @typescript-eslint/no-unused-vars */
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'shortly',
[CONST.NEXT_STEP.ETA_KEY.TODAY]: 'later today',
@@ -2744,10 +2779,10 @@ const translations = {
getStarted: 'Get started',
whatsYourName: "What's your name?",
peopleYouMayKnow: 'People you may know are already here! Verify your email to join them.',
- workspaceYouMayJoin: ({domain, email}: WorkspaceYouMayJoin) => `Someone from ${domain} has already created a workspace. Please enter the magic code sent to ${email}.`,
+ workspaceYouMayJoin: (domain: string, email: string) => `Someone from ${domain} has already created a workspace. Please enter the magic code sent to ${email}.`,
joinAWorkspace: 'Join a workspace',
listOfWorkspaces: "Here's the list of workspaces you can join. Don't worry, you can always join them later if you prefer.",
- workspaceMemberList: ({employeeCount, policyOwner}: WorkspaceMemberList) => `${employeeCount} member${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
+ workspaceMemberList: (employeeCount: number, policyOwner: string) => `${employeeCount} member${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
whereYouWork: 'Where do you work?',
errorSelection: 'Select an option to move forward',
purpose: {
@@ -3133,7 +3168,7 @@ const translations = {
},
resendValidationForm: {
linkHasBeenResent: 'Link has been re-sent',
- weSentYouMagicSignInLink: ({login, loginType}: WeSentYouMagicSignInLinkParams) => `I've sent a magic sign-in link to ${login}. Please check your ${loginType} to sign in.`,
+ weSentYouMagicSignInLink: (login: string, loginType: string) => `I've sent a magic sign-in link to ${login}. Please check your ${loginType} to sign in.`,
resendLink: 'Resend link',
},
unlinkLoginForm: {
@@ -6349,7 +6384,7 @@ const translations = {
upgradeToUnlock: 'Unlock this feature',
completed: {
headline: `You've upgraded your workspace!`,
- successMessage: ({policyName, subscriptionLink}: UpgradeSuccessMessageParams) =>
+ successMessage: (policyName: string, subscriptionLink: string) =>
`You've successfully upgraded ${policyName} to the Control plan! View your subscription for more details.`,
categorizeMessage: `You've successfully upgraded to the Collect plan. Now you can categorize your expenses!`,
travelMessage: `You've successfully upgraded to the Collect plan. Now you can start booking and managing travel!`,
@@ -6751,15 +6786,15 @@ const translations = {
updateCategories: (count: number) => `updated ${count} categories`,
updateTagListName: (oldName: string, newName: string) => `changed the tag list name to "${newName}" (previously "${oldName}")`,
updateTagList: (tagListName: string) => `updated tags on the list "${tagListName}"`,
- updateTagListRequired: ({tagListsName, isRequired}: UpdatedPolicyTagListRequiredParams) => `changed tag list "${tagListsName}" to ${isRequired ? 'required' : 'not required'}`,
+ updateTagListRequired: (tagListsName: string, isRequired: boolean) => `changed tag list "${tagListsName}" to ${isRequired ? 'required' : 'not required'}`,
importTags: 'imported tags from a spreadsheet',
deletedAllTags: 'deleted all tags',
- addTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `added the tag "${tagName}" to the list "${tagListName}"`,
- updateTagName: ({tagListName, newName, oldName}: UpdatedPolicyTagNameParams) => `updated the tag list "${tagListName}" by changing the tag "${oldName}" to "${newName}"`,
- updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? 'enabled' : 'disabled'} the tag "${tagName}" on the list "${tagListName}"`,
- deleteTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `removed the tag "${tagName}" from the list "${tagListName}"`,
- deleteMultipleTags: ({count, tagListName}: UpdatedPolicyTagParams) => `removed "${count}" tags from the list "${tagListName}"`,
- updateTag: ({tagListName, newValue, tagName, updatedField, oldValue}: UpdatedPolicyTagFieldParams) => {
+ addTag: (tagListName: string, tagName?: string) => `added the tag "${tagName}" to the list "${tagListName}"`,
+ updateTagName: (tagListName: string, newName: string, oldName: string) => `updated the tag list "${tagListName}" by changing the tag "${oldName}" to "${newName}"`,
+ updateTagEnabled: (tagListName: string, tagName?: string, enabled?: boolean) => `${enabled ? 'enabled' : 'disabled'} the tag "${tagName}" on the list "${tagListName}"`,
+ deleteTag: (tagListName: string, tagName?: string) => `removed the tag "${tagName}" from the list "${tagListName}"`,
+ deleteMultipleTags: (count?: string, tagListName?: string) => `removed "${count}" tags from the list "${tagListName}"`,
+ updateTag: (tagListName: string, newValue: string, tagName: string, updatedField: string, oldValue?: string) => {
if (oldValue) {
return `updated the tag "${tagName}" on the list "${tagListName}" by changing the ${updatedField} to "${newValue}" (previously "${oldValue}")`;
}
@@ -6773,9 +6808,9 @@ const translations = {
importCustomUnitRates: (customUnitName: string) => `imported rates for custom unit "${customUnitName}"`,
addCustomUnitRate: (customUnitName: string, rateName: string) => `added a new ${customUnitName} rate "${rateName}"`,
deleteCustomUnitRate: ({customUnitName, rateName}: AddOrDeletePolicyCustomUnitRateParams) => `removed the "${customUnitName}" rate "${rateName}"`,
- updateCustomUnitSubRate: ({customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField}: UpdatedPolicyCustomUnitSubRateParams) =>
+ updateCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, customUnitSubRateName: string, oldValue: string, newValue: string, updatedField: string) =>
`changed "${customUnitName}" rate "${customUnitRateName}" sub-rate "${customUnitSubRateName}" ${updatedField} to "${newValue}" (previously "${oldValue}")`,
- removedCustomUnitSubRate: ({customUnitName, customUnitRateName, removedSubRateName}: RemovedPolicyCustomUnitSubRateParams) =>
+ removedCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, removedSubRateName: string) =>
`removed "${customUnitName}" rate "${customUnitRateName}" sub-rate "${removedSubRateName}"`,
addedReportField: ({fieldType, fieldName}: AddedOrDeletedPolicyReportFieldParams) => `added ${fieldType} Report Field "${fieldName}"`,
updatedCustomUnitRate: (customUnitName: string, customUnitRateName: string, updatedField: string, newValue: string, oldValue: string) =>
@@ -6795,7 +6830,7 @@ const translations = {
updatedCustomUnitRateEnabled: (customUnitName: string, customUnitRateName: string, newValue: boolean) => {
return `${newValue ? 'enabled' : 'disabled'} the ${customUnitName} rate "${customUnitRateName}"`;
},
- updateReportFieldDefaultValue: ({defaultValue, fieldName}: UpdatedPolicyReportFieldDefaultValueParams) => `set the default value of report field "${fieldName}" to "${defaultValue}"`,
+ updateReportFieldDefaultValue: (defaultValue?: string, fieldName?: string) => `set the default value of report field "${fieldName}" to "${defaultValue}"`,
addedReportFieldOption: (fieldName: string, optionName: string) => `added the option "${optionName}" to the report field "${fieldName}"`,
removedReportFieldOption: (fieldName: string, optionName: string) => `removed the option "${optionName}" from the report field "${fieldName}"`,
updateReportFieldOptionDisabled: (fieldName: string, optionName: string, optionEnabled: boolean) =>
@@ -6807,7 +6842,7 @@ const translations = {
return `${allEnabled ? 'enabled' : 'disabled'} the option "${optionName}" for the report field "${fieldName}", making all options ${allEnabled ? 'enabled' : 'disabled'}`;
},
deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `removed ${fieldType} Report Field "${fieldName}"`,
- preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) =>
+ preventSelfApproval: (oldValue: string, newValue: string) =>
`updated "Prevent self-approval" to "${newValue === 'true' ? 'Enabled' : 'Disabled'}" (previously "${oldValue === 'true' ? 'Enabled' : 'Disabled'}")`,
updateMonthlyOffset: (oldValue: string, newValue: string) => {
if (!oldValue) {
@@ -6930,19 +6965,18 @@ const translations = {
return `${enabled ? 'enabled' : 'disabled'} time tracking`;
},
- updatedTimeRate: ({newRate, oldRate}: UpdatedPolicyTimeRateParams) => {
+ updatedTimeRate: (newRate?: string, oldRate?: string) => {
return `changed hourly rate to "${newRate}" (previously "${oldRate}")`;
},
addedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `added "${prohibitedExpense}" to prohibited expenses`,
removedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `removed "${prohibitedExpense}" from prohibited expenses`,
- updatedReimbursementChoice: ({newReimbursementChoice, oldReimbursementChoice}: UpdatedPolicyReimbursementChoiceParams) =>
+ updatedReimbursementChoice: (newReimbursementChoice: string, oldReimbursementChoice: string) =>
`changed reimbursement method to "${newReimbursementChoice}" (previously "${oldReimbursementChoice}")`,
setAutoJoin: ({enabled}: {enabled: boolean}) => `${enabled ? 'enabled' : 'disabled'} pre-approval of workspace join requests`,
- updatedDefaultTitle: ({newDefaultTitle, oldDefaultTitle}: UpdatedPolicyDefaultTitleParams) =>
- `changed custom report name formula to "${newDefaultTitle}" (previously "${oldDefaultTitle}")`,
+ updatedDefaultTitle: (newDefaultTitle: string, oldDefaultTitle: string) => `changed custom report name formula to "${newDefaultTitle}" (previously "${oldDefaultTitle}")`,
- updatedOwnership: ({oldOwnerEmail, oldOwnerName, policyName}: UpdatedPolicyOwnershipParams) => `took over ownership of ${policyName} from ${oldOwnerName} (${oldOwnerEmail})`,
+ updatedOwnership: (oldOwnerEmail: string, oldOwnerName: string, policyName: string) => `took over ownership of ${policyName} from ${oldOwnerName} (${oldOwnerEmail})`,
updatedAutoHarvesting: (enabled: boolean) => `${enabled ? 'enabled' : 'disabled'} scheduled submit`,
updatedIndividualBudgetNotification: ({
@@ -6957,20 +6991,32 @@ const translations = {
userEmail,
awaitingApprovalSpend,
approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ }: {
+ budgetAmount: string;
+ budgetFrequency: string;
+ budgetName: string;
+ budgetTypeForNotificationMessage: string;
+ summaryLink?: string;
+ thresholdPercentage: number;
+ totalSpend: number;
+ unsubmittedSpend: number;
+ userEmail?: string;
+ awaitingApprovalSpend: number;
+ approvedReimbursedClosedSpend: number;
+ }) =>
`Heads up! This workspace has a ${budgetFrequency} budget of "${budgetAmount}" for the ${budgetTypeForNotificationMessage} "${budgetName}". ${userEmail} is currently at ${approvedReimbursedClosedSpend}, which is over ${thresholdPercentage}% of the budget. There's also ${awaitingApprovalSpend} awaiting approval, and ${unsubmittedSpend} that hasn't been submitted yet, for a total of ${totalSpend}.${summaryLink ? ` Here's a report with all those expenses for your records!` : ''}`,
- updatedSharedBudgetNotification: ({
- budgetAmount,
- budgetFrequency,
- budgetName,
- budgetTypeForNotificationMessage,
- summaryLink,
- thresholdPercentage,
- totalSpend,
- unsubmittedSpend,
- awaitingApprovalSpend,
- approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ updatedSharedBudgetNotification: (
+ budgetAmount: string,
+ budgetFrequency: string,
+ budgetName: string,
+ budgetTypeForNotificationMessage: string,
+ summaryLink: string | undefined,
+ thresholdPercentage: number,
+ totalSpend: number,
+ unsubmittedSpend: number,
+ awaitingApprovalSpend: number,
+ approvedReimbursedClosedSpend: number,
+ ) =>
`Heads up! This workspace has a ${budgetFrequency} budget of "${budgetAmount}" for the ${budgetTypeForNotificationMessage} "${budgetName}". You're currently at ${approvedReimbursedClosedSpend}, which is over ${thresholdPercentage}% of the budget. There's also ${awaitingApprovalSpend} awaiting approval, and ${unsubmittedSpend} that hasn't been submitted yet, for a total of ${totalSpend}. ${summaryLink ? `Here's a report with all those expenses for your records!` : ''}`,
updatedFeatureEnabled: ({enabled, featureName}: {enabled: boolean; featureName: string}) => {
switch (featureName) {
@@ -7068,16 +7114,16 @@ const translations = {
oldValue ? `changed the invoice company name to "${newValue}" (previously "${oldValue}")` : `set the invoice company name to "${newValue}"`,
changedInvoiceCompanyWebsite: ({newValue, oldValue}: {newValue: string; oldValue?: string}) =>
oldValue ? `changed the invoice company website to "${newValue}" (previously "${oldValue}")` : `set the invoice company website to "${newValue}"`,
- changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) =>
+ changedReimburser: (newReimburser: string, previousReimburser?: string) =>
previousReimburser ? `changed the authorized payer to "${newReimburser}" (previously "${previousReimburser}")` : `changed the authorized payer to "${newReimburser}"`,
updateReimbursementEnabled: (enabled: boolean) => `${enabled ? 'enabled' : 'disabled'} reimbursements`,
updateCustomTaxName: ({oldName, newName}: UpdatedPolicyCustomTaxNameParams) => `changed the custom tax name to "${newName}" (previously "${oldName}")`,
updateCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyCurrencyDefaultTaxParams) => `changed the workspace currency default tax rate to "${newName}" (previously "${oldName}")`,
updateForeignCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyForeignCurrencyDefaultTaxParams) =>
`changed the foreign currency default tax rate to "${newName}" (previously "${oldName}")`,
- addTax: ({taxName}: UpdatedPolicyTaxParams) => `added the tax "${taxName}"`,
- deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `removed the tax "${taxName}"`,
- updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => {
+ addTax: (taxName: string) => `added the tax "${taxName}"`,
+ deleteTax: (taxName: string) => `removed the tax "${taxName}"`,
+ updateTax: (oldValue?: string | boolean | number, taxName?: string, updatedField?: string, newValue?: string | boolean | number) => {
if (!updatedField) {
return '';
}
@@ -7862,7 +7908,7 @@ const translations = {
overLimitAttendee: (formattedLimit: string) => `Amount over ${formattedLimit}/person limit`,
perDayLimit: (formattedLimit: string) => `Amount over daily ${formattedLimit}/person category limit`,
receiptNotSmartScanned: 'Receipt and expense details added manually.',
- receiptRequired: ({formattedLimit, category}: ViolationsReceiptRequiredParams) => {
+ receiptRequired: (formattedLimit?: string, category?: string) => {
if (formattedLimit && category) {
return `Receipt required over ${formattedLimit} category limit`;
}
@@ -7878,7 +7924,7 @@ const translations = {
return 'Receipt required';
},
itemizedReceiptRequired: (formattedLimit?: string) => `Itemized receipt required${formattedLimit ? ` over ${formattedLimit}` : ''}`,
- prohibitedExpense: ({prohibitedExpenseTypes}: ViolationsProhibitedExpenseParams) => {
+ prohibitedExpense: (prohibitedExpenseTypes: string | string[]) => {
const preMessage = 'Prohibited expense:';
const getProhibitedExpenseTypeText = (prohibitedExpenseType: string) => {
switch (prohibitedExpenseType) {
@@ -7909,7 +7955,17 @@ const translations = {
},
customRules: (message: string) => message,
reviewRequired: 'Review required',
- rter: ({brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash}: ViolationsRterParams) => {
+ rter: (
+ brokenBankConnection: boolean,
+ isAdmin: boolean,
+ isTransactionOlderThan7Days: boolean,
+ member?: string,
+ rterType?: ValueOf,
+ companyCardPageURL?: string,
+ connectionLink?: string,
+ isPersonalCard?: boolean,
+ isMarkAsCash?: boolean,
+ ) => {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return "Can't auto-match receipt due to broken bank connection.";
}
@@ -7939,10 +7995,10 @@ const translations = {
markAsCashToIgnore: 'Mark as cash to ignore and request payment.',
smartscanFailed: ({canEdit = true}) => `Receipt scanning failed.${canEdit ? ' Enter details manually.' : ''}`,
receiptGeneratedWithAI: 'Potential AI-generated receipt',
- someTagLevelsRequired: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `Missing ${tagName ?? 'Tag'}`,
- tagOutOfPolicy: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'Tag'} no longer valid`,
+ someTagLevelsRequired: (tagName?: string) => `Missing ${tagName ?? 'Tag'}`,
+ tagOutOfPolicy: (tagName?: string) => `${tagName ?? 'Tag'} no longer valid`,
taxAmountChanged: 'Tax amount was modified',
- taxOutOfPolicy: ({taxName}: ViolationsTaxOutOfPolicyParams = {}) => `${taxName ?? 'Tax'} no longer valid`,
+ taxOutOfPolicy: (taxName?: string) => `${taxName ?? 'Tax'} no longer valid`,
taxRateChanged: 'Tax rate was modified',
taxRequired: 'Missing tax rate',
none: 'None',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index a04d9deb0595a..7d9e466f1c5d4 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -3,14 +3,7 @@ import dedent from '@libs/StringUtils/dedent';
import CONST from '@src/CONST';
import type {OriginalMessageSettlementAccountLocked, PersonalRulesModifiedFields, PolicyRulesModifiedFields} from '@src/types/onyx/OriginalMessage';
import type en from './en';
-import type {
- ConciergeBrokenCardConnectionParams,
- CreatedReportForUnapprovedTransactionsParams,
- MultifactorAuthenticationTranslationParams,
- PaidElsewhereParams,
- UpdatedPolicyTagParams,
- ViolationsRterParams,
-} from './params';
+import type {ConciergeBrokenCardConnectionParams, CreatedReportForUnapprovedTransactionsParams, PaidElsewhereParams} from './params';
import type {TranslationDeepObject} from './types';
/* eslint-disable max-len */
@@ -563,8 +556,8 @@ const translations: TranslationDeepObject = {
biometricsTest: {
biometricsTest: 'Prueba de biometría',
authenticationSuccessful: 'Autenticación exitosa',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `Te has autenticado exitosamente con ${authType}.`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `Biometría (${status})`,
+ successfullyAuthenticatedUsing: (authType) => `Te has autenticado exitosamente con ${authType}.`,
+ troubleshootBiometricsStatus: ({status}) => `Biometría (${status})`,
statusNeverRegistered: 'Nunca registrado',
statusNotRegistered: 'No registrado',
statusRegisteredThisDevice: 'Registrado',
@@ -619,7 +612,7 @@ const translations: TranslationDeepObject = {
dismiss: 'Entendido',
error: 'La solicitud ha fallado. Inténtalo de nuevo más tarde.',
thisDevice: 'Este dispositivo',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['Un', 'Dos', 'Tres', 'Cuatro', 'Cinco', 'Seis', 'Siete', 'Ocho', 'Nueve'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `${displayCount} ${otherDeviceCount === 1 ? 'otro dispositivo' : 'otros dispositivos'}`;
@@ -1566,8 +1559,9 @@ const translations: TranslationDeepObject = {
backdropLabel: 'Fondo del Modal',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1578,7 +1572,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador añada gastos.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1589,9 +1583,8 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador envíe los gastos.`;
}
},
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_) => `¡No se requiere ninguna acción adicional!`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_actor, _actorType, _eta, _etaType) => `¡No se requiere ninguna acción adicional!`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1602,7 +1595,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador añada una cuenta bancaria.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (actor, actorType, eta, etaType) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` el ${eta} de cada mes` : ` ${eta}`;
@@ -1618,7 +1611,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que los gastos de un administrador se envíen automáticamente${formattedETA}.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1629,7 +1622,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador solucione ellos problemas.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1640,7 +1633,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador apruebe los gastos.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1651,7 +1644,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador exporte este informe.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1662,7 +1655,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador pague los gastos.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: (actor, actorType, _eta, _etaType) => {
// eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
@@ -1673,7 +1666,7 @@ const translations: TranslationDeepObject = {
return `Esperando a que un administrador termine de configurar una cuenta bancaria de empresa.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: (_actor, _actorType, eta, etaType) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` para el ${eta}` : ` ${eta}`;
@@ -1681,10 +1674,10 @@ const translations: TranslationDeepObject = {
return `Esperando a que se complete el pago${formattedETA}.`;
},
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_) =>
+ [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_actor, _actorType, _eta, _etaType) =>
`¡Ups! Parece que estás enviando el informe a ti mismo. Aprobar tus propios informes está prohibido por tu espacio de trabajo. Por favor, envía este informe a otra persona o contacta a tu administrador para cambiar la persona a la que lo envías.`,
},
+ /* eslint-enable @typescript-eslint/no-unused-vars */
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'en breve',
[CONST.NEXT_STEP.ETA_KEY.TODAY]: 'más tarde hoy',
@@ -2607,8 +2600,8 @@ ${amount} para ${merchant} - ${date}`,
getStarted: 'Comenzar',
whatsYourName: '¿Cómo te llamas?',
peopleYouMayKnow: 'Las personas que tal vez conozcas ya están aquí. Verifica tu correo electrónico para unirte a ellos.',
- workspaceMemberList: ({employeeCount, policyOwner}) => `${employeeCount} miembro${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
- workspaceYouMayJoin: ({domain, email}) => `Alguien de ${domain} ya ha creado un espacio de trabajo. Por favor, introduce el código mágico enviado a ${email}.`,
+ workspaceMemberList: (employeeCount, policyOwner) => `${employeeCount} miembro${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
+ workspaceYouMayJoin: (domain, email) => `Alguien de ${domain} ya ha creado un espacio de trabajo. Por favor, introduce el código mágico enviado a ${email}.`,
joinAWorkspace: 'Unirse a un espacio de trabajo',
listOfWorkspaces: 'Aquí está la lista de espacios de trabajo a los que puedes unirte. No te preocupes, siempre puedes unirte a ellos más tarde si lo prefieres.',
whereYouWork: '¿Dónde trabajas?',
@@ -2991,7 +2984,7 @@ ${amount} para ${merchant} - ${date}`,
},
resendValidationForm: {
linkHasBeenResent: 'El enlace se ha reenviado',
- weSentYouMagicSignInLink: ({login, loginType}) => `Te he enviado un hiperenlace mágico para iniciar sesión a ${login}. Por favor, revisa tu ${loginType}`,
+ weSentYouMagicSignInLink: (login, loginType) => `Te he enviado un hiperenlace mágico para iniciar sesión a ${login}. Por favor, revisa tu ${loginType}`,
resendLink: 'Reenviar enlace',
},
unlinkLoginForm: {
@@ -6266,7 +6259,7 @@ ${amount} para ${merchant} - ${date}`,
headline: 'Has mejorado tu espacio de trabajo.',
categorizeMessage: `Has actualizado con éxito al plan Recopilar. ¡Ahora puedes categorizar tus gastos!`,
travelMessage: 'Has actualizado con éxito al plan Recopilar. ¡Ahora puedes comenzar a reservar y gestionar viajes!',
- successMessage: ({policyName, subscriptionLink}) =>
+ successMessage: (policyName, subscriptionLink) =>
`Has actualizado con éxito ${policyName} al plan Controlar. Ver su suscripción para obtener más información.`,
distanceRateMessage: 'Has actualizado correctamente al plan Recopilar. ¡Ahora puedes cambiar la tasa de distancia!',
gotIt: 'Entendido, gracias.',
@@ -6646,15 +6639,15 @@ ${amount} para ${merchant} - ${date}`,
updateCategories: (count) => `actualizó ${count} categorías`,
updateTagListName: (oldName, newName) => `cambió el nombre de la lista de etiquetas a "${newName}" (previamente "${oldName}")`,
updateTagList: (tagListName) => `actualizó las etiquetas de la lista "${tagListName}"`,
- updateTagListRequired: ({tagListsName, isRequired}) => `cambió la lista de etiquetas "${tagListsName}" a ${isRequired ? 'requerida' : 'no requerida'}`,
+ updateTagListRequired: (tagListsName, isRequired) => `cambió la lista de etiquetas "${tagListsName}" a ${isRequired ? 'requerida' : 'no requerida'}`,
importTags: 'importó etiquetas desde una hoja de cálculo',
deletedAllTags: 'eliminó todas las etiquetas',
- addTag: ({tagListName, tagName}) => `añadió la etiqueta "${tagName}" a la lista "${tagListName}"`,
- updateTagName: ({tagListName, newName, oldName}) => `actualizó la lista de etiquetas "${tagListName}" cambiando la etiqueta "${oldName}" a "${newName}"`,
- updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? 'habilitó' : 'deshabilitó'} la etiqueta "${tagName}" en la lista "${tagListName}"`,
- deleteTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `eliminó la etiqueta "${tagName}" de la lista "${tagListName}"`,
- deleteMultipleTags: ({count, tagListName}) => `eliminó "${count}" etiquetas de la lista "${tagListName}"`,
- updateTag: ({tagListName, newValue, tagName, updatedField, oldValue}) => {
+ addTag: (tagListName, tagName) => `añadió la etiqueta "${tagName}" a la lista "${tagListName}"`,
+ updateTagName: (tagListName, newName, oldName) => `actualizó la lista de etiquetas "${tagListName}" cambiando la etiqueta "${oldName}" a "${newName}"`,
+ updateTagEnabled: (tagListName, tagName, enabled) => `${enabled ? 'habilitó' : 'deshabilitó'} la etiqueta "${tagName}" en la lista "${tagListName}"`,
+ deleteTag: (tagListName, tagName) => `eliminó la etiqueta "${tagName}" de la lista "${tagListName}"`,
+ deleteMultipleTags: (count, tagListName) => `eliminó "${count}" etiquetas de la lista "${tagListName}"`,
+ updateTag: (tagListName, newValue, tagName, updatedField, oldValue) => {
if (oldValue) {
return `actualizó la etiqueta "${tagName}" en la lista "${tagListName}" cambiando el ${updatedField} a "${newValue}" (previamente "${oldValue}")`;
}
@@ -6667,9 +6660,9 @@ ${amount} para ${merchant} - ${date}`,
importCustomUnitRates: (customUnitName) => `importó tasas para la unidad personalizada "${customUnitName}"`,
addCustomUnitRate: (customUnitName, rateName) => `añadió una nueva tasa de "${rateName}" para "${customUnitName}"`,
deleteCustomUnitRate: ({customUnitName, rateName}) => `eliminó la tasa "${rateName}" de "${customUnitName}"`,
- updateCustomUnitSubRate: ({customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField}) =>
+ updateCustomUnitSubRate: (customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField) =>
`cambió la sub-tasa "${customUnitSubRateName}" de la tasa "${customUnitRateName}" de "${customUnitName}" ${updatedField} a "${newValue}" (anteriormente "${oldValue}")`,
- removedCustomUnitSubRate: ({customUnitName, customUnitRateName, removedSubRateName}) =>
+ removedCustomUnitSubRate: (customUnitName, customUnitRateName, removedSubRateName) =>
`eliminó la sub-tasa "${removedSubRateName}" de la tasa "${customUnitRateName}" de "${customUnitName}"`,
addedReportField: ({fieldType, fieldName}) => `añadió el campo de informe ${fieldType} "${fieldName}"`,
updatedCustomUnitRate: (customUnitName, customUnitRateName, updatedField, newValue, oldValue) =>
@@ -6689,7 +6682,7 @@ ${amount} para ${merchant} - ${date}`,
updatedCustomUnitRateEnabled: (customUnitName, customUnitRateName, newValue) => {
return `${newValue ? 'habilitó' : 'deshabilitó'} la tasa de ${customUnitName} "${customUnitRateName}"`;
},
- updateReportFieldDefaultValue: ({defaultValue, fieldName}) => `estableció el valor predeterminado del campo de informe "${fieldName}" en "${defaultValue}"`,
+ updateReportFieldDefaultValue: (defaultValue, fieldName) => `estableció el valor predeterminado del campo de informe "${fieldName}" en "${defaultValue}"`,
addedReportFieldOption: (fieldName, optionName) => `añadió la opción "${optionName}" al campo de informe "${fieldName}"`,
removedReportFieldOption: (fieldName, optionName) => `eliminó la opción "${optionName}" del campo de informe "${fieldName}"`,
updateReportFieldOptionDisabled: (fieldName, optionName, optionEnabled) =>
@@ -6703,7 +6696,7 @@ ${amount} para ${merchant} - ${date}`,
}`;
},
deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `eliminó el campo de informe ${fieldType} "${fieldName}"`,
- preventSelfApproval: ({oldValue, newValue}) =>
+ preventSelfApproval: (oldValue, newValue) =>
`actualizó "Evitar la autoaprobación" a "${newValue === 'true' ? 'Habilitada' : 'Deshabilitada'}" (previamente "${oldValue === 'true' ? 'Habilitada' : 'Deshabilitada'}")`,
setReceiptRequiredAmount: (newValue) => `estableció el importe requerido del recibo en "${newValue}"`,
changedReceiptRequiredAmount: (oldValue, newValue) => `cambió el importe requerido del recibo a "${newValue}" (antes "${oldValue}")`,
@@ -6754,7 +6747,7 @@ ${amount} para ${merchant} - ${date}`,
downgradedWorkspace: 'bajó de categoría este espacio de trabajo al plan Recopilar',
updatedAuditRate: (oldAuditRate, newAuditRate) =>
`cambió la tasa de informes enviados aleatoriamente para aprobación manual a ${Math.round(newAuditRate * 100)}% (previamente ${Math.round(oldAuditRate * 100)}%)`,
- changedReimburser: ({newReimburser, previousReimburser}) =>
+ changedReimburser: (newReimburser, previousReimburser) =>
previousReimburser ? `cambió el pagador autorizado a "${newReimburser}" (previamente "${previousReimburser}")` : `cambió el pagador autorizado a "${newReimburser}"`,
updateReimbursementEnabled: (enabled) => `${enabled ? 'habilitó' : 'deshabilitó'} los reembolsos`,
updatedManualApprovalThreshold: ({oldLimit, newLimit}) => `cambió el límite de aprobación manual para todos los gastos a ${newLimit} (previamente ${oldLimit})`,
@@ -6848,14 +6841,14 @@ ${amount} para ${merchant} - ${date}`,
return `eliminó el presupuesto de ${entityLabel} "${entityName}"`;
},
updatedTimeEnabled: (enabled) => `${enabled ? 'habilitó' : 'deshabilitó'} el seguimiento de tiempo`,
- updatedTimeRate: ({newRate, oldRate}) => `cambió la tarifa por hora a "${newRate}" (anteriormente "${oldRate}")`,
+ updatedTimeRate: (newRate, oldRate) => `cambió la tarifa por hora a "${newRate}" (anteriormente "${oldRate}")`,
addedProhibitedExpense: ({prohibitedExpense}) => `añadió "${prohibitedExpense}" a los gastos prohibidos`,
removedProhibitedExpense: ({prohibitedExpense}) => `eliminó "${prohibitedExpense}" de los gastos prohibidos`,
- updatedReimbursementChoice: ({newReimbursementChoice, oldReimbursementChoice}) =>
+ updatedReimbursementChoice: (newReimbursementChoice, oldReimbursementChoice) =>
`cambió el método de reembolso a "${newReimbursementChoice}" (previamente "${oldReimbursementChoice}")`,
setAutoJoin: (enabled) => `${enabled ? 'habilitó' : 'deshabilitó'} la aprobación previa de solicitudes para unirse al espacio de trabajo`,
- updatedDefaultTitle: ({newDefaultTitle, oldDefaultTitle}) => `cambió la fórmula personalizada del nombre del informe a "${newDefaultTitle}" (previamente "${oldDefaultTitle}")`,
- updatedOwnership: ({oldOwnerEmail, oldOwnerName, policyName}) => `asumió la propiedad del espacio de trabajo ${policyName} de ${oldOwnerName} (${oldOwnerEmail})`,
+ updatedDefaultTitle: (newDefaultTitle, oldDefaultTitle) => `cambió la fórmula personalizada del nombre del informe a "${newDefaultTitle}" (previamente "${oldDefaultTitle}")`,
+ updatedOwnership: (oldOwnerEmail, oldOwnerName, policyName) => `asumió la propiedad del espacio de trabajo ${policyName} de ${oldOwnerName} (${oldOwnerEmail})`,
updatedAutoHarvesting: (enabled) => `${enabled ? 'habilitó' : 'deshabilitó'} el envío programado`,
updatedIndividualBudgetNotification: ({
budgetAmount,
@@ -6871,7 +6864,7 @@ ${amount} para ${merchant} - ${date}`,
approvedReimbursedClosedSpend,
}) =>
`¡Atención! Este espacio de trabajo tiene un presupuesto ${budgetFrequency} ${budgetTypeForNotificationMessage} de "${budgetAmount}" para la categoría "${budgetName}". ${userEmail} está actualmente en ${approvedReimbursedClosedSpend}, lo que supera el ${thresholdPercentage}% del presupuesto. También hay ${awaitingApprovalSpend} en espera de aprobación y ${unsubmittedSpend} que aún no se ha enviado, para un total de ${totalSpend}.${summaryLink ? ` Aquí hay un informe con todos esos gastos para tus registros.` : ''}`,
- updatedSharedBudgetNotification: ({
+ updatedSharedBudgetNotification: (
budgetAmount,
budgetFrequency,
budgetName,
@@ -6882,7 +6875,7 @@ ${amount} para ${merchant} - ${date}`,
unsubmittedSpend,
awaitingApprovalSpend,
approvedReimbursedClosedSpend,
- }) =>
+ ) =>
`¡Atención! Este espacio de trabajo tiene un presupuesto ${budgetFrequency} ${budgetTypeForNotificationMessage} de "${budgetAmount}" para la categoría "${budgetName}". Actualmente estás en ${approvedReimbursedClosedSpend}, lo que supera el ${thresholdPercentage}% del presupuesto. También hay ${awaitingApprovalSpend} en espera de aprobación y ${unsubmittedSpend} que aún no se ha enviado, para un total de ${totalSpend}.${summaryLink ? ` Aquí hay un informe con todos esos gastos para tus registros.` : ''}`,
updatedFeatureEnabled: ({enabled, featureName}) => {
switch (featureName) {
@@ -6985,9 +6978,9 @@ ${amount} para ${merchant} - ${date}`,
oldValue
? `cambió el sitio web de la empresa de la factura a "${newValue}" (previamente "${oldValue}")`
: `estableció el sitio web de la empresa de la factura como "${newValue}"`,
- addTax: ({taxName}) => `añadió el impuesto "${taxName}"`,
- deleteTax: ({taxName}) => `eliminó el impuesto "${taxName}"`,
- updateTax: ({oldValue, taxName, updatedField, newValue}) => {
+ addTax: (taxName) => `añadió el impuesto "${taxName}"`,
+ deleteTax: (taxName) => `eliminó el impuesto "${taxName}"`,
+ updateTax: (oldValue, taxName, updatedField, newValue) => {
if (!updatedField) {
return '';
}
@@ -8143,7 +8136,7 @@ ${amount} para ${merchant} - ${date}`,
overLimitAttendee: (formattedLimit) => `Importe supera el límite${formattedLimit ? ` de ${formattedLimit}/persona` : ''}`,
perDayLimit: (formattedLimit) => `Importe supera el límite diario de la categoría${formattedLimit ? ` de ${formattedLimit}/persona` : ''}`,
receiptNotSmartScanned: 'Detalles del recibo y del gasto añadidos manualmente.',
- receiptRequired: ({formattedLimit, category}) => {
+ receiptRequired: (formattedLimit, category) => {
if (formattedLimit && category) {
return `Recibo obligatorio para importes sobre ${formattedLimit} el límite de la categoría`;
}
@@ -8159,7 +8152,7 @@ ${amount} para ${merchant} - ${date}`,
return 'Recibo obligatorio';
},
itemizedReceiptRequired: (formattedLimit) => `Recibo detallado requerido${formattedLimit ? ` para importes sobre ${formattedLimit}` : ''}`,
- prohibitedExpense: ({prohibitedExpenseTypes}) => {
+ prohibitedExpense: (prohibitedExpenseTypes) => {
const preMessage = 'Gastos prohibidos:';
const getProhibitedExpenseTypeText = (prohibitedExpenseType: string) => {
switch (prohibitedExpenseType) {
@@ -8190,7 +8183,7 @@ ${amount} para ${merchant} - ${date}`,
},
customRules: (message) => message,
reviewRequired: 'Revisión requerida',
- rter: ({brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash}: ViolationsRterParams) => {
+ rter: (brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash) => {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'No se puede emparejar automáticamente el recibo debido a una conexión bancaria interrumpida.';
}
@@ -8221,10 +8214,10 @@ ${amount} para ${merchant} - ${date}`,
markAsCashToIgnore: 'Márcalo como efectivo para ignorar y solicitar el pago.',
smartscanFailed: ({canEdit = true}) => `No se pudo escanear el recibo.${canEdit ? ' Introduce los datos manualmente.' : ''}`,
receiptGeneratedWithAI: 'Posible recibo generado por IA',
- someTagLevelsRequired: ({tagName} = {}) => `Falta ${tagName ?? 'Tag'}`,
- tagOutOfPolicy: ({tagName} = {}) => `La etiqueta ${tagName ? `${tagName} ` : ''}ya no es válida`,
+ someTagLevelsRequired: (tagName) => `Falta ${tagName ?? 'Tag'}`,
+ tagOutOfPolicy: (tagName) => `La etiqueta ${tagName ? `${tagName} ` : ''}ya no es válida`,
taxAmountChanged: 'El importe del impuesto fue modificado',
- taxOutOfPolicy: ({taxName} = {}) => `${taxName ?? 'El impuesto'} ya no es válido`,
+ taxOutOfPolicy: (taxName) => `${taxName ?? 'El impuesto'} ya no es válido`,
taxRateChanged: 'La tasa de impuesto fue modificada',
taxRequired: 'Falta la tasa de impuesto',
none: 'Ninguno',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 45a5c1386840d..dbb3b1f262581 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -11,6 +11,7 @@
*/
import {CONST as COMMON_CONST} from 'expensify-common';
import startCase from 'lodash/startCase';
+import type {ValueOf} from 'type-fest';
import type {OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
import StringUtils from '@libs/StringUtils';
import dedent from '@libs/StringUtils/dedent';
@@ -40,14 +41,11 @@ import type {
MarkReimbursedFromIntegrationParams,
MissingPropertyParams,
MovedFromPersonalSpaceParams,
- MultifactorAuthenticationTranslationParams,
- NextStepParams,
NotAllowedExtensionParams,
OptionalParam,
PaidElsewhereParams,
ParentNavigationSummaryParams,
RemovedFromApprovalWorkflowParams,
- RemovedPolicyCustomUnitSubRateParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams,
ReportArchiveReasonsMergedParams,
@@ -60,43 +58,20 @@ import type {
UnshareParams,
UpdatedBudgetParams,
UpdatedPolicyApprovalRuleParams,
- UpdatedPolicyBudgetNotificationParams,
UpdatedPolicyCategoryMaxAmountNoReceiptParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyCustomTaxNameParams,
- UpdatedPolicyCustomUnitSubRateParams,
- UpdatedPolicyDefaultTitleParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
UpdatedPolicyManualApprovalThresholdParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyReimburserParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTimeRateParams,
UpdatedTheDistanceMerchantParams,
UpdatedTheRequestParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdateRoleParams,
- UpgradeSuccessMessageParams,
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsProhibitedExpenseParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
WorkspaceLockedPlanTypeParams,
- WorkspaceMemberList,
- WorkspaceYouMayJoin,
YourPlanPriceParams,
} from './params';
import type {TranslationDeepObject} from './types';
@@ -653,8 +628,8 @@ const translations: TranslationDeepObject = {
biometricsTest: {
biometricsTest: 'Test biométrique',
authenticationSuccessful: 'Authentification réussie',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `Vous vous êtes authentifié avec succès à l’aide de ${authType}.`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `Données biométriques (${status})`,
+ successfullyAuthenticatedUsing: (authType?: string) => `Vous vous êtes authentifié avec succès à l’aide de ${authType}.`,
+ troubleshootBiometricsStatus: ({status}: {status?: string}) => `Données biométriques (${status})`,
yourAttemptWasUnsuccessful: 'Votre tentative d’authentification a échoué.',
youCouldNotBeAuthenticated: 'Vous n’avez pas pu être authentifié',
areYouSureToReject: 'Voulez-vous vraiment continuer ? La tentative d’authentification sera rejetée si vous fermez cet écran.',
@@ -706,7 +681,7 @@ const translations: TranslationDeepObject = {
confirmationPromptAll: 'Êtes-vous sûr ? Vous aurez besoin d’un code magique pour la prochaine vérification sur n’importe quel appareil.',
ctaAll: 'Tout révoquer',
thisDevice: 'Cet appareil',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['Un', 'Deux', 'Trois', 'Quatre', 'Cinq', 'Six', 'Sept', 'Huit', 'Neuf'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `${displayCount} autre(s) ${otherDeviceCount === 1 ? 'appareil' : 'appareils'}`;
@@ -1670,8 +1645,15 @@ const translations: TranslationDeepObject = {
backdropLabel: 'Arrière-plan de la fenêtre modale',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente de vous pour ajouter des dépenses.`;
@@ -1681,7 +1663,13 @@ const translations: TranslationDeepObject = {
return `En attente qu’un administrateur ajoute des dépenses.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vous soumettiez des dépenses.`;
@@ -1691,8 +1679,19 @@ const translations: TranslationDeepObject = {
return `En attente qu’un administrateur soumette des dépenses.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `Aucune autre action requise !`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => `Aucune autre action requise !`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vous ajoutiez un compte bancaire.`;
@@ -1702,11 +1701,17 @@ const translations: TranslationDeepObject = {
return `En attente qu’un administrateur ajoute un compte bancaire.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` le ${eta} de chaque mois` : ` ${eta}`;
}
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vos dépenses soient automatiquement soumises${formattedETA}.`;
@@ -1716,7 +1721,13 @@ const translations: TranslationDeepObject = {
return `En attente de la soumission automatique des dépenses d’un administrateur${formattedETA}.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vous corrigiez les problèmes.`;
@@ -1726,7 +1737,13 @@ const translations: TranslationDeepObject = {
return `En attente qu’un administrateur corrige les problèmes.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vous approuviez des dépenses.`;
@@ -1736,7 +1753,13 @@ const translations: TranslationDeepObject = {
return `En attente de l’approbation des dépenses par un administrateur.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vous exportiez cette note de frais.`;
@@ -1746,7 +1769,13 @@ const translations: TranslationDeepObject = {
return `En attente qu’un administrateur exporte cette note de frais.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vous payiez les dépenses.`;
@@ -1756,7 +1785,13 @@ const translations: TranslationDeepObject = {
return `En attente qu’un administrateur paie les dépenses.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `En attente que vous terminiez la configuration d’un compte bancaire professionnel.`;
@@ -1766,16 +1801,27 @@ const translations: TranslationDeepObject = {
return `En attente qu’un administrateur termine la configuration d’un compte bancaire professionnel.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: (
+ _actor: string,
+ _actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` le ${eta}` : ` ${eta}`;
}
return `En attente de la finalisation du paiement${formattedETA}.`;
},
- [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_: NextStepParams) =>
+ [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) =>
`Oups ! On dirait que vous soumettez cette note de frais à vous-même. Approuver vos propres notes de frais est interdit par votre espace de travail. Veuillez soumettre cette note de frais à quelqu’un d’autre ou contacter votre administrateur pour changer la personne à qui vous la soumettez.`,
},
+ /* eslint-enable @typescript-eslint/no-unused-vars */
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'bientôt',
[CONST.NEXT_STEP.ETA_KEY.TODAY]: 'plus tard aujourd’hui',
@@ -2716,10 +2762,10 @@ ${amount} pour ${merchant} - ${date}`,
getStarted: 'Commencer',
whatsYourName: 'Comment vous appelez-vous ?',
peopleYouMayKnow: 'Des personnes que vous connaissez probablement sont déjà ici ! Vérifiez votre adresse e-mail pour les rejoindre.',
- workspaceYouMayJoin: ({domain, email}: WorkspaceYouMayJoin) => `Quelqu’un de ${domain} a déjà créé un espace de travail. Veuillez saisir le code magique envoyé à ${email}.`,
+ workspaceYouMayJoin: (domain: string, email: string) => `Quelqu’un de ${domain} a déjà créé un espace de travail. Veuillez saisir le code magique envoyé à ${email}.`,
joinAWorkspace: 'Rejoindre un espace de travail',
listOfWorkspaces: 'Voici la liste des espaces de travail que vous pouvez rejoindre. Ne vous inquiétez pas, vous pourrez toujours les rejoindre plus tard si vous préférez.',
- workspaceMemberList: ({employeeCount, policyOwner}: WorkspaceMemberList) => `${employeeCount} membre${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
+ workspaceMemberList: (employeeCount: number, policyOwner: string) => `${employeeCount} membre${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
whereYouWork: 'Où travaillez-vous ?',
errorSelection: 'Sélectionnez une option pour continuer',
purpose: {
@@ -3093,8 +3139,7 @@ ${
},
resendValidationForm: {
linkHasBeenResent: 'Le lien a été renvoyé',
- weSentYouMagicSignInLink: ({login, loginType}: WeSentYouMagicSignInLinkParams) =>
- `J’ai envoyé un lien magique de connexion à ${login}. Veuillez consulter votre ${loginType} pour vous connecter.`,
+ weSentYouMagicSignInLink: (login: string, loginType: string) => `J’ai envoyé un lien magique de connexion à ${login}. Veuillez consulter votre ${loginType} pour vous connecter.`,
resendLink: 'Renvoyer le lien',
},
unlinkLoginForm: {
@@ -6407,7 +6452,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
upgradeToUnlock: 'Débloquer cette fonctionnalité',
completed: {
headline: `Vous avez mis à niveau votre espace de travail !`,
- successMessage: ({policyName, subscriptionLink}: UpgradeSuccessMessageParams) =>
+ successMessage: (policyName: string, subscriptionLink: string) =>
`Vous avez réussi à passer ${policyName} au plan Control ! Afficher votre abonnement pour plus de détails.`,
categorizeMessage: `Vous êtes passé avec succès au forfait Collect. Vous pouvez maintenant catégoriser vos dépenses !`,
travelMessage: `Vous êtes passé avec succès au plan Collect. Vous pouvez maintenant commencer à réserver et gérer vos voyages !`,
@@ -6805,13 +6850,12 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
: `a modifié l’aide à la description de la catégorie « ${categoryName} » en « ${newValue} » (auparavant « ${oldValue} »)`;
},
updateTagListName: (oldName: string, newName: string) => `a changé le nom de la liste de tags en « ${newName} » (précédemment « ${oldName} »)`,
- addTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `a ajouté le tag « ${tagName} » à la liste « ${tagListName} »`,
- updateTagName: ({tagListName, newName, oldName}: UpdatedPolicyTagNameParams) =>
- `a mis à jour la liste de tags « ${tagListName} » en remplaçant le tag « ${oldName} » par « ${newName} »`,
- updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? 'activé' : 'Désactivé'} l’étiquette « ${tagName} » sur la liste « ${tagListName} »`,
- deleteTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `a supprimé la balise « ${tagName} » de la liste « ${tagListName} »`,
- deleteMultipleTags: ({count, tagListName}: UpdatedPolicyTagParams) => `a supprimé les balises « ${count} » de la liste « ${tagListName} »`,
- updateTag: ({tagListName, newValue, tagName, updatedField, oldValue}: UpdatedPolicyTagFieldParams) => {
+ addTag: (tagListName: string, tagName?: string) => `a ajouté le tag « ${tagName} » à la liste « ${tagListName} »`,
+ updateTagName: (tagListName: string, newName: string, oldName: string) => `a mis à jour la liste de tags « ${tagListName} » en remplaçant le tag « ${oldName} » par « ${newName} »`,
+ updateTagEnabled: (tagListName: string, tagName?: string, enabled?: boolean) => `${enabled ? 'activé' : 'Désactivé'} l’étiquette « ${tagName} » sur la liste « ${tagListName} »`,
+ deleteTag: (tagListName: string, tagName?: string) => `a supprimé la balise « ${tagName} » de la liste « ${tagListName} »`,
+ deleteMultipleTags: (count?: string, tagListName?: string) => `a supprimé les balises « ${count} » de la liste « ${tagListName} »`,
+ updateTag: (tagListName: string, newValue: string, tagName: string, updatedField: string, oldValue?: string) => {
if (oldValue) {
return `a mis à jour le tag « ${tagName} » dans la liste « ${tagListName} » en modifiant ${updatedField} en « ${newValue} » (auparavant « ${oldValue} »)`;
}
@@ -6840,8 +6884,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
},
deleteCustomUnitRate: ({customUnitName, rateName}: AddOrDeletePolicyCustomUnitRateParams) => `a supprimé le taux « ${customUnitName} » « ${rateName} »`,
addedReportField: ({fieldType, fieldName}: AddedOrDeletedPolicyReportFieldParams) => `a ajouté le champ de note de frais ${fieldType} « ${fieldName} »`,
- updateReportFieldDefaultValue: ({defaultValue, fieldName}: UpdatedPolicyReportFieldDefaultValueParams) =>
- `définir la valeur par défaut du champ de note de frais « ${fieldName} » sur « ${defaultValue} »`,
+ updateReportFieldDefaultValue: (defaultValue?: string, fieldName?: string) => `définir la valeur par défaut du champ de note de frais « ${fieldName} » sur « ${defaultValue} »`,
addedReportFieldOption: (fieldName: string, optionName: string) => `a ajouté l’option « ${optionName} » au champ de note de frais « ${fieldName} »`,
removedReportFieldOption: (fieldName: string, optionName: string) => `a supprimé l’option « ${optionName} » du champ de note de frais « ${fieldName} »`,
updateReportFieldOptionDisabled: (fieldName: string, optionName: string, optionEnabled: boolean) =>
@@ -6853,7 +6896,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
return `${allEnabled ? 'Activé' : 'Désactivé'} l’option « ${optionName} » pour le champ de note de frais « ${fieldName} », rendant toutes les options ${allEnabled ? 'Activé' : 'Désactivé'}`;
},
deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `a supprimé le champ de note de frais ${fieldType} « ${fieldName} »`,
- preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) =>
+ preventSelfApproval: (oldValue: string, newValue: string) =>
`mis à jour « Empêcher l’auto-approbation » vers « ${newValue === 'true' ? 'Activé' : 'Désactivé'} » (auparavant « ${oldValue === 'true' ? 'Activé' : 'Désactivé'} »)`,
updateMonthlyOffset: (oldValue: string, newValue: string) => {
if (!oldValue) {
@@ -6995,7 +7038,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
oldValue
? `a modifié le site web de l'entreprise de facturation en « ${newValue} » (précédemment « ${oldValue} »)`
: `définir le site web de l’entreprise de la facture sur « ${newValue} »`,
- changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) =>
+ changedReimburser: (newReimburser: string, previousReimburser?: string) =>
previousReimburser ? `a modifié le payeur autorisé en « ${newReimburser} » (auparavant « ${previousReimburser} »)` : `a modifié le payeur autorisé en « ${newReimburser} »`,
updateReimbursementEnabled: (enabled: boolean) => `Remboursements ${enabled ? 'Activé' : 'Désactivé'}`,
updateCustomTaxName: ({oldName, newName}: UpdatedPolicyCustomTaxNameParams) => `a modifié le nom de taxe personnalisé en « ${newName} » (auparavant « ${oldName} »)`,
@@ -7003,9 +7046,9 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
`a modifié le taux de taxe par défaut de la devise de l'espace de travail en « ${newName} » (auparavant « ${oldName} »)`,
updateForeignCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyForeignCurrencyDefaultTaxParams) =>
`a modifié le taux de taxe par défaut en devise étrangère en « ${newName} » (auparavant « ${oldName} »)`,
- addTax: ({taxName}: UpdatedPolicyTaxParams) => `a ajouté la taxe « ${taxName} »`,
- deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `a supprimé la taxe « ${taxName} »`,
- updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => {
+ addTax: (taxName: string) => `a ajouté la taxe « ${taxName} »`,
+ deleteTax: (taxName: string) => `a supprimé la taxe « ${taxName} »`,
+ updateTax: (oldValue?: string | boolean | number, taxName?: string, updatedField?: string, newValue?: string | boolean | number) => {
if (!updatedField) {
return '';
}
@@ -7038,16 +7081,15 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
removedMaxExpenseAge: (oldValue: string) => `âge maximal de dépense supprimé (auparavant « ${oldValue} » jours)`,
updateCategories: (count: number) => `${count} catégories mises à jour`,
updateTagList: (tagListName: string) => `a mis à jour les tags dans la liste « ${tagListName} »`,
- updateTagListRequired: ({tagListsName, isRequired}: UpdatedPolicyTagListRequiredParams) =>
- `a modifié la liste de tags « ${tagListsName} » en ${isRequired ? 'obligatoire' : 'non obligatoire'}`,
+ updateTagListRequired: (tagListsName: string, isRequired: boolean) => `a modifié la liste de tags « ${tagListsName} » en ${isRequired ? 'obligatoire' : 'non obligatoire'}`,
importTags: 'tags importés depuis une feuille de calcul',
deletedAllTags: 'a supprimé tous les tags',
updateCustomUnitDefaultCategory: ({customUnitName, newValue, oldValue}: UpdatePolicyCustomUnitDefaultCategoryParams) =>
`a modifié la catégorie par défaut pour ${customUnitName} en « ${newValue} » ${oldValue ? `(auparavant « ${oldValue} »)` : ''}`,
importCustomUnitRates: (customUnitName: string) => `taux importés pour l’unité personnalisée « ${customUnitName} »`,
- updateCustomUnitSubRate: ({customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField}: UpdatedPolicyCustomUnitSubRateParams) =>
+ updateCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, customUnitSubRateName: string, oldValue: string, newValue: string, updatedField: string) =>
`a modifié le taux « ${customUnitName} », le sous-taux « ${customUnitRateName} », le sous-taux « ${customUnitSubRateName} » ${updatedField} en « ${newValue} » (auparavant « ${oldValue} »)`,
- removedCustomUnitSubRate: ({customUnitName, customUnitRateName, removedSubRateName}: RemovedPolicyCustomUnitSubRateParams) =>
+ removedCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, removedSubRateName: string) =>
`a supprimé le taux « ${customUnitName} », le sous-taux « ${customUnitRateName} », le sous-taux « ${removedSubRateName} »`,
addBudget: ({frequency, entityName, entityType, shared, individual, notificationThreshold}: AddBudgetParams) => {
const thresholdSuffix = typeof notificationThreshold === 'number' ? `avec un seuil de notification de « ${notificationThreshold}% »` : '';
@@ -7121,18 +7163,17 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
updatedTimeEnabled: (enabled?: boolean) => {
return `Suivi du temps ${enabled ? 'activé' : 'désactivé'}`;
},
- updatedTimeRate: ({newRate, oldRate}: UpdatedPolicyTimeRateParams) => {
+ updatedTimeRate: (newRate?: string, oldRate?: string) => {
return `a modifié le taux horaire à « ${newRate} » (auparavant « ${oldRate} »)`;
},
addedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `a ajouté « ${prohibitedExpense} » aux dépenses interdites`,
removedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `a supprimé « ${prohibitedExpense} » des dépenses interdites`,
- updatedReimbursementChoice: ({newReimbursementChoice, oldReimbursementChoice}: UpdatedPolicyReimbursementChoiceParams) =>
+ updatedReimbursementChoice: (newReimbursementChoice: string, oldReimbursementChoice: string) =>
`a modifié le mode de remboursement en « ${newReimbursementChoice} » (auparavant « ${oldReimbursementChoice} »)`,
setAutoJoin: ({enabled}: {enabled: boolean}) => `${enabled ? 'activé' : 'désactivé'} pré-approbation des demandes de rejoindre l’espace de travail`,
- updatedDefaultTitle: ({newDefaultTitle, oldDefaultTitle}: UpdatedPolicyDefaultTitleParams) =>
+ updatedDefaultTitle: (newDefaultTitle: string, oldDefaultTitle: string) =>
`a modifié la formule du nom de note de frais personnalisée en « ${newDefaultTitle} » (précédemment « ${oldDefaultTitle} »)`,
- updatedOwnership: ({oldOwnerEmail, oldOwnerName, policyName}: UpdatedPolicyOwnershipParams) =>
- `a pris la responsabilité de ${policyName} à la place de ${oldOwnerName} (${oldOwnerEmail})`,
+ updatedOwnership: (oldOwnerEmail: string, oldOwnerName: string, policyName: string) => `a pris la responsabilité de ${policyName} à la place de ${oldOwnerName} (${oldOwnerEmail})`,
updatedAutoHarvesting: (enabled: boolean) => `Soumission planifiée pour ${enabled ? 'activé' : 'désactivé'}`,
updatedIndividualBudgetNotification: ({
budgetAmount,
@@ -7146,20 +7187,32 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
userEmail,
awaitingApprovalSpend,
approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ }: {
+ budgetAmount: string;
+ budgetFrequency: string;
+ budgetName: string;
+ budgetTypeForNotificationMessage: string;
+ summaryLink?: string;
+ thresholdPercentage: number;
+ totalSpend: number;
+ unsubmittedSpend: number;
+ userEmail?: string;
+ awaitingApprovalSpend: number;
+ approvedReimbursedClosedSpend: number;
+ }) =>
`Attention ! Cet espace de travail a un budget ${budgetFrequency} de « ${budgetAmount} » pour le/la ${budgetTypeForNotificationMessage} « ${budgetName} ». ${userEmail} est actuellement à ${approvedReimbursedClosedSpend}, ce qui dépasse ${thresholdPercentage}% du budget. Il y a aussi ${awaitingApprovalSpend} en attente d’approbation, et ${unsubmittedSpend} qui n’a pas encore été soumise, pour un total de ${totalSpend}.${summaryLink ? `Voici une note de frais avec toutes ces dépenses pour vos dossiers !` : ''}`,
- updatedSharedBudgetNotification: ({
- budgetAmount,
- budgetFrequency,
- budgetName,
- budgetTypeForNotificationMessage,
- summaryLink,
- thresholdPercentage,
- totalSpend,
- unsubmittedSpend,
- awaitingApprovalSpend,
- approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ updatedSharedBudgetNotification: (
+ budgetAmount: string,
+ budgetFrequency: string,
+ budgetName: string,
+ budgetTypeForNotificationMessage: string,
+ summaryLink: string | undefined,
+ thresholdPercentage: number,
+ totalSpend: number,
+ unsubmittedSpend: number,
+ awaitingApprovalSpend: number,
+ approvedReimbursedClosedSpend: number,
+ ) =>
`Attention ! Cet espace de travail a un budget ${budgetFrequency} de « ${budgetAmount} » pour le/la ${budgetTypeForNotificationMessage} « ${budgetName} ». Vous en êtes actuellement à ${approvedReimbursedClosedSpend}, ce qui dépasse ${thresholdPercentage}% du budget. Il y a aussi ${awaitingApprovalSpend} en attente d’approbation et ${unsubmittedSpend} qui n’a pas encore été soumis, pour un total de ${totalSpend}. ${summaryLink ? `Voici une note de frais avec toutes ces dépenses pour vos dossiers !` : ''}`,
},
roomMembersPage: {
@@ -7915,7 +7968,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
overLimitAttendee: (formattedLimit: string) => `Montant dépassant la limite de ${formattedLimit}/personne`,
perDayLimit: (formattedLimit: string) => `Montant dépassant la limite quotidienne de catégorie de ${formattedLimit}/personne`,
receiptNotSmartScanned: 'Détails du reçu et de la dépense ajoutés manuellement.',
- receiptRequired: ({formattedLimit, category}: ViolationsReceiptRequiredParams) => {
+ receiptRequired: (formattedLimit?: string, category?: string) => {
if (formattedLimit && category) {
return `Reçu requis au-delà de la limite de catégorie de ${formattedLimit}`;
}
@@ -7928,7 +7981,7 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
return 'Reçu obligatoire';
},
itemizedReceiptRequired: (formattedLimit?: string) => `Reçu détaillé requis${formattedLimit ? `au-delà de ${formattedLimit}` : ''}`,
- prohibitedExpense: ({prohibitedExpenseTypes}: ViolationsProhibitedExpenseParams) => {
+ prohibitedExpense: (prohibitedExpenseTypes: string | string[]) => {
const preMessage = 'Dépense interdite :';
const getProhibitedExpenseTypeText = (prohibitedExpenseType: string) => {
switch (prohibitedExpenseType) {
@@ -7959,7 +8012,17 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
},
customRules: (message: string) => message,
reviewRequired: 'Examen requis',
- rter: ({brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash}: ViolationsRterParams) => {
+ rter: (
+ brokenBankConnection: boolean,
+ isAdmin: boolean,
+ isTransactionOlderThan7Days: boolean,
+ member?: string,
+ rterType?: ValueOf,
+ companyCardPageURL?: string,
+ connectionLink?: string,
+ isPersonalCard?: boolean,
+ isMarkAsCash?: boolean,
+ ) => {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Impossible d’apparier automatiquement le reçu en raison d’une connexion bancaire rompue.';
}
@@ -7988,10 +8051,10 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
markAsCashToIgnore: 'Marquer comme paiement en espèces pour l’ignorer et demander un paiement.',
smartscanFailed: ({canEdit = true}) => `L’analyse du reçu a échoué.${canEdit ? 'Saisir les détails manuellement.' : ''}`,
receiptGeneratedWithAI: 'Reçu potentiellement généré par IA',
- someTagLevelsRequired: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'Tag'} manquant`,
- tagOutOfPolicy: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'Tag'} n’est plus valide`,
+ someTagLevelsRequired: (tagName?: string) => `${tagName ?? 'Tag'} manquant`,
+ tagOutOfPolicy: (tagName?: string) => `${tagName ?? 'Tag'} n’est plus valide`,
taxAmountChanged: 'Le montant de la taxe a été modifié',
- taxOutOfPolicy: ({taxName}: ViolationsTaxOutOfPolicyParams = {}) => `${taxName ?? 'Tax'} n’est plus valide`,
+ taxOutOfPolicy: (taxName?: string) => `${taxName ?? 'Tax'} n’est plus valide`,
taxRateChanged: 'Le taux de taxe a été modifié',
taxRequired: 'Taux de taxe manquant',
none: 'Aucun',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index e3696ebd0195a..b0cab990acc87 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -11,6 +11,7 @@
*/
import {CONST as COMMON_CONST} from 'expensify-common';
import startCase from 'lodash/startCase';
+import type {ValueOf} from 'type-fest';
import type {OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
import StringUtils from '@libs/StringUtils';
import dedent from '@libs/StringUtils/dedent';
@@ -40,14 +41,11 @@ import type {
MarkReimbursedFromIntegrationParams,
MissingPropertyParams,
MovedFromPersonalSpaceParams,
- MultifactorAuthenticationTranslationParams,
- NextStepParams,
NotAllowedExtensionParams,
OptionalParam,
PaidElsewhereParams,
ParentNavigationSummaryParams,
RemovedFromApprovalWorkflowParams,
- RemovedPolicyCustomUnitSubRateParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams,
ReportArchiveReasonsMergedParams,
@@ -60,43 +58,20 @@ import type {
UnshareParams,
UpdatedBudgetParams,
UpdatedPolicyApprovalRuleParams,
- UpdatedPolicyBudgetNotificationParams,
UpdatedPolicyCategoryMaxAmountNoReceiptParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyCustomTaxNameParams,
- UpdatedPolicyCustomUnitSubRateParams,
- UpdatedPolicyDefaultTitleParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
UpdatedPolicyManualApprovalThresholdParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyReimburserParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTimeRateParams,
UpdatedTheDistanceMerchantParams,
UpdatedTheRequestParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdateRoleParams,
- UpgradeSuccessMessageParams,
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsProhibitedExpenseParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
WorkspaceLockedPlanTypeParams,
- WorkspaceMemberList,
- WorkspaceYouMayJoin,
YourPlanPriceParams,
} from './params';
import type {TranslationDeepObject} from './types';
@@ -652,8 +627,8 @@ const translations: TranslationDeepObject = {
biometricsTest: {
biometricsTest: 'Test biometrico',
authenticationSuccessful: 'Autenticazione riuscita',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `Hai effettuato l’autenticazione con successo usando ${authType}.`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `Dati biometrici (${status})`,
+ successfullyAuthenticatedUsing: (authType?: string) => `Hai effettuato l’autenticazione con successo usando ${authType}.`,
+ troubleshootBiometricsStatus: ({status}: {status?: string}) => `Dati biometrici (${status})`,
yourAttemptWasUnsuccessful: 'Il tentativo di autenticazione non è andato a buon fine.',
youCouldNotBeAuthenticated: 'Autenticazione non riuscita',
areYouSureToReject: 'Sei sicuro? Il tentativo di autenticazione verrà rifiutato se chiudi questa schermata.',
@@ -705,7 +680,7 @@ const translations: TranslationDeepObject = {
confirmationPromptAll: 'Sei sicuro? Avrai bisogno di un codice magico per la prossima verifica su qualsiasi dispositivo.',
ctaAll: 'Revoca tutto',
thisDevice: 'Questo dispositivo',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['Uno', 'Due', 'Tre', 'Quattro', 'Cinque', 'Sei', 'Sette', 'Otto', 'Nove'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `${displayCount} altro ${otherDeviceCount === 1 ? 'dispositivo' : 'dispositivi'}`;
@@ -1663,8 +1638,15 @@ const translations: TranslationDeepObject = {
backdropLabel: 'Sfondo modale',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu aggiunga delle spese.`;
@@ -1674,7 +1656,13 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore aggiunga delle spese.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu invii le note spese.`;
@@ -1684,8 +1672,19 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore invii le spese.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `Nessun’altra azione richiesta!`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => `Nessun’altra azione richiesta!`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu aggiunga un conto bancario.`;
@@ -1695,11 +1694,17 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore aggiunga un conto bancario.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` il ${eta} di ogni mese` : ` ${eta}`;
}
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che le tue spese vengano inviate automaticamente${formattedETA}.`;
@@ -1709,7 +1714,13 @@ const translations: TranslationDeepObject = {
return `In attesa che le note spese di un amministratore vengano inviate automaticamente${formattedETA}.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu risolva i problemi.`;
@@ -1719,7 +1730,13 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore risolva i problemi.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu approvi le spese.`;
@@ -1729,7 +1746,13 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore approvi le spese.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu esporti questo report.`;
@@ -1739,7 +1762,13 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore esporti questo resoconto.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu rimborsi le spese.`;
@@ -1749,7 +1778,13 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore rimborsi le spese.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In attesa che tu completi la configurazione di un conto bancario aziendale.`;
@@ -1759,16 +1794,27 @@ const translations: TranslationDeepObject = {
return `In attesa che un amministratore completi la configurazione di un conto bancario aziendale.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: (
+ _actor: string,
+ _actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` entro le ${eta}` : ` ${eta}`;
}
return `In attesa che il pagamento venga completato${formattedETA}.`;
},
- [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_: NextStepParams) =>
+ [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) =>
`Ops! Sembra che tu stia inviando il report a te stessə. L’approvazione dei propri report è vietata nel tuo spazio di lavoro. Invia questo report a un’altra persona oppure contatta il tuo amministratore per cambiare la persona a cui lo invii.`,
},
+ /* eslint-enable @typescript-eslint/no-unused-vars */
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'presto',
[CONST.NEXT_STEP.ETA_KEY.TODAY]: 'più tardi oggi',
@@ -2703,10 +2749,10 @@ ${amount} per ${merchant} - ${date}`,
getStarted: 'Inizia',
whatsYourName: 'Come ti chiami?',
peopleYouMayKnow: 'Alcune persone che potresti conoscere sono già qui! Verifica la tua email per unirti a loro.',
- workspaceYouMayJoin: ({domain, email}: WorkspaceYouMayJoin) => `Qualcuno di ${domain} ha già creato uno spazio di lavoro. Inserisci il codice magico inviato a ${email}.`,
+ workspaceYouMayJoin: (domain: string, email: string) => `Qualcuno di ${domain} ha già creato uno spazio di lavoro. Inserisci il codice magico inviato a ${email}.`,
joinAWorkspace: 'Unisciti a uno spazio di lavoro',
listOfWorkspaces: "Ecco l'elenco degli spazi di lavoro a cui puoi unirti. Non preoccuparti, potrai sempre unirti anche in un secondo momento, se preferisci.",
- workspaceMemberList: ({employeeCount, policyOwner}: WorkspaceMemberList) => `${employeeCount} membro${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
+ workspaceMemberList: (employeeCount: number, policyOwner: string) => `${employeeCount} membro${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
whereYouWork: 'Dove lavori?',
errorSelection: 'Seleziona un’opzione per procedere',
purpose: {
@@ -3079,7 +3125,7 @@ ${
},
resendValidationForm: {
linkHasBeenResent: 'Il link è stato reinviato',
- weSentYouMagicSignInLink: ({login, loginType}: WeSentYouMagicSignInLinkParams) => `Ho inviato un link magico di accesso a ${login}. Controlla il tuo ${loginType} per accedere.`,
+ weSentYouMagicSignInLink: (login: string, loginType: string) => `Ho inviato un link magico di accesso a ${login}. Controlla il tuo ${loginType} per accedere.`,
resendLink: 'Invia di nuovo il link',
},
unlinkLoginForm: {
@@ -6370,7 +6416,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
upgradeToUnlock: 'Sblocca questa funzionalità',
completed: {
headline: `Hai aggiornato il tuo spazio di lavoro!`,
- successMessage: ({policyName, subscriptionLink}: UpgradeSuccessMessageParams) =>
+ successMessage: (policyName: string, subscriptionLink: string) =>
`Hai effettuato l'upgrade di ${policyName} al piano Control! Visualizza il tuo abbonamento per maggiori dettagli.`,
categorizeMessage: `Hai eseguito l’upgrade al piano Collect. Ora puoi categorizzare le tue spese!`,
travelMessage: `Hai eseguito correttamente l’upgrade al piano Collect. Ora puoi iniziare a prenotare e gestire i viaggi!`,
@@ -6768,12 +6814,12 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
: `ha modificato il suggerimento della descrizione della categoria "${categoryName}" in “${newValue}” (in precedenza “${oldValue}”)`;
},
updateTagListName: (oldName: string, newName: string) => `ha modificato il nome dell’elenco di tag in "${newName}" (in precedenza "${oldName}")`,
- addTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `ha aggiunto l’etichetta "${tagName}" all’elenco "${tagListName}"`,
- updateTagName: ({tagListName, newName, oldName}: UpdatedPolicyTagNameParams) => `ha aggiornato l'elenco dei tag "${tagListName}" cambiando il tag "${oldName}" in "${newName}"`,
- updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? 'abilitato' : 'disabilitato'} il tag "${tagName}" nella lista "${tagListName}"`,
- deleteTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `ha rimosso il tag "${tagName}" dall'elenco "${tagListName}"`,
- deleteMultipleTags: ({count, tagListName}: UpdatedPolicyTagParams) => `rimosse le etichette "${count}" dall’elenco "${tagListName}"`,
- updateTag: ({tagListName, newValue, tagName, updatedField, oldValue}: UpdatedPolicyTagFieldParams) => {
+ addTag: (tagListName: string, tagName?: string) => `ha aggiunto l’etichetta "${tagName}" all’elenco "${tagListName}"`,
+ updateTagName: (tagListName: string, newName: string, oldName: string) => `ha aggiornato l'elenco dei tag "${tagListName}" cambiando il tag "${oldName}" in "${newName}"`,
+ updateTagEnabled: (tagListName: string, tagName?: string, enabled?: boolean) => `${enabled ? 'abilitato' : 'disabilitato'} il tag "${tagName}" nella lista "${tagListName}"`,
+ deleteTag: (tagListName: string, tagName?: string) => `ha rimosso il tag "${tagName}" dall'elenco "${tagListName}"`,
+ deleteMultipleTags: (count?: string, tagListName?: string) => `rimosse le etichette "${count}" dall’elenco "${tagListName}"`,
+ updateTag: (tagListName: string, newValue: string, tagName: string, updatedField: string, oldValue?: string) => {
if (oldValue) {
return `ha aggiornato l’etichetta "${tagName}" nell’elenco "${tagListName}" cambiando ${updatedField} in "${newValue}" (precedentemente "${oldValue}")`;
}
@@ -6802,8 +6848,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
},
deleteCustomUnitRate: ({customUnitName, rateName}: AddOrDeletePolicyCustomUnitRateParams) => `ha rimosso la tariffa "${rateName}" per l'unità personalizzata "${customUnitName}"`,
addedReportField: ({fieldType, fieldName}: AddedOrDeletedPolicyReportFieldParams) => `aggiunto il campo di report ${fieldType} "${fieldName}"`,
- updateReportFieldDefaultValue: ({defaultValue, fieldName}: UpdatedPolicyReportFieldDefaultValueParams) =>
- `imposta il valore predefinito del campo report "${fieldName}" su "${defaultValue}"`,
+ updateReportFieldDefaultValue: (defaultValue?: string, fieldName?: string) => `imposta il valore predefinito del campo report "${fieldName}" su "${defaultValue}"`,
addedReportFieldOption: (fieldName: string, optionName: string) => `ha aggiunto l’opzione «${optionName}» al campo del rendiconto «${fieldName}»`,
removedReportFieldOption: (fieldName: string, optionName: string) => `ha rimosso l’opzione «${optionName}» dal campo del report «${fieldName}»`,
updateReportFieldOptionDisabled: (fieldName: string, optionName: string, optionEnabled: boolean) =>
@@ -6815,7 +6860,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
return `${allEnabled ? 'abilitato' : 'disattivato'} l’opzione “${optionName}” per il campo del report “${fieldName}”, rendendo tutte le opzioni ${allEnabled ? 'abilitato' : 'disattivato'}`;
},
deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `ha rimosso il campo del report ${fieldType} "${fieldName}"`,
- preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) =>
+ preventSelfApproval: (oldValue: string, newValue: string) =>
`aggiornato "Impedisci auto-approvazione" a "${newValue === 'true' ? 'Abilitato' : 'Disattivato'}" (precedentemente "${oldValue === 'true' ? 'Abilitato' : 'Disattivato'}")`,
updateMonthlyOffset: (oldValue: string, newValue: string) => {
if (!oldValue) {
@@ -6957,7 +7002,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
oldValue
? `ha modificato il sito web dell’azienda in fattura in "${newValue}" (precedentemente "${oldValue}")`
: `imposta il sito web dell’azienda della fattura su "${newValue}"`,
- changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) =>
+ changedReimburser: (newReimburser: string, previousReimburser?: string) =>
previousReimburser
? `ha modificato il pagatore autorizzato in "${newReimburser}" (in precedenza "${previousReimburser}")`
: `ha modificato il pagatore autorizzato in "${newReimburser}"`,
@@ -6967,9 +7012,9 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
`ha modificato l'aliquota fiscale predefinita della valuta dello spazio di lavoro in "${newName}" (in precedenza "${oldName}")`,
updateForeignCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyForeignCurrencyDefaultTaxParams) =>
`ha modificato l'aliquota fiscale predefinita per valuta estera in "${newName}" (in precedenza "${oldName}")`,
- addTax: ({taxName}: UpdatedPolicyTaxParams) => `ha aggiunto l’imposta “${taxName}”`,
- deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `ha rimosso l'imposta "${taxName}"`,
- updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => {
+ addTax: (taxName: string) => `ha aggiunto l’imposta “${taxName}”`,
+ deleteTax: (taxName: string) => `ha rimosso l'imposta "${taxName}"`,
+ updateTax: (oldValue?: string | boolean | number, taxName?: string, updatedField?: string, newValue?: string | boolean | number) => {
if (!updatedField) {
return '';
}
@@ -7002,16 +7047,15 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
removedMaxExpenseAge: (oldValue: string) => `età massima spesa rimossa (precedentemente "${oldValue}" giorni)`,
updateCategories: (count: number) => `categorie aggiornate: ${count}`,
updateTagList: (tagListName: string) => `tag aggiornati nell’elenco "${tagListName}"`,
- updateTagListRequired: ({tagListsName, isRequired}: UpdatedPolicyTagListRequiredParams) =>
- `ha modificato l’elenco tag "${tagListsName}" in ${isRequired ? 'obbligatorio' : 'non obbligatorio'}`,
+ updateTagListRequired: (tagListsName: string, isRequired: boolean) => `ha modificato l’elenco tag "${tagListsName}" in ${isRequired ? 'obbligatorio' : 'non obbligatorio'}`,
importTags: 'tag importati da un foglio di calcolo',
deletedAllTags: 'ha eliminato tutti i tag',
updateCustomUnitDefaultCategory: ({customUnitName, newValue, oldValue}: UpdatePolicyCustomUnitDefaultCategoryParams) =>
`ha cambiato la categoria predefinita di ${customUnitName} in "${newValue}" ${oldValue ? `(precedentemente "${oldValue}")` : ''}`,
importCustomUnitRates: (customUnitName: string) => `tariffe importate per l'unità personalizzata "${customUnitName}"`,
- updateCustomUnitSubRate: ({customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField}: UpdatedPolicyCustomUnitSubRateParams) =>
+ updateCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, customUnitSubRateName: string, oldValue: string, newValue: string, updatedField: string) =>
`ha modificato l’aliquota di "${customUnitName}", tariffa "${customUnitRateName}", sotto-tariffa "${customUnitSubRateName}" ${updatedField} in "${newValue}" (precedentemente "${oldValue}")`,
- removedCustomUnitSubRate: ({customUnitName, customUnitRateName, removedSubRateName}: RemovedPolicyCustomUnitSubRateParams) =>
+ removedCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, removedSubRateName: string) =>
`rimossa tariffa "${customUnitName}" tariffa "${customUnitRateName}" sottotariffa "${removedSubRateName}"`,
addBudget: ({frequency, entityName, entityType, shared, individual, notificationThreshold}: AddBudgetParams) => {
const thresholdSuffix = typeof notificationThreshold === 'number' ? `con soglia di notifica pari al "${notificationThreshold}%"` : '';
@@ -7085,17 +7129,17 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
updatedTimeEnabled: (enabled?: boolean) => {
return `${enabled ? 'abilitato' : 'disabilitato'} monitoraggio del tempo`;
},
- updatedTimeRate: ({newRate, oldRate}: UpdatedPolicyTimeRateParams) => {
+ updatedTimeRate: (newRate?: string, oldRate?: string) => {
return `ha modificato la tariffa oraria in "${newRate}" (in precedenza "${oldRate}")`;
},
addedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `ha aggiunto "${prohibitedExpense}" alle spese vietate`,
removedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `ha rimosso "${prohibitedExpense}" dalle spese vietate`,
- updatedReimbursementChoice: ({newReimbursementChoice, oldReimbursementChoice}: UpdatedPolicyReimbursementChoiceParams) =>
+ updatedReimbursementChoice: (newReimbursementChoice: string, oldReimbursementChoice: string) =>
`ha cambiato il metodo di rimborso in "${newReimbursementChoice}" (in precedenza "${oldReimbursementChoice}")`,
setAutoJoin: ({enabled}: {enabled: boolean}) => `${enabled ? 'abilitato' : 'disabilitato'} pre-approvazione delle richieste di adesione allo spazio di lavoro`,
- updatedDefaultTitle: ({newDefaultTitle, oldDefaultTitle}: UpdatedPolicyDefaultTitleParams) =>
+ updatedDefaultTitle: (newDefaultTitle: string, oldDefaultTitle: string) =>
`ha modificato la formula del nome del report personalizzato in "${newDefaultTitle}" (in precedenza "${oldDefaultTitle}")`,
- updatedOwnership: ({oldOwnerEmail, oldOwnerName, policyName}: UpdatedPolicyOwnershipParams) => `ha assunto la proprietà di ${policyName} da ${oldOwnerName} (${oldOwnerEmail})`,
+ updatedOwnership: (oldOwnerEmail: string, oldOwnerName: string, policyName: string) => `ha assunto la proprietà di ${policyName} da ${oldOwnerName} (${oldOwnerEmail})`,
updatedAutoHarvesting: (enabled: boolean) => `Invio pianificato ${enabled ? 'abilitato' : 'disabilitato'}`,
updatedIndividualBudgetNotification: ({
budgetAmount,
@@ -7109,20 +7153,32 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
userEmail,
awaitingApprovalSpend,
approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ }: {
+ budgetAmount: string;
+ budgetFrequency: string;
+ budgetName: string;
+ budgetTypeForNotificationMessage: string;
+ summaryLink?: string;
+ thresholdPercentage: number;
+ totalSpend: number;
+ unsubmittedSpend: number;
+ userEmail?: string;
+ awaitingApprovalSpend: number;
+ approvedReimbursedClosedSpend: number;
+ }) =>
`Attenzione! Questo spazio di lavoro ha un budget ${budgetFrequency} di “${budgetAmount}” per il/la ${budgetTypeForNotificationMessage} “${budgetName}”. ${userEmail} è attualmente a ${approvedReimbursedClosedSpend}, che supera il ${thresholdPercentage}% del budget. Ci sono anche ${awaitingApprovalSpend} in attesa di approvazione e ${unsubmittedSpend} non ancora inviati, per un totale di ${totalSpend}.${summaryLink ? `Ecco un report con tutte quelle spese per i tuoi archivi!` : ''}`,
- updatedSharedBudgetNotification: ({
- budgetAmount,
- budgetFrequency,
- budgetName,
- budgetTypeForNotificationMessage,
- summaryLink,
- thresholdPercentage,
- totalSpend,
- unsubmittedSpend,
- awaitingApprovalSpend,
- approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ updatedSharedBudgetNotification: (
+ budgetAmount: string,
+ budgetFrequency: string,
+ budgetName: string,
+ budgetTypeForNotificationMessage: string,
+ summaryLink: string | undefined,
+ thresholdPercentage: number,
+ totalSpend: number,
+ unsubmittedSpend: number,
+ awaitingApprovalSpend: number,
+ approvedReimbursedClosedSpend: number,
+ ) =>
`Attenzione! Questo spazio di lavoro ha un budget ${budgetFrequency} di "${budgetAmount}" per il ${budgetTypeForNotificationMessage} "${budgetName}". Al momento sei a ${approvedReimbursedClosedSpend}, che supera il ${thresholdPercentage}% del budget. Ci sono anche ${awaitingApprovalSpend} in attesa di approvazione e ${unsubmittedSpend} non ancora inviati, per un totale di ${totalSpend}. ${summaryLink ? `Ecco un resoconto con tutte quelle spese per i tuoi archivi!` : ''}`,
},
roomMembersPage: {
@@ -7879,7 +7935,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
overLimitAttendee: (formattedLimit: string) => `Importo oltre il limite di ${formattedLimit}/persona`,
perDayLimit: (formattedLimit: string) => `Importo oltre il limite giornaliero di categoria di ${formattedLimit}/persona`,
receiptNotSmartScanned: 'Dettagli di ricevuta e spesa aggiunti manualmente.',
- receiptRequired: ({formattedLimit, category}: ViolationsReceiptRequiredParams) => {
+ receiptRequired: (formattedLimit?: string, category?: string) => {
if (formattedLimit && category) {
return `Ricevuta richiesta oltre il limite di categoria di ${formattedLimit}`;
}
@@ -7892,7 +7948,7 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
return 'Ricevuta obbligatoria';
},
itemizedReceiptRequired: (formattedLimit?: string) => `Ricevuta dettagliata richiesta${formattedLimit ? `oltre ${formattedLimit}` : ''}`,
- prohibitedExpense: ({prohibitedExpenseTypes}: ViolationsProhibitedExpenseParams) => {
+ prohibitedExpense: (prohibitedExpenseTypes: string | string[]) => {
const preMessage = 'Spesa vietata:';
const getProhibitedExpenseTypeText = (prohibitedExpenseType: string) => {
switch (prohibitedExpenseType) {
@@ -7923,7 +7979,17 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
},
customRules: (message: string) => message,
reviewRequired: 'Revisione richiesta',
- rter: ({brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash}: ViolationsRterParams) => {
+ rter: (
+ brokenBankConnection: boolean,
+ isAdmin: boolean,
+ isTransactionOlderThan7Days: boolean,
+ member?: string,
+ rterType?: ValueOf,
+ companyCardPageURL?: string,
+ connectionLink?: string,
+ isPersonalCard?: boolean,
+ isMarkAsCash?: boolean,
+ ) => {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Impossibile abbinare automaticamente la ricevuta a causa di un problema di connessione bancaria.';
}
@@ -7952,10 +8018,10 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
markAsCashToIgnore: 'Segna come contante da ignorare e richiedi il pagamento.',
smartscanFailed: ({canEdit = true}) => `Scansione della ricevuta non riuscita.${canEdit ? 'Inserisci i dettagli manualmente.' : ''}`,
receiptGeneratedWithAI: 'Ricevuta potenzialmente generata dall’IA',
- someTagLevelsRequired: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `Manca ${tagName ?? 'Etichetta'}`,
- tagOutOfPolicy: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'Etichetta'} non è più valido`,
+ someTagLevelsRequired: (tagName?: string) => `Manca ${tagName ?? 'Etichetta'}`,
+ tagOutOfPolicy: (tagName?: string) => `${tagName ?? 'Etichetta'} non è più valido`,
taxAmountChanged: 'L’importo dell’imposta è stato modificato',
- taxOutOfPolicy: ({taxName}: ViolationsTaxOutOfPolicyParams = {}) => `${taxName ?? 'Imposta'} non è più valido`,
+ taxOutOfPolicy: (taxName?: string) => `${taxName ?? 'Imposta'} non è più valido`,
taxRateChanged: 'L’aliquota fiscale è stata modificata',
taxRequired: 'Aliquota fiscale mancante',
none: 'Nessuno',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index ef4ebe066a14e..a3eba53dc5f6a 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -11,6 +11,7 @@
*/
import {CONST as COMMON_CONST} from 'expensify-common';
import startCase from 'lodash/startCase';
+import type {ValueOf} from 'type-fest';
import type {OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
import StringUtils from '@libs/StringUtils';
import dedent from '@libs/StringUtils/dedent';
@@ -40,14 +41,11 @@ import type {
MarkReimbursedFromIntegrationParams,
MissingPropertyParams,
MovedFromPersonalSpaceParams,
- MultifactorAuthenticationTranslationParams,
- NextStepParams,
NotAllowedExtensionParams,
OptionalParam,
PaidElsewhereParams,
ParentNavigationSummaryParams,
RemovedFromApprovalWorkflowParams,
- RemovedPolicyCustomUnitSubRateParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams,
ReportArchiveReasonsMergedParams,
@@ -60,43 +58,20 @@ import type {
UnshareParams,
UpdatedBudgetParams,
UpdatedPolicyApprovalRuleParams,
- UpdatedPolicyBudgetNotificationParams,
UpdatedPolicyCategoryMaxAmountNoReceiptParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyCustomTaxNameParams,
- UpdatedPolicyCustomUnitSubRateParams,
- UpdatedPolicyDefaultTitleParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
UpdatedPolicyManualApprovalThresholdParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyReimburserParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTimeRateParams,
UpdatedTheDistanceMerchantParams,
UpdatedTheRequestParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdateRoleParams,
- UpgradeSuccessMessageParams,
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsProhibitedExpenseParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
WorkspaceLockedPlanTypeParams,
- WorkspaceMemberList,
- WorkspaceYouMayJoin,
YourPlanPriceParams,
} from './params';
import type {TranslationDeepObject} from './types';
@@ -651,8 +626,8 @@ const translations: TranslationDeepObject = {
biometricsTest: {
biometricsTest: '生体認証テスト',
authenticationSuccessful: '認証に成功しました',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `${authType} を使用して正常に認証されました。`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `生体認証(${status})`,
+ successfullyAuthenticatedUsing: (authType?: string) => `${authType} を使用して正常に認証されました。`,
+ troubleshootBiometricsStatus: ({status}: {status?: string}) => `生体認証(${status})`,
yourAttemptWasUnsuccessful: '認証を試みましたが、成功しませんでした。',
youCouldNotBeAuthenticated: '認証できませんでした',
areYouSureToReject: '本当に終了しますか?この画面を閉じると、認証の試行は拒否されます。',
@@ -702,7 +677,7 @@ const translations: TranslationDeepObject = {
confirmationPromptAll: '本当に実行してよろしいですか?今後どの端末でも、次回の認証にはマジックコードが必要になります。',
ctaAll: 'すべて取り消す',
thisDevice: 'このデバイス',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['1', '二', '三', '四', '五', '六', '七', '8', '9'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `その他${displayCount}件の${otherDeviceCount === 1 ? 'デバイス' : 'デバイス'}`;
@@ -1652,8 +1627,15 @@ const translations: TranslationDeepObject = {
backdropLabel: 'モーダルの背景',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `経費の追加をあなたが行うのを待機中です。`;
@@ -1663,7 +1645,13 @@ const translations: TranslationDeepObject = {
return `管理者が経費を追加するのを待機しています。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `経費の提出をあなたが行うのを待っています。`;
@@ -1673,8 +1661,19 @@ const translations: TranslationDeepObject = {
return `管理者が経費を送信するのを待機中です。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `これ以上の操作は不要です。`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => `これ以上の操作は不要です。`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `銀行口座の追加をあなたが行うのを待っています。`;
@@ -1684,11 +1683,17 @@ const translations: TranslationDeepObject = {
return `管理者が銀行口座を追加するのを待機しています。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` 毎月${eta}に` : ` ${eta}`;
}
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `あなたの経費が自動送信されるまでお待ちください${formattedETA}。`;
@@ -1698,7 +1703,13 @@ const translations: TranslationDeepObject = {
return `管理者の経費が自動送信されるのを待機中です${formattedETA}。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `問題の修正をあなたが行うのを待っています。`;
@@ -1708,7 +1719,13 @@ const translations: TranslationDeepObject = {
return `管理者が問題を修正するのを待機しています。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `経費の承認をあなたが行うのを待っています。`;
@@ -1718,7 +1735,13 @@ const translations: TranslationDeepObject = {
return `管理者が経費を承認するのを待機しています。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `このレポートのエクスポートをあなたが行うのを待っています。`;
@@ -1728,7 +1751,13 @@ const translations: TranslationDeepObject = {
return `管理者がこのレポートをエクスポートするのを待っています。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `経費の支払いをあなたが行うのを待っています。`;
@@ -1738,7 +1767,13 @@ const translations: TranslationDeepObject = {
return `管理者が経費を支払うのを待っています。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `ビジネス銀行口座の設定が完了するのをあなたが行うのを待っています。`;
@@ -1748,16 +1783,27 @@ const translations: TranslationDeepObject = {
return `管理者がビジネス銀行口座の設定を完了するのを待っています。`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: (
+ _actor: string,
+ _actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` ${eta}まで` : ` ${eta}`;
}
return `支払いの完了を待機しています${formattedETA}。`;
},
- [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_: NextStepParams) =>
+ [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) =>
`おっと!自分自身に提出しようとしているようです。自分のレポートを承認することは、ワークスペースのルールで禁止されています。このレポートは他の人に提出するか、提出先を変更してもらうよう管理者に連絡してください。`,
},
+ /* eslint-enable @typescript-eslint/no-unused-vars */
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'まもなく',
[CONST.NEXT_STEP.ETA_KEY.TODAY]: '今日の後ほど',
@@ -2686,10 +2732,10 @@ ${date} の ${merchant} への ${amount}`,
getStarted: 'はじめる',
whatsYourName: 'あなたの名前は何ですか?',
peopleYouMayKnow: '知り合いがすでにここに参加しています!一緒に参加するには、メールアドレスを確認してください。',
- workspaceYouMayJoin: ({domain, email}: WorkspaceYouMayJoin) => `${domain} のユーザーがすでにワークスペースを作成しています。${email} に送信されたマジックコードを入力してください。`,
+ workspaceYouMayJoin: (domain: string, email: string) => `${domain} のユーザーがすでにワークスペースを作成しています。${email} に送信されたマジックコードを入力してください。`,
joinAWorkspace: 'ワークスペースに参加',
listOfWorkspaces: '参加できるワークスペースの一覧です。今参加しなくても、後からいつでも参加できます。',
- workspaceMemberList: ({employeeCount, policyOwner}: WorkspaceMemberList) => `${employeeCount}人のメンバー${employeeCount > 1 ? 's' : ''}・${policyOwner}`,
+ workspaceMemberList: (employeeCount: number, policyOwner: string) => `${employeeCount}人のメンバー${employeeCount > 1 ? 's' : ''}・${policyOwner}`,
whereYouWork: '勤務先はどこですか?',
errorSelection: '次に進むオプションを選択してください',
purpose: {
@@ -3062,8 +3108,7 @@ ${
},
resendValidationForm: {
linkHasBeenResent: 'リンクを再送信しました',
- weSentYouMagicSignInLink: ({login, loginType}: WeSentYouMagicSignInLinkParams) =>
- `${login} にマジックサインインリンクを送信しました。サインインするには ${loginType} を確認してください。`,
+ weSentYouMagicSignInLink: (login: string, loginType: string) => `${login} にマジックサインインリンクを送信しました。サインインするには ${loginType} を確認してください。`,
resendLink: 'リンクを再送',
},
unlinkLoginForm: {
@@ -6309,7 +6354,7 @@ ${reportName}
upgradeToUnlock: 'この機能を有効にする',
completed: {
headline: `ワークスペースをアップグレードしました!`,
- successMessage: ({policyName, subscriptionLink}: UpgradeSuccessMessageParams) =>
+ successMessage: (policyName: string, subscriptionLink: string) =>
`${policyName}をControlプランにアップグレードしました!詳しくはサブスクリプションを表示してください。`,
categorizeMessage: `Collectプランへのアップグレードが完了しました。これで経費をカテゴリー分けできるようになりました!`,
travelMessage: `Collectプランへのアップグレードが完了しました。さっそく出張の予約や管理を始めましょう!`,
@@ -6702,12 +6747,12 @@ ${reportName}
: `「${categoryName}」カテゴリの説明のヒントを「${newValue}」(以前は「${oldValue}」)に変更しました`;
},
updateTagListName: (oldName: string, newName: string) => `タグリスト名を「${newName}」(以前は「${oldName}」)に変更しました`,
- addTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `タグ「${tagName}」をリスト「${tagListName}」に追加しました`,
- updateTagName: ({tagListName, newName, oldName}: UpdatedPolicyTagNameParams) => `タグリスト「${tagListName}」でタグ「${oldName}」を「${newName}」に変更して更新しました`,
- updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? '有効' : '無効'} リスト「${tagListName}」のタグ「${tagName}」`,
- deleteTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `タグ「${tagName}」をリスト「${tagListName}」から削除しました`,
- deleteMultipleTags: ({count, tagListName}: UpdatedPolicyTagParams) => `リスト「${tagListName}」からタグ「${count}」個を削除しました`,
- updateTag: ({tagListName, newValue, tagName, updatedField, oldValue}: UpdatedPolicyTagFieldParams) => {
+ addTag: (tagListName: string, tagName?: string) => `タグ「${tagName}」をリスト「${tagListName}」に追加しました`,
+ updateTagName: (tagListName: string, newName: string, oldName: string) => `タグリスト「${tagListName}」でタグ「${oldName}」を「${newName}」に変更して更新しました`,
+ updateTagEnabled: (tagListName: string, tagName?: string, enabled?: boolean) => `${enabled ? '有効' : '無効'} リスト「${tagListName}」のタグ「${tagName}」`,
+ deleteTag: (tagListName: string, tagName?: string) => `タグ「${tagName}」をリスト「${tagListName}」から削除しました`,
+ deleteMultipleTags: (count?: string, tagListName?: string) => `リスト「${tagListName}」からタグ「${count}」個を削除しました`,
+ updateTag: (tagListName: string, newValue: string, tagName: string, updatedField: string, oldValue?: string) => {
if (oldValue) {
return `${updatedField} を「${oldValue}」から「${newValue}」に変更して、リスト「${tagListName}」内のタグ「${tagName}」を更新しました`;
}
@@ -6736,8 +6781,7 @@ ${reportName}
},
deleteCustomUnitRate: ({customUnitName, rateName}: AddOrDeletePolicyCustomUnitRateParams) => `「${customUnitName}」レート「${rateName}」を削除しました`,
addedReportField: ({fieldType, fieldName}: AddedOrDeletedPolicyReportFieldParams) => `${fieldType}レポートフィールド「${fieldName}」を追加しました`,
- updateReportFieldDefaultValue: ({defaultValue, fieldName}: UpdatedPolicyReportFieldDefaultValueParams) =>
- `レポートフィールド「${fieldName}」のデフォルト値を「${defaultValue}」に設定する`,
+ updateReportFieldDefaultValue: (defaultValue?: string, fieldName?: string) => `レポートフィールド「${fieldName}」のデフォルト値を「${defaultValue}」に設定する`,
addedReportFieldOption: (fieldName: string, optionName: string) => `レポート項目「${fieldName}」にオプション「${optionName}」を追加しました`,
removedReportFieldOption: (fieldName: string, optionName: string) => `レポートフィールド「${fieldName}」からオプション「${optionName}」を削除しました`,
updateReportFieldOptionDisabled: (fieldName: string, optionName: string, optionEnabled: boolean) =>
@@ -6749,7 +6793,7 @@ ${reportName}
return `レポート項目「${fieldName}」のオプション「${optionName}」を${allEnabled ? '有効' : '無効'}にし、すべてのオプションを${allEnabled ? '有効' : '無効'}にしました`;
},
deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `${fieldType}レポートフィールド「${fieldName}」を削除しました`,
- preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) =>
+ preventSelfApproval: (oldValue: string, newValue: string) =>
`「自分で承認を防止」を「${newValue === 'true' ? '有効' : '無効'}」(以前は「${oldValue === 'true' ? '有効' : '無効'}」)に更新しました`,
updateMonthlyOffset: (oldValue: string, newValue: string) => {
if (!oldValue) {
@@ -6885,15 +6929,15 @@ ${reportName}
oldValue ? `請求書の会社名を「${newValue}」に変更しました(以前は「${oldValue}」)` : `請求書の会社名を「${newValue}」に設定する`,
changedInvoiceCompanyWebsite: ({newValue, oldValue}: {newValue: string; oldValue?: string}) =>
oldValue ? `請求書の会社ウェブサイトを「${newValue}」(以前は「${oldValue}」)に変更しました` : `請求書の会社ウェブサイトを「${newValue}」に設定しました`,
- changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) =>
+ changedReimburser: (newReimburser: string, previousReimburser?: string) =>
previousReimburser ? `認可された支払者を「${newReimburser}」(以前は「${previousReimburser}」)に変更しました` : `承認済み支払担当者を「${newReimburser}」に変更しました`,
updateReimbursementEnabled: (enabled: boolean) => `${enabled ? '有効' : '無効'}件の精算`,
updateCustomTaxName: ({oldName, newName}: UpdatedPolicyCustomTaxNameParams) => `カスタム税区分名を「${newName}」(以前は「${oldName}」)に変更しました`,
updateCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyCurrencyDefaultTaxParams) => `ワークスペースの通貨デフォルト税率を「${newName}」(以前は「${oldName}」)に変更しました`,
updateForeignCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyForeignCurrencyDefaultTaxParams) => `外貨のデフォルト税率を「${newName}」に変更しました(以前は「${oldName}」)。`,
- addTax: ({taxName}: UpdatedPolicyTaxParams) => `税「${taxName}」を追加しました`,
- deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `税金「${taxName}」を削除しました`,
- updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => {
+ addTax: (taxName: string) => `税「${taxName}」を追加しました`,
+ deleteTax: (taxName: string) => `税金「${taxName}」を削除しました`,
+ updateTax: (oldValue?: string | boolean | number, taxName?: string, updatedField?: string, newValue?: string | boolean | number) => {
if (!updatedField) {
return '';
}
@@ -6926,16 +6970,15 @@ ${reportName}
removedMaxExpenseAge: (oldValue: string) => `最大経費日数を削除(以前は「${oldValue}」日)`,
updateCategories: (count: number) => `${count} 個のカテゴリーを更新しました`,
updateTagList: (tagListName: string) => `リスト「${tagListName}」のタグを更新しました`,
- updateTagListRequired: ({tagListsName, isRequired}: UpdatedPolicyTagListRequiredParams) =>
- `タグリスト「${tagListsName}」を${isRequired ? '必須' : '必須ではありません'}に変更しました`,
+ updateTagListRequired: (tagListsName: string, isRequired: boolean) => `タグリスト「${tagListsName}」を${isRequired ? '必須' : '必須ではありません'}に変更しました`,
importTags: 'スプレッドシートからタグをインポートしました',
deletedAllTags: 'すべてのタグを削除しました',
updateCustomUnitDefaultCategory: ({customUnitName, newValue, oldValue}: UpdatePolicyCustomUnitDefaultCategoryParams) =>
`${customUnitName}のデフォルトカテゴリを「${newValue}」に変更しました ${oldValue ? `(以前の値 "${oldValue}")` : ''}`,
importCustomUnitRates: (customUnitName: string) => `カスタム単位「${customUnitName}」のレートをインポートしました`,
- updateCustomUnitSubRate: ({customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField}: UpdatedPolicyCustomUnitSubRateParams) =>
+ updateCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, customUnitSubRateName: string, oldValue: string, newValue: string, updatedField: string) =>
`「${customUnitName}」のレート「${customUnitRateName}」、サブレート「${customUnitSubRateName}」の${updatedField}を「${newValue}」(以前は「${oldValue}」)に変更しました`,
- removedCustomUnitSubRate: ({customUnitName, customUnitRateName, removedSubRateName}: RemovedPolicyCustomUnitSubRateParams) =>
+ removedCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, removedSubRateName: string) =>
`「${customUnitName}」のレート「${customUnitRateName}」からサブレート「${removedSubRateName}」を削除しました`,
addBudget: ({frequency, entityName, entityType, shared, individual, notificationThreshold}: AddBudgetParams) => {
const thresholdSuffix = typeof notificationThreshold === 'number' ? `通知しきい値「${notificationThreshold}%」で` : '';
@@ -7009,17 +7052,16 @@ ${reportName}
updatedTimeEnabled: (enabled?: boolean) => {
return `${enabled ? '有効' : '無効'} 時間追跡`;
},
- updatedTimeRate: ({newRate, oldRate}: UpdatedPolicyTimeRateParams) => {
+ updatedTimeRate: (newRate?: string, oldRate?: string) => {
return `時給を「${newRate}」(以前は「${oldRate}」)に変更しました`;
},
addedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `禁止経費に「${prohibitedExpense}」を追加しました`,
removedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `禁止経費から「${prohibitedExpense}」を削除しました`,
- updatedReimbursementChoice: ({newReimbursementChoice, oldReimbursementChoice}: UpdatedPolicyReimbursementChoiceParams) =>
+ updatedReimbursementChoice: (newReimbursementChoice: string, oldReimbursementChoice: string) =>
`精算方法を「${newReimbursementChoice}」(以前は「${oldReimbursementChoice}」)に変更しました`,
setAutoJoin: ({enabled}: {enabled: boolean}) => `${enabled ? '有効' : '無効'} ワークスペース参加リクエストの事前承認`,
- updatedDefaultTitle: ({newDefaultTitle, oldDefaultTitle}: UpdatedPolicyDefaultTitleParams) =>
- `カスタムレポート名の数式を「${newDefaultTitle}」に変更しました(以前は「${oldDefaultTitle}」)`,
- updatedOwnership: ({oldOwnerEmail, oldOwnerName, policyName}: UpdatedPolicyOwnershipParams) => `${oldOwnerName}(${oldOwnerEmail})から${policyName}の所有権を引き継ぎました`,
+ updatedDefaultTitle: (newDefaultTitle: string, oldDefaultTitle: string) => `カスタムレポート名の数式を「${newDefaultTitle}」に変更しました(以前は「${oldDefaultTitle}」)`,
+ updatedOwnership: (oldOwnerEmail: string, oldOwnerName: string, policyName: string) => `${oldOwnerName}(${oldOwnerEmail})から${policyName}の所有権を引き継ぎました`,
updatedAutoHarvesting: (enabled: boolean) => `${enabled ? '有効' : '無効'} の送信を予約しました`,
updatedIndividualBudgetNotification: ({
budgetAmount,
@@ -7033,20 +7075,32 @@ ${reportName}
userEmail,
awaitingApprovalSpend,
approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ }: {
+ budgetAmount: string;
+ budgetFrequency: string;
+ budgetName: string;
+ budgetTypeForNotificationMessage: string;
+ summaryLink?: string;
+ thresholdPercentage: number;
+ totalSpend: number;
+ unsubmittedSpend: number;
+ userEmail?: string;
+ awaitingApprovalSpend: number;
+ approvedReimbursedClosedSpend: number;
+ }) =>
`お知らせです!このワークスペースには、${budgetTypeForNotificationMessage}「${budgetName}」に対して、${budgetFrequency}あたり「${budgetAmount}」の予算が設定されています。${userEmail} は現在 ${approvedReimbursedClosedSpend} を利用しており、これは予算の ${thresholdPercentage}% を超えています。さらに承認待ちが ${awaitingApprovalSpend}、未申請が ${unsubmittedSpend} あり、合計で ${totalSpend} になります。${summaryLink ? `こちらがレポートです。これらすべての経費の記録としてご利用ください!` : ''}`,
- updatedSharedBudgetNotification: ({
- budgetAmount,
- budgetFrequency,
- budgetName,
- budgetTypeForNotificationMessage,
- summaryLink,
- thresholdPercentage,
- totalSpend,
- unsubmittedSpend,
- awaitingApprovalSpend,
- approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ updatedSharedBudgetNotification: (
+ budgetAmount: string,
+ budgetFrequency: string,
+ budgetName: string,
+ budgetTypeForNotificationMessage: string,
+ summaryLink: string | undefined,
+ thresholdPercentage: number,
+ totalSpend: number,
+ unsubmittedSpend: number,
+ awaitingApprovalSpend: number,
+ approvedReimbursedClosedSpend: number,
+ ) =>
`お知らせです!このワークスペースには、${budgetTypeForNotificationMessage}「${budgetName}」に対して、${budgetFrequency}の予算額「${budgetAmount}」が設定されています。現在の金額は${approvedReimbursedClosedSpend}で、予算の${thresholdPercentage}%を超えています。さらに承認待ちの金額が${awaitingApprovalSpend}あり、まだ提出されていない金額が${unsubmittedSpend}あるため、合計は${totalSpend}になります。${summaryLink ? `こちらがレポートです。これらすべての経費が記録用にまとめられています!` : ''}`,
},
roomMembersPage: {
@@ -7793,7 +7847,7 @@ ${reportName}
overLimitAttendee: (formattedLimit: string) => `1人あたりの上限額 ${formattedLimit} を超過した金額`,
perDayLimit: (formattedLimit: string) => `1人あたりの1日上限額 ${formattedLimit} を超えたカテゴリ金額`,
receiptNotSmartScanned: 'レシートと経費の詳細が手動で追加されました。',
- receiptRequired: ({formattedLimit, category}: ViolationsReceiptRequiredParams) => {
+ receiptRequired: (formattedLimit?: string, category?: string) => {
if (formattedLimit && category) {
return `レシートが必要です(カテゴリ上限 ${formattedLimit} を超過)`;
}
@@ -7806,7 +7860,7 @@ ${reportName}
return '領収書が必要です';
},
itemizedReceiptRequired: (formattedLimit?: string) => `項目別の領収書が必要です${formattedLimit ? `${formattedLimit} を超過` : ''}`,
- prohibitedExpense: ({prohibitedExpenseTypes}: ViolationsProhibitedExpenseParams) => {
+ prohibitedExpense: (prohibitedExpenseTypes: string | string[]) => {
const preMessage = '禁止経費:';
const getProhibitedExpenseTypeText = (prohibitedExpenseType: string) => {
switch (prohibitedExpenseType) {
@@ -7837,7 +7891,17 @@ ${reportName}
},
customRules: (message: string) => message,
reviewRequired: '要レビュー',
- rter: ({brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash}: ViolationsRterParams) => {
+ rter: (
+ brokenBankConnection: boolean,
+ isAdmin: boolean,
+ isTransactionOlderThan7Days: boolean,
+ member?: string,
+ rterType?: ValueOf,
+ companyCardPageURL?: string,
+ connectionLink?: string,
+ isPersonalCard?: boolean,
+ isMarkAsCash?: boolean,
+ ) => {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return '銀行連携の不具合により、領収書を自動照合できません。';
}
@@ -7866,10 +7930,10 @@ ${reportName}
markAsCashToIgnore: '現金としてマークして無視し、支払いをリクエストします。',
smartscanFailed: ({canEdit = true}) => `レシートのスキャンに失敗しました。${canEdit ? '詳細を手動で入力してください。' : ''}`,
receiptGeneratedWithAI: 'AI生成の可能性があるレシート',
- someTagLevelsRequired: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'タグ'} が見つかりません`,
- tagOutOfPolicy: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'タグ'} は無効になりました`,
+ someTagLevelsRequired: (tagName?: string) => `${tagName ?? 'タグ'} が見つかりません`,
+ tagOutOfPolicy: (tagName?: string) => `${tagName ?? 'タグ'} は無効になりました`,
taxAmountChanged: '税額が変更されました',
- taxOutOfPolicy: ({taxName}: ViolationsTaxOutOfPolicyParams = {}) => `${taxName ?? '税金'} は有効期限切れです`,
+ taxOutOfPolicy: (taxName?: string) => `${taxName ?? '税金'} は有効期限切れです`,
taxRateChanged: '税率が変更されました',
taxRequired: '税率が未設定です',
none: 'なし',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 644cdae74afdb..a198ee9732bfd 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -11,6 +11,7 @@
*/
import {CONST as COMMON_CONST} from 'expensify-common';
import startCase from 'lodash/startCase';
+import type {ValueOf} from 'type-fest';
import type {OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
import StringUtils from '@libs/StringUtils';
import dedent from '@libs/StringUtils/dedent';
@@ -40,14 +41,11 @@ import type {
MarkReimbursedFromIntegrationParams,
MissingPropertyParams,
MovedFromPersonalSpaceParams,
- MultifactorAuthenticationTranslationParams,
- NextStepParams,
NotAllowedExtensionParams,
OptionalParam,
PaidElsewhereParams,
ParentNavigationSummaryParams,
RemovedFromApprovalWorkflowParams,
- RemovedPolicyCustomUnitSubRateParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams,
ReportArchiveReasonsMergedParams,
@@ -60,43 +58,20 @@ import type {
UnshareParams,
UpdatedBudgetParams,
UpdatedPolicyApprovalRuleParams,
- UpdatedPolicyBudgetNotificationParams,
UpdatedPolicyCategoryMaxAmountNoReceiptParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyCustomTaxNameParams,
- UpdatedPolicyCustomUnitSubRateParams,
- UpdatedPolicyDefaultTitleParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
UpdatedPolicyManualApprovalThresholdParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyReimburserParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTimeRateParams,
UpdatedTheDistanceMerchantParams,
UpdatedTheRequestParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdateRoleParams,
- UpgradeSuccessMessageParams,
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsProhibitedExpenseParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
WorkspaceLockedPlanTypeParams,
- WorkspaceMemberList,
- WorkspaceYouMayJoin,
YourPlanPriceParams,
} from './params';
import type {TranslationDeepObject} from './types';
@@ -651,8 +626,8 @@ const translations: TranslationDeepObject = {
biometricsTest: {
biometricsTest: 'Biometrische test',
authenticationSuccessful: 'Authenticatie geslaagd',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `Je bent succesvol geauthenticeerd met ${authType}.`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `Biometrie (${status})`,
+ successfullyAuthenticatedUsing: (authType?: string) => `Je bent succesvol geauthenticeerd met ${authType}.`,
+ troubleshootBiometricsStatus: ({status}: {status?: string}) => `Biometrie (${status})`,
yourAttemptWasUnsuccessful: 'Je verificatiepoging is niet gelukt.',
youCouldNotBeAuthenticated: 'Je kon niet worden geverifieerd',
areYouSureToReject: 'Weet je het zeker? De authenticatiepoging wordt geweigerd als je dit scherm sluit.',
@@ -703,7 +678,7 @@ const translations: TranslationDeepObject = {
confirmationPromptAll: 'Weet je het zeker? Je hebt een magische code nodig voor de volgende verificatie op elk apparaat.',
ctaAll: 'Alles intrekken',
thisDevice: 'Dit apparaat',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['Eén', 'Twee', 'Drie', 'Vier', 'Vijf', 'Zes', 'Zeven', 'Acht', 'Negen'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `${displayCount} andere ${otherDeviceCount === 1 ? 'apparaat' : 'apparaten'}`;
@@ -1659,8 +1634,15 @@ const translations: TranslationDeepObject = {
backdropLabel: 'Modale achtergrond',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `In afwachting tot jij uitgaven toevoegt.`;
@@ -1670,7 +1652,13 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder onkosten toevoegt.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Wachten tot jij onkosten indient.`;
@@ -1680,8 +1668,19 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder onkosten indient.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `Geen verdere actie vereist!`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => `Geen verdere actie vereist!`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `We wachten op jou om een bankrekening toe te voegen.`;
@@ -1691,11 +1690,17 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder een bankrekening toevoegt.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` op de ${eta} van elke maand` : ` ${eta}`;
}
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Wachten tot jouw declaraties automatisch worden ingediend${formattedETA}.`;
@@ -1705,7 +1710,13 @@ const translations: TranslationDeepObject = {
return `Wachten tot de onkostendeclaraties van een beheerder automatisch worden ingediend${formattedETA}.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `We wachten op jou om de problemen op te lossen.`;
@@ -1715,7 +1726,13 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder de problemen oplost.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Wachten tot jij de declaraties goedkeurt.`;
@@ -1725,7 +1742,13 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder de onkosten goedkeurt.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Wachten tot jij dit rapport exporteert.`;
@@ -1735,7 +1758,13 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder dit rapport exporteert.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Wachten tot jij de onkosten betaalt.`;
@@ -1745,7 +1774,13 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder de onkosten betaalt.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_POLICY_BANK_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Wachten tot jij het instellen van een zakelijke bankrekening afrondt.`;
@@ -1755,16 +1790,27 @@ const translations: TranslationDeepObject = {
return `Wachten tot een beheerder klaar is met het instellen van een zakelijke bankrekening.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: ({eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_PAYMENT]: (
+ _actor: string,
+ _actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` vóór ${eta}` : ` ${eta}`;
}
return `Wachten tot de betaling is voltooid${formattedETA}.`;
},
- [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (_: NextStepParams) =>
+ [CONST.NEXT_STEP.MESSAGE_KEY.SUBMITTING_TO_SELF]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) =>
`Oeps! Het lijkt erop dat je deze verklaring naar jezelf indient. Het goedkeuren van je eigen rapporten is verboden door je werkruimte. Dien dit rapport in bij iemand anders of neem contact op met je beheerder om de persoon te wijzigen bij wie je indient.`,
},
+ /* eslint-enable @typescript-eslint/no-unused-vars */
eta: {
[CONST.NEXT_STEP.ETA_KEY.SHORTLY]: 'binnenkort',
[CONST.NEXT_STEP.ETA_KEY.TODAY]: 'later vandaag',
@@ -2702,10 +2748,10 @@ ${amount} voor ${merchant} - ${date}`,
getStarted: 'Aan de slag',
whatsYourName: 'Hoe heet je?',
peopleYouMayKnow: 'Mensen die je misschien kent zijn hier al! Verifieer je e-mailadres om je bij hen aan te sluiten.',
- workspaceYouMayJoin: ({domain, email}: WorkspaceYouMayJoin) => `Iemand van ${domain} heeft al een workspace gemaakt. Voer de magische code in die is verzonden naar ${email}.`,
+ workspaceYouMayJoin: (domain: string, email: string) => `Iemand van ${domain} heeft al een workspace gemaakt. Voer de magische code in die is verzonden naar ${email}.`,
joinAWorkspace: 'Lid worden van een workspace',
listOfWorkspaces: 'Hier is de lijst met werkruimtes waaraan je kunt deelnemen. Geen zorgen, je kunt je er altijd later nog bij aansluiten als je dat liever hebt.',
- workspaceMemberList: ({employeeCount, policyOwner}: WorkspaceMemberList) => `${employeeCount} lid${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
+ workspaceMemberList: (employeeCount: number, policyOwner: string) => `${employeeCount} lid${employeeCount > 1 ? 's' : ''} • ${policyOwner}`,
whereYouWork: 'Waar werk je?',
errorSelection: 'Selecteer een optie om verder te gaan',
purpose: {
@@ -3077,7 +3123,7 @@ ${
},
resendValidationForm: {
linkHasBeenResent: 'Link is opnieuw verzonden',
- weSentYouMagicSignInLink: ({login, loginType}: WeSentYouMagicSignInLinkParams) => `Ik heb een magische inloglink naar ${login} gestuurd. Controleer je ${loginType} om in te loggen.`,
+ weSentYouMagicSignInLink: (login: string, loginType: string) => `Ik heb een magische inloglink naar ${login} gestuurd. Controleer je ${loginType} om in te loggen.`,
resendLink: 'Link opnieuw verzenden',
},
unlinkLoginForm: {
@@ -6350,7 +6396,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
upgradeToUnlock: 'Deze functie ontgrendelen',
completed: {
headline: `Je hebt je workspace geüpgraded!`,
- successMessage: ({policyName, subscriptionLink}: UpgradeSuccessMessageParams) =>
+ successMessage: (policyName: string, subscriptionLink: string) =>
`Je hebt ${policyName} succesvol geüpgraded naar het Control-abonnement! Bekijk je abonnement voor meer details.`,
categorizeMessage: `Je bent succesvol overgestapt naar het Collect-abonnement. Nu kun je je uitgaven categoriseren!`,
travelMessage: `Je bent succesvol geüpgraded naar het Collect-abonnement. Je kunt nu beginnen met het boeken en beheren van reizen!`,
@@ -6747,13 +6793,12 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
: `heeft de beschrijvingshint van categorie „${categoryName}” gewijzigd naar „${newValue}” (voorheen „${oldValue}”)`;
},
updateTagListName: (oldName: string, newName: string) => `heeft de naam van de taglijst gewijzigd in „${newName}” (voorheen „${oldName}”)`,
- addTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `heeft de tag "${tagName}" toegevoegd aan de lijst "${tagListName}"`,
- updateTagName: ({tagListName, newName, oldName}: UpdatedPolicyTagNameParams) =>
- `heeft de taglijst "${tagListName}" bijgewerkt door de tag "${oldName}" te veranderen in "${newName}"`,
- updateTagEnabled: ({tagListName, tagName, enabled}: UpdatedPolicyTagParams) => `${enabled ? 'ingeschakeld' : 'uitgeschakeld'} de tag "${tagName}" in de lijst "${tagListName}"`,
- deleteTag: ({tagListName, tagName}: UpdatedPolicyTagParams) => `heeft het label "${tagName}" verwijderd uit de lijst "${tagListName}"`,
- deleteMultipleTags: ({count, tagListName}: UpdatedPolicyTagParams) => `heeft “${count}” tags verwijderd uit de lijst “${tagListName}”`,
- updateTag: ({tagListName, newValue, tagName, updatedField, oldValue}: UpdatedPolicyTagFieldParams) => {
+ addTag: (tagListName: string, tagName?: string) => `heeft de tag "${tagName}" toegevoegd aan de lijst "${tagListName}"`,
+ updateTagName: (tagListName: string, newName: string, oldName: string) => `heeft de taglijst "${tagListName}" bijgewerkt door de tag "${oldName}" te veranderen in "${newName}"`,
+ updateTagEnabled: (tagListName: string, tagName?: string, enabled?: boolean) => `${enabled ? 'ingeschakeld' : 'uitgeschakeld'} de tag "${tagName}" in de lijst "${tagListName}"`,
+ deleteTag: (tagListName: string, tagName?: string) => `heeft het label "${tagName}" verwijderd uit de lijst "${tagListName}"`,
+ deleteMultipleTags: (count?: string, tagListName?: string) => `heeft “${count}” tags verwijderd uit de lijst “${tagListName}”`,
+ updateTag: (tagListName: string, newValue: string, tagName: string, updatedField: string, oldValue?: string) => {
if (oldValue) {
return `heeft de tag "${tagName}" op de lijst "${tagListName}" bijgewerkt door ${updatedField} te wijzigen in "${newValue}" (voorheen "${oldValue}")`;
}
@@ -6782,8 +6827,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
},
deleteCustomUnitRate: ({customUnitName, rateName}: AddOrDeletePolicyCustomUnitRateParams) => `heeft het tarief „${rateName}” van de eenheid „${customUnitName}” verwijderd`,
addedReportField: ({fieldType, fieldName}: AddedOrDeletedPolicyReportFieldParams) => `${fieldType} rapportveld "${fieldName}" toegevoegd`,
- updateReportFieldDefaultValue: ({defaultValue, fieldName}: UpdatedPolicyReportFieldDefaultValueParams) =>
- `stel de standaardwaarde van rapportveld "${fieldName}" in op "${defaultValue}"`,
+ updateReportFieldDefaultValue: (defaultValue?: string, fieldName?: string) => `stel de standaardwaarde van rapportveld "${fieldName}" in op "${defaultValue}"`,
addedReportFieldOption: (fieldName: string, optionName: string) => `heeft de optie ‘${optionName}’ toegevoegd aan het rapportveld ‘${fieldName}’`,
removedReportFieldOption: (fieldName: string, optionName: string) => `heeft de optie "${optionName}" verwijderd uit het rapportveld "${fieldName}"`,
updateReportFieldOptionDisabled: (fieldName: string, optionName: string, optionEnabled: boolean) =>
@@ -6795,7 +6839,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
return `${allEnabled ? 'ingeschakeld' : 'uitgeschakeld'} de optie „${optionName}” voor het rapportveld „${fieldName}”, waardoor alle opties ${allEnabled ? 'ingeschakeld' : 'uitgeschakeld'}`;
},
deleteReportField: ({fieldType, fieldName}: {fieldType: string; fieldName?: string}) => `heeft ${fieldType}-rapportveld "${fieldName}" verwijderd`,
- preventSelfApproval: ({oldValue, newValue}: UpdatedPolicyPreventSelfApprovalParams) =>
+ preventSelfApproval: (oldValue: string, newValue: string) =>
`heeft “Zelfgoedkeuring voorkomen” bijgewerkt naar “${newValue === 'true' ? 'Ingeschakeld' : 'Uitgeschakeld'}” (voorheen “${oldValue === 'true' ? 'Ingeschakeld' : 'Uitgeschakeld'}”)`,
updateMonthlyOffset: (oldValue: string, newValue: string) => {
if (!oldValue) {
@@ -6935,7 +6979,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
oldValue ? `heeft de naam van het factuurbedrijf gewijzigd naar ‘${newValue}’ (voorheen ‘${oldValue}’)` : `stel de bedrijfsnaam op de factuur in op ‘${newValue}’`,
changedInvoiceCompanyWebsite: ({newValue, oldValue}: {newValue: string; oldValue?: string}) =>
oldValue ? `heeft de bedrijfswebsite op de factuur gewijzigd naar "${newValue}" (voorheen "${oldValue}")` : `stel de bedrijfswebsite van de factuur in op "${newValue}"`,
- changedReimburser: ({newReimburser, previousReimburser}: UpdatedPolicyReimburserParams) =>
+ changedReimburser: (newReimburser: string, previousReimburser?: string) =>
previousReimburser
? `heeft de gemachtigde betaler gewijzigd in „${newReimburser}” (voorheen „${previousReimburser}”)`
: `heeft de gemachtigde betaler gewijzigd naar ‘${newReimburser}’`,
@@ -6945,9 +6989,9 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
`heeft het standaardbelastingtarief van de werkruimtevaluta gewijzigd in "${newName}" (voorheen "${oldName}")`,
updateForeignCurrencyDefaultTax: ({oldName, newName}: UpdatedPolicyForeignCurrencyDefaultTaxParams) =>
`heeft het standaardbelastingtarief voor vreemde valuta gewijzigd in '${newName}' (voorheen '${oldName}')`,
- addTax: ({taxName}: UpdatedPolicyTaxParams) => `heeft de belasting ‘${taxName}’ toegevoegd`,
- deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `heeft de belasting ‘${taxName}’ verwijderd`,
- updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => {
+ addTax: (taxName: string) => `heeft de belasting ‘${taxName}’ toegevoegd`,
+ deleteTax: (taxName: string) => `heeft de belasting ‘${taxName}’ verwijderd`,
+ updateTax: (oldValue?: string | boolean | number, taxName?: string, updatedField?: string, newValue?: string | boolean | number) => {
if (!updatedField) {
return '';
}
@@ -6980,16 +7024,15 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
removedMaxExpenseAge: (oldValue: string) => `maximale onkostendatum verwijderd (voorheen "${oldValue}" dagen)`,
updateCategories: (count: number) => `${count} categorieën bijgewerkt`,
updateTagList: (tagListName: string) => `tags op de lijst "${tagListName}" bijgewerkt`,
- updateTagListRequired: ({tagListsName, isRequired}: UpdatedPolicyTagListRequiredParams) =>
- `heeft taglijst "${tagListsName}" gewijzigd naar ${isRequired ? 'vereist' : 'niet vereist'}`,
+ updateTagListRequired: (tagListsName: string, isRequired: boolean) => `heeft taglijst "${tagListsName}" gewijzigd naar ${isRequired ? 'vereist' : 'niet vereist'}`,
importTags: 'geïmporteerde labels uit een spreadsheet',
deletedAllTags: 'alle tags verwijderd',
updateCustomUnitDefaultCategory: ({customUnitName, newValue, oldValue}: UpdatePolicyCustomUnitDefaultCategoryParams) =>
`heeft de standaardcategorie voor ${customUnitName} gewijzigd in „${newValue}” ${oldValue ? `(eerder "${oldValue}")` : ''}`,
importCustomUnitRates: (customUnitName: string) => `geïmporteerde tarieven voor aangepaste eenheid "${customUnitName}"`,
- updateCustomUnitSubRate: ({customUnitName, customUnitRateName, customUnitSubRateName, oldValue, newValue, updatedField}: UpdatedPolicyCustomUnitSubRateParams) =>
+ updateCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, customUnitSubRateName: string, oldValue: string, newValue: string, updatedField: string) =>
`heeft "${customUnitName}" tarief "${customUnitRateName}" subtarief "${customUnitSubRateName}" ${updatedField} gewijzigd naar "${newValue}" (voorheen "${oldValue}")`,
- removedCustomUnitSubRate: ({customUnitName, customUnitRateName, removedSubRateName}: RemovedPolicyCustomUnitSubRateParams) =>
+ removedCustomUnitSubRate: (customUnitName: string, customUnitRateName: string, removedSubRateName: string) =>
`heeft subtarief „${removedSubRateName}” verwijderd uit tarief „${customUnitRateName}” van eenheid „${customUnitName}”`,
addBudget: ({frequency, entityName, entityType, shared, individual, notificationThreshold}: AddBudgetParams) => {
const thresholdSuffix = typeof notificationThreshold === 'number' ? `met een meldingsdrempel van "${notificationThreshold}%"` : '';
@@ -7063,18 +7106,16 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
updatedTimeEnabled: (enabled?: boolean) => {
return `${enabled ? 'ingeschakeld' : 'uitgeschakeld'} tijdregistratie`;
},
- updatedTimeRate: ({newRate, oldRate}: UpdatedPolicyTimeRateParams) => {
+ updatedTimeRate: (newRate?: string, oldRate?: string) => {
return `uurloon gewijzigd naar ‘${newRate}’ (voorheen ‘${oldRate}’)`;
},
addedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `heeft ‘${prohibitedExpense}’ toegevoegd aan verboden uitgaven`,
removedProhibitedExpense: ({prohibitedExpense}: {prohibitedExpense: string}) => `heeft „${prohibitedExpense}” verwijderd uit verboden uitgaven`,
- updatedReimbursementChoice: ({newReimbursementChoice, oldReimbursementChoice}: UpdatedPolicyReimbursementChoiceParams) =>
+ updatedReimbursementChoice: (newReimbursementChoice: string, oldReimbursementChoice: string) =>
`vergoedingsmethode gewijzigd naar ‘${newReimbursementChoice}’ (voorheen ‘${oldReimbursementChoice}’)`,
setAutoJoin: ({enabled}: {enabled: boolean}) => `${enabled ? 'ingeschakeld' : 'uitgeschakeld'} vooraf goedkeuren van werkruimte-toevoegingsverzoeken`,
- updatedDefaultTitle: ({newDefaultTitle, oldDefaultTitle}: UpdatedPolicyDefaultTitleParams) =>
- `heeft aangepaste rapportnaamformule gewijzigd in "${newDefaultTitle}" (voorheen "${oldDefaultTitle}")`,
- updatedOwnership: ({oldOwnerEmail, oldOwnerName, policyName}: UpdatedPolicyOwnershipParams) =>
- `heeft het eigendom van ${policyName} overgenomen van ${oldOwnerName} (${oldOwnerEmail})`,
+ updatedDefaultTitle: (newDefaultTitle: string, oldDefaultTitle: string) => `heeft aangepaste rapportnaamformule gewijzigd in "${newDefaultTitle}" (voorheen "${oldDefaultTitle}")`,
+ updatedOwnership: (oldOwnerEmail: string, oldOwnerName: string, policyName: string) => `heeft het eigendom van ${policyName} overgenomen van ${oldOwnerName} (${oldOwnerEmail})`,
updatedAutoHarvesting: (enabled: boolean) => `${enabled ? 'ingeschakeld' : 'uitgeschakeld'} gepland indienen`,
updatedIndividualBudgetNotification: ({
budgetAmount,
@@ -7088,20 +7129,32 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
userEmail,
awaitingApprovalSpend,
approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ }: {
+ budgetAmount: string;
+ budgetFrequency: string;
+ budgetName: string;
+ budgetTypeForNotificationMessage: string;
+ summaryLink?: string;
+ thresholdPercentage: number;
+ totalSpend: number;
+ unsubmittedSpend: number;
+ userEmail?: string;
+ awaitingApprovalSpend: number;
+ approvedReimbursedClosedSpend: number;
+ }) =>
`Let op! Deze workspace heeft een ${budgetFrequency}-budget van '${budgetAmount}' voor de ${budgetTypeForNotificationMessage} '${budgetName}'. ${userEmail} zit momenteel op ${approvedReimbursedClosedSpend}, wat meer is dan ${thresholdPercentage}% van het budget. Er staat ook nog ${awaitingApprovalSpend} in afwachting van goedkeuring en ${unsubmittedSpend} dat nog niet is ingediend, voor een totaal van ${totalSpend}.${summaryLink ? `Hier is een rapport met al die uitgaven voor jouw administratie!` : ''}`,
- updatedSharedBudgetNotification: ({
- budgetAmount,
- budgetFrequency,
- budgetName,
- budgetTypeForNotificationMessage,
- summaryLink,
- thresholdPercentage,
- totalSpend,
- unsubmittedSpend,
- awaitingApprovalSpend,
- approvedReimbursedClosedSpend,
- }: UpdatedPolicyBudgetNotificationParams) =>
+ updatedSharedBudgetNotification: (
+ budgetAmount: string,
+ budgetFrequency: string,
+ budgetName: string,
+ budgetTypeForNotificationMessage: string,
+ summaryLink: string | undefined,
+ thresholdPercentage: number,
+ totalSpend: number,
+ unsubmittedSpend: number,
+ awaitingApprovalSpend: number,
+ approvedReimbursedClosedSpend: number,
+ ) =>
`Let op! Deze workspace heeft een ${budgetFrequency}-budget van ‘${budgetAmount}’ voor de ${budgetTypeForNotificationMessage} ‘${budgetName}’. Je zit nu op ${approvedReimbursedClosedSpend}, wat meer is dan ${thresholdPercentage}% van het budget. Er staat ook nog ${awaitingApprovalSpend} in afwachting van goedkeuring en ${unsubmittedSpend} is nog niet ingediend, voor een totaal van ${totalSpend}. ${summaryLink ? `Hier is een rapport met al die onkosten voor je administratie!` : ''}`,
},
roomMembersPage: {
@@ -7856,7 +7909,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
overLimitAttendee: (formattedLimit: string) => `Bedrag boven de limiet van ${formattedLimit} per persoon`,
perDayLimit: (formattedLimit: string) => `Bedrag boven de dagelijkse ${formattedLimit}/persoon-categorielimiet`,
receiptNotSmartScanned: 'Ontvangst- en onkostendetails handmatig toegevoegd.',
- receiptRequired: ({formattedLimit, category}: ViolationsReceiptRequiredParams) => {
+ receiptRequired: (formattedLimit?: string, category?: string) => {
if (formattedLimit && category) {
return `Bon nodig boven categorielimiet van ${formattedLimit}`;
}
@@ -7869,7 +7922,7 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
return 'Bon vereist';
},
itemizedReceiptRequired: (formattedLimit?: string) => `Gespecificeerde bon vereist${formattedLimit ? `boven ${formattedLimit}` : ''}`,
- prohibitedExpense: ({prohibitedExpenseTypes}: ViolationsProhibitedExpenseParams) => {
+ prohibitedExpense: (prohibitedExpenseTypes: string | string[]) => {
const preMessage = 'Verboden uitgave:';
const getProhibitedExpenseTypeText = (prohibitedExpenseType: string) => {
switch (prohibitedExpenseType) {
@@ -7900,7 +7953,17 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
},
customRules: (message: string) => message,
reviewRequired: 'Beoordeling vereist',
- rter: ({brokenBankConnection, isAdmin, isTransactionOlderThan7Days, member, rterType, companyCardPageURL, connectionLink, isPersonalCard, isMarkAsCash}: ViolationsRterParams) => {
+ rter: (
+ brokenBankConnection: boolean,
+ isAdmin: boolean,
+ isTransactionOlderThan7Days: boolean,
+ member?: string,
+ rterType?: string,
+ companyCardPageURL?: string,
+ connectionLink?: string,
+ isPersonalCard?: boolean,
+ isMarkAsCash?: boolean,
+ ) => {
if (rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530) {
return 'Bon kan automatisch aan bon koppelen vanwege verbroken bankverbinding.';
}
@@ -7929,10 +7992,10 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
markAsCashToIgnore: 'Markeren als contant om te negeren en betaling aan te vragen.',
smartscanFailed: ({canEdit = true}) => `Bon scannen mislukt.${canEdit ? 'Voer gegevens handmatig in.' : ''}`,
receiptGeneratedWithAI: 'Mogelijke AI-gegenereerde bon',
- someTagLevelsRequired: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `Ontbreekt ${tagName ?? 'Label'}`,
- tagOutOfPolicy: ({tagName}: ViolationsTagOutOfPolicyParams = {}) => `${tagName ?? 'Label'} niet meer geldig`,
+ someTagLevelsRequired: (tagName?: string) => `Ontbreekt ${tagName ?? 'Label'}`,
+ tagOutOfPolicy: (tagName?: string) => `${tagName ?? 'Label'} niet meer geldig`,
taxAmountChanged: 'Belastingbedrag is gewijzigd',
- taxOutOfPolicy: ({taxName}: ViolationsTaxOutOfPolicyParams = {}) => `${taxName ?? 'Belasting'} niet meer geldig`,
+ taxOutOfPolicy: (taxName?: string) => `${taxName ?? 'Belasting'} niet meer geldig`,
taxRateChanged: 'Belastingtarief is gewijzigd',
taxRequired: 'Ontbrekend belastingtarief',
none: 'Geen',
diff --git a/src/languages/params.ts b/src/languages/params.ts
index ed2cc0254daed..6a0bbf72bdec4 100644
--- a/src/languages/params.ts
+++ b/src/languages/params.ts
@@ -1,17 +1,8 @@
-import type {ValueOf} from 'type-fest';
-import type CONST from '@src/CONST';
import type {OnyxInputOrEntry, ReportAction} from '@src/types/onyx';
import type {DelegateRole} from '@src/types/onyx/Account';
import type {AllConnectionName, ConnectionName, PolicyConnectionSyncStage, SageIntacctMappingName} from '@src/types/onyx/Policy';
import type {ViolationDataType} from '@src/types/onyx/TransactionViolation';
-type MultifactorAuthenticationTranslationParams = {
- authType?: string;
- registered?: boolean;
- otherDeviceCount?: number;
- status?: string;
-};
-
type EditActionParams = {
action: OnyxInputOrEntry;
};
@@ -60,8 +51,6 @@ type SizeExceededParams = {maxUploadSizeInMB: number};
type NotAllowedExtensionParams = {allowedExtensions: string[]};
-type WeSentYouMagicSignInLinkParams = {login: string; loginType: string};
-
type StepCounterParams = {step: number; total?: number; text?: string};
type UserIsAlreadyMemberParams = {login: string; name: string};
@@ -76,26 +65,6 @@ type ViolationsMissingTagParams = {tagName?: string} | undefined;
type ViolationsModifiedAmountParams = {type?: ViolationDataType; displayPercentVariance?: number};
-type ViolationsReceiptRequiredParams = {formattedLimit?: string; category?: string};
-
-type ViolationsRterParams = {
- brokenBankConnection: boolean;
- isAdmin: boolean;
- isTransactionOlderThan7Days: boolean;
- member?: string;
- rterType?: ValueOf;
- companyCardPageURL?: string;
- connectionLink?: string;
- isPersonalCard?: boolean;
- isMarkAsCash?: boolean;
-};
-
-type ViolationsTagOutOfPolicyParams = {tagName?: string} | undefined;
-
-type ViolationsProhibitedExpenseParams = {prohibitedExpenseTypes: string | string[]};
-
-type ViolationsTaxOutOfPolicyParams = {taxName?: string} | undefined;
-
type OptionalParam = Partial;
type LogSizeAndDateParams = {size: number; date: string};
@@ -104,54 +73,14 @@ type ChangeFieldParams = {oldValue?: string; newValue: string; fieldName: string
type UpdatedPolicyCategoryMaxAmountNoReceiptParams = {categoryName: string; oldValue?: string; newValue: string};
-type UpdatedPolicyTaxParams = {taxName: string; oldValue?: string | boolean | number; newValue?: string | boolean | number; updatedField?: string};
-
-type UpdatedPolicyTagParams = {tagListName: string; tagName?: string; enabled?: boolean; count?: string};
-
-type UpdatedPolicyTagNameParams = {oldName: string; newName: string; tagListName: string};
-
-type UpdatedPolicyTagFieldParams = {oldValue?: string; newValue: string; tagName: string; tagListName: string; updatedField: string};
-
-type UpdatedPolicyTagListRequiredParams = {tagListsName: string; isRequired: boolean};
-
type UpdatePolicyCustomUnitDefaultCategoryParams = {customUnitName: string; newValue?: string; oldValue?: string};
type UpdatePolicyCustomUnitParams = {oldValue: string; newValue: string; customUnitName: string; updatedField: string};
-type UpdatedPolicyCustomUnitSubRateParams = {customUnitName: string; customUnitRateName: string; customUnitSubRateName: string; oldValue: string; newValue: string; updatedField: string};
-
-type RemovedPolicyCustomUnitSubRateParams = {customUnitName: string; customUnitRateName: string; removedSubRateName: string};
-
type AddedOrDeletedPolicyReportFieldParams = {fieldType: string; fieldName?: string};
-type UpdatedPolicyReportFieldDefaultValueParams = {fieldName?: string; defaultValue?: string};
-
type UpdatedPolicyApprovalRuleParams = {oldApproverEmail: string; oldApproverName?: string; newApproverEmail: string; newApproverName?: string; field: string; name: string};
-type UpdatedPolicyPreventSelfApprovalParams = {oldValue: string; newValue: string};
-
-type UpdatedPolicyOwnershipParams = {oldOwnerEmail: string; oldOwnerName: string; policyName: string};
-
-type UpdatedPolicyTimeRateParams = {newRate?: string; oldRate?: string};
-
-type UpdatedPolicyBudgetNotificationParams = {
- budgetAmount: string;
- budgetFrequency: string;
- budgetName: string;
- budgetTypeForNotificationMessage: string;
- summaryLink?: string;
- thresholdPercentage: number;
- totalSpend: number;
- unsubmittedSpend: number;
- userEmail?: string;
- awaitingApprovalSpend: number;
- approvedReimbursedClosedSpend: number;
-};
-
-type UpdatedPolicyReimbursementChoiceParams = {newReimbursementChoice: string; oldReimbursementChoice: string};
-
-type UpdatedPolicyDefaultTitleParams = {newDefaultTitle: string; oldDefaultTitle: string};
-
type UpdatedPolicyManualApprovalThresholdParams = {oldLimit: string; newLimit: string};
type UpdatedPolicyCustomTaxNameParams = {oldName: string; newName: string};
@@ -160,8 +89,6 @@ type UpdatedPolicyCurrencyDefaultTaxParams = {oldName: string; newName: string};
type UpdatedPolicyForeignCurrencyDefaultTaxParams = {oldName: string; newName: string};
-type UpdatedPolicyReimburserParams = {newReimburser: string; previousReimburser?: string};
-
type ExportedToIntegrationParams = {label: string; markedManually?: boolean; inProgress?: boolean; lastModified?: string};
type AddBudgetParams = {frequency: string; entityType: string; entityName: string; shared?: string; individual?: string; notificationThreshold?: number};
@@ -257,33 +184,11 @@ type InvalidValueParams = {
expectedValues: string;
};
-type WorkspaceYouMayJoin = {
- domain: string;
- email: string;
-};
-
-type WorkspaceMemberList = {
- employeeCount: number;
- policyOwner: string;
-};
-
type WorkspaceLockedPlanTypeParams = {
count: number;
annualSubscriptionEndDate: string;
};
-type UpgradeSuccessMessageParams = {
- policyName: string;
- subscriptionLink: string;
-};
-
-type NextStepParams = {
- actor: string;
- actorType: ValueOf;
- eta?: string;
- etaType?: ValueOf;
-};
-
type ConciergeBrokenCardConnectionParams = {
cardName: string;
connectionLink?: string;
@@ -322,12 +227,6 @@ export type {
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsProhibitedExpenseParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
ChangeFieldParams,
ExportedToIntegrationParams,
IntegrationsMessageParams,
@@ -342,25 +241,12 @@ export type {
DisconnectPromptParams,
DisconnectTitleParams,
OptionalParam,
- WorkspaceYouMayJoin,
- WorkspaceMemberList,
WorkspaceLockedPlanTypeParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyTimeRateParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- RemovedPolicyCustomUnitSubRateParams,
- UpdatedPolicyCustomUnitSubRateParams,
AddedOrDeletedPolicyReportFieldParams,
UpdatedPolicyManualApprovalThresholdParams,
UpdatedPolicyCustomTaxNameParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
- UpdatedPolicyReimburserParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdatedPolicyApprovalRuleParams,
@@ -369,11 +255,4 @@ export type {
UpdatedBudgetParams,
DeleteBudgetParams,
AddOrDeletePolicyCustomUnitRateParams,
- UpgradeSuccessMessageParams,
- NextStepParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyBudgetNotificationParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyDefaultTitleParams,
- MultifactorAuthenticationTranslationParams,
};
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 6c9af93e88bbc..22b71f285da80 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -11,6 +11,7 @@
*/
import {CONST as COMMON_CONST} from 'expensify-common';
import startCase from 'lodash/startCase';
+import type {ValueOf} from 'type-fest';
import type {OnboardingTask} from '@libs/actions/Welcome/OnboardingFlow';
import StringUtils from '@libs/StringUtils';
import dedent from '@libs/StringUtils/dedent';
@@ -40,14 +41,11 @@ import type {
MarkReimbursedFromIntegrationParams,
MissingPropertyParams,
MovedFromPersonalSpaceParams,
- MultifactorAuthenticationTranslationParams,
- NextStepParams,
NotAllowedExtensionParams,
OptionalParam,
PaidElsewhereParams,
ParentNavigationSummaryParams,
RemovedFromApprovalWorkflowParams,
- RemovedPolicyCustomUnitSubRateParams,
ReportArchiveReasonsClosedParams,
ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams,
ReportArchiveReasonsMergedParams,
@@ -60,43 +58,20 @@ import type {
UnshareParams,
UpdatedBudgetParams,
UpdatedPolicyApprovalRuleParams,
- UpdatedPolicyBudgetNotificationParams,
UpdatedPolicyCategoryMaxAmountNoReceiptParams,
UpdatedPolicyCurrencyDefaultTaxParams,
UpdatedPolicyCustomTaxNameParams,
- UpdatedPolicyCustomUnitSubRateParams,
- UpdatedPolicyDefaultTitleParams,
UpdatedPolicyForeignCurrencyDefaultTaxParams,
UpdatedPolicyManualApprovalThresholdParams,
- UpdatedPolicyOwnershipParams,
- UpdatedPolicyPreventSelfApprovalParams,
- UpdatedPolicyReimbursementChoiceParams,
- UpdatedPolicyReimburserParams,
- UpdatedPolicyReportFieldDefaultValueParams,
- UpdatedPolicyTagFieldParams,
- UpdatedPolicyTagListRequiredParams,
- UpdatedPolicyTagNameParams,
- UpdatedPolicyTagParams,
- UpdatedPolicyTaxParams,
- UpdatedPolicyTimeRateParams,
UpdatedTheDistanceMerchantParams,
UpdatedTheRequestParams,
UpdatePolicyCustomUnitDefaultCategoryParams,
UpdatePolicyCustomUnitParams,
UpdateRoleParams,
- UpgradeSuccessMessageParams,
UserIsAlreadyMemberParams,
ViolationsMissingTagParams,
ViolationsModifiedAmountParams,
- ViolationsProhibitedExpenseParams,
- ViolationsReceiptRequiredParams,
- ViolationsRterParams,
- ViolationsTagOutOfPolicyParams,
- ViolationsTaxOutOfPolicyParams,
- WeSentYouMagicSignInLinkParams,
WorkspaceLockedPlanTypeParams,
- WorkspaceMemberList,
- WorkspaceYouMayJoin,
YourPlanPriceParams,
} from './params';
import type {TranslationDeepObject} from './types';
@@ -651,8 +626,8 @@ const translations: TranslationDeepObject = {
biometricsTest: {
biometricsTest: 'Test biometrii',
authenticationSuccessful: 'Uwierzytelnianie powiodło się',
- successfullyAuthenticatedUsing: ({authType}: MultifactorAuthenticationTranslationParams) => `Pomyślnie uwierzytelniłeś się za pomocą ${authType}.`,
- troubleshootBiometricsStatus: ({status}: MultifactorAuthenticationTranslationParams) => `Dane biometryczne (${status})`,
+ successfullyAuthenticatedUsing: (authType?: string) => `Pomyślnie uwierzytelniłeś się za pomocą ${authType}.`,
+ troubleshootBiometricsStatus: ({status}: {status?: string}) => `Dane biometryczne (${status})`,
yourAttemptWasUnsuccessful: 'Twoja próba uwierzytelnienia nie powiodła się.',
youCouldNotBeAuthenticated: 'Nie udało się uwierzytelnić użytkownika',
areYouSureToReject: 'Na pewno? Próba uwierzytelnienia zostanie odrzucona, jeśli zamkniesz ten ekran.',
@@ -704,7 +679,7 @@ const translations: TranslationDeepObject = {
confirmationPromptAll: 'Na pewno? Będziesz potrzebować magicznego kodu do następnej weryfikacji na każdym urządzeniu.',
ctaAll: 'Cofnij wszystkie',
thisDevice: 'To urządzenie',
- otherDevices: ({otherDeviceCount}: MultifactorAuthenticationTranslationParams) => {
+ otherDevices: (otherDeviceCount?: number) => {
const numberWords = ['Jeden', 'Dwa', 'Trzy', 'Cztery', 'Pięć', 'Sześć', 'Siedem', 'Osiem', 'Dziewięć'];
const displayCount = otherDeviceCount !== undefined && otherDeviceCount >= 1 && otherDeviceCount <= 9 ? numberWords.at(otherDeviceCount - 1) : `${otherDeviceCount}`;
return `${displayCount} inna ${otherDeviceCount === 1 ? 'urządzenie' : 'urządzenia'}`;
@@ -1660,8 +1635,15 @@ const translations: TranslationDeepObject = {
backdropLabel: 'Tło modalu',
},
nextStep: {
+ /* eslint-disable @typescript-eslint/no-unused-vars */
message: {
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_ADD_TRANSACTIONS]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Czekamy, aż Ty dodasz wydatki.`;
@@ -1671,7 +1653,13 @@ const translations: TranslationDeepObject = {
return `Oczekiwanie na dodanie wydatków przez administratora.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Oczekiwanie, aż ty zgłosisz wydatki.`;
@@ -1681,8 +1669,19 @@ const translations: TranslationDeepObject = {
return `Oczekiwanie na zgłoszenie wydatków przez administratora.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_: NextStepParams) => `Nie są wymagane dalsze działania!`,
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (
+ _actor: string,
+ _actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => `Nie są wymagane dalsze działania!`,
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Czekamy, aż Ty dodasz konto bankowe.`;
@@ -1692,11 +1691,17 @@ const translations: TranslationDeepObject = {
return `Oczekiwanie na dodanie konta bankowego przez administratora.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ({actor, actorType, eta, etaType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (
+ actor: string,
+ actorType: ValueOf,
+ eta?: string,
+ etaType?: ValueOf,
+ ) => {
let formattedETA = '';
if (eta) {
formattedETA = etaType === CONST.NEXT_STEP.ETA_TYPE.DATE_TIME ? ` ${eta} dnia każdego miesiąca` : ` ${eta}`;
}
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Oczekiwanie, aż Twoje wydatki zostaną automatycznie przesłane${formattedETA}.`;
@@ -1706,7 +1711,13 @@ const translations: TranslationDeepObject = {
return `Oczekiwanie na automatyczne przesłanie wydatków administratora${formattedETA}.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_FIX_ISSUES]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Czekamy, aż Ty naprawisz problemy.`;
@@ -1716,7 +1727,13 @@ const translations: TranslationDeepObject = {
return `Oczekiwanie na administratora, który naprawi problemy.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_APPROVE]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Oczekiwanie na Twoje zatwierdzenie wydatków.`;
@@ -1726,7 +1743,13 @@ const translations: TranslationDeepObject = {
return `Oczekiwanie na zatwierdzenie wydatków przez administratora.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_EXPORT]: (
+ actor: string,
+ actorType: ValueOf,
+ _eta?: string,
+ _etaType?: ValueOf,
+ ) => {
+ // eslint-disable-next-line default-case
switch (actorType) {
case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER:
return `Oczekujemy, aż ty wyeksportujesz ten raport.`;
@@ -1736,7 +1759,13 @@ const translations: TranslationDeepObject = {
return `Oczekiwanie na administratora, który wyeksportuje ten raport.`;
}
},
- [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: ({actor, actorType}: NextStepParams) => {
+ [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_TO_PAY]: (
+ actor: string,
+ actorType: ValueOf