lokale 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72e68f6bb7e1876f79575ae055c261147df25727
4
- data.tar.gz: 6343b1266d7b686224a0d728b4baecd8d4b6c92c
3
+ metadata.gz: 28a49cbbd5450645fa6067b0fd096191bb7a1760
4
+ data.tar.gz: 578fbe40eee917b39badc508ad62a5b63d748b9d
5
5
  SHA512:
6
- metadata.gz: dc97049e348d6aedb0a8c54d112f8cbc4c963799c0ecc90227a28daf90dad03d2b9f9ca6652d58e189ad07c862c89e49beec59b5ea364ac84ab55751fc456482
7
- data.tar.gz: e3a0565425d0e21b9cb2c67148489af5dc4e225afb58f671bbd9391b3fc3a957d753c54434cad8ffe5fd852845dfbcc3f606244f6559bc2aa5181eab2e87c5ef
6
+ metadata.gz: d8bcfbc01c0144b33d804a0b0d60b1b9224ffcb1b87af2730f4cf27f86ddb2e5eca0f032dcd6486279c2bfbdeb3506cea4661bdd5445fdc74372723357594c73
7
+ data.tar.gz: 063b8a079d93f1189f9d261896d818472d0b6d193c80a044f2d70810e8426f758b4e0676678b8703433a2506b0c6edc343804e927fd2917021d4718e4712b4c7
data/bin/lokale CHANGED
@@ -5,36 +5,60 @@ require 'lokale/find_dir'
5
5
  require 'lokale/colorize'
6
6
  require 'lokale/options'
7
7
 
8
+ Settings.init
9
+
8
10
  git_path = find_git_repo
9
11
  if git_path.nil?
10
12
  puts "Could not find any git repository."
11
13
  exit
12
14
  end
13
15
 
14
- xcode_project = xcode_project_name(git_path)
15
- if xcode_project.nil?
16
+ project_name = xcode_project_name(git_path)
17
+ if project_name.nil?
16
18
  puts "Found git repository (#{git_path}) does not contain an Xcode project."
17
19
  exit
18
20
  end
19
21
 
22
+ puts "Target Xcode project: '#{project_name}'".green
20
23
 
21
- settings = Settings.get
22
- settings.actions.each do |s|
23
- puts s
24
- puts s.type
25
- puts s.arg
26
- puts s.precedence
24
+ ########################################################################################
25
+
26
+ class Action
27
+ def perform(agent, reporter)
28
+ send(("perform_" + @type.to_s).to_sym, agent, reporter)
29
+ end
30
+
31
+ def perform_summary(agent, reporter)
32
+ puts "Printing summary".blue
33
+ reporter.print_summary
34
+ end
35
+
36
+ def perform_copy_base(agent, reporter)
37
+ puts "Copying `en` strings files to `Base`".blue
38
+ agent.copy_base
39
+ puts
40
+ end
41
+
42
+ def perform_append(agent, reporter)
43
+
44
+ end
27
45
  end
28
46
 
29
- puts "Analyzing Xcode project '#{xcode_project}'".green
47
+
48
+
49
+ settings = Settings.get
30
50
 
