diff --git a/README.md b/README.md index ddcfb97..67ac725 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ - **게임과 같이 써도 안 무겁게** — GPU를 얼마나 양보할지 직접 정합니다 (아래 참고) - **디스코드식 자막 배치** — 모니터를 고르고 9칸 중 하나를 누르면 그 자리에 붙습니다 - **전역 단축키** — 게임 중에 `Ctrl+Alt+S` 로 자막을 껐다 켭니다 -- **게임별 기본 용어집 내장** — 옵치2·워독스·배그·R6·롤·발로란트·에이펙스 등 **541개** +- **게임별 기본 용어집 내장** — 옵치2·워독스·배그·R6·롤·발로란트·에이펙스 등 **540개** (필수 게임은 기본 켜짐) - **5단계 품질 선택** — 속도 우선(0.6초)부터 품질 우선까지 - **자막 자유 설정** — 글꼴·크기·색·외곽선·투명도·줄 수 - **추가학습** — 게임/방송 말투로 번역 모델을 LoRA 학습시킬 수 있습니다 @@ -155,13 +155,16 @@ VRAM이 넉넉하면 **모델** 화면에서 올리면 됩니다. 게임 고유명사가 이상하게 번역될 때 씁니다. **학습이 필요 없고 즉시 적용됩니다.** -### 기본 제공 용어집 (체크만 하면 끝) +### 기본 제공 용어집 + +**처음 설치하면 `FPS 공통 · 오버워치2 · 배그 · R6 · 워독스`가 이미 켜져 있습니다.** +안 하는 게임은 체크를 끄면 됩니다. | 팩 | 개수 | 내용 | |---|---|---| | 리그 오브 레전드 | 74 | 바론·갱·억제기·한타·오브젝트 콜 | | 레인보우 식스 시즈 | 67 | 보강·하드브리치·앵커/로머·디퓨저·파밸 | -| 배틀그라운드 | 66 | 자기장·어부·파밍·낙하·스쿼드 콜 | +| 배틀그라운드 | 65 | 자기장·어부·파밍·낙하·스쿼드 콜 | | 발로란트 | 59 | 스파이크·설치·해체·이코·리테이크 | | 워치독스 | 59 | 데드섹·ctOS·블룸·해킹/잠입 용어 | | 오버워치 2 | 49 | 궁 게이지·거점·화물·역할군 | @@ -170,7 +173,14 @@ VRAM이 넉넉하면 **모델** 화면에서 올리면 됩니다. | 마인크래프트 | 38 | 블록·몹·차원 이름 (한국어판 공식 번역어) | | 방송·스트리밍 | 38 | 후원·구독·클립·메타 등 방송 말투 | -게임별 팩 + `FPS 공통`을 같이 켜는 것을 권합니다. 겹치는 단어는 게임별 팩이 이깁니다. +#### 여러 팩을 같이 켜면 + +적용 순서는 **장르 공통 → 게임 전용 → 내가 등록한 것** 입니다. 뒤에 오는 쪽이 이기므로 +`knocked`는 배그를 켰으면 항상 "눕혔다"(배그)가 되고, 체크한 순서에 휘둘리지 않습니다. + +게임 전용 팩끼리 역어가 갈리는 경우(예: `payload`가 오버워치는 "화물", 워독스는 "페이로드")는 +용어집 화면이 어떤 단어인지 알려줍니다. 안 하는 게임을 끄거나, 원하는 역어를 직접 +등록하면 됩니다. ![용어집 화면](docs/images/glossary.png) diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index eeedd2d..ebbce6f 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -89,6 +89,23 @@ WASAPI의 `ActivateAudioInterfaceAsync` + `AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_L 매번 번역까지 돌리면 GPU가 몇 배로 바빠지고, 문장이 완성되기 전 번역은 어차피 틀린다. 그래서 **중간 결과는 원문만, 확정 문장만 번역**한다. +### 용어집 팩은 계층으로 겹친다 + +여러 게임 팩을 동시에 켜면 같은 단어의 역어가 갈린다 (`knocked`는 FPS 공통에서 +"기절", 배그에서 "눕혔다"). 단순히 켠 순서대로 덮어쓰면 체크박스를 누른 순서가 +결과를 바꾸는데, 사용자는 그 순서를 볼 수도 바꿀 수도 없다. + +그래서 팩에 `scope`("generic" / "game")를 두고 **범용 → 게임 전용 → 사용자 항목** +순으로 적용한다. 게임 전용이 항상 범용을 이기므로 결과가 결정적이다. +게임 팩끼리 갈리는 것은 사람이 판단할 문제라, `find_conflicts()` 로 뽑아 UI에 +그대로 보여준다. + +데이터 쪽 함정도 하나 있다. 용어 목록은 최장일치를 위해 길이 내림차순으로 +정렬하지만, 이는 **같은 시작 위치**에서만 통한다. "the blue"(조각)가 등록돼 +있으면 "the blue zone"에서 더 앞 위치라는 이유로 "blue zone"을 이겨 "자기장 +자기장"이 된다. `test_each_term_protects_as_a_single_unit` 이 모든 팩을 켠 +상태로 이 겹침을 잡는다. + ### 배치 계산을 Qt에서 떼어냈다 `placement.py` 는 `ScreenInfo` 라는 순수 데이터만 받아 좌표를 계산한다. 덕분에 diff --git a/docs/images/glossary.png b/docs/images/glossary.png index 9e620a4..08642dd 100644 Binary files a/docs/images/glossary.png and b/docs/images/glossary.png differ diff --git a/src/livesub/config.py b/src/livesub/config.py index 219eac0..1409c97 100644 --- a/src/livesub/config.py +++ b/src/livesub/config.py @@ -87,8 +87,13 @@ class GlossaryConfig: enabled: bool = True path: str = "" # 비어있으면 user_data_dir()/glossary.json case_sensitive: bool = False - #: 함께 불러온 기본 제공 용어집 팩 키 목록 (presets/games 참고) - enabled_packs: list[str] = field(default_factory=list) + #: 처음 설치했을 때 켜져 있는 용어집 팩. + #: 체크를 안 해보고 그냥 쓰는 경우가 대부분이라 기본으로 켜둔다. + #: 게임 전용 팩끼리 역어가 갈리면 용어집 화면이 알려주므로, 안 하는 게임은 + #: 꺼주면 된다. + enabled_packs: list[str] = field( + default_factory=lambda: ["fps-common", "overwatch", "pubg", "r6siege", "watchdogs"] + ) @dataclass diff --git a/src/livesub/core/engine.py b/src/livesub/core/engine.py index 3d80dd3..dc7dbb4 100644 --- a/src/livesub/core/engine.py +++ b/src/livesub/core/engine.py @@ -103,9 +103,28 @@ class TranslationEngine: def reload_glossary(self) -> None: self.glossary = self._load_glossary() + def sync_performance(self) -> bool: + """저부하 모드 설정을 모델 매니저에 반영한다. 바뀌었으면 True. + + `ModelManager` 는 생성 시점의 `low_power` 로 연산 정밀도를 정한다. + 설정에서 모드를 토글해도 이 값을 갱신하지 않으면 이미 올라가 있는 + 이전 정밀도 모델이 그대로 쓰여서, 껐는데 품질이 안 오르거나 켰는데 + 게임이 계속 버벅이는 상태가 된다. 그래서 값을 바꾸고 모델을 내려 + 다음 사용 때 새 사양으로 다시 올라가게 한다. + """ + want = self.config.performance.game_mode + if self.models.low_power == want: + return False + log.info("저부하 모드 %s — 모델을 새 정밀도로 다시 올립니다", "켬" if want else "끔") + self.models.unload() + self.models.low_power = want + return True + # --- 내부 스레드 ---------------------------------------------------- def _bootstrap(self) -> None: try: + # 설정이 바뀐 채로 재시작됐을 수 있으므로 매 시작마다 맞춘다. + self.sync_performance() perf = self.config.performance if perf.game_mode and self.config.models.device == "cuda": # 모델을 올리기 *전에* 걸어야 상한이 실제로 먹는다. diff --git a/src/livesub/resources/glossaries/apex.json b/src/livesub/resources/glossaries/apex.json index 061c122..7f03fc5 100644 --- a/src/livesub/resources/glossaries/apex.json +++ b/src/livesub/resources/glossaries/apex.json @@ -2,51 +2,367 @@ "key": "apex", "name": "에이펙스 레전드", "description": "링·배너·부활 등 스쿼드 콜. 배틀로얄 FPS를 같이 하신다면 켜두세요.", + "scope": "game", "entries": [ - {"source": "legend", "targets": {"ko": "레전드", "ja": "レジェンド", "zh": "传奇"}}, - {"source": "ring", "targets": {"ko": "링", "ja": "リング", "zh": "圆圈"}}, - {"source": "ring is closing", "targets": {"ko": "링 좁혀진다", "ja": "リングが縮む", "zh": "圈要缩了"}}, - {"source": "jumpmaster", "targets": {"ko": "점프마스터", "ja": "ジャンプマスター", "zh": "跳伞指挥"}}, - {"source": "hot zone", "targets": {"ko": "핫존", "ja": "ホットゾーン", "zh": "热区"}}, - {"source": "care package", "targets": {"ko": "보급", "ja": "ケアパッケージ", "zh": "空投"}}, - {"source": "banner", "targets": {"ko": "배너", "ja": "バナー", "zh": "旗帜"}}, - {"source": "grab my banner", "targets": {"ko": "내 배너 챙겨", "ja": "バナー取って", "zh": "捡我旗帜"}}, - {"source": "respawn beacon", "targets": {"ko": "리스폰 비컨", "ja": "リスポーンビーコン", "zh": "重生信标"}}, - {"source": "survey beacon", "targets": {"ko": "조사 비컨", "ja": "調査ビーコン", "zh": "勘探信标"}}, - {"source": "knocked", "targets": {"ko": "눕혔다", "ja": "ダウンさせた", "zh": "打倒了"}}, - {"source": "thirsting", "targets": {"ko": "마무리", "ja": "追い打ち", "zh": "补刀"}}, - {"source": "finisher", "targets": {"ko": "피니셔", "ja": "フィニッシャー", "zh": "处决"}}, - {"source": "knockdown shield", "targets": {"ko": "녹다운 실드", "ja": "ノックダウンシールド", "zh": "击倒护盾"}}, - {"source": "evo shield", "targets": {"ko": "진화 실드", "ja": "EVOシールド", "zh": "进化护盾"}}, - {"source": "shield cell", "targets": {"ko": "실드 셀", "ja": "シールドセル", "zh": "小蓝"}}, - {"source": "shield battery", "targets": {"ko": "실드 배터리", "ja": "シールドバッテリー", "zh": "大蓝"}}, - {"source": "med kit", "targets": {"ko": "의료 키트", "ja": "医療キット", "zh": "大血包"}}, - {"source": "syringe", "targets": {"ko": "주사기", "ja": "注射器", "zh": "小血包"}}, - {"source": "phoenix kit", "targets": {"ko": "피닉스 키트", "ja": "フェニックスキット", "zh": "凤凰治疗包"}}, - {"source": "heat shield", "targets": {"ko": "히트 실드", "ja": "ヒートシールド", "zh": "隔热罩"}}, - {"source": "ult", "targets": {"ko": "궁", "ja": "アルト", "zh": "大招"}}, - {"source": "ultimate accelerant", "targets": {"ko": "궁 가속제", "ja": "アルト促進剤", "zh": "大招加速器"}}, - {"source": "tactical", "targets": {"ko": "전술 능력", "ja": "戦術アビリティ", "zh": "战术技能"}}, - {"source": "passive", "targets": {"ko": "패시브", "ja": "パッシブ", "zh": "被动"}}, - {"source": "zipline", "targets": {"ko": "집라인", "ja": "ジップライン", "zh": "索道"}}, - {"source": "portal", "targets": {"ko": "포탈", "ja": "ポータル", "zh": "传送门"}}, - {"source": "dome", "targets": {"ko": "돔", "ja": "ドーム", "zh": "护盾罩"}}, - {"source": "gas", "targets": {"ko": "가스", "ja": "ガス", "zh": "毒气"}}, - {"source": "wall", "targets": {"ko": "벽", "ja": "ウォール", "zh": "墙"}}, - {"source": "attachment", "targets": {"ko": "부착물", "ja": "アタッチメント", "zh": "配件"}}, - {"source": "purple", "targets": {"ko": "보라", "ja": "紫", "zh": "紫色"}}, - {"source": "gold", "targets": {"ko": "금", "ja": "金", "zh": "金色"}}, - {"source": "loot bin", "targets": {"ko": "보급 상자", "ja": "ルートビン", "zh": "物资箱"}}, - {"source": "death box", "targets": {"ko": "데스박스", "ja": "デスボックス", "zh": "死亡盒"}}, - {"source": "third party", "targets": {"ko": "어부", "ja": "漁夫", "zh": "第三方"}}, - {"source": "rotate", "targets": {"ko": "로테", "ja": "ローテ", "zh": "转点"}}, - {"source": "push them", "targets": {"ko": "밀어", "ja": "詰めよう", "zh": "推他们"}}, - {"source": "back off", "targets": {"ko": "빠져", "ja": "引こう", "zh": "撤"}}, - {"source": "high ground", "targets": {"ko": "고지", "ja": "高所", "zh": "高地"}}, - {"source": "ping", "targets": {"ko": "핑", "ja": "ピン", "zh": "标记"}}, - {"source": "ping it", "targets": {"ko": "핑 찍어", "ja": "ピンして", "zh": "标记一下"}}, - {"source": "squad wiped", "targets": {"ko": "스쿼드 전멸", "ja": "スクワッド全滅", "zh": "小队团灭"}}, - {"source": "champion", "targets": {"ko": "챔피언", "ja": "チャンピオン", "zh": "冠军"}}, - {"source": "kill leader", "targets": {"ko": "킬 리더", "ja": "キルリーダー", "zh": "击杀王"}} + { + "source": "legend", + "targets": { + "ko": "레전드", + "ja": "レジェンド", + "zh": "传奇" + } + }, + { + "source": "ring", + "targets": { + "ko": "링", + "ja": "リング", + "zh": "圆圈" + } + }, + { + "source": "ring is closing", + "targets": { + "ko": "링 좁혀진다", + "ja": "リングが縮む", + "zh": "圈要缩了" + } + }, + { + "source": "jumpmaster", + "targets": { + "ko": "점프마스터", + "ja": "ジャンプマスター", + "zh": "跳伞指挥" + } + }, + { + "source": "hot zone", + "targets": { + "ko": "핫존", + "ja": "ホットゾーン", + "zh": "热区" + } + }, + { + "source": "care package", + "targets": { + "ko": "보급", + "ja": "ケアパッケージ", + "zh": "空投" + } + }, + { + "source": "banner", + "targets": { + "ko": "배너", + "ja": "バナー", + "zh": "旗帜" + } + }, + { + "source": "grab my banner", + "targets": { + "ko": "내 배너 챙겨", + "ja": "バナー取って", + "zh": "捡我旗帜" + } + }, + { + "source": "respawn beacon", + "targets": { + "ko": "리스폰 비컨", + "ja": "リスポーンビーコン", + "zh": "重生信标" + } + }, + { + "source": "survey beacon", + "targets": { + "ko": "조사 비컨", + "ja": "調査ビーコン", + "zh": "勘探信标" + } + }, + { + "source": "knocked", + "targets": { + "ko": "눕혔다", + "ja": "ダウンさせた", + "zh": "打倒了" + } + }, + { + "source": "thirsting", + "targets": { + "ko": "마무리", + "ja": "追い打ち", + "zh": "补刀" + } + }, + { + "source": "finisher", + "targets": { + "ko": "피니셔", + "ja": "フィニッシャー", + "zh": "处决" + } + }, + { + "source": "knockdown shield", + "targets": { + "ko": "녹다운 실드", + "ja": "ノックダウンシールド", + "zh": "击倒护盾" + } + }, + { + "source": "evo shield", + "targets": { + "ko": "진화 실드", + "ja": "EVOシールド", + "zh": "进化护盾" + } + }, + { + "source": "shield cell", + "targets": { + "ko": "실드 셀", + "ja": "シールドセル", + "zh": "小蓝" + } + }, + { + "source": "shield battery", + "targets": { + "ko": "실드 배터리", + "ja": "シールドバッテリー", + "zh": "大蓝" + } + }, + { + "source": "med kit", + "targets": { + "ko": "의료 키트", + "ja": "医療キット", + "zh": "大血包" + } + }, + { + "source": "syringe", + "targets": { + "ko": "주사기", + "ja": "注射器", + "zh": "小血包" + } + }, + { + "source": "phoenix kit", + "targets": { + "ko": "피닉스 키트", + "ja": "フェニックスキット", + "zh": "凤凰治疗包" + } + }, + { + "source": "heat shield", + "targets": { + "ko": "히트 실드", + "ja": "ヒートシールド", + "zh": "隔热罩" + } + }, + { + "source": "ult", + "targets": { + "ko": "궁", + "ja": "アルト", + "zh": "大招" + } + }, + { + "source": "ultimate accelerant", + "targets": { + "ko": "궁 가속제", + "ja": "アルト促進剤", + "zh": "大招加速器" + } + }, + { + "source": "tactical", + "targets": { + "ko": "전술 능력", + "ja": "戦術アビリティ", + "zh": "战术技能" + } + }, + { + "source": "passive", + "targets": { + "ko": "패시브", + "ja": "パッシブ", + "zh": "被动" + } + }, + { + "source": "zipline", + "targets": { + "ko": "집라인", + "ja": "ジップライン", + "zh": "索道" + } + }, + { + "source": "portal", + "targets": { + "ko": "포탈", + "ja": "ポータル", + "zh": "传送门" + } + }, + { + "source": "dome", + "targets": { + "ko": "돔", + "ja": "ドーム", + "zh": "护盾罩" + } + }, + { + "source": "gas", + "targets": { + "ko": "가스", + "ja": "ガス", + "zh": "毒气" + } + }, + { + "source": "wall", + "targets": { + "ko": "벽", + "ja": "ウォール", + "zh": "墙" + } + }, + { + "source": "attachment", + "targets": { + "ko": "부착물", + "ja": "アタッチメント", + "zh": "配件" + } + }, + { + "source": "purple", + "targets": { + "ko": "보라", + "ja": "紫", + "zh": "紫色" + } + }, + { + "source": "gold", + "targets": { + "ko": "금", + "ja": "金", + "zh": "金色" + } + }, + { + "source": "loot bin", + "targets": { + "ko": "보급 상자", + "ja": "ルートビン", + "zh": "物资箱" + } + }, + { + "source": "death box", + "targets": { + "ko": "데스박스", + "ja": "デスボックス", + "zh": "死亡盒" + } + }, + { + "source": "third party", + "targets": { + "ko": "어부", + "ja": "漁夫", + "zh": "第三方" + } + }, + { + "source": "rotate", + "targets": { + "ko": "로테", + "ja": "ローテ", + "zh": "转点" + } + }, + { + "source": "push them", + "targets": { + "ko": "밀어", + "ja": "詰めよう", + "zh": "推他们" + } + }, + { + "source": "back off", + "targets": { + "ko": "빠져", + "ja": "引こう", + "zh": "撤" + } + }, + { + "source": "high ground", + "targets": { + "ko": "고지", + "ja": "高所", + "zh": "高地" + } + }, + { + "source": "ping", + "targets": { + "ko": "핑", + "ja": "ピン", + "zh": "标记" + } + }, + { + "source": "ping it", + "targets": { + "ko": "핑 찍어", + "ja": "ピンして", + "zh": "标记一下" + } + }, + { + "source": "squad wiped", + "targets": { + "ko": "스쿼드 전멸", + "ja": "スクワッド全滅", + "zh": "小队团灭" + } + }, + { + "source": "champion", + "targets": { + "ko": "챔피언", + "ja": "チャンピオン", + "zh": "冠军" + } + }, + { + "source": "kill leader", + "targets": { + "ko": "킬 리더", + "ja": "キルリーダー", + "zh": "击杀王" + } + } ] } diff --git a/src/livesub/resources/glossaries/fps-common.json b/src/livesub/resources/glossaries/fps-common.json index c0b8b8d..e070488 100644 --- a/src/livesub/resources/glossaries/fps-common.json +++ b/src/livesub/resources/glossaries/fps-common.json @@ -2,6 +2,7 @@ "key": "fps-common", "name": "FPS 공통", "description": "장르 전반에서 두루 쓰는 총기·교전·파티 콜. 게임별 팩과 같이 켜세요.", + "scope": "generic", "entries": [ { "source": "enemy", diff --git a/src/livesub/resources/glossaries/lol.json b/src/livesub/resources/glossaries/lol.json index 37b95bc..61dd475 100644 --- a/src/livesub/resources/glossaries/lol.json +++ b/src/livesub/resources/glossaries/lol.json @@ -2,80 +2,599 @@ "key": "lol", "name": "리그 오브 레전드", "description": "라인·오브젝트·교전 콜, 한국 서버에서 실제로 쓰는 말로 맞췄습니다.", + "scope": "game", "entries": [ - {"source": "Nexus", "targets": {"ko": "넥서스", "ja": "ネクサス", "zh": "基地"}}, - {"source": "inhibitor", "targets": {"ko": "억제기", "ja": "抑制器", "zh": "水晶"}}, - {"source": "inhib", "targets": {"ko": "억제기", "ja": "抑制器", "zh": "水晶"}}, - {"source": "turret", "targets": {"ko": "포탑", "ja": "タワー", "zh": "防御塔"}}, - {"source": "tower", "targets": {"ko": "포탑", "ja": "タワー", "zh": "防御塔"}}, - {"source": "baron", "targets": {"ko": "바론", "ja": "バロン", "zh": "大龙"}}, - {"source": "Baron Nashor", "targets": {"ko": "내셔 남작", "ja": "バロン・ナッシャー", "zh": "纳什男爵"}}, - {"source": "dragon", "targets": {"ko": "드래곤", "ja": "ドラゴン", "zh": "小龙"}}, - {"source": "drake", "targets": {"ko": "드래곤", "ja": "ドラゴン", "zh": "小龙"}}, - {"source": "elder", "targets": {"ko": "장로 드래곤", "ja": "エルダードラゴン", "zh": "远古龙"}}, - {"source": "herald", "targets": {"ko": "전령", "ja": "ヘラルド", "zh": "峡谷先锋"}}, - {"source": "Rift Herald", "targets": {"ko": "협곡의 전령", "ja": "リフトヘラルド", "zh": "峡谷先锋"}}, - {"source": "grubs", "targets": {"ko": "유충", "ja": "虫", "zh": "虚空幼虫"}}, - {"source": "gank", "targets": {"ko": "갱", "ja": "ガンク", "zh": "抓人"}}, - {"source": "ganking", "targets": {"ko": "갱킹", "ja": "ガンク", "zh": "抓人"}}, - {"source": "counter gank", "targets": {"ko": "역갱", "ja": "カウンターガンク", "zh": "反蹲"}}, - {"source": "roam", "targets": {"ko": "로밍", "ja": "ローム", "zh": "游走"}}, - {"source": "jungle", "targets": {"ko": "정글", "ja": "ジャングル", "zh": "打野"}}, - {"source": "jungler", "targets": {"ko": "정글러", "ja": "ジャングラー", "zh": "打野"}}, - {"source": "top lane", "targets": {"ko": "탑", "ja": "トップ", "zh": "上路"}}, - {"source": "mid lane", "targets": {"ko": "미드", "ja": "ミッド", "zh": "中路"}}, - {"source": "bot lane", "targets": {"ko": "바텀", "ja": "ボット", "zh": "下路"}}, - {"source": "support", "targets": {"ko": "서폿", "ja": "サポート", "zh": "辅助"}}, - {"source": "ADC", "targets": {"ko": "원딜", "ja": "ADC", "zh": "ADC"}}, - {"source": "minion", "targets": {"ko": "미니언", "ja": "ミニオン", "zh": "小兵"}}, - {"source": "wave", "targets": {"ko": "웨이브", "ja": "ウェーブ", "zh": "兵线"}}, - {"source": "creep score", "targets": {"ko": "CS", "ja": "CS", "zh": "补刀"}}, - {"source": "last hit", "targets": {"ko": "막타", "ja": "ラストヒット", "zh": "补刀"}}, - {"source": "freeze", "targets": {"ko": "프리징", "ja": "フリーズ", "zh": "控线"}}, - {"source": "push", "targets": {"ko": "푸시", "ja": "プッシュ", "zh": "推线"}}, - {"source": "split push", "targets": {"ko": "스플릿", "ja": "スプリットプッシュ", "zh": "分推"}}, - {"source": "back", "targets": {"ko": "귀환", "ja": "リコール", "zh": "回城"}}, - {"source": "recall", "targets": {"ko": "귀환", "ja": "リコール", "zh": "回城"}}, - {"source": "ward", "targets": {"ko": "와드", "ja": "ワード", "zh": "眼"}}, - {"source": "vision", "targets": {"ko": "시야", "ja": "視界", "zh": "视野"}}, - {"source": "flash", "targets": {"ko": "점멸", "ja": "フラッシュ", "zh": "闪现"}}, - {"source": "ignite", "targets": {"ko": "점화", "ja": "イグナイト", "zh": "点燃"}}, - {"source": "teleport", "targets": {"ko": "순간이동", "ja": "テレポート", "zh": "传送"}}, - {"source": "smite", "targets": {"ko": "강타", "ja": "スマイト", "zh": "惩戒"}}, - {"source": "ult", "targets": {"ko": "궁", "ja": "アルト", "zh": "大招"}}, - {"source": "ultimate", "targets": {"ko": "궁극기", "ja": "アルティメット", "zh": "大招"}}, - {"source": "cooldown", "targets": {"ko": "쿨", "ja": "クールダウン", "zh": "冷却"}}, - {"source": "on cooldown", "targets": {"ko": "쿨 도는 중", "ja": "クール中", "zh": "冷却中"}}, - {"source": "engage", "targets": {"ko": "이니시", "ja": "エンゲージ", "zh": "开团"}}, - {"source": "disengage", "targets": {"ko": "빠지기", "ja": "ディスエンゲージ", "zh": "撤退"}}, - {"source": "team fight", "targets": {"ko": "한타", "ja": "集団戦", "zh": "团战"}}, - {"source": "teamfight", "targets": {"ko": "한타", "ja": "集団戦", "zh": "团战"}}, - {"source": "peel", "targets": {"ko": "피어싱 보호", "ja": "ピール", "zh": "保护"}}, - {"source": "kite", "targets": {"ko": "카이팅", "ja": "カイト", "zh": "风筝"}}, - {"source": "poke", "targets": {"ko": "견제", "ja": "ポーク", "zh": "消耗"}}, - {"source": "dive", "targets": {"ko": "다이브", "ja": "ダイブ", "zh": "越塔"}}, - {"source": "tower dive", "targets": {"ko": "타워 다이브", "ja": "タワーダイブ", "zh": "越塔强杀"}}, - {"source": "ace", "targets": {"ko": "에이스", "ja": "エース", "zh": "团灭"}}, - {"source": "first blood", "targets": {"ko": "퍼블", "ja": "ファーストブラッド", "zh": "一血"}}, - {"source": "shutdown", "targets": {"ko": "현상금", "ja": "シャットダウン", "zh": "赏金"}}, - {"source": "respawn", "targets": {"ko": "부활", "ja": "リスポーン", "zh": "复活"}}, - {"source": "missing", "targets": {"ko": "실종", "ja": "ミア", "zh": "消失"}}, - {"source": "MIA", "targets": {"ko": "실종", "ja": "ミア", "zh": "消失"}}, - {"source": "SS", "targets": {"ko": "실종", "ja": "ミア", "zh": "消失"}}, - {"source": "fed", "targets": {"ko": "잘 큰", "ja": "育った", "zh": "养肥"}}, - {"source": "scaling", "targets": {"ko": "성장력", "ja": "スケーリング", "zh": "后期"}}, - {"source": "objective", "targets": {"ko": "오브젝트", "ja": "オブジェクト", "zh": "资源"}}, - {"source": "backdoor", "targets": {"ko": "백도어", "ja": "バックドア", "zh": "偷家"}}, - {"source": "surrender", "targets": {"ko": "항복", "ja": "サレンダー", "zh": "投降"}}, - {"source": "buff", "targets": {"ko": "버프", "ja": "バフ", "zh": "增益"}}, - {"source": "nerf", "targets": {"ko": "너프", "ja": "ナーフ", "zh": "削弱"}}, - {"source": "CC", "targets": {"ko": "군중제어", "ja": "CC", "zh": "控制"}}, - {"source": "stun", "targets": {"ko": "기절", "ja": "スタン", "zh": "眩晕"}}, - {"source": "slow", "targets": {"ko": "둔화", "ja": "スロウ", "zh": "减速"}}, - {"source": "shield", "targets": {"ko": "실드", "ja": "シールド", "zh": "护盾"}}, - {"source": "heal", "targets": {"ko": "회복", "ja": "ヒール", "zh": "治疗"}}, - {"source": "mana", "targets": {"ko": "마나", "ja": "マナ", "zh": "蓝"}}, - {"source": "low HP", "targets": {"ko": "체력 낮음", "ja": "体力低い", "zh": "残血"}}, - {"source": "full build", "targets": {"ko": "풀템", "ja": "フルビルド", "zh": "满装备"}} + { + "source": "Nexus", + "targets": { + "ko": "넥서스", + "ja": "ネクサス", + "zh": "基地" + } + }, + { + "source": "inhibitor", + "targets": { + "ko": "억제기", + "ja": "抑制器", + "zh": "水晶" + } + }, + { + "source": "inhib", + "targets": { + "ko": "억제기", + "ja": "抑制器", + "zh": "水晶" + } + }, + { + "source": "turret", + "targets": { + "ko": "포탑", + "ja": "タワー", + "zh": "防御塔" + } + }, + { + "source": "tower", + "targets": { + "ko": "포탑", + "ja": "タワー", + "zh": "防御塔" + } + }, + { + "source": "baron", + "targets": { + "ko": "바론", + "ja": "バロン", + "zh": "大龙" + } + }, + { + "source": "Baron Nashor", + "targets": { + "ko": "내셔 남작", + "ja": "バロン・ナッシャー", + "zh": "纳什男爵" + } + }, + { + "source": "dragon", + "targets": { + "ko": "드래곤", + "ja": "ドラゴン", + "zh": "小龙" + } + }, + { + "source": "drake", + "targets": { + "ko": "드래곤", + "ja": "ドラゴン", + "zh": "小龙" + } + }, + { + "source": "elder", + "targets": { + "ko": "장로 드래곤", + "ja": "エルダードラゴン", + "zh": "远古龙" + } + }, + { + "source": "herald", + "targets": { + "ko": "전령", + "ja": "ヘラルド", + "zh": "峡谷先锋" + } + }, + { + "source": "Rift Herald", + "targets": { + "ko": "협곡의 전령", + "ja": "リフトヘラルド", + "zh": "峡谷先锋" + } + }, + { + "source": "grubs", + "targets": { + "ko": "유충", + "ja": "虫", + "zh": "虚空幼虫" + } + }, + { + "source": "gank", + "targets": { + "ko": "갱", + "ja": "ガンク", + "zh": "抓人" + } + }, + { + "source": "ganking", + "targets": { + "ko": "갱킹", + "ja": "ガンク", + "zh": "抓人" + } + }, + { + "source": "counter gank", + "targets": { + "ko": "역갱", + "ja": "カウンターガンク", + "zh": "反蹲" + } + }, + { + "source": "roam", + "targets": { + "ko": "로밍", + "ja": "ローム", + "zh": "游走" + } + }, + { + "source": "jungle", + "targets": { + "ko": "정글", + "ja": "ジャングル", + "zh": "打野" + } + }, + { + "source": "jungler", + "targets": { + "ko": "정글러", + "ja": "ジャングラー", + "zh": "打野" + } + }, + { + "source": "top lane", + "targets": { + "ko": "탑", + "ja": "トップ", + "zh": "上路" + } + }, + { + "source": "mid lane", + "targets": { + "ko": "미드", + "ja": "ミッド", + "zh": "中路" + } + }, + { + "source": "bot lane", + "targets": { + "ko": "바텀", + "ja": "ボット", + "zh": "下路" + } + }, + { + "source": "support", + "targets": { + "ko": "서폿", + "ja": "サポート", + "zh": "辅助" + } + }, + { + "source": "ADC", + "targets": { + "ko": "원딜", + "ja": "ADC", + "zh": "ADC" + } + }, + { + "source": "minion", + "targets": { + "ko": "미니언", + "ja": "ミニオン", + "zh": "小兵" + } + }, + { + "source": "wave", + "targets": { + "ko": "웨이브", + "ja": "ウェーブ", + "zh": "兵线" + } + }, + { + "source": "creep score", + "targets": { + "ko": "CS", + "ja": "CS", + "zh": "补刀" + } + }, + { + "source": "last hit", + "targets": { + "ko": "막타", + "ja": "ラストヒット", + "zh": "补刀" + } + }, + { + "source": "freeze", + "targets": { + "ko": "프리징", + "ja": "フリーズ", + "zh": "控线" + } + }, + { + "source": "push", + "targets": { + "ko": "푸시", + "ja": "プッシュ", + "zh": "推线" + } + }, + { + "source": "split push", + "targets": { + "ko": "스플릿", + "ja": "スプリットプッシュ", + "zh": "分推" + } + }, + { + "source": "back", + "targets": { + "ko": "귀환", + "ja": "リコール", + "zh": "回城" + } + }, + { + "source": "recall", + "targets": { + "ko": "귀환", + "ja": "リコール", + "zh": "回城" + } + }, + { + "source": "ward", + "targets": { + "ko": "와드", + "ja": "ワード", + "zh": "眼" + } + }, + { + "source": "vision", + "targets": { + "ko": "시야", + "ja": "視界", + "zh": "视野" + } + }, + { + "source": "flash", + "targets": { + "ko": "점멸", + "ja": "フラッシュ", + "zh": "闪现" + } + }, + { + "source": "ignite", + "targets": { + "ko": "점화", + "ja": "イグナイト", + "zh": "点燃" + } + }, + { + "source": "teleport", + "targets": { + "ko": "순간이동", + "ja": "テレポート", + "zh": "传送" + } + }, + { + "source": "smite", + "targets": { + "ko": "강타", + "ja": "スマイト", + "zh": "惩戒" + } + }, + { + "source": "ult", + "targets": { + "ko": "궁", + "ja": "アルト", + "zh": "大招" + } + }, + { + "source": "ultimate", + "targets": { + "ko": "궁극기", + "ja": "アルティメット", + "zh": "大招" + } + }, + { + "source": "cooldown", + "targets": { + "ko": "쿨", + "ja": "クールダウン", + "zh": "冷却" + } + }, + { + "source": "on cooldown", + "targets": { + "ko": "쿨 도는 중", + "ja": "クール中", + "zh": "冷却中" + } + }, + { + "source": "engage", + "targets": { + "ko": "이니시", + "ja": "エンゲージ", + "zh": "开团" + } + }, + { + "source": "disengage", + "targets": { + "ko": "빠지기", + "ja": "ディスエンゲージ", + "zh": "撤退" + } + }, + { + "source": "team fight", + "targets": { + "ko": "한타", + "ja": "集団戦", + "zh": "团战" + } + }, + { + "source": "teamfight", + "targets": { + "ko": "한타", + "ja": "集団戦", + "zh": "团战" + } + }, + { + "source": "peel", + "targets": { + "ko": "피어싱 보호", + "ja": "ピール", + "zh": "保护" + } + }, + { + "source": "kite", + "targets": { + "ko": "카이팅", + "ja": "カイト", + "zh": "风筝" + } + }, + { + "source": "poke", + "targets": { + "ko": "견제", + "ja": "ポーク", + "zh": "消耗" + } + }, + { + "source": "dive", + "targets": { + "ko": "다이브", + "ja": "ダイブ", + "zh": "越塔" + } + }, + { + "source": "tower dive", + "targets": { + "ko": "타워 다이브", + "ja": "タワーダイブ", + "zh": "越塔强杀" + } + }, + { + "source": "ace", + "targets": { + "ko": "에이스", + "ja": "エース", + "zh": "团灭" + } + }, + { + "source": "first blood", + "targets": { + "ko": "퍼블", + "ja": "ファーストブラッド", + "zh": "一血" + } + }, + { + "source": "shutdown", + "targets": { + "ko": "현상금", + "ja": "シャットダウン", + "zh": "赏金" + } + }, + { + "source": "respawn", + "targets": { + "ko": "부활", + "ja": "リスポーン", + "zh": "复活" + } + }, + { + "source": "missing", + "targets": { + "ko": "실종", + "ja": "ミア", + "zh": "消失" + } + }, + { + "source": "MIA", + "targets": { + "ko": "실종", + "ja": "ミア", + "zh": "消失" + } + }, + { + "source": "SS", + "targets": { + "ko": "실종", + "ja": "ミア", + "zh": "消失" + } + }, + { + "source": "fed", + "targets": { + "ko": "잘 큰", + "ja": "育った", + "zh": "养肥" + } + }, + { + "source": "scaling", + "targets": { + "ko": "성장력", + "ja": "スケーリング", + "zh": "后期" + } + }, + { + "source": "objective", + "targets": { + "ko": "오브젝트", + "ja": "オブジェクト", + "zh": "资源" + } + }, + { + "source": "backdoor", + "targets": { + "ko": "백도어", + "ja": "バックドア", + "zh": "偷家" + } + }, + { + "source": "surrender", + "targets": { + "ko": "항복", + "ja": "サレンダー", + "zh": "投降" + } + }, + { + "source": "buff", + "targets": { + "ko": "버프", + "ja": "バフ", + "zh": "增益" + } + }, + { + "source": "nerf", + "targets": { + "ko": "너프", + "ja": "ナーフ", + "zh": "削弱" + } + }, + { + "source": "CC", + "targets": { + "ko": "군중제어", + "ja": "CC", + "zh": "控制" + } + }, + { + "source": "stun", + "targets": { + "ko": "기절", + "ja": "スタン", + "zh": "眩晕" + } + }, + { + "source": "slow", + "targets": { + "ko": "둔화", + "ja": "スロウ", + "zh": "减速" + } + }, + { + "source": "shield", + "targets": { + "ko": "실드", + "ja": "シールド", + "zh": "护盾" + } + }, + { + "source": "heal", + "targets": { + "ko": "회복", + "ja": "ヒール", + "zh": "治疗" + } + }, + { + "source": "mana", + "targets": { + "ko": "마나", + "ja": "マナ", + "zh": "蓝" + } + }, + { + "source": "low HP", + "targets": { + "ko": "체력 낮음", + "ja": "体力低い", + "zh": "残血" + } + }, + { + "source": "full build", + "targets": { + "ko": "풀템", + "ja": "フルビルド", + "zh": "满装备" + } + } ] } diff --git a/src/livesub/resources/glossaries/minecraft.json b/src/livesub/resources/glossaries/minecraft.json index 3ebd9e8..6d2de89 100644 --- a/src/livesub/resources/glossaries/minecraft.json +++ b/src/livesub/resources/glossaries/minecraft.json @@ -2,44 +2,311 @@ "key": "minecraft", "name": "마인크래프트", "description": "블록·몹·아이템 이름. 한국어판 공식 번역어를 따랐습니다.", + "scope": "game", "entries": [ - {"source": "creeper", "targets": {"ko": "크리퍼", "ja": "クリーパー", "zh": "苦力怕"}}, - {"source": "enderman", "targets": {"ko": "엔더맨", "ja": "エンダーマン", "zh": "末影人"}}, - {"source": "ender dragon", "targets": {"ko": "엔더 드래곤", "ja": "エンダードラゴン", "zh": "末影龙"}}, - {"source": "wither", "targets": {"ko": "위더", "ja": "ウィザー", "zh": "凋灵"}}, - {"source": "skeleton", "targets": {"ko": "스켈레톤", "ja": "スケルトン", "zh": "骷髅"}}, - {"source": "zombie", "targets": {"ko": "좀비", "ja": "ゾンビ", "zh": "僵尸"}}, - {"source": "piglin", "targets": {"ko": "피글린", "ja": "ピグリン", "zh": "猪灵"}}, - {"source": "villager", "targets": {"ko": "주민", "ja": "村人", "zh": "村民"}}, - {"source": "the Nether", "targets": {"ko": "네더", "ja": "ネザー", "zh": "下界"}}, - {"source": "the End", "targets": {"ko": "엔드", "ja": "ジ・エンド", "zh": "末地"}}, - {"source": "Overworld", "targets": {"ko": "오버월드", "ja": "オーバーワールド", "zh": "主世界"}}, - {"source": "nether portal", "targets": {"ko": "네더 차원문", "ja": "ネザーゲート", "zh": "下界传送门"}}, - {"source": "stronghold", "targets": {"ko": "요새", "ja": "要塞", "zh": "要塞"}}, - {"source": "bastion", "targets": {"ko": "잔해 성채", "ja": "砦の残骸", "zh": "堡垒遗迹"}}, - {"source": "diamond", "targets": {"ko": "다이아몬드", "ja": "ダイヤ", "zh": "钻石"}}, - {"source": "netherite", "targets": {"ko": "네더라이트", "ja": "ネザライト", "zh": "下界合金"}}, - {"source": "obsidian", "targets": {"ko": "흑요석", "ja": "黒曜石", "zh": "黑曜石"}}, - {"source": "redstone", "targets": {"ko": "레드스톤", "ja": "レッドストーン", "zh": "红石"}}, - {"source": "ender pearl", "targets": {"ko": "엔더 진주", "ja": "エンダーパール", "zh": "末影珍珠"}}, - {"source": "blaze rod", "targets": {"ko": "블레이즈 막대", "ja": "ブレイズロッド", "zh": "烈焰棒"}}, - {"source": "elytra", "targets": {"ko": "겉날개", "ja": "エリトラ", "zh": "鞘翅"}}, - {"source": "totem", "targets": {"ko": "불사의 토템", "ja": "不死のトーテム", "zh": "不死图腾"}}, - {"source": "enchant", "targets": {"ko": "인챈트", "ja": "エンチャント", "zh": "附魔"}}, - {"source": "anvil", "targets": {"ko": "모루", "ja": "金床", "zh": "铁砧"}}, - {"source": "crafting table", "targets": {"ko": "작업대", "ja": "作業台", "zh": "工作台"}}, - {"source": "furnace", "targets": {"ko": "화로", "ja": "かまど", "zh": "熔炉"}}, - {"source": "chest", "targets": {"ko": "상자", "ja": "チェスト", "zh": "箱子"}}, - {"source": "spawn point", "targets": {"ko": "스폰 지점", "ja": "スポーン地点", "zh": "出生点"}}, - {"source": "respawn", "targets": {"ko": "리스폰", "ja": "リスポーン", "zh": "重生"}}, - {"source": "biome", "targets": {"ko": "생물 군계", "ja": "バイオーム", "zh": "生物群系"}}, - {"source": "seed", "targets": {"ko": "시드", "ja": "シード", "zh": "种子"}}, - {"source": "mob", "targets": {"ko": "몹", "ja": "モブ", "zh": "生物"}}, - {"source": "hardcore", "targets": {"ko": "하드코어", "ja": "ハードコア", "zh": "极限模式"}}, - {"source": "speedrun", "targets": {"ko": "스피드런", "ja": "RTA", "zh": "速通"}}, - {"source": "mine", "targets": {"ko": "채굴", "ja": "採掘", "zh": "挖矿"}}, - {"source": "craft", "targets": {"ko": "제작", "ja": "クラフト", "zh": "合成"}}, - {"source": "build", "targets": {"ko": "건축", "ja": "建築", "zh": "建造"}}, - {"source": "farm", "targets": {"ko": "농장", "ja": "トラップ", "zh": "农场"}} + { + "source": "creeper", + "targets": { + "ko": "크리퍼", + "ja": "クリーパー", + "zh": "苦力怕" + } + }, + { + "source": "enderman", + "targets": { + "ko": "엔더맨", + "ja": "エンダーマン", + "zh": "末影人" + } + }, + { + "source": "ender dragon", + "targets": { + "ko": "엔더 드래곤", + "ja": "エンダードラゴン", + "zh": "末影龙" + } + }, + { + "source": "wither", + "targets": { + "ko": "위더", + "ja": "ウィザー", + "zh": "凋灵" + } + }, + { + "source": "skeleton", + "targets": { + "ko": "스켈레톤", + "ja": "スケルトン", + "zh": "骷髅" + } + }, + { + "source": "zombie", + "targets": { + "ko": "좀비", + "ja": "ゾンビ", + "zh": "僵尸" + } + }, + { + "source": "piglin", + "targets": { + "ko": "피글린", + "ja": "ピグリン", + "zh": "猪灵" + } + }, + { + "source": "villager", + "targets": { + "ko": "주민", + "ja": "村人", + "zh": "村民" + } + }, + { + "source": "the Nether", + "targets": { + "ko": "네더", + "ja": "ネザー", + "zh": "下界" + } + }, + { + "source": "the End", + "targets": { + "ko": "엔드", + "ja": "ジ・エンド", + "zh": "末地" + } + }, + { + "source": "Overworld", + "targets": { + "ko": "오버월드", + "ja": "オーバーワールド", + "zh": "主世界" + } + }, + { + "source": "nether portal", + "targets": { + "ko": "네더 차원문", + "ja": "ネザーゲート", + "zh": "下界传送门" + } + }, + { + "source": "stronghold", + "targets": { + "ko": "요새", + "ja": "要塞", + "zh": "要塞" + } + }, + { + "source": "bastion", + "targets": { + "ko": "잔해 성채", + "ja": "砦の残骸", + "zh": "堡垒遗迹" + } + }, + { + "source": "diamond", + "targets": { + "ko": "다이아몬드", + "ja": "ダイヤ", + "zh": "钻石" + } + }, + { + "source": "netherite", + "targets": { + "ko": "네더라이트", + "ja": "ネザライト", + "zh": "下界合金" + } + }, + { + "source": "obsidian", + "targets": { + "ko": "흑요석", + "ja": "黒曜石", + "zh": "黑曜石" + } + }, + { + "source": "redstone", + "targets": { + "ko": "레드스톤", + "ja": "レッドストーン", + "zh": "红石" + } + }, + { + "source": "ender pearl", + "targets": { + "ko": "엔더 진주", + "ja": "エンダーパール", + "zh": "末影珍珠" + } + }, + { + "source": "blaze rod", + "targets": { + "ko": "블레이즈 막대", + "ja": "ブレイズロッド", + "zh": "烈焰棒" + } + }, + { + "source": "elytra", + "targets": { + "ko": "겉날개", + "ja": "エリトラ", + "zh": "鞘翅" + } + }, + { + "source": "totem", + "targets": { + "ko": "불사의 토템", + "ja": "不死のトーテム", + "zh": "不死图腾" + } + }, + { + "source": "enchant", + "targets": { + "ko": "인챈트", + "ja": "エンチャント", + "zh": "附魔" + } + }, + { + "source": "anvil", + "targets": { + "ko": "모루", + "ja": "金床", + "zh": "铁砧" + } + }, + { + "source": "crafting table", + "targets": { + "ko": "작업대", + "ja": "作業台", + "zh": "工作台" + } + }, + { + "source": "furnace", + "targets": { + "ko": "화로", + "ja": "かまど", + "zh": "熔炉" + } + }, + { + "source": "chest", + "targets": { + "ko": "상자", + "ja": "チェスト", + "zh": "箱子" + } + }, + { + "source": "spawn point", + "targets": { + "ko": "스폰 지점", + "ja": "スポーン地点", + "zh": "出生点" + } + }, + { + "source": "respawn", + "targets": { + "ko": "리스폰", + "ja": "リスポーン", + "zh": "重生" + } + }, + { + "source": "biome", + "targets": { + "ko": "생물 군계", + "ja": "バイオーム", + "zh": "生物群系" + } + }, + { + "source": "seed", + "targets": { + "ko": "시드", + "ja": "シード", + "zh": "种子" + } + }, + { + "source": "mob", + "targets": { + "ko": "몹", + "ja": "モブ", + "zh": "生物" + } + }, + { + "source": "hardcore", + "targets": { + "ko": "하드코어", + "ja": "ハードコア", + "zh": "极限模式" + } + }, + { + "source": "speedrun", + "targets": { + "ko": "스피드런", + "ja": "RTA", + "zh": "速通" + } + }, + { + "source": "mine", + "targets": { + "ko": "채굴", + "ja": "採掘", + "zh": "挖矿" + } + }, + { + "source": "craft", + "targets": { + "ko": "제작", + "ja": "クラフト", + "zh": "合成" + } + }, + { + "source": "build", + "targets": { + "ko": "건축", + "ja": "建築", + "zh": "建造" + } + }, + { + "source": "farm", + "targets": { + "ko": "농장", + "ja": "トラップ", + "zh": "农场" + } + } ] } diff --git a/src/livesub/resources/glossaries/overwatch.json b/src/livesub/resources/glossaries/overwatch.json index 76ec41e..9770b14 100644 --- a/src/livesub/resources/glossaries/overwatch.json +++ b/src/livesub/resources/glossaries/overwatch.json @@ -2,55 +2,399 @@ "key": "overwatch", "name": "오버워치 2", "description": "역할·궁·거점 콜. 한국 공식 번역어를 우선했습니다.", + "scope": "game", "entries": [ - {"source": "tank", "targets": {"ko": "탱커", "ja": "タンク", "zh": "重装"}}, - {"source": "DPS", "targets": {"ko": "딜러", "ja": "ダメージ", "zh": "输出"}}, - {"source": "damage", "targets": {"ko": "딜", "ja": "ダメージ", "zh": "伤害"}}, - {"source": "support", "targets": {"ko": "지원가", "ja": "サポート", "zh": "辅助"}}, - {"source": "healer", "targets": {"ko": "힐러", "ja": "ヒーラー", "zh": "奶"}}, - {"source": "ult", "targets": {"ko": "궁", "ja": "アルト", "zh": "大招"}}, - {"source": "ultimate", "targets": {"ko": "궁극기", "ja": "アルティメット", "zh": "终极技能"}}, - {"source": "ult charge", "targets": {"ko": "궁 게이지", "ja": "アルトゲージ", "zh": "大招能量"}}, - {"source": "ult economy", "targets": {"ko": "궁 경제", "ja": "アルト回し", "zh": "大招经济"}}, - {"source": "combo", "targets": {"ko": "연계", "ja": "コンボ", "zh": "连招"}}, - {"source": "dive", "targets": {"ko": "다이브", "ja": "ダイブ", "zh": "突进"}}, - {"source": "poke", "targets": {"ko": "견제", "ja": "ポーク", "zh": "消耗"}}, - {"source": "brawl", "targets": {"ko": "난전", "ja": "ブロール", "zh": "近战团"}}, - {"source": "payload", "targets": {"ko": "화물", "ja": "ペイロード", "zh": "运载目标"}}, - {"source": "point", "targets": {"ko": "거점", "ja": "拠点", "zh": "点"}}, - {"source": "capture", "targets": {"ko": "점령", "ja": "占領", "zh": "占点"}}, - {"source": "contest", "targets": {"ko": "저지", "ja": "コンテスト", "zh": "拖点"}}, - {"source": "overtime", "targets": {"ko": "연장", "ja": "オーバータイム", "zh": "加时"}}, - {"source": "checkpoint", "targets": {"ko": "관문", "ja": "チェックポイント", "zh": "检查点"}}, - {"source": "spawn", "targets": {"ko": "리스폰", "ja": "リスポーン", "zh": "重生点"}}, - {"source": "regroup", "targets": {"ko": "모이자", "ja": "集合", "zh": "集合"}}, - {"source": "group up", "targets": {"ko": "모이자", "ja": "集合", "zh": "集合"}}, - {"source": "stagger", "targets": {"ko": "스태거", "ja": "スタッガー", "zh": "送人头"}}, - {"source": "flank", "targets": {"ko": "측면", "ja": "フランク", "zh": "绕后"}}, - {"source": "high ground", "targets": {"ko": "고지", "ja": "高台", "zh": "高地"}}, - {"source": "cooldown", "targets": {"ko": "쿨", "ja": "クールダウン", "zh": "冷却"}}, - {"source": "barrier", "targets": {"ko": "방벽", "ja": "バリア", "zh": "护盾"}}, - {"source": "shield", "targets": {"ko": "보호막", "ja": "シールド", "zh": "护盾"}}, - {"source": "armor", "targets": {"ko": "방어력", "ja": "アーマー", "zh": "护甲"}}, - {"source": "burst", "targets": {"ko": "순간 딜", "ja": "バースト", "zh": "爆发"}}, - {"source": "focus", "targets": {"ko": "집중 공격", "ja": "フォーカス", "zh": "集火"}}, - {"source": "peel", "targets": {"ko": "보호", "ja": "ピール", "zh": "保护"}}, - {"source": "nano", "targets": {"ko": "나노", "ja": "ナノ", "zh": "纳米"}}, - {"source": "beat", "targets": {"ko": "비트", "ja": "ビート", "zh": "音障"}}, - {"source": "sound barrier", "targets": {"ko": "음파 방벽", "ja": "サウンドバリア", "zh": "音障"}}, - {"source": "rez", "targets": {"ko": "부활", "ja": "リザ", "zh": "复活"}}, - {"source": "resurrect", "targets": {"ko": "부활", "ja": "リザレクト", "zh": "复活"}}, - {"source": "discord", "targets": {"ko": "불화의 구슬", "ja": "ディスコード", "zh": "不和之球"}}, - {"source": "hack", "targets": {"ko": "해킹", "ja": "ハック", "zh": "黑入"}}, - {"source": "EMP", "targets": {"ko": "EMP", "ja": "EMP", "zh": "EMP"}}, - {"source": "team wipe", "targets": {"ko": "전멸", "ja": "全滅", "zh": "团灭"}}, - {"source": "team fight", "targets": {"ko": "한타", "ja": "チームファイト", "zh": "团战"}}, - {"source": "counter pick", "targets": {"ko": "카운터 픽", "ja": "カウンターピック", "zh": "针对英雄"}}, - {"source": "swap", "targets": {"ko": "영웅 교체", "ja": "ヒーロー変更", "zh": "换英雄"}}, - {"source": "health pack", "targets": {"ko": "회복팩", "ja": "回復パック", "zh": "血包"}}, - {"source": "critical", "targets": {"ko": "치명타", "ja": "クリティカル", "zh": "暴击"}}, - {"source": "behind you", "targets": {"ko": "뒤에 있다", "ja": "後ろだ", "zh": "背后有人"}}, - {"source": "falling back", "targets": {"ko": "후퇴한다", "ja": "後退する", "zh": "撤退"}}, - {"source": "push", "targets": {"ko": "밀자", "ja": "押そう", "zh": "推进"}} + { + "source": "tank", + "targets": { + "ko": "탱커", + "ja": "タンク", + "zh": "重装" + } + }, + { + "source": "DPS", + "targets": { + "ko": "딜러", + "ja": "ダメージ", + "zh": "输出" + } + }, + { + "source": "damage", + "targets": { + "ko": "딜", + "ja": "ダメージ", + "zh": "伤害" + } + }, + { + "source": "support", + "targets": { + "ko": "지원가", + "ja": "サポート", + "zh": "辅助" + } + }, + { + "source": "healer", + "targets": { + "ko": "힐러", + "ja": "ヒーラー", + "zh": "奶" + } + }, + { + "source": "ult", + "targets": { + "ko": "궁", + "ja": "アルト", + "zh": "大招" + } + }, + { + "source": "ultimate", + "targets": { + "ko": "궁극기", + "ja": "アルティメット", + "zh": "终极技能" + } + }, + { + "source": "ult charge", + "targets": { + "ko": "궁 게이지", + "ja": "アルトゲージ", + "zh": "大招能量" + } + }, + { + "source": "ult economy", + "targets": { + "ko": "궁 경제", + "ja": "アルト回し", + "zh": "大招经济" + } + }, + { + "source": "combo", + "targets": { + "ko": "연계", + "ja": "コンボ", + "zh": "连招" + } + }, + { + "source": "dive", + "targets": { + "ko": "다이브", + "ja": "ダイブ", + "zh": "突进" + } + }, + { + "source": "poke", + "targets": { + "ko": "견제", + "ja": "ポーク", + "zh": "消耗" + } + }, + { + "source": "brawl", + "targets": { + "ko": "난전", + "ja": "ブロール", + "zh": "近战团" + } + }, + { + "source": "payload", + "targets": { + "ko": "화물", + "ja": "ペイロード", + "zh": "运载目标" + } + }, + { + "source": "point", + "targets": { + "ko": "거점", + "ja": "拠点", + "zh": "点" + } + }, + { + "source": "capture", + "targets": { + "ko": "점령", + "ja": "占領", + "zh": "占点" + } + }, + { + "source": "contest", + "targets": { + "ko": "저지", + "ja": "コンテスト", + "zh": "拖点" + } + }, + { + "source": "overtime", + "targets": { + "ko": "연장", + "ja": "オーバータイム", + "zh": "加时" + } + }, + { + "source": "checkpoint", + "targets": { + "ko": "관문", + "ja": "チェックポイント", + "zh": "检查点" + } + }, + { + "source": "spawn", + "targets": { + "ko": "리스폰", + "ja": "リスポーン", + "zh": "重生点" + } + }, + { + "source": "regroup", + "targets": { + "ko": "모이자", + "ja": "集合", + "zh": "集合" + } + }, + { + "source": "group up", + "targets": { + "ko": "모이자", + "ja": "集合", + "zh": "集合" + } + }, + { + "source": "stagger", + "targets": { + "ko": "스태거", + "ja": "スタッガー", + "zh": "送人头" + } + }, + { + "source": "flank", + "targets": { + "ko": "측면", + "ja": "フランク", + "zh": "绕后" + } + }, + { + "source": "high ground", + "targets": { + "ko": "고지", + "ja": "高台", + "zh": "高地" + } + }, + { + "source": "cooldown", + "targets": { + "ko": "쿨", + "ja": "クールダウン", + "zh": "冷却" + } + }, + { + "source": "barrier", + "targets": { + "ko": "방벽", + "ja": "バリア", + "zh": "护盾" + } + }, + { + "source": "shield", + "targets": { + "ko": "보호막", + "ja": "シールド", + "zh": "护盾" + } + }, + { + "source": "armor", + "targets": { + "ko": "방어력", + "ja": "アーマー", + "zh": "护甲" + } + }, + { + "source": "burst", + "targets": { + "ko": "순간 딜", + "ja": "バースト", + "zh": "爆发" + } + }, + { + "source": "focus", + "targets": { + "ko": "집중 공격", + "ja": "フォーカス", + "zh": "集火" + } + }, + { + "source": "peel", + "targets": { + "ko": "보호", + "ja": "ピール", + "zh": "保护" + } + }, + { + "source": "nano", + "targets": { + "ko": "나노", + "ja": "ナノ", + "zh": "纳米" + } + }, + { + "source": "beat", + "targets": { + "ko": "비트", + "ja": "ビート", + "zh": "音障" + } + }, + { + "source": "sound barrier", + "targets": { + "ko": "음파 방벽", + "ja": "サウンドバリア", + "zh": "音障" + } + }, + { + "source": "rez", + "targets": { + "ko": "부활", + "ja": "リザ", + "zh": "复活" + } + }, + { + "source": "resurrect", + "targets": { + "ko": "부활", + "ja": "リザレクト", + "zh": "复活" + } + }, + { + "source": "discord", + "targets": { + "ko": "불화의 구슬", + "ja": "ディスコード", + "zh": "不和之球" + } + }, + { + "source": "hack", + "targets": { + "ko": "해킹", + "ja": "ハック", + "zh": "黑入" + } + }, + { + "source": "EMP", + "targets": { + "ko": "EMP", + "ja": "EMP", + "zh": "EMP" + } + }, + { + "source": "team wipe", + "targets": { + "ko": "전멸", + "ja": "全滅", + "zh": "团灭" + } + }, + { + "source": "team fight", + "targets": { + "ko": "한타", + "ja": "チームファイト", + "zh": "团战" + } + }, + { + "source": "counter pick", + "targets": { + "ko": "카운터 픽", + "ja": "カウンターピック", + "zh": "针对英雄" + } + }, + { + "source": "swap", + "targets": { + "ko": "영웅 교체", + "ja": "ヒーロー変更", + "zh": "换英雄" + } + }, + { + "source": "health pack", + "targets": { + "ko": "회복팩", + "ja": "回復パック", + "zh": "血包" + } + }, + { + "source": "critical", + "targets": { + "ko": "치명타", + "ja": "クリティカル", + "zh": "暴击" + } + }, + { + "source": "behind you", + "targets": { + "ko": "뒤에 있다", + "ja": "後ろだ", + "zh": "背后有人" + } + }, + { + "source": "falling back", + "targets": { + "ko": "후퇴한다", + "ja": "後退する", + "zh": "撤退" + } + }, + { + "source": "push", + "targets": { + "ko": "밀자", + "ja": "押そう", + "zh": "推进" + } + } ] } diff --git a/src/livesub/resources/glossaries/pubg.json b/src/livesub/resources/glossaries/pubg.json index 9b3bbb8..e7789d2 100644 --- a/src/livesub/resources/glossaries/pubg.json +++ b/src/livesub/resources/glossaries/pubg.json @@ -2,72 +2,527 @@ "key": "pubg", "name": "배틀그라운드 (PUBG)", "description": "자기장·파밍·스쿼드 콜. 배틀로얄 공통 용어도 같이 들어 있습니다.", + "scope": "game", "entries": [ - {"source": "chicken dinner", "targets": {"ko": "치킨", "ja": "ドン勝", "zh": "吃鸡"}}, - {"source": "winner winner chicken dinner", "targets": {"ko": "이겼닭! 오늘 저녁은 치킨이닭!", "ja": "ドン勝つ!", "zh": "大吉大利,今晚吃鸡"}}, - {"source": "blue zone", "targets": {"ko": "자기장", "ja": "ブルーゾーン", "zh": "蓝圈"}}, - {"source": "the blue", "targets": {"ko": "자기장", "ja": "ブルーゾーン", "zh": "蓝圈"}}, - {"source": "circle", "targets": {"ko": "자기장", "ja": "サークル", "zh": "圈"}}, - {"source": "red zone", "targets": {"ko": "폭격 지역", "ja": "レッドゾーン", "zh": "红区"}}, - {"source": "safe zone", "targets": {"ko": "안전 구역", "ja": "セーフゾーン", "zh": "安全区"}}, - {"source": "zone is closing", "targets": {"ko": "자기장 좁혀진다", "ja": "ゾーンが縮まる", "zh": "圈要缩了"}}, - {"source": "final circle", "targets": {"ko": "막자", "ja": "最終サークル", "zh": "决赛圈"}}, - {"source": "drop", "targets": {"ko": "낙하", "ja": "降下", "zh": "跳伞"}}, - {"source": "hot drop", "targets": {"ko": "핫드랍", "ja": "ホットドロップ", "zh": "热门点"}}, - {"source": "landing", "targets": {"ko": "착지", "ja": "着地", "zh": "落地"}}, - {"source": "where are we dropping", "targets": {"ko": "어디 내릴까", "ja": "どこ降りる", "zh": "跳哪里"}}, - {"source": "loot", "targets": {"ko": "파밍", "ja": "物資", "zh": "物资"}}, - {"source": "looting", "targets": {"ko": "파밍 중", "ja": "漁り中", "zh": "搜物资"}}, - {"source": "care package", "targets": {"ko": "보급", "ja": "補給物資", "zh": "空投"}}, - {"source": "airdrop", "targets": {"ko": "보급 상자", "ja": "エアドロップ", "zh": "空投"}}, - {"source": "third party", "targets": {"ko": "어부", "ja": "漁夫", "zh": "第三方"}}, - {"source": "third partied", "targets": {"ko": "어부 당했다", "ja": "漁夫られた", "zh": "被第三方了"}}, - {"source": "squad", "targets": {"ko": "스쿼드", "ja": "スクワッド", "zh": "四排"}}, - {"source": "duo", "targets": {"ko": "듀오", "ja": "デュオ", "zh": "双排"}}, - {"source": "solo", "targets": {"ko": "솔로", "ja": "ソロ", "zh": "单排"}}, - {"source": "knocked", "targets": {"ko": "눕혔다", "ja": "ダウンさせた", "zh": "打倒了"}}, - {"source": "knocked down", "targets": {"ko": "기절", "ja": "ダウン", "zh": "倒地"}}, - {"source": "finish him", "targets": {"ko": "마무리해", "ja": "とどめ刺して", "zh": "补掉他"}}, - {"source": "revive", "targets": {"ko": "살리기", "ja": "蘇生", "zh": "救人"}}, - {"source": "reviving", "targets": {"ko": "살리는 중", "ja": "蘇生中", "zh": "救人中"}}, - {"source": "res me", "targets": {"ko": "살려줘", "ja": "起こして", "zh": "救我"}}, - {"source": "med kit", "targets": {"ko": "구급상자", "ja": "救急箱", "zh": "医疗箱"}}, - {"source": "first aid", "targets": {"ko": "구급상자", "ja": "応急手当", "zh": "急救包"}}, - {"source": "bandage", "targets": {"ko": "붕대", "ja": "包帯", "zh": "绷带"}}, - {"source": "energy drink", "targets": {"ko": "에너지 드링크", "ja": "エナドリ", "zh": "饮料"}}, - {"source": "painkiller", "targets": {"ko": "진통제", "ja": "鎮痛剤", "zh": "止痛药"}}, - {"source": "boost", "targets": {"ko": "부스트", "ja": "ブースト", "zh": "能量"}}, - {"source": "level 3 helmet", "targets": {"ko": "3렙 헬멧", "ja": "レベル3ヘルメット", "zh": "三级头"}}, - {"source": "level 3 vest", "targets": {"ko": "3렙 조끼", "ja": "レベル3アーマー", "zh": "三级甲"}}, - {"source": "backpack", "targets": {"ko": "가방", "ja": "バックパック", "zh": "背包"}}, - {"source": "scope", "targets": {"ko": "배율", "ja": "スコープ", "zh": "倍镜"}}, - {"source": "8x", "targets": {"ko": "8배율", "ja": "8倍", "zh": "八倍镜"}}, - {"source": "4x", "targets": {"ko": "4배율", "ja": "4倍", "zh": "四倍镜"}}, - {"source": "red dot", "targets": {"ko": "레드닷", "ja": "レッドドット", "zh": "红点"}}, - {"source": "suppressor", "targets": {"ko": "소음기", "ja": "サプレッサー", "zh": "消音器"}}, - {"source": "compensator", "targets": {"ko": "보정기", "ja": "コンペンセイター", "zh": "补偿器"}}, - {"source": "grip", "targets": {"ko": "손잡이", "ja": "グリップ", "zh": "握把"}}, - {"source": "extended mag", "targets": {"ko": "확장 탄창", "ja": "拡張マガジン", "zh": "扩容弹匣"}}, - {"source": "ammo", "targets": {"ko": "탄약", "ja": "弾薬", "zh": "子弹"}}, - {"source": "need ammo", "targets": {"ko": "탄 필요해", "ja": "弾ちょうだい", "zh": "要子弹"}}, - {"source": "frag grenade", "targets": {"ko": "수류탄", "ja": "フラグ", "zh": "手雷"}}, - {"source": "molotov", "targets": {"ko": "화염병", "ja": "モロトフ", "zh": "燃烧瓶"}}, - {"source": "smoke", "targets": {"ko": "연막", "ja": "スモーク", "zh": "烟雾弹"}}, - {"source": "stun", "targets": {"ko": "섬광", "ja": "スタン", "zh": "闪光"}}, - {"source": "prone", "targets": {"ko": "엎드려", "ja": "伏せろ", "zh": "趴下"}}, - {"source": "take cover", "targets": {"ko": "엄폐해", "ja": "隠れて", "zh": "找掩体"}}, - {"source": "cover", "targets": {"ko": "엄폐물", "ja": "遮蔽物", "zh": "掩体"}}, - {"source": "compound", "targets": {"ko": "건물 단지", "ja": "建物群", "zh": "房区"}}, - {"source": "ridge", "targets": {"ko": "능선", "ja": "尾根", "zh": "山脊"}}, - {"source": "high ground", "targets": {"ko": "고지", "ja": "高所", "zh": "高地"}}, - {"source": "vehicle", "targets": {"ko": "차량", "ja": "車両", "zh": "载具"}}, - {"source": "get in the car", "targets": {"ko": "차 타", "ja": "車乗って", "zh": "上车"}}, - {"source": "fuel", "targets": {"ko": "연료", "ja": "燃料", "zh": "油"}}, - {"source": "footsteps", "targets": {"ko": "발소리", "ja": "足音", "zh": "脚步声"}}, - {"source": "I hear footsteps", "targets": {"ko": "발소리 들린다", "ja": "足音する", "zh": "听到脚步"}}, - {"source": "sniper", "targets": {"ko": "저격수", "ja": "スナイパー", "zh": "狙击手"}}, - {"source": "kar98", "targets": {"ko": "카구팔", "ja": "Kar98k", "zh": "98K"}}, - {"source": "spectate", "targets": {"ko": "관전", "ja": "観戦", "zh": "观战"}}, - {"source": "rank push", "targets": {"ko": "티어 올리기", "ja": "ランク上げ", "zh": "上分"}} + { + "source": "chicken dinner", + "targets": { + "ko": "치킨", + "ja": "ドン勝", + "zh": "吃鸡" + } + }, + { + "source": "winner winner chicken dinner", + "targets": { + "ko": "이겼닭! 오늘 저녁은 치킨이닭!", + "ja": "ドン勝つ!", + "zh": "大吉大利,今晚吃鸡" + } + }, + { + "source": "blue zone", + "targets": { + "ko": "자기장", + "ja": "ブルーゾーン", + "zh": "蓝圈" + } + }, + { + "source": "circle", + "targets": { + "ko": "자기장", + "ja": "サークル", + "zh": "圈" + } + }, + { + "source": "red zone", + "targets": { + "ko": "폭격 지역", + "ja": "レッドゾーン", + "zh": "红区" + } + }, + { + "source": "safe zone", + "targets": { + "ko": "안전 구역", + "ja": "セーフゾーン", + "zh": "安全区" + } + }, + { + "source": "zone is closing", + "targets": { + "ko": "자기장 좁혀진다", + "ja": "ゾーンが縮まる", + "zh": "圈要缩了" + } + }, + { + "source": "final circle", + "targets": { + "ko": "막자", + "ja": "最終サークル", + "zh": "决赛圈" + } + }, + { + "source": "drop", + "targets": { + "ko": "낙하", + "ja": "降下", + "zh": "跳伞" + } + }, + { + "source": "hot drop", + "targets": { + "ko": "핫드랍", + "ja": "ホットドロップ", + "zh": "热门点" + } + }, + { + "source": "landing", + "targets": { + "ko": "착지", + "ja": "着地", + "zh": "落地" + } + }, + { + "source": "where are we dropping", + "targets": { + "ko": "어디 내릴까", + "ja": "どこ降りる", + "zh": "跳哪里" + } + }, + { + "source": "loot", + "targets": { + "ko": "파밍", + "ja": "物資", + "zh": "物资" + } + }, + { + "source": "looting", + "targets": { + "ko": "파밍 중", + "ja": "漁り中", + "zh": "搜物资" + } + }, + { + "source": "care package", + "targets": { + "ko": "보급", + "ja": "補給物資", + "zh": "空投" + } + }, + { + "source": "airdrop", + "targets": { + "ko": "보급 상자", + "ja": "エアドロップ", + "zh": "空投" + } + }, + { + "source": "third party", + "targets": { + "ko": "어부", + "ja": "漁夫", + "zh": "第三方" + } + }, + { + "source": "third partied", + "targets": { + "ko": "어부 당했다", + "ja": "漁夫られた", + "zh": "被第三方了" + } + }, + { + "source": "squad", + "targets": { + "ko": "스쿼드", + "ja": "スクワッド", + "zh": "四排" + } + }, + { + "source": "duo", + "targets": { + "ko": "듀오", + "ja": "デュオ", + "zh": "双排" + } + }, + { + "source": "solo", + "targets": { + "ko": "솔로", + "ja": "ソロ", + "zh": "单排" + } + }, + { + "source": "knocked", + "targets": { + "ko": "눕혔다", + "ja": "ダウンさせた", + "zh": "打倒了" + } + }, + { + "source": "knocked down", + "targets": { + "ko": "기절", + "ja": "ダウン", + "zh": "倒地" + } + }, + { + "source": "finish him", + "targets": { + "ko": "마무리해", + "ja": "とどめ刺して", + "zh": "补掉他" + } + }, + { + "source": "revive", + "targets": { + "ko": "살리기", + "ja": "蘇生", + "zh": "救人" + } + }, + { + "source": "reviving", + "targets": { + "ko": "살리는 중", + "ja": "蘇生中", + "zh": "救人中" + } + }, + { + "source": "res me", + "targets": { + "ko": "살려줘", + "ja": "起こして", + "zh": "救我" + } + }, + { + "source": "med kit", + "targets": { + "ko": "구급상자", + "ja": "救急箱", + "zh": "医疗箱" + } + }, + { + "source": "first aid", + "targets": { + "ko": "구급상자", + "ja": "応急手当", + "zh": "急救包" + } + }, + { + "source": "bandage", + "targets": { + "ko": "붕대", + "ja": "包帯", + "zh": "绷带" + } + }, + { + "source": "energy drink", + "targets": { + "ko": "에너지 드링크", + "ja": "エナドリ", + "zh": "饮料" + } + }, + { + "source": "painkiller", + "targets": { + "ko": "진통제", + "ja": "鎮痛剤", + "zh": "止痛药" + } + }, + { + "source": "boost", + "targets": { + "ko": "부스트", + "ja": "ブースト", + "zh": "能量" + } + }, + { + "source": "level 3 helmet", + "targets": { + "ko": "3렙 헬멧", + "ja": "レベル3ヘルメット", + "zh": "三级头" + } + }, + { + "source": "level 3 vest", + "targets": { + "ko": "3렙 조끼", + "ja": "レベル3アーマー", + "zh": "三级甲" + } + }, + { + "source": "backpack", + "targets": { + "ko": "가방", + "ja": "バックパック", + "zh": "背包" + } + }, + { + "source": "scope", + "targets": { + "ko": "배율", + "ja": "スコープ", + "zh": "倍镜" + } + }, + { + "source": "8x", + "targets": { + "ko": "8배율", + "ja": "8倍", + "zh": "八倍镜" + } + }, + { + "source": "4x", + "targets": { + "ko": "4배율", + "ja": "4倍", + "zh": "四倍镜" + } + }, + { + "source": "red dot", + "targets": { + "ko": "레드닷", + "ja": "レッドドット", + "zh": "红点" + } + }, + { + "source": "suppressor", + "targets": { + "ko": "소음기", + "ja": "サプレッサー", + "zh": "消音器" + } + }, + { + "source": "compensator", + "targets": { + "ko": "보정기", + "ja": "コンペンセイター", + "zh": "补偿器" + } + }, + { + "source": "grip", + "targets": { + "ko": "손잡이", + "ja": "グリップ", + "zh": "握把" + } + }, + { + "source": "extended mag", + "targets": { + "ko": "확장 탄창", + "ja": "拡張マガジン", + "zh": "扩容弹匣" + } + }, + { + "source": "ammo", + "targets": { + "ko": "탄약", + "ja": "弾薬", + "zh": "子弹" + } + }, + { + "source": "need ammo", + "targets": { + "ko": "탄 필요해", + "ja": "弾ちょうだい", + "zh": "要子弹" + } + }, + { + "source": "frag grenade", + "targets": { + "ko": "수류탄", + "ja": "フラグ", + "zh": "手雷" + } + }, + { + "source": "molotov", + "targets": { + "ko": "화염병", + "ja": "モロトフ", + "zh": "燃烧瓶" + } + }, + { + "source": "smoke", + "targets": { + "ko": "연막", + "ja": "スモーク", + "zh": "烟雾弹" + } + }, + { + "source": "stun", + "targets": { + "ko": "섬광", + "ja": "スタン", + "zh": "闪光" + } + }, + { + "source": "prone", + "targets": { + "ko": "엎드려", + "ja": "伏せろ", + "zh": "趴下" + } + }, + { + "source": "take cover", + "targets": { + "ko": "엄폐해", + "ja": "隠れて", + "zh": "找掩体" + } + }, + { + "source": "cover", + "targets": { + "ko": "엄폐물", + "ja": "遮蔽物", + "zh": "掩体" + } + }, + { + "source": "compound", + "targets": { + "ko": "건물 단지", + "ja": "建物群", + "zh": "房区" + } + }, + { + "source": "ridge", + "targets": { + "ko": "능선", + "ja": "尾根", + "zh": "山脊" + } + }, + { + "source": "high ground", + "targets": { + "ko": "고지", + "ja": "高所", + "zh": "高地" + } + }, + { + "source": "vehicle", + "targets": { + "ko": "차량", + "ja": "車両", + "zh": "载具" + } + }, + { + "source": "get in the car", + "targets": { + "ko": "차 타", + "ja": "車乗って", + "zh": "上车" + } + }, + { + "source": "fuel", + "targets": { + "ko": "연료", + "ja": "燃料", + "zh": "油" + } + }, + { + "source": "footsteps", + "targets": { + "ko": "발소리", + "ja": "足音", + "zh": "脚步声" + } + }, + { + "source": "I hear footsteps", + "targets": { + "ko": "발소리 들린다", + "ja": "足音する", + "zh": "听到脚步" + } + }, + { + "source": "sniper", + "targets": { + "ko": "저격수", + "ja": "スナイパー", + "zh": "狙击手" + } + }, + { + "source": "kar98", + "targets": { + "ko": "카구팔", + "ja": "Kar98k", + "zh": "98K" + } + }, + { + "source": "spectate", + "targets": { + "ko": "관전", + "ja": "観戦", + "zh": "观战" + } + }, + { + "source": "rank push", + "targets": { + "ko": "티어 올리기", + "ja": "ランク上げ", + "zh": "上分" + } + } ] } diff --git a/src/livesub/resources/glossaries/r6siege.json b/src/livesub/resources/glossaries/r6siege.json index e89fd7b..c2cae59 100644 --- a/src/livesub/resources/glossaries/r6siege.json +++ b/src/livesub/resources/glossaries/r6siege.json @@ -2,73 +2,543 @@ "key": "r6siege", "name": "레인보우 식스 시즈", "description": "역할·보강·파밸·콜아웃. 한국 서버에서 실제로 쓰는 말로 맞췄습니다.", + "scope": "game", "entries": [ - {"source": "operator", "targets": {"ko": "오퍼레이터", "ja": "オペレーター", "zh": "干员"}}, - {"source": "op", "targets": {"ko": "오퍼", "ja": "オペ", "zh": "干员"}}, - {"source": "attacker", "targets": {"ko": "공격팀", "ja": "攻撃側", "zh": "进攻方"}}, - {"source": "defender", "targets": {"ko": "수비팀", "ja": "防衛側", "zh": "防守方"}}, - {"source": "drone", "targets": {"ko": "드론", "ja": "ドローン", "zh": "无人机"}}, - {"source": "droning", "targets": {"ko": "드론 정찰", "ja": "ドローン偵察", "zh": "无人机侦察"}}, - {"source": "prep phase", "targets": {"ko": "준비 시간", "ja": "準備フェーズ", "zh": "准备阶段"}}, - {"source": "roam", "targets": {"ko": "로밍", "ja": "ローミング", "zh": "游走"}}, - {"source": "roamer", "targets": {"ko": "로머", "ja": "ローマー", "zh": "游走位"}}, - {"source": "anchor", "targets": {"ko": "앵커", "ja": "アンカー", "zh": "守点位"}}, - {"source": "anchoring", "targets": {"ko": "앵커링", "ja": "アンカリング", "zh": "守点"}}, - {"source": "site", "targets": {"ko": "거점", "ja": "サイト", "zh": "据点"}}, - {"source": "bomb site", "targets": {"ko": "폭탄 거점", "ja": "爆弾サイト", "zh": "炸弹点"}}, - {"source": "defuser", "targets": {"ko": "디퓨저", "ja": "ディフューザー", "zh": "拆弹器"}}, - {"source": "plant", "targets": {"ko": "설치", "ja": "設置", "zh": "安装"}}, - {"source": "planted", "targets": {"ko": "설치됐다", "ja": "設置された", "zh": "已安装"}}, - {"source": "defuse", "targets": {"ko": "해체", "ja": "解除", "zh": "拆除"}}, - {"source": "reinforcement", "targets": {"ko": "보강", "ja": "補強", "zh": "加固"}}, - {"source": "reinforce", "targets": {"ko": "보강하다", "ja": "補強する", "zh": "加固"}}, - {"source": "hard breach", "targets": {"ko": "하드 브리치", "ja": "ハードブリーチ", "zh": "硬破"}}, - {"source": "hard breacher", "targets": {"ko": "하드 브리처", "ja": "ハードブリーチャー", "zh": "硬破手"}}, - {"source": "soft breach", "targets": {"ko": "소프트 브리치", "ja": "ソフトブリーチ", "zh": "软破"}}, - {"source": "breach charge", "targets": {"ko": "브리치 차지", "ja": "ブリーチチャージ", "zh": "破门炸药"}}, - {"source": "rotate hole", "targets": {"ko": "로테 구멍", "ja": "ローテ穴", "zh": "转点洞"}}, - {"source": "murder hole", "targets": {"ko": "총구멍", "ja": "マーダーホール", "zh": "射击孔"}}, - {"source": "hatch", "targets": {"ko": "해치", "ja": "ハッチ", "zh": "天花板洞"}}, - {"source": "rappel", "targets": {"ko": "레펠", "ja": "ラペル", "zh": "速降"}}, - {"source": "vault", "targets": {"ko": "창넘기", "ja": "乗り越え", "zh": "翻窗"}}, - {"source": "run out", "targets": {"ko": "런아웃", "ja": "ランアウト", "zh": "冲出"}}, - {"source": "spawn peek", "targets": {"ko": "스폰킬", "ja": "スポーンピーク", "zh": "出生点偷袭"}}, - {"source": "gadget", "targets": {"ko": "장비", "ja": "ガジェット", "zh": "道具"}}, - {"source": "utility", "targets": {"ko": "유틸", "ja": "ユーティリティ", "zh": "道具"}}, - {"source": "trap", "targets": {"ko": "함정", "ja": "トラップ", "zh": "陷阱"}}, - {"source": "nitro cell", "targets": {"ko": "니트로", "ja": "ニトロセル", "zh": "C4"}}, - {"source": "impact", "targets": {"ko": "임팩트", "ja": "インパクト", "zh": "碰撞雷"}}, - {"source": "flashbang", "targets": {"ko": "섬광탄", "ja": "フラッシュ", "zh": "闪光弹"}}, - {"source": "smoke grenade", "targets": {"ko": "연막탄", "ja": "スモーク", "zh": "烟雾弹"}}, - {"source": "claymore", "targets": {"ko": "클레이모어", "ja": "クレイモア", "zh": "阔剑雷"}}, - {"source": "barbed wire", "targets": {"ko": "철조망", "ja": "鉄条網", "zh": "铁丝网"}}, - {"source": "deployable shield", "targets": {"ko": "방패", "ja": "展開シールド", "zh": "可部署盾"}}, - {"source": "bulletproof camera", "targets": {"ko": "방탄 카메라", "ja": "防弾カメラ", "zh": "防弹摄像头"}}, - {"source": "cam", "targets": {"ko": "카메라", "ja": "カメラ", "zh": "摄像头"}}, - {"source": "destroy the cam", "targets": {"ko": "카메라 깨줘", "ja": "カメラ壊して", "zh": "打掉摄像头"}}, - {"source": "prefire", "targets": {"ko": "선샷", "ja": "プリファイア", "zh": "预瞄"}}, - {"source": "peek", "targets": {"ko": "픽", "ja": "ピーク", "zh": "架点"}}, - {"source": "lean", "targets": {"ko": "린", "ja": "リーン", "zh": "侧身"}}, - {"source": "crouch", "targets": {"ko": "앉기", "ja": "しゃがみ", "zh": "蹲"}}, - {"source": "prone", "targets": {"ko": "엎드리기", "ja": "伏せ", "zh": "趴下"}}, - {"source": "trade", "targets": {"ko": "트레이드", "ja": "トレード", "zh": "换人"}}, - {"source": "entry frag", "targets": {"ko": "선취점", "ja": "エントリーキル", "zh": "首杀"}}, - {"source": "clutch", "targets": {"ko": "클러치", "ja": "クラッチ", "zh": "残局"}}, - {"source": "ace", "targets": {"ko": "에이스", "ja": "エース", "zh": "一穿五"}}, - {"source": "down", "targets": {"ko": "다운", "ja": "ダウン", "zh": "倒地"}}, - {"source": "dbno", "targets": {"ko": "기절", "ja": "ダウン状態", "zh": "濒死"}}, - {"source": "revive", "targets": {"ko": "살리기", "ja": "蘇生", "zh": "扶起"}}, - {"source": "callout", "targets": {"ko": "콜", "ja": "コール", "zh": "报点"}}, - {"source": "rotate", "targets": {"ko": "로테", "ja": "ローテ", "zh": "转点"}}, - {"source": "flank", "targets": {"ko": "측면", "ja": "フランク", "zh": "绕后"}}, - {"source": "watch flank", "targets": {"ko": "측면 봐줘", "ja": "フランク見て", "zh": "看侧面"}}, - {"source": "above you", "targets": {"ko": "위에 있다", "ja": "上にいる", "zh": "在你上面"}}, - {"source": "below you", "targets": {"ko": "아래에 있다", "ja": "下にいる", "zh": "在你下面"}}, - {"source": "basement", "targets": {"ko": "지하", "ja": "地下", "zh": "地下室"}}, - {"source": "top floor", "targets": {"ko": "최상층", "ja": "最上階", "zh": "顶层"}}, - {"source": "outside", "targets": {"ko": "바깥", "ja": "外", "zh": "外面"}}, - {"source": "ranked", "targets": {"ko": "랭크", "ja": "ランク", "zh": "排位"}}, - {"source": "overtime", "targets": {"ko": "연장", "ja": "オーバータイム", "zh": "加时"}}, - {"source": "ban", "targets": {"ko": "밴", "ja": "バン", "zh": "禁用"}} + { + "source": "operator", + "targets": { + "ko": "오퍼레이터", + "ja": "オペレーター", + "zh": "干员" + } + }, + { + "source": "op", + "targets": { + "ko": "오퍼", + "ja": "オペ", + "zh": "干员" + } + }, + { + "source": "attacker", + "targets": { + "ko": "공격팀", + "ja": "攻撃側", + "zh": "进攻方" + } + }, + { + "source": "defender", + "targets": { + "ko": "수비팀", + "ja": "防衛側", + "zh": "防守方" + } + }, + { + "source": "drone", + "targets": { + "ko": "드론", + "ja": "ドローン", + "zh": "无人机" + } + }, + { + "source": "droning", + "targets": { + "ko": "드론 정찰", + "ja": "ドローン偵察", + "zh": "无人机侦察" + } + }, + { + "source": "prep phase", + "targets": { + "ko": "준비 시간", + "ja": "準備フェーズ", + "zh": "准备阶段" + } + }, + { + "source": "roam", + "targets": { + "ko": "로밍", + "ja": "ローミング", + "zh": "游走" + } + }, + { + "source": "roamer", + "targets": { + "ko": "로머", + "ja": "ローマー", + "zh": "游走位" + } + }, + { + "source": "anchor", + "targets": { + "ko": "앵커", + "ja": "アンカー", + "zh": "守点位" + } + }, + { + "source": "anchoring", + "targets": { + "ko": "앵커링", + "ja": "アンカリング", + "zh": "守点" + } + }, + { + "source": "site", + "targets": { + "ko": "거점", + "ja": "サイト", + "zh": "据点" + } + }, + { + "source": "bomb site", + "targets": { + "ko": "폭탄 거점", + "ja": "爆弾サイト", + "zh": "炸弹点" + } + }, + { + "source": "defuser", + "targets": { + "ko": "디퓨저", + "ja": "ディフューザー", + "zh": "拆弹器" + } + }, + { + "source": "plant", + "targets": { + "ko": "설치", + "ja": "設置", + "zh": "安装" + } + }, + { + "source": "planted", + "targets": { + "ko": "설치됐다", + "ja": "設置された", + "zh": "已安装" + } + }, + { + "source": "defuse", + "targets": { + "ko": "해체", + "ja": "解除", + "zh": "拆除" + } + }, + { + "source": "reinforcement", + "targets": { + "ko": "보강", + "ja": "補強", + "zh": "加固" + } + }, + { + "source": "reinforce", + "targets": { + "ko": "보강하다", + "ja": "補強する", + "zh": "加固" + } + }, + { + "source": "hard breach", + "targets": { + "ko": "하드 브리치", + "ja": "ハードブリーチ", + "zh": "硬破" + } + }, + { + "source": "hard breacher", + "targets": { + "ko": "하드 브리처", + "ja": "ハードブリーチャー", + "zh": "硬破手" + } + }, + { + "source": "soft breach", + "targets": { + "ko": "소프트 브리치", + "ja": "ソフトブリーチ", + "zh": "软破" + } + }, + { + "source": "breach charge", + "targets": { + "ko": "브리치 차지", + "ja": "ブリーチチャージ", + "zh": "破门炸药" + } + }, + { + "source": "rotate hole", + "targets": { + "ko": "로테 구멍", + "ja": "ローテ穴", + "zh": "转点洞" + } + }, + { + "source": "murder hole", + "targets": { + "ko": "총구멍", + "ja": "マーダーホール", + "zh": "射击孔" + } + }, + { + "source": "hatch", + "targets": { + "ko": "해치", + "ja": "ハッチ", + "zh": "天花板洞" + } + }, + { + "source": "rappel", + "targets": { + "ko": "레펠", + "ja": "ラペル", + "zh": "速降" + } + }, + { + "source": "vault", + "targets": { + "ko": "창넘기", + "ja": "乗り越え", + "zh": "翻窗" + } + }, + { + "source": "run out", + "targets": { + "ko": "런아웃", + "ja": "ランアウト", + "zh": "冲出" + } + }, + { + "source": "spawn peek", + "targets": { + "ko": "스폰킬", + "ja": "スポーンピーク", + "zh": "出生点偷袭" + } + }, + { + "source": "gadget", + "targets": { + "ko": "장비", + "ja": "ガジェット", + "zh": "道具" + } + }, + { + "source": "utility", + "targets": { + "ko": "유틸", + "ja": "ユーティリティ", + "zh": "道具" + } + }, + { + "source": "trap", + "targets": { + "ko": "함정", + "ja": "トラップ", + "zh": "陷阱" + } + }, + { + "source": "nitro cell", + "targets": { + "ko": "니트로", + "ja": "ニトロセル", + "zh": "C4" + } + }, + { + "source": "impact", + "targets": { + "ko": "임팩트", + "ja": "インパクト", + "zh": "碰撞雷" + } + }, + { + "source": "flashbang", + "targets": { + "ko": "섬광탄", + "ja": "フラッシュ", + "zh": "闪光弹" + } + }, + { + "source": "smoke grenade", + "targets": { + "ko": "연막탄", + "ja": "スモーク", + "zh": "烟雾弹" + } + }, + { + "source": "claymore", + "targets": { + "ko": "클레이모어", + "ja": "クレイモア", + "zh": "阔剑雷" + } + }, + { + "source": "barbed wire", + "targets": { + "ko": "철조망", + "ja": "鉄条網", + "zh": "铁丝网" + } + }, + { + "source": "deployable shield", + "targets": { + "ko": "방패", + "ja": "展開シールド", + "zh": "可部署盾" + } + }, + { + "source": "bulletproof camera", + "targets": { + "ko": "방탄 카메라", + "ja": "防弾カメラ", + "zh": "防弹摄像头" + } + }, + { + "source": "cam", + "targets": { + "ko": "카메라", + "ja": "カメラ", + "zh": "摄像头" + } + }, + { + "source": "destroy the cam", + "targets": { + "ko": "카메라 깨줘", + "ja": "カメラ壊して", + "zh": "打掉摄像头" + } + }, + { + "source": "prefire", + "targets": { + "ko": "선샷", + "ja": "プリファイア", + "zh": "预瞄" + } + }, + { + "source": "peek", + "targets": { + "ko": "픽", + "ja": "ピーク", + "zh": "架点" + } + }, + { + "source": "lean", + "targets": { + "ko": "린", + "ja": "リーン", + "zh": "侧身" + } + }, + { + "source": "crouch", + "targets": { + "ko": "앉기", + "ja": "しゃがみ", + "zh": "蹲" + } + }, + { + "source": "prone", + "targets": { + "ko": "엎드리기", + "ja": "伏せ", + "zh": "趴下" + } + }, + { + "source": "trade", + "targets": { + "ko": "트레이드", + "ja": "トレード", + "zh": "换人" + } + }, + { + "source": "entry frag", + "targets": { + "ko": "선취점", + "ja": "エントリーキル", + "zh": "首杀" + } + }, + { + "source": "clutch", + "targets": { + "ko": "클러치", + "ja": "クラッチ", + "zh": "残局" + } + }, + { + "source": "ace", + "targets": { + "ko": "에이스", + "ja": "エース", + "zh": "一穿五" + } + }, + { + "source": "down", + "targets": { + "ko": "다운", + "ja": "ダウン", + "zh": "倒地" + } + }, + { + "source": "dbno", + "targets": { + "ko": "기절", + "ja": "ダウン状態", + "zh": "濒死" + } + }, + { + "source": "revive", + "targets": { + "ko": "살리기", + "ja": "蘇生", + "zh": "扶起" + } + }, + { + "source": "callout", + "targets": { + "ko": "콜", + "ja": "コール", + "zh": "报点" + } + }, + { + "source": "rotate", + "targets": { + "ko": "로테", + "ja": "ローテ", + "zh": "转点" + } + }, + { + "source": "flank", + "targets": { + "ko": "측면", + "ja": "フランク", + "zh": "绕后" + } + }, + { + "source": "watch flank", + "targets": { + "ko": "측면 봐줘", + "ja": "フランク見て", + "zh": "看侧面" + } + }, + { + "source": "above you", + "targets": { + "ko": "위에 있다", + "ja": "上にいる", + "zh": "在你上面" + } + }, + { + "source": "below you", + "targets": { + "ko": "아래에 있다", + "ja": "下にいる", + "zh": "在你下面" + } + }, + { + "source": "basement", + "targets": { + "ko": "지하", + "ja": "地下", + "zh": "地下室" + } + }, + { + "source": "top floor", + "targets": { + "ko": "최상층", + "ja": "最上階", + "zh": "顶层" + } + }, + { + "source": "outside", + "targets": { + "ko": "바깥", + "ja": "外", + "zh": "外面" + } + }, + { + "source": "ranked", + "targets": { + "ko": "랭크", + "ja": "ランク", + "zh": "排位" + } + }, + { + "source": "overtime", + "targets": { + "ko": "연장", + "ja": "オーバータイム", + "zh": "加时" + } + }, + { + "source": "ban", + "targets": { + "ko": "밴", + "ja": "バン", + "zh": "禁用" + } + } ] } diff --git a/src/livesub/resources/glossaries/streaming.json b/src/livesub/resources/glossaries/streaming.json index 27a1b7f..15ecf51 100644 --- a/src/livesub/resources/glossaries/streaming.json +++ b/src/livesub/resources/glossaries/streaming.json @@ -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": "欢迎回来" + } + } ] } diff --git a/src/livesub/resources/glossaries/valorant.json b/src/livesub/resources/glossaries/valorant.json index 133eb56..36ffe30 100644 --- a/src/livesub/resources/glossaries/valorant.json +++ b/src/livesub/resources/glossaries/valorant.json @@ -2,65 +2,479 @@ "key": "valorant", "name": "발로란트", "description": "스파이크·유틸·이코노미 콜. 아시아 서버 영어 콜아웃에 맞췄습니다.", + "scope": "game", "entries": [ - {"source": "spike", "targets": {"ko": "스파이크", "ja": "スパイク", "zh": "斩杀者"}}, - {"source": "plant", "targets": {"ko": "설치", "ja": "設置", "zh": "安装"}}, - {"source": "planted", "targets": {"ko": "설치됐다", "ja": "設置された", "zh": "已安装"}}, - {"source": "defuse", "targets": {"ko": "해체", "ja": "解除", "zh": "拆包"}}, - {"source": "defusing", "targets": {"ko": "해체 중", "ja": "解除中", "zh": "拆包中"}}, - {"source": "fake defuse", "targets": {"ko": "페이크 해체", "ja": "フェイク解除", "zh": "假拆"}}, - {"source": "post plant", "targets": {"ko": "설치 후", "ja": "ポストプラント", "zh": "安装后"}}, - {"source": "retake", "targets": {"ko": "리테이크", "ja": "リテイク", "zh": "残局夺回"}}, - {"source": "site", "targets": {"ko": "사이트", "ja": "サイト", "zh": "包点"}}, - {"source": "A site", "targets": {"ko": "A사이트", "ja": "Aサイト", "zh": "A点"}}, - {"source": "B site", "targets": {"ko": "B사이트", "ja": "Bサイト", "zh": "B点"}}, - {"source": "mid", "targets": {"ko": "미드", "ja": "ミッド", "zh": "中路"}}, - {"source": "rotate", "targets": {"ko": "로테", "ja": "ローテ", "zh": "换点"}}, - {"source": "rotating", "targets": {"ko": "로테 중", "ja": "ローテ中", "zh": "换点中"}}, - {"source": "eco", "targets": {"ko": "이코", "ja": "エコ", "zh": "经济局"}}, - {"source": "full eco", "targets": {"ko": "풀이코", "ja": "フルエコ", "zh": "全经济局"}}, - {"source": "eco round", "targets": {"ko": "이코 라운드", "ja": "エコラウンド", "zh": "经济局"}}, - {"source": "save", "targets": {"ko": "세이브", "ja": "セーブ", "zh": "存钱"}}, - {"source": "buy round", "targets": {"ko": "풀 구매", "ja": "フルバイ", "zh": "全起"}}, - {"source": "force buy", "targets": {"ko": "강제 구매", "ja": "フォースバイ", "zh": "强起"}}, - {"source": "pistol round", "targets": {"ko": "권총 라운드", "ja": "ピストルラウンド", "zh": "手枪局"}}, - {"source": "ult", "targets": {"ko": "궁", "ja": "アルト", "zh": "大招"}}, - {"source": "ultimate", "targets": {"ko": "궁극기", "ja": "アルティメット", "zh": "终极技能"}}, - {"source": "ult orb", "targets": {"ko": "궁 오브", "ja": "アルトオーブ", "zh": "能量球"}}, - {"source": "util", "targets": {"ko": "유틸", "ja": "ユーティリティ", "zh": "技能"}}, - {"source": "utility", "targets": {"ko": "유틸", "ja": "ユーティリティ", "zh": "技能"}}, - {"source": "smoke", "targets": {"ko": "연막", "ja": "スモーク", "zh": "烟"}}, - {"source": "flash", "targets": {"ko": "섬광", "ja": "フラッシュ", "zh": "闪"}}, - {"source": "flashed", "targets": {"ko": "섬광 맞음", "ja": "フラッシュ食らった", "zh": "被闪了"}}, - {"source": "molly", "targets": {"ko": "몰리", "ja": "モリー", "zh": "火"}}, - {"source": "wall", "targets": {"ko": "벽", "ja": "ウォール", "zh": "墙"}}, - {"source": "recon", "targets": {"ko": "정찰", "ja": "リコン", "zh": "侦察"}}, - {"source": "one tap", "targets": {"ko": "원탭", "ja": "ワンタップ", "zh": "一枪"}}, - {"source": "headshot", "targets": {"ko": "헤드샷", "ja": "ヘッドショット", "zh": "爆头"}}, - {"source": "entry", "targets": {"ko": "진입", "ja": "エントリー", "zh": "突破"}}, - {"source": "entry frag", "targets": {"ko": "선취점", "ja": "エントリーキル", "zh": "首杀"}}, - {"source": "trade", "targets": {"ko": "트레이드", "ja": "トレード", "zh": "换人"}}, - {"source": "peek", "targets": {"ko": "픽", "ja": "ピーク", "zh": "架点"}}, - {"source": "wide peek", "targets": {"ko": "와이드 픽", "ja": "ワイドピーク", "zh": "大幅架点"}}, - {"source": "clear", "targets": {"ko": "클리어", "ja": "クリア", "zh": "清点"}}, - {"source": "rush", "targets": {"ko": "러쉬", "ja": "ラッシュ", "zh": "强攻"}}, - {"source": "stack", "targets": {"ko": "몰빵", "ja": "スタック", "zh": "集火"}}, - {"source": "lurk", "targets": {"ko": "럴커", "ja": "ラーク", "zh": "潜伏"}}, - {"source": "op", "targets": {"ko": "오페", "ja": "オペ", "zh": "狙"}}, - {"source": "operator", "targets": {"ko": "오퍼레이터", "ja": "オペレーター", "zh": "狙击枪"}}, - {"source": "clutch", "targets": {"ko": "클러치", "ja": "クラッチ", "zh": "残局"}}, - {"source": "ace", "targets": {"ko": "에이스", "ja": "エース", "zh": "一穿五"}}, - {"source": "spray", "targets": {"ko": "연사", "ja": "スプレー", "zh": "扫射"}}, - {"source": "crosshair", "targets": {"ko": "크로스헤어", "ja": "クロスヘア", "zh": "准星"}}, - {"source": "callout", "targets": {"ko": "콜", "ja": "コール", "zh": "报点"}}, - {"source": "spotted", "targets": {"ko": "봤다", "ja": "発見", "zh": "看到了"}}, - {"source": "one down", "targets": {"ko": "한 명 잡음", "ja": "一人ダウン", "zh": "倒一个"}}, - {"source": "man advantage", "targets": {"ko": "인원 우위", "ja": "人数有利", "zh": "人数优势"}}, - {"source": "low", "targets": {"ko": "피 없음", "ja": "体力低い", "zh": "残血"}}, - {"source": "armor", "targets": {"ko": "방어구", "ja": "アーマー", "zh": "护甲"}}, - {"source": "creds", "targets": {"ko": "크레딧", "ja": "クレジット", "zh": "钱"}}, - {"source": "drop", "targets": {"ko": "드랍", "ja": "ドロップ", "zh": "丢枪"}}, - {"source": "overtime", "targets": {"ko": "연장", "ja": "オーバータイム", "zh": "加时"}}, - {"source": "match point", "targets": {"ko": "매치포인트", "ja": "マッチポイント", "zh": "赛点"}} + { + "source": "spike", + "targets": { + "ko": "스파이크", + "ja": "スパイク", + "zh": "斩杀者" + } + }, + { + "source": "plant", + "targets": { + "ko": "설치", + "ja": "設置", + "zh": "安装" + } + }, + { + "source": "planted", + "targets": { + "ko": "설치됐다", + "ja": "設置された", + "zh": "已安装" + } + }, + { + "source": "defuse", + "targets": { + "ko": "해체", + "ja": "解除", + "zh": "拆包" + } + }, + { + "source": "defusing", + "targets": { + "ko": "해체 중", + "ja": "解除中", + "zh": "拆包中" + } + }, + { + "source": "fake defuse", + "targets": { + "ko": "페이크 해체", + "ja": "フェイク解除", + "zh": "假拆" + } + }, + { + "source": "post plant", + "targets": { + "ko": "설치 후", + "ja": "ポストプラント", + "zh": "安装后" + } + }, + { + "source": "retake", + "targets": { + "ko": "리테이크", + "ja": "リテイク", + "zh": "残局夺回" + } + }, + { + "source": "site", + "targets": { + "ko": "사이트", + "ja": "サイト", + "zh": "包点" + } + }, + { + "source": "A site", + "targets": { + "ko": "A사이트", + "ja": "Aサイト", + "zh": "A点" + } + }, + { + "source": "B site", + "targets": { + "ko": "B사이트", + "ja": "Bサイト", + "zh": "B点" + } + }, + { + "source": "mid", + "targets": { + "ko": "미드", + "ja": "ミッド", + "zh": "中路" + } + }, + { + "source": "rotate", + "targets": { + "ko": "로테", + "ja": "ローテ", + "zh": "换点" + } + }, + { + "source": "rotating", + "targets": { + "ko": "로테 중", + "ja": "ローテ中", + "zh": "换点中" + } + }, + { + "source": "eco", + "targets": { + "ko": "이코", + "ja": "エコ", + "zh": "经济局" + } + }, + { + "source": "full eco", + "targets": { + "ko": "풀이코", + "ja": "フルエコ", + "zh": "全经济局" + } + }, + { + "source": "eco round", + "targets": { + "ko": "이코 라운드", + "ja": "エコラウンド", + "zh": "经济局" + } + }, + { + "source": "save", + "targets": { + "ko": "세이브", + "ja": "セーブ", + "zh": "存钱" + } + }, + { + "source": "buy round", + "targets": { + "ko": "풀 구매", + "ja": "フルバイ", + "zh": "全起" + } + }, + { + "source": "force buy", + "targets": { + "ko": "강제 구매", + "ja": "フォースバイ", + "zh": "强起" + } + }, + { + "source": "pistol round", + "targets": { + "ko": "권총 라운드", + "ja": "ピストルラウンド", + "zh": "手枪局" + } + }, + { + "source": "ult", + "targets": { + "ko": "궁", + "ja": "アルト", + "zh": "大招" + } + }, + { + "source": "ultimate", + "targets": { + "ko": "궁극기", + "ja": "アルティメット", + "zh": "终极技能" + } + }, + { + "source": "ult orb", + "targets": { + "ko": "궁 오브", + "ja": "アルトオーブ", + "zh": "能量球" + } + }, + { + "source": "util", + "targets": { + "ko": "유틸", + "ja": "ユーティリティ", + "zh": "技能" + } + }, + { + "source": "utility", + "targets": { + "ko": "유틸", + "ja": "ユーティリティ", + "zh": "技能" + } + }, + { + "source": "smoke", + "targets": { + "ko": "연막", + "ja": "スモーク", + "zh": "烟" + } + }, + { + "source": "flash", + "targets": { + "ko": "섬광", + "ja": "フラッシュ", + "zh": "闪" + } + }, + { + "source": "flashed", + "targets": { + "ko": "섬광 맞음", + "ja": "フラッシュ食らった", + "zh": "被闪了" + } + }, + { + "source": "molly", + "targets": { + "ko": "몰리", + "ja": "モリー", + "zh": "火" + } + }, + { + "source": "wall", + "targets": { + "ko": "벽", + "ja": "ウォール", + "zh": "墙" + } + }, + { + "source": "recon", + "targets": { + "ko": "정찰", + "ja": "リコン", + "zh": "侦察" + } + }, + { + "source": "one tap", + "targets": { + "ko": "원탭", + "ja": "ワンタップ", + "zh": "一枪" + } + }, + { + "source": "headshot", + "targets": { + "ko": "헤드샷", + "ja": "ヘッドショット", + "zh": "爆头" + } + }, + { + "source": "entry", + "targets": { + "ko": "진입", + "ja": "エントリー", + "zh": "突破" + } + }, + { + "source": "entry frag", + "targets": { + "ko": "선취점", + "ja": "エントリーキル", + "zh": "首杀" + } + }, + { + "source": "trade", + "targets": { + "ko": "트레이드", + "ja": "トレード", + "zh": "换人" + } + }, + { + "source": "peek", + "targets": { + "ko": "픽", + "ja": "ピーク", + "zh": "架点" + } + }, + { + "source": "wide peek", + "targets": { + "ko": "와이드 픽", + "ja": "ワイドピーク", + "zh": "大幅架点" + } + }, + { + "source": "clear", + "targets": { + "ko": "클리어", + "ja": "クリア", + "zh": "清点" + } + }, + { + "source": "rush", + "targets": { + "ko": "러쉬", + "ja": "ラッシュ", + "zh": "强攻" + } + }, + { + "source": "stack", + "targets": { + "ko": "몰빵", + "ja": "スタック", + "zh": "集火" + } + }, + { + "source": "lurk", + "targets": { + "ko": "럴커", + "ja": "ラーク", + "zh": "潜伏" + } + }, + { + "source": "op", + "targets": { + "ko": "오페", + "ja": "オペ", + "zh": "狙" + } + }, + { + "source": "operator", + "targets": { + "ko": "오퍼레이터", + "ja": "オペレーター", + "zh": "狙击枪" + } + }, + { + "source": "clutch", + "targets": { + "ko": "클러치", + "ja": "クラッチ", + "zh": "残局" + } + }, + { + "source": "ace", + "targets": { + "ko": "에이스", + "ja": "エース", + "zh": "一穿五" + } + }, + { + "source": "spray", + "targets": { + "ko": "연사", + "ja": "スプレー", + "zh": "扫射" + } + }, + { + "source": "crosshair", + "targets": { + "ko": "크로스헤어", + "ja": "クロスヘア", + "zh": "准星" + } + }, + { + "source": "callout", + "targets": { + "ko": "콜", + "ja": "コール", + "zh": "报点" + } + }, + { + "source": "spotted", + "targets": { + "ko": "봤다", + "ja": "発見", + "zh": "看到了" + } + }, + { + "source": "one down", + "targets": { + "ko": "한 명 잡음", + "ja": "一人ダウン", + "zh": "倒一个" + } + }, + { + "source": "man advantage", + "targets": { + "ko": "인원 우위", + "ja": "人数有利", + "zh": "人数优势" + } + }, + { + "source": "low", + "targets": { + "ko": "피 없음", + "ja": "体力低い", + "zh": "残血" + } + }, + { + "source": "armor", + "targets": { + "ko": "방어구", + "ja": "アーマー", + "zh": "护甲" + } + }, + { + "source": "creds", + "targets": { + "ko": "크레딧", + "ja": "クレジット", + "zh": "钱" + } + }, + { + "source": "drop", + "targets": { + "ko": "드랍", + "ja": "ドロップ", + "zh": "丢枪" + } + }, + { + "source": "overtime", + "targets": { + "ko": "연장", + "ja": "オーバータイム", + "zh": "加时" + } + }, + { + "source": "match point", + "targets": { + "ko": "매치포인트", + "ja": "マッチポイント", + "zh": "赛点" + } + } ] } diff --git a/src/livesub/resources/glossaries/watchdogs.json b/src/livesub/resources/glossaries/watchdogs.json index a961d3f..e1ca969 100644 --- a/src/livesub/resources/glossaries/watchdogs.json +++ b/src/livesub/resources/glossaries/watchdogs.json @@ -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": "城市在注视" + } + } ] } diff --git a/src/livesub/ui/main_window.py b/src/livesub/ui/main_window.py index 2c092e2..35b6ec9 100644 --- a/src/livesub/ui/main_window.py +++ b/src/livesub/ui/main_window.py @@ -238,6 +238,8 @@ class MainWindow(QMainWindow): self.engine.start() def _on_restart_needed(self) -> None: + # 정지 상태에서도 반영해 둬야 저부하 모드를 켠 즉시 VRAM이 반납된다. + self.engine.sync_performance() if self.engine.running: self.engine.stop() self.engine.start() diff --git a/src/livesub/ui/pages/glossary_page.py b/src/livesub/ui/pages/glossary_page.py index 0f1fcf1..b8a57a0 100644 --- a/src/livesub/ui/pages/glossary_page.py +++ b/src/livesub/ui/pages/glossary_page.py @@ -25,8 +25,8 @@ from PySide6.QtWidgets import ( from ...config import AppConfig from ...constants import LANGUAGE_CODES, LANGUAGES, user_data_dir from ...models import Glossary, GlossaryEntry -from ...models.packs import available_packs -from ..theme import SPACING +from ...models.packs import available_packs, find_conflicts +from ..theme import SPACING, palette from ..widgets import Card, PageHeader COLUMNS = ["원문 용어", *[f"{LANGUAGES[c]['label']} 역어" for c in LANGUAGE_CODES], "메모"] @@ -71,14 +71,17 @@ class GlossaryPage(QWidget): card.add(_hint("기본 제공 용어집을 찾지 못했습니다.")) return card - for pack in packs: - check = QCheckBox(f"{pack.name} ({len(pack)}개)") + # 범용 팩을 위에 두어 "게임 전용이 범용을 이긴다"는 규칙이 눈에 보이게 한다. + for pack in sorted(packs, key=lambda p: (not p.is_generic, p.name)): + suffix = " · 장르 공통" if pack.is_generic else "" + check = QCheckBox(f"{pack.name} ({len(pack)}개){suffix}") check.setChecked(pack.key in enabled) check.setToolTip(pack.description) check.toggled.connect(self._on_packs_changed) self._pack_checks[pack.key] = check card.add(check) + self.conflict_label = card.add(_warning("")) self.pack_total = card.add(_hint("")) self._update_pack_total() return card @@ -94,6 +97,33 @@ class GlossaryPage(QWidget): enabled = set(self.config.glossary.enabled_packs) total = sum(len(p) for p in available_packs() if p.key in enabled) self.pack_total.setText(f"켜둔 기본 용어 {total}개") + self._update_conflicts() + + def _update_conflicts(self) -> None: + """게임 전용 팩끼리 역어가 갈리는 단어를 알려준다. + + 예를 들어 오버워치와 워치독스를 같이 켜면 payload 가 '화물'과 + '페이로드'로 갈린다. 조용히 아무거나 고르면 사용자는 영문도 모른 채 + 이상한 자막을 보게 되므로, 어떤 단어가 문제인지 그대로 보여준다. + """ + conflicts = find_conflicts(self.config.glossary.enabled_packs) + if not conflicts: + self.conflict_label.setText("") + self.conflict_label.setVisible(False) + return + + shown = sorted(conflicts.items())[:4] + parts = [ + f"{source} ({' / '.join(t for _, t in owners)})" for source, owners in shown + ] + more = f" 외 {len(conflicts) - len(shown)}개" if len(conflicts) > len(shown) else "" + self.conflict_label.setText( + "게임 팩끼리 역어가 갈리는 단어가 있습니다 — " + + ", ".join(parts) + + more + + ". 안 하는 게임은 꺼주세요. (직접 등록하면 그쪽이 이깁니다)" + ) + self.conflict_label.setVisible(True) # --- 구성 ----------------------------------------------------------- def _build_options_card(self) -> Card: @@ -295,3 +325,12 @@ def _hint(text: str) -> QLabel: label.setObjectName("Hint") label.setAlignment(Qt.AlignmentFlag.AlignRight) return label + + +def _warning(text: str) -> QLabel: + label = QLabel(text) + label.setObjectName("Hint") + label.setWordWrap(True) + label.setStyleSheet(f"color: {palette('dark').warning};") + label.setVisible(bool(text)) + return label diff --git a/tests/test_low_power.py b/tests/test_low_power.py new file mode 100644 index 0000000..6bf8c6c --- /dev/null +++ b/tests/test_low_power.py @@ -0,0 +1,95 @@ +"""저부하(게임) 모드 토글이 실제로 모델에 반영되는지. + +설정 화면에서 모드를 꺼도 이미 올라가 있는 int8 모델이 그대로 남으면 +"껐는데 품질이 안 올라간다"가 된다. 반대로 켜도 float16 모델이 남으면 +게임 프레임을 지키려던 목적이 통째로 무산된다. +""" + +from __future__ import annotations + +from livesub.config import AppConfig +from livesub.core.engine import TranslationEngine +from livesub.models import ModelManager + + +def make_engine(game_mode: bool, tmp_path) -> TranslationEngine: + cfg = AppConfig() + cfg.models.preload_on_start = False + cfg.glossary.path = str(tmp_path / "glossary.json") + cfg.performance.game_mode = game_mode + return TranslationEngine(cfg) + + +def test_manager_reflects_initial_game_mode(tmp_path): + on = make_engine(True, tmp_path) + off = make_engine(False, tmp_path) + assert on.models.low_power is True + assert off.models.low_power is False + + +def test_toggling_game_mode_updates_manager(tmp_path): + """설정에서 모드를 바꾸면 다음 시작 때 모델 사양이 따라와야 한다.""" + engine = make_engine(True, tmp_path) + assert "int8" in engine.models.effective_asr_spec().compute_type + + engine.config.performance.game_mode = False + engine.sync_performance() + + assert engine.models.low_power is False + assert engine.models.effective_asr_spec() == engine.models.tier.asr + + +def test_toggling_back_on_restores_low_power_specs(tmp_path): + engine = make_engine(False, tmp_path) + engine.config.performance.game_mode = True + engine.sync_performance() + assert engine.models.low_power is True + assert "int8" in engine.models.effective_asr_spec().compute_type + + +def test_changed_mode_unloads_stale_models(tmp_path): + """정밀도가 바뀌었으면 이미 올라간 모델을 반드시 내려야 한다.""" + engine = make_engine(True, tmp_path) + + class FakeModel: + def __init__(self): + self.loaded = True + self.unloaded = False + + def unload(self): + self.unloaded = True + self.loaded = False + + asr, mt = FakeModel(), FakeModel() + engine.models._asr, engine.models._mt = asr, mt + + engine.config.performance.game_mode = False + changed = engine.sync_performance() + + assert changed is True + assert asr.unloaded and mt.unloaded + assert engine.models._asr is None and engine.models._mt is None + + +def test_unchanged_mode_keeps_models_loaded(tmp_path): + """바뀐 게 없으면 굳이 내려서 재다운로드/재로딩을 유발하면 안 된다.""" + engine = make_engine(True, tmp_path) + + class FakeModel: + loaded = True + + def unload(self): + raise AssertionError("바뀐 게 없는데 언로드하면 안 됩니다") + + engine.models._asr = FakeModel() + engine.models._mt = FakeModel() + + assert engine.sync_performance() is False + assert engine.models._asr is not None + + +def test_int4_tier_is_not_downgraded_further(tmp_path): + cfg = AppConfig() + cfg.models.tier = "precision" + manager = ModelManager(cfg.models, low_power=True) + assert manager.effective_mt_spec().compute_type == "int4" diff --git a/tests/test_packs.py b/tests/test_packs.py index db677fd..3e8ab85 100644 --- a/tests/test_packs.py +++ b/tests/test_packs.py @@ -4,7 +4,13 @@ from __future__ import annotations from livesub.constants import LANGUAGE_CODES from livesub.models.glossary import Glossary, GlossaryEntry -from livesub.models.packs import available_packs, build_glossary, get_pack +from livesub.models.packs import ( + available_packs, + build_glossary, + find_conflicts, + get_pack, + resolve_packs, +) #: 사용자가 "필수 게임"으로 지정한 것 — 빠지면 테스트가 잡아낸다. REQUIRED_GAMES = {"overwatch", "watchdogs", "pubg", "r6siege"} @@ -102,3 +108,103 @@ def test_no_packs_means_only_user_entries(): user = Glossary([GlossaryEntry("foo", {"ko": "푸"})]) merged = build_glossary(user, []) assert len(merged) == 1 + + +# --- 팩 계층: 게임 전용이 장르 공통을 이긴다 -------------------------------- + + +def test_generic_packs_are_tagged(): + generic = {p.key for p in available_packs() if p.is_generic} + assert generic == {"fps-common", "streaming"} + + +def test_game_pack_beats_generic_regardless_of_check_order(): + """체크한 순서가 결과를 바꾸면 안 된다. + + knocked 는 FPS 공통에서 '기절', 배그에서 '눕혔다'다. 배그를 켰으면 + 어느 쪽을 먼저 눌렀든 '눕혔다'가 나와야 한다. + """ + for order in (["fps-common", "pubg"], ["pubg", "fps-common"]): + _, repl = build_glossary(Glossary(), order).protect("knocked", "ko") + assert repl == ["눕혔다"], f"{order} 에서 순서에 휘둘림" + + +def test_resolve_packs_puts_generic_first(): + order = [p.key for p in resolve_packs(["pubg", "fps-common", "overwatch", "streaming"])] + assert order.index("fps-common") < order.index("pubg") + assert order.index("streaming") < order.index("overwatch") + + +def test_user_entry_still_beats_everything(): + user = Glossary([GlossaryEntry("knocked", {"ko": "쓰러짐"})]) + _, repl = build_glossary(user, ["fps-common", "pubg"]).protect("knocked", "ko") + assert repl == ["쓰러짐"] + + +# --- 충돌 감지 --------------------------------------------------------------- + + +def test_conflicts_detected_between_game_packs(): + conflicts = find_conflicts(["overwatch", "watchdogs"]) + assert "payload" in conflicts + assert {t for _, t in conflicts["payload"]} == {"화물", "페이로드"} + + +def test_generic_vs_game_is_not_reported_as_conflict(): + """범용은 게임 팩에 확실히 지므로 사용자가 판단할 일이 없다.""" + assert "knocked" not in find_conflicts(["fps-common", "pubg"]) + + +def test_single_game_pack_has_no_conflicts(): + assert find_conflicts(["pubg", "fps-common", "streaming"]) == {} + + +def test_default_enabled_packs_cover_required_games(): + from livesub.config import AppConfig + + enabled = set(AppConfig().glossary.enabled_packs) + assert enabled >= REQUIRED_GAMES, f"기본값에서 빠진 필수 게임: {REQUIRED_GAMES - enabled}" + + +def test_default_enabled_packs_all_exist(): + from livesub.config import AppConfig + + keys = {p.key for p in available_packs()} + assert set(AppConfig().glossary.enabled_packs) <= keys + + +def test_default_enabled_packs_actually_translate(): + from livesub.config import AppConfig + + cfg = AppConfig() + merged = build_glossary(Glossary(), cfg.glossary.enabled_packs) + _, repl = merged.protect("DedSec hacked the ctOS server", "ko") + assert repl == ["데드섹", "해킹됐다", "ctOS"] + + +# --- 용어가 조각나서 두 번 치환되지 않는지 ----------------------------------- + + +def test_each_term_protects_as_a_single_unit(): + """등록된 용어를 그대로 넣으면 정확히 한 번만 치환돼야 한다. + + 조각 용어("the blue")가 더 긴 용어("blue zone")보다 앞 위치에서 먼저 + 매칭되면 "자기장 자기장" 같은 겹침이 생긴다. 최장일치 정렬은 같은 시작 + 위치에서만 통하므로, 데이터에 조각이 섞이면 이 테스트가 잡아낸다. + + 팩을 전부 켠 최악의 조합으로 검사한다. + """ + merged = build_glossary(Glossary(), [p.key for p in available_packs()]) + broken = [] + for entry in merged.entries: + _, repl = merged.protect(entry.source, "ko") + if len(repl) != 1: + broken.append((entry.source, repl)) + assert not broken, f"한 용어가 여러 조각으로 잘립니다: {broken[:5]}" + + +def test_blue_zone_is_one_replacement(): + merged = build_glossary(Glossary(), ["fps-common", "pubg"]) + protected, repl = merged.protect("head to the blue zone", "ko") + assert repl == ["자기장"], f"겹침 발생: {protected}" + assert Glossary.restore(protected, repl) == "head to the 자기장"