Browse Source

feat: implement multi-language support and core marriage matchmaking workflow including question flows and request management

front-test-2
ghorbani 4 weeks ago
parent
commit
3ce51853ac
  1. 7
      AGENTS.md
  2. 4
      src/app/[lang]/layout.tsx
  3. 2
      src/app/[lang]/questions-list/[slug]/page.tsx
  4. 2
      src/app/candidate-contact/page.tsx
  5. 4
      src/app/finding-match/page.tsx
  6. 4
      src/app/intro/page.tsx
  7. 2
      src/app/new-match/page.tsx
  8. 4
      src/app/new-match/profile/page.tsx
  9. 4
      src/app/questions-list/[slug]/page.tsx
  10. 32
      src/app/questions-list/[slug]/question-detail-client.tsx
  11. 4
      src/app/questions-list/page.tsx
  12. 4
      src/app/request-accepted/page.tsx
  13. 2
      src/app/request-sent/page.tsx
  14. 4
      src/components/questions/question-card.tsx
  15. 40
      src/components/questions/question-date.tsx
  16. 2
      src/components/questions/question-number.tsx
  17. 2
      src/components/questions/required-steps-card.tsx
  18. 2
      src/components/questions/test-loading-screen.tsx
  19. 4
      src/components/questions/test-questions-flow.tsx
  20. 4
      src/components/sliders/slider-page.tsx
  21. 4
      src/components/ui/button.tsx
  22. 2
      src/components/ui/call-result-sheet.tsx
  23. 2
      src/components/ui/dismiss-reason-sheet.tsx
  24. 2
      src/components/ui/female-consent-sheet.tsx
  25. 2
      src/components/ui/information-sheet.tsx
  26. 4
      src/components/ui/language-switcher.tsx
  27. 2
      src/components/ui/navigation-button.tsx
  28. 34
      src/components/ui/report-actions-sheet.tsx
  29. 6
      src/data/question-data.ts
  30. 0
      src/data/questions/en.json
  31. 0
      src/data/questions/fa.json
  32. 31
      src/i18n/config.ts
  33. 279
      src/i18n/dictionaries.ts
  34. 68
      src/translations/config.ts
  35. 59
      src/translations/dictionaries.ts
  36. 123
      src/translations/locales/ar.json
  37. 123
      src/translations/locales/az.json
  38. 123
      src/translations/locales/bn.json
  39. 123
      src/translations/locales/da.json
  40. 123
      src/translations/locales/de.json
  41. 123
      src/translations/locales/en.json
  42. 123
      src/translations/locales/es.json
  43. 123
      src/translations/locales/fa.json
  44. 123
      src/translations/locales/fr.json
  45. 123
      src/translations/locales/gu.json
  46. 123
      src/translations/locales/ha.json
  47. 123
      src/translations/locales/he.json
  48. 123
      src/translations/locales/hi.json
  49. 123
      src/translations/locales/id.json
  50. 123
      src/translations/locales/ks.json
  51. 123
      src/translations/locales/pt.json
  52. 123
      src/translations/locales/ru.json
  53. 123
      src/translations/locales/sw.json
  54. 123
      src/translations/locales/tg.json
  55. 123
      src/translations/locales/tr.json
  56. 123
      src/translations/locales/ul.json
  57. 123
      src/translations/locales/ur.json
  58. 123
      src/translations/locales/uz.json
  59. 123
      src/translations/locales/zh.json
  60. 10
      src/translations/provider.tsx

7
AGENTS.md

@ -3,3 +3,10 @@
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
<!-- END:nextjs-agent-rules -->
# Translations and Locale Management Rule
- All translation files must be located in `src/translations/` (NOT `src/i18n/`).
- Inside `src/translations/locales/`, there are NO subdirectories. Each language has a single, flat key-value JSON file (`ar.json`, `az.json`, `bn.json`, `zh.json`, `da.json`, `de.json`, `en.json`, `es.json`, `fa.json`, `fr.json`, `gu.json`, `ha.json`, `he.json`, `hi.json`, `id.json`, `ks.json`, `pt.json`, `ru.json`, `sw.json`, `tg.json`, `tr.json`, `ul.json`, `ur.json`, `uz.json`).
- Registration form structure data is kept separately in `src/data/questions/`.
- CRITICAL AUTOMATION RULE: Whenever any new data, field, component label, key, or text item is added to the project, its default translation string MUST automatically be added to the `en.json` file (`src/translations/locales/en.json`) as key-value pairs.

4
src/app/[lang]/layout.tsx

