Browse Source

feat: add subscription required UI/translations and webview action tests

master
mortezaei 7 days ago
parent
commit
748463bcaf
  1. 43
      WEBVIEW_ACTION_DOWNLOAD.md
  2. 3
      src/app/request-accepted/page.tsx
  3. 186
      src/components/Componentes/navigation-button.tsx
  4. 111
      src/components/Componentes/subscription-required-sheet.tsx
  5. 191
      src/lib/webview-actions.test.ts
  6. 6
      src/translations/locales/ar.json
  7. 6
      src/translations/locales/az.json
  8. 6
      src/translations/locales/bn.json
  9. 6
      src/translations/locales/da.json
  10. 6
      src/translations/locales/de.json
  11. 6
      src/translations/locales/en.json
  12. 6
      src/translations/locales/es.json
  13. 6
      src/translations/locales/fa.json
  14. 6
      src/translations/locales/fr.json
  15. 6
      src/translations/locales/gu.json
  16. 6
      src/translations/locales/ha.json
  17. 6
      src/translations/locales/he.json
  18. 6
      src/translations/locales/hi.json
  19. 6
      src/translations/locales/id.json
  20. 6
      src/translations/locales/ks.json
  21. 6
      src/translations/locales/pt.json
  22. 6
      src/translations/locales/ru.json
  23. 6
      src/translations/locales/sw.json
  24. 6
      src/translations/locales/tg.json
  25. 6
      src/translations/locales/tr.json
  26. 6
      src/translations/locales/ul.json
  27. 6
      src/translations/locales/ur.json
  28. 6
      src/translations/locales/uz.json
  29. 6
      src/translations/locales/zh.json

43
WEBVIEW_ACTION_DOWNLOAD.md

