locca 2.2.1 → 2.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/locca +18 -0
- data/lib/locca/actions/audit_action.rb +80 -0
- data/lib/locca/audit_result.rb +49 -0
- data/lib/locca/version.rb +1 -1
- data/lib/locca.rb +38 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85bc8e7332a664e063b3699de43982fa2fa04fc2b9cfe5f1d508ca8921196497
|
4
|
+
data.tar.gz: 05b435158c0e7ab9c0a4ef1f7a14195d28c4ae6a60eaeedb6c633341cde59051
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz: '
|
6
|
+
metadata.gz: 54dbd87da63f47cd74024614c76b84dd7671a2feda5ca7c87d342728850265553a94411e5449aaa0502337c17053867aeb35eb5b7c39e3835bff80f1594efaf9
|
7
|
+
data.tar.gz: '08c972ce6a53bd9aa149dd9af9b5d808f72089ba11c7d2ebfb0020e8f9d5ef786373fc03e4d0e7ad58906997e2c44ab9efefd1c0a6a747d581ce343b398bc2dd'
|
data/bin/locca
CHANGED
@@ -109,6 +109,24 @@ command :translate do |c|
|
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
|
+
desc 'Audit translation (find missing / extra / untranslated keys)'
|
113
|
+
command :audit do |c|
|
114
|
+
c.action do |global_options, options, args|
|
115
|
+
work_dir = global_options['work-dir'.to_sym]
|
116
|
+
if not work_dir
|
117
|
+
work_dir = Dir.getwd
|
118
|
+
end
|
119
|
+
|
120
|
+
success = true
|
121
|
+
projects_in_dir(work_dir).each { |project|
|
122
|
+
if !$locca.audit(project)
|
123
|
+
success = false
|
124
|
+
end
|
125
|
+
}
|
126
|
+
exit!(success)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
112
130
|
pre do |global, command, options, args|
|
113
131
|
$locca = Locca::Locca.new()
|
114
132
|
true
|
@@ -0,0 +1,80 @@
|
|
1
|
+
#
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2014 Evgeny Shurakov
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in all
|
14
|
+
# copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
#
|
24
|
+
|
25
|
+
require 'locca/audit_result'
|
26
|
+
|
27
|
+
module Locca
|
28
|
+
class AuditAction
|
29
|
+
def initialize(project, collection_builder, collections_generator)
|
30
|
+
@project = project
|
31
|
+
@collections_generator = collections_generator
|
32
|
+
@collection_builder = collection_builder
|
33
|
+
end
|
34
|
+
|
35
|
+
def execute()
|
36
|
+
generated_collections = @collections_generator.generate()
|
37
|
+
|
38
|
+
audit_ignore = @project.config_value_for_key('audit_ignore')
|
39
|
+
failed_audit_results = []
|
40
|
+
|
41
|
+
@project.collection_names().each do |collection_name|
|
42
|
+
keys_to_ignore = []
|
43
|
+
if audit_ignore != nil && audit_ignore.key?(collection_name)
|
44
|
+
keys_to_ignore = audit_ignore[collection_name]
|
45
|
+
end
|
46
|
+
|
47
|
+
@project.langs().each do |lang|
|
48
|
+
collection_path = @project.path_for_collection(collection_name, lang)
|
49
|
+
collection = @collection_builder.collection_at_path(collection_path)
|
50
|
+
|
51
|
+
audit_result = AuditResult.new(collection_name, lang)
|
52
|
+
|
53
|
+
generated_collections.each do |generated_collection|
|
54
|
+
if generated_collection.name == collection.name
|
55
|
+
generated_collection_keys = generated_collection.all_keys().to_set
|
56
|
+
collection_keys = collection.all_keys().to_set
|
57
|
+
|
58
|
+
audit_result.missing_keys = (generated_collection_keys - collection_keys).to_a
|
59
|
+
audit_result.extra_keys = (collection_keys - generated_collection_keys).to_a
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
collection.sorted_each do |item|
|
64
|
+
if item.translated? || keys_to_ignore.include?(item.key) || audit_result.extra_keys.include?(item.key)
|
65
|
+
next
|
66
|
+
end
|
67
|
+
|
68
|
+
audit_result.add_untranslated_key(item.key)
|
69
|
+
end
|
70
|
+
|
71
|
+
unless audit_result.passed?
|
72
|
+
failed_audit_results.push(audit_result)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
return failed_audit_results
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2014 Evgeny Shurakov
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in all
|
14
|
+
# copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
#
|
24
|
+
|
25
|
+
module Locca
|
26
|
+
class AuditResult
|
27
|
+
attr_reader :collection_name
|
28
|
+
attr_reader :lang
|
29
|
+
attr_reader :untranslated_keys
|
30
|
+
attr_accessor :missing_keys
|
31
|
+
attr_accessor :extra_keys
|
32
|
+
|
33
|
+
def initialize(collection_name, lang)
|
34
|
+
@collection_name = collection_name
|
35
|
+
@lang = lang
|
36
|
+
@untranslated_keys = []
|
37
|
+
@missing_keys = []
|
38
|
+
@extra_keys = []
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_untranslated_key(value)
|
42
|
+
@untranslated_keys.push(value)
|
43
|
+
end
|
44
|
+
|
45
|
+
def passed?
|
46
|
+
return @untranslated_keys.empty? && @missing_keys.empty? && @extra_keys.empty?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/locca/version.rb
CHANGED
data/lib/locca.rb
CHANGED
@@ -33,6 +33,7 @@ require 'locca/projects/android_project'
|
|
33
33
|
require 'locca/config_reader'
|
34
34
|
require 'locca/config_validator'
|
35
35
|
|
36
|
+
require 'locca/actions/audit_action'
|
36
37
|
require 'locca/actions/build_action'
|
37
38
|
require 'locca/actions/merge_action'
|
38
39
|
require 'locca/actions/onesky_sync_action'
|
@@ -58,6 +59,42 @@ require 'babelyoda/strings_parser'
|
|
58
59
|
|
59
60
|
module Locca
|
60
61
|
class Locca
|
62
|
+
def audit(project)
|
63
|
+
if not project
|
64
|
+
raise 'Can\'t initialize Locca with nil project'
|
65
|
+
end
|
66
|
+
|
67
|
+
action = AuditAction.new(project, project.collection_builder(), project.collections_generator())
|
68
|
+
failed_audit_results = action.execute()
|
69
|
+
|
70
|
+
failed_audit_results.each do |audit_result|
|
71
|
+
puts()
|
72
|
+
puts(">>> #{project.name}/#{audit_result.lang}/#{audit_result.collection_name}")
|
73
|
+
unless audit_result.missing_keys.empty?
|
74
|
+
puts("Missing Keys:")
|
75
|
+
audit_result.missing_keys.each do |key|
|
76
|
+
puts("- #{key}")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
unless audit_result.extra_keys.empty?
|
81
|
+
puts("Extra Keys:")
|
82
|
+
audit_result.extra_keys.each do |key|
|
83
|
+
puts("- #{key}")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
unless audit_result.untranslated_keys.empty?
|
88
|
+
puts("Untranslated:")
|
89
|
+
audit_result.untranslated_keys.each do |key|
|
90
|
+
puts("- #{key}")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
return failed_audit_results.empty?
|
96
|
+
end
|
97
|
+
|
61
98
|
def build(project)
|
62
99
|
if not project
|
63
100
|
raise 'Can\'t initialize Locca with nil project'
|
@@ -96,7 +133,7 @@ module Locca
|
|
96
133
|
lang = project.base_lang
|
97
134
|
end
|
98
135
|
|
99
|
-
action = TranslateAction.new(project, lang, project.collection_builder, project.collection_writer, collection_merger())
|
136
|
+
action = TranslateAction.new(project, lang, project.collection_builder(), project.collection_writer(), collection_merger())
|
100
137
|
action.execute()
|
101
138
|
end
|
102
139
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: locca
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shurakov Evgeny
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -203,6 +203,7 @@ files:
|
|
203
203
|
- lib/babelyoda/strings_lexer.rb
|
204
204
|
- lib/babelyoda/strings_parser.rb
|
205
205
|
- lib/locca.rb
|
206
|
+
- lib/locca/actions/audit_action.rb
|
206
207
|
- lib/locca/actions/build_action.rb
|
207
208
|
- lib/locca/actions/merge_action.rb
|
208
209
|
- lib/locca/actions/onesky_sync_action.rb
|
@@ -210,6 +211,7 @@ files:
|
|
210
211
|
- lib/locca/android_collection_writer.rb
|
211
212
|
- lib/locca/android_collections_generator.rb
|
212
213
|
- lib/locca/android_strings_parser.rb
|
214
|
+
- lib/locca/audit_result.rb
|
213
215
|
- lib/locca/collection.rb
|
214
216
|
- lib/locca/collection_builder.rb
|
215
217
|
- lib/locca/collection_item.rb
|
@@ -249,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
251
|
version: '0'
|
250
252
|
requirements: []
|
251
253
|
rubyforge_project:
|
252
|
-
rubygems_version: 2.7.
|
254
|
+
rubygems_version: 2.7.6
|
253
255
|
signing_key:
|
254
256
|
specification_version: 4
|
255
257
|
summary: Application localization kit
|