31
51
  macros = [
32
- Lokale::Macro.new("NSLocalizedString", /NSLocalizedString\("(.+?)",\s*comment:\s*"(.*?)"\)/),
33
- Lokale::Macro.new("PluralString", /String.localizedPlural\("(.+?)"/),
52
+ Lokale::Macro.new("NSLocalizedString", /NSLocalizedString\("(.+?)",\s*comment:\s*"(.*?)"\)/, "Localizable.strings"),
53
+ Lokale::Macro.new("PluralString", /String.localizedPlural\("(.+?)"/, nil),
34
54
  #LocalizationMacro.new("ObjC String", /NSLocalizedString\("(.*)",\s*(.*)\)/),
35
55
  #LocalizationMacro.new("ObjC Table String", /NSLocalizedStringFromTableInBundle\((.*?),/)
36
56
  ]
37
57
 
38
- agent = Lokale::Agent.new(Dir.pwd, macros)
58
+ agent = Lokale::Agent.new(git_path, macros)
39
59
  reporter = Lokale::Reporter.new(agent)
40
- reporter.print_summary
60
+
61
+
62
+ settings.actions.each do |action|
63
+ action.perform(agent, reporter)
64
+ end
@@ -1,46 +1,70 @@
1
1
 
2
2
  require "optparse"
3
3
 
4
+ class Action
5
+ attr_reader :type, :arg, :precedence
6
+ def initialize(type, arg, precedence)
7
+ @type = type; @arg = arg; @precedence = precedence
8
+ end
4
9
 
10
+ def self.summary
11
+ Action.new(:summary, nil, 10)
12
+ end
13
+ def self.copy_base
14
+ Action.new(:copy_base, nil, 50)
15
+ end
16
+ def self.append
17
+ Action.new(:append, nil, 60)
18
+ end
19
+ end
5
20
 
6
- Action = Struct.new("Action", :type, :arg, :precedence)
7
-
8
- class Settings
9
- attr_reader :actions
21
+ class Settings
22
+ attr_reader :actions
10
23
 
11
- def self.get
12
- actions = []
24
+ def self.init
25
+ actions = []
13
26
 
14
- OptionParser.new do |opts|
15
- opts.banner = "Usage: lokale [-bsh]"
27
+ OptionParser.new do |opts|
28
+ opts.banner = "Usage: lokale [-bsh]"
16
29
 
17
- opts.on("-b", "--copy-base", "Copies 'en' localization files to 'Base'") do |n|
18
- actions << Action.new(:copy_base, nil, 10)
19
- end
30
+ opts.on("-b", "--copy-base", "Copies 'en' localization files to 'Base'") do |n|
31
+ actions << Action.copy_base
32
+ end
20
33
 
21
- opts.on("-s", "--summary", "Prints project summary") do |n|
22
- actions << Action.new(:summary, nil, 100)
23
- end
34
+ opts.on("-s", "--summary", "Prints project summary") do |n|
35
+ actions << Action.summary
36
+ end
24
37
 
25
- opts.on("-h", "--help", "Prints this help") do
26
- puts opts
27
- exit
28
- end
29
- end.parse!
38
+ opts.on("-a", "--append", "Appends new strings to english localization file") do |n|
39
+ actions << Action.append
40
+ end
30
41
 
31
- if actions.empty?
32
- actions.sort_by! { |e| e.precedence }
33
- else
34
- actions.sort_by! { |e| e.precedence }
42
+ opts.on("-h", "--help", "Prints this help") do
43
+ puts opts
44
+ exit
35
45
  end
46
+ end.parse!
47
+
36
48
 
37
- Settings.new(actions)
38
- end
39
49
 
40
- def initialize(actions)
41
- @actions = actions
50
+ if actions.empty?
51
+ actions << Action.summary
52
+ else
53
+ actions.sort_by! { |e| -e.precedence }
42
54
  end
55
+
56
+ @shared_settings = Settings.new(actions)
57
+ end
58
+
59
+ def self.get
60
+ init if @shared_settings.nil?
61
+ @shared_settings
62
+ end
63
+
64
+ def initialize(actions)
65
+ @actions = actions
43
66
  end
67
+ end
44
68
 
45
69
 
46
70
 
@@ -1,3 +1,3 @@
1
1
  module Lokale
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/lokale.rb CHANGED
@@ -92,16 +92,22 @@ module Lokale
92
92
  return nil if parsed.nil?
93
93
  parsed.map(&:key)
94
94
  end
95
+
96
+
97
+ def strings_file?
98
+ @type == "strings" || @type == "stringsdict"
99
+ end
95
100
  end
96
101
 
97
102
  #
98
103
 
99
104
  class Macro
100
- attr_reader :regex, :found_strings, :name
105
+ attr_reader :regex, :found_strings, :name, :file_name
101
106
 
102
- def initialize(name, regex)
107
+ def initialize(name, regex, file_name)
103
108
  @name = name
104
109
  @regex = regex
110
+ @file_name = file_name
105
111
  clear_calls
106
112
  end
107
113
 
@@ -140,7 +146,11 @@ module Lokale
140
146
  end
141
147
 
142
148
  def proj_files
143
- Dir.glob("#{@proj_path}/**/**")
149
+ if block_given?
150
+ Dir.glob("#{@proj_path}/**/**") { |f| yield f }
151
+ else
152
+ Dir.glob("#{@proj_path}/**/**")
153
+ end
144
154
  end
145
155
 
146
156
  def get_localization_files
@@ -152,7 +162,7 @@ module Lokale
152
162
  @macros.each { |m| m.clear_calls }
153
163
 
154
164
  @sfiles_proceeded = 0
155
- proj_files.each do |file|
165
+ proj_files do |file|
156
166
  next unless file.source_file?
157
167
 
158
168
  file_content = File.read(file)
@@ -160,6 +170,21 @@ module Lokale
160
170
  @sfiles_proceeded += 1
161
171
  end
162
172
  end
173
+
174
+ def copy_base
175
+ en_files = @lfiles.group_by { |f| f.lang }["en"].select { |f| f.strings_file? }
176
+ base_files = @lfiles.group_by { |f| f.lang }["Base"].select { |f| f.strings_file? }
177
+
178
+ en_files.each do |en|
179
+ base = base_files.select { |f| f.full_name == en.full_name }.sample
180
+ next if base.nil?
181
+ IO.copy_stream(en.path, base.path)
182
+ end
183
+ end
184
+
185
+ def append_new_macro_calls
186
+
187
+ end
163
188
  end
164
189
 
165
190
  #
@@ -185,7 +210,6 @@ module Lokale
185
210
  puts
186
211
  end
187
212
 
188
-
189
213
  def print_files_table
190
214
  languages = @agent.lfiles.map { |e| e.lang }.to_set.to_a
191
215
  files = @agent.lfiles.map { |e| e.full_name }.to_set.to_a
@@ -249,7 +273,7 @@ module Lokale
249
273
  diferences_repot << "Missing keys in file \"#{file_name}\":\n"
250
274
  all_keys.zip(files) do |missing_keys, lfile|
251
275
  next if missing_keys.size.zero?
252
- diferences_repot << "* #{lfile.lang} - #{missing_keys.size} key(s):\n"
276
+ diferences_repot << "*".red + " #{lfile.lang} - #{missing_keys.size} key(s):\n"
253
277
  missing_keys.each { |k| diferences_repot << "#{k}\n" }
254
278
  end
255
279
  diferences_repot << "\n"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lokale
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Onizhuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
11
+ date: 2017-10-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Write a longer description or delete this line.
14
14
  email:
@@ -18,7 +18,7 @@ executables:
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
- - .gitignore
21
+ - ".gitignore"
22
22
  - Gemfile
23
23
  - LICENSE.txt
24
24
  - README.md
@@ -42,17 +42,17 @@ require_paths:
42
42
  - lib
43
43
  required_ruby_version: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  requirements:
50
- - - '>='
50
+ - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: '0'
53
53
  requirements: []
54
54
  rubyforge_project:
55
- rubygems_version: 2.0.14.1
55
+ rubygems_version: 2.6.14
56
56
  signing_key:
57
57
  specification_version: 4
58
58
  summary: Lokale is a small tool that inspects localization of Xcode projects.