@ -973,6 +973,47 @@ void _handleUploadFile(dynamic payload) async {
---
## ۵. خرید حبیب کوین (`buy_coin`)
### هدف
وقتی کاربر برای پرداخت هزینه اشتراک یا معرفی مورد کوین کافی ندارد (دریافت خطای `Not enough coins` از سرور)، وب باید به کاربر دکمه‌ای برای شارژ حساب نمایش دهد. با کلیک کاربر، وب یک پیام JSON با اکشن `buy_coin` به Flutter ارسال می‌کند تا فلاتر به‌صورت native صفحه لیست پکیج‌های حبیب کوین (`PackagesListPage`) را روی WebView باز کند. کاربر پس از خرید پکیج و زدن دکمه بازگشت (Back)، مجدداً به همان صفحه وب بازمی‌گردد و می‌تواند پرداخت را تکرار کند.
### Action اصلی
```text
buy_coin
```
### پیام ارسالی از Web به Flutter
```json
{
"action": "buy_coin"
}
```
### امضای تابع در Web (src/lib/webview-actions.ts)
```ts
/**
* Ask Flutter to open the Habib Coin packages list page (Add Coin).
*/
export function buyHabibCoinPackages(): boolean {
return postActionToFlutter("buy_coin");
}
```
### رفتار سمت Flutter
فلاتر بدون نیاز به payload اضافی اکشن `buy_coin` را دریافت کرده و صفحه خرید پکیج را باز می‌کند:
```dart
'buy_coin' => context.pushPage(const PackagesListPage()),
```
---
## جمع‌بندی actionها
| Action | کاربرد |
@ -981,3 +1022,5 @@ void _handleUploadFile(dynamic payload) async {
| `upload_file` | انتخاب فایل/تصویر/ویدیو از دستگاه و آپلود به سرور (یا بازگرداندن base64) |
| `copy_to_clipboard` | کپی متن در clipboard دستگاه |
| `open_external_url` | باز کردن URL در مرورگر یا اپ خارجی |
| `buy_coin` | باز کردن صفحه خرید پکیج‌های حبیب کوین (`PackagesListPage`) در فلاتر |

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

@ -312,7 +312,8 @@ export default function RequestAcceptedPage() {
if (msg === "Not enough coins") {
setIsInsufficientCoins(true);
setPaymentError(
"Insufficient coin balance. Please recharge your account.",
t["Insufficient coin balance. Please recharge your account."] ||
"Insufficient coin balance. Please recharge your account.",
);
} else {
setPaymentError(msg);

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

@ -1,29 +1,29 @@
"use client";
import { useQueryClient } from "@tanstack/react-query";
import Image from "next/image";
import { useRouter } from "next/navigation";
import type { ButtonHTMLAttributes, ReactNode } from "react";
import { useState, useRef, useEffect } from "react";
import { useEffect, useRef, useState } from "react";
import { GoArrowLeft } from "react-icons/go";
import { HiEllipsisVertical } from "react-icons/hi2";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import { marriageQueryKeys } from "@/hooks/marriage/query-keys";
import { useI18n } from "@/translations/provider";
import HelpModal from "./help-modal";
import SupportSheet from "./support-sheet";
import InformationSheet from "./information-sheet";
import { useQueryClient } from "@tanstack/react-query";
import { UiIcon } from "./ui-icon";
import ErrorToast from "./error-toast";
import { hasSupportAccess } from "./support-access";
import {
useHabcoinPaymentMutation,
extractHabcoinPaymentUrl,
useHabcoinPaymentMutation,
} from "@/hooks/marriage/use-habcoin-payment";
import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main";
import {
buyHabibCoinPackages,
isInFlutterWebView,
} from "@/lib/webview-actions";
import { useI18n } from "@/translations/provider";
import ErrorToast from "./error-toast";
import HelpModal from "./help-modal";
import InformationSheet from "./information-sheet";
import { hasSupportAccess } from "./support-access";
import SupportSheet from "./support-sheet";
import { UiIcon } from "./ui-icon";
type NavigationButtonIcon =
| "back"
@ -123,93 +123,93 @@ export function NavigationButton({
</button>
)}
<div className="grid w-full grid-cols-[33fr_67fr] gap-3">
<button
type="button"
className="appearance-none border-0 bg-transparent p-0 text-left min-w-0"
onClick={close}
>
<div className="inline-flex w-full items-center justify-center rounded-[18px] border border-[#9A9A9A] bg-[#F7F7F7] px-2 h-[52px] text-[16px] font-bold text-[#8B8B8B] shadow-[inset_0_1px_0_rgba(255,255,255,0.8)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate">{t["Back"]}</span>
</div>
</button>
<button
type="button"
className="appearance-none border-0 bg-transparent p-0 text-left min-w-0"
onClick={close}
>
<div className="inline-flex w-full items-center justify-center rounded-[18px] border border-[#9A9A9A] bg-[#F7F7F7] px-2 h-[52px] text-[16px] font-bold text-[#8B8B8B] shadow-[inset_0_1px_0_rgba(255,255,255,0.8)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate">{t["Back"]}</span>
</div>
</button>
<button
type="button"
disabled={!profile?.recommended_plan?.id || isRenewing}
className="appearance-none border-0 bg-transparent p-0 text-left disabled:cursor-not-allowed disabled:opacity-70 min-w-0"
onClick={async () => {
const planId = profile?.recommended_plan?.id;
if (!planId) return;
setIsRenewing(true);
setToastMessage(null);
setToastVariant("error");
setIsInsufficientCoins(false);
try {
const paymentResponse =
await paymentMutation.mutateAsync(planId);
const paymentUrl =
extractHabcoinPaymentUrl(paymentResponse);
if (paymentUrl) {
window.location.assign(paymentUrl);
return;
}
// Success! Refetch profile query to update remaining_days in modal.
await queryClient.refetchQueries({
queryKey: marriageQueryKeys.profile(),
});
// Close the modal and show success toast
setIsSubscriptionInfoOpen(false);
setToastVariant("success");
setToastMessage(
t["Payment successful"] || "Payment successful",
);
} catch (err: any) {
console.error("Renewal payment failed", err);
const errMessage =
err?.response?.data?.error || err?.message || "";
<button
type="button"
disabled={!profile?.recommended_plan?.id || isRenewing}
className="appearance-none border-0 bg-transparent p-0 text-left disabled:cursor-not-allowed disabled:opacity-70 min-w-0"
onClick={async () => {
const planId = profile?.recommended_plan?.id;
if (!planId) return;
setIsRenewing(true);
setToastMessage(null);
setToastVariant("error");
if (
errMessage.includes("Not enough coins") ||
err?.response?.status === 400
) {
setIsInsufficientCoins(true);
setIsInsufficientCoins(false);
try {
const paymentResponse =
await paymentMutation.mutateAsync(planId);
const paymentUrl =
extractHabcoinPaymentUrl(paymentResponse);
if (paymentUrl) {
window.location.assign(paymentUrl);
return;
}
// Success! Refetch profile query to update remaining_days in modal.
await queryClient.refetchQueries({
queryKey: marriageQueryKeys.profile(),
});
// Close the modal and show success toast
setIsSubscriptionInfoOpen(false);
setToastVariant("success");
setToastMessage(
t[
"Insufficient coin balance. Please recharge your account."
] ||
"Insufficient coin balance. Please recharge your account.",
t["Payment successful"] || "Payment successful",
);
} else {
setToastMessage(errMessage || "Payment failed");
} catch (err: any) {
console.error("Renewal payment failed", err);
const errMessage =
err?.response?.data?.error || err?.message || "";
setToastVariant("error");
if (
errMessage.includes("Not enough coins") ||
err?.response?.status === 400
) {
setIsInsufficientCoins(true);
setToastMessage(
t[
"Insufficient coin balance. Please recharge your account."
] ||
"Insufficient coin balance. Please recharge your account.",
);
} else {
setToastMessage(errMessage || "Payment failed");
}
} finally {
setIsRenewing(false);
}
} finally {
setIsRenewing(false);
}
}}
>
<div className="inline-flex w-full items-center justify-center gap-2 rounded-[18px] bg-[#F0445B] px-4 h-[52px] text-[16px] font-semibold text-white shadow-[0_10px_18px_rgba(240,68,91,0.28)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate">
{isRenewing ? t["Renewing..."] : t["Renew Subscription"]}
</span>
}}
>
<div className="inline-flex w-full items-center justify-center gap-2 rounded-[18px] bg-[#F0445B] px-4 h-[52px] text-[16px] font-semibold text-white shadow-[0_10px_18px_rgba(240,68,91,0.28)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate">
{isRenewing ? t["Renewing..."] : t["Renew Subscription"]}
</span>
{!isRenewing && (
<span className="inline-flex items-center gap-1 rounded-full bg-[#E43B51] p-1.5 text-xs font-semibold leading-none text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] shrink-0 min-w-0 whitespace-nowrap">
<Image
src="/assets/images/Inner Plugdsain Iframe.svg"
alt=""
aria-hidden="true"
width={18}
height={18}
className="shrink-0"
/>
<span className="truncate">
{profile?.recommended_plan?.price || "100"}
{!isRenewing && (
<span className="inline-flex items-center gap-1 rounded-full bg-[#E43B51] p-1.5 text-xs font-semibold leading-none text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] shrink-0 min-w-0 whitespace-nowrap">
<Image
src="/assets/images/Inner Plugdsain Iframe.svg"
alt=""
aria-hidden="true"
width={18}
height={18}
className="shrink-0"
/>
<span className="truncate">
{profile?.recommended_plan?.price || "100"}
</span>
</span>
</span>
)}
</div>
</button>
</div>
)}
</div>
</button>
</div>
</div>
)}
/>
@ -272,9 +272,7 @@ export function NavigationButton({
case "info":
return <UiIcon name="info" aria-hidden="true" className="size-6" />;
case "document":
return (
<UiIcon name="document" aria-hidden="true" className="size-6" />
);
return <UiIcon name="document" aria-hidden="true" className="size-6" />;
case "subscription":
return hasActiveSubscription ? (
<Image

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

@ -1,12 +1,13 @@
"use client";
import Image from "next/image";
import InformationSheet from "./information-sheet";
import { LoadingThreeDot } from "./loading-three-dot";
import {
buyHabibCoinPackages,
isInFlutterWebView,
} from "@/lib/webview-actions";
import { useI18n } from "@/translations/provider";
import InformationSheet from "./information-sheet";
import { LoadingThreeDot } from "./loading-three-dot";
type SubscriptionRequiredSheetProps = {
onClose: () => void;
@ -25,25 +26,35 @@ export function SubscriptionRequiredSheet({
errorMessage = null,
showBuyCoins = false,
}: SubscriptionRequiredSheetProps) {
const { dictionary: t } = useI18n();
return (
<InformationSheet
icon="coin"
title="Subscription required"
title={t["Subscription required"] || "Subscription required"}
description={
<div className="space-y-4 text-left">
<p className="text-sm text-center leading-[1.45] font-medium text-[#2B2B2B]">
To view profiles, you need a subscription. Each subscription
includes up to{" "}
<span className="font-bold underline decoration-[1.5px] underline-offset-2">
3
</span>{" "}
matches.
{t[
"To view profiles, you need a subscription. Each subscription includes up to {count} matches."
]?.replace("{count}", "3") || (
<>
To view profiles, you need a subscription. Each subscription
includes up to{" "}
<span className="font-bold underline decoration-[1.5px] underline-offset-2">
3
</span>{" "}
matches.
</>
)}
</p>
<div className="rounded-[12px] border border-[#FF4F67] bg-[#FFECEF] px-3.5 py-2.5 text-center">
<p className="text-xs leading-[1.45] font-semibold text-[#FF4F67]">
To view profiles, a subscription is required. This helps cover our
support and matching services and applies only to male users
{t[
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users"
] ||
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users"}
</p>
</div>
</div>
@ -72,49 +83,53 @@ export function SubscriptionRequiredSheet({
height={18}
className="shrink-0"
/>
<span className="truncate">Buy Habib Coins</span>
<span className="truncate">
{t["Buy Habib Coins"] || "Buy Habib Coins"}
</span>
</div>
</button>
)}
<div className="grid w-full grid-cols-[33fr_67fr] gap-3">
<button
type="button"
className="appearance-none border-0 bg-transparent p-0 text-left min-w-0"
onClick={close}
>
<div className="inline-flex w-full items-center justify-center rounded-[18px] border border-[#9A9A9A] bg-[#F7F7F7] px-2 h-[52px] text-[16px] font-bold text-[#8B8B8B] shadow-[inset_0_1px_0_rgba(255,255,255,0.8)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate">Back</span>
</div>
</button>
<button
type="button"
className="appearance-none border-0 bg-transparent p-0 text-left min-w-0"
onClick={close}
>
<div className="inline-flex w-full items-center justify-center rounded-[18px] border border-[#9A9A9A] bg-[#F7F7F7] px-2 h-[52px] text-[16px] font-bold text-[#8B8B8B] shadow-[inset_0_1px_0_rgba(255,255,255,0.8)] transition-opacity active:opacity-90 min-w-0">
<span className="truncate">{t["Back"] || "Back"}</span>
</div>
</button>
<button
type="button"
disabled={isPaymentPending}
className="appearance-none border-0 bg-transparent p-0 text-left disabled:cursor-not-allowed disabled:opacity-70 min-w-0"
onClick={onPayment}
>
<div className="inline-flex w-full items-center justify-center gap-3 rounded-[18px] bg-[#F0445B] px-4 h-[52px] text-[16px] font-semibold text-white shadow-[0_10px_18px_rgba(240,68,91,0.28)] transition-opacity active:opacity-90 min-w-0">
{isPaymentPending ? (
<LoadingThreeDot />
) : (
<>
<span className="truncate">Payment</span>
<span className="inline-flex items-center gap-1 rounded-full bg-[#E43B51] p-1.5 text-xs font-semibold leading-none text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] shrink-0 min-w-0 whitespace-nowrap">
<Image
src="/assets/images/Inner Plugdsain Iframe.svg"
alt=""
aria-hidden="true"
width={18}
height={18}
className="shrink-0"
/>
<span className="truncate">50</span>
</span>
</>
)}
</div>
</button>
<button
type="button"
disabled={isPaymentPending}
className="appearance-none border-0 bg-transparent p-0 text-left disabled:cursor-not-allowed disabled:opacity-70 min-w-0"
onClick={onPayment}
>
<div className="inline-flex w-full items-center justify-center gap-3 rounded-[18px] bg-[#F0445B] px-4 h-[52px] text-[16px] font-semibold text-white shadow-[0_10px_18px_rgba(240,68,91,0.28)] transition-opacity active:opacity-90 min-w-0">
{isPaymentPending ? (
<LoadingThreeDot />
) : (
<>
<span className="truncate">
{t["Payment"] || "Payment"}
</span>
<span className="inline-flex items-center gap-1 rounded-full bg-[#E43B51] p-1.5 text-xs font-semibold leading-none text-white shadow-[inset_0_1px_0_rgba(255,255,255,0.12)] shrink-0 min-w-0 whitespace-nowrap">
<Image
src="/assets/images/Inner Plugdsain Iframe.svg"
alt=""
aria-hidden="true"
width={18}
height={18}
className="shrink-0"
/>
<span className="truncate">50</span>
</span>
</>
)}
</div>
</button>
</div>
</div>
)}

191
src/lib/webview-actions.test.ts

@ -0,0 +1,191 @@
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import {
buyHabibCoinPackages,
copyToClipboard,
downloadFile,
isInFlutterWebView,
openExternalUrl,
postActionToFlutter,
uploadFile,
} from "./webview-actions";
describe("webview-actions", () => {
const originalHabibApp = window.HabibApp;
beforeEach(() => {
vi.restoreAllMocks();
});
afterEach(() => {
window.HabibApp = originalHabibApp;
});
describe("isInFlutterWebView", () => {
it("returns true when window.HabibApp.postMessage is defined", () => {
window.HabibApp = { postMessage: vi.fn() };
expect(isInFlutterWebView()).toBe(true);
});
it("returns false when window.HabibApp is undefined", () => {
delete (window as any).HabibApp;
expect(isInFlutterWebView()).toBe(false);
});
});
describe("postActionToFlutter", () => {
it("sends message without data when data is omitted", () => {
const mockPostMessage = vi.fn();
window.HabibApp = { postMessage: mockPostMessage };
const result = postActionToFlutter("custom_action");
expect(result).toBe(true);
expect(mockPostMessage).toHaveBeenCalledTimes(1);
expect(mockPostMessage).toHaveBeenCalledWith(
JSON.stringify({ action: "custom_action" }),
);
});
it("sends message with data when data is provided", () => {
const mockPostMessage = vi.fn();
window.HabibApp = { postMessage: mockPostMessage };
const result = postActionToFlutter("custom_action", { foo: "bar" });
expect(result).toBe(true);
expect(mockPostMessage).toHaveBeenCalledWith(
JSON.stringify({ action: "custom_action", data: { foo: "bar" } }),
);
});
it("returns false and does not throw when not in flutter webview", () => {
delete (window as any).HabibApp;
const result = postActionToFlutter("custom_action");
expect(result).toBe(false);
});
});
describe("buyHabibCoinPackages", () => {
it("dispatches buy_coin action to Flutter and returns true", () => {
const mockPostMessage = vi.fn();
window.HabibApp = { postMessage: mockPostMessage };
const result = buyHabibCoinPackages();
expect(result).toBe(true);
expect(mockPostMessage).toHaveBeenCalledTimes(1);
expect(mockPostMessage).toHaveBeenCalledWith(
JSON.stringify({ action: "buy_coin" }),
);
});
it("returns false when not running in Flutter WebView", () => {
delete (window as any).HabibApp;
const result = buyHabibCoinPackages();
expect(result).toBe(false);
});
});
describe("downloadFile", () => {
it("dispatches download_file action with options", () => {
const mockPostMessage = vi.fn();
window.HabibApp = { postMessage: mockPostMessage };
const result = downloadFile({
url: "https://example.com/file.pdf",
fileName: "file.pdf",
mimeType: "application/pdf",
fileType: "document",
});
expect(result).toBe(true);
expect(mockPostMessage).toHaveBeenCalledWith(
JSON.stringify({
action: "download_file",
data: {
url: "https://example.com/file.pdf",
fileName: "file.pdf",
mimeType: "application/pdf",
fileType: "document",
},
}),
);
});
});
describe("copyToClipboard", () => {
it("dispatches copy_to_clipboard in Flutter WebView", async () => {
const mockPostMessage = vi.fn();
window.HabibApp = { postMessage: mockPostMessage };
const result = await copyToClipboard("sample text", "invite_code");
expect(result).toBe(true);
expect(mockPostMessage).toHaveBeenCalledWith(
JSON.stringify({
action: "copy_to_clipboard",
data: {
text: "sample text",
label: "invite_code",
showToast: true,
},
}),
);
});
it("falls back to navigator.clipboard.writeText when outside WebView", async () => {
delete (window as any).HabibApp;
const writeTextMock = vi.fn().mockResolvedValue(undefined);
Object.assign(navigator, {
clipboard: { writeText: writeTextMock },
});
const result = await copyToClipboard("sample text");
expect(result).toBe(true);
expect(writeTextMock).toHaveBeenCalledWith("sample text");
});
});
describe("openExternalUrl", () => {
it("dispatches open_external_url action to Flutter", () => {
const mockPostMessage = vi.fn();
window.HabibApp = { postMessage: mockPostMessage };
const result = openExternalUrl({ url: "https://habibapp.com" });
expect(result).toBe(true);
expect(mockPostMessage).toHaveBeenCalledWith(
JSON.stringify({
action: "open_external_url",
data: {
mode: "externalApplication",
showErrorToast: true,
url: "https://habibapp.com",
},
}),
);
});
});
describe("uploadFile", () => {
it("dispatches upload_file action with options to Flutter", () => {
const mockPostMessage = vi.fn();
window.HabibApp = { postMessage: mockPostMessage };
const result = uploadFile({
mediaType: "image",
source: "gallery",
returnAs: "upload",
uploadUrl: "/api/upload",
});
expect(result).toBe(true);
expect(mockPostMessage).toHaveBeenCalledWith(
JSON.stringify({
action: "upload_file",
data: {
mediaType: "image",
source: "gallery",
returnAs: "upload",
uploadUrl: "/api/upload",
},
}),
);
});
});
});

6
src/translations/locales/ar.json

@ -763,5 +763,9 @@
"Try again": "حاول مرة أخرى",
"No advisors are currently available.": "لا يوجد مستشارون متاحون حاليًا.",
"Connection error": "خطأ في الاتصال",
"Something went wrong. Please check your internet connection and try again.": "حدث خطأ ما. يرجى التحقق من اتصالك بالإنترنت والمحاولة مرة أخرى."
"Something went wrong. Please check your internet connection and try again.": "حدث خطأ ما. يرجى التحقق من اتصالك بالإنترنت والمحاولة مرة أخرى.",
"Buy Habib Coins": "شراء عملات حبيب",
"Subscription required": "الاشتراك مطلوب",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "لعرض الملفات الشخصية، تحتاج إلى اشتراك. يتضمن كل اشتراك ما يصل إلى {count} تطابقات.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "لعرض الملفات الشخصية، يلزم الاشتراك. يساعد ذلك في تغطية خدمات الدعم والتوفيق ويسري فقط على المستخدمين الذكور"
}

6
src/translations/locales/az.json

@ -763,5 +763,9 @@
"Try again": "Yenidən cəhd edin",
"No advisors are currently available.": "Hazırda mövcud məsləhətçi yoxdur.",
"Connection error": "Bağlantı xətası",
"Something went wrong. Please check your internet connection and try again.": "Xəta baş verdi. İnternet bağlantınızı yoxlayın və yenidən cəhd edin."
"Something went wrong. Please check your internet connection and try again.": "Xəta baş verdi. İnternet bağlantınızı yoxlayın və yenidən cəhd edin.",
"Buy Habib Coins": "Həbib Sikkələri Al",
"Subscription required": "Abunə tələb olunur",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Profilləri görmək üçün abunəyə ehtiyacınız var. Hər abunə {count} uyğunlaşmanı əhatə edir.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Profilləri görmək üçün abunə tələb olunur. Bu, dəstək və uyğunlaşma xidmətlərimizi əhatə edir və yalnız kişi istifadəçilərə aiddir"
}

6
src/translations/locales/bn.json

@ -763,5 +763,9 @@
"Try again": "আবার চেষ্টা করুন",
"No advisors are currently available.": "বর্তমানে কোনো উপদেষ্টা নেই।",
"Connection error": "সংযোগ ত্রুটি",
"Something went wrong. Please check your internet connection and try again.": "কিছু ভুল হয়েছে। আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন এবং আবার চেষ্টা করুন।"
"Something went wrong. Please check your internet connection and try again.": "কিছু ভুল হয়েছে। আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন এবং আবার চেষ্টা করুন।",
"Buy Habib Coins": "হাবিব কয়েন কিনুন",
"Subscription required": "সাবস্ক্রিপশন প্রয়োজন",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "প্রোফাইল দেখতে আপনার সাবস্ক্রিপশন প্রয়োজন। প্রতিটি সাবস্ক্রিপশনে {count}টি ম্যাচ অন্তর্ভুক্ত।",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "প্রোফাইল দেখতে সাবস্ক্রিপশন প্রয়োজন। এটি আমাদের সহায়তা এবং ম্যাচিং পরিষেবার খরচ বহন করতে সাহায্য করে এবং শুধুমাত্র পুরুষ ব্যবহারকারীদের জন্য প্রযোজ্য"
}

6
src/translations/locales/da.json

@ -763,5 +763,9 @@
"Try again": "Prøv igen",
"No advisors are currently available.": "Der er i øjeblikket ingen tilgængelige rådgivere.",
"Connection error": "Forbindelsesfejl",
"Something went wrong. Please check your internet connection and try again.": "Noget gik galt. Tjek din internetforbindelse og prøv igen."
"Something went wrong. Please check your internet connection and try again.": "Noget gik galt. Tjek din internetforbindelse og prøv igen.",
"Buy Habib Coins": "Køb Habib-mønter",
"Subscription required": "Abonnement påkrævet",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "For at se profiler har du brug for et abonnement. Hvert abonnement inkluderer op til {count} matches.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "For at se profiler kræves et abonnement. Dette hjælper med at dække vores support- og matchningstjenester og gælder kun for mandlige brugere"
}

6
src/translations/locales/de.json

@ -763,5 +763,9 @@
"Try again": "Erneut versuchen",
"No advisors are currently available.": "Derzeit sind keine Berater verfügbar.",
"Connection error": "Verbindungsfehler",
"Something went wrong. Please check your internet connection and try again.": "Etwas ist schiefgelaufen. Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut."
"Something went wrong. Please check your internet connection and try again.": "Etwas ist schiefgelaufen. Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.",
"Buy Habib Coins": "Habib-Münzen kaufen",
"Subscription required": "Abonnement erforderlich",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Um Profile anzusehen, benötigen Sie ein Abonnement. Jedes Abonnement beinhaltet bis zu {count} Übereinstimmungen.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Zum Anzeigen von Profilen ist ein Abonnement erforderlich. Dies hilft, unsere Support- und Matching-Dienste zu finanzieren und gilt nur für männliche Nutzer"
}

6
src/translations/locales/en.json

@ -813,5 +813,9 @@
"Try again": "Try again",
"No advisors are currently available.": "No advisors are currently available.",
"Connection error": "Connection error",
"Something went wrong. Please check your internet connection and try again.": "Something went wrong. Please check your internet connection and try again."
"Something went wrong. Please check your internet connection and try again.": "Something went wrong. Please check your internet connection and try again.",
"Buy Habib Coins": "Buy Habib Coins",
"Subscription required": "Subscription required",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "To view profiles, you need a subscription. Each subscription includes up to {count} matches.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users"
}

6
src/translations/locales/es.json

@ -763,5 +763,9 @@
"Try again": "Intentar de nuevo",
"No advisors are currently available.": "Actualmente no hay asesores disponibles.",
"Connection error": "Error de conexión",
"Something went wrong. Please check your internet connection and try again.": "Algo salió mal. Revisa tu conexión a Internet e inténtalo de nuevo."
"Something went wrong. Please check your internet connection and try again.": "Algo salió mal. Revisa tu conexión a Internet e inténtalo de nuevo.",
"Buy Habib Coins": "Comprar monedas Habib",
"Subscription required": "Suscripción requerida",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Para ver perfiles, necesitas una suscripción. Cada suscripción incluye hasta {count} coincidencias.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Para ver perfiles, se requiere una suscripción. Esto ayuda a cubrir nuestros servicios de soporte y emparejamiento y aplica solo a usuarios masculinos"
}

6
src/translations/locales/fa.json

@ -813,5 +813,9 @@
"Try again": "تلاش مجدد",
"No advisors are currently available.": "در حال حاضر مشاوری در دسترس نیست.",
"Connection error": "خطا در اتصال",
"Something went wrong. Please check your internet connection and try again.": "مشکلی پیش آمده است. لطفاً اتصال اینترنت خود را بررسی و دوباره تلاش کنید."
"Something went wrong. Please check your internet connection and try again.": "مشکلی پیش آمده است. لطفاً اتصال اینترنت خود را بررسی و دوباره تلاش کنید.",
"Buy Habib Coins": "خرید سکه حبیب",
"Subscription required": "اشتراک الزامی است",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "برای مشاهده پروفایل‌ها، نیاز به اشتراک دارید. هر اشتراک شامل حداکثر {count} همسان‌یابی است.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "برای مشاهده پروفایل‌ها، اشتراک الزامی است. این هزینه صرف خدمات پشتیبانی و همسان‌یابی می‌شود و فقط شامل کاربران مرد است"
}

6
src/translations/locales/fr.json

@ -763,5 +763,9 @@
"Try again": "Réessayer",
"No advisors are currently available.": "Aucun conseiller n'est disponible actuellement.",
"Connection error": "Erreur de connexion",
"Something went wrong. Please check your internet connection and try again.": "Un problème est survenu. Veuillez vérifier votre connexion Internet et réessayer."
"Something went wrong. Please check your internet connection and try again.": "Un problème est survenu. Veuillez vérifier votre connexion Internet et réessayer.",
"Buy Habib Coins": "Acheter des pièces Habib",
"Subscription required": "Abonnement requis",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Pour voir les profils, vous avez besoin d'un abonnement. Chaque abonnement comprend jusqu'à {count} correspondances.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Pour voir les profils, un abonnement est requis. Cela aide à couvrir nos services de support et de mise en relation et s'applique uniquement aux utilisateurs masculins"
}

6
src/translations/locales/gu.json

@ -763,5 +763,9 @@
"Try again": "ફરી પ્રયાસ કરો",
"No advisors are currently available.": "હાલમાં કોઈ સલાહકાર ઉપલબ્ધ નથી.",
"Connection error": "કનેક્શન ભૂલ",
"Something went wrong. Please check your internet connection and try again.": "કંઈક ખોટું થયું. કૃપા કરીને તમારું ઇન્ટરનેટ કનેક્શન તપાસો અને ફરી પ્રયાસ કરો."
"Something went wrong. Please check your internet connection and try again.": "કંઈક ખોટું થયું. કૃપા કરીને તમારું ઇન્ટરનેટ કનેક્શન તપાસો અને ફરી પ્રયાસ કરો.",
"Buy Habib Coins": "હબીબ સિક્કા ખરીદો",
"Subscription required": "સબ્સ્ક્રિપ્શન જરૂરી",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "પ્રોફાઇલ જોવા માટે તમારે સબ્સ્ક્રિપ્શનની જરૂર છે. દરેક સબ્સ્ક્રિપ્શનમાં {count} મેચ સુધીનો સમાવેશ થાય છે.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "પ્રોફાઇલ જોવા માટે સબ્સ્ક્રિપ્શન જરૂરી છે. આ અમારી સપોર્ટ અને મેચિંગ સેવાઓને આવરી લેવામાં મદદ કરે છે અને ફક્ત પુરુષ વપરાશકર્તાઓને લાગુ પડે છે"
}

