modpack_localizer 0.3.0 → 0.5.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 +16 -0
- data/README.md +5 -6
- data/dist/example.rb +7 -2
- data/lib/modpack_localizer/jar/performer.rb +29 -10
- data/lib/modpack_localizer/snbt/performer.rb +32 -5
- data/lib/modpack_localizer/util/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e9147b02f5b6012f60cce0708bd2431b16983e857b1b1e91dcde22bb0d83734b
|
|
4
|
+
data.tar.gz: fd66110285400a00d87421ba9ad2927b6fb5a036037ab56cda2354963bf44407
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '07348b4470777efd7ede2f88b1ed6eb0d18b4fed4b982eff8a87d1edde93b4860a45fbaea50570e9b0603e98822b77d523b3e0de507c13f7967e9f54989962ab'
|
|
7
|
+
data.tar.gz: e0afb02710d8da14e886d9dd9e69f8909b32a408424d734a26e41a24a1176f29a47260a66486f515733225fe253bc2e71f405d5333ef1ad90b7b6b98112c5567
|
data/CHANGELOG.md
CHANGED
|
@@ -84,3 +84,19 @@
|
|
|
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
|
+
- いくつかのライブラリを最新化
|
|
96
|
+
|
|
97
|
+
## [0.5.0] - 2025-11-23
|
|
98
|
+
|
|
99
|
+
- プロバイダーを選べるようにdotenvを追加
|
|
100
|
+
- TranslationAPIの設定にカスタムプロンプトを追加できるようにした
|
|
101
|
+
- プロンプトに「プロパティアクセスは翻訳しないでください。例: obj.property.child」を追加するように変更
|
|
102
|
+
- これにより、ftbquestのプロパティアクセスが翻訳されてしまう問題を軽減
|
data/README.md
CHANGED
|
@@ -16,12 +16,11 @@ or if no specific configs required
|
|
|
16
16
|
|
|
17
17
|
1. Download [release](https://github.com/milkeclair/modpack_localizer/releases)
|
|
18
18
|
2. Make `.env` file
|
|
19
|
-
3. Add
|
|
20
|
-
4.
|
|
21
|
-
5. Add `some.
|
|
22
|
-
6.
|
|
23
|
-
7.
|
|
24
|
-
8. Check `output` directory
|
|
19
|
+
3. Add your API keys to `.env` file [see](https://github.com/milkeclair/translation_api)
|
|
20
|
+
4. Add `some.snbt` or `quests` directory contents to `quests` directory
|
|
21
|
+
5. Add `some.jar` files to `mods` directory
|
|
22
|
+
6. Double click `start.bat` file
|
|
23
|
+
7. Check `output` directory
|
|
25
24
|
|
|
26
25
|
## Options for omakase method
|
|
27
26
|
|
data/dist/example.rb
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
require "modpack_localizer"
|
|
2
2
|
|
|
3
|
-
ModpackLocalizer.omakase(language: "English")
|
|
3
|
+
# ModpackLocalizer.omakase(language: "English")
|
|
4
4
|
# or
|
|
5
|
-
|
|
5
|
+
begin
|
|
6
|
+
ModpackLocalizer.omakase
|
|
7
|
+
rescue StandardError => e
|
|
8
|
+
puts e
|
|
9
|
+
puts e.backtrace
|
|
10
|
+
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "dotenv"
|
|
1
2
|
require "translation_api"
|
|
2
3
|
require_relative "../util/help"
|
|
3
4
|
require_relative "../util/error"
|
|
@@ -8,6 +9,12 @@ module ModpackLocalizer
|
|
|
8
9
|
module JAR
|
|
9
10
|
# .jarの翻訳を実行するクラス
|
|
10
11
|
class Performer
|
|
12
|
+
Dotenv.load
|
|
13
|
+
|
|
14
|
+
MAX_RETRIES = 8
|
|
15
|
+
BASE_DELAY = 5
|
|
16
|
+
MAX_SLEEP = 256
|
|
17
|
+
|
|
11
18
|
# locale_codeを指定する場合、countryの指定は不要
|
|
12
19
|
#
|
|
13
20
|
# @param [Boolean] output_logs APIのログを出力するか
|
|
@@ -21,12 +28,7 @@ module ModpackLocalizer
|
|
|
21
28
|
output_logs: true, except_words: [], language: "Japanese",
|
|
22
29
|
country: "Japan", locale_code: nil, display_help: true
|
|
23
30
|
)
|
|
24
|
-
|
|
25
|
-
config.output_logs = output_logs
|
|
26
|
-
config.language = language
|
|
27
|
-
config.except_words = except_words
|
|
28
|
-
config.provider = :openai
|
|
29
|
-
end
|
|
31
|
+
configure_translation_api(output_logs:, except_words:, language:)
|
|
30
32
|
|
|
31
33
|
@language, @country_name, @locale_code = language, country, locale_code
|
|
32
34
|
@reader, @writer, @progress_bar, @loggable, @tierdown = nil
|
|
@@ -83,6 +85,18 @@ module ModpackLocalizer
|
|
|
83
85
|
|
|
84
86
|
private
|
|
85
87
|
|
|
88
|
+
def configure_translation_api(
|
|
89
|
+
output_logs: true, except_words: [], language: "Japanese"
|
|
90
|
+
)
|
|
91
|
+
TranslationAPI.configure do |config|
|
|
92
|
+
config.output_logs = output_logs
|
|
93
|
+
config.language = language.downcase
|
|
94
|
+
config.except_words = except_words
|
|
95
|
+
config.provider = ENV["PROVIDER"]&.to_sym || :openai
|
|
96
|
+
config.custom_prompt = "Never translate property access. Example: obj.property.child"
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
86
100
|
# ReaderとWriterを初期化する
|
|
87
101
|
#
|
|
88
102
|
# @params [String] file_path ファイルのパス
|
|
@@ -118,12 +132,13 @@ module ModpackLocalizer
|
|
|
118
132
|
retries = 0
|
|
119
133
|
begin
|
|
120
134
|
lang_data.json[key] = TranslationAPI.translate(value)
|
|
121
|
-
rescue
|
|
135
|
+
rescue StandardError => e
|
|
122
136
|
retries += 1
|
|
123
|
-
raise e unless retries <=
|
|
137
|
+
raise e unless retries <= MAX_RETRIES
|
|
124
138
|
|
|
125
|
-
|
|
126
|
-
|
|
139
|
+
sleep_time = sleep_time(retries)
|
|
140
|
+
puts "Translation failed, retrying... (#{retries}/#{MAX_RETRIES}) waiting #{sleep_time.round(2)} seconds"
|
|
141
|
+
sleep(sleep_time)
|
|
127
142
|
retry
|
|
128
143
|
end
|
|
129
144
|
@progress_bar.increment if @loggable
|
|
@@ -153,6 +168,10 @@ module ModpackLocalizer
|
|
|
153
168
|
"#{camelize(lang_data.mod_name)} already has #{@reader.extract_file_name(lang_data.file_name)} file."
|
|
154
169
|
end
|
|
155
170
|
|
|
171
|
+
def sleep_time(retries)
|
|
172
|
+
[BASE_DELAY * (retries**2), MAX_SLEEP].min
|
|
173
|
+
end
|
|
174
|
+
|
|
156
175
|
def camelize(str)
|
|
157
176
|
str.split("_").map(&:capitalize).join
|
|
158
177
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "dotenv"
|
|
1
2
|
require "translation_api"
|
|
2
3
|
require_relative "../util/help"
|
|
3
4
|
require_relative "../util/error"
|
|
@@ -8,6 +9,12 @@ module ModpackLocalizer
|
|
|
8
9
|
module SNBT
|
|
9
10
|
# .snbtの翻訳を実行するクラス
|
|
10
11
|
class Performer
|
|
12
|
+
Dotenv.load
|
|
13
|
+
|
|
14
|
+
MAX_RETRIES = 8
|
|
15
|
+
BASE_DELAY = 5
|
|
16
|
+
MAX_SLEEP = 256
|
|
17
|
+
|
|
11
18
|
# @param [Boolean] output_logs APIのログを出力するか
|
|
12
19
|
# @param [Array<String>] except_words 翻訳しない単語
|
|
13
20
|
# @param [String] language 言語
|
|
@@ -15,10 +22,11 @@ module ModpackLocalizer
|
|
|
15
22
|
# @return [ModpackLocalizer::SNBT::Performer]
|
|
16
23
|
def initialize(output_logs: true, except_words: [], language: "Japanese", display_help: true)
|
|
17
24
|
TranslationAPI.configure do |config|
|
|
18
|
-
config.output_logs
|
|
19
|
-
config.language
|
|
20
|
-
config.except_words
|
|
21
|
-
config.provider
|
|
25
|
+
config.output_logs = output_logs
|
|
26
|
+
config.language = language.downcase
|
|
27
|
+
config.except_words = except_words
|
|
28
|
+
config.provider = ENV["PROVIDER"]&.to_sym || :openai
|
|
29
|
+
config.custom_prompt = "Never translate property access. Example: obj.property.child"
|
|
22
30
|
end
|
|
23
31
|
|
|
24
32
|
@reader, @writer, @progress_bar, @loggable = nil
|
|
@@ -41,7 +49,7 @@ module ModpackLocalizer
|
|
|
41
49
|
init_progress_bar(file_path, results.length) if @loggable
|
|
42
50
|
|
|
43
51
|
results.each do |result|
|
|
44
|
-
result[:
|
|
52
|
+
result[:snbt] = retryable_translate(result[:text])
|
|
45
53
|
@writer.overwrites(result)
|
|
46
54
|
@progress_bar.increment if @loggable
|
|
47
55
|
end
|
|
@@ -80,6 +88,25 @@ module ModpackLocalizer
|
|
|
80
88
|
|
|
81
89
|
private
|
|
82
90
|
|
|
91
|
+
def retryable_translate(text)
|
|
92
|
+
retries = 0
|
|
93
|
+
begin
|
|
94
|
+
TranslationAPI.translate(text)
|
|
95
|
+
rescue StandardError => e
|
|
96
|
+
retries += 1
|
|
97
|
+
raise e unless retries <= MAX_RETRIES
|
|
98
|
+
|
|
99
|
+
sleep_time = sleep_time(retries)
|
|
100
|
+
puts "Translation failed, retrying... (#{retries}/#{MAX_RETRIES}) waiting #{sleep_time.round(2)} seconds"
|
|
101
|
+
sleep(sleep_time)
|
|
102
|
+
retry
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def sleep_time(retries)
|
|
107
|
+
[BASE_DELAY * (retries**2), MAX_SLEEP].min
|
|
108
|
+
end
|
|
109
|
+
|
|
83
110
|
# プログレスバーを初期化する
|
|
84
111
|
#
|
|
85
112
|
# @param [String] file_path ファイルのパス
|
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.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- milkeclair
|
|
@@ -23,6 +23,20 @@ dependencies:
|
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: dotenv
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
26
40
|
- !ruby/object:Gem::Dependency
|
|
27
41
|
name: iso-639
|
|
28
42
|
requirement: !ruby/object:Gem::Requirement
|