fastlane-plugin-translate_gpt 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e16882ee4e890369a5c14b579f362303a3196e4238d4d3b3f685a9e6b4fb21a
|
4
|
+
data.tar.gz: 59719d66698e72c02ae4c625a68a9b5fe8d7dfc34023a5c329d0625bed27b2e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23f15a4ca667b24e958ca6775cd6894dc43b85ecf3e705f4270526af2428a1e7a947824b0bbf74132dbc0fa55059edd9020f1dad10946f5e345ae2d69d7997ac
|
7
|
+
data.tar.gz: d94703743059519b4e3c17ea988a7591c8f67b981d3d38a075ed8fc801ce952509c146e3fb3f92207102680b490cefbc103f325da85c0f7c7e1c2e0281255e0b
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'fastlane_core/ui/ui'
|
2
|
-
require 'loco_strings'
|
2
|
+
require 'loco_strings/parsers/xcstrings_file'
|
3
3
|
require 'json'
|
4
|
+
# rubocop:disable all
|
4
5
|
|
5
6
|
module Fastlane
|
6
7
|
UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
|
@@ -17,14 +18,34 @@ module Fastlane
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def prepare_xcstrings()
|
20
|
-
@xcfile = LocoStrings.
|
21
|
+
@xcfile = LocoStrings::XCStringsFile.new @params[:source_file]
|
21
22
|
@output_hash = {}
|
22
23
|
@to_translate = @xcfile.read
|
24
|
+
|
23
25
|
if @params[:skip_translated] == true
|
24
|
-
@to_translate = @to_translate.reject { |k,
|
26
|
+
@to_translate = @to_translate.reject { |k, original|
|
27
|
+
!check_value_for_translate(
|
28
|
+
@xcfile.unit(k, @params[:target_language]),
|
29
|
+
original
|
30
|
+
)
|
31
|
+
}
|
25
32
|
end
|
26
33
|
end
|
27
34
|
|
35
|
+
def check_value_for_translate(string, orignal_string)
|
36
|
+
return true unless string
|
37
|
+
if string.is_a? LocoStrings::LocoString
|
38
|
+
return false if orignal_string.value.nil? || orignal_string.value.empty?
|
39
|
+
return string.value.empty?
|
40
|
+
elsif string.is_a? LocoStrings::LocoVariantions
|
41
|
+
orignal_string.strings.each do |key, _|
|
42
|
+
return true unless string.strings.has_key?(key)
|
43
|
+
return true if string.strings[key].value.empty?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
|
28
49
|
def prepare_strings()
|
29
50
|
@input_hash = get_strings(@params[:source_file])
|
30
51
|
@output_hash = get_strings(@params[:target_file])
|
@@ -86,6 +107,10 @@ module Fastlane
|
|
86
107
|
@keys_associations = {}
|
87
108
|
@to_translate.each_slice(bunch_size) do |bunch|
|
88
109
|
prompt = prepare_bunch_prompt bunch
|
110
|
+
if prompt.empty?
|
111
|
+
UI.important "Empty prompt, skipping bunch"
|
112
|
+
next
|
113
|
+
end
|
89
114
|
max_retries = 10
|
90
115
|
times_retried = 0
|
91
116
|
|
@@ -135,20 +160,37 @@ module Fastlane
|
|
135
160
|
|
136
161
|
json_hash = []
|
137
162
|
strings.each do |key, string|
|
163
|
+
UI.message "Translating #{key} - #{string}"
|
164
|
+
next if string.nil?
|
165
|
+
|
138
166
|
string_hash = {}
|
139
167
|
context = string.comment
|
140
|
-
if context && !context.empty?
|
141
|
-
|
142
|
-
end
|
168
|
+
string_hash["context"] = context if context && !context.empty?
|
169
|
+
|
143
170
|
key = transform_string(string.key)
|
144
171
|
@keys_associations[key] = string.key
|
145
172
|
string_hash["key"] = key
|
146
|
-
|
173
|
+
|
174
|
+
if string.is_a? LocoStrings::LocoString
|
175
|
+
next if string.value.nil? || string.value.empty?
|
176
|
+
string_hash["string_to_translate"] = string.value
|
177
|
+
elsif string.is_a? LocoStrings::LocoVariantions
|
178
|
+
variants = {}
|
179
|
+
string.strings.each do |key, variant|
|
180
|
+
next if variant.nil? || variant.value.nil? || variant.value.empty?
|
181
|
+
variants[key] = variant.value
|
182
|
+
end
|
183
|
+
string_hash["strings_to_translate"] = variants
|
184
|
+
else
|
185
|
+
UI.warning "Unknown type of string: #{string.key}"
|
186
|
+
end
|
147
187
|
json_hash << string_hash
|
148
188
|
end
|
189
|
+
return '' if json_hash.empty?
|
149
190
|
prompt += "'''\n"
|
150
191
|
prompt += json_hash.to_json
|
151
192
|
prompt += "\n'''"
|
193
|
+
UI.message "Prompt: #{prompt}"
|
152
194
|
return prompt
|
153
195
|
end
|
154
196
|
|
@@ -221,13 +263,21 @@ module Fastlane
|
|
221
263
|
string_hash.delete("key")
|
222
264
|
string_hash.delete("context")
|
223
265
|
translated_string = string_hash.values.first
|
224
|
-
|
225
|
-
|
266
|
+
return unless key && !key.empty?
|
267
|
+
real_key = @keys_associations[key]
|
268
|
+
if translated_string.is_a? Hash
|
269
|
+
strings = {}
|
270
|
+
translated_string.each do |pl_key, value|
|
271
|
+
UI.message "#{index_log} Translating #{real_key} > #{pl_key} - #{value}"
|
272
|
+
strings[pl_key] = LocoStrings::LocoString.new(pl_key, value, context)
|
273
|
+
end
|
274
|
+
string = LocoStrings::LocoVariantions.new(real_key, strings, context)
|
275
|
+
elsif translated_string && !translated_string.empty?
|
226
276
|
UI.message "#{index_log} Translating #{real_key} - #{translated_string}"
|
227
277
|
string = LocoStrings::LocoString.new(real_key, translated_string, context)
|
228
|
-
@output_hash[real_key] = string
|
229
|
-
keys_to_translate.delete(key)
|
230
278
|
end
|
279
|
+
@output_hash[real_key] = string
|
280
|
+
keys_to_translate.delete(key)
|
231
281
|
end
|
232
282
|
|
233
283
|
if keys_to_translate.length > 0
|
@@ -252,7 +302,13 @@ module Fastlane
|
|
252
302
|
else
|
253
303
|
@xcfile.update_file_path(@params[:target_file])
|
254
304
|
@output_hash.each do |key, value|
|
255
|
-
|
305
|
+
if value.is_a? LocoStrings::LocoString
|
306
|
+
@xcfile.update(key, value.value, value.comment, "translated", @params[:target_language])
|
307
|
+
elsif value.is_a? LocoStrings::LocoVariantions
|
308
|
+
value.strings.each do |pl_key, variant|
|
309
|
+
@xcfile.update_variation(key, pl_key, variant.value, variant.comment, "translated", @params[:target_language])
|
310
|
+
end
|
311
|
+
end
|
256
312
|
end
|
257
313
|
@xcfile.write
|
258
314
|
end
|
@@ -333,3 +389,5 @@ module Fastlane
|
|
333
389
|
end
|
334
390
|
end
|
335
391
|
end
|
392
|
+
|
393
|
+
# rubocop:enable all
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-translate_gpt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksei Cherepanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-openai
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.1.
|
33
|
+
version: 0.1.4.1
|
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: 0.1.
|
40
|
+
version: 0.1.4.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|