Browse Source

feat: implement multi-step slider onboarding flow and add internationalization support for multiple locales

master
Muhammad A. Ghorbani 2 weeks ago
parent
commit
3a7c5a35c5
  1. 47
      src/app/intro/intro-client.tsx
  2. 1
      src/app/questions-list/[slug]/question-detail-client.test.tsx
  3. 55
      src/app/questions-list/[slug]/question-detail-client.tsx
  4. 9
      src/app/questions-list/[slug]/test-intro-client.tsx
  5. 55
      src/components/Componentes/question-phone.test.tsx
  6. 36
      src/components/Componentes/question-phone.tsx
  7. 12
      src/components/Componentes/slider-page.tsx
  8. 9
      src/components/Componentes/test-questions-flow.tsx
  9. 4
      src/translations/locales/ar.json
  10. 2
      src/translations/locales/az.json
  11. 2
      src/translations/locales/bn.json
  12. 4
      src/translations/locales/da.json
  13. 4
      src/translations/locales/de.json
  14. 2
      src/translations/locales/en.json
  15. 4
      src/translations/locales/es.json
  16. 2
      src/translations/locales/fa.json
  17. 4
      src/translations/locales/fr.json
  18. 4
      src/translations/locales/gu.json
  19. 4
      src/translations/locales/ha.json
  20. 4
      src/translations/locales/he.json
  21. 4
      src/translations/locales/hi.json
  22. 4
      src/translations/locales/id.json
  23. 4
      src/translations/locales/ks.json
  24. 4
      src/translations/locales/pt.json
  25. 2
      src/translations/locales/ru.json
  26. 4
      src/translations/locales/sw.json
  27. 4
      src/translations/locales/tg.json
  28. 4
      src/translations/locales/tr.json
  29. 4
      src/translations/locales/ul.json
  30. 4
      src/translations/locales/ur.json
  31. 4
      src/translations/locales/uz.json
  32. 4
      src/translations/locales/zh.json

47
src/app/intro/intro-client.tsx

@ -163,30 +163,45 @@ export default function IntroClient() {
}
</p>
</div>
<div className="flex items-center justify-between mt-8">
<div className="flex items-center gap-0.5 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<IntroUsersIcon />
<div className="flex flex-col items-start justify-start -mb-2">
<p className="text-[#36363C] group-16 font-bold leading-3">120</p>
<p className="text-[#36363C] group-10 font-semibold capitalize">
<div className="flex items-center justify-between gap-2 mt-8 w-full">
<div className="flex min-w-0 flex-1 items-center gap-1 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<IntroUsersIcon className="shrink-0" />
<div className="flex min-w-0 flex-1 flex-col items-start justify-center">
<p className="w-full truncate text-start text-[#36363C] group-16 font-bold leading-tight" title="120">
120
</p>
<p
className="w-full truncate text-start text-[#36363C] group-10 font-semibold capitalize"
title={t["user profiles"]}
>
{t["user profiles"]}
</p>
</div>
</div>
<div className="flex items-center gap-0.5 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<IntroMatchesIcon />
<div className="flex flex-col items-start justify-start -mb-2">
<p className="text-[#36363C] group-16 font-bold leading-3">14</p>
<p className="text-[#36363C] group-10 font-semibold capitalize">
<div className="flex min-w-0 flex-1 items-center gap-1 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<IntroMatchesIcon className="shrink-0" />
<div className="flex min-w-0 flex-1 flex-col items-start justify-center">
<p className="w-full truncate text-start text-[#36363C] group-16 font-bold leading-tight" title="14">
14
</p>
<p
className="w-full truncate text-start text-[#36363C] group-10 font-semibold capitalize"
title={t["matches"]}
>
{t["matches"]}
</p>
</div>
</div>
<div className="flex items-center gap-0.5 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<IntroMarriagesIcon />
<div className="flex flex-col items-start justify-start -mb-2">
<p className="text-[#36363C] group-16 font-bold leading-3">14</p>
<p className="text-[#36363C] group-10 font-semibold capitalize">
<div className="flex min-w-0 flex-1 items-center gap-1 p-2 border border-[#FD6ABB]/10 rounded-2xl">
<IntroMarriagesIcon className="shrink-0" />
<div className="flex min-w-0 flex-1 flex-col items-start justify-center">
<p className="w-full truncate text-start text-[#36363C] group-16 font-bold leading-tight" title="14">
14
</p>
<p
className="w-full truncate text-start text-[#36363C] group-10 font-semibold capitalize"
title={t["marriages"]}
>
{t["marriages"]}
</p>
</div>

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

