toledo 0.0.0 → 0.1.3
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/bin/toledo +180 -0
- metadata +29 -12
- data/lib/toledo.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: daf4f9800b7e252d961e517887141ec30061d4c21a966ade789a06c52a39ddd5
|
4
|
+
data.tar.gz: b2dc456ac4d421262c26b9fe5f212b0cdfa18b49b706e8f0fc46be42fe43f602
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27d2c61cf26fedfe6f431c4c1d73eb92bc015661d853752d159067523d35a552de13cf3c30b85f6c97ebd2a9d5f5c4345c1b0e6b091955783ca912d6fb797d3d
|
7
|
+
data.tar.gz: 7be80a830368cef8bbec831ce35d75005dc110d5b1d8d030515b7626a8c9cd90c54dce5ac57d5994dd14de9da2091814e937061bb03e1eec126d0d47f4e150b2
|
data/bin/toledo
ADDED
@@ -0,0 +1,180 @@
|
|
1
|
+
require "google/apis/sheets_v4"
|
2
|
+
require "googleauth"
|
3
|
+
require "googleauth/stores/file_token_store"
|
4
|
+
require "fileutils"
|
5
|
+
require "yaml"
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
OOB_URI = "urn:ietf:wg:oauth:2.0:oob".freeze
|
9
|
+
APPLICATION_NAME = "Google Sheets API Ruby Quickstart".freeze
|
10
|
+
CONFIG_PATH = ".toledo.yaml".freeze
|
11
|
+
CREDENTIALS_PATH = ".credentials.json".freeze
|
12
|
+
TOKEN_PATH = ".token.yaml".freeze
|
13
|
+
SCOPE = Google::Apis::SheetsV4::AUTH_SPREADSHEETS_READONLY
|
14
|
+
|
15
|
+
def authorize
|
16
|
+
client_id = Google::Auth::ClientId.from_file CREDENTIALS_PATH
|
17
|
+
token_store = Google::Auth::Stores::FileTokenStore.new file: TOKEN_PATH
|
18
|
+
authorizer = Google::Auth::UserAuthorizer.new client_id, SCOPE, token_store
|
19
|
+
user_id = "default"
|
20
|
+
credentials = authorizer.get_credentials user_id
|
21
|
+
if credentials.nil?
|
22
|
+
url = authorizer.get_authorization_url base_url: OOB_URI
|
23
|
+
puts "Open the following URL in the browser and enter the " \
|
24
|
+
"resulting code after authorization:\n" + url
|
25
|
+
code = gets
|
26
|
+
credentials = authorizer.get_and_store_credentials_from_code(
|
27
|
+
user_id: user_id, code: code, base_url: OOB_URI
|
28
|
+
)
|
29
|
+
end
|
30
|
+
credentials
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.build_row(key, value, target)
|
34
|
+
if target == "ios"
|
35
|
+
return self.build_ios_row(key, value)
|
36
|
+
else
|
37
|
+
return self.build_android_row(key, value)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.build_ios_row(key, value)
|
42
|
+
value.gsub! "\n", "\\n"
|
43
|
+
value.gsub! "\"", "\\\""
|
44
|
+
value.gsub!(/\%[0-9]\$s/) { |s| s.gsub! 's', '@'}
|
45
|
+
value.gsub! '%s', '%@'
|
46
|
+
return "\"" + key + "\" = \"" + value + "\";\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.build_android_row(key, value)
|
50
|
+
value.gsub! "&", "&"
|
51
|
+
value.gsub! "\n", "\\n"
|
52
|
+
value.gsub! "'", %q(\\\')
|
53
|
+
value.gsub! "\"", "\\\""
|
54
|
+
value.gsub! "...", "…"
|
55
|
+
value.gsub! "<", "<"
|
56
|
+
value.gsub! ">", ">"
|
57
|
+
return " <string name=\"" + key + "\">" + value + "</string>\n"
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.build_comment(comment, target)
|
61
|
+
if target == "ios"
|
62
|
+
return "// #{comment}\n"
|
63
|
+
else
|
64
|
+
return " <!-- #{comment} -->\n"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.get_file_path(language, modul, file_name, target, is_default_language)
|
69
|
+
if target == "ios"
|
70
|
+
return "#{language}.lproj/#{file_name}.strings"
|
71
|
+
else
|
72
|
+
language_suffix = is_default_language ? "" : "-#{language}"
|
73
|
+
return "#{modul}/**/values#{language_suffix}/#{file_name}.xml"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.file_prefix(target)
|
78
|
+
if target == "ios"
|
79
|
+
return ""
|
80
|
+
else
|
81
|
+
return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.file_suffix(target)
|
86
|
+
if target == "ios"
|
87
|
+
return ""
|
88
|
+
else
|
89
|
+
return "</resources>\n"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def fetch(spreadsheet_id, languages, default_language, target, sheets)
|
94
|
+
service = Google::Apis::SheetsV4::SheetsService.new
|
95
|
+
service.client_options.application_name = APPLICATION_NAME
|
96
|
+
service.authorization = authorize
|
97
|
+
|
98
|
+
|
99
|
+
sheets.each do |sheet|
|
100
|
+
range = sheet["name"]
|
101
|
+
response = service.get_spreadsheet_values spreadsheet_id, range
|
102
|
+
puts "No data found." if response.values.empty?
|
103
|
+
sheet_data = response.values
|
104
|
+
|
105
|
+
headers = sheet_data.first
|
106
|
+
languages = headers.select { |key| key.length == 2 }
|
107
|
+
|
108
|
+
rows = sheet_data.drop(1)
|
109
|
+
|
110
|
+
languages.each_with_index do |language, index|
|
111
|
+
is_default_language = default_language == language || languages.count == 1
|
112
|
+
file_content = file_prefix(target)
|
113
|
+
file_name = sheet["file_name"]
|
114
|
+
modul = sheet["module"]
|
115
|
+
file_path = get_file_path(language, modul, file_name, target, is_default_language)
|
116
|
+
file = Dir[file_path].first
|
117
|
+
|
118
|
+
if file.nil?
|
119
|
+
puts "File with name: \"#{file_name}\" for language \"#{language}\" does not exist in module \"#{modul}\"! Please create it first!"
|
120
|
+
next
|
121
|
+
end
|
122
|
+
|
123
|
+
puts "Generating translation file for language \"#{language}\""
|
124
|
+
rows.each do |row|
|
125
|
+
key = row.first
|
126
|
+
value = row[index + 1]
|
127
|
+
|
128
|
+
description = nil
|
129
|
+
if row.count == headers.count
|
130
|
+
description = row.last
|
131
|
+
end
|
132
|
+
|
133
|
+
if value.nil? || value.empty?
|
134
|
+
if !key.nil? && !key.empty?
|
135
|
+
file_content += build_comment(key, target)
|
136
|
+
else
|
137
|
+
file_content += "\n"
|
138
|
+
end
|
139
|
+
next
|
140
|
+
end
|
141
|
+
|
142
|
+
if description != nil
|
143
|
+
file_content += build_comment(description, target)
|
144
|
+
end
|
145
|
+
|
146
|
+
file_content += build_row(key, value, target)
|
147
|
+
end
|
148
|
+
file_content += file_suffix(target)
|
149
|
+
|
150
|
+
File.open(file, "w") do |f|
|
151
|
+
f.write(file_content)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
if Dir[CONFIG_PATH].first.nil?
|
158
|
+
UI.error("conifg file missing. Find example at:\n https://rubygems.org/gems/toledo")
|
159
|
+
return
|
160
|
+
end
|
161
|
+
|
162
|
+
if Dir[CREDENTIALS_PATH].first.nil?
|
163
|
+
UI.error("credentials file missing. Download it from:\n https://developers.google.com/sheets/api/quickstart/ruby")
|
164
|
+
return
|
165
|
+
end
|
166
|
+
|
167
|
+
config = YAML.load_file(".toledo.yaml")
|
168
|
+
spreadsheet_id = config["spreadsheet_id"]
|
169
|
+
languages = JSON.parse("#{config["languages"]}")
|
170
|
+
default_language = config["default_language"]
|
171
|
+
target = config["target"]
|
172
|
+
sheets = config["sheets"]
|
173
|
+
|
174
|
+
fetch(spreadsheet_id, languages, default_language, target, sheets)
|
175
|
+
|
176
|
+
class Toledo
|
177
|
+
def self.localize
|
178
|
+
|
179
|
+
end
|
180
|
+
end
|
metadata
CHANGED
@@ -1,27 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toledo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Marschall
|
8
|
-
|
8
|
+
- Martin Daum
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2021-
|
12
|
-
dependencies:
|
13
|
-
|
12
|
+
date: 2021-11-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fileutils
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
description: A simple tool for exporting strings from Google Sheets to Android/iOS
|
29
|
+
projects
|
14
30
|
email: office@sebastianmarschall.com
|
15
|
-
executables:
|
31
|
+
executables:
|
32
|
+
- toledo
|
16
33
|
extensions: []
|
17
34
|
extra_rdoc_files: []
|
18
35
|
files:
|
19
|
-
-
|
36
|
+
- bin/toledo
|
20
37
|
homepage: https://rubygems.org/gems/toledo
|
21
38
|
licenses:
|
22
|
-
-
|
39
|
+
- GPL-2.0
|
23
40
|
metadata: {}
|
24
|
-
post_install_message:
|
41
|
+
post_install_message:
|
25
42
|
rdoc_options: []
|
26
43
|
require_paths:
|
27
44
|
- lib
|
@@ -36,8 +53,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
36
53
|
- !ruby/object:Gem::Version
|
37
54
|
version: '0'
|
38
55
|
requirements: []
|
39
|
-
rubygems_version: 3.
|
40
|
-
signing_key:
|
56
|
+
rubygems_version: 3.2.22
|
57
|
+
signing_key:
|
41
58
|
specification_version: 4
|
42
|
-
summary:
|
59
|
+
summary: Google Sheets to Android/iOS translation file!
|
43
60
|
test_files: []
|