jekyll-multiple-languages 1.0.11 → 2.0.1

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 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!