@ -299,7 +299,6 @@ describe("QuestionDetailClient Validation", () => {
expect(screen.getByText("Overview Profile Title")).toBeDefined();
expect(screen.getByRole("status")).toBeDefined();
expect(screen.getByRole("button", { name: "Close" })).toBeDefined();
expect(screen.getByRole("button", { name: "Info" })).toBeDefined();
expect(screen.getByRole("button", { name: "Continue" })).toBeDisabled();
expect(document.querySelector(".shimmer-bg")).toBeNull();
});

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

@ -520,21 +520,14 @@ export default function QuestionDetailClient({
<NavigationButton
className="shrink-0"
variant="transparent"
icon="close"
icon="back"
iconLabel={closeLabel}
onClick={handleExit}
/>
<h1 className="min-w-0 flex-1 truncate text-center text-[14px] font-semibold text-white">
{loadingTitle}
</h1>
<NavigationButton
className="shrink-0"
variant="transparent"
icon="info"
iconLabel={informationLabel}
helpTitle={loadingTitle}
helpDescription={description}
/>
<div className="size-10 shrink-0" />
</div>
</StickyHeader>
@ -572,21 +565,14 @@ export default function QuestionDetailClient({
<NavigationButton
className="shrink-0"
variant="transparent"
icon="close"
icon="back"
iconLabel={closeLabel}
onClick={handleExit}
/>
<h1 className="min-w-0 flex-1 truncate text-center text-[14px] font-semibold text-white">
{errorTitle}
</h1>
<NavigationButton
className="shrink-0"
variant="transparent"
icon="info"
iconLabel={informationLabel}
helpTitle={errorTitle}
helpDescription={description}
/>
<div className="size-10 shrink-0" />
</div>
</StickyHeader>
@ -615,21 +601,14 @@ export default function QuestionDetailClient({
<NavigationButton
className="shrink-0"
variant="transparent"
icon="close"
icon="back"
iconLabel={closeLabel}
onClick={handleExit}
/>
<h1 className="min-w-0 flex-1 truncate text-center text-[14px] font-semibold text-white">
{errorTitle}
</h1>
<NavigationButton
className="shrink-0"
variant="transparent"
icon="info"
iconLabel={informationLabel}
helpTitle={errorTitle}
helpDescription={description}
/>
<div className="size-10 shrink-0" />
</div>
</StickyHeader>
@ -801,21 +780,14 @@ export default function QuestionDetailClient({
<NavigationButton
className="shrink-0"
variant="transparent"
icon="close"
icon="back"
iconLabel={closeLabel}
onClick={handleExit}
/>
<h1 className="min-w-0 flex-1 text-center text-[14px] font-semibold text-white truncate">
{item.title}
</h1>
<NavigationButton
className="shrink-0"
variant="transparent"
icon="info"
iconLabel={informationLabel}
helpTitle={item.title}
helpDescription={description}
/>
<div className="size-10 shrink-0" />
</div>
</StickyHeader>
@ -989,7 +961,7 @@ export default function QuestionDetailClient({
<QuestionExitNavigationButton
className="shrink-0"
variant="transparent"
icon="close"
icon="back"
iconLabel={closeLabel}
exitHref={questionsListHref}
onExit={handleExit}
@ -997,14 +969,7 @@ export default function QuestionDetailClient({
<h1 className="min-w-0 flex-1 text-center text-[14px] font-semibold text-white truncate">
{item.title}
</h1>
<NavigationButton
className="shrink-0"
variant="transparent"
icon="info"
iconLabel={informationLabel}
helpTitle={item.title}
helpDescription={description}
/>
<div className="size-10 shrink-0" />
</div>
</StickyHeader>

9
src/app/questions-list/[slug]/test-intro-client.tsx

@ -38,18 +38,13 @@ export default function TestIntroClient({
<NavigationButton
className="shrink-0"
variant="transparent"
icon="close"
icon="back"
iconLabel={closeLabel}
/>
<h1 className="min-w-0 flex-1 text-center font-semibold text-white truncate">
{title}
</h1>
<NavigationButton
className="shrink-0"
variant="transparent"
icon="info"
iconLabel={informationLabel}
/>
<div className="size-10 shrink-0" />
</div>
</StickyHeader>

55
src/components/Componentes/question-phone.test.tsx

@ -16,16 +16,19 @@ const mockSetAnswerValue = vi.fn((q: QuestionField, val: unknown) => {
answerMap[q.id] = val;
});
let mockLocale = "en";
let mockDictionary: Record<string, string> = {
"Select country": "Select country",
Close: "Close",
Confirm: "Confirm",
"Enter a valid phone number with country code.":
"Enter a valid phone number with country code.",
};
vi.mock("@/translations/provider", () => ({
useI18n: () => ({
locale: "en",
dictionary: {
"Select country": "Select country",
Close: "Close",
Confirm: "Confirm",
"Enter a valid phone number with country code.":
"Enter a valid phone number with country code.",
},
locale: mockLocale,
dictionary: mockDictionary,
}),
}));
@ -383,4 +386,40 @@ describe("QuestionPhone IP country detection and shimmer", () => {
expect(screen.getByText("🇩🇪")).toBeDefined();
});
});
it("renders localized country names dynamically in Russian locale (e.g. Великобритания, Соединенные Штаты)", async () => {
mockLocale = "ru";
mockDictionary = {
"Select country": "Выберите страну",
Close: "Закрыть",
Confirm: "Подтверждать",
"Search...": "Поиск...",
"Enter a valid phone number with country code.":
"Введите действительный номер телефона с кодом страны.",
};
setStoredUserGeoRegion({ country: "Великобритания", countryCode: "GB", phoneCode: "+44" });
render(<QuestionPhone question={phoneQuestion1} countryCode="+44" />);
// Open sheet
const countryButton = screen.getByRole("button", { name: /🇬🇧/i });
fireEvent.click(countryButton);
// Verify Russian sheet header
expect(screen.getByText("Выберите страну")).toBeDefined();
// Verify UK is translated as "Великобритания" and US as "Соединенные Штаты"
expect(screen.getByText("Великобритания")).toBeDefined();
expect(screen.getByText("Соединенные Штаты")).toBeDefined();
// Verify search by Russian term "Россия" or "Великобритания"
const searchInput = screen.getByPlaceholderText("Поиск...");
fireEvent.change(searchInput, { target: { value: "Великобритания" } });
expect(screen.getByText("Великобритания")).toBeDefined();
expect(screen.getAllByText("+44").length).toBeGreaterThanOrEqual(1);
// Reset locale back for subsequent tests
mockLocale = "en";
});
});

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

@ -539,6 +539,7 @@ export function QuestionPhone({
flag: string;
callingCode: string;
searchTerms: string[];
region: string;
}[] = [];
const seen = new Set<string>();
@ -550,12 +551,12 @@ export function QuestionPhone({
let name = displayNames.of(region);
if (!name) continue;
if (region === "US")
name = locale === "fa" ? "ایالات متحده آمریکا" : "United States";
if (region === "GB")
name = locale === "fa" ? "بریتانیا" : "United Kingdom";
if (locale === "fa" || locale === "fa-ir") {
if (region === "US") name = "ایالات متحده آمریکا";
if (region === "GB") name = "بریتانیا";
}
const key = `${name}_+${callingCode}`;
const key = `${region}_${name}_+${callingCode}`;
if (seen.has(key)) continue;
seen.add(key);
@ -585,27 +586,23 @@ export function QuestionPhone({
flag,
callingCode: String(callingCode),
searchTerms: Array.from(new Set(searchTerms)),
region,
});
} catch {}
}
return list.sort((a, b) => a.name.localeCompare(b.name));
return list.sort((a, b) => a.name.localeCompare(b.name, locale || "en"));
}, [locale]);
const activeFlag = useMemo(() => {
if (!codeValue) return "🏳️";
const cleanActiveCode = codeValue.replace(/[^\d]/g, "");
if (cleanActiveCode === "44") {
const gb = countryList.find(
(c) => c.name.includes("United Kingdom") || c.name.includes("بریتانیا"),
);
const gb = countryList.find((c) => c.region === "GB");
if (gb) return gb.flag;
}
if (cleanActiveCode === "1") {
const us = countryList.find(
(c) =>
c.name.includes("United States") || c.name.includes("ایالات متحده"),
);
const us = countryList.find((c) => c.region === "US");
if (us) return us.flag;
}
const match = countryList.find(
@ -617,16 +614,11 @@ export function QuestionPhone({
const selectedCountry = useMemo(() => {
const cleanActiveCode = codeValue.replace(/[^\d]/g, "");
if (cleanActiveCode === "44") {
const gb = countryList.find(
(c) => c.name.includes("United Kingdom") || c.name.includes("بریتانیا"),
);
const gb = countryList.find((c) => c.region === "GB");
if (gb) return gb;
}
if (cleanActiveCode === "1") {
const us = countryList.find(
(c) =>
c.name.includes("United States") || c.name.includes("ایالات متحده"),
);
const us = countryList.find((c) => c.region === "US");
if (us) return us;
}
return countryList.find(
@ -684,9 +676,9 @@ export function QuestionPhone({
if (aStartsTerm && !bStartsTerm) return -1;
if (!aStartsTerm && bStartsTerm) return 1;
return a.name.localeCompare(b.name);
return a.name.localeCompare(b.name, locale || "en");
});
}, [countryList, searchQuery]);
}, [countryList, searchQuery, locale]);
useSheetScrollLock(isOpen, { onBack: closeSheet });

12
src/components/Componentes/slider-page.tsx

@ -4,6 +4,8 @@ import { useRouter } from "next/navigation";
import { useEffect, useState } from "react";
import { useQueryClient } from "@tanstack/react-query";
import { useUpdateMarriageProfileBasicMutation } from "@/hooks/marriage/use-profile-basic";
import { authBridge } from "@/lib/auth-bridge";
import { isInFlutterWebView } from "@/lib/webview-actions";
import {
getSubmitPath,
hasCompletedMarriageProfileBasics,
@ -116,10 +118,16 @@ export default function SliderPage({ onClose }: SliderPageProps = {}) {
const localizedTarget = localizePath(targetPath, locale);
router.prefetch?.(localizedTarget);
router.replace(localizedTarget);
} catch (error) {
} catch (error: any) {
console.error("Failed to complete onboarding:", error);
const backendMessage =
error?.response?.data?.detail ||
error?.response?.data?.message ||
error?.response?.data?.error;
setSubmitError(
t["Something went wrong. Please check your internet connection and try again."] ||
backendMessage ||
t["Something went wrong. Please check your internet connection and try again."] ||
"Something went wrong. Please check your internet connection and try again."
);
setIsSubmitting(false);

9
src/components/Componentes/test-questions-flow.tsx

@ -245,19 +245,14 @@ export default function TestQuestionsFlow({
<NavigationButton
className="shrink-0"
variant="transparent"
icon="close"
icon="back"
iconLabel={closeLabel}
onClick={handleRequestClose}
/>
<h1 className="min-w-0 flex-1 text-center font-semibold text-white truncate group-16">
{title}
</h1>
<NavigationButton
className="shrink-0"
variant="transparent"
icon="info"
iconLabel={informationLabel}
/>
<div className="size-10 shrink-0" />
</div>
</StickyHeader>

4
src/translations/locales/ar.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "جلاسر 5 يحتاج إلى اختبار",
"Go back": "عُد",
"Good": "جيد",
"Got it": "Got it",
"Got it": "فهمت",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "حلال/مباح طيب",
"Have a personal home for living together": "لديك منزل شخصي للعيش معًا",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "يوصى بشدة بعقد اللقاءات الأولى في أماكن عامة ومزدحمة، وإبلاغ أحد أفراد العائلة أو شخص موثوق به.",
"Force Majeure Conditions": "ظروف القوة القاهرة",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "في حال وقوع أحداث خارجة عن السيطرة، مثل انقطاع الإنترنت على مستوى البلاد أو الكوارث الطبيعية أو العقوبات، لن يتحمل التطبيق أي مسؤولية عن انقطاع الخدمة المؤقت."
}
}

2
src/translations/locales/az.json

@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "İlk görüşmelerin kalabalık halka açık alanlarda yapılması ve bir aile üyesinin bilgilendirilmesi önemle tavsiye edilir.",
"Force Majeure Conditions": "Mücbir Sebep Halleri",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "Genel internet kesintileri, doğal afetler gibi mücbir sebepler durumunda oluşacak geçici aksaklıklardan uygulama sorumlu tutulamaz."
}
}

2
src/translations/locales/bn.json

@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/da.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "Glasser 5 behovstest",
"Go back": "Go back",
"Good": "Godt",
"Got it": "Got it",
"Got it": "Forstået",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "Halal/tilladt okay",
"Have a personal home for living together": "Har et personligt hjem til at bo sammen",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "Es wird dringend empfohlen, erste Treffen an belebten öffentlichen Orten durchzuführen und Vertrauenspersonen zu informieren.",
"Force Majeure Conditions": "Höhere Gewalt",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "Bei unvorhersehbaren Ereignissen wie landesweiten Internetausfällen oder Naturkatastrophen haftet die Anwendung nicht für temporäre Ausfälle."
}
}

4
src/translations/locales/de.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "Glasser 5 muss getestet werden",
"Go back": "Go back",
"Good": "Gut",
"Got it": "Got it",
"Got it": "Verstanden",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "Halal/zulässig, okay",
"Have a personal home for living together": "Ein persönliches Zuhause für das Zusammenleben haben",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "Es wird dringend empfohlen, erste Treffen an belebten öffentlichen Orten durchzuführen und Vertrauenspersonen zu informieren.",
"Force Majeure Conditions": "Höhere Gewalt",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "Bei unvorhersehbaren Ereignissen wie landesweiten Internetausfällen oder Naturkatastrophen haftet die Anwendung nicht für temporäre Ausfälle."
}
}

2
src/translations/locales/en.json

@ -2008,4 +2008,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/es.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "Prueba de las 5 necesidades de Glasser",
"Go back": "Go back",
"Good": "bueno",
"Got it": "Got it",
"Got it": "Entendido",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "Halal/permitido bien",
"Have a personal home for living together": "Tener un hogar personal para vivir juntos.",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "Se aconseja celebrar los primeros encuentros en lugares públicos concurridos e informar a un familiar.",
"Force Majeure Conditions": "Causas de fuerza mayor",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "En casos de fuerza mayor como cortes de red o desastres naturales, no se asume responsabilidad por interrupciones."
}
}

2
src/translations/locales/fa.json

@ -2028,4 +2028,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "اکیداً توصیه می‌شود دیدارهای اولیه در اماکن عمومی و شلوغ برگزار شود و یکی از اعضای خانواده یا فرد امین در جریان قرار گیرد.",
"Force Majeure Conditions": "شرایط فورس‌ماژور",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "در صورت بروز حوادث خارج از کنترل مانند قطعی سراسری اینترنت، بلایای طبیعی یا تحریم‌ها، برنامه مسئولیتی در قبال قطعی‌های موقت سرویس نخواهد داشت."
}
}

4
src/translations/locales/fr.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "Glasser 5 a besoin d'un test",
"Go back": "Go back",
"Good": "Bon",
"Got it": "Got it",
"Got it": "Compris",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "Halal/autorisé, ok",
"Have a personal home for living together": "Avoir une maison personnelle pour vivre ensemble",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "Il est vivement recommandé d'organiser les premières entrevues dans des lieux publics fréquentés et d'en aviser un proche.",
"Force Majeure Conditions": "Cas de force majeure",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "En cas de force majeure (coupure générale d'internet, catastrophes), l'application ne saurait être tenue pour responsable des interruptions de service."
}
}

4
src/translations/locales/gu.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "ગ્લાસર 5 ને ટેસ્ટની જરૂર છે",
"Go back": "Go back",
"Good": "સારું",
"Got it": "Got it",
"Got it": "સમજાયું",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "હલાલ/પરવાનગી બરાબર",
"Have a personal home for living together": "સાથે રહેવા માટે વ્યક્તિગત ઘર છે",
@ -2034,4 +2034,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/ha.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "Glasser 5 Yana Bukatar Gwaji",
"Go back": "Go back",
"Good": "Yayi kyau",
"Got it": "Got it",
"Got it": "Na gane",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "Halal/ halatta lafiya",
"Have a personal home for living together": "Have a personal home for living together",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/he.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "הבנתי",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/hi.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "ग्लासर 5 को परीक्षण की आवश्यकता है",
"Go back": "Go back",
"Good": "अच्छा",
"Got it": "Got it",
"Got it": "समझ गया",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "हलाल/अनुमेय ठीक है",
"Have a personal home for living together": "साथ रहने के लिए एक निजी घर हो",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/id.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "Mengerti",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/ks.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "سمجھ آو",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "اکیداً توصیه می‌شود دیدارهای اولیه در اماکن عمومی و شلوغ برگزار شود و یکی از اعضای خانواده یا فرد امین در جریان قرار گیرد.",
"Force Majeure Conditions": "شرایط فورس‌ماژور",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "در صورت بروز حوادث خارج از کنترل مانند قطعی سراسری اینترنت، بلایای طبیعی یا تحریم‌ها، برنامه مسئولیتی در قبال قطعی‌های موقت سرویس نخواهد داشت."
}
}

4
src/translations/locales/pt.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "Entendido",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "Se aconseja celebrar los primeros encuentros en lugares públicos concurridos e informar a un familiar.",
"Force Majeure Conditions": "Causas de fuerza mayor",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "En casos de fuerza mayor como cortes de red o desastres naturales, no se asume responsabilidad por interrupciones."
}
}

