i18n-assets 0.0.1 → 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 +8 -8
- data/.gitignore +2 -0
- data/Gemfile.lock +52 -0
- data/README.md +2 -0
- data/i18n-assets.gemspec +1 -0
- data/lib/i18n/assets/sprockets.rb +140 -0
- data/lib/i18n/assets/version.rb +1 -1
- data/lib/i18n/assets.rb +1 -1
- metadata +18 -4
- data/lib/i18n/assets/manifest.rb +0 -89
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWE5NDUyNWQxMGQ1MmIzYmY4YjMxMWI4NTJkZWJlMTQ1OTVkZjg1OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzUxNjFkNTVhZDQ5YTIwN2RhZjNhMjA1NTI3ZTA1NDVlYjRmZjMyOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTRmNTZmNjIwNmEwOGVhMzQyNmU0MTM2M2VhMjdkYjBkY2MwNjY0MDg2NDg1
|
10
|
+
MTM0NTNmNWVjMzJkYTNmZDk0YTVkYWExMjA4ZDFiODBkM2U0NmNkZDVlMTYx
|
11
|
+
NDExZTA3ZmIxOTg0OTU3M2VhZDViZTY0NTJmMTA1MjQ2NDFhNjI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmU4ZDk3YTdlN2EyNTRlNmJhMmQyYTBjNjk2OTg4MjI2NjdmY2IxZTA5Y2Y1
|
14
|
+
NDJmM2JkNzVkYzZkMTdhMjNjYTRkNDNiYWE2ZDIwYTk4NTI2MGYzY2Y0NmMy
|
15
|
+
OWUzNWY4YTE2YWQ1NDM1MjljYWNmZDlhNThjMjYxMWVkYTUwY2M=
|
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
i18n-assets (0.0.3)
|
5
|
+
actionpack (~> 3.2.18)
|
6
|
+
sprockets (~> 2.2.2)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
actionpack (3.2.18)
|
12
|
+
activemodel (= 3.2.18)
|
13
|
+
activesupport (= 3.2.18)
|
14
|
+
builder (~> 3.0.0)
|
15
|
+
erubis (~> 2.7.0)
|
16
|
+
journey (~> 1.0.4)
|
17
|
+
rack (~> 1.4.5)
|
18
|
+
rack-cache (~> 1.2)
|
19
|
+
rack-test (~> 0.6.1)
|
20
|
+
sprockets (~> 2.2.1)
|
21
|
+
activemodel (3.2.18)
|
22
|
+
activesupport (= 3.2.18)
|
23
|
+
builder (~> 3.0.0)
|
24
|
+
activesupport (3.2.18)
|
25
|
+
i18n (~> 0.6, >= 0.6.4)
|
26
|
+
multi_json (~> 1.0)
|
27
|
+
builder (3.0.4)
|
28
|
+
erubis (2.7.0)
|
29
|
+
hike (1.2.3)
|
30
|
+
i18n (0.6.9)
|
31
|
+
journey (1.0.4)
|
32
|
+
multi_json (1.10.1)
|
33
|
+
rack (1.4.5)
|
34
|
+
rack-cache (1.2)
|
35
|
+
rack (>= 0.4)
|
36
|
+
rack-test (0.6.2)
|
37
|
+
rack (>= 1.0)
|
38
|
+
rake (10.3.2)
|
39
|
+
sprockets (2.2.2)
|
40
|
+
hike (~> 1.2)
|
41
|
+
multi_json (~> 1.0)
|
42
|
+
rack (~> 1.0)
|
43
|
+
tilt (~> 1.1, != 1.3.0)
|
44
|
+
tilt (1.4.1)
|
45
|
+
|
46
|
+
PLATFORMS
|
47
|
+
ruby
|
48
|
+
|
49
|
+
DEPENDENCIES
|
50
|
+
bundler (~> 1.5)
|
51
|
+
i18n-assets!
|
52
|
+
rake
|
data/README.md
CHANGED
@@ -22,6 +22,8 @@ Just add `.erb` extension to your `.js` and `.css` files and use standard I18n h
|
|
22
22
|
|
23
23
|
On assets precompilation localized versions of your files will be generated.
|
24
24
|
|
25
|
+
If you need to prevent `.js.erb` or `.css.erb` files from caching, you can add `config.assets.prevent_caching = true` to the `environments/development.rb` file.
|
26
|
+
|
25
27
|
## Example
|
26
28
|
|
27
29
|
You can check an example usage here: https://github.com/maximgladkov/localized_assets_precompilation_example_app
|
data/i18n-assets.gemspec
CHANGED
@@ -0,0 +1,140 @@
|
|
1
|
+
unless defined?(Sprockets::LOCALIZABLE_ASSETS_REGEX)
|
2
|
+
require 'sprockets'
|
3
|
+
|
4
|
+
module Sprockets
|
5
|
+
LOCALIZABLE_ASSETS_EXT = %w( js css )
|
6
|
+
LOCALIZABLE_ASSETS_REGEX = Regexp.new("\\.(?:#{ LOCALIZABLE_ASSETS_EXT * '|' })")
|
7
|
+
LOCALIZABLE_COMPILABLE_ASSETS_REGEX = Regexp.new("\\.(?:#{ LOCALIZABLE_ASSETS_EXT * '|' })\\..+$")
|
8
|
+
|
9
|
+
module Helpers
|
10
|
+
module RailsHelper
|
11
|
+
|
12
|
+
alias_method :asset_path_without_locale, :asset_path
|
13
|
+
|
14
|
+
# prevent asset from caching by adding timestamp
|
15
|
+
def asset_path(source, options = {})
|
16
|
+
path = asset_path_without_locale(source, options)
|
17
|
+
|
18
|
+
if path =~ LOCALIZABLE_ASSETS_REGEX
|
19
|
+
separator = path =~ /\?/ ? '&' : '?'
|
20
|
+
"#{ path }#{ separator }t=#{ Time.now.to_i }"
|
21
|
+
else
|
22
|
+
path
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
alias_method :path_to_asset, :asset_path
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class StaticCompiler
|
32
|
+
|
33
|
+
def compile
|
34
|
+
manifest = {}
|
35
|
+
env.each_logical_path(paths) do |logical_path|
|
36
|
+
process = lambda do
|
37
|
+
if asset = env.find_asset(logical_path)
|
38
|
+
digest_path = write_asset(asset)
|
39
|
+
manifest[asset.logical_path] = digest_path
|
40
|
+
manifest[aliased_path_for(asset.logical_path)] = digest_path
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
if logical_path =~ LOCALIZABLE_ASSETS_REGEX
|
45
|
+
I18n.available_locales.each do |locale|
|
46
|
+
I18n.locale = locale
|
47
|
+
process.call
|
48
|
+
end
|
49
|
+
else
|
50
|
+
process.call
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
I18n.locale = I18n.default_locale
|
55
|
+
|
56
|
+
write_manifest(manifest) if @manifest
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
class Asset
|
62
|
+
|
63
|
+
alias_method :logical_path_without_locale, :logical_path
|
64
|
+
|
65
|
+
# add locale for css and js files
|
66
|
+
def logical_path
|
67
|
+
path = logical_path_without_locale
|
68
|
+
if !Rails.env.development? && path =~ LOCALIZABLE_ASSETS_REGEX
|
69
|
+
"#{ I18n.locale }/#{ path }"
|
70
|
+
else
|
71
|
+
path
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
|
77
|
+
alias_method :dependency_fresh_without_check?, :dependency_fresh?
|
78
|
+
def dependency_fresh?(environment, dep)
|
79
|
+
return false if Rails.configuration.assets.prevent_caching && dep.pathname.to_s =~ LOCALIZABLE_COMPILABLE_ASSETS_REGEX
|
80
|
+
dependency_fresh_without_check?(environment, dep)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
class Base
|
86
|
+
|
87
|
+
# set locale for asset request
|
88
|
+
def call(env)
|
89
|
+
locale = extract_locale(env['PATH_INFO'])
|
90
|
+
env['PATH_INFO'].gsub!(Regexp.new("^/#{ locale }"), '') if locale
|
91
|
+
I18n.locale = Rack::Request.new(env).params['locale'] || locale || I18n.default_locale
|
92
|
+
super
|
93
|
+
end
|
94
|
+
|
95
|
+
# add locale to assets cache key
|
96
|
+
def cache_key_for(path, options)
|
97
|
+
"#{path}:#{I18n.locale}:#{options[:bundle] ? '1' : '0'}"
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def extract_locale(path)
|
103
|
+
locale = path[/^\/([a-z\-_]+?)\//, 1]
|
104
|
+
if I18n.available_locales.map(&:to_s).include? locale
|
105
|
+
locale
|
106
|
+
else
|
107
|
+
nil
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
module ActionView
|
116
|
+
class AssetPaths
|
117
|
+
alias_method :compute_public_path_without_locale, :compute_public_path
|
118
|
+
|
119
|
+
def compute_public_path(source, dir, options = nil)
|
120
|
+
source = prepend_locale(source) if file_localizable?(source, options) && !file_already_localized?(source)
|
121
|
+
compute_public_path_without_locale(source, dir, options)
|
122
|
+
end
|
123
|
+
|
124
|
+
private
|
125
|
+
|
126
|
+
def prepend_locale(source)
|
127
|
+
"#{ I18n.locale }/#{ source }"
|
128
|
+
end
|
129
|
+
|
130
|
+
def file_localizable?(source, options)
|
131
|
+
source =~ Sprockets::LOCALIZABLE_ASSETS_REGEX || Sprockets::LOCALIZABLE_ASSETS_EXT.include?(options.try(:[], :ext))
|
132
|
+
end
|
133
|
+
|
134
|
+
def file_already_localized?(source)
|
135
|
+
source.starts_with?("#{ I18n.locale }/")
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
data/lib/i18n/assets/version.rb
CHANGED
data/lib/i18n/assets.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n-assets
|
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
|
- Maxim Gladkov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.2.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: actionpack
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.2.18
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.2.18
|
55
69
|
description: Ever wanted to use rails localization helpers inside your assets? Your
|
56
70
|
dream just came true!
|
57
71
|
email:
|
@@ -62,12 +76,13 @@ extra_rdoc_files: []
|
|
62
76
|
files:
|
63
77
|
- .gitignore
|
64
78
|
- Gemfile
|
79
|
+
- Gemfile.lock
|
65
80
|
- LICENSE.txt
|
66
81
|
- README.md
|
67
82
|
- Rakefile
|
68
83
|
- i18n-assets.gemspec
|
69
84
|
- lib/i18n/assets.rb
|
70
|
-
- lib/i18n/assets/
|
85
|
+
- lib/i18n/assets/sprockets.rb
|
71
86
|
- lib/i18n/assets/version.rb
|
72
87
|
homepage: https://github.com/maximgladkov/i18n-assets
|
73
88
|
licenses:
|
@@ -94,4 +109,3 @@ signing_key:
|
|
94
109
|
specification_version: 4
|
95
110
|
summary: Rails assets localization made easy
|
96
111
|
test_files: []
|
97
|
-
has_rdoc:
|
data/lib/i18n/assets/manifest.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
require 'sprockets'
|
2
|
-
|
3
|
-
module Sprockets
|
4
|
-
LOCALIZABLE_ASSETS_REGEX = /\.(?:js|css)/
|
5
|
-
|
6
|
-
module Helpers
|
7
|
-
module RailsHelper
|
8
|
-
|
9
|
-
# add locale to asset_prefix, if assets compiled
|
10
|
-
def asset_prefix_with_locale
|
11
|
-
if Rails.env.development?
|
12
|
-
Rails.application.config.assets.prefix
|
13
|
-
else
|
14
|
-
"#{ Rails.application.config.assets.prefix }/#{ I18n.locale }"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
alias_method :asset_path_without_locale, :asset_path
|
19
|
-
|
20
|
-
# prevent asset from caching by adding timestamp
|
21
|
-
def asset_path(source, options = {})
|
22
|
-
assert_prefix = asset_prefix_with_locale
|
23
|
-
asset_path = asset_path_without_locale(source, options)
|
24
|
-
|
25
|
-
if asset_path =~ LOCALIZABLE_ASSETS_REGEX
|
26
|
-
separator = asset_path =~ /\?/ ? '&' : '?'
|
27
|
-
"#{ asset_path }#{ separator }locale=#{ I18n.locale }&t=#{ Time.now.to_i }"
|
28
|
-
else
|
29
|
-
asset_path
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
alias_method :path_to_asset, :asset_path
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
class StaticCompiler
|
39
|
-
|
40
|
-
alias_method :compile_without_manifest, :compile
|
41
|
-
|
42
|
-
# run compile for each available locale
|
43
|
-
def compile(*paths)
|
44
|
-
I18n.available_locales.each do |locale|
|
45
|
-
env.logger.info "Compiling assets for #{ locale.upcase } locale..."
|
46
|
-
|
47
|
-
I18n.locale = locale
|
48
|
-
|
49
|
-
manifest = Sprockets::Manifest.new(env, target)
|
50
|
-
manifest.compile *paths
|
51
|
-
end
|
52
|
-
|
53
|
-
I18n.locale = I18n.default_locale
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
class Asset
|
59
|
-
|
60
|
-
alias_method :digest_path_without_locale, :digest_path
|
61
|
-
|
62
|
-
# add locale for css and js files
|
63
|
-
def digest_path
|
64
|
-
digest_path = digest_path_without_locale
|
65
|
-
if digest_path =~ LOCALIZABLE_ASSETS_REGEX
|
66
|
-
"#{ I18n.locale }/#{ digest_path }"
|
67
|
-
else
|
68
|
-
digest_path
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
class Base
|
75
|
-
|
76
|
-
# set locale for asset request
|
77
|
-
def call(env)
|
78
|
-
I18n.locale = Rack::Request.new(env).params['locale'] || I18n.default_locale
|
79
|
-
super
|
80
|
-
end
|
81
|
-
|
82
|
-
# add locale to assets cache key
|
83
|
-
def cache_key_for(path, options)
|
84
|
-
"#{path}:#{I18n.locale}:#{options[:bundle] ? '1' : '0'}"
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|