jekyll-polyglot 1.10.0 → 1.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0459aa05cc1025bea0ca2aef71ad7e3e4a0c33726b1f32e4d5f2e19d521a06aa'
4
- data.tar.gz: 245aa4b72aa80fac516b0cc9b04c396ef0ec55366aadefbb73ba8fa9ca47df93
3
+ metadata.gz: b3ca341e67c10066675cb10c5ded127cf9126c5db547d2f3fdfc3d545c43bd6a
4
+ data.tar.gz: 32315c6551ac56da248adb7d465c130d8f0ec4f03a7d589eb5e2081c1a420821
5
5
  SHA512:
6
- metadata.gz: d8f4162ee486ebf72f6c5be6714bb5aed0a60f5ca0798480efbc8a68f84cd94c40b9db9efbb6160317ca974f600cbe82ac82c0934a833d162135b873a3b000da
7
- data.tar.gz: c5367a20ee1ea4983e5cc8485204f11da88d4a3914ccfc5aa62d76d78cd364fd15c223e99a4bbec5f27d306c7be4226232faa3c17b38951dd9102ead2e5e02c7
6
+ metadata.gz: b53d59e7090b20849d36cdfe6b54a6b0e40e40db839916f1df45c62f26b0ef541f43d30d88c3cbfcd0eb8e58ecc4e45b1f3ae1509cdd2aa0149aad4be41d9a95
7
+ data.tar.gz: 12a99dc155b5e4c7ba5f960e0267a90b547fa10576c9c3bf718784f139bf45b0da7554ac40e262b491aa113301eba5d1c16c2bb615fb901d26adf4cee90d0917
data/README.md CHANGED
@@ -331,15 +331,15 @@ Feel free to open a PR and list your multilingual blog here you may want to shar
331
331
 
332
332
  ## 2.0 Roadmap
333
333
  * [x] - **site language**: portuguese Brazil `pt-BR`
334
- * [ ] - **site language**: portuguese Portugal `pt-PT`
335
- * [ ] - **site language**: arabic `ar`
336
- * [ ] - **site language**: japanese `ja`
334
+ * [x] - **site language**: arabic `ar`
335
+ * [x] - **site language**: japanese `ja`
337
336
  * [x] - **site language**: russian `ru`
338
337
  * [x] - **site language**: dutch `nl`
339
338
  * [x] - **site language**: korean `ko`
340
339
  * [x] - **site language**: hebrew `he`
341
340
  * [x] - **site language**: chinese China `zh-CN`
342
341
  * [ ] - **site language**: chinese Taiwan `zh-TW`
342
+ * [ ] - **site language**: portuguese Portugal `pt-PT`
343
343
  * [ ] - get whitelisted as an official github-pages jekyll plugin
344
344
  * [x] - update CI provider
345
345
 
@@ -33,17 +33,29 @@ module Jekyll
33
33
  current_lang = site.active_lang
34
34
  current_permalink = lang_to_permalink[current_lang] || (permalink_lang && permalink_lang[current_lang]) || permalink
35
35
  current_permalink = "/#{current_permalink}" unless current_permalink.start_with?("/")
36
- current_lang_prefix = current_lang == site.default_lang ? '' : "/#{current_lang}"
37
- i18n += "<link rel=\"canonical\" href=\"#{site_url}#{current_lang_prefix}#{current_permalink}\"/>\n"
36
+ # Don't add language prefix if it's already in the permalink
37
+ canonical_permalink = if current_lang == site.default_lang
38
+ current_permalink
39
+ else
40
+ current_permalink.start_with?("/#{current_lang}/") ? current_permalink : "/#{current_lang}#{current_permalink}"
41
+ end
42
+ i18n += "<link rel=\"canonical\" href=\"#{site_url}#{canonical_permalink}\"/>\n"
43
+
44
+ # Get the default language permalink for x-default
45
+ default_lang_permalink = lang_to_permalink[site.default_lang] || (permalink_lang && permalink_lang[site.default_lang]) || permalink
46
+ default_lang_permalink = "/#{default_lang_permalink}" unless default_lang_permalink.start_with?("/")
38
47
 