2
src/translations/locales/ru.json

@ -2028,4 +2028,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "Рекомендуется проводить первые встречи в общественных местах и ставить в известность родных.",
"Force Majeure Conditions": "Форс-мажорные обстоятельства",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "Сервис не отвечает за сбои, вызванные обстоятельствами непреодолимой силы."
}
}

4
src/translations/locales/sw.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "Nimeelewa",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/tg.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "Фаҳмидам",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "İlk görüşmelerin kalabalık halka açık alanlarda yapılması ve bir aile üyesinin bilgilendirilmesi önemle tavsiye edilir.",
"Force Majeure Conditions": "Mücbir Sebep Halleri",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "Genel internet kesintileri, doğal afetler gibi mücbir sebepler durumunda oluşacak geçici aksaklıklardan uygulama sorumlu tutulamaz."
}
}

4
src/translations/locales/tr.json

@ -40,7 +40,7 @@
"previousPage": "Önceki Sayfa",
"itemsPerPage": "Sayfa Başına Öğe",
"help": "Help",
"gotIt": "Got it",
"gotIt": "Anladım",
"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.",
"other": "Diğer",
"consultation": "Consultation",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "İlk görüşmelerin kalabalık halka açık alanlarda yapılması ve bir aile üyesinin bilgilendirilmesi önemle tavsiye edilir.",
"Force Majeure Conditions": "Mücbir Sebep Halleri",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "Genel internet kesintileri, doğal afetler gibi mücbir sebepler durumunda oluşacak geçici aksaklıklardan uygulama sorumlu tutulamaz."
}
}

