/* ============================================================ i18n_resume.jsx — платная услуга «Резюме по международному стандарту»: строки интерфейса, сценарий чат-интервью на родном языке и заготовки CV по профессиям. Всё, что видно на экране резюме, живёт здесь. ============================================================ */ const RESUME = { price: 150000, priceLabel: { ru: '150 000 сум', uz: '150 000 so‘m' }, ready: { ru: 'за 15 минут', uz: '15 daqiqada' }, }; /* ---------- строки экрана ---------- */ const RES_UI = { ru: { nav: 'Резюме', title: 'Резюме для работы за рубежом', sub: 'Отвечаете на вопросы на своём языке — мы делаем резюме на английском по международному стандарту', startBtn: 'Собрать моё резюме', startAgain: 'Собрать заново', price: '150 000 сум', priceNote: 'Разово. Файл остаётся у вас навсегда', interviewer: 'Специалист по резюме', online: 'на связи', typing: 'печатает', inputPh: 'Ответьте своими словами…', voiceHint: 'Можно голосом', multiHint: 'Отметьте всё, что делали. Потом нажмите «Готово»', multiDone: 'Готово', uploadTitle: 'Диплом, разряд, сертификат', uploadSub: 'PDF или фото. Впишем в резюме отдельным разделом', uploadSkip: 'У меня нет документа', photoTitle: 'Фотография', photoSub: 'Деловое фото, лицо видно, без очков и головного убора', photoSkip: 'Сделаю позже', photoDone: 'Фото добавлено', howItSounds: 'Вы сказали', howItSoundsEn: 'В резюме это будет так', building: 'Собираю резюме', buildingSub: 'Перевод · формулировки · проверка на ATS', readyTitle: 'Резюме готово', readySub: 'Посмотрите. Полная версия и файлы — после оплаты', lockedTitle: 'Полное резюме — 150 000 сум', lockedSub: 'PDF и Word на английском и русском, с фотографией. Проверено на ATS — робот работодателя прочитает его без ошибок', payBtn: 'Оплатить 150 000 сум', payLater: 'Пока не буду', inPack: 'Что входит', pack1: 'Резюме на английском — 1 страница, формат ATS', pack2: 'Та же версия на русском — для местных работодателей', pack3: 'Фотография вставлена и обрезана как надо', pack4: 'Файлы PDF и Word — отправить с телефона', pack5: 'Проверка живым специалистом перед выдачей', paidTitle: 'Готово, резюме ваше', paidSub: 'Файлы пришли в Telegram и лежат здесь, в приложении', dl_pdf: 'Скачать PDF', dl_docx: 'Скачать Word', dl_tg: 'Отправить в Telegram', viewRu: 'Русская версия', viewEn: 'Английская версия', openAndSave: 'Открыть и скачать', twoVersions: 'Английская и русская версии, готовы к отправке', withPhoto: 'С фото', onePage: '1 страница', atsOk: 'проверено на ATS', forEmployer: 'работодателю', forEditing: 'для правок', toSelf: 'себе', savedPdf: 'PDF сохранён в «Загрузки»', savedDoc: 'Word-файл сохранён в «Загрузки»', sentTg: 'Отправили файлы вам в Telegram', saveFailed: 'Не удалось сохранить файл — попробуйте ещё раз', pdfNote: 'PDF — на английском: его читает программа работодателя. Русская версия удобна для местных компаний.', matchTitle: 'Вам подходит', matchSub: 'Посчитали по вашей анкете: возраст, профессия, опыт, язык и документы', matchBtn: 'Смотреть подходящие вакансии', atsNote: 'ATS — программа, через которую работодатель просматривает резюме. Она не читает таблицы, рамки и фон, поэтому мы их не используем.', consultUpsell: 'Нужен живой разбор?', consultUpsellSub: 'Специалист посмотрит резюме и подскажет, куда с ним идти — 100 000 сум', // разделы CV cv_summary: 'О себе', cv_exp: 'Опыт работы', cv_skills: 'Навыки', cv_certs: 'Документы и разряды', cv_langs: 'Языки', cv_pers: 'Личные данные', cv_ready: 'Готов к переезду', cv_present: 'по настоящее время', }, uz: { nav: 'Rezyume', title: 'Xorijda ish uchun rezyume', sub: 'Savollarga o‘z tilingizda javob berasiz — biz xalqaro standart bo‘yicha ingliz tilida rezyume tayyorlaymiz', startBtn: 'Rezyumemni tayyorlash', startAgain: 'Qaytadan tuzish', price: '150 000 so‘m', priceNote: 'Bir marta. Fayl abadiy sizda qoladi', interviewer: 'Rezyume bo‘yicha mutaxassis', online: 'aloqada', typing: 'yozmoqda', inputPh: 'O‘z so‘zingiz bilan javob bering…', voiceHint: 'Ovoz bilan ham bo‘ladi', multiHint: 'Qilgan ishlaringizni belgilang. Keyin «Tayyor» ni bosing', multiDone: 'Tayyor', uploadTitle: 'Diplom, razryad, sertifikat', uploadSub: 'PDF yoki rasm. Rezyumega alohida bo‘lim qilib kiritamiz', uploadSkip: 'Hujjatim yo‘q', photoTitle: 'Fotosurat', photoSub: 'Ishchan surat, yuz ko‘rinsin, ko‘zoynak va bosh kiyimsiz', photoSkip: 'Keyinroq qilaman', photoDone: 'Surat qo‘shildi', howItSounds: 'Siz aytdingiz', howItSoundsEn: 'Rezyumeda bu shunday bo‘ladi', building: 'Rezyume tuzilmoqda', buildingSub: 'Tarjima · ifodalar · ATS tekshiruvi', readyTitle: 'Rezyume tayyor', readySub: 'Ko‘rib chiqing. To‘liq versiya va fayllar — to‘lovdan keyin', lockedTitle: 'To‘liq rezyume — 150 000 so‘m', lockedSub: 'Ingliz va rus tilida PDF va Word, surat bilan. ATS tekshiruvidan o‘tgan — ish beruvchining dasturi xatosiz o‘qiydi', payBtn: '150 000 so‘m to‘lash', payLater: 'Hozircha yo‘q', inPack: 'Nimalar kiradi', pack1: 'Ingliz tilida rezyume — 1 bet, ATS formati', pack2: 'Shu versiya rus tilida — mahalliy ish beruvchilar uchun', pack3: 'Fotosurat joylangan va kerakli o‘lchamda kesilgan', pack4: 'PDF va Word fayllari — telefondan yuborish uchun', pack5: 'Berishdan oldin jonli mutaxassis tekshiradi', paidTitle: 'Tayyor, rezyume sizniki', paidSub: 'Fayllar Telegramga keldi va shu ilovada turibdi', dl_pdf: 'PDF yuklab olish', dl_docx: 'Word yuklab olish', dl_tg: 'Telegramga yuborish', viewRu: 'Ruscha versiya', viewEn: 'Inglizcha versiya', openAndSave: 'Ochish va yuklab olish', twoVersions: 'Ingliz va rus versiyalari, yuborishga tayyor', withPhoto: 'Surat bilan', onePage: '1 bet', atsOk: 'ATS tekshiruvidan o‘tgan', forEmployer: 'ish beruvchiga', forEditing: 'tahrirlash uchun', toSelf: 'o‘zingizga', savedPdf: 'PDF «Yuklamalar»ga saqlandi', savedDoc: 'Word fayli «Yuklamalar»ga saqlandi', sentTg: 'Fayllarni Telegramga yubordik', saveFailed: 'Faylni saqlab bo‘lmadi — qayta urinib ko‘ring', pdfNote: 'PDF — ingliz tilida: uni ish beruvchining dasturi o‘qiydi. Ruscha versiya mahalliy kompaniyalar uchun qulay.', matchTitle: 'Sizga mos keladi', matchSub: 'Anketangiz bo‘yicha hisobladik: yosh, kasb, tajriba, til va hujjatlar', matchBtn: 'Mos vakansiyalarni ko‘rish', atsNote: 'ATS — ish beruvchi rezyumelarni ko‘radigan dastur. U jadval, ramka va fonni o‘qimaydi, shuning uchun biz ulardan foydalanmaymiz.', consultUpsell: 'Jonli tahlil kerakmi?', consultUpsellSub: 'Mutaxassis rezyumeni ko‘rib, qayerga borishni aytadi — 100 000 so‘m', cv_summary: 'O‘zim haqimda', cv_exp: 'Ish tajribasi', cv_skills: 'Ko‘nikmalar', cv_certs: 'Hujjatlar va razryadlar', cv_langs: 'Tillar', cv_pers: 'Shaxsiy ma’lumotlar', cv_ready: 'Ko‘chishga tayyor', cv_present: 'hozirgi vaqtgacha', }, }; /* Английские подписи разделов — они в самом документе, не переводятся. */ const CV_EN = { summary: 'Professional summary', exp: 'Work experience', skills: 'Skills', certs: 'Certifications', langs: 'Languages', pers: 'Personal details', ready: 'Available from', present: 'present', }; /* ---------- сценарий интервью ---------- who: 'ai' — реплика; 'choices' — один ответ; 'multi' — несколько; 'upload' — документ; 'photo' — фото; 'sample' — «как это звучит по-английски»; 'build' — сборка резюме. set: что записать в профиль при выборе. */ const RES_FLOW = [ { who: 'ai', id: 'intro', text: { ru: 'Здравствуйте! Соберу вам резюме, которое поймёт иностранный работодатель 🌍 Отвечайте своими словами — на узбекском или русском. Переведу и оформлю как надо.', uz: 'Assalomu alaykum! Xorijiy ish beruvchi tushunadigan rezyume tuzib beraman 🌍 O‘z so‘zingiz bilan javob bering — o‘zbekcha yoki ruscha. Tarjima qilib, kerakli ko‘rinishga keltiraman.' } }, { who: 'ai', text: { ru: 'Первое: как вас зовут? Пишите так, как написано в загранпаспорте — латиницей.', uz: 'Birinchi: ismingiz nima? Xorijiy pasportdagidek — lotin harflarida yozing.' } }, { who: 'input', field: 'name', upper: true, ph: { ru: 'Например: AZIZ RAHIMOV', uz: 'Masalan: AZIZ RAHIMOV' } }, { who: 'ai', text: { ru: 'Укажите пол — многие работодатели набирают отдельно мужчин и женщин.', uz: 'Jinsingizni ko‘rsating — ko‘p ish beruvchilar erkak va ayollarni alohida olishadi.' } }, { who: 'choices', cols: 2, options: [ { ru: 'Мужчина', uz: 'Erkak', set: { gender: 'm' } }, { ru: 'Женщина', uz: 'Ayol', set: { gender: 'f' } }, ] }, { who: 'ai', text: { ru: 'Сколько вам полных лет? Работодатели за рубежом указывают возрастные рамки, поэтому это важно.', uz: 'Necha yoshdasiz? Xorijiy ish beruvchilar yosh chegarasini ko‘rsatadi, shuning uchun bu muhim.' } }, { who: 'input', field: 'age', numeric: true, ph: { ru: 'Например: 27', uz: 'Masalan: 27' } }, { who: 'ai', text: { ru: 'Из какого вы города? Напишем в резюме и учтём при подборе вакансий.', uz: 'Qaysi shahardansiz? Rezyumega yozamiz va vakansiya tanlashda hisobga olamiz.' } }, { who: 'input', field: 'city', ph: { ru: 'Ваш город…', uz: 'Shahringiz…' }, chips: [ { label: 'Toshkent', set: { city: { ru: 'Ташкент', uz: 'Toshkent', en: 'Tashkent' } } }, { label: 'Namangan', set: { city: { ru: 'Наманган', uz: 'Namangan', en: 'Namangan' } } }, { label: 'Samarqand', set: { city: { ru: 'Самарканд', uz: 'Samarqand', en: 'Samarkand' } } }, { label: 'Farg‘ona', set: { city: { ru: 'Фергана', uz: 'Farg‘ona', en: 'Fergana' } } }, ] }, { who: 'ai', text: { ru: 'Номер телефона для работодателя. Его увидит только работодатель, которому мы передадим резюме.', uz: 'Ish beruvchi uchun telefon raqami. Uni faqat rezyume topshiriladigan ish beruvchi ko‘radi.' } }, { who: 'input', field: 'phone', numeric: true, ph: { ru: '+998 90 123 45 67', uz: '+998 90 123 45 67' } }, { who: 'ai', skipKey: 'prof', text: { ru: 'Теперь про работу. Кем вы работали последние годы? Выберите самое близкое.', uz: 'Endi ish haqida. Oxirgi yillarda kim bo‘lib ishladingiz? Eng yaqinini tanlang.' } }, { who: 'choices', cols: 2, skipKey: 'prof', options: [ { ru: 'Сварщик', uz: 'Payvandchi', set: { prof: 'weld' } }, { ru: 'Строитель', uz: 'Quruvchi', set: { prof: 'build' } }, { ru: 'Водитель', uz: 'Haydovchi', set: { prof: 'driver' } }, { ru: 'Склад, завод', uz: 'Ombor, zavod', set: { prof: 'ware' } }, { ru: 'Уход, уборка', uz: 'Parvarish, tozalash', set: { prof: 'care' } }, { ru: 'Другое', uz: 'Boshqa', set: { prof: 'other' } }, ] }, { who: 'ai', skipKey: 'exp', text: { ru: 'Сколько лет вы этим занимались? Считайте всю работу, даже без трудовой книжки — за рубежом это тоже опыт.', uz: 'Bu ish bilan necha yil shug‘ullandingiz? Mehnat daftarchasisiz ishlagan yillarni ham qo‘shing — xorijda bu ham tajriba.' } }, { who: 'choices', cols: 2, skipKey: 'exp', options: [ { ru: 'Меньше года', uz: 'Bir yildan kam', set: { exp: 0 } }, { ru: '1 – 2 года', uz: '1 – 2 yil', set: { exp: 2 } }, { ru: '3 – 5 лет', uz: '3 – 5 yil', set: { exp: 4 } }, { ru: 'Больше 5 лет', uz: '5 yildan ko‘p', set: { exp: 7 } }, ] }, { who: 'ai', text: { ru: 'Где работали последнее время? Название организации или «у частника» — тоже нормально.', uz: 'Oxirgi paytda qayerda ishladingiz? Tashkilot nomi yoki «xususiy ustaga» — bu ham normal.' } }, { who: 'input', field: 'lastPlace', ph: { ru: 'Название или «у частника»…', uz: 'Nomi yoki «xususiy ustada»…' }, chips: [ { ru: 'Строительная фирма', uz: 'Qurilish firmasi', set: { lastPlace: { ru: 'Строительная компания', uz: 'Qurilish kompaniyasi', en: 'Construction company' } } }, { ru: 'Завод', uz: 'Zavod', set: { lastPlace: { ru: 'Производство', uz: 'Ishlab chiqarish', en: 'Manufacturing plant' } } }, { ru: 'У частника', uz: 'Xususiy ustada', set: { lastPlace: { ru: 'Частные заказы', uz: 'Xususiy buyurtmalar', en: 'Private contractor' } } }, ] }, { who: 'ai', text: { ru: 'А теперь главное. Расскажите простыми словами: что вы делали руками каждый день? Отметьте всё, что было.', uz: 'Endi eng muhimi. Oddiy so‘z bilan ayting: har kuni qo‘lingiz bilan nima qildingiz? Bo‘lgan ishlarning hammasini belgilang.' } }, { who: 'multi' }, { who: 'sample' }, { who: 'ai', text: { ru: 'Есть диплом, разряд или сертификат? Загрузите — за рубежом бумага с разрядом поднимает зарплату сильнее, чем стаж.', uz: 'Diplom, razryad yoki sertifikatingiz bormi? Yuklang — xorijda razryad qog‘ozi maoshni stajdan ko‘ra ko‘proq oshiradi.' } }, { who: 'upload' }, { who: 'ai', text: { ru: 'Языки. Английский на каком уровне? Отвечайте честно — на собеседовании проверят.', uz: 'Tillar. Ingliz tilini qay darajada bilasiz? Rostini ayting — suhbatda tekshirishadi.' } }, { who: 'choices', cols: 1, options: [ { ru: 'Не знаю совсем', uz: 'Umuman bilmayman', set: { addLang: { code: 'en', level: 'none' } } }, { ru: 'Несколько слов, читаю по слогам', uz: 'Bir nechta so‘z, bo‘g‘inlab o‘qiyman', set: { addLang: { code: 'en', level: 'a1' } } }, { ru: 'Могу объясниться на работе', uz: 'Ishda gaplasha olaman', set: { addLang: { code: 'en', level: 'a2' } } }, { ru: 'Говорю свободно', uz: 'Erkin gaplashaman', set: { addLang: { code: 'en', level: 'b2' } } }, ] }, { who: 'ai', text: { ru: 'А русский?', uz: 'Rus tili-chi?' } }, { who: 'choices', cols: 1, options: [ { ru: 'Свободно', uz: 'Erkin', set: { addLang: { code: 'ru', level: 'c1' } } }, { ru: 'Понимаю, говорю с ошибками', uz: 'Tushunaman, xato bilan gapiraman', set: { addLang: { code: 'ru', level: 'b1' } } }, { ru: 'Плохо', uz: 'Yomon', set: { addLang: { code: 'ru', level: 'a1' } } }, ] }, { who: 'ai', skipKey: 'passport', text: { ru: 'Загранпаспорт у вас есть? Без него работодатель даже не начнёт оформление.', uz: 'Xorijiy pasportingiz bormi? Usiz ish beruvchi rasmiylashtirishni boshlamaydi ham.' } }, { who: 'choices', cols: 1, skipKey: 'passport', options: [ { ru: 'Есть, действует', uz: 'Bor, amal qiladi', set: { passport: 'yes' } }, { ru: 'Есть, скоро истекает', uz: 'Bor, muddati tugayapti', set: { passport: 'old' } }, { ru: 'Нет', uz: 'Yo‘q', set: { passport: 'no' } }, ] }, { who: 'ai', text: { ru: 'Последнее — фотография. В Европе и Азии её ждут в резюме: с фото откликов заметно больше.', uz: 'Oxirgisi — fotosurat. Yevropa va Osiyoda uni rezyumeda kutishadi: surat bilan javoblar sezilarli ko‘p bo‘ladi.' } }, { who: 'photo' }, { who: 'build' }, ]; /* ---------- заготовки по профессиям ---------- duties — то, как человек описывает работу своими словами; en — та же работа языком международного резюме. */ const PROF_CV = { weld: { title: { ru: 'Сварщик MIG/MAG', uz: 'MIG/MAG payvandchi', en: 'Welder (MIG/MAG)' }, summary: { ru: 'Сварщик с опытом {exp}. Работа с металлоконструкциями и трубами на стройке и производстве. Читаю чертежи, соблюдаю технику безопасности. Готов к переезду и вахте.', uz: '{exp} tajribaga ega payvandchi. Qurilish va ishlab chiqarishda metall konstruksiya va quvurlar bilan ishlaganman. Chizmani o‘qiyman, texnika xavfsizligiga rioya qilaman. Ko‘chishga va vaxtaga tayyorman.', en: 'Welder with {exp} of hands-on experience in construction and manufacturing. Skilled in MIG/MAG welding of structural steel and pipelines, blueprint reading and workplace safety. Available for relocation.', }, duties: [ { ru: 'Варил трубы и металлоконструкции', uz: 'Quvur va metall konstruksiya payvandladim', en: 'Performed MIG/MAG welding of pipelines and structural steel assemblies' }, { ru: 'Читал чертежи и размечал детали', uz: 'Chizma o‘qidim va detallarni belgiladim', en: 'Read technical drawings and marked out parts before cutting and welding' }, { ru: 'Резал металл болгаркой и резаком', uz: 'Metalni bolgarka va kesgich bilan kesdim', en: 'Cut and prepared metal using angle grinder and gas cutting equipment' }, { ru: 'Проверял швы, переваривал брак', uz: 'Choklarni tekshirdim, brakni qayta payvandladim', en: 'Inspected weld seams visually and reworked defects to meet quality requirements' }, { ru: 'Учил новичков в бригаде', uz: 'Brigadadagi yangilarni o‘rgatdim', en: 'Trained and supervised junior welders on site' }, { ru: 'Отвечал за технику безопасности', uz: 'Texnika xavfsizligi uchun javob berdim', en: 'Followed and enforced occupational safety procedures (PPE, hot work permits)' }, ], skills: [ { ru: 'Сварка MIG/MAG', uz: 'MIG/MAG payvandlash', en: 'MIG/MAG welding' }, { ru: 'Ручная дуговая сварка', uz: 'Qo‘lda yoyli payvandlash', en: 'Manual arc welding (MMA)' }, { ru: 'Чтение чертежей', uz: 'Chizma o‘qish', en: 'Blueprint reading' }, { ru: 'Болгарка, резак', uz: 'Bolgarka, kesgich', en: 'Angle grinder, gas cutting' }, { ru: 'Техника безопасности', uz: 'Texnika xavfsizligi', en: 'Workplace safety / PPE' }, ], cert: { ru: 'Диплом сварщика, 4 разряд', uz: 'Payvandchi diplomi, 4-razryad', en: 'Welder diploma, grade 4 (Uzbekistan)' }, }, build: { title: { ru: 'Строитель-отделочник', uz: 'Quruvchi-pardozchi', en: 'Construction Worker / Finisher' }, summary: { ru: 'Строитель с опытом {exp}: кладка, штукатурка, отделка. Работал на жилых и промышленных объектах.', uz: '{exp} tajribaga ega quruvchi: g‘isht terish, suvoq, pardoz. Turar joy va sanoat obyektlarida ishlaganman.', en: 'Construction worker with {exp} of experience in masonry, plastering and interior finishing on residential and industrial sites.', }, duties: [ { ru: 'Клал кирпич и блоки', uz: 'G‘isht va blok terdim', en: 'Laid brick and block masonry to line and level' }, { ru: 'Штукатурил и шпаклевал стены', uz: 'Devorlarni suvadim va shpaklyovka qildim', en: 'Applied plaster and filler coats to walls and ceilings' }, { ru: 'Ставил гипсокартон', uz: 'Gipsokarton o‘rnatdim', en: 'Installed drywall partitions and suspended ceilings' }, { ru: 'Клал плитку', uz: 'Plitka yotqizdim', en: 'Laid floor and wall tiles' }, { ru: 'Заливал бетон, вязал арматуру', uz: 'Beton quydim, armatura bog‘ladim', en: 'Poured concrete and tied reinforcement bars' }, { ru: 'Работал на высоте с лесов', uz: 'Balandlikda iskala bilan ishladim', en: 'Worked at height from scaffolding following safety rules' }, ], skills: [ { ru: 'Кладка', uz: 'G‘isht terish', en: 'Bricklaying' }, { ru: 'Штукатурка', uz: 'Suvoq', en: 'Plastering' }, { ru: 'Гипсокартон', uz: 'Gipsokarton', en: 'Drywall installation' }, { ru: 'Плитка', uz: 'Plitka', en: 'Tiling' }, { ru: 'Работа на высоте', uz: 'Balandlikda ishlash', en: 'Working at height' }, ], cert: { ru: 'Удостоверение строителя', uz: 'Quruvchi guvohnomasi', en: 'Construction trade certificate (Uzbekistan)' }, }, driver: { title: { ru: 'Водитель категории C/E', uz: 'C/E toifadagi haydovchi', en: 'Truck Driver (C/E)' }, summary: { ru: 'Водитель с опытом {exp}: междугородние рейсы, грузовой транспорт. Без нарушений и аварий.', uz: '{exp} tajribaga ega haydovchi: shaharlararo reyslar, yuk transporti. Qoidabuzarlik va avariyasiz.', en: 'Professional driver with {exp} of experience in long-distance freight transport. Clean driving record.', }, duties: [ { ru: 'Возил грузы между городами', uz: 'Shaharlararo yuk tashidim', en: 'Delivered freight on long-distance intercity routes' }, { ru: 'Следил за документами на груз', uz: 'Yuk hujjatlarini nazorat qildim', en: 'Handled shipping documents and delivery paperwork' }, { ru: 'Проверял машину перед рейсом', uz: 'Reysdan oldin mashinani tekshirdim', en: 'Performed pre-trip vehicle inspections and basic maintenance' }, { ru: 'Грузил и крепил груз', uz: 'Yukni yukladim va mahkamladim', en: 'Loaded and secured cargo according to safety standards' }, { ru: 'Соблюдал режим труда и отдыха', uz: 'Mehnat va dam olish rejimiga amal qildim', en: 'Complied with driving hours and rest-period regulations' }, ], skills: [ { ru: 'Категории C, E', uz: 'C, E toifalari', en: 'Licence categories C, E' }, { ru: 'Междугородние рейсы', uz: 'Shaharlararo reyslar', en: 'Long-haul driving' }, { ru: 'Крепление груза', uz: 'Yukni mahkamlash', en: 'Cargo securing' }, { ru: 'Мелкий ремонт', uz: 'Mayda ta’mir', en: 'Basic vehicle maintenance' }, ], cert: { ru: 'Водительское удостоверение C, E', uz: 'C, E haydovchilik guvohnomasi', en: 'Driving licence, categories C and E' }, }, ware: { title: { ru: 'Работник склада / производства', uz: 'Ombor / ishlab chiqarish xodimi', en: 'Warehouse / Production Operative' }, summary: { ru: 'Работник склада и производства с опытом {exp}. Сменный график, физическая работа, порядок на участке.', uz: '{exp} tajribaga ega ombor va ishlab chiqarish xodimi. Smenali ish, jismoniy mehnat, uchastkada tartib.', en: 'Warehouse and production operative with {exp} of experience in shift-based logistics and assembly work.', }, duties: [ { ru: 'Собирал и упаковывал заказы', uz: 'Buyurtmalarni yig‘dim va qadoqladim', en: 'Picked and packed customer orders to daily targets' }, { ru: 'Работал на линии', uz: 'Liniyada ishladim', en: 'Operated production line equipment' }, { ru: 'Ездил на погрузчике', uz: 'Yuklagichda ishladim', en: 'Operated forklift and pallet truck' }, { ru: 'Считал остатки, вёл учёт', uz: 'Qoldiqlarni sanadim, hisob yuritdim', en: 'Carried out stock counts and inventory records' }, { ru: 'Держал участок в чистоте', uz: 'Uchastkani toza tutdim', en: 'Maintained clean and safe working area (5S)' }, ], skills: [ { ru: 'Сборка заказов', uz: 'Buyurtma yig‘ish', en: 'Order picking' }, { ru: 'Погрузчик', uz: 'Yuklagich', en: 'Forklift operation' }, { ru: 'Работа в смену', uz: 'Smenali ish', en: 'Shift work' }, { ru: 'Учёт товара', uz: 'Tovar hisobi', en: 'Inventory control' }, ], cert: { ru: 'Удостоверение на погрузчик', uz: 'Yuklagich guvohnomasi', en: 'Forklift operator certificate' }, }, care: { title: { ru: 'Сиделка / работник по уходу', uz: 'Parvarishchi', en: 'Care Worker' }, summary: { ru: 'Уход за пожилыми людьми, опыт {exp}. Терпеливая работа, помощь в быту, соблюдение назначений врача.', uz: 'Keksalar parvarishi, {exp} tajriba. Sabrli ish, maishiy yordam, shifokor tavsiyalariga rioya.', en: 'Care worker with {exp} of experience supporting elderly clients with daily living, mobility and prescribed routines.', }, duties: [ { ru: 'Помогала мыться и одеваться', uz: 'Yuvinish va kiyinishda yordam berdim', en: 'Assisted clients with personal hygiene and dressing' }, { ru: 'Готовила и кормила', uz: 'Ovqat tayyorladim va ovqatlantirdim', en: 'Prepared meals and assisted with feeding' }, { ru: 'Давала лекарства по назначению', uz: 'Tayinlangan dorilarni berdim', en: 'Administered medication according to prescribed schedule' }, { ru: 'Убирала и стирала', uz: 'Tozaladim va kir yuvdim', en: 'Carried out household cleaning and laundry' }, { ru: 'Гуляла и разговаривала с подопечным', uz: 'Sayr qildim va suhbatlashdim', en: 'Supported mobility, walks and daily companionship' }, ], skills: [ { ru: 'Уход за пожилыми', uz: 'Keksalar parvarishi', en: 'Elderly care' }, { ru: 'Помощь в быту', uz: 'Maishiy yordam', en: 'Daily living support' }, { ru: 'Приём лекарств по графику', uz: 'Dorilarni jadval bo‘yicha berish', en: 'Medication reminders' }, { ru: 'Первая помощь', uz: 'Birinchi yordam', en: 'First aid basics' }, ], cert: { ru: 'Сертификат курсов по уходу', uz: 'Parvarish kurslari sertifikati', en: 'Care assistant course certificate' }, }, other: { title: { ru: 'Рабочий', uz: 'Ishchi', en: 'General Worker' }, summary: { ru: 'Опыт работы {exp}. Готов к физической работе и обучению на месте.', uz: '{exp} ish tajribasi. Jismoniy mehnatga va joyida o‘rganishga tayyorman.', en: 'General worker with {exp} of experience. Reliable, physically fit and quick to learn on the job.', }, duties: [ { ru: 'Выполнял физическую работу', uz: 'Jismoniy ish bajardim', en: 'Performed manual labour tasks as assigned' }, { ru: 'Работал в бригаде', uz: 'Brigadada ishladim', en: 'Worked as part of a team on daily targets' }, { ru: 'Соблюдал график и дисциплину', uz: 'Jadval va intizomga rioya qildim', en: 'Maintained attendance and workplace discipline' }, { ru: 'Учился новому на месте', uz: 'Joyida yangi ishni o‘rgandim', en: 'Learned new operations on the job' }, ], skills: [ { ru: 'Физическая работа', uz: 'Jismoniy mehnat', en: 'Manual labour' }, { ru: 'Работа в команде', uz: 'Jamoada ishlash', en: 'Teamwork' }, { ru: 'Дисциплина', uz: 'Intizom', en: 'Reliability' }, ], cert: null, }, }; /* Как записать стаж словами. */ function expWords(years, lang) { if (!years) return { ru: 'меньше года', uz: 'bir yildan kam', en: 'under a year' }[lang] || 'under a year'; if (lang === 'en') return `${years}+ years`; if (lang === 'uz') return `${years} yil`; return `${years} ${plYears(years, 'ru')}`; } const LANG_LEVEL_LABEL = { none: { ru: 'не владею', uz: 'bilmayman', en: '—' }, a1: { ru: 'начальный (A1)', uz: 'boshlang‘ich (A1)', en: 'Beginner (A1)' }, a2: { ru: 'базовый (A2)', uz: 'boshlang‘ich (A2)', en: 'Elementary (A2)' }, b1: { ru: 'средний (B1)', uz: 'o‘rta (B1)', en: 'Intermediate (B1)' }, b2: { ru: 'выше среднего (B2)', uz: 'o‘rtadan yuqori (B2)', en: 'Upper-intermediate (B2)' }, c1: { ru: 'свободный (C1)', uz: 'erkin (C1)', en: 'Advanced (C1)' }, native: { ru: 'родной', uz: 'ona tili', en: 'Native' }, }; /* Собрать документ из профиля. lang: 'en' | 'ru' | 'uz'. */ function buildCV(profile, lang) { const base = PROF_CV[profile.prof] || PROF_CV.other; const pick = (o) => (o ? (typeof o === 'string' ? o : (o[lang] ?? o.ru)) : ''); const exp = expWords(profile.exp, lang === 'en' ? 'en' : lang); const duties = (profile.duties && profile.duties.length ? profile.duties : base.duties.slice(0, 4).map((_, i) => i)); return { name: profile.name || 'AZIZ RAHIMOV', phone: profile.phone || '+998 •• ••• •• ••', photoSrc: profile.gender === 'f' ? 'img/cv_photo_f.jpg' : 'img/cv_photo_m.jpg', title: pick(base.title), city: profile.city ? pick(profile.city) : '', age: profile.age, summary: pick(base.summary).replace('{exp}', exp), place: profile.lastPlace ? pick(profile.lastPlace) : '', years: profile.exp || 1, bullets: duties.map(i => pick(base.duties[i])).filter(Boolean), skills: base.skills.map(pick), certs: [ ...(profile.certUploaded && base.cert ? [pick(base.cert)] : []), ...(profile.passport === 'yes' ? [{ ru: 'Загранпаспорт — действует', uz: 'Xorijiy pasport — amal qiladi', en: 'International passport — valid' }[lang]] : []), ].filter(Boolean), langs: [ { name: { ru: 'Узбекский', uz: 'O‘zbek tili', en: 'Uzbek' }[lang], level: LANG_LEVEL_LABEL.native[lang] }, ...(profile.langs || []) .filter(l => l.level !== 'none') .map(l => ({ name: { ru: LANG_NAMES[l.code].ru, uz: LANG_NAMES[l.code].uz, en: { ru: 'Russian', en: 'English', ko: 'Korean', de: 'German', pl: 'Polish' }[l.code] }[lang], level: LANG_LEVEL_LABEL[l.level][lang] })), ], photo: profile.photo, }; } Object.assign(window, { RESUME, RES_UI, RES_FLOW, PROF_CV, CV_EN, buildCV, expWords, LANG_LEVEL_LABEL });