jekyll-language-plugin 1.1.8 → 1.2.0
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/lib/jekyll-language-plugin.rb +19 -0
- data/lib/jekyll/language-plugin/date_localizer.rb +3 -1
- data/lib/jekyll/language-plugin/language_data.rb +9 -43
- data/lib/jekyll/language-plugin/liquid_context.rb +4 -7
- data/lib/jekyll/language-plugin/loaders/base_loader.rb +47 -0
- data/lib/jekyll/language-plugin/loaders/jekyll_data_loader.rb +33 -0
- data/lib/jekyll/language-plugin/loaders/rails_i18n_loader.rb +51 -0
- data/lib/jekyll/language-plugin/version.rb +1 -1
- data/lib/jekyll/language_document.rb +2 -15
- data/lib/jekyll/language_page.rb +8 -17
- data/lib/jekyll/language_properties.rb +18 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1654e2f4bf11914d49db7c2d585ad30e82087f55
|
4
|
+
data.tar.gz: 6043c92dbc51bf59825cd72e24a0e422fc7c3ef6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0389df0dc98678798a902e8dbc560666cf3fc2767ca5be77234018d038d0995932a74e1a821d8c550f1353c9115d0164b55cb45be6c1368ca8595b772b515f3
|
7
|
+
data.tar.gz: b1137b4c476b9ffd3be89dfbd6499464c4d632bafcd19521639d8491d153390f30dceb4b47de8aaf2656a6444361d89ac1e28b202bddd2f217c442618f7a4496
|
@@ -2,6 +2,7 @@ module Jekyll
|
|
2
2
|
|
3
3
|
# internal requires for plugin
|
4
4
|
autoload :LanguageReader, 'jekyll/language_reader.rb'
|
5
|
+
autoload :LanguageProperties, 'jekyll/language_properties.rb'
|
5
6
|
autoload :LanguagePage, 'jekyll/language_page.rb'
|
6
7
|
autoload :LanguageDocument, 'jekyll/language_document.rb'
|
7
8
|
autoload :LanguagePageReader, 'jekyll/readers/language_page_reader.rb'
|
@@ -15,9 +16,27 @@ module Jekyll
|
|
15
16
|
autoload :LiquidContext, 'jekyll/language-plugin/liquid_context.rb'
|
16
17
|
autoload :DateLocalizer, 'jekyll/language-plugin/date_localizer.rb'
|
17
18
|
autoload :VERSION, 'jekyll/language-plugin/version'
|
19
|
+
|
20
|
+
module Loaders
|
21
|
+
autoload :BaseLoader, 'jekyll/language-plugin/loaders/base_loader.rb'
|
22
|
+
end
|
23
|
+
|
24
|
+
class << self
|
25
|
+
def loaders
|
26
|
+
@loaders ||= []
|
27
|
+
end
|
28
|
+
|
29
|
+
def register_loader(loader)
|
30
|
+
loaders.push(loader)
|
31
|
+
end
|
32
|
+
end
|
18
33
|
end
|
19
34
|
end
|
20
35
|
|
36
|
+
# require data built-in loaders
|
37
|
+
require 'jekyll/language-plugin/loaders/jekyll_data_loader.rb'
|
38
|
+
require 'jekyll/language-plugin/loaders/rails_i18n_loader.rb'
|
39
|
+
|
21
40
|
# require liquid tags and filters
|
22
41
|
Dir[File.join(File.dirname(__FILE__), 'jekyll/language-plugin/tags/*.rb')].each{ |f| require f }
|
23
42
|
require 'jekyll/language-plugin/filters/language_date.rb'
|
@@ -5,11 +5,13 @@ module Jekyll
|
|
5
5
|
language_data = Jekyll::LanguagePlugin::LiquidContext.get_language_data(context)
|
6
6
|
translation = language_data.get('date')
|
7
7
|
|
8
|
+
raise Jekyll::LanguagePlugin::PluginError.new('No localized date available.') if translation.nil?
|
9
|
+
|
8
10
|
# validate language translation
|
9
11
|
if !['abbr_daynames', 'daynames', 'abbr_monthnames', 'monthnames'].all? {|s| translation.key?(s) && translation[s].is_a?(Array) } ||
|
10
12
|
translation['abbr_daynames'].size < 7 || translation['daynames'].size < 7 ||
|
11
13
|
translation['abbr_monthnames'].size < 12 || translation['monthnames'].size < 12
|
12
|
-
raise Jekyll::LanguagePlugin::PluginError.new('
|
14
|
+
raise Jekyll::LanguagePlugin::PluginError.new('Invalid localized date translation.')
|
13
15
|
end
|
14
16
|
|
15
17
|
date.strftime(
|
@@ -1,57 +1,23 @@
|
|
1
1
|
module Jekyll
|
2
2
|
module LanguagePlugin
|
3
3
|
class LanguageData
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :language
|
5
5
|
|
6
6
|
def initialize(site, language)
|
7
|
-
@site = site
|
8
7
|
@language = language
|
8
|
+
@loaders = Jekyll::LanguagePlugin.loaders.map{ |l| l.new(site) }
|
9
9
|
end
|
10
10
|
|
11
|
-
def get(
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
def has?(keys)
|
18
|
-
!retrieve_obj(keys).nil?
|
19
|
-
end
|
20
|
-
|
21
|
-
def retrieve_obj(keys)
|
22
|
-
return nil if @language.to_s.empty?
|
23
|
-
keys = resolve_dot_notation([language_data, keys])
|
24
|
-
|
25
|
-
obj = site.send(keys.shift)
|
26
|
-
traverse_hash(obj, keys)
|
27
|
-
end
|
28
|
-
|
29
|
-
def language_data()
|
30
|
-
@language_data ||= site.config['language_data'].to_s || 'data.lang.%%'
|
31
|
-
@language_data.gsub("%%", @language)
|
32
|
-
end
|
33
|
-
|
34
|
-
def traverse_hash(hash, keys)
|
35
|
-
return nil if hash.nil?
|
36
|
-
|
37
|
-
for key in keys
|
38
|
-
if !hash.is_a?(Hash)
|
39
|
-
return hash
|
40
|
-
elsif !hash.key?(key)
|
41
|
-
return nil
|
42
|
-
end
|
43
|
-
hash = hash[key]
|
11
|
+
def get(key)
|
12
|
+
@loaders.inject(nil) do |result, loader|
|
13
|
+
loader.load unless loader.loaded?
|
14
|
+
result = loader.get(key, @language)
|
15
|
+
break result unless result.nil?
|
44
16
|
end
|
45
|
-
hash
|
46
17
|
end
|
47
18
|
|
48
|
-
def
|
49
|
-
|
50
|
-
return [] if !keys.is_a?(Enumerable)
|
51
|
-
|
52
|
-
keys.flat_map do |key|
|
53
|
-
resolve_dot_notation(key)
|
54
|
-
end
|
19
|
+
def has?(key)
|
20
|
+
!get(key).nil?
|
55
21
|
end
|
56
22
|
end
|
57
23
|
end
|
@@ -18,15 +18,12 @@ module Jekyll
|
|
18
18
|
def self.get_language_string(context, key)
|
19
19
|
language_data = self.get_language_data(context)
|
20
20
|
|
21
|
-
if language_data.nil?
|
22
|
-
$stdout.puts("language data is nil")
|
23
|
-
end
|
24
21
|
subset = context.registers[:page]['subset']
|
25
|
-
|
26
|
-
|
27
|
-
end
|
22
|
+
str = language_data.get([subset, key]) unless subset.to_s.empty?
|
23
|
+
str ||= language_data.get(key)
|
28
24
|
|
29
|
-
|
25
|
+
raise Jekyll::LanguagePlugin::PluginError.new('Key #{key} not found intranslation.') if str.nil?
|
26
|
+
str
|
30
27
|
end
|
31
28
|
|
32
29
|
def self.get_language_name(context, name)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module LanguagePlugin
|
3
|
+
module Loaders
|
4
|
+
class BaseLoader
|
5
|
+
attr_reader :site, :is_loaded
|
6
|
+
|
7
|
+
def initialize(site)
|
8
|
+
@site = site
|
9
|
+
@is_loaded = false
|
10
|
+
end
|
11
|
+
|
12
|
+
def loaded?
|
13
|
+
@is_loaded
|
14
|
+
end
|
15
|
+
|
16
|
+
def load
|
17
|
+
@is_loaded
|
18
|
+
end
|
19
|
+
|
20
|
+
def get(key, language)
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def traverse_hash(hash, keys)
|
25
|
+
for key in keys
|
26
|
+
if !hash.is_a?(Hash)
|
27
|
+
return hash
|
28
|
+
elsif !hash.key?(key)
|
29
|
+
return nil
|
30
|
+
end
|
31
|
+
hash = hash[key]
|
32
|
+
end
|
33
|
+
hash
|
34
|
+
end
|
35
|
+
|
36
|
+
def resolve_dot_notation(keys)
|
37
|
+
return keys.split('.') if keys.is_a?(String)
|
38
|
+
return [] if !keys.is_a?(Enumerable)
|
39
|
+
|
40
|
+
keys.flat_map do |key|
|
41
|
+
resolve_dot_notation(key)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module LanguagePlugin
|
3
|
+
module Loaders
|
4
|
+
class JekyllDataLoader < BaseLoader
|
5
|
+
def initialize(site)
|
6
|
+
super
|
7
|
+
@is_loaded = true
|
8
|
+
end
|
9
|
+
|
10
|
+
def get(key, language)
|
11
|
+
key = resolve_dot_notation(key)
|
12
|
+
|
13
|
+
data = get_language_data(language)
|
14
|
+
traverse_hash(data, key)
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_language_data(language)
|
18
|
+
@language_data ||= site.config['language_data'].to_s || 'data.lang.%%'
|
19
|
+
language_data_l = @language_data.gsub("%%", language)
|
20
|
+
|
21
|
+
key = resolve_dot_notation(language_data_l)
|
22
|
+
|
23
|
+
obj = site.send(key.shift)
|
24
|
+
obj = traverse_hash(obj, key)
|
25
|
+
raise Jekyll::LanguagePlugin::PluginError.new("Invalid language data configuration. Cannot retrieve data for language #{language} at #{language_data_l}") if obj.nil?
|
26
|
+
obj
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Jekyll::LanguagePlugin.register_loader(Jekyll::LanguagePlugin::Loaders::JekyllDataLoader)
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
module LanguagePlugin
|
6
|
+
module Loaders
|
7
|
+
class RailsI18nLoader < BaseLoader
|
8
|
+
@@data = nil
|
9
|
+
|
10
|
+
def load
|
11
|
+
if !@is_loaded
|
12
|
+
self.class.load_data if @@data.nil?
|
13
|
+
@is_loaded = true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def get(key, language)
|
18
|
+
return nil unless loaded?
|
19
|
+
traverse_hash(@@data, [language, key])
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.load_data
|
23
|
+
gem_root = Gem.loaded_specs['rails-i18n'].full_gem_path
|
24
|
+
files = Dir[File.join(gem_root, 'rails', '**', '*.yml')]
|
25
|
+
@@data = files.inject(Hash.new) do |data, file|
|
26
|
+
key = File.basename(file, '.yml')
|
27
|
+
source = YAML.load_file(file)
|
28
|
+
break data if !source.has_key?(key) || source[key]['date'].nil?
|
29
|
+
|
30
|
+
# extract date object
|
31
|
+
date = source[key]['date']
|
32
|
+
date.delete_if { |k, _| k !~ /\A(?:abbr_day_names|abbr_month_names|day_names|month_names)\z/ }
|
33
|
+
date = Hash[date.map { |k, v| [k.sub(/_names\Z/, 'names'), v] }]
|
34
|
+
date['abbr_monthnames'].shift
|
35
|
+
date['monthnames'].shift
|
36
|
+
|
37
|
+
data.merge!({
|
38
|
+
key => { 'date' => date }
|
39
|
+
})
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
begin
|
48
|
+
require 'rails-i18n'
|
49
|
+
Jekyll::LanguagePlugin.register_loader(Jekyll::LanguagePlugin::Loaders::RailsI18nLoader)
|
50
|
+
rescue LoadError
|
51
|
+
end
|
@@ -1,23 +1,10 @@
|
|
1
1
|
module Jekyll
|
2
2
|
class LanguageDocument < Document
|
3
|
+
include LanguageProperties
|
4
|
+
|
3
5
|
alias_method :url_template_orig, :url_template
|
4
6
|
alias_method :url_placeholders_orig, :url_placeholders
|
5
7
|
|
6
|
-
def language
|
7
|
-
return nil if data.nil? || data['language'].nil?
|
8
|
-
data['language']
|
9
|
-
end
|
10
|
-
|
11
|
-
def languages
|
12
|
-
return nil if data.nil? || data['languages'].nil?
|
13
|
-
data['languages']
|
14
|
-
end
|
15
|
-
|
16
|
-
def subset
|
17
|
-
return nil if data.nil? || data['subset'].nil?
|
18
|
-
data['subset']
|
19
|
-
end
|
20
|
-
|
21
8
|
def url_template
|
22
9
|
return "/:language" + url_template_orig if !language.nil?
|
23
10
|
url_template_orig
|
data/lib/jekyll/language_page.rb
CHANGED
@@ -1,23 +1,10 @@
|
|
1
1
|
module Jekyll
|
2
2
|
class LanguagePage < Page
|
3
|
+
include LanguageProperties
|
4
|
+
|
3
5
|
alias_method :template_orig, :template
|
4
6
|
alias_method :url_placeholders_orig, :url_placeholders
|
5
7
|
|
6
|
-
def language
|
7
|
-
return nil if data.nil? || data['language'].nil?
|
8
|
-
data['language']
|
9
|
-
end
|
10
|
-
|
11
|
-
def languages
|
12
|
-
return nil if data.nil? || data['languages'].nil?
|
13
|
-
data['languages']
|
14
|
-
end
|
15
|
-
|
16
|
-
def subset
|
17
|
-
return nil if data.nil? || data['subset'].nil?
|
18
|
-
data['subset']
|
19
|
-
end
|
20
|
-
|
21
8
|
def template
|
22
9
|
return "/:language" + template_orig if !language.nil?
|
23
10
|
template_orig
|
@@ -32,8 +19,12 @@ module Jekyll
|
|
32
19
|
if !language.nil? && !subset.nil?
|
33
20
|
@language_data ||= LanguagePlugin::LanguageData.new(@site, language)
|
34
21
|
|
35
|
-
data = @language_data.get(subset)
|
36
|
-
|
22
|
+
data = @language_data.get(subset)
|
23
|
+
|
24
|
+
if !data.nil?
|
25
|
+
filtered = data.reject{ |k, v| v.is_a?(Enumerable) }
|
26
|
+
result.merge!(Hash[filtered.map{ |k, v| ["t.#{k}", v] }])
|
27
|
+
end
|
37
28
|
end
|
38
29
|
|
39
30
|
result
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module LanguageProperties
|
3
|
+
def language
|
4
|
+
return nil if data.nil? || data['language'].nil?
|
5
|
+
data['language']
|
6
|
+
end
|
7
|
+
|
8
|
+
def languages
|
9
|
+
return nil if data.nil? || data['languages'].nil?
|
10
|
+
data['languages']
|
11
|
+
end
|
12
|
+
|
13
|
+
def subset
|
14
|
+
return nil if data.nil? || data['subset'].nil?
|
15
|
+
data['subset']
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-language-plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vincent Wochnik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -78,6 +78,9 @@ files:
|
|
78
78
|
- lib/jekyll/language-plugin/filters/language_date.rb
|
79
79
|
- lib/jekyll/language-plugin/language_data.rb
|
80
80
|
- lib/jekyll/language-plugin/liquid_context.rb
|
81
|
+
- lib/jekyll/language-plugin/loaders/base_loader.rb
|
82
|
+
- lib/jekyll/language-plugin/loaders/jekyll_data_loader.rb
|
83
|
+
- lib/jekyll/language-plugin/loaders/rails_i18n_loader.rb
|
81
84
|
- lib/jekyll/language-plugin/plugin_error.rb
|
82
85
|
- lib/jekyll/language-plugin/tags/language.rb
|
83
86
|
- lib/jekyll/language-plugin/tags/language_include.rb
|
@@ -85,6 +88,7 @@ files:
|
|
85
88
|
- lib/jekyll/language-plugin/version.rb
|
86
89
|
- lib/jekyll/language_document.rb
|
87
90
|
- lib/jekyll/language_page.rb
|
91
|
+
- lib/jekyll/language_properties.rb
|
88
92
|
- lib/jekyll/language_reader.rb
|
89
93
|
- lib/jekyll/readers/language_page_reader.rb
|
90
94
|
- lib/jekyll/readers/language_post_reader.rb
|