modpack_localizer 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f13f2c6fd8dc427ef0ded277221af4bb2a7a8164fe6c6806b201191019895da
4
- data.tar.gz: ef0bf6ac23c510d803cf475bbd182fc363d7ff0b5f0ad61a6751a404e1984cf2
3
+ metadata.gz: bd0e40db750b08a99dbfd2dc80874dd7b1d4d261c056065cd5c75b7170df3bca
4
+ data.tar.gz: 7519fd5249a41610da57bfdaad1a9f8c3b72c368bc91b010a933a46b90e28948
5
5
  SHA512:
6
- metadata.gz: 1b50f988c2ae70627ba364af939f5f1449dbd6e08da679f27d7d0de4b347938f616ebe624ac22056f3ae9789576aa50bff145fb375f01d63f81e8306e3012090
7
- data.tar.gz: e7081706ed393f3ce188b89dd5b2f0f6a2f2c2d02f0484665b4ef59e771dfc5722bb832851a7f4baf3e0a650e84b061bc7e86b2c8ec8f8310af01e0b95743d32
6
+ metadata.gz: 6b8a6941c0f3d19401f474af07b946aedc816ba570735f0172deed0cc5963894dd7393ced1f69a8403b4c2975b5ae2f907856990f73c11304147f85a6e65c068
7
+ data.tar.gz: '04508e54b5f5a2237e00d39693d1b48b37fcdc9b144df426b5693d3a2cba3203086093559187501c279640beb81086011300c318410bdee554f4503f763865e4'
data/CHANGELOG.md CHANGED
@@ -84,3 +84,12 @@
84
84
 
85
85
  - gem更新
86
86
  - TranslationAPIの扱いが変わったのに伴い、コードを修正
87
+
88
+ ## [0.4.0] - 2025-11/20
89
+
90
+ - 翻訳APIの呼び出しが失敗した場合にリトライする機能を強化
91
+ - 指数関数バックオフを導入
92
+ - 最大リトライ回数を増加
93
+ - IO::TimeoutError以外の例外もリトライ対象に追加
94
+ - 翻訳APIの独自エラーとかに対応するため
95
+ - いくつかのライブラリを最新化
@@ -8,6 +8,10 @@ module ModpackLocalizer
8
8
  module JAR
9
9
  # .jarの翻訳を実行するクラス
10
10
  class Performer
11
+ MAX_RETRIES = 8
12
+ BASE_DELAY = 5
13
+ MAX_SLEEP = 256
14
+
11
15
  # locale_codeを指定する場合、countryの指定は不要
12
16
  #
13
17
  # @param [Boolean] output_logs APIのログを出力するか
@@ -118,12 +122,13 @@ module ModpackLocalizer
118
122
  retries = 0
119
123
  begin
120
124
  lang_data.json[key] = TranslationAPI.translate(value)
121
- rescue IO::TimeoutError => e
125
+ rescue StandardError => e
122
126
  retries += 1
123
- raise e unless retries <= 3
127
+ raise e unless retries <= MAX_RETRIES
124
128
 
125
- puts "Connection failed, retrying... (#{retries}/3)"
126
- sleep(2)
129
+ sleep_time = sleep_time(retries)
130
+ puts "Translation failed, retrying... (#{retries}/#{MAX_RETRIES}) waiting #{sleep_time.round(2)} seconds"
131
+ sleep(sleep_time)
127
132
  retry
128
133
  end
129
134
  @progress_bar.increment if @loggable
@@ -153,6 +158,10 @@ module ModpackLocalizer
153
158
  "#{camelize(lang_data.mod_name)} already has #{@reader.extract_file_name(lang_data.file_name)} file."
154
159
  end
155
160
 
161
+ def sleep_time(retries)
162
+ [BASE_DELAY * (retries**2), MAX_SLEEP].min
163
+ end
164
+
156
165
  def camelize(str)
157
166
  str.split("_").map(&:capitalize).join
158
167
  end
@@ -8,6 +8,10 @@ module ModpackLocalizer
8
8
  module SNBT
9
9
  # .snbtの翻訳を実行するクラス
10
10
  class Performer
11
+ MAX_RETRIES = 8
12
+ BASE_DELAY = 5
13
+ MAX_SLEEP = 256
14
+
11
15
  # @param [Boolean] output_logs APIのログを出力するか
12
16
  # @param [Array<String>] except_words 翻訳しない単語
13
17
  # @param [String] language 言語
@@ -41,7 +45,7 @@ module ModpackLocalizer
41
45
  init_progress_bar(file_path, results.length) if @loggable
42
46
 
43
47
  results.each do |result|
44
- result[:text] = TranslationAPI.translate(result[:text])
48
+ result[:snbt] = retryable_translate(result[:text])
45
49
  @writer.overwrites(result)
46
50
  @progress_bar.increment if @loggable
47
51
  end
@@ -80,6 +84,25 @@ module ModpackLocalizer
80
84
 
81
85
  private
82
86
 
87
+ def retryable_translate(text)
88
+ retries = 0
89
+ begin
90
+ TranslationAPI.translate(text)
91
+ rescue StandardError => e
92
+ retries += 1
93
+ raise e unless retries <= MAX_RETRIES
94
+
95
+ sleep_time = sleep_time(retries)
96
+ puts "Translation failed, retrying... (#{retries}/#{MAX_RETRIES}) waiting #{sleep_time.round(2)} seconds"
97
+ sleep(sleep_time)
98
+ retry
99
+ end
100
+ end
101
+
102
+ def sleep_time(retries)
103
+ [BASE_DELAY * (retries**2), MAX_SLEEP].min
104
+ end
105
+
83
106
  # プログレスバーを初期化する
84
107
  #
85
108
  # @param [String] file_path ファイルのパス
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ModpackLocalizer
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modpack_localizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - milkeclair