This commit is contained in:
Daniil Chemerkin 2025-06-30 21:55:24 +00:00
parent 0e86df12dc
commit 7388571e36
215 changed files with 11674 additions and 2864 deletions

View File

@ -1,6 +1,7 @@
AURA_API_HOST=https://api-web.aura.lin.witapps.us
AURA_DAPI_HOST=https://dev.api.aura.witapps.us
AURA_DAPI_PREFIX=v2
AURA_DAPI_PREFIX_V3=v3
AURA_SITE_HOST=https://aura.lin.witapps.us
AURA_PREFIX=api/v1
AURA_OPEN_AI_HOST=https://api.openai.com

View File

@ -1,6 +1,7 @@
AURA_API_HOST=https://api-web.aura.lin.witapps.us
AURA_DAPI_HOST=https://api.aura.witapps.us
AURA_DAPI_PREFIX=v2
AURA_DAPI_PREFIX_V3=v3
AURA_SITE_HOST=https://aura.lin.witapps.us
AURA_PREFIX=api/v1
AURA_OPEN_AI_HOST=https://api.openai.com

View File

@ -270,7 +270,7 @@
"title": "We Are Scanning Your Palm",
"text": "Follow the on-screen instructions so we can analyze the lines of your palm, revealing the future and the secrets of your destiny!",
"hands": {
"title": "Сейчас сканируют ладонь <count> человек:"
"title": "They are now scanning the palm of <count> people:"
}
},
"/scan-instruction": {
@ -378,12 +378,12 @@
}
},
"/payment": {
"will_be_charged": "You will be charged only <trialInfo>. Save <save> now. Then <splitPrice> per week. Well <emailReminder> before your trial ends.",
"will_be_charged": "You will be charged only <trialInfo>. Save <save> now. Then <splitPrice> per <perPeriod>. Well <emailReminder> before your trial ends.",
"will_be_charged_email_reminder": "email you a reminder",
"will_be_charged_trial_info": "<trialPrice> for your <trialDuration>-day trial",
"will_be_charged_trial_info": "<trialPrice> for your <trialPeriod> trial",
"payment_information": {
"personalized_offer": "Personalized offer reserved",
"title": "Start your <trialDuration>-day trial",
"title": "Start your <trialPeriod> trial",
"total_today": "Total today",
"code_applied_bold": "AURA24",
"code_applied": "Code <bold> applied!"
@ -492,7 +492,6 @@
"choose_from": "Choose from over 80 expert astrologers."
},
"/camera": {
"upload": "Upload",
"bad_photo": "Bad Photo!",
"try_again": "Try Again",
"do_better": "You Can Do Better",
@ -505,7 +504,8 @@
"title": "To scan your hand, access to the Camera is required.",
"cancel": "Cancel",
"allow": "Allow"
}
},
"upload": "Upload"
},
"/depends": {
"with-partner": {
@ -565,7 +565,60 @@
"aquarius": "Aquarius",
"pisces": "Pisces"
},
"/trial-choice": {
"description": "AURA is the only accurate app with reliable fate line analysis, verified by professionals and guaranteed to provide precise predictions.<br><br>AURA has already helped millions of people find happiness and discover the whole truth about their relationships.<br><br>Your fate analysis, which will completely change your life, is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for <trialPeriod1> and which you think is fair for the changes that will happen to you:<br><br>You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month;<br><br>You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades);<br><br>You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers;<br><br>You will receive not only a personal analysis but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings.<br><br>A <trialPeriod2> trial period costs us <maxTrialPrice>, but please choose the amount that suits you best:",
"trial-text": {
"v0": "It costs us <price> to compensate our AURA employees for the trial, but please choose the amount you are comfortable with.",
"v1": "It cost us <price> to create your compatibility analysis with the help of our AURA specialists. Youre welcome to choose any amount youre comfortable contributing.",
"v2": "We spent <price> to prepare your unique compatibility report with support from our AURA team. If youd like to contribute, feel free to choose the amount that feels right to you.",
"v3": "Your compatibility analysis was created with care by our AURA team — it cost us <price> to make it happen. You can support our work by choosing any amount that feels fair to you."
},
"v1": {
"paragraph1": "AURA is the only accurate app with reliable fate line analysis, verified by professionals and guaranteed to provide precise predictions.<br><br>AURA has already helped millions of people find happiness and discover the whole truth about their relationships.<br><br>Your fate analysis, which will completely change your life, is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for 7 days and which you think is fair for the changes that will happen to you:",
"paragraph2": "A 7-day trial period costs us <price>, but please choose the amount that suits you best.",
"points": {
"point1": "You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month;",
"point2": "You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades);",
"point3": "You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers;",
"point4": "You will receive not only a personal analysis but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings."
},
"emails_list": {
"title": "Bought today: <count>",
"description": "<count> people are buying now:"
}
}
},
"/scan-hand": {
"title": "Приложите ладонь к экрану телефона"
"title": "Place your palm against the phone screen."
},
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_without_count": {
"day_one": "day",
"day_other": "days",
"week_one": "week",
"week_other": "weeks",
"month_one": "month",
"month_other": "months",
"year_one": "year",
"year_other": "years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -0,0 +1,818 @@
{
"config": "ru.male",
"next": "Дальше",
"biometric_data": "Мы не собираем никаких биометрических данных. Все процессы распознавания происходят на вашем устройстве.",
"went_wrong": "Что-то пошло не так. Кажется, это была одна из тех дней, когда печка, холодильник и кот коварно решили сделать заговор против вас. Но не волнуйтесь, сейчас мы всё исправим!",
"v": "в1",
"privacy_policy": "Продолжая, вы соглашаетесь с нашим <eulaLink> и <privacyLink>. Есть вопрос? Обратитесь в нашу службу поддержки <clickHere>",
"eula_link": "Лицензионное соглашение с конечным пользователем",
"privacy_notice": "Уведомление о конфиденциальности",
"policy_here": "здесь",
"thumb": "Большой палец",
"index_finger": "Указательный палец",
"middle_finger": "Средний палец",
"ring_finger": "Безымянный палец",
"pinky": "Мизинец",
"skip_trial": "Пропустить пробный период",
"add_consultant": "Добавить консультанта",
"add_guides": "Добавить гидов",
"access_product": "Доступ к продукту",
"thank_you": "Спасибо!",
"order_successful": "Ваш заказ успешно обработан!",
"male": "Мужской",
"female": "Женский",
"males": "Мужчины",
"females": "Женщины",
"/find-your-happiness": {
"title": "Обрети ясность и уверенность в жизни",
"text": "Используйте астрологию и хиромантию, чтобы укрепить себя и свои отношения",
"advantage1": "Глубокий анализ: мы сканируем линии на вашей ладони",
"advantage2": "Персонализированный подход: анализ совместимости и будущего",
"advantage3": "Быстрый результат: занимает не более 5 минут"
},
"/gender": {
"title": "Какой у вас пол?",
"description": "В хиромантии у каждого есть как мужские, так и женские черты. <br><br> Давайте определим ваши для более точного чтения ладони.",
"already_have_account": "Уже есть аккаунт? Войти",
"v1": {
"title": "Тест на Совместимость<br>👩‍❤️‍👨",
"subtitle": "Всё начинается с вас!<br>Выберите ваш пол 👇",
"points": {
"point1": "тест займёт не более 1 мин",
"point2": "вы получите анализ совместимости, связанный с линиями на вашей ладони",
"point3": "100% достоверность данных",
"point4": "более 50 страниц анализа"
}
},
"v2": {
"title": "Тест на Совместимость",
"subtitle": "Всё начинается с вас! Выберите ваш пол.",
"points": {
"point1": "Тест займмет не более 1 мин.",
"point2": "Ты получишь разбор совместимости по хиромантическому анализу линий на твоей ладони.",
"point3": "Решишь проблемы в отношениях за месяц.",
"point4": "Сэкономишь сотни долларов на ненадёжных прогнозах.",
"point5": "Получишь персональный анализ."
}
}
},
"/birthdate": {
"title": "Когда вы родились?",
"text": "Ваша дата рождения может раскрыть сильные стороны и ценности, которые помогут вам двигаться вперёд."
},
"/palms-information": {
"aries": {
"title": "♈ Овен",
"description": "Ваши ладони — это карта судьбы, отражающая вашу силу и характер. Согласно нашим данным, у 76 миллионов Овнов ясная и прямая линия головы, что указывает на решительность и независимость. В 81% успешных отношений их партнёры разделяют их страсть к действию. Ваши ладони покажут, насколько ваши амбиции и энергия сочетаются с вашим партнёром."
},
"taurus": {
"title": "♉ Телец",
"description": "Рисунки на ваших ладонях раскрывают вашу истинную сущность. Наши исследования показывают, что у 83 миллионов Тельцов длинная и гладкая линия жизни, что свидетельствует о стойкости и стремлении к стабильности. В 86% гармоничных отношений партнёры ценят надёжность и комфорт. Взгляните на свою ладонь — она подскажет, насколько крепок ваш союз."
},
"gemini": {
"title": "♊ Близнецы",
"description": "Ваши ладони — это зеркало вашего ума и характера. По нашим данным, у 72 миллионов Близнецов раздвоенная или разветвлённая линия головы, что указывает на гибкость и способность к многозадачности. В 78% успешных отношений партнёры готовы к переменам и спонтанности. Проверьте свои линии — они покажут, насколько ваш партнёр соответствует вашему темпу."
},
"cancer": {
"title": "♋ Рак",
"description": "Линии на вашей ладони скрывают секреты эмоций и привязанностей. Наши данные показывают, что у 78 миллионов Раков чёткая и выразительная линия сердца, что указывает на глубокую чувствительность. В 82% крепких отношений у партнёров-Раков хорошо развита эмпатия. Ваша ладонь поможет раскрыть, насколько хорошо вы и ваш любимый человек понимаете друг друга."
},
"leo": {
"title": "♌ Лев",
"description": "Ладони хранят историю вашей личности. Наши данные свидетельствуют о том, что у 80 миллионов Львов заметная линия Солнца, что указывает на врождённую харизму и стремление к признанию. В 84% счастливых отношений партнёры Львов восхищаются ими и разделяют их амбиции. Ваша ладонь покажет, насколько ваш партнёр готов быть частью вашего сияния."
},
"virgo": {
"title": "♍ Дева",
"description": "Каждая линия на вашей ладони — это след вашего характера. Наши наблюдения показывают, что у 75 миллионов Дев тонкие, но чёткие линии, что отражает внимание к деталям и рациональность. В 79% успешных отношений Дев ключевыми являются доверие и предсказуемость. Ваши ладони покажут, насколько ваши ценности совпадают с ценностями партнёра."
},
"libra": {
"title": "♎ Весы",
"description": "Гармония ваших ладоней отражает гармонию вашей души. Наши данные показывают, что у 77 миллионов Весов изогнутая и гладкая линия сердца, что указывает на дипломатию и сбалансированные отношения. В 80% успешных партнёрств их партнёры ценят честность и компромисс. Взгляните на свою ладонь — она подскажет, насколько ваши отношения основаны на взаимопонимании."
},
"scorpio": {
"title": "♏ Скорпион",
"description": "Глубина линий на вашей ладони отражает глубину ваших чувств. Наши исследования показывают, что у 81 миллиона Скорпионов глубокая и прямая линия сердца, что указывает на страсть и преданность. В 83% успешных отношений их партнёры разделяют ту же эмоциональную интенсивность. Ваша ладонь покажет, насколько искренна связь между вами и вашим партнёром."
},
"sagittarius": {
"title": "♐ Стрелец",
"description": "Линии на вашей ладони — это карта вашего жизненного пути. Наши данные показывают, что у 74 миллионов Стрельцов длинная и заметная линия головы, символизирующая любопытство и стремление к свободе. В 77% долгосрочных отношений их партнёры поддерживают авантюрный дух. Ваша ладонь расскажет, насколько ваш партнёр готов к вашим амбициозным мечтам."
},
"capricorn": {
"title": "♑ Козерог",
"description": "Ваши ладони отражают вашу силу и решительность. Наши данные показывают, что у 79 миллионов Козерогов выраженная линия судьбы, указывающая на их амбиции и дисциплину. В 85% счастливых браков их партнёры поддерживают их стремления к успеху. Взгляните на свою ладонь — она покажет, насколько ваш союз основан на общих целях."
},
"aquarius": {
"title": "♒ Водолей",
"description": "Линии на ваших ладонях — это знаки вашей уникальности. Наши исследования показывают, что у 71 миллиона Водолеев нестандартная линия головы, указывающая на оригинальность и нестандартное мышление. В 75% гармоничных отношений их партнёры уважают их свободу и независимость. Ваша ладонь покажет, насколько ваш партнёр готов к вашим новаторским идеям."
},
"pisces": {
"title": "♓ Рыбы",
"description": "Ладони скрывают тайны вашей души. Наши данные показывают, что у 82 миллионов Рыб длинная и гладкая линия сердца, указывающая на их интуицию и глубокое чувство любви. В 84% крепких отношений их партнёры обладают схожей чувствительностью. Ваша ладонь расскажет, насколько хорошо ваш партнёр может чувствовать вас на эмоциональном уровне."
}
},
"/what-aspects": {
"title": "В каких сферах жизни вы хотите получить более глубокое понимание?",
"answer1": "Любовь и отношения",
"answer2": "Здоровье и энергия",
"answer3": "Карьера и предназначение",
"answer4": "Жизненные перемены"
},
"/relationship-status": {
"title": "Чтобы лучше вас понять, укажите ваш текущий статус отношений",
"answer1": "Не женат",
"answer2": "В отношениях",
"answer3": "Помолвлен",
"answer4": "Разведён"
},
"/element-resonates": {
"title": "Какой элемент наполняет вас энергией больше всего?",
"answer1": "Вода",
"answer2": "Огонь",
"answer3": "Воздух",
"answer4": "Земля",
"answer5": "Свет",
"answer6": "Тьма"
},
"/favorite-color": {
"title": "Какой цвет лучше всего отражает вашу личность?",
"answer1": "Синий",
"answer2": "Зелёный",
"answer3": "Оранжевый",
"answer4": "Фиолетовый",
"answer5": "Красный",
"answer6": "Жёлтый",
"answer7": "Бирюзовый"
},
"/head-or-heart": {
"title": "Что ведёт вас по жизни: зов сердца или голос разума?",
"answer1": "Следую зову сердца",
"answer2": "Полагаться на разум",
"answer3": "Сочетать оба подхода",
"answer4": "Зависит от ситуации"
},
"/relate-following": {
"title": "Насколько важно для вас оправдывать ожидания вашего партнёра?",
"question1": "Очень важно. Партнёр должен знать, что на меня можно положиться.",
"question2": "Я ценю и наслаждаюсь собственной компанией.",
"question3": "Я предпочитаю общаться в компании, чем проводить время в одиночестве.",
"question4": "Я активно стараюсь избегать одиночества.",
"question5": "Я люблю заниматься тем, что могу делать самостоятельно.",
"strongly_agree": "Очень важно",
"strongly_disagree": "Совсем не важно"
},
"/gender-partner": {
"title": "Пол вашего партнёра",
"description": "Выберите пол вашего партнёра для персонализированного астрологического анализа. Звёзды учитывают каждую деталь! ✨",
"already_have_account": "Уже есть аккаунт? Войти"
},
"/birthdate-partner": {
"title": "Дата рождения вашего партнёра?",
"text": "Мы учтём влияние зодиака для более точной оценки совместимости"
},
"/date-event": {
"single": {
"title": "Введите важную для вас дату.",
"text": "💫 Важная дата может помочь раскрыть влияние планет на вашу жизнь и предоставить более персонализированный анализ."
},
"relationship": {
"title": "Введите важную дату, значимую для вас или вашего партнёра.",
"text": "💫 Важная дата может помочь раскрыть влияние планет на ваши отношения и предоставить более персонализированный анализ."
}
},
"/palms-information-partner": {
"aries": {
"title": "♈ Овен",
"description": "Страстный, прямолинейный и инициативный. Быстро влюбляется, действует решительно, но может быть нетерпеливым и ревнивым. Любит быть лидером и жаждет ярких эмоций, ненавидит рутину. Если чувства остывают, уходит без сожалений. Вы образуете интересное сочетание, и нам есть, что вам рассказать!"
},
"taurus": {
"title": "♉ Телец",
"description": "Надёжный, чувственный и верный. В любви движется медленно, но основательно. Ценит стабильность, комфорт и физические отношения. Может быть собственником и неохотно отпускает прошлое. Не переносит предательства и резких перемен. Как сложатся ваши отношения? У нас есть ответы!"
},
"gemini": {
"title": "♊ Близнецы",
"description": "Легкомысленный, общительный и непредсказуемый. Быстро увлекается, но также быстро может потерять интерес. Любит интеллектуальное общение, флирт и свободу. Иногда непостоянен, но с тем, кто сможет удержать его интерес, становится преданным. Каковы ваши шансы на гармонию? Давайте узнаем вместе!"
},
"cancer": {
"title": "♋ Рак",
"description": "Чувствительный, заботливый и верный. Эмоции — их основной элемент. Влюбляется глубоко, но открывается медленно. Может быть уязвимым и нуждается в эмоциональной безопасности. Если разочарован, уходит, но долго переживает это. Какая у вас эмоциональная совместимость? У нас есть ответ!"
},
"leo": {
"title": "♌ Лев",
"description": "Яркий, харизматичный и щедрый. Любит внимание, комплименты и драму. В любви ведёт себя как завоеватель, но требует восхищения и преданности. Может быть эгоцентричным, но предан тем, кто его ценит. Сможете стать настоящей парой с влиянием? Давайте проверим!"
},
"virgo": {
"title": "♍ Дева",
"description": "Рациональный, надёжный и требовательный. В любви осторожен, не спешит открываться. Ценит порядок, честность и глубину. Может быть критичным и сдержанным, но становится верным партнером, когда доверяет. Ваша комбинация может быть невероятно крепкой — давайте узнаем детали!"
},
"libra": {
"title": "♎ Весы",
"description": "Очаровательный, дипломатичный и романтичный. Любит гармонию, изящные ухаживания и интеллектуальные беседы. Может колебаться перед принятием решений, но стремится к равенству и пониманию в отношениях. Какую роль вы сыграете в этой связи? Мы вам расскажем!"
},
"scorpio": {
"title": "♏ Скорпион",
"description": "Глубокий, страстный и магнетический. Любит серьёзно и надолго, но может быть ревнивым и собственником. Доверие и эмоциональная связь жизненно важны, предательство — непростительно. Любит глубоко. Какие секреты таятся в вашем союзе? Мы знаем!"
},
"sagittarius": {
"title": "♐ Стрелец",
"description": "Свободолюбивый, энергичный и оптимистичный. Любит приключения, новизну и независимость. Быстро влюбляется, но не терпит давления. Может избегать обязательств, но становится верным партнёром с тем, кто разделяет его дух свободы. Будет ли ваш союз полон страсти или свободы? Давайте узнаем!"
},
"capricorn": {
"title": "♑ Козерог",
"description": "Сдержанный, целеустремлённый и надёжный. В любви серьёзен и практичен, не любит игры и легкомысленность. Долго присматривается, но строит крепкие, длительные отношения, как только решится. Верный, но может быть слишком строгим. Совместимость с ним может изменить жизнь — хотите узнать больше?"
},
"aquarius": {
"title": "♒ Водолей",
"description": "Оригинальный, независимый и интеллектуальный. Любит свободу, эксперименты и дружбу в отношениях. Может быть эмоционально отстранённым, но с тем, кто разделяет его взгляды, становится верным союзником. Ваша связь с ним может быть нестандартной — давайте исследуем детали!"
},
"pisces": {
"title": "♓ Рыбы",
"description": "Романтичный, интуитивный и мечтательный. Влюбляется глубоко, но может быть подвержен иллюзиям. Ищет духовную связь, нежность и заботу. Может раствориться в партнёре, но при разочаровании оставляет после себя тайну. Будет ли ваш союз магическим или иллюзорным? Мы знаем ответ!\n🔮 Вы образуете уникальное сочетание, и мы можем рассказать вам куда больше! Давайте погрузимся в детали!"
}
},
"/let-scan": {
"title": "Мы сканируем вашу ладонь",
"text": "Следуйте инструкциям на экране, чтобы мы могли проанализировать линии вашей ладони, раскрыв будущее и тайны вашей судьбы!",
"hands": {
"title": "Сейчас они сканируют ладони <count> людей:"
}
},
"/scan-instruction": {
"title": "Сфотографируйте свою ладонь, как показано",
"button": "Сделать фото сейчас",
"upload_photo": "Загрузить фото ладони",
"error": "Что-то пошло не так. Пожалуйста, попробуйте снова."
},
"/email": {
"title": "Введите свой email, чтобы получить подробный анализ совместимости по хиромантии!",
"not_share": "Мы не передаем вашу личную информацию третьим лицам.",
"placeholder_email": "Ваш email",
"placeholder_name": "Ваше имя"
},
"app_number_one": {
"text": "Приложение на <color>, которому доверяют более 25 миллионов человек.",
"color": "#1 в астрологии"
},
"/trial-payment": {
"information-title": "Мы готовы дать вам все ответы, не тратьте годы на сомнения!",
"information-description-single": "Вы когда-нибудь задумывались, почему одни отношения складываются гладко, а другие натянуты как струна? Совпадение или знак судьбы? Ваши руки расскажут больше, чем вы думаете. Линии на вашей ладони — это карта ваших отношений. <color> есть скрытые знаки в вашей жизни, которые вы ещё не заметили. <eventDescription> <br><br> Получите подробный анализ совместимости по хиромантии и откройте ответы, которые уже записаны в вашей судьбе.",
"information-description-single-color": "<zodiacSign> (<birthdate>)",
"information-description-single-event-description": "Ваша дата <dateEvent> могла быть поворотным моментом или скрытым сигналом.",
"information-description-with-partner": "Руки расскажут больше, чем вы думаете. Линии на вашей ладони — это карта ваших отношений. <color> — два знака, созданные для глубины, но какие секреты скрывает ваш союз? <eventDescription> Получите подробный анализ совместимости по хиромантии и откройте ответы, которые уже записаны в вашей судьбе.",
"information-description-with-partner-color": "<zodiacSign> (<birthdate>) + <partnerZodiacSign> (<partnerBirthdate>)",
"information-description-with-partner-event-description": "Ваша дата <dateEvent> могла быть поворотным моментом или скрытым сигналом.",
"palm_is_ready": {
"title": "Ваше гадание по ладони <color>",
"title_color": "Готово",
"description": "«Я только что получил результаты сканирования вашей ладони. Давайте обсудим!»",
"text1": "<color> 6 лет в гадании по ладони и духовном наставничестве.",
"text1_color": "Акхо",
"text2": "Выберите из более чем 80 гадателей по ладони и астрологов."
},
"joined_today": {
"text1": "Неограниченные чаты с гадателем по ладони",
"text2": "Сегодня присоединилось <count> человек"
},
"get_personal_prediction": "Получите личный прогноз",
"how_work": {
"title": "Как работает AURA?",
"point1_title": "Отправьте нам скан вашей ладони",
"point1_text": "Мы анализируем линии вашей ладони, чтобы получить подсказки о вашем будущем",
"point2_title": "Ваше гадание по ладони готово",
"point2_text": "Один из наших профессиональных хиромантов составляет отчёт, полный подсказок о вашем будущем",
"point3_title": "Начните пробный период, чтобы получить свой прогноз",
"point3_text": "Став участником AURA, мы отправим вам отчёт с предсказанием, чтобы вы могли начать жить лучше.",
"point4_title": "Общайтесь с специалистом по гаданию по ладони в любое время",
"point4_text": "Получайте постоянную поддержку, обсуждая свои гадания, личные гороскопы и совместимости с нашей командой экспертов."
},
"money_back_guarantee": {
"title": "Гарантия возврата денег 100%",
"text": "Если вы не заметите никакого прогресса после использования приложения хотя бы неделю, мы готовы полностью вернуть деньги в течение 14 дней."
},
"begin_trial_now": "Начать пробный период сейчас",
"what_included": {
"title": "Что входит?",
"point1": "<bold> гадания по ладони",
"point1_bold": "Неограниченные",
"point2": "<bold> с профессиональными астрологами",
"point2_bold": "Живые чаты 1:1",
"point3": "<bold> чтения",
"point3_bold": "Ежедневная совместимость",
"point4": "Космические советы по отношениям",
"point5": "Ежедневные гороскопы"
},
"palms_say_about": {
"title": "Что ваши ладони говорят о вас?",
"point1": "<color> показывает ваше отношение к любви и качество любви",
"point1_color": "Линия любви",
"point2": "Длинный большой палец указывает на удачу",
"point3": "<color> отражает ваш интеллект и склад ума",
"point3_color": "Линия головы",
"point4": "Длинный указательный палец указывает на природного лидера",
"point5": "<color> определяет качество вашей жизни и то, чего вы добьётесь",
"point5_color": "Линия жизни",
"point6": "Короткий средний палец раскрывает свободный дух",
"point7": "<color> представляет ваши материальные достижения и карьерные цели",
"point7_color": "Линия судьбы",
"point8": "Длинный безымянный палец показывает склонность человека к риску",
"point9": "Короткий мизинец указывает на нехватку уверенности в себе"
},
"discover_more": "Узнайте больше",
"why_love": "Почему все <color> ?",
"why_love_color": "любят AURA",
"reviews": {
"username1": "Эмма Джонсон",
"tagline1": "\"Это изменило мою жизнь!\"",
"text1": "Раньше у меня все время были неудачные отношения — все начиналось хорошо, но потом все разваливалось. Это было изнурительно, и я начала задумываться, может проблема во мне. Ваш сервис сразу показался другим: вместо общих советов и случайных совпадений я получила точные сведения о том, с кем у меня действительно есть шанс построить что-то серьезное. До сих пор помню, как увидела свой первый анализ совместимости — он был так точен, что я просто поняла: вот оно. Теперь я трачу меньше времени на бессмысленные связи и, наконец, строю отношения, которые в кайф и кажутся правильными.",
"username2": "Оливия Смит",
"tagline2": "\"После многих лет поисков, я наконец нашёл истинную любовь.\"",
"text2": "Я долго сомневалась, действительно ли мы подходим друг другу. Всё казалось в порядке, но иногда мне казалось, что мы просто слишком разные. Я искала ответы в интернете, но всё, что находила, были размытые, противоречивые советы. Чувства были, но были и сомнения. Я просто хотела знать, есть ли у нас будущее вместе, но ничего не давало мне ясного ответа. Потом я наткнулась на вашу услугу, решила попробовать - и так рада, что сделала это. Ваш анализ наших личностей, совместимости и потенциальных сложностей в отношениях идеально совпал с самого начала. И тут меня осенило! Я наконец-то поняла, почему он ведёт себя так, как ведёт, и как построить с ним более крепкие отношения. Ваш 30-дневный пошаговый план уже приносит плоды - между нами больше доверия, и мы меньше ссоримся. Спасибо!",
"username3": "Аманда Холмс",
"tagline3": "\"Я нашла работу, которая мне действительно нравится.\"",
"text3": "Благодаря Владане я наконец-то нашла подсказку о том, в чём на самом деле состоит цель моей жизни и какая работа лучше всего мне подходит!",
"date1": "25 января",
"date2": "1 мес. назад"
},
"success_story": "Станьте историей успеха AURA!",
"as_seen_in": "<color> В СМИ упоминались",
"footer": {
"text1": "Вопросы? Мы здесь, чтобы помочь",
"text2": "Служба поддержки клиентов",
"text3": "Центр помощи"
}
},
"/payment": {
"will_be_charged": "С вас будет списано только <trialInfo>. Сэкономьте <save> сейчас. Затем <splitPrice> в неделю. Мы <emailReminder> перед окончанием пробного периода.",
"will_be_charged_email_reminder": "напомним вам по электронной почте",
"will_be_charged_trial_info": "<trialPrice> за <trialPeriod> пробный период",
"payment_information": {
"personalized_offer": "Персональное предложение зарезервировано",
"title": "Начните свой <trialPeriod> пробный период",
"total_today": "Всего сегодня",
"code_applied_bold": "AURA24",
"code_applied": "Код <bold> применён!"
},
"guarantees": {
"no_commitment": "Без обязательств. Отмените в любое время.",
"30_day_money_back": "30-дневная гарантия возврата денег"
},
"get_personal_prediction": "Получите личный прогноз",
"total_due": "Итого сегодня: <trialPrice>",
"app_number_one_color": "25 миллионов человек.",
"app_number_one": "Приложение №1 в астрологии, которому доверяют более <color>"
},
"/scanned-photo": {
"title": "Ваш углублённый анализ совместимости по хиромантии почти готов!",
"text": "Судя по вашим линиям, вас ждёт захватывающие будущее. Давайте погрузимся во все детали!",
"without-partner": {
"loaders": {
"title-1-1": "Анализируем ваши ключевые черты...",
"title-1-2": "Чтение астрологических параметров...",
"title-2-1": "Вычисляем вашу уникальную таблицу совместимости...",
"title-2-2": "Создаём персонализированную стратегию любви...",
"title-3-1": "Сравнение вас с 1 120 000 возможных астрологических комбинаций...",
"title-3-2": "Проверка точности прогноза — почти готово..."
},
"modals": {
"title-1": "Уточняющий вопрос.",
"description-1": "Заметили ли вы повторяющиеся циклы в своей жизни?",
"answer-1-left": "НЕТ",
"answer-1-right": "ДА",
"title-2": "Уточняющий вопрос.",
"description-2": "Что для вас важнее: судьба или выбор?",
"answer-2-left": "ВЫБОР",
"answer-2-right": "СУДЬБА",
"title-3": "Уточняющий вопрос.",
"description-3": "Верите ли вы, что любовь — это не только случайность?",
"answer-3-left": "НЕТ",
"answer-3-right": "ДА"
}
},
"with-partner": {
"loaders": {
"title-1-1": "Анализируем ключевые черты вас и вашего партнёра...",
"title-1-2": "Чтение астрологических параметров...",
"title-2-1": "Вычисляем вашу уникальную таблицу совместимости...",
"title-2-2": "Проверка ключевых пересечений ваших судеб...",
"title-3-1": "Сравнение вашей пары с 1 120 000 возможных астрологических комбинаций...",
"title-3-2": "Ввод данных: оценка глубины вашей связи — почти готово..."
},
"modals": {
"title-1": "Уточняющий вопрос.",
"description-1": "Заметили ли вы повторяющиеся циклы в вашей жизни?",
"answer-1-left": "НЕТ",
"answer-1-right": "ДА",
"title-2": "Уточняющий вопрос.",
"description-2": "Что для вас важнее: судьба или выбор?",
"answer-2-left": "ВЫБОР",
"answer-2-right": "СУДЬБА",
"title-3": "Уточняющий вопрос.",
"description-3": "Вы считаете, что любовь — это не просто случайность?",
"answer-3-left": "НЕТ",
"answer-3-right": "ДА"
}
},
"palm_lines": {
"head": "Линия головы ✅",
"heart": "Линия любви ✅",
"fate": "Линия судьбы ✅",
"life": "Линия жизни ✅"
}
},
"aura_paywall_palmistry_main": {
"text_0": "Мы помогли миллионам людей раскрыть судьбу их личной жизни и понять, что ждёт их в будущем и что ожидает их семьи.",
"text_1": "Наши затраты на компенсацию команде AURA за пробный период составляют $13.21, но, пожалуйста, выберите сумму, которая вам комфортна."
},
"/skip-trial": {
"title": "Не хочется оглядываться назад?",
"price_per_week": "<price> в неделю",
"billing_period": "Платёжный период",
"billed_amount": "Сумма счёта",
"billed_in_4_weeks": "Счёт выставляется через 4 недели",
"start_trial": {
"every_week": "Каждую неделю",
"start_trial": "Начать пробный период"
},
"skip_trial": {
"save": "сэкономьте <save>%",
"every_4_weeks": "Каждые 4 недели",
"skip_trial": "Принять предложение и пропустить пробный период"
}
},
"/add-consultant": {
"more_for_you": "Больше для вас",
"exclusive_offer": "Исключительное предложение специально для вас, чтобы помочь быстрее достичь ваших целей",
"your_unique_consultation": "Ваша уникальная личная консультация",
"30-minute": "30-минутная приватная консультация с экспертом",
"description": "Вы можете запросить информацию о вашем будущем, проанализировать совместимость по жизни, проверить совместимость в любви и многое другое",
"one_time_price_offer": "Специальная одноразовая цена:",
"original_price": "Оригинальная цена: <oldPrice> <discount>",
"you_will_be_charged": "*Будет взиматься плата за любые дополнительные услуги или предложения, выбранные во время покупки.\n Это единовременный платёж.",
"get_my_consultation": "Получить мою консультацию",
"discount_save": "Сохранить",
"caution": "Внимание!",
"caution_text": "Чтобы избежать двойного списания средств, пожалуйста, не закрывайте страницу и не возвращайтесь назад.",
"unlock_profound": "Откройте глубокие инсайты о своей личности, отношениях, карьерном пути и ключевых моментах жизни с помощью астрологии. Это позволит вам принимать более взвешенные решения и добиваться большего удовлетворения.",
"choose_from": "Выберите из более чем 80 экспертов астрологов."
},
"/camera": {
"bad_photo": "Плохое фото!",
"try_again": "Попробуйте ещё раз",
"do_better": "Можете лучше",
"next": "Дальше",
"no_access_camera": "Нет доступа к камере",
"give_access": "Дать доступ",
"reload_page": "Пожалуйста, перезагрузите страницу, чтобы продолжить.",
"reload_page_button": "Перезагрузить страницу",
"modal": {
"title": "Для того чтобы отсканировать вашу ладонь, необходим доступ к камере.",
"cancel": "Отмена",
"allow": "Разрешить"
},
"upload": "Загрузить"
},
"/with-heart": {
"title": "Ваш выбор естественен. По нашим данным, 52% <gender> <zodiacSign> следуют зову своего сердца. Мы учтём это в анализе вашей ладони на Совместимость с <partnerZodiacSign>!",
"with-partner": {
"title": "Ваш выбор естественен. Согласно нашим данным, 52% <gender> <zodiacSign> следуют зову сердца. Мы учтём это в анализе вашей ладони на совместимость с <partnerZodiacSign>!"
},
"single": {
"title": "Ваш выбор естественен — согласно нашим данным, 51% <gender> под знаком <zodiacSign> следуют зову сердца. Мы учтём это в ваших линиях!"
}
},
"/with-head": {
"title": "Даже среди <zodiacSign> не всё определяется сердцем По нашим данным, 35% <gender> вашего знака принимают решения, основываясь на разуме. Мы учтём этот аспект в вашем анализе совместимости с <partnerZodiacSign>.",
"with-partner": {
"title": "Даже среди <zodiacSign> не все решения принимаются сердцем — по нашим данным, 35% <gender> вашего знака принимают решения, основываясь на разуме. Мы учтём этот аспект в вашем анализе совместимости с <partnerZodiacSign>."
},
"single": {
"title": "Даже среди <zodiacSign> не все решения принимаются сердцем — по нашим данным, 35% <gender> вашего знака принимают решения, основываясь на разуме. Это будет учтено в вашем анализе."
}
},
"/both": {
"title": "Факты говорят сами за себя! Согласно нашим данным, только 15% <gender>, родившихся под знаком <zodiacSign>, в равной степени следуют и разуму, и сердцу. Это секрет гармоничных отношений с <partnerZodiacSign>, и мы учтём это в вашем гадании.",
"with-partner": {
"title": "Факты говорят сами за себя! Согласно нашим данным, только 15% <gender>, рождённых под знаком <zodiacSign>, в равной степени следуют разуму и сердцу. Это секрет гармоничных отношений с <partnerZodiacSign>, и мы учтём это в вашем гадании."
},
"single": {
"title": "Факты говорят сами за себя! Согласно нашим данным, только 15% <gender>, рождённых под знаком <zodiacSign>, в равной степени следуют сердцу и разуму. Это секрет гармоничных отношений, и мы отразим это в ваших линиях."
}
},
"/depends": {
"title": "Согласно нашим данным, лишь 9% <gender>, родившихся под знаком <zodiacSign>, обладают исключительной логической ясностью — редким даром. Мы обязательно учтём эту черту в ваших линиях ладони при подготовке анализа Совместимости с <partnerZodiacSign>.",
"with-partner": {
"title": "По нашим данным, лишь 9% <gender>, родившихся под знаком <zodiacSign>, обладают отчётливой логической ясностью — редким даром. Обязательно учтём эту черту в линиях вашей ладони при подготовке анализа Совместимости с <partnerZodiacSign>."
},
"single": {
"title": "По нашим данным, лишь 9% <gender>, рождённых под знаком <zodiacSign>, обладают чёткой логической ясностью — редким даром. Обязательно учтём эту черту в ваших линиях."
}
},
"/romantic-gestures": {
"title": "Как вы относитесь к романтическим жестам?",
"answer1": "Люблю их",
"answer2": "Нейтрально",
"answer3": "Не вижу смысла"
},
"/checking-phone": {
"title": "Как вы относитесь к проверке телефона или сообщений партнёра?",
"answer1": "Категорически против",
"answer2": "Только в крайних случаях",
"answer3": "Нормально отношусь"
},
"zodiac_signs": {
"aries": "Овен",
"taurus": "Телец",
"gemini": "Близнецы",
"cancer": "Рак",
"leo": "Лев",
"virgo": "Дева",
"libra": "Весы",
"scorpio": "Скорпион",
"sagittarius": "Стрелец",
"capricorn": "Козерог",
"aquarius": "Водолей",
"pisces": "Рыбы"
},
"threadId": "thread_LAtY9SFTzZw2CZXuuS2xzyFP",
"assistantId": "asst_fJiWuxpUr4DGkMmqgUPPYZtT",
"/try-app": {
"header": {
"title": "Ваше персонализированное предложение зарезервировано",
"get-prediction-in-app": "Получите предсказание в<br>приложении"
},
"palm_lines": {
"head": "Линия головы ✅",
"heart": "Линия любви ✅",
"fate": "Линия судьбы ✅",
"life": "Линия жизни ✅"
},
"reading_ready": {
"title": "Ваше гадание по ладони ГОТОВО и доступно в приложении для вашего iPhone!"
},
"your_access_code": "Ваш код доступа",
"copy": "КОПИРОВАТЬ",
"instruction_point_1": "1. Скопируйте ваш код доступа",
"instruction_point_2": "2. Скачайте приложение",
"not_share_description": "Введите ваш код доступа в приложении, чтобы получить доступ к вашему персонализированному гаданию. Не сообщайте ваш код никому.",
"get_prediction_in_app": "Получите личный прогноз в приложении",
"enter-code-title": "Введите ваш код доступа:",
"code-copied": "Код скопирован",
"copy-code-title": "Кликните, чтобы скопировать код",
"how_work": {
"title": "Как работает AURA?"
},
"get-my-reading-in-app": "ПОЛУЧИТЬ МОЁ ГАДАНИЕ В ПРИЛОЖЕНИИ",
"why_love": "Почему все <color>?",
"why_love_color": "любят AURA",
"as_seen_in": "<color> Как упоминается в",
"instruction_point_3": "3. Введите ваш код доступа в приложении",
"instruction_point_4": "1. Скопируйте ваш код доступа",
"instruction_point_5": "2. Введите свой код доступа в приложении 👇",
"your_palm_reading_is_ready": "Ваше гадание по ладони ГОТОВО"
},
"/trial-choice": {
"v1": {
"paragraph1": "AURA — это единственное точное приложение с надежным анализом линии судьбы, проверенное профессионалами и гарантированное для предоставления точных предсказаний.<br><br>AURA уже помогла миллионам людей обрести счастье и узнать всю правду о своих отношениях.<br><br>Ваш анализ судьбы, который полностью изменит вашу жизнь, почти готов! Прежде чем мы предоставим его вам, мы хотели бы предложить вам возможность выбрать сумму, которую вы считаете разумной, чтобы попробовать AURA в течение 7 дней и которая, по вашему мнению, справедлива для изменений, которые произойдут с вами:",
"paragraph2": "7-дневный пробный период обходится нам в <price>, но, пожалуйста, выберите сумму, которая вам наиболее подходит.",
"points": {
"point1": "Вы узнаете все самые сокровенные тайны, которые звезды приготовили для вас, и решите вопросы в отношениях всего за один месяц;",
"point2": "Вы раз и навсегда поставите точку в нерешенных вопросах и забудете о проблемах, которые преследовали вас годами (если не десятилетиями);",
"point3": "Вы сэкономите сотни долларов на фейковых и непрофессиональных астрологических прогнозах и гадалках;",
"point4": "Вы получите не только персональный анализ, но и персонализированные ежедневные гороскопы, узнаете, кто и как истощает вашу энергию, и получите другие персонализированные предсказания."
},
"emails_list": {
"title": "Куплено сегодня: <count>",
"description": "<count> человек покупают сейчас:"
}
},
"description": "AURA — единственное точное приложение с надёжным анализом линии судьбы, подтверждённым профессионалами и гарантирующее точные прогнозы.<br><br>AURA уже помогла миллионам людей найти счастье и узнать всю правду о своих отношениях.<br><br>Ваш анализ судьбы, который полностью изменит вашу жизнь, уже практически готов! Прежде чем мы его вам предоставим, предлагаем выбрать сумму, которую вы считаете разумной, чтобы попробовать AURA в течение <trialPeriod1> и которая кажется вам справедливой за грядущие перемены:<br><br>Вы узнаете все самые сокровенные тайны, которые звёзды приготовили именно вам, и решите вопросы в отношениях всего за месяц;<br><br>Раз и навсегда поставите точку в нерешённых вопросах и забудете о старых проблемах, которые тянутся за вами годами (а то и десятилетиями);<br><br>Сэкономите сотни долларов на фейковых и непрофессиональных астрологических предсказаниях и гадалках;<br><br>Получите не только персональный анализ, но и индивидуальные ежедневные гороскопы, узнаете, кто и как забирает вашу энергию, а также другие персональные расклады.<br><br>Пробный период на <trialPeriod2> обходится нам в <maxTrialPrice>, но выберите сумму, которая подходит именно вам:",
"trial-text": {
"v0": "Наши расходы на оплату сотрудникам AURA за пробный период составляют <price>, но выберите сумму, которая вам комфортна.",
"v1": "Создание вашего анализа совместимости с помощью специалистов AURA стоило нам <price>. Вы можете выбрать любую сумму, которую вам комфортно внести.",
"v2": "Мы потратили <price> на подготовку вашего уникального отчёта по совместимости вместе с нашей командой AURA. Если захотите поддержать нас выберите сумму, которая вам кажется справедливой.",
"v3": "Ваш анализ совместимости был подготовлен с заботой нашей командой AURA — на это мы потратили <price>. Вы можете поддержать нашу работу выбрав сумму, которая кажется вам справедливой."
}
},
"/scan-hand": {
"title": "Приложи ладонь к экрану телефона."
},
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

View File

@ -37,7 +37,7 @@
"life": "Life line ✅"
},
"reading_ready": {
"title": "Your Compatibility Reading is READY and available in the app for your iPhone!"
"title": "Your Compatibility Reading is READY and Available in the App for Your iPhone!"
},
"your_access_code": "Your Access Code",
"copy": "COPY",
@ -61,27 +61,27 @@
"as_seen_in": "<color> As Seen in ",
"your-reading": {
"title": "Your Reading",
"subtitle": "Что ты получишь",
"subtitle": "What You'll Get",
"points": {
"v1": {
"point1": "Разбор вашего притяжения и скрытых сил, управляющих вашими чувствами.",
"point2": "Индивидуальный прогноз на развитие отношений: что ждет вас впереди.",
"point3": "Вопросы и персональные рекомендации от эксперта.",
"point4": "Уникальная информация, которую нельзя найти в стандартных гороскопах.",
"point5": "Полная картина вашей совместимости: уровни в процентах — без иллюзий и догадок.",
"point6": "Подробный астрологический разбор: что сближает и что вызывает напряжение.",
"point7": "Глубокое понимание партнера: как он любит и что для него важно.",
"point8": "Графики, схемы и объяснения для наглядной динамики ваших отношений."
"point1": "Analysis of your attraction and the hidden forces guiding your emotions.",
"point2": "A personal forecast for the future of your relationship: what lies ahead.",
"point3": "Questions and personalized advice from an expert.",
"point4": "Unique insights that you wont find in standard horoscopes.",
"point5": "A complete picture of your compatibility: percentage levels—no illusions or guesses.",
"point6": "A detailed astrological breakdown of what brings you together and what causes tension.",
"point7": "A deep understanding of your partner: how they love and what matters to them.",
"point8": "Charts, diagrams, and explanations for a clear view of your relationship dynamics."
},
"v2": {
"point1": "Полная картина вашей совместимости: уровни в процентах — без иллюзий и догадок.",
"point2": "Подробный астрологический разбор: что сближает и что вызывает напряжение.",
"point3": "Глубокое понимание партнера: как он любит и что для него важно.",
"point4": "Графики, схемы и объяснения для наглядной динамики ваших отношений.",
"point5": "Разбор вашего притяжения и скрытых сил, управляющих вашими чувствами.",
"point6": "Индивидуальный прогноз на развитие отношений: что ждет вас впереди.",
"point7": "Вопросы и персональные рекомендации от эксперта.",
"point8": "Уникальная информация, которую нельзя найти в стандартных гороскопах."
"point1": "A complete picture of your compatibility: percentage levels—no illusions or guesses.",
"point2": "A detailed astrological breakdown of what brings you together and what causes tension.",
"point3": "A deep understanding of your partner: how they love and what matters to them.",
"point4": "Charts, diagrams, and explanations for a clear view of your relationship dynamics.",
"point5": "Analysis of your attraction and the hidden forces guiding your emotions.",
"point6": "A personal forecast for the future of your relationship: what lies ahead.",
"point7": "Questions and personalized advice from an expert.",
"point8": "Unique insights that you wont find in standard horoscopes."
}
},
"description": "To read the full reading, you need to get access through the app for your iPhone"
@ -127,51 +127,51 @@
"/palms-information": {
"aries": {
"title": "♈ Aries",
"description": "Совместимость это ключ к гармонии в отношениях, и твоя энергия играет в этом главную роль. Согласно нашим данным, в 81% удачных союзов партнеры Овнов разделяют их страсть к действию и независимость. Решительность и амбиции определяют, насколько легко вы находите общий ритм с партнером.<br>Как влияет твой характер на совместимость? Что делает отношения прочными, а где могут возникнуть сложности? Далее мы подробно разберем, какие знаки и типы личности лучше всего подходят тебе, а также дадим советы, как усилить связь с партнером."
"description": "Compatibility is key to harmony in relationships, and your energy plays a major role. According to our data, in 81% of successful unions, partners of Aries share their passion for action and independence. Determination and ambition determine how easily you find common ground with your partner.<br>How does your character affect compatibility? What strengthens relationships and what challenges might arise? We'll delve into which signs and personality types suit you best, and offer tips on enhancing your connection with your partner."
},
"taurus": {
"title": "♉ Taurus",
"description": "Совместимость для тебя это прочность и стабильность, ведь надежность в отношениях имеет первостепенное значение. Согласно нашим исследованиям, в 86% гармоничных союзов партнеры Тельцов разделяют их стремление к комфорту и верности. Спокойствие, преданность и терпение вот что делает тебя идеальным спутником для долгосрочных отношений.<br>Но с какими партнерами тебе будет особенно легко, а с кем могут возникнуть противоречия? Как усилить связь и избежать недопонимания? Далее мы подробно разберем, какие союзы для тебя наиболее перспективны и как создать гармонию в отношениях."
"description": "For you, compatibility is about durability and stability, as reliability in relationships is paramount. According to our research, in 86% of harmonious unions, Taurus partners share their drive for comfort and loyalty. Calmness, devotion, and patience make you an ideal companion for long-term relationships.<br>But with whom will you find it especially easy, and where might conflicts arise? How can you strengthen connections and avoid misunderstandings? We will thoroughly explore which unions are most promising for you and how to create harmony in relationships."
},
"gemini": {
"title": "♊ Gemini",
"description": "Твоя совместимость зависит от динамики и интеллектуального взаимодействия. Согласно нашим данным, в 78% удачных союзов партнеры Близнецов готовы к переменам, легкости и спонтанности. Остроумие, коммуникабельность и жажда новизны делают тебя увлекательным спутником, но требуют от партнера гибкости и умения идти в ногу с твоими идеями.<br>С кем твой союз будет самым гармоничным? А какие черты могут стать камнем преткновения? Далее мы подробно разберем, какие партнеры способны поддерживать твой ритм и как сделать отношения насыщенными, но устойчивыми."
"description": "Your compatibility depends on dynamics and intellectual interaction. According to our data, in 78% of successful unions, Gemini partners are open to change, ease, and spontaneity. Your wit, communicative nature, and thirst for novelty make you an exciting companion but require your partner to be flexible and willing to keep up with your ideas.<br>With whom will your union be most harmonious? And what traits might become a sticking point? We will thoroughly analyze which partners can sustain your pace and how to make the relationship lively yet stable."
},
"cancer": {
"title": "♋ Cancer",
"description": "Совместимость для тебя строится на эмоциях, глубокой привязанности и доверии. Согласно нашим данным, в 82% крепких отношений партнеры Раков обладают развитой эмпатией и интуитивным пониманием друг друга. Ты ценишь заботу, стабильность и душевную близость, а значит, гармония возможна только с тем, кто умеет разделять твои чувства.<br>Но какие партнеры подходят тебе лучше всего? А с кем могут возникнуть сложности в понимании? Далее мы подробно разберем, какие союзы помогут тебе обрести настоящую гармонию и как укрепить эмоциональную связь с любимым человеком."
"description": "Your compatibility is built on emotions, deep attachment, and trust. According to our data, in 82% of strong relationships, Cancer partners possess developed empathy and an intuitive understanding of each other. You value care, stability, and emotional closeness, which means harmony is possible only with those who can share your feelings.<br>But which partners are the best match for you? And with whom might understanding be more challenging? We will thoroughly explore which unions will help you achieve true harmony and how to strengthen emotional connections with your loved one."
},
"leo": {
"title": "♌ Leo",
"description": "Твоя совместимость строится на восхищении, страсти и признании. Согласно нашим данным, в 84% счастливых союзов партнеры Львов искренне восхищаются ими и поддерживают их амбиции. Ты стремишься к ярким, вдохновляющим отношениям, где тебя ценят, уважают и не пытаются затмить.<br>Но с кем твой союз будет наиболее гармоничным? А какие отношения могут привести к борьбе за лидерство? Далее мы подробно разберем, какие партнеры подходят тебе лучше всего и как построить прочный, но захватывающий союз."
"description": "Your compatibility relies on admiration, passion, and recognition. According to our data, in 84% of happy unions, Leo partners genuinely admire them and support their ambitions. You strive for vibrant and inspiring relationships, where you are appreciated, respected, and not overshadowed.<br>But with whom will your union be most harmonious? And which relationships might lead to a power struggle? We will thoroughly analyze which partners suit you best and how to build a solid yet exciting bond."
},
"virgo": {
"title": "♍ Virgo",
"description": "Твоя совместимость строится на доверии, стабильности и общем взгляде на жизнь. Согласно нашим наблюдениям, в 79% успешных союзов партнеры Дев ценят предсказуемость, заботу и рациональный подход к отношениям. Ты стремишься к порядку и гармонии, а значит, идеальный партнер тот, кто разделяет твои ценности и уважает твой перфекционизм.<br>Но с кем твои отношения будут наиболее крепкими? А какие союзы могут потребовать больше компромиссов? Далее мы подробно разберем, какие партнеры подходят тебе лучше всего и как создать гармонию в отношениях, не жертвуя своими принципами."
"description": "Your compatibility is based on trust, stability, and a shared outlook on life. According to our observations, in 79% of successful unions, Virgo partners appreciate predictability, care, and a rational approach to relationships. You strive for order and harmony, so the ideal partner is one who shares your values and respects your perfectionism.<br>But with whom will your relationships be strongest? And which unions might require more compromises? We will thoroughly analyze which partners suit you best and how to create harmony in relationships without sacrificing your principles."
},
"libra": {
"title": "♎ Libra",
"description": "Твоя совместимость строится на балансе, честности и умении находить компромиссы. Согласно нашим данным, в 80% удачных союзов партнеры Весов разделяют их стремление к гармонии и открытому диалогу. Ты ценишь красивые, легкие и справедливые отношения, где оба партнера готовы работать над взаимопониманием.<br>Но кто станет твоим идеальным партнером? А с кем может быть сложнее найти общий язык? Далее мы подробно разберем, какие союзы помогут тебе обрести настоящую гармонию и как выстроить отношения, в которых будет царить равновесие."
"description": "Your compatibility is built on balance, honesty, and the ability to compromise. According to our data, in 80% of successful unions, Libra partners share their drive for harmony and open dialogue. You appreciate beautiful, easy, and fair relationships where both partners are willing to work on mutual understanding.<br>But who will be your ideal partner? And with whom might finding common ground be more difficult? We will thoroughly explore which unions will help you find true harmony and how to build relationships where balance reigns."
},
"scorpio": {
"title": "♏ Scorpio",
"description": "Твоя совместимость строится на страсти, глубине чувств и абсолютной преданности. Согласно нашим исследованиям, в 83% успешных союзов партнеры Скорпионов обладают такой же эмоциональной интенсивностью, не боясь глубокой связи и полной вовлеченности. Ты не приемлешь поверхностности в отношениях тебе нужен партнер, который готов разделить с тобой и взлеты, и падения.<br>Но с кем твоя связь будет по-настоящему крепкой? А какие союзы могут столкнуться с испытаниями на доверие? Далее мы подробно разберем, какие партнеры способны выдержать накал твоих эмоций и как построить отношения, основанные на страсти и искренности."
"description": "Your compatibility is based on passion, depth of emotion, and absolute loyalty. According to our research, in 83% of successful unions, Scorpio partners possess the same emotional intensity, unafraid of deep connection and full involvement. You can't stand superficiality—your partner must be ready to share both ups and downs.<br>But with whom will your connection be truly strong? And which unions might face trust challenges? We will thoroughly explore which partners can handle your emotional intensity and how to build relationships based on passion and sincerity."
},
"sagittarius": {
"title": "♐ Sagittarius",
"description": "Твоя совместимость строится на свободе, приключениях и общем взгляде на жизнь. Согласно нашим данным, в 77% долгосрочных союзов партнеры Стрельцов разделяют их жажду новых впечатлений и открытий. Ты ценишь легкость, оптимизм и независимость, а значит, тебе нужен человек, который не станет ограничивать тебя, а будет готов идти рядом в новом путешествии.<br>Но с кем твой союз будет наполнен яркими эмоциями, а с кем могут возникнуть разногласия? Далее мы подробно разберем, какие партнеры идеально подходят тебе и как построить отношения, где свобода и близость будут дополнять друг друга."
"description": "Your compatibility is built on freedom, adventure, and a shared outlook on life. According to our data, in 77% of long-lasting unions, Sagittarius partners share their thirst for new experiences and discoveries. You value ease, optimism, and independence, meaning you need someone ready to journey alongside you without limiting you.<br>But with whom will your union be filled with vibrant emotions, and with whom might differences arise? We will thoroughly analyze which partners are a perfect fit for you and how to build relationships where freedom and closeness complement each other."
},
"capricorn": {
"title": "♑ Capricorn",
"description": "Твоя совместимость строится на общих целях, надежности и умении строить прочные отношения. Согласно нашим данным, в 85% счастливых браков партнеры Козерогов поддерживают их стремление к успеху и стабильности. Ты ценишь верность, ответственность и долгосрочные перспективы, а значит, тебе нужен партнер, который разделит твои амбиции и будет готов идти к общему будущему.<br>Но кто станет твоей надежной опорой, а с кем могут возникнуть разногласия? Далее мы подробно разберем, какие партнеры помогут тебе построить крепкий и стабильный союз, основанный на доверии и уважении."
"description": "Your compatibility is built on shared goals, reliability, and the ability to build solid relationships. According to our data, in 85% of happy marriages, Capricorn partners support their drive for success and stability. You value loyalty, responsibility, and long-term prospects, meaning you need a partner who shares your ambitions and is ready to work toward a common future.<br>But who will be your reliable support, and with whom might disagreements occur? We will thoroughly explore which partners will help you build a strong and stable union based on trust and respect."
},
"aquarius": {
"title": "♒ Aquarius",
"description": "Твоя совместимость строится на свободе, интеллектуальном обмене и умении уважать индивидуальность друг друга. Согласно нашим исследованиям, в 75% гармоничных союзов партнеры Водолеев разделяют их стремление к независимости и нестандартный взгляд на жизнь. Ты ценишь оригинальность, свободу мысли и дружеские отношения в паре, а значит, тебе нужен партнер, который не будет тебя ограничивать, а будет вдохновлять.<br>Но с кем твои отношения будут особенно яркими и гармоничными? А какие союзы могут потребовать больше компромиссов? Далее мы подробно разберем, какие партнеры идеально подходят тебе и как построить отношения, в которых свобода и близость будут сочетаться в идеальном балансе."
"description": "Your compatibility is built on freedom, intellectual exchange, and the ability to respect each other's individuality. According to our research, in 75% of harmonious unions, Aquarius partners share their drive for independence and an unconventional outlook on life. You value originality, freedom of thought, and friendship in a relationship, so you need a partner who won't limit you but will inspire you.<br>But with whom will your relationship be particularly bright and harmonious? And which unions might require more compromises? We will thoroughly explore which partners are the ideal match for you and how to build relationships where freedom and closeness strike a perfect balance."
},
"pisces": {
"title": "♓ Pisces",
"description": "Твоя совместимость строится на глубокой эмоциональной связи, интуиции и способности чувствовать партнера. Согласно нашим данным, в 84% крепких отношений партнеры Рыб обладают схожей чувствительностью и умением понимать друг друга без слов. Ты ценишь романтику, душевную близость и тонкие невидимые нити, связывающие сердца.<br>Но с кем твой союз будет наполнен гармонией, а какие отношения могут столкнуться с испытаниями? Далее мы подробно разберем, какие партнеры подходят тебе лучше всего и как построить связь, основанную на доверии, искренности и взаимном понимании."
"description": "Your compatibility is built on deep emotional connection, intuition, and the ability to understand your partner. According to our data, in 84% of strong relationships, Pisces partners possess similar sensitivities and can understand each other without words. You value romance, emotional closeness, and the subtle, invisible threads that connect hearts.<br>But with whom will your union be filled with harmony, and which relationships might face challenges? We will thoroughly explore which partners are the best match for you and how to build a bond based on trust, sincerity, and mutual understanding."
}
},
"/what-aspects": {
@ -313,12 +313,12 @@
},
"/trial-payment": {
"information-title": "We're Ready to Give You All the Answers, Don't Spend Years in Doubt!",
"information-description-single": "Ты когда-нибудь задумывался, почему одни отношения развиваются легко, а другие будто натянуты, как струна? Совпадение или знак судьбы? <color> в вашей жизни есть скрытые знаки, которые вы ещё не заметили. <eventDescription><br>Получите детальный анализ совместимости и откройте ответы, которые уже написаны в вашей судьбе.",
"information-description-single": "Have you ever wondered why some relationships seem to flow effortlessly while others feel tense, like a tightrope? Coincidence or a sign of fate? <color> there are hidden signs in your life you haven't noticed yet. <eventDescription><br>Get a detailed compatibility analysis and uncover answers already written in your destiny.",
"information-description-single-color": "<zodiacSign> (<birthdate>)",
"information-description-single-event-description": "Ваша дата <dateEvent> могла стать поворотной точкой или скрытым сигналом.",
"information-description-with-partner": "Ты когда-нибудь задумывался, почему одни отношения развиваются легко, а другие будто натянуты, как струна? Совпадение или знак судьбы? <color> — два знака, созданные для глубины, но какие тайны скрывает ваш союз? <eventDescription> Получите детальный анализ совместимости и откройте ответы, которые уже написаны в вашей судьбе.",
"information-description-single-event-description": "Your date <dateEvent> could have been a turning point or a hidden signal.",
"information-description-with-partner": "Have you ever wondered why some relationships seem to flow effortlessly while others feel tense, like a tightrope? Coincidence or a sign of fate? <color> — two signs created for depth, but what secrets does your union hide? <eventDescription> Get a detailed compatibility analysis and uncover answers already written in your destiny.",
"information-description-with-partner-color": "<zodiacSign> (<birthdate>) + <partnerZodiacSign> (<partnerBirthdate>)",
"information-description-with-partner-event-description": "Ваша дата <dateEvent> могла стать поворотной точкой или скрытым сигналом.",
"information-description-with-partner-event-description": "Your date <dateEvent> could have been a turning point or a hidden signal.",
"palm_is_ready": {
"title": "Your Palm Reading <color>",
"title_color": "Is Ready",
@ -402,10 +402,10 @@
"/payment": {
"will_be_charged": "You will be charged only <trialInfo>. Save <save> now. Then <splitPrice> per week. Well <emailReminder> before your trial ends.",
"will_be_charged_email_reminder": "email you a reminder",
"will_be_charged_trial_info": "<trialPrice> for your <trialDuration>-day trial",
"will_be_charged_trial_info": "<trialPrice> for your <trialPeriod> trial",
"payment_information": {
"personalized_offer": "Personalized offer reserved",
"title": "Start your <trialDuration>-day trial",
"title": "Start your <trialPeriod> trial",
"total_today": "Total today",
"code_applied_bold": "AURA24",
"code_applied": "Code <bold> applied!"
@ -530,10 +530,10 @@
},
"/depends": {
"with-partner": {
"title": "На основонии наших данных лишь 9% <gender> рожденных под знаком <zodiacSign> имеют четкую логическую ясность — редкий дар. Мы обязательно это учтем в вашем анализе на совместимость с <partnerZodiacSign>."
"title": "According to our data, only 9% of <gender> born under the sign of <zodiacSign> have clear logical insight—a rare gift. We will definitely consider this in your compatibility analysis with <partnerZodiacSign>."
},
"single": {
"title": "На основонии наших данных лишь 9% <gender> рожденных под знаком <zodiacSign> имеют четкую логическую ясность — редкий дар. Мы обязательно это учтем в вашем анализе на совместимость."
"title": "According to our data, only 9% of <gender> born under the sign of <zodiacSign> have clear logical insight—a rare gift. We will definitely consider this in your compatibility analysis."
}
},
"/with-heart": {
@ -554,10 +554,10 @@
},
"/both": {
"with-partner": {
"title": "Факты говорят сами за себя! По нашим данным, только 15% <gender>, рожденных под знаком <zodiacSign>, одинаково следуют и разуму, и сердцу. Именно в этом скрыт секрет гармоничных отношений. Мы учтем эту особенность в вашем анализе на совместимость с <partnerZodiacSign>."
"title": "The facts speak for themselves! According to our data, only 15% of <gender> born under the sign of <zodiacSign> equally follow both their head and heart. This is the hidden secret to harmonious relationships, and we will consider this feature in your compatibility analysis with <partnerZodiacSign>."
},
"single": {
"title": "Факты говорят сами за себя! По нашим данным, только 15% <gender>, рожденных под знаком <zodiacSign>, одинаково следуют и разуму, и сердцу. Именно в этом скрыт секрет гармоничных отношений и мы учтем эту особенность в вашем анализе на совместимость."
"title": "The facts speak for themselves! According to our data, only 15% of <gender> born under the sign of <zodiacSign> equally follow both their head and heart. This is the hidden secret to harmonious relationships, and we will consider this feature in your compatibility analysis."
}
},
"/romantic-gestures": {
@ -586,12 +586,35 @@
"aquarius": "Aquarius",
"pisces": "Pisces"
},
"/trial-choice": {
"v1": {
"paragraph1": "AURA is the only accurate app with reliable fate line analysis, verified by professionals and guaranteed to provide precise predictions.<br><br>AURA has already helped millions of people find happiness and discover the whole truth about their relationships.<br><br>Your fate analysis, which will completely change your life, is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for 7 days and which you think is fair for the changes that will happen to you:",
"paragraph2": "A 7-day trial period costs us <price>, but please choose the amount that suits you best.",
"points": {
"point1": "You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month;",
"point2": "You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades);",
"point3": "You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers;",
"point4": "You will receive not only a personal analysis but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings."
},
"emails_list": {
"title": "Bought today: <count>",
"description": "<count> people are buying now:"
}
},
"trial-text": {
"v0": "It costs us <price> to compensate our AURA employees for the trial, but please choose the amount you are comfortable with.",
"v1": "It cost us <price> to create your compatibility analysis with the help of our AURA specialists. Youre welcome to choose any amount youre comfortable contributing.",
"v2": "We spent <price> to prepare your unique compatibility report with support from our AURA team. If youd like to contribute, feel free to choose the amount that feels right to you.",
"v3": "Your compatibility analysis was created with care by our AURA team — it cost us <price> to make it happen. You can support our work by choosing any amount that feels fair to you."
},
"description": "AURA is the only accurate app with reliable fate line analysis, verified by professionals and guaranteed to provide precise predictions.<br><br>AURA has already helped millions of people find happiness and discover the whole truth about their relationships.<br><br>Your fate analysis, which will completely change your life, is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for <trialPeriod1> and which you think is fair for the changes that will happen to you:<br><br>You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month;<br><br>You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades);<br><br>You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers;<br><br>You will receive not only a personal analysis but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings.<br><br>A <trialPeriod2> trial period costs us <maxTrialPrice>, but please choose the amount that suits you best:"
},
"/choose-place": {
"title": "Your Compatibility<br>Reading is READY",
"subtitle": "<count><br>страниц подробного<br>разбора.",
"subtitle": "<count><br>pages of detailed<br>analysis.",
"subtitle_count": "57",
"description1": "Ты можешь купить его на всегда или БЕСПЛАТНО прочитать у нас в приложении.",
"description2": "Ваш разбор по Совместимости действителен 10 минут, после чего он будет удален.",
"description1": "You can purchase it for ownership or read it for FREE in our app.",
"description2": "Your Compatibility Reading is available for 10 minutes before it gets removed.",
"button1": "Buy",
"button2": "Read for FREE<br>in the App"
},
@ -599,5 +622,25 @@
"instruction_point_1": "1. Copy Your Access Code",
"instruction_point_2": "2. Download the App and Enter Your Access Code",
"not_share_description": "Enter your access code in the app to access Your Personalized Reading. Do not share your code with anyone."
},
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -0,0 +1,850 @@
{
"config": "ru.male",
"next": "Дальше",
"biometric_data": "Мы не собираем никаких биометрических данных. Все процессы распознавания происходят на вашем устройстве.",
"went_wrong": "Что-то пошло не так. Кажется, это была одна из тех дней, когда печка, холодильник и кот коварно решили сделать заговор против вас. Но не волнуйтесь, сейчас мы всё исправим!",
"v": "в1",
"privacy_policy": "Продолжая, вы соглашаетесь с нашим <eulaLink> и <privacyLink>. Есть вопрос? Обратитесь в нашу службу поддержки <clickHere>",
"eula_link": "Лицензионное соглашение с конечным пользователем",
"privacy_notice": "Уведомление о конфиденциальности",
"policy_here": "здесь",
"thumb": "Большой палец",
"index_finger": "Указательный палец",
"middle_finger": "Средний палец",
"ring_finger": "Безымянный палец",
"pinky": "Мизинец",
"skip_trial": "Пропустить пробный период",
"add_consultant": "Добавить консультанта",
"add_guides": "Добавить гидов",
"access_product": "Доступ к продукту",
"thank_you": "Спасибо!",
"order_successful": "Ваш заказ успешно обработан!",
"male": "Мужской",
"female": "Женский",
"males": "Мужчины",
"females": "Женщины",
"/find-your-happiness": {
"title": "Обрети ясность и уверенность в жизни",
"text": "Используйте астрологию и хиромантию, чтобы укрепить себя и свои отношения",
"advantage1": "Глубокий анализ: мы сканируем линии на вашей ладони",
"advantage2": "Персонализированный подход: анализ совместимости и будущего",
"advantage3": "Быстрый результат: занимает не более 5 минут"
},
"/gender": {
"title": "Какой у вас пол?",
"description": "В хиромантии у каждого есть как мужские, так и женские черты. <br><br> Давайте определим ваши для более точного чтения ладони.",
"already_have_account": "Уже есть аккаунт? Войти",
"v1": {
"title": "Тест на Совместимость<br>👩‍❤️‍👨",
"subtitle": "Всё начинается с вас!<br>Выберите ваш пол 👇",
"points": {
"point1": "тест займёт не более 1 мин",
"point2": "вы получите анализ совместимости, связанный с линиями на вашей ладони",
"point3": "100% достоверность данных",
"point4": "более 50 страниц анализа"
}
},
"v2": {
"title": "Тест на Совместимость",
"subtitle": "Всё начинается с вас! Выберите ваш пол.",
"points": {
"point1": "Тест займмет не более 1 мин.",
"point2": "Ты получишь разбор совместимости по хиромантическому анализу линий на твоей ладони.",
"point3": "Решишь проблемы в отношениях за месяц.",
"point4": "Сэкономишь сотни долларов на ненадёжных прогнозах.",
"point5": "Получишь персональный анализ."
}
}
},
"/birthdate": {
"title": "Когда вы родились?",
"text": "Ваша дата рождения может раскрыть сильные стороны и ценности, которые помогут вам двигаться вперёд."
},
"/palms-information": {
"aries": {
"title": "♈ Овен",
"description": "Совместимость — ключ к гармонии в отношениях, и ваша энергия играет большую роль. По нашим данным, в 81% успешных союзов партнёры Овнов разделяют их страсть к действиям и независимость. Решительность и амбиции определяют, насколько легко вы находите общий язык с партнёром.<br>Как ваш характер влияет на совместимость? Что укрепляет отношения и какие проблемы могут возникнуть? Мы разберем, какие знаки и типы личностей подходят вам лучше всего, и предложим советы по улучшению связи с партнёром."
},
"taurus": {
"title": "♉ Телец",
"description": "Для вас совместимость — это выносливость и стабильность, ведь надёжность в отношениях имеет первостепенное значение. По нашим исследованиям, в 86% гармоничных союзов партнёры Тельцов разделяют их стремление к комфорту и верности. Спокойствие, преданность и терпение делают вас идеальным спутником для длительных отношений.<br>Но с кем вам будет особенно легко, а где могут возникнуть разногласия? Как укреплять связи и избегать недопонимания? Мы тщательно разберём, какие союзы наиболее перспективны для вас и как создать гармонию в отношениях."
},
"gemini": {
"title": "♊ Близнецы",
"description": "Ваша совместимость зависит от динамичности и интеллектуального взаимодействия. Согласно нашим данным, в 78% успешных союзов партнёры Близнецов открыты к переменам, лёгкости и спонтанности. Ваш ум, общительность и жажда новизны делают вас захватывающим спутником, но требуют от партнёра гибкости и готовности поддерживать ваши идеи.<br>С кем ваш союз будет наиболее гармоничным? И какие черты могут стать камнем преткновения? Мы тщательно проанализируем, какие партнёры смогут поддерживать ваш темп и как сделать отношения живыми, но стабильными."
},
"cancer": {
"title": "♋ Рак",
"description": "Ваша совместимость строится на эмоциях, глубокой привязанности и доверии. Согласно нашим данным, в 82% крепких отношений партнёры Раков обладают развитой эмпатией и интуитивным пониманием друг друга. Вы цените заботу, стабильность и эмоциональную близость, что означает, что гармония возможна только с теми, кто сможет разделить ваши чувства.<br>Но какие партнёры больше всего подходят вам? И с кем понимание может быть более сложным? Мы тщательно разберём, какие союзы помогут вам достичь истинной гармонии и как укрепить эмоциональные связи с вашим любимым человеком."
},
"leo": {
"title": "♌ Лев",
"description": "Ваша совместимость основывается на восхищении, страсти и признании. Согласно нашим данным, в 84% счастливых союзов партнёры Львов искренне ими восхищаются и поддерживают их амбиции. Вы стремитесь к ярким и вдохновляющим отношениям, где вас ценят, уважают и не затмевают.<br>Но с кем ваш союз будет наиболее гармоничным? А какие отношения могут привести к борьбе за власть? Мы тщательно проанализируем, какие партнёры вам больше всего подходят и как создать крепкую, но захватывающую связь."
},
"virgo": {
"title": "♍ Дева",
"description": "Ваша совместимость основывается на доверии, стабильности и общем взгляде на жизнь. Согласно нашим наблюдениям, в 79% успешных союзов партнёры Девы ценят предсказуемость, заботу и рациональный подход к отношениям. Вы стремитесь к порядку и гармонии, поэтому идеальный партнёр — тот, кто разделяет ваши ценности и уважает ваше стремление к совершенству.<br>Но с кем ваши отношения будут самыми крепкими? А какие союзы могут потребовать больше компромиссов? Мы тщательно проанализируем, какие партнёры вам больше всего подходят и как создать гармонию в отношениях, не отступая от своих принципов."
},
"libra": {
"title": "♎ Весы",
"description": "Ваша совместимость строится на балансе, честности и умении идти на компромисс. Согласно нашим данным, в 80% успешных союзов партнёры Весов разделяют их стремление к гармонии и открытому диалогу. Вы цените красивые, лёгкие и справедливые отношения, где оба партнёра готовы работать над взаимопониманием.<br>Но кто станет вашим идеальным партнёром? А с кем может быть сложнее найти общий язык? Мы тщательно разберём, какие союзы помогут вам найти истинную гармонию и как построить отношения, где правит баланс."
},
"scorpio": {
"title": "♏ Скорпион",
"description": "Ваша совместимость основывается на страсти, глубине эмоций и абсолютной преданности. Согласно нашим исследованиям, в 83% успешных союзов партнёры Скорпиона обладают такой же эмоциональной интенсивностью, не боясь глубоких связей и полного вовлечения. Вы не выносите поверхностности — ваш партнёр должен быть готов делить с вами как взлёты, так и падения.<br>Но с кем ваша связь будет по-настоящему крепкой? А в каких союзах могут возникнуть проблемы с доверием? Мы тщательно разберём, какие партнёры смогут справиться с вашей эмоциональной интенсивностью и как построить отношения на основе страсти и искренности."
},
"sagittarius": {
"title": "♐ Стрелец",
"description": "Ваша совместимость строится на свободе, приключениях и общем взгляде на жизнь. Согласно нашим данным, в 77% длительных союзов партнёры Стрельцов разделяют их жажду новых впечатлений и открытий. Вы цените лёгкость, оптимизм и независимость, что означает, что вам нужен тот, кто готов идти с вами рядом, не ограничивая свободу.<br>Но с кем ваш союз будет наполнен яркими эмоциями и с кем могут возникнуть разногласия? Мы тщательно проанализируем, какие партнёры идеально подойдут для вас и как построить отношения, где свобода и близость дополняют друг друга."
},
"capricorn": {
"title": "♑ Козерог",
"description": "Ваша совместимость строится на общих целях, надёжности и умении строить прочные отношения. Согласно нашим данным, в 85% счастливых браков партнёры Козерогов поддерживают их стремление к успеху и стабильности. Вы цените преданность, ответственность и долгосрочные перспективы, что означает, что вам нужен партнёр, который разделяет ваши амбиции и готов работать на общее будущее.<br>Но кто станет вашей надёжной опорой и с кем могут возникнуть разногласия? Мы тщательно разберём, какие партнёры помогут вам построить крепкий и стабильный союз, основанный на доверии и уважении."
},
"aquarius": {
"title": "♒ Водолей",
"description": "Ваша совместимость строится на свободе, интеллектуальном обмене и умении уважать индивидуальность друг друга. Согласно нашим исследованиям, в 75% гармоничных союзов партнёры Водолея разделяют стремление к независимости и нестандартный взгляд на жизнь. Вы цените оригинальность, свободу мысли и дружбу в отношениях, поэтому вам нужен партнёр, который не будет вас ограничивать, но будет вдохновлять.<br>Но с кем ваши отношения будут особенно яркими и гармоничными? А какие союзы могут потребовать больше компромиссов? Мы тщательно разберём, какие партнёры идеально подходят вам и как построить отношения, где свобода и близость находятся в идеальном балансе."
},
"pisces": {
"title": "♓ Рыбы",
"description": "Ваша совместимость строится на глубокой эмоциональной связи, интуиции и умении понимать партнёра. Согласно нашим данным, в 84% крепких отношений партнёры Рыб обладают схожей чувствительностью и могут понимать друг друга без слов. Вы цените романтику, эмоциональную близость и тонкие, невидимые нити, связывающие сердца.<br>Но с кем ваш союз будет полон гармонии и какие отношения могут столкнуться с трудностями? Мы тщательно рассмотрим, какие партнёры лучше всего подходят вам и как построить связь на основе доверия, искренности и взаимопонимания."
}
},
"/what-aspects": {
"title": "В каких сферах жизни вы хотите получить более глубокое понимание?",
"answer1": "Любовь и отношения",
"answer2": "Здоровье и энергия",
"answer3": "Карьера и предназначение",
"answer4": "Жизненные перемены"
},
"/relationship-status": {
"title": "Чтобы лучше вас понять, укажите ваш текущий статус отношений",
"answer1": "Не женат",
"answer2": "В отношениях",
"answer3": "Помолвлен",
"answer4": "Разведён"
},
"/element-resonates": {
"title": "Какой элемент наполняет вас энергией больше всего?",
"answer1": "Вода",
"answer2": "Огонь",
"answer3": "Воздух",
"answer4": "Земля",
"answer5": "Свет",
"answer6": "Тьма"
},
"/favorite-color": {
"title": "Какой цвет лучше всего отражает вашу личность?",
"answer1": "Синий",
"answer2": "Зелёный",
"answer3": "Оранжевый",
"answer4": "Фиолетовый",
"answer5": "Красный",
"answer6": "Жёлтый",
"answer7": "Бирюзовый"
},
"/head-or-heart": {
"title": "Что ведёт вас по жизни: зов сердца или голос разума?",
"answer1": "Следую зову сердца",
"answer2": "Полагаться на разум",
"answer3": "Сочетать оба подхода",
"answer4": "Зависит от ситуации"
},
"/relate-following": {
"title": "Насколько важно для вас оправдывать ожидания вашего партнёра?",
"question1": "Очень важно. Партнёр должен знать, что на меня можно положиться.",
"question2": "Я ценю и наслаждаюсь собственной компанией.",
"question3": "Я предпочитаю общаться в компании, чем проводить время в одиночестве.",
"question4": "Я активно стараюсь избегать одиночества.",
"question5": "Я люблю заниматься тем, что могу делать самостоятельно.",
"strongly_agree": "Очень важно",
"strongly_disagree": "Совсем не важно"
},
"/gender-partner": {
"title": "Пол вашего партнёра",
"description": "Выберите пол вашего партнёра для персонализированного астрологического анализа. Звёзды учитывают каждую деталь! ✨",
"already_have_account": "Уже есть аккаунт? Войти"
},
"/birthdate-partner": {
"title": "Дата рождения вашего партнёра?",
"text": "Мы учтём влияние зодиака для более точной оценки совместимости"
},
"/date-event": {
"single": {
"title": "Введите важную для вас дату.",
"text": "💫 Важная дата может помочь раскрыть влияние планет на вашу жизнь и предоставить более персонализированный анализ."
},
"relationship": {
"title": "Введите важную дату, значимую для вас или вашего партнёра.",
"text": "💫 Важная дата может помочь раскрыть влияние планет на ваши отношения и предоставить более персонализированный анализ."
}
},
"/palms-information-partner": {
"aries": {
"title": "♈ Овен",
"description": "Страстный, прямолинейный и инициативный. Быстро влюбляется, действует решительно, но может быть нетерпеливым и ревнивым. Любит быть лидером и жаждет ярких эмоций, ненавидит рутину. Если чувства остывают, уходит без сожалений. Вы образуете интересное сочетание, и нам есть, что вам рассказать!"
},
"taurus": {
"title": "♉ Телец",
"description": "Надёжный, чувственный и верный. В любви движется медленно, но основательно. Ценит стабильность, комфорт и физические отношения. Может быть собственником и неохотно отпускает прошлое. Не переносит предательства и резких перемен. Как сложатся ваши отношения? У нас есть ответы!"
},
"gemini": {
"title": "♊ Близнецы",
"description": "Легкомысленный, общительный и непредсказуемый. Быстро увлекается, но также быстро может потерять интерес. Любит интеллектуальное общение, флирт и свободу. Иногда непостоянен, но с тем, кто сможет удержать его интерес, становится преданным. Каковы ваши шансы на гармонию? Давайте узнаем вместе!"
},
"cancer": {
"title": "♋ Рак",
"description": "Чувствительный, заботливый и верный. Эмоции — их основной элемент. Влюбляется глубоко, но открывается медленно. Может быть уязвимым и нуждается в эмоциональной безопасности. Если разочарован, уходит, но долго переживает это. Какая у вас эмоциональная совместимость? У нас есть ответ!"
},
"leo": {
"title": "♌ Лев",
"description": "Яркий, харизматичный и щедрый. Любит внимание, комплименты и драму. В любви ведёт себя как завоеватель, но требует восхищения и преданности. Может быть эгоцентричным, но предан тем, кто его ценит. Сможете стать настоящей парой с влиянием? Давайте проверим!"
},
"virgo": {
"title": "♍ Дева",
"description": "Рациональный, надёжный и требовательный. В любви осторожен, не спешит открываться. Ценит порядок, честность и глубину. Может быть критичным и сдержанным, но становится верным партнером, когда доверяет. Ваша комбинация может быть невероятно крепкой — давайте узнаем детали!"
},
"libra": {
"title": "♎ Весы",
"description": "Очаровательный, дипломатичный и романтичный. Любит гармонию, изящные ухаживания и интеллектуальные беседы. Может колебаться перед принятием решений, но стремится к равенству и пониманию в отношениях. Какую роль вы сыграете в этой связи? Мы вам расскажем!"
},
"scorpio": {
"title": "♏ Скорпион",
"description": "Глубокий, страстный и магнетический. Любит серьёзно и надолго, но может быть ревнивым и собственником. Доверие и эмоциональная связь жизненно важны, предательство — непростительно. Любит глубоко. Какие секреты таятся в вашем союзе? Мы знаем!"
},
"sagittarius": {
"title": "♐ Стрелец",
"description": "Свободолюбивый, энергичный и оптимистичный. Любит приключения, новизну и независимость. Быстро влюбляется, но не терпит давления. Может избегать обязательств, но становится верным партнёром с тем, кто разделяет его дух свободы. Будет ли ваш союз полон страсти или свободы? Давайте узнаем!"
},
"capricorn": {
"title": "♑ Козерог",
"description": "Сдержанный, целеустремлённый и надёжный. В любви серьёзен и практичен, не любит игры и легкомысленность. Долго присматривается, но строит крепкие, длительные отношения, как только решится. Верный, но может быть слишком строгим. Совместимость с ним может изменить жизнь — хотите узнать больше?"
},
"aquarius": {
"title": "♒ Водолей",
"description": "Оригинальный, независимый и интеллектуальный. Любит свободу, эксперименты и дружбу в отношениях. Может быть эмоционально отстранённым, но с тем, кто разделяет его взгляды, становится верным союзником. Ваша связь с ним может быть нестандартной — давайте исследуем детали!"
},
"pisces": {
"title": "♓ Рыбы",
"description": "Романтичный, интуитивный и мечтательный. Влюбляется глубоко, но может быть подвержен иллюзиям. Ищет духовную связь, нежность и заботу. Может раствориться в партнёре, но при разочаровании оставляет после себя тайну. Будет ли ваш союз магическим или иллюзорным? Мы знаем ответ!\n🔮 Вы образуете уникальное сочетание, и мы можем рассказать вам куда больше! Давайте погрузимся в детали!"
}
},
"/let-scan": {
"title": "Мы сканируем вашу ладонь",
"text": "Следуйте инструкциям на экране, чтобы мы могли проанализировать линии вашей ладони, раскрыв будущее и тайны вашей судьбы!"
},
"/scan-instruction": {
"title": "Сфотографируйте свою ладонь, как показано",
"button": "Сделать фото сейчас"
},
"/email": {
"title": "Введите свой email, чтобы получить подробный анализ совместимости по хиромантии!",
"not_share": "Мы не передаем вашу личную информацию третьим лицам.",
"placeholder_email": "Ваш email",
"placeholder_name": "Ваше имя"
},
"app_number_one": {
"text": "Приложение на <color>, которому доверяют более 25 миллионов человек.",
"color": "#1 в астрологии"
},
"/trial-payment": {
"information-title": "Мы готовы дать вам все ответы, не тратьте годы на сомнения!",
"information-description-single": "Вы когда-нибудь задумывались, почему одни отношения протекают легко, а другие кажутся напряжёнными, как на натянутой верёвке? Совпадение или знак судьбы? <color> есть скрытые знаки в вашей жизни, которые вы ещё не заметили. <eventDescription><br>Получите подробный анализ совместимости и откройте ответы, которые уже записаны в вашей судьбе.",
"information-description-single-color": "<zodiacSign> (<birthdate>)",
"information-description-single-event-description": "Ваша дата <dateEvent> могла быть поворотным моментом или скрытым сигналом.",
"information-description-with-partner": "Вы когда-нибудь задумывались, почему одни отношения протекают легко, а другие кажутся напряжёнными, как на натянутой верёвке? Совпадение или знак судьбы? <color> — два знака, созданные для глубины, но какие секреты скрывает ваш союз? <eventDescription> Получите подробный анализ совместимости и откройте ответы, которые уже записаны в вашей судьбе.",
"information-description-with-partner-color": "<zodiacSign> (<birthdate>) + <partnerZodiacSign> (<partnerBirthdate>)",
"information-description-with-partner-event-description": "Ваша дата <dateEvent> могла быть поворотным моментом или скрытым сигналом.",
"palm_is_ready": {
"title": "Ваше гадание по ладони <color>",
"title_color": "Готово",
"description": "«Я только что получил результаты сканирования вашей ладони. Давайте обсудим!»",
"text1": "<color> 6 лет в гадании по ладони и духовном наставничестве.",
"text1_color": "Акхо",
"text2": "Выберите из более чем 80 гадателей по ладони и астрологов."
},
"joined_today": {
"text1": "Неограниченные чаты с гадателем по ладони",
"text2": "Сегодня присоединилось <count> человек"
},
"get_personal_prediction": "Получите личный прогноз",
"how_work": {
"title": "Как работает AURA?",
"point1_title": "Отправьте нам скан вашей ладони",
"point1_text": "Мы анализируем линии вашей ладони, чтобы получить подсказки о вашем будущем",
"point2_title": "Ваше гадание по ладони готово",
"point2_text": "Один из наших профессиональных хиромантов составляет отчёт, полный подсказок о вашем будущем",
"point3_title": "Начните пробный период, чтобы получить свой прогноз",
"point3_text": "Став участником AURA, мы отправим вам отчёт с предсказанием, чтобы вы могли начать жить лучше.",
"point4_title": "Общайтесь с специалистом по гаданию по ладони в любое время",
"point4_text": "Получайте постоянную поддержку, обсуждая свои гадания, личные гороскопы и совместимости с нашей командой экспертов."
},
"money_back_guarantee": {
"title": "Гарантия возврата денег 100%",
"text": "Если вы не заметите никакого прогресса после использования приложения хотя бы неделю, мы готовы полностью вернуть деньги в течение 14 дней."
},
"begin_trial_now": "Начать пробный период сейчас",
"what_included": {
"title": "Что входит?",
"point1": "<bold> гадания по ладони",
"point1_bold": "Неограниченные",
"point2": "<bold> с профессиональными астрологами",
"point2_bold": "Живые чаты 1:1",
"point3": "<bold> чтения",
"point3_bold": "Ежедневная совместимость",
"point4": "Космические советы по отношениям",
"point5": "Ежедневные гороскопы"
},
"palms_say_about": {
"title": "Что ваши ладони говорят о вас?",
"point1": "<color> показывает ваше отношение к любви и качество любви",
"point1_color": "Линия любви",
"point2": "Длинный большой палец указывает на удачу",
"point3": "<color> отражает ваш интеллект и склад ума",
"point3_color": "Линия головы",
"point4": "Длинный указательный палец указывает на природного лидера",
"point5": "<color> определяет качество вашей жизни и то, чего вы добьётесь",
"point5_color": "Линия жизни",
"point6": "Короткий средний палец раскрывает свободный дух",
"point7": "<color> представляет ваши материальные достижения и карьерные цели",
"point7_color": "Линия судьбы",
"point8": "Длинный безымянный палец показывает склонность человека к риску",
"point9": "Короткий мизинец указывает на нехватку уверенности в себе"
},
"discover_more": "Узнайте больше",
"why_love": "Почему все <color> ?",
"why_love_color": "любят AURA",
"reviews": {
"username1": "Эмма Джонсон",
"tagline1": "\"Это изменило мою жизнь!\"",
"text1": "Раньше у меня все время были неудачные отношения — все начиналось хорошо, но потом все разваливалось. Это было изнурительно, и я начала задумываться, может проблема во мне. Ваш сервис сразу показался другим: вместо общих советов и случайных совпадений я получила точные сведения о том, с кем у меня действительно есть шанс построить что-то серьезное. До сих пор помню, как увидела свой первый анализ совместимости — он был так точен, что я просто поняла: вот оно. Теперь я трачу меньше времени на бессмысленные связи и, наконец, строю отношения, которые в кайф и кажутся правильными.",
"username2": "Оливия Смит",
"tagline2": "\"После многих лет поисков, я наконец нашёл истинную любовь.\"",
"text2": "Я долго сомневалась, действительно ли мы подходим друг другу. Всё казалось в порядке, но иногда мне казалось, что мы просто слишком разные. Я искала ответы в интернете, но всё, что находила, были размытые, противоречивые советы. Чувства были, но были и сомнения. Я просто хотела знать, есть ли у нас будущее вместе, но ничего не давало мне ясного ответа. Потом я наткнулась на вашу услугу, решила попробовать - и так рада, что сделала это. Ваш анализ наших личностей, совместимости и потенциальных сложностей в отношениях идеально совпал с самого начала. И тут меня осенило! Я наконец-то поняла, почему он ведёт себя так, как ведёт, и как построить с ним более крепкие отношения. Ваш 30-дневный пошаговый план уже приносит плоды - между нами больше доверия, и мы меньше ссоримся. Спасибо!",
"username3": "Аманда Холмс",
"tagline3": "\"Я нашла работу, которая мне действительно нравится.\"",
"text3": "Благодаря Владане я наконец-то нашла подсказку о том, в чём на самом деле состоит цель моей жизни и какая работа лучше всего мне подходит!",
"date1": "25 января",
"date2": "1 мес. назад"
},
"success_story": "Станьте историей успеха AURA!",
"as_seen_in": "<color> В СМИ упоминались",
"footer": {
"text1": "Вопросы? Мы здесь, чтобы помочь",
"text2": "Служба поддержки клиентов",
"text3": "Центр помощи"
}
},
"/payment": {
"will_be_charged": "С вас будет списано только <trialInfo>. Сэкономьте <save> сейчас. Затем <splitPrice> в неделю. Мы <emailReminder> перед окончанием пробного периода.",
"will_be_charged_email_reminder": "напомним вам по электронной почте",
"will_be_charged_trial_info": "<trialPrice> за <trialPeriod> пробный период",
"payment_information": {
"personalized_offer": "Персональное предложение зарезервировано",
"title": "Начните свой <trialPeriod> пробный период",
"total_today": "Всего сегодня",
"code_applied_bold": "AURA24",
"code_applied": "Код <bold> применён!"
},
"guarantees": {
"no_commitment": "Без обязательств. Отмените в любое время.",
"30_day_money_back": "30-дневная гарантия возврата денег"
},
"get_personal_prediction": "Получите личный прогноз",
"total_due": "Итого сегодня: <trialPrice>",
"app_number_one_color": "25 миллионов человек.",
"app_number_one": "Приложение №1 в астрологии, которому доверяют более <color>"
},
"/scanned-photo": {
"title": "Ваш углублённый анализ совместимости по хиромантии почти готов!",
"text": "Судя по вашим линиям, вас ждёт захватывающие будущее. Давайте погрузимся во все детали!",
"without-partner": {
"loaders": {
"title-1-1": "Анализируем ваши ключевые черты...",
"title-1-2": "Чтение астрологических параметров...",
"title-2-1": "Вычисляем вашу уникальную таблицу совместимости...",
"title-2-2": "Создаём персонализированную стратегию любви...",
"title-3-1": "Сравнение вас с 1 120 000 возможных астрологических комбинаций...",
"title-3-2": "Проверка точности прогноза — почти готово..."
},
"modals": {
"title-1": "Уточняющий вопрос.",
"description-1": "Заметили ли вы повторяющиеся циклы в своей жизни?",
"answer-1-left": "НЕТ",
"answer-1-right": "ДА",
"title-2": "Уточняющий вопрос.",
"description-2": "Что для вас важнее: судьба или выбор?",
"answer-2-left": "ВЫБОР",
"answer-2-right": "СУДЬБА",
"title-3": "Уточняющий вопрос.",
"description-3": "Верите ли вы, что любовь — это не только случайность?",
"answer-3-left": "НЕТ",
"answer-3-right": "ДА"
}
},
"with-partner": {
"loaders": {
"title-1-1": "Анализируем ключевые черты вас и вашего партнёра...",
"title-1-2": "Чтение астрологических параметров...",
"title-2-1": "Вычисляем вашу уникальную таблицу совместимости...",
"title-2-2": "Проверка ключевых пересечений ваших судеб...",
"title-3-1": "Сравнение вашей пары с 1 120 000 возможных астрологических комбинаций...",
"title-3-2": "Ввод данных: оценка глубины вашей связи — почти готово..."
},
"modals": {
"title-1": "Уточняющий вопрос.",
"description-1": "Заметили ли вы повторяющиеся циклы в вашей жизни?",
"answer-1-left": "НЕТ",
"answer-1-right": "ДА",
"title-2": "Уточняющий вопрос.",
"description-2": "Что для вас важнее: судьба или выбор?",
"answer-2-left": "ВЫБОР",
"answer-2-right": "СУДЬБА",
"title-3": "Уточняющий вопрос.",
"description-3": "Вы считаете, что любовь — это не просто случайность?",
"answer-3-left": "НЕТ",
"answer-3-right": "ДА"
}
},
"palm_lines": {
"head": "Линия головы ✅",
"heart": "Линия любви ✅",
"fate": "Линия судьбы ✅",
"life": "Линия жизни ✅"
}
},
"aura_paywall_palmistry_main": {
"text_0": "Мы помогли миллионам людей раскрыть судьбу их личной жизни и понять, что ждёт их в будущем и что ожидает их семьи.",
"text_1": "Наши затраты на компенсацию команде AURA за пробный период составляют $13.21, но, пожалуйста, выберите сумму, которая вам комфортна."
},
"/skip-trial": {
"title": "Не хочется оглядываться назад?",
"price_per_week": "<price> в неделю",
"billing_period": "Платёжный период",
"billed_amount": "Сумма счёта",
"billed_in_4_weeks": "Счёт выставляется через 4 недели",
"start_trial": {
"every_week": "Каждую неделю",
"start_trial": "Начать пробный период"
},
"skip_trial": {
"save": "сэкономьте <save>%",
"every_4_weeks": "Каждые 4 недели",
"skip_trial": "Принять предложение и пропустить пробный период"
}
},
"/add-consultant": {
"more_for_you": "Больше для вас",
"exclusive_offer": "Исключительное предложение специально для вас, чтобы помочь быстрее достичь ваших целей",
"your_unique_consultation": "Ваша уникальная личная консультация",
"30-minute": "30-минутная приватная консультация с экспертом",
"description": "Вы можете запросить информацию о вашем будущем, проанализировать совместимость по жизни, проверить совместимость в любви и многое другое",
"one_time_price_offer": "Специальная одноразовая цена:",
"original_price": "Оригинальная цена: <oldPrice> <discount>",
"you_will_be_charged": "*Будет взиматься плата за любые дополнительные услуги или предложения, выбранные во время покупки.\n Это единовременный платёж.",
"get_my_consultation": "Получить мою консультацию",
"discount_save": "Сохранить",
"caution": "Внимание!",
"caution_text": "Чтобы избежать двойного списания средств, пожалуйста, не закрывайте страницу и не возвращайтесь назад.",
"unlock_profound": "Откройте глубокие инсайты о своей личности, отношениях, карьерном пути и ключевых моментах жизни с помощью астрологии. Это позволит вам принимать более взвешенные решения и добиваться большего удовлетворения.",
"choose_from": "Выберите из более чем 80 экспертов астрологов."
},
"/camera": {
"bad_photo": "Плохое фото!",
"try_again": "Попробуйте ещё раз",
"do_better": "Можете лучше",
"next": "Дальше",
"no_access_camera": "Нет доступа к камере",
"give_access": "Дать доступ",
"reload_page": "Пожалуйста, перезагрузите страницу, чтобы продолжить.",
"reload_page_button": "Перезагрузить страницу",
"modal": {
"title": "Для того чтобы отсканировать вашу ладонь, необходим доступ к камере.",
"cancel": "Отмена",
"allow": "Разрешить"
}
},
"/with-heart": {
"title": "Ваш выбор естественен. По нашим данным, 52% <gender> <zodiacSign> следуют зову своего сердца. Мы учтём это в анализе вашей ладони на Совместимость с <partnerZodiacSign>!",
"with-partner": {
"title": "Ваш выбор естественен. Согласно нашим данным, 52% <gender> <zodiacSign> следуют зову сердца. Мы учтём это в анализе вашей ладони на совместимость с <partnerZodiacSign>!"
},
"single": {
"title": "Ваш выбор естественен — согласно нашим данным, 51% <gender> под знаком <zodiacSign> следуют зову сердца. Мы учтём это в ваших линиях!"
}
},
"/with-head": {
"title": "Даже среди <zodiacSign> не всё определяется сердцем По нашим данным, 35% <gender> вашего знака принимают решения, основываясь на разуме. Мы учтём этот аспект в вашем анализе совместимости с <partnerZodiacSign>.",
"with-partner": {
"title": "Даже среди <zodiacSign> не все решения принимаются сердцем — по нашим данным, 35% <gender> вашего знака принимают решения, основываясь на разуме. Мы учтём этот аспект в вашем анализе совместимости с <partnerZodiacSign>."
},
"single": {
"title": "Даже среди <zodiacSign> не все решения принимаются сердцем — по нашим данным, 35% <gender> вашего знака принимают решения, основываясь на разуме. Это будет учтено в вашем анализе."
}
},
"/both": {
"title": "Факты говорят сами за себя! Согласно нашим данным, только 15% <gender>, родившихся под знаком <zodiacSign>, в равной степени следуют и разуму, и сердцу. Это секрет гармоничных отношений с <partnerZodiacSign>, и мы учтём это в вашем гадании.",
"with-partner": {
"title": "Факты говорят сами за себя! По нашим данным, только 15% <gender>, рождённых под знаком <zodiacSign>, в равной степени следуют и разуму, и сердцу. Это скрытый секрет гармоничных отношений, и мы учтём эту особенность в вашем анализе совместимости с <partnerZodiacSign>."
},
"single": {
"title": "Факты говорят сами за себя! Согласно нашим данным, только 15% <gender>, рождённых под знаком <zodiacSign>, в равной степени следуют разуму и сердцу. Это скрытый секрет гармоничных отношений, и мы учтём эту особенность в вашем анализе совместимости."
}
},
"/depends": {
"title": "Согласно нашим данным, лишь 9% <gender>, родившихся под знаком <zodiacSign>, обладают исключительной логической ясностью — редким даром. Мы обязательно учтём эту черту в ваших линиях ладони при подготовке анализа Совместимости с <partnerZodiacSign>.",
"with-partner": {
"title": "По нашим данным, только 9% <gender>, рождённых под знаком <zodiacSign>, обладают ясным логическим пониманием — редким даром. Это обязательно будет учтено при анализе вашей совместимости с <partnerZodiacSign>."
},
"single": {
"title": "Согласно нашим данным, только 9% <gender>, рождённых под знаком <zodiacSign>, обладают ясным логическим пониманием — редким даром. Мы обязательно учтём это в вашем анализе совместимости."
}
},
"/romantic-gestures": {
"title": "Как вы относитесь к романтическим жестам?",
"answer1": "Люблю их",
"answer2": "Нейтрально",
"answer3": "Не вижу смысла"
},
"/checking-phone": {
"title": "Как вы относитесь к проверке телефона или сообщений партнёра?",
"answer1": "Категорически против",
"answer2": "Только в крайних случаях",
"answer3": "Нормально отношусь"
},
"zodiac_signs": {
"aries": "Овен",
"taurus": "Телец",
"gemini": "Близнецы",
"cancer": "Рак",
"leo": "Лев",
"virgo": "Дева",
"libra": "Весы",
"scorpio": "Скорпион",
"sagittarius": "Стрелец",
"capricorn": "Козерог",
"aquarius": "Водолей",
"pisces": "Рыбы"
},
"threadId": "thread_LAtY9SFTzZw2CZXuuS2xzyFP",
"assistantId": "asst_fJiWuxpUr4DGkMmqgUPPYZtT",
"/try-app": {
"header": {
"title": "Ваше персонализированное предложение зарезервировано",
"get-prediction-in-app": "Получите предсказание в<br>приложении"
},
"palm_lines": {
"head": "Линия головы ✅",
"heart": "Линия любви ✅",
"fate": "Линия судьбы ✅",
"life": "Линия жизни ✅"
},
"reading_ready": {
"title": "Ваше гадание на совместимость ГОТОВО и доступно в приложении для вашего iPhone!"
},
"your_access_code": "Ваш код доступа",
"copy": "КОПИРОВАТЬ",
"instruction_point_1": "1. Скопируйте ваш код доступа",
"instruction_point_2": "2. Скачайте приложение и введите ваш код доступа",
"not_share_description": "Введите ваш код доступа в приложении, чтобы получить доступ к вашему персонализированному гаданию. Не сообщайте ваш код никому.",
"get_prediction_in_app": "Получите личный прогноз в приложении",
"enter-code-title": "Введите ваш код доступа:",
"code-copied": "Код скопирован",
"copy-code-title": "Кликните, чтобы скопировать код",
"how_work": {
"title": "Как работает AURA?"
},
"get-my-reading-in-app": "ПОЛУЧИТЬ МОЁ ГАДАНИЕ В ПРИЛОЖЕНИИ",
"why_love": "Почему все <color>?",
"why_love_color": "любят AURA",
"as_seen_in": "<color> Как упоминается в",
"instruction_point_3": "3. Введите ваш код доступа в приложении",
"instruction_point_4": "1. Скопируйте ваш код доступа",
"instruction_point_5": "2. Введите свой код доступа в приложении 👇",
"your_palm_reading_is_ready": "Ваше гадание по ладони ГОТОВО",
"your-reading": {
"title": "Ваш Гороскоп",
"subtitle": "Что Вы Получите",
"points": {
"v1": {
"point1": "Анализ вашей привлекательности и скрытых сил, направляющих ваши эмоции.",
"point2": "Личный прогноз на будущее ваших отношений: что вас ждёт впереди.",
"point3": "Вопросы и персональные советы от эксперта.",
"point4": "Уникальные инсайты, которые вы не найдёте в обычных гороскопах.",
"point5": "Полная картина вашей совместимости: процентное соотношение — никаких иллюзий и догадок.",
"point6": "Подробный астрологический разбор того, что вас объединяет и что вызывает напряжение.",
"point7": "Глубокое понимание вашего партнёра: как он любит и что для него важно.",
"point8": "Диаграммы, схемы и объяснения для чёткого понимания динамики ваших отношений."
},
"v2": {
"point1": "Полная картина вашей совместимости: процентное соотношение — никаких иллюзий и догадок.",
"point2": "Подробный астрологический разбор того, что вас объединяет и что вызывает напряжение.",
"point3": "Глубокое понимание вашего партнёра: как он любит и что для него важно.",
"point4": "Диаграммы, схемы и объяснения для чёткого понимания динамики ваших отношений.",
"point5": "Анализ вашей привлекательности и скрытых сил, направляющих ваши эмоции.",
"point6": "Личный прогноз на будущее ваших отношений: что вас ждёт впереди.",
"point7": "Вопросы и персональные советы от эксперта.",
"point8": "Уникальные инсайты, которые вы не найдёте в обычных гороскопах."
}
},
"description": "Чтобы прочитать полный гороскоп, нужно получить доступ через приложение для вашего iPhone"
}
},
"/trial-choice": {
"v1": {
"paragraph1": "AURA — это единственное точное приложение с надежным анализом линии судьбы, проверенное профессионалами и гарантированное для предоставления точных предсказаний.<br><br>AURA уже помогла миллионам людей обрести счастье и узнать всю правду о своих отношениях.<br><br>Ваш анализ судьбы, который полностью изменит вашу жизнь, почти готов! Прежде чем мы предоставим его вам, мы хотели бы предложить вам возможность выбрать сумму, которую вы считаете разумной, чтобы попробовать AURA в течение 7 дней и которая, по вашему мнению, справедлива для изменений, которые произойдут с вами:",
"paragraph2": "7-дневный пробный период обходится нам в <price>, но, пожалуйста, выберите сумму, которая вам наиболее подходит.",
"points": {
"point1": "Вы узнаете все самые сокровенные тайны, которые звезды приготовили для вас, и решите вопросы в отношениях всего за один месяц;",
"point2": "Вы раз и навсегда поставите точку в нерешенных вопросах и забудете о проблемах, которые преследовали вас годами (если не десятилетиями);",
"point3": "Вы сэкономите сотни долларов на фейковых и непрофессиональных астрологических прогнозах и гадалках;",
"point4": "Вы получите не только персональный анализ, но и персонализированные ежедневные гороскопы, узнаете, кто и как истощает вашу энергию, и получите другие персонализированные предсказания."
},
"emails_list": {
"title": "Куплено сегодня: <count>",
"description": "<count> человек покупают сейчас:"
}
},
"trial-text": {
"v0": "Наши расходы на оплату сотрудникам AURA за пробный период составляют <price>, но выберите сумму, которая вам комфортна.",
"v1": "Создание вашего анализа совместимости с помощью специалистов AURA стоило нам <price>. Вы можете выбрать любую сумму, которую вам комфортно внести.",
"v2": "Мы потратили <price> на подготовку вашего уникального отчёта по совместимости вместе с нашей командой AURA. Если захотите поддержать нас выберите сумму, которая вам кажется справедливой.",
"v3": "Ваш анализ совместимости был подготовлен с заботой нашей командой AURA — на это мы потратили <price>. Вы можете поддержать нашу работу выбрав сумму, которая кажется вам справедливой."
},
"description": "AURA — единственное точное приложение с надёжным анализом линии судьбы, подтверждённым профессионалами и гарантирующее точные прогнозы.<br><br>AURA уже помогла миллионам людей найти счастье и узнать всю правду о своих отношениях.<br><br>Ваш анализ судьбы, который полностью изменит вашу жизнь, уже практически готов! Прежде чем мы его вам предоставим, предлагаем выбрать сумму, которую вы считаете разумной, чтобы попробовать AURA в течение <trialPeriod1> и которая кажется вам справедливой за грядущие перемены:<br><br>Вы узнаете все самые сокровенные тайны, которые звёзды приготовили именно вам, и решите вопросы в отношениях всего за месяц;<br><br>Раз и навсегда поставите точку в нерешённых вопросах и забудете о старых проблемах, которые тянутся за вами годами (а то и десятилетиями);<br><br>Сэкономите сотни долларов на фейковых и непрофессиональных астрологических предсказаниях и гадалках;<br><br>Получите не только персональный анализ, но и индивидуальные ежедневные гороскопы, узнаете, кто и как забирает вашу энергию, а также другие персональные расклады.<br><br>Пробный период на <trialPeriod2> обходится нам в <maxTrialPrice>, но выберите сумму, которая подходит именно вам:"
},
"/choose-place": {
"title": "Ваш гороскоп совместимости<br>ГОТОВ",
"subtitle": "<count><br>страниц подробного<br>анализа.",
"subtitle_count": "57",
"description1": "Вы можете купить его или прочитать БЕСПЛАТНО в нашем приложении.",
"description2": "Ваш гороскоп совместимости будет доступен 10 минут, пока не исчезнет.",
"button1": "Купить",
"button2": "Читать БЕСПЛАТНО<br>в приложении"
},
"/code-instruction": {
"instruction_point_1": "1. Скопируйте ваш код доступа",
"instruction_point_2": "2. Скачайте приложение и введите ваш код доступа",
"not_share_description": "Введите свой код доступа в приложение, чтобы получить доступ к вашей персональной интерпретации. Не делитесь своим кодом ни с кем."
},
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -62,20 +62,39 @@
"title": "SAVE <discount>% OFF!",
"instead": "<price> instead <oldPrice>",
"instead-old-price": "of <oldPrice>",
"trial-duration": "<trialDuration>-days trial instead of <oldTrialDuration>",
"old-trial-duration": "<oldTrialDuration> days",
"trial-duration": "<trialPeriod> trial instead of <oldTrialPeriod>",
"discount-offer": "<discount>% off on your Personalized Plan",
"button-trial": "GET <days>-day trial"
"button-trial": "GET <trialPeriod> trial"
},
"secret-discount": {
"title": "You get a secret discount!",
"button-trial": "GET <days>-DAY TRIAL",
"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 the standard rate of <price> every seven days until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"button-trial": "GET {{trialPeriod, uppercase}} TRIAL",
"policy": "By continuing you agree that if you don't cancel prior to the end of the <trialPeriod> trial, you will automatically be charged the standard rate of <price> every <billingPeriod> until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"secret-discount-table_title": "You get a secret discount!",
"secret-discount-table_subtitle": "No pressure. Cancel anytime.",
"secret-discount-table_discount-applied": "Secret discount applied!",
"secret-discount-table_cost-after-trial": "Your cost per <days> days after trial:",
"secret-discount-table_cost-after-trial": "Your cost per <trialPeriod> after trial:",
"secret-discount-table_you-save": "You save <amount>",
"secret-discount-table_total-today": "Total today"
},
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -0,0 +1,304 @@
{
"trial-payment": {
"transform_your_life": "Измени свою жизнь с помощью силы хиромантии — получи свой персональный план уже сегодня",
"get_trial_days": "ПОЛУЧИ <days> дней пробного периода",
"personalized_reading_ready": "Персонализированное чтение по руке готово!",
"hands_reveal_title": "Что ваши руки и пальцы могут рассказать о вас",
"hands_reveal_description": "Ваши руки и пальцы — это личная книга, где каждая линия - это глава вашей жизни.",
"prepare_personalized_plan": "Мы подготовим ваш персональный план",
"aura_users_stories": "Вот несколько историй от пользователей AURA",
"as_featured_in": "Упоминания в СМИ",
"discount_expires": "Скидка закончится через",
"min": "мин",
"sec": "сек",
"payment_table_special_offer": "Специальное предложение",
"payment_table_title": "Персональный план за <price>",
"payment_table_total_today": "Итого сегодня",
"payment_table_cost": "Включая 1-недельное пробное чтение",
"guaranteed_security_payments": "Гарантированная безопасность платежей",
"policy_link": "Политика подписки",
"subscription_policy": "Вы подписываетесь на недельную подписку. Продолжая, вы соглашаетесь с тем, что, если не отмените подписку до окончания <trialDuration>-дневного пробного периода за <trialPrice>, с вас автоматически будет списываться <price> каждую неделю, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата средств по ссылке <policyLink>",
"money_back_guarantee_title": "100% гарантия возврата денег",
"money_back_guarantee_text": "Мы уверены, что поможем вам глубже понять вашего партнера и улучшить взаимоотношения. После множества отзывов довольных клиентов мы готовы вернуть деньги, если этот отчет не окажется полезным. Узнайте больше об ограничениях в нашей политике возврата средств.",
"palms_say_about_point5_color": "Линия жизни",
"palms_say_about_point3_color": "Линия головы",
"palms_say_about_point7_color": "Линия судьбы",
"palms_say_about_point1_color": "Линия любви",
"palms_say_about_point9": "Каждый палец — это столп вашей личности, от лидерства и амбиций до креативности и самовыражения",
"zodiac_sign": "Знак зодиака",
"zodiac_signs_aries": "Овен",
"zodiac_signs_taurus": "Телец",
"zodiac_signs_gemini": "Близнецы",
"zodiac_signs_cancer": "Рак",
"zodiac_signs_leo": "Лев",
"zodiac_signs_virgo": "Дева",
"zodiac_signs_libra": "Весы",
"zodiac_signs_scorpio": "Скорпион",
"zodiac_signs_sagittarius": "Стрелец",
"zodiac_signs_capricorn": "Козерог",
"zodiac_signs_aquarius": "Водолей",
"zodiac_signs_pisces": "Рыбы",
"gender": "Пол",
"male": "Мужской",
"female": "Женский",
"date_of_birth": "Дата рождения",
"place_of_birth": "Место рождения",
"reviews_username1": "Ребекка Бауман",
"reviews_tagline1": "\"Это изменило мою жизнь!\"",
"reviews_text1": "Я благодарен этому приложению и Аххо! Она превосходный хиромант и астролог — ясная, внимательная и успокаивающая. С нетерпением жду новых сессий с ней!",
"reviews_username2": "Мика Райан",
"reviews_tagline2": "\"После долгих поисков я наконец нашел настоящую любовь.\"",
"reviews_text2": "Я сначала сомневался, стоит ли пробовать, но сейчас не жалею и наслаждаюсь своими новыми отношениями!",
"reviews_username3": "Аманда Холмс",
"reviews_tagline3": "\"Я нашел работу, которая мне действительно нравится.\"",
"reviews_text3": "Благодаря Владане я наконец обнаружил, в чем на самом деле заключается мое жизненное предназначение и какая работа подходит мне больше всего!",
"copyright": "<year>, Wit Apps LLC, <br>2108 N ST STE 5446, САКРАМЕНТО, Калифорния, 95816, США",
"palms_say_about_point5": "<color> — это символ жизненной силы, он говорит о вашем здоровье, энергии и страсти к жизни",
"palms_say_about_point3": "<color> отражает ваши интеллектуальные стремления и умственные способности",
"palms_say_about_point7": "<color> раскрывает информацию о вашем финансовом потенциале и отношении к богатству",
"palms_say_about_point1": "<color> может раскрыть тайны вашего романтического пути, отражая желания вашего сердца"
},
"save-off": {
"title": "СЭКОНДИЯ <discount>% ОТ!",
"instead": "<price> вместо <oldPrice>",
"instead-old-price": "вместо <oldPrice>",
"button-trial": "ПОЛУЧИ <trialPeriod> пробного периода",
"trial-duration": "Пробный период теперь длится <trialPeriod> вместо <oldTrialPeriod>.",
"old-trial-duration": "<oldTrialPeriod> дней",
"discount-offer": "Скидка <discount>% на ваш Персонализированный план"
},
"secret-discount": {
"title": "Вы получаете секретную скидку!",
"button-trial": "ПОЛУЧИ {{trialPeriod, uppercase}} ПРОБНЫЙ ПЕРИОД",
"secret-discount-table_title": "Вы получаете секретную скидку!",
"secret-discount-table_subtitle": "Без давления. Можно отменить в любой момент.",
"secret-discount-table_discount-applied": "Секретная скидка применена!",
"secret-discount-table_cost-after-trial": "Ваши расходы за каждые <days> дней после пробного периода:",
"secret-discount-table_you-save": "Вы экономите <amount>",
"secret-discount-table_total-today": "Итого сегодня",
"policy": "Продолжая, вы соглашаетесь с тем, что если не отмените подписку до окончания <trialPeriod> пробного периода, с вас будет автоматически списываться стандартная ставка <price> каждые семь дней, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата в Условиях подписки."
},
"config": "ru.male",
"threadId": "thread_FxqYIOPxkrXXxxngd9KPCSD6",
"assistantId": "asst_fJiWuxpUr4DGkMmqgUPPYZtT",
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

View File

@ -62,20 +62,40 @@
"title": "SAVE <discount>% OFF!",
"instead": "<price> instead <oldPrice>",
"instead-old-price": "of <oldPrice>",
"trial-duration": "<trialDuration>-days trial instead of <oldTrialDuration>",
"trial-duration": "<trialPeriod> trial instead of <oldTrialPeriod>",
"old-trial-duration": "<oldTrialDuration> days",
"discount-offer": "<discount>% off on your Personalized Plan",
"button-trial": "GET <days>-day trial"
"button-trial": "GET <trialPeriod> trial"
},
"secret-discount": {
"title": "You get a secret discount!",
"button-trial": "GET <days>-DAY TRIAL",
"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 the standard rate of <price> every seven days until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"button-trial": "GET {{trialPeriod, uppercase}} TRIAL",
"policy": "By continuing you agree that if you don't cancel prior to the end of the <trialPeriod> trial, you will automatically be charged the standard rate of <price> every seven days until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"secret-discount-table_title": "You get a secret discount!",
"secret-discount-table_subtitle": "No pressure. Cancel anytime.",
"secret-discount-table_discount-applied": "Secret discount applied!",
"secret-discount-table_cost-after-trial": "Your cost per <days> days after trial:",
"secret-discount-table_you-save": "You save <amount>",
"secret-discount-table_total-today": "Total today"
},
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -0,0 +1,304 @@
{
"trial-payment": {
"transform_your_life": "Измени свою жизнь с помощью силы хиромантии — получи свой персональный план уже сегодня",
"get_trial_days": "ПОЛУЧИ <days> дней пробного периода",
"personalized_reading_ready": "Персонализированное чтение по руке готово!",
"hands_reveal_title": "Что ваши руки и пальцы могут рассказать о вас",
"hands_reveal_description": "Ваши руки и пальцы — это личная книга, где каждая линия - это глава вашей жизни.",
"prepare_personalized_plan": "Мы подготовим ваш персональный план",
"aura_users_stories": "Вот несколько историй от пользователей AURA",
"as_featured_in": "Упоминания в СМИ",
"discount_expires": "Скидка закончится через",
"min": "мин",
"sec": "сек",
"payment_table_special_offer": "Специальное предложение",
"payment_table_title": "Персональный план за <price>",
"payment_table_total_today": "Итого сегодня",
"payment_table_cost": "Включая 1-недельное пробное чтение",
"guaranteed_security_payments": "Гарантированная безопасность платежей",
"policy_link": "Политика подписки",
"subscription_policy": "Вы подписываетесь на недельную подписку. Продолжая, вы соглашаетесь с тем, что, если не отмените подписку до окончания <trialDuration>-дневного пробного периода за <trialPrice>, с вас автоматически будет списываться <price> каждую неделю, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата средств по ссылке <policyLink>",
"money_back_guarantee_title": "100% гарантия возврата денег",
"money_back_guarantee_text": "Мы уверены, что поможем вам глубже понять вашего партнера и улучшить взаимоотношения. После множества отзывов довольных клиентов мы готовы вернуть деньги, если этот отчет не окажется полезным. Узнайте больше об ограничениях в нашей политике возврата средств.",
"palms_say_about_point5_color": "Линия жизни",
"palms_say_about_point3_color": "Линия головы",
"palms_say_about_point7_color": "Линия судьбы",
"palms_say_about_point1_color": "Линия любви",
"palms_say_about_point9": "Каждый палец — это столп вашей личности, от лидерства и амбиций до креативности и самовыражения",
"zodiac_sign": "Знак зодиака",
"zodiac_signs_aries": "Овен",
"zodiac_signs_taurus": "Телец",
"zodiac_signs_gemini": "Близнецы",
"zodiac_signs_cancer": "Рак",
"zodiac_signs_leo": "Лев",
"zodiac_signs_virgo": "Дева",
"zodiac_signs_libra": "Весы",
"zodiac_signs_scorpio": "Скорпион",
"zodiac_signs_sagittarius": "Стрелец",
"zodiac_signs_capricorn": "Козерог",
"zodiac_signs_aquarius": "Водолей",
"zodiac_signs_pisces": "Рыбы",
"gender": "Пол",
"male": "Мужской",
"female": "Женский",
"date_of_birth": "Дата рождения",
"place_of_birth": "Место рождения",
"reviews_username1": "Ребекка Бауман",
"reviews_tagline1": "\"Это изменило мою жизнь!\"",
"reviews_text1": "Я благодарен этому приложению и Аххо! Она превосходный хиромант и астролог — ясная, внимательная и успокаивающая. С нетерпением жду новых сессий с ней!",
"reviews_username2": "Мика Райан",
"reviews_tagline2": "\"После долгих поисков я наконец нашел настоящую любовь.\"",
"reviews_text2": "Я сначала сомневался, стоит ли пробовать, но сейчас не жалею и наслаждаюсь своими новыми отношениями!",
"reviews_username3": "Аманда Холмс",
"reviews_tagline3": "\"Я нашел работу, которая мне действительно нравится.\"",
"reviews_text3": "Благодаря Владане я наконец обнаружил, в чем на самом деле заключается мое жизненное предназначение и какая работа подходит мне больше всего!",
"copyright": "<year>, Wit Apps LLC, <br>2108 N ST STE 5446, САКРАМЕНТО, Калифорния, 95816, США",
"palms_say_about_point5": "<color> — это символ жизненной силы, он говорит о вашем здоровье, энергии и страсти к жизни",
"palms_say_about_point3": "<color> отражает ваши интеллектуальные стремления и умственные способности",
"palms_say_about_point7": "<color> раскрывает информацию о вашем финансовом потенциале и отношении к богатству",
"palms_say_about_point1": "<color> может раскрыть тайны вашего романтического пути, отражая желания вашего сердца"
},
"save-off": {
"title": "СЭКОНДИЯ <discount>% ОТ!",
"instead": "<price> вместо <oldPrice>",
"instead-old-price": "вместо <oldPrice>",
"button-trial": "ПОЛУЧИ <trialPeriod> пробного периода",
"trial-duration": "Пробный период теперь длится <trialPeriod> вместо <oldTrialPeriod>.",
"old-trial-duration": "<oldTrialDuration> дней",
"discount-offer": "Скидка <discount>% на ваш Персонализированный план"
},
"secret-discount": {
"title": "Вы получаете секретную скидку!",
"button-trial": "ПОЛУЧИ {{trialPeriod, uppercase}} ПРОБНЫЙ ПЕРИОД",
"secret-discount-table_title": "Вы получаете секретную скидку!",
"secret-discount-table_subtitle": "Без давления. Можно отменить в любой момент.",
"secret-discount-table_discount-applied": "Секретная скидка применена!",
"secret-discount-table_cost-after-trial": "Ваши расходы за каждые <days> дней после пробного периода:",
"secret-discount-table_you-save": "Вы экономите <amount>",
"secret-discount-table_total-today": "Итого сегодня",
"policy": "Продолжая, вы соглашаетесь с тем, что если не отмените подписку до окончания <trialPeriod> пробного периода, с вас будет автоматически списываться стандартная ставка <price> каждые семь дней, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата в Условиях подписки."
},
"config": "ru.male",
"threadId": "thread_FxqYIOPxkrXXxxngd9KPCSD6",
"assistantId": "asst_fJiWuxpUr4DGkMmqgUPPYZtT",
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

View File

@ -62,20 +62,40 @@
"title": "SAVE <discount>% OFF!",
"instead": "<price> instead <oldPrice>",
"instead-old-price": "of <oldPrice>",
"trial-duration": "<trialDuration>-days trial instead of <oldTrialDuration>",
"trial-duration": "<trialPeriod> trial instead of <oldTrialPeriod>",
"old-trial-duration": "<oldTrialDuration> days",
"discount-offer": "<discount>% off on your Personalized Plan",
"button-trial": "GET <days>-day trial"
"button-trial": "GET <trialPeriod> trial"
},
"secret-discount": {
"title": "You get a secret discount!",
"button-trial": "GET <days>-DAY TRIAL",
"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 the standard rate of <price> every seven days until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"button-trial": "GET {{trialPeriod, uppercase}} TRIAL",
"policy": "By continuing you agree that if you don't cancel prior to the end of the <trialPeriod> trial, you will automatically be charged the standard rate of <price> every <billingPeriod> until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"secret-discount-table_title": "You get a secret discount!",
"secret-discount-table_subtitle": "No pressure. Cancel anytime.",
"secret-discount-table_discount-applied": "Secret discount applied!",
"secret-discount-table_cost-after-trial": "Your cost per <days> days after trial:",
"secret-discount-table_you-save": "You save <amount>",
"secret-discount-table_total-today": "Total today"
},
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -0,0 +1,304 @@
{
"trial-payment": {
"transform_your_life": "Измени свою жизнь с помощью силы хиромантии — получи свой персональный план уже сегодня",
"get_trial_days": "ПОЛУЧИ <days> дней пробного периода",
"personalized_reading_ready": "Персонализированное чтение по руке готово!",
"hands_reveal_title": "Что ваши руки и пальцы могут рассказать о вас",
"hands_reveal_description": "Ваши руки и пальцы — это личная книга, где каждая линия - это глава вашей жизни.",
"prepare_personalized_plan": "Мы подготовим ваш персональный план",
"aura_users_stories": "Вот несколько историй от пользователей AURA",
"as_featured_in": "Упоминания в СМИ",
"discount_expires": "Скидка закончится через",
"min": "мин",
"sec": "сек",
"payment_table_special_offer": "Специальное предложение",
"payment_table_title": "Персональный план за <price>",
"payment_table_total_today": "Итого сегодня",
"payment_table_cost": "Включая 1-недельное пробное чтение",
"guaranteed_security_payments": "Гарантированная безопасность платежей",
"policy_link": "Политика подписки",
"subscription_policy": "Вы подписываетесь на недельную подписку. Продолжая, вы соглашаетесь с тем, что, если не отмените подписку до окончания <trialDuration>-дневного пробного периода за <trialPrice>, с вас автоматически будет списываться <price> каждую неделю, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата средств по ссылке <policyLink>",
"money_back_guarantee_title": "100% гарантия возврата денег",
"money_back_guarantee_text": "Мы уверены, что поможем вам глубже понять вашего партнера и улучшить взаимоотношения. После множества отзывов довольных клиентов мы готовы вернуть деньги, если этот отчет не окажется полезным. Узнайте больше об ограничениях в нашей политике возврата средств.",
"palms_say_about_point5_color": "Линия жизни",
"palms_say_about_point3_color": "Линия головы",
"palms_say_about_point7_color": "Линия судьбы",
"palms_say_about_point1_color": "Линия любви",
"palms_say_about_point9": "Каждый палец — это столп вашей личности, от лидерства и амбиций до креативности и самовыражения",
"zodiac_sign": "Знак зодиака",
"zodiac_signs_aries": "Овен",
"zodiac_signs_taurus": "Телец",
"zodiac_signs_gemini": "Близнецы",
"zodiac_signs_cancer": "Рак",
"zodiac_signs_leo": "Лев",
"zodiac_signs_virgo": "Дева",
"zodiac_signs_libra": "Весы",
"zodiac_signs_scorpio": "Скорпион",
"zodiac_signs_sagittarius": "Стрелец",
"zodiac_signs_capricorn": "Козерог",
"zodiac_signs_aquarius": "Водолей",
"zodiac_signs_pisces": "Рыбы",
"gender": "Пол",
"male": "Мужской",
"female": "Женский",
"date_of_birth": "Дата рождения",
"place_of_birth": "Место рождения",
"reviews_username1": "Ребекка Бауман",
"reviews_tagline1": "\"Это изменило мою жизнь!\"",
"reviews_text1": "Я благодарен этому приложению и Аххо! Она превосходный хиромант и астролог — ясная, внимательная и успокаивающая. С нетерпением жду новых сессий с ней!",
"reviews_username2": "Мика Райан",
"reviews_tagline2": "\"После долгих поисков я наконец нашел настоящую любовь.\"",
"reviews_text2": "Я сначала сомневался, стоит ли пробовать, но сейчас не жалею и наслаждаюсь своими новыми отношениями!",
"reviews_username3": "Аманда Холмс",
"reviews_tagline3": "\"Я нашел работу, которая мне действительно нравится.\"",
"reviews_text3": "Благодаря Владане я наконец обнаружил, в чем на самом деле заключается мое жизненное предназначение и какая работа подходит мне больше всего!",
"copyright": "<year>, Wit Apps LLC, <br>2108 N ST STE 5446, САКРАМЕНТО, Калифорния, 95816, США",
"palms_say_about_point5": "<color> — это символ жизненной силы, он говорит о вашем здоровье, энергии и страсти к жизни",
"palms_say_about_point3": "<color> отражает ваши интеллектуальные стремления и умственные способности",
"palms_say_about_point7": "<color> раскрывает информацию о вашем финансовом потенциале и отношении к богатству",
"palms_say_about_point1": "<color> может раскрыть тайны вашего романтического пути, отражая желания вашего сердца"
},
"save-off": {
"title": "СЭКОНДИЯ <discount>% ОТ!",
"instead": "<price> вместо <oldPrice>",
"instead-old-price": "вместо <oldPrice>",
"button-trial": "ПОЛУЧИ <trialPeriod> пробного периода",
"trial-duration": "Пробный период теперь длится <trialPeriod> вместо <oldTrialPeriod>.",
"old-trial-duration": "<oldTrialDuration> дней",
"discount-offer": "Скидка <discount>% на ваш Персонализированный план"
},
"secret-discount": {
"title": "Вы получаете секретную скидку!",
"button-trial": "ПОЛУЧИ {{trialPeriod, uppercase}} ПРОБНЫЙ ПЕРИОД",
"secret-discount-table_title": "Вы получаете секретную скидку!",
"secret-discount-table_subtitle": "Без давления. Можно отменить в любой момент.",
"secret-discount-table_discount-applied": "Секретная скидка применена!",
"secret-discount-table_cost-after-trial": "Ваши расходы за каждые <days> дней после пробного периода:",
"secret-discount-table_you-save": "Вы экономите <amount>",
"secret-discount-table_total-today": "Итого сегодня",
"policy": "Продолжая, вы соглашаетесь с тем, что если не отмените подписку до окончания <trialPeriod> пробного периода, с вас будет автоматически списываться стандартная ставка <price> каждые семь дней, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата в Условиях подписки."
},
"config": "ru.male",
"threadId": "thread_FxqYIOPxkrXXxxngd9KPCSD6",
"assistantId": "asst_fJiWuxpUr4DGkMmqgUPPYZtT",
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

View File

@ -62,19 +62,40 @@
"title": "SAVE <discount>% OFF!",
"instead": "<price> instead <oldPrice>",
"instead-old-price": "of <oldPrice>",
"trial-duration": "<days>-day trial",
"discount-offer": "<discount>% off on your personalized plan",
"button-trial": "GET <days>-day trial"
"trial-duration": "<trialPeriod> trial instead of <oldTrialPeriod>",
"old-trial-duration": "<oldTrialDuration> days",
"discount-offer": "<discount>% off on your Personalized Plan",
"button-trial": "GET <trialPeriod> trial"
},
"secret-discount": {
"title": "You get a secret discount!",
"button-trial": "GET <days>-DAY TRIAL",
"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> for the introductory period of 14 days thereafter the standard rate of <price> every 14 days until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"button-trial": "GET {{trialPeriod, uppercase}} TRIAL",
"policy": "By continuing you agree that if you don't cancel prior to the end of the <trialPeriod> trial, you will automatically be charged the standard rate of <price> every seven days until you cancel in settings. Learn more about cancellation and refund policy in Subscription terms.",
"secret-discount-table_title": "You get a secret discount!",
"secret-discount-table_subtitle": "No pressure. Cancel anytime.",
"secret-discount-table_discount-applied": "Secret discount applied!",
"secret-discount-table_cost-after-trial": "Your cost per <days> days after trial:",
"secret-discount-table_cost-after-trial": "Your cost per <trialPeriod> after trial:",
"secret-discount-table_you-save": "You save <amount>",
"secret-discount-table_total-today": "Total today"
},
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -0,0 +1,304 @@
{
"trial-payment": {
"transform_your_life": "Измени свою жизнь с помощью силы хиромантии — получи свой персональный план уже сегодня",
"get_trial_days": "ПОЛУЧИ <days> дней пробного периода",
"personalized_reading_ready": "Персонализированное чтение по руке готово!",
"hands_reveal_title": "Что ваши руки и пальцы могут рассказать о вас",
"hands_reveal_description": "Ваши руки и пальцы — это личная книга, где каждая линия - это глава вашей жизни.",
"prepare_personalized_plan": "Мы подготовим ваш персональный план",
"aura_users_stories": "Вот несколько историй от пользователей AURA",
"as_featured_in": "Упоминания в СМИ",
"discount_expires": "Скидка закончится через",
"min": "мин",
"sec": "сек",
"payment_table_special_offer": "Специальное предложение",
"payment_table_title": "Персональный план за <price>",
"payment_table_total_today": "Итого сегодня",
"payment_table_cost": "Включая 1-недельное пробное чтение",
"guaranteed_security_payments": "Гарантированная безопасность платежей",
"policy_link": "Политика подписки",
"subscription_policy": "Вы подписываетесь на недельную подписку. Продолжая, вы соглашаетесь с тем, что, если не отмените подписку до окончания <trialDuration>-дневного пробного периода за <trialPrice>, с вас автоматически будет списываться <price> каждую неделю, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата средств по ссылке <policyLink>",
"money_back_guarantee_title": "100% гарантия возврата денег",
"money_back_guarantee_text": "Мы уверены, что поможем вам глубже понять вашего партнера и улучшить взаимоотношения. После множества отзывов довольных клиентов мы готовы вернуть деньги, если этот отчет не окажется полезным. Узнайте больше об ограничениях в нашей политике возврата средств.",
"palms_say_about_point5_color": "Линия жизни",
"palms_say_about_point3_color": "Линия головы",
"palms_say_about_point7_color": "Линия судьбы",
"palms_say_about_point1_color": "Линия любви",
"palms_say_about_point9": "Каждый палец — это столп вашей личности, от лидерства и амбиций до креативности и самовыражения",
"zodiac_sign": "Знак зодиака",
"zodiac_signs_aries": "Овен",
"zodiac_signs_taurus": "Телец",
"zodiac_signs_gemini": "Близнецы",
"zodiac_signs_cancer": "Рак",
"zodiac_signs_leo": "Лев",
"zodiac_signs_virgo": "Дева",
"zodiac_signs_libra": "Весы",
"zodiac_signs_scorpio": "Скорпион",
"zodiac_signs_sagittarius": "Стрелец",
"zodiac_signs_capricorn": "Козерог",
"zodiac_signs_aquarius": "Водолей",
"zodiac_signs_pisces": "Рыбы",
"gender": "Пол",
"male": "Мужской",
"female": "Женский",
"date_of_birth": "Дата рождения",
"place_of_birth": "Место рождения",
"reviews_username1": "Ребекка Бауман",
"reviews_tagline1": "\"Это изменило мою жизнь!\"",
"reviews_text1": "Я благодарен этому приложению и Аххо! Она превосходный хиромант и астролог — ясная, внимательная и успокаивающая. С нетерпением жду новых сессий с ней!",
"reviews_username2": "Мика Райан",
"reviews_tagline2": "\"После долгих поисков я наконец нашел настоящую любовь.\"",
"reviews_text2": "Я сначала сомневался, стоит ли пробовать, но сейчас не жалею и наслаждаюсь своими новыми отношениями!",
"reviews_username3": "Аманда Холмс",
"reviews_tagline3": "\"Я нашел работу, которая мне действительно нравится.\"",
"reviews_text3": "Благодаря Владане я наконец обнаружил, в чем на самом деле заключается мое жизненное предназначение и какая работа подходит мне больше всего!",
"copyright": "<year>, Wit Apps LLC, <br>2108 N ST STE 5446, САКРАМЕНТО, Калифорния, 95816, США",
"palms_say_about_point5": "<color> — это символ жизненной силы, он говорит о вашем здоровье, энергии и страсти к жизни",
"palms_say_about_point3": "<color> отражает ваши интеллектуальные стремления и умственные способности",
"palms_say_about_point7": "<color> раскрывает информацию о вашем финансовом потенциале и отношении к богатству",
"palms_say_about_point1": "<color> может раскрыть тайны вашего романтического пути, отражая желания вашего сердца"
},
"save-off": {
"title": "СЭКОНДИЯ <discount>% ОТ!",
"instead": "<price> вместо <oldPrice>",
"instead-old-price": "вместо <oldPrice>",
"button-trial": "ПОЛУЧИ <trialPeriod> пробного периода",
"trial-duration": "Пробный период теперь длится <trialPeriod> вместо <oldTrialPeriod>.",
"old-trial-duration": "<oldTrialDuration> дней",
"discount-offer": "Скидка <discount>% на ваш Персонализированный план"
},
"secret-discount": {
"title": "Вы получаете секретную скидку!",
"button-trial": "ПОЛУЧИ {{trialPeriod, uppercase}} ПРОБНЫЙ ПЕРИОД",
"secret-discount-table_title": "Вы получаете секретную скидку!",
"secret-discount-table_subtitle": "Без давления. Можно отменить в любой момент.",
"secret-discount-table_discount-applied": "Секретная скидка применена!",
"secret-discount-table_cost-after-trial": "Ваши расходы за каждые <trialPeriod> после пробного периода:",
"secret-discount-table_you-save": "Вы экономите <amount>",
"secret-discount-table_total-today": "Итого сегодня",
"policy": "Продолжая, вы соглашаетесь с тем, что если не отмените подписку до окончания <trialPeriod> пробного периода, с вас будет автоматически списываться стандартная ставка <price> каждые семь дней, пока вы не отмените подписку в настройках. Узнайте больше о политике отмены и возврата в Условиях подписки."
},
"config": "ru.male",
"threadId": "thread_FxqYIOPxkrXXxxngd9KPCSD6",
"assistantId": "asst_fJiWuxpUr4DGkMmqgUPPYZtT",
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

View File

@ -1,4 +1,5 @@
{
"back": "Back",
"next": "Next",
"privacy_policy": "By continuing, you agree to our <eulaLink> and <privacyLink>. Have a question? Reach our support team <clickHere>",
"eula_link": "EULA",
@ -19,10 +20,68 @@
"life": "Life line ✅"
}
},
"/try-app": {
"header": {
"title": "Your Personalized Offer Reserved",
"get-prediction-in-app": "Get prediction in<br>the App"
},
"palm_lines": {
"head": "Head line ✅",
"heart": "Love line ✅",
"fate": "Fate line ✅",
"life": "Life line ✅"
},
"reading_ready": {
"title": "Your Palm Reading is READY and available in the app for your iPhone!"
},
"your_access_code": "Your Access Code",
"copy": "COPY",
"instruction_point_1": "1. Copy Your Access Code",
"instruction_point_2": "2. Download the App",
"instruction_point_3": "3. Enter Your Access Code in the App",
"instruction_point_4": "1. Copy Your Access Code",
"instruction_point_5": "2. Enter Your Access Code in the App 👇",
"your_palm_reading_is_ready": "Your Palm Reading is READY",
"not_share_description": "Enter your access code in the app to access Your Personalized Reading. Do not share your code with anyone.",
"get_prediction_in_app": "Get personal prediction in the App",
"enter-code-title": "Enter Your Access Code:",
"code-copied": "Code copied",
"copy-code-title": "Click to copy code",
"how_work": {
"title": "How does AURA work?"
},
"get-my-reading-in-app": "GET MY READING IN THE APP",
"why_love": "Why does everyone <color> ?",
"why_love_color": "love AURA",
"as_seen_in": "<color> As Seen in "
},
"aura_paywall_palmistry_main": {
"text_0": "We've helped millions of people to reveal the destiny of their love life and what the future holds for them and their families.",
"text_1": "It costs us $13.21 to compensate our AURA\nemployees for the trial, but please choose the\namount you are comfortable with."
},
"/trial-choice": {
"v1": {
"paragraph1": "AURA is the only accurate app with reliable fate line analysis, verified by professionals and guaranteed to provide precise predictions.<br><br>AURA has already helped millions of people find happiness and discover the whole truth about their relationships.<br><br>Your fate analysis, which will completely change your life, is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for 7 days and which you think is fair for the changes that will happen to you:",
"paragraph2": "A 7-day trial period costs us <price>, but please choose the amount that suits you best.",
"points": {
"point1": "You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month;",
"point2": "You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades);",
"point3": "You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers;",
"point4": "You will receive not only a personal analysis but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings."
},
"emails_list": {
"title": "Bought today: <count>",
"description": "<count> people are buying now:"
}
},
"description": "AURA is the only accurate app with reliable fate line analysis, verified by professionals and guaranteed to provide precise predictions.<br><br>AURA has already helped millions of people find happiness and discover the whole truth about their relationships.<br><br>Your fate analysis, which will completely change your life, is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for <trialPeriod1> and which you think is fair for the changes that will happen to you:<br><br>You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month;<br><br>You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades);<br><br>You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers;<br><br>You will receive not only a personal analysis but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings.<br><br>A <trialPeriod2> trial period costs us <maxTrialPrice>, but please choose the amount that suits you best:",
"trial-text": {
"v0": "It costs us <price> to compensate our AURA employees for the trial, but please choose the amount you are comfortable with.",
"v1": "It cost us <price> to create your compatibility analysis with the help of our AURA specialists. Youre welcome to choose any amount youre comfortable contributing.",
"v2": "We spent <price> to prepare your unique compatibility report with support from our AURA team. If youd like to contribute, feel free to choose the amount that feels right to you.",
"v3": "Your compatibility analysis was created with care by our AURA team — it cost us <price> to make it happen. You can support our work by choosing any amount that feels fair to you."
}
},
"skip_trial": "Skip Trial",
"add_consultant": "Add Consultant",
"add_guides": "Add Guides",
@ -61,6 +120,55 @@
"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.",
"choose_from": "Choose from 80+ experts astrologers."
},
"/add-guides": {
"choose_offer": "Choose your sign-up offer 🔥",
"available_only_now": "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.",
"get_my_copy": "Get my copy",
"thank_you": "Thank you!",
"order_successful": "Your order was successful!",
"products": {
"main_ultra_pack": {
"title": "ULTRA PACK",
"discount": "<discount>% OFF",
"description": "(3 in 1 + 2 secret bonus reading)",
"price": "<price> ( regular price <oldPrice> )",
"emoji": "star_struck.webp"
},
"main_numerology_analysis": {
"title": "NUMEROLOGY ANALYSIS",
"discount": "<discount>% OFF",
"price": "<price> ( was <oldPrice> )",
"emoji": "input_numbers.webp"
},
"main_tarot_reading": {
"title": "TAROT READING",
"discount": "<discount>% OFF",
"price": "<price> ( was <oldPrice> )",
"emoji": "sunset.webp"
},
"main_palmistry_guide": {
"title": "PALMISTRY GUIDE",
"discount": "<discount>% OFF",
"price": "<price> ( was <oldPrice> )",
"emoji": "rised_hand.webp"
},
"main_money_reading": {
"title": "MONEY READING",
"discount": "<discount>% OFF",
"price": "<price> ( was <oldPrice> )",
"emoji": "money.png"
},
"main_skip_offer": {
"title": "SKIP OFFER",
"discount": "<discount>% OFF",
"price": "<price> ( was <oldPrice> )",
"description": "You are missing out on both readings",
"emoji": "rised_hand.webp"
}
}
},
"/find-your-happiness": {
"title": "Gain clarity and confidence in life",
"point1": "rated by real users",
@ -139,7 +247,7 @@
"title": "We are scanning your palm",
"text": "Follow the on-screen instructions so we can analyze the lines of your palm, revealing the future and the secrets of your destiny!",
"hands": {
"title": "Сейчас сканируют ладонь <count> человек:"
"title": "They are now scanning the palm of <count> people:"
}
},
"biometric_data": "We do not collect biometric data. The entire recognition process happens on your device.",
@ -160,22 +268,6 @@
"text": "The <color> app trusted by over 25 million people.",
"color": "#1 Astrology"
},
"/trial-choice": {
"v1": {
"paragraph1": "AURA is the only accurate app with reliable fate line analysis, verified by professionals and guaranteed to provide precise predictions.<br><br>AURA has already helped millions of people find happiness and discover the whole truth about their relationships.<br><br>Your fate analysis, which will completely change your life, is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for 7 days and which you think is fair for the changes that will happen to you:",
"paragraph2": "A 7-day trial period costs us <price>, but please choose the amount that suits you best.",
"points": {
"point1": "You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month;",
"point2": "You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades);",
"point3": "You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers;",
"point4": "You will receive not only a personal analysis but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings."
},
"emails_list": {
"title": "Сегодня купили <count>",
"description": "Сейчас покупают <count> человек:"
}
}
},
"/trial-payment": {
"palm_is_ready": {
"title": "Your Palm Reading <color>",
@ -226,10 +318,10 @@
"point3_color": "Head line",
"point4": "A long index finger indicates a natural leader",
"point5": "<color> defines the quality of your life and what you will achieve",
"point5_color": "Live line",
"point5_color": "Life line",
"point6": "A short middle finger reveals a free spirit",
"point7": "<color> represents your material achievement and career goals",
"point7_color": "Money line",
"point7_color": "Fate line",
"point8": "A long ring finger reveals that a person tends to take risks",
"point9": "A short little finger indicates the person's lack of self-confidence"
},
@ -261,10 +353,10 @@
"/payment": {
"will_be_charged": "You will be charged only <trialInfo>. Save <save> now. Then <splitPrice> per week. Well <emailReminder> before your trial ends.",
"will_be_charged_email_reminder": "email you a reminder",
"will_be_charged_trial_info": "<trialPrice> for your <trialDuration>-day trial",
"will_be_charged_trial_info": "<trialPrice> for your <trialPeriod> trial",
"payment_information": {
"personalized_offer": "Personalized offer reserved",
"title": "Start your <trialDuration>-day trial",
"title": "Start your <trialPeriod> trial",
"total_today": "Total today",
"code_applied_bold": "AURA24",
"code_applied": "Code <bold> applied!"
@ -279,7 +371,6 @@
"app_number_one": "The #1 Astrology app trusted by over <color>"
},
"/camera": {
"upload": "Upload",
"bad_photo": "Bad Photo!",
"try_again": "Try Again",
"do_better": "You Can Do Better",
@ -292,7 +383,8 @@
"title": "To scan your hand, access to the Camera is required.",
"cancel": "Cancel",
"allow": "Allow"
}
},
"upload": "Upload"
},
"/with-heart": {
"title": "Your choice is natural—based on our data, 51% of <gender> with the <zodiacSign> sign follow their heart. We'll take this into account in your lines!"
@ -307,39 +399,24 @@
"/depends": {
"title": "Based on our data, only 9% of <gender> born under the <zodiacSign> sign possess a clear logical clarity—a rare gift. We'll certainly take this trait into account in your lines."
},
"/try-app": {
"header": {
"title": "Your Personalized Offer Reserved",
"get-prediction-in-app": "Get prediction in<br>the App"
},
"palm_lines": {
"head": "Head line ✅",
"heart": "Love line ✅",
"fate": "Fate line ✅",
"life": "Life line ✅"
},
"reading_ready": {
"title": "Your Palm Reading is READY and available in the app for your iPhone!"
},
"your_access_code": "Your Access Code",
"copy": "COPY",
"instruction_point_1": "1. Copy Your Access Code",
"instruction_point_2": "2. Download the App",
"instruction_point_3": "3. Enter Your Access Code in the App",
"instruction_point_4": "1. Copy Your Access Code",
"instruction_point_5": "2. Enter Your Access Code in the App 👇",
"your_palm_reading_is_ready": "Your Palm Reading is READY",
"not_share_description": "Enter your access code in the app to access Your Personalized Reading. Do not share your code with anyone.",
"get_prediction_in_app": "Get personal prediction in the App",
"enter-code-title": "Enter Your Access Code:",
"code-copied": "Code copied",
"copy-code-title": "Click to copy code",
"how_work": {
"title": "How does AURA work?"
},
"get-my-reading-in-app": "GET MY READING IN THE APP",
"why_love": "Why does everyone <color> ?",
"why_love_color": "love AURA",
"as_seen_in": "<color> As Seen in "
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -1,56 +1,68 @@
{
"next": "Next",
"/find-your-happiness": {
"title": "Find your happiness with highly-personalized predictions.",
"title": "Обретите ясность и уверенность в жизни",
"point1": "rated by real users",
"point2": "93.4% Accuracy",
"point3": "20m users choice",
"point4": "4.8 satisfaction sco",
"text": "Understand your self and improve relationships with astrology"
"text": "Используйте астрологию и хиромантию, чтобы укрепить себя и свои отношения",
"advantage1": "Глубокий анализ: мы сканируем линии на вашей ладони",
"advantage2": "Индивидуальный подход: анализ личной судьбы и будущего",
"advantage3": "Быстрые результаты: не более 5 минут на завершение"
},
"/gender": {
"title": "Whats your gender?",
"description": "In Palmistry, everyone is a blend of masculine and feminine, so it helps to know yours."
"title": "Какой у вас пол?",
"description": "В хиромантии у каждого человека есть как мужские, так и женские черты. <br><br> Давайте уточним ваши для более точного гадания по руке.",
"already_have_account": "Уже есть аккаунт? Войдите"
},
"/birthdate": {
"title": "Whats your date of birth?",
"text": "Your birth date reveals your core personality traits, needs and desires."
"title": "Когда вы родились?",
"text": "Дата вашего рождения показывает, какие сильные стороны и ценности помогут вам двигаться вперед"
},
"/palms-information": {
"title": "Your palms hold a wealth of information about your fate and personality."
"title": "Ваши ладони несут в себе огромное количество информации о вашей судьбе и характере"
},
"/what-aspects": {
"title": "What aspects of your life do you wish to gain insight into through palmistry?",
"answer1": "Love & Relationships",
"answer2": "Health & Vitality",
"answer3": "Career & Destiny"
"title": "В каких сферах жизни вы хотите получить более глубокое понимание?",
"answer1": "Любовь и отношения",
"answer2": "Здоровье и энергия",
"answer3": "Карьера и предназначение",
"answer4": "Жизненные перемены"
},
"/relationship-status": {
"title": "So we can get to know you better, please tell us your relationship status",
"title": "Чтобы лучше понять вашу сущность, пожалуйста, укажите ваше текущее семейное положение",
"answer1": "Single",
"answer2": "In a relationship"
"answer2": "In a relationship",
"answer3": "Женат",
"answer4": "В разводе",
"answer5": "Все сложно"
},
"/element-resonates": {
"title": "Which element resonates with you most?",
"title": "Какой элемент наполняет вас наибольшей силой?",
"answer1": "Water",
"answer2": "Fire",
"answer3": "Air",
"answer4": "Earth"
"answer4": "Earth",
"answer5": "Свет",
"answer6": "Тьма"
},
"/favorite-color": {
"title": "Which color do you like the most?",
"title": "Какой цвет лучше всего отражает ваш характер?",
"answer1": "Blue",
"answer2": "Green",
"answer3": "Orange",
"answer4": "Violet",
"answer5": "Red",
"answer6": "Yellow"
"answer6": "Yellow",
"answer7": "Бирюзовый"
},
"/head-or-heart": {
"title": "Do you make decisions with your head or your heart?",
"answer1": "Heart",
"answer2": "Head",
"answer3": "Both"
"title": "Что ведет вас по жизни: зов сердца или голос разума?",
"answer1": "Я следую за сердцем",
"answer2": "Я полагаюсь на разум",
"answer3": "Я сочетаю оба подхода",
"answer4": "Все зависит от ситуации"
},
"/relate-following": {
"title": "Do you relate to the following:",
@ -63,17 +75,22 @@
"strongly_disagree": "Strongly Disagree"
},
"/let-scan": {
"title": "Let`s scan your palms",
"text": "Follow the on-screen instructions, so we can analyze your palm lines and reveal your future, and the secrets of your destiny!"
"title": "Мы сканируем вашу ладонь",
"text": "Следуйте инструкциям на экране, чтобы мы могли проанализировать линии вашей ладони, раскрывая будущее и тайны вашей судьбы!",
"hands": {
"title": "Сейчас сканируют ладони <count> человек:"
}
},
"biometric_data": "No biometric data collected. All recognition process performs on your device.",
"biometric_data": "Мы не собираем биометрические данные. Весь процесс распознавания происходит на вашем устройстве.",
"/scan-instruction": {
"title": "Take your palm picture as instructed",
"button": "Take a picture now"
"title": "Сфотографируйте вашу ладонь, как показано",
"button": "Сделать фото сейчас",
"upload_photo": "Загрузить фото ладони",
"error": "Что-то пошло не так. Пожалуйста, попробуйте снова."
},
"/email": {
"title": "Enter your email to get your advanced Palmistry reading with AURA",
"not_share": "We dont share any personal information.",
"title": "Введите свой email, чтобы получить расширенный анализ хиромантии с AURA",
"not_share": "Мы не передаем вашу личную информацию третьим лицам.",
"placeholder_email": "Ваш email",
"placeholder_name": "Ваше имя"
},
@ -145,13 +162,16 @@
"reviews": {
"username1": "Rebecca Bauman",
"tagline1": "\"Its changed my life!\"",
"text1": "I'm thankful for this app and Akho! She's an excellent palm reader and astrologer—clear, thorough, and reassuring. I eagerly look forward to more sessions with her!",
"username2": "Mika Ryan",
"tagline2": "\"After years of seeking, Ive finally found a true love.\"",
"text2": "I was hesitant about whether it was really worth trying, but now I have no regrets and I'm enjoying my new relationships!",
"username3": "Amanda Holmes",
"tagline3": "\"Ive found a job I really enjoy.\"",
"text3": "Thanks to Vladana, I've finally discovered a clue about what my life's purpose really is and what kind of job resonates with me better!"
"date1": "9 января",
"text1": "Много лет я чувствовал себя потерянным, сомневался в каждом решении и никогда полностью не доверял себе. Я пробовал вести дневники, проходить тесты на личность и даже медитировал, но ничего не давало мне настоящих ответов — все казалось поверхностным. Потом я сделал гадание. В тот момент, когда я увидел детальную карту из линий на моих руках, что-то изменилось. Это были не просто расплывчатые описания; это был я — мои силы, мои трудности, мои шаблоны поведений, все как на ладони. Внезапно все стало на свои места. Я понял, почему я продолжаю допускать одни и те же ошибки и на чем на самом деле нужно сосредоточиться. Впервые я чувствую, что я уверен в своих решениях, как будто наконец иду по пути, который принадлежит мне.",
"date2": "1 месяц назад",
"text2": "Чувство застоя давило на меня, заставляя метаться между вариантами. Моё гадание стало настоящим прорывом — анализ линий на правой руке открыл мои сильные стороны и скрытые способности. Прочитав предложение, я увидел себя в каждом слове и понял: это то, что я искал. Теперь я обладаю ясностью и уверенностью, и решения даются легко. Огромное спасибо вашей команде профессионалов — и за бонусное гадание на 2025 год!",
"date3": "1 месяц назад",
"text3": "Я очень чувствительный человек и всегда знал, что способен на большее, но понятия не имел, в каком направлении двигаться. Я пробовал разные курсы, менял работу, но никогда не чувствовал, что нахожусь там, где мне действительно нужно быть. Невозможность определиться с выбором начала на меня давить, вызывая тревогу. Потом я наткнулся на это приложение и решил попробовать. Анализ глубокой и четко выраженной линии судьбы дал мне точные ответы о моих талантах и скрытом потенциале. Когда я увидел, как идеально это совпадает с тем, что я действительно люблю, я ощутил долгожданное чувство ясности. Теперь я знаю, к чему стремлюсь — и что уготовано мне судьбой."
},
"success_story": "Become a AURA Success Story!",
"as_seen_in": "<color> As Seen in",
@ -162,12 +182,12 @@
}
},
"/payment": {
"will_be_charged_trial_info": "<trialPrice> for your <trialDuration>-day trial",
"will_be_charged_email_reminder": "email you a reminder",
"will_be_charged": "You will be charged only <trialInfo>. Then <fullPrice> <trialPrice> per week. Save <save> every week. Well <emailReminder> before your trial ends.",
"will_be_charged_trial_info": "<trialPrice> за ваш <trialPeriod> пробный период",
"will_be_charged_email_reminder": "напомним вам по электронной почте",
"will_be_charged": "С вас будет списана сумма только <trialInfo>. Сэкономьте <save> сейчас. Затем <splitPrice> в неделю. Мы <emailReminder> перед окончанием вашего пробного периода.",
"payment_information": {
"personalized_offer": "Personalized offer reserved",
"title": "Start your <trialDuration>-day trial",
"title": "Start your <trialPeriod> trial",
"total_today": "Total today",
"code_applied_bold": "AURA24",
"code_applied": "Code <bold> applied!"
@ -180,5 +200,378 @@
"total_due": "Total due today: <trialPrice>",
"app_number_one_color": "25 million people.",
"app_number_one": "The #1 Astrology app trusted by over <color>"
},
"v": "v1",
"config": "ru.male",
"/scanned-photo": {
"title": "Ваша подробная гадательная расшифровка почти готова!",
"text": "Судя по линиям на вашей ладони, вас ждет захватывающее будущее. Давайте рассмотрим его поподробнее!",
"palm_lines": {
"head": "Линия ума ✅",
"heart": "Линия любви ✅",
"fate": "Линия судьбы ✅",
"life": "Линия жизни ✅"
}
},
"threadId": "thread_i6Ml4PXdaFyIqydmgwVuT9vF",
"assistantId": "asst_fJiWuxpUr4DGkMmqgUPPYZtT",
"privacy_policy": "Продолжая, вы соглашаетесь с нашими <eulaLink> и <privacyLink>. Есть вопрос? Свяжитесь с нашей службой поддержки <clickHere>",
"eula_link": "Лицензионное соглашение",
"privacy_notice": "Уведомление о конфиденциальности",
"policy_here": "здесь",
"thumb": "Большой палец",
"index_finger": "Указательный палец",
"middle_finger": "Средний палец",
"ring_finger": "Безымянный палец",
"pinky": "Мизинец",
"aura_paywall_palmistry_main": {
"text_0": "Мы помогли миллионам людей раскрыть судьбу их любовной жизни и понять, что их ждет в будущем, а также их семьи.",
"text_1": "Нам стоит $13.21 вознаградить наших сотрудников AURA за пробный период, но, пожалуйста, выберите сумму, которая вам удобна."
},
"skip_trial": "Пропустить пробный период",
"add_consultant": "Добавить консультанта",
"add_guides": "Добавить руководства",
"access_product": "Доступ к продукту",
"thank_you": "Спасибо!",
"order_successful": "Ваш заказ успешно оформлен!",
"/skip-trial": {
"title": "Не собираетесь оглядываться назад?",
"price_per_week": "<price> в неделю",
"billing_period": "Платежный период",
"billed_amount": "Сумма выставленного счета",
"billed_in_4_weeks": "Счет выставлен через 4 недели",
"start_trial": {
"every_week": "Каждую неделю",
"start_trial": "Начать пробный период"
},
"skip_trial": {
"save": "сэкономьте <save>%",
"every_4_weeks": "Каждые 4 недели",
"skip_trial": "Принять предложение и пропустить пробный период"
}
},
"/add-consultant": {
"more_for_you": "Больше для вас",
"exclusive_offer": "Эксклюзивное предложение специально для вас, чтобы быстрее достичь своих целей",
"your_unique_consultation": "Ваша уникальная индивидуальная консультация",
"30-minute": "30-минутная частная консультация с экспертом",
"description": "Вы можете попросить предсказать будущее, провести анализ жизненной совместимости, проверить совместимость в любви и так далее",
"one_time_price_offer": "Специальная одноразовая цена:",
"original_price": "Оригинальная цена: <oldPrice> <discount>",
"you_will_be_charged": "*С вас будет списана плата за дополнительные услуги или предложения, выбранные во время покупки.\n Это одноразовая оплата.",
"get_my_consultation": "Получить мою консультацию",
"discount_save": "Экономия",
"caution": "Осторожно!",
"caution_text": "Чтобы избежать двойного списания, пожалуйста, не закрывайте страницу и не возвращайтесь назад.",
"unlock_profound": "Откройте глубокие инсайты в вашу личность, отношения, карьерный путь и ключевые моменты жизни с помощью астрологии, что позволит вам принимать более взвешенные решения и достигать большего удовлетворения.",
"choose_from": "Выберите из более чем 80 экспертов астрологов."
},
"/camera": {
"bad_photo": "Плохое фото!",
"try_again": "Попробуйте снова",
"do_better": "Можно сделать лучше",
"next": "Далее",
"no_access_camera": "Нет доступа к камере",
"give_access": "Предоставить доступ",
"reload_page": "Пожалуйста, перезагрузите страницу, чтобы продолжить.",
"reload_page_button": "Перезагрузить страницу",
"modal": {
"title": "Для сканирования вашей руки требуется доступ к камере.",
"cancel": "Отмена",
"allow": "Разрешить"
},
"upload": "Загрузить"
},
"/with-heart": {
"title": "Ваш выбор естественен. Согласно нашим данным, 51% <gender> знака <zodiacSign> следуют своему сердцу. Мы учтем это при анализе ваших линий!"
},
"/with-head": {
"title": "Даже среди представителей знака <zodiacSign> не все решения принимаются сердцем — по нашим данным, 35% <gender> вашего знака руководствуются разумом при принятии решений. Мы учтем это в вашем анализе."
},
"/both": {
"wonderful": "Прекрасно!",
"title": "Факты говорят сами за себя! По нашим данным, только 15% <gender>, рожденных под знаком <zodiacSign>, следуют как сердцу, так и разуму в равной степени. Это секрет гармоничных отношений, и мы отразим это в ваших линиях."
},
"/depends": {
"title": "Согласно нашим данным, всего 9% <gender> знака <zodiacSign> обладают ясной логической проницательностью — редкий дар. Мы обязательно учтем эту особенность в вашем анализе."
},
"back": "Назад",
"/trial-choice": {
"v1": {
"paragraph1": "AURA — это единственное точное приложение с надежным анализом линии судьбы, проверенное профессионалами и гарантированное для предоставления точных предсказаний.<br><br>AURA уже помогла миллионам людей обрести счастье и узнать всю правду о своих отношениях.<br><br>Ваш анализ судьбы, который полностью изменит вашу жизнь, почти готов! Прежде чем мы предоставим его вам, мы хотели бы предложить вам возможность выбрать сумму, которую вы считаете разумной, чтобы попробовать AURA в течение 7 дней и которая, по вашему мнению, справедлива для изменений, которые произойдут с вами:",
"paragraph2": "7-дневный пробный период обходится нам в <price>, но, пожалуйста, выберите сумму, которая вам наиболее подходит.",
"points": {
"point1": "Вы узнаете все самые сокровенные тайны, которые звезды приготовили для вас, и решите вопросы в отношениях всего за один месяц;",
"point2": "Вы раз и навсегда поставите точку в нерешенных вопросах и забудете о проблемах, которые преследовали вас годами (если не десятилетиями);",
"point3": "Вы сэкономите сотни долларов на фейковых и непрофессиональных астрологических прогнозах и гадалках;",
"point4": "Вы получите не только персональный анализ, но и персонализированные ежедневные гороскопы, узнаете, кто и как истощает вашу энергию, и получите другие персонализированные предсказания."
},
"emails_list": {
"title": "Куплено сегодня: <count>",
"description": "<count> человек покупают сейчас:"
}
},
"description": "AURA — единственное точное приложение с надёжным анализом линии судьбы, подтверждённым профессионалами и гарантирующее точные прогнозы.<br><br>AURA уже помогла миллионам людей найти счастье и узнать всю правду о своих отношениях.<br><br>Ваш анализ судьбы, который полностью изменит вашу жизнь, уже практически готов! Прежде чем мы его вам предоставим, предлагаем выбрать сумму, которую вы считаете разумной, чтобы попробовать AURA в течение <trialPeriod1> и которая кажется вам справедливой за грядущие перемены:<br><br>Вы узнаете все самые сокровенные тайны, которые звёзды приготовили именно вам, и решите вопросы в отношениях всего за месяц;<br><br>Раз и навсегда поставите точку в нерешённых вопросах и забудете о старых проблемах, которые тянутся за вами годами (а то и десятилетиями);<br><br>Сэкономите сотни долларов на фейковых и непрофессиональных астрологических предсказаниях и гадалках;<br><br>Получите не только персональный анализ, но и индивидуальные ежедневные гороскопы, узнаете, кто и как забирает вашу энергию, а также другие персональные расклады.<br><br>Пробный период на <trialPeriod2> обходится нам в <maxTrialPrice>, но выберите сумму, которая подходит именно вам:",
"trial-text": {
"v0": "Наши расходы на оплату сотрудникам AURA за пробный период составляют <price>, но выберите сумму, которая вам комфортна.",
"v1": "Создание вашего анализа совместимости с помощью специалистов AURA стоило нам <price>. Вы можете выбрать любую сумму, которую вам комфортно внести.",
"v2": "Мы потратили <price> на подготовку вашего уникального отчёта по совместимости вместе с нашей командой AURA. Если захотите поддержать нас выберите сумму, которая вам кажется справедливой.",
"v3": "Ваш анализ совместимости был подготовлен с заботой нашей командой AURA — на это мы потратили <price>. Вы можете поддержать нашу работу выбрав сумму, которая кажется вам справедливой."
}
},
"/try-app": {
"header": {
"title": "Ваше персональное предложение зарезервировано",
"get-prediction-in-app": "Получите прогноз в<br>приложении"
},
"palm_lines": {
"head": "Линия ума ✅",
"heart": "Линия любви ✅",
"fate": "Линия судьбы ✅",
"life": "Линия жизни ✅"
},
"reading_ready": {
"title": "Ваше гадание по ладони ГОТОВО и доступно в приложении для вашего iPhone!"
},
"your_access_code": "Ваш код доступа",
"copy": "КОПИРОВАТЬ",
"not_share_description": "Введите ваш код доступа в приложении, чтобы получить доступ к вашему персонализированному раскладу. Не делитесь вашим кодом ни с кем.",
"get_prediction_in_app": "Получите персональный прогноз в приложении",
"enter-code-title": "Введите ваш код доступа:",
"code-copied": "Код скопирован",
"copy-code-title": "Нажмите, чтобы скопировать код",
"how_work": {
"title": "Как работает AURA?"
},
"get-my-reading-in-app": "ПОЛУЧИТЬ МОЕ РАСКЛАД В ПРИЛОЖЕНИИ",
"why_love": "Почему все любят <color>?",
"why_love_color": "любят AURA",
"as_seen_in": "<color> Как упоминается в",
"instruction_point_1": "1. Скопируйте ваш код доступа",
"instruction_point_2": "2. Загрузите приложение",
"instruction_point_3": "3. Введите ваш код доступа в приложении",
"instruction_point_4": "1. Скопируйте ваш код доступа",
"instruction_point_5": "2. Введите ваш код доступа в приложении 👇",
"your_palm_reading_is_ready": "Ваше гадание по ладони ГОТОВО"
},
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

View File

@ -41,12 +41,30 @@
},
"table": {
"subscription_type": "Subscription Type",
"subscription_type_value": {
"DAY": "Daily Subscription",
"WEEK": "Weekly Subscription",
"MONTH": "Monthly Subscription",
"YEAR": "Yearly Subscription"
},
"subscription_status": "Subscription Status",
"subscription_status_value": {
"ACTIVE": "Active",
"CANCELLED": "Cancels on <date>"
},
"billing_period": "Billing Period",
"billing_period_value": {
"DAY": "Day",
"WEEK": "Week",
"MONTH": "Month",
"YEAR": "Year"
},
"last_payment_on": "Last Payment On",
"renewal_date": "Renewal Date",
"renewal_amount": "Renewal Amount",
"cancel_subscription": "Cancel Subscription"
}
},
"no_subscriptions": "You don't have any subscriptions",
"error": "Something went wrong. Please try again later."
}
}

