modpack_localizer 0.2.2 → 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 +15 -1
- data/README.md +1 -1
- data/dist/example.rb +3 -11
- data/lib/modpack_localizer/jar/performer.rb +21 -11
- data/lib/modpack_localizer/snbt/performer.rb +31 -7
- data/lib/modpack_localizer/util/version.rb +1 -1
- data/lib/modpack_localizer.rb +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bd0e40db750b08a99dbfd2dc80874dd7b1d4d261c056065cd5c75b7170df3bca
|
|
4
|
+
data.tar.gz: 7519fd5249a41610da57bfdaad1a9f8c3b72c368bc91b010a933a46b90e28948
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6b8a6941c0f3d19401f474af07b946aedc816ba570735f0172deed0cc5963894dd7393ced1f69a8403b4c2975b5ae2f907856990f73c11304147f85a6e65c068
|
|
7
|
+
data.tar.gz: '04508e54b5f5a2237e00d39693d1b48b37fcdc9b144df426b5693d3a2cba3203086093559187501c279640beb81086011300c318410bdee554f4503f763865e4'
|
data/CHANGELOG.md
CHANGED
|
@@ -78,4 +78,18 @@
|
|
|
78
78
|
|
|
79
79
|
## [0.2.2] - 2025-08/03
|
|
80
80
|
|
|
81
|
-
- コネクションがエラーになった場合にリトライするように改善
|
|
81
|
+
- コネクションがエラーになった場合にリトライするように改善
|
|
82
|
+
|
|
83
|
+
## [0.3.0] - 2025-11/10
|
|
84
|
+
|
|
85
|
+
- gem更新
|
|
86
|
+
- TranslationAPIの扱いが変わったのに伴い、コードを修正
|
|
87
|
+
|
|
88
|
+
## [0.4.0] - 2025-11/20
|
|
89
|
+
|
|
90
|
+
- 翻訳APIの呼び出しが失敗した場合にリトライする機能を強化
|
|
91
|
+
- 指数関数バックオフを導入
|
|
92
|
+
- 最大リトライ回数を増加
|
|
93
|
+
- IO::TimeoutError以外の例外もリトライ対象に追加
|
|
94
|
+
- 翻訳APIの独自エラーとかに対応するため
|
|
95
|
+
- いくつかのライブラリを最新化
|
data/README.md
CHANGED
|
@@ -17,7 +17,7 @@ or if no specific configs required
|
|
|
17
17
|
1. Download [release](https://github.com/milkeclair/modpack_localizer/releases)
|
|
18
18
|
2. Make `.env` file
|
|
19
19
|
3. Add `OPENAI_API_KEY=your_api_key` to `.env`
|
|
20
|
-
4. Optional: Add `OPENAI_MODEL=some_openai_model` to `.env`
|
|
20
|
+
4. Optional: Add `OPENAI_MODEL=some_openai_model` to `.env`
|
|
21
21
|
5. Add `some.snbt` or `quests` directory contents to `quests` directory
|
|
22
22
|
6. Add `some.jar` files to `mods` directory
|
|
23
23
|
7. Double click `start.bat` file
|
data/dist/example.rb
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
require "modpack_localizer"
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
ModpackLocalizer.omakase(language: "English")
|
|
4
4
|
# or
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
require_relative "../lib/modpack_localizer"
|
|
8
|
-
|
|
9
|
-
file_path = "dist/quests"
|
|
10
|
-
language = "japanese"
|
|
11
|
-
|
|
12
|
-
performer = ModpackLocalizer::SNBT::Performer.new(language: language)
|
|
13
|
-
performer.perform_directory(dir_path: file_path)
|
|
5
|
+
ModpackLocalizer.omakase(language: "Japanese", country: "Japan", locale_code: nil, threadable: true)
|
|
@@ -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のログを出力するか
|
|
@@ -21,12 +25,13 @@ module ModpackLocalizer
|
|
|
21
25
|
output_logs: true, except_words: [], language: "Japanese",
|
|
22
26
|
country: "Japan", locale_code: nil, display_help: true
|
|
23
27
|
)
|
|
24
|
-
|
|
25
|
-
output_logs
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
TranslationAPI.configure do |config|
|
|
29
|
+
config.output_logs = output_logs
|
|
30
|
+
config.language = language
|
|
31
|
+
config.except_words = except_words
|
|
32
|
+
config.provider = :openai
|
|
33
|
+
end
|
|
34
|
+
|
|
30
35
|
@language, @country_name, @locale_code = language, country, locale_code
|
|
31
36
|
@reader, @writer, @progress_bar, @loggable, @tierdown = nil
|
|
32
37
|
|
|
@@ -116,13 +121,14 @@ module ModpackLocalizer
|
|
|
116
121
|
lang_data.json.each do |key, value|
|
|
117
122
|
retries = 0
|
|
118
123
|
begin
|
|
119
|
-
lang_data.json[key] =
|
|
120
|
-
rescue
|
|
124
|
+
lang_data.json[key] = TranslationAPI.translate(value)
|
|
125
|
+
rescue StandardError => e
|
|
121
126
|
retries += 1
|
|
122
|
-
raise e unless retries <=
|
|
127
|
+
raise e unless retries <= MAX_RETRIES
|
|
123
128
|
|
|
124
|
-
|
|
125
|
-
|
|
129
|
+
sleep_time = sleep_time(retries)
|
|
130
|
+
puts "Translation failed, retrying... (#{retries}/#{MAX_RETRIES}) waiting #{sleep_time.round(2)} seconds"
|
|
131
|
+
sleep(sleep_time)
|
|
126
132
|
retry
|
|
127
133
|
end
|
|
128
134
|
@progress_bar.increment if @loggable
|
|
@@ -152,6 +158,10 @@ module ModpackLocalizer
|
|
|
152
158
|
"#{camelize(lang_data.mod_name)} already has #{@reader.extract_file_name(lang_data.file_name)} file."
|
|
153
159
|
end
|
|
154
160
|
|
|
161
|
+
def sleep_time(retries)
|
|
162
|
+
[BASE_DELAY * (retries**2), MAX_SLEEP].min
|
|
163
|
+
end
|
|
164
|
+
|
|
155
165
|
def camelize(str)
|
|
156
166
|
str.split("_").map(&:capitalize).join
|
|
157
167
|
end
|
|
@@ -8,18 +8,23 @@ 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 言語
|
|
14
18
|
# @param [Boolean] display_help ヘルプを表示するか
|
|
15
19
|
# @return [ModpackLocalizer::SNBT::Performer]
|
|
16
20
|
def initialize(output_logs: true, except_words: [], language: "Japanese", display_help: true)
|
|
17
|
-
|
|
18
|
-
output_logs
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
TranslationAPI.configure do |config|
|
|
22
|
+
config.output_logs = output_logs
|
|
23
|
+
config.language = language
|
|
24
|
+
config.except_words = except_words
|
|
25
|
+
config.provider = :openai
|
|
26
|
+
end
|
|
27
|
+
|
|
23
28
|
@reader, @writer, @progress_bar, @loggable = nil
|
|
24
29
|
|
|
25
30
|
ModpackLocalizer.help if display_help
|
|
@@ -40,7 +45,7 @@ module ModpackLocalizer
|
|
|
40
45
|
init_progress_bar(file_path, results.length) if @loggable
|
|
41
46
|
|
|
42
47
|
results.each do |result|
|
|
43
|
-
result[:
|
|
48
|
+
result[:snbt] = retryable_translate(result[:text])
|
|
44
49
|
@writer.overwrites(result)
|
|
45
50
|
@progress_bar.increment if @loggable
|
|
46
51
|
end
|
|
@@ -79,6 +84,25 @@ module ModpackLocalizer
|
|
|
79
84
|
|
|
80
85
|
private
|
|
81
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
|
+
|
|
82
106
|
# プログレスバーを初期化する
|
|
83
107
|
#
|
|
84
108
|
# @param [String] file_path ファイルのパス
|
data/lib/modpack_localizer.rb
CHANGED
|
@@ -21,13 +21,13 @@ module ModpackLocalizer
|
|
|
21
21
|
# @param [Boolean] threadable quests, modsの翻訳を並列で行うか
|
|
22
22
|
# @return [void]
|
|
23
23
|
def self.omakase(language: "Japanese", country: "Japan", locale_code: nil, threadable: false)
|
|
24
|
-
performers = [] << ModpackLocalizer::SNBT::Performer.new(language:
|
|
24
|
+
performers = [] << ModpackLocalizer::SNBT::Performer.new(language:)
|
|
25
25
|
performers << ModpackLocalizer::JAR::Performer.new(
|
|
26
|
-
language
|
|
26
|
+
language:, country:, locale_code:, display_help: false
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
if threadable
|
|
30
|
-
threads = performers.map {
|
|
30
|
+
threads = performers.map { Thread.new { it.perform_directory(loggable: false) } }
|
|
31
31
|
threads.each(&:join)
|
|
32
32
|
else
|
|
33
33
|
performers.each(&:perform_directory)
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: modpack_localizer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- milkeclair
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: countries
|
|
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
166
|
version: '0'
|
|
167
167
|
requirements: []
|
|
168
|
-
rubygems_version: 3.6.
|
|
168
|
+
rubygems_version: 3.6.9
|
|
169
169
|
specification_version: 4
|
|
170
170
|
summary: localize minecraft modpack
|
|
171
171
|
test_files: []
|