fastlane-plugin-translate_gpt 0.1.7 → 0.1.8

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 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