View File

@ -0,0 +1,93 @@
{
"/cancel-subscription": {
"title": "Жаль, что вы уходите…",
"description": "Многие уходят именно в тот момент, когда астролог начинает видеть поворотную точку в их истории.<br><br>Позвольте задать пару вопросов, чтобы сделать наш сервис лучше - и, возможно, предложить решение, которое больше подходит именно вам.",
"stay_button": "Остаться и уменьшить мой план на 50%",
"cancel_button": "Отменить"
},
"/appreciate-choice": {
"title": "Мы ценим твой выбор!",
"descriptions": {
"1": "Подбираем оптимальное решение...",
"2": "Составляем персонализированный опрос...",
"3": "Формируем выгодное предложение..."
},
"button": "Next"
},
"/stay-50-done": {
"title": "Мы ценим твой выбор!",
"descriptions": {
"1": "План успешно изменен"
},
"button": "Готово"
},
"/what-reason": {
"title": "Что стало причиной?",
"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": "Другое"
}
},
"/second-chance": {
"title": "Дайте нам второй шанс и получи самый лучший план БЕСПЛАТНО",
"offers": {
"1": {
"title": "Бесплатный план на<br>1 месяц",
"description": "Используй весь потенциал AURA и даже больше.",
"old-price": "1900",
"new-price": "0"
},
"2": {
"title": "Бесплатный премиальный план",
"description": "Бесплатная 30 мин консультация с премиальным Эдвайзером",
"old-price": "4900",
"new-price": "0"
}
},
"get_offer": "Получить бесплатный план",
"cancel": "Отменить"
},
"/plan-cancelled": {
"title": "Стандартный план Отменен!",
"icon": "🥳",
"description": "Выполнен переход на бесплатный тридцатидневный план ",
"button": "Готово"
},
"/subscription-stopped": {
"title": "Подписка остановлена успешно!",
"icon": "🎉"
},
"/change-mind": {
"title": "Что может изменить твое мнение?",
"answers": {
"more_chat_time": "Больше времени в чатах",
"more_personal_reports": "Больше персонализированных отчетов",
"individual_plan": "Индивидуальный план",
"other": "Другое"
}
},
"/stop-for-30-days": {
"title": "Остановите подписку на тридцать дней. Никаких списаний.",
"stop": "Остановить",
"cancel": "Отменить"
},
"/cancellation-of-subscription": {
"title": "Подписка аннулируется!",
"description": "Чтобы отменить подписку, нажмите “Подтвердить мои действия”",
"offer": {
"title": "Бесплатный 2-месячный план",
"old-price": "9900",
"new-price": "0"
},
"offer_button": "Применить",
"cancel_button": "Я подтверждаю свои действия"
}
}

