phrase 0.4.24 → 0.4.25
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/lib/phrase/api/client.rb +8 -5
- data/lib/phrase/tool/commands.rb +4 -2
- data/lib/phrase/tool/commands/pull.rb +10 -5
- data/lib/phrase/tool/commands/push.rb +2 -1
- data/lib/phrase/tool/options_factory.rb +8 -0
- data/lib/phrase/version.rb +1 -1
- metadata +27 -49
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d19161a8b74d93add452fa8141fd6a7c3218736c
|
4
|
+
data.tar.gz: ccc2ffadca6cac58332e772def7ccb8a00798a91
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7743e6c862f1191d1dbc06b16aa95e982e9d84633bcbb61a1361c9fed8c8d9c9d84d6935b6f0319e702d939397d34c141cba6d526353cdfc5c577ef782d36a0b
|
7
|
+
data.tar.gz: e0ab46de6616360e7d31aec7a7e5d64d41024307c3638dce43b92c049a473cf9d8cff26340ba44021e41b40bb33a6f19c84c291b8a99f5319defff69cbb67a77
|
data/lib/phrase/api/client.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
2
|
|
3
3
|
require 'cgi'
|
4
4
|
require 'json'
|
@@ -82,7 +82,7 @@ class Phrase::Api::Client
|
|
82
82
|
true
|
83
83
|
end
|
84
84
|
|
85
|
-
def download_translations_for_locale(name, format, tag=nil, updated_since=nil, include_empty_translations=nil)
|
85
|
+
def download_translations_for_locale(name, format, tag=nil, updated_since=nil, include_empty_translations=nil, convert_emoji=nil)
|
86
86
|
raise "You must specify a name" if name.nil? || name.blank?
|
87
87
|
raise "You must specify a format" if format.nil? || format.blank?
|
88
88
|
|
@@ -92,8 +92,10 @@ class Phrase::Api::Client
|
|
92
92
|
locale: name,
|
93
93
|
tag: tag,
|
94
94
|
updated_since: updated_since,
|
95
|
-
include_empty_translations: include_empty_translations ? "1" : nil
|
95
|
+
include_empty_translations: include_empty_translations ? "1" : nil,
|
96
|
+
convert_emoji: convert_emoji ? "1" : nil
|
96
97
|
}
|
98
|
+
|
97
99
|
content = perform_api_request("/translations/download", :get, params)
|
98
100
|
return content
|
99
101
|
rescue Phrase::Api::Exceptions::ServerError => e
|
@@ -101,7 +103,7 @@ class Phrase::Api::Client
|
|
101
103
|
end
|
102
104
|
end
|
103
105
|
|
104
|
-
def upload(filename, file_content, tags=[], locale=nil, format=nil, update_translations=false, skip_unverification=false, skip_upload_tags=false)
|
106
|
+
def upload(filename, file_content, tags=[], locale=nil, format=nil, update_translations=false, skip_unverification=false, skip_upload_tags=false, convert_emoji=false)
|
105
107
|
begin
|
106
108
|
params = {
|
107
109
|
"file_format" => format,
|
@@ -110,7 +112,8 @@ class Phrase::Api::Client
|
|
110
112
|
"tags[]" => tags,
|
111
113
|
"update_translations" => update_translations ? "1" : "0",
|
112
114
|
"skip_unverification" => skip_unverification ? "1" : "0",
|
113
|
-
"skip_upload_tags" => skip_upload_tags ? "1" : "0"
|
115
|
+
"skip_upload_tags" => skip_upload_tags ? "1" : "0",
|
116
|
+
"convert_emoji" => convert_emoji ? "1" : "0"
|
114
117
|
}
|
115
118
|
params["locale_name"] = locale unless locale.nil?
|
116
119
|
perform_api_request("/translation_keys/upload", :post, params)
|
data/lib/phrase/tool/commands.rb
CHANGED
@@ -23,14 +23,16 @@ module Phrase::Tool::Commands
|
|
23
23
|
format: nil,
|
24
24
|
update_translations: false,
|
25
25
|
skip_unverification: false,
|
26
|
-
skip_upload_tags: false
|
26
|
+
skip_upload_tags: false,
|
27
|
+
convert_emoji: nil
|
27
28
|
},
|
28
29
|
pull: {
|
29
30
|
format: nil,
|
30
31
|
target: nil,
|
31
32
|
tag: nil,
|
32
33
|
updated_since: nil,
|
33
|
-
include_empty_translations: nil
|
34
|
+
include_empty_translations: nil,
|
35
|
+
convert_emoji: nil
|
34
36
|
},
|
35
37
|
tags: {
|
36
38
|
list: true
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
1
|
+
# -*- encoding : utf-8 -*-f
|
2
2
|
|
3
3
|
class Phrase::Tool::Commands::Pull < Phrase::Tool::Commands::Base
|
4
4
|
ALLOWED_DOWNLOAD_FORMATS = Phrase::Formats::SUPPORTED_FORMATS.keys.map(&:to_s)
|
@@ -16,6 +16,7 @@ class Phrase::Tool::Commands::Pull < Phrase::Tool::Commands::Base
|
|
16
16
|
@tag = @options.get(:tag)
|
17
17
|
@updated_since = @options.get(:updated_since)
|
18
18
|
@include_empty_translations = @options.get(:include_empty_translations)
|
19
|
+
@convert_emoji = @options.get(:convert_emoji)
|
19
20
|
@target ||= Phrase::Formats.target_directory(@format) if format_valid?(@format)
|
20
21
|
end
|
21
22
|
|
@@ -23,14 +24,14 @@ class Phrase::Tool::Commands::Pull < Phrase::Tool::Commands::Base
|
|
23
24
|
(print_error("Invalid format: #{@format}") and exit_command) unless format_valid?(@format)
|
24
25
|
locales_to_download.compact.each do |locale|
|
25
26
|
print_message "Downloading #{locale.name}..."
|
26
|
-
fetch_translations_for_locale(locale, @format, @tag, @updated_since, @include_empty_translations)
|
27
|
+
fetch_translations_for_locale(locale, @format, @tag, @updated_since, @include_empty_translations, @convert_emoji)
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
31
|
private
|
31
|
-
def fetch_translations_for_locale(locale, format, tag=nil, updated_since=nil, include_empty_translations=nil)
|
32
|
+
def fetch_translations_for_locale(locale, format, tag=nil, updated_since=nil, include_empty_translations=nil, convert_emoji=nil)
|
32
33
|
begin
|
33
|
-
content = api_client.download_translations_for_locale(locale.name, format, tag, updated_since, include_empty_translations)
|
34
|
+
content = api_client.download_translations_for_locale(locale.name, format, tag, updated_since, include_empty_translations, convert_emoji)
|
34
35
|
store_content_in_locale_file(locale, content)
|
35
36
|
rescue Exception => e
|
36
37
|
print_error "Failed"
|
@@ -47,7 +48,7 @@ private
|
|
47
48
|
begin
|
48
49
|
FileUtils.mkpath(path)
|
49
50
|
File.open(target, "w") do |file|
|
50
|
-
file.write(content
|
51
|
+
file.write(encode(content))
|
51
52
|
end
|
52
53
|
print_message "Saved to #{clean_path target}".green
|
53
54
|
rescue
|
@@ -56,6 +57,10 @@ private
|
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
60
|
+
def encode content
|
61
|
+
content.force_encoding("UTF-8")
|
62
|
+
end
|
63
|
+
|
59
64
|
def clean_path(str)
|
60
65
|
str.gsub("/./", "/")
|
61
66
|
end
|
@@ -16,6 +16,7 @@ class Phrase::Tool::Commands::Push < Phrase::Tool::Commands::Base
|
|
16
16
|
@update_translations = @options.get(:update_translations)
|
17
17
|
@skip_unverification = @options.get(:skip_unverification)
|
18
18
|
@skip_upload_tags = @options.get(:skip_upload_tags)
|
19
|
+
@convert_emoji = @options.get(:convert_emoji)
|
19
20
|
end
|
20
21
|
|
21
22
|
def execute!
|
@@ -91,7 +92,7 @@ private
|
|
91
92
|
locale = Phrase::Tool::Locale.find_default_locale.try(:name)
|
92
93
|
end
|
93
94
|
locale = @locale if @locale
|
94
|
-
api_client.upload(file, file_content(file), @tags, locale, @format, @update_translations, @skip_unverification, @skip_upload_tags)
|
95
|
+
api_client.upload(file, file_content(file), @tags, locale, @format, @update_translations, @skip_unverification, @skip_upload_tags, @convert_emoji)
|
95
96
|
print_message "OK".green
|
96
97
|
rescue Exception => e
|
97
98
|
print_error "Failed"
|
@@ -71,6 +71,10 @@ class OptionsFactory
|
|
71
71
|
set[:skip_upload_tags] = skip_upload_tags
|
72
72
|
end
|
73
73
|
|
74
|
+
opts.on("--convert-emoji", "Convert Emojis to store and display them correctly in PhraseApp") do |convert_emoji|
|
75
|
+
set[:convert_emoji] = convert_emoji
|
76
|
+
end
|
77
|
+
|
74
78
|
opts.on("--secret=YOUR_AUTH_TOKEN", String, "The Auth Token to use for this operation instead of the saved one (optional)") do |secret|
|
75
79
|
set[:secret] = secret
|
76
80
|
end
|
@@ -100,6 +104,10 @@ class OptionsFactory
|
|
100
104
|
set[:include_empty_translations] = include_empty_translations
|
101
105
|
end
|
102
106
|
|
107
|
+
opts.on("--convert-emoji", "Convert Emoji symbols") do |convert_emoji|
|
108
|
+
set[:convert_emoji] = convert_emoji
|
109
|
+
end
|
110
|
+
|
103
111
|
opts.on("--secret=YOUR_AUTH_TOKEN", String, "The Auth Token to use for this operation instead of the saved one (optional)") do |secret|
|
104
112
|
set[:secret] = secret
|
105
113
|
end
|
data/lib/phrase/version.rb
CHANGED
metadata
CHANGED
@@ -1,174 +1,153 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phrase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.25
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dynport GmbH
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-05-26 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: colorize
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: json
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: i18n
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: webmock
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: vcr
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '>='
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - '>='
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: timecop
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
|
-
- -
|
115
|
+
- - '>='
|
132
116
|
- !ruby/object:Gem::Version
|
133
117
|
version: '0'
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
|
-
- -
|
122
|
+
- - '>='
|
140
123
|
- !ruby/object:Gem::Version
|
141
124
|
version: '0'
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: genspec
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
|
-
- -
|
129
|
+
- - '>='
|
148
130
|
- !ruby/object:Gem::Version
|
149
131
|
version: '0'
|
150
132
|
type: :development
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
|
-
- -
|
136
|
+
- - '>='
|
156
137
|
- !ruby/object:Gem::Version
|
157
138
|
version: '0'
|
158
139
|
- !ruby/object:Gem::Dependency
|
159
140
|
name: rails
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
142
|
requirements:
|
163
|
-
- -
|
143
|
+
- - '>='
|
164
144
|
- !ruby/object:Gem::Version
|
165
145
|
version: '0'
|
166
146
|
type: :development
|
167
147
|
prerelease: false
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
149
|
requirements:
|
171
|
-
- -
|
150
|
+
- - '>='
|
172
151
|
- !ruby/object:Gem::Version
|
173
152
|
version: '0'
|
174
153
|
description: phrase allows you to edit translations in-place on the page itself. More
|
@@ -264,26 +243,25 @@ files:
|
|
264
243
|
- phrase.gemspec
|
265
244
|
homepage: https://phraseapp.com
|
266
245
|
licenses: []
|
246
|
+
metadata: {}
|
267
247
|
post_install_message:
|
268
248
|
rdoc_options: []
|
269
249
|
require_paths:
|
270
250
|
- lib
|
271
251
|
required_ruby_version: !ruby/object:Gem::Requirement
|
272
|
-
none: false
|
273
252
|
requirements:
|
274
|
-
- -
|
253
|
+
- - '>='
|
275
254
|
- !ruby/object:Gem::Version
|
276
255
|
version: '0'
|
277
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
278
|
-
none: false
|
279
257
|
requirements:
|
280
|
-
- -
|
258
|
+
- - '>='
|
281
259
|
- !ruby/object:Gem::Version
|
282
260
|
version: 1.3.6
|
283
261
|
requirements: []
|
284
262
|
rubyforge_project: phrase
|
285
|
-
rubygems_version:
|
263
|
+
rubygems_version: 2.2.2
|
286
264
|
signing_key:
|
287
|
-
specification_version:
|
265
|
+
specification_version: 4
|
288
266
|
summary: The best way to manage i18n.
|
289
267
|
test_files: []
|