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: 7e90607f83a3e801607d88f8dd41a7473dd5d1079c93e0e7cb02b784690e25ea
4
- data.tar.gz: 5bfcd52847bb949ca1b6d54754b32445fed9c8b4bb7c00fc6bc1022f467b0d8d
3
+ metadata.gz: 5e16882ee4e890369a5c14b579f362303a3196e4238d4d3b3f685a9e6b4fb21a
4
+ data.tar.gz: 59719d66698e72c02ae4c625a68a9b5fe8d7dfc34023a5c329d0625bed27b2e9
5
5
  SHA512:
6
- metadata.gz: 2e3db9949838d419d8debc85b602888cfd23b8f5f079d0ef521f1ac2fe7c542867d707664bf99202ec32c500bed32fa49a5cfb0bc7f77edf053b591048377bd9
7
- data.tar.gz: 5d6add66793788842c1ff153a2556adf7d3de8cf8f97cb5c066a3aeb174dda55ad405f3fd71c3c041ebacf4a7df99185c3dc3e41dcfe2c6c9fd34e3ce27d5c8f
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.load(@params[:source_file])
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, v| @xcfile.value(v.key, @params[:target_language]) }
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
- string_hash["context"] = context
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
- string_hash["string_to_translate"] = string.value
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
- if key && !key.empty? && translated_string && !translated_string.empty?
225
- real_key = @keys_associations[key]
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
- @xcfile.update(key, value.value, value.comment, @params[:target_language])
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
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module TranslateGpt
3
- VERSION = "0.1.7"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
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.7
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: 2023-11-16 00:00:00.000000000 Z
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.3
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.3
40
+ version: 0.1.4.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement