jekyll-multiple-languages 1.0.11 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- M2JlMGUzYmMwODk1NzkxZDlkNzY1M2Y3OGJmOTRhODI5ZGYwYTYxNg==
5
- data.tar.gz: !binary |-
6
- ZWNhMzk3MDZlN2Y0ZDk2NjE1ZjM3OWJkMmRlYzQyYWJiZTEzYWI3MA==
2
+ SHA1:
3
+ metadata.gz: 37014369977d7cae2b4ab030f140d34a36283703
4
+ data.tar.gz: d00fd1b80de40d57bd154b30631a17e8e2081b4b
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NTdhN2M5ODViOTdlZGU1Y2RiYTY5NmRkYzgxMTY0NDQ4ZmVkN2IwMjZhNDZl
10
- MmRlMTUxZDY1NjQ4NTg3NTcwYTM1YzQ5YzgxNThlMDA0MjdiYzdkNDI5ZTI2
11
- NWJmZTk1MDk5MzczMjIwY2Y1YmM4NTJhYzY2M2JkZjBhMzFmZTA=
12
- data.tar.gz: !binary |-
13
- ZDZiNDFlYTFjMTI5NGUyYTRkZDIwYzcxMjIxMTc4OGI3ZjRiYTFhNWQ4OTdm
14
- MmI3NWZkYmRmY2I1YmZlNjgwYTFiMjBmNGRjMWFlNjBhOWFlOTc1NDRkMTI3
15
- YjVhN2U4ZWM1MDk0ZTYzYTg5ZjU3YmNjNmMzYjAwZjhmZjNlZjU=
6
+ metadata.gz: 45743cc76873f8e3da56d5ecf46a9c5df647ef38d957a11f3865797ad3a7109373f7e10a7b315736efa74f801dfa89995f8960b402726c58726e8d32567a52f4
7
+ data.tar.gz: 296856ed323cecf234dc77598c1fb96c93578c0a2df5e078ad878485fe8b7b0b79af7a171a04f0c23742f3b7d96bb6583be97b96c63bf92a86a91de7d73f7685
@@ -1,278 +1,8 @@
1
- require "jekyll-multiple-languages/pager"
1
+ require "jekyll-multiple-languages/multilang"
2
+ require "jekyll-multiple-languages/site"
3
+ require "jekyll-multiple-languages/document"
4
+ require "jekyll-multiple-languages/page"
5
+
2
6
  require "jekyll-multiple-languages/pagination"
7
+ require "jekyll-multiple-languages/pager"
3
8
  require "jekyll-multiple-languages/tags"
