#!/usr/bin/env python3 """ Fix hero banner translations by updating title_en, title_mn, title_ru from title_ko """ import sqlite3 import os # Translation dictionary (subset of key terms) TRANSLATIONS = { # Makers '현대': {'en': 'Hyundai', 'mn': 'Хёндай', 'ru': 'Хёндай'}, '기아': {'en': 'Kia', 'mn': 'Киа', 'ru': 'Киа'}, '제네시스': {'en': 'Genesis', 'mn': 'Женезис', 'ru': 'Дженезис'}, '쉐보레': {'en': 'Chevrolet', 'mn': 'Шевроле', 'ru': 'Шевроле'}, 'KG모빌리티': {'en': 'KG Mobility', 'mn': 'КЖ Мобилити', 'ru': 'КГ Мобилити'}, '쌍용': {'en': 'SsangYong', 'mn': 'СсангЁнг', 'ru': 'СсангЙонг'}, # Models '모하비': {'en': 'Mohave', 'mn': 'Мохаве', 'ru': 'Мохаве'}, '더 마스터': {'en': 'The Master', 'mn': 'Мастер', 'ru': 'Мастер'}, '신형': {'en': 'New', 'mn': 'Шинэ', 'ru': 'Новый'}, '더 뉴': {'en': 'The New', 'mn': 'Шинэ', 'ru': 'Новый'}, '그랜드스타렉스': {'en': 'Grand Starex', 'mn': 'Гранд Старекс', 'ru': 'Гранд Старекс'}, '스타렉스': {'en': 'Starex', 'mn': 'Старекс', 'ru': 'Старекс'}, '싼타페': {'en': 'Santa Fe', 'mn': 'Санта Фе', 'ru': 'Санта Фе'}, '스팅어': {'en': 'Stinger', 'mn': 'Стингер', 'ru': 'Стингер'}, '마이스터': {'en': 'Meister', 'mn': 'Мейстер', 'ru': 'Мейстер'}, '쏘렌토': {'en': 'Sorento', 'mn': 'Соренто', 'ru': 'Соренто'}, '스포티지': {'en': 'Sportage', 'mn': 'Спортаж', 'ru': 'Спортаж'}, '카니발': {'en': 'Carnival', 'mn': 'Карнивал', 'ru': 'Карнивал'}, '셀토스': {'en': 'Seltos', 'mn': 'Селтос', 'ru': 'Селтос'}, '투싼': {'en': 'Tucson', 'mn': 'Туксон', 'ru': 'Туксон'}, '팰리세이드': {'en': 'Palisade', 'mn': 'Палисейд', 'ru': 'Палисейд'}, '아반떼': {'en': 'Avante', 'mn': 'Аванте', 'ru': 'Аванте'}, '쏘나타': {'en': 'Sonata', 'mn': 'Соната', 'ru': 'Соната'}, '그랜저': {'en': 'Grandeur', 'mn': 'Грандёр', 'ru': 'Грандёр'}, '코나': {'en': 'Kona', 'mn': 'Кона', 'ru': 'Кона'}, 'K5': {'en': 'K5', 'mn': 'K5', 'ru': 'K5'}, 'K3': {'en': 'K3', 'mn': 'K3', 'ru': 'K3'}, 'K7': {'en': 'K7', 'mn': 'K7', 'ru': 'K7'}, 'K8': {'en': 'K8', 'mn': 'K8', 'ru': 'K8'}, 'K9': {'en': 'K9', 'mn': 'K9', 'ru': 'K9'}, 'GV70': {'en': 'GV70', 'mn': 'GV70', 'ru': 'GV70'}, 'GV80': {'en': 'GV80', 'mn': 'GV80', 'ru': 'GV80'}, 'G70': {'en': 'G70', 'mn': 'G70', 'ru': 'G70'}, 'G80': {'en': 'G80', 'mn': 'G80', 'ru': 'G80'}, 'G90': {'en': 'G90', 'mn': 'G90', 'ru': 'G90'}, } # Sort keys by length (longest first) to avoid partial matches SORTED_KEYS = sorted(TRANSLATIONS.keys(), key=len, reverse=True) def translate(text: str, lang: str) -> str: """Translate Korean text to target language""" if not text: return text result = text for key in SORTED_KEYS: if key in result: translation = TRANSLATIONS[key].get(lang, key) result = result.replace(key, translation) return result def main(): # Find database file db_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "autonet.db") if not os.path.exists(db_path): print(f"Database not found at: {db_path}") return print(f"Using database: {db_path}") conn = sqlite3.connect(db_path) cursor = conn.cursor() # Get all banners cursor.execute("SELECT id, title_ko, title_en, title_mn, title_ru FROM hero_banners") banners = cursor.fetchall() print(f"\nFound {len(banners)} banners to update:\n") for banner in banners: banner_id, title_ko, title_en, title_mn, title_ru = banner if not title_ko: print(f"Banner {banner_id}: No Korean title, skipping") continue new_title_en = translate(title_ko, 'en') new_title_mn = translate(title_ko, 'mn') new_title_ru = translate(title_ko, 'ru') print(f"Banner {banner_id}:") print(f" KO: {title_ko}") print(f" EN: {title_en} -> {new_title_en}") print(f" MN: {title_mn} -> {new_title_mn}") print(f" RU: {title_ru} -> {new_title_ru}") print() # Update the banner cursor.execute(""" UPDATE hero_banners SET title_en = ?, title_mn = ?, title_ru = ? WHERE id = ? """, (new_title_en, new_title_mn, new_title_ru, banner_id)) conn.commit() print(f"Updated {len(banners)} banners successfully!") # Verify print("\n--- Verification ---") cursor.execute("SELECT id, title_ko, title_en, title_mn FROM hero_banners") for row in cursor.fetchall(): print(f"ID {row[0]}: {row[1]} -> EN: {row[2]}, MN: {row[3]}") conn.close() if __name__ == "__main__": main()