Browse Source

feat: initialize application structure with new UI components, internationalization support, and core matchmaking pages

front-test-2
ghorbani 2 weeks ago
parent
commit
088261a52c
  1. 16
      next.config.ts
  2. 1
      src/app/[lang]/candidate-contact/page.tsx
  3. 20
      src/app/api/proxy/route.ts
  4. 25
      src/app/candidate-contact/page.tsx
  5. 118
      src/app/finding-match/page.tsx
  6. 21
      src/app/new-match/page.tsx
  7. 129
      src/app/new-match/profile/page.tsx
  8. 4
      src/app/page.tsx
  9. 2
      src/app/providers.tsx
  10. 20
      src/app/questions-list/[slug]/question-detail-client.tsx
  11. 2
      src/app/questions-list/page.tsx
  12. 286
      src/app/request-accepted/page.tsx
  13. 11
      src/app/request-sent/page.tsx
  14. 15
      src/components/Componentes/button.tsx
  15. 23
      src/components/Componentes/dev-click-to-component.tsx
  16. 15
      src/components/Componentes/dismiss-reason-sheet.tsx
  17. 388
      src/components/Componentes/female-outcome-sheet.tsx
  18. 38
      src/components/Componentes/flutter-locale-sync.tsx
  19. 18
      src/components/Componentes/loading-border-spinner.tsx
  20. 16
      src/components/Componentes/loading-icon-spinner.tsx
  21. 20
      src/components/Componentes/loading-pulse-text.tsx
  22. 7
      src/components/Componentes/loading-select-spinner.tsx
  23. 16
      src/components/Componentes/loading-three-dot.tsx
  24. 1
      src/components/Componentes/navigation-button.tsx
  25. 4
      src/components/Componentes/page-header.tsx
  26. 49
      src/components/Componentes/page-loading-skeleton.tsx
  27. 56
      src/components/Componentes/question-answer-storage.tsx
  28. 23
      src/components/Componentes/question-birthplace.tsx
  29. 11
      src/components/Componentes/question-file.tsx
  30. 7
      src/components/Componentes/question-phone.tsx
  31. 3
      src/components/Componentes/question-photo.tsx
  32. 10
      src/components/Componentes/question-slider.tsx
  33. 8
      src/components/Componentes/subscription-required-sheet.tsx
  34. 3
      src/components/Componentes/swipe-button.tsx
  35. 171
      src/components/Componentes/test-loading-screen.tsx
  36. 12
      src/data/questions/en.json
  37. 12
      src/data/questions/fa.json
  38. 8
      src/lib/get-submit-path.ts
  39. 32
      src/lib/http.ts
  40. 47
      src/lib/view-paddings.ts
  41. 10
      src/translations/locales/ar.json
  42. 10
      src/translations/locales/az.json
  43. 10
      src/translations/locales/bn.json
  44. 10
      src/translations/locales/da.json
  45. 10
      src/translations/locales/de.json
  46. 37
      src/translations/locales/en.json
  47. 10
      src/translations/locales/es.json
  48. 23
      src/translations/locales/fa.json
  49. 10
      src/translations/locales/fr.json
  50. 10
      src/translations/locales/gu.json
  51. 10
      src/translations/locales/ha.json
  52. 274
      src/translations/locales/he.json
  53. 1015
      src/translations/locales/hi.json
  54. 274
      src/translations/locales/id.json
  55. 274
      src/translations/locales/ks.json
  56. 274
      src/translations/locales/pt.json
  57. 274
      src/translations/locales/ru.json
  58. 274
      src/translations/locales/sw.json
  59. 274
      src/translations/locales/tg.json
  60. 274
      src/translations/locales/tr.json
  61. 274
      src/translations/locales/ul.json
  62. 274
      src/translations/locales/ur.json
  63. 274
      src/translations/locales/uz.json
  64. 1015
      src/translations/locales/zh.json
  65. 2
      src/types/window.d.ts

16
next.config.ts