4
- module Jekyll
5
- module MultiLang
6
- attr_accessor :language, :name_no_language, :is_default_language, :url_no_language, :dir_source, :next_in_language, :previous_in_language
7
-
8
- # rewirte initialize
9
- def process_initialize(site, base, dir, name)
10
- name_no_language = name.dup
11
-
12
- lang = ''
13
- # xxx.$lang.md / $lang.xxx.md
14
- site.config['languages'].each{ |item|
15
- lang_str = item + '.'
16
- if name_no_language.include? lang_str
17
- lang = item
18
- name_no_language.slice! lang_str
19
- end
20
- }
21
-
22
- !lang || lang == '' && lang = site.config['language_default']
23
- @language = lang
24
- @dir_source = dir
25
- @name_no_language = name_no_language
26
- @is_default_language = lang == site.config['language_default']
27
-
28
- initialize_org(site, base, dir, name)
29
- end
30
-
31
- def url_no_language
32
- if !@url_no_language
33
- process_url
34
- end
35
- @url_no_language
36
- end
37
-
38
- def next_in_language
39
- posts = site.posts_by_language[@language].values
40
- pos = posts.index { |post| post.equal?(self) }
41
- if pos && pos < posts.length - 1
42
- posts[pos + 1]
43
- else
44
- nil
45
- end
46
- end
47
-
48
- def previous_in_language
49
- posts = site.posts_by_language[@language].values
50
- pos = posts.index { |post| post.equal?(self) }
51
- if pos && pos > 0
52
- posts[pos - 1]
53
- else
54
- nil
55
- end
56
- end
57
-
58
- # rewirte url
59
- def process_url
60
- if !@url
61
- url = self.url_org
62
- @url_no_language = url
63
- lang_prefix = '/' + self.language
64
- if !self.is_default_language && (url && url.index(lang_prefix) != 0)
65
- url = lang_prefix + url
66
- end
67
- @url = url
68
- end
69
- @url
70
- end
71
-
72
- # rewirte to_liquid
73
- def process_to_liquid(attrs = nil)
74
- data_for_liquid = self.to_liquid_org(attrs)
75
- attrs_for_lang = self.language_attributes_for_liquid || []
76
- attrs_for_lang.concat(%w[language is_default_language url_no_language previous_in_language next_in_language])
77
- further_data = Hash[attrs_for_lang.map { |attribute|
78
- [attribute, send(attribute)]
79
- }]
80
- data_for_liquid = Utils.deep_merge_hashes(data_for_liquid, further_data)
81
- end
82
- end
83
-
84
- # Rewrite Jekyll.site
85
- #
86
- class Site
87
- attr_accessor :language_default, :languages, :posts_by_language, :pages_by_language, :fill_default_content
88
- alias :process_org :process
89
- def process
90
- self.begin_inject
91
- process_org
92
- rescue Exception => e
93
- print e.message, "\n"
94
- print e.backtrace.join("\n")
95
- end
96
-
97
- alias :read_org :read
98
- def read
99
- read_org
100
- group_posts_and_pages
101
- end
102
-
103
- # Group the post by the language
104
- #
105
- def group_posts_and_pages
106
- lang_default = self.language_default
107
- langs_remain = self.languages.dup
108
- langs_remain.delete(lang_default)
109
-
110
- @posts_by_language = {}
111
- @pages_by_language = {}
112
-
113
- self.languages.dup.each { |lang|
114
- @posts_by_language[lang] ||= {}
115
- @pages_by_language[lang] ||= {}
116
- }
117
-
118
- self.posts.each {|post|
119
- @posts_by_language[post.language][post.url_no_language] = post
120
- }
121
- self.pages.each {|page|
122
- @pages_by_language[page.language][page.url_no_language] = page
123
- }
124
-
125
- if (@fill_default_content)
126
- self.fill_default_content(@posts, @posts_by_language, lang_default, langs_remain, Post)
127
- self.fill_default_content(@pages, @pages_by_language, lang_default, langs_remain, Page)
128
- end
129
- end
130
-
131
- def fill_default_content(contents, grouped_contents, default, targets, kclass)
132
- grouped_contents[default].select{|k,v| !v.data['no_fill_default_content']}.each{ |k, content|
133
- targets.each{|lang|
134
- if !grouped_contents[lang][k]
135
- c = kclass.new(self, @source, content.dir_source, content.name)
136
- c.language = lang
137
- c.is_default_language = false
138
- grouped_contents[lang][k] = c
139
- contents << c
140
- end
141
- }
142
- }
143
- end
144
-
145
- # Only when site is initialized, this plugin will be loaded
146
- def begin_inject
147
- self.update_config(self.config)
148
- end
149
-
150
- # Public: Update site config, process languages and language_default options.
151
- #
152
- def update_config(config)
153
- !config['languages'] && config['languages'] = []
154
- !config['language_default'] && config['language_default'] = config['languages'].first;
155
- !config['i18ndir'] && config['i18ndir'] = "_i18n";
156
-
157
- %w[languages language_default fill_default_content].each do |opt|
158
- self.send("#{opt}=", config[opt])
159
- end
160
- end
161
-
162
- alias :site_payload_org :site_payload
163
- def site_payload
164
- original = site_payload_org
165
- payload = original['site']
166
- payload = payload.merge({
167
- 'posts_by_language' => self.posts_by_language,
168
- 'pages_by_language' => self.pages_by_language
169
- })
170
- original['site'] = payload
171
- original
172
- end
173
-
174
- end
175
-
176
- class Page
177
-
178
- include MultiLang
179
-
180
- LANGUAGE_ATTRIBUTES_FOR_LIQUID = %w[]
181
-
182
- alias :initialize_org :initialize
183
- def initialize(site, base, dir, name)
184
- process_initialize(site, base, dir, name)
185
- end
186
-
187
- alias :url_org :url
188
- def url
189
- if @language
190
- process_url
191
- else
192
- url_org
193
- end
194
- end
195
-
196
- alias :process_org :process
197
- def process(name)
198
- if @language
199
- process_org(@name_no_language)
200
- else
201
- process_org(name)
202
- end
203
- end
204
-
205
- alias :to_liquid_org :to_liquid
206
- def to_liquid(attrs = nil)
207
- if @language
208
- process_to_liquid(attrs)
209
- else
210
- to_liquid_org(attrs)
211
- end
212
- end
213
-
214
- def language_attributes_for_liquid
215
- LANGUAGE_ATTRIBUTES_FOR_LIQUID
216
- end
217
-
218
- def inspect
219
- "#<Jekyll:Page @name=#{self.name.inspect} @url=#{self.url.inspect}>"
220
- end
221
-
222
- end
223
-
224
- class Post
225
- include MultiLang
226
-
227
- MATCHER_WITH_LANG = /^(.+\/)*(?:.+\.)*(\d+-\d+-\d+)-(.*)(\.[^.]+)$/
228
-
229
- alias :initialize_org :initialize
230
- def initialize(site, source, dir, name)
231
- process_initialize(site, source, dir, name)
232
- end
233
-
234
- alias :url_org :url
235
- def url
236
- if @language
237
- process_url
238
- else
239
- url_org
240
- end
241
- end
242
-
243
- alias :process_org :process
244
- def process(name)
245
- if @language
246
- process_org(@name_no_language)
247
- else
248
- process_org(name)
249
- end
250
- end
251
-
252
- def inspect
253
- "<Post: id: #{self.id} url: #{self.url} language: #{self.language}>"
254
- end
255
-
256
- # For match /blog/$lang.2014-02-14-the-blog-name.md
257
- # or /blog/2014-02-14-the-blog-name.$lang.md
258
- #
259
- def self.valid?(name)
260
- name =~ MATCHER_WITH_LANG
261
- end
262
-
263
- def language_attributes_for_liquid
264
-
265
- end
266
-
267
- alias :to_liquid_org :to_liquid
268
- def to_liquid(attrs = nil)
269
- if @language
270
- process_to_liquid(attrs)
271
- else
272
- to_liquid_org(attrs)
273
- end
274
- end
275
-
276
- end
277
-
278
- end
@@ -0,0 +1,51 @@
1
+ # encoding: UTF-8
2
+ module Jekyll
3
+ class Document
4
+ include MultiLang
5
+
6
+ alias :initialize_org :initialize
7
+ def initialize(path, relations)
8
+ detect_language(relations[:site], path)
9
+ initialize_org(path, relations)
10
+ end
11
+
12
+ # remove `.$lang` from slug
13
+ alias :post_read_org :post_read
14
+ def post_read
15
+ post_read_org
16
+ if not @is_default_language and data and data['slug']
17
+ data['slug'] ['.' + @language] = ''
18
+ end
19
+ end
20
+
21
+ # remove `.$lang` from basename_without_ext
22
+ def basename_without_ext
23
+ if not @basename_without_ext
24
+ @basename_without_ext = File.basename(path, '.*')
25
+ if not @is_default_language
26
+ @basename_without_ext ['.' + @language] = ''
27
+ end
28
+ end
29
+ @basename_without_ext
30
+ end
31
+
32
+ # append `/$lang/ before path for non-default language document
33
+ alias :url_org :url
34
+ def url
35
+ rewrite_url(url_org)
36
+ end
37
+
38
+ def inspect
39
+ "<Post: id: #{self.id} url: #{self.url} language: #{self.language}>"
40
+ end
41
+
42
+ def language_attributes_for_liquid
43
+ end
44
+
45
+ alias :to_liquid_org :to_liquid
46
+ def to_liquid()
47
+ data = to_liquid_org
48
+ append_data_for_liquid(data)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,70 @@
1
+ # encoding: UTF-8
2
+ module Jekyll
3
+ module MultiLang
4
+ attr_accessor :language, :is_default_language, :url_no_language, :next_in_language, :previous_in_language
5
+
6
+ def detect_language(site, name)
7
+ name_no_language = name.dup
8
+
9
+ # detect language
10
+ # xxx.$lang.md / $lang.xxx.md
11
+ lang = nil
12
+ site.config['languages'].each{ |item|
13
+ lang_str = item + '.'
14
+ if name_no_language.include? lang_str
15
+ lang = item
16
+ name_no_language.slice! lang_str
17
+ end
18
+ }
19
+
20
+ lang ||= site.config['language_default']
21
+
22
+ @language = lang
23
+ @name_no_language = name_no_language
24
+ @is_default_language = lang == site.config['language_default']
25
+ end
26
+
27
+ def url_no_language
28
+ @url_no_language
29
+ end
30
+
31
+ def next_in_language
32
+ posts = site.posts_by_language[@language].values
33
+ pos = posts.index { |post| post.equal?(self) }
34
+ if pos && pos < posts.length - 1
35
+ posts[pos + 1]
36
+ else
37
+ nil
38
+ end
39
+ end
40
+
41
+ def previous_in_language
42
+ posts = site.posts_by_language[@language].values
43
+ pos = posts.index { |post| post.equal?(self) }
44
+ if pos && pos > 0
45
+ posts[pos - 1]
46
+ else
47
+ nil
48
+ end
49
+ end
50
+
51
+ # rewrite url
52
+ def rewrite_url(url)
53
+ @url_no_language = url
54
+ if not @is_default_language
55
+ url = '/' + language + url
56
+ end
57
+ url
58
+ end
59
+
60
+ def append_data_for_liquid(data_for_liquid)
61
+ attrs_for_lang = self.language_attributes_for_liquid || []
62
+ attrs_for_lang.concat(%w[language is_default_language url_no_language previous_in_language next_in_language])
63
+ further_data = Hash[attrs_for_lang.map { |attribute|
64
+ [attribute, send(attribute)]
65
+ }]
66
+ data_for_liquid = Utils.deep_merge_hashes(data_for_liquid, further_data)
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: UTF-8
2
+ module Jekyll
3
+ class Page
4
+ include MultiLang
5
+
6
+ attr_accessor :dir_org
7
+
8
+ alias :initialize_org :initialize
9
+ def initialize(site, base, dir, name)
10
+ detect_language(site, name)
11
+ @dir_org = dir
12
+ initialize_org(site, base, dir, name)
13
+ end
14
+
15
+ # remove `.$lang` for basename
16
+ alias :process_org :process
17
+ def process(name)
18
+ @ext = File.extname(name)
19
+ @basename = name[0 .. -ext.length - 1]
20
+ if not @is_default_language
21
+ @basename ['.' + @language] = ''
22
+ end
23
+ end
24
+
25
+ # append `/$lang/ before path for non-default language document
26
+ alias :url_org :url
27
+ def url
28
+ rewrite_url(url_org)
29
+ end
30
+
31
+ def language_attributes_for_liquid
32
+ end
33
+
34
+ alias :to_liquid_org :to_liquid
35
+ def to_liquid()
36
+ data = to_liquid_org
37
+ append_data_for_liquid(data)
38
+ end
39
+ end
40
+ end
@@ -6,6 +6,7 @@ module Jekyll
6
6
  # => /$lang/... /...