6
src/translations/locales/ha.json

@ -763,5 +763,9 @@
"Try again": "Sake gwadawa",
"No advisors are currently available.": "Babu masu ba da shawara a halin yanzu.",
"Connection error": "Kuskuren haɗi",
"Something went wrong. Please check your internet connection and try again.": "Wani abu ya faru ba daidai ba. Da fatan za a bincika haɗin intanet ɗinku kuma a sake gwadawa."
"Something went wrong. Please check your internet connection and try again.": "Wani abu ya faru ba daidai ba. Da fatan za a bincika haɗin intanet ɗinku kuma a sake gwadawa.",
"Buy Habib Coins": "Sayi Tsabar Kuɗin Habib",
"Subscription required": "Ana buƙatar biyan kuɗi",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Don ganin bayanan mutane, kuna buƙatar biyan kuɗi. Kowane biyan kuɗi ya ƙunshi har zuwa {count} daidaituwa.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Don ganin bayanan mutane, ana buƙatar biyan kuɗi. Wannan yana taimakawa wajen biyan kuɗin sabis na tallafi da daidaitawa kuma yana shafi maza kawai"
}

6
src/translations/locales/he.json

@ -291,5 +291,9 @@
"Try again": "נסה שוב",
"No advisors are currently available.": "אין כרגע יועצים זמינים.",
"Connection error": "שגיאת חיבור",
"Something went wrong. Please check your internet connection and try again.": "משהו השתבש. אנא בדוק את חיבור האינטרנט שלך ונסה שוב."
"Something went wrong. Please check your internet connection and try again.": "משהו השתבש. אנא בדוק את חיבור האינטרנט שלך ונסה שוב.",
"Buy Habib Coins": "קנה מטבעות חביב",
"Subscription required": "נדרש מנוי",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "כדי לצפות בפרופילים, יש צורך במנוי. כל מנוי כולל עד {count} התאמות.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "כדי לצפות בפרופילים, נדרש מנוי. הדבר עוזר לכסות את שירותי התמיכה וההתאמה שלנו וחל רק על משתמשים גברים"
}

6
src/translations/locales/hi.json

@ -763,5 +763,9 @@
"Try again": "फिर से प्रयास करें",
"No advisors are currently available.": "इस समय कोई सलाहकार उपलब्ध नहीं है।",
"Connection error": "कनेक्शन त्रुटि",
"Something went wrong. Please check your internet connection and try again.": "कुछ गलत हो गया। कृपया अपना इंटरनेट कनेक्शन जांचें और पुनः प्रयास करें।"
"Something went wrong. Please check your internet connection and try again.": "कुछ गलत हो गया। कृपया अपना इंटरनेट कनेक्शन जांचें और पुनः प्रयास करें।",
"Buy Habib Coins": "हबीब सिक्के खरीदें",
"Subscription required": "सदस्यता आवश्यक",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "प्रोफाइल देखने के लिए सदस्यता की आवश्यकता है। प्रत्येक सदस्यता में {count} मैच शामिल हैं।",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "प्रोफाइल देखने के लिए सदस्यता आवश्यक है। यह हमारी सहायता और मिलान सेवाओं को कवर करने में मदद करती है और केवल पुरुष उपयोगकर्ताओं पर लागू होती है"
}

6
src/translations/locales/id.json

@ -291,5 +291,9 @@
"Try again": "Coba lagi",
"No advisors are currently available.": "Saat ini tidak ada penasihat yang tersedia.",
"Connection error": "Kesalahan koneksi",
"Something went wrong. Please check your internet connection and try again.": "Terjadi kesalahan. Silakan periksa koneksi internet Anda dan coba lagi."
"Something went wrong. Please check your internet connection and try again.": "Terjadi kesalahan. Silakan periksa koneksi internet Anda dan coba lagi.",
"Buy Habib Coins": "Beli Koin Habib",
"Subscription required": "Langganan diperlukan",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Untuk melihat profil, Anda memerlukan langganan. Setiap langganan mencakup hingga {count} kecocokan.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Untuk melihat profil, diperlukan langganan. Ini membantu menutupi layanan dukungan dan pencocokan kami dan hanya berlaku untuk pengguna pria"
}

6
src/translations/locales/ks.json

@ -291,5 +291,9 @@
"Try again": "دوبآ کوشش کریو",
"No advisors are currently available.": "فی الحأل کاہن مشیر دستیاب چھُنہِ۔",
"Connection error": "رابطٕ غلطی",
"Something went wrong. Please check your internet connection and try again.": "کانٛہہ غلط ہوگیو۔ مہربٲنی کٔرتھ اپنؠ اِنٹرنیٹ کنکشن چیک کٔرِو تہٕ بیاکھ کوشِش کٔرِو۔"
"Something went wrong. Please check your internet connection and try again.": "کانٛہہ غلط ہوگیو۔ مہربٲنی کٔرتھ اپنؠ اِنٹرنیٹ کنکشن چیک کٔرِو تہٕ بیاکھ کوشِش کٔرِو۔",
"Buy Habib Coins": "حبیب سِکّہٕ خریٖد کٔرِو",
"Subscription required": "رکنیت ضروٗری ہے",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "پروفایلس وُچھنہٕ خٲطرٕ رکنیت ضروٗری ہے۔ ہر رکنیت مٮ۪ں {count} میچ شامل ہِن۔",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "پروفایلس وُچھنہٕ خٲطرٕ رکنیت ضروٗری ہے۔ یِہ ساہٕ سپورٹ تہٕ میچِنگ خِدمات ہٕنٛد کَرنٕ مدد کَرِتھ تہٕ صرف مَرد صارفین پؠٹھ لاگوٗ ہے"
}

