From 5e9a5f4e61fdcf00fd1b1467672472150216c9c0 Mon Sep 17 00:00:00 2001 From: Shivam Date: Tue, 19 Nov 2024 14:35:54 +0530 Subject: [PATCH] fix: validation rules for card holder's name and nickname (#143) --- android | 2 +- src/components/common/DynamicFields.res | 14 ++- src/components/common/ValidationFunctions.res | 14 +++ src/pages/payment/Card.res | 7 +- src/pages/payment/NickNameElement.res | 38 ++++++-- .../reusableCodeFromWeb/LocaleString.res | 96 +++++++++++++++++++ 6 files changed, 159 insertions(+), 12 deletions(-) diff --git a/android b/android index acb3c1b..5d2068f 160000 --- a/android +++ b/android @@ -1 +1 @@ -Subproject commit acb3c1b07773729f0e57ce02884809632b6c40f5 +Subproject commit 5d2068f7f0bec7d8d1bc0d6445708ec095cca1ef diff --git a/src/components/common/DynamicFields.res b/src/components/common/DynamicFields.res index c2c2f8e..4f70361 100644 --- a/src/components/common/DynamicFields.res +++ b/src/components/common/DynamicFields.res @@ -110,11 +110,21 @@ module RenderField = { let (firstNameVal, firstNameErrorMessage) = firstNameVal === "" ? (JSON.Encode.null, Some(localeObject.cardHolderNameRequiredText)) - : (JSON.Encode.string(firstNameVal), None) + : ( + JSON.Encode.string(firstNameVal), + firstNameVal->ValidationFunctions.containsDigit + ? Some(localeObject.invalidDigitsCardHolderNameError) + : None, + ) let (lastNameVal, lastNameErrorMessage) = lastNameVal === "" ? (JSON.Encode.null, Some(localeObject.lastNameRequiredText)) - : (JSON.Encode.string(lastNameVal), None) + : ( + JSON.Encode.string(lastNameVal), + lastNameVal->ValidationFunctions.containsDigit + ? Some(localeObject.invalidDigitsCardHolderNameError) + : None, + ) setErrorMesage(_ => switch firstNameErrorMessage { diff --git a/src/components/common/ValidationFunctions.res b/src/components/common/ValidationFunctions.res index ab858b0..920e6ab 100644 --- a/src/components/common/ValidationFunctions.res +++ b/src/components/common/ValidationFunctions.res @@ -27,3 +27,17 @@ let isValidZip = (~zipCode, ~country) => { let isZipCodeValid = RegExp.test(postalCode.regex->Js.Re.fromString, zipCode) zipCode->String.length > 0 && isZipCodeValid } + +let containsDigit = text => { + switch text->String.match(%re("/\d/")) { + | Some(_) => true + | None => false + } +} + +let containsMoreThanTwoDigits = text => { + switch text->String.match(%re("/\d/g")) { + | Some(matches) => matches->Array.length > 2 + | None => false + } +} diff --git a/src/pages/payment/Card.res b/src/pages/payment/Card.res index 6798739..006770a 100644 --- a/src/pages/payment/Card.res +++ b/src/pages/payment/Card.res @@ -32,6 +32,7 @@ let make = ( // Validity Hooks let (isAllCardValuesValid, setIsAllCardValuesValid) = React.useState(_ => false) let (isAllDynamicFieldValid, setIsAllDynamicFieldValid) = React.useState(_ => true) + let (isNicknameValid, setIsNicknameValid) = React.useState(_ => true) let requiredFields = cardVal.required_field->Array.filter(val => { switch val.field_type { | RequiredFieldsTypes.UnKnownField(_) => false @@ -45,7 +46,7 @@ let make = ( )> => []) let (error, setError) = React.useState(_ => None) - let isConfirmButtonValid = isAllCardValuesValid && isAllDynamicFieldValid + let isConfirmButtonValid = isAllCardValuesValid && isAllDynamicFieldValid && (isNicknameSelected ? isNicknameValid : true) let initialiseNetcetera = NetceteraThreeDsHooks.useInitNetcetera() let (isInitialised, setIsInitialised) = React.useState(_ => false) @@ -185,9 +186,9 @@ let make = ( allApiData.additionalPMLData.mandateType, ) { | (false, _, true, NEW_MANDATE | NORMAL) => - + | (false, _, false, NEW_MANDATE) | (false, _, _, SETUP_MANDATE) => - + | _ => React.null }} diff --git a/src/pages/payment/NickNameElement.res b/src/pages/payment/NickNameElement.res index dd25091..8388ced 100644 --- a/src/pages/payment/NickNameElement.res +++ b/src/pages/payment/NickNameElement.res @@ -1,7 +1,29 @@ @react.component -let make = (~nickname, ~setNickname, ~isNicknameSelected) => { - let {component, borderWidth, borderRadius} = ThemebasedStyle.useThemeBasedStyle() +let make = (~nickname, ~setNickname, ~isNicknameSelected, ~setIsNicknameValid) => { + let {component, borderWidth, borderRadius, dangerColor} = ThemebasedStyle.useThemeBasedStyle() let localeObject = GetLocale.useGetLocalObj() + let (isFocus, setisFocus) = React.useState(_ => false) + let (errorMessage, setErrorMesage) = React.useState(_ => None) + + let onChange = text => { + setNickname(_ => Some(text)) + + if text->String.length > 12 { + setErrorMesage(_ => Some(localeObject.nickNameLengthExceedError)) + setIsNicknameValid(_ => false) + } else { + switch text->ValidationFunctions.containsMoreThanTwoDigits { + | true => { + setErrorMesage(_ => Some(localeObject.invalidDigitsNickNameError)) + setIsNicknameValid(_ => false) + } + | false => { + setErrorMesage(_ => None) + setIsNicknameValid(_ => true) + } + } + } + } isNicknameSelected ? <> @@ -10,13 +32,13 @@ let make = (~nickname, ~setNickname, ~isNicknameSelected) => { // Option.getOr("")} - setState={str => setNickname(_ => Some(str))} + setState={str => onChange(str)} placeholder={`${localeObject.cardNickname}${" (Optional)"}`} keyboardType=#default isValid=true - onFocus={_ => ()} - onBlur={_ => ()} - textColor=component.color + onFocus={_ => setisFocus(_ => true)} + onBlur={_ => setisFocus(_ => false)} + textColor={isFocus || errorMessage->Option.isNone ? component.color : dangerColor} borderBottomLeftRadius=borderRadius borderBottomRightRadius=borderRadius borderTopLeftRadius=borderRadius @@ -27,6 +49,10 @@ let make = (~nickname, ~setNickname, ~isNicknameSelected) => { borderRightWidth=borderWidth animateLabel=localeObject.cardNickname /> + {switch errorMessage { + | Some(text) => + | None => React.null + }} : React.null diff --git a/src/utility/reusableCodeFromWeb/LocaleString.res b/src/utility/reusableCodeFromWeb/LocaleString.res index 3b01ecb..98dd33d 100644 --- a/src/utility/reusableCodeFromWeb/LocaleString.res +++ b/src/utility/reusableCodeFromWeb/LocaleString.res @@ -57,6 +57,9 @@ type localeStrings = { billingDetails: string, requiredText: string, cardHolderNameRequiredText: string, + invalidDigitsCardHolderNameError: string, + nickNameLengthExceedError: string, + invalidDigitsNickNameError: string, lastNameRequiredText: string, cardExpiresText: string, addPaymentMethodLabel: string, @@ -125,7 +128,10 @@ let defaultLocale = { billingDetails: "Billing Details", requiredText: "Required", cardHolderNameRequiredText: "Card Holder's name required", + invalidDigitsCardHolderNameError: "Card Holder's name cannot have digits", lastNameRequiredText: "Last Name Required", + nickNameLengthExceedError: "Nickname cannot exceed 12 characters", + invalidDigitsNickNameError: "Nickname cannot have more than 2 digits", cardExpiresText: "expires", addPaymentMethodLabel: "Add new payment method", walletDisclaimer: "Wallet details will be saved upon selection", @@ -199,6 +205,9 @@ let localeStrings = [ cardExpiresText: "expires", addPaymentMethodLabel: "Add new payment method", cardHolderNameRequiredText: "Card Holder's name required", + invalidDigitsCardHolderNameError: "Card Holder's name cannot have digits", + nickNameLengthExceedError: "Nickname cannot exceed 12 characters", + invalidDigitsNickNameError: "Nickname cannot have more than 2 digits", walletDisclaimer: "Wallet details will be saved upon selection", deletePaymentMethod: "Delete", }, @@ -266,6 +275,9 @@ let localeStrings = [ requiredText: `נדרש`, lastNameRequiredText: `שם משפחה נדרש`, cardExpiresText: `פג תוקפו`, + invalidDigitsCardHolderNameError: "שם בעל הכרטיס אינו יכול להכיל מספרים", + nickNameLengthExceedError: "כינוי לא יכול לעלות על 12 תווים", + invalidDigitsNickNameError: "כינוי לא יכול להכיל יותר מ-2 מספרים", addPaymentMethodLabel: `הוסף שיטת תשלום חדשה`, cardHolderNameRequiredText: `נדרש שם בעל הכרטיס`, walletDisclaimer: `פרטי הארנק יישמרו עם הבחירה`, @@ -334,6 +346,9 @@ let localeStrings = [ requiredText: `Requis`, lastNameRequiredText: `Nom de famille requis`, cardExpiresText: `expire`, + invalidDigitsCardHolderNameError: "Le nom du titulaire de la carte ne peut pas contenir de chiffres", + nickNameLengthExceedError: "Le surnom ne peut pas dépasser 12 caractères", + invalidDigitsNickNameError: "Le surnom ne peut pas contenir plus de 2 chiffres", addPaymentMethodLabel: `Ajouter un nouveau mode de paiement`, cardHolderNameRequiredText: `Nom du titulaire de la carte requis`, walletDisclaimer: `Les détails du portefeuille seront enregistrés lors de la sélection`, @@ -402,6 +417,9 @@ let localeStrings = [ requiredText: "Required", lastNameRequiredText: "Last Name Required", cardExpiresText: `expires`, + invalidDigitsCardHolderNameError: "Card Holder's name cannot have digits", + nickNameLengthExceedError: "Nickname cannot exceed 12 characters", + invalidDigitsNickNameError: "Nickname cannot have more than 2 digits", addPaymentMethodLabel: `Add new payment method`, cardHolderNameRequiredText: `Card Holder's name required`, walletDisclaimer: `Wallet details will be saved upon selection`, @@ -470,6 +488,9 @@ let localeStrings = [ requiredText: `مطلوب`, lastNameRequiredText: `نشاط اسم مطلوب`, cardExpiresText: `تنتهي`, + invalidDigitsCardHolderNameError: "لا يمكن أن يحتوي اسم حامل البطاقة على أرقام", + nickNameLengthExceedError: "لا يمكن أن يتجاوز اللقب 12 حرفًا", + invalidDigitsNickNameError: "لا يمكن أن يحتوي اللقب على أكثر من رقمين", addPaymentMethodLabel: `أضف طريقة دفع جديدة`, cardHolderNameRequiredText: `اسم حامل البطاقة مطلوب`, walletDisclaimer: `سيتم حفظ تفاصيل المحفظة عند الاختيار`, @@ -538,6 +559,9 @@ let localeStrings = [ requiredText: `必須`, lastNameRequiredText: `姓が必要です`, cardExpiresText: `期限切れ`, + invalidDigitsCardHolderNameError: "カード保持者の名前に数字を含めることはできません", + nickNameLengthExceedError: "ニックネームは12文字を超えることはできません", + invalidDigitsNickNameError: "ニックネームに2つ以上の数字を含めることはできません", addPaymentMethodLabel: `新しい支払い方法を追加`, cardHolderNameRequiredText: `カード所有者の名前が必要です`, walletDisclaimer: `ウォレットの詳細は選択時に保存されます`, @@ -606,6 +630,9 @@ let localeStrings = [ requiredText: `Erforderlich`, lastNameRequiredText: `Nachname erforderlich`, cardExpiresText: `läuft ab`, + invalidDigitsCardHolderNameError: "Der Name des Karteninhabers darf keine Ziffern enthalten", + nickNameLengthExceedError: "Der Spitzname darf 12 Zeichen nicht überschreiten", + invalidDigitsNickNameError: "Der Spitzname darf nicht mehr als 2 Ziffern enthalten", addPaymentMethodLabel: `Neue Zahlungsmethode hinzufügen`, cardHolderNameRequiredText: `Name des Karteninhabers erforderlich`, walletDisclaimer: `Wallet-Details werden bei Auswahl gespeichert`, @@ -674,6 +701,9 @@ let localeStrings = [ requiredText: `Requis`, lastNameRequiredText: `Nom de famille requis`, cardExpiresText: `expire`, + invalidDigitsCardHolderNameError: "Le nom du titulaire de la carte ne peut pas contenir de chiffres", + nickNameLengthExceedError: "Le surnom ne peut pas dépasser 12 caractères", + invalidDigitsNickNameError: "Le surnom ne peut pas contenir plus de 2 chiffres", addPaymentMethodLabel: `Ajouter un nouveau mode de paiement`, cardHolderNameRequiredText: `Nom du titulaire de la carte requis`, walletDisclaimer: `Les détails du portefeuille seront enregistrés lors de la sélection`, @@ -742,6 +772,9 @@ let localeStrings = [ requiredText: `Requerido`, lastNameRequiredText: `Apellido Necesario`, cardExpiresText: `expira`, + invalidDigitsCardHolderNameError: "El nombre del titular de la tarjeta no puede tener dígitos", + nickNameLengthExceedError: "El apodo no puede superar los 12 caracteres", + invalidDigitsNickNameError: "El apodo no puede tener más de 2 dígitos", addPaymentMethodLabel: `Agregar nuevo método de pago`, cardHolderNameRequiredText: `Se requiere el nombre del titular de la tarjeta`, walletDisclaimer: `Los detalles de la billetera se guardarán al realizar la selección.`, @@ -810,6 +843,9 @@ let localeStrings = [ requiredText: `Requerit`, lastNameRequiredText: `Cognom necessari`, cardExpiresText: `caduca`, + invalidDigitsCardHolderNameError: "El nom del titular de la targeta no pot tenir dígits", + nickNameLengthExceedError: "El sobrenom no pot superar els 12 caràcters", + invalidDigitsNickNameError: "El sobrenom no pot tenir més de 2 dígits", addPaymentMethodLabel: `Afegir un nou mètode de pagament`, cardHolderNameRequiredText: `Cal el nom del titular de la targeta`, walletDisclaimer: `Els detalls de la cartera es desaran en seleccionar-lo`, @@ -878,6 +914,9 @@ let localeStrings = [ requiredText: `obrigatório`, lastNameRequiredText: `Sobrenome necessário`, cardExpiresText: `expira`, + invalidDigitsCardHolderNameError: "O nome do titular do cartão não pode conter dígitos", + nickNameLengthExceedError: "O apelido não pode exceder 12 caracteres", + invalidDigitsNickNameError: "O apelido não pode conter mais de 2 dígitos", addPaymentMethodLabel: `Adicione uma nova forma de pagamento`, cardHolderNameRequiredText: `Nome do titular do cartão obrigatório`, walletDisclaimer: `Os detalhes da carteira serão salvos após a seleção`, @@ -946,6 +985,9 @@ let localeStrings = [ requiredText: `Obbligatorio`, lastNameRequiredText: `Cognome richiesto`, cardExpiresText: `scade`, + invalidDigitsCardHolderNameError: "Il nome del titolare della carta non può contenere cifre", + nickNameLengthExceedError: "Il soprannome non può superare i 12 caratteri", + invalidDigitsNickNameError: "Il soprannome non può contenere più di 2 cifre", addPaymentMethodLabel: `Aggiungi un nuovo metodo di pagamento`, cardHolderNameRequiredText: `È obbligatorio il nome del titolare della carta`, walletDisclaimer: `I dettagli del portafoglio verranno salvati al momento della selezione`, @@ -1015,6 +1057,9 @@ let localeStrings = [ lastNameRequiredText: `Wymagane nazwisko`, cardExpiresText: `wygasa`, addPaymentMethodLabel: `Dodaj nową metodę płatności`, + invalidDigitsCardHolderNameError: "Imię posiadacza karty nie może zawierać cyfr", + nickNameLengthExceedError: "Pseudonim nie może przekraczać 12 znaków", + invalidDigitsNickNameError: "Pseudonim nie może zawierać więcej niż 2 cyfry", cardHolderNameRequiredText: `Wymagane jest podanie imienia i nazwiska posiadacza karty`, walletDisclaimer: `Szczegóły portfela zostaną zapisane po dokonaniu wyboru`, }, @@ -1082,6 +1127,9 @@ let localeStrings = [ requiredText: `Vereist`, lastNameRequiredText: `Achternaam vereist`, cardExpiresText: `verloopt`, + invalidDigitsCardHolderNameError: "De naam van de kaarthouder mag geen cijfers bevatten", + nickNameLengthExceedError: "De bijnaam mag niet langer zijn dan 12 tekens", + invalidDigitsNickNameError: "De bijnaam mag niet meer dan 2 cijfers bevatten", addPaymentMethodLabel: `Nieuwe betaalmethode toevoegen`, cardHolderNameRequiredText: `Naam van de kaarthouder vereist`, walletDisclaimer: `Portemonneegegevens worden opgeslagen bij selectie`, @@ -1150,6 +1198,9 @@ let localeStrings = [ requiredText: `Vereist`, lastNameRequiredText: `Achternaam vereist`, cardExpiresText: `verloopt`, + invalidDigitsCardHolderNameError: "De naam van de kaarthouder mag geen cijfers bevatten", + nickNameLengthExceedError: "De bijnaam mag niet langer zijn dan 12 tekens", + invalidDigitsNickNameError: "De bijnaam mag niet meer dan 2 cijfers bevatten", addPaymentMethodLabel: `Nieuwe betaalmethode toevoegen`, cardHolderNameRequiredText: `Naam van de kaarthouder vereist`, walletDisclaimer: `Portemonneegegevens worden opgeslagen bij selectie`, @@ -1218,6 +1269,9 @@ let localeStrings = [ requiredText: `Nödvändig`, lastNameRequiredText: `Efternamn krävs`, cardExpiresText: `går ut`, + invalidDigitsCardHolderNameError: "Kortinnehavarens namn får inte innehålla siffror", + nickNameLengthExceedError: "Smeknamnet får inte överstiga 12 tecken", + invalidDigitsNickNameError: "Smeknamnet får inte innehålla mer än 2 siffror", addPaymentMethodLabel: `Lägg till ny betalningsmetod`, cardHolderNameRequiredText: `Naam van de kaarthouder vereist`, walletDisclaimer: `Information om plånboken sparas vid val`, @@ -1286,6 +1340,9 @@ let localeStrings = [ requiredText: `Необходимый`, lastNameRequiredText: `Требуется фамилия`, cardExpiresText: `истекает`, + invalidDigitsCardHolderNameError: "Имя владельца карты не может содержать цифры", + nickNameLengthExceedError: "Никнейм не может превышать 12 символов", + invalidDigitsNickNameError: "Никнейм не может содержать более 2 цифр", addPaymentMethodLabel: ` Добавить новый способ оплаты`, cardHolderNameRequiredText: `Требуется имя держателя карты`, walletDisclaimer: `Данные кошелька будут сохранены после выбора`, @@ -1354,6 +1411,9 @@ let localeStrings = [ requiredText: `Būtinas`, lastNameRequiredText: `Reikalingas pavardė`, cardExpiresText: `baigiasi`, + invalidDigitsCardHolderNameError: "Kortelės turėtojo vardas negali turėti skaitmenų", + nickNameLengthExceedError: "Slapyvardis negali viršyti 12 simbolių", + invalidDigitsNickNameError: "Slapyvardis negali turėti daugiau nei 2 skaitmenų", addPaymentMethodLabel: `Pridėti naują mokėjimo būdą`, cardHolderNameRequiredText: `Būtinas kortelės turėtojo vardas`, walletDisclaimer: `Išsami piniginės informacija bus išsaugota pasirinkus`, @@ -1422,6 +1482,9 @@ let localeStrings = [ requiredText: `Požadované`, lastNameRequiredText: `Požadováno příjmení`, cardExpiresText: `vyprší`, + invalidDigitsCardHolderNameError: "Jméno držitele karty nesmí obsahovat číslice", + nickNameLengthExceedError: "Přezdívka nesmí překročit 12 znaků", + invalidDigitsNickNameError: "Přezdívka nesmí obsahovat více než 2 číslice", addPaymentMethodLabel: `Přidat nový způsob platby`, cardHolderNameRequiredText: `Je vyžadováno jméno držitele karty`, walletDisclaimer: `Podrobnosti o peněžence se po výběru uloží`, @@ -1490,6 +1553,9 @@ let localeStrings = [ requiredText: `Požadovaný`, lastNameRequiredText: `Vyžadované priezvisko`, cardExpiresText: `vyprší`, + invalidDigitsCardHolderNameError: "Meno držiteľa karty nesmie obsahovať číslice", + nickNameLengthExceedError: "Prezývka nesmie presiahnuť 12 znakov", + invalidDigitsNickNameError: "Prezývka nesmie obsahovať viac ako 2 číslice", addPaymentMethodLabel: `Pridať nový spôsob platby`, cardHolderNameRequiredText: `Vyžaduje sa meno držiteľa karty`, walletDisclaimer: `Podrobnosti o peňaženke sa po výbere uložia`, @@ -1558,6 +1624,9 @@ let localeStrings = [ requiredText: `Nauðsynlegt`, lastNameRequiredText: `Eftirnafn krafist`, cardExpiresText: `rennur út`, + invalidDigitsCardHolderNameError: "Nafn korthafa má ekki innihalda tölustafi", + nickNameLengthExceedError: "Gælunafn má ekki fara yfir 12 stafi", + invalidDigitsNickNameError: "Gælunafn má ekki innihalda fleiri en 2 tölustafi", addPaymentMethodLabel: `Bæta við nýrri greiðsluaðferð`, cardHolderNameRequiredText: `Nafn korthafa krafist`, walletDisclaimer: `Upplýsingar um veski verða vistaðar við val`, @@ -1626,6 +1695,9 @@ let localeStrings = [ requiredText: `Yn ofynnol`, lastNameRequiredText: `Enw olaf Angenrheidiol`, cardExpiresText: `yn dod i ben`, + invalidDigitsCardHolderNameError: "Ni all enw deiliad y cerdyn gynnwys rhifau", + nickNameLengthExceedError: "Ni all llysenw fod yn fwy na 12 nod", + invalidDigitsNickNameError: "Ni all llysenw gynnwys mwy na 2 rif", addPaymentMethodLabel: ` Ychwanegu dull talu newydd`, cardHolderNameRequiredText: `Angen enw Deiliad y Cerdyn`, walletDisclaimer: `Bydd manylion waled yn cael eu cadw wrth ddewis`, @@ -1694,6 +1766,9 @@ let localeStrings = [ requiredText: `Απαιτείται`, lastNameRequiredText: `Απαιτείται επώνυμο`, cardExpiresText: `λήγει`, + invalidDigitsCardHolderNameError: "Το όνομα του κατόχου της κάρτας δεν μπορεί να περιέχει ψηφία", + nickNameLengthExceedError: "Το ψευδώνυμο δεν μπορεί να υπερβαίνει τους 12 χαρακτήρες", + invalidDigitsNickNameError: "Το ψευδώνυμο δεν μπορεί να περιέχει περισσότερα από 2 ψηφία", addPaymentMethodLabel: `Προσθήκη νέας μεθόδου πληρωμής`, cardHolderNameRequiredText: `Απαιτείται το όνομα του κατόχου της κάρτας`, walletDisclaimer: `Τα στοιχεία του πορτοφολιού θα αποθηκευτούν κατά την επιλογή`, @@ -1762,6 +1837,9 @@ let localeStrings = [ requiredText: `Nõutud`, lastNameRequiredText: `Vajalik perekonnanimi`, cardExpiresText: `aegub`, + invalidDigitsCardHolderNameError: "Kaardi omaniku nimi ei tohi sisaldada numbreid", + nickNameLengthExceedError: "Hüüdnimi ei tohi ületada 12 tähemärki", + invalidDigitsNickNameError: "Hüüdnimi ei tohi sisaldada rohkem kui 2 numbrit", addPaymentMethodLabel: `Lisa uus makseviis`, cardHolderNameRequiredText: `Vajalik on kaardi omaniku nimi`, walletDisclaimer: `Rahakoti andmed salvestatakse valimisel`, @@ -1830,6 +1908,9 @@ let localeStrings = [ requiredText: `Edellytetään`, lastNameRequiredText: `Sukunimi vaaditaan`, cardExpiresText: `umpeutuu`, + invalidDigitsCardHolderNameError: "Kortinhaltijan nimi ei voi sisältää numeroita", + nickNameLengthExceedError: "Lempinimi ei saa ylittää 12 merkkiä", + invalidDigitsNickNameError: "Lempinimessä ei voi olla yli 2 numeroa", addPaymentMethodLabel: `Lisää uusi maksutapa`, cardHolderNameRequiredText: `Kortinhaltijan nimi vaaditaan`, walletDisclaimer: `Lompakon tiedot tallennetaan valinnan yhteydessä`, @@ -1898,6 +1979,9 @@ let localeStrings = [ requiredText: `Påkrevd`, lastNameRequiredText: `Etternavn påkrevd`, cardExpiresText: `utløper`, + invalidDigitsCardHolderNameError: "Kortinnehaverens navn kan ikke inneholde sifre", + nickNameLengthExceedError: "Kallenavn kan ikke overstige 12 tegn", + invalidDigitsNickNameError: "Kallenavn kan ikke ha mer enn 2 sifre", addPaymentMethodLabel: `Legg til en ny betalingsmåte`, cardHolderNameRequiredText: `Kortholders navn kreves`, walletDisclaimer: `Lommebokdetaljer vil bli lagret ved valg`, @@ -1966,6 +2050,9 @@ let localeStrings = [ requiredText: `Potreban`, lastNameRequiredText: `Potrebno je prezime`, cardExpiresText: `ističe`, + invalidDigitsCardHolderNameError: "Ime vlasnika kartice ne može sadržavati brojeve", + nickNameLengthExceedError: "Nadimak ne može imati više od 12 znakova", + invalidDigitsNickNameError: "Nadimak ne može sadržavati više od 2 broja", addPaymentMethodLabel: `Dodajte novi način plaćanja`, cardHolderNameRequiredText: `Potrebno je ime vlasnika kartice`, walletDisclaimer: `Detalji novčanika će biti sačuvani nakon odabira`, @@ -2034,6 +2121,9 @@ let localeStrings = [ requiredText: `Krævet`, lastNameRequiredText: `Efternavn krævet`, cardExpiresText: `udløber`, + invalidDigitsCardHolderNameError: "Kortholderens navn må ikke indeholde tal", + nickNameLengthExceedError: "Kælenavn må ikke overstige 12 tegn", + invalidDigitsNickNameError: "Kælenavn må ikke indeholde mere end 2 tal", addPaymentMethodLabel: `Tilføj ny betalingsmetode`, cardHolderNameRequiredText: `Kortholders navn påkrævet`, walletDisclaimer: `Tegnebogsoplysninger gemmes ved valg`, @@ -2102,6 +2192,9 @@ let localeStrings = [ requiredText: `Diperlukan`, lastNameRequiredText: `Nama terakhir diperluka`, cardExpiresText: `luput`, + invalidDigitsCardHolderNameError: "Nama Pemegang Kad tidak boleh mengandungi digit", + nickNameLengthExceedError: "Nama samaran tidak boleh melebihi 12 aksara", + invalidDigitsNickNameError: "Nama samaran tidak boleh mempunyai lebih daripada 2 digit", addPaymentMethodLabel: `Tambah kaedah pembayaran baru`, cardHolderNameRequiredText: `Nama Pemegang Kad diperlukan`, walletDisclaimer: `Butiran dompet akan disimpan semasa pemilihan`, @@ -2170,6 +2263,9 @@ let localeStrings = [ requiredText: `Gerekli`, lastNameRequiredText: `Soyad gerekli`, cardExpiresText: `süresi doluyor`, + invalidDigitsCardHolderNameError: "Kart sahibinin adı rakam içermemelidir", + nickNameLengthExceedError: "Takma ad 12 karakteri aşamaz", + invalidDigitsNickNameError: "Takma ad 2'den fazla rakam içeremez", addPaymentMethodLabel: `Yeni ödeme yöntemi ekle`, cardHolderNameRequiredText: `Kart Sahibinin adı gereklidir`, walletDisclaimer: `Cüzdan bilgileri seçim sırasında kaydedilecektir`,