View File

@ -13,7 +13,7 @@
"text_1": "Money shouldnt stand in the way of finding astrology guidance that finally works. So, choose an amount that you think is reasonable to try us out for one week.",
"text_2": "It costs us ${maxTrialPrice} to offer a ${trialDuration}-day trial, but please choose the amount you are comfortable with.",
"text_3": "This option will help us support those who need to select the lowest trial prices!",
"text_4": "*Cost of trial as of February 2024",
"text_4": "*Cost of trial as of February 2025",
"text_5": "${quantity} people joined today",
"text_button_1": "See my plan",
"full_price": "6500"
@ -119,14 +119,29 @@
},
"payment_modal": {
"title": "Choose payment method",
"title1": "Payment method",
"credit_card": "Credit Card",
"price_for_days": "<trialPrice> for your <trialDuration>-day trial",
"price_for_days": "<trialPrice> for your <trialPeriod> trial",
"email_reminder": "We`ll email you a reminder",
"description": "You will be charged only <priceForDays>. \n<emailReminder> before your trial period ends. \nCancel anytime. The charge will appear on your bill as witapps.",
"address": "2108 N ST STE 5446 SACRAMENTO, CA 95816",
"form_error": "Проверьте правильность заполнения формы",
"title1": "Payment method",
"price_information": "A <price> charge",
"form_error": "Check that the form is filled out correctly",
"card_type_attention": {
"title": "Attention!",
"description": "Visa cards are temporarily not accepted.<br>Please use Mastercard to complete your payment."
},
"card_type_error": {
"title": "<cardType> cards are not accepted.",
"description": "Please use a MasterCard instead."
},
"card_number": "Card Number",
"expiration_date": "Expiration Date",
"cvv": "CVV",
"pay_now": "Pay Now",
"processing": "Processing...",
"something_went_wrong": "Something went wrong",
"payment_successful": "Payment successful",
"address_form": {
"labels": {
"country": "Country",
@ -227,7 +242,7 @@
"/loading-in-relationship": {
"connecting": "Connecting database...",
"description": "We've helped <peopleCount> other <gender> with their Sun in <zodiacSign> to increase relationship satisfaction and we can't wait to help you too!",
"date": "*as of 24 February 2024"
"date": "*as of 24 February 2025"
},
"/problems": {
"title_parent": "who have children",
@ -482,14 +497,17 @@
"both": "Both"
},
"/with-heart": {
"title": "Based on our data, 49% of <zodiacSign> people also make decisions with their heart. But don't worry, we'll consider that while creating your guidance plan."
"title": "Your choice is natural—based on our data, 51% of <gender> with the <zodiacSign> sign follow their heart. We'll take this into account in your lines!"
},
"/with-head": {
"title": "Based on our data, 39% of <zodiacSign> people also make decisions with their head. But don't worry, we'll consider that while creating your guidance plan."
"title": "Even among <zodiacSign>, not everything is decided by the heart—based on our data, 35% of <gender> of your sign make decisions guided by reason. We'll factor this into your analysis."
},
"/both": {
"wonderful": "Wonderful!",
"title": "<wonderful> \n\nBased on our data, only the top 17% of <zodiacSign> people make decisions with their heart and head. Using both in equal measure is the key to feeling harmonious in your relationships."
"title": "The facts speak for themselves! According to our data, only 15% of <gender> born under the <zodiacSign> sign follow both heart and mind equally. That's the secret to harmonious relationships, and we'll reflect this in your lines."
},
"/depends": {
"title": "Based on our data, only 9% of <gender> born under the <zodiacSign> sign possess a clear logical clarity—a rare gift. We'll certainly take this trait into account in your lines."
},
"/about-us": {
"title": "Where did you hear about us?",
@ -572,7 +590,7 @@
"your_reading": "Your reading",
"content": "Content",
"content_list": {
"point1": "Your horoscope and upcoming events for 2024",
"point1": "Your horoscope and upcoming events for 2025",
"point2": "Your unique strengths and weaknesses and how to get the most out of them",
"point3": "Compatibility with your partner in other areas of your life.",
"point4": "Deep analysis of the relationships with your partner based on a unique birth chart matching system",
@ -702,11 +720,11 @@
},
"/trial-choice": {
"text_variant_1": "AURA is the only accurate app with reliable astrological predictions, verified by professionals and guaranteed to provide accurate astrological forecasts. <br><br> AURA has already helped millions of people find happiness and discover the whole truth about their relationships. <br><br> An astrological forecast that will completely change your life is almost ready! Before we provide it to you, we would like to offer you the opportunity to choose the amount you consider reasonable to try AURA for <trialDuration> days and which you think is fair for the changes that will happen to you: <br><br> - You will discover all the most intimate secrets that the stars have prepared for you and solve relationship issues within just one month; <br> - You will once and for all put the finishing touches on unresolved issues and forget about problems that have been haunting you for years (if not decades); <br> - You will save hundreds of dollars on fake and unprofessional astrological predictions and fortune tellers; <br> - You will receive not only a personal astrological forecast but also personalized daily horoscopes, learn who and how is draining your energy, and get other personalized readings. <br><br> <span>",
"text_variant_1_span": "A <trialDuration>-day trial period costs us $5, but please choose the amount that suits you best:",
"text_variant_1_span": "A <trialDuration>-day trial period costs us $13.76, but please choose the amount that suits you best:",
"text_variant_2": "AURA is the only app you can trust for accurate astrological insights, crafted and verified by seasoned professionals, ensuring you receive predictions that are both reliable and transformative. <br><br> AURA has already transformed the lives of millions, bringing clarity, joy, and a deeper understanding of their relationships. <br><br> Your life-changing astrological forecast is almost ready! But before we reveal the secrets that will change your life, we want to give you the freedom to choose how much you feel is fair to try AURA for <trialDuration> days. This is your chance to decide what the transformation is worth to you: <br><br> - Uncover the deepest, most intimate secrets the stars have in store for you, and watch your relationship issues resolve in just one month; <br> - Finally, put an end to those lingering issues that have been troubling you for years, maybe even decades; <br> - Save hundreds of dollars by avoiding unreliable astrologers and fake fortune tellers; <br> - Receive not just a personal astrological forecast but also personalized daily horoscopes, learn who's draining your energy, and get exclusive, tailored readings. <br><br><span>",
"text_variant_2_span": "While a <trialDuration>-day trial costs us $5, we want you to choose the amount you believe is right for you:",
"text_variant_2_span": "While a <trialDuration>-day trial costs us $13.76, we want you to choose the amount you believe is right for you:",
"text_variant_3": "Discover AURA—the only app that delivers truly accurate astrological forecasts, with predictions you can trust, all verified by top industry professionals. Your path to clarity and happiness starts here. <br><br> Millions have already found happiness and uncovered the truth about their relationships with AURA. Now, its your turn. <br><br> Your life-changing astrological forecast is almost ready! Before we share this powerful insight with you, were giving you the chance to set your own price to experience AURA for <trialDuration> days. You decide what feels right for the life-changing revelations youll receive: <br><br> - Reveal the deepest secrets the universe has in store for you and resolve your relationship dilemmas within a month; <br> - Finally close the chapter on long-standing issues that have plagued you for years, perhaps even decades; <br> - Avoid wasting hundreds of dollars on untrustworthy, fake astrologers; <br> - Gain access to your personal astrological forecast, receive daily personalized horoscopes, learn whos been draining your energy, and benefit from other insightful readings. <br><br><span>",
"text_variant_3_span": "Our <trialDuration>-day trial typically costs us $5, but you get to choose the amount that feels right for you:",
"text_variant_3_span": "Our <trialDuration>-day trial typically costs us $13.76, but you get to choose the amount that feels right for you:",
"button": "Choose an amount that you think is reasonable."
},
"skip_trial": "Skip Trial",
@ -733,5 +751,25 @@
"caution_text": "To prevent double charges please don`t close the page and don`t go back.",
"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.",
"choose_from": "Choose from 80+ experts astrologers."
},
"period": {
"day_one": "{{count}} day",
"day_other": "{{count}} days",
"week_one": "{{count}} week",
"week_other": "{{count}} weeks",
"month_one": "{{count}} month",
"month_other": "{{count}} months",
"year_one": "{{count}} year",
"year_other": "{{count}} years"
},
"period_adjective": {
"day_one": "{{count}}-day",
"day_other": "{{count}}-days",
"week_one": "{{count}}-week",
"week_other": "{{count}}-weeks",
"month_one": "{{count}}-month",
"month_other": "{{count}}-months",
"year_one": "{{count}}-year",
"year_other": "{{count}}-years"
}
}

View File

@ -63,7 +63,7 @@
"text_1": "Деньги не должны становиться преградой на пути к астрологической помощи, которая действительно работает. Поэтому выберите сумму, которую вы считаете разумной, чтобы попробовать нас на одну неделю.",
"text_2": "Нам стоит ${maxTrialPrice}, чтобы предложить пробный период на ${trialDuration} дней, но, пожалуйста, выберите комфортную для вас сумму.",
"text_3": "Этот вариант поможет нам поддержать тех, кому необходимо выбрать наименьшую цену пробного периода!",
"text_4": "*Стоимость пробного периода по состоянию на февраль 2024",
"text_4": "*Стоимость пробного периода по состоянию на февраль 2025",
"text_5": "${quantity} человек присоединились сегодня",
"text_button_1": "Посмотреть мой план",
"full_price": "6500"
@ -127,10 +127,13 @@
"payment_modal": {
"title": "Выберите способ оплаты",
"credit_card": "Кредитная карта",
"price_for_days": "<trialPrice> за ваш <trialDuration>-дневный пробный период",
"price_for_days": "<trialPrice> за ваш <trialPeriod> пробный период",
"email_reminder": "Мы отправим вам напоминание на почту",
"description": "С вас будет списано только <priceForDays>. \n<emailReminder> до окончания пробного периода. \nОтмените в любое время. Списание будет указано в вашей выписке как witapps.",
"address": "2108 N ST STE 5446 SACRAMENTO, CA 95816"
"address": "2108 N ST STE 5446 SACRAMENTO, CA 95816",
"title1": "Способ оплаты",
"price_information": "Плата <price>",
"form_error": "Проверьте, правильно ли заполнена форма"
},
"/gender": {
"title": "Поймите себя и улучшите отношения с помощью астрологии",
@ -209,7 +212,7 @@
"/loading-in-relationship": {
"connecting": "Соединение с базой данных...",
"description": "Мы помогли <peopleCount> другим <gender> с Солнцем в знаке <zodiacSign> повысить удовлетворённость отношениями, и очень хотим помочь вам тоже!",
"date": "*по состоянию на 24 февраля 2024 года"
"date": "*по состоянию на 24 февраля 2025 года"
},
"/problems": {
"title_parent": "у которых есть дети",
@ -460,14 +463,14 @@
"both": "Сочетание и того, и другого"
},
"/with-heart": {
"title": "Согласно нашим данным, 49% людей знака <zodiacSign> также принимают решения сердцем. Но не переживайте, мы учтем это при составлении вашего плана рекомендаций."
"title": "Ваш выбор естественен — согласно нашим данным, 51% <gender> знака <zodiacSign> следуют своему сердцу. Мы учтём это в вашем прогнозе!"
},
"/with-head": {
"title": "Согласно нашим данным, 39% людей знака <zodiacSign> также принимают решения головой. Но не переживайте, мы учтем это при составлении вашего плана рекомендаций."
"title": "Даже среди <zodiacSign>, не всё решается сердцем — согласно нашим данным, 35% <gender> вашего знака принимают решения, руководствуясь разумом. Мы учтём это в вашем анализе."
},
"/both": {
"wonderful": "Замечательно!",
"title": "<wonderful> \n\nСогласно нашим данным, только 17% людей знака <zodiacSign> принимают решения сердцем и головой. Использование обоих в равной степени является ключом к гармоничным отношениям."
"title": "Факты говорят сами за себя! Согласно нашим данным, только 15% <gender>, рождённых под знаком <zodiacSign>, следуют как сердцу, так и разуму в равной степени. Это секрет гармоничных отношений, и мы отразим это в вашем прогнозе."
},
"/about-us": {
"title": "Где вы о нас узнали?",
@ -550,7 +553,7 @@
"your_reading": "Ваш прогноз",
"content": "Содержание",
"content_list": {
"point1": "Ваш гороскоп и предстоящие события на 2024 год",
"point1": "Ваш гороскоп и предстоящие события на 2025 год",
"point2": "Ваши уникальные сильные и слабые стороны и как извлечь из них максимальную пользу",
"point3": "Совместимость с вашим партнёром в других сферах жизни.",
"point4": "Глубокий анализ отношений с вашим партнёром на основе уникальной системы сопоставления натальных карт",
@ -625,7 +628,10 @@
"description": "You are missing out on both readings"
}
},
"description": "*С вас будет списана плата за дополнительные услуги или предложения, выбранные в момент покупки. Это одноразовый платеж."
"description": "*С вас будет списана плата за дополнительные услуги или предложения, выбранные в момент покупки. Это одноразовый платеж.",
"v1": {
"continue": "Продолжить"
}
},
"/unlimited-readings": {
"personal_affirmations": "персональные аффирмации на каждый день",
@ -649,7 +655,8 @@
"one_time_price_offer": "Разовая цена предложения: ",
"original_price": "Оригинальная цена: <oldPrice> Экономьте <discount>%",
"you_will_be_charged": "*С вас будет списана плата за дополнительные услуги или предложения, выбранные в момент покупки.\n Это одноразовый платеж.",
"get_my_consultation": "Получить мою консультацию"
"get_my_consultation": "Получить мою консультацию",
"discount_save": "Сэкономить"
},
"/get-information-partner": {
"title": "Замечательно! Давайте выясним, что работает (а что нет), и начнём с этого.",
@ -675,6 +682,12 @@
"description": "Продолжая, вы соглашаетесь, что если не отмените подписку до конца <trialDuration>-дневного пробного периода, с вас автоматически будет списана сумма <price> за вводный период в 14 дней, а затем стандартная ставка <price> каждые 14 дней до отмены через настройки. Узнайте больше о политике отмены и возврата в Условиях подписки."
},
"/trial-choice": {
"text_variant_1": "AURA — это единственное приложение с точными астрологическими прогнозами, они проверены профессионалами и гарантированно внесут ясность в вашу жизнь. <br><br> AURA уже помогла миллионам людей обрести счастье и узнать всю правду об их отношениях. <br><br> Астрологический прогноз, который полностью изменит вашу жизнь, почти готов! Но перед тем, как мы предоставим его вам, мы хотим предложить вам выбрать сумму, которую вы считаете разумной для использования AURA в течение <trialDuration> дней и которая, по вашему мнению, справедлива за те изменения, что вас ждут: <br><br> - Вы узнаете все самые сокровенные тайны, которые приготовили вам звезды, и решите проблемы в отношениях всего за месяц; <br> - Вы раз и навсегда закроете нерешенные вопросы и забудете о проблемах, которые преследуют вас годами (а может и десятилетиями); <br> - Вы сэкономите сотни долларов на обманщиках и лжегадалках; <br> - Получите не только личный астрологический прогноз, но и персональные ежедневные гороскопы, узнаете, кто и как вас энергетически истощает, а также получите другие индивидуальные прогнозы. <br><br><span>",
"text_variant_1_span": "<trialDuration>-дневный пробный период стоит нам $13.76, но выберите, пожалуйста, ту сумму, которая устроит вас:",
"text_variant_2": "AURA — единственное приложение, которому можно доверять точные астрологические прогнозы, созданные и проверенные опытными профессионалами, чтобы вы получали прогнозы, которые и надежны, и трансформируют. <br><br> AURA уже изменила жизни миллионов, принесла ясность, радость и глубокое понимание их отношений. <br><br> Жизненно важный астрологический прогноз для вас почти готов! Прежде чем мы раскроем секреты, которые изменят вашу жизнь, мы хотим дать вам свободу выбора: какую сумму вы считаете справедливой, чтобы попробовать AURA в течение <trialDuration> дней. Это ваш шанс решить, сколько стоит для вас изменение: <br><br> - Узнайте глубочайшие, самые сокровенные тайны, которые звезды приготовили для вас, и решите проблемы в отношениях всего за месяц; <br> - Наконец, поставьте точку на долгоиграющих проблемах, что мучают вас долгие годы, если не десятилетия; <br> - Сэкономьте сотни долларов, избегая ненадежных астрологов и фальшивых гадалок; <br> - Получите не только личный астрологический прогноз, но и ежедневные персонализированные гороскопы, узнайте, кто вас истощает энергетически, и получите эксклюзивные, индивидуальные консультации. <br><br><span>",
"text_variant_2_span": "Хотя <trialDuration>-дневный пробный период стоит нам $13.76, мы хотим, чтобы вы выбрали сумму, которую считаете для себя правильной:",
"text_variant_3": "Откройте для себя AURA — единственное приложение, которое предоставляет действительно точные астрологические прогнозы, все они проверены ведущими профессионалами отрасли. Ваш путь к ясности и счастью начинается здесь. <br><br> Миллионы уже обрели счастье и разобрались в своих отношениях с помощью AURA. Теперь ваша очередь. <br><br> Ваш жизненно важный астрологический прогноз почти готов! Перед тем как поделиться этой мощной информацией с вами, мы даем вам возможность самостоятельно определить стоимость, чтобы испытать AURA в течение <trialDuration> дней. Вы сами решаете, что вам кажется справедливым за жизненно важные откровения, которые вас ждут: <br><br> - Раскройте самые глубинные тайны, приготовленные вселенной, и решите ваши дилеммы в отношениях в течение месяца; <br> - Наконец, закройте главу о затянувшихся проблемах, что беспокоят вас годами или даже десятилетиями; <br> - Уйдите от траты сотен долларов на ненадежных, фальшивых астрологов; <br> - Получите доступ к вашему личному астрологическому прогнозу, получайте ежедневные персонализированные гороскопы, узнайте, кто вас истощает энергией, и воспользуйтесь другими интуитивными консультациями. <br><br><span>",
"text_variant_3_span": "Наш <trialDuration>-дневный пробный период обычно стоит нам $13.76, но вы можете выбрать ту сумму, которая кажется вам правильной:",
"button": "Выберите сумму, которую считаете разумной."
},
"threadId": "thread_YZqS4aMAHbVxGF227CPF0Nc6",
@ -705,5 +718,229 @@
"caution_text": "To prevent double charges please don`t close the page and don`t go back.",
"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.",
"choose_from": "Choose from 80+ experts astrologers."
},
"/depends": {
"title": "Согласно нашим данным, только 9% <gender>, рождённых под знаком <zodiacSign>, обладают отчётливой логической ясностью — редкий дар. Мы обязательно учтём эту черту в вашем прогнозе."
},
"copyright": "@ <year> Wit Apps LLC, Калифорния, США",
"period": {
"nominative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделя",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"genitive": {
"day_one": "{{count}} дня",
"day_few": "{{count}} дней",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} недели",
"week_few": "{{count}} недель",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяца",
"month_few": "{{count}} месяцев",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} года",
"year_few": "{{count}} лет",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"prepositional": {
"day_one": "{{count}} дне",
"day_few": "{{count}} днях",
"day_many": "{{count}} днях",
"day_other": "{{count}} днях",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделях",
"week_many": "{{count}} неделях",
"week_other": "{{count}} неделях",
"month_one": "{{count}} месяце",
"month_few": "{{count}} месяцах",
"month_many": "{{count}} месяцах",
"month_other": "{{count}} месяцах",
"year_one": "{{count}} годе",
"year_few": "{{count}} годах",
"year_many": "{{count}} годах",
"year_other": "{{count}} годах"
},
"accusative": {
"day_one": "{{count}} день",
"day_few": "{{count}} дня",
"day_many": "{{count}} дней",
"day_other": "{{count}} дней",
"week_one": "{{count}} неделю",
"week_few": "{{count}} недели",
"week_many": "{{count}} недель",
"week_other": "{{count}} недель",
"month_one": "{{count}} месяц",
"month_few": "{{count}} месяца",
"month_many": "{{count}} месяцев",
"month_other": "{{count}} месяцев",
"year_one": "{{count}} год",
"year_few": "{{count}} года",
"year_many": "{{count}} лет",
"year_other": "{{count}} лет"
},
"dative": {
"day_one": "{{count}} дню",
"day_few": "{{count}} дням",
"day_many": "{{count}} дням",
"day_other": "{{count}} дням",
"week_one": "{{count}} неделе",
"week_few": "{{count}} неделям",
"week_many": "{{count}} неделям",
"week_other": "{{count}} неделям",
"month_one": "{{count}} месяцу",
"month_few": "{{count}} месяцам",
"month_many": "{{count}} месяцам",
"month_other": "{{count}} месяцам",
"year_one": "{{count}} году",
"year_few": "{{count}} годам",
"year_many": "{{count}} годам",
"year_other": "{{count}} годам"
},
"instrumental": {
"day_one": "{{count}} днём",
"day_few": "{{count}} днями",
"day_many": "{{count}} днями",
"day_other": "{{count}} днями",
"week_one": "{{count}} неделей",
"week_few": "{{count}} неделями",
"week_many": "{{count}} неделями",
"week_other": "{{count}} неделями",
"month_one": "{{count}} месяцем",
"month_few": "{{count}} месяцами",
"month_many": "{{count}} месяцами",
"month_other": "{{count}} месяцами",
"year_one": "{{count}} годом",
"year_few": "{{count}} годами",
"year_many": "{{count}} годами",
"year_other": "{{count}} годами"
}
},
"period_adjective": {
"nominative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"genitive": {
"day_one": "{{count}}-дневного",
"day_few": "{{count}}-дневного",
"day_many": "{{count}}-дневного",
"day_other": "{{count}}-дневного",
"week_one": "{{count}}-недельного",
"week_few": "{{count}}-недельного",
"week_many": "{{count}}-недельного",
"week_other": "{{count}}-недельного",
"month_one": "{{count}}-месячного",
"month_few": "{{count}}-месячного",
"month_many": "{{count}}-месячного",
"month_other": "{{count}}-месячного",
"year_one": "{{count}}-годового",
"year_few": "{{count}}-годового",
"year_many": "{{count}}-годового",
"year_other": "{{count}}-годового"
},
"prepositional": {
"day_one": "{{count}}-дневном",
"day_few": "{{count}}-дневном",
"day_many": "{{count}}-дневном",
"day_other": "{{count}}-дневном",
"week_one": "{{count}}-недельном",
"week_few": "{{count}}-недельном",
"week_many": "{{count}}-недельном",
"week_other": "{{count}}-недельном",
"month_one": "{{count}}-месячном",
"month_few": "{{count}}-месячном",
"month_many": "{{count}}-месячном",
"month_other": "{{count}}-месячном",
"year_one": "{{count}}-годовом",
"year_few": "{{count}}-годовом",
"year_many": "{{count}}-годовом",
"year_other": "{{count}}-годовом"
},
"accusative": {
"day_one": "{{count}}-дневный",
"day_few": "{{count}}-дневный",
"day_many": "{{count}}-дневный",
"day_other": "{{count}}-дневный",
"week_one": "{{count}}-недельный",
"week_few": "{{count}}-недельный",
"week_many": "{{count}}-недельный",
"week_other": "{{count}}-недельный",
"month_one": "{{count}}-месячный",
"month_few": "{{count}}-месячный",
"month_many": "{{count}}-месячный",
"month_other": "{{count}}-месячный",
"year_one": "{{count}}-годовой",
"year_few": "{{count}}-годовой",
"year_many": "{{count}}-годовой",
"year_other": "{{count}}-годовой"
},
"dative": {
"day_one": "{{count}}-дневному",
"day_few": "{{count}}-дневному",
"day_many": "{{count}}-дневному",
"day_other": "{{count}}-дневному",
"week_one": "{{count}}-недельному",
"week_few": "{{count}}-недельному",
"week_many": "{{count}}-недельному",
"week_other": "{{count}}-недельному",
"month_one": "{{count}}-месячному",
"month_few": "{{count}}-месячному",
"month_many": "{{count}}-месячному",
"month_other": "{{count}}-месячному",
"year_one": "{{count}}-годовому",
"year_few": "{{count}}-годовому",
"year_many": "{{count}}-годовому",
"year_other": "{{count}}-годовому"
},
"instrumental": {
"day_one": "{{count}}-дневным",
"day_few": "{{count}}-дневным",
"day_many": "{{count}}-дневным",
"day_other": "{{count}}-дневным",
"week_one": "{{count}}-недельным",
"week_few": "{{count}}-недельным",
"week_many": "{{count}}-недельным",
"week_other": "{{count}}-недельным",
"month_one": "{{count}}-месячным",
"month_few": "{{count}}-месячным",
"month_many": "{{count}}-месячным",
"month_other": "{{count}}-месячным",
"year_one": "{{count}}-годовым",
"year_few": "{{count}}-годовым",
"year_many": "{{count}}-годовым",
"year_other": "{{count}}-годовым"
}
}
}

