slimkeyfy 0.0.2 → 0.0.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/README.md +13 -10
- data/lib/slimkeyfy/console/command_line.rb +4 -4
- data/lib/slimkeyfy/console/io_action.rb +6 -6
- data/lib/slimkeyfy/console/printer.rb +3 -3
- data/lib/slimkeyfy/console/translate.rb +5 -5
- data/lib/slimkeyfy/slimutils/file_utils.rb +2 -3
- data/lib/slimkeyfy/slimutils/yaml_processor.rb +7 -4
- data/lib/slimkeyfy/transformer/slim_transformer.rb +5 -5
- data/lib/slimkeyfy/transformer/word.rb +1 -1
- data/lib/slimkeyfy/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7b087050604856e414040ee52a0f0f6193d6262
|
4
|
+
data.tar.gz: fda6549ae39e62bc4a14d90a87aa416e8a62cf8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1789730769336204cfd93fefaa65bd6e01c4e086d6114b79468c73f71e2582288d7baea132ae2219569782f82a428470b56b8f30efbfedd7dc144003ab41000a
|
7
|
+
data.tar.gz: b115559e8670e99b43c50805b935d162d698b820a187751880bdba8c7a2fcc63f44c8f849fdf3c43facf9d0dba436075a90977b389ba386936669b0744adb2c6
|
data/README.md
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
Slimkeyfy
|
2
2
|
=
|
3
3
|
Extract plain Strings from .slim views and Rails controllers to replace them with I18n's t() method. Keys with it's translations will be streamed to a YAML file.
|
4
|
+
|
5
|
+
Read more in this blog post: [PhraseApp Blog: Make your Rails App localizable with Slimkeyfy](http://blog.phraseapp.com/post/96450272307/make-your-rails-app-localizable-with-slimkeyfy)
|
6
|
+
|
4
7
|
```ruby
|
5
8
|
slimkeyfy app/views/users/show.html.slim en
|
6
9
|
# users/show.html.slim
|
7
10
|
h1 Hello World!
|
8
11
|
# converts to
|
9
|
-
h1= t('.hello_world')
|
12
|
+
h1= t('.hello_world')
|
10
13
|
# config/locales/users.en.yaml
|
11
|
-
# en:
|
14
|
+
# en:
|
12
15
|
# user:
|
13
16
|
# show:
|
14
17
|
# hello_world: Hello World!
|
@@ -79,7 +82,7 @@ your_app_name/
|
|
79
82
|
|
80
83
|
> pwd
|
81
84
|
../your_app_name/
|
82
|
-
|
85
|
+
|
83
86
|
> slimkeyfy app/views/users/ en
|
84
87
|
... choose your changes here (y/n/x/a)
|
85
88
|
|
@@ -88,22 +91,22 @@ your_app_name/
|
|
88
91
|
show.html.slim
|
89
92
|
new.html.slim.bak
|
90
93
|
show.html.slim.bak
|
91
|
-
|
94
|
+
|
92
95
|
> ls config/locales/
|
93
96
|
user.en.yml
|
94
97
|
en.yml
|
95
|
-
|
98
|
+
|
96
99
|
> cat ../users/new.html.slim.bak
|
97
100
|
h1 Hello World!
|
98
|
-
|
101
|
+
|
99
102
|
> cat ../users/new.html.slim
|
100
103
|
h1= t('.hello_world')
|
101
|
-
|
104
|
+
|
102
105
|
> cat config/locales/en.yml
|
103
106
|
--
|
104
107
|
en:
|
105
108
|
keys..
|
106
|
-
|
109
|
+
|
107
110
|
> cat config/locales/users.en.yml
|
108
111
|
---
|
109
112
|
en:
|
@@ -117,13 +120,13 @@ Suggested Workflow
|
|
117
120
|
-
|
118
121
|
As HTML is not 100% parsable there will be errors in the conversion. To minimize your error rate we suggest to approach each view or view_folder individually. The i18n-tasks gem helped a lot by finding errors. Always double check your views and make sure that everything went smoothly. Especially double check all your links. Here is an example workflow:
|
119
122
|
```ruby
|
120
|
-
# 1. create a branch for a view folder
|
123
|
+
# 1. create a branch for a view folder
|
121
124
|
> git checkout -b users_localization
|
122
125
|
|
123
126
|
# 2. slimkeyfy the view folder you would like to tag
|
124
127
|
> slimkeyfy app/views/users/ en
|
125
128
|
|
126
|
-
# 3. go through all files and verify/add missing translations
|
129
|
+
# 3. go through all files and verify/add missing translations
|
127
130
|
# (check against the .bak files (use git diff))
|
128
131
|
> git diff app/views/users/views.html.slim
|
129
132
|
|
@@ -52,9 +52,9 @@ class SlimKeyfy::Console::Commandline
|
|
52
52
|
|
53
53
|
wrong_usage if (input.nil? or locale.nil?)
|
54
54
|
|
55
|
-
if File.directory?(input)
|
55
|
+
if File.directory?(input)
|
56
56
|
directory_translate(input)
|
57
|
-
elsif File.file?(input)
|
57
|
+
elsif File.file?(input)
|
58
58
|
translate
|
59
59
|
else
|
60
60
|
raise "Please provide a file or directory!"
|
@@ -65,7 +65,7 @@ class SlimKeyfy::Console::Commandline
|
|
65
65
|
def directory_translate(input)
|
66
66
|
rec = @options.fetch(:recursive, false)
|
67
67
|
SlimKeyfy::Slimutils::MFileUtils.walk(input, rec).each do |rec_input|
|
68
|
-
if File.file?(rec_input) and SlimKeyfy::Slimutils::MFileUtils.is_valid_extension?(rec_input)
|
68
|
+
if File.file?(rec_input) and SlimKeyfy::Slimutils::MFileUtils.is_valid_extension?(rec_input)
|
69
69
|
@options[:input] = rec_input
|
70
70
|
translate
|
71
71
|
end
|
@@ -73,7 +73,7 @@ class SlimKeyfy::Console::Commandline
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def translate
|
76
|
-
unless SlimKeyfy::Slimutils::MFileUtils.is_valid_extension?(@options[:input])
|
76
|
+
unless SlimKeyfy::Slimutils::MFileUtils.is_valid_extension?(@options[:input])
|
77
77
|
puts "invalid extension!"
|
78
78
|
return
|
79
79
|
end
|
@@ -2,9 +2,9 @@ class SlimKeyfy::Console::IOAction
|
|
2
2
|
def self.yes_or_no?(msg)
|
3
3
|
puts "#{msg} (y|n)"
|
4
4
|
arg = STDIN.gets.chomp
|
5
|
-
if arg =~ /[yY](es)?/
|
5
|
+
if arg =~ /[yY](es)?/
|
6
6
|
true
|
7
|
-
elsif arg =~ /[nN]o?/
|
7
|
+
elsif arg =~ /[nN]o?/
|
8
8
|
false
|
9
9
|
else
|
10
10
|
puts "Provide either (y)es or (n)o!"
|
@@ -14,13 +14,13 @@ class SlimKeyfy::Console::IOAction
|
|
14
14
|
def self.choose(msg)
|
15
15
|
puts "#{msg} (y|n) (x for tagging | (a)bort)"
|
16
16
|
arg = STDIN.gets.chomp
|
17
|
-
if arg =~ /[yY](es)?/
|
17
|
+
if arg =~ /[yY](es)?/
|
18
18
|
"y"
|
19
|
-
elsif arg =~ /[nN]o?/
|
19
|
+
elsif arg =~ /[nN]o?/
|
20
20
|
"n"
|
21
|
-
elsif arg =~ /x/
|
21
|
+
elsif arg =~ /x/
|
22
22
|
"x"
|
23
|
-
elsif arg =~ /a/
|
23
|
+
elsif arg =~ /a/
|
24
24
|
"a"
|
25
25
|
else
|
26
26
|
puts "Either (y)es, (n)o, (x) for tagging or (a) to abort"
|
@@ -7,12 +7,12 @@ class SlimKeyfy::Console::Printer
|
|
7
7
|
def self.unix_diff(bak_path, file_path)
|
8
8
|
result = "Please install colordiff or diff (brew install colordiff)"
|
9
9
|
colordiff, diff = `which colordiff`, `which diff`
|
10
|
-
if not colordiff.empty?
|
10
|
+
if not colordiff.empty?
|
11
11
|
result = `colordiff #{bak_path} #{file_path}`
|
12
|
-
elsif not diff.empty?
|
12
|
+
elsif not diff.empty?
|
13
13
|
result =`diff #{bak_path} #{file_path}`
|
14
14
|
end
|
15
|
-
if result.nil? or result.strip.empty?
|
15
|
+
if result.nil? or result.strip.empty?
|
16
16
|
puts "No changes for comparison found!"
|
17
17
|
else
|
18
18
|
puts "#{result}"
|
@@ -17,9 +17,9 @@ class SlimKeyfy::Console::Translate
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def transformer
|
20
|
-
if @extension == "slim"
|
20
|
+
if @extension == "slim"
|
21
21
|
SlimKeyfy::Transformer::SlimTransformer
|
22
|
-
elsif @extension == "rb"
|
22
|
+
elsif @extension == "rb"
|
23
23
|
SlimKeyfy::Transformer::ControllerTransformer
|
24
24
|
else
|
25
25
|
puts "Unknown extension type!"
|
@@ -69,11 +69,11 @@ class SlimKeyfy::Console::Translate
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def finalize!
|
72
|
-
if @changes
|
73
|
-
if SlimKeyfy::Console::IOAction.yes_or_no?("Do you like to review your changes?")
|
72
|
+
if @changes
|
73
|
+
if SlimKeyfy::Console::IOAction.yes_or_no?("Do you like to review your changes?")
|
74
74
|
SlimKeyfy::Console::Printer.unix_diff(@bak_path, @original_file_path)
|
75
75
|
end
|
76
|
-
if SlimKeyfy::Console::IOAction.yes_or_no?("Do you like to save your changes?")
|
76
|
+
if SlimKeyfy::Console::IOAction.yes_or_no?("Do you like to save your changes?")
|
77
77
|
@yaml_processor.store!
|
78
78
|
puts "Saved! at #{@original_file_path}"
|
79
79
|
SlimKeyfy::Slimutils::MFileUtils.rm(@bak_path) if @no_backup
|
@@ -39,9 +39,8 @@ class SlimKeyfy::Slimutils::MFileUtils
|
|
39
39
|
file_path.split(".").last
|
40
40
|
end
|
41
41
|
def self.is_valid_extension?(file_path)
|
42
|
-
|
43
|
-
|
44
|
-
(ext.end_with?("slim") or ext.end_with?("rb"))
|
42
|
+
return false if (file_path.nil? or file_path.empty?)
|
43
|
+
(file_path.end_with?(".slim") or file_path.end_with?(".rb"))
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
@@ -12,12 +12,12 @@ class SlimKeyfy::Slimutils::YamlProcessor
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def process_output_file(yaml_output)
|
15
|
-
if yaml_output.nil?
|
15
|
+
if yaml_output.nil?
|
16
16
|
dir_of_key = @key_base.split(".").first
|
17
17
|
yaml_output = default_yaml(dir_of_key, @locale)
|
18
18
|
end
|
19
19
|
path = File.expand_path(yaml_output.to_s)
|
20
|
-
if File.exist?(path)
|
20
|
+
if File.exist?(path)
|
21
21
|
path
|
22
22
|
else
|
23
23
|
SlimKeyfy::Slimutils::FileWriter.write(path, "---")
|
@@ -32,8 +32,11 @@ class SlimKeyfy::Slimutils::YamlProcessor
|
|
32
32
|
|
33
33
|
def load_hash
|
34
34
|
h = YAML::load_file(@yaml_output)
|
35
|
-
if h
|
36
|
-
|
35
|
+
if h
|
36
|
+
h[@locale]
|
37
|
+
else
|
38
|
+
{}
|
39
|
+
end
|
37
40
|
end
|
38
41
|
|
39
42
|
def default_yaml(key, locale)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class SlimKeyfy::Transformer::SlimTransformer < SlimKeyfy::Transformer::BaseTransformer
|
2
2
|
|
3
3
|
HTML_TAGS = /^(?<html_tag>'|\||([a-z\.]+[0-9\-]*)+)/
|
4
|
-
EQUALS =
|
4
|
+
EQUALS = /#?([a-z0-9\.\-\s]+)?\=.*/
|
5
5
|
|
6
6
|
BEFORE = /(?<before>.*)/
|
7
7
|
TRANSLATION = /(?<translation>(".*?"|'.*?'))/
|
@@ -32,9 +32,9 @@ class SlimKeyfy::Transformer::SlimTransformer < SlimKeyfy::Transformer::BaseTran
|
|
32
32
|
unindented_line = @word.unindented_line
|
33
33
|
|
34
34
|
result =
|
35
|
-
if unindented_line.match(EQUALS)
|
35
|
+
if unindented_line.match(EQUALS)
|
36
36
|
parse_html_arguments(unindented_line)
|
37
|
-
elsif @word.head.match(HTML_TAGS)
|
37
|
+
elsif @word.head.match(HTML_TAGS)
|
38
38
|
parse_html
|
39
39
|
else nil_elem end
|
40
40
|
|
@@ -50,7 +50,7 @@ class SlimKeyfy::Transformer::SlimTransformer < SlimKeyfy::Transformer::BaseTran
|
|
50
50
|
body = @word.tail.join(" ")
|
51
51
|
body, tagged_with_equals = SlimKeyfy::Transformer::Whitespacer.convert_nbsp(body, tagged_with_equals)
|
52
52
|
|
53
|
-
if body.match(LINK_TO) != nil
|
53
|
+
if body.match(LINK_TO) != nil
|
54
54
|
body = link_tos(body)
|
55
55
|
end
|
56
56
|
|
@@ -72,7 +72,7 @@ class SlimKeyfy::Transformer::SlimTransformer < SlimKeyfy::Transformer::BaseTran
|
|
72
72
|
|
73
73
|
def link_tos(line)
|
74
74
|
m = line.match(LINK_TO)
|
75
|
-
if m != nil
|
75
|
+
if m != nil
|
76
76
|
_, translation = m[:html_tag], match_string(m[:translation])
|
77
77
|
translation_key = update_hashes(translation)
|
78
78
|
line = line.gsub(m[:translation], translation_key)
|
data/lib/slimkeyfy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slimkeyfy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dynport GmbH
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: '0'
|
146
146
|
requirements: []
|
147
147
|
rubyforge_project:
|
148
|
-
rubygems_version: 2.
|
148
|
+
rubygems_version: 2.2.2
|
149
149
|
signing_key:
|
150
150
|
specification_version: 4
|
151
151
|
summary: Extract plain strings from slim templates to replace them with calls to I18n's
|