Browse Source

feat: initialize internationalization support with multi-language locale files and add dynamic form components

front-test-2
ghorbani 3 weeks ago
parent
commit
20c3ca2045
  1. 12
      .agents/AGENTS.md
  2. 4
      AGENTS.md
  3. 384
      src/components/questions/habib_marriage_form.md
  4. 48
      src/components/questions/question-checkbox.tsx
  5. 132
      src/components/questions/question-dropdown.tsx
  6. 11
      src/components/questions/question-photo.tsx
  7. 32
      src/components/questions/question-radio.tsx
  8. 50
      src/components/questions/question-title.tsx
  9. 12
      src/components/ui/navigation-button.tsx
  10. 281
      src/data/questions/en.json
  11. 283
      src/data/questions/fa.json
  12. 35
      src/translations/locales/ar.json
  13. 35
      src/translations/locales/az.json
  14. 35
      src/translations/locales/bn.json
  15. 35
      src/translations/locales/da.json
  16. 35
      src/translations/locales/de.json
  17. 1
      src/translations/locales/en.json
  18. 35
      src/translations/locales/es.json
  19. 22
      src/translations/locales/fa.json
  20. 35
      src/translations/locales/fr.json
  21. 35
      src/translations/locales/gu.json
  22. 35
      src/translations/locales/ha.json
  23. 35
      src/translations/locales/he.json
  24. 35
      src/translations/locales/hi.json
  25. 35
      src/translations/locales/id.json
  26. 35
      src/translations/locales/ks.json
  27. 35
      src/translations/locales/pt.json
  28. 35
      src/translations/locales/ru.json
  29. 35
      src/translations/locales/sw.json
  30. 35
      src/translations/locales/tg.json
  31. 35
      src/translations/locales/tr.json
  32. 35
      src/translations/locales/ul.json
  33. 35
      src/translations/locales/ur.json
  34. 35
      src/translations/locales/uz.json
  35. 35
      src/translations/locales/zh.json

12
.agents/AGENTS.md

@ -0,0 +1,12 @@
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know
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 static text, data, field, component label, tooltip, help description, key, or text item is added or updated in the project, its translation key and values MUST automatically be added/updated in ALL 24 locale JSON files (`src/translations/locales/` & `src/data/questions/`).
- QUESTION HELP & TOOLTIPS RULE: All question help texts, tooltips, and modal descriptions must be stored with key-value entries in the respective locale JSON files, ensuring complete synchronization across all supported languages.

4
AGENTS.md

@ -8,5 +8,7 @@ This version has breaking changes — APIs, conventions, and file structure may
- All translation files must be located in `src/translations/` (NOT `src/i18n/`). - 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`). - 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/`. - 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.
- CRITICAL AUTOMATION RULE: Whenever any new static text, data, field, component label, tooltip, help description, key, or text item is added or updated in the project, its translation key and values MUST automatically be added/updated in ALL 24 locale JSON files (`src/translations/locales/` & `src/data/questions/`).
- QUESTION HELP & TOOLTIPS RULE: All question help texts, tooltips, and modal descriptions must be stored with key-value entries in the respective locale JSON files, ensuring complete synchronization across all supported languages.

384
src/components/questions/habib_marriage_form.md