@ -39,6 +39,22 @@ const nextConfig: NextConfig = {
return config;
},
// Keep bookmarked links to the removed intermediate page functional.
async redirects() {
return [
{
source: "/candidate-contact",
destination: "/request-accepted",
permanent: false,
},
{
source: "/:lang/candidate-contact",
destination: "/:lang/request-accepted",
permanent: false,
},
];
},
// Headers for caching and preload
async headers() {
return [

1
src/app/[lang]/candidate-contact/page.tsx

@ -1 +0,0 @@
export { default } from "@/app/candidate-contact/page";

20
src/app/api/proxy/route.ts

@ -150,15 +150,17 @@ function getRequestHeaders(request: NextRequest, targetUrl: URL) {
}
// Dynamically set language headers
let lang =
getCookieValue(cookieHeader, "HABIB_LANGUAGE") ??
getCookieValue(cookieHeader, "habib_language") ??
request.headers.get("x-user-language") ??
request.headers.get("accept-language")?.split(",")[0]?.split("-")[0];
if (!isLocale(lang)) {
lang = "fa";
}
const requestedLanguages = [
request.headers.get("x-user-language"),
getCookieValue(cookieHeader, "HABIB_LANGUAGE"),
getCookieValue(cookieHeader, "habib_language"),
request.headers.get("accept-language")?.split(",")[0]?.split("-")[0],
];
const lang =
requestedLanguages.find(
(candidate): candidate is string =>
candidate !== null && isLocale(candidate),
) ?? "en";
headers.set("accept-encoding", "identity");
headers.set("accept-language", lang);

25
src/app/candidate-contact/page.tsx

@ -3,7 +3,8 @@
import Image from "next/image";
import { useRouter } from "next/navigation";
import { useEffect, useMemo, useState } from "react";
import { DotsLoader } from "@/components/Componentes/button";
import { LoadingThreeDot } from "@/components/Componentes/loading-three-dot";
import { PageLoadingSkeleton } from "@/components/Componentes/page-loading-skeleton";
import CallResultSheet from "@/components/Componentes/call-result-sheet";
import DismissReasonSheet from "@/components/Componentes/dismiss-reason-sheet";
import OutcomeSelectionSheet from "@/components/Componentes/outcome-selection-sheet";
@ -75,14 +76,7 @@ export default function CandidateContactPage() {
};
if (isProfileLoading || isRedirecting) {
return (
<>
<PageBackground />
<main className="-mx-[17px] flex min-h-screen flex-col px-[23px] pt-[max(16px,calc(var(--safe-top)+8px))] items-center justify-center">
<DotsLoader />
</main>
</>
);
return <PageLoadingSkeleton />;
}
// If female, render the beautiful, customized layout matching the design
@ -123,7 +117,10 @@ export default function CandidateContactPage() {
) : null}
<main className="-mx-[17px] flex min-h-screen flex-col px-[23px] pt-[max(16px,calc(var(--safe-top)+8px))] pb-[calc(20px+var(--safe-bottom))]">
<PageHeader className="-mx-[6px]" />
<PageHeader
className="-mx-[6px]"
leftButton={isFemale ? { icon: "back", className: "hidden" } : undefined}
/>
<div className="flex flex-1 flex-col justify-between gap-6 pt-4">
<section className="flex flex-col items-center">
@ -186,7 +183,7 @@ export default function CandidateContactPage() {
className="flex-1 h-[52px] rounded-[15px] bg-gradient-to-r from-[#FE6F82] to-[#E03950] text-white font-semibold group-14 flex items-center justify-center shadow-lg shadow-[#FE6F82]/30 transition-transform active:scale-[0.98] cursor-pointer hover:opacity-95 disabled:opacity-50"
>
{outcomeMutation.isPending ? (
<DotsLoader className="text-white" />
<LoadingThreeDot className="text-white" />
) : (
t["Submit Final Outcome"]
)}
@ -204,7 +201,7 @@ export default function CandidateContactPage() {
className="flex-1 h-[52px] rounded-[15px] bg-[#F5F5F7] text-[#8E8E93] font-semibold group-14 flex items-center justify-center transition-transform active:scale-[0.98] cursor-pointer hover:bg-[#EAEAEF] disabled:opacity-50"
>
{contactStatusMutation.isPending ? (
<DotsLoader className="text-[#8E8E93]" />
<LoadingThreeDot className="text-[#8E8E93]" />
) : (
t["Report No Contact"]
)}
@ -223,7 +220,7 @@ export default function CandidateContactPage() {
className="flex-1 h-[52px] rounded-[15px] bg-gradient-to-r from-[#FE6F82] to-[#E03950] text-white font-semibold group-14 flex items-center justify-center shadow-lg shadow-[#FE6F82]/30 transition-transform active:scale-[0.98] cursor-pointer hover:opacity-95 disabled:opacity-50"
>
{contactStatusMutation.isPending ? (
<DotsLoader className="text-white" />
<LoadingThreeDot className="text-white" />
) : (
t["Confirm Contacted"]
)}
@ -349,7 +346,7 @@ export default function CandidateContactPage() {
className="flex-1 h-[52px] rounded-[11px] border border-[#8B8B8B] bg-transparent text-[#8B8B8B] font-semibold flex items-center justify-center cursor-pointer transition-opacity active:opacity-90 disabled:opacity-50"
>
{contactStatusMutation.isPending ? (
<DotsLoader className="text-[#8B8B8B]" />
<LoadingThreeDot className="text-[#8B8B8B]" />
) : (
t["Report No Contact"]
)}

118
src/app/finding-match/page.tsx

@ -1,21 +1,21 @@
"use client";
import Image from "next/image";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { useEffect, useMemo } from "react";
import Button, { DotsLoader } from "@/components/Componentes/button";
import { FaLock, FaPen } from "react-icons/fa6";
import { IoAlertCircle } from "react-icons/io5";
import AdvisorActionsCard from "@/components/Componentes/advisor-actions-card";
import PageHeader from "@/components/Componentes/page-header";
import Button from "@/components/Componentes/button";
import { PageLoadingSkeleton } from "@/components/Componentes/page-loading-skeleton";
import { FixToTheEnd } from "@/components/Componentes/fix-to-the-end";
import { PageBackground } from "@/components/Componentes/page-background";
import PageHeader from "@/components/Componentes/page-header";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { useRejectionSeenMutation } from "@/hooks/marriage/use-rejection-seen";
import { getSubmitPath } from "@/lib/get-submit-path";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
import { FixToTheEnd } from "@/components/Componentes/fix-to-the-end";
import { useRejectionSeenMutation } from "@/hooks/marriage/use-rejection-seen";
import { IoAlertCircle } from "react-icons/io5";
const advisorAvatars = [
{ id: "advisor-primary", src: "/assets/images/Avatar Image.png" },
@ -49,25 +49,28 @@ export default function FindingMatchPage() {
}, [profile]);
if (isLoading || isRedirecting) {
return (
<>
<PageBackground />
<main className="-mx-[17px] flex min-h-screen flex-col px-[23px] pt-[max(16px,calc(var(--safe-top)+8px))] items-center justify-center">
<DotsLoader />
</main>
</>
);
return <PageLoadingSkeleton />;
}
const copy = {
title: t["SEARCH IN PROGRESS"],
description: t["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."],
description:
t[
"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."
],
advisorTitle: t["Get an advisor"],
advisorDescription: t["Not sure what to do next? Our psychology section is here to guide you at every step."],
advisorDescription:
t[
"Not sure what to do next? Our psychology section is here to guide you at every step."
],
getAdvisor: t["Get Advisor"],
editProfile: t["Edit Profile"]
editProfile: t["Edit Profile"],
};
const matchImageSrc = "/assets/images/Group 1597880466.svg";
// This notice belongs exclusively to the gentleman whose accepted request
// was later rejected by the lady. The API enforces the same rule.
const unseenRejection =
profile?.gender === "male" ? profile.unseen_rejection : null;
return (
<>
@ -82,7 +85,7 @@ export default function FindingMatchPage() {
rightButton={{ icon: "subscription", iconLabel: "Subscribe" }}
/>
<section className="flex flex-1 flex-col items-center mt-20">
<section className="mt-20 flex flex-1 flex-col items-center">
<div className="relative h-[124px] w-[130px]" aria-hidden="true">
<Image
src={matchImageSrc}
@ -93,14 +96,55 @@ export default function FindingMatchPage() {
priority
/>
</div>
<h1 className="mt-5 group-16 font-bold leading-none tracking-[0.02em] text-[#171717] uppercase">
{copy.title}
</h1>
<p className="mt-3 max-w-[320px] mx-auto text-center group-12 leading-[1.35] font-semibold text-[#747474]">
{copy.description}
</p>
{unseenRejection && (
<aside
className="mt-5 w-full rounded-[20px] border border-[#F2465F]/15 bg-white p-4 text-start shadow-[0_10px_28px_rgba(242,70,95,0.08)]"
aria-live="polite"
aria-labelledby="rejection-notice-title"
>
<div className="flex items-start gap-3">
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-[#FFF0F2] text-[#F2465F]">
<IoAlertCircle className="h-6 w-6" aria-hidden="true" />
</div>
<div className="min-w-0 flex-1">
<h2
id="rejection-notice-title"
className="text-[16px] font-bold leading-[1.3] text-[#171717]"
>
{t["Your request was rejected"]}
</h2>
<p className="mt-1.5 text-[13px] font-semibold leading-[1.5] text-[#747474]">
{
t[
"Your request was rejected by the lady. You will be introduced to other candidates in the future."
]
}
</p>
</div>
</div>
<div className="mt-4 w-full">
<Button
isLoading={isMarkingSeen}
onClick={() => {
markRejectionSeen({
rejection_id: unseenRejection.id,
});
}}
>
{t["Got it"]}
</Button>
</div>
</aside>
)}{" "}
</section>
<AdvisorActionsCard
@ -116,7 +160,7 @@ export default function FindingMatchPage() {
{profile?.can_edit_profile === false ? (
<div
className="inline-flex w-full items-center justify-center gap-2 rounded-[9px] border-none bg-[#D1D1D6] dark:bg-[#3D3E42] px-4 py-[17px] text-center text-[#747474] dark:text-[#A1A1A1] shadow-none"
role="status"
aria-live="polite"
>
<FaLock aria-hidden="true" className="h-3.5 w-3.5 shrink-0" />
<span className="group-16 leading-none font-semibold">
@ -131,38 +175,6 @@ export default function FindingMatchPage() {
)}
</FixToTheEnd>
</main>
{profile?.unseen_rejection && (
<div className="fixed inset-0 z-[100] flex items-center justify-center bg-black/50 p-4 backdrop-blur-xs animate-in fade-in duration-200">
<div className="w-full max-w-[343px] rounded-[24px] bg-[#F9F8F8] dark:bg-[#1E1E1E] p-6 text-center shadow-[0_20px_60px_rgba(0,0,0,0.15)] animate-in zoom-in-95 duration-200">
<div className="mx-auto flex h-[56px] w-[56px] items-center justify-center rounded-full bg-rose-50 dark:bg-rose-950/30 text-[#F2465F] dark:text-[#FE6F82]">
<IoAlertCircle className="h-8 w-8" />
</div>
<h2 className="mt-4 text-[18px] font-bold text-[#171717] dark:text-white leading-[1.3]">
{t["Your request was rejected"]}
</h2>
<p className="mt-3 text-[14px] leading-[1.5] text-[#747474] dark:text-[#A0A0A0] font-semibold">
{t["Your request was rejected by the lady. You will be introduced to other candidates in the future."]}
</p>
<div className="mt-6 w-full">
<Button
variant="dark"
isLoading={isMarkingSeen}
onClick={() => {
markRejectionSeen({
rejection_id: profile.unseen_rejection!.id,
});
}}
>
{t["Got it"]}
</Button>
</div>
</div>
</div>
)}
</>
);
}

21
src/app/new-match/page.tsx

@ -6,11 +6,11 @@ import { useRouter } from "next/navigation";
import { useEffect, useMemo, useState } from "react";
import { FaLock } from "react-icons/fa6";
import AdvisorActionsCard from "@/components/Componentes/advisor-actions-card";
import { DotsLoader } from "@/components/Componentes/button";
import PageHeader from "@/components/Componentes/page-header";
import { PageBackground } from "@/components/Componentes/page-background";
import { IoClose } from "react-icons/io5";
import { LoadingSkeleton } from "@/components/Componentes/loading-skeleton";
import { LoadingThreeDot } from "@/components/Componentes/loading-three-dot";
import { useHabcoinPaymentMutation } from "@/hooks/marriage/use-habcoin-payment";
import { useRespondToMarriageCaseMutation } from "@/hooks/marriage/use-case-respond";
import type {
@ -573,9 +573,11 @@ export default function NewMatchPage() {
onClick={handleDecline}
>
<div className="inline-flex w-full items-center justify-center rounded-[18px] border border-[#9A9A9A] bg-[#F7F7F7] px-2 h-[52px] text-[16px] font-bold text-[#8B8B8B] shadow-[inset_0_1px_0_rgba(255,255,255,0.8)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate">
{t["Decline"] || "Decline"}
</span>
{respondMutation.isPending ? (
<LoadingThreeDot />
) : (
<span className="truncate">{t["Decline"] || "Decline"}</span>
)}
</div>
</button>
@ -588,10 +590,11 @@ export default function NewMatchPage() {
onClick={handlePayment}
>
<div className="inline-flex w-full items-center justify-center gap-3 rounded-[18px] bg-[#F0445B] px-4 h-[52px] text-[16px] font-semibold text-white shadow-[0_10px_18px_rgba(240,68,91,0.28)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate min-w-0">
{t["Pay"] || "Pay"}
</span>
{paymentMutation.isPending ? (
<LoadingThreeDot />
) : (
<>
<span className="truncate min-w-0">{t["Pay"] || "Pay"}</span>
<span className="inline-flex items-center gap-1 rounded-full bg-[#E43B51] p-1.5 text-xs font-semibold leading-none text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] shrink-0 min-w-0 whitespace-nowrap">
<Image
src="/assets/images/Inner Plugdsain Iframe.svg"
@ -603,6 +606,8 @@ export default function NewMatchPage() {
/>
<span className="truncate">50</span>
</span>
</>
)}
</div>
</button>
</div>

129
src/app/new-match/profile/page.tsx

@ -8,10 +8,10 @@ import DismissReasonSheet from "@/components/Componentes/dismiss-reason-sheet";
import FemaleConsentSheet from "@/components/Componentes/female-consent-sheet";
import InformationSheet from "@/components/Componentes/information-sheet";
import { LoadingSkeleton } from "@/components/Componentes/loading-skeleton";
import { LoadingThreeDot } from "@/components/Componentes/loading-three-dot";
import NavigationButton from "@/components/Componentes/navigation-button";
import { PageBackground } from "@/components/Componentes/page-background";
import StickyHeader from "@/components/Componentes/sticky-header";
import SwipeButton from "@/components/Componentes/swipe-button";
import type {
MarriageCaseStatus,
MarriageField,
@ -182,7 +182,11 @@ function MatchPublicProfileFields({
);
}
function NewMatchProfileSkeleton() {
function NewMatchProfileSkeleton({
hideBackButton = false,
}: {
hideBackButton?: boolean;
}) {
const { dictionary: t } = useI18n();
return (
@ -191,11 +195,15 @@ function NewMatchProfileSkeleton() {
<main className="-mx-[17px] flex min-h-screen flex-col bg-[#F5F5F5] pb-10">
<StickyHeader>
<div className="flex items-center justify-between gap-3">
{!hideBackButton ? (
<NavigationButton
variant="transparent"
icon="close"
iconLabel={t["Go back"]}
/>
) : (
<div className="size-10 shrink-0" />
)}
<h1 className="min-w-0 flex-1 text-center group-16 font-bold text-white">
{t["New Match"]}
</h1>
@ -210,7 +218,7 @@ function NewMatchProfileSkeleton() {
</div>
<div className="mt-6 space-y-4 rounded-[18px] bg-white/80 p-5 shadow-xs">
<LoadingSkeleton className="h-4 w-44 rounded-md bg-[#F0445B]/10 border-b border-[#F0445B]/15 pb-2" />
<LoadingSkeleton className="h-4 w-44 rounded-md" />
<div className="space-y-4 pt-1">
<div className="space-y-1.5 border-b border-[#000000]/05 pb-3">
@ -243,7 +251,7 @@ function NewMatchProfileSkeleton() {
<div className="mx-auto w-full sm:max-w-[375px] rounded-t-[24px] bg-white px-4 py-4 shadow-[0_12px_30px_rgba(0,0,0,0.14)]">
<div className="flex gap-3">
<LoadingSkeleton className="w-1/3 h-[46px] rounded-[12px]" />
<LoadingSkeleton className="w-2/3 h-[46px] rounded-[12px] bg-[#F0445B]/10" />
<LoadingSkeleton className="w-2/3 h-[46px] rounded-[12px]" />
</div>
</div>
</div>
@ -359,11 +367,11 @@ export default function NewMatchProfilePage() {
);
}, [profile]);
if (isLoading || !profile || isRedirecting) {
return <NewMatchProfileSkeleton />;
}
const isSubmitting = respondMutation.isPending;
if (isLoading || !profile || isRedirecting || isSubmitting) {
return <NewMatchProfileSkeleton hideBackButton={isSubmitting} />;
}
const isAcceptProfileEnabled =
Boolean(caseId) &&
!isSubmitting &&
@ -371,8 +379,8 @@ export default function NewMatchProfilePage() {
const isRejectProfileEnabled = isAcceptProfileEnabled;
const nameParts = candidateName.trim().split(/\s+/);
const firstName = nameParts[0] || "";
const lastName = nameParts.slice(1).join(" ") || "";
const _firstName = nameParts[0] || "";
const _lastName = nameParts.slice(1).join(" ") || "";
const mainClass = "-mx-[17px] flex min-h-screen flex-col pb-10";
@ -390,7 +398,11 @@ export default function NewMatchProfilePage() {
isFemaleProfile ? (
<FemaleConsentSheet
title={t["Final Consent"]}
description={formatBoldText(t["Approving this profile will **display your contact number** to the gentleman. Ensure **family consensus** before proceeding."])}
description={formatBoldText(
t[
"Approving this profile will **display your contact number** to the gentleman. Ensure **family consensus** before proceeding."
],
)}
buttons={({ close }) => (
<div className="space-y-5">
<button
@ -412,7 +424,11 @@ export default function NewMatchProfilePage() {
) : null}
</span>
<span className="text-xs leading-[1.35] text-[#3F3F3F]">
{formatBoldText(t["I confirm the family has **reviewed this profile** and **consents to communicate**."])}
{formatBoldText(
t[
"I confirm the family has **reviewed this profile** and **consents to communicate**."
],
)}
</span>
</button>
@ -422,7 +438,7 @@ export default function NewMatchProfilePage() {
className="py-[18px] text-[18px]"
onClick={close}
>
{t["Cancel"]}
{t.Cancel}
</Button>
<Button
className="py-[18px] text-[18px]"
@ -441,7 +457,7 @@ export default function NewMatchProfilePage() {
await respondMutation.mutateAsync({ action: "accept" });
}}
>
{t["Confirm"]}
{t.Confirm}
</Button>
</div>
</div>
@ -455,7 +471,11 @@ export default function NewMatchProfilePage() {
<InformationSheet
icon="check"
title={t["Request to Proceed"]}
description={t["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."]}
description={
t[
"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."
]
}
buttons={({ close }) => (
<div className="grid w-full grid-cols-2 gap-3">
<Button
@ -463,7 +483,7 @@ export default function NewMatchProfilePage() {
className="py-[18px]"
onClick={close}
>
{t["Cancel"]}
{t.Cancel}
</Button>
<Button
className="py-[18px]"
@ -480,7 +500,7 @@ export default function NewMatchProfilePage() {
await respondMutation.mutateAsync({ action: "accept" });
}}
>
{t["Confirm"]}
{t.Confirm}
</Button>
</div>
)}
@ -492,11 +512,15 @@ export default function NewMatchProfilePage() {
<InformationSheet
icon="warning"
title={t["Reject Profile"]}
description={t["Are you sure you've fully reviewed the profile and want to reject this profile?"]}
description={
t[
"Are you sure you've fully reviewed the profile and want to reject this profile?"
]
}
buttons={({ close }) => (
<div className="grid w-full grid-cols-2 gap-3">
<Button variant="outlined" className="py-[18px]" onClick={close}>
{t["Cancel"]}
{t.Cancel}
</Button>
<Button
onClick={() => {
@ -504,7 +528,7 @@ export default function NewMatchProfilePage() {
setIsDismissReasonSheetOpen(true);
}}
>
{t["Reject"]}
{t.Reject}
</Button>
</div>
)}
@ -516,50 +540,23 @@ export default function NewMatchProfilePage() {
icon="warning"
title={t["Rejection Warning"]}
description={
<div
className="space-y-4 text-right"
dir={
locale === "fa" ||
locale === "ar" ||
locale === "ur" ||
locale === "he" ||
locale === "ks"
? "rtl"
: "ltr"
}
>
<p className="text-sm font-bold text-[#E11D48] leading-relaxed bg-[#FFF1F2] p-3 rounded-xl border border-[#FFE4E6]">
{t["Before making a final decision, please carefully review the other person's profile again completely to make an informed choice."]}
</p>
<div className="flex gap-2.5 items-start p-3 bg-gray-50 rounded-xl border border-gray-100">
<span className="text-lg shrink-0">💡</span>
<p className="text-xs text-[#6B7280] leading-relaxed">
{t["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."]}
</p>
</div>
<div className="flex gap-2.5 items-start p-3 bg-gray-50 rounded-xl border border-gray-100">
<span className="text-lg shrink-0"></span>
<p className="text-xs text-[#6B7280] leading-relaxed">
{t["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."]}
</p>
</div>
</div>
t[
"Please review the person’s full profile once more before making your final decision."
]
}
buttons={({ close }) => (
<div className="w-full space-y-3">
<SwipeButton
text={t["Swipe to confirm rejection"]}
onSuccess={() => {
<div className="grid w-full grid-cols-2 gap-3">
<Button variant="outlined" className="py-[18px]" onClick={close}>
{t.Cancel}
</Button>
<Button
className="py-[18px]"
onClick={() => {
close();
setIsDismissReasonSheetOpen(true);
}}
/>
<Button
variant="outlined"
className="w-full text-[15px] font-semibold text-gray-500 border-gray-200"
onClick={close}
>
{t["Cancel"]}
{t.Reject}
</Button>
</div>
)}
@ -594,7 +591,7 @@ export default function NewMatchProfilePage() {
className="min-w-0 flex-1 text-center font-semibold text-[14px] leading-[16px] text-white"
style={{ fontFamily: "'Segoe UI', sans-serif" }}
>
{t["New Match"]}
{t["More detail"]}
</h1>
<div className="size-10 shrink-0" />
</div>
@ -669,13 +666,13 @@ export default function NewMatchProfilePage() {
onClick={() => router.back()}
className="w-full h-[52px] flex items-center justify-center rounded-[12px] bg-[#F5F5F5] text-[#36363C] font-semibold text-[16px] transition-transform active:scale-[0.98] cursor-pointer hover:bg-[#EBEBEB]"
>
{t["Back"]}
{t.Back}
</button>
) : (
<div className="flex gap-3">
<button
type="button"
disabled={!isRejectProfileEnabled}
disabled={!isRejectProfileEnabled || isSubmitting}
onClick={() => {
if (isFemaleProfile) {
setIsRejectSheetOpen(true);
@ -685,11 +682,11 @@ export default function NewMatchProfilePage() {
}}
className="inline-flex w-1/3 h-[52px] items-center justify-center rounded-[12px] border border-[#BFBFBF] bg-white px-4 text-[16px] font-semibold text-[#9A9A9A] disabled:cursor-not-allowed disabled:opacity-50"
>
{t["Reject"]}
{t.Reject}
</button>
<button
type="button"
disabled={!isAcceptProfileEnabled}
disabled={!isAcceptProfileEnabled || isSubmitting}
onClick={() => {
if (!isAcceptProfileEnabled) {
return;
@ -703,6 +700,10 @@ export default function NewMatchProfilePage() {
}}
className="inline-flex w-2/3 h-[52px] whitespace-nowrap items-center justify-center gap-1 rounded-[12px] bg-[#F0445B] px-4 text-[16px] font-semibold text-white shadow-[0_8px_16px_rgba(240,68,91,0.24)] disabled:cursor-not-allowed disabled:opacity-50"
>
{isSubmitting ? (
<LoadingThreeDot />
) : (
<>
<Image
src="/assets/images/Icfdason.svg"
alt=""
@ -710,6 +711,8 @@ export default function NewMatchProfilePage() {
height={28}
/>
<span>{t["Accept Profile"]}</span>
</>
)}
</button>
</div>
)}

4
src/app/page.tsx

@ -1,6 +1,6 @@
import { redirect } from "next/navigation";
import { cookies, headers } from "next/headers";
import { isLocale, defaultLocale } from "@/translations/config";
import { redirect } from "next/navigation";
import { defaultLocale, isLocale } from "@/translations/config";
export const dynamic = "force-dynamic";

2
src/app/providers.tsx

@ -6,6 +6,7 @@ import {
useQueryClient,
} from "@tanstack/react-query";
import { type ReactNode, useEffect, useState } from "react";
import FlutterLocaleSync from "@/components/Componentes/flutter-locale-sync";
import { ViewPaddingsProvider } from "@/components/Componentes/view-paddings-provider";
function AppFocusReloader({ children }: { children: ReactNode }) {
@ -86,6 +87,7 @@ export default function Providers({ children }: ProvidersProps) {
<QueryClientProvider client={queryClient}>
<AppFocusReloader>
<ViewPaddingsProvider />
<FlutterLocaleSync />
{children}
</AppFocusReloader>
</QueryClientProvider>

20
src/app/questions-list/[slug]/question-detail-client.tsx

@ -2,7 +2,7 @@
import { useRouter } from "next/navigation";
import { useEffect, useMemo, useState } from "react";
import { DotsLoader } from "@/components/Componentes/button";
import { PageLoadingSkeleton } from "@/components/Componentes/page-loading-skeleton";
import NavigationButton from "@/components/Componentes/navigation-button";
import { PageBackground } from "@/components/Componentes/page-background";
import {
@ -622,14 +622,7 @@ export default function QuestionDetailClient({
}, [isProfileLoading, item, profileContext, questionsListHref, router]);
if (isProfileLoading && item) {
return (
<>
<PageBackground disabled />
<main className="-mx-[17px] flex h-svh flex-col items-center justify-center bg-[#F7F1F0]">
<DotsLoader className="text-[#F2465F] scale-150" />
</main>
</>
);
return <PageLoadingSkeleton compact />;
} else if (
!item ||
!isQuestionListItemVisibleForProfile(item, profileContext)
@ -646,14 +639,7 @@ export default function QuestionDetailClient({
: false;
if (isQuestionsLoading) {
return (
<>
<PageBackground disabled />
<main className="-mx-[17px] flex h-svh flex-col items-center justify-center bg-[#F7F1F0]">
<DotsLoader className="text-[#F2465F] scale-150" />
</main>
</>
);
return <PageLoadingSkeleton compact />;
}
const activeTestQuestions = isCattellSlug

2
src/app/questions-list/page.tsx

@ -262,7 +262,7 @@ export default function QuestionsListPage() {
<div className="relative mt-4 space-y-5">
{/* Required Steps Card Skeleton */}
<LoadingSkeleton className="h-[96px] w-full rounded-[15px] bg-[#40506A]/20 dark:bg-[#40506A]/10" />
<LoadingSkeleton className="h-[96px] w-full rounded-[15px]" />
{/* Section Cards Skeletons */}
<div className="space-y-3">

286
src/app/request-accepted/page.tsx

@ -5,14 +5,17 @@ import Link from "next/link";
import { useRouter } from "next/navigation";
import { useEffect, useMemo, useState } from "react";
import AdvisorActionsCard from "@/components/Componentes/advisor-actions-card";
import { DotsLoader } from "@/components/Componentes/button";
import CallResultSheet from "@/components/Componentes/call-result-sheet";
import DismissReasonSheet from "@/components/Componentes/dismiss-reason-sheet";
import FemaleConsentSheet from "@/components/Componentes/female-consent-sheet";
import FemaleOutcomeSheet from "@/components/Componentes/female-outcome-sheet";
import { LoadingThreeDot } from "@/components/Componentes/loading-three-dot";
import OutcomeSelectionSheet from "@/components/Componentes/outcome-selection-sheet";
import { PageBackground } from "@/components/Componentes/page-background";
import PageHeader from "@/components/Componentes/page-header";
import { PageLoadingSkeleton } from "@/components/Componentes/page-loading-skeleton";
import SubscriptionRequiredSheet from "@/components/Componentes/subscription-required-sheet";
import SwipeButton from "@/components/Componentes/swipe-button";
import type {
MarriageField,
MarriagePhoneFieldValue,
@ -176,27 +179,62 @@ export default function RequestAcceptedPage() {
const [isContactInfoSheetOpen, setIsContactInfoSheetOpen] = useState(false);
const [isSubscriptionSheetOpen, setIsSubscriptionSheetOpen] = useState(false);
const [isOutcomeSheetOpen, setIsOutcomeSheetOpen] = useState(false);
const [isTimeElapsed, setIsTimeElapsed] = useState(false);
const [isNoContactConfirmOpen, setIsNoContactConfirmOpen] = useState(false);
const [isContactReceivedConfirmOpen, setIsContactReceivedConfirmOpen] =
useState(false);
const [noContactReportedSuccess, setNoContactReportedSuccess] =
useState(false);
const profileHref = localizePath("/new-match/profile", locale);
const { data: profile, isLoading } = useMarriageProfileQuery({
refetchInterval: 3000,
});
const isFemaleProfile = profile?.gender === "female";
const contactSharedAtStr = profile?.active_case?.contact_shared_at;
useEffect(() => {
if (!profile) {
if (!profile || noContactReportedSuccess) {
return;
}
const targetPath = getSubmitPath(profile);
if (targetPath !== "/request-accepted") {
router.replace(localizePath(targetPath, locale));
}
}, [profile, router, locale]);
}, [profile, router, locale, noContactReportedSuccess]);
useEffect(() => {
if (!isFemaleProfile || !contactSharedAtStr) {
setIsTimeElapsed(true);
return;
}
const checkTime = () => {
const contactSharedTime = new Date(contactSharedAtStr).getTime();
const elapsed = Date.now() - contactSharedTime;
const isPast = elapsed >= 2 * 60 * 1000;
setIsTimeElapsed(isPast);
return isPast;
};
const isPast = checkTime();
if (isPast) return;
const timer = setInterval(() => {
const isPastNow = checkTime();
if (isPastNow) {
clearInterval(timer);
}
}, 1000);
return () => clearInterval(timer);
}, [isFemaleProfile, contactSharedAtStr]);
const isRedirecting = useMemo(() => {
if (!profile) return false;
return getSubmitPath(profile) !== "/request-accepted";
}, [profile]);
const isFemaleProfile = profile?.gender === "female";
const caseId = profile?.active_case?.case_id;
const caseStatus = profile?.active_case?.status;
const recommendedPlanId = profile?.recommended_plan?.id;
@ -205,8 +243,14 @@ export default function RequestAcceptedPage() {
const contactStatusMutation = useSubmitMarriageContactStatusMutation(
caseId ?? "",
{
onSuccess: () => {
onSuccess: (_data, variables) => {
if (variables?.action === "no_contact") {
setNoContactReportedSuccess(true);
} else {
if (!isFemaleProfile) {
router.push(localizePath("/finding-match", locale));
}
}
},
},
);
@ -215,14 +259,7 @@ export default function RequestAcceptedPage() {
});
if (isLoading || isRedirecting) {
return (
<>
<PageBackground />
<main className="-mx-[17px] flex min-h-screen flex-col px-[23px] pt-[max(16px,calc(var(--safe-top)+8px))] items-center justify-center">
<DotsLoader />
</main>
</>
);
return <PageLoadingSkeleton />;
}
const titleText = isFemaleProfile
@ -231,10 +268,10 @@ export default function RequestAcceptedPage() {
? t["Contact info released"]
: t["Request approved!"];
const primaryActionText = isFemaleProfile
? t["Report no contact"]
? t["No Contact Received"]
: t["View profile"];
const secondaryActionText = isFemaleProfile
? t["Record call result"]
? t["Contact Received"]
: caseStatus === "payment_done" || caseStatus === "contacted"
? t["View contact number"]
: t["Pay and get contact"];
@ -244,7 +281,7 @@ export default function RequestAcceptedPage() {
const handleSecondaryAction = async () => {
if (isFemaleProfile) {
setIsCallResultSheetOpen(true);
setIsContactReceivedConfirmOpen(true);
return;
}
@ -323,6 +360,35 @@ export default function RequestAcceptedPage() {
/>
) : null}
{isContactReceivedConfirmOpen ? (
<FemaleConsentSheet
title={t.Confirm}
description={
<p className="font-bold text-[#00AC78] text-center my-4 text-base">
{t["Are you sure contact has been made?"]}
</p>
}
buttons={
<SwipeButton
theme="green"
text={t["Swipe to confirm"]}
onSuccess={async () => {
setIsContactReceivedConfirmOpen(false);
if (caseId) {
await contactStatusMutation.mutateAsync({
action: "contacted",
custom_note:
"Contact received confirmed by female candidate",
});
}
}}
/>
}
onClose={() => setIsContactReceivedConfirmOpen(false)}
closeOnOutside={true}
/>
) : null}
{isDismissReasonSheetOpen ? (
<DismissReasonSheet
onClose={() => setIsDismissReasonSheetOpen(false)}
@ -338,6 +404,26 @@ export default function RequestAcceptedPage() {
) : null}
{isOutcomeSheetOpen ? (
isFemaleProfile ? (
<FemaleOutcomeSheet
onClose={() => setIsOutcomeSheetOpen(false)}
onSubmit={async (status, reason) => {
if (status === "success") {
// If they confirm they are in the acquaintance/proposal process and nothing is finalized yet:
// No change is made to the profile, we just close the sheet.
setIsOutcomeSheetOpen(false);
} else {
// If they cancel:
if (caseId) {
await outcomeMutation.mutateAsync({
status: "failure",
custom_note: reason,
});
}
}
}}
/>
) : (
<OutcomeSelectionSheet
onClose={() => setIsOutcomeSheetOpen(false)}
onSubmit={async (status) => {
@ -352,12 +438,17 @@ export default function RequestAcceptedPage() {
}
}}
/>
)
) : null}
{isContactInfoSheetOpen ? (
<FemaleConsentSheet
title={t["Contact Detail"]}
description={t["Please mention during the call that you were introduced by the Habib Marriage app."]}
description={
t[
"Please mention during the call that you were introduced by the Habib Marriage app."
]
}
buttons={
contactInfoPhoneItems.length ? (
<div className="space-y-4">
@ -383,6 +474,35 @@ export default function RequestAcceptedPage() {
/>
) : null}
{isNoContactConfirmOpen ? (
<FemaleConsentSheet
title={t.Confirm}
description={
<p className="font-bold text-[#E03950] text-center my-4 text-base">
{
t[
"No contact has been made with you in any way or by any party."
]
}
</p>
}
buttons={
<button
type="button"
onClick={async () => {
setIsNoContactConfirmOpen(false);
await handleNoContactReport();
}}
className="w-full h-[48px] rounded-[15px] bg-[#E03950] text-white font-semibold group-14 flex items-center justify-center transition-transform active:scale-[0.98] cursor-pointer hover:opacity-95"
>
{t.Confirm}
</button>
}
onClose={() => setIsNoContactConfirmOpen(false)}
closeOnOutside={true}
/>
) : null}
<main className="-mx-[17px] flex min-h-screen flex-col px-[23px] pt-[max(16px,calc(var(--safe-top)+8px))] pb-[calc(20px+var(--safe-bottom))] text-center">
<PageHeader className="-mx-[6px]" />
@ -397,7 +517,11 @@ export default function RequestAcceptedPage() {
{t["Congratulations! 🎉"]}
</h1>
<p className="mt-6 text-[#4A4A4A] group-14 font-medium leading-relaxed">
{t["Wishing you a lifetime of love, joy, and happiness. Your profile has been successfully closed."]}
{
t[
"Wishing you a lifetime of love, joy, and happiness. Your profile has been successfully closed."
]
}
</p>
</div>
) : (
@ -417,26 +541,72 @@ export default function RequestAcceptedPage() {
{titleText}
</h1>
{caseStatus === "contacted" ? (
<div className="w-full border border-[#ECECEC] bg-white rounded-[15px] mt-6 px-4 py-4 text-center shadow-sm max-w-[315px]">
{caseStatus === "contacted" ||
(isFemaleProfile && contactStatusMutation.isPending) ? (
<div className="w-full border border-[#ECECEC] bg-white rounded-[15px] mt-6 px-4 py-4 text-center shadow-sm max-w-[315px] flex flex-col items-center justify-center min-h-[100px]">
{isFemaleProfile && contactStatusMutation.isPending ? (
<LoadingThreeDot className="text-[#E03950]" />
) : (
<p className="text-[#555555] group-14 font-medium leading-relaxed">
{t["Thank you for giving us feedback, we would be very happy if you also let us know the final result."]}
{isFemaleProfile
? t[
"Thank you for your feedback. To complete the process, please submit the final outcome of this introduction/contact so that the final status can be determined. If the final status is not yet determined, you can stay in this state until it is finalized."
]
: t[
"Thank you for giving us feedback, we would be very happy if you also let us know the final result."
]}
</p>
)}
</div>
) : (
<p className="mt-4 max-w-[315px] group-12 leading-[1.45] font-semibold text-[#777777]">
{isFemaleProfile
? t["The selected candidate will contact your family shortly."]
: t["You can now view their family's contact details and arrange further steps."]}
? t[
"The selected candidate will contact your family shortly."
]
: t[
"You can now view their family's contact details and arrange further steps."
]}
</p>
)}
{caseStatus === "contacted" ? (
<div className="flex mt-8 w-full gap-3">
{noContactReportedSuccess ? (
<div className="w-full border border-[#ECECEC] bg-white rounded-[15px] mt-6 px-4 py-4 text-center shadow-sm max-w-[315px]">
<p className="text-[#555555] group-14 font-medium leading-relaxed">
{
t[
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you."
]
}
</p>
</div>
) : (
<>
{caseStatus === "contacted" ||
(isFemaleProfile && contactStatusMutation.isPending) ? (
<div className="flex mt-8 w-full gap-3 justify-center">
{isFemaleProfile &&
contactStatusMutation.isPending ? null : isFemaleProfile ? (
<button
type="button"
onClick={() => setIsOutcomeSheetOpen(true)}
disabled={outcomeMutation.isPending}
className="w-full max-w-[315px] h-[52px] rounded-[15px] bg-gradient-to-r from-[#FE6F82] to-[#E03950] text-white font-semibold group-14 flex items-center justify-center shadow-lg shadow-[#FE6F82]/30 transition-transform active:scale-[0.98] cursor-pointer hover:opacity-95 disabled:opacity-50"
>
{outcomeMutation.isPending ? (
<LoadingThreeDot className="text-white" />
) : (
t["Share Result"]
)}
</button>
) : (
<>
<button
type="button"
onClick={() =>
router.push(localizePath("/new-match/profile", locale))
router.push(
localizePath("/new-match/profile", locale),
)
}
className="flex-1 h-[52px] rounded-[15px] border border-[#BFBFBF] bg-white text-[#36363C] font-semibold group-14 flex items-center justify-center transition-transform active:scale-[0.98] cursor-pointer hover:bg-[#F5F5F5]"
>
@ -450,32 +620,37 @@ export default function RequestAcceptedPage() {
className="flex-1 h-[52px] rounded-[15px] bg-gradient-to-r from-[#FE6F82] to-[#E03950] text-white font-semibold group-14 flex items-center justify-center shadow-lg shadow-[#FE6F82]/30 transition-transform active:scale-[0.98] cursor-pointer hover:opacity-95 disabled:opacity-50"
>
{outcomeMutation.isPending ? (
<DotsLoader className="text-white" />
<LoadingThreeDot className="text-white" />
) : (
t["Submit Final Outcome"]
)}
</button>
</>
)}
</div>
) : (
<div className="flex mt-9 w-full justify-center gap-4">
<div className="flex mt-9 w-full justify-center gap-4 max-w-[315px] mx-auto">
{isFemaleProfile ? (
<button
type="button"
onClick={handleNoContactReport}
disabled={contactStatusMutation.isPending}
className="max-w-[212px] cursor-pointer appearance-none border-0 bg-transparent p-0 text-left"
onClick={() => setIsNoContactConfirmOpen(true)}
disabled={
contactStatusMutation.isPending || !isTimeElapsed
}
className="flex-1 h-[44px] rounded-[15px] border border-[#BFBFBF] bg-white text-[#36363C] font-semibold group-14 flex items-center justify-center transition-all cursor-pointer hover:bg-[#F5F5F5] disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white"
>
<div className="bg-[#F5F5F5] px-4 py-2 rounded-[15px] shadow group-14 text-center font-semibold text-[#36363C] hover:bg-[#EBEBEB] transition-colors flex items-center justify-center min-h-[38px]">
{contactStatusMutation.isPending ? (
<DotsLoader />
<LoadingThreeDot />
) : (
primaryActionText
)}
</div>
</button>
) : (
<Link href={profileHref} className="max-w-[212px]">
<div className="bg-[#F5F5F5] px-4 py-2 rounded-[15px] shadow group-14 text-center font-semibold text-[#36363C]">
<Link
href={profileHref}
className="max-w-[212px] flex-1"
>
<div className="bg-[#F5F5F5] px-4 py-2 rounded-[15px] shadow group-14 text-center font-semibold text-[#36363C] min-h-[38px] flex items-center justify-center">
{primaryActionText}
</div>
</Link>
@ -486,36 +661,63 @@ export default function RequestAcceptedPage() {
onClick={() => {
void handleSecondaryAction();
}}
disabled={paymentMutation.isPending}
className="max-w-[212px] appearance-none border-0 bg-transparent p-0 text-left"
disabled={
isFemaleProfile
? paymentMutation.isPending || !isTimeElapsed
: paymentMutation.isPending
}
className={
isFemaleProfile
? "flex-1 h-[44px] rounded-[15px] bg-gradient-to-r from-[#FE6F82] to-[#E03950] text-white font-semibold group-14 flex items-center justify-center shadow-md shadow-[#FE6F82]/30 transition-all cursor-pointer hover:opacity-95 disabled:opacity-50 disabled:cursor-not-allowed disabled:shadow-none"
: "max-w-[212px] flex-1 appearance-none border-0 bg-transparent p-0 text-left"
}
>
{isFemaleProfile ? (
paymentMutation.isPending ? (
<LoadingThreeDot className="text-white" />
) : (
secondaryActionText
)
) : (
<div className="bg-linear-180 from-[#FE6F82] to-[#E03950] px-4 py-2 rounded-[15px] shadow group-14 text-center font-semibold text-[#fff] shadow-md shadow-[#F2596E]/60 flex items-center justify-center min-h-[38px]">
{paymentMutation.isPending ? (
<DotsLoader />
<LoadingThreeDot />
) : (
secondaryActionText
)}
</div>
)}
</button>
</div>
)}
{caseStatus !== "contacted" ? (
{caseStatus !== "contacted" &&
!(isFemaleProfile && contactStatusMutation.isPending) ? (
<div className="border border-[#F0445B] bg-[#F0445B]/10 rounded-xl mt-4">
<p className="text-[#F0445B] group-12 font-semibold py-2.5 px-3.5 whitespace-pre-line">
{t["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. Since 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."]}
{
t[
"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. Since 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."
]
}
</p>
</div>
) : null}
</>
)}
</>
)}
</section>
<div className="space-y-8 pb-20">
{/* Advisor section */}
<AdvisorActionsCard
title={t["Get an advisor"]}
description={t["Not sure what to do next? Our psychology section is here to guide you at every step."]}
description={
t[
"Not sure what to do next? Our psychology section is here to guide you at every step."
]
}
avatars={advisorAvatars}
extraCount={7}
getAdvisorLabel={t["Get Advisor"]}

11
src/app/request-sent/page.tsx

@ -4,7 +4,7 @@ import Image from "next/image";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { useEffect, useMemo } from "react";
import { DotsLoader } from "@/components/Componentes/button";
import { PageLoadingSkeleton } from "@/components/Componentes/page-loading-skeleton";
import AdvisorActionsCard from "@/components/Componentes/advisor-actions-card";
import PageHeader from "@/components/Componentes/page-header";
import { PageBackground } from "@/components/Componentes/page-background";
@ -42,14 +42,7 @@ export default function RequestSentPage() {
}, [profile]);
if (isLoading || isRedirecting) {
return (
<>
<PageBackground />
<main className="-mx-[17px] flex min-h-screen flex-col px-[23px] pt-[max(16px,calc(var(--safe-top)+8px))] items-center justify-center">
<DotsLoader />
</main>
</>
);
return <PageLoadingSkeleton />;
}
const copy = {

15
src/components/Componentes/button.tsx

@ -11,6 +11,7 @@ import {
import { GoArrowRight } from "react-icons/go";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
import { LoadingThreeDot } from "./loading-three-dot";
type ButtonVariant =
| "default"
@ -33,18 +34,6 @@ export type ButtonProps = Omit<
isLoading?: boolean;
};
export function DotsLoader({ className = "" }: { className?: string }) {
return (
<span
className={`inline-flex items-center justify-center gap-1.5 py-0.5 ${className}`}
>
<span className="size-2 rounded-full bg-current animate-dots-slide-1" />
<span className="size-2 rounded-full bg-current animate-dots-slide-2" />
<span className="size-2 rounded-full bg-current animate-dots-slide-3" />
</span>
);
}
const FILLED_STROKE = "#FFFFFF";
const EMPTY_STROKE = "rgba(255, 255, 255, 0.5)";
const RADIUS = 18;
@ -171,7 +160,7 @@ export function Button({
className={baseClassName}
>
{isLoading ? (
<DotsLoader />
<LoadingThreeDot />
) : (
<span className="flex w-full items-center justify-center gap-2">
{renderArrow("left")}

23
src/components/Componentes/dev-click-to-component.tsx

@ -1,6 +1,7 @@
"use client";
import { useEffect, useRef, useState } from "react";
import { LoadingThreeDot } from "./loading-three-dot";
const IDE_SCHEMES = [
{
@ -596,27 +597,7 @@ export function DevClickToComponent() {
title="Send LocalStorage to Terminal API"
>
{isSendingStorage ? (
<svg
className="animate-spin"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
style={{ width: "22px", height: "22px", pointerEvents: "none" }}
>
<circle
className="opacity-25"
cx="12"
cy="12"
r="10"
stroke="currentColor"
strokeWidth="4"
/>
<path
className="opacity-75"
fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
/>
</svg>
<LoadingThreeDot className="scale-75" />
) : sendSuccess ? (
<svg
xmlns="http://www.w3.org/2000/svg"

15
src/components/Componentes/dismiss-reason-sheet.tsx

@ -140,15 +140,15 @@ export function DismissReasonSheet({
<section
{...props}
className={[
"w-full sm:max-w-[375px] h-[80vh] rounded-t-[15px] bg-[#F9F8F8] p-3.5 text-center shadow-[0_20px_60px_rgba(15,23,42,0.08)] transition-transform duration-[220ms] ease-out will-change-transform flex flex-col justify-between",
"flex h-[80vh] w-full flex-col overflow-hidden rounded-t-[15px] bg-[#F9F8F8] p-3.5 text-center shadow-[0_20px_60px_rgba(15,23,42,0.08)] transition-transform duration-[220ms] ease-out will-change-transform sm:max-w-[375px]",
isClosing || isEntering ? "translate-y-full" : "translate-y-0",
className,
]
.filter(Boolean)
.join(" ")}
>
<div className="mx-auto flex flex-col items-center w-full h-full justify-between">
<div className="w-full flex flex-col items-center">
<div className="mx-auto flex h-full min-h-0 w-full flex-col items-center">
<div className="flex min-h-0 w-full flex-1 flex-col items-center">
<h2 className="text-[18px] leading-[1.2] font-bold tracking-[-0.03em] text-[#171717]">
{t["Dismiss reasons"]}
</h2>
@ -157,12 +157,15 @@ export function DismissReasonSheet({
{t["Please provide the full reason for rejecting the submitted item"]}
</p>
<fieldset className="mt-4 w-full" aria-labelledby={groupId}>
<fieldset
className="mt-4 flex min-h-0 w-full flex-1 flex-col"
aria-labelledby={groupId}
>
<legend id={groupId} className="sr-only">
{t["Dismiss reasons"]}
</legend>
<div className="flex flex-col gap-[14px] max-h-[55vh] overflow-y-auto pr-1">
<div className="flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto pr-1">
{options.map((option) => {
const checked = selectedReasons.includes(option);
const showTextArea = option === options[options.length - 1];
@ -239,7 +242,7 @@ export function DismissReasonSheet({
</fieldset>
</div>
<div className="mt-4 w-full">
<div className="mt-4 w-full shrink-0">
<Button
className="rounded-[15px] shadow-none"
disabled={

388
src/components/Componentes/female-outcome-sheet.tsx

@ -0,0 +1,388 @@
"use client";
import { useEffect, useId, useMemo, useRef, useState } from "react";
import { useI18n } from "@/translations/provider";
import SwipeButton from "./swipe-button";
const EXIT_ANIMATION_MS = 220;
export type FemaleOutcomeSheetProps = {
closeOnOutside?: boolean;
onClose?: () => void;
onSubmit?: (status: "success" | "failure", reason?: string) => void;
};
export function FemaleOutcomeSheet({
closeOnOutside = true,
onClose,
onSubmit,
}: FemaleOutcomeSheetProps) {
const { dictionary: t } = useI18n();
const groupId = useId();
const [isVisible, setIsVisible] = useState(true);
const [isEntering, setIsEntering] = useState(true);
const [isClosing, setIsClosing] = useState(false);
// Outcome selection state: "ongoing" (Option A) or "canceled" (Option B)
const [outcome, setOutcome] = useState<"ongoing" | "canceled">("ongoing");
// Rejection/Cancellation reason states
const reasons = useMemo(
() => [
t["Not a good personal fit"],
t["No mutual interest"],
t["Different expectations"],
t["No connection felt"],
t["Location not suitable"],
t["Other reasons"],
],
[t],
);
const [selectedReasons, setSelectedReasons] = useState<string[]>([]);
const [reasonText, setReasonText] = useState("");
const textareaRef = useRef<HTMLTextAreaElement>(null);
useEffect(() => {
const otherReason = reasons[reasons.length - 1];
if (selectedReasons.includes(otherReason)) {
const timeoutId = setTimeout(() => {
textareaRef.current?.scrollIntoView({
behavior: "smooth",
block: "nearest",
});
}, 100);
return () => clearTimeout(timeoutId);
}
}, [selectedReasons, reasons]);
const closeSheet = () => {
if (isClosing) {
return;
}
setIsClosing(true);
};
useEffect(() => {
const frameId = window.requestAnimationFrame(() => {
setIsEntering(false);
});
return () => {
window.cancelAnimationFrame(frameId);
};
}, []);
useEffect(() => {
if (!isVisible) {
return;
}
const previousBodyOverflow = document.body.style.overflow;
const previousHtmlOverflow = document.documentElement.style.overflow;
document.body.style.overflow = "hidden";
document.documentElement.style.overflow = "hidden";
return () => {
document.body.style.overflow = previousBodyOverflow;
document.documentElement.style.overflow = previousHtmlOverflow;
};
}, [isVisible]);
useEffect(() => {
if (!isClosing) {
return;
}
const timeoutId = window.setTimeout(() => {
setIsVisible(false);
onClose?.();
}, EXIT_ANIMATION_MS);
return () => {
window.clearTimeout(timeoutId);
};
}, [isClosing, onClose]);
if (!isVisible) {
return null;
}
const isCanceledSwipeDisabled =
selectedReasons.length === 0 ||
(selectedReasons.includes(reasons[reasons.length - 1]) &&
reasonText.trim() === "");
return (
<div
className={[
"fixed inset-0 z-50 flex items-end justify-center transition-all duration-[220ms]",
isClosing || isEntering
? "bg-[#171717]/0 opacity-0"
: "bg-[#171717]/55 opacity-100",
]
.filter(Boolean)
.join(" ")}
role="dialog"
aria-modal="true"
aria-label={t["What was the outcome of your contact?"]}
tabIndex={-1}
onClick={(event) => {
if (closeOnOutside && event.target === event.currentTarget) {
closeSheet();
}
}}
onKeyDown={(event) => {
if (
closeOnOutside &&
event.target === event.currentTarget &&
(event.key === "Escape" || event.key === "Enter" || event.key === " ")
) {
event.preventDefault();
closeSheet();
}
}}
>
<section
className={[
"flex max-h-[85vh] w-full flex-col overflow-hidden rounded-t-[34px] bg-[#F9F8F8] p-4 text-center shadow-[0_20px_60px_rgba(15,23,42,0.08)] transition-transform duration-[220ms] ease-out will-change-transform sm:max-w-[375px]",
isClosing || isEntering ? "translate-y-full" : "translate-y-0",
]
.filter(Boolean)
.join(" ")}
>
<div className="mx-auto flex h-full min-h-0 w-full flex-col items-center">
<div className="flex min-h-0 w-full flex-1 flex-col items-center">
<h2 className="text-[18px] leading-[1.2] font-bold tracking-[-0.03em] text-[#171717]">
{t["What was the outcome of your contact?"]}
</h2>
<p className="mt-3.5 w-full text-start text-[14px] leading-[1.45] text-[#2C2C2C] dir-auto font-medium">
{
t[
"We hope the acquaintance process is going well. Please let us know if you want to continue the acquaintance process or if the match has been canceled."
]
}
</p>
<fieldset
className="mt-5 flex min-h-0 w-full flex-1 flex-col"
aria-labelledby={groupId}
>
<legend id={groupId} className="sr-only">
{t["What was the outcome of your contact?"]}
</legend>
<div className="flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto pr-1">
{/* Option A: Ongoing acquaintance */}
<label
className={[
"flex cursor-pointer items-center gap-3 rounded-[14px] px-[14px] py-[18px] text-left border transition-all",
outcome === "ongoing"
? "bg-[#E8F8F3] border-[#00AC78]/30"
: "bg-[#ECECEC] border-transparent",
].join(" ")}
>
<input
checked={outcome === "ongoing"}
className="sr-only"
name="outcome-status"
type="radio"
value="ongoing"
onChange={() => {
setOutcome("ongoing");
}}
/>
<span
aria-hidden="true"
className={[
"flex h-6 w-6 shrink-0 items-center justify-center rounded-full border transition-colors",
outcome === "ongoing"
? "border-[#00AC78] bg-transparent"
: "border-[#9E9E9E] bg-transparent",
].join(" ")}
>
{outcome === "ongoing" ? (
<span className="h-3 w-3 rounded-full bg-[#00AC78]" />
) : null}
</span>
<span className="text-[15px] leading-snug font-bold text-[#262626] flex-1">
{
t[
"We are in the acquaintance/proposal process and nothing is finalized yet"
]
}
</span>
</label>
{/* Option B: Canceled */}
<label
className={[
"flex cursor-pointer items-center gap-3 rounded-[14px] px-[14px] py-[18px] text-left border transition-all",
outcome === "canceled"
? "bg-[#FFECEF] border-[#F0445B]/30"
: "bg-[#ECECEC] border-transparent",
].join(" ")}
>
<input
checked={outcome === "canceled"}
className="sr-only"
name="outcome-status"
type="radio"
value="canceled"
onChange={() => {
setOutcome("canceled");
}}
/>
<span
aria-hidden="true"
className={[
"flex h-6 w-6 shrink-0 items-center justify-center rounded-full border transition-colors",
outcome === "canceled"
? "border-[#F0445B] bg-transparent"
: "border-[#9E9E9E] bg-transparent",
].join(" ")}
>
{outcome === "canceled" ? (
<span className="h-3 w-3 rounded-full bg-[#F0445B]" />
) : null}
</span>
<span className="text-[15px] leading-snug font-bold text-[#262626] flex-1">
{t.Canceled}
</span>
</label>
{/* Reasons List (if Canceled is chosen) */}
{outcome === "canceled" ? (
<div className="mt-3 flex flex-col gap-3 pl-2 text-start animate-fadeIn">
<p className="text-[13px] font-bold text-[#555] mb-1">
{t["Please select the reason for cancellation:"]}
</p>
<div className="flex flex-col gap-[10px]">
{reasons.map((option) => {
const isReasonChecked =
selectedReasons.includes(option);
const isOtherReason =
option === reasons[reasons.length - 1];
return (
<div
key={option}
className="w-full flex flex-col gap-2"
>
<button
type="button"
className={[
"flex w-full items-center gap-3 bg-[#EAEAEA] px-4 py-[12px] text-start transition-all rounded-[12px]",
isReasonChecked
? "text-[#171717]"
: "text-[#7B7B7B]",
]
.filter(Boolean)
.join(" ")}
onClick={() => {
setSelectedReasons((prev) =>
prev.includes(option)
? prev.filter((r) => r !== option)
: [...prev, option],
);
}}
>
<span
aria-hidden="true"
className={[
"flex h-5 w-5 shrink-0 items-center justify-center rounded-[5px] border transition-colors",
isReasonChecked
? "border-[#F0445B] bg-[#F0445B]"
: "border-[#9E9E9E] bg-transparent",
]
.filter(Boolean)
.join(" ")}
>
{isReasonChecked ? (
<svg
aria-hidden="true"
className="h-3.5 w-3.5 text-white"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
strokeWidth={3.5}
>
<path
strokeLinecap="round"
strokeLinejoin="round"
d="M5 13l4 4L19 7"
/>
</svg>
) : null}
</span>
<span className="min-w-0 flex-1">
<span className="text-[14px] leading-none font-bold">
{option}
</span>
</span>
</button>
{isReasonChecked && isOtherReason ? (
<textarea
ref={textareaRef}
className="mt-1 h-[90px] w-full resize-none rounded-[12px] border border-[#BFBFBF] bg-transparent px-3 py-2 text-[14px] text-[#171717] outline-none placeholder:text-[#AAAAAA]"
placeholder={
t[
"Feel free to briefly explain your decision..."
]
}
value={reasonText}
onChange={(event) =>
setReasonText(event.target.value)
}
/>
) : null}
</div>
);
})}
</div>
</div>
) : null}
</div>
</fieldset>
</div>
{/* SwipeButton Confirmation Area */}
<div className="mt-6 w-full shrink-0">
{outcome === "ongoing" ? (
<SwipeButton
theme="green"
text={t["Swipe to continue"]}
onSuccess={() => {
onSubmit?.("success");
closeSheet();
}}
/>
) : (
<SwipeButton
theme="default"
disabled={isCanceledSwipeDisabled}
text={t["Swipe to confirm cancellation"]}
onSuccess={() => {
const activeReasons = selectedReasons.map((r) => {
if (r === reasons[reasons.length - 1]) {
return reasonText ? `${r}: ${reasonText}` : r;
}
return r;
});
onSubmit?.("failure", activeReasons.join("\n"));
closeSheet();
}}
/>
)}
</div>
</div>
</section>
</div>
);
}
export default FemaleOutcomeSheet;

38
src/components/Componentes/flutter-locale-sync.tsx

@ -0,0 +1,38 @@
"use client";
import { usePathname, useRouter } from "next/navigation";
import { useEffect } from "react";
import { useFlutterConfig } from "@/hooks/use-view-paddings";
import { setClientCookie } from "@/lib/cookies";
import { isLocale, localizePath } from "@/translations/config";
const LANGUAGE_COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
function persistLocale(locale: string) {
const options = { maxAge: LANGUAGE_COOKIE_MAX_AGE };
setClientCookie("HABIB_LANGUAGE", locale, options);
setClientCookie("habib_language", locale, options);
}
export default function FlutterLocaleSync() {
const config = useFlutterConfig();
const pathname = usePathname();
const router = useRouter();
useEffect(() => {
const flutterLocale = config.locale?.languageCode;
if (!isLocale(flutterLocale)) return;
persistLocale(flutterLocale);
const currentLocale = pathname.split("/")[1];
if (isLocale(currentLocale) && currentLocale === flutterLocale) return;
const localizedPath = localizePath(pathname, flutterLocale);
router.replace(`${localizedPath}${window.location.search}`, {
scroll: false,
});
}, [config.locale?.languageCode, pathname, router]);
return null;
}

18
src/components/Componentes/loading-border-spinner.tsx

@ -0,0 +1,18 @@
import type { ComponentProps } from "react";
export function LoadingBorderSpinner({ className = "", ...props }: ComponentProps<"span">) {
const hasBorder = className.split(" ").some((c) => c.startsWith("border-"));
const borderClasses = hasBorder
? ""
: "border-2 border-rose-500/25 border-t-rose-500 dark:border-rose-400/20 dark:border-t-rose-400";
const hasSize = className.split(" ").some((c) => c.startsWith("size-") || c.startsWith("w-") || c.startsWith("h-"));
const sizeClasses = hasSize ? "" : "size-5";
return (
<span
className={`animate-spin rounded-full inline-block animate-fade-in ${borderClasses} ${sizeClasses} ${className}`.trim()}
{...props}
/>
);
}

16
src/components/Componentes/loading-icon-spinner.tsx

@ -0,0 +1,16 @@
import type { ComponentProps } from "react";
export function LoadingIconSpinner({ className = "", ...props }: ComponentProps<"svg">) {
return (
<svg
className={`animate-spin transition-all duration-300 ease-out animate-fade-in ${className}`}
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
<path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" />
</svg>
);
}

20
src/components/Componentes/loading-pulse-text.tsx

@ -0,0 +1,20 @@
import { LoadingIconSpinner } from "./loading-icon-spinner";
interface LoadingPulseTextProps {
text?: string;
className?: string;
}
export function LoadingPulseText({
text = "در حال دریافت آخرین اطلاعات واقعی از سرور...",
className = "",
}: LoadingPulseTextProps) {
return (
<div
className={`flex items-center justify-center gap-3 p-4 rounded-2xl border border-neutral-200/60 dark:border-neutral-800/60 bg-neutral-50/50 dark:bg-neutral-900/30 backdrop-blur-xs text-center text-xs font-medium text-muted-foreground animate-pulse shadow-xs ${className}`.trim()}
>
<LoadingIconSpinner className="size-4 text-rose-500/80 shrink-0" />
<span>{text}</span>
</div>
);
}

7
src/components/Componentes/loading-select-spinner.tsx

@ -0,0 +1,7 @@
export function LoadingSelectSpinner({ className = "" }: { className?: string }) {
return (
<span
className={`size-3 animate-spin rounded-full inline-block border border-neutral-200 dark:border-neutral-800 border-t-rose-500 dark:border-t-rose-400 animate-fade-in ${className}`.trim()}
/>
);
}

16
src/components/Componentes/loading-three-dot.tsx

@ -0,0 +1,16 @@
import type { ComponentProps } from "react";
interface LoadingThreeDotProps extends ComponentProps<"span"> {}
export function LoadingThreeDot({ className = "", ...props }: LoadingThreeDotProps) {
return (
<span
className={`inline-flex items-center justify-center gap-1.5 py-0.5 ${className}`}
{...props}
>
<span className="size-2 rounded-full bg-current animate-dots-slide-1" />
<span className="size-2 rounded-full bg-current animate-dots-slide-2" />
<span className="size-2 rounded-full bg-current animate-dots-slide-3" />
</span>
);
}

1
src/components/Componentes/navigation-button.tsx

@ -12,7 +12,6 @@ import { useI18n } from "@/translations/provider";
import HelpModal from "./help-modal";
import SupportSheet from "./support-sheet";
import InformationSheet from "./information-sheet";
import { DotsLoader } from "./button";
import { useQueryClient } from "@tanstack/react-query";
import ErrorToast from "./error-toast";
import {

4
src/components/Componentes/page-header.tsx

@ -49,7 +49,11 @@ export function PageHeader({
.filter(Boolean)
.join(" ")}
>
{leftButton?.className?.includes("hidden") ? (
<div className="size-10 shrink-0" />
) : (
<NavigationButton icon="back" {...leftButton} />
)}
<h1 className="font-faminela text-[20px] font-normal text-foreground">
{t["Habib Marriage"]}
</h1>

49
src/components/Componentes/page-loading-skeleton.tsx

@ -0,0 +1,49 @@
import { LoadingSkeleton } from "./loading-skeleton";
import { PageBackground } from "./page-background";
type PageLoadingSkeletonProps = {
compact?: boolean;
};
/** Shared full-page loading state for the mobile frontend. */
export function PageLoadingSkeleton({
compact = false,
}: PageLoadingSkeletonProps) {
return (
<>
<PageBackground disabled />
<main
aria-busy="true"
className="-mx-[17px] flex min-h-svh flex-col px-[23px] pt-[max(16px,calc(var(--safe-top)+8px))] pb-[calc(24px+var(--safe-bottom))]"
>
<header className="flex h-11 items-center justify-between">
<LoadingSkeleton className="size-10 rounded-full" />
<LoadingSkeleton className="h-5 w-28 rounded-lg" />
<LoadingSkeleton className="size-10 rounded-full" />
</header>
<section className="flex flex-1 flex-col items-center pt-16 text-center">
<LoadingSkeleton className="size-28 rounded-full" />
<LoadingSkeleton className="mt-8 h-6 w-48 rounded-lg" />
<LoadingSkeleton className="mt-4 h-4 w-full max-w-[300px]" />
<LoadingSkeleton className="mt-2 h-4 w-4/5 max-w-[250px]" />
{!compact && (
<div className="mt-12 w-full space-y-3 rounded-[18px] border border-neutral-200/70 p-4 dark:border-neutral-800/70">
<LoadingSkeleton className="h-5 w-32" />
<LoadingSkeleton className="h-3.5 w-full" />
<LoadingSkeleton className="h-3.5 w-3/4" />
<div className="flex items-center justify-between pt-3">
<div className="flex -space-x-2">
<LoadingSkeleton className="size-8 rounded-full" />
<LoadingSkeleton className="size-8 rounded-full" />
<LoadingSkeleton className="size-8 rounded-full" />
</div>
<LoadingSkeleton className="h-10 w-28 rounded-xl" />
</div>
</div>
)}
</section>
<LoadingSkeleton className="mt-8 h-[52px] w-full rounded-xl" />
</main>
</>
);
}

56
src/components/Componentes/question-answer-storage.tsx

@ -313,6 +313,8 @@ export function QuestionAnswersProvider({
useUpdateMarriageSectionDataMutation(slug);
const answersRef = useRef<QuestionAnswersByKey>({});
const hasPendingSyncRef = useRef(false);
const answersRevisionRef = useRef(0);
const flushPromiseRef = useRef<Promise<void> | null>(null);
const questionsRef = useRef(questions);
const storageKeyRef = useRef(storageKey);
const slugRef = useRef(slug);
@ -320,9 +322,8 @@ export function QuestionAnswersProvider({
const { data: profile } = useMarriageProfileQuery();
const canEdit = profile?.can_edit_profile !== false;
const backendSlug = useMemo(() => toBackendSlug(slug), [slug]);
const { data: serverSectionData, isLoading: isLoadingData } =
useMarriageSectionDataQuery(backendSlug);
useMarriageSectionDataQuery(slug);
useEffect(() => {
questionsRef.current = questions;
@ -342,8 +343,11 @@ export function QuestionAnswersProvider({
// Merge: local answers override server answers for unsynced changes
finalAnswers = { ...serverAnswers, ...stored.answers };
} else {
// No pending changes locally or profile is locked, use server answers directly
finalAnswers = serverAnswers;
// A section response can temporarily omit fields (most notably while
// the combined family section is being refreshed). Keep locally known
// fields that the response did not include, while letting explicit
// server values, including null/empty values, win for matching keys.
finalAnswers = { ...stored.answers, ...serverAnswers };
finalPendingSync = false;
}
}
@ -398,6 +402,7 @@ export function QuestionAnswersProvider({
answersRef.current = nextAnswers;
hasPendingSyncRef.current = true;
answersRevisionRef.current += 1;
writeStoredAnswers(
storageKeyRef.current,
slugRef.current,
@ -433,17 +438,41 @@ export function QuestionAnswersProvider({
if (!canEdit) {
return;
}
if (flushPromiseRef.current) {
await flushPromiseRef.current;
}
if (!hasPendingSyncRef.current && !options?.force) {
return;
}
const payload = createPayload(answersRef.current, questionsRef.current);
const revision = answersRevisionRef.current;
if (payload.fields.length === 0) {
return;
}
await mutateAsync(payload);
const request = mutateAsync(payload).then(() => undefined);
flushPromiseRef.current = request;
try {
await request;
} finally {
if (flushPromiseRef.current === request) {
flushPromiseRef.current = null;
}
}
// Do not mark a newer edit as synced just because an older request
// completed. A forced exit waits for and saves that newer revision too.
if (revision !== answersRevisionRef.current) {
if (options?.force) {
await flushAnswersRef.current();
}
return;
}
hasPendingSyncRef.current = false;
setHasPendingSync(false);
@ -472,7 +501,19 @@ export function QuestionAnswersProvider({
return;
}
// The combined family card must be split across two backend endpoints by
// updateMarriageSectionData. Sending its full payload to either endpoint
// would overwrite the other half of the profile. The local pending draft
// remains available and is retried on the next visit.
if (
slugRef.current === "family_marital_history" ||
flushPromiseRef.current
) {
return;
}
const payload = createPayload(answersRef.current, questionsRef.current);
const revision = answersRevisionRef.current;
if (payload.fields.length === 0) {
return;
@ -499,7 +540,12 @@ export function QuestionAnswersProvider({
return;
}
if (revision !== answersRevisionRef.current) {
return;
}
hasPendingSyncRef.current = false;
setHasPendingSync(false);
writeStoredAnswers(
storageKeyRef.current,
slugRef.current,

23
src/components/Componentes/question-birthplace.tsx

@ -6,6 +6,7 @@ import type { QuestionField } from "@/data/question-data";
import { useI18n } from "@/translations/provider";
import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title";
import { LoadingThreeDot } from "./loading-three-dot";
type QuestionBirthplaceProps = {
question: QuestionField;
@ -351,6 +352,7 @@ export function QuestionBirthplace({
<button
type="button"
onClick={handleAutoClick}
disabled={isDetecting}
className={[
"flex flex-1 items-center justify-center gap-1.5 h-[46px] rounded-xl text-[14px] font-bold cursor-pointer transition-all shadow-sm",
mode === "auto"
@ -358,6 +360,10 @@ export function QuestionBirthplace({
: "bg-white border border-[#D0D5DD] text-[#344054] hover:bg-gray-50",
].join(" ")}
>
{isDetecting ? (
<LoadingThreeDot />
) : (
<>
<svg
width="16"
height="16"
@ -365,22 +371,13 @@ export function QuestionBirthplace({
fill="none"
className="shrink-0"
>
<circle
cx="8"
cy="8"
r="6"
stroke="currentColor"
strokeWidth="2"
/>
<circle cx="8" cy="8" r="6" stroke="currentColor" strokeWidth="2" />
<circle cx="8" cy="8" r="2" fill="currentColor" />
<path
d="M8 0V3M8 13V16M0 8H3M13 8H16"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
/>
<path d="M8 0V3M8 13V16M0 8H3M13 8H16" stroke="currentColor" strokeWidth="2" strokeLinecap="round" />
</svg>
<span>{locale === "fa" ? "خودکار" : "Auto"}</span>
</>
)}
</button>
{/* Manual Button */}

11
src/components/Componentes/question-file.tsx

@ -8,6 +8,7 @@ import { getApiRequestUrl } from "@/lib/http";
import { isInFlutterWebView, uploadFile } from "@/lib/webview-actions";
import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title";
import { LoadingSkeleton } from "./loading-skeleton";
type QuestionFileProps = {
question: QuestionField;
@ -326,12 +327,15 @@ export function QuestionFile({
{isPending && (
<div className="absolute inset-0 z-30 flex items-center justify-center rounded-[29px] bg-black/40 backdrop-blur-[1px]">
<div className="h-6 w-6 animate-spin rounded-full border-2 border-white border-t-transparent" />
<LoadingSkeleton className="h-full w-full rounded-[29px]" />
</div>
)}
</div>
) : (
/* ────── DEFAULT EMPTY STATE ────── */
isPending ? (
<LoadingSkeleton className="h-24 w-full rounded-[24px]" />
) : (
<>
<Image
src="/assets/images/Image.svg"
@ -340,9 +344,7 @@ export function QuestionFile({
height={24}
/>
<span className="mt-3 block group-12 leading-none font-normal text-[#111111]">
{isPending
? "uploading..."
: (selectedFileName ?? "upload certificates")}
{selectedFileName ?? "upload certificates"}
</span>
{uploadTmpMediaMutation.isError ? (
<span className="mt-2 block group-10 leading-none font-bold text-[#D44747]">
@ -354,6 +356,7 @@ export function QuestionFile({
</span>
) : null}
</>
)
)}
</span>
</div>

7
src/components/Componentes/question-phone.tsx

@ -6,6 +6,7 @@ import type { QuestionField } from "@/data/question-data";
import type { MarriagePhoneFieldValue } from "@/hooks/marriage/types";
import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title";
import { LoadingSkeleton } from "./loading-skeleton";
import { useI18n } from "@/translations/provider";
type QuestionPhoneProps = {
@ -542,10 +543,10 @@ export function QuestionPhone({
{isResolvingCode ? (
/* Loading skeleton while determining country code */
<div className="flex w-full items-center gap-3 px-4">
<div className="h-5 w-5 rounded-full bg-[#E5E7EB] animate-pulse" />
<div className="h-4 w-12 rounded bg-[#E5E7EB] animate-pulse" />
<LoadingSkeleton className="size-5 rounded-full" />
<LoadingSkeleton className="h-4 w-12" />
<span aria-hidden="true" className="h-5 w-px bg-[#181818]/15" />
<div className="h-4 flex-1 rounded bg-[#E5E7EB] animate-pulse" />
<LoadingSkeleton className="h-4 flex-1" />
</div>
) : (
<>

3
src/components/Componentes/question-photo.tsx

@ -8,6 +8,7 @@ import { getApiRequestUrl } from "@/lib/http";
import { isInFlutterWebView, uploadFile } from "@/lib/webview-actions";
import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title";
import { LoadingSkeleton } from "./loading-skeleton";
type QuestionPhotoProps = {
question: QuestionField;
@ -229,7 +230,7 @@ export function QuestionPhoto({
{/* Loading spinner during upload */}
{isPending && (
<div className="absolute inset-0 flex items-center justify-center rounded-full bg-black/40 backdrop-blur-[1px]">
<div className="h-6 w-6 animate-spin rounded-full border-2 border-white border-t-transparent" />
<LoadingSkeleton className="size-12 rounded-full" />
</div>
)}
</div>

10
src/components/Componentes/question-slider.tsx

@ -23,9 +23,7 @@ export function QuestionSlider({
const { getAnswerValue, setAnswerValue } = useQuestionAnswers();
const storedValue = getAnswerValue(question, questionIndex);
const isDesiredAgeRange =
question.title === "Desired Age Range of Future Spouse" ||
question.title === "بازه سنی مطلوب همسر آینده";
const isDesiredAgeRange = false;
const thumbWidth = 18;
const bubbleHalfWidth = 18;
@ -112,7 +110,7 @@ export function QuestionSlider({
resizeObserver.observe(slider);
return () => resizeObserver.disconnect();
}, [progress, isDesiredAgeRange]);
}, [progress]);
if (isDesiredAgeRange) {
const handleFromChange = (newFrom: number) => {
@ -141,7 +139,7 @@ export function QuestionSlider({
{/* First Slider (From Age) */}
<div className="flex flex-col gap-2 pt-2">
<div className="flex justify-between items-center text-[14px] font-bold text-[#181818]">
<span>{t["From"] ?? "From"}</span>
<span>{t.From ?? "From"}</span>
<span className="rounded-[8px] bg-[#FCE7EA] text-[#F2465F] px-2.5 py-1 text-[13px] font-bold">
{fromVal}
</span>
@ -182,7 +180,7 @@ export function QuestionSlider({
{/* Second Slider (To Age) */}
<div className="flex flex-col gap-2 pt-2">
<div className="flex justify-between items-center text-[14px] font-bold text-[#181818]">
<span>{t["To"] ?? "To"}</span>
<span>{t.To ?? "To"}</span>
<span className="rounded-[8px] bg-[#FCE7EA] text-[#F2465F] px-2.5 py-1 text-[13px] font-bold">
{toVal}
</span>

8
src/components/Componentes/subscription-required-sheet.tsx

@ -2,6 +2,7 @@
import Image from "next/image";
import InformationSheet from "./information-sheet";
import { LoadingThreeDot } from "./loading-three-dot";
type SubscriptionRequiredSheetProps = {
onClose: () => void;
@ -57,8 +58,11 @@ export function SubscriptionRequiredSheet({
onClick={onPayment}
>
<div className="inline-flex w-full items-center justify-center gap-3 rounded-[18px] bg-[#F0445B] px-4 h-[52px] text-[16px] font-semibold text-white shadow-[0_10px_18px_rgba(240,68,91,0.28)] transition-opacity active:opacity-90 min-w-0">
{isPaymentPending ? (
<LoadingThreeDot />
) : (
<>
<span className="truncate">Payment</span>
<span className="inline-flex items-center gap-1 rounded-full bg-[#E43B51] p-1.5 text-xs font-semibold leading-none text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] shrink-0 min-w-0 whitespace-nowrap">
<Image
src="/assets/images/Inner Plugdsain Iframe.svg"
@ -70,6 +74,8 @@ export function SubscriptionRequiredSheet({
/>
<span className="truncate">50</span>
</span>
</>
)}
</div>
</button>
</div>

3
src/components/Componentes/swipe-button.tsx

@ -4,6 +4,7 @@ import type React from "react";
import { useEffect, useRef, useState } from "react";
import { GoChevronLeft, GoChevronRight } from "react-icons/go";
import { useI18n } from "@/translations/provider";
import { LoadingThreeDot } from "./loading-three-dot";
type SwipeButtonProps = {
onSuccess: () => void;
@ -151,7 +152,7 @@ export function SwipeButton({
<span
className={`pointer-events-none z-10 text-[14px] font-bold ${textColor} animate-pulse`}
>
{swiped ? "..." : text}
{swiped ? <LoadingThreeDot /> : text}
</span>
{/* Slide handle */}

171
src/components/Componentes/test-loading-screen.tsx

@ -1,176 +1,27 @@
"use client";
import { DotsLoader } from "./button";
import { LoadingSkeleton } from "./loading-skeleton";
import { PageBackground } from "./page-background";
export function AnalyzingIllustration({
className = "w-44 h-44",
}: {
className?: string;
}) {
return (
<svg
viewBox="0 0 160 160"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
>
{/* Base shadow oval */}
<ellipse cx="80" cy="144" rx="55" ry="6" fill="#FCE7F3" opacity="0.8" />
<ellipse cx="80" cy="144" rx="35" ry="3.5" fill="#FDA4AF" opacity="0.4" />
{/* Main Document Paper */}
<g filter="drop-shadow(0px 8px 20px rgba(242, 70, 95, 0.12))">
{/* Paper body */}
<rect x="42" y="30" width="76" height="96" rx="10" fill="#FFFFFF" />
{/* Header bar inside paper */}
<rect x="50" y="38" width="60" height="26" rx="6" fill="#FFF1F2" />
{/* Small text lines in header */}
<line
x1="56"
y1="46"
x2="76"
y2="46"
stroke="#FDA4AF"
strokeWidth="2.5"
strokeLinecap="round"
/>
<line
x1="56"
y1="53"
x2="70"
y2="53"
stroke="#FECDD3"
strokeWidth="2"
strokeLinecap="round"
/>
{/* Donut chart in header */}
<circle
cx="97"
cy="51"
r="7.5"
stroke="#F2465F"
strokeWidth="3"
fill="none"
strokeDasharray="32 10"
/>
<circle cx="97" cy="51" r="3.5" fill="#E03950" />
{/* Bar chart bars */}
<rect x="54" y="86" width="6" height="26" rx="3" fill="#F2465F" />
<rect x="64" y="74" width="6" height="38" rx="3" fill="#FF6B81" />
<rect x="74" y="92" width="6" height="20" rx="3" fill="#FDA4AF" />
<rect x="84" y="80" width="6" height="32" rx="3" fill="#F2465F" />
<rect x="94" y="88" width="6" height="24" rx="3" fill="#FF8093" />
{/* Pie Chart on right */}
<circle cx="97" cy="73" r="8.5" fill="#FDA4AF" />
<path d="M97 73 L97 64.5 A8.5 8.5 0 0 1 105.5 73 Z" fill="#F2465F" />
</g>
{/* Rolled bottom paper edge effect */}
<path
d="M42 120 C 42 128, 54 128, 54 120 C 54 128, 118 128, 118 120"
fill="#FFFFFF"
stroke="#FFE4E6"
strokeWidth="1.5"
/>
{/* Magnifying Glass */}
<g filter="drop-shadow(2px 8px 14px rgba(242, 70, 95, 0.25))">
{/* Handle */}
<rect
x="28"
y="88"
width="8"
height="36"
rx="4"
transform="rotate(38 28 88)"
fill="#F2465F"
/>
{/* Handle Accent Connection */}
<rect
x="28"
y="88"
width="8"
height="9"
rx="2"
transform="rotate(38 28 88)"
fill="#E03950"
/>
{/* Glass Ring */}
<circle
cx="62"
cy="58"
r="21"
fill="#FFFFFF"
fillOpacity="0.65"
stroke="#F2465F"
strokeWidth="5"
/>
{/* Lens Inner Reflection */}
<path
d="M49 50 A 16 16 0 0 1 71 46"
stroke="#FFD1D7"
strokeWidth="3.5"
strokeLinecap="round"
fill="none"
/>
</g>
</svg>
);
}
type TestLoadingScreenProps = {
title?: string;
subtitle?: string;
locale?: string;
};
export default function TestLoadingScreen({
title,
subtitle,
locale = "en",
}: TestLoadingScreenProps) {
const defaultTitle =
locale === "fa" ? "در حال تحلیل و دریافت اطلاعات" : "Analyzing responses";
const defaultSubtitle =
locale === "fa"
? "لطفاً چند لحظه شکیبا باشید تا اطلاعات مورد نظر بارگذاری و آماده شوند."
: "Please wait while we review your submission and generate results.";
export default function TestLoadingScreen(_props: TestLoadingScreenProps) {
return (
<>
<PageBackground disabled />
<main className="-mx-[17px] flex h-svh flex-col items-center justify-between bg-[#F7F1F0] py-16 px-6 text-center select-none">
{/* Top spacer to balance layout */}
<div className="w-full shrink-0" />
{/* Center Content Block */}
<div className="flex flex-col items-center max-w-xs mx-auto my-auto">
{/* Brand Illustrated Icon */}
<div className="mb-6 flex justify-center">
<AnalyzingIllustration className="w-44 h-44 drop-shadow-sm" />
</div>
{/* Title */}
<h2 className="text-xl font-extrabold text-[#2C2C2E] tracking-tight mb-2.5 leading-snug">
{title ?? defaultTitle}
</h2>
{/* Subtitle */}
<p className="text-sm font-medium text-[#6C6C70] leading-relaxed max-w-[270px] mx-auto">
{subtitle ?? defaultSubtitle}
</p>
</div>
{/* Bottom 3-Dots Loading Animation */}
<div className="shrink-0 mb-4 flex justify-center items-center py-2">
<DotsLoader className="text-[#F2465F] scale-150" />
<main
aria-busy="true"
className="-mx-[17px] flex h-svh flex-col items-center justify-center bg-[#F7F1F0] px-6 text-center select-none"
>
<div className="flex w-full max-w-xs flex-col items-center">
<LoadingSkeleton className="size-44 rounded-[32px]" />
<LoadingSkeleton className="mt-7 h-6 w-56 rounded-lg" />
<LoadingSkeleton className="mt-4 h-4 w-full rounded-md" />
<LoadingSkeleton className="mt-2 h-4 w-4/5 rounded-md" />
</div>
</main>
</>

12
src/data/questions/en.json

@ -1370,18 +1370,6 @@
"progress": 0,
"description": "Criteria and Red Lines.",
"questions": [
{
"title": "Desired Age Range of Future Spouse",
"type": "scale",
"required": true,
"description": "",
"extras": {
"placeHolder": "25-30",
"range": [18, 80],
"options": []
},
"private": true
},
{
"title": "Desired Height Range of Future Spouse",
"type": "dropdown",

12
src/data/questions/fa.json

@ -1370,18 +1370,6 @@
"progress": 0,
"description": "معیارها و خطوط قرمز.",
"questions": [
{
"title": "بازه سنی مطلوب همسر آینده",
"type": "scale",
"required": true,
"description": "",
"extras": {
"placeHolder": "۲۵-۳۰",
"range": [18, 80],
"options": []
},
"private": true
},
{
"title": "بازه قدی مطلوب همسر آینده",
"type": "dropdown",

8
src/lib/get-submit-path.ts

@ -17,23 +17,15 @@ export function getSubmitPath(profile: MarriageProfileResponse | undefined) {
const caseStatus = activeCase.status;
const myAction = activeCase.my_action;
const isFemale = profile.gender === "female";
if (
caseStatus === "payment_done" ||
caseStatus === "finalized" ||
caseStatus === "contacted"
) {
if (isFemale) {
return "/candidate-contact";
}
return "/request-accepted";
}
if (caseStatus === "payment_pending" || caseStatus === "female_accepted") {
if (isFemale) {
return "/candidate-contact";
}
return "/request-accepted";
}

32
src/lib/http.ts

@ -1,11 +1,9 @@
import axios, { type InternalAxiosRequestConfig } from "axios";
import { isLocale } from "../translations/config";
import { authBridge } from "./auth-bridge";
import { getClientCookie } from "./cookies";
import { isLocale } from "../translations/config";
const PROXY_PATH_PARAM = "__proxyPath";
const LOCALHOST_HOSTNAMES = new Set(["localhost", "127.0.0.1", "::1"]);
function isAbsoluteUrl(url: string) {
return /^[a-z][a-z\d+\-.]*:\/\//i.test(url);
}
@ -85,7 +83,7 @@ http.interceptors.request.use((config) => {
// Tell browser not to cache API responses
config.headers["Cache-Control"] = "no-cache, no-store, must-revalidate";
config.headers["Pragma"] = "no-cache";
config.headers.Pragma = "no-cache";
const stripNoToken = (v: string | null) => (v && v !== "NO_TOKEN" ? v : null);
@ -98,25 +96,23 @@ http.interceptors.request.use((config) => {
config.headers.Authorization = `Token ${token}`;
}
let lang: string | undefined =
getClientCookie("HABIB_LANGUAGE") ??
getClientCookie("habib_language") ??
undefined;
if (!isLocale(lang)) {
const pathSegment =
typeof window !== "undefined"
? window.location.pathname.split("/")[1]
: undefined;
if (isLocale(pathSegment)) {
lang = pathSegment;
} else {
const docLang =
typeof document !== "undefined"
? document.documentElement.lang
: undefined;
lang = isLocale(docLang) ? docLang : "fa";
}
}
typeof document !== "undefined" ? document.documentElement.lang : undefined;
const cookieLanguage =
getClientCookie("HABIB_LANGUAGE") ??
getClientCookie("habib_language") ??
undefined;
const lang = isLocale(pathSegment)
? pathSegment
: isLocale(cookieLanguage)
? cookieLanguage
: isLocale(docLang)
? docLang
: "en";
config.headers["Accept-Language"] = lang;
config.headers["X-User-Language"] = lang;

47
src/lib/view-paddings.ts

@ -119,11 +119,20 @@ class ViewPaddingsBridge {
private setupConfigEventListener() {
const handle = (raw: unknown) => {
if (!raw || typeof raw !== "object") return;
const data = raw as Record<string, any>;
// فقط وقتی هنوز initial_config رسمی نرسیده و این payload فضای امن دارد.
if (this.hasInitialConfig) return;
if (!data.safeArea && !data.viewInsets) return;
const envelope = raw as Record<string, any>;
const data = (envelope.payload ?? envelope.data ?? envelope) as Record<
string,
any
>;
if (this.hasInitialConfig) {
if (data.locale) this.applyLocale(data.locale);
return;
}
if (data.safeArea || data.viewInsets) {
this.applyInitialConfig(data);
} else if (data.locale) {
this.applyLocale(data.locale);
}
};
window.addEventListener("flutterConfig", (event) => {
@ -152,10 +161,20 @@ class ViewPaddingsBridge {
switch (event.action) {
case "initial_config":
this.applyInitialConfig(event.data);
case "INITIAL_CONFIG":
this.applyInitialConfig(event.data ?? event.payload);
this.hasInitialConfig = true;
return;
case "locale_changed":
case "language_changed":
case "LOCALE_CHANGED":
case "LANGUAGE_CHANGED": {
const data = event.data ?? event.payload;
this.applyLocale(data?.locale ?? data);
return;
}
// به‌روزرسانی فضای امن هنگام چرخش/تغییر notch (px منطقی).
case "safe_area_changed":
this.applySafeArea(readEdges(event.data));
@ -252,6 +271,16 @@ class ViewPaddingsBridge {
this.notifyConfigListeners();
}
private applyLocale(locale: any) {
if (!locale) return;
this.config.locale = {
languageCode: String(locale.languageCode ?? locale.language_code ?? ""),
isRTL: Boolean(locale.isRTL ?? locale.isRtl ?? locale.is_rtl),
};
this.notifyConfigListeners();
}
private applyEdges(paddings: ViewPaddings) {
this.paddings = paddings;
this.applyPaddings();
@ -274,11 +303,15 @@ class ViewPaddingsBridge {
}
private notifyListeners() {
this.listeners.forEach((listener) => listener(this.paddings));
this.listeners.forEach((listener) => {
listener(this.paddings);
});
}
private notifyConfigListeners() {
this.configListeners.forEach((listener) => listener(this.config));
this.configListeners.forEach((listener) => {
listener(this.config);
});
}
public getPaddings(): ViewPaddings {

10
src/translations/locales/ar.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### خيارات الجو الديني العائلي * **الدين والالتزام الصارم:** يحدد هذا عائلة مكرسة للغاية لأداء جميع **الواجبات الإلزامية**، والحفاظ بشكل صارم على **الحدود الدينية** (مثل قواعد المحارم)، ودعم **الطقوس والتعاليم الدينية** في جميع جوانب الحياة. * **متدين (ملتزم بالالتزامات):** يشير هذا إلى عائلة ملتزمة بأساسيات **الواجبات الدينية** (مثل الصلاة والصيام) و **الأخلاق الإسلامية**، التي تعيش ضمن الأطر القياسية لمجتمع ديني. * **التقليدية (التي تحترم القيم الدينية):** تصف هذه العائلة التي تلتزم بالقيم الأخلاقية و**تحترم الدين**، ولكن لا يجوز لها أن تنفذ بدقة كل **قانون أو التزام ديني** محدد. * **غير دينية / علمانية:** يمثل هذا عائلة لا تؤثر فيها **الطقوس والأطر الدينية** بشكل كبير على **نمط حياتهم اليومي أو علاقاتهم أو قراراتهم**، على الرغم من الاحترام العام للدين.",
"(Complete Required Forms)": "(إكمال النماذج المطلوبة)",
"(after 2 days)": "(بعد يومين)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. شروط الأهلية والعضوية",
"160 to 170": "160 إلى 170",
"170 to 180": "170 إلى 180",
"175": "175",
"180 to 190": "180 إلى 190",
"2": "2",
"2 minutes": "2 دقيقة",
"2. Privacy and Data Management": "2. الخصوصية وإدارة البيانات",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 دقائق",
"50 Coins": "50 قطعة نقدية",
"6 minutes": "6 دقائق",
"70": "70",
"8 minutes": "8 دقائق",
"A Path to Heavenly Marriage": "الطريق إلى الزواج السماوي",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "ليس هناك حاجة إلى عنوان دقيق. يكفي فقط المنطقة العامة للمكان الذي تعيش فيه، مثل المدينة أو المنطقة أو الحي أو أقرب مدينة رئيسية.",
@ -125,6 +125,7 @@
"Contact": "الاتصال",
"Contact Detail": "تفاصيل الاتصال",
"Contact Information Released": "تم إصدار معلومات الاتصال",
"Contact Received": "تم استلام الاتصال",
"Contact Support": "اتصل بالدعم",
"Contact details and residence.": "تفاصيل الاتصال والإقامة.",
"Contact details are shared only after your approval.": "تتم مشاركة تفاصيل الاتصال فقط بعد موافقتك.",
@ -373,11 +374,13 @@
"Next": "التالي",
"Next Page": "الصفحة التالية",
"No Active Subscription": "لا يوجد اشتراك نشط",
"No Contact Received": "لم يتم استلام أي اتصال",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "لا حجاب (عادي/حديث) - التصميم الحديث والملابس غير الرسمية.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "عدم الحجاب (التصميم المحتشم) - ارتداء ملابس محتشمة وكريمة بدون غطاء للرأس.",
"No ceremony or very simple": "لا يوجد حفل أو بسيط جدا",
"No children": "لا أطفال",
"No connection felt": "لم يشعر بأي اتصال",
"No contact has been made with you in any way or by any party.": "لم يتم الاتصال بك بأي شكل من الأشكال أو من قبل أي طرف.",
"No difference": "لا فرق",
"No formal child support commitment (or child is independent / pending).": "لا يوجد التزام رسمي بدعم الطفل (أو أن الطفل مستقل / معلق).",
"No independent income": "لا يوجد دخل مستقل",
@ -624,6 +627,7 @@
"Temporary conditions": "شروط مؤقتة",
"Temporary with family okay": "مؤقت مع العائلة بخير",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "نشكرك على تقديم تعليقاتك إلينا، وسنكون سعداء جدًا إذا أخبرتنا أيضًا بالنتيجة النهائية.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "شكراً على ملاحظاتك. سيقوم فريق الدعم لدينا بالتحقيق في الأمر وإعلامك بالنتيجة. يرجى الانتظار بصبر أثناء المراجعة؛ سيتصل بك فريق الدعم الخاص بنا.",
"The call may start 10-15 minutes earlier or later than scheduled.": "قد تبدأ المكالمة قبل 10-15 دقيقة من الموعد المحدد أو بعده.",
"The selected candidate will contact your family shortly.": "سيتصل المرشح المختار بعائلتك قريبًا.",
"The value entered seems incorrect. Please provide a realistic value.": "القيمة المدخلة تبدو غير صحيحة. يرجى تقديم قيمة واقعية.",

10
src/translations/locales/az.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### Ailə Dini Atmosfer Seçimləri * **Dini və Ciddi şəkildə əməl edən:** Bu, bütün **məcburi vəzifələri** yerinə yetirməyə, **dini sərhədləri** (məs., Məhrəm qaydaları kimi) ciddi şəkildə qorumağa və bütün aspektlərdə **dini ayin və təlimlərə** riayət etməyə yüksək dərəcədə bağlı olan ailəni göstərir. * **Dini (Vəziyyətlərə əməl edən):** Bu, əsas **dini vəzifələrə** (namaz və oruc kimi) və **İslam etikasına** sadiq olan, dini cəmiyyətin standart çərçivələri daxilində yaşayan ailəni göstərir. * **Ənənəvi (Dini Dəyərlərə Hörmətli):** Bu, əxlaqi dəyərlərə sadiq qalan və **dinə hörmət edən** ailəni təsvir edir, lakin hər bir xüsusi **dini qanunu** və ya öhdəliyi ciddi şəkildə yerinə yetirməyə bilməz. * **Dini olmayan / Dünyəvi:** Bu, **dini ayinlər və çərçivələrin** dinə ümumi hörmət bəsləməsinə baxmayaraq, onların gündəlik **həyat tərzinə, münasibətlərinə və ya qərarlarına** əhəmiyyətli dərəcədə təsir göstərməyən ailəni təmsil edir.",
"(Complete Required Forms)": "(Tələb olunan formaları doldurun)",
"(after 2 days)": "(2 gündən sonra)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Uyğunluq və Üzvlük Tələbləri",
"160 to 170": "160-170",
"170 to 180": "170-180",
"175": "175",
"180 to 190": "180-190",
"2": "2",
"2 minutes": "2 dəqiqə",
"2. Privacy and Data Management": "2. Məxfilik və Məlumatların İdarə Edilməsi",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 dəqiqə",
"50 Coins": "50 qəpik",
"6 minutes": "6 dəqiqə",
"70": "70",
"8 minutes": "8 dəqiqə",
"A Path to Heavenly Marriage": "Səmavi Evliliyə gedən yol",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "Dəqiq ünvan tələb olunmur. Yaşadığınız yerin ümumi ərazisi kifayətdir, məsələn, şəhər, rayon, məhəllə və ya ən yaxın böyük şəhər.",
@ -125,6 +125,7 @@
"Contact": "Əlaqə",
"Contact Detail": "Əlaqə təfərrüatı",
"Contact Information Released": "Əlaqə Məlumatı Açıqlandı",
"Contact Received": "Əlaqə alındı",
"Contact Support": "Dəstək ilə əlaqə saxlayın",
"Contact details and residence.": "Əlaqə məlumatları və yaşayış yeri.",
"Contact details are shared only after your approval.": "Əlaqə məlumatları yalnız sizin təsdiqinizdən sonra paylaşılır.",
@ -373,11 +374,13 @@
"Next": "Sonrakı",
"Next Page": "Növbəti Səhifə",
"No Active Subscription": "Aktiv Abunəlik Yoxdur",
"No Contact Received": "Əlaqə alınmadı",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "Hicabsız (Casual/Modern) - Müasir üslub və təsadüfi geyimlər.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "Hicab yoxdur (Təvazökar üslub) - Baş örtüyü olmadan ləyaqətli təvazökar geyim.",
"No ceremony or very simple": "Mərasim yoxdur və ya çox sadədir",
"No children": "Uşaqlar yoxdur",
"No connection felt": "Heç bir əlaqə hiss olunmadı",
"No contact has been made with you in any way or by any party.": "Sizinlə heç bir şəkildə və ya heç bir tərəfdən əlaqə saxlanılmayıb.",
"No difference": "Fərq yoxdur",
"No formal child support commitment (or child is independent / pending).": "Rəsmi uşaq dəstəyi öhdəliyi yoxdur (yaxud uşaq müstəqildir/gözləmədədir).",
"No independent income": "Müstəqil gəlir yoxdur",
@ -624,6 +627,7 @@
"Temporary conditions": "Müvəqqəti şərtlər",
"Temporary with family okay": "Ailə ilə müvəqqəti tamam",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "Bizə rəy bildirdiyiniz üçün təşəkkür edirik, son nəticəni də bizə bildirsəniz çox şad olarıq.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Rəyiniz üçün təşəkkür edirik. Dəstək komandamız məsələni araşdıracaq və nəticə barədə sizə məlumat verəcəkdir. Zəhmət olmasa baxış zamanı səbirlə gözləyin; dəstəyimiz sizinlə əlaqə saxlayacak.",
"The call may start 10-15 minutes earlier or later than scheduled.": "Zəng planlaşdırılan vaxtdan 10-15 dəqiqə əvvəl və ya gec başlaya bilər.",
"The selected candidate will contact your family shortly.": "Seçilmiş namizəd tezliklə ailənizlə əlaqə saxlayacaq.",
"The value entered seems incorrect. Please provide a realistic value.": "Daxil edilmiş dəyər yanlış görünür. Zəhmət olmasa real dəyər verin.",

10
src/translations/locales/bn.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### পারিবারিক ধর্মীয় পরিবেশের বিকল্পগুলি * **ধর্মীয় এবং কঠোরভাবে পর্যবেক্ষক:** এটি এমন একটি পরিবারকে নির্দিষ্ট করে যা সমস্ত **বাধ্যতামূলক দায়িত্ব** পালনের জন্য অত্যন্ত নিবেদিত, কঠোরভাবে **ধর্মীয় সীমানা** (যেমন মাহরাম নিয়ম) বজায় রাখতে এবং **জীবনের **ধর্মীয় আচার ও শিক্ষা**কে সমুন্নত রাখে। * **ধর্মীয় (দায়বদ্ধতা পালনকারী):** এটি একটি পরিবারকে নির্দেশ করে যে মূল **ধর্মীয় কর্তব্য** (যেমন প্রার্থনা এবং উপবাস) এবং **ইসলামিক নীতি**, একটি ধর্মীয় সমাজের মানক কাঠামোর মধ্যে বসবাস করে। * **ঐতিহ্যগত (ধর্মীয় মূল্যবোধের প্রতি শ্রদ্ধাশীল):** এটি এমন একটি পরিবারকে বর্ণনা করে যেটি নৈতিক মূল্যবোধের প্রতি ভক্তি রাখে এবং **ধর্মকে সম্মান করে**, কিন্তু প্রতিটি নির্দিষ্ট **ধর্মীয় আইন** বা বাধ্যবাধকতা কঠোরভাবে পালন নাও করতে পারে। * **অধর্মীয় / ধর্মনিরপেক্ষ:** এটি এমন একটি পরিবারের প্রতিনিধিত্ব করে যেখানে **ধর্মীয় আচার-অনুষ্ঠান এবং কাঠামো** তাদের দৈনন্দিন **জীবনধারা, সম্পর্ক বা সিদ্ধান্ত**কে উল্লেখযোগ্যভাবে প্রভাবিত করে না, যদিও ধর্মের প্রতি সাধারণ শ্রদ্ধা রয়েছে।",
"(Complete Required Forms)": "(প্রয়োজনীয় ফর্ম সম্পূর্ণ করুন)",
"(after 2 days)": "(২ দিন পর)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. যোগ্যতা এবং সদস্যতার প্রয়োজনীয়তা",
"160 to 170": "160 থেকে 170",
"170 to 180": "170 থেকে 180",
"175": "175",
"180 to 190": "180 থেকে 190",
"2": "2",
"2 minutes": "2 মিনিট",
"2. Privacy and Data Management": "2. গোপনীয়তা এবং ডেটা ব্যবস্থাপনা",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 মিনিট",
"50 Coins": "50 কয়েন",
"6 minutes": "6 মিনিট",
"70": "70",
"8 minutes": "8 মিনিট",
"A Path to Heavenly Marriage": "স্বর্গীয় বিবাহের পথ",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "একটি সুনির্দিষ্ট ঠিকানা প্রয়োজন হয় না. আপনি যেখানে বাস করেন তার সাধারণ এলাকাটিই যথেষ্ট, যেমন শহর, অঞ্চল, পাড়া বা নিকটতম প্রধান শহর৷",
@ -125,6 +125,7 @@
"Contact": "যোগাযোগ",
"Contact Detail": "যোগাযোগের বিস্তারিত",
"Contact Information Released": "যোগাযোগের তথ্য প্রকাশিত হয়েছে",
"Contact Received": "যোগাযোগ প্রাপ্ত হয়েছে",
"Contact Support": "সহায়তার সাথে যোগাযোগ করুন",
"Contact details and residence.": "যোগাযোগের বিবরণ এবং বাসস্থান।",
"Contact details are shared only after your approval.": "আপনার অনুমোদনের পরেই যোগাযোগের বিবরণ শেয়ার করা হয়।",
@ -373,11 +374,13 @@
"Next": "পরবর্তী",
"Next Page": "পরবর্তী পৃষ্ঠা",
"No Active Subscription": "কোনো সক্রিয় সদস্যতা নেই",
"No Contact Received": "কোনো যোগাযোগ প্রাপ্ত হয়নি",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "হিজাব নেই (নৈমিত্তিক/আধুনিক) - আধুনিক স্টাইলিং এবং নৈমিত্তিক পোশাক।",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "নো হিজাব (মডস্ট স্টাইলিং) - হেডস্কার্ফ ছাড়া মর্যাদাপূর্ণ শালীন পোশাক।",
"No ceremony or very simple": "কোন অনুষ্ঠান বা খুব সাধারণ",
"No children": "কোন সন্তান নেই",
"No connection felt": "কোন সংযোগ অনুভূত হয় না",
"No contact has been made with you in any way or by any party.": "আপনার সাথে কোনোভাবেই বা কোনো পক্ষের পক্ষ থেকে যোগাযোগ করা হয়নি।",
"No difference": "কোন পার্থক্য নেই",
"No formal child support commitment (or child is independent / pending).": "কোন আনুষ্ঠানিক শিশু সমর্থন প্রতিশ্রুতি (বা শিশু স্বাধীন / মুলতুবি)",
"No independent income": "স্বাধীন আয় নেই",
@ -624,6 +627,7 @@
"Temporary conditions": "অস্থায়ী অবস্থা",
"Temporary with family okay": "পরিবারের সাথে সাময়িক ঠিক আছে",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "আমাদের মতামত দেওয়ার জন্য আপনাকে ধন্যবাদ, আপনি যদি চূড়ান্ত ফলাফলটি আমাদের জানান তাহলে আমরা খুব খুশি হব।",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "আপনার মতামতের জন্য ধন্যবাদ। আমাদের সাপোর্ট টিম বিষয়টি তদন্ত করবে এবং আপনাকে ফলাফল জানাবে। অনুগ্রহ করে পর্যালোচনার সময় ধৈর্য ধরে অপেক্ষা করুন; আমাদের সাপোর্ট টিম আপনার সাথে যোগাযোগ করবে।",
"The call may start 10-15 minutes earlier or later than scheduled.": "কলটি নির্ধারিত সময়ের 10-15 মিনিট আগে বা পরে শুরু হতে পারে।",
"The selected candidate will contact your family shortly.": "নির্বাচিত প্রার্থী শীঘ্রই আপনার পরিবারের সাথে যোগাযোগ করবে।",
"The value entered seems incorrect. Please provide a realistic value.": "প্রবেশ করা মান ভুল বলে মনে হচ্ছে। একটি বাস্তবসম্মত মান প্রদান করুন.",

10
src/translations/locales/da.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### Valgmuligheder for familiereligiøs atmosfære * **Religiøs og strengt observant:** Dette specificerer en familie, der er meget dedikeret til at udføre alle **obligatoriske pligter**, strengt opretholde **religiøse grænser** (såsom Mahram-regler) og opretholde **religiøse ritualer og lære** på tværs af alle aspekter af livet. * **Religiøs (Observant of Obligations):** Dette indikerer en familie, der er forpligtet til kerne **religiøse pligter** (såsom bøn og faste) og **islamisk etik**, der lever inden for et religiøst samfunds standardrammer. * **Traditionelt (respekterer religiøse værdier):** Dette beskriver en familie, der holder hengivenhed til moralske værdier og **respekterer religion**, men som måske ikke strengt udfører enhver specifik **religiøs lov** eller forpligtelse. * **Ikke-religiøs/sekulær:** Dette repræsenterer en familie, hvor **religiøse ritualer og rammer** ikke har væsentlig indflydelse på deres daglige **livsstil, forhold eller beslutninger**, på trods af at de har en generel respekt for religion.",
"(Complete Required Forms)": "(Complete Required Forms)",
"(after 2 days)": "(after 2 days)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Eligibility and Membership Requirements",
"160 to 170": "160 til 170",
"170 to 180": "170 til 180",
"175": "175",
"180 to 190": "180 til 190",
"2": "2",
"2 minutes": "2 minutter",
"2. Privacy and Data Management": "2. Privacy and Data Management",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 minutter",
"50 Coins": "50 Coins",
"6 minutes": "6 minutter",
"70": "70",
"8 minutes": "8 minutter",
"A Path to Heavenly Marriage": "A Path to Heavenly Marriage",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "En præcis adresse er ikke påkrævet. Bare det generelle område, hvor du bor, er tilstrækkeligt, såsom byen, regionen, kvarteret eller den nærmeste større by.",
@ -125,6 +125,7 @@
"Contact": "Kontakt",
"Contact Detail": "Kontaktoplysninger",
"Contact Information Released": "Contact Information Released",
"Contact Received": "Kontakt modtaget",
"Contact Support": "Kontakt Support",
"Contact details and residence.": "Kontaktoplysninger og bopæl.",
"Contact details are shared only after your approval.": "Contact details are shared only after your approval.",
@ -373,11 +374,13 @@
"Next": "Next",
"Next Page": "Next Page",
"No Active Subscription": "Intet aktivt abonnement",
"No Contact Received": "Ingen kontakt modtaget",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "No Hijab (Casual/Modern) - Moderne styling og afslappede outfits.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "Ingen Hijab (beskeden styling) - Værdig beskeden påklædning uden tørklæde.",
"No ceremony or very simple": "Ingen ceremoni eller meget enkel",
"No children": "Ingen børn",
"No connection felt": "No connection felt",
"No contact has been made with you in any way or by any party.": "Der er ikke oprettet forbindelse med dig på nogen måde eller af nogen part.",
"No difference": "Ingen forskel",
"No formal child support commitment (or child is independent / pending).": "Ingen formel forpligtelse til børnebidrag (eller barnet er uafhængigt/afventende).",
"No independent income": "Ingen selvstændig indkomst",
@ -624,6 +627,7 @@
"Temporary conditions": "Midlertidige forhold",
"Temporary with family okay": "Midlertidig med familien okay",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "Tak for din feedback, vi vil blive meget glade, hvis du også vil lade os vide det endelige resultat.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Tak for din feedback. Vores supportteam vil undersøge sagen og underrette dig om resultatet. Vent venligst tålmodigt under gennemgangen; vores support vil kontakte dig.",
"The call may start 10-15 minutes earlier or later than scheduled.": "Opkaldet kan starte 10-15 minutter tidligere eller senere end planlagt.",
"The selected candidate will contact your family shortly.": "The selected candidate will contact your family shortly.",
"The value entered seems incorrect. Please provide a realistic value.": "The value entered seems incorrect. Please provide a realistic value.",

10
src/translations/locales/de.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### Optionen für die religiöse Atmosphäre in der Familie * **Religiös und strikt befolgend:** Dies bezeichnet eine Familie, die sich in hohem Maße der Erfüllung aller **obligatorischen Pflichten** widmet, die **religiösen Grenzen** (z. B. die Mahram-Regeln) strikt einhält und **religiöse Rituale und Lehren** in allen Aspekten des Lebens aufrechterhält. * **Religiös (observant of Obligations):** Dies weist auf eine Familie hin, die sich den grundlegenden **religiösen Pflichten** (wie Gebet und Fasten) und der **islamischen Ethik** verpflichtet und innerhalb der Standardrahmen einer religiösen Gesellschaft lebt. * **Traditionell (Respekt gegenüber religiösen Werten):** Dies beschreibt eine Familie, die moralischen Werten treu bleibt und **die Religion respektiert**, aber möglicherweise nicht jedes bestimmte **religiöse Gesetz** oder jede spezifische Verpflichtung strikt einhält. * **Nicht-religiös/säkular:** Dies stellt eine Familie dar, in der **religiöse Rituale und Rahmenbedingungen** ihren täglichen **Lebensstil, ihre Beziehungen oder Entscheidungen** nicht wesentlich beeinflussen, obwohl sie allgemein Respekt vor der Religion haben.",
"(Complete Required Forms)": "(Complete Required Forms)",
"(after 2 days)": "(after 2 days)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Eligibility and Membership Requirements",
"160 to 170": "160 bis 170",
"170 to 180": "170 bis 180",
"175": "175",
"180 to 190": "180 bis 190",
"2": "2",
"2 minutes": "2 Minuten",
"2. Privacy and Data Management": "2. Privacy and Data Management",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 Minuten",
"50 Coins": "50 Coins",
"6 minutes": "6 Minuten",
"70": "70",
"8 minutes": "8 Minuten",
"A Path to Heavenly Marriage": "A Path to Heavenly Marriage",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "Eine genaue Adresse ist nicht erforderlich. Es reicht lediglich der allgemeine Bereich Ihres Wohnortes aus, beispielsweise die Stadt, die Region, das Viertel oder die nächstgelegene größere Stadt.",
@ -125,6 +125,7 @@
"Contact": "Kontakt",
"Contact Detail": "Kontaktdetails",
"Contact Information Released": "Contact Information Released",
"Contact Received": "Kontakt erhalten",
"Contact Support": "Support kontaktieren",
"Contact details and residence.": "Kontaktdaten und Wohnort.",
"Contact details are shared only after your approval.": "Contact details are shared only after your approval.",
@ -373,11 +374,13 @@
"Next": "Next",
"Next Page": "Next Page",
"No Active Subscription": "Kein aktives Abonnement",
"No Contact Received": "Kein Kontakt erhalten",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "Kein Hijab (Casual/Modern) – Modernes Styling und lässige Outfits.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "Kein Hijab (bescheidenes Styling) – würdevolle, bescheidene Kleidung ohne Kopftuch.",
"No ceremony or very simple": "Keine Zeremonie oder sehr einfach",
"No children": "Keine Kinder",
"No connection felt": "No connection felt",
"No contact has been made with you in any way or by any party.": "Es wurde in keiner Weise oder von keiner Seite Kontakt mit Ihnen aufgenommen.",
"No difference": "Kein Unterschied",
"No formal child support commitment (or child is independent / pending).": "Keine formelle Unterhaltsverpflichtung für das Kind (oder das Kind ist unabhängig/ausstehend).",
"No independent income": "Kein unabhängiges Einkommen",
@ -624,6 +627,7 @@
"Temporary conditions": "Vorübergehende Bedingungen",
"Temporary with family okay": "Vorübergehend bei der Familie okay",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "Vielen Dank für Ihr Feedback. Wir würden uns sehr freuen, wenn Sie uns auch das Endergebnis mitteilen würden.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Vielen Dank für Ihr Feedback. Unser Support-Team wird die Angelegenheit untersuchen und Sie über das Ergebnis informieren. Bitte gedulden Sie sich während der Prüfung; unser Support wird sich mit Ihnen in Verbindung setzen.",
"The call may start 10-15 minutes earlier or later than scheduled.": "Der Anruf kann 10–15 Minuten früher oder später als geplant beginnen.",
"The selected candidate will contact your family shortly.": "The selected candidate will contact your family shortly.",
"The value entered seems incorrect. Please provide a realistic value.": "The value entered seems incorrect. Please provide a realistic value.",

37
src/translations/locales/en.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options * **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life. * **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society. * **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation. * **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### Family Religious Atmosphere Options * **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life. * **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society. * **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation. * **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.",
"(Complete Required Forms)": "(Complete Required Forms)",
"(after 2 days)": "(after 2 days)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Eligibility and Membership Requirements",
"160 to 170": "160 to 170",
"170 to 180": "170 to 180",
"175": "175",
"180 to 190": "180 to 190",
"2": "2",
"2 minutes": "2 minutes",
"2. Privacy and Data Management": "2. Privacy and Data Management",
"25-30": "25-30",
@ -25,12 +24,13 @@
"5 minutes": "5 minutes",
"50 Coins": "50 Coins",
"6 minutes": "6 minutes",
"70": "70",
"8 minutes": "8 minutes",
"A Path to Heavenly Marriage": "A Path to Heavenly Marriage",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.",
"A suitable match has been found for you. If approved, your profile will be evaluated to proceed with the introduction process.": "A suitable match has been found for you. If approved, your profile will be evaluated to proceed with the introduction process.",
"Ability to Support Marriage Expenses": "Ability to Support Marriage Expenses",
"Able to support the main portion of expenses": "Able to support the main portion of expenses",
"Able to support the main portion of expenses": "Able to cover most of the expenses",
"Above 190": "Above 190",
"Accept": "Accept",
"Accept Profile": "Accept Profile",
@ -58,6 +58,7 @@
"Approving this profile will **display your contact number** to the gentleman. Ensure **family consensus** before proceeding.": "Approving this profile will **display your contact number** to the gentleman. Ensure **family consensus** before proceeding.",
"Approximately half the time (joint custody/schedule).": "Approximately half the time (joint custody/schedule).",
"Arabic": "Arabic",
"Are you sure contact has been made?": "Are you sure contact has been made?",
"Are you sure you want to officially introduce these two candidates to each other?": "Are you sure you want to officially introduce these two candidates to each other?",
"Are you sure you've fully reviewed the profile and are ready to proceed?": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"Are you sure you've fully reviewed the profile and want to reject this profile?": "Are you sure you've fully reviewed the profile and want to reject this profile?",
@ -71,13 +72,13 @@
"Australia": "Australia",
"Average": "Average",
"Ayatollah Sistani": "Ayatollah Sistani",
"Bachelor's degree in architecture": "Bachelor's degree in architecture",
"Bachelor's Degree": "Bachelor's Degree",
"Bachelor's degree in architecture": "Bachelor's degree in architecture",
"Back": "Back",
"Balochi": "Balochi",
"Based on conditions": "Based on conditions",
"Based on family agreement": "Based on family agreement",
"Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.": "Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.",
"Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.": "Before making a final decision, please carefully review the other person's full profile again so you can make an informed choice.",
"Beliefs, Lifestyle, and Personal Boundaries": "Beliefs, Lifestyle, and Personal Boundaries",
"Below High School": "Below High School",
"Bio & Expectations": "Bio & Expectations",
@ -95,6 +96,7 @@
"Can buy a home": "Can buy a home",
"Canada": "Canada",
"Cancel": "Cancel",
"Canceled": "Canceled",
"Case-by-case with consultation": "Case-by-case with consultation",
"Children and Guardianship Status": "Children and Guardianship Status",
"Children have reached legal age (custody is not applicable).": "Children have reached legal age (custody is not applicable).",
@ -125,6 +127,7 @@
"Contact": "Contact",
"Contact Detail": "Contact Detail",
"Contact Information Released": "Contact Information Released",
"Contact Received": "Contact Received",
"Contact Support": "Contact Support",
"Contact details and residence.": "Contact details and residence.",
"Contact details are shared only after your approval.": "Contact details are shared only after your approval.",
@ -204,7 +207,7 @@
"Enter details here...": "Enter details here...",
"Enter your explanation here...": "Enter your explanation here...",
"Entrepreneur / Business Owner": "Entrepreneur / Business Owner",
"Estimate time": "Estimate time",
"Estimate time": "Estimated time",
"Ethnicity / Family Origin / Race": "Ethnicity / Family Origin / Race",
"Exit": "Exit",
"Failed engagement / Annulled marriage; without living together": "Failed engagement / Annulled marriage; without living together",
@ -343,6 +346,7 @@
"Modern style okay": "Modern style okay",
"Modest clothing important, details negotiable": "Modest clothing important, details negotiable",
"Monthly Income": "Monthly Income",
"More detail": "More detail",
"Mosque and Religious Gatherings": "Mosque and Religious Gatherings",
"Mother": "Mother",
"Mother Tongue": "Mother Tongue",
@ -373,11 +377,13 @@
"Next": "Next",
"Next Page": "Next Page",
"No Active Subscription": "No Active Subscription",
"No Contact Received": "No Contact Received",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "No Hijab (Casual/Modern) - Modern styling and casual outfits.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "No Hijab (Modest styling) - Dignified modest attire without headscarf.",
"No ceremony or very simple": "No ceremony or very simple",
"No children": "No children",
"No connection felt": "No connection felt",
"No contact has been made with you in any way or by any party.": "No contact has been made with you in any way or by any party.",
"No difference": "No difference",
"No formal child support commitment (or child is independent / pending).": "No formal child support commitment (or child is independent / pending).",
"No independent income": "No independent income",
@ -392,7 +398,7 @@
"No, but they reside near my place of living.": "No, but they reside near my place of living.",
"No, it has no significant impact on residence or relocation.": "No, it has no significant impact on residence or relocation.",
"No, they live in another city or country.": "No, they live in another city or country.",
"Non-political view of Shiasm, but it's not a red line if my spouse has political views.": "Non-political view of Shiasm, but it's not a red line if my spouse has political views.",
"Non-political view of Shiasm, but it's not a red line if my spouse has political views.": "I hold a non-political view of Shiism, but it is not a red line if my spouse has political views.",
"Non-religious / Secular": "Non-religious / Secular",
"None are red lines": "None are red lines",
"Normal and respectful": "Normal and respectful",
@ -469,6 +475,7 @@
"Please note: Failure to contact within 2 days may result in a penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"Please provide the full reason for rejecting the submitted item": "Please provide the full reason for rejecting the submitted item",
"Please report the final outcome of the proposal and communication to the system.": "Please report the final outcome of the proposal and communication to the system.",
"Please review the person’s full profile once more before making your final decision.": "Please review the person’s full profile once more before making your final decision.",
"Please select the option that best describes the general atmosphere and lifestyle of your family.": "Please select the option that best describes the general atmosphere and lifestyle of your family.",
"Please select the option that best describes your daily behavior when interacting with members of the opposite sex.": "Please select the option that best describes your daily behavior when interacting with members of the opposite sex.",
"Please select the option that best describes your view on religion and your expectations of your future spouse.": "Please select the option that best describes your view on religion and your expectations of your future spouse.",
@ -566,8 +573,9 @@
"Sensitive information (face, contact details) revealed step-by-step only with mutual consent.": "Sensitive information (face, contact details) revealed step-by-step only with mutual consent.",
"Separated / Divorced": "Separated / Divorced",
"Serious": "Serious",
"Share Result": "Share Result",
"Sharia Hijab mandatory, type doesn't matter": "Sharia Hijab mandatory, type doesn't matter",
"Short Children/Guardianship Explanation": "Short Children/Guardianship Explanation",
"Short Children/Guardianship Explanation": "Brief Explanation of Children and Guardianship",
"Short Family Description": "Short Family Description",
"Short explanation about your lifestyle": "Short explanation about your lifestyle",
"Should not listen": "Should not listen",
@ -612,7 +620,10 @@
"Supporter of the current government, but a difference in view is not a red line.": "Supporter of the current government, but a difference in view is not a red line.",
"Supporter of the current government; serious opposition from my spouse is a red line.": "Supporter of the current government; serious opposition from my spouse is a red line.",
"Sweden": "Sweden",
"Swipe to confirm": "Swipe to confirm",
"Swipe to confirm cancellation": "Swipe to confirm cancellation",
"Swipe to confirm rejection": "Swipe to confirm rejection",
"Swipe to continue": "Swipe to continue",
"Swipe to pay 50 Habib Coins": "Swipe to pay 50 Habib Coins",
"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.": "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.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.": "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
@ -624,13 +635,15 @@
"Temporary conditions": "Temporary conditions",
"Temporary with family okay": "Temporary with family okay",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "Thank you for giving us feedback, we would be very happy if you also let us know the final result.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.",
"Thank you for your feedback. To complete the process, please submit the final outcome of this introduction/contact so that the final status can be determined. If the final status is not yet determined, you can stay in this state until it is finalized.": "Thank you for your feedback. To complete the process, please submit the final outcome of this introduction/contact so that the final status can be determined. If the final status is not yet determined, you can stay in this state until it is finalized.",
"The call may start 10-15 minutes earlier or later than scheduled.": "The call may start 10-15 minutes earlier or later than scheduled.",
"The selected candidate will contact your family shortly.": "The selected candidate will contact your family shortly.",
"The value entered seems incorrect. Please provide a realistic value.": "The value entered seems incorrect. Please provide a realistic value.",
"These concepts and categories are not a major concern for me.": "These concepts and categories are not a major concern for me.",
"They do not live with me, or there is no fixed schedule.": "They do not live with me, or there is no fixed schedule.",
"Third country": "Third country",
"This field requires the user to declare all permanent medications currently being taken for any physical, psychological, medical, or non-medical condition.": "This field requires the user to declare all permanent medications currently being taken for any physical, psychological, medical, or non-medical condition.",
"This field requires the user to declare all permanent medications currently being taken for any physical, psychological, medical, or non-medical condition.": "This field requires the user to declare all long-term medications currently being taken for any physical or mental health condition.",
"This field requires the user to upload a recent, clear facial photograph that will remain private and accessible exclusively to advisors.": "This field requires the user to upload a recent, clear facial photograph that will remain private and accessible exclusively to advisors.",
"This field specifies the full name of the designated intermediary whose contact information is provided to the other party to facilitate communication.": "This field specifies the full name of the designated intermediary whose contact information is provided to the other party to facilitate communication.",
"This is not a priority for me": "This is not a priority for me",
@ -643,7 +656,7 @@
"Total Pages": "Total Pages",
"Tourism and Travel": "Tourism and Travel",
"Traditional (respectful of religious values)": "Traditional (respectful of religious values)",
"Traditional and non-political view of Shiasm; cannot marry someone with a political view.": "Traditional and non-political view of Shiasm; cannot marry someone with a political view.",
"Traditional and non-political view of Shiasm; cannot marry someone with a political view.": "I hold a traditional, non-political view of Shiism and cannot marry someone with a political view.",
"Trusted Family Friend": "Trusted Family Friend",
"Trusted Social Sponsor": "Trusted Social Sponsor",
"Turkey": "Turkey",
@ -683,8 +696,10 @@
"View more details": "View more details",
"View profile": "View profile",
"Watch Video": "Watch Video",
"We are in the acquaintance/proposal process and nothing is finalized yet": "We are in the acquaintance/proposal process and nothing is finalized yet",
"We did not reach an agreement": "We did not reach an agreement",
"We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"We hope the acquaintance process is going well. Please let us know if you want to continue the acquaintance process or if the match has been canceled.": "We hope the acquaintance process is going well. Please let us know if you want to continue the acquaintance process or if the match has been canceled.",
"We provide a safe and respectful environment at every step.": "We provide a safe and respectful environment at every step.",
"We reached an agreement": "We reached an agreement",
"Weak": "Weak",

10
src/translations/locales/es.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### Opciones de ambiente religioso familiar * **Religioso y estrictamente observante:** Esto especifica una familia altamente dedicada a realizar todos los **deberes obligatorios**, mantener estrictamente **límites religiosos** (como las reglas de Mahram) y defender **rituales y enseñanzas religiosas** en todos los aspectos de la vida. * **Religioso (observante de las obligaciones):** Esto indica una familia comprometida con los **deberes religiosos** básicos (como la oración y el ayuno) y la **ética islámica**, que vive dentro de los marcos estándar de una sociedad religiosa. * **Tradicional (Respetuoso de los Valores Religiosos):** Esto describe una familia que tiene devoción a los valores morales y **respeta la religión**, pero no puede ejecutar estrictamente cada **ley u obligación religiosa** específica. * **No religioso/Secular:** Esto representa una familia donde **los rituales y marcos religiosos** no influyen significativamente en su **estilo de vida, relaciones o decisiones** diarias, a pesar de tener un respeto general por la religión.",
"(Complete Required Forms)": "(Complete Required Forms)",
"(after 2 days)": "(after 2 days)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Eligibility and Membership Requirements",
"160 to 170": "160 a 170",
"170 to 180": "170 a 180",
"175": "175",
"180 to 190": "180 a 190",
"2": "2",
"2 minutes": "2 minutos",
"2. Privacy and Data Management": "2. Privacy and Data Management",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 minutos",
"50 Coins": "50 Coins",
"6 minutes": "6 minutos",
"70": "70",
"8 minutes": "8 minutos",
"A Path to Heavenly Marriage": "A Path to Heavenly Marriage",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "No se requiere una dirección precisa. Sólo el área general donde vive es suficiente, como la ciudad, región, vecindario o ciudad importante más cercana.",
@ -125,6 +125,7 @@
"Contact": "Contactar",
"Contact Detail": "Detalles de contacto",
"Contact Information Released": "Contact Information Released",
"Contact Received": "Contacto recibido",
"Contact Support": "Contactar Soporte",
"Contact details and residence.": "Datos de contacto y residencia.",
"Contact details are shared only after your approval.": "Contact details are shared only after your approval.",
@ -373,11 +374,13 @@
"Next": "Next",
"Next Page": "Next Page",
"No Active Subscription": "Sin suscripción activa",
"No Contact Received": "Contacto no recibido",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "No Hijab (Informal/Moderno): estilo moderno y vestimenta informal.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "No Hijab (estilo modesto): vestimenta modesta y digna sin pañuelo en la cabeza.",
"No ceremony or very simple": "Sin ceremonia o muy sencilla.",
"No children": "sin niños",
"No connection felt": "No connection felt",
"No contact has been made with you in any way or by any party.": "No se ha establecido contacto con usted de ninguna manera ni por ninguna parte.",
"No difference": "No hay diferencia",
"No formal child support commitment (or child is independent / pending).": "No hay compromiso formal de manutención infantil (o el niño es independiente/pendiente).",
"No independent income": "Sin ingresos independientes",
@ -624,6 +627,7 @@
"Temporary conditions": "Condiciones temporales",
"Temporary with family okay": "Temporal con la familia bien",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "Gracias por enviarnos sus comentarios. Estaremos muy contentos si también nos comunica el resultado final.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Gracias por sus comentarios. Nuestro equipo de soporte investigará el asunto y le notificará el resultado. Espere pacientemente durante la revisión; nuestro soporte se pondrá en contacto con usted.",
"The call may start 10-15 minutes earlier or later than scheduled.": "La llamada puede comenzar entre 10 y 15 minutos antes o después de lo programado.",
"The selected candidate will contact your family shortly.": "The selected candidate will contact your family shortly.",
"The value entered seems incorrect. Please provide a realistic value.": "The value entered seems incorrect. Please provide a realistic value.",

23
src/translations/locales/fa.json

@ -1,7 +1,4 @@
{
"2": "۲",
"70": "۷۰",
"175": "۱۷۵",
"### Family Religious Atmosphere Options * **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life. * **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society. * **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation. * **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### راهنمای گزینه‌های فضای مذهبی خانواده * **مذهبی و کاملاً مقید:** خانواده‌ای که تقید بسیار بالایی به انجام تمام واجبات دارد، حدود شرعی (مانند محرم و نامحرم) را به شدت رعایت می‌کند و آداب و مناسک مذهبی در تمام شئون زندگی آن‌ها جریان دارد. * **مذهبی (مقید به واجبات):** خانواده‌ای که متعهد به واجبات اصلی مذهبی (مانند نماز و روزه) و اخلاق اسلامی است و در چارچوب‌های متعارف یک جامعه متدین زندگی می‌کند. * **سنتی (محترم به ارزش‌های دینی):** خانواده‌ای که به ارزش‌های اخلاقی پایبند است و به دین احترام می‌گذارد، اما ممکن است تمام احکام و واجبات مذهبی را به طور دقیق و کامل اجرا نکند. * **غیرمذهبی / عرفی:** خانواده‌ای که مناسک و چارچوب‌های مذهبی تاثیر تعیین‌کننده‌ای بر سبک زندگی، ارتباطات یا تصمیم‌گیری‌های روزمره‌شان ندارد، هرچند ممکن است احترامی کلی برای مذهب قائل باشند.",
"(Complete Required Forms)": "(تکمیل فرم‌های ضروری)",
"(after 2 days)": "(بعد از ۲ روز)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "۱. شرایط عضویت و صلاحیت",
"160 to 170": "۱۶۰ تا ۱۷۰",
"170 to 180": "۱۷۰ تا ۱۸۰",
"175": "۱۷۵",
"180 to 190": "۱۸۰ تا ۱۹۰",
"2": "۲",
"2 minutes": "۲ دقیقه",
"2. Privacy and Data Management": "۲. حریم خصوصی و مدیریت داده‌ها",
"25-30": "۲۵-۳۰",
@ -25,6 +24,7 @@
"5 minutes": "۵ دقیقه",
"50 Coins": "۵۰ سکه",
"6 minutes": "۶ دقیقه",
"70": "۷۰",
"8 minutes": "۸ دقیقه",
"A Path to Heavenly Marriage": "مسیری برای ازدواج آسمانی",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "نیازی به آدرس دقیق نیست. فقط محدوده کلی محل زندگی کافی است؛ مثلاً نام شهر، منطقه، ناحیه یا نزدیکترین شهر بزرگ.",
@ -58,6 +58,7 @@
"Approving this profile will **display your contact number** to the gentleman. Ensure **family consensus** before proceeding.": "با تایید این پروفایل **شماره تماس شما** به آقا نمایش داده خواهد شد. قبل از اقدام، از **رضایت خانواده** اطمینان حاصل کنید.",
"Approximately half the time (joint custody/schedule).": "تقریباً نیمی از زمان (به‌صورت مشترک) با من زندگی می‌کنند.",
"Arabic": "عربی",
"Are you sure contact has been made?": "آیا از برقرار شدن تماس اطمینان دارید؟",
"Are you sure you want to officially introduce these two candidates to each other?": "آیا اطمینان دارید که می‌خواهید این دو داوطلب را به‌صورت رسمی به یکدیگر معرفی کنید؟",
"Are you sure you've fully reviewed the profile and are ready to proceed?": "آیا مطمئن هستید پروفایل را کامل بررسی کرده‌اید و آماده ادامه هستید؟",
"Are you sure you've fully reviewed the profile and want to reject this profile?": "آیا مطمئن هستید که پروفایل را به طور کامل بررسی کرده‌اید و می‌خواهید این پیشنهاد را رد کنید؟",
@ -71,8 +72,8 @@
"Australia": "استرالیا",
"Average": "متوسط",
"Ayatollah Sistani": "آیت‌الله سیستانی",
"Bachelor's degree in architecture": "کارشناسی معماری",
"Bachelor's Degree": "کارشناسی / Bachelor's Degree",
"Bachelor's degree in architecture": "کارشناسی معماری",
"Back": "بازگشت",
"Balochi": "بلوچی",
"Based on conditions": "بسته به شرایط خانواده‌ها تصمیم می‌گیرم.",
@ -95,6 +96,7 @@
"Can buy a home": "امکان خرید خانه دارم.",
"Canada": "کانادا",
"Cancel": "لغو",
"Canceled": "کنسل شده",
"Case-by-case with consultation": "موردی و با مشورت بررسی می‌کنم.",
"Children and Guardianship Status": "وضعیت فرزند و تکفل",
"Children have reached legal age (custody is not applicable).": "فرزندان به سن قانونی رسیده‌اند و حضانت مطرح نیست.",
@ -125,6 +127,7 @@
"Contact": "تماس",
"Contact Detail": "جزئیات تماس",
"Contact Information Released": "اطلاعات تماس آزاد شد",
"Contact Received": "تماس دریافت شد",
"Contact Support": "ارتباط با پشتیبانی",
"Contact details and residence.": "اطلاعات تماس و سکونت.",
"Contact details are shared only after your approval.": "اطلاعات تماس شما فقط پس از تأیید خودتان به اشتراک گذاشته می‌شود.",
@ -343,6 +346,7 @@
"Modern style okay": "پوشش مدرن برایم مشکلی ندارد.",
"Modest clothing important, details negotiable": "پوشش محجوب و سنگین مهم است، اما جزئیات قابل گفتگو است.",
"Monthly Income": "میزان درآمد ماهانه",
"More detail": "جزئیات بیشتر",
"Mosque and Religious Gatherings": "حضور در مسجد و هیئت",
"Mother": "مادر",
"Mother Tongue": "زبان مادری",
@ -373,11 +377,13 @@
"Next": "بعدی",
"Next Page": "صفحه بعدی",
"No Active Subscription": "فاقد اشتراک فعال",
"No Contact Received": "عدم دریافت تماس",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "پوشش مدرن و آزاد (بدون رعایت حجاب) - دنبال کردن استایل‌های روز بدون پایبندی به قواعد حجاب اسلامی.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "پوشش آراسته و سنگین (بدون پوشش مو) - لباس‌های رسمی و موقر بدون استفاده از روسری یا شال.",
"No ceremony or very simple": "بدون مراسم یا بسیار ساده",
"No children": "فرزندی ندارم.",
"No connection felt": "ارتباط شکل نگرفت",
"No contact has been made with you in any way or by any party.": "به هیچ طریقی و از هیچ جانبی با شما تماس گرفته نشده است.",
"No difference": "تفاوتی ندارد.",
"No formal child support commitment (or child is independent / pending).": "تعهد مالی یا نفقه رسمی وجود ندارد (یا فرزند مستقل است/پرونده در جریان است).",
"No independent income": "فعلاً درآمد مستقل ندارم.",
@ -469,6 +475,7 @@
"Please note: Failure to contact within 2 days may result in a penalty": "توجه: اگر تا ۲ روز تماس برقرار نکنید، ممکن است جریمه اعمال شود",
"Please provide the full reason for rejecting the submitted item": "لطفا دلیل کامل رد کردن مورد ارسال‌شده را بنویسید",
"Please report the final outcome of the proposal and communication to the system.": "لطفاً نتیجه نهایی خواستگاری و ارتباط خود را به سیستم اعلام کنید تا وضعیت پرونده شما بروزرسانی شود.",
"Please review the person’s full profile once more before making your final decision.": "لطفاً پیش از تصمیم‌گیری نهایی، یک بار دیگر پروفایل کامل شخص مقابل را مطالعه فرمایید.",
"Please select the option that best describes the general atmosphere and lifestyle of your family.": "Please select the option that best describes the general atmosphere and lifestyle of your family.",
"Please select the option that best describes your daily behavior when interacting with members of the opposite sex.": "لطفاً گزینه‌ای را انتخاب کنید که رفتار روزمره شما را در مواجهه با نامحرم بهتر توصیف می‌کند.",
"Please select the option that best describes your view on religion and your expectations of your future spouse.": "لطفاً گزینه‌ای را انتخاب کنید که نگاه شما به مذهب و انتظار شما از همسر آینده‌تان را بهتر توصیف می‌کند.",
@ -566,6 +573,7 @@
"Sensitive information (face, contact details) revealed step-by-step only with mutual consent.": "اطلاعات حساس (عکس چهره، اطلاعات تماس) به صورت گام‌به‌گام و تنها با رضایت طرفین نمایش داده می‌شود.",
"Separated / Divorced": "از هم جدا شده‌اند / طلاق گرفته‌اند.",
"Serious": "جدی",
"Share Result": "ثبت نتیجه نهایی",
"Sharia Hijab mandatory, type doesn't matter": "حجاب شرعی الزامی است، اما نوع آن مهم نیست.",
"Short Children/Guardianship Explanation": "توضیح کوتاه درباره شرایط فرزند یا تکفل",
"Short Family Description": "توضیح کوتاه درباره خانواده",
@ -612,7 +620,10 @@
"Supporter of the current government, but a difference in view is not a red line.": "موافق و حامی نظام فعلی، اما تفاوت دیدگاه همسرم خط قرمز نیست.",
"Supporter of the current government; serious opposition from my spouse is a red line.": "موافق و حامی نظام فعلی؛ مخالفت جدی همسرم خط قرمز است.",
"Sweden": "سوئد",
"Swipe to confirm": "جهت تایید، بکشید",
"Swipe to confirm cancellation": "جهت تایید انصراف، بکشید",
"Swipe to confirm rejection": "جهت تایید رد کردن، به راست بکشید",
"Swipe to continue": "جهت ادامه، بکشید",
"Swipe to pay 50 Habib Coins": "برای پرداخت ۵۰ حبیب‌کوین بکشید",
"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.": "انجام این تست اجباری نیست، اما به شما کمک می‌کند تا بهتر همسر مناسب را پیدا کنید. تست شخصیت‌شناسی آزمونی برای خودشناسی و درک بهتر همسر شماست.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.": "انجام این تست اجباری نیست، اما به شما کمک می‌کند اولویت‌های خود را بهتر بشناسید و همسر سازگارتری پیدا کنید.",
@ -624,6 +635,8 @@
"Temporary conditions": "فعلاً شرایط موقت دارم.",
"Temporary with family okay": "زندگی موقت با خانواده در ابتدای ازدواج قابل قبول است.",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "ممنون از اینکه به ما فیدبک دادید، بسیار خوشحال میشویم نتیجه نهایی را نیز به ما اعلام کنید",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "از فیدبکی که به ما دادید متشکریم. پشتیبانی ما موضوع را بررسی میکند و نتیجه را به شما اعلام خواهد کرد. لطفاً در مدت بررسی منتظر بمانید و صبوری کنید؛ پشتیبانی ما با شما تماس خواهد گرفت.",
"Thank you for your feedback. To complete the process, please submit the final outcome of this introduction/contact so that the final status can be determined. If the final status is not yet determined, you can stay in this state until it is finalized.": "از بازخورد شما ممنونیم. برای تکمیل پروسه لطفا فیدبک نهایی این ارتباط/معرفی رو بهمون بده تا وضعیت نهایی مشخص شه. اگر هنوز وضعیت نهایی نشده میتونید در همین حالت بمونید تا وضعیت نهایی شه.",
"The call may start 10-15 minutes earlier or later than scheduled.": "تماس ممکن است ۱۰ الی ۱۵ دقیقه زودتر یا دیرتر از زمان تعیین‌شده برقرار شود.",
"The selected candidate will contact your family shortly.": "گزینه انتخاب‌شده به‌زودی با خانواده شما تماس می‌گیرد.",
"The value entered seems incorrect. Please provide a realistic value.": "مقدار وارد شده صحیح به نظر نمی‌رسد. لطفاً یک عدد واقعی وارد کنید.",
@ -683,8 +696,10 @@
"View more details": "مشاهده جزئیات بیشتر",
"View profile": "مشاهده پروفایل",
"Watch Video": "مشاهده ویدیو",
"We are in the acquaintance/proposal process and nothing is finalized yet": "در مسیر آشنایی و خواستگاری هستیم و هنوز هیچی نهایی نشده",
"We did not reach an agreement": "به تفاهم نرسیدیم",
"We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims": "ما با هدف ایجاد مسیری امن و محرمانه برای ازدواج دائم میان مسلمانان کنار هم آمده‌ایم",
"We hope the acquaintance process is going well. Please let us know if you want to continue the acquaintance process or if the match has been canceled.": "امیدواریم فرآیند آشنایی شما به خوبی پیش برود. لطفاً مشخص کنید که آیا همچنان در حال ادامه فرآیند آشنایی هستید یا این معرفی کنسل شده است؟",
"We provide a safe and respectful environment at every step.": "ما در هر مرحله فضایی امن و محترمانه را فراهم می‌کنیم.",
"We reached an agreement": "به تفاهم رسیدیم",
"Weak": "ضعیف",

10
src/translations/locales/fr.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### Options d'ambiance religieuse familiale * **Religieux et strictement observant :** Ceci spécifie une famille hautement dévouée à l'accomplissement de toutes les **tâches obligatoires**, au maintien strict des **limites religieuses** (telles que les règles du Mahram) et au respect des **rituels et enseignements religieux** dans tous les aspects de la vie. * **Religieux (observateur des obligations) :** Cela indique une famille engagée dans les **devoirs religieux** fondamentaux (tels que la prière et le jeûne) et dans l'**éthique islamique**, vivant dans les cadres standard d'une société religieuse. * **Traditionnel (respectueux des valeurs religieuses) :** Ceci décrit une famille qui est attachée aux valeurs morales et **respecte la religion**, mais ne peut pas exécuter strictement chaque **loi religieuse** ou obligation spécifique. * **Non religieux/laïc :** Cela représente une famille dans laquelle les **rituels et cadres religieux** n'influencent pas de manière significative leur **mode de vie, leurs relations ou leurs décisions** quotidiennes, malgré un respect général pour la religion.",
"(Complete Required Forms)": "(Complete Required Forms)",
"(after 2 days)": "(after 2 days)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Eligibility and Membership Requirements",
"160 to 170": "160 à 170",
"170 to 180": "170 à 180",
"175": "175",
"180 to 190": "180 à 190",
"2": "2",
"2 minutes": "2 minutes",
"2. Privacy and Data Management": "2. Privacy and Data Management",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 minutes",
"50 Coins": "50 Coins",
"6 minutes": "6 minutes",
"70": "70",
"8 minutes": "8 minutes",
"A Path to Heavenly Marriage": "A Path to Heavenly Marriage",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "Une adresse précise n’est pas requise. Seule la zone générale où vous habitez est suffisante, comme la ville, la région, le quartier ou la grande ville la plus proche.",
@ -125,6 +125,7 @@
"Contact": "Contact",
"Contact Detail": "Détails de contact",
"Contact Information Released": "Contact Information Released",
"Contact Received": "Contact reçu",
"Contact Support": "Contacter le Support",
"Contact details and residence.": "Coordonnées et résidence.",
"Contact details are shared only after your approval.": "Contact details are shared only after your approval.",
@ -373,11 +374,13 @@
"Next": "Next",
"Next Page": "Next Page",
"No Active Subscription": "Aucun abonnement actif",
"No Contact Received": "Aucun contact reçu",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "Pas de hijab (décontracté/moderne) – Style moderne et tenues décontractées.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "Pas de hijab (style modeste) – Tenue modeste et digne sans foulard.",
"No ceremony or very simple": "Pas de cérémonie ou très simple",
"No children": "Pas d'enfants",
"No connection felt": "No connection felt",
"No contact has been made with you in any way or by any party.": "Aucun contact n'a été établi avec vous de quelque manière que ce soit ou par qui que ce soit.",
"No difference": "Aucune différence",
"No formal child support commitment (or child is independent / pending).": "Aucun engagement formel de pension alimentaire pour enfants (ou l'enfant est indépendant/en attente).",
"No independent income": "Pas de revenus indépendants",
@ -624,6 +627,7 @@
"Temporary conditions": "Conditions temporaires",
"Temporary with family okay": "Temporaire avec la famille, ok",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "Merci pour vos commentaires, nous serions très heureux que vous nous communiquiez également le résultat final.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Merci pour vos commentaires. Notre équipe d'assistance va étudier la question et vous informera du résultat. Veuillez patienter pendant l'examen ; notre assistance vous contactera.",
"The call may start 10-15 minutes earlier or later than scheduled.": "L'appel peut commencer 10 à 15 minutes plus tôt ou plus tard que prévu.",
"The selected candidate will contact your family shortly.": "The selected candidate will contact your family shortly.",
"The value entered seems incorrect. Please provide a realistic value.": "The value entered seems incorrect. Please provide a realistic value.",

10
src/translations/locales/gu.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### કૌટુંબિક ધાર્મિક વાતાવરણના વિકલ્પો * **ધાર્મિક અને ચુસ્તપણે પાલન કરનાર:** આ એક કુટુંબનો ઉલ્લેખ કરે છે જે તમામ **ફરજિયાત ફરજો** કરવા માટે ખૂબ જ સમર્પિત હોય, **ધાર્મિક સીમાઓ** (જેમ કે મહરમના નિયમો)નું સખતપણે પાલન કરે અને જીવનના **ધાર્મિક વિધિઓ અને ઉપદેશોનું પાલન કરે**. * **ધાર્મિક (જવાબદારીઓનું પાલન કરનાર):** આ ધાર્મિક સમાજના માનક માળખામાં રહેતા **ધાર્મિક ફરજો** (જેમ કે પ્રાર્થના અને ઉપવાસ) અને **ઈસ્લામિક નૈતિકતા** માટે પ્રતિબદ્ધ કુટુંબ સૂચવે છે. * **પરંપરાગત (ધાર્મિક મૂલ્યોનું સન્માન):** આ એવા કુટુંબનું વર્ણન કરે છે જે નૈતિક મૂલ્યો પ્રત્યે નિષ્ઠા ધરાવે છે અને **ધર્મનું સન્માન કરે છે**, પરંતુ દરેક ચોક્કસ **ધાર્મિક કાયદા** અથવા જવાબદારીને સખત રીતે ચલાવી શકતા નથી. * **બિન-ધાર્મિક / બિનસાંપ્રદાયિક:** આ એવા કુટુંબનું પ્રતિનિધિત્વ કરે છે જ્યાં **ધાર્મિક ધાર્મિક વિધિઓ અને માળખા** તેમની દૈનિક **જીવનશૈલી, સંબંધો અથવા નિર્ણયો**ને નોંધપાત્ર રીતે પ્રભાવિત કરતા નથી, ધર્મ પ્રત્યે સામાન્ય સન્માન હોવા છતાં.",
"(Complete Required Forms)": "(Complete Required Forms)",
"(after 2 days)": "(after 2 days)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Eligibility and Membership Requirements",
"160 to 170": "160 થી 170",
"170 to 180": "170 થી 180",
"175": "175",
"180 to 190": "180 થી 190",
"2": "2",
"2 minutes": "2 મિનિટ",
"2. Privacy and Data Management": "2. Privacy and Data Management",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "5 મિનિટ",
"50 Coins": "50 Coins",
"6 minutes": "6 મિનિટ",
"70": "70",
"8 minutes": "8 મિનિટ",
"A Path to Heavenly Marriage": "A Path to Heavenly Marriage",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "ચોક્કસ સરનામું જરૂરી નથી. તમે જ્યાં રહો છો તેનો સામાન્ય વિસ્તાર પૂરતો છે, જેમ કે શહેર, પ્રદેશ, પડોશ અથવા નજીકનું મોટું શહેર.",
@ -125,6 +125,7 @@
"Contact": "સંપર્ક",
"Contact Detail": "સંપર્ક વિગત",
"Contact Information Released": "Contact Information Released",
"Contact Received": "સંપર્ક મળ્યો",
"Contact Support": "સંપર્ક સપોર્ટ",
"Contact details and residence.": "સંપર્ક વિગતો અને રહેઠાણ.",
"Contact details are shared only after your approval.": "Contact details are shared only after your approval.",
@ -373,11 +374,13 @@
"Next": "Next",
"Next Page": "Next Page",
"No Active Subscription": "કોઈ સક્રિય સબ્સ્ક્રિપ્શન નથી",
"No Contact Received": "કોઈ સંપર્ક મળ્યો નથી",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "નો હિજાબ (કેઝ્યુઅલ/આધુનિક) - આધુનિક સ્ટાઇલ અને કેઝ્યુઅલ પોશાક.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "નો હિજાબ (સાધારણ સ્ટાઇલ) - હેડસ્કાર્ફ વિના પ્રતિષ્ઠિત સાધારણ પોશાક.",
"No ceremony or very simple": "કોઈ સમારંભ કે બહુ સાદું",
"No children": "બાળકો નથી",
"No connection felt": "No connection felt",
"No contact has been made with you in any way or by any party.": "તમારી સાથે કોઈ પણ રીતે અથવા કોઈ પણ પક્ષ દ્વારા સંપર્ક કરવામાં આવ્યો નથી.",
"No difference": "કોઈ ફરક નથી",
"No formal child support commitment (or child is independent / pending).": "કોઈ ઔપચારિક ચાઈલ્ડ સપોર્ટ પ્રતિબદ્ધતા નથી (અથવા બાળક સ્વતંત્ર / બાકી છે).",
"No independent income": "સ્વતંત્ર આવક નથી",
@ -624,6 +627,7 @@
"Temporary conditions": "કામચલાઉ શરતો",
"Temporary with family okay": "પરિવાર સાથે કામચલાઉ ઠીક છે",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "અમને પ્રતિસાદ આપવા બદલ આભાર, જો તમે અમને અંતિમ પરિણામ પણ જણાવશો તો અમને ખૂબ જ આનંદ થશે.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "તમારા પ્રતિસાદ માટે આભાર. અમારી સપોર્ટ ટીમ આ બાબતની તપાસ કરશે અને તમને પરિણામ જણાવશે. કૃપા કરીને સમીક્ષા દરમિયાન ધીરજપૂર્વક રાહ જુઓ; અમારો સપોર્ટ તમારો સંપર્ક કરશે.",
"The call may start 10-15 minutes earlier or later than scheduled.": "કૉલ શેડ્યૂલ કરતાં 10-15 મિનિટ વહેલો અથવા મોડો શરૂ થઈ શકે છે.",
"The selected candidate will contact your family shortly.": "The selected candidate will contact your family shortly.",
"The value entered seems incorrect. Please provide a realistic value.": "The value entered seems incorrect. Please provide a realistic value.",

10
src/translations/locales/ha.json

@ -1,7 +1,4 @@
{
"2": "2",
"70": "70",
"175": "175",
"### Family Religious Atmosphere Options\n\n* **Religious and Strictly Observant:** This specifies a family highly dedicated to performing all **obligatory duties**, strictly maintaining **religious boundaries** (such as Mahram rules), and upholding **religious rituals and teachings** across all aspects of life.\n* **Religious (Observant of Obligations):** This indicates a family committed to core **religious duties** (such as prayer and fasting) and **Islamic ethics**, living within the standard frameworks of a religious society.\n* **Traditional (Respectful of Religious Values):** This describes a family that holds devotion to moral values and **respects religion**, but may not strictly execute every specific **religious law** or obligation.\n* **Non-religious / Secular:** This represents a family where **religious rituals and frameworks** do not significantly influence their daily **lifestyle, relationships, or decisions**, despite holding a general respect for religion.": "### Zaɓuɓɓukan Yanayin Addini na Iyali * **Mai Kula da Addini da Tsare-tsare:** Wannan yana ƙayyadaddun iyali da suka sadaukar da kansu don aiwatar da dukkan abubuwan da suka wajaba**, da kiyaye ** iyakokin addini** (kamar dokokin Mahram), da kiyaye ** ladubban addini da koyarwar** a kowane fanni na rayuwa. * **Mai kiyaye Addini:** Wannan yana nuni da iyali da suka himmatu wajen aiwatar da muhimman ayyuka na addini** (kamar sallah da azumi) da kuma *Ladubban Musulunci**, suna rayuwa ne bisa tsarin al'umma na addini. * **Al'ada (Mutunta Darajojin Addini):** Wannan yana siffanta iyali mai riko da kyawawan dabi'u da *girmama addini**, amma ba za'a zartar da kowace takamaiman doka ta addini** ko farilla ba. * **Mai Addini/Na Zamani:** Wannan yana wakiltar dangi ne da **al'adun addini da tsare-tsare** ba sa tasiri sosai a rayuwar su ta yau da kullun, dangantakarsu, ko yanke hukunci**, duk da girmama addini gaba ɗaya.",
"(Complete Required Forms)": "(Complete Required Forms)",
"(after 2 days)": "(after 2 days)",
@ -14,7 +11,9 @@
"1. Eligibility and Membership Requirements": "1. Eligibility and Membership Requirements",
"160 to 170": "160 zuwa 170",
"170 to 180": "170 zuwa 180",
"175": "175",
"180 to 190": "180 zuwa 190",
"2": "2",
"2 minutes": "Minti 2",
"2. Privacy and Data Management": "2. Privacy and Data Management",
"25-30": "25-30",
@ -25,6 +24,7 @@
"5 minutes": "Minti 5",
"50 Coins": "50 Coins",
"6 minutes": "Minti 6",
"70": "70",
"8 minutes": "Minti 8",
"A Path to Heavenly Marriage": "A Path to Heavenly Marriage",
"A precise address is not required. Just the general area of where you live is sufficient, such as the city, region, neighborhood, or nearest major city.": "Ba a buƙatar takamaiman adireshin. Babban yankin inda kuke zama ya wadatar, kamar birni, yanki, yanki, ko babban birni mafi kusa.",
@ -125,6 +125,7 @@
"Contact": "Tuntuɓa",
"Contact Detail": "Cikakken Bayani na Tuntuɓa",
"Contact Information Released": "Contact Information Released",
"Contact Received": "An karɓi tuntuɓa",
"Contact Support": "Tuntuɓi Taimako",
"Contact details and residence.": "Bayanan tuntuɓar juna da wurin zama.",
"Contact details are shared only after your approval.": "Contact details are shared only after your approval.",
@ -373,11 +374,13 @@
"Next": "Next",
"Next Page": "Next Page",
"No Active Subscription": "Babu Biyan Kuɗi Mai Aiki",
"No Contact Received": "Ba a karɓi tuntuɓa ba",
"No Hijab (Casual/Modern) - Modern styling and casual outfits.": "Babu Hijabi (Na yau da kullun/Na zamani) - Salon zamani da kayan yau da kullun.",
"No Hijab (Modest styling) - Dignified modest attire without headscarf.": "Babu Hijabi (Salo Mai Kyau) - Kyawawan tufafi masu kyau ba tare da gyale ba.",
"No ceremony or very simple": "Babu bikin ko mai sauqi qwarai",
"No children": "Babu yara",
"No connection felt": "No connection felt",
"No contact has been made with you in any way or by any party.": "Ba a tuntuɓe ku ta kowace hanya ko ta kowane ɓangare ba.",
"No difference": "Babu bambanci",
"No formal child support commitment (or child is independent / pending).": "Babu alƙawarin tallafin yaro na yau da kullun (ko yaron ya kasance mai zaman kansa / yana jiran).",
"No independent income": "Babu kudin shiga mai zaman kansa",
@ -624,6 +627,7 @@
"Temporary conditions": "Yanayin wucin gadi",
"Temporary with family okay": "Na ɗan lokaci tare da iyali lafiya",
"Thank you for giving us feedback, we would be very happy if you also let us know the final result.": "Godiya da kuka ba mu ra'ayoyinku, za mu yi farin ciki sosai idan kuka sanar da mu sakamakon ƙarshe.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Godiya da ra'ayoyinku. Ƙungiyar tallafinmu za ta binciki lamarin kuma ta sanar da ku sakamakon. Da fatan za a yi haƙuri lokacin bita; tallafinmu zai tuntuɓe ku.",
"The call may start 10-15 minutes earlier or later than scheduled.": "Kiran na iya farawa minti 10-15 a baya ko kuma daga baya fiye da yadda aka tsara.",
"The selected candidate will contact your family shortly.": "The selected candidate will contact your family shortly.",
"The value entered seems incorrect. Please provide a realistic value.": "The value entered seems incorrect. Please provide a realistic value.",

274
src/translations/locales/he.json

@ -1,4 +1,20 @@
{
"Contact Received": "התקבל קשר",
"No Contact Received": "לא התקבל קשר",
"No contact has been made with you in any way or by any party.": "לא נוצר עמך קשר בשום דרך או על ידי שום גורם.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "תודה על המשוב שלך. צוות התמיכה שלנו יחקור את הנושא ויודיע לך על התוצאה. אנא המתן בסבלנות במהלך הבדיקה; התמיכה שלנו תיצור איתך קשר.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "אשר יצירת קשר",
"noContactYet": "דווח על חוסر קשר",
"afterTwoDays": "(after 2 days)",
"contactWarning": "כדי שהתהליך יתקדם בצורה חלקה, לצד השני יש חלون זמן של 48 שעות (יומיים) ליצור קשר ראשוני איתך או עם משפחתך. אם לא נוצר קשר לאחר יומיים, יש לך אפשרות לדחות את בקשתו أو להודיע לנו שהוא לא יצר קשר.",
"thankYouFeedback": "תודה על המשוב שלך, נשמח מאוד אם תעדכן אותנו גם בתוצאה הסופית.",
"marriageSuccess": "הגענו להסכמה",
"marriageFailure": "לא הגענו להסכמה",
"outcomeTitle": "מה הייתה תוצאת יצירת הקשר שלכם?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "אם נתקלת בבעיה כלשהי, אל תהסס לפנות למומחי התמיכה שלנו בוואטסאפ",
"supportSwipeText": "צור קשר"
},
"findingMatch": {
"title": "החיפוש שלך פעיל",
"description": "המערכת שלנו מחפשת באופן פעיל שותפים תואמים על סמך הקריטריונים שלך. תהליך זה דורש זמן וסבלנות. אנו נודיע לך מיד ברגע שהפרופיל יהיה מוכן לבדיקתך.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "רקע משפחתי, מצב משפחתי וילדים",
"familyMaritalEstimate": "5 דקות",
"notAPriority": "נושא זה אינו בראש סדר העדיפויות שלי.",
"writeOtherTraits": "Write other options...",
"fromAge": "מ-",
"toAge": "עד",
"familyResponsibilityTooltip": "אנא הסבר בקצרה את סוג האחריות, משכה, היقף התמיכה הפיננסית או הטיפולית, והשפעתה הפוטנציאלית על מקום המגורים, המעבר או תנאי חיי הנישואין העתידיים.",
"childCustodyExplanationTooltip": "אנא הסבר בקצרה את סטטוס המשמורת, לוח הזמנים של נוכחות הילד, מגבלות פוטנציאליות על מעבר או הגירה, והתחייבויות כספיות נלוות. הימנע מלציין את שם הילד, ההורה השני או פרטים אישיים מיותרים.",
"currentMaritalStatusTooltip": "שדה פרטי זה דורש מהמשתמש להצהיר במדויק על מצבו המשפחתי הנוכحي והיסטוריית היחסים שלו מתוך האפשרויות הספציפיות המפורטות."
"maleRejectionWarning": {
"title": "אזהרת דחיית הצעה",
"carefulReview": "לפני קבלת ההחלטה הסופית, אנא קרא שוב בעיון ובמלואו את הפרופיל של האדם האחר.",
"friendlyDelay": "שים לב שדחיית הצעה זו עלולה לעכב את הצגת ההצעה הבאה, אך אין שום חובה לקבל ואתה חופשי לחלוטין.",
"noPenalty": "אישור הדחייה איno גורר קנס כלשהו; הוא פשוט מעביר את המצב לחלון החלטה של יומיים לצורך סיום התהליך.",
"swipeText": "החלק כדי לאשר דחייה"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "פרטי קשר",
"contactDetailDescription": "אנא ציינו במהלך השיחה שהופניתם דרך אפליקציית Habib Marriage.",
"contactNotAvailable": "פרטי הקשר אינם זמינים עדיין.",
"contactWarning": "לידיעתך, מרגע הצגה זו, עומדות לרשותך 48 שעות (יומיים) ליצור קשר עם האדם או עם משפחתו המכובדת כדי להצהיר על מוכנותך ולהתחיל בתהליך ההיכרות. בשלב זה, די בשיחה ראשונית בלבד כדי להודיع על נוכחותך, ותכנון שלבים נוספים (כגון פגישה פרונטלית) תלوي לחלוטין בהסכמות ההדדיות הבאות שלכם.\n\nמכיוون שאי יצירת קשר בתוך הזمان שנקבע עלולה להיחשב כחوسر כבוד חברתי, אם לא יינקטו צعדים בתוך יומיים אלה, ההתאמה שהוצגה תוסر בהתאם לכללי הפלטפורمة. אנו גם מזכירים לך שנושא זה עלול להוביל להגבלات כגون עיכوبים בהיכרות עתידית וקنسות כספיים."
},
"findingMatch": {
"title": "החיפוש שלך פעיל",
"description": "המערכת שלנו מחפשת באופן פעיל שותפים תואמים על סמך הקריטריונים שלך. תהליך זה דורש זמן וסבלנות. אנו נודיע לך מיד ברגע שהפרופיל יהיה מוכן לבדיקתך.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "אשר יצירת קשר",
"noContactYet": "דווח על חוסر קשר",
"afterTwoDays": "(after 2 days)",
"contactWarning": "כדי שהתהליך יתקדם בצורה חלקה, לצד השני יש חלون זמן של 48 שעות (יומיים) ליצור קשר ראשוני איתך או עם משפחתך. אם לא נוצר קשר לאחר יומיים, יש לך אפשרות לדחות את בקשתו أو להודיע לנו שהוא לא יצר קשר.",
"thankYouFeedback": "תודה על המשוב שלך, נשמח מאוד אם תעדכן אותנו גם בתוצאה הסופית.",
"marriageSuccess": "הגענו להסכמה",
"marriageFailure": "לא הגענו להסכמה",
"outcomeTitle": "מה הייתה תוצאת יצירת הקשר שלכם?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "תשלום",
"pay": "שלם"
},
"maleRejectionWarning": {
"title": "אזהרת דחיית הצעה",
"carefulReview": "לפני קבלת ההחלטה הסופית, אנא קרא שוב בעיון ובמלואו את הפרופיל של האדם האחר.",
"friendlyDelay": "שים לב שדחיית הצעה זו עלולה לעכב את הצגת ההצעה הבאה, אך אין שום חובה לקבל ואתה חופשי לחלוטין.",
"noPenalty": "אישור הדחייה איno גורר קנס כלשהו; הוא פשוט מעביר את המצב לחלון החלטה של יומיים לצורך סיום התהליך.",
"swipeText": "החלק כדי לאשר דחייה"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "תשלום",
"pay": "שלם"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "רקע משפחתי, מצב משפחתי וילדים",
"familyMaritalEstimate": "5 דקות",
"notAPriority": "נושא זה אינו בראש סדר העדיפויות שלי.",
"writeOtherTraits": "Write other options...",
"fromAge": "מ-",
"toAge": "עד",
"familyResponsibilityTooltip": "אנא הסבר בקצרה את סוג האחריות, משכה, היقף התמיכה הפיננסית או הטיפולית, והשפעתה הפוטנציאלית על מקום המגורים, המעבר או תנאי חיי הנישואין העתידיים.",
"childCustodyExplanationTooltip": "אנא הסבר בקצרה את סטטוס המשמורת, לוח הזמנים של נוכחות הילד, מגבלות פוטנציאליות על מעבר או הגירה, והתחייבויות כספיות נלוות. הימנע מלציין את שם הילד, ההורה השני או פרטים אישיים מיותרים.",
"currentMaritalStatusTooltip": "שדה פרטי זה דורש מהמשתמש להצהיר במדויק על מצבו המשפחתי הנוכحي והיסטוריית היחסים שלו מתוך האפשרויות הספציפיות המפורטות."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "פרטי קשר",
"contactDetailDescription": "אנא ציינו במהלך השיחה שהופניתם דרך אפליקציית Habib Marriage.",
"contactNotAvailable": "פרטי הקשר אינם זמינים עדיין.",
"contactWarning": "לידיעתך, מרגע הצגה זו, עומדות לרשותך 48 שעות (יומיים) ליצור קשר עם האדם או עם משפחתו המכובדת כדי להצהיר על מוכנותך ולהתחיל בתהליך ההיכרות. בשלב זה, די בשיחה ראשונית בלבד כדי להודיع על נוכחותך, ותכנון שלבים נוספים (כגון פגישה פרונטלית) תלوي לחלוטין בהסכמות ההדדיות הבאות שלכם.\n\nמכיוون שאי יצירת קשר בתוך הזمان שנקבע עלולה להיחשב כחوسر כבוד חברתי, אם לא יינקטו צعדים בתוך יומיים אלה, ההתאמה שהוצגה תוסر בהתאם לכללי הפלטפורمة. אנו גם מזכירים לך שנושא זה עלול להוביל להגבלات כגون עיכوبים בהיכרות עתידית וקنسות כספיים."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

1015
src/translations/locales/hi.json
File diff suppressed because it is too large
View File

274
src/translations/locales/id.json

@ -1,4 +1,20 @@
{
"Contact Received": "Kontak Diterima",
"No Contact Received": "Tidak Ada Kontak Diterima",
"No contact has been made with you in any way or by any party.": "Tidak ada kontak yang dilakukan dengan Anda dengan cara apa pun atau oleh pihak mana pun.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Terima kasih atas tanggapan Anda. Tim dukungan kami akan menyelidiki masalah ini dan memberi tahu Anda hasilnya. Harap tunggu dengan sabar selama peninjauan; dukungan kami akan menghubungi Anda.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Konfirmasi kontak",
"noContactYet": "Laporkan tidak ada kontak",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Agar proses berjalan lancar, pihak lain memiliki waktu 48 jam (2 hari) to melakukan kontak awal dengan Anda atau keluarga Anda. Jika tidak ada kontak yang terjalin setelah 2 hari, Anda memiliki opsi untuk menolak permintaannya atau memberi tahu kami bahwa dia belum menghubungi.",
"thankYouFeedback": "Terima kasih telah memberikan masukan, kami akan sangat senang jika Anda juga memberi tahu kami hasil akhirnya.",
"marriageSuccess": "Kami mencapai kesepakatan",
"marriageFailure": "Kami tidak mencapai kesepakatan",
"outcomeTitle": "Bagaimana hasil dari kontak Anda?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "Jika Anda mengalami masalah, silakan hubungi spesialis dukungan kami di WhatsApp",
"supportSwipeText": "Hubungi"
},
"findingMatch": {
"title": "YOUR SEARCH IS ACTIVE",
"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.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Latar Belakang Keluarga, Status Pernikahan, dan Anak-anak",
"familyMaritalEstimate": "5 menit",
"notAPriority": "Topik ini bukan prioritas bagi saya.",
"writeOtherTraits": "Write other options...",
"fromAge": "Dari",
"toAge": "Hingga",
"familyResponsibilityTooltip": "Harap jelaskan secara singkat jenis tanggung jawab, durasinya, tingkat dukungan finansial atau perawatan, dan potensi dampaknya terhadap tempat tinggal, relokasi, atau kondisi kehidupan pernikahan di masa depan.",
"childCustodyExplanationTooltip": "Harap jelaskan secara singkat status hak asuh, jadwal kehadiran anak, potensi batasan untuk relokasi atau imigrasi, dan kewajiban keuangan terkait. Hindari mencantumkan nama anak, nama orang tua lainnya, atau detail pribadi yang tidak perlu.",
"currentMaritalStatusTooltip": "Kolom pribadi ini mengharuskan pengguna untuk menyatakan status pernikahan dan riwayat hubungan mereka saat ini secara akurat dari opsi spesifik yang disediakan."
"maleRejectionWarning": {
"title": "Rejection Warning",
"carefulReview": "Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.",
"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.",
"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.",
"swipeText": "Swipe to confirm rejection"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Detail Kontak",
"contactDetailDescription": "Harap sebutkan selama panggilan bahwa Anda diperkenalkan melalui aplikasi Habib Marriage.",
"contactNotAvailable": "Informasi kontak belum tersedia.",
"contactWarning": "Harap informasikan bahwa sejak perkenalan ini, Anda memiliki waktu 48 jam (2 hari) to menghubungi orang tersebut atau keluarganya yang dihormati untuk menyatakan kesiapan Anda dan memulai proses perkenalan. Pada tahap ini, panggilan awal saja untuk mengumumkan kehadiran Anda sudah cukup, dan perencanaan langkah lebih lanjut (seperti pertemuan langsung) sepenuhnya bergantung pada kesepakatan bersama Anda selanjutnya.\n\nKarena kegagalan untuk menghubungi dalam waktu yang ditentukan dapat dianggap tidak sopan secara sosial, jika tidak ada tindakan yang diambil dalam waktu 2 hari ini, kecocokan yang diperkenalkan akan dihapus sesuai dengan aturan platform. Kami juga mengingatkan Anda bahwa masalah ini dapat menyebabkan pembatasan seperti keterlambatan dalam pengenalan di masa mendatang dan denda keuangan."
},
"findingMatch": {
"title": "YOUR SEARCH IS ACTIVE",
"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.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Konfirmasi kontak",
"noContactYet": "Laporkan tidak ada kontak",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Agar proses berjalan lancar, pihak lain memiliki waktu 48 jam (2 hari) to melakukan kontak awal dengan Anda atau keluarga Anda. Jika tidak ada kontak yang terjalin setelah 2 hari, Anda memiliki opsi untuk menolak permintaannya atau memberi tahu kami bahwa dia belum menghubungi.",
"thankYouFeedback": "Terima kasih telah memberikan masukan, kami akan sangat senang jika Anda juga memberi tahu kami hasil akhirnya.",
"marriageSuccess": "Kami mencapai kesepakatan",
"marriageFailure": "Kami tidak mencapai kesepakatan",
"outcomeTitle": "Bagaimana hasil dari kontak Anda?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Pembayaran",
"pay": "Bayar"
},
"maleRejectionWarning": {
"title": "Rejection Warning",
"carefulReview": "Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.",
"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.",
"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.",
"swipeText": "Swipe to confirm rejection"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Pembayaran",
"pay": "Bayar"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Latar Belakang Keluarga, Status Pernikahan, dan Anak-anak",
"familyMaritalEstimate": "5 menit",
"notAPriority": "Topik ini bukan prioritas bagi saya.",
"writeOtherTraits": "Write other options...",
"fromAge": "Dari",
"toAge": "Hingga",
"familyResponsibilityTooltip": "Harap jelaskan secara singkat jenis tanggung jawab, durasinya, tingkat dukungan finansial atau perawatan, dan potensi dampaknya terhadap tempat tinggal, relokasi, atau kondisi kehidupan pernikahan di masa depan.",
"childCustodyExplanationTooltip": "Harap jelaskan secara singkat status hak asuh, jadwal kehadiran anak, potensi batasan untuk relokasi atau imigrasi, dan kewajiban keuangan terkait. Hindari mencantumkan nama anak, nama orang tua lainnya, atau detail pribadi yang tidak perlu.",
"currentMaritalStatusTooltip": "Kolom pribadi ini mengharuskan pengguna untuk menyatakan status pernikahan dan riwayat hubungan mereka saat ini secara akurat dari opsi spesifik yang disediakan."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Detail Kontak",
"contactDetailDescription": "Harap sebutkan selama panggilan bahwa Anda diperkenalkan melalui aplikasi Habib Marriage.",
"contactNotAvailable": "Informasi kontak belum tersedia.",
"contactWarning": "Harap informasikan bahwa sejak perkenalan ini, Anda memiliki waktu 48 jam (2 hari) to menghubungi orang tersebut atau keluarganya yang dihormati untuk menyatakan kesiapan Anda dan memulai proses perkenalan. Pada tahap ini, panggilan awal saja untuk mengumumkan kehadiran Anda sudah cukup, dan perencanaan langkah lebih lanjut (seperti pertemuan langsung) sepenuhnya bergantung pada kesepakatan bersama Anda selanjutnya.\n\nKarena kegagalan untuk menghubungi dalam waktu yang ditentukan dapat dianggap tidak sopan secara sosial, jika tidak ada tindakan yang diambil dalam waktu 2 hari ini, kecocokan yang diperkenalkan akan dihapus sesuai dengan aturan platform. Kami juga mengingatkan Anda bahwa masalah ini dapat menyebabkan pembatasan seperti keterlambatan dalam pengenalan di masa mendatang dan denda keuangan."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/ks.json

@ -1,4 +1,20 @@
{
"Contact Received": "رابطہ موصول ہوا",
"No Contact Received": "نہ رابطہ موصول ہوا",
"No contact has been made with you in any way or by any party.": "تُہہ سٟتؠ چھُ نہٕ کٲنٛسہِ ہِنٛدِ طرفہٕ کجِہ تہِ طریقہٕ رابطہ کرنہٕ آمُت۔",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "تُہنٛدِ رائے خٲطرٕ شکریہ۔ سٲنؠ سپورٹ ٹیم کٔرِ معاملک تجسس تہٕ کٔرِ تُہہ نتیجے سٟتؠ باخبر۔ مہروبٲنی کٔرِتھ صبر سٟتؠ کٔرِو انتظار۔",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "رابطہٕچ تصدیق",
"noContactYet": "رابطہ نہ گژھنُک رپوٹ",
"afterTwoDays": "(after 2 days)",
"contactWarning": "عَمَل صٔحیح پٲٹھۍ عیلاونہ خٲطرہ، أمِس دۆیمِس فٔریقَس چھِ ۴٨ گھنٹہ (٢ دۄہ) تُہہ سیتۍ یا تُہنٛدِ خاندانس سیتۍ اِبتدٲیی رابطہ کرنہ خٲطرہ۔ اگر ٢ دۄہن پَتہ تہِ کانہہ رابطہ نہ سَپُد، تُہہ ہٚیکِو أمۍ سٕنٛز دَرخواست رَد کٔرتھ یا اَسہِ اِطلاع دِتھ کہ أمۍ نِہ کانہہ رابطہ کَرُن۔",
"thankYouFeedback": "شکریہ فیڈبیک دینے کی خاطر، اسہ گژھہ واریاہ خوشی اگر توہہ فائنل رزلٹ تہِ اسہ ونِیو۔",
"marriageSuccess": "ہم آیہ تفاهمس پیٹھ",
"marriageFailure": "ہم آیہ نہ تفاهمس پیٹھ",
"outcomeTitle": "کیاہ دراو نتیجہ توہہ رابطس؟"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "اگر کانہہ مسئلہ پیش آو، واٹس اَپس پیٹھ سٲنین سپورٹ ماہرین سیتۍ رابطہ کٔرِو",
"supportSwipeText": "رابطہ"
},
"findingMatch": {
"title": "تہنزر تلاش چھی سرگرم",
"description": "ہمون سیستم چھو تہنزد معیارن ہندس بنیادس پیٹھ سرگرمی سان ہم آہنگ شراکت دار تلاش کران۔ یہ عمل چھو وقت تہ صبر مانگان۔ جیسے ہی کانہہ پروفائل جائزس خاطر تیار گژھی، اسہ کریو توہی فوراً باخبر۔",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "خاندانی پس منظر، ازدواجی حیثیت تہٰ شرے",
"familyMaritalEstimate": "5 منٹ",
"notAPriority": "یہ موضوع چھ نہ میہ خاطرہ ترجیح۔",
"writeOtherTraits": "Write other options...",
"fromAge": "پؠٹھ",
"toAge": "تام",
"familyResponsibilityTooltip": "مہربانی کٔرتھ وچھو ذمہ داری ہنز قسم، امیک وقت، مالی یا دیکھ بھال ہنز مدد تہٕ امیک اثر تمہِ جایہِ، ہجرت یا مستقبلٕچ ازدواجی زندگی ہنزہِ حالہِ پیٹھ۔",
"childCustodyExplanationTooltip": "مہربانی کٔرتھ وچھو بچس ہنزہِ حفاظتٕچ حالت، بچس ہنزہِ موجودگی ہنز سکیجول، ہجرت یا دوسری جایہِ گژھنٕچ پابندی تہٕ امیک متعلقہ مالی ذمہ داری ہنزہِ قلیل تشریح۔ بچس ناو، دوسرے مٲلس/مٲجہِ ناو یا غیر ضروری ذاتی معلومات لکھنہٕ نش پرہیز کٔریو۔",
"currentMaritalStatusTooltip": "یہ خانگی فیلڈ چھُ صارفس نشہِ توقع کران زِ سہُ کٔرِ پننہِ موجودہ ازدواجی حالت تہٕ خاندانی پس منظرک بالکل صحیح اعلان یمن دِتین اختیارن منزہ۔"
"maleRejectionWarning": {
"title": "مسترد کرنک انتباہ",
"carefulReview": "آخری فیصلہ کرنہ پتہ، برائے مہربانی دوسرے شخصک پروفائل پورہ تہ دوبارہ غور سان وچھو۔",
"friendlyDelay": "برائے مہربانی یاد تھاویو کہ یہ کیس مسترد کرنہ سیت ہیکہ اگلی تجویز یوان تاخیر گژھتھ، مگر قبول کرنک کانہہ دباؤ چھنہ تہ توہی چھو پورہ آزاد۔",
"noPenalty": "یہ مسترد رجسٹر کرنہ سیت کانہہ جرمانہ گژھنہ؛ بلکہ یہ صرف صورتحال حتمی بناونہ خاطر ۲ دنک فیصلہ وندو منز داخل کر۔",
"swipeText": "مسترد کرنچ تصدیق خاطر سوائپ کریو"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "رابطہ تفصیِل",
"contactDetailDescription": "مہربانی کٔرتھ فون کَرنہ وِزِ کٔرِو زِکِر زِ تُہیہ آیو متعارف کَرنہ حبیب میرج ایپ ذٔریعہ۔",
"contactNotAvailable": "رابطہ معلومات چھنہ ونی دستیاب۔",
"contactWarning": "توجہہ دیو کہ یتھ تعارُفکِس وقتہ پیٹھہ، تُہہ چھِ ۴۸ گھنتہ (۲ دۄہ) أمِس شَخصَس یا أمۍ سٕندِس عِزت دار خاندانس سیتۍ رابطہ کرنہ خٲطرہ تاکہ تُہہ پَننۍ تیاری ظاہر کٔرِو تہٰ جان پہچان ہُنٛد عمل شروٗع کٔرِو۔ یَتھ مٔرحَلس مَنڅ، صِرِف اکھ شروٗعاتی کال پَنُن تعارُف کرنہ خٲطرہ کافی چھُ، تہٰ برونہہ کُن قَدمن ہنز مَنصوٗبہ بندی (جِسمانی ملاقات ہۍ مٹ) چھِ پوٗرہ پٲٹھۍ تُہنٛدین باہمی اِتِفاقن پیٹھ مُنحَصِر۔\n\nتکِہ رابطہ نہ کرُن مُقرر وقتس مَنڅ ہیٚکہِ سماجی طور غٲر سَنجیدگی سمجھنہ یِتھ، یَتھ صورتس مَنڅ اگر یِمن ۲ دۄہن مَنڅ کانہہ قَدم تُلنہ نہ آو، پِلیٹ فارمٕکۍ قَواینِن مُطٲبِق یِیہِ یِہ معرفی ہٹاونہ۔ أسی چھِ تُہہ یِہ تہِ یاد دِلاوان کہ یَتھ مَسٔلس سیتۍ ہیٚکن پگہکۍ متعارف گژھنس مَنڅ تاخیر تہٰ مٲلی جٔرمانہ ہۍ مٹ پٲبندۍ لَگتھ۔"
},
"findingMatch": {
"title": "تہنزر تلاش چھی سرگرم",
"description": "ہمون سیستم چھو تہنزد معیارن ہندس بنیادس پیٹھ سرگرمی سان ہم آہنگ شراکت دار تلاش کران۔ یہ عمل چھو وقت تہ صبر مانگان۔ جیسے ہی کانہہ پروفائل جائزس خاطر تیار گژھی، اسہ کریو توہی فوراً باخبر۔",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "رابطہٕچ تصدیق",
"noContactYet": "رابطہ نہ گژھنُک رپوٹ",
"afterTwoDays": "(after 2 days)",
"contactWarning": "عَمَل صٔحیح پٲٹھۍ عیلاونہ خٲطرہ، أمِس دۆیمِس فٔریقَس چھِ ۴٨ گھنٹہ (٢ دۄہ) تُہہ سیتۍ یا تُہنٛدِ خاندانس سیتۍ اِبتدٲیی رابطہ کرنہ خٲطرہ۔ اگر ٢ دۄہن پَتہ تہِ کانہہ رابطہ نہ سَپُد، تُہہ ہٚیکِو أمۍ سٕنٛز دَرخواست رَد کٔرتھ یا اَسہِ اِطلاع دِتھ کہ أمۍ نِہ کانہہ رابطہ کَرُن۔",
"thankYouFeedback": "شکریہ فیڈبیک دینے کی خاطر، اسہ گژھہ واریاہ خوشی اگر توہہ فائنل رزلٹ تہِ اسہ ونِیو۔",
"marriageSuccess": "ہم آیہ تفاهمس پیٹھ",
"marriageFailure": "ہم آیہ نہ تفاهمس پیٹھ",
"outcomeTitle": "کیاہ دراو نتیجہ توہہ رابطس؟"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "ادائیگی",
"pay": "ادائیگی کریں"
},
"maleRejectionWarning": {
"title": "مسترد کرنک انتباہ",
"carefulReview": "آخری فیصلہ کرنہ پتہ، برائے مہربانی دوسرے شخصک پروفائل پورہ تہ دوبارہ غور سان وچھو۔",
"friendlyDelay": "برائے مہربانی یاد تھاویو کہ یہ کیس مسترد کرنہ سیت ہیکہ اگلی تجویز یوان تاخیر گژھتھ، مگر قبول کرنک کانہہ دباؤ چھنہ تہ توہی چھو پورہ آزاد۔",
"noPenalty": "یہ مسترد رجسٹر کرنہ سیت کانہہ جرمانہ گژھنہ؛ بلکہ یہ صرف صورتحال حتمی بناونہ خاطر ۲ دنک فیصلہ وندو منز داخل کر۔",
"swipeText": "مسترد کرنچ تصدیق خاطر سوائپ کریو"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "ادائیگی",
"pay": "ادائیگی کریں"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "خاندانی پس منظر، ازدواجی حیثیت تہٰ شرے",
"familyMaritalEstimate": "5 منٹ",
"notAPriority": "یہ موضوع چھ نہ میہ خاطرہ ترجیح۔",
"writeOtherTraits": "Write other options...",
"fromAge": "پؠٹھ",
"toAge": "تام",
"familyResponsibilityTooltip": "مہربانی کٔرتھ وچھو ذمہ داری ہنز قسم، امیک وقت، مالی یا دیکھ بھال ہنز مدد تہٕ امیک اثر تمہِ جایہِ، ہجرت یا مستقبلٕچ ازدواجی زندگی ہنزہِ حالہِ پیٹھ۔",
"childCustodyExplanationTooltip": "مہربانی کٔرتھ وچھو بچس ہنزہِ حفاظتٕچ حالت، بچس ہنزہِ موجودگی ہنز سکیجول، ہجرت یا دوسری جایہِ گژھنٕچ پابندی تہٕ امیک متعلقہ مالی ذمہ داری ہنزہِ قلیل تشریح۔ بچس ناو، دوسرے مٲلس/مٲجہِ ناو یا غیر ضروری ذاتی معلومات لکھنہٕ نش پرہیز کٔریو۔",
"currentMaritalStatusTooltip": "یہ خانگی فیلڈ چھُ صارفس نشہِ توقع کران زِ سہُ کٔرِ پننہِ موجودہ ازدواجی حالت تہٕ خاندانی پس منظرک بالکل صحیح اعلان یمن دِتین اختیارن منزہ۔"
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "رابطہ تفصیِل",
"contactDetailDescription": "مہربانی کٔرتھ فون کَرنہ وِزِ کٔرِو زِکِر زِ تُہیہ آیو متعارف کَرنہ حبیب میرج ایپ ذٔریعہ۔",
"contactNotAvailable": "رابطہ معلومات چھنہ ونی دستیاب۔",
"contactWarning": "توجہہ دیو کہ یتھ تعارُفکِس وقتہ پیٹھہ، تُہہ چھِ ۴۸ گھنتہ (۲ دۄہ) أمِس شَخصَس یا أمۍ سٕندِس عِزت دار خاندانس سیتۍ رابطہ کرنہ خٲطرہ تاکہ تُہہ پَننۍ تیاری ظاہر کٔرِو تہٰ جان پہچان ہُنٛد عمل شروٗع کٔرِو۔ یَتھ مٔرحَلس مَنڅ، صِرِف اکھ شروٗعاتی کال پَنُن تعارُف کرنہ خٲطرہ کافی چھُ، تہٰ برونہہ کُن قَدمن ہنز مَنصوٗبہ بندی (جِسمانی ملاقات ہۍ مٹ) چھِ پوٗرہ پٲٹھۍ تُہنٛدین باہمی اِتِفاقن پیٹھ مُنحَصِر۔\n\nتکِہ رابطہ نہ کرُن مُقرر وقتس مَنڅ ہیٚکہِ سماجی طور غٲر سَنجیدگی سمجھنہ یِتھ، یَتھ صورتس مَنڅ اگر یِمن ۲ دۄہن مَنڅ کانہہ قَدم تُلنہ نہ آو، پِلیٹ فارمٕکۍ قَواینِن مُطٲبِق یِیہِ یِہ معرفی ہٹاونہ۔ أسی چھِ تُہہ یِہ تہِ یاد دِلاوان کہ یَتھ مَسٔلس سیتۍ ہیٚکن پگہکۍ متعارف گژھنس مَنڅ تاخیر تہٰ مٲلی جٔرمانہ ہۍ مٹ پٲبندۍ لَگتھ۔"
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/pt.json

@ -1,4 +1,20 @@
{
"Contact Received": "Contato recebido",
"No Contact Received": "Nenhum contato recebido",
"No contact has been made with you in any way or by any party.": "Nenhum contato foi feito com você de forma alguma ou por qualquer parte.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Obrigado pelo seu feedback. Nossa equipe de suporte investigará o assunto e notificará você sobre o resultado. Por favor, aguarde pacientemente durante a revisão; nosso suporte entrará em contato com você.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Confirmar contato",
"noContactYet": "Relatar falta de contato",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Para manter o processo fluindo sem problemas, a outra parte tem um prazo de 48 horas (2 dias) para fazer o contato inicial com você ou sua família. Se nenhum contato for estabelecido após 2 dias, você tem a opção de recusar a solicitação dele ou de nos notificar de que ele não entrou em contato.",
"thankYouFeedback": "Obrigado por nos dar o seu feedback, ficaríamos muito felizes se também nos informasse o resultado final.",
"marriageSuccess": "Chegamos a um acordo",
"marriageFailure": "Não chegamos a um acordo",
"outcomeTitle": "Qual foi o resultado do seu contato?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "Se encontrar qualquer problema, entre em contato com nossos especialistas de suporte no WhatsApp",
"supportSwipeText": "Contatar"
},
"findingMatch": {
"title": "SUA BUSCA ESTÁ ATIVA",
"description": "Nosso sistema está procurando ativamente parceiros compatíveis com base em seus critérios. Esse processo requer tempo e paciência. Nós o notificaremos imediatamente assim que um perfil estiver pronto para sua revisão.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Histórico familiar, estado civil e filhos",
"familyMaritalEstimate": "5 minutos",
"notAPriority": "Este assunto não é uma prioridade para mim.",
"writeOtherTraits": "Write other options...",
"fromAge": "De",
"toAge": "Até",
"familyResponsibilityTooltip": "Por favor, explique brevemente o tipo de responsabilidade, a sua duração, a extensão do apoio financeiro ou de cuidados e o seu impacto potencial no local de residência, na recolocação ou nas condições da futura vida conjugal.",
"childCustodyExplanationTooltip": "Por favor, explique brevemente o regime de custódia, o calendário de permanência do filho, possíveis limitações para mudança ou emigração e obrigações financeiras associadas. Evite indicar o nome do filho, do outro progenitor ou detalhes pessoais desnecessários.",
"currentMaritalStatusTooltip": "Este campo privado exige que o utilizador declare com precisão o seu estado civil atual e histórico de relacionamentos a partir das opções específicas fornecidas."
"maleRejectionWarning": {
"title": "Aviso de Rejeição",
"carefulReview": "Antes de tomar a decisão final, leia atentamente e por completo o perfil da outra pessoa novamente.",
"friendlyDelay": "Observe que a rejeição deste caso pode atrasar a recomendação do próximo perfil, mas não há nenhuma obrigação de aceitar e você é totalmente livre.",
"noPenalty": "Confirmar esta rejeição não resultará em nenhuma penalidade; apenas colocará a situação em um prazo de decisão de 2 dias para finalização.",
"swipeText": "Deslize para confirmar a rejeição"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Detalhes de contato",
"contactDetailDescription": "Por favor, mencione durante a chamada que você foi apresentado através do aplicativo Habib Marriage.",
"contactNotAvailable": "As informações de contato ainda não estão disponíveis.",
"contactWarning": "Tenha em atenção que, a partir do momento desta introdução, tem 48 horas (2 dias) para contactar a pessoa ou a sua respeitada família para declarar a sua prontidão e iniciar o processo de conhecimento. Nesta fase, basta uma chamada inicial para anunciar a sua presença, e o planeamento de etapas posteriores (como um encontro presencial) depende inteiramente dos seus acordos mútuos subsequentes.\n\nUma vez que a falta de contacto dentro do prazo especificado pode ser considerada socialmente desrespeitosa, se nenhuma ação for tomada dentro destes 2 dias, o par introduzido será removido de acordo com as regras da plataforma. Lembramos também que este problema pode levar a restrições, tais como atrasos em futuras introduções e penalizações financeiras."
},
"findingMatch": {
"title": "SUA BUSCA ESTÁ ATIVA",
"description": "Nosso sistema está procurando ativamente parceiros compatíveis com base em seus critérios. Esse processo requer tempo e paciência. Nós o notificaremos imediatamente assim que um perfil estiver pronto para sua revisão.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Confirmar contato",
"noContactYet": "Relatar falta de contato",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Para manter o processo fluindo sem problemas, a outra parte tem um prazo de 48 horas (2 dias) para fazer o contato inicial com você ou sua família. Se nenhum contato for estabelecido após 2 dias, você tem a opção de recusar a solicitação dele ou de nos notificar de que ele não entrou em contato.",
"thankYouFeedback": "Obrigado por nos dar o seu feedback, ficaríamos muito felizes se também nos informasse o resultado final.",
"marriageSuccess": "Chegamos a um acordo",
"marriageFailure": "Não chegamos a um acordo",
"outcomeTitle": "Qual foi o resultado do seu contato?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Pagamento",
"pay": "Pagar"
},
"maleRejectionWarning": {
"title": "Aviso de Rejeição",
"carefulReview": "Antes de tomar a decisão final, leia atentamente e por completo o perfil da outra pessoa novamente.",
"friendlyDelay": "Observe que a rejeição deste caso pode atrasar a recomendação do próximo perfil, mas não há nenhuma obrigação de aceitar e você é totalmente livre.",
"noPenalty": "Confirmar esta rejeição não resultará em nenhuma penalidade; apenas colocará a situação em um prazo de decisão de 2 dias para finalização.",
"swipeText": "Deslize para confirmar a rejeição"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Pagamento",
"pay": "Pagar"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Histórico familiar, estado civil e filhos",
"familyMaritalEstimate": "5 minutos",
"notAPriority": "Este assunto não é uma prioridade para mim.",
"writeOtherTraits": "Write other options...",
"fromAge": "De",
"toAge": "Até",
"familyResponsibilityTooltip": "Por favor, explique brevemente o tipo de responsabilidade, a sua duração, a extensão do apoio financeiro ou de cuidados e o seu impacto potencial no local de residência, na recolocação ou nas condições da futura vida conjugal.",
"childCustodyExplanationTooltip": "Por favor, explique brevemente o regime de custódia, o calendário de permanência do filho, possíveis limitações para mudança ou emigração e obrigações financeiras associadas. Evite indicar o nome do filho, do outro progenitor ou detalhes pessoais desnecessários.",
"currentMaritalStatusTooltip": "Este campo privado exige que o utilizador declare com precisão o seu estado civil atual e histórico de relacionamentos a partir das opções específicas fornecidas."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Detalhes de contato",
"contactDetailDescription": "Por favor, mencione durante a chamada que você foi apresentado através do aplicativo Habib Marriage.",
"contactNotAvailable": "As informações de contato ainda não estão disponíveis.",
"contactWarning": "Tenha em atenção que, a partir do momento desta introdução, tem 48 horas (2 dias) para contactar a pessoa ou a sua respeitada família para declarar a sua prontidão e iniciar o processo de conhecimento. Nesta fase, basta uma chamada inicial para anunciar a sua presença, e o planeamento de etapas posteriores (como um encontro presencial) depende inteiramente dos seus acordos mútuos subsequentes.\n\nUma vez que a falta de contacto dentro do prazo especificado pode ser considerada socialmente desrespeitosa, se nenhuma ação for tomada dentro destes 2 dias, o par introduzido será removido de acordo com as regras da plataforma. Lembramos também que este problema pode levar a restrições, tais como atrasos em futuras introduções e penalizações financeiras."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/ru.json

@ -1,4 +1,20 @@
{
"Contact Received": "Контакт получен",
"No Contact Received": "Контакт не получен",
"No contact has been made with you in any way or by any party.": "С вами не связывались никаким образом и ни с какой стороны.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Спасибо за ваш отзыв. Наша служба поддержки расследует этот вопрос и сообщит вам о результате. Пожалуйста, наберитесь терпения во время проверки; наша служба поддержки свяжется с вами.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Подтвердить контакт",
"noContactYet": "Сообщить об отсутствии контакта",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Чтобы процесс продвигался гладко, у другой стороны есть 48 часов (2 дня), чтобы установить первоначальный контакт с вами или вашей семьей. Если по истечении 2 дней контакт не установлен, у вас есть возможность отклонить его запрос или уведомить нас о том, что он не связался.",
"thankYouFeedback": "Спасибо за ваш отзыв, мы будем очень рады, если вы также сообщите нам окончательный результат.",
"marriageSuccess": "Мы пришли к согласию",
"marriageFailure": "Мы не пришли к согласию",
"outcomeTitle": "Каков был результат вашего контакта?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "Если у вас возникли проблемы, свяжитесь с нашими специалистами поддержки в WhatsApp",
"supportSwipeText": "Связаться"
},
"findingMatch": {
"title": "ВАШ ПОИСК АКТИВЕН",
"description": "Наша система активно ищет подходящих партнеров на основе ваших критериев. Этот процесс требует времени и терпения. Мы немедленно уведомим вас, как только профиль будет готов к вашему рассмотрению.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Семейное положение, история брака и дети",
"familyMaritalEstimate": "5 минут",
"notAPriority": "Эта тема не является приоритетом для меня.",
"writeOtherTraits": "Write other options...",
"fromAge": "От",
"toAge": "До",
"familyResponsibilityTooltip": "Пожалуйста, кратко опишите тип ответственности, ее продолжительность, объем финансовой помощи или ухода, а также ее возможное влияние на место жительства, переезд или условия будущей совместной жизни.",
"childCustodyExplanationTooltip": "Пожалуйста, кратко опишите статус опеки, график пребывания ребенка, возможные ограничения на переезд или эмиграцию, а также связанные с этим финансовые обязательства. Избегайте указания имени ребенка, имени другого родителя или ненужных личных данных.",
"currentMaritalStatusTooltip": "Это приватное поле требует от пользователя точно указать свое текущее семейное положение и историю отношений из предложенных вариантов."
"maleRejectionWarning": {
"title": "Предупреждение об отклонении",
"carefulReview": "Перед принятием окончательного решения, пожалуйста, еще раз полностью и внимательно изучите профиль кандидата.",
"friendlyDelay": "Обратите внимание, что отклонение этого предложения может немного задержать подбор следующего кандидата, но вы абсолютно не обязаны соглашаться.",
"noPenalty": "Подтверждение этого отклонения не влечет за собой никаких штрафов; оно просто переводит статус в 2-дневное окно принятия решений для его завершения.",
"swipeText": "Проведите для подтверждения отклонения"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Контактная информация",
"contactDetailDescription": "Пожалуйста, упомяните во время разговора, что вас познакомили через приложение Habib Marriage.",
"contactNotAvailable": "Контактная информация пока недоступна.",
"contactWarning": "Обратите внимание, что с момента этого представления у вас есть 48 часов (2 дня), чтобы связаться с человеком или его уважаемой семьей, чтобы заявить о своей готовности и начать процесс знакомства. На этом этапе достаточно простого первоначального звонка, чтобы объявить о своем присутствии, а планирование дальнейших шагов (например, личной встречи) полностью зависит от ваших последующих взаимных договоренностей.\n\nПоскольку отсутствие контакта в указанное время может быть сочтено социально неуважительным, если в течение этих 2 дней не будет предпринято никаких действий, представленное совпадение будет удалено в соответствии с правилами платформы. Мы также напоминаем вам, что эта проблема может привести к таким ограничениям, как задержки в будущих представлениях и финансовые штрафы."
},
"findingMatch": {
"title": "ВАШ ПОИСК АКТИВЕН",
"description": "Наша система активно ищет подходящих партнеров на основе ваших критериев. Этот процесс требует времени и терпения. Мы немедленно уведомим вас, как только профиль будет готов к вашему рассмотрению.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Подтвердить контакт",
"noContactYet": "Сообщить об отсутствии контакта",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Чтобы процесс продвигался гладко, у другой стороны есть 48 часов (2 дня), чтобы установить первоначальный контакт с вами или вашей семьей. Если по истечении 2 дней контакт не установлен, у вас есть возможность отклонить его запрос или уведомить нас о том, что он не связался.",
"thankYouFeedback": "Спасибо за ваш отзыв, мы будем очень рады, если вы также сообщите нам окончательный результат.",
"marriageSuccess": "Мы пришли к согласию",
"marriageFailure": "Мы не пришли к согласию",
"outcomeTitle": "Каков был результат вашего контакта?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Оплата",
"pay": "Оплатить"
},
"maleRejectionWarning": {
"title": "Предупреждение об отклонении",
"carefulReview": "Перед принятием окончательного решения, пожалуйста, еще раз полностью и внимательно изучите профиль кандидата.",
"friendlyDelay": "Обратите внимание, что отклонение этого предложения может немного задержать подбор следующего кандидата, но вы абсолютно не обязаны соглашаться.",
"noPenalty": "Подтверждение этого отклонения не влечет за собой никаких штрафов; оно просто переводит статус в 2-дневное окно принятия решений для его завершения.",
"swipeText": "Проведите для подтверждения отклонения"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Оплата",
"pay": "Оплатить"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Семейное положение, история брака и дети",
"familyMaritalEstimate": "5 минут",
"notAPriority": "Эта тема не является приоритетом для меня.",
"writeOtherTraits": "Write other options...",
"fromAge": "От",
"toAge": "До",
"familyResponsibilityTooltip": "Пожалуйста, кратко опишите тип ответственности, ее продолжительность, объем финансовой помощи или ухода, а также ее возможное влияние на место жительства, переезд или условия будущей совместной жизни.",
"childCustodyExplanationTooltip": "Пожалуйста, кратко опишите статус опеки, график пребывания ребенка, возможные ограничения на переезд или эмиграцию, а также связанные с этим финансовые обязательства. Избегайте указания имени ребенка, имени другого родителя или ненужных личных данных.",
"currentMaritalStatusTooltip": "Это приватное поле требует от пользователя точно указать свое текущее семейное положение и историю отношений из предложенных вариантов."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Контактная информация",
"contactDetailDescription": "Пожалуйста, упомяните во время разговора, что вас познакомили через приложение Habib Marriage.",
"contactNotAvailable": "Контактная информация пока недоступна.",
"contactWarning": "Обратите внимание, что с момента этого представления у вас есть 48 часов (2 дня), чтобы связаться с человеком или его уважаемой семьей, чтобы заявить о своей готовности и начать процесс знакомства. На этом этапе достаточно простого первоначального звонка, чтобы объявить о своем присутствии, а планирование дальнейших шагов (например, личной встречи) полностью зависит от ваших последующих взаимных договоренностей.\n\nПоскольку отсутствие контакта в указанное время может быть сочтено социально неуважительным, если в течение этих 2 дней не будет предпринято никаких действий, представленное совпадение будет удалено в соответствии с правилами платформы. Мы также напоминаем вам, что эта проблема может привести к таким ограничениям, как задержки в будущих представлениях и финансовые штрафы."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/sw.json

@ -1,4 +1,20 @@
{
"Contact Received": "Mawasiliano yamepokelewa",
"No Contact Received": "Hakuna mawasiliano yaliyopokelewa",
"No contact has been made with you in any way or by any party.": "Hakuna mawasiliano yoyote yaliyofanywa nawe kwa njia yoyote au na upande wowote.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Asante kwa maoni yako. Timu yetu ya usaidizi itachunguza suala hili na kukuarifu matokeo. Tafadhali subiri kwa subira wakati wa ukaguzi; usaidizi wetu utawasiliana nawe.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Thibitisha mawasiliano",
"noContactYet": "Ripoti hakuna mawasiliano",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Ili mchakato uendelee vizuri, upande mwingine una muda wa saa 48 (siku 2) kuwasiliana na wewe au familia yako. Ikiwa hakuna mawasiliano yoyote yatakayofanywa baada ya siku 2, una chaguo la kukataa ombi lake au kutuarifu kuwa hajawasiliana.",
"thankYouFeedback": "Asante kwa kutupa maoni yako, tutafurahi sana ikiwa utatujulisha matokeo ya mwisho pia.",
"marriageSuccess": "Tulifikia makubaliano",
"marriageFailure": "Hatukufikia makubaliano",
"outcomeTitle": "Matokeo ya mawasiliano yenu yalikuwa nini?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "Ukikutana na tatizo lolote, tafadhali wasiliana na wataalamu wetu wa usaidizi kwenye WhatsApp",
"supportSwipeText": "Wasiliana"
},
"findingMatch": {
"title": "UTAFUTAJI WAKO UNAENDELEA",
"description": "Mfumo wetu unatafuta kwa bidii wenzi wanaofaa kulingana na vigezo vyako. Utaratibu huu unahitaji muda na subira. Tutaarifu mara wasifu utakapokuwa tayari kwa mapitio yako.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Historia ya Familia, Hali ya Ndoa na Watoto",
"familyMaritalEstimate": "Dakika 5",
"notAPriority": "Mada hii sio kipaumbele kwangu.",
"writeOtherTraits": "Write other options...",
"fromAge": "Kuanzia",
"toAge": "Hadi",
"familyResponsibilityTooltip": "Tafadhali eleza kwa ufupi aina ya jukumu, muda wake, kiwango cha usaidizi wa kifedha au utunzaji, ya athari yake inayoweza kutokea kwenye mahali pako pa kuishi, kuhamia, au masharti ya maisha ya ndoa ya baadaye.",
"childCustodyExplanationTooltip": "Tafadhali eleza kwa ufupi hali ya ulezi, ratiba ya kuwepo kwa mtoto, vikwazo vinavyoweza kutokea vya kuhama au uhamiaji, na majukumu ya kifedha yanayohusiana. Epuka kuweka jina la mtoto, mzazi mwingine au maelezo ya kibinafsi yasiyo ya lazima.",
"currentMaritalStatusTooltip": "Sehemu hii ya siri inataka mtumiaji kutangaza kwa usahihi hali yake ya sasa ya ndoa na historia ya uhusiano kutoka kwa chaguzi maalum zilizotolewa."
"maleRejectionWarning": {
"title": "Onyo la Kukataa",
"carefulReview": "Kabla ya kufanya uamuzi wa mwisho, tafadhali soma na uhakiki tena wasifu wa mtu mwingine kikamilifu.",
"friendlyDelay": "Tafadhali kumbuka kuwa kukataa ombi hili kunaweza kuchelewesha pendekezo la mtu mwingine, lakini hakuna lazima ya kukubali na uko huru kuchagua.",
"noPenalty": "Kuthibitisha kukataa huku hakutaleta adhabu yoyote; badala yake kunaweka hali katika muda wa siku 2 kufanya uamuzi wa kukamilisha.",
"swipeText": "Sogeza ili kuthibitisha kukataa"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Maelezo ya Mawasiliano",
"contactDetailDescription": "Tafadhali taja wakati wa simu kwamba ulitambulishwa kupitia programu ya Habib Marriage.",
"contactNotAvailable": "Maelezo ya mawasiliano bado hayapatikani.",
"contactWarning": "Tafadhali fahamishwa kuwa tangu wakati wa utambulisho huu, una saa 48 (siku 2) kuwasiliana na mtu huyo au familia yake inayoheshimika ili kutangaza utayari wako na kuanza mchakato wa kufahamiana. Katika hatua hii, simu ya kwanza tu ya kutangaza uwepo wako inatosha, na kupanga hatua zaidi (kama vile mkutano wa ana kwa ana) inategemea kabisa makubaliano yenu ya baadaye.\n\nKwa kuwa kutowasiliana ndani ya muda uliowekwa kunaweza kuchukuliwa kuwa kutokuwa na heshima kijamii, ikiwa hakuna hatua itakayochukuliwa ndani ya siku hizi 2, mechi iliyotambulishwa itaondolewa kulingana na sheria za jukwaa. Pia tunakukumbusha kuwa suala hili linaweza kusababisha vizuizi kama vile kucheleweshwa kwa utambulisho wa baadaye na adhabu za kifedha."
},
"findingMatch": {
"title": "UTAFUTAJI WAKO UNAENDELEA",
"description": "Mfumo wetu unatafuta kwa bidii wenzi wanaofaa kulingana na vigezo vyako. Utaratibu huu unahitaji muda na subira. Tutaarifu mara wasifu utakapokuwa tayari kwa mapitio yako.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Thibitisha mawasiliano",
"noContactYet": "Ripoti hakuna mawasiliano",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Ili mchakato uendelee vizuri, upande mwingine una muda wa saa 48 (siku 2) kuwasiliana na wewe au familia yako. Ikiwa hakuna mawasiliano yoyote yatakayofanywa baada ya siku 2, una chaguo la kukataa ombi lake au kutuarifu kuwa hajawasiliana.",
"thankYouFeedback": "Asante kwa kutupa maoni yako, tutafurahi sana ikiwa utatujulisha matokeo ya mwisho pia.",
"marriageSuccess": "Tulifikia makubaliano",
"marriageFailure": "Hatukufikia makubaliano",
"outcomeTitle": "Matokeo ya mawasiliano yenu yalikuwa nini?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Malipo",
"pay": "Lipa"
},
"maleRejectionWarning": {
"title": "Onyo la Kukataa",
"carefulReview": "Kabla ya kufanya uamuzi wa mwisho, tafadhali soma na uhakiki tena wasifu wa mtu mwingine kikamilifu.",
"friendlyDelay": "Tafadhali kumbuka kuwa kukataa ombi hili kunaweza kuchelewesha pendekezo la mtu mwingine, lakini hakuna lazima ya kukubali na uko huru kuchagua.",
"noPenalty": "Kuthibitisha kukataa huku hakutaleta adhabu yoyote; badala yake kunaweka hali katika muda wa siku 2 kufanya uamuzi wa kukamilisha.",
"swipeText": "Sogeza ili kuthibitisha kukataa"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Malipo",
"pay": "Lipa"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Historia ya Familia, Hali ya Ndoa na Watoto",
"familyMaritalEstimate": "Dakika 5",
"notAPriority": "Mada hii sio kipaumbele kwangu.",
"writeOtherTraits": "Write other options...",
"fromAge": "Kuanzia",
"toAge": "Hadi",
"familyResponsibilityTooltip": "Tafadhali eleza kwa ufupi aina ya jukumu, muda wake, kiwango cha usaidizi wa kifedha au utunzaji, ya athari yake inayoweza kutokea kwenye mahali pako pa kuishi, kuhamia, au masharti ya maisha ya ndoa ya baadaye.",
"childCustodyExplanationTooltip": "Tafadhali eleza kwa ufupi hali ya ulezi, ratiba ya kuwepo kwa mtoto, vikwazo vinavyoweza kutokea vya kuhama au uhamiaji, na majukumu ya kifedha yanayohusiana. Epuka kuweka jina la mtoto, mzazi mwingine au maelezo ya kibinafsi yasiyo ya lazima.",
"currentMaritalStatusTooltip": "Sehemu hii ya siri inataka mtumiaji kutangaza kwa usahihi hali yake ya sasa ya ndoa na historia ya uhusiano kutoka kwa chaguzi maalum zilizotolewa."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Maelezo ya Mawasiliano",
"contactDetailDescription": "Tafadhali taja wakati wa simu kwamba ulitambulishwa kupitia programu ya Habib Marriage.",
"contactNotAvailable": "Maelezo ya mawasiliano bado hayapatikani.",
"contactWarning": "Tafadhali fahamishwa kuwa tangu wakati wa utambulisho huu, una saa 48 (siku 2) kuwasiliana na mtu huyo au familia yake inayoheshimika ili kutangaza utayari wako na kuanza mchakato wa kufahamiana. Katika hatua hii, simu ya kwanza tu ya kutangaza uwepo wako inatosha, na kupanga hatua zaidi (kama vile mkutano wa ana kwa ana) inategemea kabisa makubaliano yenu ya baadaye.\n\nKwa kuwa kutowasiliana ndani ya muda uliowekwa kunaweza kuchukuliwa kuwa kutokuwa na heshima kijamii, ikiwa hakuna hatua itakayochukuliwa ndani ya siku hizi 2, mechi iliyotambulishwa itaondolewa kulingana na sheria za jukwaa. Pia tunakukumbusha kuwa suala hili linaweza kusababisha vizuizi kama vile kucheleweshwa kwa utambulisho wa baadaye na adhabu za kifedha."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/tg.json

@ -1,4 +1,20 @@
{
"Contact Received": "Тамос гирифта шуд",
"No Contact Received": "Тамос гирифта нашуд",
"No contact has been made with you in any way or by any party.": "Бо шумо ба ҳеҷ ваҷҳ ва аз ҷониби ягон тараф тамос гирифта нашудааст.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Ташаккур барои фикру мулоҳизаҳои шумо. Дастаи дастгирии мо масъаларо таҳқиқ карда, натиҷаро ба шумо хабар медиҳад. Лутфан, ҳангоми баррасӣ босаброна интизор шавед; дастгирии мо бо шумо тамос хоҳад гирифт.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Тасдиқи тамос",
"noContactYet": "Гузориши адам тамос",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Барои осон рафтани раванд, тарафи дигар 48 соат (2 рӯз) вақт дорад, ки бо шумо ё оилаатон тамоси аввалия барқарор кунад. Агар пас аз 2 рӯз тамос барқарор нашавад, шумо имкон доред, ки дархости ӯро рад кунед ё ба мо хабар диҳед, ки ӯ тамос нагирифтааст.",
"thankYouFeedback": "Ташаккур барои фикру мулоҳизаҳоятон, агар натиҷаи ниҳоиро низ ба мо хабар диҳед, хеле шод хоҳем шуд.",
"marriageSuccess": "Мо ба созиш расидем",
"marriageFailure": "Мо ба созиш нарасидем",
"outcomeTitle": "Натиҷаи тамоси шумо чӣ шуд?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "Агар мушкилие дучор шавед, лутфан бо мутахассисони дастгирии мо дар WhatsApp тамос гиред",
"supportSwipeText": "Тамос"
},
"findingMatch": {
"title": "ҶУСТУҶӮИ ШУМО ФАЪОЛ АСТ",
"description": "Системаи мо дар асоси меъёрҳои шумо шарикони мувофиқро фаъолона меҷӯяд. Ин раванд вақт ва сабрро талаб мекунад. Мо ба шумо фавран хабар медиҳем, ки профил барои баррасии шумо омода аст.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Маълумоти оилавӣ, вазъи оилавӣ ва кӯдакон",
"familyMaritalEstimate": "5 дақиқа",
"notAPriority": "Ин мавзӯъ барои ман афзалият надорад.",
"writeOtherTraits": "Write other options...",
"fromAge": "Аз",
"toAge": "То",
"familyResponsibilityTooltip": "Лутфан намуди масъулият, давомнокии он, ҳаҷми дастгирии молиявӣ ё нигоҳубин ва таъсири эҳтимолии онро ба маҳалли зист, муҳоҷират ё шароити зиндагии муштараки оянда кӯтоҳ шарҳ диҳед.",
"childCustodyExplanationTooltip": "Лутфан вазъияти васоят, ҷадвали ҳузури фарзанд, маҳдудиятҳои эҳтимолӣ барои кӯчидан ё муҳоҷират ва уҳдадориҳои молиявии марбутаро кӯтоҳ шарҳ диҳед. Аз зикри номи фарзанд, волиди дигар ё ҷузъиёти шахсии ғайризарурӣ худдорӣ намоед.",
"currentMaritalStatusTooltip": "Ин бахши хусусӣ аз корбар талаб мекунад, ки вазъи оилавии ҷорӣ ва таърихи муносибатҳои худро аз рӯи имконоти пешниҳодшуда дақиқ эълон кунад."
"maleRejectionWarning": {
"title": "Огоҳӣ аз радди пешниҳод",
"carefulReview": "Пеш аз қарори ниҳоӣ, лутфан профили шахси дигарро пурра ва бори дигар бодиққат омӯзед.",
"friendlyDelay": "Лутфан таваҷҷӯҳ намоед, ки рад кардани ин пешниҳод метавонад боиси таъхир дар муаррифии номзади навбатӣ гардад, аммо ҳеҷ гуна маҷбурият дар қабул нест ва шумо комилан озод ҳастед.",
"noPenalty": "Тасдиқи ин рад ягон ҷарима надорад; он танҳо барои муайян кардани вазъият мӯҳлати 2-рӯзаи қарорро оғоз мекунад.",
"swipeText": "Барои тасдиқи рад кардан кашед"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Тафсилоти тамос",
"contactDetailDescription": "Лутфан ҳангоми занг қайд куنید, ки шумо тавассути барномаи Habib Marriage шинос карда шудаед.",
"contactNotAvailable": "Маъلوмоти тамос ҳанӯз дастрас нест.",
"contactWarning": "Ба маълумоти шумо мерасонем, ки аз вақти ин муаррифӣ, шумо 48 соат (2 рӯз) имкон доред, ки бо шахс ё оилаи мӯҳтарами ӯ тамос гиред, то омодагии худро изҳор кунед ва раванди шиносоиро оғоз намоед. Дар ин марҳила, танҳо як тамоси аввалия барои эълон кардани ҳузури шумо кифоя аст ва банақшагирии қадамҳои минбаъда (масалан, вохӯрии ҳузурӣ) комилан аз мувофиқаи мутақобилаи навбатии шумо вобаста аст.\n\nАзбаски натавонистани тамос дар вақти муқарраршуда метавонад аз назари иҷтимоӣ беэҳтиромӣ ҳисобида шавад, агар дар давоми ин 2 рӯз ягон чорае андешида нашавад, муаррифии пешниҳодшуда мувофиқи қоидаҳои платформа нест карда мешавад. Мо инчунин ба шумо хотиррасон мекунем, ки ин масъала метавонад ба маҳдудиятҳо, ба монанди таъхир дар муаррифии оянда ва ҷаримаҳои молиявӣ оварда расонад."
},
"findingMatch": {
"title": "ҶУСТУҶӮИ ШУМО ФАЪОЛ АСТ",
"description": "Системаи мо дар асоси меъёрҳои шумо шарикони мувофиқро фаъолона меҷӯяд. Ин раванд вақт ва сабрро талаб мекунад. Мо ба шумо фавран хабар медиҳем, ки профил барои баррасии шумо омода аст.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Тасдиқи тамос",
"noContactYet": "Гузориши адам тамос",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Барои осон рафтани раванд, тарафи дигар 48 соат (2 рӯз) вақт дорад, ки бо шумо ё оилаатон тамоси аввалия барқарор кунад. Агар пас аз 2 рӯз тамос барқарор нашавад, шумо имкон доред, ки дархости ӯро рад кунед ё ба мо хабар диҳед, ки ӯ тамос нагирифтааст.",
"thankYouFeedback": "Ташаккур барои фикру мулоҳизаҳоятон, агар натиҷаи ниҳоиро низ ба мо хабар диҳед, хеле шод хоҳем шуд.",
"marriageSuccess": "Мо ба созиш расидем",
"marriageFailure": "Мо ба созиш нарасидем",
"outcomeTitle": "Натиҷаи тамоси шумо чӣ шуд?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Пардохт",
"pay": "Пардохт кардан"
},
"maleRejectionWarning": {
"title": "Огоҳӣ аз радди пешниҳод",
"carefulReview": "Пеш аз қарори ниҳоӣ, лутфан профили шахси дигарро пурра ва бори дигар бодиққат омӯзед.",
"friendlyDelay": "Лутфан таваҷҷӯҳ намоед, ки рад кардани ин пешниҳод метавонад боиси таъхир дар муаррифии номзади навбатӣ гардад, аммо ҳеҷ гуна маҷбурият дар қабул нест ва шумо комилан озод ҳастед.",
"noPenalty": "Тасдиқи ин рад ягон ҷарима надорад; он танҳо барои муайян кардани вазъият мӯҳлати 2-рӯзаи қарорро оғоз мекунад.",
"swipeText": "Барои тасдиқи рад кардан кашед"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Пардохт",
"pay": "Пардохт кардан"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Маълумоти оилавӣ, вазъи оилавӣ ва кӯдакон",
"familyMaritalEstimate": "5 дақиқа",
"notAPriority": "Ин мавзӯъ барои ман афзалият надорад.",
"writeOtherTraits": "Write other options...",
"fromAge": "Аз",
"toAge": "То",
"familyResponsibilityTooltip": "Лутфан намуди масъулият, давомнокии он, ҳаҷми дастгирии молиявӣ ё нигоҳубин ва таъсири эҳтимолии онро ба маҳалли зист, муҳоҷират ё шароити зиндагии муштараки оянда кӯтоҳ шарҳ диҳед.",
"childCustodyExplanationTooltip": "Лутфан вазъияти васоят, ҷадвали ҳузури фарзанд, маҳдудиятҳои эҳтимолӣ барои кӯчидан ё муҳоҷират ва уҳдадориҳои молиявии марбутаро кӯтоҳ шарҳ диҳед. Аз зикри номи фарзанд, волиди дигар ё ҷузъиёти шахсии ғайризарурӣ худдорӣ намоед.",
"currentMaritalStatusTooltip": "Ин бахши хусусӣ аз корбар талаб мекунад, ки вазъи оилавии ҷорӣ ва таърихи муносибатҳои худро аз рӯи имконоти пешниҳодшуда дақиқ эълон кунад."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Тафсилоти тамос",
"contactDetailDescription": "Лутфан ҳангоми занг қайд куنید, ки шумо тавассути барномаи Habib Marriage шинос карда шудаед.",
"contactNotAvailable": "Маъلوмоти тамос ҳанӯз дастрас нест.",
"contactWarning": "Ба маълумоти шумо мерасонем, ки аз вақти ин муаррифӣ, шумо 48 соат (2 рӯз) имкон доред, ки бо шахс ё оилаи мӯҳтарами ӯ тамос гиред, то омодагии худро изҳор кунед ва раванди шиносоиро оғоз намоед. Дар ин марҳила, танҳо як тамоси аввалия барои эълон кардани ҳузури шумо кифоя аст ва банақшагирии қадамҳои минбаъда (масалан, вохӯрии ҳузурӣ) комилан аз мувофиқаи мутақобилаи навбатии шумо вобаста аст.\n\nАзбаски натавонистани тамос дар вақти муқарраршуда метавонад аз назари иҷтимоӣ беэҳтиромӣ ҳисобида шавад, агар дар давоми ин 2 рӯз ягон чорае андешида нашавад, муаррифии пешниҳодшуда мувофиқи қоидаҳои платформа нест карда мешавад. Мо инчунин ба шумо хотиррасон мекунем, ки ин масъала метавонад ба маҳдудиятҳо, ба монанди таъхир дар муаррифии оянда ва ҷаримаҳои молиявӣ оварда расонад."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/tr.json

@ -1,4 +1,20 @@
{
"Contact Received": "İletişim alındı",
"No Contact Received": "İletişim alınmadı",
"No contact has been made with you in any way or by any party.": "Sizinle hiçbir şekilde veya hiçbir tarafça iletişime geçilmemiştir.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Geri bildiriminiz için teşekkür ederiz. Destek ekibimiz konuyu araştıracak ve sonucu size bildirecektir. Lütfen inceleme sürecinde sabırla bekleyin; desteğimiz sizinle iletişime geçecektir.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "İletişimi onayla",
"noContactYet": "İletişim yok bildir",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Sürecin sorunsuz ilerlemesi için, karşı tarafın sizinle veya ailenizle ilk teması kurmak üzere 48 saatlik (2 günlük) bir süresi vardır. 2 gün sonra iletişim kurulmazsa, talebini reddetme veya bize ulaşmadığını bildirme seçeneğine sahipsiniz.",
"thankYouFeedback": "Geri bildiriminiz için teşekkür ederiz, nihai sonucu da bize bildirirseniz çok memnun oluruz.",
"marriageSuccess": "Anlaşmaya vardık",
"marriageFailure": "Anlaşmaya varamadık",
"outcomeTitle": "İletişiminizin sonucu ne oldu?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "Herhangi bir sorunla karşılaşırsanız, lütfen WhatsApp üzerinden destek uzmanlarımızla iletişime geçin",
"supportSwipeText": "İletişim"
},
"findingMatch": {
"title": "ARAMANIZ AKTİF",
"description": "Sistemimiz, kriterlerinize göre aktif olarak uyumlu ortaklar aramaktadır. Bu süreç zaman ve sabır gerektirir. Bir profil incelemeniz için hazır olduğunda sizi hemen bilgilendireceğiz.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Gizli (Yalnızca Danışmanlar)",
"startMatchFailed": "Eşleşme isteği gönderilemedi. Lütfen bağlantınızı kontrol edip tekrar deneyin.",
"moveToEnd": "Sona Taşı",
"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.",
"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.",
"familyMaritalTitle": "Aile Geçmişi, Medeni Durum ve Çocuklar",
"familyMaritalEstimate": "5 dakika",
"notAPriority": "Bu konu benim için bir öncelik değil.",
"writeOtherTraits": "Write other options...",
"fromAge": "En az",
"toAge": "En çok",
"familyResponsibilityTooltip": "Lütfen sorumluluğun türünü, süresini, mali desteğin veya bakımın boyutunu ve bunun gelecekteki ikamet yerinize, taşınmanıza veya gelecekteki evlilik hayatı koşullarınıza olası etkisini kısaca açıklayın.",
"childCustodyExplanationTooltip": "Lütfen velayet durumunu, çocuğun ziyaret/birlikte kalma planını, taşınma veya göç konusundaki olası kısıtlamaları ve ilgili mali yükümlülükleri kısaca açıklayın. Çocuğun ismini, diğer ebeveynin ismini veya gereksiz kişisel detayları belirtmekten kaçının.",
"currentMaritalStatusTooltip": "Bu özel alan, kullanıcının sunulan seçenekler arasından mevcut medeni durumunu ve ilişki geçmişini doğru bir şekilde beyan etmesini gerektirir."
"maleRejectionWarning": {
"title": "Reddetme Uyarısı",
"carefulReview": "Nihai kararınızı vermeden önce, lütfen diğer kişinin profilini tamamen ve tekrar dikkatlice inceleyin.",
"friendlyDelay": "Bu durumu reddetmenin bir sonraki eşleşme önerisinde gecikmeye neden olabileceğini lütfen unutmayın, ancak kabul etme zorunluluğu yoktur ve tamamen özgürsünüz.",
"noPenalty": "Bu reddin onaylanması herhangi bir cezaya yol açmaz; sadece durumu netleştirmek için 2 günlük bir karar verme penceresine girilmesini sağlar.",
"swipeText": "Reddi onaylamak için kaydırın"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "İletişim Detayları",
"contactDetailDescription": "Lütfen arama sırasında Habib Marriage uygulaması aracılığıyla tanıştırıldığınızı belirtin.",
"contactNotAvailable": "İletişim bilgileri henüz mevcut değil.",
"contactWarning": "Bu tanıtım anından itibaren, hazır olduğunuzu beyan etmek ve tanışma sürecini başlatmak için kişiyle veya saygıdeğer ailesiyle iletişime geçmek için 48 saatiniz (2 gün) olduğunu lütfen unutmayın. Bu aşamada, varlığınızı bildirmek için sadece ilk bir arama yeterlidir ve sonraki adımların planlanması (yüz yüze görüşme gibi) tamamen daha sonraki karşılıklı anlaşmalarınıza bağlıdır.\n\nBelirtilen süre içinde iletişime geçilmemesi sosyal açıdan saygısızlık olarak kabul edilebileceğinden, bu 2 gün içinde herhangi bir işlem yapılmaması durumunda tanıtılan eşleşme platform kuralları gereği kaldırılacaktır. Ayrıca bu durumun gelecekteki tanıtımlarda gecikmeler ve mali cezalar gibi kısıtlamalara yol açabileceğini de hatırlatırız."
},
"findingMatch": {
"title": "ARAMANIZ AKTİF",
"description": "Sistemimiz, kriterlerinize göre aktif olarak uyumlu ortaklar aramaktadır. Bu süreç zaman ve sabır gerektirir. Bir profil incelemeniz için hazır olduğunda sizi hemen bilgilendireceğiz.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "İletişimi onayla",
"noContactYet": "İletişim yok bildir",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Sürecin sorunsuz ilerlemesi için, karşı tarafın sizinle veya ailenizle ilk teması kurmak üzere 48 saatlik (2 günlük) bir süresi vardır. 2 gün sonra iletişim kurulmazsa, talebini reddetme veya bize ulaşmadığını bildirme seçeneğine sahipsiniz.",
"thankYouFeedback": "Geri bildiriminiz için teşekkür ederiz, nihai sonucu da bize bildirirseniz çok memnun oluruz.",
"marriageSuccess": "Anlaşmaya vardık",
"marriageFailure": "Anlaşmaya varamadık",
"outcomeTitle": "İletişiminizin sonucu ne oldu?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Ödeme",
"pay": "Öde"
},
"maleRejectionWarning": {
"title": "Reddetme Uyarısı",
"carefulReview": "Nihai kararınızı vermeden önce, lütfen diğer kişinin profilini tamamen ve tekrar dikkatlice inceleyin.",
"friendlyDelay": "Bu durumu reddetmenin bir sonraki eşleşme önerisinde gecikmeye neden olabileceğini lütfen unutmayın, ancak kabul etme zorunluluğu yoktur ve tamamen özgürsünüz.",
"noPenalty": "Bu reddin onaylanması herhangi bir cezaya yol açmaz; sadece durumu netleştirmek için 2 günlük bir karar verme penceresine girilmesini sağlar.",
"swipeText": "Reddi onaylamak için kaydırın"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "Ödeme",
"pay": "Öde"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Gizli (Yalnızca Danışmanlar)",
"startMatchFailed": "Eşleşme isteği gönderilemedi. Lütfen bağlantınızı kontrol edip tekrar deneyin.",
"moveToEnd": "Sona Taşı",
"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.",
"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.",
"familyMaritalTitle": "Aile Geçmişi, Medeni Durum ve Çocuklar",
"familyMaritalEstimate": "5 dakika",
"notAPriority": "Bu konu benim için bir öncelik değil.",
"writeOtherTraits": "Write other options...",
"fromAge": "En az",
"toAge": "En çok",
"familyResponsibilityTooltip": "Lütfen sorumluluğun türünü, süresini, mali desteğin veya bakımın boyutunu ve bunun gelecekteki ikamet yerinize, taşınmanıza veya gelecekteki evlilik hayatı koşullarınıza olası etkisini kısaca açıklayın.",
"childCustodyExplanationTooltip": "Lütfen velayet durumunu, çocuğun ziyaret/birlikte kalma planını, taşınma veya göç konusundaki olası kısıtlamaları ve ilgili mali yükümlülükleri kısaca açıklayın. Çocuğun ismini, diğer ebeveynin ismini veya gereksiz kişisel detayları belirtmekten kaçının.",
"currentMaritalStatusTooltip": "Bu özel alan, kullanıcının sunulan seçenekler arasından mevcut medeni durumunu ve ilişki geçmişini doğru bir şekilde beyan etmesini gerektirir."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "İletişim Detayları",
"contactDetailDescription": "Lütfen arama sırasında Habib Marriage uygulaması aracılığıyla tanıştırıldığınızı belirtin.",
"contactNotAvailable": "İletişim bilgileri henüz mevcut değil.",
"contactWarning": "Bu tanıtım anından itibaren, hazır olduğunuzu beyan etmek ve tanışma sürecini başlatmak için kişiyle veya saygıdeğer ailesiyle iletişime geçmek için 48 saatiniz (2 gün) olduğunu lütfen unutmayın. Bu aşamada, varlığınızı bildirmek için sadece ilk bir arama yeterlidir ve sonraki adımların planlanması (yüz yüze görüşme gibi) tamamen daha sonraki karşılıklı anlaşmalarınıza bağlıdır.\n\nBelirtilen süre içinde iletişime geçilmemesi sosyal açıdan saygısızlık olarak kabul edilebileceğinden, bu 2 gün içinde herhangi bir işlem yapılmaması durumunda tanıtılan eşleşme platform kuralları gereği kaldırılacaktır. Ayrıca bu durumun gelecekteki tanıtımlarda gecikmeler ve mali cezalar gibi kısıtlamalara yol açabileceğini de hatırlatırız."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/ul.json

@ -1,4 +1,20 @@
{
"Contact Received": "Rabta mil gaya",
"No Contact Received": "Rabta nahi mila",
"No contact has been made with you in any way or by any party.": "Aap se kisi bhi tarah ya kisi bhi taraf se rabta nahi kiya gaya hai.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Aap ke feedback ka shukriya. Humari support team is mamlay ki investigation karegi aur aap ko result notify karegi. Please review ke dauran sabar se intezar karein; humari support aap se rabta karegi.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "ئالاقىنى جەزملەشتۈرۈش",
"noContactYet": "ئالاقە قىلىنمىغانلىق دوكلاتى",
"afterTwoDays": "(after 2 days)",
"contactWarning": "مۇشۇ جەرياننىڭ ئوڭۇشلۇق ئېلىپ بېرىلىشى ئۈچۈن، قارشى تەرەپنىڭ سىز ياكى ئائىلىڭىزدىكىلەر بىلەن دەسلەپكى ئالاقىنى ئورنىتىشقا 48 سائەت (2 كۈن) ۋاقتى بار. ئەگەر 2 كۈندىن كېيىن ھېچقانداق ئالاقە ئورنىتىلمىسا، سىزنىڭ ئۇنىڭ تەلىپىنى رەت قىلىش ياكى بىزگە ئۇنىڭ ئالاقە قىلمىغانلىقىنى ئۇقتۇرۇش ھوقۇقىڭىز بار。",
"thankYouFeedback": "پىكىر بەرگىنىڭىزگە رەھمەت، ئاخىرقى نەتىجىنىمۇ بىزگە ئۇقتۇرۇپ قويسىڭىز بەكمۇ خۇشال بولىمىز.",
"marriageSuccess": "بىز ئۆزئارا كېلىشتۇق",
"marriageFailure": "بىز ئۆزئارا كېلىشەلمىدۇق",
"outcomeTitle": "ئالاقىڭىزنىڭ نەتىجىسى قانداق بولدى؟"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "مەسىلىگە يولۇقسىڭىز، WhatsApp ئارقىلىق قوللاش مۇتەخەسسىسلىرىمىز بىلەن ئالاقىلىشىڭ",
"supportSwipeText": "ئالاقە"
},
"findingMatch": {
"title": "YOUR SEARCH IS ACTIVE",
"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.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Khandani Pas-manzar, Azdawaji Haisiyat aur Bacche",
"familyMaritalEstimate": "5 minutes",
"notAPriority": "بۇ مەسىلە مەن ئۈچۈن مۇھىم ئەمەس.",
"writeOtherTraits": "Write other options...",
"fromAge": "ياشتىن",
"toAge": "ياشقىچە",
"familyResponsibilityTooltip": "قىسقىچە قىلىپ مەسئۇلىيەتنىڭ تۈرى، ئۇنىڭ داۋاملىشىش ۋاقتى، مالىيە ياكى بېقىش ياردىمىنىڭ دەرىجىسى ۋە ئۇنىڭ ياشاش ئورنىڭىز، كۆچۈش ياكى كەلگۈسى توي تۇرمۇش شارائىتىڭىزغا كۆرسىتىدىغان تەسىرىنى چۈشەندۈرۈڭ.",
"childCustodyExplanationTooltip": "بالىنىڭ بېقىش ھوقۇقى ھالىتى، بالىنىڭ بىللە تۇرۇش ۋاقتى، كۆچۈش ياكى كۆچمەن بولۇش چەكلىمىلىرى ۋە مۇناسىۋەتلىك مالىيە مەسئۇلىيەتلىرىنى قىسقىچە قىلىپ چۈشەندۈرۈڭ. بالىنىڭ ئىسمى، يەنە بىر تەرەپنىڭ ئىسمى ياكى زۆرۈر بولمىغان شەخسىي ئۇچۇرلارنى يېزىشتىن ساقلىنىڭ.",
"currentMaritalStatusTooltip": "بۇ شەخسىي قىسىم ئىشلەتكۈچىدىن تەمىنلەنگەن تاللاشلار ئىچىدىن نۆۋەتتىكى ئائىلە ئەھۋالى ۋە مۇناسىۋەت تارىخىنى توغرا مەلۇم قىلىشىنى تەلەپ قىلىدۇ."
"maleRejectionWarning": {
"title": "Rejection Warning",
"carefulReview": "Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.",
"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.",
"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.",
"swipeText": "Swipe to confirm rejection"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "ئالاقە تەپسىلاتى",
"contactDetailDescription": "تېلېفوندا ھەبىب نىكاھ ئەپى ئارقىلىق تونۇشتۇرۇلغانلىقىڭىزنى تىلغا ئېلىڭ.",
"contactNotAvailable": "ئالاقىلىشىش ئۇچۇرى تېخى يوق.",
"contactWarning": "شۇنى بىلىشىڭىز كېرەككى، بۇ تونۇشتۇرۇش ۋاقتىدىن باشلاپ، تەييارلىقىڭىزنى جاكارلاش ۋە تونۇشۇش جەريانىنى باشلاش ئۈچۈن، شۇ كىشى ياكى ئۇنىڭ ھۆرمەتلىك ئائىلىسىدىكىلەر بىلەن ألاقىلىشىشقا 48 سائەت (2 كۈن) ۋاقتىڭىز بار. بۇ باسقۇچتا، پەقەت مەۋجۇتلۇقىڭىزنى بىلدۈرۈش ئۈچۈن دەسلەپكى تېلېفون قىlsىڭىزلا كاپايە قىلىدۇ، يەنىمۇ أىلگىرىلىگەن قەدەملەرنى پىلانلاش (مەسىلەن، يۈزمۇ-يۈز كۆرۈشۈش) پۈتۈنلەي سىلەرنىڭ كېيىنكى ئۆز-ئارا كېلىشىمىڭلارغا باغلىق.\n\nبەلگىلەنگەن ۋاقىt ئىچىدە ئالاقىلاشمىغانلىق ئىجتىمائىي جەھەتتىن ھۆرمەتسىزلىك دەپ قارىلىشى مۇمكىن بولغاچقا، ئەگەر بۇ 2 كۈن ئىچىدە ھېچقانداق تەدبىر قوللىنىلمىسا، تونۇشتۇرۇلغان جۈپ سۇپىنىڭ قائىدىسىگە ئاساسەن ئۆچۈرۈۋېتىلىدۇ. بىز يەنە سىزگە شۇنى ئەسكەرتىمىزكى، بۇ مەسىلە كەلگۈسىدىكى تونۇشتۇرۇشنىڭ كېچىكىشى ۋە پۇل جازاسى قاتارلىق چەكلىمىلەرنى كەلتۈرۈپ چىقىرىشى مۇمكىن."
},
"findingMatch": {
"title": "YOUR SEARCH IS ACTIVE",
"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.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "ئالاقىنى جەزملەشتۈرۈش",
"noContactYet": "ئالاقە قىلىنمىغانلىق دوكلاتى",
"afterTwoDays": "(after 2 days)",
"contactWarning": "مۇشۇ جەرياننىڭ ئوڭۇشلۇق ئېلىپ بېرىلىشى ئۈچۈن، قارشى تەرەپنىڭ سىز ياكى ئائىلىڭىزدىكىلەر بىلەن دەسلەپكى ئالاقىنى ئورنىتىشقا 48 سائەت (2 كۈن) ۋاقتى بار. ئەگەر 2 كۈندىن كېيىن ھېچقانداق ئالاقە ئورنىتىلمىسا، سىزنىڭ ئۇنىڭ تەلىپىنى رەت قىلىش ياكى بىزگە ئۇنىڭ ئالاقە قىلمىغانلىقىنى ئۇقتۇرۇش ھوقۇقىڭىز بار。",
"thankYouFeedback": "پىكىر بەرگىنىڭىزگە رەھمەت، ئاخىرقى نەتىجىنىمۇ بىزگە ئۇقتۇرۇپ قويسىڭىز بەكمۇ خۇشال بولىمىز.",
"marriageSuccess": "بىز ئۆزئارا كېلىشتۇق",
"marriageFailure": "بىز ئۆزئارا كېلىشەلمىدۇق",
"outcomeTitle": "ئالاقىڭىزنىڭ نەتىجىسى قانداق بولدى؟"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "تۆلەش",
"pay": "تۆلەش"
},
"maleRejectionWarning": {
"title": "Rejection Warning",
"carefulReview": "Before making a final decision, please carefully review the other person's profile again completely to make an informed choice.",
"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.",
"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.",
"swipeText": "Swipe to confirm rejection"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "تۆلەش",
"pay": "تۆلەش"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Khandani Pas-manzar, Azdawaji Haisiyat aur Bacche",
"familyMaritalEstimate": "5 minutes",
"notAPriority": "بۇ مەسىلە مەن ئۈچۈن مۇھىم ئەمەس.",
"writeOtherTraits": "Write other options...",
"fromAge": "ياشتىن",
"toAge": "ياشقىچە",
"familyResponsibilityTooltip": "قىسقىچە قىلىپ مەسئۇلىيەتنىڭ تۈرى، ئۇنىڭ داۋاملىشىش ۋاقتى، مالىيە ياكى بېقىش ياردىمىنىڭ دەرىجىسى ۋە ئۇنىڭ ياشاش ئورنىڭىز، كۆچۈش ياكى كەلگۈسى توي تۇرمۇش شارائىتىڭىزغا كۆرسىتىدىغان تەسىرىنى چۈشەندۈرۈڭ.",
"childCustodyExplanationTooltip": "بالىنىڭ بېقىش ھوقۇقى ھالىتى، بالىنىڭ بىللە تۇرۇش ۋاقتى، كۆچۈش ياكى كۆچمەن بولۇش چەكلىمىلىرى ۋە مۇناسىۋەتلىك مالىيە مەسئۇلىيەتلىرىنى قىسقىچە قىلىپ چۈشەندۈرۈڭ. بالىنىڭ ئىسمى، يەنە بىر تەرەپنىڭ ئىسمى ياكى زۆرۈر بولمىغان شەخسىي ئۇچۇرلارنى يېزىشتىن ساقلىنىڭ.",
"currentMaritalStatusTooltip": "بۇ شەخسىي قىسىم ئىشلەتكۈچىدىن تەمىنلەنگەن تاللاشلار ئىچىدىن نۆۋەتتىكى ئائىلە ئەھۋالى ۋە مۇناسىۋەت تارىخىنى توغرا مەلۇم قىلىشىنى تەلەپ قىلىدۇ."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "ئالاقە تەپسىلاتى",
"contactDetailDescription": "تېلېفوندا ھەبىب نىكاھ ئەپى ئارقىلىق تونۇشتۇرۇلغانلىقىڭىزنى تىلغا ئېلىڭ.",
"contactNotAvailable": "ئالاقىلىشىش ئۇچۇرى تېخى يوق.",
"contactWarning": "شۇنى بىلىشىڭىز كېرەككى، بۇ تونۇشتۇرۇش ۋاقتىدىن باشلاپ، تەييارلىقىڭىزنى جاكارلاش ۋە تونۇشۇش جەريانىنى باشلاش ئۈچۈن، شۇ كىشى ياكى ئۇنىڭ ھۆرمەتلىك ئائىلىسىدىكىلەر بىلەن ألاقىلىشىشقا 48 سائەت (2 كۈن) ۋاقتىڭىز بار. بۇ باسقۇچتا، پەقەت مەۋجۇتلۇقىڭىزنى بىلدۈرۈش ئۈچۈن دەسلەپكى تېلېفون قىlsىڭىزلا كاپايە قىلىدۇ، يەنىمۇ أىلگىرىلىگەن قەدەملەرنى پىلانلاش (مەسىلەن، يۈزمۇ-يۈز كۆرۈشۈش) پۈتۈنلەي سىلەرنىڭ كېيىنكى ئۆز-ئارا كېلىشىمىڭلارغا باغلىق.\n\nبەلگىلەنگەن ۋاقىt ئىچىدە ئالاقىلاشمىغانلىق ئىجتىمائىي جەھەتتىن ھۆرمەتسىزلىك دەپ قارىلىشى مۇمكىن بولغاچقا، ئەگەر بۇ 2 كۈن ئىچىدە ھېچقانداق تەدبىر قوللىنىلمىسا، تونۇشتۇرۇلغان جۈپ سۇپىنىڭ قائىدىسىگە ئاساسەن ئۆچۈرۈۋېتىلىدۇ. بىز يەنە سىزگە شۇنى ئەسكەرتىمىزكى، بۇ مەسىلە كەلگۈسىدىكى تونۇشتۇرۇشنىڭ كېچىكىشى ۋە پۇل جازاسى قاتارلىق چەكلىمىلەرنى كەلتۈرۈپ چىقىرىشى مۇمكىن."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/ur.json

@ -1,4 +1,20 @@
{
"Contact Received": "رابطہ موصول ہوا",
"No Contact Received": "کوئی رابطہ موصول نہیں ہوا",
"No contact has been made with you in any way or by any party.": "آپ سے کسی بھی طرح یا کسی بھی فریق کی طرف سے رابطہ نہیں کیا گیا ہے۔",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "آپ کی رائے کا شکریہ۔ ہماری سپورٹ تیم اس معاملے کی جانچ کرے گی اور آپ کو نتیجے سے مطلع کرے گی۔ براہ کرم جائزے کے دوران صبر سے انتظار کریں؛ ہماری سپورٹ ٹیم آپ سے رابطہ کرے گی۔",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "رابطے کی تصدیق کریں",
"noContactYet": "رابطہ نہ ہونے کی رپورٹ",
"afterTwoDays": "(after 2 days)",
"contactWarning": "عمل کو آسانی سے جاری رکھنے کے لیے، دوسرے فریق کے پاس آپ یا آپ کے خاندان سے ابتدائی رابطہ کرنے کے لیے 48 گھنٹے (2 دن) کا وقت ہے۔ اگر 2 دن کے بعد کوئی رابطہ قائم نہیں ہوتا ہے، تو آپ کے پاس اس کی درخواست کو مسترد کرنے یا ہمیں مطلع کرنے کا اختیار ہے کہ اس نے رابطہ نہیں کیا ہے۔",
"thankYouFeedback": "فیڈ بیک دینے کا شکریہ، ہمیں بہت خوشی ہوگی اگر آپ ہمیں حتمی نتیجہ بھی بتائیں۔",
"marriageSuccess": "ہماری باہمی رضامندی ہو گئی",
"marriageFailure": "ہماری باہمی رضامندی نہیں ہو سکی",
"outcomeTitle": "آپ کے رابطے کا کیا نتیجہ رہا?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "کسی بھی مسئلے کی صورت میں، واٹس ایپ پر ہمارے سپورٹ ماہرین سے رابطہ کریں",
"supportSwipeText": "رابطہ"
},
"findingMatch": {
"title": "آپ کی تلاش فعال ہے",
"description": "ہمارا سسٹم آپ کے معیار کی بنیاد پر فعال طور پر ہم آہنگ شراکت داروں کی تلاش کر رہا ہے۔ اس عمل میں وقت اور صبر کی ضرورت ہے۔ جیسے ہی کوئی پروفائل آپ کے جائزے کے لیے تیار ہوگا ہم آپ کو فوری مطلع کریں گے۔",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "نجی (صرف مشیران)",
"startMatchFailed": "میچ کی درخواست بھیجنے میں ناکامی۔ برائے مہربانی اپنا کنکشن چیک کریں اور دوبارہ کوشش کریں۔",
"moveToEnd": "آخر میں منتقل کریں",
"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.",
"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.",
"familyMaritalTitle": "خاندانی پس منظر، ازدواجی حیثیت اور بچے",
"familyMaritalEstimate": "5 منٹ",
"notAPriority": "یہ موضوع میرے لیے ترجیح نہیں ہے۔",
"writeOtherTraits": "Write other options...",
"fromAge": "سے",
"toAge": "تک",
"familyResponsibilityTooltip": "براہ کرم ذمہ داری کی قسم، اس کا دورانیہ، مالی یا دیکھ بھال کی امداد کی حد، اور رہائش گاہ، منتقلی، یا مستقبل کی ازدواجی زندگی کے حالات پر اس کے ممکنہ اثرات کو مختصراً واضح کریں۔",
"childCustodyExplanationTooltip": "براہ کرم بچے کی تحویل کی صورتحال، بچے کی موجودگی کے شیڈول، رہائش کی تبدیلی یا نقل مکانی پر ممکنہ پابندیوں، اور متعلقہ مالی ذمہ داریوں کو مختصراً واضح کریں۔ بچے کا نام، دوسرے والدین کا نام یا غیر ضروری ذاتی تفصیلات درج کرنے سے گریز کریں۔",
"currentMaritalStatusTooltip": "اس نجی فیلڈ میں صارف کو فراہم کردہ مخصوص اختیارات میں سے اپنی موجودہ ازدواجی حیثیت اور تعلقات کی تاریخ کا درست اعلان کرنے کی ضرورت ہوتی ہے۔"
"maleRejectionWarning": {
"title": "پیشکش مسترد کرنے کی وارننگ",
"carefulReview": "آخری فیصلہ کرنے سے پہلے، براہ کرم دوسرے شخص کا پروفائل مکمل طور پر اور دوبارہ غور سے پڑھیں تاکہ باخبر فیصلہ کیا جا سکے۔",
"friendlyDelay": "براہ کرم نوٹ کریں کہ اس کیس کو مسترد کرنے سے اگلے میچ کی سفارش میں کچھ تاخیر ہو سکتی ہے، لیکن قبول کرنے کی کوئی مجبوری نہیں ہے اور آپ مکمل طور پر آزاد ہیں۔",
"noPenalty": "اس مسترد کو رجسٹر کرنے سے کوئی جرمانہ نہیں ہوگا؛ بلکہ یہ صرف صورتحال کو حتمی شکل دینے کے لیے 2 دن کے فیصلے کی مدت میں داخل کرے گا۔",
"swipeText": "مسترد کرنے کی تصدیق کے لیے سوائپ کریں"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "رابطے کی تفصیل",
"contactDetailDescription": "براہ کرم کال کے دوران ذکر کریں کہ آپ کا تعارف حبیب میرج ایپ کے ذریعے کرایا گیا تھا۔",
"contactNotAvailable": "رابطے کی معلومات ابھی دستیاب نہیں ہیں۔",
"contactWarning": "براہ کرم مطلع رہیں کہ اس تعارف کے وقت سے، آپ کے پاس اپنی تیاری کا اعلان کرنے اور جان پہچان کا عمل شروع کرنے کے لیے اس شخص یا ان کے معزز خاندان سے رابطہ کرنے کے لیے 48 گھنٹے (2 دن) کا وقت ہے۔ اس مرحلے پر، اپنی موجودگی کا اعلان کرنے کے لیے صرف ایک ابتدائی کال ہی کافی ہے، اور اگلے مراحل کی منصوبہ بندی (جیسے آمنے سامنے ملاقات) مکمل طور پر آپ کے بعد کے باہمی معاہدوں پر بھی منحصر ہے۔\n\nچونکہ مقررہ وقت کے اندر رابطہ کرنے میں ناکامی کو سماجی طور پر بے ادبی سمجھا جا سکتا ہے، اگر ان 2 دنوں کے اندر کوئی کارروائی نہیں کی گئی تو متعارف کرایا گیا میچ پلیٹ فارم کے قوانین کے مطابق ہٹا جائے گا۔ ہم آپ کو یہ بھی یاد دلاتے ہیں کہ اس مسئلے کی وجہ سے مستقبل کے تعارف میں تاخیر اور مالی جرمانے جیسی پابندیاں لگ سکتی ہیں۔"
},
"findingMatch": {
"title": "آپ کی تلاش فعال ہے",
"description": "ہمارا سسٹم آپ کے معیار کی بنیاد پر فعال طور پر ہم آہنگ شراکت داروں کی تلاش کر رہا ہے۔ اس عمل میں وقت اور صبر کی ضرورت ہے۔ جیسے ہی کوئی پروفائل آپ کے جائزے کے لیے تیار ہوگا ہم آپ کو فوری مطلع کریں گے۔",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "رابطے کی تصدیق کریں",
"noContactYet": "رابطہ نہ ہونے کی رپورٹ",
"afterTwoDays": "(after 2 days)",
"contactWarning": "عمل کو آسانی سے جاری رکھنے کے لیے، دوسرے فریق کے پاس آپ یا آپ کے خاندان سے ابتدائی رابطہ کرنے کے لیے 48 گھنٹے (2 دن) کا وقت ہے۔ اگر 2 دن کے بعد کوئی رابطہ قائم نہیں ہوتا ہے، تو آپ کے پاس اس کی درخواست کو مسترد کرنے یا ہمیں مطلع کرنے کا اختیار ہے کہ اس نے رابطہ نہیں کیا ہے۔",
"thankYouFeedback": "فیڈ بیک دینے کا شکریہ، ہمیں بہت خوشی ہوگی اگر آپ ہمیں حتمی نتیجہ بھی بتائیں۔",
"marriageSuccess": "ہماری باہمی رضامندی ہو گئی",
"marriageFailure": "ہماری باہمی رضامندی نہیں ہو سکی",
"outcomeTitle": "آپ کے رابطے کا کیا نتیجہ رہا?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "ادائیگی",
"pay": "ادائیگی کریں"
},
"maleRejectionWarning": {
"title": "پیشکش مسترد کرنے کی وارننگ",
"carefulReview": "آخری فیصلہ کرنے سے پہلے، براہ کرم دوسرے شخص کا پروفائل مکمل طور پر اور دوبارہ غور سے پڑھیں تاکہ باخبر فیصلہ کیا جا سکے۔",
"friendlyDelay": "براہ کرم نوٹ کریں کہ اس کیس کو مسترد کرنے سے اگلے میچ کی سفارش میں کچھ تاخیر ہو سکتی ہے، لیکن قبول کرنے کی کوئی مجبوری نہیں ہے اور آپ مکمل طور پر آزاد ہیں۔",
"noPenalty": "اس مسترد کو رجسٹر کرنے سے کوئی جرمانہ نہیں ہوگا؛ بلکہ یہ صرف صورتحال کو حتمی شکل دینے کے لیے 2 دن کے فیصلے کی مدت میں داخل کرے گا۔",
"swipeText": "مسترد کرنے کی تصدیق کے لیے سوائپ کریں"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "ادائیگی",
"pay": "ادائیگی کریں"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "نجی (صرف مشیران)",
"startMatchFailed": "میچ کی درخواست بھیجنے میں ناکامی۔ برائے مہربانی اپنا کنکشن چیک کریں اور دوبارہ کوشش کریں۔",
"moveToEnd": "آخر میں منتقل کریں",
"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.",
"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.",
"familyMaritalTitle": "خاندانی پس منظر، ازدواجی حیثیت اور بچے",
"familyMaritalEstimate": "5 منٹ",
"notAPriority": "یہ موضوع میرے لیے ترجیح نہیں ہے۔",
"writeOtherTraits": "Write other options...",
"fromAge": "سے",
"toAge": "تک",
"familyResponsibilityTooltip": "براہ کرم ذمہ داری کی قسم، اس کا دورانیہ، مالی یا دیکھ بھال کی امداد کی حد، اور رہائش گاہ، منتقلی، یا مستقبل کی ازدواجی زندگی کے حالات پر اس کے ممکنہ اثرات کو مختصراً واضح کریں۔",
"childCustodyExplanationTooltip": "براہ کرم بچے کی تحویل کی صورتحال، بچے کی موجودگی کے شیڈول، رہائش کی تبدیلی یا نقل مکانی پر ممکنہ پابندیوں، اور متعلقہ مالی ذمہ داریوں کو مختصراً واضح کریں۔ بچے کا نام، دوسرے والدین کا نام یا غیر ضروری ذاتی تفصیلات درج کرنے سے گریز کریں۔",
"currentMaritalStatusTooltip": "اس نجی فیلڈ میں صارف کو فراہم کردہ مخصوص اختیارات میں سے اپنی موجودہ ازدواجی حیثیت اور تعلقات کی تاریخ کا درست اعلان کرنے کی ضرورت ہوتی ہے۔"
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "رابطے کی تفصیل",
"contactDetailDescription": "براہ کرم کال کے دوران ذکر کریں کہ آپ کا تعارف حبیب میرج ایپ کے ذریعے کرایا گیا تھا۔",
"contactNotAvailable": "رابطے کی معلومات ابھی دستیاب نہیں ہیں۔",
"contactWarning": "براہ کرم مطلع رہیں کہ اس تعارف کے وقت سے، آپ کے پاس اپنی تیاری کا اعلان کرنے اور جان پہچان کا عمل شروع کرنے کے لیے اس شخص یا ان کے معزز خاندان سے رابطہ کرنے کے لیے 48 گھنٹے (2 دن) کا وقت ہے۔ اس مرحلے پر، اپنی موجودگی کا اعلان کرنے کے لیے صرف ایک ابتدائی کال ہی کافی ہے، اور اگلے مراحل کی منصوبہ بندی (جیسے آمنے سامنے ملاقات) مکمل طور پر آپ کے بعد کے باہمی معاہدوں پر بھی منحصر ہے۔\n\nچونکہ مقررہ وقت کے اندر رابطہ کرنے میں ناکامی کو سماجی طور پر بے ادبی سمجھا جا سکتا ہے، اگر ان 2 دنوں کے اندر کوئی کارروائی نہیں کی گئی تو متعارف کرایا گیا میچ پلیٹ فارم کے قوانین کے مطابق ہٹا جائے گا۔ ہم آپ کو یہ بھی یاد دلاتے ہیں کہ اس مسئلے کی وجہ سے مستقبل کے تعارف میں تاخیر اور مالی جرمانے جیسی پابندیاں لگ سکتی ہیں۔"
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

274
src/translations/locales/uz.json

@ -1,4 +1,20 @@
{
"Contact Received": "Aloqa qabul qilindi",
"No Contact Received": "Aloqa qabul qilinmadi",
"No contact has been made with you in any way or by any party.": "Siz bilan hech qanday tarzda yoki biron bir tomonlama aloqa o'rnatilmagan.",
"Thank you for your feedback. Our support team will investigate the matter and notify you of the result. Please wait patiently during the review; our support will contact you.": "Fikr-mulohazangiz uchun rahmat. Bizning qo'llab-quvvatlash jamoamiz masalani o'rganib chiqadi va natija haqida sizni xabardor qiladi. Iltimos, ko'rib chiqish paytida sabr bilan kuting; bizning qo'llab-quvvatlash xizmati siz bilan bog'lanadi.",
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Aloqani tasdiqlash",
"noContactYet": "Aloqa yo'qligi haqida hisobot",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Jarayon muammosiz davom etishi uchun qarshi tomonda siz yoki oilangiz bilan dastlabki aloqani o'rnatish uchun 48 soatlik (2 kunlik) vaqt bor. Agar 2 kundan keyin aloqa o'rnatilmasa, sizda uning so'rovini rad etish yoki bizga uning bog'lanmagani haqida xabar berish imkoniyati mavjud.",
"thankYouFeedback": "Fikr-mulohazalaringiz uchun rahmat, yakuniy natijani ham bizga ma'lum qilsangiz juda xursand bo'lamiz.",
"marriageSuccess": "Biz kelishuvga erishdik",
"marriageFailure": "Biz kelishuvga erisha olmadik",
"outcomeTitle": "Aloqangizning natijasi nima bo'ldi?"
},
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
@ -28,6 +44,14 @@
"supportDescription": "Muammoga duch kelsangiz, WhatsApp orqali qo'llab-quvvatlash mutaxassislarimiz bilan bog'laning",
"supportSwipeText": "Aloqa"
},
"findingMatch": {
"title": "QIDIRUVINGIZ FAOLLASHTIRILDI",
"description": "Tizimimiz sizning mezonlaringiz asosida mos sheriklarni faol ravishda qidirmoqda. Ushbu jarayon vaqt va sabr-toqat talab qiladi. Profil ko'rib chiqishga tayyor bo'lishi bilan sizga darhol xabar beramiz.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
@ -38,50 +62,12 @@
"videoAlt": "video",
"playAlt": "play"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Oila tarixi, oilaviy ahvol va bolalar",
"familyMaritalEstimate": "5 daqiqa",
"notAPriority": "Bu mavzu men uchun ustuvor emas.",
"writeOtherTraits": "Write other options...",
"fromAge": "Yoshdan",
"toAge": "Yoshgacha",
"familyResponsibilityTooltip": "Iltimos, mas'uliyat turini, uning davomiyligini, moliyaviy yoki g'amxo'rlik yordamining darajasini hamda uning yashash joyi, ko'chish yoki kelajakdagi oilaviy hayot sharoitlariga ehtimoliy ta'sirini qisqacha tushuntiring.",
"childCustodyExplanationTooltip": "Iltimos, vasiylik holatini, bolaning uchrashuv rejalarini, yashash joyini o'zgartirish yoki ko'chish bilan bog'liq ehtimoliy cheklovlarni hamda tegishli moliyaviy majburiyatlarni qisqacha tushuntiring. Bolaning ismi, boshqa ota/onaning ismi yoki keraksiz shaxsiy ma'lumotlarni yozishdan saqlaning.",
"currentMaritalStatusTooltip": "Ushbu shaxsiy maydon foydalanuvchidan taqdim etilgan variantlardan joriy oilaviy ahvoli va munosabatlar tarixini aniq e'lon qilishini talab qiladi."
"maleRejectionWarning": {
"title": "Rad etish ogohlantirishi",
"carefulReview": "Yakuniy qarorni qabul qilishdan oldin, iltimos, boshqa odamning profilini to'liq va qaytadan diqqat bilan o'rganib chiqing.",
"friendlyDelay": "Iltimos, ushbu holatni rad etish keyingi nomzodni tavsiya qilishni biroz kechiktirishi mumkinligini hisobga oling, ammo qabul qilish majburiy emas va siz butunlay erkinsiz.",
"noPenalty": "Ushbu rad etishni tasdiqlash hech qanday jazoga olib kelmaydi; faqat holatni yakunlash uchun 2 kunlik qaror qabul qilish muddatini boshlaydi.",
"swipeText": "Rad etishni tasdiqlash uchun suring"
},
"match": {
"title": "New Match",
@ -130,96 +116,6 @@
"femaleConsentCheckbox": "I certify that the lady and her family have thoroughly reviewed this profile and grant preliminary consent for further communication.",
"femaleConsentCheckboxLabel": "I confirm the family has **reviewed this profile** and **consents to communicate**."
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Aloqa ma'lumotlari",
"contactDetailDescription": "Iltimos, qo'ng'iroq paytida sizni Habib Marriage ilovasi orqali tanishtirishganini aytib o'ting.",
"contactNotAvailable": "Aloqa ma'lumotlari hali mavjud emas.",
"contactWarning": "Eslatib o'tamiz, ushbu tanishtiruv vaqtidan boshlab, tayyor ekanligingizni bildirish va tanishish jarayonini boshlash uchun ushbu shaxs yoki uning hurmatli oilasi bilan bog'lanish uchun 48 soat (2 kun) vaqtingiz bor. Ushbu bosqichda faqat mavjudligingizni bildirish va keyingi qadamlarni rejalashtirish (masalan, yuzma-yuz uchrashuv) to'liq sizning keyingi o'zaro kelishuvlaringizga bog'liq.\n\nBelgilangan vaqt ichida bog'lanmaslik ijtimoiy jihatdan hurmatsizlik deb hisoblanishi mumkinligi sababli, agar ushbu 2 kun ichida hech qanday chora ko'rilmasa, taqdim etilgan moslik platforma qoidalariga muvofiq o'chirib tashlanadi. Shuningdek, ushbu muammo kelajakdagi tanishtirishlarning kechikishi va moliyaviy jarimalar kabi cheklovlarga olib kelishi mumkinligini eslatib o'tamiz."
},
"findingMatch": {
"title": "QIDIRUVINGIZ FAOLLASHTIRILDI",
"description": "Tizimimiz sizning mezonlaringiz asosida mos sheriklarni faol ravishda qidirmoqda. Ushbu jarayon vaqt va sabr-toqat talab qiladi. Profil ko'rib chiqishga tayyor bo'lishi bilan sizga darhol xabar beramiz.",
"advisorTitle": "Get an advisor",
"advisorDescription": "Not sure what to do next? Our psychology section is here to guide you at every step.",
"getAdvisor": "Get Advisor",
"editProfile": "Edit Profile"
},
"candidateContact": {
"imageAlt": "Selected candidate contact status",
"title": "The selected candidate will contact your family shortly.",
"contacted": "Aloqani tasdiqlash",
"noContactYet": "Aloqa yo'qligi haqida hisobot",
"afterTwoDays": "(after 2 days)",
"contactWarning": "Jarayon muammosiz davom etishi uchun qarshi tomonda siz yoki oilangiz bilan dastlabki aloqani o'rnatish uchun 48 soatlik (2 kunlik) vaqt bor. Agar 2 kundan keyin aloqa o'rnatilmasa, sizda uning so'rovini rad etish yoki bizga uning bog'lanmagani haqida xabar berish imkoniyati mavjud.",
"thankYouFeedback": "Fikr-mulohazalaringiz uchun rahmat, yakuniy natijani ham bizga ma'lum qilsangiz juda xursand bo'lamiz.",
"marriageSuccess": "Biz kelishuvga erishdik",
"marriageFailure": "Biz kelishuvga erisha olmadik",
"outcomeTitle": "Aloqangizning natijasi nima bo'ldi?"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"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",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "To'lov",
"pay": "To'lash"
},
"maleRejectionWarning": {
"title": "Rad etish ogohlantirishi",
"carefulReview": "Yakuniy qarorni qabul qilishdan oldin, iltimos, boshqa odamning profilini to'liq va qaytadan diqqat bilan o'rganib chiqing.",
"friendlyDelay": "Iltimos, ushbu holatni rad etish keyingi nomzodni tavsiya qilishni biroz kechiktirishi mumkinligini hisobga oling, ammo qabul qilish majburiy emas va siz butunlay erkinsiz.",
"noPenalty": "Ushbu rad etishni tasdiqlash hech qanday jazoga olib kelmaydi; faqat holatni yakunlash uchun 2 kunlik qaror qabul qilish muddatini boshlaydi.",
"swipeText": "Rad etishni tasdiqlash uchun suring"
},
"onboarding": {
"submitProcess": "Submit Process",
"termsAndConditions": "terms & conditions",
@ -264,8 +160,116 @@
"back": "Back",
"accept": "Accept"
},
"paymentModal": {
"title": "Verification & Subscription Activation",
"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.",
"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.",
"swipeToPay": "Swipe to pay 50 Habib Coins",
"insufficientCoins": "Insufficient coin balance. Please recharge your account.",
"activeFor3Months": "Valid for 3 months",
"cost": "50 Coins",
"close": "Exit",
"payment": "To'lov",
"pay": "To'lash"
},
"questions": {
"profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps",
"requiredStepsDescription": "Please complete the required information so we can find suitable matches for you",
"requiredStepsDescriptionCompleted": "You can now submit your request so we can start finding the right match for you",
"requiredStepsProgress": "{completed} of {total} required steps completed",
"findMatches": "Find Matches",
"findingMatch": "Submit for Finding Match",
"optionalInfoPromptTitle": "Important Note",
"optionalInfoPromptDescription": "You've completed all required fields. However, filling in all sections will help us find better matches for you",
"completeNecessaryForms": "(Complete Required Forms)",
"openQuestion": "Open {title}",
"answerAtYourOwnPace": "Answer at Your Own Pace",
"answerAtYourOwnPaceDescription": "You can pause the survey anytime and resume later. Your progress is saved automatically.",
"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.",
"testIntroStart": "Start",
"testIntroEstimateLabel": "Estimate time",
"testIntroBullets": {
"personality": [
"Do you struggle to understand the underlying psychological drivers that dictate your interpersonal connections and communication barriers?",
"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.",
"Do you operate based on superficial behavioral adaptations, or are you aware of the deep \"source traits\" that fundamentally control your decision-making processes?"
],
"glasser": [
"Understanding your five basic needs helps you recognize what truly drives your behavior in relationships.",
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
]
},
"privateFieldNotice": "Private (Advisors Only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End",
"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.",
"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.",
"familyMaritalTitle": "Oila tarixi, oilaviy ahvol va bolalar",
"familyMaritalEstimate": "5 daqiqa",
"notAPriority": "Bu mavzu men uchun ustuvor emas.",
"writeOtherTraits": "Write other options...",
"fromAge": "Yoshdan",
"toAge": "Yoshgacha",
"familyResponsibilityTooltip": "Iltimos, mas'uliyat turini, uning davomiyligini, moliyaviy yoki g'amxo'rlik yordamining darajasini hamda uning yashash joyi, ko'chish yoki kelajakdagi oilaviy hayot sharoitlariga ehtimoliy ta'sirini qisqacha tushuntiring.",
"childCustodyExplanationTooltip": "Iltimos, vasiylik holatini, bolaning uchrashuv rejalarini, yashash joyini o'zgartirish yoki ko'chish bilan bog'liq ehtimoliy cheklovlarni hamda tegishli moliyaviy majburiyatlarni qisqacha tushuntiring. Bolaning ismi, boshqa ota/onaning ismi yoki keraksiz shaxsiy ma'lumotlarni yozishdan saqlaning.",
"currentMaritalStatusTooltip": "Ushbu shaxsiy maydon foydalanuvchidan taqdim etilgan variantlardan joriy oilaviy ahvoli va munosabatlar tarixini aniq e'lon qilishini talab qiladi."
},
"rejectionNotice": {
"title": "Your request was rejected",
"message": "Your request was rejected by the lady. You will be introduced to other candidates in the future."
}
},
"requestAccepted": {
"imageAlt": "Request accepted",
"title": "Request Accepted",
"description": "You can now view their family's contact details and arrange further steps.",
"viewContact": "View Contact",
"penalty": "Please note: Failure to contact within 2 days may result in a penalty",
"profileLocked": "Profile is locked",
"lockedDescription": "You can't edit your profile while we're searching for matches",
"titleFemale": "Request Approved",
"titleMalePaymentDone": "Contact info released",
"titleMalePaymentPending": "Request approved!",
"primaryFemale": "Report no contact",
"primaryMale": "View profile",
"secondaryFemale": "Record call result",
"secondaryMalePaymentDone": "View contact number",
"secondaryMalePaymentPending": "Pay and get contact",
"titleContactReleased": "Contact Information Released",
"titleMaleApproved": "Request Approved!",
"actionReportNoContact": "Report No Contact",
"actionViewProfile": "View Profile",
"actionSubmitCallResult": "Submit Call Result",
"actionViewContact": "View Contact Details",
"actionPayAndGetContact": "Pay & Get Contact",
"contactDetailTitle": "Aloqa ma'lumotlari",
"contactDetailDescription": "Iltimos, qo'ng'iroq paytida sizni Habib Marriage ilovasi orqali tanishtirishganini aytib o'ting.",
"contactNotAvailable": "Aloqa ma'lumotlari hali mavjud emas.",
"contactWarning": "Eslatib o'tamiz, ushbu tanishtiruv vaqtidan boshlab, tayyor ekanligingizni bildirish va tanishish jarayonini boshlash uchun ushbu shaxs yoki uning hurmatli oilasi bilan bog'lanish uchun 48 soat (2 kun) vaqtingiz bor. Ushbu bosqichda faqat mavjudligingizni bildirish va keyingi qadamlarni rejalashtirish (masalan, yuzma-yuz uchrashuv) to'liq sizning keyingi o'zaro kelishuvlaringizga bog'liq.\n\nBelgilangan vaqt ichida bog'lanmaslik ijtimoiy jihatdan hurmatsizlik deb hisoblanishi mumkinligi sababli, agar ushbu 2 kun ichida hech qanday chora ko'rilmasa, taqdim etilgan moslik platforma qoidalariga muvofiq o'chirib tashlanadi. Shuningdek, ushbu muammo kelajakdagi tanishtirishlarning kechikishi va moliyaviy jarimalar kabi cheklovlarga olib kelishi mumkinligini eslatib o'tamiz."
},
"requestSent": {
"title": "Request Sent",
"description": "Your request has been sent. Once the lady reviews your request, you will be notified.",
"matchProfile": "View More Details",
"profileLocked": "Profile is locked"
},
"sheets": {
"informationSheet": "Information sheet",
"callResult": "Call result",
"selectCallResult": "Select call result",
"callOptions": [
"Not a good personal fit",
"No mutual interest",
"Different expectations",
"No connection felt",
"Location not suitable",
"Other reasons"
],
"dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..."
},
"spouseCriteriaConfidentialNotice": "⚠️ This section is completely confidential and is only used for matching and review by advisors."
}

1015
src/translations/locales/zh.json
File diff suppressed because it is too large
View File

2
src/types/window.d.ts

@ -9,6 +9,8 @@ declare global {
interface FlutterResponseEvent {
action: string;
success: boolean;
/** Compatibility payload used by the uppercase Flutter event protocol. */
payload?: FlutterResponseEvent["data"];
/** Top-level status for multi-step actions (download_file, upload_file, …) */
status?: string;
/** Top-level error/info message */

Loading…
Cancel
Save