to_lang 0.3.1 → 1.0.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 +7 -0
- data/.rspec +0 -1
- data/.travis.yml +2 -3
- data/Gemfile +1 -1
- data/LICENSE +1 -1
- data/README.md +190 -0
- data/Rakefile +3 -4
- data/lib/to_lang/version.rb +1 -1
- data/spec/to_lang/connector_spec.rb +23 -16
- data/spec/to_lang/core_ext_spec.rb +6 -6
- data/spec/to_lang/translatable_spec.rb +9 -13
- data/spec/to_lang_spec.rb +4 -4
- data/to_lang.gemspec +8 -10
- metadata +38 -79
- data/Guardfile +0 -5
- data/README.textile +0 -178
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: d9bf52a1b7871b0277a755c4d0e85ff30cb30d18
|
|
4
|
+
data.tar.gz: 238cccb4c0cafeefe0c7c3b187880aa13e93a928
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 3edd8b9f2ba89e5475675abb194448316376fb8c3c099a4a4ba08eb1afd07c518eb6016c123a5212ddf3dbab0594046102f48ab326f965d8c03ff32e6d2ab19a
|
|
7
|
+
data.tar.gz: 3b8bafb0ff80ab4cd75dd5d4a7dbf87cb79ef35bea66a14548925f79bac7988a952d5bea037a7609f81dac51bfa37aec7d53d357a7522d9d850befe9af183901
|
data/.rspec
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/LICENSE
CHANGED
data/README.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
[](http://badge.fury.io/rb/to_lang)
|
|
2
|
+
[](https://travis-ci.org/jimmycuadra/to_lang)
|
|
3
|
+
[](https://codeclimate.com/github/jimmycuadra/to_lang)
|
|
4
|
+
|
|
5
|
+
# to_lang
|
|
6
|
+
|
|
7
|
+
**to_lang** is a Ruby library that adds language translation methods to strings and arrays, backed by the Google Translate API.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
Simply run:
|
|
12
|
+
|
|
13
|
+
``` bash
|
|
14
|
+
gem install to_lang
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
To use **to_lang**, require the library, then call `ToLang.start` with your Google Translate API key. At this point you will have access to all the new translation methods, which take the form `to_language`, where "language" is the language you wish to translate to.
|
|
20
|
+
|
|
21
|
+
Google Translate attempts to detect the source language, but you can specify it explicitly by calling methods in the form `to_target_language_from_source_language`, where "target language" is the language you are translating to and "source_language" is the language you are starting with. An inverted form with equivalent functionality, `from_source_language_to_target_language` is also available. These methods are generated dynamically and will not appear in a calls to `String.instance_methods` or `Array.instance_methods` until they have been called once. Strings and arrays will, however, `respond_to?` these methods prior to their dynamic definition.
|
|
22
|
+
|
|
23
|
+
The dynamic methods are simply syntactic sugar for `String#translate` and `Array#translate`, which you can use directly as well.
|
|
24
|
+
|
|
25
|
+
**to_lang** also comes with a command line utility for quick translations from the shell.
|
|
26
|
+
|
|
27
|
+
## String Examples
|
|
28
|
+
|
|
29
|
+
Load and initialize **to_lang**:
|
|
30
|
+
|
|
31
|
+
``` ruby
|
|
32
|
+
require 'to_lang'
|
|
33
|
+
|
|
34
|
+
ToLang.start('YOUR_GOOGLE_TRANSLATE_API_KEY')
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Translate some text to Spanish:
|
|
38
|
+
|
|
39
|
+
``` ruby
|
|
40
|
+
"Very cool gem!".to_spanish # => "Muy fresco joya!"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
A case where the source language is ambiguous:
|
|
44
|
+
|
|
45
|
+
``` ruby
|
|
46
|
+
"a pie".to_spanish # => "a pie"
|
|
47
|
+
"a pie".to_spanish_from_english # => "un pastel"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Or equivalently:
|
|
51
|
+
|
|
52
|
+
``` ruby
|
|
53
|
+
"a pie".from_english_to_spanish # => "un pastel"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Using `String#translate` directly:
|
|
57
|
+
|
|
58
|
+
``` ruby
|
|
59
|
+
"hello world".translate('es') # => "hola mundo"
|
|
60
|
+
"a pie".translate('es', :from => 'en') # => "un pastel"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Array Examples
|
|
64
|
+
|
|
65
|
+
Arrays can be used to translate a batch of strings in a single method call and a single HTTP request. The exact same methods shown above work for arrays as well. For example, to translate an array of strings to Spanish:
|
|
66
|
+
|
|
67
|
+
``` ruby
|
|
68
|
+
["One", "Two", "Three"].to_spanish # => ["Uno", "Dos", "Tres"]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Debugging
|
|
72
|
+
|
|
73
|
+
`translate` also has the advantage of allowing you to get debug output for a translation. `translate` accepts a `:debug` option with three possible values: `:request`, `:response`, and `:all`. `:request` will cause the method to return a hash of the parameters that will be sent to the Google Translate API. `:response` will cause the method to return the full response from the API call as a hash. `:all` will cause the method to return a hash which contains both the request hash and the full response.
|
|
74
|
+
|
|
75
|
+
``` ruby
|
|
76
|
+
"hello world".translate('es', :debug => :request)
|
|
77
|
+
# => {:key=>"my_key", :q=>"hello world", :target=>"es"}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
``` ruby
|
|
81
|
+
"hello world".translate('es', :debug => :response)
|
|
82
|
+
# => {"data"=>{"translations"=>[{"translatedText"=>"hola mundo", "detectedSourceLanguage"=>"en"}]}}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
``` ruby
|
|
86
|
+
"hello world".translate('es', :debug => :all)
|
|
87
|
+
# => {:request=>{:key=>"my_key", :q=>"hello world", :target=>"es"},
|
|
88
|
+
# :response=>{"data"=>{"translations"=>[{"translatedText"=>"hola mundo",
|
|
89
|
+
# "detectedSourceLanguage"=>"en"}]}}}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Command Line Interface
|
|
93
|
+
|
|
94
|
+
The command line utility `to_lang` has the following interface:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
to_lang [--key API_KEY] [--from SOURCE_LANGUAGE] --to DESTINATION_LANGUAGE STRING [STRING, ...]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`to_lang` accepts a space separated list of strings to translate. At least one string is required, as is the `--to` option, which accepts a language code (e.g. "es"). `to_lang` will attempt to load a Google Translate API key from the `GOOGLE_TRANSLATE_API_KEY` environment variable. If one is not available, it must be passed in from the command line with the `--key` option. For complete usage instructions, invoke the utility with the `--help` option.
|
|
101
|
+
|
|
102
|
+
Examples:
|
|
103
|
+
|
|
104
|
+
A simple translation with the key being passed in directly from the command line:
|
|
105
|
+
|
|
106
|
+
``` bash
|
|
107
|
+
to_lang --key YOUR_GOOGLE_TRANSLATE_API_KEY --to es "hello world"
|
|
108
|
+
hola mundo
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
With the key in an environment variable and multiple strings:
|
|
112
|
+
|
|
113
|
+
``` bash
|
|
114
|
+
to_lang --to es "hello world" "a pie"
|
|
115
|
+
hola mundo
|
|
116
|
+
a pie
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Specifying the source language:
|
|
120
|
+
|
|
121
|
+
``` bash
|
|
122
|
+
to_lang --from en --to es "hello world" "a pie"
|
|
123
|
+
hola mundo
|
|
124
|
+
un pastel
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Supported Languages
|
|
128
|
+
|
|
129
|
+
**to_lang** adds the following methods to strings and arrays. Each of these methods can be called with an explicit source language by appending `_from_source_language` or prepending `from_source_language_` to the method name.
|
|
130
|
+
|
|
131
|
+
* to_afrikaans
|
|
132
|
+
* to_albanian
|
|
133
|
+
* to_arabic
|
|
134
|
+
* to_belarusian
|
|
135
|
+
* to_bulgarian
|
|
136
|
+
* to_catalan
|
|
137
|
+
* to_simplified_chinese
|
|
138
|
+
* to_traditional_chinese
|
|
139
|
+
* to_croatian
|
|
140
|
+
* to_czech
|
|
141
|
+
* to_danish
|
|
142
|
+
* to_dutch
|
|
143
|
+
* to_english
|
|
144
|
+
* to_estonian
|
|
145
|
+
* to_filipino
|
|
146
|
+
* to_finnish
|
|
147
|
+
* to_french
|
|
148
|
+
* to_galician
|
|
149
|
+
* to_german
|
|
150
|
+
* to_greek
|
|
151
|
+
* to_haitian_creole
|
|
152
|
+
* to_hebrew
|
|
153
|
+
* to_hindi
|
|
154
|
+
* to_hungarian
|
|
155
|
+
* to_icelandic
|
|
156
|
+
* to_indonesian
|
|
157
|
+
* to_irish
|
|
158
|
+
* to_italian
|
|
159
|
+
* to_japanese
|
|
160
|
+
* to_latvian
|
|
161
|
+
* to_lithuanian
|
|
162
|
+
* to_macedonian
|
|
163
|
+
* to_malay
|
|
164
|
+
* to_maltese
|
|
165
|
+
* to_norwegian
|
|
166
|
+
* to_persian
|
|
167
|
+
* to_polish
|
|
168
|
+
* to_portuguese
|
|
169
|
+
* to_romanian
|
|
170
|
+
* to_russian
|
|
171
|
+
* to_serbian
|
|
172
|
+
* to_slovak
|
|
173
|
+
* to_slovenian
|
|
174
|
+
* to_spanish
|
|
175
|
+
* to_swahili
|
|
176
|
+
* to_swedish
|
|
177
|
+
* to_thai
|
|
178
|
+
* to_turkish
|
|
179
|
+
* to_ukrainian
|
|
180
|
+
* to_vietnamese
|
|
181
|
+
* to_welsh
|
|
182
|
+
* to_yiddish
|
|
183
|
+
|
|
184
|
+
## Documentation
|
|
185
|
+
|
|
186
|
+
API documentation can be found at [rubydoc.info](http://rubydoc.info/github/jimmycuadra/to_lang/master/frames).
|
|
187
|
+
|
|
188
|
+
## Feedback and Contributions
|
|
189
|
+
|
|
190
|
+
Feedback is greatly appreciated. If you have any problems with **to_lang**, please open a new issue. Make sure you are using the latest version of the gem, or HEAD if you've cloned the Git repository directly. Please include debugging output from using the `:debug` option of `translate`, if relevant to your issue. If you'd like to fix bugs, add features, or improve the library in general, feel free to fork the project and send me a pull request with your changes.
|
data/Rakefile
CHANGED
data/lib/to_lang/version.rb
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
3
|
describe ToLang::Connector do
|
|
4
|
-
|
|
5
|
-
@connector = ToLang::Connector.new('apikey')
|
|
6
|
-
end
|
|
4
|
+
let(:connector) { ToLang::Connector.new('apikey') }
|
|
7
5
|
|
|
8
6
|
describe "custom query string normalizer" do
|
|
9
7
|
it "returns a query string with unsorted parameters" do
|
|
@@ -13,19 +11,21 @@ describe ToLang::Connector do
|
|
|
13
11
|
:target => 'es',
|
|
14
12
|
:q => ["banana", "apple"]
|
|
15
13
|
}
|
|
16
|
-
|
|
14
|
+
expect(
|
|
15
|
+
ToLang::Connector::UNSORTED_QUERY_STRING_NORMALIZER.call(params)
|
|
16
|
+
).to match(/q=banana&q=apple/)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
it "stores a key when initialized" do
|
|
21
|
-
|
|
21
|
+
expect(connector.key).not_to be_nil
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
describe "#request" do
|
|
25
25
|
# helper methods
|
|
26
26
|
def stub_response(parsed_response)
|
|
27
|
-
mock_response =
|
|
28
|
-
ToLang::Connector.
|
|
27
|
+
mock_response = double('HTTParty::Response', :parsed_response => parsed_response)
|
|
28
|
+
allow(ToLang::Connector).to receive(:post).and_return(mock_response)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def stub_good_response(translated_text)
|
|
@@ -51,7 +51,7 @@ describe ToLang::Connector do
|
|
|
51
51
|
context "with only a target language" do
|
|
52
52
|
it "returns the translated string" do
|
|
53
53
|
stub_good_response "hola mundo"
|
|
54
|
-
|
|
54
|
+
expect(connector.request("hello world", "es")).to eq("hola mundo")
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
|
@@ -59,14 +59,14 @@ describe ToLang::Connector do
|
|
|
59
59
|
context "and no source language specified" do
|
|
60
60
|
it "returns the same string" do
|
|
61
61
|
stub_good_response "a pie"
|
|
62
|
-
|
|
62
|
+
expect(connector.request("a pie", "es")).to eq("a pie")
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
context "and a source language specified" do
|
|
67
67
|
it "returns the translated string" do
|
|
68
68
|
stub_good_response "un pastel"
|
|
69
|
-
|
|
69
|
+
expect(connector.request("a pie", "es", :from => "en")).to eq("un pastel")
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
end
|
|
@@ -74,28 +74,35 @@ describe ToLang::Connector do
|
|
|
74
74
|
context "with a bad language pair" do
|
|
75
75
|
it "raises an exception" do
|
|
76
76
|
stub_bad_response "Bad language pair: en|en"
|
|
77
|
-
expect {
|
|
77
|
+
expect { connector.request("a pie", "en", :from => "en") }.to raise_error(RuntimeError, "Bad language pair: en|en")
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
context "when debugging the request" do
|
|
82
82
|
it "returns the request URL" do
|
|
83
|
-
|
|
83
|
+
expect(connector.request("hello world", "es", :from => "en", :debug => :request)).to eq({
|
|
84
|
+
:key=> "apikey", :q => "hello world", :target => "es", :source => "en"
|
|
85
|
+
})
|
|
84
86
|
end
|
|
85
87
|
end
|
|
86
88
|
|
|
87
89
|
context "when debugging the response" do
|
|
88
90
|
it "returns the full parsed response" do
|
|
89
91
|
expected_response = stub_good_response("hola mundo")
|
|
90
|
-
|
|
92
|
+
expect(
|
|
93
|
+
connector.request("hello world", "es", :from => "en", :debug => :response)
|
|
94
|
+
).to eq(expected_response)
|
|
91
95
|
end
|
|
92
96
|
end
|
|
93
97
|
|
|
94
98
|
context "when debugging the request and the response" do
|
|
95
99
|
it "returns a hash with the request URL and the full parsed response" do
|
|
96
100
|
expected_response = stub_good_response("hola mundo")
|
|
97
|
-
output =
|
|
98
|
-
output.
|
|
101
|
+
output = connector.request("hello world", "es", :from => "en", :debug => :all)
|
|
102
|
+
expect(output).to eq({
|
|
103
|
+
:request => { :key=> "apikey", :q => "hello world", :target => "es", :source => "en" },
|
|
104
|
+
:response => expected_response
|
|
105
|
+
})
|
|
99
106
|
end
|
|
100
107
|
end
|
|
101
108
|
end
|
|
@@ -103,7 +110,7 @@ describe ToLang::Connector do
|
|
|
103
110
|
context "given an array of strings" do
|
|
104
111
|
it "returns an array of translated strings" do
|
|
105
112
|
stub_good_array_response ["hola", "mundo"]
|
|
106
|
-
|
|
113
|
+
expect(connector.request(["hello", "world"], "es")).to eq(["hola", "mundo"])
|
|
107
114
|
end
|
|
108
115
|
end
|
|
109
116
|
end
|
|
@@ -12,33 +12,33 @@ describe Hash do
|
|
|
12
12
|
|
|
13
13
|
test_hashes.each do |hash, params|
|
|
14
14
|
it "converts hash: #{hash.inspect} to params: #{params.inspect}" do
|
|
15
|
-
hash.to_params.split('&').sort.
|
|
15
|
+
expect(hash.to_params.split('&').sort).to eq(params.split('&').sort)
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it "doesn't leave a trailing &" do
|
|
20
|
-
{
|
|
20
|
+
expect({
|
|
21
21
|
:name => 'Bob',
|
|
22
22
|
:address => {
|
|
23
23
|
:street => '111 Ruby Ave.',
|
|
24
24
|
:city => 'Ruby Central',
|
|
25
25
|
:phones => ['111-111-1111', '222-222-2222']
|
|
26
26
|
}
|
|
27
|
-
}.to_params.
|
|
27
|
+
}.to_params).not_to match(/&$/)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
it "URL encodes unsafe characters" do
|
|
31
|
-
{ :q => "?&\" +" }.to_params.
|
|
31
|
+
expect({ :q => "?&\" +" }.to_params).to eq("q=%3F%26%22%20%2B")
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
it "converts deeply nested hashes" do
|
|
35
|
-
{
|
|
35
|
+
expect({
|
|
36
36
|
:one => {
|
|
37
37
|
:two => {
|
|
38
38
|
:three => true
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
}.to_params.
|
|
41
|
+
}.to_params).to eq("one[two][three]=true")
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
end
|
|
@@ -7,44 +7,40 @@ describe "A translatable class" do
|
|
|
7
7
|
|
|
8
8
|
describe "#translate" do
|
|
9
9
|
it "calls ToLang::Connector#request" do
|
|
10
|
-
ToLang.connector.
|
|
11
|
-
ToLang.connector.should_receive(:request).with("hello world", "es")
|
|
10
|
+
expect(ToLang.connector).to receive(:request).with("hello world", "es")
|
|
12
11
|
"hello world".translate("es")
|
|
13
12
|
end
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
it "will respond to :to_<language>" do
|
|
17
|
-
"hello world".
|
|
16
|
+
expect("hello world").to respond_to(:to_spanish)
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
it "will respond to :to_<target>_from_<source>" do
|
|
21
|
-
"hello world".
|
|
20
|
+
expect("hello world").to respond_to(:to_spanish_from_english)
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
it "will respond to :from_<source>_to_<target>" do
|
|
25
|
-
"hello world".
|
|
24
|
+
expect("hello world").to respond_to(:from_english_to_spanish)
|
|
26
25
|
end
|
|
27
26
|
|
|
28
27
|
it "translates to <language> when sent :to_<language>" do
|
|
29
|
-
ToLang.connector.
|
|
30
|
-
ToLang.connector.should_receive(:request).with("hello world", 'es')
|
|
28
|
+
expect(ToLang.connector).to receive(:request).with("hello world", 'es')
|
|
31
29
|
"hello world".send(:to_spanish)
|
|
32
30
|
end
|
|
33
31
|
|
|
34
32
|
it "translates to <target> from <source> when sent :to_<target>_from_<source>" do
|
|
35
|
-
ToLang.connector.
|
|
36
|
-
ToLang.connector.should_receive(:request).with("hello world", 'es', :from => 'en')
|
|
33
|
+
expect(ToLang.connector).to receive(:request).with("hello world", 'es', :from => 'en')
|
|
37
34
|
"hello world".send(:to_spanish_from_english)
|
|
38
35
|
end
|
|
39
36
|
|
|
40
37
|
it "translates to <target> from <source> when sent :from_<source>_to_<target>" do
|
|
41
|
-
ToLang.connector.
|
|
42
|
-
ToLang.connector.should_receive(:request).with("hello world", 'es', :from => 'en')
|
|
38
|
+
expect(ToLang.connector).to receive(:request).with("hello world", 'es', :from => 'en')
|
|
43
39
|
"hello world".send(:from_english_to_spanish)
|
|
44
40
|
end
|
|
45
41
|
|
|
46
42
|
it "defines magic methods when first called and doesn't call :method_missing after that" do
|
|
47
|
-
ToLang.connector.
|
|
43
|
+
allow(ToLang.connector).to receive(:request)
|
|
48
44
|
string = "hello world"
|
|
49
45
|
magic_methods = lambda do
|
|
50
46
|
string.to_spanish
|
|
@@ -52,7 +48,7 @@ describe "A translatable class" do
|
|
|
52
48
|
string.from_english_to_spanish
|
|
53
49
|
end
|
|
54
50
|
magic_methods.call
|
|
55
|
-
string.
|
|
51
|
+
expect(string).not_to receive(:method_missing)
|
|
56
52
|
magic_methods.call
|
|
57
53
|
end
|
|
58
54
|
|
data/spec/to_lang_spec.rb
CHANGED
|
@@ -7,19 +7,19 @@ describe ToLang do
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
it "returns false if :start was already called" do
|
|
10
|
-
ToLang.start('apikey').
|
|
10
|
+
expect(ToLang.start('apikey')).to be_falsy
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
it "stores a ToLang::Connector object" do
|
|
14
|
-
ToLang.connector.
|
|
14
|
+
expect(ToLang.connector).to be_an_instance_of(ToLang::Connector)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it "mixes Translatable into String" do
|
|
18
|
-
String.
|
|
18
|
+
expect(String).to include(ToLang::Translatable)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
it "mixes Translatable into Array" do
|
|
22
|
-
Array.
|
|
22
|
+
expect(Array).to include(ToLang::Translatable)
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
end
|
data/to_lang.gemspec
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require "to_lang/version"
|
|
3
5
|
|
|
4
6
|
Gem::Specification.new do |s|
|
|
5
7
|
s.name = "to_lang"
|
|
@@ -16,12 +18,8 @@ Gem::Specification.new do |s|
|
|
|
16
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
17
19
|
s.require_paths = ["lib"]
|
|
18
20
|
|
|
19
|
-
s.add_dependency "httparty", "
|
|
20
|
-
s.add_development_dependency "rake"
|
|
21
|
-
s.add_development_dependency "rspec", "
|
|
22
|
-
s.add_development_dependency "simplecov", "
|
|
23
|
-
s.add_development_dependency "RedCloth", "~> 4.2.8"
|
|
24
|
-
s.add_development_dependency "guard-rspec", "~> 0.4.5"
|
|
25
|
-
s.add_development_dependency "rb-fsevent", "~> 0.4.3" if RUBY_PLATFORM[/darwin/]
|
|
26
|
-
s.add_development_dependency "growl_notify", "~> 0.0.1" if RUBY_PLATFORM[/darwin/]
|
|
21
|
+
s.add_dependency "httparty", ">= 0.8.0"
|
|
22
|
+
s.add_development_dependency "rake"
|
|
23
|
+
s.add_development_dependency "rspec", ">= 3.1.0"
|
|
24
|
+
s.add_development_dependency "simplecov", ">= 0.5.3"
|
|
27
25
|
end
|
metadata
CHANGED
|
@@ -1,104 +1,71 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: to_lang
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.0.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Jimmy Cuadra
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: httparty
|
|
16
|
-
requirement:
|
|
17
|
-
none: false
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
16
|
requirements:
|
|
19
|
-
- -
|
|
17
|
+
- - ">="
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
19
|
version: 0.8.0
|
|
22
20
|
type: :runtime
|
|
23
21
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
25
|
-
- !ruby/object:Gem::Dependency
|
|
26
|
-
name: rake
|
|
27
|
-
requirement: &70175836588020 !ruby/object:Gem::Requirement
|
|
28
|
-
none: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
29
23
|
requirements:
|
|
30
|
-
- -
|
|
24
|
+
- - ">="
|
|
31
25
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 0.
|
|
33
|
-
type: :development
|
|
34
|
-
prerelease: false
|
|
35
|
-
version_requirements: *70175836588020
|
|
26
|
+
version: 0.8.0
|
|
36
27
|
- !ruby/object:Gem::Dependency
|
|
37
|
-
name:
|
|
38
|
-
requirement:
|
|
39
|
-
none: false
|
|
28
|
+
name: rake
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
40
30
|
requirements:
|
|
41
|
-
- -
|
|
31
|
+
- - ">="
|
|
42
32
|
- !ruby/object:Gem::Version
|
|
43
|
-
version:
|
|
33
|
+
version: '0'
|
|
44
34
|
type: :development
|
|
45
35
|
prerelease: false
|
|
46
|
-
version_requirements:
|
|
47
|
-
- !ruby/object:Gem::Dependency
|
|
48
|
-
name: simplecov
|
|
49
|
-
requirement: &70175836583680 !ruby/object:Gem::Requirement
|
|
50
|
-
none: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
37
|
requirements:
|
|
52
|
-
- -
|
|
38
|
+
- - ">="
|
|
53
39
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0
|
|
55
|
-
type: :development
|
|
56
|
-
prerelease: false
|
|
57
|
-
version_requirements: *70175836583680
|
|
40
|
+
version: '0'
|
|
58
41
|
- !ruby/object:Gem::Dependency
|
|
59
|
-
name:
|
|
60
|
-
requirement:
|
|
61
|
-
none: false
|
|
42
|
+
name: rspec
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
62
44
|
requirements:
|
|
63
|
-
- -
|
|
45
|
+
- - ">="
|
|
64
46
|
- !ruby/object:Gem::Version
|
|
65
|
-
version:
|
|
47
|
+
version: 3.1.0
|
|
66
48
|
type: :development
|
|
67
49
|
prerelease: false
|
|
68
|
-
version_requirements:
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: guard-rspec
|
|
71
|
-
requirement: &70175836580900 !ruby/object:Gem::Requirement
|
|
72
|
-
none: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
51
|
requirements:
|
|
74
|
-
- -
|
|
52
|
+
- - ">="
|
|
75
53
|
- !ruby/object:Gem::Version
|
|
76
|
-
version:
|
|
77
|
-
type: :development
|
|
78
|
-
prerelease: false
|
|
79
|
-
version_requirements: *70175836580900
|
|
54
|
+
version: 3.1.0
|
|
80
55
|
- !ruby/object:Gem::Dependency
|
|
81
|
-
name:
|
|
82
|
-
requirement:
|
|
83
|
-
none: false
|
|
56
|
+
name: simplecov
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
84
58
|
requirements:
|
|
85
|
-
- -
|
|
59
|
+
- - ">="
|
|
86
60
|
- !ruby/object:Gem::Version
|
|
87
|
-
version: 0.
|
|
61
|
+
version: 0.5.3
|
|
88
62
|
type: :development
|
|
89
63
|
prerelease: false
|
|
90
|
-
version_requirements:
|
|
91
|
-
- !ruby/object:Gem::Dependency
|
|
92
|
-
name: growl_notify
|
|
93
|
-
requirement: &70175836578060 !ruby/object:Gem::Requirement
|
|
94
|
-
none: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
95
65
|
requirements:
|
|
96
|
-
- -
|
|
66
|
+
- - ">="
|
|
97
67
|
- !ruby/object:Gem::Version
|
|
98
|
-
version: 0.
|
|
99
|
-
type: :development
|
|
100
|
-
prerelease: false
|
|
101
|
-
version_requirements: *70175836578060
|
|
68
|
+
version: 0.5.3
|
|
102
69
|
description: Adds language translation methods to strings and arrays, backed by the
|
|
103
70
|
Google Translate API
|
|
104
71
|
email:
|
|
@@ -108,14 +75,13 @@ executables:
|
|
|
108
75
|
extensions: []
|
|
109
76
|
extra_rdoc_files: []
|
|
110
77
|
files:
|
|
111
|
-
- .gitignore
|
|
112
|
-
- .rspec
|
|
113
|
-
- .travis.yml
|
|
114
|
-
- .yardopts
|
|
78
|
+
- ".gitignore"
|
|
79
|
+
- ".rspec"
|
|
80
|
+
- ".travis.yml"
|
|
81
|
+
- ".yardopts"
|
|
115
82
|
- Gemfile
|
|
116
|
-
- Guardfile
|
|
117
83
|
- LICENSE
|
|
118
|
-
- README.
|
|
84
|
+
- README.md
|
|
119
85
|
- Rakefile
|
|
120
86
|
- bin/to_lang
|
|
121
87
|
- lib/to_lang.rb
|
|
@@ -132,33 +98,26 @@ files:
|
|
|
132
98
|
- to_lang.gemspec
|
|
133
99
|
homepage: https://github.com/jimmycuadra/to_lang
|
|
134
100
|
licenses: []
|
|
101
|
+
metadata: {}
|
|
135
102
|
post_install_message:
|
|
136
103
|
rdoc_options: []
|
|
137
104
|
require_paths:
|
|
138
105
|
- lib
|
|
139
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
|
-
none: false
|
|
141
107
|
requirements:
|
|
142
|
-
- -
|
|
108
|
+
- - ">="
|
|
143
109
|
- !ruby/object:Gem::Version
|
|
144
110
|
version: '0'
|
|
145
|
-
segments:
|
|
146
|
-
- 0
|
|
147
|
-
hash: -2363449024598261982
|
|
148
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
|
-
none: false
|
|
150
112
|
requirements:
|
|
151
|
-
- -
|
|
113
|
+
- - ">="
|
|
152
114
|
- !ruby/object:Gem::Version
|
|
153
115
|
version: '0'
|
|
154
|
-
segments:
|
|
155
|
-
- 0
|
|
156
|
-
hash: -2363449024598261982
|
|
157
116
|
requirements: []
|
|
158
117
|
rubyforge_project: to_lang
|
|
159
|
-
rubygems_version:
|
|
118
|
+
rubygems_version: 2.4.5
|
|
160
119
|
signing_key:
|
|
161
|
-
specification_version:
|
|
120
|
+
specification_version: 4
|
|
162
121
|
summary: Translate strings with Google Translate
|
|
163
122
|
test_files:
|
|
164
123
|
- spec/spec_helper.rb
|
data/Guardfile
DELETED
data/README.textile
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
h1. to_lang
|
|
2
|
-
|
|
3
|
-
*to_lang* is a Ruby library that adds language translation methods to strings and arrays, backed by the Google Translate API.
|
|
4
|
-
|
|
5
|
-
h2. Build Status
|
|
6
|
-
|
|
7
|
-
"!https://travis-ci.org/jimmycuadra/to_lang.png!":http://travis-ci.org/jimmycuadra/to_lang
|
|
8
|
-
|
|
9
|
-
h2. Installation
|
|
10
|
-
|
|
11
|
-
Simply run @gem install to_lang@.
|
|
12
|
-
|
|
13
|
-
h2. Usage
|
|
14
|
-
|
|
15
|
-
To use *to_lang*, require the library, then call @ToLang.start@ with your Google Translate API key. At this point you will have access to all the new translation methods, which take the form @to_language@, where "language" is the language you wish to translate to.
|
|
16
|
-
|
|
17
|
-
Google Translate attempts to detect the source language, but you can specify it explicitly by calling methods in the form @to_target_language_from_source_language@, where "target language" is the language you are translating to and "source_language" is the language you are starting with. An inverted form with equivalent functionality, @from_source_language_to_target_language@ is also available. These methods are generated dynamically and will not appear in a calls to @String.instance_methods@ or @Array.instance_methods@ until they have been called once. Strings and arrays will, however, @respond_to?@ these methods prior to their dynamic definition.
|
|
18
|
-
|
|
19
|
-
The dynamic methods are simply syntactic sugar for @String#translate@ and @Array#translate@, which you can use directly as well.
|
|
20
|
-
|
|
21
|
-
*to_lang* also comes with a command line utility for quick translations from the shell.
|
|
22
|
-
|
|
23
|
-
h2. String Examples
|
|
24
|
-
|
|
25
|
-
Load and initialize *to_lang*:
|
|
26
|
-
|
|
27
|
-
<pre><code>require 'to_lang'
|
|
28
|
-
ToLang.start('YOUR_GOOGLE_TRANSLATE_API_KEY')
|
|
29
|
-
</code></pre>
|
|
30
|
-
|
|
31
|
-
Translate some text to Spanish:
|
|
32
|
-
|
|
33
|
-
<pre><code>"Very cool gem!".to_spanish
|
|
34
|
-
=> "Muy fresco joya!"
|
|
35
|
-
</code></pre>
|
|
36
|
-
|
|
37
|
-
A case where the source language is ambiguous:
|
|
38
|
-
|
|
39
|
-
<pre><code>"a pie".to_spanish
|
|
40
|
-
=> "a pie"
|
|
41
|
-
"a pie".to_spanish_from_english
|
|
42
|
-
=> "un pastel"
|
|
43
|
-
</code></pre>
|
|
44
|
-
|
|
45
|
-
Or equivalently:
|
|
46
|
-
|
|
47
|
-
<pre><code>"a pie".from_english_to_spanish
|
|
48
|
-
=> "un pastel"
|
|
49
|
-
</code></pre>
|
|
50
|
-
|
|
51
|
-
Using @String#translate@ directly:
|
|
52
|
-
|
|
53
|
-
<pre><code>"hello world".translate('es')
|
|
54
|
-
=> "hola mundo"
|
|
55
|
-
"a pie".translate('es', :from => 'en')
|
|
56
|
-
=> "un pastel"
|
|
57
|
-
</code></pre>
|
|
58
|
-
|
|
59
|
-
h2. Array Examples
|
|
60
|
-
|
|
61
|
-
Arrays can be used to translate a batch of strings in a single method call and a single HTTP request. The exact same methods shown above work for arrays as well. For example, to translate an array of strings to Spanish:
|
|
62
|
-
|
|
63
|
-
<pre><code>["One", "Two", "Three"].to_spanish
|
|
64
|
-
=> ["Uno", "Dos", "Tres"]
|
|
65
|
-
</code></pre>
|
|
66
|
-
|
|
67
|
-
h2. Debugging
|
|
68
|
-
|
|
69
|
-
@translate@ also has the advantage of allowing you to get debug output for a translation. @translate@ accepts a @:debug@ option with three possible values: @:request@, @:response@, and @:all@. @:request@ will cause the method to return a hash of the parameters that will be sent to the Google Translate API. @:response@ will cause the method to return the full response from the API call as a hash. @:all@ will cause the method to return a hash which contains both the request hash and the full response.
|
|
70
|
-
|
|
71
|
-
<pre><code>"hello world".translate('es', :debug => :request)
|
|
72
|
-
=> {:key=>"my_key", :q=>"hello world", :target=>"es"}
|
|
73
|
-
</code></pre>
|
|
74
|
-
|
|
75
|
-
<pre><code>"hello world".translate('es', :debug => :response)
|
|
76
|
-
=> {"data"=>{"translations"=>[{"translatedText"=>"hola mundo", "detectedSourceLanguage"=>"en"}]}}
|
|
77
|
-
</code></pre>
|
|
78
|
-
|
|
79
|
-
<pre><code>"hello world".translate('es', :debug => :all)
|
|
80
|
-
=> {:request=>{:key=>"my_key", :q=>"hello world", :target=>"es"},
|
|
81
|
-
:response=>{"data"=>{"translations"=>[{"translatedText"=>"hola mundo",
|
|
82
|
-
"detectedSourceLanguage"=>"en"}]}}}
|
|
83
|
-
</code></pre>
|
|
84
|
-
|
|
85
|
-
h2. Command Line Interface
|
|
86
|
-
|
|
87
|
-
The command line utility @to_lang@ has the following interface:
|
|
88
|
-
|
|
89
|
-
@to_lang [--key API_KEY] [--from SOURCE_LANGUAGE] --to DESTINATION_LANGUAGE STRING [STRING, ...]@
|
|
90
|
-
|
|
91
|
-
@to_lang@ accepts a space separated list of strings to translate. At least one string is required, as is the @--to@ option, which accepts a language code (e.g. "es"). @to_lang@ will attempt to load a Google Translate API key from the @GOOGLE_TRANSLATE_API_KEY@ environment variable. If one is not available, it must be passed in from the command line with the @--key@ option. For complete usage instructions, invoke the utility with the @--help@ option.
|
|
92
|
-
|
|
93
|
-
Examples:
|
|
94
|
-
|
|
95
|
-
A simple translation with the key being passed in directly from the command line:
|
|
96
|
-
|
|
97
|
-
<pre><code>$ to_lang --key YOUR_GOOGLE_TRANSLATE_API_KEY --to es "hello world"
|
|
98
|
-
hola mundo
|
|
99
|
-
</code></pre>
|
|
100
|
-
|
|
101
|
-
With the key in an environment variable and multiple strings:
|
|
102
|
-
|
|
103
|
-
<pre><code>$ to_lang --to es "hello world" "a pie"
|
|
104
|
-
hola mundo
|
|
105
|
-
a pie
|
|
106
|
-
</code></pre>
|
|
107
|
-
|
|
108
|
-
Specifying the source language:
|
|
109
|
-
|
|
110
|
-
<pre><code>$ to_lang --from en --to es "hello world" "a pie"
|
|
111
|
-
hola mundo
|
|
112
|
-
un pastel
|
|
113
|
-
</code></pre>
|
|
114
|
-
|
|
115
|
-
h2. Supported Languages
|
|
116
|
-
|
|
117
|
-
*to_lang* adds the following methods to strings and arrays. Each of these methods can be called with an explicit source language by appending @_from_source_language@ or prepending @from_source_language_@ to the method name.
|
|
118
|
-
|
|
119
|
-
* to_afrikaans
|
|
120
|
-
* to_albanian
|
|
121
|
-
* to_arabic
|
|
122
|
-
* to_belarusian
|
|
123
|
-
* to_bulgarian
|
|
124
|
-
* to_catalan
|
|
125
|
-
* to_simplified_chinese
|
|
126
|
-
* to_traditional_chinese
|
|
127
|
-
* to_croatian
|
|
128
|
-
* to_czech
|
|
129
|
-
* to_danish
|
|
130
|
-
* to_dutch
|
|
131
|
-
* to_english
|
|
132
|
-
* to_estonian
|
|
133
|
-
* to_filipino
|
|
134
|
-
* to_finnish
|
|
135
|
-
* to_french
|
|
136
|
-
* to_galician
|
|
137
|
-
* to_german
|
|
138
|
-
* to_greek
|
|
139
|
-
* to_haitian_creole
|
|
140
|
-
* to_hebrew
|
|
141
|
-
* to_hindi
|
|
142
|
-
* to_hungarian
|
|
143
|
-
* to_icelandic
|
|
144
|
-
* to_indonesian
|
|
145
|
-
* to_irish
|
|
146
|
-
* to_italian
|
|
147
|
-
* to_japanese
|
|
148
|
-
* to_latvian
|
|
149
|
-
* to_lithuanian
|
|
150
|
-
* to_macedonian
|
|
151
|
-
* to_malay
|
|
152
|
-
* to_maltese
|
|
153
|
-
* to_norwegian
|
|
154
|
-
* to_persian
|
|
155
|
-
* to_polish
|
|
156
|
-
* to_portuguese
|
|
157
|
-
* to_romanian
|
|
158
|
-
* to_russian
|
|
159
|
-
* to_serbian
|
|
160
|
-
* to_slovak
|
|
161
|
-
* to_slovenian
|
|
162
|
-
* to_spanish
|
|
163
|
-
* to_swahili
|
|
164
|
-
* to_swedish
|
|
165
|
-
* to_thai
|
|
166
|
-
* to_turkish
|
|
167
|
-
* to_ukrainian
|
|
168
|
-
* to_vietnamese
|
|
169
|
-
* to_welsh
|
|
170
|
-
* to_yiddish
|
|
171
|
-
|
|
172
|
-
h2. Documentation
|
|
173
|
-
|
|
174
|
-
API documentation can be found at "rubydoc.info":http://rubydoc.info/github/jimmycuadra/to_lang/master/frames.
|
|
175
|
-
|
|
176
|
-
h2. Feedback and Contributions
|
|
177
|
-
|
|
178
|
-
Feedback is greatly appreciated. If you have any problems with *to_lang*, please open a new issue. Make sure you are using the latest version of the gem, or HEAD if you've cloned the Git repository directly. Please include debugging output from using the @:debug@ option of @translate@, if relevant to your issue. If you'd like to fix bugs, add features, or improve the library in general, feel free to fork the project and send me a pull request with your changes.
|