llm_translate 0.1.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.
@@ -0,0 +1,180 @@
1
+ # translator.yml - 翻译工具配置文件
2
+
3
+ # AI 模型配置
4
+ ai:
5
+ # API 密钥(建议使用环境变量 LLM_TRANSLATE_API_KEY)
6
+ api_key: ${LLM_TRANSLATE_API_KEY}
7
+
8
+ # 模型提供商(openai, anthropic, ollama 等)
9
+ provider: "openai"
10
+
11
+ # 模型名称
12
+ model: "gpt-4"
13
+
14
+ # 模型参数
15
+ temperature: 0.3
16
+ max_tokens: 4000
17
+ top_p: 1.0
18
+
19
+ # 请求重试配置
20
+ retry_attempts: 3
21
+ retry_delay: 2 # 秒
22
+
23
+ # 请求超时时间
24
+ timeout: 60 # 秒
25
+
26
+ # 翻译配置
27
+ translation:
28
+ # 默认翻译 prompt
29
+ default_prompt: |
30
+ 请将以下 Markdown 内容翻译为中文,保持所有格式不变:
31
+ - 保留代码块、链接、图片等 Markdown 语法
32
+ - 保留英文的专业术语和产品名称
33
+ - 确保翻译自然流畅
34
+
35
+ 内容:
36
+ {content}
37
+
38
+ # 目标语言
39
+ target_language: "zh-CN"
40
+
41
+ # 源语言(auto 为自动检测)
42
+ source_language: "auto"
43
+
44
+ # 是否保留原文格式
45
+ preserve_formatting: true
46
+
47
+ # 是否翻译代码注释
48
+ translate_code_comments: false
49
+
50
+ # 需要保留不翻译的内容模式
51
+ preserve_patterns:
52
+ - "```[\\s\\S]*?```" # 代码块
53
+ - "`[^`]+`" # 行内代码
54
+ - "\\[.*?\\]\\(.*?\\)" # 链接
55
+ - "!\\[.*?\\]\\(.*?\\)" # 图片
56
+
57
+ # 文件处理配置
58
+ files:
59
+ # 输入目录
60
+ input_directory: "./docs"
61
+
62
+ # 输出目录
63
+ output_directory: "./docs-translated"
64
+
65
+ # 文件名后缀策略
66
+ filename_strategy: "suffix" # suffix, replace, directory
67
+ filename_suffix: ".zh" # 仅当 strategy 为 suffix 时使用
68
+
69
+ # 包含的文件模式
70
+ include_patterns:
71
+ - "**/*.md"
72
+ - "**/*.markdown"
73
+
74
+ # 排除的文件模式
75
+ exclude_patterns:
76
+ - "**/node_modules/**"
77
+ - "**/.*"
78
+ - "**/*.tmp"
79
+ - "**/README.md" # 示例:排除 README 文件
80
+
81
+ # 是否保持目录结构
82
+ preserve_directory_structure: true
83
+
84
+ # 文件覆盖策略
85
+ overwrite_policy: "ask" # ask, overwrite, skip, backup
86
+
87
+ # 备份目录(当 overwrite_policy 为 backup 时)
88
+ backup_directory: "./backups"
89
+
90
+ # 日志配置
91
+ logging:
92
+ # 日志级别
93
+ level: "info" # debug, info, warn, error
94
+
95
+ # 日志输出位置
96
+ output: "console" # console, file, both
97
+
98
+ # 日志文件路径(当 output 包含 file 时)
99
+ file_path: "./logs/translator.log"
100
+
101
+ # 是否记录详细的翻译过程
102
+ verbose_translation: false
103
+
104
+ # 错误日志文件
105
+ error_log_path: "./logs/errors.log"
106
+
107
+ # 错误处理配置
108
+ error_handling:
109
+ # 遇到错误时的行为
110
+ on_error: "log_and_continue" # stop, log_and_continue, skip_file
111
+
112
+ # 最大连续错误数(超过则停止)
113
+ max_consecutive_errors: 5
114
+
115
+ # 错误重试次数
116
+ retry_on_failure: 2
117
+
118
+ # 生成错误报告
119
+ generate_error_report: true
120
+ error_report_path: "./logs/error_report.md"
121
+
122
+ # 性能配置
123
+ performance:
124
+ # 并发处理文件数
125
+ concurrent_files: 3
126
+
127
+ # 批处理大小(同时翻译的文件数)
128
+ batch_size: 5
129
+
130
+ # 请求间隔(避免 API 限流)
131
+ request_interval: 1 # 秒
132
+
133
+ # 内存使用限制
134
+ max_memory_mb: 500
135
+
136
+ # 输出配置
137
+ output:
138
+ # 是否显示进度条
139
+ show_progress: true
140
+
141
+ # 是否显示翻译统计
142
+ show_statistics: true
143
+
144
+ # 是否生成翻译报告
145
+ generate_report: true
146
+ report_path: "./reports/translation_report.md"
147
+
148
+ # 输出格式
149
+ format: "markdown" # markdown, json, yaml
150
+
151
+ # 是否保留元数据
152
+ include_metadata: true
153
+
154
+ # 预设配置(可通过 --preset 参数使用)
155
+ presets:
156
+ chinese:
157
+ translation:
158
+ target_language: "zh-CN"
159
+ default_prompt: "翻译为简体中文,保持技术术语的准确性"
160
+
161
+ japanese:
162
+ translation:
163
+ target_language: "ja"
164
+ default_prompt: "日本語に翻訳してください。技術用語は正確に保ってください"
165
+
166
+ english:
167
+ translation:
168
+ target_language: "en"
169
+ default_prompt: "Translate to English, maintaining technical accuracy"
170
+
171
+ # 自定义 Hook(高级功能)
172
+ hooks:
173
+ # 翻译前处理
174
+ pre_translation: null
175
+
176
+ # 翻译后处理
177
+ post_translation: null
178
+
179
+ # 文件处理完成后
180
+ post_file_processing: null
@@ -0,0 +1,189 @@
1
+ # llm_translate.yml - 翻译工具配置文件
2
+
3
+ # AI 模型配置
4
+ ai:
5
+ # API 密钥
6
+ api_key: xxxx
7
+
8
+ # API 主机地址
9
+ host: https://aihubmix.com
10
+
11
+ # 模型提供商
12
+ provider: "claude"
13
+
14
+ # 模型名称
15
+ model: "claude-3-7-sonnet-20250219"
16
+
17
+ # 模型参数
18
+ temperature: 0.3
19
+ max_tokens: 4000
20
+ top_p: 1.0
21
+
22
+ # 请求重试配置
23
+ retry_attempts: 3
24
+ retry_delay: 2 # 秒
25
+
26
+ # 请求超时时间
27
+ timeout: 60 # 秒
28
+
29
+ # 翻译配置
30
+ translation:
31
+ # 默认翻译 prompt
32
+ default_prompt: |
33
+ 请将以下 Markdown 内容翻译为中文,保持所有格式不变:
34
+ - 保留代码块、链接、图片等 Markdown 语法
35
+ - 保留英文的专业术语和产品名称
36
+ - 确保翻译自然流畅
37
+
38
+ 内容:
39
+ {content}
40
+
41
+ # 目标语言
42
+ target_language: "zh-CN"
43
+
44
+ # 源语言(auto 为自动检测)
45
+ source_language: "auto"
46
+
47
+ # 是否保留原文格式
48
+ preserve_formatting: true
49
+
50
+ # 是否翻译代码注释
51
+ translate_code_comments: false
52
+
53
+ # 需要保留不翻译的内容模式
54
+ preserve_patterns:
55
+ - "```[\\s\\S]*?```" # 代码块
56
+ - "`[^`]+`" # 行内代码
57
+ - "\\[.*?\\]\\(.*?\\)" # 链接
58
+ - "!\\[.*?\\]\\(.*?\\)" # 图片
59
+
60
+ # 文件处理配置
61
+ files:
62
+ # 输入目录
63
+ input_directory: "./docs"
64
+
65
+ # 输出目录
66
+ output_directory: "./docs-translated"
67
+
68
+ # 输入文件
69
+ input_file: "./README.md"
70
+
71
+ # 输出文件
72
+ output_file: "./README.zh.md"
73
+
74
+ # 文件名后缀策略
75
+ filename_strategy: "suffix" # suffix, replace, directory
76
+ filename_suffix: ".zh" # 仅当 strategy 为 suffix 时使用
77
+
78
+ # 包含的文件模式
79
+ include_patterns:
80
+ - "**/*.md"
81
+ - "**/*.markdown"
82
+
83
+ # 排除的文件模式
84
+ exclude_patterns:
85
+ - "**/node_modules/**"
86
+ - "**/.*"
87
+ - "**/*.tmp"
88
+ - "**/README.md" # 示例:排除 README 文件
89
+
90
+ # 是否保持目录结构
91
+ preserve_directory_structure: true
92
+
93
+ # 文件覆盖策略
94
+ overwrite_policy: "ask" # ask, overwrite, skip, backup
95
+
96
+ # 备份目录(当 overwrite_policy 为 backup 时)
97
+ backup_directory: "./backups"
98
+
99
+ # 日志配置
100
+ logging:
101
+ # 日志级别
102
+ level: "info" # debug, info, warn, error
103
+
104
+ # 日志输出位置
105
+ output: "console" # console, file, both
106
+
107
+ # 日志文件路径(当 output 包含 file 时)
108
+ file_path: "./logs/llm_translate.log"
109
+
110
+ # 是否记录详细的翻译过程
111
+ verbose_translation: false
112
+
113
+ # 错误日志文件
114
+ error_log_path: "./logs/errors.log"
115
+
116
+ # 错误处理配置
117
+ error_handling:
118
+ # 遇到错误时的行为
119
+ on_error: "log_and_continue" # stop, log_and_continue, skip_file
120
+
121
+ # 最大连续错误数(超过则停止)
122
+ max_consecutive_errors: 5
123
+
124
+ # 错误重试次数
125
+ retry_on_failure: 2
126
+
127
+ # 生成错误报告
128
+ generate_error_report: true
129
+ error_report_path: "./logs/error_report.md"
130
+
131
+ # 性能配置
132
+ performance:
133
+ # 并发处理文件数
134
+ concurrent_files: 3
135
+
136
+ # 批处理大小(同时翻译的文件数)
137
+ batch_size: 5
138
+
139
+ # 请求间隔(避免 API 限流)
140
+ request_interval: 1 # 秒
141
+
142
+ # 内存使用限制
143
+ max_memory_mb: 500
144
+
145
+ # 输出配置
146
+ output:
147
+ # 是否显示进度条
148
+ show_progress: true
149
+
150
+ # 是否显示翻译统计
151
+ show_statistics: true
152
+
153
+ # 是否生成翻译报告
154
+ generate_report: true
155
+ report_path: "./reports/translation_report.md"
156
+
157
+ # 输出格式
158
+ format: "markdown" # markdown, json, yaml
159
+
160
+ # 是否保留元数据
161
+ include_metadata: true
162
+
163
+ # 预设配置(可通过 --preset 参数使用)
164
+ presets:
165
+ chinese:
166
+ translation:
167
+ target_language: "zh-CN"
168
+ default_prompt: "翻译为简体中文,保持技术术语的准确性"
169
+
170
+ japanese:
171
+ translation:
172
+ target_language: "ja"
173
+ default_prompt: "日本語に翻訳してください。技術用語は正確に保ってください"
174
+
175
+ english:
176
+ translation:
177
+ target_language: "en"
178
+ default_prompt: "Translate to English, maintaining technical accuracy"
179
+
180
+ # 自定义 Hook(高级功能)
181
+ hooks:
182
+ # 翻译前处理
183
+ pre_translation: null
184
+
185
+ # 翻译后处理
186
+ post_translation: null
187
+
188
+ # 文件处理完成后
189
+ post_file_processing: null
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: llm_translate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - LlmTranslate Team
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby_llm
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.12'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.50'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.50'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.20'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.20'
83
+ description: A Ruby gem for translating Markdown files using AI while preserving formatting
84
+ email:
85
+ - tianlu1677@gmail.com
86
+ executables:
87
+ - llm_translate
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".rspec_status"
92
+ - README.md
93
+ - README.zh.md
94
+ - Rakefile
95
+ - content/changelog-1.md
96
+ - content/changelog-2.md
97
+ - content/llm_translate.yml
98
+ - content/prompt.md
99
+ - content/todo.md
100
+ - exe/llm_translate
101
+ - lib/llm_translate.rb
102
+ - lib/llm_translate/ai_client.rb
103
+ - lib/llm_translate/cli.rb
104
+ - lib/llm_translate/config.rb
105
+ - lib/llm_translate/file_finder.rb
106
+ - lib/llm_translate/logger.rb
107
+ - lib/llm_translate/translator_engine.rb
108
+ - lib/llm_translate/version.rb
109
+ - llm_translate.gemspec
110
+ - llm_translate.yml
111
+ - test_config.yml
112
+ - test_docs/sample.md
113
+ - test_docs_translated/sample.zh.md
114
+ - test_llm_translate.yml
115
+ - test_new_config.yml
116
+ homepage: https://github.com/tianlu1677/llm_translate
117
+ licenses:
118
+ - MIT
119
+ metadata:
120
+ allowed_push_host: https://rubygems.org
121
+ homepage_uri: https://github.com/tianlu1677/llm_translate
122
+ source_code_uri: https://github.com/tianlu1677/llm_translate
123
+ changelog_uri: https://github.com/tianlu1677/llm_translate/blob/main/CHANGELOG.md
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 3.1.0
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubygems_version: 3.4.10
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: AI-powered Markdown translator
143
+ test_files: []