@llm-translate/cli 1.0.0-next.1

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.
Files changed (157) hide show
  1. package/.dockerignore +51 -0
  2. package/.env.example +33 -0
  3. package/.github/workflows/docs-pages.yml +57 -0
  4. package/.github/workflows/release.yml +49 -0
  5. package/.translaterc.json +44 -0
  6. package/CLAUDE.md +243 -0
  7. package/Dockerfile +55 -0
  8. package/README.md +371 -0
  9. package/RFC.md +1595 -0
  10. package/dist/cli/index.d.ts +2 -0
  11. package/dist/cli/index.js +4494 -0
  12. package/dist/cli/index.js.map +1 -0
  13. package/dist/index.d.ts +1152 -0
  14. package/dist/index.js +3841 -0
  15. package/dist/index.js.map +1 -0
  16. package/docker-compose.yml +56 -0
  17. package/docs/.vitepress/config.ts +161 -0
  18. package/docs/api/agent.md +262 -0
  19. package/docs/api/engine.md +274 -0
  20. package/docs/api/index.md +171 -0
  21. package/docs/api/providers.md +304 -0
  22. package/docs/changelog.md +64 -0
  23. package/docs/cli/dir.md +243 -0
  24. package/docs/cli/file.md +213 -0
  25. package/docs/cli/glossary.md +273 -0
  26. package/docs/cli/index.md +129 -0
  27. package/docs/cli/init.md +158 -0
  28. package/docs/cli/serve.md +211 -0
  29. package/docs/glossary.json +235 -0
  30. package/docs/guide/chunking.md +272 -0
  31. package/docs/guide/configuration.md +139 -0
  32. package/docs/guide/cost-optimization.md +237 -0
  33. package/docs/guide/docker.md +371 -0
  34. package/docs/guide/getting-started.md +150 -0
  35. package/docs/guide/glossary.md +241 -0
  36. package/docs/guide/index.md +86 -0
  37. package/docs/guide/ollama.md +515 -0
  38. package/docs/guide/prompt-caching.md +221 -0
  39. package/docs/guide/providers.md +232 -0
  40. package/docs/guide/quality-control.md +206 -0
  41. package/docs/guide/vitepress-integration.md +265 -0
  42. package/docs/index.md +63 -0
  43. package/docs/ja/api/agent.md +262 -0
  44. package/docs/ja/api/engine.md +274 -0
  45. package/docs/ja/api/index.md +171 -0
  46. package/docs/ja/api/providers.md +304 -0
  47. package/docs/ja/changelog.md +64 -0
  48. package/docs/ja/cli/dir.md +243 -0
  49. package/docs/ja/cli/file.md +213 -0
  50. package/docs/ja/cli/glossary.md +273 -0
  51. package/docs/ja/cli/index.md +111 -0
  52. package/docs/ja/cli/init.md +158 -0
  53. package/docs/ja/guide/chunking.md +271 -0
  54. package/docs/ja/guide/configuration.md +139 -0
  55. package/docs/ja/guide/cost-optimization.md +30 -0
  56. package/docs/ja/guide/getting-started.md +150 -0
  57. package/docs/ja/guide/glossary.md +214 -0
  58. package/docs/ja/guide/index.md +32 -0
  59. package/docs/ja/guide/ollama.md +410 -0
  60. package/docs/ja/guide/prompt-caching.md +221 -0
  61. package/docs/ja/guide/providers.md +232 -0
  62. package/docs/ja/guide/quality-control.md +137 -0
  63. package/docs/ja/guide/vitepress-integration.md +265 -0
  64. package/docs/ja/index.md +58 -0
  65. package/docs/ko/api/agent.md +262 -0
  66. package/docs/ko/api/engine.md +274 -0
  67. package/docs/ko/api/index.md +171 -0
  68. package/docs/ko/api/providers.md +304 -0
  69. package/docs/ko/changelog.md +64 -0
  70. package/docs/ko/cli/dir.md +243 -0
  71. package/docs/ko/cli/file.md +213 -0
  72. package/docs/ko/cli/glossary.md +273 -0
  73. package/docs/ko/cli/index.md +111 -0
  74. package/docs/ko/cli/init.md +158 -0
  75. package/docs/ko/guide/chunking.md +271 -0
  76. package/docs/ko/guide/configuration.md +139 -0
  77. package/docs/ko/guide/cost-optimization.md +30 -0
  78. package/docs/ko/guide/getting-started.md +150 -0
  79. package/docs/ko/guide/glossary.md +214 -0
  80. package/docs/ko/guide/index.md +32 -0
  81. package/docs/ko/guide/ollama.md +410 -0
  82. package/docs/ko/guide/prompt-caching.md +221 -0
  83. package/docs/ko/guide/providers.md +232 -0
  84. package/docs/ko/guide/quality-control.md +137 -0
  85. package/docs/ko/guide/vitepress-integration.md +265 -0
  86. package/docs/ko/index.md +58 -0
  87. package/docs/zh/api/agent.md +262 -0
  88. package/docs/zh/api/engine.md +274 -0
  89. package/docs/zh/api/index.md +171 -0
  90. package/docs/zh/api/providers.md +304 -0
  91. package/docs/zh/changelog.md +64 -0
  92. package/docs/zh/cli/dir.md +243 -0
  93. package/docs/zh/cli/file.md +213 -0
  94. package/docs/zh/cli/glossary.md +273 -0
  95. package/docs/zh/cli/index.md +111 -0
  96. package/docs/zh/cli/init.md +158 -0
  97. package/docs/zh/guide/chunking.md +271 -0
  98. package/docs/zh/guide/configuration.md +139 -0
  99. package/docs/zh/guide/cost-optimization.md +30 -0
  100. package/docs/zh/guide/getting-started.md +150 -0
  101. package/docs/zh/guide/glossary.md +214 -0
  102. package/docs/zh/guide/index.md +32 -0
  103. package/docs/zh/guide/ollama.md +410 -0
  104. package/docs/zh/guide/prompt-caching.md +221 -0
  105. package/docs/zh/guide/providers.md +232 -0
  106. package/docs/zh/guide/quality-control.md +137 -0
  107. package/docs/zh/guide/vitepress-integration.md +265 -0
  108. package/docs/zh/index.md +58 -0
  109. package/package.json +91 -0
  110. package/release.config.mjs +15 -0
  111. package/schemas/glossary.schema.json +110 -0
  112. package/src/cli/commands/dir.ts +469 -0
  113. package/src/cli/commands/file.ts +291 -0
  114. package/src/cli/commands/glossary.ts +221 -0
  115. package/src/cli/commands/init.ts +68 -0
  116. package/src/cli/commands/serve.ts +60 -0
  117. package/src/cli/index.ts +64 -0
  118. package/src/cli/options.ts +59 -0
  119. package/src/core/agent.ts +1119 -0
  120. package/src/core/chunker.ts +391 -0
  121. package/src/core/engine.ts +634 -0
  122. package/src/errors.ts +188 -0
  123. package/src/index.ts +147 -0
  124. package/src/integrations/vitepress.ts +549 -0
  125. package/src/parsers/markdown.ts +383 -0
  126. package/src/providers/claude.ts +259 -0
  127. package/src/providers/interface.ts +109 -0
  128. package/src/providers/ollama.ts +379 -0
  129. package/src/providers/openai.ts +308 -0
  130. package/src/providers/registry.ts +153 -0
  131. package/src/server/index.ts +152 -0
  132. package/src/server/middleware/auth.ts +93 -0
  133. package/src/server/middleware/logger.ts +90 -0
  134. package/src/server/routes/health.ts +84 -0
  135. package/src/server/routes/translate.ts +210 -0
  136. package/src/server/types.ts +138 -0
  137. package/src/services/cache.ts +899 -0
  138. package/src/services/config.ts +217 -0
  139. package/src/services/glossary.ts +247 -0
  140. package/src/types/analysis.ts +164 -0
  141. package/src/types/index.ts +265 -0
  142. package/src/types/modes.ts +121 -0
  143. package/src/types/mqm.ts +157 -0
  144. package/src/utils/logger.ts +141 -0
  145. package/src/utils/tokens.ts +116 -0
  146. package/tests/fixtures/glossaries/ml-glossary.json +53 -0
  147. package/tests/fixtures/input/lynq-installation.ko.md +350 -0
  148. package/tests/fixtures/input/lynq-installation.md +350 -0
  149. package/tests/fixtures/input/simple.ko.md +27 -0
  150. package/tests/fixtures/input/simple.md +27 -0
  151. package/tests/unit/chunker.test.ts +229 -0
  152. package/tests/unit/glossary.test.ts +146 -0
  153. package/tests/unit/markdown.test.ts +205 -0
  154. package/tests/unit/tokens.test.ts +81 -0
  155. package/tsconfig.json +28 -0
  156. package/tsup.config.ts +34 -0
  157. package/vitest.config.ts +16 -0
