vocab 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/lib/vocab/merger/android.rb +4 -4
- data/lib/vocab/version.rb +1 -1
- data/spec/data/android/locales/values-fr/strings.xml +3 -0
- data/spec/data/android/locales/values/strings.xml +4 -0
- data/spec/data/rails/locales/bom.yml +2 -1
- data/spec/extractor/android_spec.rb +1 -1
- data/spec/merger/android_spec.rb +22 -3
- data/spec/translator/android_spec.rb +1 -1
- data/spec/validator/android_spec.rb +1 -1
- data/spec/validator/rails_spec.rb +2 -2
- metadata +3 -2
data/.gitignore
CHANGED
data/lib/vocab/merger/android.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Vocab
|
2
2
|
module Merger
|
3
3
|
class Android < Base
|
4
|
-
FORMAT_PATTERN =
|
5
|
-
ARG_PATTERN = /\$
|
4
|
+
FORMAT_PATTERN = /%\w/
|
5
|
+
ARG_PATTERN = /\$[a-zA-Z]/
|
6
6
|
|
7
7
|
def initialize( locales_dir = nil, updates_dir = nil )
|
8
8
|
@locales_dir = locales_dir || 'res'
|
@@ -72,7 +72,7 @@ module Vocab
|
|
72
72
|
new_value.each do |inner_key,inner_value|
|
73
73
|
if ( @english_plurals[ key ][ inner_key ].to_s.scan( FORMAT_PATTERN ) != inner_value.to_s.scan( FORMAT_PATTERN ) ) ||
|
74
74
|
( @english_plurals[ key ][ inner_key ].to_s.scan( ARG_PATTERN ) != inner_value.to_s.scan( ARG_PATTERN ) )
|
75
|
-
Vocab.ui.warn( "Format string mismatch for key #{key}, quantity #{inner_key} while merging #{path}. \n English: #{@english_plurals[ key ][ inner_key ]} \n Translation: #{new_value[ inner_key ]}" )
|
75
|
+
Vocab.ui.warn( "Format string mismatch for key #{key}, quantity #{inner_key} while merging #{path}. \n English: #{@english_plurals[ key ][ inner_key ]} \n Translation: #{new_value[ inner_key ]}\n\n" )
|
76
76
|
end
|
77
77
|
end
|
78
78
|
end
|
@@ -80,7 +80,7 @@ module Vocab
|
|
80
80
|
def string_format_changed?( key, new_value, path )
|
81
81
|
if ( @english_strings[ key ].to_s.scan( FORMAT_PATTERN ) != new_value.to_s.scan( FORMAT_PATTERN ) ) ||
|
82
82
|
( @english_strings[ key ].to_s.scan( ARG_PATTERN ) != new_value.to_s.scan( ARG_PATTERN ) )
|
83
|
-
Vocab.ui.warn( "Format string mismatch for key #{key} while merging #{path}. \n English: #{@english_strings[ key ]} \n Translation: #{new_value}" )
|
83
|
+
Vocab.ui.warn( "Format string mismatch for key #{key} while merging #{path}. \n English: #{@english_strings[ key ]} \n Translation: #{new_value}\n\n" )
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
data/lib/vocab/version.rb
CHANGED
@@ -8,6 +8,9 @@
|
|
8
8
|
<string name="delete">Deletee %2$d</string>
|
9
9
|
<string name="not_in_es">This key not in spanish</string>
|
10
10
|
<string name="debug_key">Should be ignored</string>
|
11
|
+
<string name="price">Alles zu einem Preis von 3,50 USD pro Monat.</string>
|
12
|
+
<string name="free">%s의 주간 무료 앱!</string>
|
13
|
+
<string name="guarantee">Rimborso garantito al 100%!</string>
|
11
14
|
|
12
15
|
<plurals name="user_count">
|
13
16
|
<item quantity="one">1 user</item>
|
@@ -8,6 +8,10 @@
|
|
8
8
|
<string name="delete">Delete %1$d</string>
|
9
9
|
<string name="not_in_es">This key not in spanish</string>
|
10
10
|
<string name="debug_key">Should be ignored</string>
|
11
|
+
<string name="price">All this for only $3.50 a month!</string>
|
12
|
+
<string name="free">%s\'s free weekly app!</string>
|
13
|
+
<string name="guarantee">100% money back guarantee!</string>
|
14
|
+
|
11
15
|
|
12
16
|
<plurals name="user_count">
|
13
17
|
<item quantity="one">1 user</item>
|
@@ -1 +1,2 @@
|
|
1
|
-
bom:
|
1
|
+
bom:
|
2
|
+
test: "bogus"
|
@@ -10,7 +10,7 @@ describe "Vocab::Extractor::Android" do
|
|
10
10
|
|
11
11
|
it "extracts hash of current string translations" do
|
12
12
|
actual = Vocab::Extractor::Android.current_strings( @locale )
|
13
|
-
actual.should
|
13
|
+
actual.should include( { "app_name" =>"Kid Mode",
|
14
14
|
"delete" =>"Delete %1$d",
|
15
15
|
"cancel" =>"Cancel",
|
16
16
|
"app_current"=>"current",
|
data/spec/merger/android_spec.rb
CHANGED
@@ -42,15 +42,34 @@ describe "Vocab::Merger::Android" do
|
|
42
42
|
describe "check_matching_format_strings" do
|
43
43
|
it 'warns about format string changes in singular strings' do
|
44
44
|
@merger = Vocab::Merger::Android.new( @merge_dir, @update_dir )
|
45
|
-
Vocab.ui.should_receive( :warn ).with( "Format string mismatch for key delete while merging #{@merge_dir}/values-fr/strings.xml. \n English: Delete %1$d \n Translation: Deletee %2$d" )
|
45
|
+
Vocab.ui.should_receive( :warn ).with( "Format string mismatch for key delete while merging #{@merge_dir}/values-fr/strings.xml. \n English: Delete %1$d \n Translation: Deletee %2$d\n\n" )
|
46
46
|
@merger.check_matching_format_strings( 'delete', "Deletee %2$d", "#{@merge_dir}/values-fr/strings.xml", :string_format_changed? )
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'warns about format string changes in plurals' do
|
50
50
|
@merger = Vocab::Merger::Android.new( @merge_dir, @update_dir )
|
51
|
-
Vocab.ui.should_receive( :warn ).with( "Format string mismatch for key user_count, quantity many while merging #{@merge_dir}/values-fr/strings.xml. \n English: %d users \n Translation: %f users" )
|
51
|
+
Vocab.ui.should_receive( :warn ).with( "Format string mismatch for key user_count, quantity many while merging #{@merge_dir}/values-fr/strings.xml. \n English: %d users \n Translation: %f users\n\n" )
|
52
52
|
@merger.check_matching_format_strings( 'user_count', { "one" => "1 user", "many" => "%f users" }, "#{@merge_dir}/values-fr/strings.xml", :plural_format_changed? )
|
53
53
|
end
|
54
|
+
|
55
|
+
|
56
|
+
it 'does not warn about $ in currency' do
|
57
|
+
@merger = Vocab::Merger::Android.new( @merge_dir, @update_dir )
|
58
|
+
Vocab.ui.should_not_receive( :warn )
|
59
|
+
@merger.check_matching_format_strings( 'price', "Alles zu einem Preis von 3,50 USD pro Monat.", "#{@merge_dir}/values-fr/strings.xml", :string_format_changed? )
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'does not warn about % as actual percent sign' do
|
63
|
+
@merger = Vocab::Merger::Android.new( @merge_dir, @update_dir )
|
64
|
+
Vocab.ui.should_not_receive( :warn )
|
65
|
+
@merger.check_matching_format_strings( 'guarantee', "Rimborso garantito al 100%!", "#{@merge_dir}/values-fr/strings.xml", :string_format_changed? )
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'only checks for one character after %' do
|
69
|
+
@merger = Vocab::Merger::Android.new( @merge_dir, @update_dir )
|
70
|
+
Vocab.ui.should_not_receive( :warn )
|
71
|
+
@merger.check_matching_format_strings( 'free', "%s의 주간 무료 앱!", "#{@merge_dir}/values-fr/strings.xml", :string_format_changed? )
|
72
|
+
end
|
54
73
|
end
|
55
74
|
|
56
75
|
describe 'merge_file' do
|
@@ -114,7 +133,7 @@ describe "Vocab::Merger::Android" do
|
|
114
133
|
|
115
134
|
it 'fetches the english keys' do
|
116
135
|
merger = Vocab::Merger::Android.new( @merge_dir )
|
117
|
-
keys = ["app_name", "delete", "cancel", "app_current", "not_in_es", "pd_app_name"]
|
136
|
+
keys = ["app_name", "delete", "cancel", "app_current", "not_in_es", "pd_app_name", "free", "guarantee", "price" ]
|
118
137
|
merger.string_keys.should =~ keys
|
119
138
|
end
|
120
139
|
|
@@ -6,7 +6,7 @@ describe 'Vocab::Translator::Android' do
|
|
6
6
|
|
7
7
|
it 'returns the english keys for a locales dir' do
|
8
8
|
locales_dir = "#{vocab_root}/spec/data/android/locales"
|
9
|
-
expected = ["app_name", "delete", "cancel", "app_current", "not_in_es", "pd_app_name"]
|
9
|
+
expected = ["app_name", "delete", "cancel", "app_current", "not_in_es", "pd_app_name", "free", "guarantee", "price"]
|
10
10
|
Vocab::Translator::Android.string_keys( locales_dir ).should =~ expected
|
11
11
|
end
|
12
12
|
|
@@ -15,7 +15,7 @@ describe "Vocab::Validator::Android" do
|
|
15
15
|
|
16
16
|
it 'returns a hash containing the missing keys' do
|
17
17
|
result = @validator.validate_file( @path )
|
18
|
-
result[ :missing ].should eql( [ "cancel", "delete", "not_in_es" ] )
|
18
|
+
result[ :missing ].should eql( [ "cancel", "delete", "free", "guarantee", "not_in_es", "price" ] )
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'returns a hash containing the extra keys' do
|
@@ -11,7 +11,7 @@ describe "Vocab::Validator::Rails" do
|
|
11
11
|
|
12
12
|
it "complains about yml files with leading BOM characters" do
|
13
13
|
File.open( "#{@locales_dir}/bom.yml", "w+" ) { |f| f.write( "\xEF\xBB\xBF".force_encoding("UTF-8") ) }
|
14
|
-
File.open( "#{@locales_dir}/bom.yml", "a" ) { |f| f.write( "bom:" ) }
|
14
|
+
File.open( "#{@locales_dir}/bom.yml", "a" ) { |f| f.write( "bom:\n test: \"bogus\"" ) }
|
15
15
|
|
16
16
|
bom_regex = "\xEF\xBB\xBF".force_encoding("UTF-8")
|
17
17
|
File.open( "#{@locales_dir}/bom.yml" ) { |f| f.read }.force_encoding( "UTF-8" ).match( bom_regex ).should be_true
|
@@ -99,4 +99,4 @@ describe "Vocab::Validator::Rails" do
|
|
99
99
|
|
100
100
|
end
|
101
101
|
|
102
|
-
end
|
102
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vocab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: i18n
|
@@ -321,3 +321,4 @@ test_files:
|
|
321
321
|
- spec/validator/base_spec.rb
|
322
322
|
- spec/validator/rails_spec.rb
|
323
323
|
- spec/vocab_spec.rb
|
324
|
+
has_rdoc:
|