jekyll-locale 0.2.0 → 0.3.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/README.md +132 -23
- data/lib/jekyll/locale/auto_page.rb +26 -0
- data/lib/jekyll/locale/document.rb +24 -0
- data/lib/jekyll/locale/generator.rb +24 -0
- data/lib/jekyll/locale/handler.rb +73 -10
- data/lib/jekyll/locale/mixins/helper.rb +46 -0
- data/lib/jekyll/locale/mixins/support.rb +25 -0
- data/lib/jekyll/locale/page.rb +10 -29
- data/lib/jekyll/locale/version.rb +1 -1
- data/lib/jekyll-locale.rb +23 -30
- metadata +7 -3
- data/lib/jekyll/locale/page_generator.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4e9bb6b38af90f2abe329414e61479a0afb06bb
|
4
|
+
data.tar.gz: 531866e46d63671cafc32c233f64ec263bfb3744
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c817b57303dd42dca2f76aa8f7bc7e5349c63879afbb2382268ecc91da1fe199f0135fd0d468d2d35a769a29a7dd6c8bb2eb77eb8383a5fd4b1467fac670f789
|
7
|
+
data.tar.gz: bb6c4a7712ce0d12e130231179b49a813f4e7fdd37ceff9d298f6d5799330b9f35549c0cd2c856562148b19a2a32f0f50fe665c775cd06b90786f4e0cbeef60e
|
data/README.md
CHANGED
@@ -5,28 +5,94 @@ A localization plugin for Jekyll.
|
|
5
5
|
|
6
6
|
## Features
|
7
7
|
|
8
|
-
* Exposes a `{{ locale }}` object for your Liquid templates
|
9
|
-
|
8
|
+
* Exposes a `{{ locale }}` object for your Liquid templates that can be used to "translate" strings in your site easily.
|
9
|
+
* Depending on configured `mode`, the plugin either generates a *copy* of every page that renders into a HTML file, and
|
10
|
+
every document set to be written, and renders them into dedicated urls prepended by a supported locale, or, the plugin
|
11
|
+
"processes" only those files placed inside the plugin's configured **`content_dir`** .
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
13
|
+
|
14
|
+
## Configuration
|
15
|
+
|
16
|
+
The plugin has been *preconfigured* with the following:
|
17
|
+
|
18
|
+
```yaml
|
19
|
+
localization:
|
20
|
+
mode : manual # Sets the 'handler mode'
|
21
|
+
locale : en-US # Sets the 'default locale' for the site
|
22
|
+
data_dir : locales # Sets the base location for *translation data*, within your *site's `data_dir`*.
|
23
|
+
content_dir: _locales # Sets the base location for placing files to be re-rendered. Ignored in "auto mode".
|
24
|
+
locales_set: [] # A list of locales the site will re-render files into
|
25
|
+
exclude_set: [] # A list of file paths the site will not re-render in "auto" mode.
|
26
|
+
```
|
27
|
+
|
28
|
+
### `data_dir`
|
29
|
+
|
30
|
+
This setting defines the base location for *the translation data*, within your site's configured `data_dir`. The value
|
31
|
+
defaults to `"locales"`. This implies that the plugin looks for "translation data" in either `_data/locales/` or a data
|
32
|
+
file named `locales`. e.g. `_data/locales.yml` or `_data/locales.json`, etc.
|
33
|
+
|
34
|
+
Irrespective of the format, the data should be a Hash table / dictionary of key-value pairs where the main key should
|
35
|
+
correspond to locale defined in the `locales_set` array or the default locale `en-US`, and the subkeys set to string
|
36
|
+
values.
|
37
|
+
|
38
|
+
### `content_dir`
|
39
|
+
|
40
|
+
Ignored in "auto mode", this setting defines the base location for placing "the physical copies" of the canonical pages
|
41
|
+
and documents. Refer `mode` sub-section below for further details.
|
42
|
+
|
43
|
+
The default setting is `_locales`
|
44
|
+
|
45
|
+
### `locales_set`
|
46
|
+
|
47
|
+
Empty by default, this setting defines what locales to be used when "localizing" a site. Listing a locale (other than
|
48
|
+
the default locale) will cause the entire site to render for that locale and the default locale while in "auto mode".
|
49
|
+
|
50
|
+
### `locale`
|
51
|
+
|
52
|
+
Set to `en-US` by default, this setting defines the default locale of the site and will not be prepended to the URL of
|
53
|
+
the generated files.
|
54
|
+
|
55
|
+
### `exclude_set`
|
56
|
+
|
57
|
+
Empty by default, this setting defines what files to be *excluded* from being duplicated and re-rendered in the "auto"
|
58
|
+
mode. Ignored in "manual" mode.
|
59
|
+
|
60
|
+
### `mode`
|
61
|
+
|
62
|
+
This setting defines the plugin's operation strategy.
|
63
|
+
|
64
|
+
When set to **`auto`**, the plugin will initialize a generator that will simply duplicate *every page and document set
|
65
|
+
to be written to destination*, and re-render them into destination, for every locale listed in the `locales_set:`
|
66
|
+
array.
|
67
|
+
|
68
|
+
This mode will increase your build times in proportion to the total number pages, writable-documents and locales listed
|
69
|
+
but will result in simply the same canonical output and the canonical url prepended with an iterated locale.
|
70
|
+
|
71
|
+
For example, if one were to configure the plugin with `locales_set: ["de", "fr", "en-US", "es"]`, then a file named
|
72
|
+
`about.md` will result in the following files:
|
73
|
+
* `_site/about.html`
|
74
|
+
* `_site/de/about.html`
|
75
|
+
* `_site/es/about.html`
|
76
|
+
* `_site/fr/about.html`
|
77
|
+
|
78
|
+
Setting `mode` to any other value will automatically default to `"manual"` which **requires** you to create physical
|
79
|
+
files in a special directory (as configured under `localization["content_dir"]`) to render localized copies. The
|
80
|
+
salient features of this mode are:
|
81
|
+
* The physical files are handled like any other file in the site, but, they **should partially mirror** their
|
82
|
+
counterpart — **their relative_paths should match**. Additionally, if an original file contains front matter,
|
83
|
+
the physical copy should contain front matter as well.
|
84
|
+
* The physical files should reside inside sub-folders that match the desired locale. For example, to "localize" a post
|
85
|
+
at path `movies/_posts/2018-09-24-hello.markdown` with locale `fr`, you should create the physical copy at path
|
86
|
+
`_locales/fr/movies/_posts/2018-09-24-hello.markdown`.
|
87
|
+
* Physical copies can render different content and into a different layout, if desired.
|
88
|
+
* Physical copies of posts and other writable *documents* can be rendered to a different `slug` by defining the `slug`
|
89
|
+
key in the front matter.
|
26
90
|
|
27
91
|
|
28
92
|
## Usage
|
29
93
|
|
94
|
+
### Auto Mode
|
95
|
+
|
30
96
|
1. Add plugin to the `:jekyll_plugins` group in your Gemfile:
|
31
97
|
|
32
98
|
```ruby
|
@@ -37,22 +103,27 @@ A localization plugin for Jekyll.
|
|
37
103
|
|
38
104
|
2. Decide what the default locale for your site is going to be, what other locales need to be rendered, and where you'd
|
39
105
|
place the translation data files. Then edit your config file to override the default plugin configuration, as required.
|
40
|
-
(See above section for default settings). For example, to render the site with data for just the custom `fr`
|
106
|
+
(See above section for default settings). For example, to render the entire site with data for just the custom `fr`
|
107
|
+
locale:
|
41
108
|
|
42
109
|
```yaml
|
43
110
|
# _config.yml
|
44
111
|
|
45
112
|
author: John Doe
|
46
|
-
|
113
|
+
localization:
|
114
|
+
mode: auto
|
115
|
+
locale: fr
|
47
116
|
```
|
48
117
|
|
49
|
-
But if you'd like the site to be rendered using both the default `en` and custom `fr` locales, then
|
118
|
+
But if you'd like the entire site to be rendered using both the default `en-US` and custom `fr` locales, then
|
50
119
|
|
51
120
|
```yaml
|
52
121
|
# _config.yml
|
53
122
|
|
54
123
|
author: John Doe
|
55
|
-
|
124
|
+
localization:
|
125
|
+
mode: auto
|
126
|
+
locales_set: ["fr"] # or ["fr", "en-US"] if you want
|
56
127
|
```
|
57
128
|
|
58
129
|
3. Prepare your locale data file(s) with appropriate key-value pairs. For example,
|
@@ -90,6 +161,44 @@ A localization plugin for Jekyll.
|
|
90
161
|
<html lang="{{ page.locale }}">
|
91
162
|
```
|
92
163
|
|
164
|
+
### Manual Mode
|
165
|
+
|
166
|
+
Similar to the *auto mode*, but requires the user to provide physical files in the configured `content_dir` with
|
167
|
+
sub-directories that match the defined locales.
|
168
|
+
|
169
|
+
For example, the following directory structure
|
170
|
+
|
171
|
+
```
|
172
|
+
.
|
173
|
+
├── _config.yml
|
174
|
+
├── _locales
|
175
|
+
| ├── es
|
176
|
+
| | ├── tips/
|
177
|
+
| | | └── optimized-site.md
|
178
|
+
| | ├── _posts/
|
179
|
+
| | ├──└── 2018-09-30-hello-world.md
|
180
|
+
| ├── fr
|
181
|
+
| | ├── _posts/
|
182
|
+
| └──└──└── 2018-09-30-hello-world.md
|
183
|
+
├── _posts
|
184
|
+
| └── 2018-09-30-hello-world.md
|
185
|
+
├── english
|
186
|
+
| └── its-a-new-day.md
|
187
|
+
├── tips
|
188
|
+
| ├── optimized-site.md
|
189
|
+
└──└── url-filters-in-templates.md
|
190
|
+
```
|
191
|
+
will result in the generation of just the following files:
|
192
|
+
|
193
|
+
```
|
194
|
+
_site/2018-09-30-hello-world.html
|
195
|
+
_site/english/its-a-new-day.html
|
196
|
+
_site/es/2018-09-30-hello-world.html
|
197
|
+
_site/es/tips/optimized-site.html
|
198
|
+
_site/fr/2018-09-30-hello-world.html
|
199
|
+
_site/tips/optimized-site.html
|
200
|
+
_site/tips/url-filters-in-templates.html
|
201
|
+
```
|
93
202
|
|
94
203
|
## Advanced Usage
|
95
204
|
|
@@ -105,11 +214,11 @@ pages are related to each other:
|
|
105
214
|
{% endfor %}
|
106
215
|
```
|
107
216
|
|
108
|
-
For example, `about.md` page with `permalink: /about/` in a site setup to render for locales `["en", "es", "fr"]`
|
217
|
+
For example, `about.md` page with `permalink: /about/` in a site setup to render for locales `["en-US", "es", "fr"]`
|
109
218
|
and hosted at `http://example.com` will render with the following:
|
110
219
|
|
111
220
|
```html
|
112
|
-
<link rel="canonical" hreflang="en" href="http://example.com/about/" />
|
221
|
+
<link rel="canonical" hreflang="en-US" href="http://example.com/about/" />
|
113
222
|
<link rel="alternate" hreflang="es" href="http://example.com/es/about/" />
|
114
223
|
<link rel="alternate" hreflang="fr" href="http://example.com/fr/about/" />
|
115
224
|
```
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
class Locale::AutoPage < Page
|
5
|
+
extend Forwardable
|
6
|
+
include Locale::Helper
|
7
|
+
|
8
|
+
attr_accessor :data, :content, :output
|
9
|
+
def_delegators :@canon, :site, :extname, :relative_path
|
10
|
+
|
11
|
+
def initialize(canon, locale)
|
12
|
+
setup(canon, locale)
|
13
|
+
@path = canon.path
|
14
|
+
@content = canon.content
|
15
|
+
@data = canon.data
|
16
|
+
end
|
17
|
+
|
18
|
+
def url
|
19
|
+
@url ||= File.join("", locale, canon.url)
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_liquid
|
23
|
+
@to_liquid ||= Locale::PageDrop.new(self)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
class Locale::Document < Document
|
5
|
+
include Locale::Helper
|
6
|
+
|
7
|
+
def initialize(canon, locale)
|
8
|
+
setup(canon, locale)
|
9
|
+
@collection = canon.collection
|
10
|
+
@extname = File.extname(relative_path)
|
11
|
+
@has_yaml_header = nil
|
12
|
+
read
|
13
|
+
|
14
|
+
special_dir = draft? ? "_drafts" : @collection.relative_directory
|
15
|
+
categories_from_path(special_dir)
|
16
|
+
|
17
|
+
configure_data
|
18
|
+
end
|
19
|
+
|
20
|
+
def url_template
|
21
|
+
@url_template ||= File.join("", locale, super)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
class Locale::Generator < Generator
|
5
|
+
safe true
|
6
|
+
priority :lowest
|
7
|
+
|
8
|
+
def generate(site)
|
9
|
+
@site = site
|
10
|
+
handler = site.locale_handler
|
11
|
+
return if handler.available_locales.empty?
|
12
|
+
|
13
|
+
handler.available_locales.each do |locale|
|
14
|
+
handler.filtered_portfolio.each do |canon_doc|
|
15
|
+
handler.append_document(Locale::AutoPage, canon_doc, locale, site.pages)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def inspect
|
21
|
+
"#<#{self.class} @site=#{@site}>"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -4,9 +4,23 @@ module Jekyll
|
|
4
4
|
class Locale::Handler
|
5
5
|
attr_writer :current_locale
|
6
6
|
|
7
|
+
DEFAULT_CONFIG = {
|
8
|
+
"mode" => "manual",
|
9
|
+
"locale" => "en-US",
|
10
|
+
"data_dir" => "locales",
|
11
|
+
"content_dir" => "_locales",
|
12
|
+
"locales_set" => [],
|
13
|
+
"exclude_set" => [],
|
14
|
+
}.freeze
|
15
|
+
|
7
16
|
def initialize(site)
|
8
17
|
@site = site
|
9
|
-
|
18
|
+
config = site.config["localization"]
|
19
|
+
@config = if config.is_a?(Hash)
|
20
|
+
Jekyll::Utils.deep_merge_hashes(DEFAULT_CONFIG, config)
|
21
|
+
else
|
22
|
+
DEFAULT_CONFIG
|
23
|
+
end
|
10
24
|
end
|
11
25
|
|
12
26
|
def reset
|
@@ -15,16 +29,47 @@ module Jekyll
|
|
15
29
|
end
|
16
30
|
|
17
31
|
def data
|
18
|
-
locale_data[current_locale] || locale_data[default_locale]
|
32
|
+
locale_data[current_locale] || locale_data[default_locale] || {}
|
19
33
|
end
|
20
34
|
|
21
35
|
def portfolio
|
22
36
|
@portfolio ||= (site.docs_to_write + html_pages)
|
23
37
|
end
|
24
38
|
|
39
|
+
def filtered_portfolio
|
40
|
+
@filtered_portfolio ||= begin
|
41
|
+
portfolio.reject do |item|
|
42
|
+
item.relative_path =~ exclusion_regex
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def read
|
48
|
+
available_locales.each do |locale|
|
49
|
+
portfolio.each do |canon_doc|
|
50
|
+
loc_page_path = site.in_source_dir(content_dirname, locale, canon_doc.relative_path)
|
51
|
+
next unless File.exist?(loc_page_path)
|
52
|
+
next unless Jekyll::Utils.has_yaml_header?(loc_page_path)
|
53
|
+
|
54
|
+
case canon_doc
|
55
|
+
when Jekyll::Page
|
56
|
+
append_document(Locale::Page, canon_doc, locale, site.pages)
|
57
|
+
when Jekyll::Document
|
58
|
+
append_document(Locale::Document, canon_doc, locale, site.docs_to_write)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def append_document(klass, canon_doc, locale, base_array)
|
65
|
+
locale_page = klass.new(canon_doc, locale)
|
66
|
+
canon_doc.locale_pages << locale_page
|
67
|
+
base_array << locale_page
|
68
|
+
end
|
69
|
+
|
25
70
|
def available_locales
|
26
71
|
@available_locales ||= begin
|
27
|
-
locales = Array(config["
|
72
|
+
locales = Array(config["locales_set"]) - [default_locale]
|
28
73
|
locales.compact!
|
29
74
|
locales
|
30
75
|
end
|
@@ -35,9 +80,17 @@ module Jekyll
|
|
35
80
|
end
|
36
81
|
|
37
82
|
def default_locale
|
38
|
-
@default_locale ||=
|
39
|
-
|
40
|
-
|
83
|
+
@default_locale ||= fetch("locale")
|
84
|
+
end
|
85
|
+
|
86
|
+
def content_dirname
|
87
|
+
@content_dirname ||= fetch("content_dir")
|
88
|
+
end
|
89
|
+
|
90
|
+
def mode
|
91
|
+
@mode ||= begin
|
92
|
+
value = config["mode"]
|
93
|
+
value == "auto" ? value : DEFAULT_CONFIG["mode"]
|
41
94
|
end
|
42
95
|
end
|
43
96
|
|
@@ -57,10 +110,7 @@ module Jekyll
|
|
57
110
|
end
|
58
111
|
|
59
112
|
def locales_dir
|
60
|
-
@locales_dir ||=
|
61
|
-
value = config["locales_dir"]
|
62
|
-
value.to_s.empty? ? "locales" : value
|
63
|
-
end
|
113
|
+
@locales_dir ||= fetch("data_dir")
|
64
114
|
end
|
65
115
|
|
66
116
|
def locale_data
|
@@ -72,5 +122,18 @@ module Jekyll
|
|
72
122
|
Jekyll::Utils.snake_case_keys(ldata)
|
73
123
|
end
|
74
124
|
end
|
125
|
+
|
126
|
+
def fetch(key)
|
127
|
+
value = config[key]
|
128
|
+
default = DEFAULT_CONFIG[key]
|
129
|
+
return default unless value.class == default.class
|
130
|
+
return default if value.to_s.empty?
|
131
|
+
|
132
|
+
value
|
133
|
+
end
|
134
|
+
|
135
|
+
def exclusion_regex
|
136
|
+
@exclusion_regex ||= Regexp.new("\\A(?:#{Regexp.union(Array(config["exclude_set"]))})")
|
137
|
+
end
|
75
138
|
end
|
76
139
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module Locale::Helper
|
5
|
+
attr_reader :canon, :relative_path
|
6
|
+
|
7
|
+
def setup_hreflangs?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup_hreflangs
|
12
|
+
@hreflangs = (canon.locale_pages + [canon] - [self]).map do |locale_page|
|
13
|
+
{
|
14
|
+
"locale" => locale_page.locale || site.locale_handler.default_locale,
|
15
|
+
"relation" => locale_page.locale ? "alternate" : "canonical",
|
16
|
+
"url" => locale_page.url,
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def permalink
|
22
|
+
canon_link = super
|
23
|
+
File.join(locale, canon_link) if canon_link
|
24
|
+
end
|
25
|
+
|
26
|
+
def inspect
|
27
|
+
"#<#{self.class} @canon=#{canon.inspect} @locale=#{locale.inspect}>"
|
28
|
+
end
|
29
|
+
alias_method :to_s, :inspect
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def setup(canon, locale)
|
34
|
+
@locale = locale
|
35
|
+
@canon = canon
|
36
|
+
@site = canon.site
|
37
|
+
@extname = canon.extname
|
38
|
+
@relative_path = canon.relative_path
|
39
|
+
@path = site.in_source_dir(site.locale_handler.content_dirname, locale, relative_path)
|
40
|
+
end
|
41
|
+
|
42
|
+
def configure_data
|
43
|
+
Jekyll::Utils.deep_merge_hashes(canon.data, @data)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module Locale::Support
|
5
|
+
attr_reader :locale
|
6
|
+
|
7
|
+
def setup_hreflangs?
|
8
|
+
false
|
9
|
+
end
|
10
|
+
|
11
|
+
def hreflangs
|
12
|
+
@hreflangs ||= locale_pages.map do |locale_page|
|
13
|
+
{
|
14
|
+
"locale" => locale_page.locale,
|
15
|
+
"relation" => "alternate",
|
16
|
+
"url" => locale_page.url,
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def locale_pages
|
22
|
+
@locale_pages ||= []
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/jekyll/locale/page.rb
CHANGED
@@ -2,39 +2,20 @@
|
|
2
2
|
|
3
3
|
module Jekyll
|
4
4
|
class Locale::Page < Page
|
5
|
-
|
6
|
-
|
7
|
-
attr_reader :canon, :locale
|
8
|
-
attr_accessor :data, :content, :output
|
9
|
-
|
10
|
-
def_delegators :@canon, :site, :extname, :relative_path
|
5
|
+
include Locale::Helper
|
11
6
|
|
12
7
|
def initialize(canon, locale)
|
13
|
-
|
14
|
-
@
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@
|
19
|
-
|
20
|
-
|
21
|
-
def to_liquid
|
22
|
-
@to_liquid ||= Locale::PageDrop.new(self)
|
23
|
-
end
|
24
|
-
|
25
|
-
def setup_hreflangs
|
26
|
-
@hreflangs = (canon.locale_pages + [canon] - [self]).map do |locale_page|
|
27
|
-
{
|
28
|
-
"locale" => locale_page.locale || site.locale_handler.default_locale,
|
29
|
-
"relation" => locale_page.locale ? "alternate" : "canonical",
|
30
|
-
"url" => locale_page.url,
|
31
|
-
}
|
32
|
-
end
|
8
|
+
setup(canon, locale)
|
9
|
+
@dir, @name = File.split(relative_path)
|
10
|
+
@dir = "" if @dir == "."
|
11
|
+
@base = site.source
|
12
|
+
process(@name)
|
13
|
+
read_yaml(@dir, @name)
|
14
|
+
configure_data
|
33
15
|
end
|
34
16
|
|
35
|
-
def
|
36
|
-
|
17
|
+
def template
|
18
|
+
@template ||= File.join("", locale, super)
|
37
19
|
end
|
38
|
-
alias_method :to_s, :inspect
|
39
20
|
end
|
40
21
|
end
|
data/lib/jekyll-locale.rb
CHANGED
@@ -2,47 +2,40 @@
|
|
2
2
|
|
3
3
|
module Jekyll
|
4
4
|
module Locale
|
5
|
-
autoload :Drop,
|
6
|
-
autoload :
|
7
|
-
autoload :
|
5
|
+
autoload :Drop, "jekyll/locale/drop"
|
6
|
+
autoload :Document, "jekyll/locale/document"
|
7
|
+
autoload :AutoPage, "jekyll/locale/auto_page"
|
8
|
+
autoload :Page, "jekyll/locale/page"
|
9
|
+
autoload :Handler, "jekyll/locale/handler"
|
8
10
|
end
|
9
|
-
|
10
|
-
#
|
11
|
-
|
12
|
-
module LocaleSupport
|
13
|
-
attr_reader :locale
|
14
|
-
|
15
|
-
def hreflangs
|
16
|
-
@hreflangs ||= locale_pages.map do |locale_page|
|
17
|
-
{
|
18
|
-
"locale" => locale_page.locale,
|
19
|
-
"relation" => "alternate",
|
20
|
-
"url" => locale_page.url,
|
21
|
-
}
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def locale_pages
|
26
|
-
@locale_pages ||= []
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Enhance Jekyll::Page and Jekyll::Document classes
|
31
|
-
[Page, Document].each { |klass| klass.include LocaleSupport }
|
32
11
|
end
|
33
12
|
|
34
|
-
require_relative "jekyll/locale/page_generator"
|
35
|
-
|
36
13
|
require_relative "jekyll/patches/site"
|
37
14
|
require_relative "jekyll/patches/utils"
|
38
15
|
|
16
|
+
require_relative "jekyll/locale/mixins/support"
|
17
|
+
require_relative "jekyll/locale/mixins/helper"
|
18
|
+
|
19
|
+
# Enhance Jekyll::Page and Jekyll::Document classes
|
20
|
+
[Jekyll::Page, Jekyll::Document].each do |klass|
|
21
|
+
klass.include Jekyll::Locale::Support
|
22
|
+
end
|
23
|
+
|
24
|
+
# Load Locale::Generator if requested
|
39
25
|
Jekyll::Hooks.register :site, :after_reset do |site|
|
40
|
-
site.locale_handler
|
26
|
+
handler = site.locale_handler
|
27
|
+
handler.reset
|
28
|
+
require_relative "jekyll/locale/generator" if handler.mode == "auto"
|
29
|
+
end
|
30
|
+
|
31
|
+
Jekyll::Hooks.register :site, :post_read do |site|
|
32
|
+
handler = site.locale_handler
|
33
|
+
handler.read unless handler.mode == "auto"
|
41
34
|
end
|
42
35
|
|
43
36
|
Jekyll::Hooks.register [:pages, :documents], :pre_render do |document, payload|
|
44
37
|
handler = document.site.locale_handler
|
45
38
|
handler.current_locale = document.locale
|
46
|
-
document.setup_hreflangs if document.
|
39
|
+
document.setup_hreflangs if document.setup_hreflangs?
|
47
40
|
payload["page"]["hreflangs"] = document.hreflangs
|
48
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-locale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ashwin Maroli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -34,10 +34,14 @@ files:
|
|
34
34
|
- LICENSE.txt
|
35
35
|
- README.md
|
36
36
|
- lib/jekyll-locale.rb
|
37
|
+
- lib/jekyll/locale/auto_page.rb
|
38
|
+
- lib/jekyll/locale/document.rb
|
37
39
|
- lib/jekyll/locale/drop.rb
|
40
|
+
- lib/jekyll/locale/generator.rb
|
38
41
|
- lib/jekyll/locale/handler.rb
|
42
|
+
- lib/jekyll/locale/mixins/helper.rb
|
43
|
+
- lib/jekyll/locale/mixins/support.rb
|
39
44
|
- lib/jekyll/locale/page.rb
|
40
|
-
- lib/jekyll/locale/page_generator.rb
|
41
45
|
- lib/jekyll/locale/version.rb
|
42
46
|
- lib/jekyll/patches/site.rb
|
43
47
|
- lib/jekyll/patches/utils.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Jekyll
|
4
|
-
class Locale::PageGenerator < Generator
|
5
|
-
safe true
|
6
|
-
priority :lowest
|
7
|
-
|
8
|
-
def generate(site)
|
9
|
-
@site = site
|
10
|
-
handler = site.locale_handler
|
11
|
-
return if handler.available_locales.empty?
|
12
|
-
|
13
|
-
handler.available_locales.each do |locale|
|
14
|
-
handler.portfolio.each do |canon_doc|
|
15
|
-
locale_page = Locale::Page.new(canon_doc, locale)
|
16
|
-
locale_page.content = canon_doc.content
|
17
|
-
locale_page.data = canon_doc.data
|
18
|
-
|
19
|
-
# add locale_page to parent document and base array of pages
|
20
|
-
canon_doc.locale_pages << locale_page
|
21
|
-
site.pages << locale_page
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def inspect
|
27
|
-
"#<#{self.class} @site=#{@site}>"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|