translate_self 0.1.0 → 0.6.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/.github/workflows/main.yml +5 -2
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +25 -1
- data/Gemfile +0 -8
- data/Gemfile.lock +3 -5
- data/README.md +40 -3
- data/benchmark.rb +16 -0
- data/lib/translate_self.rb +3 -1
- data/lib/translate_self/translatable_string.rb +11 -0
- data/lib/translate_self/translation.rb +28 -4
- data/lib/translate_self/version.rb +1 -1
- data/translate_self.gemspec +1 -1
- metadata +8 -12
- data/.byebug_history +0 -48
- data/.idea/.gitignore +0 -8
- data/.idea/misc.xml +0 -4
- data/.idea/modules.xml +0 -8
- data/.idea/translate_self.iml +0 -36
- data/.idea/vcs.xml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48a0238d6e09ae494d46da95732914c18c77882cc8a077d1c522a124c985cd62
|
4
|
+
data.tar.gz: 84a3fe6ae48a310dabe1fa8952773dd6234cebd03f7b370fd57b1aca44e8add7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13d585250ec562d77cd50d7d175c214ae136069d806d0b584e919a020f7769c1b2df09e7610639d18fd3909065173d02fd44f062f0f6f25636c64b019d4345fc
|
7
|
+
data.tar.gz: cf6a84eb4c137084fa8b96f3c6e5dbab24e88499da2b638280eceaef615818b175d363d8de9d70529c82f243760a2750a3d8b7081f69a2e56bf583f7553d72a8
|
data/.github/workflows/main.yml
CHANGED
@@ -2,6 +2,9 @@ name: Ruby
|
|
2
2
|
|
3
3
|
on: [push,pull_request]
|
4
4
|
|
5
|
+
env:
|
6
|
+
DEEPL_AUTH_KEY: ${{ secrets.DEEPL_AUTH_KEY }}
|
7
|
+
|
5
8
|
jobs:
|
6
9
|
build:
|
7
10
|
runs-on: ubuntu-latest
|
@@ -12,5 +15,5 @@ jobs:
|
|
12
15
|
with:
|
13
16
|
ruby-version: 3.0.1
|
14
17
|
bundler-cache: true
|
15
|
-
- name: Run the
|
16
|
-
run: bundle exec rake
|
18
|
+
- name: Run the RSpec tests
|
19
|
+
run: bundle exec rake spec
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
## [Unreleased]
|
2
|
+
- Nothing new yet.
|
2
3
|
|
3
4
|
## [0.1.0] - 2021-06-02
|
4
5
|
|
5
|
-
- Initial release
|
6
|
+
- Initial release!
|
7
|
+
You can now translate strings! Be free!
|
8
|
+
|
9
|
+
## [0.2.0] - 2021-06-03
|
10
|
+
|
11
|
+
- Commentation and cleanup of unneeded files.
|
12
|
+
|
13
|
+
## [0.3.0] - 2021-06-03
|
14
|
+
|
15
|
+
- Gemfile.lock was not automatically updated, testing it a bit.
|
16
|
+
Seems like you need to update it by hand!
|
17
|
+
|
18
|
+
## [0.4.0] - 2021-06-05
|
19
|
+
|
20
|
+
- The translated new string now knows what language it is.
|
21
|
+
|
22
|
+
## [0.5.0] - 2021-06-06
|
23
|
+
|
24
|
+
- Add TranslatableString class to work around frozen string literal magic comment.
|
25
|
+
Also will not crash with frozen strings now.
|
26
|
+
|
27
|
+
## [0.6.0] - 2021-06-08
|
28
|
+
|
29
|
+
- Add option to use ENV variable DEEPL_HOST
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
translate_self (0.
|
4
|
+
translate_self (0.6.0)
|
5
|
+
deepl-rb
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
9
10
|
ast (2.4.2)
|
10
|
-
byebug (11.1.3)
|
11
11
|
deepl-rb (2.3.0)
|
12
12
|
diff-lcs (1.4.4)
|
13
13
|
parallel (1.20.1)
|
@@ -48,10 +48,8 @@ PLATFORMS
|
|
48
48
|
x86_64-linux
|
49
49
|
|
50
50
|
DEPENDENCIES
|
51
|
-
byebug
|
52
|
-
deepl-rb
|
53
51
|
rake (~> 13.0)
|
54
|
-
rspec (~> 3.
|
52
|
+
rspec (~> 3.2)
|
55
53
|
rubocop (~> 1.7)
|
56
54
|
translate_self!
|
57
55
|
|
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# TranslateSelf
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/translate_self)
|
4
|
+
[](https://rubygems.org/gems/translate_self)
|
5
|
+
|
3
6
|
Strings in Ruby are a bit hard to understand if you're not an English speaker.
|
4
7
|
What does
|
5
8
|
```ruby
|
@@ -8,13 +11,19 @@ What does
|
|
8
11
|
even mean? I for one didn't study enough English to understand that!
|
9
12
|
But worry no more!
|
10
13
|
|
14
|
+
[](https://asciinema.org/a/TJU6H5iPopKrUwqwYnLUX3Y2o)
|
15
|
+
|
11
16
|
Just get a DeepL auth key and export it as follows:
|
12
17
|
|
13
18
|
```sh
|
14
19
|
export DEEPL_AUTH_KEY="your-api-token"
|
15
20
|
```
|
16
21
|
|
17
|
-
|
22
|
+
By default this gem uses the free DeepL servers, but you can also configure your own:
|
23
|
+
|
24
|
+
```sh
|
25
|
+
export DEEPL_HOST="non-free-host"
|
26
|
+
```
|
18
27
|
|
19
28
|
Now you can translate it to your language of chose with this gem!
|
20
29
|
```ruby
|
@@ -72,9 +81,37 @@ finn.translate
|
|
72
81
|
# I am a Finn
|
73
82
|
```
|
74
83
|
|
75
|
-
##
|
84
|
+
## Using with `# frozen_string_literal: true`
|
85
|
+
|
86
|
+
~~Does not work if you freeze the strings.~~
|
87
|
+
|
88
|
+
Now it does!
|
89
|
+
Just use the classes `TranslatableString` (aliased to `TString`).
|
90
|
+
So even if you have a magic comment making all your strings frozen,
|
91
|
+
you can still use the `translate` method like below:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
hello = TranslatableString.new('hello', language: 'en', to_language: 'fi')
|
95
|
+
hello.translate
|
96
|
+
# "Moi"
|
97
|
+
```
|
98
|
+
|
99
|
+
## Benchmark
|
76
100
|
|
77
|
-
|
101
|
+
Create a string 5000000 times.
|
102
|
+
|
103
|
+
```shell
|
104
|
+
C:\home\sampo\translate_self> ruby benchmark.rb
|
105
|
+
Rehearsal -------------------------------------------------------
|
106
|
+
normal string 0.252435 0.000000 0.252435 ( 0.252490)
|
107
|
+
translatable string 0.299736 0.000000 0.299736 ( 0.299789)
|
108
|
+
---------------------------------------------- total: 0.552171sec
|
109
|
+
|
110
|
+
user system total real
|
111
|
+
normal string 0.237091 0.000000 0.237091 ( 0.237091)
|
112
|
+
translatable string 0.237607 0.000000 0.237607 ( 0.237611)
|
113
|
+
```
|
114
|
+
So... the overhead might be surprisingly low!
|
78
115
|
|
79
116
|
## Development
|
80
117
|
|
data/benchmark.rb
ADDED
data/lib/translate_self.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'translate_self/version'
|
2
2
|
require_relative 'translate_self/translation'
|
3
|
+
require_relative 'translate_self/translatable_string'
|
3
4
|
require 'ext/string'
|
4
5
|
require 'deepl'
|
5
6
|
|
@@ -8,7 +9,8 @@ module TranslateSelf
|
|
8
9
|
include Translation
|
9
10
|
class Error < StandardError; end
|
10
11
|
DeepL.configure do |config|
|
11
|
-
config.
|
12
|
+
config.auth_key = ENV['DEEPL_AUTH_KEY']
|
13
|
+
config.host = ENV['DEEPL_HOST'] || 'https://api-free.deepl.com' # Default value is 'https://api.deepl.com'
|
12
14
|
end
|
13
15
|
AVAILABLE_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
|
14
16
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# A class that let's you translate strings with
|
2
|
+
# the language and to_language params even if you happen to
|
3
|
+
# freeze them. Aliased to TString.
|
4
|
+
class TranslatableString < String
|
5
|
+
def initialize(str, language: nil, to_language: nil)
|
6
|
+
replace str
|
7
|
+
self.language = language
|
8
|
+
self.to_language = to_language
|
9
|
+
end
|
10
|
+
end
|
11
|
+
TString = TranslatableString
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'byebug'
|
2
1
|
require 'deepl'
|
3
2
|
|
4
3
|
# The part where the actual translation happens.
|
@@ -9,14 +8,37 @@ module Translation
|
|
9
8
|
TranslateSelf::AVAILABLE_LANGUAGES
|
10
9
|
end
|
11
10
|
|
11
|
+
# Translates self to the desired language. \
|
12
|
+
# Sample usage:
|
13
|
+
# hello = 'hello'\
|
14
|
+
# hello.to_language = 'fi'
|
15
|
+
# moi = hello.translate
|
16
|
+
# pp moi
|
17
|
+
# # 'Hei'
|
18
|
+
# @return [String] a new and shiny translated string!
|
12
19
|
def translate
|
13
20
|
call_deepl(self, language, to_language)
|
14
21
|
end
|
15
22
|
|
23
|
+
# Replaces self with the translation. \
|
24
|
+
# Sample usage:
|
25
|
+
# hello = 'hello'\
|
26
|
+
# hello.to_language = 'fi'
|
27
|
+
# hello.translate!
|
28
|
+
# pp hello
|
29
|
+
# # 'Hei'
|
30
|
+
# @return [String] self replaced with the new translation
|
16
31
|
def translate!
|
17
32
|
replace translate
|
18
33
|
end
|
19
34
|
|
35
|
+
# Translates the string itself to a language the user wants to translate it to. \
|
36
|
+
# Sample usage:
|
37
|
+
# 'hello'.translate_to_fi
|
38
|
+
# # Hei
|
39
|
+
#
|
40
|
+
# @param [String] the language to translate to, e.g. "fi"
|
41
|
+
# @return [String] the contents translated to another language
|
20
42
|
%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].each do |lan|
|
21
43
|
define_method("translate_to_#{lan}") do |language = lan|
|
22
44
|
call_deepl(self, self.language, language)
|
@@ -26,10 +48,12 @@ module Translation
|
|
26
48
|
private
|
27
49
|
|
28
50
|
def call_deepl(text, language = self.language, to_lan = to_language)
|
29
|
-
|
51
|
+
warn 'No language given!' and return if to_lan.nil?
|
30
52
|
|
31
53
|
response = DeepL.translate text, language, to_lan
|
32
|
-
self.language = response.detected_source_language.downcase if self.language.nil?
|
33
|
-
response.text
|
54
|
+
self.language = response.detected_source_language.downcase if self.language.nil? && !frozen?
|
55
|
+
actual_translation = response.text
|
56
|
+
actual_translation.language = to_lan
|
57
|
+
actual_translation
|
34
58
|
end
|
35
59
|
end
|
data/translate_self.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.summary = 'TranslateSelf lets strings translate themselves. '
|
12
12
|
spec.description = 'Let the strings do the job for you. No need to do any of the manual work! \
|
13
13
|
The strings translate themselves!! Translate to Japanese, English, Finnish...'
|
14
|
-
spec.homepage = 'https://github.com/sampokuokkanen/
|
14
|
+
spec.homepage = 'https://github.com/sampokuokkanen/translate_self'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
|
17
17
|
|
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: 0.
|
4
|
+
version: 0.6.0
|
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-06-
|
11
|
+
date: 2021-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deepl-rb
|
@@ -75,14 +75,8 @@ executables: []
|
|
75
75
|
extensions: []
|
76
76
|
extra_rdoc_files: []
|
77
77
|
files:
|
78
|
-
- ".byebug_history"
|
79
78
|
- ".github/workflows/main.yml"
|
80
79
|
- ".gitignore"
|
81
|
-
- ".idea/.gitignore"
|
82
|
-
- ".idea/misc.xml"
|
83
|
-
- ".idea/modules.xml"
|
84
|
-
- ".idea/translate_self.iml"
|
85
|
-
- ".idea/vcs.xml"
|
86
80
|
- ".rspec"
|
87
81
|
- ".rubocop.yml"
|
88
82
|
- CHANGELOG.md
|
@@ -92,20 +86,22 @@ files:
|
|
92
86
|
- LICENSE.txt
|
93
87
|
- README.md
|
94
88
|
- Rakefile
|
89
|
+
- benchmark.rb
|
95
90
|
- bin/console
|
96
91
|
- bin/setup
|
97
92
|
- lib/ext/string.rb
|
98
93
|
- lib/translate_self.rb
|
94
|
+
- lib/translate_self/translatable_string.rb
|
99
95
|
- lib/translate_self/translation.rb
|
100
96
|
- lib/translate_self/version.rb
|
101
97
|
- translate_self.gemspec
|
102
|
-
homepage: https://github.com/sampokuokkanen/
|
98
|
+
homepage: https://github.com/sampokuokkanen/translate_self
|
103
99
|
licenses:
|
104
100
|
- MIT
|
105
101
|
metadata:
|
106
|
-
homepage_uri: https://github.com/sampokuokkanen/
|
107
|
-
source_code_uri: https://github.com/sampokuokkanen/
|
108
|
-
changelog_uri: https://github.com/sampokuokkanen/
|
102
|
+
homepage_uri: https://github.com/sampokuokkanen/translate_self
|
103
|
+
source_code_uri: https://github.com/sampokuokkanen/translate_self
|
104
|
+
changelog_uri: https://github.com/sampokuokkanen/translate_self
|
109
105
|
post_install_message:
|
110
106
|
rdoc_options: []
|
111
107
|
require_paths:
|
data/.byebug_history
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
c
|
2
|
-
@language
|
3
|
-
c
|
4
|
-
@language
|
5
|
-
self
|
6
|
-
c
|
7
|
-
self
|
8
|
-
c
|
9
|
-
self
|
10
|
-
c
|
11
|
-
self
|
12
|
-
c
|
13
|
-
suomalainen.language
|
14
|
-
suomalainen.language = 'fi'
|
15
|
-
suomalainen.language
|
16
|
-
c
|
17
|
-
suomalainen.language
|
18
|
-
c
|
19
|
-
self.language
|
20
|
-
c
|
21
|
-
self.language
|
22
|
-
self.language = 'fi'
|
23
|
-
response.detected_source_language
|
24
|
-
self.language.nil?
|
25
|
-
self.language
|
26
|
-
self
|
27
|
-
c
|
28
|
-
available_languages.include?(name.to_s[-2..-1])
|
29
|
-
available_languages.include?(name.to_s[-2..-1].to_sym)
|
30
|
-
exit
|
31
|
-
c
|
32
|
-
available_languages.include?(name.to_s[-2..-1].to_sym)
|
33
|
-
available_languages.include?(name.to_s[-2..-1])
|
34
|
-
name.to_s[-2..-1]
|
35
|
-
name
|
36
|
-
c
|
37
|
-
languages.map(&:code).map(&:downcase)
|
38
|
-
languages.map(&:code)
|
39
|
-
languages.map(&:code.downcase.to_sym)
|
40
|
-
languages = DeepL.languages
|
41
|
-
c
|
42
|
-
self
|
43
|
-
self.replace 'kon'
|
44
|
-
self.instance_methods(false)
|
45
|
-
self.attributes
|
46
|
-
self = 'kon'
|
47
|
-
language
|
48
|
-
self
|
data/.idea/.gitignore
DELETED
data/.idea/misc.xml
DELETED
data/.idea/modules.xml
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<project version="4">
|
3
|
-
<component name="ProjectModuleManager">
|
4
|
-
<modules>
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/translate_self.iml" filepath="$PROJECT_DIR$/.idea/translate_self.iml" />
|
6
|
-
</modules>
|
7
|
-
</component>
|
8
|
-
</project>
|
data/.idea/translate_self.iml
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
3
|
-
<component name="ModuleRunConfigurationManager">
|
4
|
-
<shared />
|
5
|
-
</component>
|
6
|
-
<component name="NewModuleRootManager">
|
7
|
-
<content url="file://$MODULE_DIR$">
|
8
|
-
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
9
|
-
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
10
|
-
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
11
|
-
</content>
|
12
|
-
<orderEntry type="inheritedJdk" />
|
13
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
14
|
-
<orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, rbenv: 3.0.1) [gem]" level="application" />
|
15
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.2.17, rbenv: 3.0.1) [gem]" level="application" />
|
16
|
-
<orderEntry type="library" scope="PROVIDED" name="byebug (v11.1.3, rbenv: 3.0.1) [gem]" level="application" />
|
17
|
-
<orderEntry type="library" scope="PROVIDED" name="deepl-rb (v2.3.0, rbenv: 3.0.1) [gem]" level="application" />
|
18
|
-
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.4.4, rbenv: 3.0.1) [gem]" level="application" />
|
19
|
-
<orderEntry type="library" scope="PROVIDED" name="parallel (v1.20.1, rbenv: 3.0.1) [gem]" level="application" />
|
20
|
-
<orderEntry type="library" scope="PROVIDED" name="parser (v3.0.1.1, rbenv: 3.0.1) [gem]" level="application" />
|
21
|
-
<orderEntry type="library" scope="PROVIDED" name="rainbow (v3.0.0, rbenv: 3.0.1) [gem]" level="application" />
|
22
|
-
<orderEntry type="library" scope="PROVIDED" name="rake (v13.0.3, rbenv: 3.0.1) [gem]" level="application" />
|
23
|
-
<orderEntry type="library" scope="PROVIDED" name="rbs (v1.0.4, rbenv: 3.0.1) [gem]" level="application" />
|
24
|
-
<orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.1.1, rbenv: 3.0.1) [gem]" level="application" />
|
25
|
-
<orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.5, rbenv: 3.0.1) [gem]" level="application" />
|
26
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.10.0, rbenv: 3.0.1) [gem]" level="application" />
|
27
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.10.1, rbenv: 3.0.1) [gem]" level="application" />
|
28
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.10.1, rbenv: 3.0.1) [gem]" level="application" />
|
29
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.10.2, rbenv: 3.0.1) [gem]" level="application" />
|
30
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.10.2, rbenv: 3.0.1) [gem]" level="application" />
|
31
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop (v1.16.0, rbenv: 3.0.1) [gem]" level="application" />
|
32
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.7.0, rbenv: 3.0.1) [gem]" level="application" />
|
33
|
-
<orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.11.0, rbenv: 3.0.1) [gem]" level="application" />
|
34
|
-
<orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v2.0.0, rbenv: 3.0.1) [gem]" level="application" />
|
35
|
-
</component>
|
36
|
-
</module>
|