Browse Source
feat: implement marriage matching application flow and internationalization support
front-test-2
feat: implement marriage matching application flow and internationalization support
front-test-2
74 changed files with 9856 additions and 3485 deletions
-
54scratch/update_translations.js
-
36src/app/candidate-contact/page.tsx
-
66src/app/finding-match/page.tsx
-
29src/app/globals.css
-
43src/app/intro/page.tsx
-
20src/app/layout.tsx
-
152src/app/new-match/page.tsx
-
105src/app/new-match/profile/page.tsx
-
9src/app/questions-list/[slug]/answer-pace-sheet.tsx
-
10src/app/questions-list/[slug]/page.tsx
-
16src/app/questions-list/[slug]/question-detail-client.tsx
-
115src/app/questions-list/page.tsx
-
11src/app/questions-list/sections-request.tsx
-
48src/app/request-accepted/page.tsx
-
17src/app/request-sent/page.tsx
-
15src/components/Componentes/button.tsx
-
29src/components/Componentes/call-result-sheet.tsx
-
136src/components/Componentes/dismiss-reason-sheet.tsx
-
23src/components/Componentes/error-toast.tsx
-
2src/components/Componentes/female-consent-sheet.tsx
-
18src/components/Componentes/fix-to-the-end.tsx
-
8src/components/Componentes/help-modal.tsx
-
38src/components/Componentes/information-sheet.tsx
-
27src/components/Componentes/loading-skeleton.tsx
-
280src/components/Componentes/navigation-button.tsx
-
4src/components/Componentes/notice-box.tsx
-
24src/components/Componentes/outcome-selection-sheet.tsx
-
35src/components/Componentes/page-header.tsx
-
59src/components/Componentes/progress-helper.ts
-
6src/components/Componentes/question-card.tsx
-
4src/components/Componentes/question-dropdown.tsx
-
4src/components/Componentes/question-number.tsx
-
29src/components/Componentes/question-phone.tsx
-
8src/components/Componentes/question-section-flow.tsx
-
4src/components/Componentes/question-slider.tsx
-
2src/components/Componentes/question-text.tsx
-
16src/components/Componentes/question-title.tsx
-
8src/components/Componentes/required-steps-card.tsx
-
7src/components/Componentes/slider-slide-four.tsx
-
18src/components/Componentes/subscription-required-sheet.tsx
-
13src/components/Componentes/support-sheet.tsx
-
2src/components/Componentes/swipe-button.tsx
-
2src/components/Componentes/test-intro-page.tsx
-
8src/components/Componentes/token-switcher.tsx
-
4src/data/question-data.ts
-
7src/hooks/marriage/types.ts
-
29src/hooks/marriage/use-rejection-seen.ts
-
17src/lib/auth-bridge.ts
-
3src/lib/http.ts
-
1009src/translations/locales/ar.json
-
1009src/translations/locales/az.json
-
1009src/translations/locales/bn.json
-
1007src/translations/locales/da.json
-
1007src/translations/locales/de.json
-
1011src/translations/locales/en.json
-
1007src/translations/locales/es.json
-
1011src/translations/locales/fa.json
-
1007src/translations/locales/fr.json
-
1007src/translations/locales/gu.json
-
1007src/translations/locales/ha.json
-
4src/translations/locales/he.json
-
4src/translations/locales/hi.json
-
4src/translations/locales/id.json
-
4src/translations/locales/ks.json
-
4src/translations/locales/pt.json
-
4src/translations/locales/ru.json
-
4src/translations/locales/sw.json
-
4src/translations/locales/tg.json
-
4src/translations/locales/tr.json
-
4src/translations/locales/ul.json
-
4src/translations/locales/ur.json
-
4src/translations/locales/uz.json
-
4src/translations/locales/zh.json
-
248src/translations/path_to_english.json
@ -0,0 +1,54 @@ |
|||
const fs = require("fs"); |
|||
const path = require("path"); |
|||
|
|||
const localesDir = path.join(__dirname, "..", "src", "translations", "locales"); |
|||
const files = fs.readdirSync(localesDir).filter((f) => f.endsWith(".json")); |
|||
|
|||
const newTranslations = { |
|||
fa: { |
|||
subscriptionNoActiveTitle: "فاقد اشتراک فعال", |
|||
subscriptionNoActiveDesc: |
|||
"شما در حال حاضر اشتراک فعالی ندارید. فعالسازی اشتراک تنها زمانی امکانپذیر است که اولین کیس به شما معرفی شود.", |
|||
subscriptionStatusTitle: "وضعیت اشتراک", |
|||
subscriptionStatusDesc: "{days} روز از اعتبار اشتراک شما باقی مانده است.", |
|||
subscriptionRenewButton: "تمدید اشتراک", |
|||
subscriptionRenewPending: "در حال تمدید...", |
|||
}, |
|||
ar: { |
|||
subscriptionNoActiveTitle: "لا يوجد اشتراك نشط", |
|||
subscriptionNoActiveDesc: |
|||
"ليس لديك اشتراك نشط حاليًا. تفعيل الاشتراك ممكن فقط عند تقديم أول مرشح لك.", |
|||
subscriptionStatusTitle: "حالة الاشتراك", |
|||
subscriptionStatusDesc: "متبقي {days} يوم من صلاحية اشتراكك.", |
|||
subscriptionRenewButton: "تجديد الاشتراك", |
|||
subscriptionRenewPending: "جاري التجديد...", |
|||
}, |
|||
default: { |
|||
subscriptionNoActiveTitle: "No Active Subscription", |
|||
subscriptionNoActiveDesc: |
|||
"You currently do not have an active subscription. Activation of subscription is only possible when your first case is introduced to you.", |
|||
subscriptionStatusTitle: "Subscription Status", |
|||
subscriptionStatusDesc: "{days} days remaining of your subscription.", |
|||
subscriptionRenewButton: "Renew Subscription", |
|||
subscriptionRenewPending: "Renewing...", |
|||
}, |
|||
}; |
|||
|
|||
files.forEach((file) => { |
|||
const filePath = path.join(localesDir, file); |
|||
const data = JSON.parse(fs.readFileSync(filePath, "utf8")); |
|||
|
|||
if (!data.common) { |
|||
data.common = {}; |
|||
} |
|||
|
|||
const lang = file.replace(".json", ""); |
|||
const translations = newTranslations[lang] || newTranslations.default; |
|||
|
|||
Object.keys(translations).forEach((key) => { |
|||
data.common[key] = translations[key]; |
|||
}); |
|||
|
|||
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf8"); |
|||
console.log(`Updated ${file}`); |
|||
}); |
|||
@ -0,0 +1,18 @@ |
|||
"use client"; |
|||
|
|||
import type { ReactNode } from "react"; |
|||
|
|||
type FixToTheEndProps = { |
|||
children: ReactNode; |
|||
}; |
|||
|
|||
export function FixToTheEnd({ children }: FixToTheEndProps) { |
|||
return ( |
|||
<div |
|||
style={{ paddingBottom: "calc(16px + var(--safe-bottom))" }} |
|||
className="fixed inset-x-0 bottom-0 z-20 mx-auto w-full max-w-[375px] bg-[#F5F5F5]/95 px-[17px] pt-3 backdrop-blur-md" |
|||
> |
|||
{children} |
|||
</div> |
|||
); |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
import type { ComponentProps } from "react"; |
|||
|
|||
interface LoadingSkeletonProps extends ComponentProps<"div"> { |
|||
variant?: "pulse" | "shimmer"; |
|||
} |
|||
|
|||
export function LoadingSkeleton({ |
|||
className = "", |
|||
variant = "shimmer", |
|||
...props |
|||
}: LoadingSkeletonProps) { |
|||
const baseClasses = |
|||
variant === "shimmer" |
|||
? "shimmer-bg" |
|||
: "animate-pulse bg-neutral-200/80 dark:bg-neutral-800/80"; |
|||
|
|||
const hasRoundedClass = className.split(" ").some((c) => c.startsWith("rounded-")); |
|||
const roundedClass = hasRoundedClass ? "" : "rounded-md"; |
|||
|
|||
return ( |
|||
<div |
|||
data-slot="loading-skeleton" |
|||
className={`${baseClasses} ${roundedClass} ${className}`.trim()} |
|||
{...props} |
|||
/> |
|||
); |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
"use client"; |
|||
|
|||
import { useMutation, useQueryClient } from "@tanstack/react-query"; |
|||
import { http } from "@/lib/http"; |
|||
import { marriageQueryKeys } from "./query-keys"; |
|||
import type { UseMutationOptions } from "@tanstack/react-query"; |
|||
|
|||
export interface RejectionSeenPayload { |
|||
rejection_id: number; |
|||
} |
|||
|
|||
export function useRejectionSeenMutation( |
|||
options?: UseMutationOptions<void, Error, RejectionSeenPayload>, |
|||
) { |
|||
const queryClient = useQueryClient(); |
|||
|
|||
return useMutation({ |
|||
...options, |
|||
mutationFn: async (payload: RejectionSeenPayload) => { |
|||
await http.post("/api/marriage/profile/main/rejection-seen/", payload); |
|||
}, |
|||
onSuccess: (...args) => { |
|||
queryClient.invalidateQueries({ |
|||
queryKey: marriageQueryKeys.profile(), |
|||
}); |
|||
options?.onSuccess?.(...args); |
|||
}, |
|||
}); |
|||
} |
|||
1009
src/translations/locales/ar.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1009
src/translations/locales/az.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1009
src/translations/locales/bn.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1007
src/translations/locales/da.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1007
src/translations/locales/de.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1011
src/translations/locales/en.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1007
src/translations/locales/es.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1011
src/translations/locales/fa.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1007
src/translations/locales/fr.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1007
src/translations/locales/gu.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1007
src/translations/locales/ha.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,248 @@ |
|||
{ |
|||
"common.appName": "Habib Marriage", |
|||
"common.submit": "Submit", |
|||
"common.decline": "Decline", |
|||
"common.continue": "Continue", |
|||
"common.cancel": "Cancel", |
|||
"common.confirm": "Confirm", |
|||
"common.support": "Support", |
|||
"common.back": "Back", |
|||
"common.required": "Required", |
|||
"common.estimateTime": "Estimate time", |
|||
"common.rangeError": "The value entered seems incorrect. Please provide a realistic value.", |
|||
"common.help": "Help", |
|||
"common.gotIt": "Got it", |
|||
"common.helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.", |
|||
"common.finalMatchIntroduce": "Final Match Introduction", |
|||
"common.confirmFinalMatch": "Confirm Final Match", |
|||
"common.confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?", |
|||
"common.page": "Page", |
|||
"common.totalPages": "Total Pages", |
|||
"common.nextPage": "Next Page", |
|||
"common.previousPage": "Previous Page", |
|||
"common.itemsPerPage": "Items Per Page", |
|||
"common.other": "Other", |
|||
"common.consultation": "Consultation", |
|||
"common.supportTitle": "Contact Support", |
|||
"common.supportDescription": "If you encounter any issues, please feel free to contact our support specialists in WhatsApp", |
|||
"common.supportSwipeText": "Contact", |
|||
"common.subscription": "Subscription", |
|||
"common.subscriptionActive": "Your subscription is active", |
|||
"common.subscriptionActiveDesc": "You have active access to view candidates.", |
|||
"common.subscriptionNoActiveTitle": "No Active Subscription", |
|||
"common.subscriptionNoActiveDesc": "You currently do not have an active subscription. Activation of subscription is only possible when your first case is introduced to you.", |
|||
"common.subscriptionStatusTitle": "Subscription Status", |
|||
"common.subscriptionStatusDesc": "{days} days remaining of your subscription.", |
|||
"common.subscriptionRenewButton": "Renew Subscription", |
|||
"common.subscriptionRenewPending": "Renewing...", |
|||
"intro.imageAlt": "heavenly marriage", |
|||
"intro.title": "A Path to Heavenly Marriage", |
|||
"intro.description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims", |
|||
"intro.userProfile": "user profiles", |
|||
"intro.matches": "matches", |
|||
"intro.marriage": "marriages", |
|||
"intro.videoAlt": "video", |
|||
"intro.playAlt": "play", |
|||
"questions.privateFieldNotice": "Private (Advisors Only)", |
|||
"questions.profileRegistration": "Profile registration", |
|||
"questions.closeQuestionsList": "Close questions list", |
|||
"questions.requiredSteps": "Required Steps", |
|||
"questions.requiredStepsDescription": "Please complete the required information so we can find suitable matches for you", |
|||
"questions.requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you", |
|||
"questions.requiredStepsProgress": "{completed} of {total} required steps completed", |
|||
"questions.findMatches": "Find Matches", |
|||
"questions.findingMatch": "Submit", |
|||
"questions.optionalInfoPromptTitle": "Important Note", |
|||
"questions.optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you", |
|||
"questions.completeNecessaryForms": "(Complete Required Forms)", |
|||
"questions.openQuestion": "Open {title}", |
|||
"questions.answerAtYourOwnPace": "Answer at Your Own Pace", |
|||
"questions.answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.", |
|||
"questions.testIntroDisclaimer": "All provided information is held in strict confidence and will not be disclosed to third parties. This data is utilized exclusively to ensure optimal matchmaking accuracy. Consequently, it is imperative that this assessment be completed with the utmost diligence, precision, and integrity.", |
|||
"questions.testIntroStart": "Start", |
|||
"questions.testIntroEstimateLabel": "Estimate time", |
|||
"questions.testIntroBullets.personality.0": "Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?", |
|||
"questions.testIntroBullets.personality.1": "Taking this test is not mandatory, but it will help you better search for a spouse. The Personality test is a test for self-knowledge and better understanding of your spouse.", |
|||
"questions.testIntroBullets.personality.2": "Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?", |
|||
"questions.testIntroBullets.glasser.0": "Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.", |
|||
"questions.testIntroBullets.glasser.1": "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", |
|||
"questions.testIntroBullets.glasser.2": "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships.", |
|||
"questions.startMatchFailed": "Sending the match request failed. Please check your connection and try again.", |
|||
"questions.moveToEnd": "Move to the End", |
|||
"questions.guardianNoticeUnder27": "To preserve your peace of mind, security, and dignity, the acquaintance process on our platform follows authentic and respectful family traditions. Having a trusted person (preferably a father or mother) as a representative, in addition to reflecting your noble family background, encourages the other party to step forward with full seriousness, respect, and confidence.", |
|||
"questions.guardianNoticeOver27": "Our goal is to establish lasting bonds based on mutual trust. Although registering a representative is not mandatory for you, introducing a trusted person (such as a father, mother, or family elder) demonstrates your transparency and serious intent for marriage. Profiles that feature a trusted representative command significantly higher credibility and provide greater peace of mind to the other party's family.", |
|||
"questions.familyMaritalTitle": "Family Background, Marital Status, and Children", |
|||
"questions.familyMaritalEstimate": "5 minutes", |
|||
"questions.notAPriority": "This is not a priority for me", |
|||
"questions.writeOtherTraits": "Write other options...", |
|||
"questions.fromAge": "From", |
|||
"questions.toAge": "To", |
|||
"questions.familyResponsibilityTooltip": "Please briefly explain the type of responsibility, its duration, the extent of financial or caregiving support, and its potential impact on your place of residence, relocation, or future married life conditions.", |
|||
"questions.childCustodyExplanationTooltip": "Please briefly explain the custody status, the child's visitation or presence schedule, potential restrictions on relocation or immigration, and related financial obligations. Avoid including the child's name, the other parent's name, or unnecessary personal details.", |
|||
"questions.currentMaritalStatusTooltip": "This private field requires the user to accurately declare their current marital status and relationship history from the specific options provided.", |
|||
"match.title": "New Match", |
|||
"match.goBack": "Go back", |
|||
"match.loadingProfile": "Loading match profile...", |
|||
"match.acceptProfile": "Accept Profile", |
|||
"match.requestProceedTitle": "Request to Proceed", |
|||
"match.requestProceedDescription": "Upon your approval, your request will be sent to the lady, and we must await her response. This process may take between 2 to 4 days. Thank you for your patience.", |
|||
"match.acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?", |
|||
"match.twoColumnComparison": "Two-Column Side-by-Side Match Comparison", |
|||
"match.horizontalAlignment": "Strict Horizontal Field Alignment", |
|||
"match.sourceCandidate": "Source Candidate (Right Column)", |
|||
"match.targetCandidate": "Opposite Sex Candidate (Left Column)", |
|||
"match.tabs.identity": "Identity & Demographics", |
|||
"match.tabs.bio": "Bio & Expectations", |
|||
"match.tabs.sections": "Form Sections Data", |
|||
"match.tabs.tests": "Psychological Assessments", |
|||
"match.fields.birthYear": "Year of birth", |
|||
"match.fields.nationality": "Nationality", |
|||
"match.fields.residence": "City and country of residence", |
|||
"match.fields.futureResidence": "City and country of future residence", |
|||
"match.fields.religion": "Religion", |
|||
"match.fields.countryCity": "Country / city", |
|||
"match.fields.currentlyLivingIn": "(currently living in)", |
|||
"match.fields.education": "Education", |
|||
"match.fields.occupation": "Occupation", |
|||
"match.values.iranian": "Iranian", |
|||
"match.values.iran": "Iran", |
|||
"match.values.tehran": "Tehran", |
|||
"match.values.muslim": "Muslim", |
|||
"match.values.education": "Bachelor's degree in architecture", |
|||
"match.values.occupation": "Interior designer", |
|||
"match.viewMoreDetails": "View more details", |
|||
"match.newMatchTitleFemale": "New Marriage Proposal", |
|||
"match.newMatchTitleMale": "YOU HAVE A NEW MATCH!", |
|||
"match.newMatchDescriptionFemale": "A suitable match has been found for you. If approved, your profile will be evaluated to proceed with the introduction process.", |
|||
"match.newMatchDescriptionMale": "If you proceed, we will notify the other party, and upon their approval, you can view each other's contact information.", |
|||
"match.femaleConsentTitle": "Final Consent", |
|||
"match.femaleConsentDescription": "Approving this profile will **display your contact number** to the gentleman. Ensure **family consensus** before proceeding.", |
|||
"match.femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.", |
|||
"match.femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**.", |
|||
"match.rejectProfileTitle": "Reject Profile", |
|||
"match.rejectProfileDescription": "Are you sure you've fully reviewed the profile and want to reject this profile?", |
|||
"match.reject": "Reject", |
|||
"requestAccepted.imageAlt": "Request accepted", |
|||
"requestAccepted.title": "Request Accepted", |
|||
"requestAccepted.description": "You can now view their family's contact details and arrange further steps.", |
|||
"requestAccepted.viewContact": "View Contact", |
|||
"requestAccepted.penalty": "Please note: Failure to contact within 2 days may result in a penalty", |
|||
"requestAccepted.profileLocked": "Profile is locked", |
|||
"requestAccepted.lockedDescription": "You can't edit your profile while we're searching for matches", |
|||
"requestAccepted.titleFemale": "Request Approved", |
|||
"requestAccepted.titleMalePaymentDone": "Contact info released", |
|||
"requestAccepted.titleMalePaymentPending": "Request approved!", |
|||
"requestAccepted.primaryFemale": "Report no contact", |
|||
"requestAccepted.primaryMale": "View profile", |
|||
"requestAccepted.secondaryFemale": "Record call result", |
|||
"requestAccepted.secondaryMalePaymentDone": "View contact number", |
|||
"requestAccepted.secondaryMalePaymentPending": "Pay and get contact", |
|||
"requestAccepted.titleContactReleased": "Contact Information Released", |
|||
"requestAccepted.titleMaleApproved": "Request Approved!", |
|||
"requestAccepted.actionReportNoContact": "Report No Contact", |
|||
"requestAccepted.actionViewProfile": "View Profile", |
|||
"requestAccepted.actionSubmitCallResult": "Submit Call Result", |
|||
"requestAccepted.actionViewContact": "View Contact Details", |
|||
"requestAccepted.actionPayAndGetContact": "Pay & Get Contact", |
|||
"requestAccepted.contactDetailTitle": "Contact Detail", |
|||
"requestAccepted.contactDetailDescription": "Please mention during the call that you were introduced by the Habib Marriage app.", |
|||
"requestAccepted.contactNotAvailable": "Contact information is not available yet.", |
|||
"requestAccepted.contactWarning": "Please be informed that from the time of this introduction, you have 48 hours (2 days) to contact the person or their respected family to declare your readiness and begin the acquaintance process. At this stage, merely an initial call to announce your presence is sufficient, and planning for further steps (such as an in-person meeting) depends entirely on your subsequent mutual agreements.\n\nSince failing to make contact within the specified time might be considered socially disrespectful, if no action is taken within these 2 days, the introduced match will be removed according to the platform's rules. We also remind you that this issue may lead to restrictions such as delays in future introductions and financial penalties.", |
|||
"findingMatch.title": "SEARCH IN PROGRESS", |
|||
"findingMatch.description": "Our system is actively looking for compatible partners based on your criteria. This process requires time and patience. We will notify you immediately once a profile is ready for your review.", |
|||
"findingMatch.advisorTitle": "Get an advisor", |
|||
"findingMatch.advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.", |
|||
"findingMatch.getAdvisor": "Get Advisor", |
|||
"findingMatch.editProfile": "Edit Profile", |
|||
"candidateContact.imageAlt": "Selected candidate contact status", |
|||
"candidateContact.title": "The selected candidate will contact your family shortly.", |
|||
"candidateContact.contacted": "Confirm Contacted", |
|||
"candidateContact.noContactYet": "Report No Contact", |
|||
"candidateContact.afterTwoDays": "(after 2 days)", |
|||
"candidateContact.contactWarning": "To keep the process moving smoothly, the other party has a 48-hour (2-day) window to make initial contact with you or your family. If no contact is established after 2 days, you have the option to decline his request or notify us that he hasn't reached out.", |
|||
"candidateContact.submitOutcome": "Submit Final Outcome", |
|||
"candidateContact.outcomeGuide": "Please report the final outcome of the proposal and communication to the system.", |
|||
"candidateContact.outcomeTitle": "What was the outcome of your contact?", |
|||
"candidateContact.marriageSuccess": "We reached an agreement", |
|||
"candidateContact.marriageFailure": "We did not reach an agreement", |
|||
"candidateContact.congratsTitle": "Congratulations! 🎉", |
|||
"candidateContact.congratsMessage": "Wishing you a lifetime of love, joy, and happiness. Your profile has been successfully closed.", |
|||
"candidateContact.thankYouFeedback": "Thank you for giving us feedback, we would be very happy if you also let us know the final result.", |
|||
"sheets.informationSheet": "Information sheet", |
|||
"sheets.callResult": "Call result", |
|||
"sheets.selectCallResult": "Select call result", |
|||
"sheets.callOptions.0": "Not a good personal fit", |
|||
"sheets.callOptions.1": "No mutual interest", |
|||
"sheets.callOptions.2": "Different expectations", |
|||
"sheets.callOptions.3": "No connection felt", |
|||
"sheets.callOptions.4": "Location not suitable", |
|||
"sheets.callOptions.5": "Other reasons", |
|||
"sheets.dismissReasons": "Dismiss reasons", |
|||
"sheets.dismissDescription": "Please provide the full reason for rejecting the submitted item", |
|||
"sheets.dismissPlaceholder": "Feel free to briefly explain your decision...", |
|||
"requestSent.title": "Request Sent", |
|||
"requestSent.description": "Your request has been sent. Once the lady reviews your request, you will be notified.", |
|||
"requestSent.matchProfile": "View More Details", |
|||
"requestSent.profileLocked": "Profile is locked", |
|||
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors.", |
|||
"paymentModal.title": "Verification & Subscription Activation", |
|||
"paymentModal.verificationText": "This payment acts as a verification process for your account and activates a 3-month subscription to receive new case introductions. The cost of this subscription is 50 Habib Coins.", |
|||
"paymentModal.disclaimerText": "Please note that there is no guarantee for a specific number of cases, and the volume of incoming cases is solely subject to profile compatibility with other users.", |
|||
"paymentModal.swipeToPay": "Swipe to pay 50 Habib Coins", |
|||
"paymentModal.insufficientCoins": "Insufficient coin balance. Please recharge your account.", |
|||
"paymentModal.activeFor3Months": "Valid for 3 months", |
|||
"paymentModal.cost": "50 Coins", |
|||
"paymentModal.close": "Exit", |
|||
"paymentModal.payment": "Payment", |
|||
"paymentModal.pay": "Pay", |
|||
"paymentModal.paymentSuccess": "Payment successful", |
|||
"maleRejectionWarning.title": "Rejection Warning", |
|||
"maleRejectionWarning.carefulReview": "Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.", |
|||
"maleRejectionWarning.friendlyDelay": "Please note that rejecting this case might cause a delay in recommending the next match, but there is absolutely no obligation to accept and you are fully free to choose.", |
|||
"maleRejectionWarning.noPenalty": "Confirming this rejection will not result in any penalty. Instead, it simply enters your status into a 2-day decision window to finalize the case.", |
|||
"maleRejectionWarning.swipeText": "Swipe to confirm rejection", |
|||
"onboarding.submitProcess": "Submit Process", |
|||
"onboarding.termsAndConditions": "terms & conditions", |
|||
"onboarding.welcomeWarning": "Dear user, while welcoming you to the Habib Marij application, please read the following rules and regulations carefully before using the services of this platform. Your registration and use of this application constitutes full acceptance of these rules.", |
|||
"onboarding.eligibilityTitle": "1. Eligibility and Membership Requirements", |
|||
"onboarding.legalAgeLabel": "Legal Age:", |
|||
"onboarding.legalAgeValue": "Users must meet the minimum legal age for independent registration.", |
|||
"onboarding.identityVerificationLabel": "Identity Verification:", |
|||
"onboarding.identityVerificationValue": "Mandatory submission of valid government-issued ID upon registration.", |
|||
"onboarding.singleStatusLabel": "Single Status Commitment:", |
|||
"onboarding.singleStatusValue": "Users must provide proof of being single, or documents confirming divorce or spouse's death upon request.", |
|||
"onboarding.intentLabel": "Intent:", |
|||
"onboarding.intentValue": "Commitment to monogamy and intention for permanent marriage only (no simultaneous or temporary relationships).", |
|||
"onboarding.healthLabel": "General Health:", |
|||
"onboarding.healthValue": "Self-declaration regarding mental health, absence of addiction, and no criminal record.", |
|||
"onboarding.privacyTitle": "2. Privacy and Data Management", |
|||
"onboarding.contentSecurityLabel": "Content Security:", |
|||
"onboarding.contentSecurityValue": "Technical prevention of screenshots from profiles and chat environments.", |
|||
"onboarding.progressiveDisclosureLabel": "Progressive Disclosure:", |
|||
"onboarding.progressiveDisclosureValue": "Sensitive information (face, contact details) revealed step-by-step only with mutual consent.", |
|||
"onboarding.watchVideo": "Watch Video", |
|||
"onboarding.videoSpeaker": "Dr. Hasti Masoudi", |
|||
"onboarding.videoDescription": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims", |
|||
"onboarding.selectGender": "Select Gender", |
|||
"onboarding.submitMan": "Submit Man", |
|||
"onboarding.submitWoman": "Submit Woman", |
|||
"onboarding.registrationType": "Registration Type", |
|||
"onboarding.readTermsNotice": "Read the terms and conditions carefully so that you don't run into any problems in the next process - reading this section is mandatory.", |
|||
"onboarding.registerForSelf": "Registering for myself", |
|||
"onboarding.registerForOther": "Registering for someone else", |
|||
"onboarding.finalNotice": "Final Notice", |
|||
"onboarding.finalNoticeDesc": "Your privacy and safety are our top priorities. We are committed to keeping your information secure and giving you full control throughout the process.", |
|||
"onboarding.noticeItem1": "Your information is kept strictly confidential.", |
|||
"onboarding.noticeItem2": "Your details are only used for the matching process.", |
|||
"onboarding.noticeItem3": "Nothing is shared without your consent.", |
|||
"onboarding.noticeItem4": "You are always in control of what happens next.", |
|||
"onboarding.noticeItem5": "Contact details are shared only after your approval.", |
|||
"onboarding.noticeItem6": "We provide a safe and respectful environment at every step.", |
|||
"onboarding.closeSlider": "Close slider", |
|||
"onboarding.finish": "Finish", |
|||
"onboarding.next": "Next", |
|||
"onboarding.back": "Back", |
|||
"onboarding.accept": "Accept", |
|||
"rejectionNotice.title": "Your request was rejected", |
|||
"rejectionNotice.message": "Your request was rejected by the lady. You will be introduced to other candidates in the future." |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue