jekyll-polyglot 1.3.3 → 1.4.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 +48 -10
- data/lib/jekyll/polyglot/hooks.rb +0 -1
- data/lib/jekyll/polyglot/liquid.rb +2 -1
- data/lib/jekyll/polyglot/liquid/tags/{i18n-headers.rb → i18n_headers.rb} +2 -0
- data/lib/jekyll/polyglot/liquid/tags/static_href.rb +27 -0
- data/lib/jekyll/polyglot/patches/jekyll/site.rb +58 -26
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37bbf459ea94dd1edd9fbef3aeb136db17a68b78b58a1b983d8bbc2cbe24727b
|
4
|
+
data.tar.gz: 5148941f48e63247596579130b8dbd8c407be7e326a2cc59b98725291d9f564d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 303584c6688bf73fb8fc15a8c6bb160b0ae2b055744bdac4a3515455343a20dfbccff2d5713e74f2dca6235f0ed40e0b5d9a7f230a9a57f4b007ae2b0bd5fc8b
|
7
|
+
data.tar.gz: de6caa20d33315f63c8f7f6da8800e83aa2f77548a8d21ed8bf4e8c7529d16ee96813eaef4d46fc9885867c03ae3b48e9681af041fda8c21e645ed8fbf560aaa
|
data/README.md
CHANGED
@@ -94,8 +94,7 @@ becomes
|
|
94
94
|
```
|
95
95
|
Notice the link `<a href="/fr/menu/">...` directs to the french website.
|
96
96
|
|
97
|
-
Even if you are falling back to `default_lang` page, relative links built on the *french* site will
|
98
|
-
still link to *french* pages.
|
97
|
+
Even if you are falling back to `default_lang` page, relative links built on the *french* site will still link to *french* pages.
|
99
98
|
|
100
99
|
#### Relativized Absolute Urls
|
101
100
|
If you defined a site `url` in your `_config.yaml`, polyglot will automatically relativize absolute links pointing to your website directory:
|
@@ -112,7 +111,17 @@ becomes
|
|
112
111
|
```
|
113
112
|
|
114
113
|
#### Disabling Url Relativizing
|
115
|
-
|
114
|
+
_New in 1.4.0_
|
115
|
+
If you dont want a href attribute to be relativized (such as for making [a language switcher](https://github.com/untra/polyglot/blob/master/site/_includes/sidebar.html#L40)), you can use the `{% static_href %}href="..."{% endstatic_href %}` block tag.
|
116
|
+
|
117
|
+
```html
|
118
|
+
<a {% static_href %}href="/about"{% endstatic_href %}>click this static link</a>
|
119
|
+
```
|
120
|
+
|
121
|
+
that will generate `<a href="/about">click this static link</a>` which is what you would normally use to create a url unmangled by invisible language relativization.
|
122
|
+
|
123
|
+
_Previous (no longer) Recommendation:_
|
124
|
+
If you don't want aa url to be relativized, you can add a space explicitly into the href to prevent a url from being relativized by polyglot.
|
116
125
|
|
117
126
|
For example, the following urls will be relativized:
|
118
127
|
|
@@ -128,7 +137,20 @@ href=" http://mywebsite.com/about"
|
|
128
137
|
href=" /about"
|
129
138
|
```
|
130
139
|
|
131
|
-
combine with a [html minifier](https://github.com/digitalsparky/jekyll-minifier) for a polished and production ready website.
|
140
|
+
combine with a [html minifier](https://github.com/digitalsparky/jekyll-minifier) for a polished and production ready website. -->
|
141
|
+
|
142
|
+
#### Exclusive site language generation
|
143
|
+
_New in 1.4.0_
|
144
|
+
|
145
|
+
If you want to control which languages a document can be generated for, you can specify `lang-exclusive: [ ]` frontmatter.
|
146
|
+
If you include this frontmatter in your post, it will only generate for the specified site languages.
|
147
|
+
|
148
|
+
For Example, the following frontmatter will only generate in the `en` and `fr` site language builds:
|
149
|
+
```
|
150
|
+
---
|
151
|
+
lang-exclusive: ['en', 'fr']
|
152
|
+
---
|
153
|
+
```
|
132
154
|
|
133
155
|
#### Localized site.data
|
134
156
|
|
@@ -149,6 +171,7 @@ This plugin stands out from other I18n Jekyll plugins.
|
|
149
171
|
- provides the liquid tag `{{ site.default_lang }}` to get the default_lang I18n string.
|
150
172
|
- provides the liquid tag `{{ site.active_lang }}` to get the I18n language string the website was built for. Alternative names for `active_lang` can be configured via `config.lang_vars`.
|
151
173
|
- provides the liquid tag `{{ I18n_Headers https://yourwebsite.com/ }}` to append SEO bonuses to your website.
|
174
|
+
- provides the liquid tag `{{ Unrelativized_Link href="/hello" }}` to make urls that do not get influenced by url correction regexs.
|
152
175
|
- provides `site.data` localization for efficient rich text replacement.
|
153
176
|
- a creator that will answer all of your questions and issues.
|
154
177
|
|
@@ -157,21 +180,36 @@ Jekyll-polyglot has a few spectacular [Search Engine Optimization techniques](ht
|
|
157
180
|
|
158
181
|
### Other Websites Built with Polyglot
|
159
182
|
let us know if you make a multilingual blog you want to share:
|
160
|
-
* [Polyglot project website](
|
161
|
-
* [LogRhythm Corporate Website](
|
183
|
+
* [Polyglot project website](https://polyglot.untra.io)
|
184
|
+
* [LogRhythm Corporate Website](https://logrhythm.com)
|
162
185
|
* [All Over Earth](https://allover.earth/)
|
163
186
|
* [Hanare Cafe in Toshijima, Japan](https://hanarecafe.com)
|
164
187
|
* [F-Droid](https://f-droid.org)
|
188
|
+
* [Ubuntu MATE](https://ubuntu-mate.org)
|
165
189
|
|
166
190
|
## Compatibility
|
167
|
-
Currently supports Jekyll 3.0 , and Jekyll 4.0
|
191
|
+
Currently supports Jekyll 3.0 , and Jekyll 4.0
|
168
192
|
|
169
|
-
*
|
170
|
-
* In Jekyll 4.0 , SCSS source maps will generate improperly due to how Polyglot operates. The workaround is to disable the CSS sourcemaps. Adding
|
193
|
+
* Windows users will need to disable parallel_localization on their machines by setting `parallel_localization: false` in the `_config.yml`
|
194
|
+
* In Jekyll 4.0 , SCSS source maps will generate improperly due to how Polyglot operates. The workaround is to disable the CSS sourcemaps. Adding the following to your `config.yml` will disable sourcemap generation:
|
171
195
|
```yaml
|
172
196
|
sass:
|
173
197
|
sourcemap: never
|
174
198
|
```
|
175
199
|
|
200
|
+
## Contributions
|
201
|
+
Please! I need all the support I can get! 🙏
|
202
|
+
But for real I would appreciate any contributions and support. This started as an open-source side-project and has gotten bigger than I'd ever imagine!
|
203
|
+
If you have something you'd like to contribute to jekyll-polyglot, please open a PR!
|
204
|
+
|
205
|
+
## Roadmap
|
206
|
+
[ ] - **site language**: portuguese `pt_BR` `pt_PT`
|
207
|
+
[ ] - **site language**: arabic `ar`
|
208
|
+
[ ] - **site language**: japanese `ja`
|
209
|
+
[ ] - **site language**: russian `ru`
|
210
|
+
[ ] - **site language**: korean `ko`
|
211
|
+
[ ] - **site language**: hebrew `he`
|
212
|
+
[ ] - get whitelisted as an official github-pages jekyll plugin
|
213
|
+
|
176
214
|
## Copyright
|
177
|
-
Copyright (c) Samuel Volin
|
215
|
+
Copyright (c) Samuel Volin 2021. License: MIT
|
@@ -18,6 +18,7 @@ module Jekyll
|
|
18
18
|
"href=\" #{site_url}#{permalink}\"/>\n"
|
19
19
|
site.languages.each do |lang|
|
20
20
|
next if lang == site.default_lang
|
21
|
+
|
21
22
|
i18n += "<link rel=\"alternate\" hreflang=\"#{lang}\" "\
|
22
23
|
"href=\"#{site_url}/#{lang}#{permalink}\"/>\n"
|
23
24
|
end
|
@@ -29,3 +30,4 @@ module Jekyll
|
|
29
30
|
end
|
30
31
|
|
31
32
|
Liquid::Template.register_tag('I18n_Headers', Jekyll::Polyglot::Liquid::I18nHeadersTag)
|
33
|
+
Liquid::Template.register_tag('i18n_headers', Jekyll::Polyglot::Liquid::I18nHeadersTag)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Polyglot
|
3
|
+
module Liquid
|
4
|
+
class StaticHrefTag < :: Liquid::Block
|
5
|
+
def initialize(tag_name, params, tokens)
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def render(context)
|
10
|
+
text = super
|
11
|
+
href_attrs = text.strip.split '='
|
12
|
+
valid = (href_attrs.length == 2 && href_attrs[0] == 'href') && href_attrs[1].start_with?('"') && href_attrs[1].end_with?('"')
|
13
|
+
unless valid
|
14
|
+
raise Liquid::SyntaxError, "static_href parameters must include match href=\"...\" attribute param, eg. href=\"http://example.com\, href=\"/about\", href=\"/\" , instead got:\n#{text}"
|
15
|
+
end
|
16
|
+
|
17
|
+
href_value = href_attrs[1]
|
18
|
+
# href writes out as ferh="..." explicitly wrong, to be cauaght by seperate processor for nonrelativized links
|
19
|
+
"ferh=#{href_value}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Liquid::Template.register_tag('Static_Href', Jekyll::Polyglot::Liquid::StaticHrefTag)
|
27
|
+
Liquid::Template.register_tag('static_href', Jekyll::Polyglot::Liquid::StaticHrefTag)
|
@@ -10,18 +10,17 @@ module Jekyll
|
|
10
10
|
@parallel_localization = config.fetch('parallel_localization', true)
|
11
11
|
@lang_from_path = config.fetch('lang_from_path', false)
|
12
12
|
@exclude_from_localization = config.fetch('exclude_from_localization', []).map do |e|
|
13
|
-
if File.directory?(e)
|
13
|
+
if File.directory?(e) && e[-1] != '/'
|
14
14
|
e + '/'
|
15
15
|
else
|
16
16
|
e
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
20
19
|
end
|
21
20
|
|
22
21
|
def fetch_languages
|
23
22
|
@default_lang = config.fetch('default_lang', 'en')
|
24
|
-
@languages = config.fetch('languages', ['en'])
|
23
|
+
@languages = config.fetch('languages', ['en']).uniq
|
25
24
|
@keep_files += (@languages - [@default_lang])
|
26
25
|
@active_lang = @default_lang
|
27
26
|
@lang_vars = config.fetch('lang_vars', [])
|
@@ -102,11 +101,11 @@ module Jekyll
|
|
102
101
|
end
|
103
102
|
segments = doc.relative_path.split('/')
|
104
103
|
if doc.relative_path[0] == '_' \
|
105
|
-
|
106
|
-
|
104
|
+
&& segments.length > 2 \
|
105
|
+
&& segments[1] =~ /^[a-z]{2,3}(:?[_-](:?[A-Za-z]{2}){1,2}){0,2}$/
|
107
106
|
return segments[1]
|
108
107
|
elsif segments.length > 1 \
|
109
|
-
|
108
|
+
&& segments[0] =~ /^[a-z]{2,3}(:?[_-](:?[A-Za-z]{2}){1,2}){0,2}$/
|
110
109
|
return segments[0]
|
111
110
|
else
|
112
111
|
return nil
|
@@ -122,10 +121,16 @@ module Jekyll
|
|
122
121
|
approved = {}
|
123
122
|
docs.each do |doc|
|
124
123
|
lang = doc.data['lang'] || derive_lang_from_path(doc) || @default_lang
|
124
|
+
lang_exclusive = doc.data['lang-exclusive'] || []
|
125
125
|
url = doc.url.gsub(regex, '/')
|
126
126
|
doc.data['permalink'] = url
|
127
|
+
# skip this document if it has already been processed
|
127
128
|
next if @file_langs[url] == @active_lang
|
129
|
+
# skip this document if it has a fallback and it isn't assigned to the active language
|
128
130
|
next if @file_langs[url] == @default_lang && lang != @active_lang
|
131
|
+
# skip this document if it has lang-exclusive defined and the active_lang is not included
|
132
|
+
next if !lang_exclusive.empty? && !lang_exclusive.include?(@active_lang)
|
133
|
+
|
129
134
|
approved[url] = doc
|
130
135
|
@file_langs[url] = lang
|
131
136
|
end
|
@@ -134,14 +139,19 @@ module Jekyll
|
|
134
139
|
|
135
140
|
# performs any necesarry operations on the documents before rendering them
|
136
141
|
def process_documents(docs)
|
137
|
-
return if @active_lang == @default_lang
|
142
|
+
# return if @active_lang == @default_lang
|
143
|
+
|
138
144
|
url = config.fetch('url', false)
|
139
|
-
rel_regex = relative_url_regex
|
140
|
-
abs_regex = absolute_url_regex(url)
|
145
|
+
rel_regex = relative_url_regex(false)
|
146
|
+
abs_regex = absolute_url_regex(url, false)
|
147
|
+
non_rel_regex = relative_url_regex(true)
|
148
|
+
non_abs_regex = absolute_url_regex(url, true)
|
141
149
|
docs.each do |doc|
|
142
|
-
relativize_urls(doc, rel_regex)
|
150
|
+
unless @active_lang == @default_lang then relativize_urls(doc, rel_regex) end
|
151
|
+
correct_nonrelativized_urls(doc, non_rel_regex)
|
143
152
|
if url
|
144
|
-
|
153
|
+
unless @active_lang == @default_lang then relativize_absolute_urls(doc, abs_regex, url) end
|
154
|
+
correct_nonrelativized_absolute_urls(doc, non_abs_regex, url)
|
145
155
|
end
|
146
156
|
end
|
147
157
|
end
|
@@ -159,29 +169,39 @@ module Jekyll
|
|
159
169
|
end
|
160
170
|
|
161
171
|
# a regex that matches relative urls in a html document
|
162
|
-
# matches href="baseurl/foo/bar-baz" and others like it
|
172
|
+
# matches href="baseurl/foo/bar-baz" href="/foo/bar-baz" and others like it
|
163
173
|
# avoids matching excluded files. prepare makes sure
|
164
174
|
# that all @exclude dirs have a trailing slash.
|
165
|
-
def relative_url_regex
|
175
|
+
def relative_url_regex(disabled = false)
|
166
176
|
regex = ''
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
177
|
+
unless disabled
|
178
|
+
@exclude.each do |x|
|
179
|
+
regex += "(?!#{x})"
|
180
|
+
end
|
181
|
+
@languages.each do |x|
|
182
|
+
regex += "(?!#{x}\/)"
|
183
|
+
end
|
172
184
|
end
|
173
|
-
|
185
|
+
start = disabled ? 'ferh' : 'href'
|
186
|
+
%r{#{start}=\"?#{@baseurl}\/((?:#{regex}[^,'\"\s\/?\.#]+\.?)*(?:\/[^\]\[\)\(\"\'\s]*)?)\"}
|
174
187
|
end
|
175
188
|
|
176
|
-
|
189
|
+
# a regex that matches absolute urls in a html document
|
190
|
+
# matches href="http://baseurl/foo/bar-baz" and others like it
|
191
|
+
# avoids matching excluded files. prepare makes sure
|
192
|
+
# that all @exclude dirs have a trailing slash.
|
193
|
+
def absolute_url_regex(url, disabled = false)
|
177
194
|
regex = ''
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
195
|
+
unless disabled
|
196
|
+
@exclude.each do |x|
|
197
|
+
regex += "(?!#{x})"
|
198
|
+
end
|
199
|
+
@languages.each do |x|
|
200
|
+
regex += "(?!#{x}\/)"
|
201
|
+
end
|
183
202
|
end
|
184
|
-
|
203
|
+
start = disabled ? 'ferh' : 'href'
|
204
|
+
%r{#{start}=\"?#{url}#{@baseurl}\/((?:#{regex}[^,'\"\s\/?\.#]+\.?)*(?:\/[^\]\[\)\(\"\'\s]*)?)\"}
|
185
205
|
end
|
186
206
|
|
187
207
|
def relativize_urls(doc, regex)
|
@@ -195,5 +215,17 @@ module Jekyll
|
|
195
215
|
|
196
216
|
doc.output.gsub!(regex, "href=\"#{url}#{@baseurl}/#{@active_lang}/" + '\1"')
|
197
217
|
end
|
218
|
+
|
219
|
+
def correct_nonrelativized_absolute_urls(doc, regex, url)
|
220
|
+
return if doc.output.nil?
|
221
|
+
|
222
|
+
doc.output.gsub!(regex, "href=\"#{url}#{@baseurl}/" + '\1"')
|
223
|
+
end
|
224
|
+
|
225
|
+
def correct_nonrelativized_urls(doc, regex)
|
226
|
+
return if doc.output.nil?
|
227
|
+
|
228
|
+
doc.output.gsub!(regex, "href=\"#{@baseurl}/" + '\1"')
|
229
|
+
end
|
198
230
|
end
|
199
231
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-polyglot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Volin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -39,12 +39,13 @@ files:
|
|
39
39
|
- lib/jekyll/polyglot/hooks/coordinate.rb
|
40
40
|
- lib/jekyll/polyglot/hooks/process.rb
|
41
41
|
- lib/jekyll/polyglot/liquid.rb
|
42
|
-
- lib/jekyll/polyglot/liquid/tags/
|
42
|
+
- lib/jekyll/polyglot/liquid/tags/i18n_headers.rb
|
43
|
+
- lib/jekyll/polyglot/liquid/tags/static_href.rb
|
43
44
|
- lib/jekyll/polyglot/patches.rb
|
44
45
|
- lib/jekyll/polyglot/patches/jekyll/site.rb
|
45
46
|
- lib/jekyll/polyglot/patches/jekyll/static_file.rb
|
46
47
|
- lib/jekyll/polyglot/version.rb
|
47
|
-
homepage:
|
48
|
+
homepage: https://polyglot.untra.io/
|
48
49
|
licenses:
|
49
50
|
- MIT
|
50
51
|
metadata: {}
|
@@ -56,14 +57,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
57
|
requirements:
|
57
58
|
- - ">="
|
58
59
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
60
|
+
version: 2.4.0
|
60
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
62
|
requirements:
|
62
63
|
- - ">="
|
63
64
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
65
|
+
version: 2.7.0
|
65
66
|
requirements: []
|
66
|
-
rubygems_version: 3.
|
67
|
+
rubygems_version: 3.2.7
|
67
68
|
signing_key:
|
68
69
|
specification_version: 4
|
69
70
|
summary: I18n plugin for Jekyll Blogs
|