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:
EJClaw
2026-09-21 18:05:22 +09:00
parent a7eafd03e1
commit e4a048c8d5
19 changed files with 4266 additions and 506 deletions

View File

@@ -2,44 +2,311 @@
"key": "streaming",
"name": "방송·스트리밍",
"description": "해외 방송을 볼 때 자주 나오는 말. 게임 용어집과 같이 켜면 좋습니다.",
"scope": "generic",
"entries": [
{"source": "stream", "targets": {"ko": "방송", "ja": "配信", "zh": "直播"}},
{"source": "streamer", "targets": {"ko": "스트리머", "ja": "配信者", "zh": "主播"}},
{"source": "chat", "targets": {"ko": "채팅", "ja": "チャット", "zh": "弹幕"}},
{"source": "donation", "targets": {"ko": "후원", "ja": "投げ銭", "zh": "打赏"}},
{"source": "donate", "targets": {"ko": "후원하다", "ja": "投げ銭する", "zh": "打赏"}},
{"source": "sub", "targets": {"ko": "구독", "ja": "サブスク", "zh": "订阅"}},
{"source": "subscriber", "targets": {"ko": "구독자", "ja": "登録者", "zh": "订阅者"}},
{"source": "follow", "targets": {"ko": "팔로우", "ja": "フォロー", "zh": "关注"}},
{"source": "raid", "targets": {"ko": "합방 몰아주기", "ja": "レイド", "zh": "转播"}},
{"source": "mod", "targets": {"ko": "매니저", "ja": "モデレーター", "zh": "房管"}},
{"source": "clip", "targets": {"ko": "클립", "ja": "クリップ", "zh": "切片"}},
{"source": "highlight", "targets": {"ko": "하이라이트", "ja": "ハイライト", "zh": "高光"}},
{"source": "VOD", "targets": {"ko": "다시보기", "ja": "アーカイブ", "zh": "录播"}},
{"source": "lag", "targets": {"ko": "렉", "ja": "ラグ", "zh": "卡"}},
{"source": "ping", "targets": {"ko": "핑", "ja": "ピン", "zh": "延迟"}},
{"source": "frame drop", "targets": {"ko": "프레임 드랍", "ja": "フレーム落ち", "zh": "掉帧"}},
{"source": "patch", "targets": {"ko": "패치", "ja": "パッチ", "zh": "补丁"}},
{"source": "meta", "targets": {"ko": "메타", "ja": "メタ", "zh": "版本环境"}},
{"source": "nerf", "targets": {"ko": "너프", "ja": "ナーフ", "zh": "削弱"}},
{"source": "buff", "targets": {"ko": "버프", "ja": "バフ", "zh": "加强"}},
{"source": "ranked", "targets": {"ko": "랭크", "ja": "ランク", "zh": "排位"}},
{"source": "casual", "targets": {"ko": "일반전", "ja": "カジュアル", "zh": "休闲"}},
{"source": "smurf", "targets": {"ko": "부계정", "ja": "サブ垢", "zh": "小号"}},
{"source": "grind", "targets": {"ko": "노가다", "ja": "周回", "zh": "刷"}},
{"source": "carry", "targets": {"ko": "캐리", "ja": "キャリー", "zh": "带飞"}},
{"source": "throw", "targets": {"ko": "던지다", "ja": "スローする", "zh": "送"}},
{"source": "griefing", "targets": {"ko": "트롤링", "ja": "荒らし", "zh": "演员"}},
{"source": "toxic", "targets": {"ko": "매너 나쁜", "ja": "民度が低い", "zh": "喷子"}},
{"source": "cracked", "targets": {"ko": "미쳤다", "ja": "ヤバい", "zh": "太强了"}},
{"source": "insane", "targets": {"ko": "대박", "ja": "やばい", "zh": "离谱"}},
{"source": "clutch", "targets": {"ko": "클러치", "ja": "クラッチ", "zh": "关键时刻"}},
{"source": "let's go", "targets": {"ko": "가자", "ja": "行くぞ", "zh": "冲"}},
{"source": "no way", "targets": {"ko": "말도 안 돼", "ja": "ありえない", "zh": "不可能吧"}},
{"source": "give me a second", "targets": {"ko": "잠깐만", "ja": "ちょっと待って", "zh": "等一下"}},
{"source": "hold on", "targets": {"ko": "잠깐", "ja": "待って", "zh": "等等"}},
{"source": "be right back", "targets": {"ko": "금방 올게", "ja": "すぐ戻る", "zh": "马上回来"}},
{"source": "thanks for the sub", "targets": {"ko": "구독 고마워", "ja": "サブありがとう", "zh": "谢谢订阅"}},
{"source": "welcome back", "targets": {"ko": "다시 왔네", "ja": "おかえり", "zh": "欢迎回来"}}
{
"source": "stream",
"targets": {
"ko": "방송",
"ja": "配信",
"zh": "直播"
}
},
{
"source": "streamer",
"targets": {
"ko": "스트리머",
"ja": "配信者",
"zh": "主播"
}
},
{
"source": "chat",
"targets": {
"ko": "채팅",
"ja": "チャット",
"zh": "弹幕"
}
},
{
"source": "donation",
"targets": {
"ko": "후원",
"ja": "投げ銭",
"zh": "打赏"
}
},
{
"source": "donate",
"targets": {
"ko": "후원하다",
"ja": "投げ銭する",
"zh": "打赏"
}
},
{
"source": "sub",
"targets": {
"ko": "구독",
"ja": "サブスク",
"zh": "订阅"
}
},
{
"source": "subscriber",
"targets": {
"ko": "구독자",
"ja": "登録者",
"zh": "订阅者"
}
},
{
"source": "follow",
"targets": {
"ko": "팔로우",
"ja": "フォロー",
"zh": "关注"
}
},
{
"source": "raid",
"targets": {
"ko": "합방 몰아주기",
"ja": "レイド",
"zh": "转播"
}
},
{
"source": "mod",
"targets": {
"ko": "매니저",
"ja": "モデレーター",
"zh": "房管"
}
},
{
"source": "clip",
"targets": {
"ko": "클립",
"ja": "クリップ",
"zh": "切片"
}
},
{
"source": "highlight",
"targets": {
"ko": "하이라이트",
"ja": "ハイライト",
"zh": "高光"
}
},
{
"source": "VOD",
"targets": {
"ko": "다시보기",
"ja": "アーカイブ",
"zh": "录播"
}
},
{
"source": "lag",
"targets": {
"ko": "렉",
"ja": "ラグ",
"zh": "卡"
}
},
{
"source": "ping",
"targets": {
"ko": "핑",
"ja": "ピン",
"zh": "延迟"
}
},
{
"source": "frame drop",
"targets": {
"ko": "프레임 드랍",
"ja": "フレーム落ち",
"zh": "掉帧"
}
},
{
"source": "patch",
"targets": {
"ko": "패치",
"ja": "パッチ",
"zh": "补丁"
}
},
{
"source": "meta",
"targets": {
"ko": "메타",
"ja": "メタ",
"zh": "版本环境"
}
},
{
"source": "nerf",
"targets": {
"ko": "너프",
"ja": "ナーフ",
"zh": "削弱"
}
},
{
"source": "buff",
"targets": {
"ko": "버프",
"ja": "バフ",
"zh": "加强"
}
},
{
"source": "ranked",
"targets": {
"ko": "랭크",
"ja": "ランク",
"zh": "排位"
}
},
{
"source": "casual",
"targets": {
"ko": "일반전",
"ja": "カジュアル",
"zh": "休闲"
}
},
{
"source": "smurf",
"targets": {
"ko": "부계정",
"ja": "サブ垢",
"zh": "小号"
}
},
{
"source": "grind",
"targets": {
"ko": "노가다",
"ja": "周回",
"zh": "刷"
}
},
{
"source": "carry",
"targets": {
"ko": "캐리",
"ja": "キャリー",
"zh": "带飞"
}
},
{
"source": "throw",
"targets": {
"ko": "던지다",
"ja": "スローする",
"zh": "送"
}
},
{
"source": "griefing",
"targets": {
"ko": "트롤링",
"ja": "荒らし",
"zh": "演员"
}
},
{
"source": "toxic",
"targets": {
"ko": "매너 나쁜",
"ja": "民度が低い",
"zh": "喷子"
}
},
{
"source": "cracked",
"targets": {
"ko": "미쳤다",
"ja": "ヤバい",
"zh": "太强了"
}
},
{
"source": "insane",
"targets": {
"ko": "대박",
"ja": "やばい",
"zh": "离谱"
}
},
{
"source": "clutch",
"targets": {
"ko": "클러치",
"ja": "クラッチ",
"zh": "关键时刻"
}
},
{
"source": "let's go",
"targets": {
"ko": "가자",
"ja": "行くぞ",
"zh": "冲"
}
},
{
"source": "no way",
"targets": {
"ko": "말도 안 돼",
"ja": "ありえない",
"zh": "不可能吧"
}
},
{
"source": "give me a second",
"targets": {
"ko": "잠깐만",
"ja": "ちょっと待って",
"zh": "等一下"
}
},
{
"source": "hold on",
"targets": {
"ko": "잠깐",
"ja": "待って",
"zh": "等等"
}
},
{
"source": "be right back",
"targets": {
"ko": "금방 올게",
"ja": "すぐ戻る",
"zh": "马上回来"
}
},
{
"source": "thanks for the sub",
"targets": {
"ko": "구독 고마워",
"ja": "サブありがとう",
"zh": "谢谢订阅"
}
},
{
"source": "welcome back",
"targets": {
"ko": "다시 왔네",
"ja": "おかえり",
"zh": "欢迎回来"
}
}
]
}