@ -1,7 +1,7 @@
import { notFound } from "next/navigation";
import LanguageSwitcher from "@/components/ui/language-switcher";
import { isLocale, localeDirections } from "@/i18n/config";
import { I18nProvider } from "@/i18n/provider";
import { isLocale, localeDirections } from "@/translations/config";
import { I18nProvider } from "@/translations/provider";
export function generateStaticParams() {
return [{ lang: "en" }, { lang: "fa" }];

2
src/app/[lang]/questions-list/[slug]/page.tsx

@ -1,5 +1,5 @@
import { getQuestionListItems } from "@/data/question-data";
import { locales } from "@/i18n/config";
import { locales } from "@/translations/config";
import QuestionDetailPage from "@/app/questions-list/[slug]/page";
export function generateStaticParams() {

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

@ -6,7 +6,7 @@ import Button from "@/components/ui/button";
import CallResultSheet from "@/components/ui/call-result-sheet";
import DismissReasonSheet from "@/components/ui/dismiss-reason-sheet";
import NavigationButton from "@/components/ui/navigation-button";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
export default function CandidateContactPage() {
const { dictionary: t } = useI18n();

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

@ -7,8 +7,8 @@ import AdvisorActionsCard from "@/components/ui/advisor-actions-card";
import NavigationButton from "@/components/ui/navigation-button";
import { PageBackground } from "@/components/utils/page-background";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
const advisorAvatars = [
{ id: "advisor-primary", src: "/assets/images/Avatar Image.png" },

4
src/app/intro/page.tsx

@ -9,8 +9,8 @@ import ReportActionsSheet from "@/components/ui/report-actions-sheet";
import { authBridge } from "@/lib/auth-bridge";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import type { MarriageProfileResponse } from "@/hooks/marriage/types";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
const REDIRECT_SESSION_KEY = "redirect";

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

@ -13,7 +13,7 @@ import type {
MarriagePhoneFieldValue,
} from "@/hooks/marriage/types";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
import { useViewPaddings } from "@/hooks/use-view-paddings";
const advisorAvatars = [

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

@ -19,8 +19,8 @@ import type {
} from "@/hooks/marriage/types";
import { useRespondToMarriageCaseMutation } from "@/hooks/marriage/use-case-respond";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
function formatFieldValue(value: MarriageFieldValue) {
if (value === null || value === "") {

4
src/app/questions-list/[slug]/page.tsx

@ -4,8 +4,8 @@ import {
getQuestionListItemBySlug,
getQuestionListItems,
} from "@/data/question-data";
import { defaultLocale, isLocale, locales } from "@/i18n/config";
import { getDictionary } from "@/i18n/dictionaries";
import { defaultLocale, isLocale, locales } from "@/translations/config";
import { getDictionary } from "@/translations/dictionaries";
import QuestionDetailClient from "./question-detail-client";
export function generateStaticParams() {

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

@ -32,8 +32,8 @@ import {
} from "@/data/question-data";
import type { MarriageGender } from "@/hooks/marriage/types";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { defaultLocale, type Locale } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { defaultLocale, type Locale } from "@/translations/config";
import { useI18n } from "@/translations/provider";
import {
useCattellQuestionsQuery,
useSubmitCattellAssessmentMutation,
@ -44,7 +44,6 @@ import {
} from "@/hooks/marriage/use-glasser";
import { cattellFallbackQuestions } from "@/data/cattell-fallback";
import { glasserFallbackQuestions } from "@/data/glasser-fallback";
import TestLoadingScreen from "@/components/questions/test-loading-screen";
import TestIntroPage from "@/components/questions/test-intro-page";
import TestQuestionsFlow, { type TestQuestion } from "@/components/questions/test-questions-flow";
import AnswerPaceSheet from "./answer-pace-sheet";
@ -425,7 +424,9 @@ export default function QuestionDetailClient({
const rawOptions =
q.options && q.options.length > 0
? q.options
: ["بله", "به اندازه کافی واضح نیست", "نه"];
: locale === "fa"
? ["بله", "به اندازه کافی واضح نیست", "نه"]
: ["Yes", "Not clear enough", "No"];
const mappedOptions = rawOptions.map((optText, idx) => ({
label: optText,
value: idx === 0 ? "A" : idx === 1 ? "B" : "C",
@ -503,7 +504,14 @@ export default function QuestionDetailClient({
}, [isProfileLoading, item, profileContext, questionsListHref, router]);
if (isProfileLoading && item) {
return <TestLoadingScreen locale={locale} />;
return (
<>
<PageBackground disabled />
<main className="-mx-[17px] flex h-svh flex-col items-center justify-center bg-[#F7F1F0]">
<div className="size-10 rounded-full border-[3px] border-[#DCDCE0] border-t-[#F2465F] border-r-[#F2465F] animate-spin" />
</main>
</>
);
} else if (!item || !isQuestionListItemVisibleForProfile(item, profileContext)) {
return null;
}
@ -518,14 +526,12 @@ export default function QuestionDetailClient({
if (isQuestionsLoading) {
return (
<TestLoadingScreen
locale={locale}
title={
locale === "fa"
? "در حال دریافت سوالات آزمون..."
: "Loading test questions..."
}
/>
<>
<PageBackground disabled />
<main className="-mx-[17px] flex h-svh flex-col items-center justify-center bg-[#F7F1F0]">
<div className="size-10 rounded-full border-[3px] border-[#DCDCE0] border-t-[#F2465F] border-r-[#F2465F] animate-spin" />
</main>
</>
);
}

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

@ -21,8 +21,8 @@ import { hasQuestionAnswerValue } from "@/components/questions/question-answer-s
import { useStartMarriageMatchMutation } from "@/hooks/marriage/use-match-start";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { useMarriageSectionsQuery } from "@/hooks/marriage/use-sections";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
import { toFrontendSlug } from "@/data/section-slug-map";
import SectionsRequest from "./sections-request";
import { getStoredAge, getLocalSectionProgress } from "@/components/questions/progress-helper";

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

@ -17,8 +17,8 @@ import {
useHabcoinPaymentMutation,
} from "@/hooks/marriage/use-habcoin-payment";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
type ContactInfoPhoneItem = {
key: string;

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

@ -4,7 +4,7 @@ import Image from "next/image";
import AdvisorActionsCard from "@/components/ui/advisor-actions-card";
import NavigationButton from "@/components/ui/navigation-button";
import { PageBackground } from "@/components/utils/page-background";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
import Link from "next/link";
const advisorAvatars = [

4
src/components/questions/question-card.tsx

@ -9,8 +9,8 @@ import {
IoSchool,
} from "react-icons/io5";
import type { QuestionCardIcon, QuestionListItem } from "@/data/question-data";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
import Image from "next/image";
type QuestionCardProps = {

40
src/components/questions/question-date.tsx

@ -12,18 +12,18 @@ type QuestionDateProps = {
};
const MONTHS = [
{ value: "01", label: "01 - ژانویه" },
{ value: "02", label: "02 - فوریه" },
{ value: "03", label: "03 - مارس" },
{ value: "04", label: "04 - آوریل" },
{ value: "05", label: "05 - می" },
{ value: "06", label: "06 - ژوئن" },
{ value: "07", label: "07 - ژوئیه" },
{ value: "08", label: "08 - آگوست" },
{ value: "09", label: "09 - سپتامبر" },
{ value: "10", label: "10 - اکتبر" },
{ value: "11", label: "11 - نوامبر" },
{ value: "12", label: "12 - دسامبر" },
{ value: "01", label: "01 - January" },
{ value: "02", label: "02 - February" },
{ value: "03", label: "03 - March" },
{ value: "04", label: "04 - April" },
{ value: "05", label: "05 - May" },
{ value: "06", label: "06 - June" },
{ value: "07", label: "07 - July" },
{ value: "08", label: "08 - August" },
{ value: "09", label: "09 - September" },
{ value: "10", label: "10 - October" },
{ value: "11", label: "11 - November" },
{ value: "12", label: "12 - December" },
];
const DAYS = Array.from({ length: 31 }, (_, i) => {
@ -101,10 +101,10 @@ export function QuestionDate({
value={day}
onChange={(e) => handleSelectChange(year, month, e.target.value)}
disabled={disabled}
aria-label="روز"
aria-label="Day"
className="h-[54px] w-full cursor-pointer rounded-[15px] border border-[#E7D8D5] bg-white px-3 group-12 text-[#181818] outline-none transition-all focus:border-[#6F6F6F]"
>
<option value="">روز</option>
<option value="">Day</option>
{DAYS.map((d) => (
<option key={d.value} value={d.value}>
{d.label}
@ -112,15 +112,15 @@ export function QuestionDate({
))}
</select>
{/* Month / ماه */}
{/* Month */}
<select
value={month}
onChange={(e) => handleSelectChange(year, e.target.value, day)}
disabled={disabled}
aria-label="ماه"
aria-label="Month"
className="h-[54px] w-full cursor-pointer rounded-[15px] border border-[#E7D8D5] bg-white px-3 group-12 text-[#181818] outline-none transition-all focus:border-[#6F6F6F]"
>
<option value="">ماه</option>
<option value="">Month</option>
{MONTHS.map((m) => (
<option key={m.value} value={m.value}>
{m.label}
@ -128,15 +128,15 @@ export function QuestionDate({
))}
</select>
{/* Year / سال */}
{/* Year */}
<select
value={year}
onChange={(e) => handleSelectChange(e.target.value, month, day)}
disabled={disabled}
aria-label="سال"
aria-label="Year"
className="h-[54px] w-full cursor-pointer rounded-[15px] border border-[#E7D8D5] bg-white px-3 group-12 text-[#181818] outline-none transition-all focus:border-[#6F6F6F]"
>
<option value="">سال</option>
<option value="">Year</option>
{YEARS.map((y) => (
<option key={y} value={y}>
{y}

2
src/components/questions/question-number.tsx

@ -4,7 +4,7 @@ import { useMemo, useEffect } from "react";
import type { QuestionField } from "@/data/question-data";
import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
type QuestionNumberProps = {
question: QuestionField;

2
src/components/questions/required-steps-card.tsx

@ -7,7 +7,7 @@ import {
} from "@/data/question-data";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { useMarriageSectionsQuery } from "@/hooks/marriage/use-sections";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
import { useMemo } from "react";
import { toFrontendSlug } from "@/data/section-slug-map";
import { getStoredAge, getLocalSectionProgress } from "@/components/questions/progress-helper";

2
src/components/questions/test-loading-screen.tsx

@ -105,7 +105,7 @@ type TestLoadingScreenProps = {
export default function TestLoadingScreen({
title,
subtitle,
locale = "fa",
locale = "en",
}: TestLoadingScreenProps) {
const defaultTitle =
locale === "fa" ? "در حال تحلیل و دریافت اطلاعات" : "Analyzing responses";

4
src/components/questions/test-questions-flow.tsx

@ -94,8 +94,8 @@ export default function TestQuestionsFlow({
if (isSubmitting) {
return (
<TestLoadingScreen
title="در حال تحلیل و ثبت پاسخ‌ها"
subtitle="لطفاً چند لحظه شکیبا باشید تا پاسخ‌های شما بررسی و ثبت شوند."
title="Analyzing and submitting responses"
subtitle="Please wait a moment while your answers are reviewed and registered."
/>
);
}

4
src/components/sliders/slider-page.tsx

@ -19,8 +19,8 @@ import Button from "@/components/ui/button";
import NavigationButton from "@/components/ui/navigation-button";
import { useUpdateMarriageProfileBasicMutation } from "@/hooks/marriage/use-profile-basic";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
const BASE_SLIDE_COUNT = 4;
const FINAL_SLIDE_COUNT = 5;

4
src/components/ui/button.tsx

@ -9,8 +9,8 @@ import {
useState,
} from "react";
import { GoArrowRight } from "react-icons/go";
import { localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
type ButtonVariant = "default" | "secondary" | "countdown" | "outlined";
type ArrowDirection = "left" | "right";

2
src/components/ui/call-result-sheet.tsx

@ -2,7 +2,7 @@
import type { HTMLAttributes } from "react";
import { useEffect, useId, useState } from "react";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
const EXIT_ANIMATION_MS = 220;

2
src/components/ui/dismiss-reason-sheet.tsx

@ -3,7 +3,7 @@
import type { HTMLAttributes } from "react";
import { useEffect, useId, useState } from "react";
import Button from "@/components/ui/button";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
const EXIT_ANIMATION_MS = 220;

2
src/components/ui/female-consent-sheet.tsx

@ -2,7 +2,7 @@
import type { HTMLAttributes, ReactNode } from "react";
import { useEffect, useState } from "react";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
import Image from "next/image";
const EXIT_ANIMATION_MS = 220;

2
src/components/ui/information-sheet.tsx

@ -4,7 +4,7 @@ import Image, { type StaticImageData } from "next/image";
import type { HTMLAttributes, ReactNode } from "react";
import { useEffect, useState } from "react";
import Button from "@/components/ui/button";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
const EXIT_ANIMATION_MS = 220;

4
src/components/ui/language-switcher.tsx

@ -2,8 +2,8 @@
import Link from "next/link";
import { usePathname } from "next/navigation";
import { localeLabels, locales, localizePath } from "@/i18n/config";
import { useI18n } from "@/i18n/provider";
import { localeLabels, locales, localizePath } from "@/translations/config";
import { useI18n } from "@/translations/provider";
export default function LanguageSwitcher() {
const pathname = usePathname();

2
src/components/ui/navigation-button.tsx

@ -4,7 +4,7 @@ import Image from "next/image";
import { useRouter } from "next/navigation";
import type { ButtonHTMLAttributes } from "react";
import { GoArrowLeft } from "react-icons/go";
import { useI18n } from "@/i18n/provider";
import { useI18n } from "@/translations/provider";
type NavigationButtonIcon =
| "back"

34
src/components/ui/report-actions-sheet.tsx

@ -171,16 +171,16 @@ export function ReportActionsSheet({ onClose }: ReportActionsSheetProps) {
<div className="sticky top-0 bg-[#F9F8F8] p-3.5 border-b border-gray-200/50">
<div className="flex items-center justify-between">
<div className="flex items-center gap-2">
<h3 className="font-semibold text-gray-800">تنظیمات و پشتیبانی</h3>
<h3 className="font-semibold text-gray-800">Settings & Support</h3>
<div
className={`w-2 h-2 rounded-full ${isReady ? "bg-green-500" : "bg-gray-400"}`}
title={isReady ? "متصل به Flutter" : "غیرفعال"}
title={isReady ? "Connected to Flutter" : "Inactive"}
/>
</div>
<button
onClick={closeSheet}
className="text-2xl text-gray-500 hover:text-gray-700 leading-none"
aria-label="بستن"
aria-label="Close"
>
×
</button>
@ -188,16 +188,16 @@ export function ReportActionsSheet({ onClose }: ReportActionsSheetProps) {
</div>
<div className="p-3.5 flex flex-col gap-3">
{/* دکمه‌های اصلی */}
{/* Main buttons */}
<div className="flex flex-col gap-2">
<Button onClick={handleGetLocation}>📍 دریافت موقعیت مکانی</Button>
<Button onClick={handleOpenConsultant}>👨 مشاوره با حبیب</Button>
<Button onClick={handleGetLocation}>📍 Get Location</Button>
<Button onClick={handleOpenConsultant}>👨 Habib Consultation</Button>
</div>
{/* دکمه‌های تست WebView Actions */}
{/* Test WebView Actions */}
<div className="bg-purple-50 rounded-lg p-3 border border-purple-200">
<p className="text-xs text-purple-800 mb-2 font-semibold">
🧪 تست WebView Utility Actions:
🧪 Test WebView Utility Actions:
</p>
<div className="flex flex-col gap-2">
<Button onClick={handleTestDownload}>📥 download_file</Button>
@ -206,26 +206,26 @@ export function ReportActionsSheet({ onClose }: ReportActionsSheetProps) {
</div>
{!isInFlutterWebView() && (
<p className="text-[10px] text-purple-600 mt-2">
خارج از WebView هستید copy_to_clipboard با fallback مرورگر کار میکند، بقیه نیاز به Flutter دارند.
Outside WebView copy_to_clipboard uses browser fallback, others require Flutter.
</p>
)}
</div>
{/* دکمه تست WEB_READY */}
{/* Test WEB_READY */}
<div className="bg-blue-50 rounded-lg p-3 border border-blue-200">
<p className="text-xs text-blue-800 mb-2 font-semibold">
🧪 تست ارتباط با Flutter:
🧪 Test Flutter Connection:
</p>
<Button onClick={handleSendWebReady}>
🚀 ارسال WEB_READY
🚀 Send WEB_READY
</Button>
</div>
{/* نمایش آخرین ایونت دریافتی */}
{/* Last Received Event */}
{lastEvent && (
<div className="bg-green-50 rounded-lg p-3 border border-green-200">
<p className="text-xs text-green-800 font-semibold mb-2">
📥 آخرین ایونت از Flutter:
📥 Last Event from Flutter:
</p>
<div className="bg-white rounded p-2 text-xs font-mono break-all">
<div className="text-green-600 font-bold">
@ -238,17 +238,17 @@ export function ReportActionsSheet({ onClose }: ReportActionsSheetProps) {
</div>
)}
{/* لاگ‌ها */}
{/* Logs */}
<div className="bg-gray-50 rounded-lg p-3 border border-gray-200">
<div className="flex items-center justify-between mb-2">
<p className="text-xs text-gray-700 font-semibold">
📋 لاگها ({logs.length})
📋 Logs ({logs.length})
</p>
<button
onClick={() => setShowLogs(!showLogs)}
className="text-xs text-blue-600 hover:text-blue-800"
>
{showLogs ? "مخفی کردن" : "نمایش"}
{showLogs ? "Hide" : "Show"}
</button>
</div>
{showLogs && (

6
src/data/question-data.ts

@ -1,7 +1,7 @@
import type { MarriageGender } from "@/hooks/marriage/types";
import { defaultLocale, type Locale } from "@/i18n/config";
import enQuestions from "@/i18n/locales/en/questions.json";
import faQuestions from "@/i18n/locales/fa/questions.json";
import { defaultLocale, type Locale } from "@/translations/config";
import enQuestions from "@/data/questions/en.json";
import faQuestions from "@/data/questions/fa.json";
export const bookingTerms = [
"You will be contacted by your consultant.",

0
src/i18n/locales/en/questions.json → src/data/questions/en.json

0
src/i18n/locales/fa/questions.json → src/data/questions/fa.json

31
src/i18n/config.ts

@ -1,31 +0,0 @@
export const locales = ["en", "fa"] as const;
export type Locale = (typeof locales)[number];
export const defaultLocale: Locale = "en";
export const localeLabels: Record<Locale, string> = {
en: "English",
fa: "فارسی",
};
export const localeDirections: Record<Locale, "ltr" | "rtl"> = {
en: "ltr",
fa: "rtl",
};
export function isLocale(value: string | undefined): value is Locale {
return Boolean(value && locales.includes(value as Locale));
}
export function stripLocale(pathname: string) {
const segments = pathname.split("/");
return isLocale(segments[1]) ? `/${segments.slice(2).join("/")}` : pathname;
}
export function localizePath(pathname: string, locale: Locale) {
const normalizedPath = stripLocale(pathname);
const suffix = normalizedPath === "/" ? "" : normalizedPath;
return `/${locale}${suffix}`;
}

279
src/i18n/dictionaries.ts

@ -1,279 +0,0 @@
import type { Locale } from "@/i18n/config";
export const dictionaries = {
en: {
common: {
appName: "Habib Marriage",
submit: "Submit",
decline: "Decline",
continue: "Continue",
cancel: "Cancel",
confirm: "Confirm",
support: "Support",
back: "Back",
required: "Required",
estimateTime: "Estimate time",
rangeError: "The value entered seems incorrect. Please provide a realistic value.",
},
intro: {
imageAlt: "heavenly marriage",
title: "A Path to Heavenly Marriage",
description:
'We have come together with the goal of creating a secure and confidential path for "permanent marriage" among Muslims',
userProfile: "user profile",
matches: "matches",
marriage: "marriage",
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.",
],
},
},
match: {
title: "New Match",
goBack: "Go back",
acceptProfile: "Accept Profile",
requestProceedTitle: "Request to Proceed",
requestProceedDescription:
"With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
acceptDescription:
"Are you sure you've fully reviewed the profile and are ready to proceed?",
fields: {
birthYear: "Year of birth",
nationality: "Nationality",
residence: "City and country of residence",
futureResidence: "City and country of future residence",
religion: "Religion",
countryCity: "Country / city",
currentlyLivingIn: "(currently living in)",
education: "Education",
occupation: "Occupation",
},
values: {
iranian: "Iranian",
iran: "Iran",
tehran: "Tehran",
muslim: "Muslim",
education: "Bachelor's degree in architecture",
occupation: "Interior designer",
},
},
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",
},
findingMatch: {
title: "Finding Match ...",
description:
"We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
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 be in touch with your family shortly.",
contacted: "contacted",
noContactYet: "no contact yet ?",
afterTwoDays: "(after 2 days)",
},
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 ...",
},
},
fa: {
common: {
appName: "ازدواج حبیب",
submit: "ثبت",
decline: "رد",
continue: "ادامه",
cancel: "لغو",
confirm: "تایید",
support: "پشتیبانی",
back: "بازگشت",
required: "ضروری",
estimateTime: "زمان تقریبی",
rangeError: "مقدار وارد شده صحیح به نظر نمی‌رسد. لطفاً یک عدد واقعی وارد کنید.",
},
intro: {
imageAlt: "ازدواج آسمانی",
title: "مسیری برای ازدواج آسمانی",
description:
"ما با هدف ایجاد مسیری امن و محرمانه برای ازدواج دائم میان مسلمانان کنار هم آمده‌ایم",
userProfile: "پروفایل کاربر",
matches: "معرفی‌ها",
marriage: "ازدواج",
videoAlt: "ویدیو",
playAlt: "پخش",
},
questions: {
profileRegistration: "ثبت اطلاعات پروفایل",
closeQuestionsList: "بستن فهرست سوالات",
requiredSteps: "مراحل ضروری",
requiredStepsDescription:
"لطفا اطلاعات ضروری را کامل کنید تا بتوانیم گزینه‌های مناسب را پیدا کنیم",
requiredStepsDescriptionCompleted:
"اکنون می‌توانید درخواست خود را ثبت کنید تا بتوانیم فرآیند یافتن گزینه‌های مناسب را شروع کنیم",
requiredStepsProgress: "{completed} از {total} مرحله ضروری کامل شده است",
findMatches: "یافتن گزینه‌ها",
findingMatch: "ثبت اطلاعات و یافتن همسر",
optionalInfoPromptTitle: "نکته مهم",
optionalInfoPromptDescription:
"شما تمام بخش‌های ضروری را تکمیل کرده‌اید. با این حال، تکمیل تمام بخش‌ها به ما کمک می‌کند تا گزینه‌های بهتری برای شما پیدا کنیم",
completeNecessaryForms: "(تکمیل فرم‌های ضروری)",
openQuestion: "باز کردن {title}",
answerAtYourOwnPace: "با آرامش پاسخ دهید",
answerAtYourOwnPaceDescription:
"هر زمان خواستید می‌توانید فرم را متوقف کنید و بعدا ادامه دهید. پیشرفت شما خودکار ذخیره می‌شود.",
testIntroDisclaimer:
"تمام اطلاعات ارائه شده کاملاً محرمانه نگهداری شده و به اشخاص ثالث افشا نمی‌شود. این داده‌ها صرفاً برای اطمینان از دقت بهینه تطابق‌یابی استفاده می‌شوند. بنابراین، ضروری است که این ارزیابی با نهایت دقت، صحت و صداقت تکمیل شود.",
testIntroStart: "شروع",
testIntroEstimateLabel: "زمان تقریبی",
testIntroBullets: {
personality: [
"آیا در درک محرک‌های روانشناختی زیربنایی که ارتباطات بین‌فردی و موانع ارتباطی شما را تعیین می‌کنند، مشکل دارید؟",
"انجام این تست اجباری نیست، اما به شما کمک می‌کند تا بهتر همسر مناسب را پیدا کنید. تست شخصیت‌شناسی آزمونی برای خودشناسی و درک بهتر همسر شماست.",
'آیا بر اساس سازگاری‌های رفتاری سطحی عمل می‌کنید، یا از "ویژگی‌های منبع" عمیقی که اساساً فرآیندهای تصمیم‌گیری شما را کنترل می‌کنند، آگاه هستید؟',
],
glasser: [
"درک پنج نیاز اساسی شما به شما کمک می‌کند تا بشناسید چه چیزی واقعاً رفتار شما را در روابط هدایت می‌کند.",
"انجام این تست اجباری نیست، اما به شما کمک می‌کند اولویت‌های خود را بهتر بشناسید و همسر سازگارتری پیدا کنید.",
"با شناسایی قوی‌ترین نیازهای خود، می‌توانید انتظارات خود را بهتر بیان کنید و روابط سالم‌تری بسازید.",
],
},
},
match: {
title: "گزینه جدید",
goBack: "بازگشت",
acceptProfile: "پذیرش پروفایل",
acceptDescription:
"آیا مطمئن هستید پروفایل را کامل بررسی کرده‌اید و آماده ادامه هستید؟",
fields: {
birthYear: "سال تولد",
nationality: "ملیت",
residence: "شهر و کشور محل سکونت",
futureResidence: "شهر و کشور محل سکونت آینده",
religion: "دین",
countryCity: "کشور / شهر",
currentlyLivingIn: "(محل سکونت فعلی)",
education: "تحصیلات",
occupation: "شغل",
},
values: {
iranian: "ایرانی",
iran: "ایران",
tehran: "تهران",
muslim: "مسلمان",
education: "کارشناسی معماری",
occupation: "طراح داخلی",
},
},
requestAccepted: {
imageAlt: "درخواست پذیرفته شد",
title: "درخواست پذیرفته شد",
description:
"اکنون می‌توانید اطلاعات تماس خانواده ایشان را ببینید و مراحل بعدی را هماهنگ کنید.",
viewContact: "مشاهده تماس",
penalty: "توجه: اگر تا ۲ روز تماس برقرار نکنید، ممکن است جریمه اعمال شود",
profileLocked: "پروفایل قفل است",
lockedDescription:
"تا زمانی که در حال یافتن گزینه هستیم، امکان ویرایش پروفایل وجود ندارد",
},
findingMatch: {
title: "در حال یافتن گزینه ...",
description:
"ما بر اساس ترجیحات شما گزینه‌های مناسب را جستجو می‌کنیم. وقتی گزینه‌ای پیدا شود، پروفایل او را به شما نشان می‌دهیم. اگر تایید کنید، از طرف شما مراحل را ادامه می‌دهیم",
advisorTitle: "دریافت مشاور",
advisorDescription:
"نمی‌دانید قدم بعدی چیست؟ بخش روانشناسی ما در هر مرحله شما را راهنمایی می‌کند.",
getAdvisor: "دریافت مشاور",
editProfile: "ویرایش پروفایل",
},
candidateContact: {
imageAlt: "وضعیت تماس گزینه انتخاب‌شده",
title: "گزینه انتخاب‌شده به‌زودی با خانواده شما تماس می‌گیرد.",
contacted: "تماس گرفته شد",
noContactYet: "هنوز تماس نگرفته؟",
afterTwoDays: "(بعد از ۲ روز)",
},
sheets: {
informationSheet: "پنل اطلاعات",
callResult: "نتیجه تماس",
selectCallResult: "انتخاب نتیجه تماس",
callOptions: [
"تناسب شخصی کافی نبود",
"تمایل دوطرفه وجود نداشت",
"انتظارات متفاوت بود",
"ارتباط شکل نگرفت",
"موقعیت مکانی مناسب نبود",
"دلایل دیگر",
],
dismissReasons: "دلایل رد کردن",
dismissDescription: "لطفا دلیل کامل رد کردن مورد ارسال‌شده را بنویسید",
dismissPlaceholder: "متن توضیحی شما ...",
},
},
} as const;
export type Dictionary = (typeof dictionaries)[Locale];
export function getDictionary(locale: Locale): Dictionary {
return dictionaries[locale];
}

68
src/translations/config.ts

@ -0,0 +1,68 @@
// Map of all 24 supported languages from backend (apps.marriage.translation_utils.LANGUAGE_MAP)
export const LANGUAGE_MAP = {
ar: "Arabic",
az: "Azerbaijani",
bn: "Bengali",
zh: "Chinese",
da: "Danish",
de: "German",
en: "English",
es: "Spanish",
fa: "Persian (Farsi)",
fr: "French",
gu: "Gujarati",
ha: "Hausa",
he: "Hebrew",
hi: "Hindi",
id: "Indonesian",
ks: "Kashmiri",
pt: "Portuguese",
ru: "Russian",
sw: "Swahili",
tg: "Tajik",
tr: "Turkish",
ul: "Urdu Roman (Latin)",
ur: "Urdu",
uz: "Uzbek",
} as const;
export type LanguageCode = keyof typeof LANGUAGE_MAP;
export const locales = Object.keys(LANGUAGE_MAP) as LanguageCode[];
export type Locale = string;
export const defaultLocale: Locale = "en";
export const localeLabels: Record<string, string> = {
...LANGUAGE_MAP,
fa: "فارسی",
};
export const rtlLanguages = ["ar", "fa", "he", "ks", "ur"];
export const localeDirections: Record<string, "ltr" | "rtl"> = Object.keys(
LANGUAGE_MAP,
).reduce(
(acc, code) => {
acc[code] = rtlLanguages.includes(code) ? "rtl" : "ltr";
return acc;
},
{} as Record<string, "ltr" | "rtl">,
);
export function isLocale(value: string | undefined): value is Locale {
return Boolean(value && value in LANGUAGE_MAP);
}
export function stripLocale(pathname: string) {
const segments = pathname.split("/");
return isLocale(segments[1]) ? `/${segments.slice(2).join("/")}` : pathname;
}
export function localizePath(pathname: string, locale: Locale) {
const normalizedPath = stripLocale(pathname);
const suffix = normalizedPath === "/" ? "" : normalizedPath;
return `/${locale}${suffix}`;
}

59
src/translations/dictionaries.ts

@ -0,0 +1,59 @@
import type { Locale } from "@/translations/config";
import ar from "@/translations/locales/ar.json";
import az from "@/translations/locales/az.json";
import bn from "@/translations/locales/bn.json";
import da from "@/translations/locales/da.json";
import de from "@/translations/locales/de.json";
import en from "@/translations/locales/en.json";
import es from "@/translations/locales/es.json";
import fa from "@/translations/locales/fa.json";
import fr from "@/translations/locales/fr.json";
import gu from "@/translations/locales/gu.json";
import ha from "@/translations/locales/ha.json";
import he from "@/translations/locales/he.json";
import hi from "@/translations/locales/hi.json";
import id from "@/translations/locales/id.json";
import ks from "@/translations/locales/ks.json";
import pt from "@/translations/locales/pt.json";
import ru from "@/translations/locales/ru.json";
import sw from "@/translations/locales/sw.json";
import tg from "@/translations/locales/tg.json";
import tr from "@/translations/locales/tr.json";
import ul from "@/translations/locales/ul.json";
import ur from "@/translations/locales/ur.json";
import uz from "@/translations/locales/uz.json";
import zh from "@/translations/locales/zh.json";
export const dictionaries = {
ar,
az,
bn,
da,
de,
en,
es,
fa,
fr,
gu,
ha,
he,
hi,
id,
ks,
pt,
ru,
sw,
tg,
tr,
ul,
ur,
uz,
zh,
} as const;
export type Dictionary = typeof dictionaries.en;
export function getDictionary(locale: Locale): Dictionary {
return (dictionaries as Record<string, Dictionary>)[locale] ?? dictionaries.en;
}

123
src/translations/locales/ar.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/az.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/bn.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/da.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/de.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/en.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/es.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/fa.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "ازدواج حبیب",
"submit": "ثبت",
"decline": "رد",
"continue": "ادامه",
"cancel": "لغو",
"confirm": "تایید",
"support": "پشتیبانی",
"back": "بازگشت",
"required": "ضروری",
"estimateTime": "زمان تقریبی",
"rangeError": "مقدار وارد شده صحیح به نظر نمی‌رسد. لطفاً یک عدد واقعی وارد کنید."
},
"intro": {
"imageAlt": "ازدواج آسمانی",
"title": "مسیری برای ازدواج آسمانی",
"description": "ما با هدف ایجاد مسیری امن و محرمانه برای ازدواج دائم میان مسلمانان کنار هم آمده‌ایم",
"userProfile": "پروفایل کاربر",
"matches": "معرفی‌ها",
"marriage": "ازدواج",
"videoAlt": "ویدیو",
"playAlt": "پخش"
},
"questions": {
"profileRegistration": "ثبت اطلاعات پروفایل",
"closeQuestionsList": "بستن فهرست سوالات",
"requiredSteps": "مراحل ضروری",
"requiredStepsDescription": "لطفا اطلاعات ضروری را کامل کنید تا بتوانیم گزینه‌های مناسب را پیدا کنیم",
"requiredStepsDescriptionCompleted": "اکنون می‌توانید درخواست خود را ثبت کنید تا بتوانیم فرآیند یافتن گزینه‌های مناسب را شروع کنیم",
"requiredStepsProgress": "{completed} از {total} مرحله ضروری کامل شده است",
"findMatches": "یافتن گزینه‌ها",
"findingMatch": "ثبت اطلاعات و یافتن همسر",
"optionalInfoPromptTitle": "نکته مهم",
"optionalInfoPromptDescription": "شما تمام بخش‌های ضروری را تکمیل کرده‌اید. با این حال، تکمیل تمام بخش‌ها به ما کمک می‌کند تا گزینه‌های بهتری برای شما پیدا کنیم",
"completeNecessaryForms": "(تکمیل فرم‌های ضروری)",
"openQuestion": "باز کردن {title}",
"answerAtYourOwnPace": "با آرامش پاسخ دهید",
"answerAtYourOwnPaceDescription": "هر زمان خواستید می‌توانید فرم را متوقف کنید و بعدا ادامه دهید. پیشرفت شما خودکار ذخیره می‌شود.",
"testIntroDisclaimer": "تمام اطلاعات ارائه شده کاملاً محرمانه نگهداری شده و به اشخاص ثالث افشا نمی‌شود. این داده‌ها صرفاً برای اطمینان از دقت بهینه تطابق‌یابی استفاده می‌شوند. بنابراین، ضروری است که این ارزیابی با نهایت دقت، صحت و صداقت تکمیل شود.",
"testIntroStart": "شروع",
"testIntroEstimateLabel": "زمان تقریبی",
"testIntroBullets": {
"personality": [
"آیا در درک محرک‌های روانشناختی زیربنایی که ارتباطات بین‌فردی و موانع ارتباطی شما را تعیین می‌کنند، مشکل دارید؟",
"انجام این تست اجباری نیست، اما به شما کمک می‌کند تا بهتر همسر مناسب را پیدا کنید. تست شخصیت‌شناسی آزمونی برای خودشناسی و درک بهتر همسر شماست.",
"آیا بر اساس سازگاری‌های رفتاری سطحی عمل می‌کنید، یا از \"ویژگی‌های منبع\" عمیقی که اساساً فرآیندهای تصمیم‌گیری شما را کنترل می‌کنند، آگاه هستید؟"
],
"glasser": [
"درک پنج نیاز اساسی شما به شما کمک می‌کند تا بشناسید چه چیزی واقعاً رفتار شما را در روابط هدایت می‌کند.",
"انجام این تست اجباری نیست، اما به شما کمک می‌کند اولویت‌های خود را بهتر بشناسید و همسر سازگارتری پیدا کنید.",
"با شناسایی قوی‌ترین نیازهای خود، می‌توانید انتظارات خود را بهتر بیان کنید و روابط سالم‌تری بسازید."
]
}
},
"match": {
"title": "گزینه جدید",
"goBack": "بازگشت",
"acceptProfile": "پذیرش پروفایل",
"requestProceedTitle": "درخواست اقدام",
"requestProceedDescription": "با تایید شما، از طرف شما با خانواده ایشان جهت خواستگاری تماس می‌گیریم. پس از موافقت خانواده ایشان، برای آشنایی بیشتر معرفی خواهید شد.",
"acceptDescription": "آیا مطمئن هستید پروفایل را کامل بررسی کرده‌اید و آماده ادامه هستید؟",
"fields": {
"birthYear": "سال تولد",
"nationality": "ملیت",
"residence": "شهر و کشور محل سکونت",
"futureResidence": "شهر و کشور محل سکونت آینده",
"religion": "دین",
"countryCity": "کشور / شهر",
"currentlyLivingIn": "(محل سکونت فعلی)",
"education": "تحصیلات",
"occupation": "شغل"
},
"values": {
"iranian": "ایرانی",
"iran": "ایران",
"tehran": "تهران",
"muslim": "مسلمان",
"education": "کارشناسی معماری",
"occupation": "طراح داخلی"
}
},
"requestAccepted": {
"imageAlt": "درخواست پذیرفته شد",
"title": "درخواست پذیرفته شد",
"description": "اکنون می‌توانید اطلاعات تماس خانواده ایشان را ببینید و مراحل بعدی را هماهنگ کنید.",
"viewContact": "مشاهده تماس",
"penalty": "توجه: اگر تا ۲ روز تماس برقرار نکنید، ممکن است جریمه اعمال شود",
"profileLocked": "پروفایل قفل است",
"lockedDescription": "تا زمانی که در حال یافتن گزینه هستیم، امکان ویرایش پروفایل وجود ندارد"
},
"findingMatch": {
"title": "در حال یافتن گزینه ...",
"description": "ما بر اساس ترجیحات شما گزینه‌های مناسب را جستجو می‌کنیم. وقتی گزینه‌ای پیدا شود، پروفایل او را به شما نشان می‌دهیم. اگر تایید کنید، از طرف شما مراحل را ادامه می‌دهیم",
"advisorTitle": "دریافت مشاور",
"advisorDescription": "نمی‌دانید قدم بعدی چیست؟ بخش روانشناسی ما در هر مرحله شما را راهنمایی می‌کند.",
"getAdvisor": "دریافت مشاور",
"editProfile": "ویرایش پروفایل"
},
"candidateContact": {
"imageAlt": "وضعیت تماس گزینه انتخاب‌شده",
"title": "گزینه انتخاب‌شده به‌زودی با خانواده شما تماس می‌گیرد.",
"contacted": "تماس گرفته شد",
"noContactYet": "هنوز تماس نگرفته؟",
"afterTwoDays": "(بعد از ۲ روز)"
},
"sheets": {
"informationSheet": "پنل اطلاعات",
"callResult": "نتیجه تماس",
"selectCallResult": "انتخاب نتیجه تماس",
"callOptions": [
"تناسب شخصی کافی نبود",
"تمایل دوطرفه وجود نداشت",
"انتظارات متفاوت بود",
"ارتباط شکل نگرفت",
"موقعیت مکانی مناسب نبود",
"دلایل دیگر"
],
"dismissReasons": "دلایل رد کردن",
"dismissDescription": "لطفا دلیل کامل رد کردن مورد ارسال‌شده را بنویسید",
"dismissPlaceholder": "متن توضیحی شما ..."
}
}

123
src/translations/locales/fr.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/gu.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/ha.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/he.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/hi.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/id.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/ks.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/pt.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/ru.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/sw.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/tg.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/tr.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/ul.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/ur.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/uz.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

123
src/translations/locales/zh.json

@ -0,0 +1,123 @@
{
"common": {
"appName": "Habib Marriage",
"submit": "Submit",
"decline": "Decline",
"continue": "Continue",
"cancel": "Cancel",
"confirm": "Confirm",
"support": "Support",
"back": "Back",
"required": "Required",
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
},
"intro": {
"imageAlt": "heavenly marriage",
"title": "A Path to Heavenly Marriage",
"description": "We have come together with the goal of creating a secure and confidential path for \"permanent marriage\" among Muslims",
"userProfile": "user profile",
"matches": "matches",
"marriage": "marriage",
"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."
]
}
},
"match": {
"title": "New Match",
"goBack": "Go back",
"acceptProfile": "Accept Profile",
"requestProceedTitle": "Request to Proceed",
"requestProceedDescription": "With your approval, we will approach their family on your behalf to propose marriage. After their family agrees, you will be introduced to each other for further acquaintance.",
"acceptDescription": "Are you sure you've fully reviewed the profile and are ready to proceed?",
"fields": {
"birthYear": "Year of birth",
"nationality": "Nationality",
"residence": "City and country of residence",
"futureResidence": "City and country of future residence",
"religion": "Religion",
"countryCity": "Country / city",
"currentlyLivingIn": "(currently living in)",
"education": "Education",
"occupation": "Occupation"
},
"values": {
"iranian": "Iranian",
"iran": "Iran",
"tehran": "Tehran",
"muslim": "Muslim",
"education": "Bachelor's degree in architecture",
"occupation": "Interior designer"
}
},
"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"
},
"findingMatch": {
"title": "Finding Match ...",
"description": "We will search for suitable matches based on your preferences. Once we find one, we'll show you their profile. If you approve, we will proceed on your behalf",
"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 be in touch with your family shortly.",
"contacted": "contacted",
"noContactYet": "no contact yet ?",
"afterTwoDays": "(after 2 days)"
},
"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 ..."
}
}

10
src/i18n/provider.tsx → src/translations/provider.tsx

@ -7,8 +7,8 @@ import {
useEffect,
useMemo,
} from "react";
import { defaultLocale, type Locale, localeDirections } from "@/i18n/config";
import { type Dictionary, dictionaries } from "@/i18n/dictionaries";
import { defaultLocale, type Locale, localeDirections } from "@/translations/config";
import { type Dictionary, getDictionary } from "@/translations/dictionaries";
type I18nContextValue = {
locale: Locale;
@ -17,7 +17,7 @@ type I18nContextValue = {
const I18nContext = createContext<I18nContextValue>({
locale: defaultLocale,
dictionary: dictionaries[defaultLocale],
dictionary: getDictionary(defaultLocale),
});
type I18nProviderProps = {
@ -28,13 +28,13 @@ type I18nProviderProps = {
export function I18nProvider({ children, locale }: I18nProviderProps) {
useEffect(() => {
document.documentElement.lang = locale;
document.documentElement.dir = localeDirections[locale];
document.documentElement.dir = localeDirections[locale] ?? "ltr";
}, [locale]);
const value = useMemo(
() => ({
locale,
dictionary: dictionaries[locale],
dictionary: getDictionary(locale),
}),
[locale],
);
Loading…
Cancel
Save