6
src/translations/locales/pt.json

@ -291,5 +291,9 @@
"Try again": "Tentar novamente",
"No advisors are currently available.": "Nenhum consultor disponível no momento.",
"Connection error": "Erro de conexão",
"Something went wrong. Please check your internet connection and try again.": "Algo deu errado. Verifique sua conexão com a internet e tente novamente."
"Something went wrong. Please check your internet connection and try again.": "Algo deu errado. Verifique sua conexão com a internet e tente novamente.",
"Buy Habib Coins": "Comprar moedas Habib",
"Subscription required": "Assinatura necessária",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Para ver perfis, você precisa de uma assinatura. Cada assinatura inclui até {count} correspondências.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Para ver perfis, é necessária uma assinatura. Isso ajuda a cobrir nossos serviços de suporte e correspondência e se aplica apenas a usuários masculinos"
}

6
src/translations/locales/ru.json

@ -768,5 +768,9 @@
"Try again": "Попробовать снова",
"No advisors are currently available.": "На данный момент нет доступных консультантов.",
"Connection error": "Ошибка соединения",
"Something went wrong. Please check your internet connection and try again.": "Что-то пошло не так. Проверьте подключение к интернету и попробуйте снова."
"Something went wrong. Please check your internet connection and try again.": "Что-то пошло не так. Проверьте подключение к интернету и попробуйте снова.",
"Buy Habib Coins": "Купить монеты Habib",
"Subscription required": "Требуется подписка",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Для просмотра профилей необходима подписка. Каждая подписка включает до {count} совпадений.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Для просмотра профилей требуется подписка. Это помогает покрыть наши услуги поддержки и подбора и применяется только к мужчинам"
}

6
src/translations/locales/sw.json

@ -291,5 +291,9 @@
"Try again": "Jaribu tena",
"No advisors are currently available.": "Hakuna washauri wanaopatikana kwa sasa.",
"Connection error": "Hitilafu ya muunganisho",
"Something went wrong. Please check your internet connection and try again.": "Kuna hitilafu fulani. Tafadhali angalia muunganisho wako wa intaneti na ujaribu tena."
"Something went wrong. Please check your internet connection and try again.": "Kuna hitilafu fulani. Tafadhali angalia muunganisho wako wa intaneti na ujaribu tena.",
"Buy Habib Coins": "Nunua Sarafu za Habib",
"Subscription required": "Usajili unahitajika",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Ili kuona wasifu, unahitaji usajili. Kila usajili unajumuisha hadi mechi {count}.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Ili kuona wasifu, usajili unahitajika. Hii husaidia kugharamia huduma zetu za usaidizi na kuoanisha na inatumika kwa watumiaji wa kiume pekee"
}

6
src/translations/locales/tg.json

@ -291,5 +291,9 @@
"Try again": "Дубора кӯшиш кунед",
"No advisors are currently available.": "Дар айни замон маслиҳатдиҳон дастрас нест.",
"Connection error": "Хатои пайвастшавӣ",
"Something went wrong. Please check your internet connection and try again.": "Чизе нодуруст рух дод. Лутфан пайвастшавии интернети худро санҷед ва дубора кӯшиш кунед."
"Something went wrong. Please check your internet connection and try again.": "Чизе нодуруст рух дод. Лутфан пайвастшавии интернети худро санҷед ва дубора кӯшиш кунед.",
"Buy Habib Coins": "Харидани тангаҳои Ҳабиб",
"Subscription required": "Обуна лозим аст",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Барои дидани профилҳо, ба обуна ниёз доред. Ҳар як обуна то {count} мувофиқатро дар бар мегирад.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Барои дидани профилҳо, обуна лозим аст. Ин барои пардохти хидматҳои дастгирӣ ва мувофиқат кӯмак мекунад ва танҳо ба корбарони мард дахл дорад"
}