39
48
  site.languages.each do |lang|
40
49
  alt_permalink = lang_to_permalink[lang] || (permalink_lang && permalink_lang[lang]) || permalink
41
50
  alt_permalink = "/#{alt_permalink}" unless alt_permalink.start_with?("/")
42
51
  i18n += if lang == site.default_lang
43
52
  "<link rel=\"alternate\" hreflang=\"#{lang}\" href=\"#{site_url}#{alt_permalink}\"/>\n" \
44
- "<link rel=\"alternate\" hreflang=\"x-default\" href=\"#{site_url}#{alt_permalink}\"/>\n"
53
+ "<link rel=\"alternate\" hreflang=\"x-default\" href=\"#{site_url}#{default_lang_permalink}\"/>\n"
45
54
  else
46
- "<link rel=\"alternate\" hreflang=\"#{lang}\" href=\"#{site_url}/#{lang}#{alt_permalink}\"/>\n"
55
+ # For non-default languages, use the language-specific permalink directly
56
+ # Don't add the language prefix if it's already in the permalink
57
+ lang_permalink = alt_permalink.start_with?("/#{lang}/") ? alt_permalink : "/#{lang}#{alt_permalink}"
58
+ "<link rel=\"alternate\" hreflang=\"#{lang}\" href=\"#{site_url}#{lang_permalink}\"/>\n"
47
59
  end
48
60
  end
49
61
  i18n
@@ -64,7 +64,7 @@ module Jekyll
64
64
  process_language lang
65
65
  end
66
66
  end
67
- Jekyll::Hooks.trigger :polyglot, :post_write
67
+ Jekyll::Hooks.trigger :polyglot, :post_write, self
68
68
  end
69
69
 
70
70
  alias site_payload_orig site_payload
@@ -115,6 +115,16 @@ module Jekyll
115
115
  string.split(regex)
116
116
  end
117
117
 
118
+ # Convert glob pattern to regex pattern
119
+ # * matches any characters except /
120
+ # ? matches any single character except /
121
+ def glob_to_regex(pattern)
122
+ # Escape special regex characters first
123
+ escaped = Regexp.escape(pattern)
124
+ # Convert glob patterns to regex patterns
125
+ escaped.gsub("\\*", '.*').gsub("\\?", '.')
126
+ end
127
+
118
128
  def derive_lang_from_path(doc)
119
129
  unless @lang_from_path
120
130
  return nil
@@ -236,10 +246,12 @@ module Jekyll
236
246
  regex = ''
237
247
  unless disabled
238
248
  @exclude.each do |x|
239
- regex += "(?!#{x})"
249
+ escaped_x = glob_to_regex(x)
250
+ regex += "(?!#{escaped_x})"
240
251
  end
241
252
  @languages.each do |x|
242
- regex += "(?!#{x}/)"
253
+ escaped_x = Regexp.escape(x)
254
+ regex += "(?!#{escaped_x}/)"
243
255
  end
244
256
  end
245
257
  start = disabled ? 'ferh' : 'href'
@@ -254,10 +266,12 @@ module Jekyll
254
266
  regex = ''
255
267
  unless disabled
256
268
  @exclude.each do |x|
257
- regex += "(?!#{x})"
269
+ escaped_x = glob_to_regex(x)
270
+ regex += "(?!#{escaped_x})"
258
271
  end
259
272
  @languages.each do |x|
260
- regex += "(?!#{x}/)"
273
+ escaped_x = Regexp.escape(x)
274
+ regex += "(?!#{escaped_x}/)"
261
275
  end
262
276
  end
263
277
  start = disabled ? 'ferh' : 'href'
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.10.0
4
+ version: 1.11.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: 2025-07-07 00:00:00.000000000 Z
11
+ date: 2025-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll