jekyll-multiple-languages-plugin 1.7.0 → 1.8.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 +28 -6
- data/lib/jekyll-multiple-languages-plugin.rb +119 -2
- data/lib/plugin/version.rb +1 -1
- metadata +6 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d2f78a4cba9b1b00c236740a245bbc561cbf9740b330830a2464129ce44b818
|
4
|
+
data.tar.gz: 4efb2e419030c21a53ca1f3b38018bf31681a74e8c57fb4592ee375c6783a5e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00f559010eec5ac54b67d651b8f77a06cc0004fc63a631aca402754dfc3b8b900fea14687c8b99f40c0156aef66146f70babdb9dd78d86b4ca9364268a80c629
|
7
|
+
data.tar.gz: 870ec29d2941d9f08be8c21e179703fa6ca58ec3b8c15f00ab663ab54e5b8501a02b5bea47a43a80c271e3d8450f20e839098b2971539d6c37879991c0493cb4
|
data/README.md
CHANGED
@@ -38,6 +38,7 @@ Table of Contents
|
|
38
38
|
- [5.5. Link between languages](#55-link-between-languages)
|
39
39
|
- [5.6. Creating pages](#56-creating-pages)
|
40
40
|
- [5.7. Creating posts](#57-creating-posts)
|
41
|
+
- [5.8. Select pages to translations](#58-select-pages-to-translations)
|
41
42
|
- [6. License](#6-license)
|
42
43
|
- [7. Example website](#7-example-website)
|
43
44
|
- [7.1. Adding a new language](#71-adding-a-new-language)
|
@@ -359,6 +360,24 @@ Inside each of the language folders, you should create mirror pages to provide t
|
|
359
360
|
### 5.7. Creating posts
|
360
361
|
There are no global posts. The posts are localized by language. And your posts will live in the `_i18n/[lang]/_posts` directory. So if, for example, you have English language on your website you should put your posts on `_i18n/en/_posts` directory.
|
361
362
|
|
363
|
+
|
364
|
+
|
365
|
+
### 5.8. Select pages to translations
|
366
|
+
|
367
|
+
Sometimes you want to generate only selected versions of the page, especially excluding default language. You can do this using languages tag.
|
368
|
+
|
369
|
+
Example:
|
370
|
+
```yaml
|
371
|
+
---
|
372
|
+
permalink: /team/
|
373
|
+
permalink_fr: /equipe/
|
374
|
+
|
375
|
+
languages: ["fr"]
|
376
|
+
---
|
377
|
+
```
|
378
|
+
|
379
|
+
This generate only french version of the page.
|
380
|
+
|
362
381
|
## 6. License
|
363
382
|
|
364
383
|
This project is available under the [MIT License](LICENSE.txt).
|
@@ -397,6 +416,8 @@ Then, create a file named `about.md` under `_i18n/en` with the English content.
|
|
397
416
|
|
398
417
|
|
399
418
|
## 8. Changelog
|
419
|
+
* 1.8.0
|
420
|
+
* I18n for site and Front Matter configurations [@pgoltsev](https://github.com/kurtsson/jekyll-multiple-languages-plugin/pull/125)
|
400
421
|
* 1.7.0
|
401
422
|
* Option to build the default language into a subfolder
|
402
423
|
* Configurable verbosity
|
@@ -405,8 +426,8 @@ Then, create a file named `about.md` under `_i18n/en` with the English content.
|
|
405
426
|
* 1.6.1
|
406
427
|
* Improved testing
|
407
428
|
* Support for Jekyll 4
|
408
|
-
* Russian examples
|
409
|
-
* Translations rebuilt every time page is reloaded in developer mode
|
429
|
+
* Russian examples
|
430
|
+
* Translations rebuilt every time page is reloaded in developer mode
|
410
431
|
* 1.6.0
|
411
432
|
* fix: check if static_file_r_path is set
|
412
433
|
* Missing slash before lang prefix in lang picker example
|
@@ -425,8 +446,8 @@ Then, create a file named `about.md` under `_i18n/en` with the English content.
|
|
425
446
|
* 1.4.1
|
426
447
|
* Fixes a bug during site regeneration where translation paths were being nested based on wrongly set Jekyll variables.
|
427
448
|
* 1.4.0
|
428
|
-
* Support for Jekyll 3, thanks to [@pedrocarmona](https://github.com/
|
429
|
-
* How to create pages documentation, thanks to [@elotroalex](https://github.com/
|
449
|
+
* Support for Jekyll 3, thanks to [@pedrocarmona](https://github.com/kurtsson/jekyll-multiple-languages-plugin/pull/62)
|
450
|
+
* How to create pages documentation, thanks to [@elotroalex](https://github.com/kurtsson/jekyll-multiple-languages-plugin/pull/57)
|
430
451
|
* Many bug fixes
|
431
452
|
* Code refactoring, cleanup and reorganization
|
432
453
|
* Files and folders reorganization
|
@@ -434,8 +455,8 @@ Then, create a file named `about.md` under `_i18n/en` with the English content.
|
|
434
455
|
* Improvements and fixes on documentations
|
435
456
|
* Improved license files
|
436
457
|
* 1.3.0
|
437
|
-
* Support for localized links and custom permalinks, thanks to [@jasonlemay](https://github.com/
|
438
|
-
* Support for excluding posts from translation, thanks to [@ctruelson](https://github.com/
|
458
|
+
* Support for localized links and custom permalinks, thanks to [@jasonlemay](https://github.com/kurtsson/jekyll-multiple-languages-plugin/pull/53)
|
459
|
+
* Support for excluding posts from translation, thanks to [@ctruelson](https://github.com/kurtsson/jekyll-multiple-languages-plugin/pull/51)
|
439
460
|
* 1.2.9
|
440
461
|
* Bug fix when excluding files from translation, again thanks to [@h6](https://github.com/H6)
|
441
462
|
* 1.2.8
|
@@ -478,6 +499,7 @@ Then, create a file named `about.md` under `_i18n/en` with the English content.
|
|
478
499
|
### Contributors
|
479
500
|
| User | Contribution |
|
480
501
|
| :----------------------------------------------- | :----------------------------------- |
|
502
|
+
| [@pgoltsev](https://github.com/pgoltsev) | version 1.8.0
|
481
503
|
| [@pedrocarmona](https://github.com/pedrocarmona) | support for Jekyll 3 |
|
482
504
|
| [@elotroalex](https://github.com/elotroalex) | added a how to create page to README |
|
483
505
|
| [@mohamnag](https://github.com/mohamnag) | permalink generation bug fix |
|
@@ -100,7 +100,17 @@ module Jekyll
|
|
100
100
|
|
101
101
|
end
|
102
102
|
|
103
|
+
#*****************************************************************************
|
104
|
+
# :site, :pre_render hook
|
105
|
+
#*****************************************************************************
|
106
|
+
Jekyll::Hooks.register :site, :pre_render do |site, payload|
|
103
107
|
|
108
|
+
# Localize front matter data of every page.
|
109
|
+
#===========================================================================
|
110
|
+
(site.pages + site.documents).each do |item|
|
111
|
+
translate_props(item.data, site)
|
112
|
+
end
|
113
|
+
end
|
104
114
|
|
105
115
|
##############################################################################
|
106
116
|
# class Site
|
@@ -167,6 +177,9 @@ module Jekyll
|
|
167
177
|
self.config['lang'] = lang
|
168
178
|
end
|
169
179
|
|
180
|
+
# Translate site attributes to current language
|
181
|
+
translate_props(self.config, self)
|
182
|
+
|
170
183
|
puts "Building site for language: \"#{self.config['lang']}\" to: #{self.dest}"
|
171
184
|
|
172
185
|
process_org
|
@@ -203,6 +216,26 @@ module Jekyll
|
|
203
216
|
|
204
217
|
|
205
218
|
|
219
|
+
##############################################################################
|
220
|
+
# class PageReader
|
221
|
+
##############################################################################
|
222
|
+
class PageReader
|
223
|
+
alias :read_org :read
|
224
|
+
|
225
|
+
#======================================
|
226
|
+
# read
|
227
|
+
#
|
228
|
+
# Monkey patched this method to remove excluded languages.
|
229
|
+
#======================================
|
230
|
+
def read(files)
|
231
|
+
read_org(files).reject do |page|
|
232
|
+
page.data['languages'] && !page.data['languages'].include?(site.config['lang'])
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
|
238
|
+
|
206
239
|
##############################################################################
|
207
240
|
# class PostReader
|
208
241
|
##############################################################################
|
@@ -243,9 +276,11 @@ module Jekyll
|
|
243
276
|
|
244
277
|
if site.config['relative_permalinks']
|
245
278
|
File.join(@dir, data['permalink'])
|
246
|
-
|
279
|
+
elsif site.config['lang']
|
247
280
|
# Look if there's a permalink overwrite specified for this lang
|
248
|
-
data['permalink_'+site.config['lang']] || data['permalink']
|
281
|
+
data['permalink_' + site.config['lang']] || data['permalink']
|
282
|
+
else
|
283
|
+
data['permalink']
|
249
284
|
end
|
250
285
|
|
251
286
|
end
|
@@ -367,6 +402,8 @@ module Jekyll
|
|
367
402
|
puts "Using translation '%s' from default language: %s" %[translation, site.config['default_lang']]
|
368
403
|
end
|
369
404
|
end
|
405
|
+
|
406
|
+
TranslatedString.translate(key, lang, site)
|
370
407
|
|
371
408
|
translation
|
372
409
|
end
|
@@ -560,6 +597,86 @@ end
|
|
560
597
|
|
561
598
|
|
562
599
|
|
600
|
+
#======================================
|
601
|
+
# translate_key
|
602
|
+
#
|
603
|
+
# Translate given key to given language.
|
604
|
+
#======================================
|
605
|
+
def translate_key(key, lang, site)
|
606
|
+
unless site.parsed_translations.has_key?(lang)
|
607
|
+
puts "Loading translation from file #{site.source}/_i18n/#{lang}.yml"
|
608
|
+
site.parsed_translations[lang] = YAML.load_file("#{site.source}/_i18n/#{lang}.yml")
|
609
|
+
end
|
610
|
+
|
611
|
+
translation = site.parsed_translations[lang].access(key) if key.is_a?(String)
|
612
|
+
|
613
|
+
if translation.nil? or translation.empty?
|
614
|
+
translation = site.parsed_translations[site.config['default_lang']].access(key)
|
615
|
+
|
616
|
+
puts "Missing i18n key: #{lang}:#{key}"
|
617
|
+
puts "Using translation '%s' from default language: %s" %[translation, site.config['default_lang']]
|
618
|
+
end
|
619
|
+
|
620
|
+
translation
|
621
|
+
end
|
622
|
+
|
623
|
+
|
624
|
+
################################################################################
|
625
|
+
# class TranslatedString
|
626
|
+
################################################################################
|
627
|
+
class TranslatedString < String
|
628
|
+
#======================================
|
629
|
+
# initialize
|
630
|
+
#======================================
|
631
|
+
def initialize(*several_variants, key)
|
632
|
+
super(*several_variants)
|
633
|
+
@key = key
|
634
|
+
end
|
635
|
+
|
636
|
+
def key
|
637
|
+
@key
|
638
|
+
end
|
639
|
+
|
640
|
+
#======================================
|
641
|
+
# translate
|
642
|
+
#======================================
|
643
|
+
def self.translate(str, lang, site)
|
644
|
+
if str.is_a?(TranslatedString)
|
645
|
+
key = str.key
|
646
|
+
else
|
647
|
+
key = str
|
648
|
+
end
|
649
|
+
return TranslatedString.new(translate_key(key, lang, site), key = key)
|
650
|
+
end
|
651
|
+
end
|
652
|
+
|
653
|
+
|
654
|
+
#======================================
|
655
|
+
# translate_props
|
656
|
+
#
|
657
|
+
# Perform translation of properties defined in translation property list.
|
658
|
+
#======================================
|
659
|
+
def translate_props(data, site, props_key_name = 'translate_props')
|
660
|
+
lang = site.config['lang']
|
661
|
+
(data[props_key_name] || []).each do |prop_name|
|
662
|
+
if prop_name.is_a?(String)
|
663
|
+
prop_name = prop_name.strip
|
664
|
+
if prop_name.empty?
|
665
|
+
puts "There is an empty property defined in '#{props_key_name}'"
|
666
|
+
else
|
667
|
+
prop_value = data[prop_name]
|
668
|
+
if prop_value.is_a?(String) and !prop_value.empty?
|
669
|
+
data[prop_name] = TranslatedString.translate(prop_value, lang, site)
|
670
|
+
end
|
671
|
+
end
|
672
|
+
else
|
673
|
+
puts "Incorrect property name '#{prop_name}'. Must be a string"
|
674
|
+
end
|
675
|
+
end
|
676
|
+
end
|
677
|
+
|
678
|
+
|
679
|
+
|
563
680
|
################################################################################
|
564
681
|
# Liquid tags definitions
|
565
682
|
|
data/lib/plugin/version.rb
CHANGED
metadata
CHANGED
@@ -1,30 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-multiple-languages-plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Kurtsson
|
8
8
|
- Yonatan Miller
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: bundler
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 2.0.1
|
21
|
-
type: :development
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - "~>"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 2.0.1
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: html-proofer
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,7 +78,7 @@ homepage: https://github.com/kurtsson/jekyll-multiple-languages-plugin/
|
|
92
78
|
licenses:
|
93
79
|
- MIT
|
94
80
|
metadata: {}
|
95
|
-
post_install_message:
|
81
|
+
post_install_message:
|
96
82
|
rdoc_options:
|
97
83
|
- "--charset=UTF-8"
|
98
84
|
require_paths:
|
@@ -108,8 +94,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
94
|
- !ruby/object:Gem::Version
|
109
95
|
version: '0'
|
110
96
|
requirements: []
|
111
|
-
rubygems_version: 3.0.3
|
112
|
-
signing_key:
|
97
|
+
rubygems_version: 3.0.3.1
|
98
|
+
signing_key:
|
113
99
|
specification_version: 4
|
114
100
|
summary: I18n plugin for Jekyll
|
115
101
|
test_files: []
|