@ -0,0 +1,384 @@
# فرم ثبت‌نام و مچینگ
**🔒 محرمانه:** فقط برای کارشناسان پلتفرم و سیستم مچینگ قابل مشاهده است.
**👁️ قابل نمایش محدود:** فقط پس از تأیید، در مراحل رسمی آشنایی، و به‌صورت محدود به طرف مقابل نمایش داده می‌شود.
**\*** **فیلد اجباری:** تکمیل این مورد برای ادامه ثبت‌نام لازم است.
حبیب مریج تلاش می‌کند ازدواج را با حفظ شأن، حریم خصوصی، چارچوب خانوادگی و روش سنتی، اما با کمک ابزارهای مدرن، پیش ببرد.
## بخش ۱: مشخصات فردی و هویتی
* **🔒 نام\***: [فیلد متنی]
* **🔒 نام خانوادگی\***: [فیلد متنی]
* **🔒 جنسیت\***: [قبلاً در مرحله ثبت‌نام دریافت شده است]
* **👁️ تاریخ تولد\***: [انتخابگر تقویم میلادی — YYYY/MM/DD]
* **👁️ سن**: [محاسبه خودکار توسط سیستم]
* **👁️ کشور محل تولد\***: [لیست کشویی کشورها]
* **👁️ شهر محل تولد\***: [فیلد متنی]
* **👁️ ملیت / تابعیت فعلی\***: [لیست کشویی کشورها]
* **👁️ قومیت / اصلیت خانوادگی / نژاد\***: [فیلد متنی]
> **راهنما:** مثال: عرب، فارس، ترک، کرد، بلوچ، دسی، قفقازی، آفریقایی‌تبار، لاتین و…
* **👁️ رنگ پوست\***: [تک‌انتخابی]
* سفید / روشن
* گندم‌گون / سبزه روشن
* سبزه تیره / قهوه‌ای
* تیره / سیاه‌پوست
* **👁️ زبان مادری\***: [چندانتخابی]
* **👁️ سایر زبان‌هایی که به آن‌ها مسلط هستم**: [چندانتخابی]
## بخش ۲: اطلاعات تماس، سکونت و ارتباط خانوادگی
* **🔒 شماره تماس شخصی با کد کشور\***: [فیلد متنی]
* **🔒 ایمیل\***: [فیلد متنی]
* **👁️ کشور محل سکونت فعلی\***: [لیست کشویی کشورها]
* **👁️ شهر / ایالت محل سکونت فعلی\***: [فیلد متنی]
* **👁️ لوکیشن حدودی محل زندگی فعلی\***: [فیلد متنی یا انتخاب منطقه]
> **راهنما:** نیازی به آدرس دقیق نیست. فقط محدوده کلی محل زندگی کافی است؛ مثلاً نام شهر، منطقه، ناحیه یا نزدیک‌ترین شهر بزرگ.
* **👁️ وضعیت اقامت در کشور فعلی\***: [تک‌انتخابی]
* شهروند / دارای تابعیت
* اقامت دائم
* اقامت موقت
* ویزای تحصیلی
* ویزای کاری
* پناهندگی / حمایت بشردوستانه
* در حال پیگیری وضعیت اقامت
* **🔒 تمایل به جابجایی و مهاجرت پس از ازدواج\***: [تک‌انتخابی]
* کاملاً منعطف هستم؛ جابجایی به شهر یا کشور دیگر برایم مشکلی ندارد.
* حاضرم به شهر دیگری نقل مکان کنم، اما فقط در کشور فعلی خودم حاضر به زندگی هستم.
* فقط در شهر فعلی خودم حاضر به زندگی هستم و جابجایی برایم خط قرمز است.
* بسته به شرایط شغلی، خانوادگی، اقامتی و زندگی همسر آینده‌ام تصمیم می‌گیرم.
### اطلاعات سرپرست / ولی / رابط قابل اعتماد (فقط دختران)
**⚠️ قانون اجباری:**
* برای دختران **زیر ۲۷ سال** ثبت شماره یک رابط قابل اعتماد اجباری است.
* برای دختران **۲۷ سال و بالاتر** اجباری نیست، اما قویاً توصیه می‌شود.
> **متن مهم برای زیر ۲۷ سال:**
> «برای حفظ آرامش، امنیت و شأن شما، روند آشنایی در پلتفرم ما با الگوگیری از رسوم اصیل و محترمانه خانوادگی پیش می‌رود. حضور یک فرد معتمد (ترجیحاً پدر یا مادر) به عنوان رابط، علاوه بر اینکه نشان‌دهنده اصالت شماست، باعث می‌شود طرف مقابل نیز با جدیت، احترام و اطمینان کامل قدم پیش بگذارد.»
> **متن مهم برای بالای ۲۷ سال:**
> «هدف ما شکل‌گیری پیوندهای پایدار بر بستر اعتماد متقابل است. با اینکه ثبت اطلاعات رابط برای شما الزامی نیست، اما معرفی یک فرد معتمد (مانند پدر، مادر یا بزرگتر خانواده) نشان‌دهنده شفافیت و نیت جدی شما برای ازدواج است. پروفایل‌هایی که دارای رابط معتمد هستند، اعتبار بسیار بالاتری دارند و باعث ایجاد اطمینان خاطر بیشتری در خانواده طرف مقابل می‌شوند.»
* **🔒 نام و نام خانوادگی رابط**: [فیلد متنی — شرطی] (برای دختران زیر ۲۷ سال: اجباری)
* **🔒 نسبت رابط با شما**: [تک‌انتخابی — شرطی]
* پدر
* مادر
* برادر
* خواهر
* عمو / دایی
* خاله / عمه
* دوست خانوادگی معتمد
* معرف مذهبی / روحانی
* معرف اجتماعی معتمد
* **🔒 شماره تماس رابط با کد کشور**: [فیلد متنی — شرطی] (برای دختران زیر ۲۷ سال: اجباری)
## بخش ۳: ویژگی‌های ظاهری، سلامت و فعالیت بدنی
* **🔒 قد به سانتی‌متر\***: [فیلد عددی]
* **🔒 وزن به کیلوگرم\***: [فیلد عددی]
* **👁️ وضعیت سلامت جسمانی\***: [تک‌انتخابی]
* در سلامت کامل هستم.
* بیماری خاص یا مزمن دارم.
* نقص عضو، معلولیت یا محدودیت جسمی دارم.
* **👁️ توضیحات سلامت جسمانی**: [فیلد متنی شرطی]
* **👁️ وضعیت سلامت روان\***: [تک‌انتخابی]
* مشکل خاصی ندارم.
* سابقه مشاوره و درمان داشته‌ام.
* در حال حاضر تحت مشاوره و درمان هستم.
* **🔒 استفاده از داروهای دائمی**: [فیلد متنی اختیاری]
## بخش ۴: تحصیلات، شغل و وضعیت اقتصادی
* **👁️ بالاترین سطح تحصیلات\***: [تک‌انتخابی]
* زیر دیپلم
* دیپلم / High School
* کاردانی / Associate
* گواهینامه مهارت حرفه‌ای / Certificate
* آموزش فنی یا مهارتی
* کارشناسی / Bachelor’s Degree
* کارشناسی ارشد / Master’s Degree
* دکتری و بالاتر
* تحصیلات حوزوی / علوم دینی
* **👁️ رشته تحصیلی**: [فیلد متنی]
* **👁️ وضعیت اشتغال\***: [تک‌انتخابی]
* شاغل تمام‌وقت
* شاغل پاره‌وقت
* خویش‌فرما / فریلنسر
* کارآفرین / صاحب کسب‌وکار
* دانشجو
* دانشجو و شاغل
* دانشجو و جویای کار
* جویای کار / بیکار
* خانه‌دار
* بازنشسته
* **👁️ عنوان شغلی**: [فیلد متنی شرطی]
* **👁️ محل فعالیت**: [فیلد متنی اختیاری]
* **🔒 میزان درآمد ماهانه\***: [فیلد متنی] (مثال: 2500 USD، 1800 EUR، 3000 CAD)
* **🔒 وضعیت مالی کلی\***: [تک‌انتخابی]
* درآمد پایدار و قابل اتکا دارم.
* درآمد دارم، اما متغیر است.
* در ابتدای مسیر شغلی و مالی هستم.
* فعلاً بخشی از هزینه‌هایم توسط خانواده تأمین می‌شود.
* فعلاً درآمد مستقل ندارم.
* **🔒 توانایی تأمین هزینه‌های زندگی مشترک\***: [تک‌انتخابی]
* توانایی تأمین کامل هزینه‌های زندگی مشترک را دارم.
* توانایی تأمین بخش اصلی هزینه‌ها را دارم.
* نیاز به مشارکت مالی همسر آینده دارم.
* فعلاً در حال ساختن شرایط مالی مناسب هستم.
* این موضوع بستگی به کشور و محل زندگی آینده دارد.
* **🔒 وضعیت مسکن فعلی\***: [تک‌انتخابی]
* مالک خانه شخصی هستم.
* مستأجر هستم و مستقل زندگی می‌کنم.
* همراه خانواده / والدین زندگی می‌کنم.
* خوابگاه / مسکن دانشجویی
* مسکن سازمانی
* فعلاً شرایط موقت دارم.
* **🔒 برنامه یا توانایی تأمین مسکن بعد از ازدواج\***: [تک‌انتخابی]
* خانه شخصی دارم و امکان زندگی مشترک در آن وجود دارد.
* امکان خرید خانه دارم.
* در ابتدای ازدواج احتمالاً مستأجر خواهیم بود.
* در ابتدای ازدواج ممکن است موقتاً با خانواده زندگی کنیم.
* **🔒 توضیح تکمیلی درباره وضعیت اقتصادی و مسکن**: [فیلد متنی اختیاری]
> **راهنما:** اگر شرایط خاصی درباره کار، درآمد، اجاره، خرید خانه، مهاجرت یا محل زندگی آینده دارید، کوتاه توضیح دهید.
## بخش ۵: پیشینه خانوادگی
* **👁️ تعداد خواهر و برادر\***: [فیلد عددی]
* **👁️ وضعیت حیات والدین\***: [تک‌انتخابی]
* هر دو در قید حیات هستند.
* پدر فوت شده است.
* مادر فوت شده است.
* هر دو فوت شده‌اند.
* **🔒 وضعیت تأهل والدین\***: [تک‌انتخابی]
* با هم زندگی می‌کنند.
* از هم جدا شده‌اند / طلاق گرفته‌اند.
* یکی از والدین ازدواج مجدد داشته است.
* شرایط خانوادگی خاص دارم و در توضیحات می‌نویسم.
### فضای مذهبی و اعتقادی خانواده
**👁️ فضای مذهبی و اعتقادی خانواده شما به چه شکلی است؟**
> **راهنما:** لطفاً گزینه‌ای را انتخاب کنید که توصیف بهتری از فضای عمومی و سبک زندگی خانواده شما ارائه می‌دهد.
* **🔘 مذهبی و کاملاً مقید**: خانواده‌ای که اهتمام ویژه‌ای به انجام دقیق واجبات، رعایت کامل حدود شرعی (مانند محرم و نامحرم) و حفظ شعائر دینی و مکتب اهل‌بیت (علیهم‌السلام) در تمام شئونات زندگی دارند.
* **🔘 مذهبی (مقید به واجبات)**: خانواده‌ای که به انجام واجبات دینی (مانند نماز و روزه) و اصول اخلاق اسلامی پایبند هستند و سبک زندگی سالمی بر پایه چارچوب‌های عرفیِ جامعه مذهبی دارند.
* **🔘 سنتی (محترم به ارزش‌های دینی)**: خانواده‌ای که به اهل‌بیت و ارزش‌های اخلاقی ارادت دارند و به دین احترام می‌گذارند، اما ممکن است در انجام دقیقِ تمامی احکام شرعی و واجبات، تقید کاملی نداشته باشند.
* **🔘 غیرمذهبی / عرفی**: خانواده‌ای که با وجود احترام کلی به دین، مناسک و چارچوب‌های شرعی، نقش پررنگی در سبک زندگی، روابط و تصمیمات روزمره آن‌ها ندارد.
* **👁️ وضعیت اقتصادی خانواده**: [تک‌انتخابی]
* ضعیف
* متوسط
* خوب
* مرفه
* **👁️ توضیح کوتاه درباره خانواده**: [فیلد متنی اختیاری]
## بخش ۶: وضعیت تأهل، سابقه ازدواج و فرزندان
* **🔒 وضعیت تأهل فعلی\***: [تک‌انتخابی]
* مجرد؛ بدون هیچ‌گونه سابقه عقد یا ازدواج
* عقد ناموفق / فسخ نامزدی؛ بدون شروع زندگی مشترک
* جدا شده؛ طلاق پس از زندگی مشترک
* همسر فوت شده
* **🔒 مدت ازدواج یا عقد قبلی**: [فیلد متنی شرطی]
* **🔒 علت جدایی، در صورت وجود**: [فیلد متنی اختیاری]
* **👁️ وضعیت فرزند و تکفل\***: [چندانتخابی در صورت نیاز]
* فرزندی ندارم.
* فرزند دارم و با من زندگی می‌کند.
* فرزند دارم اما با من زندگی نمی‌کند.
* شخص دیگری غیر از فرزند تحت تکفل من است.
* **👁️ تعداد فرزندان**: [فیلد عددی شرطی]
* **👁️ توضیح کوتاه درباره شرایط فرزند یا تکفل**: [فیلد متنی شرطی]
## بخش ۷: اعتقادات، سبک زندگی، شخصیت و خطوط قرمز شخصی
* **👁️ مرجع تقلید\***: [فیلد متنی یا چک‌باکس]
* این موضوع برایم اولویت ندارد.
* **🔒 میزان تقید به نمازهای واجب\***: [تک‌انتخابی]
* همیشه مقید هستم، ترجیحاً اول وقت.
* همیشه مقید هستم، اما نه لزوماً اول وقت.
* گاهی اوقات می‌خوانم.
* نمی‌خوانم.
* **🔒 میزان تقید به روزه ماه رمضان\***: [تک‌انتخابی]
* کاملاً مقید هستم.
* به دلیل عذر شرعی یا پزشکی روزه نمی‌گیرم.
* گاهی بدون عذر شرعی روزه نمی‌گیرم.
* مقید نیستم.
### نوع پوشش و ظاهر
**👁️ نوع پوشش و ظاهر\***: [تک‌انتخابی]
> **راهنما:** لطفاً گزینه‌ای را انتخاب کنید که بیشترین تطابق را با پوشش روزمره شما در اجتماع دارد.
* **🔘 پوشش کامل اسلامی (حجاب حداکثری)**: استفاده از لباس‌هایی مانند عبایا، جلباب، چادر یا نقاب با رعایت دقیق و کامل تمامی حدود شرعی.
* **🔘 حجاب کامل با لباس‌های آزاد و پوشیده**: استفاده از لباس‌های گشاد و بلند (مانند تونیک، مانتو یا شلوار قمیص) به همراه رعایت کامل حجاب موی سر.
* **🔘 پوشش عرفی/روزمره به همراه حجاب**: استفاده از لباس‌های معمول و مدرن (مانند شلوار جین یا استایل‌های کژوال) به همراه پوشاندن موی سر با شال، روسری یا توربان.
* **🔘 پوشش محجوب و باوقار (بدون حجاب سر)**: استفاده از لباس‌های کاملاً پوشیده، سنگین و رسمی، اما بدون استفاده از شال، روسری و پوشش موی سر.
* **🔘 پوشش آزاد و مدرن (بدون رعایت حجاب)**: پوشش کاملاً آزاد و مطابق با استایل‌های روز جامعه بین‌الملل، بدون رعایت قواعد شرعی حجاب اسلامی.
* **👁️ آرایش در محیط عمومی، مخصوص خانم‌ها**: [تک‌انتخابی]
* اصلاً آرایش نمی‌کنم.
* فقط آرایش بسیار ملایم دارم.
* آرایش کامل می‌کنم.
### نگرش سیاسی و اجتماعی
**🔒 نگرش شما به رابطه دین و سیاست (و خط قرمزهای همسر آینده)**: [تک‌انتخابی]
> **راهنما:** لطفاً گزینه‌ای را انتخاب کنید که نگاه شما به مذهب و انتظار شما از همسر آینده‌تان را بهتر توصیف می‌کند.
* **🔘** دین را از سیاست جدا نمی‌دانم و همسرم نیز حتماً باید دغدغه و نگاه سیاسی-اجتماعی در دین داشته باشد.
* **🔘** دین را از سیاست جدا نمی‌دانم، اما داشتن دغدغه یا فعالیت سیاسی برای همسرم الزامی نیست و برایم خط قرمز محسوب نمی‌شود.
* **🔘** نگاهم به تشیع کاملاً سنتی و غیرسیاسی است و به هیچ وجه با فردی که نگاه سیاسی به دین دارد نمی‌توانم ازدواج کنم.
* **🔘** نگاهم به تشیع غیرسیاسی است، اما اگر همسر آینده‌ام نگاه سیاسی داشته باشد برایم خط قرمز نیست و با آن کنار می‌آیم.
* **🔘** اساساً این مفاهیم و دسته‌بندی‌ها (تشیع سیاسی یا غیرسیاسی) برایم مطرح نیست یا چندان درگیر این مسائل نیستم.
**🔒 موضع شما نسبت به حاکمیت/دولت فعلی کشور محل سکونتتان**:
> **راهنما:** این بخش برای جلوگیری از تنش‌های جدیِ اعتقادی در زندگی مشترک طراحی شده است.
* **🔘** حامی حاکمیت/دولت فعلی کشورم هستم و مخالفت جدی طرف مقابل با حاکمیت، برایم خط قرمز است.
* **🔘** حامی حاکمیت/دولت فعلی کشورم هستم، اما تفاوت دیدگاه یا مخالفت همسرم در این زمینه برایم خط قرمز نیست.
* **🔘** مخالف حاکمیت/دولت فعلی کشورم هستم و حمایت جدی طرف مقابل از حاکمیت، برایم خط قرمز است.
* **🔘** مخالف حاکمیت/دولت فعلی کشورم هستم، اما تفاوت دیدگاه یا حمایت همسرم از دولت برایم خط قرمز نیست.
* **🔘** موضع‌گیری خاصی (حمایت یا مخالفت جدی) ندارم و تفاوت دیدگاه‌های سیاسی برایم اهمیت چندانی در زندگی مشترک ندارد.
### حدود روابط اجتماعی
**👁️ حدود روابط شما با جنس مخالف (در محیط کار، فامیل و اجتماع) چگونه است؟**
> **راهنما:** لطفاً گزینه‌ای را انتخاب کنید که رفتار روزمره شما را در مواجهه با نامحرم بهتر توصیف می‌کند.
* **🔘 بسیار رسمی و محدود (فقط در حد ضرورت)**: ارتباطاتم با نامحرم بسیار کوتاه و کاملاً رسمی است و از هرگونه گفتگوی غیرضروری، معاشرت مازاد یا شوخی پرهیز می‌کنم.
* **🔘 محترمانه و متعارف (بدون صمیمیت)**: ارتباطاتم در اجتماع و فامیل محترمانه و با خوش‌رویی است، اما حریم و مرز جدی برای پرهیز از شوخی، راحتی بیش‌ازحد یا گفتگوهای شخصی دارم.
* **🔘 اجتماعی و راحت‌تر (در چارچوب شرع)**: حضور فعال و راحتی در اجتماع و فامیل دارم؛ معاشرت، گفتگوی صمیمانه و شوخی‌های عرفی را تا زمانی که از خطوط قرمز شرعی و اخلاقی خارج نشود، بلامانع می‌دانم.
* **🔘 بدون مرزبندی خاص**: در ارتباط با جنس مخالف کاملاً راحت هستم و مرزبندی‌های سنتی یا حساسیت‌های مذهبی در معاشرت‌ها، شوخی‌ها و دوستی‌های اجتماعی ندارم.
### مصرف دخانیات، الکل و مواد
* **🔒 سیگار\***: [تک‌انتخابی]
* اصلاً مصرف نمی‌کنم.
* گاهی / تفریحی مصرف می‌کنم.
* مرتب مصرف می‌کنم.
* در حال ترک هستم.
* **🔒 قلیان\***: [تک‌انتخابی]
* اصلاً مصرف نمی‌کنم.
* گاهی / تفریحی مصرف می‌کنم.
* مرتب مصرف می‌کنم.
* در حال ترک هستم.
* **🔒 ویپ / سیگار الکترونیک\***: [تک‌انتخابی]
* اصلاً مصرف نمی‌کنم.
* گاهی / تفریحی مصرف می‌کنم.
* مرتب مصرف می‌کنم.
* در حال ترک هستم.
* **🔒 مشروبات الکلی\***: [تک‌انتخابی]
* اصلاً مصرف نمی‌کنم.
* مصرف الکل برای من خط قرمز جدی است.
* گاهی مصرف می‌کنم.
* مصرف می‌کنم.
* **🔒 مواد مخدر یا مواد غیرقانونی\***: [تک‌انتخابی]
* هرگز مصرف نکرده‌ام.
* سابقه مصرف داشته‌ام، اما اکنون مصرف نمی‌کنم.
* مصرف می‌کنم.
* در حال ترک یا درمان هستم.
### سبک زندگی و سلیقه‌ها
* **👁️ نگرش به موسیقی\***: [تک‌انتخابی]
* به هیچ نوع موسیقی گوش نمی‌دهم.
* فقط نشید، آکاپلا، مذهبی یا بدون ساز گوش می‌دهم.
* موسیقی حلال و مجاز گوش می‌دهم.
* حساسیت خاصی روی نوع موسیقی ندارم.
* **🔒 نگرش به مراسم عروسی\***: [تک‌انتخابی]
* بدون مراسم یا بسیار ساده.
* کاملاً شرعی و تفکیک‌شده.
* مختلط محترمانه، بدون رقص و موسیقی غیرشرعی.
* مختلط همراه با موسیقی و رقص.
* هنوز تصمیم قطعی ندارم و بسته به توافق خانواده‌ها تصمیم می‌گیرم.
* **👁️ ویژگی‌های شخصیتی خودتان\***: [چندانتخابی]
* آرام و درونگرا، اجتماعی و برونگرا، احساسی، منطقی، شوخ‌طبع، جدی، اهل گفتگو، خانواده‌دوست، مستقل، مسئولیت‌پذیر، صبور، منظم، اهل برنامه‌ریزی، انعطاف‌پذیر، حساس و دقیق، اهل رشد فردی
* **👁️ سرگرمی‌ها و علایق اصلی\***: [چندانتخابی]
* تلاوت قرآن و مطالعه دینی، حضور در مسجد و هیئت، فعالیت مذهبی و فرهنگی، سفر زیارتی، سفر سیاحتی، طبیعت‌گردی، ورزش، مطالعه، فیلم و سینما، آشپزی، هنر، موسیقی، بازی‌های فکری، فعالیت اجتماعی و خیریه، کافه و رستوران، یادگیری زبان، تکنولوژی و کامپیوتر
* **👁️ توضیح کوتاه درباره سبک زندگی خودتان**: [فیلد متنی اختیاری]
## بخش ۸: معیارها و خطوط قرمز همسر آینده
**⚠️ این بخش کاملاً محرمانه است و فقط برای مچینگ و بررسی کارشناسان استفاده می‌شود.**
* **🔒 بازه سنی مطلوب همسر آینده\***: از [عدد] تا [عدد] سال
* **🔒 بازه قدی مطلوب همسر آینده\***: [چندانتخابی]
* مهم نیست. / کمتر از ۱۶۰ / ۱۶۰ تا ۱۷۰ / ۱۷۰ تا ۱۸۰ / ۱۸۰ تا ۱۹۰ / بالای ۱۹۰
* **🔒 تیپ بدنی مطلوب همسر آینده\***: [چندانتخابی]
* مهم نیست. / لاغراندام / متناسب / ورزیده / توپر / درشت‌اندام
* **🔒 رنگ پوست مطلوب همسر آینده\***: [چندانتخابی]
* مهم نیست. / سفید / روشن / گندم‌گون / سبزه روشن / سبزه تیره / قهوه‌ای / تیره / سیاه‌پوست
* **🔒 قومیت، زبان یا ملیت مطلوب همسر آینده**: [فیلد متنی اختیاری]
* **🔒 حداقل سطح تحصیلات همسر آینده\***: [تک‌انتخابی]
* مهم نیست.
* حداقل دیپلم
* حداقل کارشناسی
* حداقل کارشناسی ارشد
* دکتری یا بالاتر ترجیح دارد.
* حتماً تحصیلات حوزوی / علوم دینی داشته باشد.
* تحصیلات دانشگاهی مهم نیست، اما بلوغ فکری مهم است.
* **🔒 وضعیت اشتغال مطلوب همسر آینده\***: [چندانتخابی]
* مهم نیست. / شاغل باشد. / دانشجو باشد. / خانه‌دار باشد. / کارآفرین / صاحب کسب‌وکار باشد. / در مسیر رشد شغلی باشد. / بسته به شرایط قابل گفتگو است.
* **🔒 پذیرش سابقه عقد یا ازدواج همسر آینده\***: [تک‌انتخابی]
* فقط مجرد؛ سابقه عقد یا ازدواج قبلی برایم خط قرمز است.
* مجرد ترجیح دارد، اما شرایط خاص را بررسی می‌کنم.
* تفاوتی ندارد.
* بستگی به علت جدایی، مدت ازدواج قبلی و شرایط خانوادگی دارد.
* **🔒 پذیرش داشتن فرزند از ازدواج قبلی\***: [تک‌انتخابی]
* به هیچ وجه نمی‌پذیرم.
* در شرایط خاص می‌پذیرم.
* تفاوتی ندارد.
* فقط اگر فرزند با او زندگی نکند، بررسی می‌کنم.
* **🔒 معیارهای پوشش و حجاب همسر آینده\***: [تک‌انتخابی متناسب با جنسیت]
* **برای آقایانی که به دنبال همسر خانم هستند:** پوشش کامل اسلامی الزامی است / حجاب شرعی الزامی است / پوشش عرفی همراه با حجاب / پوشش محجوب و سنگین / حساسیت خاصی ندارم.
* **برای خانم‌هایی که به دنبال همسر آقا هستند:** پوشش رسمی، سنگین و مذهبی / ساده، مرتب و محجوب / پوشش معمولی و آراسته / پوشش مدرن / حساسیت خاصی ندارم.
* **🔒 تمایل به ادامه تحصیل همسر آینده\***: [تک‌انتخابی]
* مهم نیست / حتماً قصد ادامه تحصیل داشته باشد / مثبت است اما الزامی نیست / ترجیح می‌دهم ادامه ندهد / بسته به شرایط تصمیم می‌گیریم.
* **🔒 تمایل به اشتغال همسر آینده\***: [تک‌انتخابی]
* مهم نیست / حتماً شاغل باشد / حتماً خانه‌دار باشد / اختیار با خودش باشد / بسته به توافق و فرزندآوری / فقط شغل سازگار با ارزش‌های دینی.
* **🔒 وضعیت خانوادگی همسر آینده\***: [چندانتخابی]
* مهم نیست / والدین طلاق نگرفته باشند / پدر در قید حیات باشد / مادر در قید حیات باشد / فضای مذهبی خانواده مهم است / خانواده اهل ارتباط سالم باشند.
* **🔒 سطح ارتباط با خانواده‌ها بعد از ازدواج\***: [تک‌انتخابی]
* ارتباط نزدیک و پررنگ / ارتباط محترمانه با حفظ استقلال / ارتباط محدود و کنترل‌شده / بسته به شرایط خانواده‌ها.
* **🔒 میزان پایبندی مذهبی مطلوب همسر آینده\***: [تک‌انتخابی]
* بسیار مذهبی و مقید / مذهبی معتدل / عرفی اما محترم به دین / اهمیت زیادی ندارد.
* **🔒 نگرش سیاسی مطلوب همسر آینده\***: [تک‌انتخابی]
* حتماً همسو با دیدگاه من باشد / تفاوت دیدگاه مهم نیست / ترجیح می‌دهم سیاسی نباشد / سیاست اهمیتی ندارد.
* **🔒 حدود روابط همسر آینده با جنس مخالف\***: [تک‌انتخابی]
* بسیار رسمی و محدود / معمولی و محترمانه / اجتماعی‌تر اما در چارچوب شرع و اخلاق.
* **🔒 خط قرمزهای مربوط به دخانیات، الکل و مواد در همسر آینده\***: [چندانتخابی]
* سیگار خط قرمز است / قلیان خط قرمز است / ویپ خط قرمز است / الکل خط قرمز جدی است / مواد مخدر خط قرمز قطعی است / مصرف تفریحی در شرایط خاص می‌پذیرم / هیچ‌کدام خط قرمز نیست.
* **🔒 نگرش همسر آینده به موسیقی\***: [تک‌انتخابی]
* نباید گوش بدهد / فقط مذهبی و بدون ساز / حلال و مجاز / حساسیت خاصی ندارم.
* **🔒 نگرش همسر آینده به مراسم عروسی\***: [تک‌انتخابی]
* ساده یا بدون مراسم / کاملاً شرعی و تفکیک‌شده / مختلط محترمانه بدون رقص و موسیقی غیرشرعی / مختلط با موسیقی و رقص / بسته به توافق خانواده‌ها.
* **🔒 پذیرش بیماری خاص، معلولیت یا شرایط درمانی در همسر آینده\***: [تک‌انتخابی]
* خط قرمز است / در شرایط خاص با توضیح بررسی می‌کنم / مانع زندگی سالم نباشد می‌پذیرم / موردی بررسی می‌کنم.
* **🔒 پذیرش سابقه مشاوره یا درمان روان‌شناختی همسر آینده\***: [تک‌انتخابی]
* مشکلی ندارد / بستگی به شرایط فعلی دارد / خط قرمز است / نیاز به بررسی جدی‌تر دارد.
* **🔒 ترجیح درباره محل زندگی بعد از ازدواج\***: [تک‌انتخابی]
* مهم نیست / ترجیح می‌دهم در کشور خودم بمانم / در کشور همسر زندگی کنیم / فقط شهر فعلی خودم / آماده مهاجرت هستم / بسته به شرایط تصمیم می‌گیرم.
* **🔒 زندگی با خانواده بعد از ازدواج\***: [تک‌انتخابی]
* فقط مستقل / موقت با خانواده قابل قبول است / زندگی با خانواده مشکلی ندارد / بستگی به شرایط دارد.
* **🔒 توضیحات تکمیلی و سایر خطوط قرمز\***: [فیلد متنی بزرگ]
> **راهنما:** هر نکته مهمی که در گزینه‌های بالا نبود، اینجا بنویسید.
## بخش ۹: بارگذاری مدارک، احراز هویت و تصاویر
* **🔒 تصویر چهره؛ عکس جدید و واضح\***: [بارگذاری تصویر]
**⚠️ نکته مهم امنیتی:** این تصویر به هیچ عنوان به طرف مقابل یا سایر کاربران نمایش داده نمی‌شود. عکس شما فقط توسط کارشناسان تأییدشده و هم‌جنس پلتفرم برای احراز هویت، بررسی تطابق ظاهری و جلوگیری از اختلافات ظاهری شدید بررسی می‌شود.
> **راهنمای عکس مناسب:**
> * عکس جدید و واضح باشد.
> * چهره کاملاً مشخص باشد.
> * فیلتر سنگین نداشته باشد.
> * عکس گروهی نباشد.
> * نور کافی داشته باشد.
* **🔒 تصویر کارت شناسایی معتبر\***: [بارگذاری تصویر]
> **مدارک قابل قبول:** پاسپورت، کارت ملی، گواهینامه، کارت اقامت معتبر، مدرک شناسایی رسمی کشور محل سکونت.
* **🔒 تأیید تطابق مدارک و اطلاعات\***: [چک‌باکس]
* ☑️ تأیید می‌کنم که نام، سن، تصویر و اطلاعات هویتی من با مدارک بارگذاری‌شده مطابقت دارد.