4
src/translations/locales/ul.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "Samajh Gaya/Gayi",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}

4
src/translations/locales/ur.json

@ -40,7 +40,7 @@
"previousPage": "پچھلا صفحہ",
"itemsPerPage": "فی صفحہ اشیاء",
"help": "Help",
"gotIt": "Got it",
"gotIt": "سمجھ گیا/گئی",
"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.",
"other": "دیگر",
"consultation": "Consultation",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "اکیداً توصیه می‌شود دیدارهای اولیه در اماکن عمومی و شلوغ برگزار شود و یکی از اعضای خانواده یا فرد امین در جریان قرار گیرد.",
"Force Majeure Conditions": "شرایط فورس‌ماژور",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "در صورت بروز حوادث خارج از کنترل مانند قطعی سراسری اینترنت، بلایای طبیعی یا تحریم‌ها، برنامه مسئولیتی در قبال قطعی‌های موقت سرویس نخواهد داشت."
}
}

4
src/translations/locales/uz.json

@ -32,7 +32,7 @@
"estimateTime": "Estimate time",
"rangeError": "The value entered seems incorrect. Please provide a realistic value.",
"help": "Help",
"gotIt": "Got it",
"gotIt": "Tushundim",
"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",
@ -2297,4 +2297,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "İlk görüşmelerin kalabalık halka açık alanlarda yapılması ve bir aile üyesinin bilgilendirilmesi önemle tavsiye edilir.",
"Force Majeure Conditions": "Mücbir Sebep Halleri",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "Genel internet kesintileri, doğal afetler gibi mücbir sebepler durumunda oluşacak geçici aksaklıklardan uygulama sorumlu tutulamaz."
}
}

4
src/translations/locales/zh.json

@ -252,7 +252,7 @@
"Glasser 5 Needs Test": "Glasser 5 需要测试",
"Go back": "Go back",
"Good": "好",
"Got it": "Got it",
"Got it": "知道了",
"Habib Marriage": "Habib Marriage",
"Halal/permissible okay": "清真/允许的好",
"Have a personal home for living together": "拥有一个共同居住的个人住宅",
@ -2032,4 +2032,4 @@
"It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.": "It is strongly recommended that initial meetings be held in crowded public places, and that a family member or a trusted person be kept informed.",
"Force Majeure Conditions": "Force Majeure Conditions",
"In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages.": "In the event of occurrences beyond control, such as a nationwide internet outage, natural disasters, or sanctions, the application will have no liability for temporary service outages."
}
}
Loading…
Cancel
Save