7
7
  #
8
8
  class Pagination < Generator
9
+
9
10
  def generate(site)
10
11
  if Pager.pagination_enabled?(site)
11
12
  pages = find_template_pages(site)
@@ -26,7 +27,7 @@ module Jekyll
26
27
  (1..pages).each do |num_page|
27
28
  pager = Pager.new(site, the_template_page, num_page, all_posts, pages)
28
29
  if num_page > 1
29
- newpage = Page.new(site, site.source, the_template_page.dir_source, the_template_page.name)
30
+ newpage = Page.new(site, site.source, the_template_page.dir_org, the_template_page.name)
30
31
  newpage.pager = pager
31
32
  newpage.dir = Pager.calc_paginate_path(site, the_template_page, num_page)
32
33
  site.pages << newpage
@@ -0,0 +1,99 @@
1
+ # encoding: UTF-8
2
+ module Jekyll
3
+ # Rewrite Jekyll.site
4
+ #
5
+ class Site
6
+ attr_accessor :language_default, :languages, :posts_by_language, :pages_by_language, :fill_default_content
7
+
8
+ alias :process_org :process
9
+ def process
10
+ self.begin_inject
11
+ process_org
12
+ rescue Exception => e
13
+ print e.message, "\n"
14
+ print e.backtrace.join("\n")
15
+ end
16
+
17
+ alias :read_org :read
18
+ def read
19
+ read_org
20
+ group_posts_and_pages
21
+ end
22
+
23
+ # Group the post by the language
24
+ #
25
+ def group_posts_and_pages
26
+ lang_default = self.language_default
27
+ langs_remain = self.languages.dup
28
+ langs_remain.delete(lang_default)
29
+
30
+ @posts_by_language = {}
31
+ @pages_by_language = {}
32
+
33
+ self.languages.dup.each { |lang|
34
+ @posts_by_language[lang] ||= {}
35
+ @pages_by_language[lang] ||= {}
36
+ }
37
+
38
+ self.posts.docs.each {|post|
39
+ @posts_by_language[post.language][post.url_no_language] = post
40
+ }
41
+ self.pages.each {|page|
42
+ # @pages_by_language[page.language][page.url_no_language] = page
43
+ }
44
+
45
+ if (@fill_default_content)
46
+ self.fill_default_content(@posts, @posts_by_language, lang_default, langs_remain, Post)
47
+ self.fill_default_content(@pages, @pages_by_language, lang_default, langs_remain, Page)
48
+ end
49
+ end
50
+
51
+ def fill_default_content(contents, grouped_contents, default, targets, kclass)
52
+ grouped_contents[default].select{|k,v| !v.data['no_fill_default_content']}.each{ |k, content|
53
+ targets.each{|lang|
54
+ if !grouped_contents[lang][k]
55
+ c = kclass.new(self, @source, content.dir_source, content.name)
56
+ c.language = lang
57
+ c.is_default_language = false
58
+ grouped_contents[lang][k] = c
59
+ contents << c
60
+ end
61
+ }
62
+ }
63
+ end
64
+
65
+ # Only when site is initialized, this plugin will be loaded
66
+ def begin_inject
67
+ self.update_config(self.config)
68
+ end
69
+
70
+ # Update config, process languages and language_default options.
71
+ #
72
+ def update_config(config)
73
+
74
+ config['languages'] ||= []
75
+ config['language_default'] ||= config['languages'].first;
76
+
77
+ # set the default value of `i18ndir` to `_i18n`
78
+ config['i18ndir'] ||= "_i18n";
79
+
80
+ %w[languages language_default fill_default_content].each do |opt|
81
+ self.send("#{opt}=", config[opt])
82
+ end
83
+ end
84
+
85
+ # add `posts_by_language` and `pages_by_language`
86
+ alias :site_payload_org :site_payload
87
+ def site_payload
88
+ original = site_payload_org
89
+ payload = original['site']
90
+ payload = payload.merge({
91
+ 'posts_by_language' => self.posts_by_language,
92
+ 'pages_by_language' => self.pages_by_language
93
+ })
94
+ original['site'] = payload
95
+ original
96
+ end
97
+
98
+ end
99
+ end
@@ -1,7 +1,8 @@
1
+ # encoding: UTF-8
1
2
  module Jekyll
