Files
AutonetSellCar/backend/fix_banner_translations.py
AutonetSellCar Deploy e661d91c72 fix: banner translations and deployment improvements
- Add translateCarName import from i18n.ts for proper multilingual support
- Change default API language from 'ko' to 'en' for hero banners
- Add checkbox column for Local Cars banner registration
- Update Dockerfile with Playwright dependencies
- Add PostgreSQL migration script
- Add banner translation fix script

🤖 Generated with [Claude Code](https://claude.ai/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-31 10:41:42 +09:00

125 lines
4.9 KiB
Python

#!/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()