BIN
public/money.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -1 +1 @@
{"data":{"subscription_popup":true,"locale":"en","alerts":{},"version":"5.0","apple_music_api":{"jwt":"eyJhbGciOiJFUzI1NiIsImtpZCI6IlRSUDZXTUtERFYifQ.eyJpc3MiOiJLVEFMQTg4WkNSIiwiaWF0IjoxNzM2OTUyODM3LCJleHAiOjE3MzcwODI0Mzd9.0XjbuMOZ_7EcejBb5WEQxWH0tAkd1VqbbFJnYDDaKgpoLBd2fM7nYYHEOugKnmfWaJJt-OguJpmKI6opG1ilPg"},"chargebee":{"site":"kefirapp-test","publishableKey":"test_VtWSamZEfP175nqGZhkD0uvoouHieElv"},"first_open_subscription_popup":true,"runs_before_subscription_popup":0,"stripe_public_key":"pk_live_51Ndqf4IlX4lgwUxrdyEW5BKH30OLEYemyVj3XFqi3RNx3K149o0jNQEswuIutBXNQ4CeqJuODh6OMT9I3r1fq3VT00ncnJjWov","smartlook_manage":false,"appirater_alerts":[],"active_iaps":[{"bundle_id":"auraweb.yearlymembership","active":true,"subscription_type":"yearly"},{"bundle_id":"auraweb.weeklymembership","active":true,"subscription_type":"trial"},{"bundle_id":"auraweb.weekmembership","active":true,"subscription_type":"trial"},{"bundle_id":"auraweb.monthlymembership","active":true,"subscription_type":"monthly"}]}}
{"data":{"subscription_popup":true,"locale":"en","alerts":{},"version":"5.0","apple_music_api":{"jwt":"eyJhbGciOiJFUzI1NiIsImtpZCI6IlRSUDZXTUtERFYifQ.eyJpc3MiOiJLVEFMQTg4WkNSIiwiaWF0IjoxNzM2OTUyODM3LCJleHAiOjE3MzcwODI0Mzd9.0XjbuMOZ_7EcejBb5WEQxWH0tAkd1VqbbFJnYDDaKgpoLBd2fM7nYYHEOugKnmfWaJJt-OguJpmKI6opG1ilPg"},"chargebee":{"site":"kefirapp-test","publishableKey":"test_VtWSamZEfP175nqGZhkD0uvoouHieElv"},"first_open_subscription_popup":true,"runs_before_subscription_popup":0,"smartlook_manage":false,"appirater_alerts":[],"active_iaps":[{"bundle_id":"auraweb.yearlymembership","active":true,"subscription_type":"yearly"},{"bundle_id":"auraweb.weeklymembership","active":true,"subscription_type":"trial"},{"bundle_id":"auraweb.weekmembership","active":true,"subscription_type":"trial"},{"bundle_id":"auraweb.monthlymembership","active":true,"subscription_type":"monthly"}]}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

View File

@ -31,7 +31,8 @@ import {
Password,
ChatsCategories,
ChatMessages,
CreateChat
CreateChat,
UserSubscriptions
} from './resources'
const api = {
@ -47,11 +48,6 @@ const api = {
getAssetCategories: createMethod<AssetCategories.Payload, AssetCategories.Response>(AssetCategories.createRequest),
getDailyForecasts: createMethod<DailyForecasts.Payload, DailyForecasts.Response>(DailyForecasts.createRequest),
getAuras: createMethod<Auras.Payload, Auras.Response>(Auras.createRequest),
// getSubscriptionPlans: createMethod<SubscriptionPlans.Payload, SubscriptionPlans.Response>(SubscriptionPlans.createRequest),
// getSubscriptionCheckout: createMethod<SubscriptionCheckout.Payload, SubscriptionCheckout.Response>(SubscriptionCheckout.createRequest),
getSubscriptionStatus: createMethod<SubscriptionStatus.Payload, SubscriptionStatus.Response>(SubscriptionStatus.createRequest),
// new get subscription status
getSubscriptionStatusNew: createMethod<SubscriptionStatus.Payload, SubscriptionStatus.ResponseNew>(SubscriptionStatus.createRequestNew),
getAiCompatCategories: createMethod<AICompatCategories.Payload, AICompatCategories.Response>(AICompatCategories.createRequest),
getAiCompat: createMethod<AICompats.Payload, AICompats.Response>(AICompats.createRequest),
getAiRequest: createMethod<AIRequests.Payload, AIRequests.Response>(AIRequests.createRequest),
@ -98,10 +94,19 @@ const api = {
updateSession: createMethod<Session.PayloadUpdate, Session.ResponseUpdate>(Session.updateRequest),
getLocaleTranslations: createMethod<Session.PayloadGetLocale, Session.ResponseGetLocale>(Session.getLocaleRequest),
getPixels: createMethod<Session.PayloadGetPixels, Session.ResponseGetPixels>(Session.getPixelsRequest),
getFunnel: createMethod<Session.PayloadGetFunnel, Session.ResponseGetFunnel>(Session.getFunnelRequest),
// Chats
getChatsCategories: createMethod<null, ChatsCategories.ResponseGet>(ChatsCategories.getRequest),
getChatMessages: createMethod<ChatMessages.Payload, ChatMessages.ResponseGet>(ChatMessages.getRequest),
createChat: createMethod<CreateChat.Payload, CreateChat.ResponseGet>(CreateChat.createRequest)
createChat: createMethod<CreateChat.Payload, CreateChat.ResponseGet>(CreateChat.createRequest),
// Subscriptions
// getSubscriptionPlans: createMethod<SubscriptionPlans.Payload, SubscriptionPlans.Response>(SubscriptionPlans.createRequest),
// getSubscriptionCheckout: createMethod<SubscriptionCheckout.Payload, SubscriptionCheckout.Response>(SubscriptionCheckout.createRequest),
getSubscriptionStatus: createMethod<SubscriptionStatus.Payload, SubscriptionStatus.Response>(SubscriptionStatus.createRequest),
// new get subscription status
getSubscriptionStatusNew: createMethod<SubscriptionStatus.Payload, SubscriptionStatus.ResponseNew>(SubscriptionStatus.createRequestNew),
getUserSubscriptions: createMethod<UserSubscriptions.Payload, UserSubscriptions.ResponseGet>(UserSubscriptions.createRequestGet),
userSubscriptionAction: createMethod<UserSubscriptions.PayloadAction, UserSubscriptions.ResponseAction>(UserSubscriptions.createRequestAction),
}
export type ApiContextValue = typeof api

View File

@ -16,7 +16,7 @@ export interface Response {
first_open_subscription_popup: boolean
runs_before_subscription_popup: number
appirater_alerts: AppiraterAlertAppiraterAlert[]
stripe_public_key: string
// stripe_public_key: string
smartlook_manage: boolean
}
}

View File

@ -1,8 +1,10 @@
import routes from "@/routes";
import { getBaseHeaders } from "../utils";
import { getAuthHeaders, getBaseHeaders } from "../utils";
import { IUTM } from "@/store/utm";
import { ICreateAuthorizeUser } from "./User";
import { ELocalesPlacement } from "@/locales";
import { Currency } from "@/components/PaymentTable/Price";
import { PeriodType } from "@/hooks/translations";
export interface PayloadCreate {
feature: string, // Type: string
@ -157,6 +159,46 @@ export interface ResponseGetPixels {
}
}
export interface ResponseGetFunnel {
status: "success" | string;
data: IFunnel;
}
export interface IFunnel {
currency: Currency,
funnel: ELocalesPlacement,
locale: string,
payment: Record<string, IFunnelPaymentPlacement | null>
}
export interface IFunnelPaymentProperty {
key: string,
value: string | number
}
export interface IFunnelPaymentVariant {
id: string,
key: string,
type: string,
price: number,
oldPrice?: number,
trialPrice?: number
}
export interface IFunnelPaymentPlacement {
price?: number,
currency?: Currency,
billingPeriod?: PeriodType,
billingInterval?: number,
trialPeriod?: PeriodType,
trialInterval?: number,
placementId?: string,
paywallId?: string,
properties?: IFunnelPaymentProperty[],
variants?: IFunnelPaymentVariant[],
paymentUrl?: string
}
export const createRequest = (data: PayloadCreate) => {
const url = new URL(routes.server.createSession());
const body = JSON.stringify(data);
@ -198,6 +240,11 @@ export interface PayloadGetPixels {
locale: string;
}
export interface PayloadGetFunnel {
funnel: ELocalesPlacement;
token: string;
}
export const getPixelsRequest = ({ domain, source, locale }: PayloadGetPixels) => {
const url = new URL(routes.server.getPixels());
const query = new URLSearchParams({
@ -211,3 +258,14 @@ export const getPixelsRequest = ({ domain, source, locale }: PayloadGetPixels) =
headers: getBaseHeaders()
});
};
export const getFunnelRequest = ({ funnel, token }: PayloadGetFunnel) => {
const url = new URL(routes.server.getFunnel());
const body = JSON.stringify({ funnel });
return new Request(url, {
method: "POST",
body,
headers: getAuthHeaders(token)
});
};

View File

@ -251,7 +251,7 @@ export interface IUser {
password: string;
externalId: string;
klaviyoId: string;
stripeId: string | null;
// stripeId: string | null;
assistants: string[];
createdAt: string;
updatedAt: string;

View File

@ -0,0 +1,49 @@
import routes from "@/routes"
import { AuthPayload } from "../types"
import { getAuthHeaders } from "../utils"
import { Currency } from "@/components/PaymentTable"
export type Payload = AuthPayload
type SubscriptionType = "DAY" | "WEEK" | "MONTH" | "YEAR"
type SubscriptionStatus = "ACTIVE" | "CANCELLED"
type Date = string | null
export interface UserSubscription {
id: string,
subscriptionType: SubscriptionType,
subscriptionStatus: SubscriptionStatus,
billingPeriod: SubscriptionType,
lastPaymentOn: Date,
renewalDate: Date,
renewalAmount: number,
currency: keyof typeof Currency,
cancellationDate: Date
}
export interface ResponseGet {
status: "success" | string;
data: UserSubscription[];
}
export const createRequestGet = ({ token }: Payload): Request => {
const url = new URL(routes.server.userSubscriptions())
return new Request(url, { method: 'GET', headers: getAuthHeaders(token) })
}
export type UserSubscriptionAction = "cancel" | "discount_50" | "pause_30" | "pause_60" | "free_chat_30"
export interface PayloadAction extends AuthPayload {
subscriptionId: string;
action: UserSubscriptionAction;
}
export interface ResponseAction {
status: "success" | string;
data: PayloadAction;
}
export const createRequestAction = ({ token, subscriptionId, action }: PayloadAction): Request => {
const url = new URL(routes.server.userSubscriptionAction(subscriptionId, action))
return new Request(url, { method: 'POST', headers: getAuthHeaders(token) })
}

View File

@ -30,3 +30,4 @@ export * as Password from "./Password";
export * as ChatsCategories from "./ChatsCategories";
export * as ChatMessages from "./ChatMessages";
export * as CreateChat from "./CreateChat";
export * as UserSubscriptions from "./UserSubscriptions";

View File

@ -18,7 +18,7 @@ export function useApiCall<T>(
const [data, setData] = useState<T | null>(null)
const [error, setError] = useState<ApiError | null>(null)
const [state, setState] = useState<ApiCallState>(startState)
const isPending = state === 'pending'
const isPending = state === 'pending' || state === 'idle'
useEffect(() => {
setState('pending')

View File

@ -1,21 +1,22 @@
import PaymentPage from "@/components/Payment/nmi/PaymentPage";
import styles from "./styles.module.scss";
import { EPlacementKeys } from "@/api/resources/Paywall";
import routes from "@/routes";
import { actions, selectors } from "@/store";
import { useEffect, useState } from "react";
import { ESourceAuthorization } from "@/api/resources/User";
import { useSession } from "@/hooks/session/useSession";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { useLocation, useNavigate } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import Loader, { LoaderColor } from "@/components/Loader";
import { ELocalesPlacement } from "@/locales";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function AnonymousPaymentPage() {
const dispatch = useDispatch();
const navigate = useNavigate();
const { products } = usePaywall({
placementKey: EPlacementKeys["aura.placement.payment"]
const { products } = useFunnel({
funnel: ELocalesPlacement.EmailGenerator,
paymentPlacement: "TODO:FUNNEL"
});
const activeProduct = products[0];
const activeProductFromStore = useSelector(selectors.selectActiveProduct)
@ -72,7 +73,9 @@ function AnonymousPaymentPage() {
<div className={styles.container}>
{!!activeProductFromStore && session?.["aura.test.payment"]?.length ?
<PaymentPage
placementKey={EPlacementKeys["aura.placement.payment"]}
// placementKey={EPlacementKeys["aura.placement.payment"]}
funnel={ELocalesPlacement.EmailGenerator}
paymentPlacement="TODO:FUNNEL"
onError={onPaymentError}
onSuccess={onPaymentSuccess}
isBackButtonVisible={false}

View File

@ -41,6 +41,7 @@ import routes, {
hasNoFooter,
hasNavigation,
profilePrefix,
retainingFunnelPrefix,
} from "@/routes";
import BirthdayPage from "../BirthdayPage";
import BirthtimePage from "../BirthtimePage";
@ -157,6 +158,8 @@ import { getSourceByPathname } from "@/utils/source.utils";
import "../palmistry/palmistry-container/palmistry-container.css"
import ProfileRoutes from "@/routerComponents/Profile";
import RetainingFunnelRoutes from "@/routerComponents/RetainingFunnel";
import { ELocalesPlacement } from "@/locales";
const isProduction = import.meta.env.MODE === "production";
const gaMeasurementId = import.meta.env.AURA_GA_MEASUREMENT_ID;
@ -331,6 +334,10 @@ function App(): JSX.Element {
path={`${profilePrefix}/*`}
element={<ProfileRoutes />}
/>
<Route
path={`${retainingFunnelPrefix}/*`}
element={<RetainingFunnelRoutes />}
/>
<Route
path={`${anonymousPrefix}/*`}
element={<AnonymousRoutes />}
@ -369,9 +376,9 @@ function App(): JSX.Element {
<Route path={routes.client.skipTrial()} element={<SkipTrial />} />
<Route
path={routes.client.addConsultant()}
element={<AddConsultant />}
element={<AddConsultant funnel={ELocalesPlacement.V1} paymentPlacement="add_consultant" />}
/>
<Route path={routes.client.addGuides()} element={<AddGuides />} />
<Route path={routes.client.addGuides()} element={<AddGuides funnel={ELocalesPlacement.V1} paymentPlacement="add_guides" />} />
</Route>
</Route>
{/* Additional Purchases Main End */}

View File

@ -5,17 +5,17 @@ import { useEffect, useMemo, useState } from "react";
import { sleep } from "@/services/date";
import ToggleSwitch from "@/components/ChatsPath/ui/ToggleSwitch";
import Loader, { LoaderColor } from "@/components/Loader";
import { IPaywallProduct } from "@/api/resources/Paywall";
import { getPriceCentsToDollars } from "@/services/price";
import { useDispatch, useSelector } from "react-redux";
import { actions, selectors } from "@/store";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import { IFunnelPaymentVariant } from "@/api/resources/Session";
interface IOutOfCreditsModalProps {
isLoading?: boolean;
isError?: boolean;
products: IPaywallProduct[];
products: IFunnelPaymentVariant[];
handleClickNotWant: () => void;
handleClickButton: () => void;
timerLeft?: () => void;
@ -65,7 +65,7 @@ function OutOfCreditsModal({
<h4>{translate("/expert.out_of_credits_modal_1_click")}</h4>
<p>
{translate("/expert.out_of_credits_modal_credits", {
credits: currentProduct?.description,
// credits: currentProduct?.description,
price: (
<span>${getPriceCentsToDollars(currentProduct?.price || 0)}</span>
),

View File

@ -1,18 +1,18 @@
import Button from "@/components/ChatsPath/ui/Button";
import styles from "./styles.module.scss";
import Loader, { LoaderColor } from "@/components/Loader";
import { IPaywallProduct } from "@/api/resources/Paywall";
import { useMemo } from "react";
import { getPriceCentsToDollars } from "@/services/price";
import { useSelector } from "react-redux";
import { selectors } from "@/store";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import { IFunnelPaymentVariant } from "@/api/resources/Session";
interface IRefillCreditsModalProps {
isLoading?: boolean;
isError?: boolean;
products: IPaywallProduct[];
products: IFunnelPaymentVariant[];
handleClickButton: () => void;
}
@ -49,7 +49,7 @@ function RefillCreditsModal({
</p>
<p className={styles["credits-amount"]}>
{translate("/expert.credits", {
count: currentProduct?.description,
// count: currentProduct?.description,
})}
</p>
</div>

View File

@ -4,16 +4,16 @@ import { useMemo, useState } from "react";
import Timer from "@/components/ChatsPath/ui/Timer";
import RefillProduct from "../RefillProduct";
import Loader, { LoaderColor } from "@/components/Loader";
import { IPaywallProduct } from "@/api/resources/Paywall";
import { useSelector } from "react-redux";
import { selectors } from "@/store";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import { IFunnelPaymentVariant } from "@/api/resources/Session";
interface IOutOfCreditsModalProps {
isLoading?: boolean;
isError?: boolean;
products: IPaywallProduct[];
products: IFunnelPaymentVariant[];
handleClickButton: (productKey: string) => void;
}
@ -30,7 +30,7 @@ function RefillProductsModal({
const { translate } = useTranslations(ELocalesPlacement.Chats);
const assistant = useSelector(selectors.selectCurrentAssistant);
const [timerValue, setTimerValue] = useState(timerSeconds);
const [activeProduct, setActiveProduct] = useState<IPaywallProduct | null>(
const [activeProduct, setActiveProduct] = useState<IFunnelPaymentVariant | null>(
products.find((product) => product.key === "credits.400") || null
);
const filteredProducts = useMemo(
@ -59,12 +59,13 @@ function RefillProductsModal({
<div className={styles["products-wrapper"]}>
{filteredProducts.map((product) => (
<RefillProduct
isActive={activeProduct?._id === product._id}
isActive={activeProduct?.id === product.id}
isOneTimeOffer={false}
credits={product.description}
// credits={product.description}
credits={0}
price={product.price / 100}
onClick={() => setActiveProduct(product)}
key={product._id}
key={product.id}
/>
))}
</div>

View File

@ -16,20 +16,18 @@ import BottomModal from "../../components/BottomModal";
import OutOfCreditsModal from "./components/OutOfCreditsModal";
import RefillProductsModal from "./components/RefillProductsModal";
import { Products, useApi, useApiCall } from "@/api";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys, IPaywallProduct } from "@/api/resources/Paywall";
import { useAuth } from "@/auth";
import { createSinglePayment } from "@/services/singlePayment";
import { IMessage } from "@/api/resources/ChatMessages";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import { usePayment } from "@/hooks/payment/nmi/usePayment";
import { IFunnelPaymentVariant } from "@/api/resources/Session";
import { useFunnel } from "@/hooks/funnel/useFunnel";
const returnUrl = `${window.location.protocol}//${window.location.host
}${routes.client.chatsExpert()}`;
const placementKey = EPlacementKeys["aura.placement.chat"];
function ExpertChat() {
const { translate } = useTranslations(ELocalesPlacement.Chats);
const api = useApi();
@ -65,7 +63,8 @@ function ExpertChat() {
const [isLoadingPayment, setIsLoadingPayment] = useState(false);
const [isError, setIsError] = useState(false);
const currentProduct = useSelector(selectors.selectActiveProduct);
const setCurrentProduct = (product: IPaywallProduct) => {
const setCurrentProduct = (product: IFunnelPaymentVariant) => {
dispatch(actions.payment.update({ activeProduct: product }));
};
@ -75,7 +74,8 @@ function ExpertChat() {
isPaymentSuccess,
showCreditCardForm,
} = usePayment({
placementKey,
funnel: ELocalesPlacement.Chats,
paymentPlacement: "TODO:FUNNEL",
activeProduct: currentProduct!,
paymentFormType: "lightbox"
});
@ -107,8 +107,9 @@ function ExpertChat() {
Products.ResponseGet | undefined
>(checkIsPayedFirstPurchase);
const { products } = usePaywall({
placementKey,
const { products } = useFunnel({
funnel: ELocalesPlacement.EmailGenerator,
paymentPlacement: "TODO:FUNNEL",
});
const scrollToBottom = () => {
@ -193,9 +194,9 @@ function ExpertChat() {
if (isPaymentMethodExist.status === "error") {
return showCreditCardForm();
}
const { _id, key } = currentProduct;
const { id, key } = currentProduct;
const paymentInfo = {
productId: _id,
productId: id,
key,
};
const paymentIntent = await createSinglePayment(

View File

@ -1,12 +1,12 @@
import Title from "@/components/Title"
import styles from "./styles.module.scss"
import { IPaywallProduct } from "@/api/resources/Paywall"
import { useTranslations } from "@/hooks/translations"
import { ELocalesPlacement } from "@/locales"
import { useEmailsGeneration } from "@/hooks/emailsGeneration/useEmailsGeneration"
import { IFunnelPaymentVariant } from "@/api/resources/Session"
interface IEmailsListProps {
products: Array<IPaywallProduct & { weight: number }>
products: Array<IFunnelPaymentVariant & { weight: number }>
}
function EmailsList({ products }: IEmailsListProps) {

View File

@ -6,10 +6,18 @@ import { selectors } from "@/store";
import { getFormattedPrice } from "@/utils/price.utils";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { compatibilityV2Prefix } from "@/routes";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
function PaymentInformation() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV2);
interface IPaymentInformationProps {
trialPeriod: PeriodType;
trialInterval: number;
}
function PaymentInformation({
trialPeriod,
trialInterval
}: IPaymentInformationProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV2);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const fullPrice = activeProductFromStore?.price || 0;
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -23,7 +31,7 @@ function PaymentInformation() {
</div>
<Title className={styles.title} variant="h3">
{translate("/payment.payment_information.title", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
})}
</Title>
<div className={styles["total-container"]}>

View File

@ -1,36 +1,32 @@
import Title from "@/components/Title";
import styles from "./styles.module.scss";
import { images } from "../../data";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { Currency } from "@/components/PaymentTable";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
const placementKey = EPlacementKeys["aura.placement.compatibility.v2.secret.discount"]
const getPrice = (price: number, currency: Currency) => {
if (price % 100 === 0) {
return addCurrency(price / 100, currency);
}
return addCurrency(
(price / 100).toFixed(2),
currency
);
interface ISecretDiscountTableProps {
trialPrice: number | string;
trialInterval: number;
trialPeriod: PeriodType;
oldPrice: number | string;
oldDiscount: number;
newDiscount: number;
currency: Currency;
}
function SecretDiscountTable() {
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingPalmistryV2,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
function SecretDiscountTable({
trialPrice,
trialInterval,
trialPeriod,
oldPrice,
oldDiscount,
newDiscount,
currency
}: ISecretDiscountTableProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const activeProduct = products[0]
// const price = activeProduct?.price || 0;
const trialPrice = activeProduct?.trialPrice || 0;
const trialDuration = activeProduct?.trialDuration || 7;
const formatDiscount = (discount: number) => `-${discount}%`;
return (
<div className={styles.container}>
@ -45,21 +41,23 @@ function SecretDiscountTable() {
<Title className={styles.title} variant="h4">
{translate("secret-discount.secret-discount-table_discount-applied")}
</Title>
<span className={styles["old-discount"]}>{getText("old.discount")}</span>
<span className={styles["new-discount"]}>{getText("new.discount")}</span>
<span className={styles["old-discount"]}>{formatDiscount(oldDiscount)}</span>
<span className={styles["new-discount"]}>{formatDiscount(newDiscount)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["days-14"]}`}>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", { days: trialDuration })}</p>
<span className={styles["old-price"]}>{addCurrency(Number(getText("old.price")), currency)}</span>
<span className={styles["new-price"]}>{getPrice(trialPrice, currency)}</span>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}</p>
<span className={styles["old-price"]}>{addCurrency(oldPrice, currency)}</span>
<span className={styles["new-price"]}>{addCurrency(trialPrice, currency)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["save"]}`}>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(getText("save")), currency) })}</p>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(oldPrice) - Number(trialPrice), currency) })}</p>
</div>
<hr />
<div className={`${styles["grid-line"]} ${styles["total-today"]}`}>
<p>{translate("secret-discount.secret-discount-table_total-today")}</p>
<span>{getPrice(trialPrice, currency)}</span>
<span>{addCurrency(trialPrice, currency)}</span>
</div>
</div>
)

View File

@ -5,7 +5,7 @@ import { Gender } from "@/data";
// import Toast from "@/components/pages/ABDesign/v1/components/Toast";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import { useCallback, useEffect, useState } from "react";
import { useCallback, useEffect, useLayoutEffect, useState } from "react";
import { sleep } from "@/services/date";
import metricService, { useMetricABFlags } from "@/services/metric/metricService";
import { genders } from "@/components/pages/ABDesign/v1/data/genders";
@ -63,7 +63,7 @@ function GenderPage() {
</>,
}));
useEffect(() => {
useLayoutEffect(() => {
const feature = location.pathname.replace(
routes.client.compatibilityV2Gender(),
""

View File

@ -8,19 +8,27 @@ import Button from "../../components/Button";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import Stars from "../../components/Stars";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { useNavigate } from "react-router-dom";
import { useEffect } from "react";
import routes from "@/routes";
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
function Payment() {
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v2"],
localesPlacement: ELocalesPlacement.CompatibilityV2,
});
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV2);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV2,
paymentPlacement: "main"
})
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV2);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -32,12 +40,14 @@ function Payment() {
useEffect(() => {
if (!products.length) return;
const _targetProduct = products.find(product => product._id === activeProductFromStore?._id);
const _targetProduct = products.find(product => product.id === activeProductFromStore?.id);
if (!_targetProduct || !activeProductFromStore) {
navigate(routes.client.compatibilityV2TrialChoice());
}
}, [products, activeProductFromStore]);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<div className={styles["app-number-one"]}>
@ -48,15 +58,20 @@ function Payment() {
</p>
<Stars />
</div>
<PaymentInformation />
<PaymentInformation
trialPeriod={trialPeriod}
trialInterval={trialInterval}
/>
<div className={styles["prices-description"]}>
{translate("/payment.will_be_charged", {
// TODO: add split price (?)
splitPrice: addCurrency(getFormattedPrice(
(
fullPrice / (
Number(getText("split.price.value")) || 2
)
)
// (
// fullPrice / (
// Number(getProperty("split.price.value")?.value) || 2
// )
// )
fullPrice
), currency),
save: addCurrency(
getFormattedPrice(fullPrice - trialPrice),
@ -68,7 +83,7 @@ function Payment() {
trialInfo: (
<b>
{translate("/payment.will_be_charged_trial_info", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
trialPrice: addCurrency(
getFormattedPrice(trialPrice),
currency
@ -76,6 +91,7 @@ function Payment() {
})}
</b>
),
perPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</div>
<Guarantees />

View File

@ -10,6 +10,7 @@
max-width: 343px;
font-size: 24px;
margin-top: 16px;
line-height: 1;
}
.payment-modal-hide {

View File

@ -6,26 +6,34 @@ import Button from "../../components/Button";
import Blob2 from "../../images/SVG/Blob2";
import { useNavigate } from "react-router-dom";
import routes from "@/routes";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import { useEffect } from "react";
import metricService, { EGoals, EMetrics } from "@/services/metric/metricService";
const placementKey = EPlacementKeys["aura.placement.compatibility.v2.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SaveOff() {
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV2);
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV2,
});
// const activeProductFromStore = useSelector(selectors.selectActiveProduct);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV2);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV2,
paymentPlacement: "main_secret_discount"
})
const paymentEntity = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const navigate = useNavigate();
@ -37,20 +45,22 @@ function SaveOff() {
metricService.reachGoal(EGoals.DISCOUNT_PAGE_VISIT, [EMetrics.YANDEX, EMetrics.KLAVIYO]);
}, []);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<Blob className={styles.blob} />
<Blob2 className={styles.blob2} />
<img className={styles.gift} src={images("discount/gift.svg")} alt="gift" />
<Title className={styles.title}>
{translate("save-off.title", { discount: getText("discount") })}
{translate("save-off.title", { discount: getProperty("discount.new")?.value })}
</Title>
<p className={styles.description}>
{translate("save-off.instead", {
price: <span className={styles.price}>{addCurrency(trialPrice, currency)}</span>,
oldPrice: <span className={styles.discount}>
{translate("save-off.instead-old-price", {
oldPrice: addCurrency(getText("old.price") as string, currency)
oldPrice: addCurrency(getFormattedPrice(paymentEntity?.price || 0, 0), currency)
})}
</span>
})}
@ -58,19 +68,20 @@ function SaveOff() {
<p className={styles.point} style={{ marginTop: 12 }}>
<img src={images("discount/fire.png")} alt="fire" />
{translate("save-off.trial-duration", {
// days: trialDuration
trialDuration: trialDuration,
oldTrialDuration: <s>{translate("save-off.old-trial-duration", {
oldTrialDuration: getText("old.trial.duration")
})}</s>,
trialPeriod: getPeriodText(trialPeriod, trialInterval),
oldTrialPeriod: <s>
{getPeriodText(paymentEntity?.trialPeriod || "DAY", paymentEntity?.trialInterval || 0)}
</s>,
})}
</p>
<p className={styles.point}>
<img src={images("discount/gift.png")} alt="gift" />
{translate("save-off.discount-offer", { discount: getText("discount") })}
{translate("save-off.discount-offer", { discount: getProperty("discount.new")?.value })}
</p>
<Button className={styles.button} onClick={handleNext}>
{translate("save-off.button-trial", { days: trialDuration })}
{translate("save-off.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}
</Button>
</>
)

View File

@ -73,6 +73,6 @@
height: 54px;
margin-top: 16px;
font-size: 18px;
line-height: 21px;
line-height: 1;
font-weight: 600;
}

View File

@ -58,7 +58,7 @@ function ScannedPhoto() {
const [classNameScannedPhoto, setClassNameScannedPhoto] = useState(isFromScanHand ? styles.scannedPhotoFromScanHand : "");
const feature = useSelector(selectors.selectFeature);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("ios"), [feature]);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("black") || feature?.toLowerCase()?.includes("ios"), [feature]);
const authCode = useSelector(selectors.selectAuthCode);
const { authorization } = useAuthentication();

View File

@ -4,8 +4,6 @@ import Blob4 from "../../images/SVG/Blob4";
import Title from "@/components/Title";
import SecretDiscountTable from "../../components/SecretDiscountTable";
import Button from "../../components/Button";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
@ -16,24 +14,36 @@ import { useTranslations } from "@/hooks/translations";
import { useDynamicSize } from "@/hooks/useDynamicSize";
import Header from "../../components/Header";
const placementKey = EPlacementKeys["aura.placement.compatibility.v2.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SecretDiscount() {
const { width, elementRef } = useDynamicSize({ defaultWidth: 560 });
const { height, elementRef: policyContainerRef } = useDynamicSize<HTMLDivElement>({ defaultWidth: 560, defaultHeight: 193 });
const dispatch = useDispatch();
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV2,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV2);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV2);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV2,
paymentPlacement: "main_secret_discount"
})
const paymentEntityMain = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const trialPrice = activeProduct?.trialPrice || 0;
useEffect(() => {
if (!activeProduct) return;
@ -46,6 +56,8 @@ function SecretDiscount() {
navigate(routes.client.compatibilityV2SecretDiscountPaymentModal());
};
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<section className={styles.container} ref={elementRef} style={{
paddingBottom: `${height + 42}px`
@ -59,24 +71,37 @@ function SecretDiscount() {
<Title className={styles.title} variant="h1">
{translate("secret-discount.title")}
</Title>
<SecretDiscountTable />
<SecretDiscountTable
trialPrice={getFormattedPrice(trialPrice, 0)}
trialInterval={trialInterval}
trialPeriod={trialPeriod}
oldPrice={getFormattedPrice(paymentEntityMain?.price || 0, 0)}
oldDiscount={Number(getProperty("discount.old")?.value) || 0}
newDiscount={Number(getProperty("discount.new")?.value) || 0}
currency={currency}
/>
<Button className={styles.button} onClick={openPaymentModal}>
{translate("secret-discount.button-trial", { days: trialDuration })}
{translate("secret-discount.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective")
})}
</Button>
<div className={styles["policy-container"]} ref={policyContainerRef}>
<p className={styles.policy}>
{translate("secret-discount.policy", {
days: trialDuration,
oldDays: getText("old.trial.duration"),
trialPrice: addCurrency(trialPrice, currency),
// days: trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective"),
// oldDays: getText("old.trial.duration"),
// trialPrice: addCurrency(trialPrice, currency),
price: addCurrency(
(
Number(getText("old.price"))
/ (
Number(getText("split.price.value")) || 2
)
// Number(getText("old.price"))
// / (
// Number(getText("split.price.value")) || 2
// )
getFormattedPrice(activeProduct?.price || 0, 0)
), currency),
billingPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</p>
<Blob4 className={styles.blob4} width={width} height={height + 34} />

View File

@ -4,10 +4,8 @@ import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
// import Title from "@/components/Title";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import {addCurrency, ELocalesPlacement} from "@/locales";
import {useEffect, useMemo, useState} from "react";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect, useMemo, useState } from "react";
import Button from "../../components/Button";
import routes from "@/routes";
import { useNavigate } from "react-router-dom";
@ -19,16 +17,25 @@ import TrialChoiceV1 from "./v1";
import { usePreloadImages } from "@/hooks/preload/images";
import { getZodiacSignByDate } from "@/services/zodiac-sign";
import { EUnleashFlags, useUnleash } from "@/hooks/ab/unleash/useUnleash";
import {getFormattedPrice} from "@/utils/price.utils.tsx";
import { getFormattedPrice } from "@/utils/price.utils.tsx";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoice() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV2);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV2);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v2"],
localesPlacement: ELocalesPlacement.CompatibilityV2,
});
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV2,
paymentPlacement: "main"
})
const { gender, partnerGender, birthdate, partnerBirthdate } = useSelector(selectors.selectQuestionnaire)
const zodiacSign = getZodiacSignByDate(birthdate);
@ -65,24 +72,24 @@ function TrialChoice() {
const homeConfig = useSelector(selectors.selectHome);
const { variant: trialPriceVariant = 'v0', isReady: isReadyTrialPrice } = useUnleash({
flag: EUnleashFlags.compatibilityV2TrialTextPrice,
});
flag: EUnleashFlags.compatibilityV2TrialTextPrice,
});
const maxProduct = useMemo(() => {
if (!products?.length) return null;
return products.reduce(
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
);
}, [products]);
const maxTrialPrice = useMemo(() => {
if (!maxProduct) return "";
return addCurrency(
getFormattedPrice(maxProduct.trialPrice || 0),
currency
getFormattedPrice(maxProduct.trialPrice || 0),
currency
);
}, [maxProduct, currency]);
@ -142,7 +149,7 @@ function TrialChoice() {
return (
<div className={styles.container}>
{!(isLoading || !isReadyTrialPrice || !maxProduct) && (
{!(isPending || !isReadyTrialPrice || !maxProduct) && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
{/* {!isLongText && (
@ -153,7 +160,8 @@ function TrialChoice() {
<p className={styles.text}>{
translate('/trial-choice.description', {
maxTrialPrice,
trialDuration: maxProduct.trialDuration,
trialPeriod1: getPeriodText(trialPeriod, trialInterval || 0),
trialPeriod2: getPeriodText(trialPeriod, trialInterval || 0),
br: <br />
})
}</p>
@ -169,7 +177,7 @@ function TrialChoice() {
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>
{translate(`/trial-choice.trial-text.${trialPriceTextVariant}`, {
{translate(`${getProperty("text.1")?.value}.${trialPriceTextVariant}`, {
price: maxTrialPrice,
br: <br />
})}
@ -185,7 +193,7 @@ function TrialChoice() {
</Button>
</>
)}
{(isLoading || !isReadyTrialPrice) && <Loader className={styles.loader} />}
{(isPending || !isReadyTrialPrice) && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -3,17 +3,16 @@ import styles from "./styles.module.scss";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useNavigate } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { useEffect, useState } from "react";
import { actions, selectors } from "@/store";
import metricService, { EGoals, EMetrics } from "@/services/metric/metricService";
import routes from "@/routes";
import Loader from "@/components/Loader";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { EPlacementKeys } from "@/api/resources/Paywall";
import Button from "@/components/CompatibilityV2/components/Button";
import EmailSubstrate from "@/components/CompatibilityV2/components/EmailSubstrate";
import EmailsList from "@/components/CompatibilityV2/components/EmailsList";
import { useFunnel } from "@/hooks/funnel/useFunnel";
const productWeights: Record<number, number> = {
100: 1, // 10%
@ -26,9 +25,9 @@ function TrialChoiceV1() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV2);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v2"],
localesPlacement: ELocalesPlacement.CompatibilityV2,
const { products, isPending, currency, getProperty } = useFunnel({
funnel: ELocalesPlacement.CompatibilityV2,
paymentPlacement: "main"
});
const popularProduct = products[products.length - 1];
@ -75,7 +74,7 @@ function TrialChoiceV1() {
return (
<div className={styles.container}>
{!isLoading && (
{!isPending && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
{/* {!isLongText && (
@ -107,7 +106,7 @@ function TrialChoiceV1() {
})}
</p>
<div className={styles["price-container"]}>
<p className={styles["auxiliary-text"]}>{getText("text.1")}</p>
<p className={styles["auxiliary-text"]}>{translate(String(getProperty("text.1")?.value))}</p>
<PriceList
products={products}
activeItem={selectedPrice}
@ -116,7 +115,7 @@ function TrialChoiceV1() {
classNamePricesContainer={styles["prices-container"]}
currency={currency}
click={handlePriceItem}
preActiveItems={[popularProduct?._id]}
preActiveItems={[popularProduct?.id]}
/>
</div>
@ -133,7 +132,7 @@ function TrialChoiceV1() {
</Button>
</>
)}
{isLoading && <Loader className={styles.loader} />}
{isPending && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -3,8 +3,6 @@ import EmailSubstrate from "../../components/EmailSubstrate";
import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { ELocalesPlacement } from "@/locales";
import { useEffect, useRef, useState } from "react";
import Button from "../../components/Button";
@ -13,14 +11,15 @@ import { useNavigate, useOutletContext } from "react-router-dom";
import Loader from "@/components/Loader";
import { useTranslations } from "@/hooks/translations";
import { IOutletContext } from "@/routerComponents/Compatibility/v2/LayoutPersonalVideo";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoiceVideo() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV2);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v2"],
localesPlacement: ELocalesPlacement.V1,
const { products, isPending, currency, getProperty } = useFunnel({
funnel: ELocalesPlacement.CompatibilityV2,
paymentPlacement: "main"
});
const [isDisabled, setIsDisabled] = useState(true);
@ -63,7 +62,7 @@ function TrialChoiceVideo() {
return (
<div className={styles.container}>
<div ref={containerVideoRef} />
{!isLoading && isVisibleElements && (
{!isPending && isVisibleElements && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
<div className={styles["price-container"]}>
@ -76,7 +75,7 @@ function TrialChoiceVideo() {
currency={currency}
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>{getText("text.1")}</p>
<p className={styles["auxiliary-text"]}>{translate(String(getProperty("text.1")?.value))}</p>
</div>
<Button
@ -88,7 +87,7 @@ function TrialChoiceVideo() {
</Button>
</>
)}
{isLoading && <Loader className={styles.loader} />}
{isPending && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -6,10 +6,18 @@ import { selectors } from "@/store";
import { getFormattedPrice } from "@/utils/price.utils";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { compatibilityV3Prefix } from "@/routes";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
function PaymentInformation() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV3);
interface IPaymentInformationProps {
trialPeriod: PeriodType;
trialInterval: number;
}
function PaymentInformation({
trialPeriod,
trialInterval
}: IPaymentInformationProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV3);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const fullPrice = activeProductFromStore?.price || 0;
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -23,7 +31,7 @@ function PaymentInformation() {
</div>
<Title className={styles.title} variant="h3">
{translate("/payment.payment_information.title", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
})}
</Title>
<div className={styles["total-container"]}>

View File

@ -1,36 +1,32 @@
import Title from "@/components/Title";
import styles from "./styles.module.scss";
import { images } from "../../data";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { Currency } from "@/components/PaymentTable";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
const placementKey = EPlacementKeys["aura.placement.compatibility.v3.secret.discount"]
const getPrice = (price: number, currency: Currency) => {
if (price % 100 === 0) {
return addCurrency(price / 100, currency);
}
return addCurrency(
(price / 100).toFixed(2),
currency
);
interface ISecretDiscountTableProps {
trialPrice: number | string;
trialInterval: number;
trialPeriod: PeriodType;
oldPrice: number | string;
oldDiscount: number;
newDiscount: number;
currency: Currency;
}
function SecretDiscountTable() {
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingPalmistryV2,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
function SecretDiscountTable({
trialPrice,
trialInterval,
trialPeriod,
oldPrice,
oldDiscount,
newDiscount,
currency
}: ISecretDiscountTableProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const activeProduct = products[0]
// const price = activeProduct?.price || 0;
const trialPrice = activeProduct?.trialPrice || 0;
const trialDuration = activeProduct?.trialDuration || 7;
const formatDiscount = (discount: number) => `-${discount}%`;
return (
<div className={styles.container}>
@ -45,21 +41,23 @@ function SecretDiscountTable() {
<Title className={styles.title} variant="h4">
{translate("secret-discount.secret-discount-table_discount-applied")}
</Title>
<span className={styles["old-discount"]}>{getText("old.discount")}</span>
<span className={styles["new-discount"]}>{getText("new.discount")}</span>
<span className={styles["old-discount"]}>{formatDiscount(oldDiscount)}</span>
<span className={styles["new-discount"]}>{formatDiscount(newDiscount)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["days-14"]}`}>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", { days: trialDuration })}</p>
<span className={styles["old-price"]}>{addCurrency(Number(getText("old.price")), currency)}</span>
<span className={styles["new-price"]}>{getPrice(trialPrice, currency)}</span>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}</p>
<span className={styles["old-price"]}>{addCurrency(oldPrice, currency)}</span>
<span className={styles["new-price"]}>{addCurrency(trialPrice, currency)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["save"]}`}>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(getText("save")), currency) })}</p>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(oldPrice) - Number(trialPrice), currency) })}</p>
</div>
<hr />
<div className={`${styles["grid-line"]} ${styles["total-today"]}`}>
<p>{translate("secret-discount.secret-discount-table_total-today")}</p>
<span>{getPrice(trialPrice, currency)}</span>
<span>{addCurrency(trialPrice, currency)}</span>
</div>
</div>
)

View File

@ -8,19 +8,27 @@ import Button from "../../components/Button";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import Stars from "../../components/Stars";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { useNavigate } from "react-router-dom";
import { useEffect } from "react";
import routes from "@/routes";
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
function Payment() {
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v3"],
localesPlacement: ELocalesPlacement.CompatibilityV3,
});
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV3);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV3,
paymentPlacement: "main"
})
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV3);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -32,12 +40,14 @@ function Payment() {
useEffect(() => {
if (!products.length) return;
const _targetProduct = products.find(product => product._id === activeProductFromStore?._id);
const _targetProduct = products.find(product => product.id === activeProductFromStore?.id);
if (!_targetProduct || !activeProductFromStore) {
navigate(routes.client.compatibilityV3TrialChoice());
}
}, [products, activeProductFromStore]);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<div className={styles["app-number-one"]}>
@ -48,15 +58,20 @@ function Payment() {
</p>
<Stars />
</div>
<PaymentInformation />
<PaymentInformation
trialPeriod={trialPeriod}
trialInterval={trialInterval}
/>
<div className={styles["prices-description"]}>
{translate("/payment.will_be_charged", {
// TODO: add split price (?)
splitPrice: addCurrency(getFormattedPrice(
(
fullPrice / (
Number(getText("split.price.value")) || 2
)
)
// (
// fullPrice / (
// Number(getProperty("split.price.value")?.value) || 2
// )
// )
fullPrice
), currency),
save: addCurrency(
getFormattedPrice(fullPrice - trialPrice),
@ -68,7 +83,7 @@ function Payment() {
trialInfo: (
<b>
{translate("/payment.will_be_charged_trial_info", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
trialPrice: addCurrency(
getFormattedPrice(trialPrice),
currency
@ -76,6 +91,7 @@ function Payment() {
})}
</b>
),
perPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</div>
<Guarantees />

View File

@ -10,6 +10,7 @@
max-width: 343px;
font-size: 24px;
margin-top: 16px;
line-height: 1;
}
.payment-modal-hide {

View File

@ -6,26 +6,34 @@ import Button from "../../components/Button";
import Blob2 from "../../images/SVG/Blob2";
import { useNavigate } from "react-router-dom";
import routes from "@/routes";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import { useEffect } from "react";
import metricService, { EGoals, EMetrics } from "@/services/metric/metricService";
const placementKey = EPlacementKeys["aura.placement.compatibility.v3.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SaveOff() {
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV3);
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV3,
});
// const activeProductFromStore = useSelector(selectors.selectActiveProduct);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV3);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV3,
paymentPlacement: "main_secret_discount"
})
const paymentEntity = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const navigate = useNavigate();
@ -37,20 +45,22 @@ function SaveOff() {
metricService.reachGoal(EGoals.DISCOUNT_PAGE_VISIT, [EMetrics.YANDEX, EMetrics.KLAVIYO]);
}, []);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<Blob className={styles.blob} />
<Blob2 className={styles.blob2} />
<img className={styles.gift} src={images("discount/gift.svg")} alt="gift" />
<Title className={styles.title}>
{translate("save-off.title", { discount: getText("discount") })}
{translate("save-off.title", { discount: getProperty("discount.new")?.value })}
</Title>
<p className={styles.description}>
{translate("save-off.instead", {
price: <span className={styles.price}>{addCurrency(trialPrice, currency)}</span>,
oldPrice: <span className={styles.discount}>
{translate("save-off.instead-old-price", {
oldPrice: addCurrency(getText("old.price") as string, currency)
oldPrice: addCurrency(getFormattedPrice(paymentEntity?.price || 0, 0), currency)
})}
</span>
})}
@ -58,19 +68,20 @@ function SaveOff() {
<p className={styles.point} style={{ marginTop: 12 }}>
<img src={images("discount/fire.png")} alt="fire" />
{translate("save-off.trial-duration", {
// days: trialDuration
trialDuration: trialDuration,
oldTrialDuration: <s>{translate("save-off.old-trial-duration", {
oldTrialDuration: getText("old.trial.duration")
})}</s>,
trialPeriod: getPeriodText(trialPeriod, trialInterval),
oldTrialPeriod: <s>
{getPeriodText(paymentEntity?.trialPeriod || "DAY", paymentEntity?.trialInterval || 0)}
</s>,
})}
</p>
<p className={styles.point}>
<img src={images("discount/gift.png")} alt="gift" />
{translate("save-off.discount-offer", { discount: getText("discount") })}
{translate("save-off.discount-offer", { discount: getProperty("discount.new")?.value })}
</p>
<Button className={styles.button} onClick={handleNext}>
{translate("save-off.button-trial", { days: trialDuration })}
{translate("save-off.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}
</Button>
</>
)

View File

@ -52,7 +52,7 @@ function ScannedPhoto() {
// const [classNameScannedPhoto, setClassNameScannedPhoto] = useState("");
const feature = useSelector(selectors.selectFeature);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("ios"), [feature]);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("black") || feature?.toLowerCase()?.includes("ios"), [feature]);
const authCode = useSelector(selectors.selectAuthCode);
const { authorization } = useAuthentication();

View File

@ -4,8 +4,6 @@ import Blob4 from "../../images/SVG/Blob4";
import Title from "@/components/Title";
import SecretDiscountTable from "../../components/SecretDiscountTable";
import Button from "../../components/Button";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
@ -16,22 +14,36 @@ import { useTranslations } from "@/hooks/translations";
import { useDynamicSize } from "@/hooks/useDynamicSize";
import Header from "../../components/Header";
const placementKey = EPlacementKeys["aura.placement.compatibility.v3.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SecretDiscount() {
const { width, elementRef } = useDynamicSize({ defaultWidth: 560 });
const { height, elementRef: policyContainerRef } = useDynamicSize<HTMLDivElement>({ defaultWidth: 560, defaultHeight: 193 });
const dispatch = useDispatch();
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV3,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV3);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV3);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV3,
paymentPlacement: "main_secret_discount"
})
const paymentEntityMain = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const trialPrice = activeProduct?.trialPrice || 0;
useEffect(() => {
@ -45,6 +57,8 @@ function SecretDiscount() {
navigate(routes.client.compatibilityV3SecretDiscountPaymentModal());
};
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<section className={styles.container} ref={elementRef} style={{
paddingBottom: `${height + 42}px`
@ -58,24 +72,37 @@ function SecretDiscount() {
<Title className={styles.title} variant="h1">
{translate("secret-discount.title")}
</Title>
<SecretDiscountTable />
<SecretDiscountTable
trialPrice={getFormattedPrice(trialPrice, 0)}
trialInterval={trialInterval}
trialPeriod={trialPeriod}
oldPrice={getFormattedPrice(paymentEntityMain?.price || 0, 0)}
oldDiscount={Number(getProperty("discount.old")?.value) || 0}
newDiscount={Number(getProperty("discount.new")?.value) || 0}
currency={currency}
/>
<Button className={styles.button} onClick={openPaymentModal}>
{translate("secret-discount.button-trial", { days: trialDuration })}
{translate("secret-discount.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective")
})}
</Button>
<div className={styles["policy-container"]} ref={policyContainerRef}>
<p className={styles.policy}>
{translate("secret-discount.policy", {
days: trialDuration,
oldDays: getText("old.trial.duration"),
trialPrice: addCurrency(trialPrice, currency),
// days: trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective"),
// oldDays: getText("old.trial.duration"),
// trialPrice: addCurrency(trialPrice, currency),
price: addCurrency(
(
Number(getText("old.price"))
/ (
Number(getText("split.price.value")) || 2
)
// Number(getText("old.price"))
// / (
// Number(getText("split.price.value")) || 2
// )
getFormattedPrice(activeProduct?.price || 0, 0)
), currency),
billingPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</p>
<Blob4 className={styles.blob4} width={width} height={height + 34} />

View File

@ -4,10 +4,8 @@ import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
// import Title from "@/components/Title";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import {addCurrency, ELocalesPlacement} from "@/locales";
import {useEffect, useMemo, useState} from "react";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect, useMemo, useState } from "react";
import Button from "../../components/Button";
import routes from "@/routes";
import { useNavigate } from "react-router-dom";
@ -19,16 +17,26 @@ import { usePreloadImages } from "@/hooks/preload/images";
import { getZodiacSignByDate } from "@/services/zodiac-sign";
import { images } from "../../data";
import { EUnleashFlags, useUnleash } from "@/hooks/ab/unleash/useUnleash";
import {getFormattedPrice} from "@/utils/price.utils.tsx";
import { getFormattedPrice } from "@/utils/price.utils.tsx";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoice() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV3);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV3);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v3"],
localesPlacement: ELocalesPlacement.CompatibilityV3,
});
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV3,
paymentPlacement: "main"
})
const { gender, partnerGender, birthdate, partnerBirthdate } = useSelector(selectors.selectQuestionnaire)
const zodiacSign = getZodiacSignByDate(birthdate);
const zodiacSignPartner = getZodiacSignByDate(partnerBirthdate);
@ -61,24 +69,24 @@ function TrialChoice() {
const maxProduct = useMemo(() => {
if (!products?.length) return null;
return products.reduce(
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
);
}, [products]);
const maxTrialPrice = useMemo(() => {
if (!maxProduct) return "";
return addCurrency(
getFormattedPrice(maxProduct.trialPrice || 0),
currency
getFormattedPrice(maxProduct.trialPrice || 0),
currency
);
}, [maxProduct, currency]);
const { variant: trialPriceVariant = 'v0', isReady: isReadyTrialPrice } = useUnleash({
flag: EUnleashFlags.compatibilityV3TrialTextPrice,
});
flag: EUnleashFlags.compatibilityV3TrialTextPrice,
});
const handlePriceItem = () => {
metricService.reachGoal(EGoals.SELECT_TRIAL, [EMetrics.YANDEX, EMetrics.KLAVIYO]);
@ -124,7 +132,7 @@ function TrialChoice() {
return (
<div className={styles.container}>
{!(isLoading || !isReadyTrialPrice || !maxProduct) && (
{!(isPending || !isReadyTrialPrice || !maxProduct) && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
{/* {!isLongText && (
@ -135,7 +143,8 @@ function TrialChoice() {
<p className={styles.text}>{
translate('/trial-choice.description', {
maxTrialPrice,
trialDuration: maxProduct.trialDuration,
trialPeriod1: getPeriodText(trialPeriod, trialInterval || 0),
trialPeriod2: getPeriodText(trialPeriod, trialInterval || 0),
br: <br />
})
}</p>
@ -150,12 +159,12 @@ function TrialChoice() {
currency={currency}
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>{
translate(`/trial-choice.trial-text.${trialPriceTextVariant}`, {
<p className={styles["auxiliary-text"]}>
{translate(`${getProperty("text.1")?.value}.${trialPriceTextVariant}`, {
price: maxTrialPrice,
br: <br />
})
}</p>
})}
</p>
</div>
<Button
@ -167,7 +176,7 @@ function TrialChoice() {
</Button>
</>
)}
{(isLoading || !isReadyTrialPrice) && <Loader className={styles.loader} />}
{(isPending || !isReadyTrialPrice) && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -3,8 +3,6 @@ import EmailSubstrate from "../../components/EmailSubstrate";
import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { ELocalesPlacement } from "@/locales";
import { useEffect, useRef, useState } from "react";
import Button from "../../components/Button";
@ -13,14 +11,15 @@ import { useNavigate, useOutletContext } from "react-router-dom";
import Loader from "@/components/Loader";
import { useTranslations } from "@/hooks/translations";
import { IOutletContext } from "@/routerComponents/Compatibility/v3/LayoutPersonalVideo";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoiceVideo() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV3);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v3"],
localesPlacement: ELocalesPlacement.V1,
const { products, isPending, currency, getProperty } = useFunnel({
funnel: ELocalesPlacement.CompatibilityV3,
paymentPlacement: "main"
});
const [isDisabled, setIsDisabled] = useState(true);
@ -63,7 +62,7 @@ function TrialChoiceVideo() {
return (
<div className={styles.container}>
<div ref={containerVideoRef} />
{!isLoading && isVisibleElements && (
{!isPending && isVisibleElements && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
<div className={styles["price-container"]}>
@ -76,7 +75,7 @@ function TrialChoiceVideo() {
currency={currency}
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>{getText("text.1")}</p>
<p className={styles["auxiliary-text"]}>{translate(String(getProperty("text.1")?.value))}</p>
</div>
<Button
@ -88,7 +87,7 @@ function TrialChoiceVideo() {
</Button>
</>
)}
{isLoading && <Loader className={styles.loader} />}
{isPending && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -6,10 +6,18 @@ import { selectors } from "@/store";
import { getFormattedPrice } from "@/utils/price.utils";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { compatibilityV4Prefix } from "@/routes";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
function PaymentInformation() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV4);
interface IPaymentInformationProps {
trialPeriod: PeriodType;
trialInterval: number;
}
function PaymentInformation({
trialPeriod,
trialInterval
}: IPaymentInformationProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV4);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const fullPrice = activeProductFromStore?.price || 0;
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -23,7 +31,7 @@ function PaymentInformation() {
</div>
<Title className={styles.title} variant="h3">
{translate("/payment.payment_information.title", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
})}
</Title>
<div className={styles["total-container"]}>

View File

@ -1,36 +1,32 @@
import Title from "@/components/Title";
import styles from "./styles.module.scss";
import { images } from "../../data";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { Currency } from "@/components/PaymentTable";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
const placementKey = EPlacementKeys["aura.placement.compatibility.v4.secret.discount"]
const getPrice = (price: number, currency: Currency) => {
if (price % 100 === 0) {
return addCurrency(price / 100, currency);
}
return addCurrency(
(price / 100).toFixed(2),
currency
);
interface ISecretDiscountTableProps {
trialPrice: number | string;
trialInterval: number;
trialPeriod: PeriodType;
oldPrice: number | string;
oldDiscount: number;
newDiscount: number;
currency: Currency;
}
function SecretDiscountTable() {
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingPalmistryV2,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
function SecretDiscountTable({
trialPrice,
trialInterval,
trialPeriod,
oldPrice,
oldDiscount,
newDiscount,
currency
}: ISecretDiscountTableProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const activeProduct = products[0]
// const price = activeProduct?.price || 0;
const trialPrice = activeProduct?.trialPrice || 0;
const trialDuration = activeProduct?.trialDuration || 7;
const formatDiscount = (discount: number) => `-${discount}%`;
return (
<div className={styles.container}>
@ -45,21 +41,23 @@ function SecretDiscountTable() {
<Title className={styles.title} variant="h4">
{translate("secret-discount.secret-discount-table_discount-applied")}
</Title>
<span className={styles["old-discount"]}>{getText("old.discount")}</span>
<span className={styles["new-discount"]}>{getText("new.discount")}</span>
<span className={styles["old-discount"]}>{formatDiscount(oldDiscount)}</span>
<span className={styles["new-discount"]}>{formatDiscount(newDiscount)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["days-14"]}`}>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", { days: trialDuration })}</p>
<span className={styles["old-price"]}>{addCurrency(Number(getText("old.price")), currency)}</span>
<span className={styles["new-price"]}>{getPrice(trialPrice, currency)}</span>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}</p>
<span className={styles["old-price"]}>{addCurrency(oldPrice, currency)}</span>
<span className={styles["new-price"]}>{addCurrency(trialPrice, currency)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["save"]}`}>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(getText("save")), currency) })}</p>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(oldPrice) - Number(trialPrice), currency) })}</p>
</div>
<hr />
<div className={`${styles["grid-line"]} ${styles["total-today"]}`}>
<p>{translate("secret-discount.secret-discount-table_total-today")}</p>
<span>{getPrice(trialPrice, currency)}</span>
<span>{addCurrency(trialPrice, currency)}</span>
</div>
</div>
)

View File

@ -42,7 +42,7 @@ function Loading() {
const interval = useRef<NodeJS.Timeout>();
const { whatAddToAnalysis, relationshipStatus } = useSelector(selectors.selectCompatibilityV4Answers);
const feature = useSelector(selectors.selectFeature);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("ios"), [feature]);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("black") || feature?.toLowerCase()?.includes("ios"), [feature]);
const authCode = useSelector(selectors.selectAuthCode);
const { gender, partnerGender, birthdate, partnerBirthdate } = useSelector(selectors.selectQuestionnaire);

View File

@ -3,7 +3,7 @@ import { useNavigate } from "react-router-dom";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import Title from "@/components/Title";
import { useCallback, useEffect, useRef, useState } from "react";
import { useCallback, useEffect, useMemo, useState } from "react";
import { sleep } from "@/services/date";
import { CircularProgressbar } from "react-circular-progressbar";
import routes from "@/routes";
@ -11,15 +11,12 @@ import { useSelector } from "react-redux";
import { selectors } from "@/store";
import { getZodiacSignByDate } from "@/services/zodiac-sign";
import { usePreloadImages } from "@/hooks/preload/images";
const POINTS_COUNT = 4;
const TOTAL_ANIMATION_TIME = 24600;
import GPTAnimationText from "@/components/ui/GPTAnimationText";
function PartnerAnalysis() {
const navigate = useNavigate();
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV4);
const [loadingProgress, setLoadingProgress] = useState(0);
const listRef = useRef<Array<HTMLParagraphElement | null>>([]);
const { partnerGender, partnerBirthdate } = useSelector(selectors.selectQuestionnaire);
const zodiacSign = getZodiacSignByDate(partnerBirthdate);
@ -27,17 +24,14 @@ function PartnerAnalysis() {
`/zodiac-signs/${partnerGender?.toLowerCase()}/${zodiacSign?.toLowerCase()}.svg`
]);
const [listHeight, setListHeight] = useState(0);
useEffect(() => {
let maxHeight = 0;
listRef.current.forEach((item) => {
if (item?.offsetHeight && item.offsetHeight > maxHeight) {
maxHeight = item.offsetHeight;
}
});
setListHeight(maxHeight);
}, [listRef]);
const points = useMemo(() => {
return [
translate("/partner-analysis.point1"),
translate("/partner-analysis.point2"),
translate("/partner-analysis.point3"),
translate("/partner-analysis.point4"),
]
}, [translate]);
const handleNext = useCallback(() => {
navigate(routes.client.compatibilityV4PalmsInformationPartner());
@ -81,29 +75,10 @@ function PartnerAnalysis() {
<Title variant="h2" className={styles.title}>
{translate("/partner-analysis.title")}
</Title>
<div className={styles.list} style={{
height: `${listHeight}px`
}}>
{Array.from(Array(POINTS_COUNT).keys()).map((index) => (
<p
key={index}
className={styles.item}
ref={(el) => listRef.current[index] = el}
style={{
animationDuration: `${TOTAL_ANIMATION_TIME / (POINTS_COUNT)}ms`,
animationDelay: `${index * (TOTAL_ANIMATION_TIME / (POINTS_COUNT))}ms`
}}
>
{translate(`/partner-analysis.point${index + 1}`)}
<span
className={styles.line}
style={{
animationDuration: `${TOTAL_ANIMATION_TIME / (POINTS_COUNT)}ms`
}}
/>
</p>
))}
</div>
<GPTAnimationText
points={points}
totalAnimationTime={24600}
/>
</div>
)
}

View File

@ -8,19 +8,27 @@ import Button from "../../components/Button";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import Stars from "../../components/Stars";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { useNavigate } from "react-router-dom";
import { useEffect } from "react";
import routes from "@/routes";
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
function Payment() {
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v4"],
localesPlacement: ELocalesPlacement.CompatibilityV4,
});
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV4);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV4,
paymentPlacement: "main"
})
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV4);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -32,12 +40,14 @@ function Payment() {
useEffect(() => {
if (!products.length) return;
const _targetProduct = products.find(product => product._id === activeProductFromStore?._id);
const _targetProduct = products.find(product => product.id === activeProductFromStore?.id);
if (!_targetProduct || !activeProductFromStore) {
navigate(routes.client.compatibilityV4TrialChoice());
}
}, [products, activeProductFromStore]);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<div className={styles["app-number-one"]}>
@ -48,15 +58,20 @@ function Payment() {
</p>
<Stars />
</div>
<PaymentInformation />
<PaymentInformation
trialPeriod={trialPeriod}
trialInterval={trialInterval}
/>
<div className={styles["prices-description"]}>
{translate("/payment.will_be_charged", {
// TODO: add split price (?)
splitPrice: addCurrency(getFormattedPrice(
(
fullPrice / (
Number(getText("split.price.value")) || 2
)
)
// (
// fullPrice / (
// Number(getProperty("split.price.value")?.value) || 2
// )
// )
fullPrice
), currency),
save: addCurrency(
getFormattedPrice(fullPrice - trialPrice),
@ -68,14 +83,15 @@ function Payment() {
trialInfo: (
<b>
{translate("/payment.will_be_charged_trial_info", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
trialPrice: addCurrency(
getFormattedPrice(trialPrice),
currency
),
)
})}
</b>
),
perPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</div>
<Guarantees />

View File

@ -10,6 +10,7 @@
max-width: 343px;
font-size: 24px;
margin-top: 16px;
line-height: 1;
}
.payment-modal-hide {

View File

@ -6,26 +6,34 @@ import Button from "../../components/Button";
import Blob2 from "../../images/SVG/Blob2";
import { useNavigate } from "react-router-dom";
import routes from "@/routes";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import { useEffect } from "react";
import metricService, { EGoals, EMetrics } from "@/services/metric/metricService";
const placementKey = EPlacementKeys["aura.placement.compatibility.v4.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SaveOff() {
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV4);
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV4,
});
// const activeProductFromStore = useSelector(selectors.selectActiveProduct);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV4);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV4,
paymentPlacement: "main_secret_discount"
})
const paymentEntity = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const navigate = useNavigate();
@ -37,20 +45,22 @@ function SaveOff() {
metricService.reachGoal(EGoals.DISCOUNT_PAGE_VISIT, [EMetrics.YANDEX, EMetrics.KLAVIYO]);
}, []);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<Blob className={styles.blob} />
<Blob2 className={styles.blob2} />
<img className={styles.gift} src={images("discount/gift.svg")} alt="gift" />
<Title className={styles.title}>
{translate("save-off.title", { discount: getText("discount") })}
{translate("save-off.title", { discount: getProperty("discount.new")?.value })}
</Title>
<p className={styles.description}>
{translate("save-off.instead", {
price: <span className={styles.price}>{addCurrency(trialPrice, currency)}</span>,
oldPrice: <span className={styles.discount}>
{translate("save-off.instead-old-price", {
oldPrice: addCurrency(getText("old.price") as string, currency)
oldPrice: addCurrency(getFormattedPrice(paymentEntity?.price || 0, 0), currency)
})}
</span>
})}
@ -58,19 +68,20 @@ function SaveOff() {
<p className={styles.point} style={{ marginTop: 12 }}>
<img src={images("discount/fire.png")} alt="fire" />
{translate("save-off.trial-duration", {
// days: trialDuration
trialDuration: trialDuration,
oldTrialDuration: <s>{translate("save-off.old-trial-duration", {
oldTrialDuration: getText("old.trial.duration")
})}</s>,
trialPeriod: getPeriodText(trialPeriod, trialInterval),
oldTrialPeriod: <s>
{getPeriodText(paymentEntity?.trialPeriod || "DAY", paymentEntity?.trialInterval || 0)}
</s>,
})}
</p>
<p className={styles.point}>
<img src={images("discount/gift.png")} alt="gift" />
{translate("save-off.discount-offer", { discount: getText("discount") })}
{translate("save-off.discount-offer", { discount: getProperty("discount.new")?.value })}
</p>
<Button className={styles.button} onClick={handleNext}>
{translate("save-off.button-trial", { days: trialDuration })}
{translate("save-off.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}
</Button>
</>
)

View File

@ -50,7 +50,7 @@ function ScannedPhoto() {
// const [classNameScannedPhoto, setClassNameScannedPhoto] = useState("");
const feature = useSelector(selectors.selectFeature);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("ios"), [feature]);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("black") || feature?.toLowerCase()?.includes("ios"), [feature]);
const authCode = useSelector(selectors.selectAuthCode);
const { authorization } = useAuthentication();

View File

@ -4,8 +4,6 @@ import Blob4 from "../../images/SVG/Blob4";
import Title from "@/components/Title";
import SecretDiscountTable from "../../components/SecretDiscountTable";
import Button from "../../components/Button";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
@ -14,25 +12,37 @@ import { useDispatch } from "react-redux";
import { actions } from "@/store";
import { useTranslations } from "@/hooks/translations";
import { useDynamicSize } from "@/hooks/useDynamicSize";
import Header from "../../components/Header";
const placementKey = EPlacementKeys["aura.placement.compatibility.v4.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SecretDiscount() {
const { width, elementRef } = useDynamicSize({ defaultWidth: 560 });
const { height, elementRef: policyContainerRef } = useDynamicSize<HTMLDivElement>({ defaultWidth: 560, defaultHeight: 193 });
const dispatch = useDispatch();
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV4,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV4);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV4);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV4,
paymentPlacement: "main_secret_discount"
})
const paymentEntityMain = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const trialPrice = activeProduct?.trialPrice || 0;
useEffect(() => {
@ -46,6 +56,8 @@ function SecretDiscount() {
navigate(routes.client.compatibilityV4SecretDiscountPaymentModal());
};
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<section className={styles.container} ref={elementRef} style={{
paddingBottom: `${height + 42}px`
@ -59,24 +71,37 @@ function SecretDiscount() {
<Title className={styles.title} variant="h1">
{translate("secret-discount.title")}
</Title>
<SecretDiscountTable />
<SecretDiscountTable
trialPrice={getFormattedPrice(trialPrice, 0)}
trialInterval={trialInterval}
trialPeriod={trialPeriod}
oldPrice={getFormattedPrice(paymentEntityMain?.price || 0, 0)}
oldDiscount={Number(getProperty("discount.old")?.value) || 0}
newDiscount={Number(getProperty("discount.new")?.value) || 0}
currency={currency}
/>
<Button className={styles.button} onClick={openPaymentModal}>
{translate("secret-discount.button-trial", { days: trialDuration })}
{translate("secret-discount.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective")
})}
</Button>
<div className={styles["policy-container"]} ref={policyContainerRef}>
<p className={styles.policy}>
{translate("secret-discount.policy", {
days: trialDuration,
oldDays: getText("old.trial.duration"),
trialPrice: addCurrency(trialPrice, currency),
// days: trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective"),
// oldDays: getText("old.trial.duration"),
// trialPrice: addCurrency(trialPrice, currency),
price: addCurrency(
(
Number(getText("old.price"))
/ (
Number(getText("split.price.value")) || 2
)
// Number(getText("old.price"))
// / (
// Number(getText("split.price.value")) || 2
// )
getFormattedPrice(activeProduct?.price || 0, 0)
), currency),
billingPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</p>
<Blob4 className={styles.blob4} width={width} height={height + 34} />

View File

@ -4,10 +4,8 @@ import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
// import Title from "@/components/Title";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import {addCurrency, ELocalesPlacement} from "@/locales";
import {useEffect, useMemo, useState} from "react";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect, useMemo, useState } from "react";
import Button from "../../components/Button";
import routes from "@/routes";
import { useNavigate } from "react-router-dom";
@ -18,16 +16,25 @@ import metricService, { EGoals, EMetrics } from "@/services/metric/metricService
import { usePreloadImages } from "@/hooks/preload/images";
import { getZodiacSignByDate } from "@/services/zodiac-sign";
import { EUnleashFlags, useUnleash } from "@/hooks/ab/unleash/useUnleash";
import {getFormattedPrice} from "@/utils/price.utils.tsx";
import { getFormattedPrice } from "@/utils/price.utils.tsx";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoice() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV4);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.CompatibilityV4);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v4"],
localesPlacement: ELocalesPlacement.CompatibilityV4,
});
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty
} = useFunnel({
funnel: ELocalesPlacement.CompatibilityV4,
paymentPlacement: "main"
})
const { gender, partnerGender, birthdate, partnerBirthdate } = useSelector(selectors.selectQuestionnaire)
const zodiacSign = getZodiacSignByDate(birthdate);
@ -59,24 +66,24 @@ function TrialChoice() {
const maxProduct = useMemo(() => {
if (!products?.length) return null;
return products.reduce(
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
);
}, [products]);
const maxTrialPrice = useMemo(() => {
if (!maxProduct) return "";
return addCurrency(
getFormattedPrice(maxProduct.trialPrice || 0),
currency
getFormattedPrice(maxProduct.trialPrice || 0),
currency
);
}, [maxProduct, currency]);
const { variant: trialPriceVariant = 'v0', isReady: isReadyTrialPrice } = useUnleash({
flag: EUnleashFlags.compatibilityV4TrialTextPrice,
});
flag: EUnleashFlags.compatibilityV4TrialTextPrice,
});
const handlePriceItem = () => {
metricService.reachGoal(EGoals.SELECT_TRIAL, [EMetrics.YANDEX, EMetrics.KLAVIYO]);
@ -122,7 +129,7 @@ function TrialChoice() {
return (
<div className={styles.container}>
{!(isLoading || !isReadyTrialPrice || !maxProduct) && (
{!(isPending || !isReadyTrialPrice || !maxProduct) && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
{/* {!isLongText && (
@ -133,7 +140,8 @@ function TrialChoice() {
<p className={styles.text}>{
translate('/trial-choice.description', {
maxTrialPrice,
trialDuration: maxProduct.trialDuration,
trialPeriod1: getPeriodText(trialPeriod, trialInterval || 0),
trialPeriod2: getPeriodText(trialPeriod, trialInterval || 0),
br: <br />
})
}</p>
@ -148,12 +156,12 @@ function TrialChoice() {
currency={currency}
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>{
translate(`/trial-choice.trial-text.${trialPriceTextVariant}`, {
<p className={styles["auxiliary-text"]}>
{translate(`${getProperty("text.1")?.value}.${trialPriceTextVariant}`, {
price: maxTrialPrice,
br: <br />
})
}</p>
})}
</p>
</div>
<Button
@ -165,7 +173,7 @@ function TrialChoice() {
</Button>
</>
)}
{(isLoading || !isReadyTrialPrice) && <Loader className={styles.loader} />}
{(isPending || !isReadyTrialPrice) && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -3,8 +3,6 @@ import EmailSubstrate from "../../components/EmailSubstrate";
import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { ELocalesPlacement } from "@/locales";
import { useEffect, useRef, useState } from "react";
import Button from "../../components/Button";
@ -13,14 +11,15 @@ import { useNavigate, useOutletContext } from "react-router-dom";
import Loader from "@/components/Loader";
import { useTranslations } from "@/hooks/translations";
import { IOutletContext } from "@/routerComponents/Compatibility/v4/LayoutPersonalVideo";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoiceVideo() {
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV4);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v4"],
localesPlacement: ELocalesPlacement.V1,
const { products, isPending, currency, getProperty } = useFunnel({
funnel: ELocalesPlacement.CompatibilityV4,
paymentPlacement: "main"
});
const [isDisabled, setIsDisabled] = useState(true);
@ -63,7 +62,7 @@ function TrialChoiceVideo() {
return (
<div className={styles.container}>
<div ref={containerVideoRef} />
{!isLoading && isVisibleElements && (
{!isPending && isVisibleElements && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
<div className={styles["price-container"]}>
@ -76,7 +75,7 @@ function TrialChoiceVideo() {
currency={currency}
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>{getText("text.1")}</p>
<p className={styles["auxiliary-text"]}>{translate(String(getProperty("text.1")?.value))}</p>
</div>
<Button
@ -88,7 +87,7 @@ function TrialChoiceVideo() {
</Button>
</>
)}
{isLoading && <Loader className={styles.loader} />}
{isPending && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -8,14 +8,13 @@ import { usePreloadImages } from "@/hooks/preload/images";
import ZodiacImagesWithBook from "../TrialPayment/components/ZodiacImagesWithBook";
import useTimer from "@/hooks/palmistry/use-timer";
import { useNavigate } from "react-router-dom";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
import { useEffect } from "react";
import { useDispatch } from "react-redux";
import { actions } from "@/store";
import TryAppV1 from "./v1";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TryApp() {
const dispatch = useDispatch();
@ -25,9 +24,9 @@ function TryApp() {
"/v1/palmistry/ticket.svg",
])
const time = useTimer();
const { products, isLoading, currency } = usePaywall({
placementKey: EPlacementKeys["aura.placement.compatibility.v4"],
localesPlacement: ELocalesPlacement.CompatibilityV4,
const { products, isPending, currency } = useFunnel({
funnel: ELocalesPlacement.CompatibilityV4,
paymentPlacement: "main"
});
const activeProduct = products?.[products.length - 1];
@ -49,7 +48,7 @@ function TryApp() {
navigate(routes.client.compatibilityV4PaymentModal());
}
if (isLoading || !activeProduct) {
if (isPending || !activeProduct) {
return <Loader color={LoaderColor.Black} />
}

View File

@ -3,23 +3,21 @@ import { useNavigate } from "react-router-dom";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import Title from "@/components/Title";
import { useCallback, useEffect, useRef, useState } from "react";
import { useCallback, useEffect, useMemo, useState } from "react";
import { sleep } from "@/services/date";
import { CircularProgressbar } from "react-circular-progressbar";
import routes from "@/routes";
import { usePreloadImages } from "@/hooks/preload/images";
import { useSelector } from "react-redux";
import { selectors } from "@/store";
import { getZodiacSignByDate } from "@/services/zodiac-sign";
import GPTAnimationText from "@/components/ui/GPTAnimationText";
import routes from "@/routes";
const POINTS_COUNT = 4;
const TOTAL_ANIMATION_TIME = 24600;
function YourAnalysis() {
const navigate = useNavigate();
const { translate } = useTranslations(ELocalesPlacement.CompatibilityV4);
const [loadingProgress, setLoadingProgress] = useState(0);
const listRef = useRef<Array<HTMLParagraphElement | null>>([]);
const { gender, birthdate } = useSelector(selectors.selectQuestionnaire);
const zodiacSign = getZodiacSignByDate(birthdate);
@ -27,17 +25,14 @@ function YourAnalysis() {
`/zodiac-signs/${gender?.toLowerCase()}/${zodiacSign?.toLowerCase()}.svg`
]);
const [listHeight, setListHeight] = useState(0);
useEffect(() => {
let maxHeight = 0;
listRef.current.forEach((item) => {
if (item?.offsetHeight && item.offsetHeight > maxHeight) {
maxHeight = item.offsetHeight;
}
});
setListHeight(maxHeight);
}, [listRef]);
const points = useMemo(() => {
return [
translate("/your-analysis.point1"),
translate("/your-analysis.point2"),
translate("/your-analysis.point3"),
translate("/your-analysis.point4"),
]
}, [translate]);
// const [currentPoint, setCurrentPoint] = useState(0);
@ -83,35 +78,10 @@ function YourAnalysis() {
<Title variant="h2" className={styles.title}>
{translate("/your-analysis.title")}
</Title>
<div className={styles.list} style={{
height: `${listHeight}px`
}}>
{Array.from(Array(POINTS_COUNT).keys()).map((index) => (
<p
key={index}
className={styles.item}
ref={(el) => listRef.current[index] = el}
style={{
// marginTop: (() => {
// if (index < currentPoint) {
// return `${-(listRef.current[index]?.offsetHeight || 0) - 32}px`
// }
// return "0px"
// })(),,
animationDuration: `${TOTAL_ANIMATION_TIME / (POINTS_COUNT)}ms`,
animationDelay: `${index * (TOTAL_ANIMATION_TIME / (POINTS_COUNT))}ms`
}}
>
{translate(`/your-analysis.point${index + 1}`)}
<span
className={styles.line}
style={{
animationDuration: `${TOTAL_ANIMATION_TIME / (POINTS_COUNT)}ms`
}}
/>
</p>
))}
</div>
<GPTAnimationText
points={points}
totalAnimationTime={24600}
/>
</div>
)
}

View File

@ -13,8 +13,9 @@ import routes from "@/routes";
import NameInput from "./NameInput";
import { useAuthentication } from "@/hooks/authentication/use-authentication";
import { ESourceAuthorization } from "@/api/resources/User";
import { EPlacementKeys, IPaywallProduct } from "@/api/resources/Paywall";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { IFunnelPaymentVariant } from "@/api/resources/Session";
import { useFunnel } from "@/hooks/funnel/useFunnel";
import { ELocalesPlacement } from "@/locales";
interface IEmailEnterPage {
redirectUrl?: string;
@ -37,10 +38,14 @@ function EmailEnterPage({
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const { subPlan } = useParams();
const { error, isLoading, authorization } = useAuthentication();
const { products } = usePaywall({
placementKey: EPlacementKeys["aura.placement.main"],
// const { products } = usePaywall({
// placementKey: EPlacementKeys["aura.placement.main"],
// });
const { products } = useFunnel({
funnel: ELocalesPlacement.V1,
paymentPlacement: "main"
});
const [activeProduct, setActiveProduct] = useState<IPaywallProduct | null>(
const [activeProduct, setActiveProduct] = useState<IFunnelPaymentVariant | null>(
activeProductFromStore
);

View File

@ -2,9 +2,10 @@ import { combineStyles } from "@/services/styles";
import styles from "./styles.module.scss";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import React from "react";
interface PriceComparisonProps {
oldPrice: number | string;
oldPrice: number | string | React.ReactNode;
newPrice: number | string;
}

View File

@ -4,6 +4,7 @@
gap: 37px;
align-items: center;
margin-top: 42px;
color: #090909;
}
.priceCard {
@ -33,7 +34,9 @@
}
&.newPriceCard {
width: 152px;
width: fit-content;
min-width: 152px;
max-width: 172px;
&>.header {
padding: 24px 0;
@ -45,7 +48,7 @@
padding: 55px 0 78px;
&>.price {
font-size: 52px;
font-size: 59px;
line-height: 25px;
font-weight: 600;
}
@ -54,7 +57,7 @@
}
.header {
background: #ffb6c1;
background: #adaaab;
text-align: center;
font-weight: 600;
font-size: 18px;

View File

@ -7,11 +7,11 @@
.table {
background-color: white;
border-radius: 16px;
border-radius: 25px;
padding: 26px 13px 22px;
box-shadow: 0 2px 7px rgba(0, 0, 0, 0.25);
width: 100%;
margin-top: 53px;
margin-top: 39px;
}
.row {
@ -29,11 +29,11 @@
line-height: 125%;
.label {
font-weight: 600;
font-weight: 500;
}
.price {
font-weight: 600;
font-weight: 500;
}
}
@ -57,25 +57,28 @@
.label {
font-size: 14px;
font-weight: 600;
font-weight: 500;
max-width: 60%;
line-height: 125%;
}
.prices {
display: flex;
gap: 8px;
gap: 14px;
align-items: flex-end;
}
.originalPrice {
font-size: 12px;
font-size: 13px;
text-decoration: line-through;
color: #5A5A5A;
line-height: 125%;
font-weight: 500;
}
.discountedPrice {
font-weight: 600;
font-size: 16px;
font-weight: 700;
font-size: 17px;
line-height: 125%;
}
}
@ -85,13 +88,15 @@
text-align: center;
color: #555;
font-size: 13px;
margin-top: 23px;
font-weight: 500;
margin-top: 15px;
}
.description {
max-width: 295px;
font-size: 12px;
line-height: 125%;
margin-top: 34px;
margin-top: 20px;
text-align: center;
font-weight: 300;
}

View File

@ -1,35 +1,32 @@
import Title from "@/components/Title";
import styles from "./styles.module.scss";
import { images } from "../../data";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { Currency } from "@/components/PaymentTable";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
const placementKey = EPlacementKeys["aura.placement.email.compatibility.discount"]
const getPrice = (price: number, currency: Currency) => {
if (price % 100 === 0) {
return addCurrency(price / 100, currency);
}
return addCurrency(
(price / 100).toFixed(2),
currency
);
interface ISecretDiscountTableProps {
trialPrice: number | string;
trialInterval: number;
trialPeriod: PeriodType;
oldPrice: number | string;
oldDiscount: number;
newDiscount: number;
currency: Currency;
}
function SecretDiscountTable() {
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV1,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV1);
function SecretDiscountTable({
trialPrice,
trialInterval,
trialPeriod,
oldPrice,
oldDiscount,
newDiscount,
currency
}: ISecretDiscountTableProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV1);
const activeProduct = products[0];
// const price = activeProduct?.price || 0;
const trialPrice = activeProduct?.trialPrice || 0;
const trialDuration = activeProduct?.trialDuration || 7;
const formatDiscount = (discount: number) => `-${discount}%`;
return (
<div className={styles.container}>
@ -44,21 +41,23 @@ function SecretDiscountTable() {
<Title className={styles.title} variant="h4">
{translate("secret-discount.secret-discount-table_discount-applied")}
</Title>
<span className={styles["old-discount"]}>{getText("old.discount")}</span>
<span className={styles["new-discount"]}>{getText("new.discount")}</span>
<span className={styles["old-discount"]}>{formatDiscount(oldDiscount)}</span>
<span className={styles["new-discount"]}>{formatDiscount(newDiscount)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["days-14"]}`}>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", { days: trialDuration })}</p>
<span className={styles["old-price"]}>{addCurrency(Number(getText("old.price")), currency)}</span>
<span className={styles["new-price"]}>{getPrice(trialPrice, currency)}</span>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}</p>
<span className={styles["old-price"]}>{addCurrency(oldPrice, currency)}</span>
<span className={styles["new-price"]}>{addCurrency(trialPrice, currency)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["save"]}`}>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(getText("save")), currency) })}</p>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(oldPrice) - Number(trialPrice), currency) })}</p>
</div>
<hr />
<div className={`${styles["grid-line"]} ${styles["total-today"]}`}>
<p>{translate("secret-discount.secret-discount-table_total-today")}</p>
<span>{getPrice(trialPrice, currency)}</span>
<span>{addCurrency(trialPrice, currency)}</span>
</div>
</div>
)

View File

@ -23,6 +23,7 @@ import { EPlacementKeys } from "@/api/resources/Paywall";
import BlurComponent from "@/components/BlurComponent";
import { useTranslations } from "@/hooks/translations";
import { ELocalesPlacement } from "@/locales";
import { useMemo } from "react";
function MarketingLanding() {
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV1);
@ -50,6 +51,19 @@ function MarketingLanding() {
}
];
const oldPrice = useMemo(() => {
const text = getText("text.old.price", {}) as string;
const firstLine = text.split(" ").slice(0, 2).join(" ");
const secondLine = text.split(" ").slice(2).join(" ");
return <>
{firstLine}
<br />
<span className={styles.oldPriceSecondLine}>
{secondLine}
</span>
</>
}, [getText]);
return (
<div className={styles.container}>
{/* Background elements */}
@ -129,7 +143,10 @@ function MarketingLanding() {
<UnderstandingYourself />
</div>
<PriceComparison oldPrice={getText("text.old.price", {}) as string} newPrice={`${((products[0]?.trialPrice || 0) / 100).toFixed(2)}`} />
<PriceComparison
oldPrice={oldPrice}
newPrice={`${((products[0]?.trialPrice || 0) / 100).toFixed(2)}`}
/>
<PlanIncludes
title={translate("marketing-landing.plan-includes-title")}
features={features}

View File

@ -161,9 +161,15 @@
.buttonContinue {
position: relative;
z-index: 1000;
max-width: 300px;
max-width: 307px;
min-height: 59px;
font-size: 25px;
margin-top: 48px;
margin-bottom: 64px;
pointer-events: all;
}
}
.oldPriceSecondLine {
text-decoration: line-through;
}

View File

@ -4,8 +4,6 @@ import Blob4 from "../../images/SVG/Blob4";
import Title from "@/components/Title";
import SecretDiscountTable from "../../components/SecretDiscountTable";
import Button from "../../components/Button";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
@ -15,23 +13,36 @@ import { actions } from "@/store";
import { useTranslations } from "@/hooks/translations";
import Header from "@/components/pages/ABDesign/v1/components/Header";
import { useDynamicSize } from "@/hooks/useDynamicSize";
const placementKey = EPlacementKeys["aura.placement.email.compatibility.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SecretDiscount() {
const { width, elementRef } = useDynamicSize({ defaultWidth: 560 });
const { height, elementRef: policyContainerRef } = useDynamicSize<HTMLDivElement>({ defaultWidth: 560, defaultHeight: 193 });
const dispatch = useDispatch();
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingCompatibilityV1,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV1);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV1);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.EmailMarketingCompatibilityV1,
paymentPlacement: "main_secret_discount"
})
const paymentEntityMain = getPaymentEntity("main")
const activeProduct = products[0];
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const trialPrice = activeProduct?.trialPrice || 0;
useEffect(() => {
if (!activeProduct) return;
@ -44,6 +55,8 @@ function SecretDiscount() {
navigate(routes.client.emailMarketingV1SecretDiscountPaymentModal());
}
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<section className={styles.container} ref={elementRef} style={{
paddingBottom: `${height + 42}px`
@ -57,24 +70,37 @@ function SecretDiscount() {
<Title className={styles.title} variant="h1">
{translate("secret-discount.title")}
</Title>
<SecretDiscountTable />
<SecretDiscountTable
trialPrice={getFormattedPrice(trialPrice, 0)}
trialInterval={trialInterval}
trialPeriod={trialPeriod}
oldPrice={getFormattedPrice(paymentEntityMain?.price || 0, 0)}
oldDiscount={Number(getProperty("discount.old")?.value) || 0}
newDiscount={Number(getProperty("discount.new")?.value) || 0}
currency={currency}
/>
<Button className={styles.button} onClick={handlePayment}>
{translate("secret-discount.button-trial", { days: trialDuration })}
{translate("secret-discount.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective")
})}
</Button>
<div className={styles["policy-container"]} ref={policyContainerRef}>
<p className={styles.policy}>
{translate("secret-discount.policy", {
days: trialDuration,
oldDays: getText("old.trial.duration"),
trialPrice: addCurrency(trialPrice, currency),
// days: trialDuration,
// oldDays: getText("old.trial.duration"),
// trialPrice: addCurrency(trialPrice, currency),
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective"),
price: addCurrency(
(
Number(getText("old.price"))
/ (
Number(getText("split.price.value")) || 2
)
// Number(getText("old.price"))
// / (
// Number(getText("split.price.value")) || 2
// )
getFormattedPrice(activeProduct?.price || 0, 0)
), currency),
billingPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</p>
<Blob4 className={styles.blob4} width={width} height={height + 34} />

View File

@ -5,15 +5,12 @@ import Button from "../../components/Button";
import { useDispatch, useSelector } from "react-redux";
import { useEffect } from "react";
import { actions, selectors } from "@/store";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import routes from "@/routes";
import { useNavigate } from "react-router-dom";
import BlurComponent from "@/components/BlurComponent";
import { useTranslations } from "@/hooks/translations";
import { addCurrency, ELocalesPlacement } from "@/locales";
const placementKey = EPlacementKeys["aura.placement.email.marketing"];
import { useFunnel } from "@/hooks/funnel/useFunnel";
function SpecialOffer() {
const dispatch = useDispatch();
@ -21,12 +18,16 @@ function SpecialOffer() {
const activeProduct = useSelector(selectors.selectActiveProduct);
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingCompatibilityV1);
const { products, currency, getText } = usePaywall({
placementKey,
});
const {
products,
currency,
trialInterval,
} = useFunnel({
funnel: ELocalesPlacement.EmailMarketingCompatibilityV1,
paymentPlacement: "main"
})
const trialPrice = ((products[0]?.trialPrice || 0) / 100).toFixed(2) || 0;
const trialDuration = activeProduct?.trialDuration || 7;
const price = (activeProduct?.price || 0) / 100;
useEffect(() => {
@ -45,32 +46,47 @@ function SpecialOffer() {
</Title>
<div className={styles.content}>
<Title className={styles.contentTitle} variant="h2">
{translate("special-offer.start-trial", { days: trialDuration })}
{translate("special-offer.start-trial", { days: trialInterval })}
</Title>
<p className={styles.contentDescription}>
<svg width="20" height="23" viewBox="0 0 20 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_44_3678" style={{ maskType: "luminance" }} maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="23">
<path d="M0 0H20V22.6667H0V0Z" fill="white" />
</mask>
<g mask="url(#mask0_44_3678)">
<path d="M15.2679 1.12743C13.3208 1.12743 11.4571 0.727711 10 0.000244141C8.54335 0.727711 6.67945 1.12743 4.73211 1.12743C3.01673 1.12743 1.36526 0.817012 0 0.245346V9.65397C0 15.7777 4.47844 21.5948 10 22.6667C15.5218 21.5948 20 15.7777 20 9.65397V0.245346C18.635 0.817012 16.9835 1.12743 15.2679 1.12743Z" fill="#00AE37" />
</g>
<path d="M8.03704 15.1012L3.87109 10.9979L5.11941 9.76837L8.03704 12.6421L14.8802 5.90161L16.1285 7.13116L8.03704 15.1012Z" fill="white" />
<path d="M13.9968 20.9725C17.2096 18.7977 19.5429 14.9798 19.9398 10.8855L16.1286 7.13159L8.03711 15.1017L13.9968 20.9725Z" fill="#008E28" />
</svg>
{translate("special-offer.cancel-anytime")}
</p>
<PricingSummary
totalToday={trialPrice}
originalPrice={Number(getText("full.price")) / 100}
originalPrice={
// Number(getText("full.price")) / 100
0
}
discountedPrice={price}
trialDuration={trialDuration}
saveText={getText("text.save") as string}
trialDuration={trialInterval}
// saveText={getText("text.save") as string}
saveText={""}
currency={currency}
/>
<p className={styles.contentPolicy}>
{translate("special-offer.policy", {
days: trialDuration,
price: addCurrency(price, currency)
})}
</p>
<div className={styles.buttonContainer}>
<BlurComponent isActiveBlur={true}>
<BlurComponent isActiveBlur={true} gradientClassName={styles.gradientBlur}>
<Button className={styles.button} onClick={openPaymentModal}>
{translate("special-offer.button-continue")}
</Button>
</BlurComponent>
</div>
<p className={styles.contentPolicy}>
{translate("special-offer.policy", {
days: trialInterval,
price: addCurrency(price, currency)
})}
</p>
</div>
</div>
</>

View File

@ -1,18 +1,20 @@
.container {
width: 100%;
max-width: 560px;
height: fit-content;
min-height: 100dvh;
overflow-x: hidden;
// overflow-x: hidden;
display: flex;
flex-direction: column;
align-items: center;
background-color: #5956E9;
color: #fff;
padding-top: 39px;
margin: 0 auto;
}
.title {
font-size: 26px;
font-size: 32px;
line-height: 125%;
font-weight: 600;
margin-bottom: 0;
@ -24,7 +26,7 @@
background-color: #fff;
border-radius: 30px 30px 0 0;
min-height: calc(100dvh - 39px - 26px * 1.25 - 29px);
margin-top: 29px;
margin-top: 22px;
padding: 53px 18px 160px;
color: #000;
display: flex;
@ -34,16 +36,19 @@
&>.contentTitle {
font-size: 23px;
line-height: 125%;
font-weight: 600;
font-weight: 500;
margin-bottom: 0;
}
&>.contentDescription {
display: flex;
align-items: center;
gap: 8px;
font-size: 18px;
line-height: 125%;
font-weight: 300;
font-weight: 700;
margin-bottom: 0;
margin-top: 7px;
margin-top: 21px;
}
&>.contentPolicy {
@ -51,8 +56,9 @@
line-height: 125%;
font-weight: 300;
margin-bottom: 0;
margin-top: 36px;
margin-top: 39px;
text-align: center;
color: #6F6D6D;
}
&>.button {
@ -65,8 +71,9 @@
width: 100%;
display: flex;
justify-content: center;
position: fixed;
bottom: 0;
position: sticky;
bottom: calc(0dvh + 25px);
margin-top: 46px;
pointer-events: none;
z-index: 1000;
@ -75,7 +82,12 @@
z-index: 1000;
max-width: 300px;
margin-top: 24px;
margin-bottom: 64px;
margin-bottom: 12px;
pointer-events: all;
}
}
.gradientBlur {
left: -18px !important;
right: -18px !important;
}

View File

@ -3,7 +3,7 @@ import EmailItem, { IEmailItemProps } from "../EmailItem";
import styles from "./styles.module.css";
import { useEffect, useMemo, useRef, useState } from "react";
import { Currency } from "../PaymentTable";
import { IPaywallProduct } from "@/api/resources/Paywall";
import { IFunnelPaymentVariant } from "@/api/resources/Session";
const getEmails = (
prices: number[] = [9, 9, 9, 9, 9, 5, 13.67]
@ -22,7 +22,7 @@ const getEmails = (
interface IEmailsListProps {
title: string | JSX.Element | JSX.Element[];
products: IPaywallProduct[];
products: IFunnelPaymentVariant[];
classNameContainer?: string;
classNameTitle?: string;
classNameEmailItem?: string;

View File

@ -56,8 +56,8 @@ function Header({
}
if (
location.pathname.includes("/questionnaire") ||
location.pathname.includes("/about-us") ||
location.pathname.includes("/payment/stripe")
location.pathname.includes("/about-us")
// location.pathname.includes("/payment/stripe")
) {
return navigate(-1);
}

View File

@ -52,6 +52,12 @@ function Navbar({ isOpen, closeMenu }: NavbarProps): JSX.Element {
{capitalize(item.title)}
</Link>
))}
<Link
to={routes.client.profile()}
onClick={closeMenu}
>
{translate("profile")}
</Link>
<a
href="https://aura.wit.life/"
onClick={closeMenu}

View File

@ -1,12 +1,12 @@
import Title from "@/components/Title"
import styles from "./styles.module.scss"
import { IPaywallProduct } from "@/api/resources/Paywall"
import { useTranslations } from "@/hooks/translations"
import { ELocalesPlacement } from "@/locales"
import { useEmailsGeneration } from "@/hooks/emailsGeneration/useEmailsGeneration"
import { IFunnelPaymentVariant } from "@/api/resources/Session"
interface IEmailsListProps {
products: Array<IPaywallProduct & { weight: number }>
products: Array<IFunnelPaymentVariant & { weight: number }>
}
function EmailsList({ products }: IEmailsListProps) {

View File

@ -6,10 +6,18 @@ import { selectors } from "@/store";
import { getFormattedPrice } from "@/utils/price.utils";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { palmistryV1Prefix } from "@/routes";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
function PaymentInformation() {
const { translate } = useTranslations(ELocalesPlacement.PalmistryV1);
interface IPaymentInformationProps {
trialPeriod: PeriodType;
trialInterval: number;
}
function PaymentInformation({
trialPeriod,
trialInterval
}: IPaymentInformationProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.PalmistryV1);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const fullPrice = activeProductFromStore?.price || 0;
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -23,7 +31,7 @@ function PaymentInformation() {
</div>
<Title className={styles.title} variant="h3">
{translate("/payment.payment_information.title", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
})}
</Title>
<div className={styles["total-container"]}>

View File

@ -1,36 +1,32 @@
import Title from "@/components/Title";
import styles from "./styles.module.scss";
import { images } from "../../data";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { Currency } from "@/components/PaymentTable";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
const placementKey = EPlacementKeys["aura.placement.palmistry.secret.discount"]
const getPrice = (price: number, currency: Currency) => {
if (price % 100 === 0) {
return addCurrency(price / 100, currency);
}
return addCurrency(
(price / 100).toFixed(2),
currency
);
interface ISecretDiscountTableProps {
trialPrice: number | string;
trialInterval: number;
trialPeriod: PeriodType;
oldPrice: number | string;
oldDiscount: number;
newDiscount: number;
currency: Currency;
}
function SecretDiscountTable() {
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingPalmistryV2,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
function SecretDiscountTable({
trialPrice,
trialInterval,
trialPeriod,
oldPrice,
oldDiscount,
newDiscount,
currency
}: ISecretDiscountTableProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const activeProduct = products[0]
// const price = activeProduct?.price || 0;
const trialPrice = activeProduct?.trialPrice || 0;
const trialDuration = activeProduct?.trialDuration || 7;
const formatDiscount = (discount: number) => `-${discount}%`;
return (
<div className={styles.container}>
@ -45,21 +41,23 @@ function SecretDiscountTable() {
<Title className={styles.title} variant="h4">
{translate("secret-discount.secret-discount-table_discount-applied")}
</Title>
<span className={styles["old-discount"]}>{getText("old.discount")}</span>
<span className={styles["new-discount"]}>{getText("new.discount")}</span>
<span className={styles["old-discount"]}>{formatDiscount(oldDiscount)}</span>
<span className={styles["new-discount"]}>{formatDiscount(newDiscount)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["days-14"]}`}>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", { days: trialDuration })}</p>
<span className={styles["old-price"]}>{addCurrency(Number(getText("old.price")), currency)}</span>
<span className={styles["new-price"]}>{getPrice(trialPrice, currency)}</span>
<p>{translate("secret-discount.secret-discount-table_cost-after-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}</p>
<span className={styles["old-price"]}>{addCurrency(oldPrice, currency)}</span>
<span className={styles["new-price"]}>{addCurrency(trialPrice, currency)}</span>
</div>
<div className={`${styles["grid-line"]} ${styles["save"]}`}>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(getText("save")), currency) })}</p>
<p>{translate("secret-discount.secret-discount-table_you-save", { amount: addCurrency(Number(oldPrice) - Number(trialPrice), currency) })}</p>
</div>
<hr />
<div className={`${styles["grid-line"]} ${styles["total-today"]}`}>
<p>{translate("secret-discount.secret-discount-table_total-today")}</p>
<span>{getPrice(trialPrice, currency)}</span>
<span>{addCurrency(trialPrice, currency)}</span>
</div>
</div>
)

View File

@ -8,19 +8,27 @@ import Button from "../../components/Button";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import Stars from "../../components/Stars";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { useNavigate } from "react-router-dom";
import { useEffect } from "react";
import routes from "@/routes";
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
function Payment() {
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.palmistry.redesign"],
localesPlacement: ELocalesPlacement.PalmistryV1,
});
const { translate } = useTranslations(ELocalesPlacement.PalmistryV1);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod
} = useFunnel({
funnel: ELocalesPlacement.PalmistryV1,
paymentPlacement: "main"
})
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.PalmistryV1);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const trialPrice = activeProductFromStore?.trialPrice || 0;
@ -32,12 +40,14 @@ function Payment() {
useEffect(() => {
if (!products.length) return;
const _targetProduct = products.find(product => product._id === activeProductFromStore?._id);
const _targetProduct = products.find(product => product.id === activeProductFromStore?.id);
if (!_targetProduct || !activeProductFromStore) {
navigate(routes.client.palmistryV1TrialChoice());
}
}, [products, activeProductFromStore]);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<div className={styles["app-number-one"]}>
@ -48,15 +58,20 @@ function Payment() {
</p>
<Stars />
</div>
<PaymentInformation />
<PaymentInformation
trialPeriod={trialPeriod}
trialInterval={trialInterval}
/>
<div className={styles["prices-description"]}>
{translate("/payment.will_be_charged", {
// TODO: add split price (?)
splitPrice: addCurrency(getFormattedPrice(
(
fullPrice / (
Number(getText("split.price.value")) || 2
)
)
// (
// fullPrice / (
// Number(getProperty("split.price.value")?.value) || 2
// )
// )
fullPrice
), currency),
save: addCurrency(
getFormattedPrice(fullPrice - trialPrice),
@ -68,7 +83,7 @@ function Payment() {
trialInfo: (
<b>
{translate("/payment.will_be_charged_trial_info", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
trialPrice: addCurrency(
getFormattedPrice(trialPrice),
currency
@ -76,6 +91,7 @@ function Payment() {
})}
</b>
),
perPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</div>
<Guarantees />

View File

@ -10,6 +10,7 @@
max-width: 343px;
font-size: 24px;
margin-top: 16px;
line-height: 1;
}
.payment-modal-hide {

View File

@ -6,27 +6,34 @@ import Button from "../../components/Button";
import Blob2 from "../../images/SVG/Blob2";
import { useNavigate } from "react-router-dom";
import routes from "@/routes";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useTranslations } from "@/hooks/translations";
import { useEffect } from "react";
import metricService, { EGoals, EMetrics } from "@/services/metric/metricService";
const placementKey = EPlacementKeys["aura.placement.palmistry.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SaveOff() {
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingPalmistryV2,
});
// const activeProductFromStore = useSelector(selectors.selectActiveProduct);
// const activeProduct = products.find(product => product?.trialPrice === activeProductFromStore?.trialPrice) || products[0]
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.PalmistryV1,
paymentPlacement: "main_secret_discount"
})
const paymentEntity = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
// const price = (activeProduct?.price || 0) / 100
const trialDuration = activeProduct?.trialDuration || 7
const navigate = useNavigate();
@ -38,20 +45,22 @@ function SaveOff() {
metricService.reachGoal(EGoals.DISCOUNT_PAGE_VISIT, [EMetrics.YANDEX, EMetrics.KLAVIYO]);
}, []);
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<>
<Blob className={styles.blob} />
<Blob2 className={styles.blob2} />
<img className={styles.gift} src={images("gift.svg")} alt="gift" />
<Title className={styles.title}>
{translate("save-off.title", { discount: getText("discount") })}
{translate("save-off.title", { discount: getProperty("discount.new")?.value })}
</Title>
<p className={styles.description}>
{translate("save-off.instead", {
price: <span className={styles.price}>{addCurrency(trialPrice, currency)}</span>,
oldPrice: <span className={styles.discount}>
{translate("save-off.instead-old-price", {
oldPrice: addCurrency(getText("old.price") as string, currency)
oldPrice: addCurrency(getFormattedPrice(paymentEntity?.price || 0, 0), currency)
})}
</span>
})}
@ -59,19 +68,20 @@ function SaveOff() {
<p className={styles.point} style={{ marginTop: 12 }}>
<img src={images("fire.png")} alt="fire" />
{translate("save-off.trial-duration", {
// days: trialDuration
days: trialDuration,
oldTrialDuration: <s>{translate("save-off.old-trial-duration", {
oldTrialDuration: getText("old.trial.duration")
})}</s>,
trialPeriod: getPeriodText(trialPeriod, trialInterval),
oldTrialPeriod: <s>
{getPeriodText(paymentEntity?.trialPeriod || "DAY", paymentEntity?.trialInterval || 0)}
</s>,
})}
</p>
<p className={styles.point}>
<img src={images("gift.png")} alt="gift" />
{translate("save-off.discount-offer", { discount: getText("discount") })}
{translate("save-off.discount-offer", { discount: getProperty("discount.new")?.value })}
</p>
<Button className={styles.button} onClick={handleNext}>
{translate("save-off.button-trial", { days: trialDuration })}
{translate("save-off.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval)
})}
</Button>
</>
)

View File

@ -32,7 +32,7 @@ function ScannedPhoto() {
const [smallPhotoState, setSmallPhotoState] = useState(false);
const feature = useSelector(selectors.selectFeature);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("ios"), [feature]);
const isIOSPath = useMemo(() => feature?.toLowerCase()?.includes("black") || feature?.toLowerCase()?.includes("ios"), [feature]);
const authCode = useSelector(selectors.selectAuthCode);
const { authorization } = useAuthentication();

View File

@ -4,8 +4,6 @@ import Blob4 from "../../images/SVG/Blob4";
import Title from "@/components/Title";
import SecretDiscountTable from "../../components/SecretDiscountTable";
import Button from "../../components/Button";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect } from "react";
import { useNavigate } from "react-router-dom";
@ -15,22 +13,36 @@ import { actions } from "@/store";
import { useTranslations } from "@/hooks/translations";
import { useDynamicSize } from "@/hooks/useDynamicSize";
import Header from "../../components/Header";
const placementKey = EPlacementKeys["aura.placement.palmistry.secret.discount"]
import { useFunnel } from "@/hooks/funnel/useFunnel";
import Loader, { LoaderColor } from "@/components/Loader";
import { getFormattedPrice } from "@/utils/price.utils";
function SecretDiscount() {
const { width, elementRef } = useDynamicSize({ defaultWidth: 560 });
const { height, elementRef: policyContainerRef } = useDynamicSize<HTMLDivElement>({ defaultWidth: 560, defaultHeight: 193 });
const dispatch = useDispatch();
const navigate = useNavigate();
const { products, currency, getText } = usePaywall({
placementKey,
localesPlacement: ELocalesPlacement.EmailMarketingPalmistryV2,
});
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
billingInterval,
billingPeriod,
getProperty,
getPaymentEntity
} = useFunnel({
funnel: ELocalesPlacement.PalmistryV1,
paymentPlacement: "main_secret_discount"
})
const paymentEntityMain = getPaymentEntity("main")
const activeProduct = products[0]
const trialPrice = (activeProduct?.trialPrice || 0) / 100;
const trialDuration = activeProduct?.trialDuration || 7;
const trialPrice = activeProduct?.trialPrice || 0;
useEffect(() => {
if (!activeProduct) return;
@ -43,6 +55,8 @@ function SecretDiscount() {
navigate(routes.client.palmistryV1SecretDiscountPaymentModal())
};
if (isPending) return <Loader color={LoaderColor.Black} />
return (
<section className={styles.container} ref={elementRef} style={{
paddingBottom: `${height + 42}px`
@ -56,24 +70,37 @@ function SecretDiscount() {
<Title className={styles.title} variant="h1">
{translate("secret-discount.title")}
</Title>
<SecretDiscountTable />
<SecretDiscountTable
trialPrice={getFormattedPrice(trialPrice, 0)}
trialInterval={trialInterval}
trialPeriod={trialPeriod}
oldPrice={getFormattedPrice(paymentEntityMain?.price || 0, 0)}
oldDiscount={Number(getProperty("discount.old")?.value) || 0}
newDiscount={Number(getProperty("discount.new")?.value) || 0}
currency={currency}
/>
<Button className={styles.button} onClick={openPaymentModal}>
{translate("secret-discount.button-trial", { days: trialDuration })}
{translate("secret-discount.button-trial", {
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective")
})}
</Button>
<div className={styles["policy-container"]} ref={policyContainerRef}>
<p className={styles.policy}>
{translate("secret-discount.policy", {
days: trialDuration,
oldDays: getText("old.trial.duration"),
trialPrice: addCurrency(trialPrice, currency),
// days: trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval, "nominative", "period_adjective"),
// oldDays: getText("old.trial.duration"),
// trialPrice: addCurrency(trialPrice, currency),
price: addCurrency(
(
Number(getText("old.price"))
/ (
Number(getText("split.price.value")) || 2
)
// Number(getText("old.price"))
// / (
// Number(getText("split.price.value")) || 2
// )
getFormattedPrice(activeProduct?.price || 0, 0)
), currency),
billingPeriod: getPeriodText(billingPeriod, billingInterval || 0)
})}
</p>
<Blob4 className={styles.blob4} width={width} height={height + 34} />

View File

@ -4,10 +4,8 @@ import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
// import Title from "@/components/Title";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import {addCurrency, ELocalesPlacement} from "@/locales";
import {useEffect, useMemo, useState} from "react";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useEffect, useMemo, useState } from "react";
import Button from "../../components/Button";
import routes from "@/routes";
import { useNavigate } from "react-router-dom";
@ -18,16 +16,25 @@ import metricService, { EGoals, EMetrics, useMetricABFlags } from "@/services/me
import TrialChoiceV1 from "./v1";
import { usePreloadImages } from "@/hooks/preload/images";
import { EUnleashFlags, useUnleash } from "@/hooks/ab/unleash/useUnleash";
import {getFormattedPrice} from "@/utils/price.utils.tsx";
import { getFormattedPrice } from "@/utils/price.utils.tsx";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoice() {
const { translate } = useTranslations(ELocalesPlacement.PalmistryV1);
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.PalmistryV1);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency } = usePaywall({
placementKey: EPlacementKeys["aura.placement.palmistry.redesign"],
localesPlacement: ELocalesPlacement.PalmistryV1,
});
const {
isPending,
products,
currency,
trialInterval,
trialPeriod,
getProperty
} = useFunnel({
funnel: ELocalesPlacement.PalmistryV1,
paymentPlacement: "main"
})
usePreloadImages([
"/v1/palmistry/trial-payment/girl2.png",
@ -56,23 +63,23 @@ function TrialChoice() {
const maxProduct = useMemo(() => {
if (!products?.length) return null;
return products.reduce(
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
(max, product) => {
return Number(product.trialPrice || 0) > Number(max.trialPrice || 0) ? product : max
},
products[0]
);
}, [products]);
const maxTrialPrice = useMemo(() => {
if (!maxProduct) return "";
return addCurrency(
getFormattedPrice(maxProduct.trialPrice || 0),
currency
getFormattedPrice(maxProduct.trialPrice || 0),
currency
);
}, [maxProduct, currency]);
const { variant: trialPriceVariant = 'v0', isReady: isReadyTrialPrice } = useUnleash({
flag: EUnleashFlags.palmistryV1TrialTextPrice,
});
flag: EUnleashFlags.palmistryV1TrialTextPrice,
});
const handlePriceItem = () => {
metricService.reachGoal(EGoals.SELECT_TRIAL, [EMetrics.YANDEX, EMetrics.KLAVIYO]);
@ -130,7 +137,7 @@ function TrialChoice() {
return (
<div className={styles.container}>
{!(isLoading || !isReadyTrialPrice || !maxProduct) && (
{!(isPending || !isReadyTrialPrice || !maxProduct) && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
{/* {!isLongText && (
@ -141,7 +148,8 @@ function TrialChoice() {
<p className={styles.text}>{
translate('/trial-choice.description', {
maxTrialPrice,
trialDuration: maxProduct.trialDuration,
trialPeriod1: getPeriodText(trialPeriod, trialInterval || 0),
trialPeriod2: getPeriodText(trialPeriod, trialInterval || 0),
br: <br />
})
}</p>
@ -157,7 +165,7 @@ function TrialChoice() {
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>
{translate(`/trial-choice.trial-text.${trialPriceTextVariant}`, {
{translate(`${getProperty("text.1")?.value}.${trialPriceTextVariant}`, {
price: maxTrialPrice,
br: <br />
})}
@ -173,7 +181,7 @@ function TrialChoice() {
</Button>
</>
)}
{(isLoading || !isReadyTrialPrice) && <Loader className={styles.loader} />}
{(isPending || !isReadyTrialPrice) && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -3,7 +3,6 @@ import styles from "./styles.module.scss";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { useNavigate } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { useEffect, useState } from "react";
import { actions, selectors } from "@/store";
import metricService, { EGoals, EMetrics } from "@/services/metric/metricService";
@ -12,8 +11,8 @@ import Button from "@/components/PalmistryV1/components/Button";
import Loader from "@/components/Loader";
import EmailSubstrate from "@/components/PalmistryV1/components/EmailSubstrate";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { EPlacementKeys } from "@/api/resources/Paywall";
import EmailsList from "@/components/PalmistryV1/components/EmailsList";
import { useFunnel } from "@/hooks/funnel/useFunnel";
const productWeights: Record<number, number> = {
100: 1, // 10%
@ -26,9 +25,9 @@ function TrialChoiceV1() {
const { translate } = useTranslations(ELocalesPlacement.PalmistryV1);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.palmistry.redesign"],
localesPlacement: ELocalesPlacement.PalmistryV1,
const { products, isPending, currency, getProperty } = useFunnel({
funnel: ELocalesPlacement.PalmistryV1,
paymentPlacement: "main"
});
const popularProduct = products[products.length - 1];
@ -75,7 +74,7 @@ function TrialChoiceV1() {
return (
<div className={styles.container}>
{!isLoading && (
{!isPending && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
{/* {!isLongText && (
@ -107,7 +106,7 @@ function TrialChoiceV1() {
})}
</p>
<div className={styles["price-container"]}>
<p className={styles["auxiliary-text"]}>{getText("text.1")}</p>
<p className={styles["auxiliary-text"]}>{translate(String(getProperty("text.1")?.value))}</p>
<PriceList
products={products}
activeItem={selectedPrice}
@ -116,7 +115,7 @@ function TrialChoiceV1() {
classNamePricesContainer={styles["prices-container"]}
currency={currency}
click={handlePriceItem}
preActiveItems={[popularProduct?._id]}
preActiveItems={[popularProduct?.id]}
/>
</div>
@ -133,7 +132,7 @@ function TrialChoiceV1() {
</Button>
</>
)}
{isLoading && <Loader className={styles.loader} />}
{isPending && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -3,8 +3,6 @@ import EmailSubstrate from "../../components/EmailSubstrate";
import styles from "./styles.module.scss";
import { actions, selectors } from "@/store";
import PriceList from "@/components/pages/ABDesign/v1/components/PriceList";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { ELocalesPlacement } from "@/locales";
import { useEffect, useRef, useState } from "react";
import Button from "../../components/Button";
@ -13,14 +11,15 @@ import { useNavigate, useOutletContext } from "react-router-dom";
import Loader from "@/components/Loader";
import { useTranslations } from "@/hooks/translations";
import { IOutletContext } from "@/routerComponents/Palmistry/v1/LayoutPersonalVideo";
import { useFunnel } from "@/hooks/funnel/useFunnel";
function TrialChoiceVideo() {
const { translate } = useTranslations(ELocalesPlacement.PalmistryV1);
const navigate = useNavigate();
const dispatch = useDispatch();
const { products, isLoading, currency, getText } = usePaywall({
placementKey: EPlacementKeys["aura.placement.palmistry.redesign"],
localesPlacement: ELocalesPlacement.V1,
const { products, isPending, currency, getProperty } = useFunnel({
funnel: ELocalesPlacement.PalmistryV1,
paymentPlacement: "main"
});
const [isDisabled, setIsDisabled] = useState(true);
@ -63,7 +62,7 @@ function TrialChoiceVideo() {
return (
<div className={styles.container}>
<div ref={containerVideoRef} />
{!isLoading && isVisibleElements && (
{!isPending && isVisibleElements && (
<>
<EmailSubstrate className={styles["email-substrate"]} email={email} />
<div className={styles["price-container"]}>
@ -76,7 +75,7 @@ function TrialChoiceVideo() {
currency={currency}
click={handlePriceItem}
/>
<p className={styles["auxiliary-text"]}>{getText("text.1")}</p>
<p className={styles["auxiliary-text"]}>{translate(String(getProperty("text.1")?.value))}</p>
</div>
<Button
@ -88,7 +87,7 @@ function TrialChoiceVideo() {
</Button>
</>
)}
{isLoading && <Loader className={styles.loader} />}
{isPending && <Loader className={styles.loader} />}
</div>
);
}

View File

@ -6,10 +6,18 @@ import { selectors } from "@/store";
import { getFormattedPrice } from "@/utils/price.utils";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { palmistryV1Prefix } from "@/routes";
import { useTranslations } from "@/hooks/translations";
import { PeriodType, useTranslations } from "@/hooks/translations";
function PaymentInformation() {
const { translate } = useTranslations(ELocalesPlacement.PalmistryV1);
interface IPaymentInformationProps {
trialPeriod: PeriodType;
trialInterval: number;
}
function PaymentInformation({
trialPeriod,
trialInterval
}: IPaymentInformationProps) {
const { translate, getPeriodText } = useTranslations(ELocalesPlacement.PalmistryV1);
const activeProductFromStore = useSelector(selectors.selectActiveProduct);
const trialPrice = activeProductFromStore?.trialPrice || 0;
const currency = useSelector(selectors.selectCurrency);
@ -22,7 +30,7 @@ function PaymentInformation() {
</div>
<Title className={styles.title} variant="h3">
{translate("/payment.payment_information.title", {
trialDuration: activeProductFromStore?.trialDuration,
trialPeriod: getPeriodText(trialPeriod, trialInterval || 0, "nominative", "period_adjective"),
})}
</Title>
<div className={styles["total-container"]}>

View File

@ -4,15 +4,17 @@ import Button from "../Button";
import GuardPayments from "../GuardPayments";
import { useCallback, useState } from "react";
import FullScreenModal from "@/components/FullScreenModal";
import { EPlacementKeys, IPaywallProduct } from "@/api/resources/Paywall";
import { EPlacementKeys } from "@/api/resources/Paywall";
import { usePaywall } from "@/hooks/paywall/usePaywall";
import { useTranslations } from "@/hooks/translations";
import { addCurrency, ELocalesPlacement } from "@/locales";
import { IFunnelPaymentVariant } from "@/api/resources/Session";
interface IPaymentTableProps {
product: IPaywallProduct;
product: IFunnelPaymentVariant;
gender: string;
placementKey: EPlacementKeys;
trialInterval: number;
buttonClick: () => void;
}
@ -21,6 +23,7 @@ function PaymentTable({
product,
placementKey,
buttonClick,
trialInterval
}: IPaymentTableProps) {
const { translate } = useTranslations(ELocalesPlacement.EmailMarketingPalmistryV2);
const { getText, currency } = usePaywall({
@ -115,7 +118,7 @@ function PaymentTable({
</div>
</div>
<Button className={styles.button} onClick={buttonClick}>
{translate("trial-payment.get_trial_days", { days: product.trialDuration })}
{translate("trial-payment.get_trial_days", { days: trialInterval })}
</Button>
<GuardPayments />
<p className={styles.policy}>
@ -125,7 +128,7 @@ function PaymentTable({
{translate("trial-payment.policy_link")}
</a>
),
trialDuration: product.trialDuration,
trialDuration: trialInterval,
price: addCurrency(product.price / 100, currency),
trialPrice: getPrice(product.trialPrice || 0),
})}

Some files were not shown because too many files have changed in this diff Show More