2
3
  @translations={}
3
4
  def self.translations
4
- @translations
5
+ @translations
5
6
  end
6
7
 
7
8
  class LocalizeTag < Liquid::Tag
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-multiple-languages
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - srain
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-03 00:00:00.000000000 Z
12
+ date: 2015-12-24 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ''
15
15
  email: srain@php.net
@@ -18,8 +18,12 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/jekyll-multiple-languages.rb
21
+ - lib/jekyll-multiple-languages/document.rb
22
+ - lib/jekyll-multiple-languages/multilang.rb
23
+ - lib/jekyll-multiple-languages/page.rb
21
24
  - lib/jekyll-multiple-languages/pager.rb
22
25
  - lib/jekyll-multiple-languages/pagination.rb
26
+ - lib/jekyll-multiple-languages/site.rb
23
27
  - lib/jekyll-multiple-languages/tags.rb
24
28
  homepage: http://jekyll-langs.liaohuqiu.net/
25
29
  licenses:
@@ -31,17 +35,17 @@ require_paths:
31
35
  - lib
32
36
  required_ruby_version: !ruby/object:Gem::Requirement
33
37
  requirements:
34
- - - ! '>='
38
+ - - ">="
35
39
  - !ruby/object:Gem::Version
36
40
  version: '0'
37
41
  required_rubygems_version: !ruby/object:Gem::Requirement
38
42
  requirements:
39
- - - ! '>='
43
+ - - ">="
40
44
  - !ruby/object:Gem::Version
41
45
  version: '0'
42
46
  requirements: []
43
47
  rubyforge_project:
44
- rubygems_version: 2.4.3
48
+ rubygems_version: 2.4.8
45
49
  signing_key:
46
50
  specification_version: 4
47
51
  summary: Another Multiple Languages Plugin for Jekyll!