@@ -0,0 +1,158 @@
1
+ # llm-translate init
2
+
3
+ ::: info Translations
4
+ All non-English documentation is automatically translated using Claude Sonnet 4.
5
+ :::
6
+
7
+ Initialize configuration file for your project.
8
+
9
+ ## Synopsis
10
+
11
+ ```bash
12
+ llm-translate init [options]
13
+ ```
14
+
15
+ ## Options
16
+
17
+ | Option | Default | Description |
18
+ |--------|---------|-------------|
19
+ | `--provider`, `-p` | claude | Default provider |
20
+ | `--model`, `-m` | varies | Default model |
21
+ | `--quality` | 85 | Default quality threshold |
22
+ | `--glossary` | none | Create glossary template |
23
+ | `--force`, `-f` | false | Overwrite existing config |
24
+
25
+ ## Examples
26
+
27
+ ### Basic Initialization
28
+
29
+ ```bash
30
+ llm-translate init
31
+ ```
32
+
33
+ Creates `.translaterc.json`:
34
+
35
+ ```json
36
+ {
37
+ "provider": {
38
+ "name": "claude",
39
+ "model": "claude-haiku-4-5-20251001"
40
+ },
41
+ "translation": {
42
+ "qualityThreshold": 85,
43
+ "maxIterations": 4
44
+ },
45
+ "paths": {}
46
+ }
47
+ ```
48
+
49
+ ### With Provider
50
+
51
+ ```bash
52
+ llm-translate init --provider openai --model gpt-4o
53
+ ```
54
+
55
+ ### With Glossary Template
56
+
57
+ ```bash
58
+ llm-translate init --glossary
59
+ ```
60
+
61
+ Also creates `glossary.json`:
62
+
63
+ ```json
64
+ {
65
+ "sourceLanguage": "en",
66
+ "version": "1.0.0",
67
+ "terms": [
68
+ {
69
+ "source": "example",
70
+ "targets": {
71
+ "ko": "예시"
72
+ },
73
+ "context": "Replace with your terms"
74
+ }
75
+ ]
76
+ }
77
+ ```
78
+
79
+ ### Custom Quality
80
+
81
+ ```bash
82
+ llm-translate init --quality 95
83
+ ```
84
+
85
+ ## Interactive Mode
86
+
87
+ Without options, init runs interactively:
88
+
89
+ ```
90
+ $ llm-translate init
91
+
92
+ llm-translate Configuration Setup
93
+
94
+ ? Select provider: (Use arrow keys)
95
+ ❯ claude
96
+ openai
97
+ ollama
98
+
99
+ ? Select model: (Use arrow keys)
100
+ ❯ claude-haiku-4-5-20251001 (fast, cost-effective)
101
+ claude-sonnet-4-5-20250929 (balanced)
102
+ claude-opus-4-5-20251101 (highest quality)
103
+
104
+ ? Quality threshold: (85)
105
+ ? Create glossary template? (y/N)
106
+
107
+ ✓ Created .translaterc.json
108
+ ```
109
+
110
+ ## Output Files
111
+
112
+ ### .translaterc.json
113
+
114
+ ```json
115
+ {
116
+ "$schema": "https://llm-translate.dev/schema.json",
117
+ "provider": {
118
+ "name": "claude",
119
+ "model": "claude-haiku-4-5-20251001"
120
+ },
121
+ "translation": {
122
+ "qualityThreshold": 85,
123
+ "maxIterations": 4,
124
+ "preserveFormatting": true
125
+ },
126
+ "chunking": {
127
+ "maxTokens": 1024,
128
+ "overlapTokens": 150
129
+ },
130
+ "paths": {
131
+ "glossary": "./glossary.json",
132
+ "cache": "./.translate-cache"
133
+ }
134
+ }
135
+ ```
136
+
137
+ ### glossary.json (with --glossary)
138
+
139
+ ```json
140
+ {
141
+ "$schema": "https://llm-translate.dev/glossary-schema.json",
142
+ "sourceLanguage": "en",
143
+ "version": "1.0.0",
144
+ "description": "Project glossary",
145
+ "terms": []
146
+ }
147
+ ```
148
+
149
+ ## Overwriting Existing Config
150
+
151
+ ```bash
152
+ # Will fail if config exists
153
+ llm-translate init
154
+ # Error: .translaterc.json already exists. Use --force to overwrite.
155
+
156
+ # Force overwrite
157
+ llm-translate init --force
158
+ ```
@@ -0,0 +1,211 @@
1
+ # serve
2
+
3
+ Start the translation API server for containerized deployment.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ llm-translate serve [options]
9
+ ```
10
+
11
+ ## Description
12
+
13
+ The `serve` command starts an HTTP server that exposes the translation engine as a REST API. This is ideal for:
14
+
15
+ - Containerized deployments (Docker, Kubernetes)
16
+ - Microservice architectures
17
+ - Building translation services
18
+
19
+ ## Options
20
+
21
+ | Option | Description | Default |
22
+ |--------|-------------|---------|
23
+ | `-p, --port <number>` | Server port | `3000` (or `TRANSLATE_PORT` env) |
24
+ | `-H, --host <string>` | Host to bind | `0.0.0.0` |
25
+ | `--no-auth` | Disable API key authentication | `false` |
26
+ | `--cors` | Enable CORS for browser clients | `false` |
27
+ | `--json` | Use JSON logging format (for containers) | `false` |
28
+
29
+ ## Environment Variables
30
+
31
+ | Variable | Description |
32
+ |----------|-------------|
33
+ | `TRANSLATE_PORT` | Server port (overridden by `--port`) |
34
+ | `TRANSLATE_API_KEY` | API key for authentication |
35
+ | `ANTHROPIC_API_KEY` | Claude API key |
36
+ | `OPENAI_API_KEY` | OpenAI API key |
37
+ | `OLLAMA_BASE_URL` | Ollama server URL |
38
+
39
+ ## API Endpoints
40
+
41
+ ### POST /translate
42
+
43
+ Main translation endpoint.
44
+
45
+ **Request Headers:**
46
+ ```
47
+ Content-Type: application/json
48
+ X-API-Key: your-api-key
49
+ ```
50
+
51
+ Or use Bearer token:
52
+ ```
53
+ Authorization: Bearer your-api-key
54
+ ```
55
+
56
+ **Request Body:**
57
+ ```json
58
+ {
59
+ "content": "Hello, world!",
60
+ "sourceLang": "en",
61
+ "targetLang": "ko",
62
+ "format": "text",
63
+ "mode": "balanced",
64
+ "glossary": [
65
+ { "source": "API", "target": "API", "doNotTranslate": true }
66
+ ]
67
+ }
68
+ ```
69
+
70
+ | Field | Type | Required | Description |
71
+ |-------|------|----------|-------------|
72
+ | `content` | string | Yes | Text to translate |
73
+ | `sourceLang` | string | Yes | Source language code |
74
+ | `targetLang` | string | Yes | Target language code |
75
+ | `format` | string | No | `markdown`, `html`, or `text` (default) |
76
+ | `mode` | string | No | `fast`, `balanced` (default), or `quality` |
77
+ | `glossary` | array | No | Inline glossary terms |
78
+ | `provider` | string | No | `claude`, `openai`, or `ollama` |
79
+ | `model` | string | No | Model name |
80
+ | `qualityThreshold` | number | No | Quality threshold (0-100) |
81
+ | `maxIterations` | number | No | Max refinement iterations (1-10) |
82
+ | `context` | string | No | Additional context for translation |
83
+
84
+ **Response:**
85
+ ```json
86
+ {
87
+ "translated": "안녕하세요, 세계!",
88
+ "quality": 92,
89
+ "iterations": 2,
90
+ "tokensUsed": {
91
+ "input": 156,
92
+ "output": 48
93
+ },
94
+ "duration": 2341,
95
+ "provider": "claude",
96
+ "model": "claude-sonnet-4-20250514"
97
+ }
98
+ ```
99
+
100
+ ### GET /health
101
+
102
+ Health check endpoint for container orchestration.
103
+
104
+ **Response:**
105
+ ```json
106
+ {
107
+ "status": "healthy",
108
+ "version": "0.1.0",
109
+ "uptime": 3600,
110
+ "providers": [
111
+ { "name": "claude", "available": true },
112
+ { "name": "openai", "available": false },
113
+ { "name": "ollama", "available": true }
114
+ ]
115
+ }
116
+ ```
117
+
118
+ ### GET /health/live
119
+
120
+ Simple liveness probe.
121
+
122
+ ```json
123
+ { "status": "ok" }
124
+ ```
125
+
126
+ ### GET /health/ready
127
+
128
+ Readiness probe. Returns 503 if no providers are configured.
129
+
130
+ ```json
131
+ { "status": "ready" }
132
+ ```
133
+
134
+ ## HTTP Status Codes
135
+
136
+ | Code | Description |
137
+ |------|-------------|
138
+ | 200 | Success |
139
+ | 400 | Bad request (validation error) |
140
+ | 401 | Unauthorized (missing/invalid API key) |
141
+ | 404 | Not found |
142
+ | 422 | Unprocessable entity (quality threshold not met) |
143
+ | 429 | Too many requests (provider rate limited) |
144
+ | 500 | Internal server error |
145
+ | 502 | Bad gateway (provider error) |
146
+ | 503 | Service unavailable (no providers available) |
147
+
148
+ ## Examples
149
+
150
+ ### Start server with defaults
151
+
152
+ ```bash
153
+ export ANTHROPIC_API_KEY=sk-ant-xxxxx
154
+ llm-translate serve
155
+ ```
156
+
157
+ ### Start with custom port and CORS
158
+
159
+ ```bash
160
+ llm-translate serve --port 8080 --cors
161
+ ```
162
+
163
+ ### Start with JSON logging (for Docker)
164
+
165
+ ```bash
166
+ llm-translate serve --json
167
+ ```
168
+
169
+ ### Start without authentication (internal use only)
170
+
171
+ ```bash
172
+ llm-translate serve --no-auth
173
+ ```
174
+
175
+ ### Translate using curl
176
+
177
+ ```bash
178
+ curl -X POST http://localhost:3000/translate \
179
+ -H "Content-Type: application/json" \
180
+ -H "X-API-Key: your-api-key" \
181
+ -d '{
182
+ "content": "Hello, world!",
183
+ "sourceLang": "en",
184
+ "targetLang": "ko"
185
+ }'
186
+ ```
187
+
188
+ ## Docker Deployment
189
+
190
+ See [Docker Deployment Guide](../guide/docker) for detailed instructions.
191
+
192
+ Quick start:
193
+
194
+ ```bash
195
+ # Build image
196
+ docker build -t llm-translate .
197
+
198
+ # Run container
199
+ docker run -d \
200
+ -p 3000:3000 \
201
+ -e ANTHROPIC_API_KEY=sk-ant-xxxxx \
202
+ -e TRANSLATE_API_KEY=your-api-key \
203
+ llm-translate
204
+ ```
205
+
206
+ ## Security Considerations
207
+
208
+ 1. **Always use authentication in production** - Set `TRANSLATE_API_KEY`
209
+ 2. **Use HTTPS** - Deploy behind a reverse proxy with TLS
210
+ 3. **Rate limiting** - Consider adding rate limiting at the proxy level
211
+ 4. **Network isolation** - Run in private networks when possible
@@ -0,0 +1,235 @@
1
+ {
2
+ "$schema": "../schemas/glossary.schema.json",
3
+ "metadata": {
4
+ "name": "llm-translate-docs",
5
+ "sourceLang": "en",
6
+ "targetLangs": ["ko", "ja", "zh"],
7
+ "version": "1.0.0",
8
+ "domain": "technical-documentation"
9
+ },
10
+ "terms": [
11
+ {
12
+ "source": "Chunking",
13
+ "targets": {},
14
+ "doNotTranslate": true,
15
+ "caseSensitive": false,
16
+ "context": "Document splitting strategy for translation"
17
+ },
18
+ {
19
+ "source": "Self-Refine",
20
+ "targets": {},
21
+ "doNotTranslate": true,
22
+ "context": "Iterative quality improvement algorithm"
23
+ },
24
+ {
25
+ "source": "llm-translate",
26
+ "targets": {},
27
+ "doNotTranslate": true,
28
+ "context": "Product name"
29
+ },
30
+ {
31
+ "source": "API",
32
+ "targets": {},
33
+ "doNotTranslate": true,
34
+ "caseSensitive": true
35
+ },
36
+ {
37
+ "source": "CLI",
38
+ "targets": {},
39
+ "doNotTranslate": true,
40
+ "caseSensitive": true
41
+ },
42
+ {
43
+ "source": "LLM",
44
+ "targets": {},
45
+ "doNotTranslate": true,
46
+ "caseSensitive": true
47
+ },
48
+ {
49
+ "source": "Claude",
50
+ "targets": {},
51
+ "doNotTranslate": true
52
+ },
53
+ {
54
+ "source": "OpenAI",
55
+ "targets": {},
56
+ "doNotTranslate": true
57
+ },
58
+ {
59
+ "source": "Ollama",
60
+ "targets": {},
61
+ "doNotTranslate": true
62
+ },
63
+ {
64
+ "source": "Haiku",
65
+ "targets": {},
66
+ "doNotTranslate": true,
67
+ "context": "Claude model tier"
68
+ },
69
+ {
70
+ "source": "Sonnet",
71
+ "targets": {},
72
+ "doNotTranslate": true,
73
+ "context": "Claude model tier"
74
+ },
75
+ {
76
+ "source": "Opus",
77
+ "targets": {},
78
+ "doNotTranslate": true,
79
+ "context": "Claude model tier"
80
+ },
81
+ {
82
+ "source": "GPT-4o",
83
+ "targets": {},
84
+ "doNotTranslate": true
85
+ },
86
+ {
87
+ "source": "GPT-4o-mini",
88
+ "targets": {},
89
+ "doNotTranslate": true
90
+ },
91
+ {
92
+ "source": "prompt caching",
93
+ "targets": {
94
+ "ko": "프롬프트 캐싱",
95
+ "ja": "プロンプトキャッシング",
96
+ "zh": "提示缓存"
97
+ },
98
+ "context": "Feature to cache repeated prompt content for cost reduction"
99
+ },
100
+ {
101
+ "source": "glossary",
102
+ "targets": {
103
+ "ko": "용어집",
104
+ "ja": "用語集",
105
+ "zh": "术语表"
106
+ },
107
+ "context": "Term dictionary for consistent translation"
108
+ },
109
+ {
110
+ "source": "llm-translate file",
111
+ "targets": {},
112
+ "doNotTranslate": true,
113
+ "context": "CLI command for single file translation"
114
+ },
115
+ {
116
+ "source": "llm-translate dir",
117
+ "targets": {},
118
+ "doNotTranslate": true,
119
+ "context": "CLI command for directory batch translation"
120
+ },
121
+ {
122
+ "source": "llm-translate init",
123
+ "targets": {},
124
+ "doNotTranslate": true,
125
+ "context": "CLI command for initialization"
126
+ },
127
+ {
128
+ "source": "llm-translate glossary",
129
+ "targets": {},
130
+ "doNotTranslate": true,
131
+ "context": "CLI command for glossary management"
132
+ },
133
+ {
134
+ "source": "quality threshold",
135
+ "targets": {
136
+ "ko": "품질 임계값",
137
+ "ja": "品質しきい値",
138
+ "zh": "质量阈值"
139
+ },
140
+ "context": "Minimum quality score required for translation"
141
+ },
142
+ {
143
+ "source": "token",
144
+ "targets": {
145
+ "ko": "토큰",
146
+ "ja": "トークン",
147
+ "zh": "令牌"
148
+ },
149
+ "context": "LLM text processing unit"
150
+ },
151
+ {
152
+ "source": "chunk",
153
+ "targets": {
154
+ "ko": "청크",
155
+ "ja": "チャンク",
156
+ "zh": "分块"
157
+ },
158
+ "context": "Document segment for translation"
159
+ },
160
+ {
161
+ "source": "provider",
162
+ "targets": {
163
+ "ko": "제공자",
164
+ "ja": "プロバイダー",
165
+ "zh": "提供商"
166
+ },
167
+ "context": "LLM service provider (Claude, OpenAI, etc.)"
168
+ },
169
+ {
170
+ "source": "Markdown",
171
+ "targets": {},
172
+ "doNotTranslate": true
173
+ },
174
+ {
175
+ "source": "AST",
176
+ "targets": {},
177
+ "doNotTranslate": true,
178
+ "context": "Abstract Syntax Tree"
179
+ },
180
+ {
181
+ "source": "JSON",
182
+ "targets": {},
183
+ "doNotTranslate": true
184
+ },
185
+ {
186
+ "source": "TypeScript",
187
+ "targets": {},
188
+ "doNotTranslate": true
189
+ },
190
+ {
191
+ "source": "Node.js",
192
+ "targets": {},
193
+ "doNotTranslate": true
194
+ },
195
+ {
196
+ "source": "npm",
197
+ "targets": {},
198
+ "doNotTranslate": true
199
+ },
200
+ {
201
+ "source": "stdin",
202
+ "targets": {},
203
+ "doNotTranslate": true
204
+ },
205
+ {
206
+ "source": "stdout",
207
+ "targets": {},
208
+ "doNotTranslate": true
209
+ },
210
+ {
211
+ "source": "VitePress",
212
+ "targets": {},
213
+ "doNotTranslate": true,
214
+ "context": "Static site generator"
215
+ },
216
+ {
217
+ "source": "sidebar",
218
+ "targets": {
219
+ "ko": "사이드바",
220
+ "ja": "サイドバー",
221
+ "zh": "侧边栏"
222
+ },
223
+ "context": "Navigation panel on the side"
224
+ },
225
+ {
226
+ "source": "locale",
227
+ "targets": {
228
+ "ko": "로케일",
229
+ "ja": "ロケール",
230
+ "zh": "语言环境"
231
+ },
232
+ "context": "Language/region setting"
233
+ }
234
+ ]
235
+ }