i18n_toolbox 0.0.1 → 0.0.2
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.
- data/.travis.yml +5 -0
- data/Gemfile +0 -3
- data/README.md +104 -0
- data/i18n_toolbox.gemspec +3 -0
- data/lib/i18n_toolbox.rb +2 -2
- data/lib/i18n_toolbox/active_model/validations/length.rb +3 -3
- data/lib/i18n_toolbox/helpers/i18n_helper.rb +2 -2
- data/lib/i18n_toolbox/version.rb +1 -1
- data/test/helpers/i18n_helper_test.rb +8 -7
- metadata +63 -51
- data/README.rdoc +0 -41
- data/test/rails_app/log/development.log +0 -1
- data/test/rails_app/log/production.log +0 -0
- data/test/rails_app/log/server.log +0 -0
- data/test/rails_app/log/test.log +0 -0
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
# i18n_toolbox [](https://travis-ci.org/balvig/i18n_toolbox)
|
2
|
+
|
3
|
+
I18n_toolbox is a collection of helpers and active_model additions that solve basic problems that kept showing up when working with multiple language sites:
|
4
|
+
|
5
|
+
* Showing different images for different locales
|
6
|
+
* Different validates_length_of values for different locales
|
7
|
+
* Truncating text to different lengths depending on locale
|
8
|
+
* Applying "possessive case" correctly with correct use of apostrophes for different languages (ie "Jack's Recipes", "Miles' Recipes", "Recettes de Julien")
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
### image_tag
|
13
|
+
|
14
|
+
Serve up a different image depending on locale.
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
I18n.locale = :en
|
18
|
+
image_tag('logo.png', :localize => true) # => /images/en/logo.png
|
19
|
+
I18n.locale = :ja
|
20
|
+
image_tag('logo.png', :localize => true) # => /images/ja/logo.png
|
21
|
+
```
|
22
|
+
|
23
|
+
### truncate
|
24
|
+
|
25
|
+
Truncate text that appears longer on screen (such as 2 byte Japanese) to avoid breaking layouts dependent on length of text.
|
26
|
+
|
27
|
+
*config/locales/ja.yml*
|
28
|
+
|
29
|
+
```yaml
|
30
|
+
ja:
|
31
|
+
i18n_toolbox:
|
32
|
+
character_ratio: 0.5
|
33
|
+
```
|
34
|
+
|
35
|
+
*Output:*
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
I18n.locale = :en
|
39
|
+
truncate("2 byte characters are wider", :length => 20, :localize => true) # => "2 byte characters..." (20 chars)
|
40
|
+
I18n.locale = :ja
|
41
|
+
truncate("2 byte characters are wider", :length => 20, :localize => true) # => "2 byte ..." (10 chars)
|
42
|
+
```
|
43
|
+
|
44
|
+
### validates_length_of
|
45
|
+
|
46
|
+
Have different validation lengths for different locales.
|
47
|
+
|
48
|
+
*config/locales/ja.yml*
|
49
|
+
|
50
|
+
```yaml
|
51
|
+
ja:
|
52
|
+
i18n_toolbox:
|
53
|
+
character_ratio: 0.5
|
54
|
+
```
|
55
|
+
|
56
|
+
*Model:*
|
57
|
+
```ruby
|
58
|
+
class Post < ActiveRecord::Base
|
59
|
+
validates_length_of :title, :maximum => 40, :localize => true
|
60
|
+
# ...
|
61
|
+
end
|
62
|
+
|
63
|
+
I18n.locale = :en
|
64
|
+
Post.new(:title => 'English sentences use more chars').valid? # length is under 40, returns true
|
65
|
+
I18n.locale = :ja
|
66
|
+
Post.new(:title => 'Japanese sentences use fewer chars').valid? # => length is over 20, returns false
|
67
|
+
```
|
68
|
+
|
69
|
+
### possessive
|
70
|
+
|
71
|
+
Often used for user page titles, such as "Michael's Activity Feed" etc.
|
72
|
+
|
73
|
+
*config/locales/en.yml*
|
74
|
+
|
75
|
+
```yaml
|
76
|
+
en:
|
77
|
+
i18n_toolbox:
|
78
|
+
possessive: "%{owner}'s %{thing}"
|
79
|
+
possessive_s: "%{owner}' %{thing}"
|
80
|
+
```
|
81
|
+
|
82
|
+
*config/locales/fr.yml*
|
83
|
+
|
84
|
+
```yaml
|
85
|
+
fr:
|
86
|
+
i18n_toolbox:
|
87
|
+
possessive: "%{thing} de %{owner}"
|
88
|
+
```
|
89
|
+
|
90
|
+
*Output:*
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
I18n.locale = :en
|
94
|
+
possessive('Jack','Recipes') # => "Jack's Recipes"
|
95
|
+
possessive('Miles','Recipes') # => "Miles' Recipes"
|
96
|
+
|
97
|
+
I18n.locale = :fr
|
98
|
+
possessive('Julien','Recettes') # => "Recettes de Julien"
|
99
|
+
possessive('Jacques','Recettes') # => "Recettes de Jacques"
|
100
|
+
```
|
101
|
+
|
102
|
+
## License
|
103
|
+
|
104
|
+
MIT License. Copyright 2012 Cookpad Pte http://cookpad.it
|
data/i18n_toolbox.gemspec
CHANGED
@@ -18,4 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency "rails", "~> 3"
|
23
|
+
s.add_development_dependency 'sqlite3'
|
21
24
|
end
|
data/lib/i18n_toolbox.rb
CHANGED
@@ -2,11 +2,11 @@ module ActiveModel
|
|
2
2
|
module Validations
|
3
3
|
class LengthValidator < EachValidator
|
4
4
|
def validate_each(record, attribute, value)
|
5
|
-
value = options[:tokenizer].call(value) if value.kind_of?(String)
|
5
|
+
value = options[:tokenizer].call(value) if value.kind_of?(String) && options[:tokenizer].present?
|
6
6
|
|
7
7
|
CHECKS.each do |key, validity_check|
|
8
8
|
next unless check_value = options[key]
|
9
|
-
|
9
|
+
|
10
10
|
check_value = check_value * I18nToolbox.character_ratio if options[:localize]
|
11
11
|
|
12
12
|
value ||= [] if key == :maximum
|
@@ -25,4 +25,4 @@ module ActiveModel
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
-
end
|
28
|
+
end
|
@@ -4,7 +4,7 @@ module I18nToolbox
|
|
4
4
|
source = "#{I18n.locale}/#{source}" if options.delete(:localize)
|
5
5
|
super(source, options)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def possessive(owner, thing)
|
9
9
|
t(owner.last == 's' ? :'i18n_toolbox.possessive_s' : :'i18n_toolbox.possessive', :owner => owner, :thing => thing, :default => :'i18n_toolbox.possessive') if owner.present?
|
10
10
|
end
|
@@ -15,4 +15,4 @@ module I18nToolbox
|
|
15
15
|
super(text, options)
|
16
16
|
end
|
17
17
|
end
|
18
|
-
end
|
18
|
+
end
|
data/lib/i18n_toolbox/version.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
require 'test_helper'
|
2
3
|
|
3
|
-
class I18nToolbox::I18nHelperTest < ActionView::TestCase
|
4
|
+
class I18nToolbox::I18nHelperTest < ActionView::TestCase
|
4
5
|
test "image_tag given localize => true should return a localized image" do
|
5
6
|
I18n.locale = :ja
|
6
7
|
assert_match 'images/ja/logo.png', image_tag('logo.png', :localize => true)
|
@@ -8,17 +9,17 @@ class I18nToolbox::I18nHelperTest < ActionView::TestCase
|
|
8
9
|
assert_match 'images/en/logo.png', image_tag('logo.png', :localize => true)
|
9
10
|
assert_match 'images/logo.png', image_tag('logo.png', :localize => false)
|
10
11
|
end
|
11
|
-
|
12
|
+
|
12
13
|
test "image_tag should otherwise work as usual" do
|
13
14
|
assert_match 'images/logo.png', image_tag('logo.png')
|
14
15
|
end
|
15
|
-
|
16
|
+
|
16
17
|
test "possessive should add localized 's" do
|
17
18
|
I18n.backend = I18n::Backend::KeyValue.new({})
|
18
19
|
I18n.backend.store_translations :en, :i18n_toolbox => {:possessive => "%{owner}'s %{thing}", :possessive_s => "%{owner}' %{thing}"}
|
19
20
|
I18n.backend.store_translations :ja, :i18n_toolbox => {:possessive => "%{owner}の%{thing}"}
|
20
21
|
I18n.backend.store_translations :fr, :i18n_toolbox => {:possessive => "%{thing} de %{owner}"}
|
21
|
-
|
22
|
+
|
22
23
|
assert_nil possessive(nil,nil)
|
23
24
|
I18n.locale = :en
|
24
25
|
assert_equal "Bob's house", possessive('Bob','house')
|
@@ -30,12 +31,12 @@ class I18nToolbox::I18nHelperTest < ActionView::TestCase
|
|
30
31
|
assert_equal "La maison de Bob", possessive('Bob','La maison')
|
31
32
|
assert_equal "La maison de Miles", possessive('Miles','La maison')
|
32
33
|
end
|
33
|
-
|
34
|
+
|
34
35
|
test "truncate should respect different lengths for different locales" do
|
35
36
|
I18n.backend = I18n::Backend::KeyValue.new({})
|
36
37
|
I18n.backend.store_translations :en, :i18n_toolbox => {:character_ratio => 1}
|
37
38
|
I18n.backend.store_translations :ja, :i18n_toolbox => {:character_ratio => 0.5}
|
38
|
-
|
39
|
+
|
39
40
|
I18n.locale = :en
|
40
41
|
assert_equal 'Top Gun is one of the best ...', truncate('Top Gun is one of the best movies ever made', :localize => true)
|
41
42
|
I18n.locale = :ja
|
@@ -44,4 +45,4 @@ class I18nToolbox::I18nHelperTest < ActionView::TestCase
|
|
44
45
|
I18n.locale = :da
|
45
46
|
assert_equal 'Top Gun is one of the best ...', truncate('Top Gun is one of the best movies ever made', :localize => true)
|
46
47
|
end
|
47
|
-
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,37 +1,60 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n_toolbox
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
hash: 29
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
5
|
+
version: 0.0.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Jens Balvig
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
12
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
type: :runtime
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3'
|
22
|
+
name: rails
|
23
|
+
prerelease: false
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
type: :development
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
name: sqlite3
|
39
|
+
prerelease: false
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Provides a set of convenient helpers and active model additions for working
|
47
|
+
with multiple languages
|
48
|
+
email:
|
24
49
|
- jens@balvig.com
|
25
50
|
executables: []
|
26
|
-
|
27
51
|
extensions: []
|
28
|
-
|
29
52
|
extra_rdoc_files: []
|
30
|
-
|
31
|
-
files:
|
53
|
+
files:
|
32
54
|
- .gitignore
|
55
|
+
- .travis.yml
|
33
56
|
- Gemfile
|
34
|
-
- README.
|
57
|
+
- README.md
|
35
58
|
- Rakefile
|
36
59
|
- i18n_toolbox.gemspec
|
37
60
|
- lib/i18n_toolbox.rb
|
@@ -61,10 +84,6 @@ files:
|
|
61
84
|
- test/rails_app/config/locales/en.yml
|
62
85
|
- test/rails_app/config/routes.rb
|
63
86
|
- test/rails_app/db/migrate/20110705081839_create_posts.rb
|
64
|
-
- test/rails_app/log/development.log
|
65
|
-
- test/rails_app/log/production.log
|
66
|
-
- test/rails_app/log/server.log
|
67
|
-
- test/rails_app/log/test.log
|
68
87
|
- test/rails_app/public/404.html
|
69
88
|
- test/rails_app/public/422.html
|
70
89
|
- test/rails_app/public/500.html
|
@@ -78,41 +97,38 @@ files:
|
|
78
97
|
- test/rails_app/public/stylesheets/.gitkeep
|
79
98
|
- test/rails_app/script/rails
|
80
99
|
- test/test_helper.rb
|
81
|
-
has_rdoc: true
|
82
100
|
homepage: https://github.com/balvig/i18n_toolbox
|
83
101
|
licenses: []
|
84
|
-
|
85
102
|
post_install_message:
|
86
103
|
rdoc_options: []
|
87
|
-
|
88
|
-
require_paths:
|
104
|
+
require_paths:
|
89
105
|
- lib
|
90
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
107
|
none: false
|
92
|
-
requirements:
|
93
|
-
- -
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
|
96
|
-
segments:
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
segments:
|
97
112
|
- 0
|
98
|
-
|
99
|
-
|
113
|
+
hash: -1023373613002778549
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
116
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
segments:
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
segments:
|
106
121
|
- 0
|
107
|
-
|
122
|
+
hash: -1023373613002778549
|
123
|
+
version: '0'
|
108
124
|
requirements: []
|
109
|
-
|
110
125
|
rubyforge_project: i18n_toolbox
|
111
|
-
rubygems_version: 1.
|
126
|
+
rubygems_version: 1.8.23
|
112
127
|
signing_key:
|
113
128
|
specification_version: 3
|
114
|
-
summary: Provides a set of convenient helpers and active model additions for working
|
115
|
-
|
129
|
+
summary: Provides a set of convenient helpers and active model additions for working
|
130
|
+
with multiple languages
|
131
|
+
test_files:
|
116
132
|
- test/active_model/validations/length_test.rb
|
117
133
|
- test/helpers/i18n_helper_test.rb
|
118
134
|
- test/rails_app/Rakefile
|
@@ -136,10 +152,6 @@ test_files:
|
|
136
152
|
- test/rails_app/config/locales/en.yml
|
137
153
|
- test/rails_app/config/routes.rb
|
138
154
|
- test/rails_app/db/migrate/20110705081839_create_posts.rb
|
139
|
-
- test/rails_app/log/development.log
|
140
|
-
- test/rails_app/log/production.log
|
141
|
-
- test/rails_app/log/server.log
|
142
|
-
- test/rails_app/log/test.log
|
143
155
|
- test/rails_app/public/404.html
|
144
156
|
- test/rails_app/public/422.html
|
145
157
|
- test/rails_app/public/500.html
|
data/README.rdoc
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
== i18n_toolbox
|
2
|
-
|
3
|
-
I18n_toolbox is a collection of helpers and active_model additions that solve basic problems that kept showing up when working with multiple language sites:
|
4
|
-
|
5
|
-
* Showing different images for different locales
|
6
|
-
* Different validates_length_of values for different locales
|
7
|
-
* Truncating text to different lengths depending on locale
|
8
|
-
* Applying "possessive case" correctly with correct use of apostrophes for different languages (ie "Jack's Homepage, Miles' Homepage, Miles")
|
9
|
-
|
10
|
-
== Usage
|
11
|
-
|
12
|
-
=== image_tag
|
13
|
-
|
14
|
-
TBA
|
15
|
-
|
16
|
-
=== truncate
|
17
|
-
|
18
|
-
TBA
|
19
|
-
|
20
|
-
=== validates_length_of
|
21
|
-
|
22
|
-
TBA
|
23
|
-
|
24
|
-
=== possessive
|
25
|
-
|
26
|
-
TBA
|
27
|
-
|
28
|
-
ja:
|
29
|
-
i18n_toolbox:
|
30
|
-
character_ratio: 0.5
|
31
|
-
|
32
|
-
|
33
|
-
== Additional information
|
34
|
-
|
35
|
-
=== Maintainers
|
36
|
-
|
37
|
-
* Jens Balvig (http://github.com/balvig)
|
38
|
-
|
39
|
-
== License
|
40
|
-
|
41
|
-
MIT License. Copyright 2011 Cookpad Pte http://cookpad.it
|
@@ -1 +0,0 @@
|
|
1
|
-
DEPRECATION WARNING: config.action_view.debug_rjs will be removed in 3.1, from 3.1 onwards you will need to install prototype-rails to continue to use RJS templates . (called from /Users/jens/Documents/Projects/i18n_toolbox/test/rails_app/config/environment.rb:5)
|
File without changes
|
File without changes
|
data/test/rails_app/log/test.log
DELETED
File without changes
|