cctrans 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.hi.md CHANGED
@@ -1,8 +1,20 @@
1
- # cctranslate
1
+ <div align="center">
2
+
3
+ # cctrans
4
+
5
+ **Claude Code को अपनी भाषा में पढ़ें — टोकन अंग्रेज़ी दर पर चुकाएँ।**
6
+
7
+ [![npm version](https://img.shields.io/npm/v/cctrans?color=cb3837&logo=npm)](https://www.npmjs.com/package/cctrans)
8
+ [![npm downloads](https://img.shields.io/npm/dm/cctrans?color=blue)](https://www.npmjs.com/package/cctrans)
9
+ [![GitHub stars](https://img.shields.io/github/stars/roy-jiang-opus/cctrans?style=flat&logo=github)](https://github.com/roy-jiang-opus/cctrans)
10
+ [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE)
11
+ [![node](https://img.shields.io/node/v/cctrans)](package.json)
2
12
 
3
13
  [English](README.md) | [简体中文](README.zh-Hans.md) | [繁體中文](README.zh-Hant.md) | [日本語](README.ja.md) | [한국어](README.ko.md) | [Русский](README.ru.md) | **हिन्दी**
4
14
 
5
- Claude Code के लिए एक **द्विभाषी ओवरले**: हर जवाब में, मूल अंग्रेज़ी पंक्ति के नीचे अनुवाद की एक पंक्ति (चीनी / जापानी / कोरियाई / रूसी / हिन्दी) — **सीधे बातचीत के अंदर**।
15
+ </div>
16
+
17
+ ---
6
18
 
7
19
  ```
8
20
  ● I will refactor the auth module to use async tokens.
@@ -11,11 +23,41 @@ Claude Code के लिए एक **द्विभाषी ओवरले**
11
23
  ↳ यह 3 फ़ाइलों को प्रभावित करता है और एक retry layer जोड़ता है।
12
24
  ```
13
25
 
14
- - **गैर-विनाशकारी**: अनुवाद केवल स्क्रीन पर दिखता है ट्रांसक्रिप्ट और मॉडल का कॉन्टेक्स्ट **शुद्ध अंग्रेज़ी में ही रहता है**, इसलिए skills, दस्तावेज़ और कोड अप्रभावित रहते हैं।
15
- - **हिस्ट्री प्रदूषित नहीं होती, मुख्य लूप के टोकन खर्च नहीं होते**: अनुवाद एक **अलग सस्ते बैकएंड** से होता है, जो आपके Claude Code सत्र से पूरी तरह बाहर है।
16
- - **एक कुंजी से टॉगल**: डिफ़ॉल्ट रूप से चालू; शुद्ध अंग्रेज़ी/कोड पढ़ना हो तो तुरंत बंद करें।
26
+ Claude Code के लिए एक **द्विभाषी ओवरले**: हर अंग्रेज़ी पंक्ति के नीचे अनुवाद की एक पंक्ति (चीनी / जापानी / कोरियाई / रूसी / हिन्दी), **सीधे बातचीत के अंदर** केवल प्रदर्शन के लिए, इसलिए ट्रांसक्रिप्ट, मॉडल का कॉन्टेक्स्ट और आपका टोकन बिल 100% अंग्रेज़ी में रहता है।
27
+
28
+ ## विशेषताएँ
29
+
30
+ - 🪞 **इनलाइन द्विभाषी प्रदर्शन** — अनुवाद जवाब की स्ट्रीमिंग के साथ हर अंग्रेज़ी पंक्ति के नीचे दिखता है
31
+ - 🧾 **गैर-विनाशकारी** — ट्रांसक्रिप्ट और मॉडल कॉन्टेक्स्ट शुद्ध अंग्रेज़ी में रहते हैं; skills, दस्तावेज़, कोड अप्रभावित
32
+ - 🆓 **मुख्य लूप के शून्य टोकन** — अनुवाद एक अलग सस्ते (मुफ़्त विकल्प सहित) बैकएंड से होता है, Claude Code सत्र से पूरी तरह बाहर
33
+ - ⌨️ **इनपुट अनुवाद (beta)** — अपनी भाषा में लिखें, मॉडल अंग्रेज़ी में काम करता है — और अंग्रेज़ी में जवाब देता है (`cctrans input on`)
34
+ - 🌏 **6 लक्ष्य भाषाएँ** — `zh-Hans` `zh-Hant` `ja` `ko` `ru` `hi`
35
+ - 🔌 **6 बैकएंड + स्वतः fallback** — OpenAI / Anthropic / DeepL / Azure / मुफ़्त Google / आपकी अपनी Claude सदस्यता
36
+ - 🔒 **कुंजी अलगाव** — API कुंजियाँ केवल chmod-600 फ़ाइल में; शेल पर्यावरण चर कभी नहीं पढ़े जाते
37
+ - 🛟 **फ़ेल-सेफ़** — कोई भी त्रुटि या टाइमआउट शुद्ध अंग्रेज़ी पर वापस आ जाता है; सत्र कभी नहीं रुकता
38
+
39
+ ## 🚀 त्वरित शुरुआत
40
+
41
+ ```bash
42
+ npm install -g cctrans && cctrans install
43
+ ```
44
+
45
+ इंस्टॉल हुक पंजीकृत करता है और सेटअप कराता है (भाषा → बैकएंड → API कुंजी → लाइव सत्यापन)। फिर **Claude Code पुनः आरंभ करें** — जवाब द्विभाषी हो जाएँगे। Claude Code के इनपुट बॉक्स में `!cctrans off` / `!cctrans on` टाइप करके कभी भी टॉगल करें (`!` CC का बिल्ट-इन bash मोड है — कोई मॉडल कॉल नहीं, कोई टोकन नहीं)।
46
+
47
+ <details>
48
+ <summary>सोर्स से इंस्टॉल</summary>
49
+
50
+ ```bash
51
+ git clone https://github.com/roy-jiang-opus/cctrans.git
52
+ cd cctrans
53
+ node bin/cctrans.js install
54
+ ```
55
+
56
+ `~/.local/bin` PATH में होना चाहिए, या alias: `alias cctrans='node /path/to/cctrans/bin/cctrans.js'`
57
+
58
+ </details>
17
59
 
18
- ## यह प्रोजेक्ट क्यों
60
+ ## 🤔 यह प्रोजेक्ट क्यों
19
61
 
20
62
  दो समस्याएँ, एक आर्किटेक्चर:
21
63
 
@@ -33,7 +75,7 @@ Claude Code के लिए एक **द्विभाषी ओवरले**
33
75
 
34
76
  स्रोतों सहित पूर्ण शोध नोट्स: [MOTIVATION.md](MOTIVATION.md)।
35
77
 
36
- ## यह कैसे काम करता है
78
+ ## ⚙️ यह कैसे काम करता है
37
79
 
38
80
  Claude Code के नेटिव **`MessageDisplay` हुक** (v2.1.152+) पर आधारित: यह हर असिस्टेंट संदेश के रेंडर होते समय सक्रिय होता है और पूर्ण टेक्स्ट खंड (`delta`) हुक को सौंपता है; हुक द्वारा लौटाया गया `displayContent` **केवल स्क्रीन प्रदर्शन को बदलता है**, संग्रहीत संदेश को कभी नहीं।
39
81
 
@@ -50,23 +92,7 @@ Claude अंग्रेज़ी स्ट्रीम करता है
50
92
 
51
93
  > CC 2.1.169 पर सत्यापित: `delta` खंड **गैर-अतिव्यापी** पूर्ण खंड हैं (संचित टेक्स्ट नहीं), सामान्य `\n` दोनों भाषाओं को अलग पंक्तियों में दिखाता है, और कोड ब्लॉक / पथ / पहले से लक्ष्य भाषा वाली पंक्तियाँ स्वतः छोड़ दी जाती हैं।
52
94
 
53
- ## इंस्टॉल
54
-
55
- ```bash
56
- npm install -g cctrans && cctrans install
57
-
58
- # from source:
59
- git clone https://github.com/roy-jiang-opus/cctranslate.git
60
- cd cctranslate
61
- node bin/cctrans.js install # हुक पंजीकृत करता है, cctrans को ~/.local/bin में लिंक करता है, फिर setup विज़ार्ड चलाता है
62
- ```
63
-
64
- फिर **Claude Code को पुनः आरंभ करें** (नया सत्र) ताकि हुक लोड हो। कोई भी संदेश भेजें — जवाब द्विभाषी हो जाएँगे।
65
-
66
- > `~/.local/bin` आपके PATH में होना चाहिए; अन्यथा alias इस्तेमाल करें:
67
- > `alias cctrans='node /path/to/cctranslate/bin/cctrans.js'`
68
-
69
- ## उपयोग
95
+ ## 🎛 कमांड
70
96
 
71
97
  | कमांड | काम |
72
98
  |-------|-----|
@@ -77,14 +103,13 @@ node bin/cctrans.js install # हुक पंजीकृत करता
77
103
  | `cctrans backends` | सभी इंजन और उनकी उपलब्धता सूचीबद्ध करें |
78
104
  | `cctrans setup` | इंटरैक्टिव विज़ार्ड: भाषा, बैकएंड, API कुंजियाँ |
79
105
  | `cctrans key [id] [value]` | `~/.cc-translate/keys.json` में API कुंजियाँ प्रबंधित करें |
80
- | `cctrans input on` / `cctrans input off` | गैर-अंग्रेज़ी इनपुट का अंग्रेज़ी अनुवाद (संदर्भ के रूप में भेजा जाता है) |
106
+ | `cctrans input on` / `cctrans input off` | **(beta)** गैर-अंग्रेज़ी इनपुट का अंग्रेज़ी अनुवाद (संदर्भ के रूप में भेजा जाता है) |
107
+ | `cctrans input threshold <n>` | इनपुट अनुवाद ट्रिगर करने वाले गैर-लैटिन वर्णों की संख्या (डिफ़ॉल्ट 4) |
81
108
  | `cctrans last [N]` | नवीनतम (या N पीछे का) जवाब टर्मिनल में अनुवाद करें |
82
109
  | `cctrans test <टेक्स्ट>` | इंजन जाँचने के लिए कोई टेक्स्ट अनुवाद करें |
83
110
  | `cctrans install` / `cctrans uninstall` | हुक पंजीकृत / हटाएँ |
84
111
 
85
- **सबसे तेज़ टॉगल**: Claude Code के इनपुट बॉक्स में सीधे `!cctrans off` या `!cctrans on` टाइप करें (`!` CC का बिल्ट-इन bash मोड है — कोई मॉडल कॉल नहीं, कोई टोकन नहीं)।
86
-
87
- ## अनुवाद बैकएंड
112
+ ## 🌐 अनुवाद बैकएंड
88
113
 
89
114
  | बैकएंड | आवश्यक | गति | गुणवत्ता | टिप्पणी |
90
115
  |--------|--------|-----|----------|---------|
@@ -101,7 +126,7 @@ API कुंजियाँ **केवल** `~/.cc-translate/keys.json` (chmod
101
126
 
102
127
  बाक़ी सेटिंग्स (बैकएंड, भाषा, मार्कर, मॉडल, Azure एंडपॉइंट) `~/.cc-translate/state.json` में हैं — `cctrans` कमांड से बदलें या फ़ाइल को सीधे संपादित करें।
103
128
 
104
- ## भाषाएँ
129
+ ## 🗣 भाषाएँ
105
130
 
106
131
  लक्ष्य भाषाएँ **CJK + रूसी + हिन्दी** हैं (गैर-लैटिन लिपियाँ, इसलिए "यह पंक्ति पहले से लक्ष्य भाषा में है" Unicode रेंज से मुफ़्त में पहचानकर छोड़ी जा सकती है):
107
132
 
@@ -116,19 +141,27 @@ cctrans lang zh-Hans # सरलीकृत चीनी (डिफ़ॉल
116
141
 
117
142
  चीनी के लिए BCP-47 **लिपि कोड** (`zh-Hans`/`zh-Hant`) इस्तेमाल होते हैं — पारंपरिक चीनी एक लिपि है, क्षेत्र नहीं; `zh-CN` / `zh-TW` उपनाम के रूप में स्वीकार्य हैं और स्वतः सामान्यीकृत होते हैं। भाषा बदलना तुरंत प्रभावी होता है (हुक हर कॉल पर स्थिति पढ़ता है); हर भाषा का कैश स्वतंत्र है।
118
143
 
119
- ## इनपुट अनुवाद
144
+ ## ⌨️ इनपुट अनुवाद (beta)
145
+
146
+ `cctrans input on` एक `UserPromptSubmit` हुक सक्षम करता है: जब प्रॉम्प्ट में पर्याप्त गैर-लैटिन वर्ण हों (डिफ़ॉल्ट 4+ — पूर्ण गिनती, इसलिए फ़ाइल पथ और आइडेंटिफ़ायर ट्रिगर को कमज़ोर नहीं करते; `cctrans input threshold <n>` से समायोजित करें), तो अंग्रेज़ी अनुवाद संदर्भ के रूप में मॉडल को संलग्न होता है जिसे वह आधिकारिक निर्देश मानता है, और मॉडल से **अंग्रेज़ी में जवाब देने** को कहा जाता है — इससे द्विभाषी ओवरले काम करता रहता है और बातचीत का संदर्भ अंत तक अंग्रेज़ी में रहता है। (CC 2.1.169 पर सत्यापित: हुक प्रॉम्प्ट को फिर से लिख नहीं सकते, इसलिए मूल इतिहास में रहता है और अंग्रेज़ी साथ में।) अंग्रेज़ी इनपुट अपरिवर्तित गुज़रता है; किसी त्रुटि पर प्रॉम्प्ट सुरक्षित रूप से ज्यों का त्यों भेजा जाता है।
120
147
 
121
- `cctrans input on` एक `UserPromptSubmit` हुक सक्षम करता है: जब आपका प्रॉम्प्ट अधिकतर गैर-अंग्रेज़ी हो, तो अंग्रेज़ी अनुवाद संदर्भ के रूप में मॉडल को संलग्न होता है जिसे वह आधिकारिक निर्देश मानता है — आप अपनी भाषा में लिखते रहें, मॉडल अंग्रेज़ी में काम करता है। (CC 2.1.169 पर सत्यापित: हुक प्रॉम्प्ट को फिर से लिख नहीं सकते, इसलिए मूल इतिहास में रहता है और अंग्रेज़ी साथ में।) अंग्रेज़ी इनपुट अपरिवर्तित गुज़रता है; किसी त्रुटि पर प्रॉम्प्ट सुरक्षित रूप से ज्यों का त्यों भेजा जाता है।
148
+ > **Beta**: अनुवाद कॉल हर गैर-अंग्रेज़ी प्रॉम्प्ट के सबमिशन को ~0.5–1.5 सेकंड रोकती है। डिफ़ॉल्ट रूप से बंद; setup विज़ार्ड एक बार पूछता है। प्रतिक्रिया [issues](https://github.com/roy-jiang-opus/cctrans/issues)
122
149
 
123
- ## व्यवहार और सीमाएँ (सत्यापित)
150
+ ## 📏 व्यवहार और सीमाएँ (सत्यापित)
124
151
 
125
152
  - हुक **स्ट्रीमिंग के दौरान** हर खंड पर सक्रिय होता है; हर खंड का अनुवाद होकर उसी जगह बदला जाता है — अनुवाद अंग्रेज़ी के साथ-साथ क्रमिक रूप से दिखता है।
126
153
  - हुक का टाइमआउट **10 सेकंड** है; यह टूल आंतरिक रूप से 9s पर गार्ड करता है। कोई भी त्रुटि / टाइमआउट / अधिक लंबाई (>9,000 वर्ण) **सुरक्षित रूप से मूल अंग्रेज़ी पर fallback** करती है — सत्र कभी नहीं अटकता।
127
154
  - हर अनुवादित पंक्ति सामग्री हैश से **कैश** होती है (`~/.cc-translate/cache`); री-पेंट और दोहराए टेक्स्ट की लागत शून्य।
128
155
  - `openai` के साथ हर खंड लगभग एक API कॉल (~$0.0001) और शुद्ध अंग्रेज़ी की तुलना में ~1s/खंड की देरी; `google` तेज़ है पर गुणवत्ता थोड़ी कम।
129
156
 
130
- ## अनइंस्टॉल
157
+ ## 🔗 जुड़े रहें
131
158
 
132
- ```bash
133
- node bin/cctrans.js uninstall # हुक हटाता है; Claude Code पुनः आरंभ करने पर प्रभावी
134
- ```
159
+ - ⭐ **Star / Watch** [github.com/roy-jiang-opus/cctrans](https://github.com/roy-jiang-opus/cctrans) — रिलीज़ अपडेट पाने के लिए
160
+ - 📦 **npm** — [npmjs.com/package/cctrans](https://www.npmjs.com/package/cctrans) · अपग्रेड: `npm update -g cctrans`
161
+ - 🗺 **रोडमैप** — [ROADMAP.md](ROADMAP.md): क्या बन चुका है, आगे क्या है
162
+ - 📚 **शोध** — [MOTIVATION.md](MOTIVATION.md): इस प्रोजेक्ट के पीछे का गैर-अंग्रेज़ी टोकन-कर डेटा
163
+ - 🐛 **Issues / भाषा अनुरोध** — [github.com/roy-jiang-opus/cctrans/issues](https://github.com/roy-jiang-opus/cctrans/issues)
164
+
165
+ ## 📄 लाइसेंस
166
+
167
+ [MIT](LICENSE) © Roy Jiang
package/README.ja.md CHANGED
@@ -1,8 +1,20 @@
1
- # cctranslate
1
+ <div align="center">
2
+
3
+ # cctrans
4
+
5
+ **Claude Code を母語で読む——トークンは英語価格のまま。**
6
+
7
+ [![npm version](https://img.shields.io/npm/v/cctrans?color=cb3837&logo=npm)](https://www.npmjs.com/package/cctrans)
8
+ [![npm downloads](https://img.shields.io/npm/dm/cctrans?color=blue)](https://www.npmjs.com/package/cctrans)
9
+ [![GitHub stars](https://img.shields.io/github/stars/roy-jiang-opus/cctrans?style=flat&logo=github)](https://github.com/roy-jiang-opus/cctrans)
10
+ [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE)
11
+ [![node](https://img.shields.io/node/v/cctrans)](package.json)
2
12
 
3
13
  [English](README.md) | [简体中文](README.zh-Hans.md) | [繁體中文](README.zh-Hant.md) | **日本語** | [한국어](README.ko.md) | [Русский](README.ru.md) | [हिन्दी](README.hi.md)
4
14
 
5
- Claude Code に**バイリンガル表示**を追加:すべての返信で、元の英語行の下に訳文(中/日/韓/露/ヒンディー)が一行ずつ、**会話の中にそのまま**表示されます。
15
+ </div>
16
+
17
+ ---
6
18
 
7
19
  ```
8
20
  ● I will refactor the auth module to use async tokens.
@@ -11,11 +23,41 @@ Claude Code に**バイリンガル表示**を追加:すべての返信で、元
11
23
  ↳ これは 3 つのファイルに影響し、リトライ層を追加します。
12
24
  ```
13
25
 
14
- - **非破壊**:画面に訳文が追加されるだけで、トランスクリプトとモデルのコンテキストは**純粋な英語のまま**——技術ドキュメント、skills、コードには一切影響しません。
15
- - **履歴を汚さない・メインループのトークンを消費しない**:翻訳は**独立した低コストのバックエンド**で実行され、Claude Code セッションとは完全に無関係です。
16
- - **ワンキーでオン/オフ**:デフォルトは常時オン;英語/コードだけ読みたいときはすぐオフにできます。
26
+ Claude Code の**バイリンガル表示オーバーレイ**:各英語行の下に訳文(中/日/韓/露/ヒンディー)が一行ずつ、**会話の中にそのまま**表示されます——表示のみなので、トランスクリプト、モデルのコンテキスト、トークン請求は 100% 英語のままです。
27
+
28
+ ## ✨ 特長
29
+
30
+ - 🪞 **インラインのバイリンガル表示** —— 訳文は返信のストリーミングと共に各英語行の下に現れます
31
+ - 🧾 **非破壊** —— トランスクリプトとモデルコンテキストは純粋な英語のまま;skills、ドキュメント、コードに影響なし
32
+ - 🆓 **メインループのトークン消費ゼロ** —— 翻訳は独立した安価な(無料もある)バックエンドで実行、Claude Code セッションの完全に外側
33
+ - ⌨️ **入力翻訳(beta)** —— 母語で入力し、モデルは英語で動き、英語で返信する(`cctrans input on`)
34
+ - 🌏 **6 つの目標言語** —— `zh-Hans` `zh-Hant` `ja` `ko` `ru` `hi`
35
+ - 🔌 **6 つのバックエンド + 自動フォールバック** —— OpenAI / Anthropic / DeepL / Azure / 無料 Google / あなたの Claude サブスクリプション
36
+ - 🔒 **キーの隔離** —— API キーは chmod-600 のファイルのみ;シェル環境変数は一切読まない
37
+ - 🛟 **フェイルセーフ** —— どんなエラーやタイムアウトも英語のみ表示にフォールバック;セッションを止めない
38
+
39
+ ## 🚀 クイックスタート
40
+
41
+ ```bash
42
+ npm install -g cctrans && cctrans install
43
+ ```
44
+
45
+ インストールがフックを登録し、セットアップを案内します(言語 → バックエンド → API キー → 即時検証)。その後 **Claude Code を再起動**——返信がバイリンガルになります。Claude Code の入力欄に `!cctrans off` / `!cctrans on` と打てばいつでも切替(`!` は CC 内蔵の bash モード——モデル呼び出しなし、トークン消費なし)。
46
+
47
+ <details>
48
+ <summary>ソースからインストール</summary>
49
+
50
+ ```bash
51
+ git clone https://github.com/roy-jiang-opus/cctrans.git
52
+ cd cctrans
53
+ node bin/cctrans.js install
54
+ ```
55
+
56
+ `~/.local/bin` が PATH に必要、またはエイリアスを:`alias cctrans='node /path/to/cctrans/bin/cctrans.js'`
57
+
58
+ </details>
17
59
 
18
- ## なぜ作ったか
60
+ ## 🤔 なぜ作ったか
19
61
 
20
62
  2 つの課題を 1 つのアーキテクチャで解決します:
21
63
 
@@ -33,7 +75,7 @@ Claude Code に**バイリンガル表示**を追加:すべての返信で、元
33
75
 
34
76
  出典付きの完全な調査ノート:[MOTIVATION.md](MOTIVATION.md)。
35
77
 
36
- ## 仕組み
78
+ ## ⚙️ 仕組み
37
79
 
38
80
  Claude Code ネイティブの **`MessageDisplay` フック**(v2.1.152+)を利用:アシスタントメッセージのレンダリング時に発火し、完成したテキスト断片(`delta`)をフックに渡します。フックが返す `displayContent` は**画面表示のみを置き換え**、保存されたメッセージは変更しません。
39
81
 
@@ -50,23 +92,7 @@ Claude が英語をストリーミング出力
50
92
 
51
93
  > CC 2.1.169 で実測済み:`delta` は**重複しない**完成済み断片(累積テキストではない)、通常の `\n` で 2 言語が別行に表示され、コードブロック/パス/既に目標言語の行は自動スキップされます。
52
94
 
53
- ## インストール
54
-
55
- ```bash
56
- npm install -g cctrans && cctrans install
57
-
58
- # from source:
59
- git clone https://github.com/roy-jiang-opus/cctranslate.git
60
- cd cctranslate
61
- node bin/cctrans.js install # フック登録・cctrans を ~/.local/bin にリンク後、setup ウィザードを実行
62
- ```
63
-
64
- その後 **Claude Code を再起動**(新セッション)してフックを読み込みます。メッセージを送ると、返信がバイリンガルになります。
65
-
66
- > `~/.local/bin` が PATH に必要;なければエイリアスを:
67
- > `alias cctrans='node /path/to/cctranslate/bin/cctrans.js'`
68
-
69
- ## 使い方
95
+ ## 🎛 コマンド
70
96
 
71
97
  | コマンド | 動作 |
72
98
  |----------|------|
@@ -77,14 +103,13 @@ node bin/cctrans.js install # フック登録・cctrans を ~/.local/bin
77
103
  | `cctrans backends` | 全エンジンと利用可否を一覧 |
78
104
  | `cctrans setup` | 対話式ウィザード:言語、バックエンド、API キー |
79
105
  | `cctrans key [id] [value]` | `~/.cc-translate/keys.json` の API キーを管理 |
80
- | `cctrans input on` / `cctrans input off` | 非英語の入力を英語に翻訳(コンテキストとして送信) |
106
+ | `cctrans input on` / `cctrans input off` | **(beta)** 非英語の入力を英語に翻訳(コンテキストとして送信) |
107
+ | `cctrans input threshold <n>` | 入力翻訳を発火させる非ラテン文字数(デフォルト 4) |
81
108
  | `cctrans last [N]` | 最新(または N 個前)の返信をターミナルに翻訳 |
82
109
  | `cctrans test <テキスト>` | テキストを翻訳してエンジンを検証 |
83
110
  | `cctrans install` / `cctrans uninstall` | フックの登録 / 削除 |
84
111
 
85
- **最速のトグル**:Claude Code の入力欄に `!cctrans off` / `!cctrans on` と直接入力(`!` は CC 内蔵の bash モード——モデル呼び出しなし、トークン消費なし)。
86
-
87
- ## 翻訳バックエンド
112
+ ## 🌐 翻訳バックエンド
88
113
 
89
114
  | バックエンド | 前提 | 速度 | 品質 | 備考 |
90
115
  |--------------|------|------|------|------|
@@ -101,7 +126,7 @@ API キーは `~/.cc-translate/keys.json`(chmod 600)**のみ**に保存されま
101
126
 
102
127
  その他の設定(バックエンド、言語、マーカー、モデル、Azure エンドポイント)は `~/.cc-translate/state.json` にあります——`cctrans` コマンドで変更するか、ファイルを直接編集してください。
103
128
 
104
- ## 多言語
129
+ ## 🗣 多言語
105
130
 
106
131
  目標言語は **CJK + ロシア語 + ヒンディー語**(非ラテン文字なので、Unicode 範囲により「この行は既に目標言語」をゼロコストで判定してスキップできます):
107
132
 
@@ -116,19 +141,27 @@ cctrans lang zh-Hans # 簡体字中国語(デフォルト)
116
141
 
117
142
  中国語は BCP-47 の**文字コード**(`zh-Hans`/`zh-Hant`)を採用——繁体字は地域ではなく文字体系です;`zh-CN` / `zh-TW` はエイリアスとして引き続き使え、自動的に正規化されます。言語切替は即座に有効(フックは呼び出しごとに状態を読む);言語ごとにキャッシュは独立しています。
118
143
 
119
- ## 入力翻訳
144
+ ## ⌨️ 入力翻訳(beta)
145
+
146
+ `cctrans input on` で `UserPromptSubmit` フックが有効になります:入力に十分な非ラテン文字が含まれる場合(デフォルト 4 文字以上——絶対数で判定するため、ファイルパスや識別子が発火条件を薄めることはありません;`cctrans input threshold <n>` で調整可)、英語訳がコンテキストとしてモデルに添付されて正規の指示として扱われ、さらにモデルに**英語で返信する**よう指示します——これによりバイリンガルオーバーレイが機能し続け、会話コンテキストは終始英語のままです。(CC 2.1.169 で検証済み:フックは prompt 自体を書き換えられないため、原文は履歴に残り英語が併記されます。)英語の入力はそのまま通過;エラー時は安全にそのまま送信されます。
120
147
 
121
- `cctrans input on` で `UserPromptSubmit` フックが有効になります:入力の大半が非英語の場合、英語訳がコンテキストとしてモデルに添付され、正規の指示として扱われます——あなたは母語で入力し続け、モデルは英語で動きます。(CC 2.1.169 で検証済み:フックは prompt 自体を書き換えられないため、原文は履歴に残り英語が併記されます。)英語の入力はそのまま通過;エラー時は安全にそのまま送信されます。
148
+ > **Beta**:翻訳呼び出しにより非英語プロンプトの送信ごとに約 0.5–1.5 秒ブロックされます。デフォルトはオフ;setup ウィザードが一度だけ確認します。フィードバック → [issues](https://github.com/roy-jiang-opus/cctrans/issues)
122
149
 
123
- ## 動作と制限(検証済み)
150
+ ## 📏 動作と制限(検証済み)
124
151
 
125
152
  - フックは**ストリーミング中**に断片ごとに発火し、断片ごとに翻訳してその場で置換——訳文は英語と並んで段階的に現れます。
126
153
  - フックのタイムアウトは **10 秒**;本ツールは内部で 9 秒のガードを持ちます。エラー/タイムアウト/超過(>9,000 文字)はすべて**元の英語に安全にフォールバック**——セッションを止めることはありません。
127
154
  - 訳文は内容ハッシュで**キャッシュ**(`~/.cc-translate/cache`);再描画や繰り返しテキストはコストゼロ。
128
155
  - `openai` 使用時は断片ごとに約 1 回の API 呼び出し(~$0.0001)、純英語より約 1 秒/断片の遅延;`google` はより速いが品質はやや低め。
129
156
 
130
- ## アンインストール
157
+ ## 🔗 プロジェクトをフォロー
131
158
 
132
- ```bash
133
- node bin/cctrans.js uninstall # フックを削除;Claude Code の再起動で反映
134
- ```
159
+ - ⭐ **Star / Watch** [github.com/roy-jiang-opus/cctrans](https://github.com/roy-jiang-opus/cctrans) でリリース更新を受け取る
160
+ - 📦 **npm** —— [npmjs.com/package/cctrans](https://www.npmjs.com/package/cctrans) · アップグレード:`npm update -g cctrans`
161
+ - 🗺 **ロードマップ** —— [ROADMAP.md](ROADMAP.md):実装済みと予定の機能
162
+ - 📚 **調査資料** —— [MOTIVATION.md](MOTIVATION.md):このプロジェクトの背景にある非英語トークン税のデータ
163
+ - 🐛 **Issue / 言語リクエスト** —— [github.com/roy-jiang-opus/cctrans/issues](https://github.com/roy-jiang-opus/cctrans/issues)
164
+
165
+ ## 📄 ライセンス
166
+
167
+ [MIT](LICENSE) © Roy Jiang
package/README.ko.md CHANGED
@@ -1,8 +1,20 @@
1
- # cctranslate
1
+ <div align="center">
2
+
3
+ # cctrans
4
+
5
+ **Claude Code를 모국어로 읽고 — 토큰은 영어 가격으로.**
6
+
7
+ [![npm version](https://img.shields.io/npm/v/cctrans?color=cb3837&logo=npm)](https://www.npmjs.com/package/cctrans)
8
+ [![npm downloads](https://img.shields.io/npm/dm/cctrans?color=blue)](https://www.npmjs.com/package/cctrans)
9
+ [![GitHub stars](https://img.shields.io/github/stars/roy-jiang-opus/cctrans?style=flat&logo=github)](https://github.com/roy-jiang-opus/cctrans)
10
+ [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE)
11
+ [![node](https://img.shields.io/node/v/cctrans)](package.json)
2
12
 
3
13
  [English](README.md) | [简体中文](README.zh-Hans.md) | [繁體中文](README.zh-Hant.md) | [日本語](README.ja.md) | **한국어** | [Русский](README.ru.md) | [हिन्दी](README.hi.md)
4
14
 
5
- Claude Code에 **이중 언어 오버레이**를 추가합니다: 모든 응답에서 원본 영어 줄 아래에 번역(중/일/한/러/힌디)이 한 줄씩, **대화 안에 그대로** 표시됩니다.
15
+ </div>
16
+
17
+ ---
6
18
 
7
19
  ```
8
20
  ● I will refactor the auth module to use async tokens.
@@ -11,11 +23,41 @@ Claude Code에 **이중 언어 오버레이**를 추가합니다: 모든 응답
11
23
  ↳ 이 작업은 3개 파일에 영향을 주고 재시도 레이어를 추가합니다.
12
24
  ```
13
25
 
14
- - **비파괴적**: 화면에 번역이 추가될 뿐, 트랜스크립트와 모델의 컨텍스트는 **순수 영어 그대로** 유지됩니다 기술 문서, skills, 코드에 전혀 영향이 없습니다.
15
- - **히스토리 오염 없음, 메인 루프 토큰 소비 없음**: 번역은 **독립적인 저비용 백엔드**에서 실행되며 Claude Code 세션과 완전히 무관합니다.
16
- - **원키 토글**: 기본은 항상 켜짐; 영어/코드만 읽고 싶을 때 즉시 끌 수 있습니다.
26
+ Claude Code의 **이중 언어 오버레이**: 영어 아래에 번역(중/일/한/러/힌디) 줄씩, **대화 안에 그대로** — 표시 전용이므로 트랜스크립트, 모델 컨텍스트, 토큰 청구는 100% 영어로 유지됩니다.
27
+
28
+ ## 특징
29
+
30
+ - 🪞 **인라인 이중 언어 표시** — 번역이 응답 스트리밍과 함께 각 영어 줄 아래에 나타납니다
31
+ - 🧾 **비파괴적** — 트랜스크립트와 모델 컨텍스트는 순수 영어 유지; skills, 문서, 코드 영향 없음
32
+ - 🆓 **메인 루프 토큰 0** — 번역은 독립적인 저비용(무료 옵션 포함) 백엔드에서 실행, Claude Code 세션 완전 외부
33
+ - ⌨️ **입력 번역 (beta)** — 모국어로 입력하고 모델은 영어로 작동하고 영어로 응답(`cctrans input on`)
34
+ - 🌏 **6개 대상 언어** — `zh-Hans` `zh-Hant` `ja` `ko` `ru` `hi`
35
+ - 🔌 **6개 백엔드 + 자동 폴백** — OpenAI / Anthropic / DeepL / Azure / 무료 Google / 내 Claude 구독
36
+ - 🔒 **키 격리** — API 키는 chmod-600 파일에만; 셸 환경 변수는 절대 읽지 않음
37
+ - 🛟 **페일세이프** — 어떤 오류나 타임아웃도 영어 표시로 폴백; 세션을 절대 막지 않음
38
+
39
+ ## 🚀 빠른 시작
40
+
41
+ ```bash
42
+ npm install -g cctrans && cctrans install
43
+ ```
44
+
45
+ 설치가 훅을 등록하고 설정을 안내합니다(언어 → 백엔드 → API 키 → 실시간 검증). 그다음 **Claude Code를 재시작** — 응답이 이중 언어가 됩니다. Claude Code 입력창에 `!cctrans off` / `!cctrans on`을 입력해 언제든 전환(`!`는 CC 내장 bash 모드 — 모델 호출 없음, 토큰 없음).
46
+
47
+ <details>
48
+ <summary>소스에서 설치</summary>
49
+
50
+ ```bash
51
+ git clone https://github.com/roy-jiang-opus/cctrans.git
52
+ cd cctrans
53
+ node bin/cctrans.js install
54
+ ```
55
+
56
+ `~/.local/bin`이 PATH에 있어야 하며, 아니면 별칭 사용: `alias cctrans='node /path/to/cctrans/bin/cctrans.js'`
57
+
58
+ </details>
17
59
 
18
- ## 왜 만들었나
60
+ ## 🤔 왜 만들었나
19
61
 
20
62
  두 가지 문제, 하나의 아키텍처:
21
63
 
@@ -33,7 +75,7 @@ Claude Code에 **이중 언어 오버레이**를 추가합니다: 모든 응답
33
75
 
34
76
  출처가 포함된 전체 조사 노트: [MOTIVATION.md](MOTIVATION.md).
35
77
 
36
- ## 작동 원리
78
+ ## ⚙️ 작동 원리
37
79
 
38
80
  Claude Code 네이티브 **`MessageDisplay` 훅**(v2.1.152+)을 활용합니다: 어시스턴트 메시지가 렌더링될 때 발화하여 완성된 텍스트 조각(`delta`)을 훅에 전달하고, 훅이 반환하는 `displayContent`는 **화면 표시만 교체**하며 저장된 메시지는 변경하지 않습니다.
39
81
 
@@ -50,23 +92,7 @@ Claude가 영어를 스트리밍 출력
50
92
 
51
93
  > CC 2.1.169에서 검증됨: `delta`는 **겹치지 않는** 완성 조각(누적 텍스트 아님)이며, 일반 `\n`으로 두 언어가 별도 줄에 표시되고, 코드 블록/경로/이미 대상 언어인 줄은 자동으로 건너뜁니다.
52
94
 
53
- ## 설치
54
-
55
- ```bash
56
- npm install -g cctrans && cctrans install
57
-
58
- # from source:
59
- git clone https://github.com/roy-jiang-opus/cctranslate.git
60
- cd cctranslate
61
- node bin/cctrans.js install # 훅 등록, cctrans를 ~/.local/bin에 링크 후 setup 마법사 실행
62
- ```
63
-
64
- 그다음 **Claude Code를 재시작**(새 세션)하여 훅을 로드합니다. 아무 메시지나 보내면 응답이 이중 언어로 표시됩니다.
65
-
66
- > `~/.local/bin`이 PATH에 있어야 합니다; 아니면 별칭을 사용하세요:
67
- > `alias cctrans='node /path/to/cctranslate/bin/cctrans.js'`
68
-
69
- ## 사용법
95
+ ## 🎛 명령
70
96
 
71
97
  | 명령 | 동작 |
72
98
  |------|------|
@@ -77,14 +103,13 @@ node bin/cctrans.js install # 훅 등록, cctrans를 ~/.local/bin에 링크
77
103
  | `cctrans backends` | 모든 엔진과 가용성 나열 |
78
104
  | `cctrans setup` | 대화형 마법사: 언어, 백엔드, API 키 |
79
105
  | `cctrans key [id] [value]` | `~/.cc-translate/keys.json`의 API 키 관리 |
80
- | `cctrans input on` / `cctrans input off` | 비영어 입력을 영어로 번역 (컨텍스트로 전송) |
106
+ | `cctrans input on` / `cctrans input off` | **(beta)** 비영어 입력을 영어로 번역 (컨텍스트로 전송) |
107
+ | `cctrans input threshold <n>` | 입력 번역을 트리거하는 비라틴 문자 수 (기본 4) |
81
108
  | `cctrans last [N]` | 최신(또는 N개 전) 응답을 터미널에 번역 |
82
109
  | `cctrans test <텍스트>` | 텍스트를 번역하여 엔진 검증 |
83
110
  | `cctrans install` / `cctrans uninstall` | 훅 등록 / 제거 |
84
111
 
85
- **가장 빠른 토글**: Claude Code 입력창에 `!cctrans off` / `!cctrans on`을 직접 입력 (`!`는 CC 내장 bash 모드 — 모델 호출 없음, 토큰 소비 없음).
86
-
87
- ## 번역 백엔드
112
+ ## 🌐 번역 백엔드
88
113
 
89
114
  | 백엔드 | 요구사항 | 속도 | 품질 | 비고 |
90
115
  |--------|----------|------|------|------|
@@ -101,7 +126,7 @@ API 키는 **오직** `~/.cc-translate/keys.json`(chmod 600)에만 저장됩니
101
126
 
102
127
  나머지 설정(백엔드, 언어, 마커, 모델, Azure 엔드포인트)은 `~/.cc-translate/state.json`에 있습니다 — `cctrans` 명령으로 변경하거나 파일을 직접 편집하세요.
103
128
 
104
- ## 다국어
129
+ ## 🗣 다국어
105
130
 
106
131
  대상 언어는 **CJK + 러시아어 + 힌디어**를 지원합니다 (비라틴 문자이므로 유니코드 범위로 "이 줄은 이미 대상 언어"를 무비용 판별하여 건너뜁니다):
107
132
 
@@ -116,19 +141,27 @@ cctrans lang zh-Hans # 간체 중국어 (기본)
116
141
 
117
142
  중국어는 BCP-47 **문자 코드**(`zh-Hans`/`zh-Hant`)를 사용합니다 — 번체는 지역이 아니라 문자 체계입니다; `zh-CN` / `zh-TW`는 별칭으로 계속 사용 가능하며 자동으로 정규화됩니다. 언어 전환은 즉시 적용됩니다 (훅이 호출마다 상태를 읽음); 언어별 캐시는 독립적입니다.
118
143
 
119
- ## 입력 번역
144
+ ## ⌨️ 입력 번역 (beta)
145
+
146
+ `cctrans input on`은 `UserPromptSubmit` 훅을 활성화합니다: 입력에 비라틴 문자가 충분히 포함되면(기본 4자 이상 — 절대 개수로 판정하므로 파일 경로나 식별자가 트리거를 희석하지 않습니다; `cctrans input threshold <n>`로 조정), 영어 번역이 컨텍스트로 모델에 첨부되어 정식 지시로 취급되고, 모델에게 **영어로 응답**하도록 요청합니다 — 이로써 이중 언어 오버레이가 계속 작동하고 대화 컨텍스트는 끝까지 영어로 유지됩니다. (CC 2.1.169에서 검증됨: 훅은 prompt 자체를 재작성할 수 없으므로 원문은 히스토리에 남고 영어가 함께 첨부됩니다.) 영어 입력은 그대로 통과; 오류 시 안전하게 원문 그대로 전송됩니다.
120
147
 
121
- `cctrans input on`은 `UserPromptSubmit` 훅을 활성화합니다: 입력이 대부분 비영어일 때 영어 번역이 컨텍스트로 모델에 첨부되어 정식 지시로 취급됩니다 — 당신은 모국어로 계속 입력하고 모델은 영어로 작동합니다. (CC 2.1.169에서 검증됨: 훅은 prompt 자체를 재작성할 없으므로 원문은 히스토리에 남고 영어가 함께 첨부됩니다.) 영어 입력은 그대로 통과; 오류 시 안전하게 원문 그대로 전송됩니다.
148
+ > **Beta**: 번역 호출로 인해 비영어 프롬프트 제출마다 0.5–1.5초 지연됩니다. 기본은 꺼짐; setup 마법사가 묻습니다. 피드백 [issues](https://github.com/roy-jiang-opus/cctrans/issues)
122
149
 
123
- ## 동작과 제한 (검증됨)
150
+ ## 📏 동작과 제한 (검증됨)
124
151
 
125
152
  - 훅은 **스트리밍 중** 조각마다 발화하며, 조각별로 번역하여 그 자리에서 교체 — 번역이 영어와 함께 점진적으로 나타납니다.
126
153
  - 훅 타임아웃은 **10초**; 이 도구는 내부적으로 9초 가드를 둡니다. 오류/타임아웃/초과(>9,000자)는 모두 **원본 영어로 안전하게 폴백** — 세션을 멈추지 않습니다.
127
154
  - 모든 번역 줄은 내용 해시로 **캐시**됩니다 (`~/.cc-translate/cache`); 다시 그리기와 반복 텍스트는 비용이 없습니다.
128
155
  - `openai` 사용 시 조각당 약 1회 API 호출(~$0.0001), 순수 영어 대비 조각당 약 1초 지연; `google`은 더 빠르지만 품질이 약간 낮습니다.
129
156
 
130
- ## 제거
157
+ ## 🔗 프로젝트 팔로우
131
158
 
132
- ```bash
133
- node bin/cctrans.js uninstall # 제거; Claude Code 재시작으로 반영
134
- ```
159
+ - ⭐ **Star / Watch** [github.com/roy-jiang-opus/cctrans](https://github.com/roy-jiang-opus/cctrans) — 릴리스 업데이트 받기
160
+ - 📦 **npm** — [npmjs.com/package/cctrans](https://www.npmjs.com/package/cctrans) · 업그레이드: `npm update -g cctrans`
161
+ - 🗺 **로드맵** — [ROADMAP.md](ROADMAP.md): 완료된 것과 예정된 것
162
+ - 📚 **리서치** — [MOTIVATION.md](MOTIVATION.md): 이 프로젝트 배경의 비영어 토큰세 데이터
163
+ - 🐛 **이슈 / 언어 요청** — [github.com/roy-jiang-opus/cctrans/issues](https://github.com/roy-jiang-opus/cctrans/issues)
164
+
165
+ ## 📄 라이선스
166
+
167
+ [MIT](LICENSE) © Roy Jiang