better_translate 0.3.0 → 0.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +87 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/README.md +90 -30
- data/Rakefile +12 -0
- data/lib/better_translate/helper.rb +1 -5
- data/lib/better_translate/providers/base_provider.rb +47 -5
- data/lib/better_translate/providers/chatgpt_provider.rb +5 -5
- data/lib/better_translate/providers/gemini_provider.rb +1 -1
- data/lib/better_translate/service.rb +46 -2
- data/lib/better_translate/similarity_analyzer.rb +151 -0
- data/lib/better_translate/translator.rb +117 -37
- data/lib/better_translate/utils.rb +23 -6
- data/lib/better_translate/version.rb +1 -1
- data/lib/better_translate/writer.rb +17 -15
- data/lib/better_translate.rb +11 -8
- data/lib/generators/better_translate/analyze_generator.rb +43 -0
- data/lib/generators/better_translate/install_generator.rb +1 -1
- data/lib/generators/better_translate/templates/better_translate.rb +12 -12
- data/lib/generators/better_translate/translate_generator.rb +5 -3
- data/sig/better_translate.rbs +4 -0
- metadata +149 -24
@@ -1,17 +1,17 @@
|
|
1
1
|
BetterTranslate.configure do |config|
|
2
|
-
#
|
2
|
+
# Choose the provider to use: :chatgpt or :gemini
|
3
3
|
config.provider = :chatgpt
|
4
4
|
|
5
|
-
# API key
|
5
|
+
# API key for OpenAI
|
6
6
|
config.openai_key = ENV.fetch("OPENAI_API_KEY") { "YOUR_OPENAI_API_KEY" }
|
7
7
|
|
8
|
-
# API key
|
8
|
+
# API key for Google Gemini
|
9
9
|
config.google_gemini_key = ENV.fetch("GOOGLE_GEMINI_KEY") { "YOUR_GOOGLE_GEMINI_KEY" }
|
10
10
|
|
11
|
-
#
|
11
|
+
# Source language (for example "en" if the source file is in English)
|
12
12
|
config.source_language = "en"
|
13
13
|
|
14
|
-
#
|
14
|
+
# List of target languages (short_name and name)
|
15
15
|
config.target_languages = [
|
16
16
|
# { short_name: 'es', name: 'spagnolo' },
|
17
17
|
# { short_name: 'it', name: 'italiano' },
|
@@ -21,12 +21,12 @@ BetterTranslate.configure do |config|
|
|
21
21
|
{ short_name: "ru", name: "russian" }
|
22
22
|
]
|
23
23
|
|
24
|
-
#
|
24
|
+
# Global exclusions (paths in dot notation) to exclude for all languages
|
25
25
|
config.global_exclusions = [
|
26
26
|
"key.value"
|
27
27
|
]
|
28
28
|
|
29
|
-
#
|
29
|
+
# Language-specific exclusions
|
30
30
|
config.exclusions_per_language = {
|
31
31
|
"es" => [],
|
32
32
|
"it" => [],
|
@@ -36,14 +36,14 @@ BetterTranslate.configure do |config|
|
|
36
36
|
"ru" => []
|
37
37
|
}
|
38
38
|
|
39
|
-
#
|
39
|
+
# Input file path (e.g. en.yml)
|
40
40
|
config.input_file = Rails.root.join("config", "locales", "en.yml").to_s
|
41
41
|
|
42
|
-
#
|
42
|
+
# Output folder where translated files will be saved
|
43
43
|
config.output_folder = Rails.root.join("config", "locales", "translated").to_s
|
44
44
|
|
45
|
-
#
|
46
|
-
# - :override =>
|
47
|
-
# - :incremental =>
|
45
|
+
# Translation method:
|
46
|
+
# - :override => regenerates all translations
|
47
|
+
# - :incremental => updates only missing keys (or those that have been modified)
|
48
48
|
config.translation_method = :override
|
49
49
|
end
|
@@ -3,12 +3,14 @@ require 'rails/generators'
|
|
3
3
|
module BetterTranslate
|
4
4
|
module Generators
|
5
5
|
class TranslateGenerator < Rails::Generators::Base
|
6
|
-
desc "
|
6
|
+
desc "Starts the translation process configured in BetterTranslate"
|
7
7
|
|
8
8
|
def run_translation
|
9
|
-
|
9
|
+
message = "Starting translation with BetterTranslate..."
|
10
|
+
BetterTranslate::Utils.logger(message: message)
|
10
11
|
BetterTranslate.magic
|
11
|
-
|
12
|
+
message = "Translation completed."
|
13
|
+
BetterTranslate::Utils.logger(message: message)
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_translate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Alessio Bussolari
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
11
|
date: 2025-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: ruby-progressbar
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1.13'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1.13'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: httparty
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.21.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.21.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: zeitwerk
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,35 +80,158 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '13.0'
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.12'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.12'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.50'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.50'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.6'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.6'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop-rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2.22'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '2.22'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: yard
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.9'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.9'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: simplecov
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.22'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0.22'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: webmock
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.19'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3.19'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: vcr
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '6.1'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '6.1'
|
195
|
+
description: |
|
196
|
+
BetterTranslate is a powerful Ruby gem for translating YAML files using AI providers.
|
197
|
+
|
198
|
+
Key features:
|
199
|
+
* Multiple AI providers support (ChatGPT and Google Gemini)
|
200
|
+
* Smart translation modes (override/incremental)
|
201
|
+
* LRU caching for performance
|
202
|
+
* Precise key exclusion control
|
203
|
+
* Rails integration with generators
|
204
|
+
* Progress tracking with progress bar
|
205
|
+
* Comprehensive test coverage
|
206
|
+
|
207
|
+
Perfect for internationalizing Ruby/Rails applications with minimal effort.
|
91
208
|
email:
|
92
209
|
- alessio.bussolari@pandev.it
|
93
210
|
executables: []
|
94
211
|
extensions: []
|
95
212
|
extra_rdoc_files: []
|
96
213
|
files:
|
214
|
+
- CHANGELOG.md
|
215
|
+
- CODE_OF_CONDUCT.md
|
97
216
|
- LICENSE.txt
|
98
217
|
- README.md
|
218
|
+
- Rakefile
|
99
219
|
- lib/better_translate.rb
|
100
220
|
- lib/better_translate/helper.rb
|
101
221
|
- lib/better_translate/providers/base_provider.rb
|
102
222
|
- lib/better_translate/providers/chatgpt_provider.rb
|
103
223
|
- lib/better_translate/providers/gemini_provider.rb
|
104
224
|
- lib/better_translate/service.rb
|
225
|
+
- lib/better_translate/similarity_analyzer.rb
|
105
226
|
- lib/better_translate/translator.rb
|
106
227
|
- lib/better_translate/utils.rb
|
107
228
|
- lib/better_translate/version.rb
|
108
229
|
- lib/better_translate/writer.rb
|
230
|
+
- lib/generators/better_translate/analyze_generator.rb
|
109
231
|
- lib/generators/better_translate/install_generator.rb
|
110
232
|
- lib/generators/better_translate/templates/better_translate.rb
|
111
233
|
- lib/generators/better_translate/translate_generator.rb
|
234
|
+
- sig/better_translate.rbs
|
112
235
|
homepage: https://github.com/alessiobussolari/better_translate
|
113
236
|
licenses:
|
114
237
|
- MIT
|
@@ -118,6 +241,9 @@ metadata:
|
|
118
241
|
homepage_uri: https://github.com/alessiobussolari/better_translate
|
119
242
|
source_code_uri: https://github.com/alessiobussolari/better_translate
|
120
243
|
changelog_uri: https://github.com/alessiobussolari/better_translate/blob/main/CHANGELOG.md
|
244
|
+
bug_tracker_uri: https://github.com/alessiobussolari/better_translate/issues
|
245
|
+
documentation_uri: https://github.com/alessiobussolari/better_translate
|
246
|
+
wiki_uri: https://github.com/alessiobussolari/better_translate/wiki
|
121
247
|
post_install_message:
|
122
248
|
rdoc_options: []
|
123
249
|
require_paths:
|
@@ -136,6 +262,5 @@ requirements: []
|
|
136
262
|
rubygems_version: 3.5.11
|
137
263
|
signing_key:
|
138
264
|
specification_version: 4
|
139
|
-
summary:
|
140
|
-
and Gemini)
|
265
|
+
summary: AI-powered YAML translation with ChatGPT and Google Gemini
|
141
266
|
test_files: []
|