6
src/translations/locales/tr.json

@ -291,5 +291,9 @@
"Try again": "Tekrar dene",
"No advisors are currently available.": "Şu anda uygun danışman yok.",
"Connection error": "Bağlantı hatası",
"Something went wrong. Please check your internet connection and try again.": "Bir şeyler yanlış gitti. Lütfen internet bağlantınızı kontrol edin ve tekrar deneyin."
"Something went wrong. Please check your internet connection and try again.": "Bir şeyler yanlış gitti. Lütfen internet bağlantınızı kontrol edin ve tekrar deneyin.",
"Buy Habib Coins": "Habib Jetonu Satın Al",
"Subscription required": "Abonelik gerekli",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Profilleri görüntülemek için aboneliğe ihtiyacınız var. Her abonelik {count} eşleşme içerir.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Profilleri görüntülemek için abonelik gereklidir. Bu, destek ve eşleştirme hizmetlerimizi karşılamaya yardımcı olur ve yalnızca erkek kullanıcılar için geçerlidir"
}

6
src/translations/locales/ul.json

@ -291,5 +291,9 @@
"Try again": "دوبارہ کوشش کریں",
"No advisors are currently available.": "اس وقت کوئی مشاور دستیاب نہیں ہے۔",
"Connection error": "د ارتباط تېروتنه",
"Something went wrong. Please check your internet connection and try again.": "یو څه غلط شو. مهرباني وکړئ خپل انټرنیټ ارتباط وګورئ او بیا هڅه وکړئ."
"Something went wrong. Please check your internet connection and try again.": "یو څه غلط شو. مهرباني وکړئ خپل انټرنیټ ارتباط وګورئ او بیا هڅه وکړئ.",
"Buy Habib Coins": "د حبیب سکې واخلئ",
"Subscription required": "ګډون ته اړتیا ده",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "د پروفایلونو لیدلو لپاره، تاسو ته ګډون ته اړتیا ده. هر ګډون کې تر {count} میچونه شاملې دي.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "د پروفایلونو لیدلو لپاره ګډون ته اړتیا ده. دا زموږ د ملاتړ او میچ کولو خدماتو لپاره مرسته کوي او یوازې د نارینه کاروونکو لپاره پلي کیږي"
}

6
src/translations/locales/ur.json

@ -291,5 +291,9 @@
"Try again": "دوبارہ کوشش کریں",
"No advisors are currently available.": "اس وقت کوئی مشاور دستیاب نہیں ہے۔",
"Connection error": "رابطے کی خرابی",
"Something went wrong. Please check your internet connection and try again.": "کچھ غلط ہو گیا۔ براہ کرم اپنا انٹرنیٹ کنکشن چیک کریں اور دوبارہ کوشش کریں۔"
"Something went wrong. Please check your internet connection and try again.": "کچھ غلط ہو گیا۔ براہ کرم اپنا انٹرنیٹ کنکشن چیک کریں اور دوبارہ کوشش کریں۔",
"Buy Habib Coins": "حبیب سکے خریدیں",
"Subscription required": "رکنیت ضروری ہے",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "پروفائلز دیکھنے کے لیے رکنیت ضروری ہے۔ ہر رکنیت میں {count} میچ شامل ہیں۔",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "پروفائلز دیکھنے کے لیے رکنیت ضروری ہے۔ یہ ہماری سپورٹ اور میچنگ سروسز کی لاگت پوری کرنے میں مدد کرتا ہے اور صرف مرد صارفین پر لاگو ہوتا ہے"
}

6
src/translations/locales/uz.json

@ -291,5 +291,9 @@
"Try again": "Qayta urinib ko‘ring",
"No advisors are currently available.": "Hozircha mavjud maslahatchi yo‘q.",
"Connection error": "Ulanish xatosi",
"Something went wrong. Please check your internet connection and try again.": "Nimadir noto'g'ri ketdi. Iltimos, internet ulanishingizni tekshiring va qayta urinib ko'ring."
"Something went wrong. Please check your internet connection and try again.": "Nimadir noto'g'ri ketdi. Iltimos, internet ulanishingizni tekshiring va qayta urinib ko'ring.",
"Buy Habib Coins": "Habib tangalarini sotib oling",
"Subscription required": "Obuna talab qilinadi",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "Profillarni ko'rish uchun obuna kerak. Har bir obuna {count}tagacha moslikni o'z ichiga oladi.",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "Profillarni ko'rish uchun obuna talab qilinadi. Bu bizning qo'llab-quvvatlash va moslashtirish xizmatlarimizni qoplashga yordam beradi va faqat erkak foydalanuvchilarga tegishli"
}

6
src/translations/locales/zh.json

@ -763,5 +763,9 @@
"Try again": "重试",
"No advisors are currently available.": "目前没有可用的顾问。",
"Connection error": "连接错误",
"Something went wrong. Please check your internet connection and try again.": "出了点问题。请检查您的互联网连接并重试。"
"Something went wrong. Please check your internet connection and try again.": "出了点问题。请检查您的互联网连接并重试。",
"Buy Habib Coins": "购买Habib币",
"Subscription required": "需要订阅",
"To view profiles, you need a subscription. Each subscription includes up to {count} matches.": "要查看个人资料,您需要订阅。每次订阅最多包含{count}次匹配。",
"To view profiles, a subscription is required. This helps cover our support and matching services and applies only to male users": "查看个人资料需要订阅。这有助于支付我们的支持和匹配服务费用,仅适用于男性用户"
}
Loading…
Cancel
Save