@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.
- package/.dockerignore +51 -0
- package/.env.example +33 -0
- package/.github/workflows/docs-pages.yml +57 -0
- package/.github/workflows/release.yml +49 -0
- package/.translaterc.json +44 -0
- package/CLAUDE.md +243 -0
- package/Dockerfile +55 -0
- package/README.md +371 -0
- package/RFC.md +1595 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +4494 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +1152 -0
- package/dist/index.js +3841 -0
- package/dist/index.js.map +1 -0
- package/docker-compose.yml +56 -0
- package/docs/.vitepress/config.ts +161 -0
- package/docs/api/agent.md +262 -0
- package/docs/api/engine.md +274 -0
- package/docs/api/index.md +171 -0
- package/docs/api/providers.md +304 -0
- package/docs/changelog.md +64 -0
- package/docs/cli/dir.md +243 -0
- package/docs/cli/file.md +213 -0
- package/docs/cli/glossary.md +273 -0
- package/docs/cli/index.md +129 -0
- package/docs/cli/init.md +158 -0
- package/docs/cli/serve.md +211 -0
- package/docs/glossary.json +235 -0
- package/docs/guide/chunking.md +272 -0
- package/docs/guide/configuration.md +139 -0
- package/docs/guide/cost-optimization.md +237 -0
- package/docs/guide/docker.md +371 -0
- package/docs/guide/getting-started.md +150 -0
- package/docs/guide/glossary.md +241 -0
- package/docs/guide/index.md +86 -0
- package/docs/guide/ollama.md +515 -0
- package/docs/guide/prompt-caching.md +221 -0
- package/docs/guide/providers.md +232 -0
- package/docs/guide/quality-control.md +206 -0
- package/docs/guide/vitepress-integration.md +265 -0
- package/docs/index.md +63 -0
- package/docs/ja/api/agent.md +262 -0
- package/docs/ja/api/engine.md +274 -0
- package/docs/ja/api/index.md +171 -0
- package/docs/ja/api/providers.md +304 -0
- package/docs/ja/changelog.md +64 -0
- package/docs/ja/cli/dir.md +243 -0
- package/docs/ja/cli/file.md +213 -0
- package/docs/ja/cli/glossary.md +273 -0
- package/docs/ja/cli/index.md +111 -0
- package/docs/ja/cli/init.md +158 -0
- package/docs/ja/guide/chunking.md +271 -0
- package/docs/ja/guide/configuration.md +139 -0
- package/docs/ja/guide/cost-optimization.md +30 -0
- package/docs/ja/guide/getting-started.md +150 -0
- package/docs/ja/guide/glossary.md +214 -0
- package/docs/ja/guide/index.md +32 -0
- package/docs/ja/guide/ollama.md +410 -0
- package/docs/ja/guide/prompt-caching.md +221 -0
- package/docs/ja/guide/providers.md +232 -0
- package/docs/ja/guide/quality-control.md +137 -0
- package/docs/ja/guide/vitepress-integration.md +265 -0
- package/docs/ja/index.md +58 -0
- package/docs/ko/api/agent.md +262 -0
- package/docs/ko/api/engine.md +274 -0
- package/docs/ko/api/index.md +171 -0
- package/docs/ko/api/providers.md +304 -0
- package/docs/ko/changelog.md +64 -0
- package/docs/ko/cli/dir.md +243 -0
- package/docs/ko/cli/file.md +213 -0
- package/docs/ko/cli/glossary.md +273 -0
- package/docs/ko/cli/index.md +111 -0
- package/docs/ko/cli/init.md +158 -0
- package/docs/ko/guide/chunking.md +271 -0
- package/docs/ko/guide/configuration.md +139 -0
- package/docs/ko/guide/cost-optimization.md +30 -0
- package/docs/ko/guide/getting-started.md +150 -0
- package/docs/ko/guide/glossary.md +214 -0
- package/docs/ko/guide/index.md +32 -0
- package/docs/ko/guide/ollama.md +410 -0
- package/docs/ko/guide/prompt-caching.md +221 -0
- package/docs/ko/guide/providers.md +232 -0
- package/docs/ko/guide/quality-control.md +137 -0
- package/docs/ko/guide/vitepress-integration.md +265 -0
- package/docs/ko/index.md +58 -0
- package/docs/zh/api/agent.md +262 -0
- package/docs/zh/api/engine.md +274 -0
- package/docs/zh/api/index.md +171 -0
- package/docs/zh/api/providers.md +304 -0
- package/docs/zh/changelog.md +64 -0
- package/docs/zh/cli/dir.md +243 -0
- package/docs/zh/cli/file.md +213 -0
- package/docs/zh/cli/glossary.md +273 -0
- package/docs/zh/cli/index.md +111 -0
- package/docs/zh/cli/init.md +158 -0
- package/docs/zh/guide/chunking.md +271 -0
- package/docs/zh/guide/configuration.md +139 -0
- package/docs/zh/guide/cost-optimization.md +30 -0
- package/docs/zh/guide/getting-started.md +150 -0
- package/docs/zh/guide/glossary.md +214 -0
- package/docs/zh/guide/index.md +32 -0
- package/docs/zh/guide/ollama.md +410 -0
- package/docs/zh/guide/prompt-caching.md +221 -0
- package/docs/zh/guide/providers.md +232 -0
- package/docs/zh/guide/quality-control.md +137 -0
- package/docs/zh/guide/vitepress-integration.md +265 -0
- package/docs/zh/index.md +58 -0
- package/package.json +91 -0
- package/release.config.mjs +15 -0
- package/schemas/glossary.schema.json +110 -0
- package/src/cli/commands/dir.ts +469 -0
- package/src/cli/commands/file.ts +291 -0
- package/src/cli/commands/glossary.ts +221 -0
- package/src/cli/commands/init.ts +68 -0
- package/src/cli/commands/serve.ts +60 -0
- package/src/cli/index.ts +64 -0
- package/src/cli/options.ts +59 -0
- package/src/core/agent.ts +1119 -0
- package/src/core/chunker.ts +391 -0
- package/src/core/engine.ts +634 -0
- package/src/errors.ts +188 -0
- package/src/index.ts +147 -0
- package/src/integrations/vitepress.ts +549 -0
- package/src/parsers/markdown.ts +383 -0
- package/src/providers/claude.ts +259 -0
- package/src/providers/interface.ts +109 -0
- package/src/providers/ollama.ts +379 -0
- package/src/providers/openai.ts +308 -0
- package/src/providers/registry.ts +153 -0
- package/src/server/index.ts +152 -0
- package/src/server/middleware/auth.ts +93 -0
- package/src/server/middleware/logger.ts +90 -0
- package/src/server/routes/health.ts +84 -0
- package/src/server/routes/translate.ts +210 -0
- package/src/server/types.ts +138 -0
- package/src/services/cache.ts +899 -0
- package/src/services/config.ts +217 -0
- package/src/services/glossary.ts +247 -0
- package/src/types/analysis.ts +164 -0
- package/src/types/index.ts +265 -0
- package/src/types/modes.ts +121 -0
- package/src/types/mqm.ts +157 -0
- package/src/utils/logger.ts +141 -0
- package/src/utils/tokens.ts +116 -0
- package/tests/fixtures/glossaries/ml-glossary.json +53 -0
- package/tests/fixtures/input/lynq-installation.ko.md +350 -0
- package/tests/fixtures/input/lynq-installation.md +350 -0
- package/tests/fixtures/input/simple.ko.md +27 -0
- package/tests/fixtures/input/simple.md +27 -0
- package/tests/unit/chunker.test.ts +229 -0
- package/tests/unit/glossary.test.ts +146 -0
- package/tests/unit/markdown.test.ts +205 -0
- package/tests/unit/tokens.test.ts +81 -0
- package/tsconfig.json +28 -0
- package/tsup.config.ts +34 -0
- package/vitest.config.ts +16 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# プロバイダー
|
|
2
|
+
|
|
3
|
+
::: info 翻訳について
|
|
4
|
+
英語以外のドキュメントはすべてClaude Sonnet 4を使用して自動翻訳されています。
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
llm-translateは複数のLLMプロバイダーをサポートしています。それぞれ異なる強みとトレードオフがあります。
|
|
8
|
+
|
|
9
|
+
## サポートされているプロバイダー
|
|
10
|
+
|
|
11
|
+
| プロバイダー | キャッシング | 最適な用途 | セットアップの複雑さ |
|
|
12
|
+
|----------|---------|----------|------------------|
|
|
13
|
+
| Claude | フル | 品質 + コスト | 簡単 |
|
|
14
|
+
| OpenAI | 自動 | エコシステム | 簡単 |
|
|
15
|
+
| Ollama | なし | プライバシー/オフライン | 中程度 |
|
|
16
|
+
|
|
17
|
+
## Claude(推奨)
|
|
18
|
+
|
|
19
|
+
### なぜClaudeなのか?
|
|
20
|
+
|
|
21
|
+
- **プロンプトキャッシング**: 最大90%のコスト削減
|
|
22
|
+
- **高品質**: 優れた翻訳精度
|
|
23
|
+
- **長いコンテキスト**: 200Kトークンのコンテキストウィンドウ
|
|
24
|
+
- **複数のティア**: Haiku(高速)、Sonnet(バランス)、Opus(最高品質)
|
|
25
|
+
|
|
26
|
+
### セットアップ
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
export ANTHROPIC_API_KEY=sk-ant-xxxxx
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### モデル選択
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Fast and cheap (default)
|
|
36
|
+
llm-translate file doc.md --target ko --model claude-haiku-4-5-20251001
|
|
37
|
+
|
|
38
|
+
# Balanced quality/cost
|
|
39
|
+
llm-translate file doc.md --target ko --model claude-sonnet-4-5-20250929
|
|
40
|
+
|
|
41
|
+
# Highest quality
|
|
42
|
+
llm-translate file doc.md --target ko --model claude-opus-4-5-20251101
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 各モデルの使い分け
|
|
46
|
+
|
|
47
|
+
| モデル | 使用例 |
|
|
48
|
+
|-------|----------|
|
|
49
|
+
| Haiku | READMEファイル、シンプルなドキュメント、大量処理 |
|
|
50
|
+
| Sonnet | 技術文書、APIリファレンス |
|
|
51
|
+
| Opus | 法的文書、マーケティング、ニュアンスが重要なコンテンツ |
|
|
52
|
+
|
|
53
|
+
## OpenAI
|
|
54
|
+
|
|
55
|
+
### セットアップ
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
export OPENAI_API_KEY=sk-xxxxx
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 使用方法
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
llm-translate file doc.md --target ko --provider openai --model gpt-4o
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 利用可能なモデル
|
|
68
|
+
|
|
69
|
+
| モデル | 速度 | 品質 | コスト |
|
|
70
|
+
|-------|-------|---------|------|
|
|
71
|
+
| gpt-4o-mini | 高速 | 良好 | 非常に低い |
|
|
72
|
+
| gpt-4o | 中程度 | 優秀 | 中程度 |
|
|
73
|
+
| gpt-4-turbo | 中程度 | 優秀 | 高い |
|
|
74
|
+
|
|
75
|
+
### 使用する場面
|
|
76
|
+
|
|
77
|
+
- 他のサービスでOpenAIを既に使用している場合
|
|
78
|
+
- 特定のOpenAI機能が必要な場合
|
|
79
|
+
- Azure OpenAIを希望する場合(カスタムbaseUrlを設定)
|
|
80
|
+
|
|
81
|
+
## Ollama
|
|
82
|
+
|
|
83
|
+
プライバシーやオフライン使用のためのローカル、セルフホスト型LLMです。APIキーは不要です。
|
|
84
|
+
|
|
85
|
+
::: warning モデルによって品質が異なります
|
|
86
|
+
Ollamaの翻訳品質は**モデル選択に大きく依存します**。信頼できる翻訳結果を得るには:
|
|
87
|
+
|
|
88
|
+
- **最小要件**: 14B+パラメータモデル(例:`qwen2.5:14b ` 、`llama3.1:14b`)
|
|
89
|
+
- **推奨**: 32B+モデル(例:`qwen2.5:32b ` 、`llama3.3:70b`)
|
|
90
|
+
- **非推奨**: 7B未満のモデルは一貫性がなく、しばしば使用できない翻訳を生成します
|
|
91
|
+
|
|
92
|
+
小さなモデル(3B、7B)はシンプルなコンテンツでは動作する可能性がありますが、技術文書では頻繁に失敗し、不完全な出力を生成したり、フォーマット指示を無視したりします。
|
|
93
|
+
:::
|
|
94
|
+
|
|
95
|
+
### クイックセットアップ
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# 1. Install (macOS)
|
|
99
|
+
brew install ollama
|
|
100
|
+
|
|
101
|
+
# 2. Pull qwen2.5:14b (recommended)
|
|
102
|
+
ollama pull qwen2.5:14b
|
|
103
|
+
|
|
104
|
+
# 3. Translate
|
|
105
|
+
llm-translate file doc.md -s en -t ko --provider ollama --model qwen2.5:14b
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 推奨モデル
|
|
109
|
+
|
|
110
|
+
| モデル | RAM | 品質 | 最適な用途 |
|
|
111
|
+
|-------|-----|---------|----------|
|
|
112
|
+
|`qwen2.5:14b`| 16GB | 非常に良好 | **最適なバランス(推奨)** |
|
|
113
|
+
|`qwen2.5:32b`| 32GB | 優秀 | より高い品質 |
|
|
114
|
+
|`llama3.1:8b`| 8GB | 良好 | 軽量 |
|
|
115
|
+
|`llama3.2`| 4GB | 普通 | シンプルなコンテンツのみ |
|
|
116
|
+
|
|
117
|
+
### 使用する場面
|
|
118
|
+
|
|
119
|
+
- 機密/プライベートドキュメント
|
|
120
|
+
- オフライン環境
|
|
121
|
+
- コスト最適化(API料金なし)
|
|
122
|
+
- シンプルから中程度の複雑さのコンテンツ
|
|
123
|
+
|
|
124
|
+
::: tip 完全ガイド
|
|
125
|
+
完全なセットアップ手順、GPU最適化、トラブルシューティング、高度な設定については、[Ollamaを使用したローカル翻訳](./ollama)をご覧ください。
|
|
126
|
+
:::
|
|
127
|
+
|
|
128
|
+
## プロバイダー比較
|
|
129
|
+
|
|
130
|
+
### 品質
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
Opus > Sonnet ≈ GPT-4o > Haiku ≈ GPT-4o-mini > Qwen2.5:32b > Qwen2.5:14b
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### コスト(100万トークンあたり)
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
Ollama ($0) < GPT-4o-mini ($0.15) < Haiku ($1) < GPT-4o ($2.5) < Sonnet ($3) < Opus ($15)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 速度
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
Haiku ≈ GPT-4o-mini > Sonnet ≈ GPT-4o > Opus > Ollama (varies with hardware)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## プロバイダーの切り替え
|
|
149
|
+
|
|
150
|
+
### CLI
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Different providers
|
|
154
|
+
llm-translate file doc.md -s en -t ko --provider claude
|
|
155
|
+
llm-translate file doc.md -s en -t ko --provider openai
|
|
156
|
+
llm-translate file doc.md -s en -t ko --provider ollama
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 設定ファイル
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"provider": {
|
|
164
|
+
"name": "openai",
|
|
165
|
+
"model": "gpt-4o"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### プログラム的
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
import {
|
|
174
|
+
createClaudeProvider,
|
|
175
|
+
createOpenAIProvider,
|
|
176
|
+
createOllamaProvider,
|
|
177
|
+
TranslationEngine,
|
|
178
|
+
} from '@llm-translate/cli';
|
|
179
|
+
|
|
180
|
+
// Switch providers easily
|
|
181
|
+
const providers = {
|
|
182
|
+
claude: createClaudeProvider(),
|
|
183
|
+
openai: createOpenAIProvider(),
|
|
184
|
+
ollama: createOllamaProvider(),
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const engine = new TranslationEngine({
|
|
188
|
+
provider: providers[selectedProvider],
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## フォールバック設定
|
|
193
|
+
|
|
194
|
+
信頼性のためにフォールバックプロバイダーを設定します:
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"provider": {
|
|
199
|
+
"name": "claude",
|
|
200
|
+
"model": "claude-haiku-4-5-20251001",
|
|
201
|
+
"fallback": [
|
|
202
|
+
{ "name": "openai", "model": "gpt-4o-mini" },
|
|
203
|
+
{ "name": "ollama", "model": "llama3.1" }
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## カスタムエンドポイント
|
|
210
|
+
|
|
211
|
+
### Azure OpenAI
|
|
212
|
+
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"provider": {
|
|
216
|
+
"name": "openai",
|
|
217
|
+
"baseUrl": "https://your-resource.openai.azure.com",
|
|
218
|
+
"apiKey": "your-azure-key"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### セルフホスト
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{
|
|
227
|
+
"provider": {
|
|
228
|
+
"name": "ollama",
|
|
229
|
+
"baseUrl": "https://your-server.com:11434"
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# 品質管理
|
|
2
|
+
|
|
3
|
+
::: info 翻訳について
|
|
4
|
+
英語以外のドキュメントはすべてClaude Sonnet 4を使用して自動翻訳されています。
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
llm-translateはSelf-Refineアルゴリズムを使用して、翻訳品質がお客様の要件を満たすことを保証します。
|
|
8
|
+
|
|
9
|
+
## Self-Refineの仕組み
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌─────────────────┐
|
|
13
|
+
│ Initial Translate│
|
|
14
|
+
└────────┬────────┘
|
|
15
|
+
▼
|
|
16
|
+
┌─────────────────┐
|
|
17
|
+
│ Evaluate Quality │◀──────────────┐
|
|
18
|
+
└────────┬────────┘ │
|
|
19
|
+
▼ │
|
|
20
|
+
Score >= Threshold? │
|
|
21
|
+
│ │
|
|
22
|
+
No │ Yes │
|
|
23
|
+
│ │ │
|
|
24
|
+
▼ ▼ │
|
|
25
|
+
┌─────────┐ ┌──────┐ │
|
|
26
|
+
│ Reflect │ │ Done │ │
|
|
27
|
+
└────┬────┘ └──────┘ │
|
|
28
|
+
▼ │
|
|
29
|
+
┌─────────────────┐ │
|
|
30
|
+
│ Improve │───────────────┘
|
|
31
|
+
└─────────────────┘
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 1. 初期翻訳
|
|
35
|
+
|
|
36
|
+
最初の翻訳は以下の要素で生成されます:
|
|
37
|
+
- 完全な用語集コンテキスト
|
|
38
|
+
- ドキュメント構造情報
|
|
39
|
+
- 前のチャンクのコンテキスト(継続性のため)
|
|
40
|
+
|
|
41
|
+
### 2. 品質評価
|
|
42
|
+
|
|
43
|
+
各翻訳は4つの基準で評価されます:
|
|
44
|
+
|
|
45
|
+
| 基準 | 重み | 説明 |
|
|
46
|
+
|-----------|--------|-------------|
|
|
47
|
+
| 意味的正確性 | 40% | 正しい意味を伝えているか? |
|
|
48
|
+
| 流暢性 | 25% | 対象言語で自然に読めるか? |
|
|
49
|
+
| 用語集準拠 | 20% | すべての用語集の用語が正しく適用されているか? |
|
|
50
|
+
| 形式保持 | 15% | Markdown/HTML構造が維持されているか? |
|
|
51
|
+
|
|
52
|
+
### 3. 振り返り
|
|
53
|
+
|
|
54
|
+
品質がしきい値を下回る場合、LLMは以下を分析します:
|
|
55
|
+
- 具体的にどのような問題が存在するか
|
|
56
|
+
- どの用語集の用語が見落とされたか
|
|
57
|
+
- 流暢性をどこで改善できるか
|
|
58
|
+
|
|
59
|
+
### 4. 改善
|
|
60
|
+
|
|
61
|
+
振り返りフィードバックに基づいて対象を絞った修正が適用され、その後サイクルが繰り返されます。
|
|
62
|
+
|
|
63
|
+
## 設定
|
|
64
|
+
|
|
65
|
+
### 品質しきい値
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# CLI
|
|
69
|
+
llm-translate file doc.md -o doc.ko.md -s en -t ko --quality 90
|
|
70
|
+
|
|
71
|
+
# Config file
|
|
72
|
+
{
|
|
73
|
+
"translation": {
|
|
74
|
+
"qualityThreshold": 90
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 最大反復回数
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# CLI
|
|
83
|
+
llm-translate file doc.md -o doc.ko.md -s en -t ko --max-iterations 6
|
|
84
|
+
|
|
85
|
+
# Config file
|
|
86
|
+
{
|
|
87
|
+
"translation": {
|
|
88
|
+
"maxIterations": 6
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 厳格モード
|
|
94
|
+
|
|
95
|
+
品質しきい値が満たされない場合は失敗します:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
llm-translate file doc.md -o doc.ko.md -s en -t ko --strict-quality
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
終了コード:
|
|
102
|
+
-`0`- 成功
|
|
103
|
+
-`4`- 品質しきい値が満たされない(厳格モード)
|
|
104
|
+
|
|
105
|
+
## 品質スコアの解釈
|
|
106
|
+
|
|
107
|
+
| スコア | 品質レベル | 説明 |
|
|
108
|
+
|-------|--------------|-------------|
|
|
109
|
+
| 95-100 | 優秀 | 公開準備完了 |
|
|
110
|
+
| 85-94 | 良好 | 軽微な問題、ほとんどの用途で許容可能 |
|
|
111
|
+
| 75-84 | 普通 | 目立つ問題、レビューが必要な場合がある |
|
|
112
|
+
| 60-74 | 不良 | 重大な問題、手動レビューが必要 |
|
|
113
|
+
| < 60 | 受け入れ不可 | 重大な問題、再翻訳を検討 |
|
|
114
|
+
|
|
115
|
+
## 出力の理解
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
✓ Translation complete
|
|
119
|
+
Quality: 92/85 (threshold met)
|
|
120
|
+
Breakdown:
|
|
121
|
+
- Accuracy: 38/40
|
|
122
|
+
- Fluency: 24/25
|
|
123
|
+
- Glossary: 18/20
|
|
124
|
+
- Format: 12/15
|
|
125
|
+
Iterations: 2
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 詳細分析
|
|
129
|
+
|
|
130
|
+
- **正確性 (38/40)**: 翻訳は意味的に正しい
|
|
131
|
+
- **流暢性 (24/25)**: 対象言語で自然に読める
|
|
132
|
+
- **用語集 (18/20)**: ほとんどの用語が適用されているが、一部にバリエーションがある
|
|
133
|
+
- **形式 (12/15)**: 軽微な形式調整が必要
|
|
134
|
+
|
|
135
|
+
## 品質の調整
|
|
136
|
+
|
|
137
|
+
### より高い品質のために
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# VitePress統合
|
|
2
|
+
|
|
3
|
+
::: info 翻訳について
|
|
4
|
+
英語以外のドキュメントはすべてClaude Sonnet 4を使用して自動翻訳されています。
|
|
5
|
+
:::
|
|
6
|
+
|
|
7
|
+
llm-translateは、翻訳されたドキュメント構造に基づいてVitePress i18n設定を自動生成するヘルパー関数を提供します。
|
|
8
|
+
|
|
9
|
+
## 概要
|
|
10
|
+
|
|
11
|
+
`llm-translate dir` でドキュメントを翻訳した後、組み込みのVitePressヘルパーを使用して、各ロケールのナビゲーションとサイドバー設定を自動生成できます。
|
|
12
|
+
|
|
13
|
+
## インストール
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @llm-translate/cli
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 基本的な使用方法
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// docs/.vitepress/config.ts
|
|
23
|
+
import { defineConfig } from 'vitepress';
|
|
24
|
+
import { fileURLToPath } from 'node:url';
|
|
25
|
+
import { dirname, resolve } from 'node:path';
|
|
26
|
+
import { generateLocaleConfig } from '@llm-translate/cli';
|
|
27
|
+
|
|
28
|
+
// Get docs directory path relative to this config file
|
|
29
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
30
|
+
const docsDir = resolve(__dirname, '..');
|
|
31
|
+
|
|
32
|
+
const locales = generateLocaleConfig(docsDir, {
|
|
33
|
+
defaultLocale: 'en',
|
|
34
|
+
locales: ['ko', 'ja'],
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export default defineConfig({
|
|
38
|
+
title: 'My Project',
|
|
39
|
+
locales,
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
::: tip 絶対パスを使用する理由
|
|
44
|
+
VitePress設定はプロジェクトルートから実行されるため、 `'./docs'` のような相対パスは正しく解決されない場合があります。 `import.meta.url` を使用することで、設定ファイルの場所を基準としたパスが確実に計算されます。
|
|
45
|
+
:::
|
|
46
|
+
|
|
47
|
+
これにより以下が実行されます:
|
|
48
|
+
1. `./docs` ディレクトリ構造をスキャン
|
|
49
|
+
2. サイドバーディレクトリ(guide、api、cliなど)を自動検出
|
|
50
|
+
3. 各ロケールのnavとsidebarを生成
|
|
51
|
+
4. UI要素にデフォルト翻訳を適用
|
|
52
|
+
|
|
53
|
+
## 設定オプション
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
interface GenerateOptions {
|
|
57
|
+
/** Default locale code (e.g., 'en') - defaults to 'en' */
|
|
58
|
+
defaultLocale?: string;
|
|
59
|
+
|
|
60
|
+
/** List of locale codes to generate (auto-detected if omitted) */
|
|
61
|
+
locales?: string[];
|
|
62
|
+
|
|
63
|
+
/** Locale display labels */
|
|
64
|
+
labels?: Record<string, string>;
|
|
65
|
+
|
|
66
|
+
/** Locale lang codes for HTML */
|
|
67
|
+
langCodes?: Record<string, string>;
|
|
68
|
+
|
|
69
|
+
/** Locale descriptions */
|
|
70
|
+
descriptions?: Record<string, string>;
|
|
71
|
+
|
|
72
|
+
/** Directories to include in sidebar (auto-detected if omitted) */
|
|
73
|
+
sidebarDirs?: string[];
|
|
74
|
+
|
|
75
|
+
/** Use title from file's first heading (default: true) */
|
|
76
|
+
useTitleFromHeading?: boolean;
|
|
77
|
+
|
|
78
|
+
/** Custom locale translations */
|
|
79
|
+
translations?: Record<string, LocaleTranslations>;
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 例
|
|
84
|
+
|
|
85
|
+
### ロケールの自動検出
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { generateLocaleConfig, detectLocales } from '@llm-translate/cli';
|
|
89
|
+
|
|
90
|
+
// Automatically detect locales from directory structure
|
|
91
|
+
// (looks for 2-letter directories like 'ko', 'ja', 'zh')
|
|
92
|
+
const locales = generateLocaleConfig('./docs');
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### カスタムラベルと説明
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
const locales = generateLocaleConfig('./docs', {
|
|
99
|
+
defaultLocale: 'en',
|
|
100
|
+
locales: ['ko', 'ja'],
|
|
101
|
+
labels: {
|
|
102
|
+
en: 'English',
|
|
103
|
+
ko: '한국어',
|
|
104
|
+
ja: '日本語',
|
|
105
|
+
},
|
|
106
|
+
descriptions: {
|
|
107
|
+
en: 'Documentation for My Project',
|
|
108
|
+
ko: 'My Project 문서',
|
|
109
|
+
ja: 'My Projectのドキュメント',
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### サイドバーディレクトリの指定
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const locales = generateLocaleConfig('./docs', {
|
|
118
|
+
sidebarDirs: ['guide', 'api', 'examples'],
|
|
119
|
+
});
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### カスタム翻訳
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
const locales = generateLocaleConfig('./docs', {
|
|
126
|
+
translations: {
|
|
127
|
+
ko: {
|
|
128
|
+
editLinkText: 'GitHub에서 편집',
|
|
129
|
+
docFooter: { prev: '이전', next: '다음' },
|
|
130
|
+
outline: { label: '목차' },
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## サイドバーのみの生成
|
|
137
|
+
|
|
138
|
+
navを手動で設定し、sidebarのみを自動生成したい場合:
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
import { defineConfig } from 'vitepress';
|
|
142
|
+
import { generateSidebarConfig } from '@llm-translate/cli';
|
|
143
|
+
|
|
144
|
+
const sidebars = generateSidebarConfig('./docs', {
|
|
145
|
+
defaultLocale: 'en',
|
|
146
|
+
locales: ['ko'],
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
export default defineConfig({
|
|
150
|
+
locales: {
|
|
151
|
+
root: {
|
|
152
|
+
label: 'English',
|
|
153
|
+
themeConfig: {
|
|
154
|
+
nav: [/* custom nav */],
|
|
155
|
+
sidebar: sidebars.root,
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
ko: {
|
|
159
|
+
label: '한국어',
|
|
160
|
+
themeConfig: {
|
|
161
|
+
nav: [/* custom nav */],
|
|
162
|
+
sidebar: sidebars.ko,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 単一ロケールの生成
|
|
170
|
+
|
|
171
|
+
単一ロケールの設定を生成:
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
import { generateLocale } from '@llm-translate/cli';
|
|
175
|
+
|
|
176
|
+
const koConfig = generateLocale('./docs', 'ko', {
|
|
177
|
+
defaultLocale: 'en',
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// Use in your config
|
|
181
|
+
export default defineConfig({
|
|
182
|
+
locales: {
|
|
183
|
+
ko: koConfig,
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## ユーティリティ関数
|
|
189
|
+
|
|
190
|
+
### detectLocales
|
|
191
|
+
|
|
192
|
+
ロケールディレクトリをスキャンして利用可能なロケールを自動検出:
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
import { detectLocales } from '@llm-translate/cli';
|
|
196
|
+
|
|
197
|
+
const locales = detectLocales('./docs', 'en');
|
|
198
|
+
// Returns: ['ko', 'ja', 'zh'] (based on directories found)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### detectSidebarDirs
|
|
202
|
+
|
|
203
|
+
サイドバーに表示すべきディレクトリを自動検出:
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
import { detectSidebarDirs } from '@llm-translate/cli';
|
|
207
|
+
|
|
208
|
+
const dirs = detectSidebarDirs('./docs');
|
|
209
|
+
// Returns: ['guide', 'api', 'cli'] (excludes locale dirs, assets, etc.)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## タイトル抽出
|
|
213
|
+
|
|
214
|
+
ヘルパーは以下の順序でページタイトルを抽出します:
|
|
215
|
+
1. フロントマターの `title` フィールド
|
|
216
|
+
2. ファイル内の最初の `#` 見出し
|
|
217
|
+
3. タイトルケースに変換されたファイル名
|
|
218
|
+
|
|
219
|
+
フロントマターの例:
|
|
220
|
+
```yaml
|
|
221
|
+
---
|
|
222
|
+
title: Getting Started
|
|
223
|
+
---
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## デフォルト翻訳
|
|
227
|
+
|
|
228
|
+
一般的なロケールには組み込み翻訳が提供されています:
|
|
229
|
+
|
|
230
|
+
| ロケール | ラベル | ドキュメントフッター | アウトライン |
|
|
231
|
+
|--------|-------|------------|---------|
|
|
232
|
+
| ko | 한국어 | 이전/다음 페이지 | 목차 |
|
|
233
|
+
| ja | 日本語 | 前/次のページ | 目次 |
|
|
234
|
+
| zh | 中文 | 上/下一页 | 目录 |
|
|
235
|
+
|
|
236
|
+
## ワークフロー
|
|
237
|
+
|
|
238
|
+
多言語ドキュメントの典型的なワークフロー:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# 1. Write documentation in English
|
|
242
|
+
docs/
|
|
243
|
+
guide/
|
|
244
|
+
getting-started.md
|
|
245
|
+
configuration.md
|
|
246
|
+
api/
|
|
247
|
+
index.md
|
|
248
|
+
|
|
249
|
+
# 2. Translate to Korean
|
|
250
|
+
llm-translate dir ./docs ./docs/ko --target-lang ko --glossary glossary.json
|
|
251
|
+
|
|
252
|
+
# 3. Update VitePress config to use auto-generation
|
|
253
|
+
# (see examples above)
|
|
254
|
+
|
|
255
|
+
# 4. Build and preview
|
|
256
|
+
npm run docs:build
|
|
257
|
+
npm run docs:preview
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## 注意事項
|
|
261
|
+
|
|
262
|
+
- **絶対パスを使用**:基本的な使用方法で示されているように、 `import.meta.url` を使用してdocsディレクトリパスを常に解決してください。VitePressはプロジェクトルートから実行されるため、相対パスは正しく動作しない場合があります。
|
|
263
|
+
- ロケールディレクトリは2文字コードを使用する必要があります(例:`ko ` 、`ja ` 、`zh`)
|
|
264
|
+
- ヘルパーは翻訳されたドキュメントがソース構造を反映していることを前提としています
|
|
265
|
+
- カスタムnavアイテム(外部リンク、ドロップダウン)は手動設定が必要です
|
package/docs/ja/index.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: home
|
|
3
|
+
|
|
4
|
+
hero:
|
|
5
|
+
name: llm-translate
|
|
6
|
+
text: LLMを活用した文書翻訳
|
|
7
|
+
tagline: 用語集の強制適用、品質管理、コスト最適化による文書翻訳
|
|
8
|
+
actions:
|
|
9
|
+
- theme: brand
|
|
10
|
+
text: はじめる
|
|
11
|
+
link: ./guide/getting-started
|
|
12
|
+
- theme: alt
|
|
13
|
+
text: GitHubで見る
|
|
14
|
+
link: https://github.com/selenehyun/llm-translate
|
|
15
|
+
|
|
16
|
+
features:
|
|
17
|
+
- icon: 📚
|
|
18
|
+
title: 用語集の強制適用
|
|
19
|
+
details: 誤訳されることのない強制適用される用語集により、翻訳全体で一貫した専門用語を確保します。
|
|
20
|
+
- icon: 🔄
|
|
21
|
+
title: Self-Refine品質管理
|
|
22
|
+
details: AIを活用した品質評価による反復的な翻訳改善で、品質しきい値を満たします。
|
|
23
|
+
- icon: 💰
|
|
24
|
+
title: コスト最適化
|
|
25
|
+
details: プロンプトキャッシングにより、用語集やシステムプロンプトなどの繰り返しコンテンツのAPIコストを最大90%削減します。
|
|
26
|
+
- icon: 🔌
|
|
27
|
+
title: マルチプロバイダー対応
|
|
28
|
+
details: Claude、OpenAI、Ollamaに対応。ワークフローを変更することなくプロバイダーを切り替えできます。
|
|
29
|
+
- icon: 📄
|
|
30
|
+
title: フォーマット保持
|
|
31
|
+
details: 翻訳中にMarkdownフォーマット、コードブロック、リンク、文書構造を維持します。
|
|
32
|
+
- icon: ⚡
|
|
33
|
+
title: バッチ処理
|
|
34
|
+
details: 並列処理と進捗追跡により、ディレクトリ全体を翻訳します。
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## クイックスタート
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Install globally
|
|
41
|
+
npm install -g @llm-translate/cli
|
|
42
|
+
|
|
43
|
+
# Set your API key
|
|
44
|
+
export ANTHROPIC_API_KEY=your-key-here
|
|
45
|
+
|
|
46
|
+
# Translate a file
|
|
47
|
+
llm-translate file README.md -o README.ko.md --target ko
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## なぜllm-translateなのか?
|
|
51
|
+
|
|
52
|
+
従来の翻訳ツールは技術文書で問題を抱えています:
|
|
53
|
+
|
|
54
|
+
- **一貫性のない専門用語** - 「APIエンドポイント」が毎回異なって翻訳される
|
|
55
|
+
- **壊れたフォーマット** - コードブロックやMarkdownが破損する
|
|
56
|
+
- **品質管理なし** - LLMの出力をそのまま受け入れる
|
|
57
|
+
|
|
58
|
+
llm-translateはこれらの問題を以下で解決します:
|