fix: 필수 팩 기본 활성화 + 저부하 모드 토글 반영 + 용어 겹침 수정
리뷰 지적 2건과, 그것을 고치다 드러난 용어집 버그 1건을 함께 처리했다. 1) 저부하 모드 토글이 모델에 반영되지 않던 버그 ModelManager 는 생성 시점의 low_power 로 정밀도를 정하는데 설정에서 토글해도 갱신되지 않았고, stop() 은 모델을 내리지 않아 이전 정밀도 모델이 그대로 남았다. TranslationEngine.sync_performance() 를 추가해 값이 바뀌면 언로드 후 갱신하고, _bootstrap 과 재시작 경로에서 부른다. 2) 필수 게임 팩이 기본으로 꺼져 있던 문제 새 설치 기본값을 fps-common + 오버워치 + 배그 + R6 + 워독스로 켰다. 3) (1)(2)를 고치며 드러난 것: 팩 여러 개를 켜면 결과가 체크 순서에 휘둘렸다. knocked 가 FPS공통 "기절" / 배그 "눕혔다" 로 갈리는 식으로 19개 용어가 충돌하는데, 사용자는 그 순서를 볼 수도 바꿀 수도 없었다. 팩에 scope(generic/game) 를 두고 범용 -> 게임 전용 -> 사용자 항목 순으로 적용해 결정적으로 만들었다. 게임 팩끼리 갈리는 것은 사람이 판단할 문제라 find_conflicts() 로 뽑아 용어집 화면에 표시한다. 4) 용어 겹침 버그: "the blue"(조각)가 "blue zone" 보다 앞 위치라는 이유로 먼저 잡혀 "자기장 자기장" 이 됐다. 최장일치 정렬은 같은 시작 위치에서만 통한다. 조각 항목을 제거하고, 모든 팩을 켠 상태로 각 용어가 정확히 한 번만 치환되는지 검사하는 테스트를 추가했다. 검증: pytest 110개 통과 (저부하 6 + 팩 계층/충돌/겹침 12 신규), ruff clean Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -2,65 +2,479 @@
|
||||
"key": "watchdogs",
|
||||
"name": "워치독스 (Watch Dogs)",
|
||||
"description": "1·2·리전 공통. 조직명과 해킹 용어는 고유명사라 번역기가 특히 잘 틀립니다.",
|
||||
"scope": "game",
|
||||
"entries": [
|
||||
{"source": "DedSec", "targets": {"ko": "데드섹", "ja": "デッドセック", "zh": "DedSec"}},
|
||||
{"source": "ctOS", "targets": {"ko": "ctOS", "ja": "ctOS", "zh": "ctOS"}},
|
||||
{"source": "Blume", "targets": {"ko": "블룸", "ja": "ブルーム", "zh": "布鲁姆"}},
|
||||
{"source": "Albion", "targets": {"ko": "알비온", "ja": "アルビオン", "zh": "阿尔比恩"}},
|
||||
{"source": "Clan Kelley", "targets": {"ko": "켈리 클랜", "ja": "ケリー一家", "zh": "凯利帮"}},
|
||||
{"source": "Zero Day", "targets": {"ko": "제로 데이", "ja": "ゼロデイ", "zh": "零日"}},
|
||||
{"source": "Bratva", "targets": {"ko": "브라트바", "ja": "ブラトヴァ", "zh": "兄弟会"}},
|
||||
{"source": "Viceroys", "targets": {"ko": "바이스로이", "ja": "ヴァイスロイ", "zh": "总督帮"}},
|
||||
{"source": "the Fixer", "targets": {"ko": "해결사", "ja": "フィクサー", "zh": "中间人"}},
|
||||
{"source": "fixer contract", "targets": {"ko": "해결사 의뢰", "ja": "フィクサー依頼", "zh": "中间人任务"}},
|
||||
{"source": "operative", "targets": {"ko": "요원", "ja": "オペレーティブ", "zh": "特工"}},
|
||||
{"source": "recruit", "targets": {"ko": "영입", "ja": "勧誘", "zh": "招募"}},
|
||||
{"source": "permadeath", "targets": {"ko": "영구 사망", "ja": "パーマデス", "zh": "永久死亡"}},
|
||||
{"source": "hack", "targets": {"ko": "해킹", "ja": "ハッキング", "zh": "黑入"}},
|
||||
{"source": "hacked", "targets": {"ko": "해킹됐다", "ja": "ハックされた", "zh": "被黑了"}},
|
||||
{"source": "remote hack", "targets": {"ko": "원격 해킹", "ja": "リモートハック", "zh": "远程黑入"}},
|
||||
{"source": "backdoor", "targets": {"ko": "백도어", "ja": "バックドア", "zh": "后门"}},
|
||||
{"source": "firewall", "targets": {"ko": "방화벽", "ja": "ファイアウォール", "zh": "防火墙"}},
|
||||
{"source": "exploit", "targets": {"ko": "익스플로잇", "ja": "エクスプロイト", "zh": "漏洞利用"}},
|
||||
{"source": "payload", "targets": {"ko": "페이로드", "ja": "ペイロード", "zh": "载荷"}},
|
||||
{"source": "botnet", "targets": {"ko": "봇넷", "ja": "ボットネット", "zh": "僵尸网络"}},
|
||||
{"source": "server farm", "targets": {"ko": "서버 팜", "ja": "サーバーファーム", "zh": "服务器农场"}},
|
||||
{"source": "data breach", "targets": {"ko": "정보 유출", "ja": "情報漏洩", "zh": "数据泄露"}},
|
||||
{"source": "encryption", "targets": {"ko": "암호화", "ja": "暗号化", "zh": "加密"}},
|
||||
{"source": "profiler", "targets": {"ko": "프로파일러", "ja": "プロファイラー", "zh": "分析器"}},
|
||||
{"source": "profiling", "targets": {"ko": "신원 조회", "ja": "プロファイリング", "zh": "身份分析"}},
|
||||
{"source": "surveillance", "targets": {"ko": "감시", "ja": "監視", "zh": "监控"}},
|
||||
{"source": "security camera", "targets": {"ko": "감시 카메라", "ja": "防犯カメラ", "zh": "监控摄像头"}},
|
||||
{"source": "jump to camera", "targets": {"ko": "카메라 이동", "ja": "カメラに移動", "zh": "切换摄像头"}},
|
||||
{"source": "NetHack", "targets": {"ko": "넷핵", "ja": "ネットハック", "zh": "网络视野"}},
|
||||
{"source": "spiderbot", "targets": {"ko": "스파이더봇", "ja": "スパイダーボット", "zh": "蜘蛛机器人"}},
|
||||
{"source": "quadcopter", "targets": {"ko": "쿼드콥터", "ja": "クアッドコプター", "zh": "四轴飞行器"}},
|
||||
{"source": "jumper", "targets": {"ko": "점퍼", "ja": "ジャンパー", "zh": "跳跳车"}},
|
||||
{"source": "RC car", "targets": {"ko": "RC카", "ja": "ラジコン", "zh": "遥控车"}},
|
||||
{"source": "cargo drone", "targets": {"ko": "화물 드론", "ja": "カーゴドローン", "zh": "货运无人机"}},
|
||||
{"source": "turret", "targets": {"ko": "터렛", "ja": "タレット", "zh": "炮塔"}},
|
||||
{"source": "guard", "targets": {"ko": "경비원", "ja": "警備員", "zh": "守卫"}},
|
||||
{"source": "restricted area", "targets": {"ko": "제한 구역", "ja": "立ち入り禁止区域", "zh": "禁区"}},
|
||||
{"source": "detected", "targets": {"ko": "발각됐다", "ja": "見つかった", "zh": "被发现了"}},
|
||||
{"source": "stay hidden", "targets": {"ko": "숨어 있어", "ja": "隠れてろ", "zh": "别暴露"}},
|
||||
{"source": "take down", "targets": {"ko": "제압", "ja": "テイクダウン", "zh": "制服"}},
|
||||
{"source": "non lethal", "targets": {"ko": "비살상", "ja": "非殺傷", "zh": "非致命"}},
|
||||
{"source": "lethal", "targets": {"ko": "살상", "ja": "殺傷", "zh": "致命"}},
|
||||
{"source": "heat level", "targets": {"ko": "수배 단계", "ja": "指名手配レベル", "zh": "通缉等级"}},
|
||||
{"source": "wanted", "targets": {"ko": "수배 중", "ja": "指名手配", "zh": "被通缉"}},
|
||||
{"source": "lose the cops", "targets": {"ko": "경찰 따돌려", "ja": "警察撒いて", "zh": "甩掉警察"}},
|
||||
{"source": "traffic light", "targets": {"ko": "신호등", "ja": "信号機", "zh": "红绿灯"}},
|
||||
{"source": "steam pipe", "targets": {"ko": "증기관", "ja": "蒸気管", "zh": "蒸汽管道"}},
|
||||
{"source": "blocker", "targets": {"ko": "차단봉", "ja": "ブロッカー", "zh": "路障"}},
|
||||
{"source": "escape", "targets": {"ko": "도주", "ja": "逃走", "zh": "逃脱"}},
|
||||
{"source": "mission", "targets": {"ko": "임무", "ja": "ミッション", "zh": "任务"}},
|
||||
{"source": "side mission", "targets": {"ko": "서브 임무", "ja": "サブミッション", "zh": "支线任务"}},
|
||||
{"source": "checkpoint", "targets": {"ko": "체크포인트", "ja": "チェックポイント", "zh": "检查点"}},
|
||||
{"source": "borough", "targets": {"ko": "자치구", "ja": "区", "zh": "行政区"}},
|
||||
{"source": "uprising", "targets": {"ko": "봉기", "ja": "蜂起", "zh": "起义"}},
|
||||
{"source": "resistance", "targets": {"ko": "저항군", "ja": "レジスタンス", "zh": "抵抗组织"}},
|
||||
{"source": "whistleblower", "targets": {"ko": "내부 고발자", "ja": "内部告発者", "zh": "举报人"}},
|
||||
{"source": "privacy", "targets": {"ko": "사생활", "ja": "プライバシー", "zh": "隐私"}},
|
||||
{"source": "the city is watching", "targets": {"ko": "도시가 지켜보고 있다", "ja": "街が見ている", "zh": "城市在注视"}}
|
||||
{
|
||||
"source": "DedSec",
|
||||
"targets": {
|
||||
"ko": "데드섹",
|
||||
"ja": "デッドセック",
|
||||
"zh": "DedSec"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "ctOS",
|
||||
"targets": {
|
||||
"ko": "ctOS",
|
||||
"ja": "ctOS",
|
||||
"zh": "ctOS"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "Blume",
|
||||
"targets": {
|
||||
"ko": "블룸",
|
||||
"ja": "ブルーム",
|
||||
"zh": "布鲁姆"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "Albion",
|
||||
"targets": {
|
||||
"ko": "알비온",
|
||||
"ja": "アルビオン",
|
||||
"zh": "阿尔比恩"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "Clan Kelley",
|
||||
"targets": {
|
||||
"ko": "켈리 클랜",
|
||||
"ja": "ケリー一家",
|
||||
"zh": "凯利帮"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "Zero Day",
|
||||
"targets": {
|
||||
"ko": "제로 데이",
|
||||
"ja": "ゼロデイ",
|
||||
"zh": "零日"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "Bratva",
|
||||
"targets": {
|
||||
"ko": "브라트바",
|
||||
"ja": "ブラトヴァ",
|
||||
"zh": "兄弟会"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "Viceroys",
|
||||
"targets": {
|
||||
"ko": "바이스로이",
|
||||
"ja": "ヴァイスロイ",
|
||||
"zh": "总督帮"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "the Fixer",
|
||||
"targets": {
|
||||
"ko": "해결사",
|
||||
"ja": "フィクサー",
|
||||
"zh": "中间人"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "fixer contract",
|
||||
"targets": {
|
||||
"ko": "해결사 의뢰",
|
||||
"ja": "フィクサー依頼",
|
||||
"zh": "中间人任务"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "operative",
|
||||
"targets": {
|
||||
"ko": "요원",
|
||||
"ja": "オペレーティブ",
|
||||
"zh": "特工"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "recruit",
|
||||
"targets": {
|
||||
"ko": "영입",
|
||||
"ja": "勧誘",
|
||||
"zh": "招募"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "permadeath",
|
||||
"targets": {
|
||||
"ko": "영구 사망",
|
||||
"ja": "パーマデス",
|
||||
"zh": "永久死亡"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "hack",
|
||||
"targets": {
|
||||
"ko": "해킹",
|
||||
"ja": "ハッキング",
|
||||
"zh": "黑入"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "hacked",
|
||||
"targets": {
|
||||
"ko": "해킹됐다",
|
||||
"ja": "ハックされた",
|
||||
"zh": "被黑了"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "remote hack",
|
||||
"targets": {
|
||||
"ko": "원격 해킹",
|
||||
"ja": "リモートハック",
|
||||
"zh": "远程黑入"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "backdoor",
|
||||
"targets": {
|
||||
"ko": "백도어",
|
||||
"ja": "バックドア",
|
||||
"zh": "后门"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "firewall",
|
||||
"targets": {
|
||||
"ko": "방화벽",
|
||||
"ja": "ファイアウォール",
|
||||
"zh": "防火墙"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "exploit",
|
||||
"targets": {
|
||||
"ko": "익스플로잇",
|
||||
"ja": "エクスプロイト",
|
||||
"zh": "漏洞利用"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "payload",
|
||||
"targets": {
|
||||
"ko": "페이로드",
|
||||
"ja": "ペイロード",
|
||||
"zh": "载荷"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "botnet",
|
||||
"targets": {
|
||||
"ko": "봇넷",
|
||||
"ja": "ボットネット",
|
||||
"zh": "僵尸网络"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "server farm",
|
||||
"targets": {
|
||||
"ko": "서버 팜",
|
||||
"ja": "サーバーファーム",
|
||||
"zh": "服务器农场"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "data breach",
|
||||
"targets": {
|
||||
"ko": "정보 유출",
|
||||
"ja": "情報漏洩",
|
||||
"zh": "数据泄露"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "encryption",
|
||||
"targets": {
|
||||
"ko": "암호화",
|
||||
"ja": "暗号化",
|
||||
"zh": "加密"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "profiler",
|
||||
"targets": {
|
||||
"ko": "프로파일러",
|
||||
"ja": "プロファイラー",
|
||||
"zh": "分析器"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "profiling",
|
||||
"targets": {
|
||||
"ko": "신원 조회",
|
||||
"ja": "プロファイリング",
|
||||
"zh": "身份分析"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "surveillance",
|
||||
"targets": {
|
||||
"ko": "감시",
|
||||
"ja": "監視",
|
||||
"zh": "监控"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "security camera",
|
||||
"targets": {
|
||||
"ko": "감시 카메라",
|
||||
"ja": "防犯カメラ",
|
||||
"zh": "监控摄像头"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "jump to camera",
|
||||
"targets": {
|
||||
"ko": "카메라 이동",
|
||||
"ja": "カメラに移動",
|
||||
"zh": "切换摄像头"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "NetHack",
|
||||
"targets": {
|
||||
"ko": "넷핵",
|
||||
"ja": "ネットハック",
|
||||
"zh": "网络视野"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "spiderbot",
|
||||
"targets": {
|
||||
"ko": "스파이더봇",
|
||||
"ja": "スパイダーボット",
|
||||
"zh": "蜘蛛机器人"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "quadcopter",
|
||||
"targets": {
|
||||
"ko": "쿼드콥터",
|
||||
"ja": "クアッドコプター",
|
||||
"zh": "四轴飞行器"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "jumper",
|
||||
"targets": {
|
||||
"ko": "점퍼",
|
||||
"ja": "ジャンパー",
|
||||
"zh": "跳跳车"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "RC car",
|
||||
"targets": {
|
||||
"ko": "RC카",
|
||||
"ja": "ラジコン",
|
||||
"zh": "遥控车"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "cargo drone",
|
||||
"targets": {
|
||||
"ko": "화물 드론",
|
||||
"ja": "カーゴドローン",
|
||||
"zh": "货运无人机"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "turret",
|
||||
"targets": {
|
||||
"ko": "터렛",
|
||||
"ja": "タレット",
|
||||
"zh": "炮塔"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "guard",
|
||||
"targets": {
|
||||
"ko": "경비원",
|
||||
"ja": "警備員",
|
||||
"zh": "守卫"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "restricted area",
|
||||
"targets": {
|
||||
"ko": "제한 구역",
|
||||
"ja": "立ち入り禁止区域",
|
||||
"zh": "禁区"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "detected",
|
||||
"targets": {
|
||||
"ko": "발각됐다",
|
||||
"ja": "見つかった",
|
||||
"zh": "被发现了"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "stay hidden",
|
||||
"targets": {
|
||||
"ko": "숨어 있어",
|
||||
"ja": "隠れてろ",
|
||||
"zh": "别暴露"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "take down",
|
||||
"targets": {
|
||||
"ko": "제압",
|
||||
"ja": "テイクダウン",
|
||||
"zh": "制服"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "non lethal",
|
||||
"targets": {
|
||||
"ko": "비살상",
|
||||
"ja": "非殺傷",
|
||||
"zh": "非致命"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "lethal",
|
||||
"targets": {
|
||||
"ko": "살상",
|
||||
"ja": "殺傷",
|
||||
"zh": "致命"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "heat level",
|
||||
"targets": {
|
||||
"ko": "수배 단계",
|
||||
"ja": "指名手配レベル",
|
||||
"zh": "通缉等级"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "wanted",
|
||||
"targets": {
|
||||
"ko": "수배 중",
|
||||
"ja": "指名手配",
|
||||
"zh": "被通缉"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "lose the cops",
|
||||
"targets": {
|
||||
"ko": "경찰 따돌려",
|
||||
"ja": "警察撒いて",
|
||||
"zh": "甩掉警察"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "traffic light",
|
||||
"targets": {
|
||||
"ko": "신호등",
|
||||
"ja": "信号機",
|
||||
"zh": "红绿灯"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "steam pipe",
|
||||
"targets": {
|
||||
"ko": "증기관",
|
||||
"ja": "蒸気管",
|
||||
"zh": "蒸汽管道"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "blocker",
|
||||
"targets": {
|
||||
"ko": "차단봉",
|
||||
"ja": "ブロッカー",
|
||||
"zh": "路障"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "escape",
|
||||
"targets": {
|
||||
"ko": "도주",
|
||||
"ja": "逃走",
|
||||
"zh": "逃脱"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "mission",
|
||||
"targets": {
|
||||
"ko": "임무",
|
||||
"ja": "ミッション",
|
||||
"zh": "任务"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "side mission",
|
||||
"targets": {
|
||||
"ko": "서브 임무",
|
||||
"ja": "サブミッション",
|
||||
"zh": "支线任务"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "checkpoint",
|
||||
"targets": {
|
||||
"ko": "체크포인트",
|
||||
"ja": "チェックポイント",
|
||||
"zh": "检查点"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "borough",
|
||||
"targets": {
|
||||
"ko": "자치구",
|
||||
"ja": "区",
|
||||
"zh": "行政区"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "uprising",
|
||||
"targets": {
|
||||
"ko": "봉기",
|
||||
"ja": "蜂起",
|
||||
"zh": "起义"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "resistance",
|
||||
"targets": {
|
||||
"ko": "저항군",
|
||||
"ja": "レジスタンス",
|
||||
"zh": "抵抗组织"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "whistleblower",
|
||||
"targets": {
|
||||
"ko": "내부 고발자",
|
||||
"ja": "内部告発者",
|
||||
"zh": "举报人"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "privacy",
|
||||
"targets": {
|
||||
"ko": "사생활",
|
||||
"ja": "プライバシー",
|
||||
"zh": "隐私"
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "the city is watching",
|
||||
"targets": {
|
||||
"ko": "도시가 지켜보고 있다",
|
||||
"ja": "街が見ている",
|
||||
"zh": "城市在注视"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user