remove ru

This commit is contained in:
dev.daminik00 2025-07-27 02:50:11 +03:00
parent edda5e476a
commit daf559cfae
7 changed files with 727 additions and 215 deletions

View File

@ -37,6 +37,7 @@
},
"Subscriptions": {
"title": "Manage my subscriptions",
"success_cancel_message": "Your subscription has been cancelled successfully",
"modal": {
"title": "Are you sure you want to cancel your subscription?",
"description": "Are you sure you want to cancel your subscription?",
@ -54,7 +55,8 @@
"subscription_status": "Subscription Status",
"subscription_status_value": {
"ACTIVE": "Active",
"CANCELLED": "Cancels on {date}"
"CANCELLED": "Cancels on {date}",
"PAST_DUE": "Past due"
},
"billing_period": "Billing Period",
"billing_period_value": {
@ -73,40 +75,41 @@
"try_again": "Try again"
},
"CancelSubscription": {
"title": "Жаль, что вы уходите…",
"description": "Многие уходят именно в тот момент, когда астролог начинает видеть поворотную точку в их истории.<br></br><br></br>Позвольте задать пару вопросов, чтобы сделать наш сервис лучше - и, возможно, предложить решение, которое больше подходит именно вам.",
"stay_button": "Остаться и уменьшить мой план на 50%",
"cancel_button": "Отменить"
"title": "Sad to see you go…",
"description": "Many leave exactly at the moment when the astrologist begins to see a turning point in their history.<br></br><br></br>Allow us to ask a few questions to make our service better - and, possibly, offer a solution that is more suitable for you.",
"stay_button": "Stay and reduce my plan by 50%",
"cancel_button": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"Stay50Done": {
"title": "Мы ценим твой выбор!",
"title": "We value your choice!",
"descriptions": {
"1": "План успешно изменен"
"1": "Plan successfully changed"
},
"button": "Готово"
"button": "Done"
},
"AppreciateChoice": {
"title": "Мы ценим твой выбор!",
"title": "We value your choice!",
"descriptions": {
"1": "Подбираем оптимальное решение...",
"2": "Составляем персонализированный опрос...",
"3": "Формируем выгодное предложение..."
"1": "Selecting the optimal solution...",
"2": "Creating a personalized survey...",
"3": "Forming a profitable offer..."
},
"button": "Next"
},
"WhatReason": {
"title": "Что стало причиной?",
"title": "What became the reason?",
"answers": {
"no_promised_result": "Не получил(а) обещанного результата",
"too_expensive": "Слишком дорого",
"high_auto_payment": "Стоимость автоматической оплаты слишком высока",
"unexpected_fee": "Я не ожидал дополнительной платы",
"want_pause": "Хочу сделать паузу",
"service_not_as_expected": "Сервис оказался не таким, как ожидал(а)",
"found_alternative": "Нашёл(а) альтернативу",
"dislike_app": "Мне не понравилось приложение",
"hard_to_navigate": "В приложении сложно ориентироваться",
"other": "Другое"
"no_promised_result": "Did not receive the promised result",
"too_expensive": "Too expensive",
"high_auto_payment": "The cost of automatic payment is too high",
"unexpected_fee": "I did not expect an additional charge",
"want_pause": "I want to pause",
"service_not_as_expected": "The service was not as expected",
"found_alternative": "Found an alternative",
"dislike_app": "I did not like the app",
"hard_to_navigate": "It is difficult to navigate in the app",
"other": "Other"
}
},
"Payment": {
@ -120,57 +123,275 @@
}
},
"SecondChance": {
"title": "Дайте нам второй шанс и получи самый лучший план БЕСПЛАТНО",
"title": "Give us a second chance and get the best plan for free",
"offers": {
"1": {
"title": "Бесплатный план на<br></br>1 месяц",
"description": "Используй весь потенциал AURA и даже больше.",
"title": "Free plan for 1 month",
"description": "Use the full potential of WITLAB and even more.",
"old-price": "1900",
"new-price": "0"
},
"2": {
"title": "Бесплатный премиальный план",
"description": "Бесплатная 30 мин консультация с премиальным Эдвайзером",
"title": "Free premium plan",
"description": "Free 30 min consultation with a premium advisor",
"old-price": "4900",
"new-price": "0"
}
},
"get_offer": "Получить бесплатный план",
"cancel": "Отменить"
"get_offer": "Get free plan",
"cancel": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"ChangeMind": {
"title": "Что может изменить твое мнение?",
"title": "What could change your mind?",
"answers": {
"more_chat_time": "Больше времени в чатах",
"more_personal_reports": "Больше персонализированных отчетов",
"individual_plan": "Индивидуальный план",
"other": "Другое"
"more_chat_time": "More time in chats",
"more_personal_reports": "More personalized reports",
"individual_plan": "Individual plan",
"other": "Other"
}
},
"StopFor30Days": {
"title": "Остановите подписку на тридцать дней. Никаких списаний.",
"stop": "Остановить",
"cancel": "Отменить"
"title": "Pause the subscription for 30 days. No charges.",
"stop": "Pause",
"cancel": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"CancellationOfSubscription": {
"title": "Подписка аннулируется!",
"description": "Чтобы отменить подписку, нажмите “Подтвердить мои действия”",
"title": "Subscription cancelled!",
"description": "To cancel the subscription, click “Confirm my actions”",
"offer": {
"title": "Бесплатный 2-месячный план",
"title": "Free 2-month plan",
"old-price": "9900",
"new-price": "0"
},
"offer_button": "Применить",
"cancel_button": "Я подтверждаю свои действия"
"offer_button": "Apply",
"cancel_button": "Confirm my actions",
"error_message": "Something went wrong. Please try again later.",
"toast_message": "Your subscription will be cancelled!"
},
"PlanCancelled": {
"title": "Стандартный план Отменен!",
"title": "Standard plan cancelled!",
"icon": "🥳",
"description": "Выполнен переход на бесплатный тридцатидневный план ",
"button": "Готово"
"description": "Completed transition to a free 30-day plan",
"button": "Done"
},
"SubscriptionStopped": {
"title": "Подписка остановлена успешно!",
"title": "Subscription stopped successfully!",
"icon": "🎉"
},
"DatePicker": {
"year": "YYYY",
"month": "MM",
"day": "DD"
},
"TimePicker": {
"hour": "HH",
"minute": "MM",
"period": "AM/PM"
},
"Compatibility": {
"title": "Your Personality Type",
"description": "Please input your data to create the report.",
"button": "Continue",
"error": "Something went wrong. Please try again later."
},
"CompatibilityResult": {
"title": "Your Personality Type",
"error": "Something went wrong. Please try again later."
},
"PalmistryResult": {
"title": "Your Personality Type",
"error": "Something went wrong. Please try again later."
},
"Meditation": {
"title": "Stop and breathe to help you relax and focus on what really matters.",
"subtitle": "Breathing practice will help improve your aura. Breath in the positive energy, breathe out the negative...",
"button": "BEGIN"
},
"MeditationResult": {
"breath_relax": "Breath & Relax",
"breath_in": "Breath in",
"breath_out": "Breath out"
},
"ActionFieldsForm": {
"required_field": "This field is required"
},
"AdditionalPurchases": {
"caution": {
"title": "Caution!",
"description": "To prevent double charges please don`t close the page and don`t go back."
},
"add-consultant": {
"title": "More for you",
"exclusive_offer": "Exclusive offer recommended for you to achieve your goals faster",
"your_unique_consultation": "Your unique individual consultation",
"30-minute": "30-minute private consultation with an expert",
"unlock_profound": "Unlock profound insights into your personality, relationships, career trajectory, and life's pivotal moments through astrology, empowering you to make informed decisions and achieve greater fulfillment.",
"one_time_price_offer": "One time price offer: <price></price>",
"choose_from": "Choose from 80+ experts astrologers.",
"original_price": "Original price: {oldPrice} ",
"save": "Save {discount}%",
"get_my_consultation": "Get my consultation",
"skip_this_offer": "Skip this offer",
"payment_error": "Something went wrong. Please try again later."
},
"add-guides": {
"title": "Choose your sign-up offer 🔥",
"subtitle": "Available only now",
"description": "*You will be charged for the add-on services or offers selected at the time of purchase. This is a non-recuring payment.",
"button": "Get my copy",
"payment_error": "Something went wrong. Please try again later.",
"select_product_error": "Please select a product",
"skip_offer": "Skip offer",
"products": {
"main_ultra_pack": {
"title": "ULTRA PACK",
"discount": "{discount}% OFF",
"subtitle": "(3 in 1 + 2 secret bonus reading)",
"price": "<price></price> ( regular price <oldPrice></oldPrice> )",
"emoji": "star_struck.webp"
},
"main_numerology_analysis": {
"title": "NUMEROLOGY ANALYSIS",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "input_numbers.webp"
},
"main_tarot_reading": {
"title": "TAROT READING",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "sunset.webp"
},
"main_palmistry_guide": {
"title": "PALMISTRY GUIDE",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "rised_hand.webp"
},
"main_money_reading": {
"title": "MONEY READING",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "money.png"
},
"main_skip_offer": {
"title": "SKIP OFFER",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"subtitle": "You are missing out on both readings",
"emoji": "rised_hand.webp"
}
}
}
},
"Chat": {
"header": {
"title": "Chat",
"search_placeholder": "Type a Chat..."
},
"new_messages": "New messages",
"view_all": "View All ({count})",
"hide_all": "Hide",
"typing": "is typing...",
"voice_message": "Voice message",
"photo": "Photo",
"correspondence_started": {
"title": "Correspondence started",
"pinned_chats": "Pinned Chats"
},
"message_input_placeholder": "Type a message...",
"message_image_fallback": "Failed to load image",
"payment_error": "Something went wrong. Please try again later."
},
"RefillTimerModal": {
"title": "Refill credits in 1 click",
"subtitle": "<oldCredits></oldCredits> {newCredits} credits for {price}",
"button": "Get Credits",
"dont_want_to_continue": "I don't want to continue chatting",
"auto_refill_description": "Auto-refill keeps your readings uninterrupted. After using {afterCredits} credits, we'll automatically add {addCredits} more credits ({minutes} minutes of consultation) for a one-time payment. No recurring charges.",
"seconds": "seconds"
},
"RefillOptionsModal": {
"header": {
"title": "{name} is waiting!",
"subtitle": "{name} is waiting for you in our chat..."
},
"button": "Continue",
"refill_option": {
"popular": "POPULAR",
"credits": "{credits} credits",
"bonus": "+<bonus></bonus><br></br>credits",
"price": "{price}"
},
"benefits": {
"1": {
"title": "Instant Access",
"description": "Continue chatting immediately"
},
"2": {
"title": "Secure Payment",
"description": "256-bit SSL encryption"
},
"3": {
"title": "Cancel Anytime",
"description": "No long-term commitment"
},
"4": {
"title": "Best Value",
"description": "Most credits per dollar"
}
}
},
"EmailMarketing": {
"Compatibility": {
"v1": {
"Landing": {
"title": "Special Offer!",
"description": "Everything for free. Trial include!",
"title-hey": "Hey, Sun 👋",
"description-hey": "Your wellness and happiness are key for us!",
"personalized-plan-title": "So we decided to give you your personalized plan and access to the trial of our app",
"personalized-plan-free": "FOR FREE!",
"title-highlights": "Highlights of your plan:",
"personal-astrologer-advice": "1:1 Advice from your personal astrologer",
"finding-compatible-partner": "Finding the most compatible partner",
"relationship-patterns-insights": "Insights into your relationship patterns, and emotional and sexual needs",
"better-understanding-yourself": "Better understanding of yourself and your needs",
"old-price-label": "OLD PRICE",
"new-price-label": "NEW PRICE",
"plan-includes-title": "Your plan also includes:",
"plan-includes-unlimited-horoscopes": "Unlimited daily / weekly / monthly / yearly horoscopes",
"plan-includes-astrology-lessons": "Astrology lessons and articles inside the app",
"plan-includes-lifestyle-calendars": "Beauty / health / travel and more calendars",
"plan-includes-compatibility-check": "Compatibility check with zodiac signs inside the app",
"review-1": "Horoscope tells realistic facts about day to day life, which can be easily relatable. It shows direction.",
"review-2": "It makes me feel safe, seeing, warm and smart.",
"review-3": "I love that we have the \"my profile\" option. I love learning about myself.",
"circular-text-image": "circular-text-en.png",
"statistics-banner-text": "Last week alone <count></count> got this relationship guide",
"statistics-banner-count": "{count}+ people",
"money-back-guarantee-title": "Money-back guarantee",
"money-back-guarantee-text": "We are convinced that we will help you get a deeper understanding of your partner and how you can improve your relationship. After all of our stellar customer reviews, we are ready to return your money if you feel that this report doesn't provide any value. Find more about applicable limitations in our Money-back policy.",
"guaranteed-security-payments": "Guaranteed security payments",
"button-continue": "Continue",
"old-price": "up to {oldPrice}"
},
"SpecialOffer": {
"title": "Special Offer!",
"start-trial": "Start your {days}-day trial",
"cancel-anytime": "No pressure. Cancel anytime",
"policy": "By continuing you agree that if you don't cancel prior to the end of the {days}-days trial, you will automatically be charged {price} every 2 weeks until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms",
"button-continue": "Continue",
"pricing-summary-total-today": "Total today:",
"pricing-summary-code-applied": "Code applied!",
"pricing-summary-cost-after-trial": "Your cost per 2 weeks after trial",
"pricing-summary-trial-description": "You will be charged only {totalToday} for your {trialDuration}-day trial. Subscription renews automatically until cancelled. You can cancel at any time before the end of the trial.",
"reserved-for": "Reserved for {time}"
}
}
}
}
}

View File

@ -75,41 +75,41 @@
"try_again": "Try again"
},
"CancelSubscription": {
"title": "Жаль, что вы уходите…",
"description": "Многие уходят именно в тот момент, когда астролог начинает видеть поворотную точку в их истории.<br></br><br></br>Позвольте задать пару вопросов, чтобы сделать наш сервис лучше - и, возможно, предложить решение, которое больше подходит именно вам.",
"stay_button": "Остаться и уменьшить мой план на 50%",
"cancel_button": "Отменить",
"title": "Sad to see you go…",
"description": "Many leave exactly at the moment when the astrologist begins to see a turning point in their history.<br></br><br></br>Allow us to ask a few questions to make our service better - and, possibly, offer a solution that is more suitable for you.",
"stay_button": "Stay and reduce my plan by 50%",
"cancel_button": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"Stay50Done": {
"title": "Мы ценим твой выбор!",
"title": "We value your choice!",
"descriptions": {
"1": "План успешно изменен"
"1": "Plan successfully changed"
},
"button": "Готово"
"button": "Done"
},
"AppreciateChoice": {
"title": "Мы ценим твой выбор!",
"title": "We value your choice!",
"descriptions": {
"1": "Подбираем оптимальное решение...",
"2": "Составляем персонализированный опрос...",
"3": "Формируем выгодное предложение..."
"1": "Selecting the optimal solution...",
"2": "Creating a personalized survey...",
"3": "Forming a profitable offer..."
},
"button": "Next"
},
"WhatReason": {
"title": "Что стало причиной?",
"title": "What became the reason?",
"answers": {
"no_promised_result": "Не получил(а) обещанного результата",
"too_expensive": "Слишком дорого",
"high_auto_payment": "Стоимость автоматической оплаты слишком высока",
"unexpected_fee": "Я не ожидал дополнительной платы",
"want_pause": "Хочу сделать паузу",
"service_not_as_expected": "Сервис оказался не таким, как ожидал(а)",
"found_alternative": "Нашёл(а) альтернативу",
"dislike_app": "Мне не понравилось приложение",
"hard_to_navigate": "В приложении сложно ориентироваться",
"other": "Другое"
"no_promised_result": "Did not receive the promised result",
"too_expensive": "Too expensive",
"high_auto_payment": "The cost of automatic payment is too high",
"unexpected_fee": "I did not expect an additional charge",
"want_pause": "I want to pause",
"service_not_as_expected": "The service was not as expected",
"found_alternative": "Found an alternative",
"dislike_app": "I did not like the app",
"hard_to_navigate": "It is difficult to navigate in the app",
"other": "Other"
}
},
"Payment": {
@ -123,61 +123,61 @@
}
},
"SecondChance": {
"title": "Дайте нам второй шанс и получи самый лучший план БЕСПЛАТНО",
"title": "Give us a second chance and get the best plan for free",
"offers": {
"1": {
"title": "Бесплатный план на<br></br>1 месяц",
"description": "Используй весь потенциал AURA и даже больше.",
"title": "Free plan for 1 month",
"description": "Use the full potential of WITLAB and even more.",
"old-price": "1900",
"new-price": "0"
},
"2": {
"title": "Бесплатный премиальный план",
"description": "Бесплатная 30 мин консультация с премиальным Эдвайзером",
"title": "Free premium plan",
"description": "Free 30 min consultation with a premium advisor",
"old-price": "4900",
"new-price": "0"
}
},
"get_offer": "Получить бесплатный план",
"cancel": "Отменить",
"get_offer": "Get free plan",
"cancel": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"ChangeMind": {
"title": "Что может изменить твое мнение?",
"title": "What could change your mind?",
"answers": {
"more_chat_time": "Больше времени в чатах",
"more_personal_reports": "Больше персонализированных отчетов",
"individual_plan": "Индивидуальный план",
"other": "Другое"
"more_chat_time": "More time in chats",
"more_personal_reports": "More personalized reports",
"individual_plan": "Individual plan",
"other": "Other"
}
},
"StopFor30Days": {
"title": "Остановите подписку на тридцать дней. Никаких списаний.",
"stop": "Остановить",
"cancel": "Отменить",
"title": "Pause the subscription for 30 days. No charges.",
"stop": "Pause",
"cancel": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"CancellationOfSubscription": {
"title": "Подписка аннулируется!",
"description": "Чтобы отменить подписку, нажмите “Подтвердить мои действия”",
"title": "Subscription cancelled!",
"description": "To cancel the subscription, click “Confirm my actions”",
"offer": {
"title": "Бесплатный 2-месячный план",
"title": "Free 2-month plan",
"old-price": "9900",
"new-price": "0"
},
"offer_button": "Применить",
"cancel_button": "Я подтверждаю свои действия",
"offer_button": "Apply",
"cancel_button": "Confirm my actions",
"error_message": "Something went wrong. Please try again later.",
"toast_message": "Your subscription will be cancelled!"
},
"PlanCancelled": {
"title": "Стандартный план Отменен!",
"title": "Standard plan cancelled!",
"icon": "🥳",
"description": "Выполнен переход на бесплатный тридцатидневный план ",
"button": "Готово"
"description": "Completed transition to a free 30-day plan",
"button": "Done"
},
"SubscriptionStopped": {
"title": "Подписка остановлена успешно!",
"title": "Subscription stopped successfully!",
"icon": "🎉"
},
"DatePicker": {
@ -231,7 +231,7 @@
"one_time_price_offer": "One time price offer: <price></price>",
"choose_from": "Choose from 80+ experts astrologers.",
"original_price": "Original price: {oldPrice} ",
"save": "Economisez {discount}%",
"save": "Save {discount}%",
"get_my_consultation": "Get my consultation",
"skip_this_offer": "Skip this offer",
"payment_error": "Something went wrong. Please try again later."
@ -292,14 +292,14 @@
"title": "Chat",
"search_placeholder": "Type a Chat..."
},
"new_messages": "Новые сообщения",
"new_messages": "New messages",
"view_all": "View All ({count})",
"hide_all": "Hide",
"typing": "is typing...",
"voice_message": "Voice message",
"photo": "Photo",
"correspondence_started": {
"title": "Начата переписка",
"title": "Correspondence started",
"pinned_chats": "Pinned Chats"
},
"message_input_placeholder": "Type a message...",
@ -317,7 +317,7 @@
"RefillOptionsModal": {
"header": {
"title": "{name} is waiting!",
"subtitle": "{name} я жду тебя в нашем чате..."
"subtitle": "{name} is waiting for you in our chat..."
},
"button": "Continue",
"refill_option": {

View File

@ -1,184 +1,187 @@
{
"HomePage": {
"title": "¡Hola mundo!",
"about": "Ir a la página acerca de"
"title": "Hello world!",
"about": "Go to the about page"
},
"Profile": {
"profile_information": {
"title": "Información del Perfil",
"description": "Para actualizar tu dirección de correo electrónico, por favor contacta al soporte.",
"email_placeholder": "Correo electrónico",
"name_placeholder": "Nombre"
"title": "Profile Information",
"description": "To update your email address please contact support.",
"email_placeholder": "Email",
"name_placeholder": "Name"
},
"billing": {
"title": "Facturación",
"description": "Para acceder a la información de tu suscripción, por favor inicia sesión en tu cuenta de facturación.",
"subscription_type": "Tipo de Suscripción:",
"billing_button": "Facturación",
"title": "Billing",
"description": "To access your subscription information, please log into your billing account.",
"subscription_type": "Subscription Type:",
"billing_button": "Billing",
"credits": {
"title": "Te quedan {credits} créditos",
"description": "Puedes usarlos para chatear con cualquier Experto en la plataforma."
"title": "You have {credits} credits left",
"description": "You can use them to chat with any Expert on the platform."
},
"any_questions": "¿Alguna pregunta? <link>{linkText}</link>",
"any_questions_link": "Contáctanos",
"subscription_update": "<bold>{subscriptionUpdateBold}</bold><br></br>Si acabas de comprar o cambiar de plan, el estado de tu suscripción cambiará en unas horas.",
"subscription_update_bold": "La información de la suscripción se actualiza cada pocas horas."
"any_questions": "Any questions? <link>{linkText}</link>",
"any_questions_link": "Contact us",
"subscription_update": "<bold>{subscriptionUpdateBold}</bold><br></br>If you've just purchased or changed plan, your subscription status will change in a few hours.",
"subscription_update_bold": "Subscription information is updated every few hours."
},
"log_out": {
"title": "Cerrar sesión",
"log_out_button": "Cerrar sesión",
"title": "Log out",
"log_out_button": "Log out",
"modal": {
"title": "¿Estás seguro de que quieres cerrar sesión?",
"description": "¿Estás seguro de que quieres cerrar sesión?",
"stay_button": "Quedarse",
"log_out_button": "Cerrar sesión"
"title": "Are you sure you want to log out?",
"description": "Are you sure you want to log out?",
"stay_button": "Stay",
"log_out_button": "Log out"
}
}
},
"Subscriptions": {
"title": "Gestionar mis suscripciones",
"success_cancel_message": "Tu suscripción ha sido cancelada exitosamente",
"title": "Manage my subscriptions",
"success_cancel_message": "Your subscription has been cancelled successfully",
"modal": {
"title": "¿Estás seguro de que quieres cancelar tu suscripción?",
"description": "¿Estás seguro de que quieres cancelar tu suscripción?",
"cancel_button": "Cancelar suscripción",
"stay_button": "Quedarse"
"title": "Are you sure you want to cancel your subscription?",
"description": "Are you sure you want to cancel your subscription?",
"cancel_button": "Cancel subscription",
"stay_button": "Stay"
},
"table": {
"subscription_type": "Tipo de Suscripción",
"subscription_type": "Subscription Type",
"subscription_type_value": {
"DAY": "Suscripción Diaria",
"WEEK": "Suscripción Semanal",
"MONTH": "Suscripción Mensual",
"YEAR": "Suscripción Anual"
"DAY": "Daily Subscription",
"WEEK": "Weekly Subscription",
"MONTH": "Monthly Subscription",
"YEAR": "Yearly Subscription"
},
"subscription_status": "Estado de la Suscripción",
"subscription_status": "Subscription Status",
"subscription_status_value": {
"ACTIVE": "Activa",
"CANCELLED": "Se cancela el {date}",
"PAST_DUE": "Vencida"
"ACTIVE": "Active",
"CANCELLED": "Cancels on {date}",
"PAST_DUE": "Past due"
},
"billing_period": "Período de Facturación",
"billing_period": "Billing Period",
"billing_period_value": {
"DAY": "Día",
"WEEK": "Semana",
"MONTH": "Mes",
"YEAR": "Año"
"DAY": "Day",
"WEEK": "Week",
"MONTH": "Month",
"YEAR": "Year"
},
"last_payment_on": "Último Pago el",
"renewal_date": "Fecha de Renovación",
"renewal_amount": "Monto de Renovación",
"cancel_subscription": "Cancelar Suscripción"
"last_payment_on": "Last Payment On",
"renewal_date": "Renewal Date",
"renewal_amount": "Renewal Amount",
"cancel_subscription": "Cancel Subscription"
},
"no_subscriptions": "No tienes ninguna suscripción",
"error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde.",
"try_again": "Intentar de nuevo"
"no_subscriptions": "You don't have any subscriptions",
"error": "Something went wrong. Please try again later.",
"try_again": "Try again"
},
"CancelSubscription": {
"title": "Lamentamos que te vayas…",
"description": "Muchos se van justo en el momento en que el astrólogo comienza a ver el punto de inflexión en su historia.<br></br><br></br>Permítenos hacer un par de preguntas para mejorar nuestro servicio - y tal vez ofrecer una solución que se adapte mejor a ti.",
"stay_button": "Quedarse y reducir mi plan en 50%",
"cancel_button": "Cancelar",
"error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde."
"title": "Sad to see you go…",
"description": "Many leave exactly at the moment when the astrologist begins to see a turning point in their history.<br></br><br></br>Allow us to ask a few questions to make our service better - and, possibly, offer a solution that is more suitable for you.",
"stay_button": "Stay and reduce my plan by 50%",
"cancel_button": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"Stay50Done": {
"title": "¡Valoramos tu elección!",
"title": "We value your choice!",
"descriptions": {
"1": "Plan cambiado exitosamente"
"1": "Plan successfully changed"
},
"button": "Listo"
"button": "Done"
},
"AppreciateChoice": {
"title": "¡Valoramos tu elección!",
"title": "We value your choice!",
"descriptions": {
"1": "Seleccionando la solución óptima...",
"2": "Creando encuesta personalizada...",
"3": "Formando oferta ventajosa..."
"1": "Selecting the optimal solution...",
"2": "Creating a personalized survey...",
"3": "Forming a profitable offer..."
},
"button": "Siguiente"
"button": "Next"
},
"WhatReason": {
"title": "¿Cuál fue la razón?",
"title": "What became the reason?",
"answers": {
"no_promised_result": "No obtuve el resultado prometido",
"too_expensive": "Muy caro",
"no_time": "No tengo tiempo",
"technical_issues": "Problemas técnicos",
"dislike_app": "No me gustó la aplicación",
"hard_to_navigate": "Es difícil navegar en la aplicación",
"other": "Otro"
"no_promised_result": "Did not receive the promised result",
"too_expensive": "Too expensive",
"high_auto_payment": "The cost of automatic payment is too high",
"unexpected_fee": "I did not expect an additional charge",
"want_pause": "I want to pause",
"service_not_as_expected": "The service was not as expected",
"found_alternative": "Found an alternative",
"dislike_app": "I did not like the app",
"hard_to_navigate": "It is difficult to navigate in the app",
"other": "Other"
}
},
"Payment": {
"Success": {
"title": "Pago exitoso",
"button": "Listo"
"title": "Payment successful",
"button": "Done"
},
"Error": {
"title": "Pago fallido",
"button": "Intentar de nuevo"
"title": "Payment failed",
"button": "Try again"
}
},
"SecondChance": {
"title": "Danos una segunda oportunidad y obtén el mejor plan GRATIS",
"title": "Give us a second chance and get the best plan for free",
"offers": {
"1": {
"title": "Plan gratuito por<br></br>1 mes",
"description": "Usa todo el potencial de AURA y aún más.",
"title": "Free plan for 1 month",
"description": "Use the full potential of WITLAB and even more.",
"old-price": "1900",
"new-price": "0"
},
"2": {
"title": "Plan premium gratuito",
"description": "Consulta gratuita de 30 min con un Asesor premium",
"title": "Free premium plan",
"description": "Free 30 min consultation with a premium advisor",
"old-price": "4900",
"new-price": "0"
}
},
"get_offer": "Obtener plan gratuito",
"cancel": "Cancelar",
"error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde."
"get_offer": "Get free plan",
"cancel": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"ChangeMind": {
"title": "¿Qué podría cambiar tu opinión?",
"title": "What could change your mind?",
"answers": {
"more_chat_time": "Más tiempo de chat",
"more_personal_reports": "Más reportes personalizados",
"individual_plan": "Plan individual",
"other": "Otro"
"more_chat_time": "More time in chats",
"more_personal_reports": "More personalized reports",
"individual_plan": "Individual plan",
"other": "Other"
}
},
"StopFor30Days": {
"title": "Pausa la suscripción por treinta días. Sin cargos.",
"stop": "Pausar",
"cancel": "Cancelar",
"error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde."
"title": "Pause the subscription for 30 days. No charges.",
"stop": "Pause",
"cancel": "Cancel",
"error_message": "Something went wrong. Please try again later."
},
"CancellationOfSubscription": {
"title": "¡La suscripción será cancelada!",
"description": "Para cancelar la suscripción, presiona \"Confirmo mis acciones\"",
"title": "Subscription cancelled!",
"description": "To cancel the subscription, click “Confirm my actions”",
"offer": {
"title": "Plan gratuito de 2 meses",
"title": "Free 2-month plan",
"old-price": "9900",
"new-price": "0"
},
"offer_button": "Aplicar",
"cancel_button": "Confirmo mis acciones",
"error_message": "Algo salió mal. Por favor, inténtalo de nuevo más tarde.",
"toast_message": "¡Tu suscripción será cancelada!"
"offer_button": "Apply",
"cancel_button": "Confirm my actions",
"error_message": "Something went wrong. Please try again later.",
"toast_message": "Your subscription will be cancelled!"
},
"PlanCancelled": {
"title": "¡Plan Estándar Cancelado!",
"title": "Standard plan cancelled!",
"icon": "🥳",
"description": "Transición completada al plan gratuito de treinta días",
"button": "Listo"
"description": "Completed transition to a free 30-day plan",
"button": "Done"
},
"SubscriptionStopped": {
"title": "¡Suscripción pausada exitosamente!",
"title": "Subscription stopped successfully!",
"icon": "🎉"
},
"DatePicker": {
"year": "AAAA",
"year": "YYYY",
"month": "MM",
"day": "DD"
},
@ -188,30 +191,207 @@
"period": "AM/PM"
},
"Compatibility": {
"title": "Tu Tipo de Personalidad",
"description": "Por favor ingresa tus datos para crear el reporte.",
"button": "Continuar",
"error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde."
"title": "Your Personality Type",
"description": "Please input your data to create the report.",
"button": "Continue",
"error": "Something went wrong. Please try again later."
},
"CompatibilityResult": {
"title": "Tu Tipo de Personalidad",
"error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde."
"title": "Your Personality Type",
"error": "Something went wrong. Please try again later."
},
"PalmistryResult": {
"title": "Tu Tipo de Personalidad",
"error": "Algo salió mal. Por favor, inténtalo de nuevo más tarde."
"title": "Your Personality Type",
"error": "Something went wrong. Please try again later."
},
"Meditation": {
"title": "Para y respira para ayudarte a relajar y enfocarte en lo que realmente importa.",
"subtitle": "La práctica de respiración ayudará a mejorar tu aura. Inhala la energía positiva, exhala la negativa...",
"button": "COMENZAR"
"title": "Stop and breathe to help you relax and focus on what really matters.",
"subtitle": "Breathing practice will help improve your aura. Breath in the positive energy, breathe out the negative...",
"button": "BEGIN"
},
"MeditationResult": {
"breath_relax": "Respira y Relájate",
"breath_in": "Inhalar",
"breath_out": "Exhalar"
"breath_relax": "Breath & Relax",
"breath_in": "Breath in",
"breath_out": "Breath out"
},
"ActionFieldsForm": {
"required_field": "Este campo es obligatorio"
"required_field": "This field is required"
},
"AdditionalPurchases": {
"caution": {
"title": "Caution!",
"description": "To prevent double charges please don`t close the page and don`t go back."
},
"add-consultant": {
"title": "More for you",
"exclusive_offer": "Exclusive offer recommended for you to achieve your goals faster",
"your_unique_consultation": "Your unique individual consultation",
"30-minute": "30-minute private consultation with an expert",
"unlock_profound": "Unlock profound insights into your personality, relationships, career trajectory, and life's pivotal moments through astrology, empowering you to make informed decisions and achieve greater fulfillment.",
"one_time_price_offer": "One time price offer: <price></price>",
"choose_from": "Choose from 80+ experts astrologers.",
"original_price": "Original price: {oldPrice} ",
"save": "Save {discount}%",
"get_my_consultation": "Get my consultation",
"skip_this_offer": "Skip this offer",
"payment_error": "Something went wrong. Please try again later."
},
"add-guides": {
"title": "Choose your sign-up offer 🔥",
"subtitle": "Available only now",
"description": "*You will be charged for the add-on services or offers selected at the time of purchase. This is a non-recuring payment.",
"button": "Get my copy",
"payment_error": "Something went wrong. Please try again later.",
"select_product_error": "Please select a product",
"skip_offer": "Skip offer",
"products": {
"main_ultra_pack": {
"title": "ULTRA PACK",
"discount": "{discount}% OFF",
"subtitle": "(3 in 1 + 2 secret bonus reading)",
"price": "<price></price> ( regular price <oldPrice></oldPrice> )",
"emoji": "star_struck.webp"
},
"main_numerology_analysis": {
"title": "NUMEROLOGY ANALYSIS",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "input_numbers.webp"
},
"main_tarot_reading": {
"title": "TAROT READING",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "sunset.webp"
},
"main_palmistry_guide": {
"title": "PALMISTRY GUIDE",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "rised_hand.webp"
},
"main_money_reading": {
"title": "MONEY READING",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"emoji": "money.png"
},
"main_skip_offer": {
"title": "SKIP OFFER",
"discount": "{discount}% OFF",
"price": "<price></price> ( was <oldPrice></oldPrice> )",
"subtitle": "You are missing out on both readings",
"emoji": "rised_hand.webp"
}
}
}
},
"Chat": {
"header": {
"title": "Chat",
"search_placeholder": "Type a Chat..."
},
"new_messages": "New messages",
"view_all": "View All ({count})",
"hide_all": "Hide",
"typing": "is typing...",
"voice_message": "Voice message",
"photo": "Photo",
"correspondence_started": {
"title": "Correspondence started",
"pinned_chats": "Pinned Chats"
},
"message_input_placeholder": "Type a message...",
"message_image_fallback": "Failed to load image",
"payment_error": "Something went wrong. Please try again later."
},
"RefillTimerModal": {
"title": "Refill credits in 1 click",
"subtitle": "<oldCredits></oldCredits> {newCredits} credits for {price}",
"button": "Get Credits",
"dont_want_to_continue": "I don't want to continue chatting",
"auto_refill_description": "Auto-refill keeps your readings uninterrupted. After using {afterCredits} credits, we'll automatically add {addCredits} more credits ({minutes} minutes of consultation) for a one-time payment. No recurring charges.",
"seconds": "seconds"
},
"RefillOptionsModal": {
"header": {
"title": "{name} is waiting!",
"subtitle": "{name} is waiting for you in our chat..."
},
"button": "Continue",
"refill_option": {
"popular": "POPULAR",
"credits": "{credits} credits",
"bonus": "+<bonus></bonus><br></br>credits",
"price": "{price}"
},
"benefits": {
"1": {
"title": "Instant Access",
"description": "Continue chatting immediately"
},
"2": {
"title": "Secure Payment",
"description": "256-bit SSL encryption"
},
"3": {
"title": "Cancel Anytime",
"description": "No long-term commitment"
},
"4": {
"title": "Best Value",
"description": "Most credits per dollar"
}
}
},
"EmailMarketing": {
"Compatibility": {
"v1": {
"Landing": {
"title": "Special Offer!",
"description": "Everything for free. Trial include!",
"title-hey": "Hey, Sun 👋",
"description-hey": "Your wellness and happiness are key for us!",
"personalized-plan-title": "So we decided to give you your personalized plan and access to the trial of our app",
"personalized-plan-free": "FOR FREE!",
"title-highlights": "Highlights of your plan:",
"personal-astrologer-advice": "1:1 Advice from your personal astrologer",
"finding-compatible-partner": "Finding the most compatible partner",
"relationship-patterns-insights": "Insights into your relationship patterns, and emotional and sexual needs",
"better-understanding-yourself": "Better understanding of yourself and your needs",
"old-price-label": "OLD PRICE",
"new-price-label": "NEW PRICE",
"plan-includes-title": "Your plan also includes:",
"plan-includes-unlimited-horoscopes": "Unlimited daily / weekly / monthly / yearly horoscopes",
"plan-includes-astrology-lessons": "Astrology lessons and articles inside the app",
"plan-includes-lifestyle-calendars": "Beauty / health / travel and more calendars",
"plan-includes-compatibility-check": "Compatibility check with zodiac signs inside the app",
"review-1": "Horoscope tells realistic facts about day to day life, which can be easily relatable. It shows direction.",
"review-2": "It makes me feel safe, seeing, warm and smart.",
"review-3": "I love that we have the \"my profile\" option. I love learning about myself.",
"circular-text-image": "circular-text-en.png",
"statistics-banner-text": "Last week alone <count></count> got this relationship guide",
"statistics-banner-count": "{count}+ people",
"money-back-guarantee-title": "Money-back guarantee",
"money-back-guarantee-text": "We are convinced that we will help you get a deeper understanding of your partner and how you can improve your relationship. After all of our stellar customer reviews, we are ready to return your money if you feel that this report doesn't provide any value. Find more about applicable limitations in our Money-back policy.",
"guaranteed-security-payments": "Guaranteed security payments",
"button-continue": "Continue",
"old-price": "up to {oldPrice}"
},
"SpecialOffer": {
"title": "Special Offer!",
"start-trial": "Start your {days}-day trial",
"cancel-anytime": "No pressure. Cancel anytime",
"policy": "By continuing you agree that if you don't cancel prior to the end of the {days}-days trial, you will automatically be charged {price} every 2 weeks until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms",
"button-continue": "Continue",
"pricing-summary-total-today": "Total today:",
"pricing-summary-code-applied": "Code applied!",
"pricing-summary-cost-after-trial": "Your cost per 2 weeks after trial",
"pricing-summary-trial-description": "You will be charged only {totalToday} for your {trialDuration}-day trial. Subscription renews automatically until cancelled. You can cancel at any time before the end of the trial.",
"reserved-for": "Reserved for {time}"
}
}
}
}
}

View File

@ -0,0 +1,39 @@
"use client";
import { getClientAccessToken } from "@/shared/auth/clientToken";
import { API_ROUTES } from "@/shared/constants/api-routes";
import { IUserBalanceResponse, UserBalanceSchema } from "./types";
/**
* Fetches the current user balance using client-side authentication
* @returns Promise with user balance information
*/
export const getUserBalance = async (): Promise<IUserBalanceResponse> => {
const accessToken = getClientAccessToken();
if (!accessToken) {
throw new Error("No access token available");
}
const apiUrl = process.env.NEXT_PUBLIC_API_URL;
if (!apiUrl) {
throw new Error("API URL not configured");
}
const url = new URL(API_ROUTES.getUserBalance(), apiUrl);
const response = await fetch(url.toString(), {
method: "GET",
headers: {
"Authorization": `Bearer ${accessToken}`,
"Content-Type": "application/json"
}
});
if (!response.ok) {
throw new Error(`Failed to fetch balance: ${response.status}`);
}
const data = await response.json();
return UserBalanceSchema.parse(data);
};

View File

@ -0,0 +1,8 @@
import { z } from "zod";
export const UserBalanceSchema = z.object({
success: z.boolean(),
balance: z.number(),
});
export type IUserBalanceResponse = z.infer<typeof UserBalanceSchema>;

View File

@ -0,0 +1,40 @@
"use client";
import { useCallback, useEffect, useState } from "react";
import { getUserBalance } from "@/entities/balance/api";
export const useUserBalance = () => {
const [balance, setBalance] = useState<number | null>(null);
const [isLoading, setIsLoading] = useState<boolean>(false);
const [error, setError] = useState<Error | null>(null);
const fetchBalance = useCallback(async () => {
setIsLoading(true);
setError(null);
try {
const response = await getUserBalance();
setBalance(response.balance);
} catch (err) {
setError(err instanceof Error ? err : new Error("Failed to fetch balance"));
// Используем devLogger или другой механизм логирования в продакшене
if (process.env.NODE_ENV !== "production") {
// eslint-disable-next-line no-console
console.error("Error fetching user balance:", err);
}
} finally {
setIsLoading(false);
}
}, []);
useEffect(() => {
fetchBalance();
}, [fetchBalance]);
return {
balance,
isLoading,
error,
refetch: fetchBalance,
};
};

View File

@ -0,0 +1,24 @@
"use client";
/**
* Gets the access token from client-side cookies
* @returns The access token or undefined if not found
*/
export function getClientAccessToken(): string | undefined {
if (typeof document === "undefined") {
return undefined;
}
const cookies = document.cookie.split(";");
const accessTokenCookie = cookies.find(cookie =>
cookie.trim().startsWith("accessToken=")
);
if (!accessTokenCookie) {
return undefined;
}
return decodeURIComponent(
accessTokenCookie.trim().substring("accessToken=".length)
);
}