FUT.GG Custom Translation (Korean)

Translate English text on FUT.GG into Korean (Optimized & Cleaned)

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         FUT.GG Custom Translation (Korean)
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  Translate English text on FUT.GG into Korean (Optimized & Cleaned)
// @author       JHwang831(리스제임스의목발)
// @match        https://www.fut.gg/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 성능 최적화: 금액 형식 체크 함수
    const isMoneyFormat = (text) => /\d+\.\d+\s*m\b/i.test(text.trim());

    // EVO 모드 매핑
    const evoModeMap = new Map([
        ["any mode", "아무 모드"],
        ["rush, rivals, champions, or squad battles on min. semi-pro", "러시, 라이벌, 챔피언스, 혹은 스쿼드 배틀 (최소 세미프로)"],
        ["rush, rivals, champions, or squad battles on min semi-pro", "러시, 라이벌, 챔피언스, 혹은 스쿼드 배틀 (최소 세미프로)"],
        ["rivals or champions", "라이벌 또는 챔피언스"]
    ]);

    // 문자열 정규화
    const normalize = (str) => str.trim().toLowerCase().replace(/[\.,]+$/, '');
    const normalizeMode = (mode) => evoModeMap.get(normalize(mode)) || mode;

    // 역할 매핑
    const roleTranslations = {
        "Advanced Forward": "어드밴스 포워드",
        "False 9": "폴스 나인",
        "Poacher": "포처",
        "Target Forward": "타겟 포워드",
        "Inside Forward": "인사이드 포워드",
        "Wide Playmaker": "와이드 플레이메이커",
        "Winger": "윙어",
        "Classic 10": "클래식 10번",
        "Half-Winger": "하프 윙어",
        "Half Winger": "하프 윙어",
        "Playmaker": "플레이메이커",
        "Shadow Striker": "쉐도우 스트라이커",
        "Wide Midfielder": "와이드 미드필더",
        "Box-To-Box": "박스 투 박스",
        "Box to Box": "박스 투 박스",
        "Deep-Lying Playmaker": "딥라잉 플레이메이커",
        "Deep Lying Playmaker": "딥라잉 플레이메이커",
        "Holding": "홀딩",
        "Centre-Half": "센터 하프",
        "Centre Half": "센터 하프",
        "Wide Half": "와이드 하프",
        "Ball-Playing Defender": "볼플레잉 수비수",
        "Ball Playing Defender": "볼플레잉 수비수",
        "Ball Playing Keeper": "볼플레잉 키퍼",
        "Defender": "수비수",
        "Stopper": "스토퍼",
        "Attacking Wingback": "공격형 윙백",
        "Falseback": "폴스백",
        "Fullback": "풀백",
        "Wingback": "윙백",
        "Inverted Wingback": "인버티드 윙백",
        "Wideback": "와이드백",
        "Box Crasher": "박스 크래셔",
        "Goalkeeper": "골키퍼",
        "Sweeper Keeper": "스위퍼 키퍼"
    };

    // 월 매핑
    const monthMap = {
        january: '1월', february: '2월', march: '3월', april: '4월',
        may: '5월', june: '6월', july: '7월', august: '8월',
        september: '9월', october: '10월', november: '11월', december: '12월',
        jan: '1월', feb: '2월', mar: '3월', apr: '4월',
        jun: '6월', jul: '7월', aug: '8월',
        sep: '9월', oct: '10월', nov: '11월', dec: '12월'
    };

    // 정적 번역 데이터 (UI 텍스트만 포함)
    const translations = {
        // 선수 페이지
        "Apply a filter to get started...": "필터를 적용하여 시작하세요...",
        "Try out our Smart Search...": "스마트 검색을 사용해보세요...",
        "SORT": "정렬",
        "RATING": "등급",
        "OVR / Price": "오버롤 / 가격",
        "Min OVR": "최소 오버롤",
        "Max OVR": "최대 오버롤",
        "Min Price": "최소 가격",
        "Max Price": "최대 가격",
        "Positions": "포지션",
        "SM / WF": "개인기 / 약한 발",
        "Has All Selected Positions": "선택한 모든 포지션 포함",
        "Min PlayStyles": "최소 플레이스타일",
        "Max PlayStyles": "최대 플레이스타일",
        "Min PlayStyles+": "최소 플레이스타일+",
        "Max PlayStyles+": "최대 플레이스타일+",
        "Has Any Selected PlayStyles": "선택한 플레이스타일 중 하나 포함",
        "Min Roles+": "최소 역할+",
        "Max Roles+": "최대 역할+",
        "Min Roles++": "최소 역할++",
        "Max Roles++": "최대 역할++",
        "Show Only Challenge Players": "챌린지 선수만 보기",
        "Has Dynamic": "다이나믹 이미지 있음",
        "AccelerRATE Type": "가속 타입",
        "Accelerate Type": "가속 타입",
        "Min Height": "최소 키",
        "Max Height": "최대 키",
        "Min Weight": "최소 몸무게",
        "Max Weight": "최대 몸무게",
        "Min Age": "최소 나이",
        "Max Age": "최대 나이",
        "Go Back": "뒤로가기",
        "Search...": "검색...",

        // 메인 네비게이션
        "Home": "홈",
        "Players": "선수",
        "Squads": "스쿼드",
        "Builder": "빌더",
        "Market": "시장",
        "News": "뉴스",
        "Login": "로그인",
        "Log In": "로그인",
        "Register": "회원가입",
        "Sign Up": "회원가입",
        "Sign Out": "로그아웃",
        "Account": "계정",
        "My Squads": "내 스쿼드",
        "Search": "검색",
        "Search...": "검색...",
        "Search Players...": "선수 검색...",
        "Overview": "개요",
        "Evolutions": "진화",
        "Objectives": "목표",
        "Rush": "러시",
        "Campaign Squads": "캠페인 스쿼드",
        "Tools": "도구",
        "Evo Lab": "진화 연구",
        "Live Hub": "라이브 허브",
        "Squad Builder": "스쿼드 빌더",
        "Mode Mastery": "모드 마스터리",
        "Collections": "컬렉션",
        "Player Pools": "선수 풀",
        "Upgrade Hub": "업그레이드 허브",
        "Card Creator": "카드 생성기",
        "Compare": "비교",
        "Trackers": "트래커",
        "Thunderstruck Tracker": "Thunderstruck 트래커",
        "RTTK Tracker": "RTTK 트래커",
        "TOTS Live Tracker": "TOTS Live 트래커",
        "Fantasy FC Tracker": "Fantasy FC 트래커",
        "Momentum Trends": "가격변동 추이",
        "Cheapest by Rating": "오버롤 별 최저가",
        "Resources": "리소스",
        "Past & Present": "과거 & 현재 소속 팀",
        "Clubs": "클럽",
        "Nations": "국가",
        "Leagues": "리그",
        "Rarities": "희귀도",
        "SBC Rating Combinations": "SBC 등급 조합",

        // 홈페이지 탭
        "Trending": "인기",
        "Recent": "최신",
        "Trending Evos": "인기 진화",
        "Trending Evolutions": "인기 진화",
        "In Packs": "현재 확률업 선수",
        "View All Trending Players": "모든 인기 선수 보기",
        "EXPIRING SOON": "곧 만료",
        "Expiring Soon": "곧 만료",
        "New Players": "신규선수",
        "Trending Players": "인기선수",
        "Women Players": "여자선수",
        "View All": "모두 보기",
        "Download the FUT.GG Mobile App": "FUT.GG 모바일 앱 다운로드",

        // 플레이스타일
        "PlayStyles": "플레이스타일",
        "Scoring": "득점",
        "Finesse Shot": "감아차기",
        "Chip Shot": "칩 슛",
        "Power Shot": "파워 슛",
        "Dead Ball": "데드볼",
        "Power Header": "파워 헤딩",
        "Low Driven Shot": "낮은 드리븐 슛",
        "Precision Header": "정밀 헤더",
        "Gamechanger": "게임체인저",
        "Game Changer": "게임체인저",
        "Passing": "패스",
        "Incisive Pass": "예리한 패스",
        "Pinged Pass": "핑 패스",
        "Long Ball Pass": "긴 패스",
        "Long Ball": "긴 패스",
        "Tiki Taka": "티키타카",
        "Whipped Pass": "휩 패스",
        "Inventive": "인벤티브",
        "Defending": "수비",
        "Jockey": "견제",
        "Block": "블로킹",
        "Intercept": "가로채기",
        "Anticipate": "예상",
        "Slide Tackle": "슬라이딩 태클",
        "Bruiser": "브루저",
        "Aerial Fortress": "에어리얼 포트리스",
        "Enforcer": "인포서",
        "Ball Control": "볼 컨트롤",
        "Technical": "테크니컬",
        "Rapid": "래피드",
        "Flair": "플레어",
        "First Touch": "퍼스트 터치",
        "Trickster": "트릭스터",
        "Press Proven": "압박 검증",
        "Physical": "피지컬",
        "Quick Step": "퀵 스텝",
        "Relentless": "끈기와 인내",
        "Trivela": "트리벨라",
        "Acrobatic": "아크로바틱",
        "Long Throw": "긴 스로우",
        "Aerial": "공중전",
        "Goalkeeping": "골키퍼",
        "Far Throw": "긴 스로우",
        "Footwork": "발놀림",
        "Cross Claimer": "크로스 클레이머",
        "Rush Out": "러시 블로킹",
        "Far Reach": "넓은 수비 범위",
        "Deflector": "디플렉터",

        // 스탯
        "Pace": "페이스",
        "Acceleration": "가속력",
        "Sprint Speed": "전력 질주 속도",
        "Shooting": "슈팅",
        "Att. Position": "포지셔닝",
        "Finishing": "골 결정력",
        "Shot Power": "슛 파워",
        "Long Shots": "중거리 슛",
        "Volleys": "발리슛",
        "Penalties": "페널티킥",
        "Vision": "시야",
        "Crossing": "크로스",
        "FK. Acc.": "프리킥 정확도",
        "Short Pass": "짧은 패스",
        "Long Pass": "긴 패스",
        "Curve": "커브",
        "Agility": "민첩성",
        "Balance": "밸런스",
        "Reactions": "반응 속도",
        "Composure": "평정심",
        "Interceptions": "가로채기",
        "Heading Acc.": "헤딩 정확도",
        "Def. Aware": "수비 이해도",
        "Stand Tackle": "스탠딩 태클",
        "Jumping": "점프",
        "Stamina": "스태미나",
        "Strength": "몸싸움",
        "Aggression": "적극성",
        "PAC": "페이스",
        "SHO": "슈팅",
        "PAS": "패스",
        "DRI": "드리블",
        "DEF": "수비",
        "PHY": "피지컬",

        // 필터
        "Filter": "필터",
        "Apply Filters": "필터 적용",
        "Reset Filters": "필터 초기화",
        "General": "일반",
        "Name": "이름",
        "Player Name": "선수 이름",
        "Quality": "품질",
        "Rarity": "희귀도",
        "Rarity Squad": "희귀도 스쿼드",
        "Nation": "국가",
        "League": "리그",
        "Club": "클럽",
        "Past and Present": "과거 및 현재 소속 팀",
        "Overall": "오버롤",
        "Price": "가격",
        "Skill Moves": "개인기",
        "Weak Foot": "약한 발",
        "Position": "포지션",
        "Attackers": "공격수",
        "Midfielders": "미드필더",
        "Defenders": "수비수",
        "Has All of Selected Positions": "선택한 모든 포지션 포함",
        "Only Primary Positions": "주 포지션만 포함",
        "Roles": "역할",
        "Advanced Forward": "어드밴스 포워드",
        "False 9": "폴스 나인",
        "Poacher": "포처",
        "Target Forward": "타겟 포워드",
        "Inside Forward": "인사이드 포워드",
        "Wide Playmaker": "와이드 플레이메이커",
        "Winger": "윙어",
        "Classic 10": "클래식 10번",
        "Half-Winger": "하프 윙어",
        "Half Winger": "하프 윙어",
        "Playmaker": "플레이메이커",
        "Shadow Striker": "쉐도우 스트라이커",
        "Wide Midfielder": "와이드 미드필더",
        "Box-To-Box": "박스 투 박스",
        "Box to Box": "박스 투 박스",
        "Deep-Lying Playmaker": "딥라잉 플레이메이커",
        "Deep Lying Playmaker": "딥라잉 플레이메이커",
        "Holding": "홀딩",
        "Centre-Half": "센터 하프",
        "Centre Half": "센터 하프",
        "Wide Half": "와이드 하프",
        "Ball-Playing Defender": "볼플레잉 수비수",
        "Ball Playing Defender": "볼플레잉 수비수",
        "Ball Playing Keeper": "볼플레잉 키퍼",
        "Defender": "수비수",
        "Stopper": "스토퍼",
        "Attacking Wingback": "공격형 윙백",
        "Falseback": "폴스백",
        "Fullback": "풀백",
        "Wingback": "윙백",
        "Inverted Wingback": "인버티드 윙백",
        "Wideback": "와이드백",
        "Box Crasher": "박스 크래셔",
        "Goalkeeper": "골키퍼",
        "Sweeper Keeper": "스위퍼 키퍼",
        "# of Roles+": "역할+ 개수",
        "# of Roles++": "역할++ 개수",
        "Miscellaneous": "기타 필터",
        "Show Only Market Players": "판매 선수만 보기",
        "Show Only SBC/Obj. Players": "SBC/목표 선수만 보기",
        "Has Dynamic Image": "미페 있음",
        "Has Real Face": "페이스온 있음",
        "Lengthy": "길게 가속 - 랭시",
        "Explosive": "폭발적인 가속 - 익스",
        "Mostly Lengthy": "대부분 길게 가속 - 모랭",
        "Mostly Explosive": "대부분 폭발적인 가속 - 모익",
        "Controlled Lengthy": "제어된 길게 가속 - 컨랭",
        "Controlled Explosive": "제어된 폭발적인 가속 - 컨익",
        "Controlled": "제어된 가속 - 컨트롤드",
        "Strong Foot": "주 발",
        "Left": "왼발잡이",
        "Right": "오른발잡이",
        "Gender": "성별",
        "Male": "남성",
        "Female": "여성",
        "Body Type": "체형 - 체중, 키 순",
        "Lean Short": "마르고 작음",
        "Lean Medium": "마르고 보통",
        "Lean Tall": "마르고 큼",
        "Average Short": "보통 작음",
        "Average Medium": "보통 보통",
        "Average Tall": "보통 큼",
        "Stocky Short": "덩치 작음",
        "Stocky Medium": "덩치 보통",
        "Stocky Tall": "덩치 큼",
        "Unique": "유니크 - 고유 체형",
        "Height": "키",
        "Weight": "몸무게",
        "Age": "나이",
        "Has Any of Selected PlayStyles": "선택한 모든 플레이스타일 포함",
        "# of PS": "플레이스타일 개수",
        "# of PS+": "플레이스타일+ 개수",
        "Custom Filters": "커스텀 필터",
        "Diving": "GK 다이빙",
        "Handling": "GK 핸들링",
        "Kicking": "GK 킥",
        "Reflexes": "GK 반응속도",
        "Speed": "GK 스피드",
        "Positioning": "위치선정",
        "GK Diving": "GK 다이빙",
        "GK Handling": "GK 핸들링",
        "GK Kicking": "GK 킥",
        "GK Reflexes": "GK 반응속도",
        "GK Speed": "GK 스피드",
        "GK Positioning": "GK 위치선정",
        "FK Accuracy": "프리킥 정확도",
        "Heading Accuracy": "헤딩 정확도",
        "Short Passing": "짧은 패스",
        "Long Passing": "긴 패스",
        "Defensive Awareness": "수비 이해도",
        "Standing Tackle": "스탠딩 태클",
        "Sliding Tackle": "슬라이딩 태클",
        "Sorting": "정렬",
        "Select": "선택",
        "Descending": "내림차순",
        "Ascending": "오름차순",
        "Foot": "주 발",
        "Real Face": "페이스온 적용여부",
        "Yes": "예",
        "No": "아니오",
        "Shirt Number": "등번호",
        "Added on": "추가된 날짜",
        "CHEM LINKS": "조직력 높은 선수",
        "Top Chemistry Links": "조직력 높은 선수",
        "Actions": "추가",
        "Add to Evo Lab": "진화 연구에 추가",
        "Add to Compare": "비교에 추가",
        "Other Versions": "다른 버전",
        "Comments": "댓글",
        "Total IGS": "총 인게임스탯 (IGS)",
        "Total Face Stats": "총 페이스스탯",
        "Number of PlayStyles": "플레이스타일 개수",
        "Number of PlayStyles+": "플레이스타일+ 개수",
        "Number of Total PlayStyles": "총 플레이스타일(금/은특) 개수",
        "Player Filters": "선수 필터",

        // 가격 관련
        "Price Momentum": "가격변동 추이",
        "Lowest": "최저가",
        "Highest": "최고가",
        "Lowest BIN": "현재 최저 즉시구매가",
        "Last Update": "최근 갱신",
        "Price Range": "가격 범위",
        "Average BIN": "일일 평균 즉시구매가",
        "Cheapest Sale": "일일 최저가",
        "Discard Value": "퀵셀 가격",
        "Attributes": "능력치",
        "AcceleRATE": "가속타입",
        "Dribbling": "드리블",
        "Physicality": "피지컬",
        "Prices": "가격",
        "YEAR": "년",
        "MONTH": "월",
        "WEEK": "주",
        "3 DAYS": "3일",
        "TODAY": "오늘",
        "Recent Sales": "최근 판매 목록",
        "Time Sold": "판매된 시간",
        "Live Auctions": "실시간 경매",
        "Ending": "만료까지",
        "Start Bid": "시작 가격",
        "BIN": "즉시구매가",

        // 케미스트리
        "basic": "기본",
        "sniper": "스나이퍼",
        "finisher": "피니셔",
        "deadeye": "데드아이",
        "marksman": "마크스맨",
        "hawk": "호크",
        "artist": "아티스트",
        "architect": "아키텍트",
        "powerhouse": "파워하우스",
        "maestro": "마에스트로",
        "engine": "엔진",
        "sentinel": "센티넬",
        "guardian": "가디언",
        "gladiator": "글래디에이터",
        "backbone": "백본",
        "anchor": "앵커",
        "hunter": "헌터",
        "catalyst": "카탈리스트",
        "shadow": "섀도우",
        "wall": "월",
        "glove": "글러브",
        "shield": "쉴드",
        "cat": "캣",

        // 목표(Objectives) 페이지
        "EA SPORTS FC 26 Objectives": "EA SPORTS FC 26 목표",
        "LIVE EVENTS": "라이브 이벤트",
        "CAMPAIGN": "캠페인",
        "CHALLENGERS": "챌린저스",
        "Completed": "완료됨",
        "Evo Unlock": "진화 잠금 해제",
        "Award": "보상",
        "SP": "SP",
        "of": "중",
        "Objectives": "목표",
        "Objective": "목표",
        "Complete": "완료",
        "challenges to earn": "챌린지를 완료하여 획득",

        // SBC 및 목표
        "SBC": "SBC",
        "CHALLENGES": "챌린지",
        "EXPIRES": "만료까지",
        "REPEATABLE": "반복 가능 횟수",
        "REFRESHES EVERY": "새로고침 주기",
        "Refreshes Every": "새로고침 주기",
        "REFRESHES": "새로고침",
        "Refreshes": "새로고침",
        "EVERY": "주기",
        "Every": "주기",
        "View Rewards": "보상 보기",
        "View Solution": "솔루션 보기",
        "Rewards": "보상",
        "Solution": "솔루션",
        "Mark as Completed": "완료로 표시하기",
        "All": "모두",
        "Expiring Soon": "곧 만료됨",
        "Season Points": "시즌 포인트",
        "Season Pass": "시즌 패스",
        "Weekly Rush Objectives": "주간 러시 목표",
        "Seasonal": "시즌",
        "Live": "라이브",
        "FC Pro": "FC 프로",
        "FC Coaching Masterclass": "FC 코칭 마스터클래스",
        "Milestones": "마일스톤",
        "Foundations": "기본",
        "UPGRADES": "업그레이드",

        // 스쿼드 빌더
        "TOTAL CHEMISTRY:": "총 조직력",
        "EVOS": "내 진화선수",
        "Save": "저장",
        "Squad Title": "스쿼드 이름",
        "Reset": "초기화",
        "MANAGER": "감독",
        "FORMATION:": "포메이션",
        "Change Formation": "포메이션 변경",
        "Bench": "벤치",
        "Settings": "설정",
        "SHARE": "공유",
        "Select a Manager": "감독 선택",
        "Select a League": "리그 선택",
        "Select a Nation": "국가 선택",
        "TACTICS": "전술",
        "GG CLUB": "GG 클럽",

        // 전술 설정
        "Build Up Style": "빌드업 스타일",
        "Defensive Approach": "수비 접근",
        "Balanced": "밸런스",
        "Versatile": "다재다능",
        "Attack": "공격",
        "Counter": "역습",
        "Aggressive": "공격적",
        "Deep": "낮게",
        "High": "높게",
        "Roaming": "로밍",
        "Build-Up": "빌드업",
        "Wide": "넓게",
        "Ball-Winning": "볼 위닝",
        "Defend": "수비",
        "Support": "지원",
        "Manually Adjust Line": "수비 라인 수동 조정",
        "Select an item": "항목 선택",

        // 역할 설명
        "ROLE (5)": "역할 (5)",
        "FOCUS": "집중",
        "STARTING": "시작 포메이션",
        "Wide Back": "와이드 백",

        // 진화
        "Show Expired": "만료된 진화 보기",
        "Hide Expired": "만료된 진화 가리기",
        "EXPIRED EVOLUTIONS": "만료된 진화",
        "Expired Evolutions": "만료된 진화",
        "EXCLUDED RARITY": "제외된 희귀도",
        "Excluded Rarity": "제외된 희귀도",
        "Show all": "모두 보기",
        "Show less": "접기",
        "Your Players": "내 선수",
        "You have no players that can be upgraded in this Evolution.": "이 진화로 업그레이드할 수 있는 선수가 없습니다.",
        "Go To Evo Lab": "진화 연구로 이동",
        "GG RATING": "GG 등급",
        "All Roles & Positions": "모든 역할 & 포지션",
        "Best Chemistry Styles": "최고의 케미스트리 스타일",
        "Ranked": "랭크",
        "Requirements": "요구사항",
        "Best Possible Path": "최적 진화 경로",
        "Select a Version...": "버전 선택...",
        "Filters": "필터",
        "View Upgrades": "업그레이드 보기",
        "Hide Upgrades": "업그레이드 숨기기",
        "Base Player": "기본 선수",
        "GENERATE": "생성하기",

        // 진화 연구 페이지
        "INCLUDE REWARD EVOLUTIONS": "보상 진화 포함",
        "ELIGIBLE EVOLUTIONS": "진화 가능",
        "ACTIVE EVOLUTIONS": "활성 진화",
        "USED EVOLUTIONS": "사용한 진화",
        "ALL EVOLUTIONS": "모든 진화",
        "Search for an Evolution": "진화 검색",
        "YOUR ELIGIBLE PLAYERS": "진화 가능한 내 선수",
        "None of your players are eligible for this evolution, you can find other options based on your available evolutions": "이 진화에 적합한 선수가 없습니다. 사용 가능한 다른 진화를 찾아보세요",
        "here": "여기",
        "Show Evolution Info": "진화 정보 보기",
        "Hide Evolution Info": "진화 정보 숨기기",
        "Show Evolution Information": "진화 정보 보기",
        "Hide Evolution Information": "진화 정보 숨기기",
        "Exclude from Player Upgrades": "선수 업그레이드에서 제외",
        "Other Evo Options": "다른 진화 옵션",
        "EXPIRES IN": "만료까지",
        "There are no evolutions available.": "사용 가능한 진화가 없습니다.",
        "WATCH PLAYER": "선수 보기",
        "Intro to Evolutions": "진화 소개",
        "VERSIONS": "버전",
        "Go to Evolution": "진화로 이동",

        // 진화 선수 목록 페이지
        "Exclude Your Evolutions": "내 진화 제외",
        "OFF": "끔",
        "ON": "켬",
        "Show Non-Upgraded Players": "업그레이드되지 않은 선수 보기",
        "Show Multiple Versions of Same Player": "동일 선수의 여러 버전 보기",

        // 기타
        "Clear All": "모두 지우기",
        "GGR": "GGR",
        "YOUR UPGRADES": "내 업그레이드",
        "NEW": "신규",
        "Custom Attributes": "커스텀 능력치",
        "OVR": "오버롤",
        "GK Reflexes": "GK 반응속도",
        "GK Reactions": "반응속도",
        "Dribbling (Att.)": "드리블 (공격)",
        "Max PS": "최대 플레이스타일",
        "SM": "개인기",
        "PlayStyle": "플레이스타일",
        "PlayStyle+": "플레이스타일+",
        "Max Pos.": "최대 포지션",
        "Excluded Position": "제외 포지션",
        "Max PS+": "최대 플레이스타일+",
        "New Pos.": "새로운 포지션",
        "WF": "약한 발",
        "Role++": "역할++",
        "Role+": "역할+",
        "UNLOCK BY": "잠금해제 기한",
        "EXPIRES ON": "만료일",
        "# PLAYERS": "진화 가능 선수 수",
        "Player": "선수",
        "Eligible Players": "진화가능 선수",
        "Evolved Players": "진화완료 선수",
        "Trending Evolved Players": "인기 진화완료 선수",
        "Total Upgrades": "총 업그레이드",
        "Full Evolution Path": "전체 진화 단계",
        "EXPIRED": "만료됨",
        "FREE": "무료",
        "TRAINING TIME": "훈련 기간",
        "For You": "맞춤 설정",
        "Exclude Your Used Evolutions": "내가 사용한 진화 제외",
        "Use Every Selected Evolution": "선택한 모든 진화 사용",
        "Exclude Unselected Evolutions": "선택하지 않은 진화 제외",
        "Hide Evolution Combinations": "진화 조합 숨기기",
        "Show All Versions of Same Player": "동일 선수의 모든 버전 보기",
        "Show Non-Boosted Players": "부스트되지 않은 선수 보기",
        "Hide Paid Evolutions": "유료 진화 숨기기",
        "Next": "다음",
        "Prev": "이전",
        "Assets": "스크린샷",
        "Share Path": "진화경로 공유",
        "All Versions": "모든 버전",
        "Check out Evo Lab for expired paths": "만료된 진화는 진화 연구에서 확인",

        // 진화 연구
        "Hide Base Players": "순정 선수 숨기기",
        "Hide Evolutions Players": "진화 선수 숨기기",
        "EVOLVE": "진화하기",
        "NUMBER OF UPGRADES": "업그레이드 개수",
        "NO UPGRADES": "업그레이드 없음",
        "Select a player to evolve": "진화할 선수 검색",
        "Active": "활성",
        "All Evos": "모든 진화",
        "Customise": "커스텀",
        "Review": "진화 적용 확인",
        "SAVE PLAYER": "선수 저장하기",
        "Hide Used Evolutions": "사용한 진화 숨기기",
        "Reset Modifications": "조정 리셋",
        "Show Attributes": "능력치 보기",
        "General Information": "일반 정보",
        "View Rarities": "희귀도 보기",
        "Cosmetic Evolution": "코스메틱 진화",
        "Select a Cosmetic Evolution": "코스메틱 진화 선택",
        "View Gallery": "갤러리 보기",
        "Alternative Positions": "보조 포지션",
        "PlayStyles+": "플레이스타일+",
        "Roles+": "역할+",
        "Roles++": "역할++",
        "Apply upgrades": "업그레이드 적용",
        "Check eligibility": "진화 적격 여부 확인",
        "Show prices": "가격 보기",
        "NEWEST FIRST": "최신순",
        "OLDEST FIRST": "오래된 순",
        "PRICE ASCENDING": "가격 오름차순",
        "PRICE DESCENDING": "가격 내림차순",
        "Search evolutions...": "진화 검색...",
        "APPLY": "적용하기",
        "+ CREATE": "제작하기",
        "Select a rarity": "희귀도 선택",
        "Loading...": "로딩중...",
        "+ ADD FROM MY PLAYERS": "+ 내 선수중에서 추가하기",
        "+ ADD FROM EVOLVE": "+ 진화에서 추가하기",
        "Recently Viewed": "최근 본 선수",
        "EXTINCT": "매물없음",
        "Info": "정보",

        // Footer
        "All rights reserved": "모든 권리 보유",
        "Privacy Policy": "개인정보 보호정책",
        "Terms & Conditions": "이용약관",
        "Business Inquiries": "비즈니스 문의"
    };

    // 동적 번역 패턴
    const dynamicTranslations = [
        // +N more 패턴 (최우선 처리 - 다양한 형식 지원)
        { pattern: /\+\s*(\d+)\s+more/gi, replacement: '+$1개 더' },
        { pattern: /\+(\d+)\s+more/gi, replacement: '+$1개 더' },
        { pattern: /\+ (\d+) more/gi, replacement: '+$1개 더' },
        { pattern: /\*\s+(\d+)\s+more/gi, replacement: '* $1개 더' },

        // CHEM & ROLE 패턴
        { pattern: /CHEM\s*\((\d+)\)/gi, replacement: '조직력($1)' },
        { pattern: /ROLE\s*\((\d+)\)/gi, replacement: '역할($1)' },

        // SBC 관련 (우선 처리)
        { pattern: /Exchange (?:a|an) (\d+)-Rated Squad/i, replacement: '$1등급 스쿼드 교환' },
        { pattern: /Number of players:\s*(\d+)/i, replacement: '필요 선수: $1명' },
        { pattern: /Refreshes Every/i, replacement: '새로고침 주기' },

        // 진화 챌린지 조건 (우선 처리)
        // "Squad Battles on min. Semi-Pro difficulty (or Rush/Rivals/Champions/Live Events)에서 활성화된 진화 선수를 사용해 2경기를 승리하세요"
        {
            pattern: /Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\)에서 활성화된 진화 선수를 사용해 (\d+)경기를 승리하세요\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 활성화된 진화 선수를 사용해 $1경기를 승리하세요.'
        },
        {
            pattern: /Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\)에서 활성화된 진화 선수를 사용해 (\d+)경기를 플레이하세요\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 활성화된 진화 선수를 사용해 $1경기를 플레이하세요.'
        },
        {
            pattern: /Assist (\d+) goals? in Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) using your active EVO Player in game\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 활성화된 진화 선수로 $1도움을 기록하세요.'
        },
        {
            pattern: /Score (\d+) goals? in Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) using your active EVO Player in game\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 활성화된 진화 선수로 $1골을 기록하세요.'
        },
        {
            pattern: /Assist (\d+) goals? in Squad Battles on min Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) using your active EVO Player in game\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 활성화된 진화 선수로 $1도움을 기록하세요.'
        },
        {
            pattern: /Score at least 1 Low Driven goal with your active EVO player in 2 separate matches in any mode\./i,
            replacement: '아무 모드에서 활성화된 진화 선수로 2경기에서 최소 1개의 낮은 드리븐 골을 기록하세요.'
        },
        {
            pattern: /아무 모드에서 활성화된 진화 선수를 사용해 (\d+)경기를 플레이하세요\./i,
            replacement: '아무 모드에서 활성화된 진화 선수를 사용해 $1경기를 플레이하세요.'
        },

        // 목표 챌린지 동적 번역 (확장)
        {
            pattern: /(\d+) of (\d+) Objectives/i,
            replacement: '$2개 중 $1개 목표'
        },
        {
            pattern: /Play (\d+) matches in any Ultimate Team game mode while having 최소 (\d+) Ultimate Scream player in your starting 11\./i,
            replacement: '아무 Ultimate Team 게임 모드에서 최소 $2명의 Ultimate Scream 선수를 선발 11명에 포함하여 $1경기를 플레이하세요.'
        },
        {
            pattern: /Assist (\d+) goals in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Live Events\/Rush\) using a Arkema Première Ligue player\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Live Events/Rush에서 Arkema Première Ligue 선수로 $1도움을 기록하세요.'
        },
        {
            pattern: /Score (\d+) goals in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Live Events\/Rush\) using a player from France\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Live Events/Rush에서 프랑스 선수로 $1골을 기록하세요.'
        },
        {
            pattern: /Win (\d+) matches in Rivals\./i,
            replacement: 'Rivals에서 $1경기를 승리하세요.'
        },
        {
            pattern: /Win (\d+) matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rush\)\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush에서 $1경기를 승리하세요.'
        },
        {
            pattern: /Complete the Season (\d+) Weekly Play Objective once\./i,
            replacement: '시즌 $1 주간 플레이 목표를 1회 완료하세요.'
        },
        {
            pattern: /Complete the Season (\d+) Weekly Play Objective (\d+) times\./i,
            replacement: '시즌 $1 주간 플레이 목표를 $2회 완료하세요.'
        },
        {
            pattern: /Score in (\d+) separate matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Champions\/Live Events\) while having 최소 (\d+) Silver players in your starting 11\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Champions/Live Events에서 실버 선수 최소 $2명을 선발 11명에 포함하여 $1경기에서 골을 기록하세요.'
        },
        {
            pattern: /Play (\d+) matches in Champions Finals\./i,
            replacement: 'Champions Finals에서 $1경기를 플레이하세요.'
        },
        {
            pattern: /Win (\d+) matches in Champions Finals\./i,
            replacement: 'Champions Finals에서 $1경기를 승리하세요.'
        },
        {
            pattern: /Play (\d+) match in the Season (\d+) World Tour Cup Event\./i,
            replacement: '시즌 $2 World Tour Cup Event에서 $1경기를 플레이하세요.'
        },
        {
            pattern: /Play (\d+) matches in the Season (\d+) World Tour Cup Event\./i,
            replacement: '시즌 $2 World Tour Cup Event에서 $1경기를 플레이하세요.'
        },
        {
            pattern: /Assist at least (\d+) goal in (\d+) separate matches with a Mexican Player Item in the Season (\d+) World Tour Cup Event\./i,
            replacement: '시즌 $3 World Tour Cup Event에서 멕시코 선수 아이템으로 $2경기에서 최소 $1도움을 기록하세요.'
        },
        {
            pattern: /Score at least (\d+) goal in (\d+) separate matches with a Brazilian Player Item in the Season (\d+) World Tour Cup Event\./i,
            replacement: '시즌 $3 World Tour Cup Event에서 브라질 선수 아이템으로 $2경기에서 최소 $1골을 기록하세요.'
        },
        {
            pattern: /Play (\d+) matches with at least (\d+) World Tour Player Item in your Starting 11 in the Season (\d+) World Tour Cup Event\./i,
            replacement: '시즌 $3 World Tour Cup Event에서 월드 투어 선수 아이템 최소 $2명을 선발 11명에 포함하여 $1경기를 플레이하세요.'
        },
        {
            pattern: /Score at least (\d+) goal in (\d+) separate matches in the Season (\d+) World Tour Cup Event\./i,
            replacement: '시즌 $3 World Tour Cup Event에서 $2경기에서 최소 $1골을 기록하세요.'
        },
        {
            pattern: /Win the Season (\d+) World Tour Cup Event (\d+) times\./i,
            replacement: '시즌 $1 World Tour Cup Event에서 $2회 우승하세요.'
        },
        {
            pattern: /Score in (\d+) separate matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) using a German player\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 독일 선수로 $1경기에서 골을 기록하세요.'
        },
        {
            pattern: /Win (\d+) matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Champions\/Live Events\) while having 최소 (\d+) FC Bayern München players from the Bundesliga in your starting 11\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Champions/Live Events에서 분데스리가 소속 FC Bayern München 선수 최소 $2명을 선발 11명에 포함하여 $1경기를 승리하세요.'
        },
        {
            pattern: /Play (\d+) matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) while having 최소 (\d+) German CB in your starting 11\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 독일 CB 최소 $2명을 선발 11명에 포함하여 $1경기를 플레이하세요.'
        },
        {
            pattern: /Assist a goal in (\d+) separate matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Champions\/Live Events\) using a German CDM\. \(Only Preferred Position\)/i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Champions/Live Events에서 독일 CDM으로 $1경기에서 도움을 기록하세요. (주 포지션만)'
        },
        {
            pattern: /List (\d+) Player Items on the Transfer Market\./i,
            replacement: '이적 시장에 선수 아이템 $1명을 등록하세요.'
        },
        {
            pattern: /Buy (\d+) Player Items on the Transfer Market\./i,
            replacement: '이적 시장에서 선수 아이템 $1명을 구매하세요.'
        },
        {
            pattern: /Play (\d+) matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Rush\)\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Rush에서 $1경기를 플레이하세요.'
        },
        {
            pattern: /Win (\d+) matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Rush\)\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Rush에서 $1경기를 승리하세요.'
        },
        {
            pattern: /Score (\d+) goals in any Ultimate Team game mode using a Brazilian player\./i,
            replacement: '아무 Ultimate Team 게임 모드에서 브라질 선수로 $1골을 기록하세요.'
        },
        {
            pattern: /Play (\d+) match in any Ultimate Team game mode and earn SP!/i,
            replacement: '아무 Ultimate Team 게임 모드에서 $1경기를 플레이하고 SP를 획득하세요!'
        },
        {
            pattern: /Score (\d+) goals in any Ultimate Team game mode\./i,
            replacement: '아무 Ultimate Team 게임 모드에서 $1골을 기록하세요.'
        },
        {
            pattern: /(\d+) Completions/i,
            replacement: '$1회 완료'
        },
        {
            pattern: /(\d+) Completion/i,
            replacement: '$1회 완료'
        },
        {
            pattern: /(\d+) Objectives/i,
            replacement: '$1개 목표'
        },
        {
            pattern: /Complete the (.+?) Puzzle SBC\./i,
            replacement: '$1 퍼즐 SBC를 완료하세요.'
        },
        {
            pattern: /Finish the first onboarding Moment and receive a Foundations Item\./i,
            replacement: '첫 번째 온보딩 모멘트를 완료하고 Foundations 아이템을 받으세요.'
        },
        {
            pattern: /Play (\d+) Squad Battles Matches on any difficulty\./i,
            replacement: '아무 난이도에서 Squad Battles $1경기를 플레이하세요.'
        },
        {
            pattern: /Play the Squad Battles Featured Squad on any difficulty\./i,
            replacement: '아무 난이도에서 Squad Battles Featured Squad를 플레이하세요.'
        },
        {
            pattern: /Score (\d+) goals in any game mode within Ultimate Team\./i,
            replacement: 'Ultimate Team 내 아무 게임 모드에서 $1골을 기록하세요.'
        },
        {
            pattern: /Fully complete the Football 101 group within Foundation Moments\./i,
            replacement: 'Foundation Moments 내 Football 101 그룹을 완전히 완료하세요.'
        },
        {
            pattern: /Play (\d+) Ultimate Team Rush matches\./i,
            replacement: 'Ultimate Team Rush $1경기를 플레이하세요.'
        },
        {
            pattern: /Play (\d+) Squad Battles matches on Min\. Semi-Pro difficulty\./i,
            replacement: 'Squad Battles(최소 세미프로) $1경기를 플레이하세요.'
        },
        {
            pattern: /Play (\d+) matches in Rivals\./i,
            replacement: 'Rivals에서 $1경기를 플레이하세요.'
        },
        {
            pattern: /Play (\d+) matches in any Ultimate Team game mode\./i,
            replacement: '아무 Ultimate Team 게임 모드에서 $1경기를 플레이하세요.'
        },
        {
            pattern: /Complete (\d+) Rush bonuses\./i,
            replacement: 'Rush 보너스 $1개를 완료하세요.'
        },
        {
            pattern: /Assist (\d+) times in any Ultimate Team game mode\./i,
            replacement: '아무 Ultimate Team 게임 모드에서 $1도움을 기록하세요.'
        },
        {
            pattern: /Complete any (\d+) SBC groups\./i,
            replacement: '아무 SBC 그룹 $1개를 완료하세요.'
        },
        {
            pattern: /(\d+) Of (\d+) Foundations Pick/i,
            replacement: '$2개 중 $1개 Foundations Pick'
        },
        {
            pattern: /CHEM\s*\((\d+)\)/i,
            replacement: '조직력($1)'
        },
        {
            pattern: /\+\s*(\d+)\s+more/gi,
            replacement: '+$1개 더'
        },
        {
            pattern: /\+ (\d+) more/gi,
            replacement: '+$1개 더'
        },

        // 목표 챌린지 동적 번역 (이벤트/토너먼트 일반화)
        {
            pattern: /Score at least (\d+) goals? from outside of the box in the (.+?)\. Earn an EVO Consumable that grants (.+?), applicable to all Player Items \(excluding (.+?)\) with a 최대 (\d+) OVR\./i,
            replacement: (match, goals, event, bonus, excluded, ovr) => `${event.trim()}에서 박스 밖에서 최소 ${goals}골을 기록하세요. 모든 선수 아이템(${excluded} 제외, 최대 ${ovr} 오버롤)에 적용 가능한 ${bonus} 진화 소모품을 획득하세요.`
        },
        {
            pattern: /Score at least (\d+) goals? in (\d+) separate matches in (?:the )?(.+?)(?: to earn a special (.+?))?\.$/i,
            replacement: (match, goals, matches, event, reward) => {
                const base = `${event.trim()}에서 ${matches}경기에서 최소 ${goals}골을 기록하세요`;
                return reward ? `${base.slice(0, -1)}여 특별한 ${reward.trim()}을 획득하세요.` : base + '.';
            }
        },
        {
            pattern: /Score at least (\d+) goals? in a single match in (?:the )?(.+?)\.$/i,
            replacement: (match, goals, event) => `${event.trim()}에서 한 경기에 최소 ${goals}골을 기록하세요.`
        },
        {
            pattern: /Score at least (\d+) goals? in (?:the )?(.+?)\.$/i,
            replacement: (match, goals, event) => `${event.trim()}에서 최소 ${goals}골을 기록하세요.`
        },
        {
            pattern: /Win (?:the )?(.+?)(?: to earn a special (.+?))?\.$/i,
            replacement: (match, event, reward) => {
                const base = `${event.trim()}에서 우승하`;
                return reward ? `${base}여 특별한 ${reward.trim()}을 획득하세요.` : base + '세요.';
            }
        },
        {
            pattern: /Play (\d+) matches? in (?:the )?"?(.+?)"?(?: Flash Rush Event)?, using any (.+?) Player Item\.$/i,
            replacement: (match, count, event, playerType) => `아무 ${playerType.trim()} 선수 아이템을 사용하여 ${event.trim()}에서 ${count}경기를 플레이하세요.`
        },
        {
            pattern: /(?:Play|Win) (\d+) matches? in (?:the )?"?(.+?)"?(?:\s+(?:Tournament|Event|Flash Rush Event))?\.$/i,
            replacement: (match, count, event) => {
                const action = match.toLowerCase().startsWith('win') ? '승리' : '플레이';
                return `${event.trim()}에서 ${count}경기를 ${action}하세요.`;
            }
        },
        {
            pattern: /Earn ([\d,]+) Rush Points\./i,
            replacement: '러시 포인트 $1 획득.'
        },
        {
            pattern: /Assist a goal in (\d+) separate matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) using a RW\. \(Only Preferred Position\)/i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 RW로 $1경기에서 도움을 기록하세요. (주 포지션만)'
        },
        {
            pattern: /Win (\d+) matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Champions\/Live Events\) while having 최소 (\d+) Brazilian players in your starting 11\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Champions/Live Events에서 브라질 선수 최소 $2명을 선발 11명에 포함하여 $1경기를 승리하세요.'
        },
        {
            pattern: /Score in (\d+) separate matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) while having 최소 (\d+) Silver players in your starting 11\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 실버 선수 최소 $2명을 선발 11명에 포함하여 $1경기에서 골을 기록하세요.'
        },
        {
            pattern: /Win (\d+) matches by (\d+) goals or more in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Champions\/Live Events\) while having 최소 (\d+) Brazilian players in your starting 11\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Champions/Live Events에서 브라질 선수 최소 $3명을 선발 11명에 포함하여 $2골 이상 차이로 $1경기를 승리하세요.'
        },
        {
            pattern: /Score in (\d+) separate matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) using a Brazilian CAM\. \(Only Preferred Position\)/i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 브라질 CAM으로 $1경기에서 골을 기록하세요. (주 포지션만)'
        },
        {
            pattern: /Win (\d+) matches in Squad Battles on Min\. Semi-Pro difficulty \(or Rivals\/Champions\/Live Events\) while having 최소 (\d+) Brazilian defender in your starting 11\./i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rivals/Champions/Live Events에서 브라질 수비수 최소 $2명을 선발 11명에 포함하여 $1경기를 승리하세요.'
        },

        // 만료 시간 우선 처리
        { pattern: /Expires in (\d+)\s*day(?:s)?/i, replacement: '$1일 후 만료 예정' },
        { pattern: /Expires in (\d+)\s*month(?:s)?/i, replacement: '$1달 후 만료 예정' },
        { pattern: /in (\d+)\s*day(?:s)?/i, replacement: '$1일 후' },
        { pattern: /in (\d+)\s*month(?:s)?/i, replacement: '$1달 후' },
        { pattern: /in (\d+)\s*hour(?:s)?/i, replacement: '$1시간 후' },

        // 시간 포맷
        { pattern: /(\d+)d\s*(\d+)h\s*(\d+)m/i, replacement: '$1일 $2시간 $3분' },
        { pattern: /(\d+)d\s*(\d+)h/i, replacement: '$1일 $2시간' },
        { pattern: /(\d+)d\s*(\d+)m/i, replacement: '$1일 $2분' },
        { pattern: /(\d+)\s*h\s*(\d+)\s*m/i, replacement: '$1시간 $2분' },
        { pattern: /(\d+)h(\d+)m/i, replacement: '$1시간 $2분' },
        { pattern: /(\d+)\s*years\b/i, replacement: '$1년' },
        { pattern: /(\d+)\s*months\b/i, replacement: '$1달' },
        { pattern: /(\d+)\s*month\b/i, replacement: '$1달' },
        { pattern: /(\d+)\s*days\b/i, replacement: '$1일' },
        { pattern: /(\d+)\s*day\b/i, replacement: '$1일' },
        { pattern: /(\d+)\s*hours\b/i, replacement: '$1시간' },
        { pattern: /(\d+)\s*h\b/i, replacement: '$1시간' },
        { pattern: /(\d+)\s*m\b/i, replacement: '$1분' },
        { pattern: /(\d+)h\b/i, replacement: '$1시간' },
        { pattern: /(\d+)m\b/i, replacement: '$1분' },

        // 날짜 포맷
        {
            pattern: /([A-Za-z]+) (\d{1,2}), (\d{4}), (\d{1,2}):(\d{2}) (AM|PM)/i,
            replacement: (_, monthName, day, year, hour, minute, period) => {
                const months = {
                    January: 1, February: 2, March: 3, April: 4, May: 5, June: 6,
                    July: 7, August: 8, September: 9, October: 10, November: 11, December: 12
                };
                const m = months[monthName];
                let h = parseInt(hour, 10);
                if (period.toUpperCase() === 'PM' && h !== 12) h += 12;
                if (period.toUpperCase() === 'AM' && h === 12) h = 0;
                const ampm = period.toUpperCase() === 'PM' ? '오후' : '오전';
                return `${year}년 ${m}월 ${day}일 ${ampm} ${h}시 ${minute}분`;
            }
        },
        {
            pattern: /([A-Za-z]+)\s+(\d{1,2}),\s+(\d{4})/i,
            replacement: (_, monthName, day, year) => {
                const months = {
                    January: '1월', February: '2월', March: '3월', April: '4월',
                    May: '5월', June: '6월', July: '7월', August: '8월',
                    September: '9월', October: '10월', November: '11월', December: '12월',
                    Jan: '1월', Feb: '2월', Mar: '3월', Apr: '4월',
                    May: '5월', Jun: '6월', Jul: '7월', Aug: '8월',
                    Sep: '9월', Oct: '10월', Nov: '11월', Dec: '12월'
                };
                const krMonth = months[monthName] || monthName;
                return `${year}년 ${krMonth} ${day}일`;
            }
        },
        {
            pattern: /(\d{1,2})(st|nd|rd|th)? ([A-Za-z]+) (\d{1,2}):(\d{2})/i,
            replacement: (_, day, __, month, hour, minute) => {
                const krMonth = monthMap[month.toLowerCase()] || month;
                return `${krMonth} ${day}일 ${hour}:${minute}`;
            }
        },

        // SBC 요구사항
        { pattern: /Available for (\d+)\s*weeks?/i, replacement: '$1주 동안 사용 가능' },
        { pattern: /Expires in (\d+ .*?)$/i, replacement: '$1후 만료 예정' },
        { pattern: /(\d+)-rated squad/i, replacement: '$1등급 스쿼드' },
        { pattern: /Min\. (\d+) Players from: (.+)/i, replacement: '$2 소속 선수 최소 $1명' },
        { pattern: /Min\. (\d+) Players: Team of the Week/i, replacement: '최소 $1명: 이 주의 팀 선수' },
        { pattern: /Min\. Team Rating: (\d+)/i, replacement: '최소 팀 등급: $1' },
        { pattern: /Min\. Nationalities in Squad: (\d+)/i, replacement: '스쿼드 내 최소 국적 수: $1' },
        { pattern: /Max\. Nationalities in Squad: (\d+)/i, replacement: '스쿼드 내 최대 국적 수: $1' },
        { pattern: /Min\. (\d+) Players from the same League/i, replacement: '동일 리그 소속 선수 최소 $1명' },
        { pattern: /Max\. (\d+) Players from the same League/i, replacement: '동일 리그 소속 선수 최대 $1명' },
        { pattern: /Min\. (\d+) Players from the same Club/i, replacement: '동일 클럽 소속 선수 최소 $1명' },
        { pattern: /Max\. (\d+) Players from the same Club/i, replacement: '동일 클럽 소속 선수 최대 $1명' },
        { pattern: /Min\. Clubs in Squad: (\d+)/i, replacement: '스쿼드 내 클럽 최소 $1개' },
        { pattern: /Max\. Clubs in Squad: (\d+)/i, replacement: '스쿼드 내 클럽 최대 $1개' },
        { pattern: /Min\. (\d+) Players from the same Nation/i, replacement: '동일 국가 소속 선수 최소 $1명' },
        { pattern: /Max\. (\d+) Players from the same Nation/i, replacement: '동일 국가 소속 선수 최대 $1명' },
        { pattern: /Min\. Leagues in Squad: (\d+)/i, replacement: '스쿼드 내 리그 최소 $1개' },
        { pattern: /Max\. Leagues in Squad: (\d+)/i, replacement: '스쿼드 내 리그 최대 $1개' },
        { pattern: /Min\. (\d+) Players: (.+)/i, replacement: '최소 $1명: $2 선수' },
        { pattern: /Min\. Squad Total Chemistry Points: (\d+)/i, replacement: '최소 팀 총 조직력: $1' },
        { pattern: /Min\. (\d+) player with minimum OVR of (\d+)/i, replacement: '$2등급 선수 최소 $1명' },
        { pattern: /Min\. Leagues Squad: (\d+)/i, replacement: '스쿼드 내 리그 최소 $1개' },
        { pattern: /Min\. Clubs Squad: (\d+)/i, replacement: '스쿼드 내 클럽 최소 $1개' },
        { pattern: /Min\. Nationalities Squad: (\d+)/i, replacement: '스쿼드 내 국적 최소 $1개' },
        { pattern: /Player quality: Min\. ['"]?([A-Za-z\s]+)['"]?/i, replacement: '최소 $1 선수' },

        // 진화 관련
        { pattern: /Max\. (\d+)/i, replacement: '최대 $1' },
        { pattern: /Min\. (\d+)/i, replacement: '최소 $1' },
        {
            pattern: /\b(CAM|CM|CDM|ST|CF|LW|RW|LM|RM|CB|LB|RB|LWB|RWB|GK)\s+(Advanced Forward|False 9|Poacher|Target Forward|Inside Forward|Wide Playmaker|Winger|Classic 10|Half-Winger|Playmaker|Shadow Striker|Wide Midfielder|Box-To-Box|Deep-Lying Playmaker|Holding|Centre-Half|Wide Half|Ball-Playing Defender|Defender|Stopper|Attacking Wingback|Falseback|Fullback|Wingback|Goalkeeper|Sweeper Keeper)(\+{1,2})?/i,
            replacement: (match) => {
                const regex = /\b(CAM|CM|CDM|ST|CF|LW|RW|LM|RM|CB|LB|RB|LWB|RWB|GK)\s+(Advanced Forward|False 9|Poacher|Target Forward|Inside Forward|Wide Playmaker|Winger|Classic 10|Half-Winger|Playmaker|Shadow Striker|Wide Midfielder|Box-To-Box|Deep-Lying Playmaker|Holding|Centre-Half|Wide Half|Ball-Playing Defender|Defender|Stopper|Attacking Wingback|Falseback|Fullback|Wingback|Goalkeeper|Sweeper Keeper)(\+{1,2})?/i;
                const exec = regex.exec(match);
                if (!exec) return match;
                const [, position, role, plus = ''] = exec;
                const translatedRole = roleTranslations[role] || role;
                return `${position} ${translatedRole}${plus}`;
            }
        },
        { pattern: /^([\d,]+)\s+players$/i, replacement: '$1 선수 진화 가능' },
        { pattern: /^Level\s*(\d+)/i, replacement: '$1단계' },

        // 진화 조건 (구체적 → 일반 순서)
        // 1. 가장 구체적인 패턴들 (Squad Battles, Rivals 등)
        {
            pattern: /(\d+) matches? in Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\) using your active EVO Player in game/i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 활성화된 진화 선수를 사용하여 $1경기'
        },
        {
            pattern: /(\d+) matches? in Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\)/i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 $1경기'
        },
        {
            pattern: /in any mode using your active EVO player in game/i,
            replacement: '아무 모드에서 활성화된 진화 선수를 게임에 사용하여'
        },
        {
            pattern: /using your active EVO Player in game/i,
            replacement: '활성화된 진화 선수를 게임에 사용하여'
        },
        {
            pattern: /(\d+) finishes in Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\)/i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 $1골결정력'
        },
        {
            pattern: /Play (\d+) match while conceding 2 goals or less in Squad Battles on min\. Semi-Pro difficulty \(or Rush\/Rivals\/Champions\/Live Events\)/i,
            replacement: 'Squad Battles(최소 세미프로) 또는 Rush/Rivals/Champions/Live Events에서 2실점 이하로 $1경기를 플레이'
        },

        // 2. 일반화된 패턴들
        {
            pattern: /Play (\d+) match(?:es)?(?: (?:in|on)? (.*?))? using your active EVO player(?: in game| game)?\.?$/i,
            replacement: (_, count, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수를 사용해 ${count}경기를 플레이하세요.`
        },
        {
            pattern: /Win (\d+) match(?:es)?(?: (?:in|on)? (.*?))? using your active EVO player(?: in game| game)?\.?/i,
            replacement: (_, count, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수를 사용해 ${count}경기를 승리하세요.`
        },
        {
            pattern: /Win 1 match by at least (\d+) goals?(?: (?:in|on)? (.*?))? using your active EVO player(?: in game| game)?\.?/i,
            replacement: (_, diff, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수를 사용해 ${diff}골 이상 차이로 승리하세요.`
        },
        {
            pattern: /Score at least (\d+) goal(?:s)? with your active EVO player in (\d+) separate matches(?: in)? (.*?)\.?/i,
            replacement: (_, goals, matches, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수로 ${matches}경기에서 최소 ${goals}골을 기록하세요.`
        },
        {
            pattern: /Score (\d+) goals? with your active EVO player(?: (?:in|on)? (.*?))?\.?/i,
            replacement: (_, goals, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수로 ${goals}골을 기록하세요.`
        },
        {
            pattern: /Assist (\d+) goals? with your active EVO player(?: (?:in|on)? (.*?))?\.?/i,
            replacement: (_, assists, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수로 ${assists}도움을 기록하세요.`
        },
        {
            pattern: /Assist at least once in (\d+) separate matches(?: in)? (.*?) using your active EVO player(?: in game| game)?\.?/i,
            replacement: (_, matches, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수로 ${matches}경기에서 최소 1도움을 기록하세요.`
        },
        {
            pattern: /Assist at least (\d+) goals? with your active EVO player (\d+) separate matches(?: (?:in|on)? (.*?))?\.?/i,
            replacement: (_, assists, matches, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수로 ${matches}경기에서 최소 ${assists}도움을 기록하세요.`
        },
        {
            pattern: /Win (\d+) matches? while conceding (\d+) goal(?:s)? or less(?: (?:in|on)? (.*?))? using your active EVO player(?: in game| game)?\.?/i,
            replacement: (_, wins, goals, mode) => `${normalizeMode(mode || 'any mode')}에서 활성화된 진화 선수를 사용해 ${goals}실점 이하로 ${wins}경기를 승리하세요.`
        },

        // 진화 연구 관련
        {
            pattern: /Selected (.+?) Evolution Path/i,
            replacement: '선택된 $1 진화 경로'
        },
        {
            pattern: /Best (.+?) Evolutions Path/i,
            replacement: '최고의 $1 진화 경로'
        },
        {
            pattern: /All (.+?) Evolution Paths/i,
            replacement: '$1의 모든 진화 경로'
        },
        {
            pattern: /\b(CAM|CM|CDM|ST|CF|LW|RW|LM|RM|CB|LB|RB|LWB|RWB|GK)\s*-\s*(Advanced Forward|False 9|Poacher|Target Forward|Inside Forward|Wide Playmaker|Winger|Classic 10|Half-Winger|Playmaker|Shadow Striker|Wide Midfielder|Box-To-Box|Deep-Lying Playmaker|Holding|Centre-Half|Wide Half|Ball-Playing Defender|Defender|Stopper|Attacking Wingback|Falseback|Fullback|Wingback|Goalkeeper|Sweeper Keeper)(\+{1,2})?/i,
            replacement: (match) => {
                const regex = /\b(CAM|CM|CDM|ST|CF|LW|RW|LM|RM|CB|LB|RB|LWB|RWB|GK)\s*-\s*(Advanced Forward|False 9|Poacher|Target Forward|Inside Forward|Wide Playmaker|Winger|Classic 10|Half-Winger|Playmaker|Shadow Striker|Wide Midfielder|Box-To-Box|Deep-Lying Playmaker|Holding|Centre-Half|Wide Half|Ball-Playing Defender|Defender|Stopper|Attacking Wingback|Falseback|Fullback|Wingback|Goalkeeper|Sweeper Keeper)(\+{1,2})?/i;
                const exec = regex.exec(match);
                if (!exec) return match;
                const [, position, role, plus = ''] = exec;
                const translatedRole = roleTranslations[role] || role;
                return `${position} - ${translatedRole}${plus}`;
            }
        },

        // 시제 단어
        { pattern: /\bago\b/i, replacement: ' 전' }
    ];

    // 소문자 변환된 번역 맵 생성
    const lowerCaseTranslations = Object.fromEntries(
        Object.entries(translations).map(([k, v]) => [k.trim().toLowerCase(), v])
    );

    // 텍스트 노드 번역 함수
    function translateTextNode(node) {
        const original = node.nodeValue;
        if (!original || !original.trim() || isMoneyFormat(original)) return;

        let translated = original;
        const trimmed = original.trim();
        const normalized = trimmed.toLowerCase();

        // 1. 정적 번역 우선
        if (lowerCaseTranslations[normalized]) {
            node.nodeValue = original.replace(trimmed, lowerCaseTranslations[normalized]);
            return;
        }

        // 2. 동적 패턴 번역
        for (const { pattern, replacement } of dynamicTranslations) {
            if (pattern.test(translated)) {
                translated = typeof replacement === 'function'
                    ? translated.replace(pattern, replacement)
                    : translated.replace(pattern, replacement);

                if (translated !== original) {
                    node.nodeValue = translated;
                    return;
                }
            }
        }
    }

    // 번역 적용 함수
    function applyTranslations() {
        const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
        let node;
        while ((node = walker.nextNode())) translateTextNode(node);

        // 추가: innerHTML 기반 전역 치환 (동적 콘텐츠 대응)
        document.querySelectorAll('*').forEach(element => {
            if (element.children.length === 0 && element.textContent.trim()) {
                let text = element.textContent;

                // +N more 패턴
                if (/\+\s*\d+\s+more/i.test(text)) {
                    element.textContent = text.replace(/\+\s*(\d+)\s+more/gi, '+$1개 더');
                }

                // CHEM(숫자) 패턴
                if (/CHEM\s*\(\d+\)/i.test(text)) {
                    element.textContent = text.replace(/CHEM\s*\((\d+)\)/gi, '조직력($1)');
                }

                // ROLE(숫자) 패턴
                if (/ROLE\s*\(\d+\)/i.test(text)) {
                    element.textContent = text.replace(/ROLE\s*\((\d+)\)/gi, '역할($1)');
                }

                // Show/Hide Evolution Info
                if (text.includes('Show Evolution Info')) {
                    element.textContent = text.replace(/Show Evolution Info/g, '진화 정보 보기');
                }
                if (text.includes('Hide Evolution Info')) {
                    element.textContent = text.replace(/Hide Evolution Info/g, '진화 정보 숨기기');
                }
            }
        });
    }

    // MutationObserver + Debounce
    const observer = new MutationObserver(() => {
        clearTimeout(window._futggDebounce);
        window._futggDebounce = setTimeout(applyTranslations, 100); // 200 → 100ms로 단축
    });

    observer.observe(document.body, { childList: true, subtree: true });
    window.addEventListener('load', () => setTimeout(applyTranslations, 300)); // 500 → 300ms로 단축

})();