translate_self 1.0.1 → 2.0.1
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/.rubocop.yml +16 -0
- data/CHANGELOG.md +34 -31
- data/Gemfile.lock +22 -11
- data/README.md +7 -0
- data/lib/ext/string.rb +1 -1
- data/lib/translate_self/translation.rb +34 -11
- data/lib/translate_self/version.rb +1 -1
- data/lib/translate_self.rb +3 -0
- data/translate_self.gemspec +4 -0
- metadata +59 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3440e7e27417b8402613c3b0a8b9ffefbbe3af690a6dc9600a847a56266c77b3
|
4
|
+
data.tar.gz: fa0310235e61ef1dc3571ef737d124743ef6d85560e8cc5777624e1e9d67c008
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8473f84cbb40f018afce32d74ed4bf4a57a51de31d7f893debd079eb36f733bbdbfa2aa5eb2230afa977609b0ee11479a1e7f7b518f25eec3f02d0a59f91bc1c
|
7
|
+
data.tar.gz: 9d1d285395839950a413c38b94723392d281701ca1eb3986d5a39f5839bb559d865b85a3c7f78268af55ed5c80cadad63787baebecca42a48ab64f3bca8306b0
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
1
3
|
AllCops:
|
2
4
|
TargetRubyVersion: 2.5
|
3
5
|
NewCops: enable
|
@@ -13,8 +15,22 @@ Style/StringLiteralsInInterpolation:
|
|
13
15
|
Style/FrozenStringLiteralComment:
|
14
16
|
Enabled: false
|
15
17
|
|
18
|
+
Metrics/BlockLength:
|
19
|
+
Exclude:
|
20
|
+
- '*.gemspec'
|
21
|
+
- 'spec/**/*'
|
22
|
+
|
16
23
|
Layout/LineLength:
|
17
24
|
Max: 120
|
18
25
|
|
19
26
|
Style/AsciiComments:
|
20
27
|
Enabled: false
|
28
|
+
|
29
|
+
RSpec/ExpectActual:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
RSpec/InstanceVariable:
|
33
|
+
Enabled: false
|
34
|
+
|
35
|
+
RSpec/MultipleExpectations:
|
36
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,54 +1,57 @@
|
|
1
|
-
## [
|
2
|
-
-
|
1
|
+
## [2.0.1] - 2021-11-07
|
2
|
+
- Finally a way to get around those pesky frozen strings!
|
3
|
+
- By default, [defrost](https://github.com/tenderlove/defrost) is not loaded. You can turn this off by setting `TranslateSelf.defrosting = true`.
|
4
|
+
- See `spec/frozen_strings_spec.rb` for more details and exciting ways of using it.
|
5
|
+
- Using with frozen_string_literal: true is a great way to troll your coworkers.
|
3
6
|
|
4
|
-
## [0.1
|
7
|
+
## [1.0.1] - 2021-07-13
|
5
8
|
|
6
|
-
-
|
7
|
-
|
9
|
+
- I'm reading Polished Ruby, and I just learned that it's faster to pass symbols than strings sometimes,
|
10
|
+
so as this library is very performance-oriented, symbols it is!
|
8
11
|
|
9
|
-
## [0.
|
12
|
+
## [1.0.0] - 2021-06-11
|
10
13
|
|
11
|
-
-
|
14
|
+
- Refactored the translation part a bit.
|
15
|
+
- Now you can translate strings that are over 30 kilobyte!
|
16
|
+
I couldn't test this too much because of the limits on the free plan,
|
17
|
+
but if you can test this feature, I'd be really happy to hear how it is working for you.
|
12
18
|
|
13
|
-
## [0.3.0] - 2021-06-03
|
14
19
|
|
15
|
-
|
16
|
-
Seems like you need to update it by hand!
|
17
|
-
|
18
|
-
## [0.4.0] - 2021-06-05
|
20
|
+
## [0.9.0] - 2021-06-08
|
19
21
|
|
20
|
-
|
22
|
+
## [0.8.0] - 2021-06-08
|
21
23
|
|
22
|
-
|
24
|
+
- Add option to use the shorter `t_to_language_code` alias.
|
25
|
+
## [0.7.0] - 2021-06-08
|
23
26
|
|
24
|
-
-
|
25
|
-
Also will not crash with frozen strings now.
|
27
|
+
- Get rid of duplicated code. Update `benchmark.rb`.
|
26
28
|
|
27
29
|
## [0.6.0] - 2021-06-08
|
28
30
|
|
29
31
|
- Add option to use ENV variable DEEPL_HOST
|
30
32
|
|
31
|
-
|
33
|
+
# Breaking change from 0.8!
|
34
|
+
- `t_to_language_code` was too much typing, so changed it to `to_language_code`.
|
32
35
|
|
33
|
-
|
36
|
+
## [0.5.0] - 2021-06-06
|
34
37
|
|
35
|
-
|
38
|
+
- Add TranslatableString class to work around frozen string literal magic comment.
|
39
|
+
Also will not crash with frozen strings now.
|
36
40
|
|
37
|
-
|
41
|
+
## [0.4.0] - 2021-06-05
|
38
42
|
|
39
|
-
|
43
|
+
- The translated new string now knows what language it is.
|
44
|
+
## [0.3.0] - 2021-06-03
|
40
45
|
|
41
|
-
|
42
|
-
|
46
|
+
- Gemfile.lock was not automatically updated, testing it a bit.
|
47
|
+
Seems like you need to update it by hand!
|
43
48
|
|
44
|
-
## [1.0.0] - 2021-06-11
|
45
49
|
|
46
|
-
|
47
|
-
- Now you can translate strings that are over 30 kilobyte!
|
48
|
-
I couldn't test this too much because of the limits on the free plan,
|
49
|
-
but if you can test this feature, I'd be really happy to hear how it is working for you.
|
50
|
+
## [0.2.0] - 2021-06-03
|
50
51
|
|
51
|
-
|
52
|
+
- Commentation and cleanup of unneeded files.
|
52
53
|
|
53
|
-
|
54
|
-
|
54
|
+
## [0.1.0] - 2021-06-02
|
55
|
+
|
56
|
+
- Initial release!
|
57
|
+
You can now translate strings! Be free!
|
data/Gemfile.lock
CHANGED
@@ -1,20 +1,27 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
translate_self (
|
4
|
+
translate_self (2.0.1)
|
5
5
|
deepl-rb
|
6
|
+
defrost (~> 1.0)
|
7
|
+
dry-configurable (~> 0.1.3)
|
6
8
|
|
7
9
|
GEM
|
8
10
|
remote: https://rubygems.org/
|
9
11
|
specs:
|
10
12
|
ast (2.4.2)
|
11
|
-
|
13
|
+
byebug (11.1.3)
|
14
|
+
concurrent-ruby (1.1.9)
|
15
|
+
deepl-rb (2.3.1)
|
16
|
+
defrost (1.0.0)
|
12
17
|
diff-lcs (1.4.4)
|
13
|
-
|
14
|
-
|
18
|
+
dry-configurable (0.1.7)
|
19
|
+
concurrent-ruby (~> 1.0)
|
20
|
+
parallel (1.21.0)
|
21
|
+
parser (3.0.2.0)
|
15
22
|
ast (~> 2.4.1)
|
16
23
|
rainbow (3.0.0)
|
17
|
-
rake (13.0.
|
24
|
+
rake (13.0.6)
|
18
25
|
regexp_parser (2.1.1)
|
19
26
|
rexml (3.2.5)
|
20
27
|
rspec (3.10.0)
|
@@ -29,29 +36,33 @@ GEM
|
|
29
36
|
rspec-mocks (3.10.2)
|
30
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
31
38
|
rspec-support (~> 3.10.0)
|
32
|
-
rspec-support (3.10.
|
33
|
-
rubocop (1.
|
39
|
+
rspec-support (3.10.3)
|
40
|
+
rubocop (1.22.3)
|
34
41
|
parallel (~> 1.10)
|
35
42
|
parser (>= 3.0.0.0)
|
36
43
|
rainbow (>= 2.2.2, < 4.0)
|
37
44
|
regexp_parser (>= 1.8, < 3.0)
|
38
45
|
rexml
|
39
|
-
rubocop-ast (>= 1.
|
46
|
+
rubocop-ast (>= 1.12.0, < 2.0)
|
40
47
|
ruby-progressbar (~> 1.7)
|
41
48
|
unicode-display_width (>= 1.4.0, < 3.0)
|
42
|
-
rubocop-ast (1.
|
49
|
+
rubocop-ast (1.12.0)
|
43
50
|
parser (>= 3.0.1.1)
|
51
|
+
rubocop-rspec (2.5.0)
|
52
|
+
rubocop (~> 1.19)
|
44
53
|
ruby-progressbar (1.11.0)
|
45
|
-
unicode-display_width (2.
|
54
|
+
unicode-display_width (2.1.0)
|
46
55
|
|
47
56
|
PLATFORMS
|
48
57
|
x86_64-linux
|
49
58
|
|
50
59
|
DEPENDENCIES
|
60
|
+
byebug
|
51
61
|
rake (~> 13.0)
|
52
62
|
rspec (~> 3.2)
|
53
63
|
rubocop (~> 1.7)
|
64
|
+
rubocop-rspec
|
54
65
|
translate_self!
|
55
66
|
|
56
67
|
BUNDLED WITH
|
57
|
-
2.2.
|
68
|
+
2.2.22
|
data/README.md
CHANGED
@@ -104,6 +104,13 @@ hello.translate
|
|
104
104
|
# "Moi"
|
105
105
|
```
|
106
106
|
|
107
|
+
OR!
|
108
|
+
Use it with [defrost](https://github.com/tenderlove/defrost)!
|
109
|
+
By default, defrost is not loaded. You can turn this on by setting `TranslateSelf.defrosting = true`, and after that, no need to worry about frozen strings!
|
110
|
+
This will defrost strings if they're frozen.
|
111
|
+
Might be a bit slower, but it's worth it!
|
112
|
+
Interesting debug sessions guaranteed.
|
113
|
+
|
107
114
|
## Benchmark
|
108
115
|
|
109
116
|
Create a string 5000000 times.
|
data/lib/ext/string.rb
CHANGED
@@ -2,11 +2,20 @@ require 'deepl'
|
|
2
2
|
|
3
3
|
# The part where the actual translation happens.
|
4
4
|
module Translation
|
5
|
-
|
6
|
-
attr_accessor :language
|
5
|
+
LANGUAGES = %w[bg cs da de el en es et fi fr hu it ja lt lv nl pl pt ro ru sk sl sv zh].freeze
|
6
|
+
attr_accessor :language
|
7
|
+
|
8
|
+
def to_language
|
9
|
+
@to_language || 'fi'
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_language=(language)
|
13
|
+
defroster if needs_defrosting?
|
14
|
+
@to_language = LANGUAGES.include?(language) ? language : 'fi'
|
15
|
+
end
|
7
16
|
|
8
17
|
def available_languages
|
9
|
-
|
18
|
+
LANGUAGES
|
10
19
|
end
|
11
20
|
|
12
21
|
# Translates self to the desired language. \
|
@@ -30,6 +39,7 @@ module Translation
|
|
30
39
|
# # 'Hei'
|
31
40
|
# @return [String] self replaced with the new translation
|
32
41
|
def translate!
|
42
|
+
defroster if needs_defrosting?
|
33
43
|
replace translate
|
34
44
|
end
|
35
45
|
|
@@ -40,7 +50,7 @@ module Translation
|
|
40
50
|
#
|
41
51
|
# @param [String] the language to translate to, e.g. "fi"
|
42
52
|
# @return [String] the contents translated to another language
|
43
|
-
|
53
|
+
LANGUAGES.each do |lan|
|
44
54
|
define_method("translate_to_#{lan}".to_sym) do |language = lan|
|
45
55
|
call_deepl(self.language, language)
|
46
56
|
end
|
@@ -49,6 +59,15 @@ module Translation
|
|
49
59
|
|
50
60
|
private
|
51
61
|
|
62
|
+
def needs_defrosting?
|
63
|
+
frozen? && TranslateSelf.config.defrosting
|
64
|
+
end
|
65
|
+
|
66
|
+
def defroster
|
67
|
+
require 'defrost'
|
68
|
+
defrost
|
69
|
+
end
|
70
|
+
|
52
71
|
def break_up(to_lan)
|
53
72
|
sentences = break_text_into_sentences
|
54
73
|
sentences.length.times.map.with_index do |_i, i|
|
@@ -57,11 +76,7 @@ module Translation
|
|
57
76
|
end
|
58
77
|
|
59
78
|
def break_text_into_sentences
|
60
|
-
last_letter =
|
61
|
-
'.'
|
62
|
-
else
|
63
|
-
''
|
64
|
-
end
|
79
|
+
last_letter = last_letter_of_self
|
65
80
|
tr_count = (bytesize / 25_000.to_f).ceil
|
66
81
|
sentences = split('.')
|
67
82
|
number_of_sentences = sentences.length / tr_count
|
@@ -69,16 +84,24 @@ module Translation
|
|
69
84
|
tr_count.times.map do |num|
|
70
85
|
txt = sentences[current_count..(current_count + number_of_sentences)].join('.')
|
71
86
|
current_count += number_of_sentences.next
|
72
|
-
|
87
|
+
if num == tr_count.pred
|
88
|
+
txt + last_letter
|
89
|
+
else
|
90
|
+
txt
|
91
|
+
end
|
73
92
|
end
|
74
93
|
end
|
75
94
|
|
95
|
+
def last_letter_of_self
|
96
|
+
end_with?('.') ? '.' : ''
|
97
|
+
end
|
98
|
+
|
76
99
|
def call_deepl(language = self.language, to_lan = to_language)
|
77
100
|
warn 'No language given!' and return if to_lan.nil?
|
78
101
|
return break_up(to_lan) if bytesize > 30_000
|
79
102
|
|
80
103
|
response = DeepL.translate self, language, to_lan
|
81
|
-
self.language = response.detected_source_language.downcase if
|
104
|
+
self.language = response.detected_source_language.downcase if !frozen? || (needs_defrosting? && defroster)
|
82
105
|
actual_translation = response.text
|
83
106
|
actual_translation.language = to_lan
|
84
107
|
actual_translation
|
data/lib/translate_self.rb
CHANGED
@@ -3,9 +3,12 @@ require_relative 'translate_self/translation'
|
|
3
3
|
require_relative 'translate_self/translatable_string'
|
4
4
|
require 'ext/string'
|
5
5
|
require 'deepl'
|
6
|
+
require 'dry-configurable'
|
6
7
|
|
7
8
|
# Dangerously include translation methods to strings!
|
8
9
|
module TranslateSelf
|
10
|
+
extend Dry::Configurable
|
11
|
+
setting :defrosting, default: false
|
9
12
|
DeepL.configure do |config|
|
10
13
|
config.auth_key = ENV['DEEPL_AUTH_KEY']
|
11
14
|
config.host = ENV['DEEPL_HOST'] || 'https://api-free.deepl.com' # Default value is 'https://api.deepl.com'
|
data/translate_self.gemspec
CHANGED
@@ -29,9 +29,13 @@ Gem::Specification.new do |spec|
|
|
29
29
|
|
30
30
|
# Uncomment to register a new dependency of your gem
|
31
31
|
spec.add_dependency 'deepl-rb'
|
32
|
+
spec.add_dependency 'defrost', '~> 1.0'
|
33
|
+
spec.add_dependency 'dry-configurable', '~> 0.1.3'
|
32
34
|
spec.add_development_dependency 'rake', '~> 13.0'
|
33
35
|
spec.add_development_dependency 'rspec', '~> 3.2'
|
34
36
|
spec.add_development_dependency 'rubocop', '~> 1.7'
|
37
|
+
spec.add_development_dependency 'rubocop-rspec'
|
38
|
+
spec.add_development_dependency 'byebug'
|
35
39
|
|
36
40
|
# For more information and examples about making a new gem, checkout our
|
37
41
|
# guide at: https://bundler.io/guides/creating_gem.html
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: translate_self
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sampo Kuokkanen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07
|
11
|
+
date: 2021-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deepl-rb
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: defrost
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-configurable
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.1.3
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.1.3
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: rake
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +94,34 @@ dependencies:
|
|
66
94
|
- - "~>"
|
67
95
|
- !ruby/object:Gem::Version
|
68
96
|
version: '1.7'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: byebug
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
69
125
|
description: |-
|
70
126
|
Let the strings do the job for you. No need to do any of the manual work! \
|
71
127
|
The strings translate themselves!! Translate to Japanese, English, Finnish...
|
@@ -118,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
174
|
- !ruby/object:Gem::Version
|
119
175
|
version: '0'
|
120
176
|
requirements: []
|
121
|
-
rubygems_version: 3.2.
|
177
|
+
rubygems_version: 3.2.22
|
122
178
|
signing_key:
|
123
179
|
specification_version: 4
|
124
180
|
summary: TranslateSelf lets strings translate themselves.
|