48
src/components/questions/question-checkbox.tsx

@ -1,6 +1,5 @@
"use client"; "use client";
import { useId } from "react";
import type { QuestionField } from "@/data/question-data"; import type { QuestionField } from "@/data/question-data";
import { useQuestionAnswers } from "./question-answer-storage"; import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title"; import QuestionTitle from "./question-title";
@ -16,13 +15,15 @@ export function QuestionCheckbox({
questionIndex, questionIndex,
disabled, disabled,
}: QuestionCheckboxProps) { }: QuestionCheckboxProps) {
const groupId = useId();
const options = question.extras.options;
const options = question.extras.options || [];
const { getAnswerValue, setAnswerValue } = useQuestionAnswers(); const { getAnswerValue, setAnswerValue } = useQuestionAnswers();
const rawValue = getAnswerValue(question, questionIndex); const rawValue = getAnswerValue(question, questionIndex);
// Ensure value is an array
const value = Array.isArray(rawValue) ? rawValue : (rawValue ? [String(rawValue)] : []);
const value = Array.isArray(rawValue)
? rawValue
: rawValue
? [String(rawValue)]
: [];
if (options.length === 0) { if (options.length === 0) {
return null; return null;
@ -36,30 +37,43 @@ export function QuestionCheckbox({
nextValue = [...value, option]; nextValue = [...value, option];
} }
// Handle "Doesn't matter" (مهم نیست) logic if it exists
const doesnMatterOption = options.find(o => o.includes("مهم نیست") || o.includes("Doesn't matter"));
const doesnMatterOption = options.find(
(o) => o.includes("مهم نیست") || o.includes("Doesn't matter"),
);
if (doesnMatterOption) { if (doesnMatterOption) {
if (option === doesnMatterOption) { if (option === doesnMatterOption) {
// If "Doesn't matter" is selected, clear everything else
nextValue = [doesnMatterOption]; nextValue = [doesnMatterOption];
} else if (nextValue.includes(doesnMatterOption)) { } else if (nextValue.includes(doesnMatterOption)) {
// If something else is selected, remove "Doesn't matter"
nextValue = nextValue.filter(v => v !== doesnMatterOption);
nextValue = nextValue.filter((v) => v !== doesnMatterOption);
} }
} }
setAnswerValue(question, questionIndex, nextValue.length > 0 ? nextValue : null);
setAnswerValue(
question,
questionIndex,
nextValue.length > 0 ? nextValue : null,
);
}; };
const isShortOptions =
options.length <= 4 && options.every((opt) => opt.length <= 15);
return ( return (
<div <div
className={[ className={[
"flex w-full flex-col gap-3 transition-opacity duration-200",
"flex w-full flex-col gap-3.5 transition-opacity duration-200",
disabled ? "pointer-events-none opacity-30" : "", disabled ? "pointer-events-none opacity-30" : "",
].join(" ")} ].join(" ")}
> >
<QuestionTitle question={question} /> <QuestionTitle question={question} />
<div className="flex flex-col gap-3">
<div
className={
isShortOptions
? "flex flex-row flex-wrap items-center gap-3 pt-1"
: "flex flex-col gap-3.5 pt-1"
}
>
{options.map((option) => { {options.map((option) => {
const optionId = `checkbox-${questionIndex}-${option}`; const optionId = `checkbox-${questionIndex}-${option}`;
const isSelected = value.includes(option); const isSelected = value.includes(option);
@ -69,11 +83,13 @@ export function QuestionCheckbox({
key={option} key={option}
htmlFor={optionId} htmlFor={optionId}
className={[ className={[
"w-full cursor-pointer rounded-[12px] px-4 py-3.5",
"text-start group-14 leading-tight font-semibold transition-all duration-200",
"cursor-pointer rounded-[16px] font-semibold text-[15px] transition-all duration-200 active:scale-[0.99]",
isShortOptions
? "flex-1 min-w-[90px] px-5 py-3.5 text-center"
: "w-full px-5 py-4 text-start leading-snug",
isSelected isSelected
? "bg-[#F0445B] text-white shadow-[0_8px_20px_rgba(240,68,91,0.25)]" ? "bg-[#F0445B] text-white shadow-[0_8px_20px_rgba(240,68,91,0.25)]"
: "bg-[#F5F5F5] text-[#181818] hover:bg-[#EBEBEB]",
: "bg-[#FAFAFA] text-[#181818] hover:bg-white shadow-[0_2px_6px_rgba(0,0,0,0.03)] border border-[#F0EDED]",
].join(" ")} ].join(" ")}
> >
<input <input

132
src/components/questions/question-dropdown.tsx

@ -17,15 +17,22 @@ export function QuestionDropdown({
disabled, disabled,
}: QuestionDropdownProps) { }: QuestionDropdownProps) {
const { getAnswerValue, setAnswerValue } = useQuestionAnswers(); const { getAnswerValue, setAnswerValue } = useQuestionAnswers();
const value = getAnswerValue(question, questionIndex);
const selectValue = typeof value === "string" ? value : "";
const rawValue = getAnswerValue(question, questionIndex);
const isMulti = Array.isArray(rawValue) || question.type === "checkbox";
const selectedList = Array.isArray(rawValue)
? rawValue
: typeof rawValue === "string" && rawValue
? [rawValue]
: [];
const singleValue = typeof rawValue === "string" ? rawValue : "";
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const [searchQuery, setSearchQuery] = useState(""); const [searchQuery, setSearchQuery] = useState("");
const containerRef = useRef<HTMLDivElement>(null); const containerRef = useRef<HTMLDivElement>(null);
const listRef = useRef<HTMLDivElement>(null); const listRef = useRef<HTMLDivElement>(null);
// Lock page scroll entirely when dropdown is open
// Lock page scroll when dropdown is open
useEffect(() => { useEffect(() => {
if (isOpen) { if (isOpen) {
document.body.classList.add("dropdown-open"); document.body.classList.add("dropdown-open");
@ -43,7 +50,7 @@ export function QuestionDropdown({
}; };
}, [isOpen]); }, [isOpen]);
// Prevent wheel scroll from escaping the options list at boundaries
// Prevent wheel scroll from escaping the options list
const handleListWheel = useCallback((e: React.WheelEvent<HTMLDivElement>) => { const handleListWheel = useCallback((e: React.WheelEvent<HTMLDivElement>) => {
e.stopPropagation(); e.stopPropagation();
const el = listRef.current; const el = listRef.current;
@ -79,11 +86,29 @@ export function QuestionDropdown({
option.toLowerCase().includes(searchQuery.toLowerCase()), option.toLowerCase().includes(searchQuery.toLowerCase()),
); );
const displayLabel = isMulti
? selectedList.length > 0
? selectedList.join(", ")
: question.extras.placeHolder || "Select"
: singleValue || question.extras.placeHolder || "Select";
const hasSelectedValue = isMulti ? selectedList.length > 0 : Boolean(singleValue);
const toggleMultiOption = (option: string) => {
let nextValue: string[];
if (selectedList.includes(option)) {
nextValue = selectedList.filter((v) => v !== option);
} else {
nextValue = [...selectedList, option];
}
setAnswerValue(question, questionIndex, nextValue.length > 0 ? nextValue : null);
};
return ( return (
<div <div
ref={containerRef} ref={containerRef}
className={[ className={[
"relative flex w-full flex-col gap-2 transition-opacity duration-200",
"relative flex w-full flex-col gap-2.5 transition-opacity duration-200",
disabled ? "pointer-events-none opacity-30" : "", disabled ? "pointer-events-none opacity-30" : "",
].join(" ")} ].join(" ")}
> >
@ -94,22 +119,30 @@ export function QuestionDropdown({
type="button" type="button"
disabled={disabled} disabled={disabled}
onClick={() => setIsOpen(!isOpen)} onClick={() => setIsOpen(!isOpen)}
className="flex h-[55px] w-full items-center justify-between rounded-[11px] border border-[#BCBCBC] bg-white py-[10px] px-[10px] group-12 text-[#181818] outline-none transition-all focus:border-[#6F6F6F]"
className={[
"flex h-[54px] w-full items-center justify-between rounded-[16px] border bg-white px-4.5 text-start transition-all cursor-pointer outline-none",
isOpen ? "border-[#6F6F6F] ring-1 ring-[#6F6F6F]" : "border-[#D0D5DD] hover:border-[#98A2B3]",
].join(" ")}
>
<span
className={[
"text-[15px] font-medium truncate",
hasSelectedValue ? "text-[#181818]" : "text-[#667085]",
].join(" ")}
> >
<span className={selectValue ? "text-[#181818]" : "text-[#8B8B8B]"}>
{selectValue || question.extras.placeHolder || "Select"}
{displayLabel}
</span> </span>
<svg <svg
width="16" width="16"
height="9"
viewBox="0 0 16 9"
height="10"
viewBox="0 0 16 10"
fill="none" fill="none"
className={["transition-transform duration-200", isOpen ? "rotate-180" : ""].join(" ")}
className={["shrink-0 transition-transform duration-200", isOpen ? "rotate-180" : ""].join(" ")}
> >
<path <path
d="M14.75 0.75L7.75 7.75L0.75 0.75"
stroke="#151C31"
strokeWidth="1.5"
d="M14.75 1.25L7.75 8.25L0.75 1.25"
stroke="#344054"
strokeWidth="1.75"
strokeLinecap="round" strokeLinecap="round"
strokeLinejoin="round" strokeLinejoin="round"
/> />
@ -118,27 +151,28 @@ export function QuestionDropdown({
{/* Dropdown Options Panel */} {/* Dropdown Options Panel */}
{isOpen && ( {isOpen && (
<div className="absolute top-[calc(100%+8px)] left-0 z-50 flex w-full flex-col gap-4 rounded-[11px] bg-white p-4 shadow-[0_4px_10px_rgba(0,0,0,0.05)] border border-[#E7D8D5]">
{/* Search Input Bar */}
<div className="flex h-[46px] w-full items-center gap-2 rounded-[10px] border border-[#E7D8D5] bg-[#F7F3F2] px-3 transition-colors focus-within:border-[#6F6F6F] focus-within:bg-white">
<div className="absolute top-[calc(100%+8px)] left-0 z-50 flex w-full flex-col gap-3.5 rounded-[20px] bg-white p-4.5 shadow-[0_12px_36px_rgba(0,0,0,0.09)] border border-[#EAECF0] animate-in fade-in zoom-in-95 duration-150">
{/* Search Input Bar (shown if options > 3 or search is active) */}
{options.length > 3 || searchQuery ? (
<div className="flex h-[46px] w-full items-center gap-2.5 rounded-[12px] bg-[#EFEFEF] px-3.5 transition-colors focus-within:bg-[#E8E8E8]">
<svg <svg
width="16"
height="16"
viewBox="0 0 16 16"
width="18"
height="18"
viewBox="0 0 18 18"
fill="none" fill="none"
className="shrink-0 text-[#747474]"
className="shrink-0 text-[#667085]"
> >
<path <path
d="M7.33333 12.6667C10.2789 12.6667 12.6667 10.2789 12.6667 7.33333C12.6667 4.38781 10.2789 2 7.33333 2C4.38781 2 2 4.38781 2 7.33333C2 10.2789 4.38781 12.6667 7.33333 12.6667Z"
stroke="#747474"
strokeWidth="1.5"
d="M8.25 14.25C11.5637 14.25 14.25 11.5637 14.25 8.25C14.25 4.93629 11.5637 2.25 8.25 2.25C4.93629 2.25 2.25 4.93629 2.25 8.25C2.25 11.5637 4.93629 14.25 8.25 14.25Z"
stroke="#667085"
strokeWidth="1.75"
strokeLinecap="round" strokeLinecap="round"
strokeLinejoin="round" strokeLinejoin="round"
/> />
<path <path
d="M14 14L11.1 11.1"
stroke="#747474"
strokeWidth="1.5"
d="M15.75 15.75L12.5 12.5"
stroke="#667085"
strokeWidth="1.75"
strokeLinecap="round" strokeLinecap="round"
strokeLinejoin="round" strokeLinejoin="round"
/> />
@ -148,18 +182,19 @@ export function QuestionDropdown({
value={searchQuery} value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)} onChange={(e) => setSearchQuery(e.target.value)}
placeholder="Search..." placeholder="Search..."
className="flex-1 bg-transparent group-12 text-[#181818] outline-none placeholder:text-[#9D8F8C]"
className="flex-1 bg-transparent text-[14px] font-medium text-[#181818] outline-none placeholder:text-[#98A2B3]"
/> />
{searchQuery ? ( {searchQuery ? (
<button <button
type="button" type="button"
onClick={() => setSearchQuery("")} onClick={() => setSearchQuery("")}
className="group-10 text-[#747474] hover:text-[#181818]"
className="text-[#667085] hover:text-[#181818] text-xs font-semibold"
> >
</button> </button>
) : null} ) : null}
</div> </div>
) : null}
{/* Options List */} {/* Options List */}
<div <div
@ -168,38 +203,59 @@ export function QuestionDropdown({
onTouchStart={(e) => e.stopPropagation()} onTouchStart={(e) => e.stopPropagation()}
onTouchMove={(e) => e.stopPropagation()} onTouchMove={(e) => e.stopPropagation()}
onTouchEnd={(e) => e.stopPropagation()} onTouchEnd={(e) => e.stopPropagation()}
className="flex max-h-[200px] flex-col gap-3 overflow-y-auto overscroll-contain pr-1"
className="flex max-h-[220px] flex-col gap-3.5 overflow-y-auto overscroll-contain pr-1"
> >
{filteredOptions.length > 0 ? ( {filteredOptions.length > 0 ? (
filteredOptions.map((option) => { filteredOptions.map((option) => {
const isSelected = selectValue === option;
const isSelected = isMulti
? selectedList.includes(option)
: singleValue === option;
return ( return (
<button <button
key={option} key={option}
type="button" type="button"
onClick={() => { onClick={() => {
if (isMulti) {
toggleMultiOption(option);
} else {
setAnswerValue(question, questionIndex, option); setAnswerValue(question, questionIndex, option);
setIsOpen(false); setIsOpen(false);
}
}} }}
className="flex w-full items-center gap-2 text-left"
className="flex w-full items-center gap-3 text-start cursor-pointer group/opt py-0.5"
> >
{/* Circle checkbox indicator */}
{/* Option Indicator Icon */}
{isMulti ? (
/* Multi-select / Checkbox style */
<div
className={[
"size-[20px] shrink-0 rounded-[6px] transition-all duration-150",
isSelected
? "bg-[#F2465F] shadow-xs"
: "border-[2px] border-[#344054] bg-transparent group-hover/opt:border-[#181818]",
].join(" ")}
/>
) : (
/* Single-select / Radio style */
<div <div
className={[ className={[
"h-[14px] w-[14px] shrink-0 rounded-full border transition-all",
"size-[20px] shrink-0 rounded-full transition-all duration-150",
isSelected isSelected
? "border-[#F0445B] bg-[#F0445B]"
: "border-[#4D4D4D] bg-transparent",
? "bg-[#F2465F] shadow-xs"
: "border-[2px] border-[#344054] bg-transparent group-hover/opt:border-[#181818]",
].join(" ")} ].join(" ")}
/> />
<span className="group-12 font-bold text-[#4D4D4D]">
)}
<span className="text-[15px] font-bold text-[#181818]">
{option} {option}
</span> </span>
</button> </button>
); );
}) })
) : ( ) : (
<span className="group-10 text-gray-400">No options found</span>
<span className="py-2 text-[13px] text-[#667085]">No options found</span>
)} )}
</div> </div>
</div> </div>

11
src/components/questions/question-photo.tsx

@ -7,6 +7,7 @@ import { useUploadTmpMediaMutation } from "@/hooks/marriage/use-upload-tmp-media
import { getApiRequestUrl } from "@/lib/http"; import { getApiRequestUrl } from "@/lib/http";
import { isInFlutterWebView, uploadFile } from "@/lib/webview-actions"; import { isInFlutterWebView, uploadFile } from "@/lib/webview-actions";
import { useQuestionAnswers } from "./question-answer-storage"; import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title";
type QuestionPhotoProps = { type QuestionPhotoProps = {
question: QuestionField; question: QuestionField;
@ -158,10 +159,12 @@ export function QuestionPhoto({
<div <div
data-question-answered={hasAnswer ? "true" : "false"} data-question-answered={hasAnswer ? "true" : "false"}
className={[ className={[
"flex w-full flex-col items-center text-center transition-opacity duration-200",
"flex w-full flex-col items-center text-center transition-opacity duration-200 gap-4",
disabled ? "pointer-events-none opacity-30" : "", disabled ? "pointer-events-none opacity-30" : "",
].join(" ")} ].join(" ")}
> >
<QuestionTitle question={question} className="justify-center text-center" />
<input <input
id={inputId} id={inputId}
type="file" type="file"
@ -222,12 +225,6 @@ export function QuestionPhoto({
)} )}
</div> </div>
<span className="mt-4 block group-14 leading-none font-semibold text-[#36363C]">
{question.title}
{question.required ? (
<span className="ml-1 text-[#F33D52]">*</span>
) : null}
</span>
{descriptionContent ? ( {descriptionContent ? (
<span className="mt-4 block max-w-[350px] group-10 leading-[1.35] font-semibold text-[#D44747]"> <span className="mt-4 block max-w-[350px] group-10 leading-[1.35] font-semibold text-[#D44747]">
{descriptionContent} {descriptionContent}

32
src/components/questions/question-radio.tsx

@ -1,7 +1,5 @@
"use client"; "use client";
import { useId } from "react";
import type { QuestionField } from "@/data/question-data"; import type { QuestionField } from "@/data/question-data";
import { useQuestionAnswers } from "./question-answer-storage"; import { useQuestionAnswers } from "./question-answer-storage";
import QuestionTitle from "./question-title"; import QuestionTitle from "./question-title";
@ -17,25 +15,35 @@ export function QuestionRadio({
questionIndex, questionIndex,
disabled, disabled,
}: QuestionRadioProps) { }: QuestionRadioProps) {
const groupId = useId();
const options = question.extras.options;
const options = question.extras.options || [];
const { getAnswerValue, setAnswerValue } = useQuestionAnswers(); const { getAnswerValue, setAnswerValue } = useQuestionAnswers();
const value = getAnswerValue(question, questionIndex); const value = getAnswerValue(question, questionIndex);
if (question.extras.options.length === 0) {
if (options.length === 0) {
return null; return null;
} }
// Render horizontally if all options are short (e.g. Single, Divorced, Widowed)
const isShortOptions =
options.length <= 4 && options.every((opt) => opt.length <= 15);
return ( return (
<div <div
className={[ className={[
"flex w-full flex-col gap-3 transition-opacity duration-200",
"flex w-full flex-col gap-3.5 transition-opacity duration-200",
disabled ? "pointer-events-none opacity-30" : "", disabled ? "pointer-events-none opacity-30" : "",
].join(" ")} ].join(" ")}
> >
<QuestionTitle question={question} /> <QuestionTitle question={question} />
<div className="flex flex-col gap-3">
{question.extras.options.map((option) => {
<div
className={
isShortOptions
? "flex flex-row flex-wrap items-center gap-3 pt-1"
: "flex flex-col gap-3.5 pt-1"
}
>
{options.map((option) => {
const optionId = `question-${questionIndex}-${option}`; const optionId = `question-${questionIndex}-${option}`;
const isSelected = String(value) === option; const isSelected = String(value) === option;
@ -44,11 +52,13 @@ export function QuestionRadio({
key={option} key={option}
htmlFor={optionId} htmlFor={optionId}
className={[ className={[
"w-full cursor-pointer rounded-[12px] px-4 py-3.5",
"text-start group-14 leading-tight font-semibold transition-all duration-200",
"cursor-pointer rounded-[16px] font-semibold text-[15px] transition-all duration-200 active:scale-[0.99]",
isShortOptions
? "flex-1 min-w-[90px] px-5 py-3.5 text-center"
: "w-full px-5 py-4 text-start leading-snug",
isSelected isSelected
? "bg-[#F0445B] text-white shadow-[0_8px_20px_rgba(240,68,91,0.25)]" ? "bg-[#F0445B] text-white shadow-[0_8px_20px_rgba(240,68,91,0.25)]"
: "bg-[#F5F5F5] text-[#181818] hover:bg-[#EBEBEB]",
: "bg-[#FAFAFA] text-[#181818] hover:bg-white shadow-[0_2px_6px_rgba(0,0,0,0.03)] border border-[#F0EDED]",
].join(" ")} ].join(" ")}
> >
<input <input

50
src/components/questions/question-title.tsx

@ -1,5 +1,10 @@
"use client";
import { useState } from "react";
import { IoEyeOff } from "react-icons/io5"; import { IoEyeOff } from "react-icons/io5";
import type { QuestionField } from "@/data/question-data"; import type { QuestionField } from "@/data/question-data";
import { useI18n } from "@/translations/provider";
import HelpModal from "@/components/ui/help-modal";
type QuestionTitleProps = { type QuestionTitleProps = {
question: QuestionField; question: QuestionField;
@ -7,34 +12,61 @@ type QuestionTitleProps = {
}; };
export function QuestionTitle({ question, className }: QuestionTitleProps) { export function QuestionTitle({ question, className }: QuestionTitleProps) {
const { dictionary: t } = useI18n();
const [isHelpOpen, setIsHelpOpen] = useState(false);
return ( return (
<span className="block">
<span className="block w-full">
{question.private ? ( {question.private ? (
<span className="mb-3 mx-auto flex w-fit items-center gap-1.5 rounded-[10px] bg-[#F6D7D8] px-2.5 py-1.5 group-10 leading-tight font-semibold text-[#DF4146]">
<span className="mb-4 mx-auto flex w-fit items-center gap-2 rounded-full bg-[#F8D7DA] px-4 py-2 text-center text-[12.5px] font-bold text-[#D9383A]">
<IoEyeOff <IoEyeOff
aria-hidden="true" aria-hidden="true"
className="shrink-0 text-[18px] text-[#DF4146]"
className="shrink-0 text-[18px] text-[#D9383A]"
/> />
<span>Private Field (Visible to Habib Marriage advisors only)</span>
<span>
{t.questions.privateFieldNotice ??
"Private Field (Visible to Habib Marriage advisors only)"}
</span>
</span> </span>
) : null} ) : null}
<span <span
className={[ className={[
"block group-14 leading-tight font-semibold text-[#181818]",
"flex flex-wrap items-center gap-1.5 text-[15px] font-bold text-[#181818]",
className, className,
] ]
.filter(Boolean) .filter(Boolean)
.join(" ")} .join(" ")}
> >
{question.title}
<span>{question.title}</span>
{question.required ? (
<span className="text-[#F2465F] font-bold">*</span>
) : null}
{question.description ? ( {question.description ? (
<span className="ml-1 group-10 font-semibold text-[#747474]">
<span className="text-[13.5px] font-normal text-[#667085]">
({question.description}) ({question.description})
</span> </span>
) : null} ) : null}
{question.required ? (
<span className="ml-1 group-14 text-[#F33D52]">*</span>
{question.tooltip ? (
<>
<button
type="button"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setIsHelpOpen(true);
}}
className="inline-flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-[#F2465F] text-[10px] font-serif italic text-white shadow-xs cursor-pointer hover:scale-110 active:scale-95 transition-transform"
aria-label="Help"
>
i
</button>
<HelpModal
isOpen={isHelpOpen}
onClose={() => setIsHelpOpen(false)}
description={question.tooltip}
/>
</>
) : null} ) : null}
</span> </span>
</span> </span>

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

@ -105,7 +105,15 @@ export function NavigationButton({
} }
})(); })();
const isHelpTrigger = icon === "info" || helpTitle !== undefined || helpDescription !== undefined;
const isHelpTrigger =
icon === "info" ||
icon === "document" ||
helpTitle !== undefined ||
helpDescription !== undefined;
const resolvedHelpDescription =
helpDescription ??
(icon === "document" ? (t.questions as any)?.testIntroDisclaimer : undefined);
return ( return (
<> <>
@ -150,7 +158,7 @@ export function NavigationButton({
isOpen={isHelpOpen} isOpen={isHelpOpen}
onClose={() => setIsHelpOpen(false)} onClose={() => setIsHelpOpen(false)}
title={helpTitle} title={helpTitle}
description={helpDescription}
description={resolvedHelpDescription}
buttonText={helpButtonText} buttonText={helpButtonText}
/> />
) : null} ) : null}

281
src/data/questions/en.json
File diff suppressed because it is too large
View File

283
src/data/questions/fa.json
File diff suppressed because it is too large
View File

35
src/translations/locales/ar.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"finalMatchIntroduce": "التقديم النهائي للتوافق",
"confirmFinalMatch": "تأكيد التوافق النهائي",
"confirmFinalMatchQuestion": "هل أنت ألك من أنك تريد تقديم هذين المرشحين لبعضهما رسمياً؟",
"page": "صفحة",
"totalPages": "إجمالي الصفحات",
"nextPage": "الصفحة التالية",
"previousPage": "الصفحة السابقة",
"itemsPerPage": "العناصر في الصفحة",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance."
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "معلومات سرية (مرئية لمستشاري حبيب مريج فقط)",
"startMatchFailed": "فشل إرسال طلب التوافق. يرجى التحقق من الاتصال والمحاولة مرة أخرى.",
"moveToEnd": "الانتقال إلى النهاية"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "جاري تحميل ملف التوافق...",
"twoColumnComparison": "مقارنة التوافق جنباً إلى جنب في ستونين",
"horizontalAlignment": "محاذاة حقول أفقية دقيقة",
"sourceCandidate": "المرشح المصدر (العمود الأيمن)",
"targetCandidate": "مرشح الجنس الآخر (العمود الأيسر)",
"tabs": {
"identity": "الهوية والديموغرافيا",
"bio": "السيرة الذاتية والتوقعات",
"sections": "بيانات أقسام النموذج",
"tests": "التقييمات النفسية"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/az.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/bn.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/da.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/de.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

1
src/translations/locales/en.json

@ -34,6 +34,7 @@
"playAlt": "play" "playAlt": "play"
}, },
"questions": { "questions": {
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"profileRegistration": "Profile registration", "profileRegistration": "Profile registration",
"closeQuestionsList": "Close questions list", "closeQuestionsList": "Close questions list",
"requiredSteps": "Required Steps", "requiredSteps": "Required Steps",

35
src/translations/locales/es.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

22
src/translations/locales/fa.json

@ -13,7 +13,15 @@
"rangeError": "مقدار وارد شده صحیح به نظر نمی‌رسد. لطفاً یک عدد واقعی وارد کنید.", "rangeError": "مقدار وارد شده صحیح به نظر نمی‌رسد. لطفاً یک عدد واقعی وارد کنید.",
"help": "راهنما", "help": "راهنما",
"gotIt": "متوجه شدم", "gotIt": "متوجه شدم",
"helpDescription": "این بخش به شما کمک می‌کند تا مراحل ثبت‌نام و پاسخ به سوالات را به صورت دقیق و آگاهانه تکمیل نمایید. تمامی اطلاعات شما نزد ما محرمانه باقی می‌ماند."
"helpDescription": "این بخش به شما کمک می‌کند تا مراحل ثبت‌نام و پاسخ به سوالات را به صورت دقیق و آگاهانه تکمیل نمایید. تمامی اطلاعات شما نزد ما محرمانه باقی می‌ماند.",
"finalMatchIntroduce": "معرفی نهایی گزینه ازدواج",
"confirmFinalMatch": "تأیید معرفی نهایی",
"confirmFinalMatchQuestion": "آیا اطمینان دارید که می‌خواهید این دو داوطلب را به‌صورت رسمی به یکدیگر معرفی کنید؟",
"page": "صفحه",
"totalPages": "مجموع صفحات",
"nextPage": "صفحه بعدی",
"previousPage": "صفحه قبلی",
"itemsPerPage": "تعداد موارد در هر صفحه"
}, },
"intro": { "intro": {
"imageAlt": "ازدواج آسمانی", "imageAlt": "ازدواج آسمانی",
@ -26,6 +34,7 @@
"playAlt": "پخش" "playAlt": "پخش"
}, },
"questions": { "questions": {
"privateFieldNotice": "اطلاعات محرمانه (فقط برای کارشناسان حبیب مریج و سیستم مچینگ)",
"profileRegistration": "ثبت اطلاعات پروفایل", "profileRegistration": "ثبت اطلاعات پروفایل",
"closeQuestionsList": "بستن فهرست سوالات", "closeQuestionsList": "بستن فهرست سوالات",
"requiredSteps": "مراحل ضروری", "requiredSteps": "مراحل ضروری",
@ -83,6 +92,17 @@
"muslim": "مسلمان", "muslim": "مسلمان",
"education": "کارشناسی معماری", "education": "کارشناسی معماری",
"occupation": "طراح داخلی" "occupation": "طراح داخلی"
},
"loadingProfile": "در حال بارگذاری پروفایل گزینه...",
"twoColumnComparison": "مقایسه دو ستونی و پایاپای گزینه‌ها",
"horizontalAlignment": "ترازی دقیق افقی فیلدها",
"sourceCandidate": "کاندیدای مبدأ (ستون راست)",
"targetCandidate": "کاندیدای جنس مخالف (ستون چپ)",
"tabs": {
"identity": "هویت و مشخصات فردی",
"bio": "بیوگرافی و انتظارات",
"sections": "داده‌های بخش‌های فرم",
"tests": "ارزیابی‌های روان‌شناختی"
} }
}, },
"requestAccepted": { "requestAccepted": {

35
src/translations/locales/fr.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/gu.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/ha.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/he.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/hi.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/id.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/ks.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/pt.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/ru.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/sw.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/tg.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/tr.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"finalMatchIntroduce": "Son Eşleşme Tanıtımı",
"confirmFinalMatch": "Son Eşleşmeyi Onayla",
"confirmFinalMatchQuestion": "Bu iki adayı resmi olarak birbirine tanıtmak istediğinizden emin misiniz?",
"page": "Sayfa",
"totalPages": "Toplam Sayfa",
"nextPage": "Sonraki Sayfa",
"previousPage": "Önceki Sayfa",
"itemsPerPage": "Sayfa Başına Öğe",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance."
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Gizli Alan (Yalnızca Habib Marriage danışmanları tarafından görülebilir)",
"startMatchFailed": "Eşleşme isteği gönderilemedi. Lütfen bağlantınızı kontrol edip tekrar deneyin.",
"moveToEnd": "Sona Taşı"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Eşleşme profili yükleniyor...",
"twoColumnComparison": "Yan Yana İki Sütunlu Eşleşme Karşılaştırması",
"horizontalAlignment": "Kesin Yatay Alan Hizalaması",
"sourceCandidate": "Kaynak Aday (Sağ Sütun)",
"targetCandidate": "Karşı Cins Adayı (Sol Sütun)",
"tabs": {
"identity": "Kimlik ve Demografi",
"bio": "Biyografi ve Beklentiler",
"sections": "Form Bölümleri Verileri",
"tests": "Psikolojik Değerlendirmeler"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/ul.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/ur.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"finalMatchIntroduce": "حتمی میچ کا تعارف",
"confirmFinalMatch": "حتمی میچ کی تصدیق کریں",
"confirmFinalMatchQuestion": "کیا آپ کو یقین ہے کہ آپ ان دونوں امیدوران کا باضابطہ ایک دوسرے سے تعارف کروانا چاہتے ہیں؟",
"page": "صفحہ",
"totalPages": "کل صفحات",
"nextPage": "اگلا صفحہ",
"previousPage": "پچھلا صفحہ",
"itemsPerPage": "فی صفحہ اشیاء",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance."
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "نجی فیلڈ (صرف حبیب میرج کے مشیروں کو نظر آتی ہے)",
"startMatchFailed": "میچ کی درخواست بھیجنے میں ناکامی۔ برائے مہربانی اپنا کنکشن چیک کریں اور دوبارہ کوشش کریں۔",
"moveToEnd": "آخر میں منتقل کریں"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "میچ پروفائل لوڈ ہو رہا ہے...",
"twoColumnComparison": "دو کالموں میں آمنے سامنے موازنہ",
"horizontalAlignment": "افقی فیلڈز کی درست ترتیب",
"sourceCandidate": "بنیادی امیدوار (دایاں کالم)",
"targetCandidate": "مخالف جنس کا امیدوار (بایاں کالم)",
"tabs": {
"identity": "شناخت اور ڈیموگرافکس",
"bio": "بائیو اور توقعات",
"sections": "فارم کے شعبوں کا ڈیٹا",
"tests": "نفسیاتی جائزے۔"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/uz.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }

35
src/translations/locales/zh.json

@ -10,7 +10,18 @@
"back": "Back", "back": "Back",
"required": "Required", "required": "Required",
"estimateTime": "Estimate time", "estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value."
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"helpDescription": "Psychologically, this practice fosters a sense of empathy and contentment, which can reduce financial stress. Socially, lending strengthens neighborhood bonds and creates support networks that can lead to economic opportunities. This hadith encourages believers to lend dough, bread, and fire to increase their sustenance.",
"finalMatchIntroduce": "Final Match Introduction",
"confirmFinalMatch": "Confirm Final Match",
"confirmFinalMatchQuestion": "Are you sure you want to officially introduce these two candidates to each other?",
"page": "Page",
"totalPages": "Total Pages",
"nextPage": "Next Page",
"previousPage": "Previous Page",
"itemsPerPage": "Items Per Page"
}, },
"intro": { "intro": {
"imageAlt": "heavenly marriage", "imageAlt": "heavenly marriage",
@ -51,7 +62,10 @@
"Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.", "Taking this test is not mandatory, but it will help you better understand your priorities and find a more compatible spouse.",
"By identifying your strongest needs, you can better communicate your expectations and build healthier relationships." "By identifying your strongest needs, you can better communicate your expectations and build healthier relationships."
] ]
}
},
"privateFieldNotice": "Private Field (Visible to Habib Marriage advisors only)",
"startMatchFailed": "Sending the match request failed. Please check your connection and try again.",
"moveToEnd": "Move to the End"
}, },
"match": { "match": {
"title": "New Match", "title": "New Match",
@ -78,6 +92,17 @@
"muslim": "Muslim", "muslim": "Muslim",
"education": "Bachelor's degree in architecture", "education": "Bachelor's degree in architecture",
"occupation": "Interior designer" "occupation": "Interior designer"
},
"loadingProfile": "Loading match profile...",
"twoColumnComparison": "Two-Column Side-by-Side Match Comparison",
"horizontalAlignment": "Strict Horizontal Field Alignment",
"sourceCandidate": "Source Candidate (Right Column)",
"targetCandidate": "Opposite Sex Candidate (Left Column)",
"tabs": {
"identity": "Identity & Demographics",
"bio": "Bio & Expectations",
"sections": "Form Sections Data",
"tests": "Psychological Assessments"
} }
}, },
"requestAccepted": { "requestAccepted": {
@ -119,5 +144,11 @@
"dismissReasons": "Dismiss reasons", "dismissReasons": "Dismiss reasons",
"dismissDescription": "Please provide the full reason for rejecting the submitted item", "dismissDescription": "Please provide the full reason for rejecting the submitted item",
"dismissPlaceholder": "Your explanatory text ..." "dismissPlaceholder": "Your explanatory text ..."
},
"requestSent": {
"title": "Request Sent",
"description": "We will propose marriage on your behalf. If they accept, their contact details will be shared with you.",
"matchProfile": "Match Profile",
"profileLocked": "Profile is locked"
} }
} }
Loading…
Cancel
Save