jekyll-open-sdg-plugins 1.0.0.rc6 → 1.0.0.rc7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -148
- data/lib/jekyll-open-sdg-plugins/create_goals.rb +13 -1
- data/lib/jekyll-open-sdg-plugins/create_indicators.rb +11 -1
- data/lib/jekyll-open-sdg-plugins/create_pages.rb +1 -0
- data/lib/jekyll-open-sdg-plugins/fetch_remote_data.rb +91 -43
- data/lib/jekyll-open-sdg-plugins/helpers.rb +14 -0
- data/lib/jekyll-open-sdg-plugins/sdg_variables.rb +32 -15
- data/lib/jekyll-open-sdg-plugins/version.rb +1 -1
- metadata +2 -4
- data/lib/jekyll-open-sdg-plugins/get_indicator_name.rb +0 -146
- data/lib/jekyll-open-sdg-plugins/multilingual_metadata.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f9696653a01838967c46fbc75ba9f42ae3407e23fbea42f5577fff00c812400
|
4
|
+
data.tar.gz: 222958568c169871c68f6812bdb2e47f074186514c28de2d7090dbccdae416cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9002444b28bfaf97393a3920ea25191d462fffecd3f53cc054948bd627ee45a3090fbd592203ac570b897eef110bb2aaa5059f92c005b270adb4000e4c123c50
|
7
|
+
data.tar.gz: 615e228587be863c9729300966e784515834d072adf5fe34acdb39d76fdaf7a3004c1607964a9cc8bb37d01dabc38811a310d586767bddae38c59dfeb915a75d
|
data/README.md
CHANGED
@@ -2,152 +2,6 @@
|
|
2
2
|
|
3
3
|
> 💎 Jekyll plugins for use with the Open SDG platform
|
4
4
|
|
5
|
-
This plugin provides
|
5
|
+
This plugin provides required Jekyll functionality for the [Open SDG](https://github.com/open-sdg/open-sdg) platform.
|
6
6
|
|
7
|
-
The functionality
|
8
|
-
|
9
|
-
## 1. A "t" Liquid filter for translating strings.
|
10
|
-
|
11
|
-
Usage example:
|
12
|
-
|
13
|
-
```
|
14
|
-
{{ my_variable | t }}
|
15
|
-
```
|
16
|
-
|
17
|
-
## 2. Fill in missing fields to allow partially translated metadata.
|
18
|
-
|
19
|
-
This allows metadata to be translated, field-by-field as needed, in subfolders in the data repository.
|
20
|
-
|
21
|
-
## 3. Automatically create goal pages based on data.
|
22
|
-
|
23
|
-
This creates goal pages automatically based on the data, so that the site repository does not need to maintain a `_goals` folder. It depends on a `_config.yml` setting.
|
24
|
-
|
25
|
-
Usage example (in `_config.yml`):
|
26
|
-
```
|
27
|
-
create_goals:
|
28
|
-
# This determines which layout is used to render the pages.
|
29
|
-
layout: goal
|
30
|
-
```
|
31
|
-
|
32
|
-
## 4. Automatically create indicator pages based on data.
|
33
|
-
|
34
|
-
This creates indicator pages automatically based on the data, so that the site repository does not need to maintain a `_indicators` folder. It depends on a `_config.yml` setting.
|
35
|
-
|
36
|
-
Usage example (in `_config.yml`):
|
37
|
-
```
|
38
|
-
create_indicators:
|
39
|
-
# This determines which layout is used to render the pages.
|
40
|
-
layout: indicator
|
41
|
-
```
|
42
|
-
|
43
|
-
## 5. Automatically create 4 required pages.
|
44
|
-
|
45
|
-
This automates the creation of 4 required pages that all implementations of Open SDG will need. These consist of:
|
46
|
-
|
47
|
-
* the home page: /
|
48
|
-
* the indicators json page: /indicators.json
|
49
|
-
* the search results page: /search
|
50
|
-
* the reporting status page: /reporting-status
|
51
|
-
|
52
|
-
There are advanced options for overriding the location of these pages (see creae_pages.rb). But see the example below to use the defaults.
|
53
|
-
|
54
|
-
Usage example (in `_config.yml`):
|
55
|
-
```
|
56
|
-
create_pages: true
|
57
|
-
```
|
58
|
-
|
59
|
-
## 6. Automatically fetch remote data and translations.
|
60
|
-
|
61
|
-
This automates the fetching of the remote data (from the "data repository") and any remote translations.
|
62
|
-
|
63
|
-
Note: This feature is disabled if "jekyll_get_json" is in the site config. This was the older (more verbose) way to do this.
|
64
|
-
|
65
|
-
Usage example (in `_config.yml`):
|
66
|
-
```
|
67
|
-
remote_data_prefix: https://mygithuborg.github.io/my-data-repository
|
68
|
-
remote_translations:
|
69
|
-
- https://open-sdg.github.io/sdg-translations/translations-0.6.0.json
|
70
|
-
|
71
|
-
```
|
72
|
-
|
73
|
-
For those interested in switching to this convenience feature, note that this makes the "jekyll_get_json" and "remotedatabaseurl" settings obsolete; so they can be removed.
|
74
|
-
|
75
|
-
## 7. Provide standard variables on all pages, for use in templates
|
76
|
-
|
77
|
-
This feature provides access to Hashes for goals, targets, and indicators. Each
|
78
|
-
contains the following keys:
|
79
|
-
* number (eg, "1" for a goal, "1.1" for a target, "1.1.1" for an indicator)
|
80
|
-
* slug (eg, "1" for a goal, "1-1", for a target, "1-1-1" for an indicator)
|
81
|
-
* name (the fully-translated name of the goal/target/indicator
|
82
|
-
* sort (a string suitable for use in sorting the goals/targets/indicators)
|
83
|
-
* global (an equivalent Hash containing specifically "global" versions)
|
84
|
-
|
85
|
-
Additionally, indicators contain:
|
86
|
-
* url (the URL of that indicator's page)
|
87
|
-
* goal_number (the number of that indicator's goal)
|
88
|
-
* target_number (the number of that indicator's target)
|
89
|
-
* [all the indicator's metadata fields]
|
90
|
-
|
91
|
-
Additionally, targets contain:
|
92
|
-
* goal_number (the number of that target's goal)
|
93
|
-
|
94
|
-
Additionally, goals contain:
|
95
|
-
* url (the URL of that goal's page)
|
96
|
-
* icon (the URL of that goal's icon)
|
97
|
-
* short (the short version of the goal name, translated)
|
98
|
-
|
99
|
-
The following variables can be used on ALL pages:
|
100
|
-
|
101
|
-
* goals : Array of goals
|
102
|
-
* targets : Array of targets
|
103
|
-
* indicators : Array of indicators
|
104
|
-
* baseurl: A page-specific version of site.baseurl, taking language into account
|
105
|
-
* language: The language code for the current page
|
106
|
-
* language_public: The "public" language code, which may be different from the
|
107
|
-
language code.
|
108
|
-
* t: A hash of all the compiled translations in the current language
|
109
|
-
|
110
|
-
The following variables can be used on all indicator pages:
|
111
|
-
|
112
|
-
* goal : the current goal
|
113
|
-
* target : the current target
|
114
|
-
* indicator : the current indicator
|
115
|
-
|
116
|
-
The following variables can be used on all goal pages:
|
117
|
-
|
118
|
-
* goal : the current goal
|
119
|
-
|
120
|
-
Examples of usage:
|
121
|
-
|
122
|
-
Printing titles for all available indicators in Goal 2:
|
123
|
-
```
|
124
|
-
{% assign indicators = page.indicators | where: "goal_number", "2" %}
|
125
|
-
{% for indicator in indicators %}
|
126
|
-
{{ indicator.name }}
|
127
|
-
{% endfor %}
|
128
|
-
```
|
129
|
-
|
130
|
-
Printing the short name for the current goal, on a goal page:
|
131
|
-
```
|
132
|
-
{{ page.goal.short }}
|
133
|
-
```
|
134
|
-
|
135
|
-
Printing the name of all targets in a particular, on that goal page:
|
136
|
-
```
|
137
|
-
{% assign targets = page.targets | where: "goal_number", page.goal.number %}
|
138
|
-
{% for target in targets %}
|
139
|
-
{{ target.name }}
|
140
|
-
{% endfor %}
|
141
|
-
|
142
|
-
## 8. Lookup goals/targets/indicators by ID
|
143
|
-
|
144
|
-
The hashes detailed above in #7 can also be looked up by id, with the `sdg_lookup` filter.
|
145
|
-
|
146
|
-
Examples of usage:
|
147
|
-
|
148
|
-
Looking up target 7.1 and printing its name
|
149
|
-
|
150
|
-
```
|
151
|
-
{% assign target = '7.1' | sdg_lookup %}
|
152
|
-
{{ target.name }}
|
153
|
-
```
|
7
|
+
The details on this functionality can be found throughout the [Open SDG documentation](https://open-sdg.readthedocs.io/en/latest/).
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "jekyll"
|
2
|
+
require_relative "helpers"
|
2
3
|
|
3
4
|
module JekyllOpenSdgPlugins
|
4
5
|
class CreateGoals < Jekyll::Generator
|
@@ -10,7 +11,18 @@ module JekyllOpenSdgPlugins
|
|
10
11
|
if site.config['languages'] and site.config['create_goals']
|
11
12
|
# Compile the list of goals.
|
12
13
|
goals = {}
|
13
|
-
|
14
|
+
# Are we using translated builds?
|
15
|
+
metadata = {}
|
16
|
+
if opensdg_translated_builds(site)
|
17
|
+
# If we are using translated builds, the 'meta' data is underneath
|
18
|
+
# language codes. We just use the first language.
|
19
|
+
default_language = site.config['languages'][0]
|
20
|
+
metadata = site.data[default_language]['meta']
|
21
|
+
else
|
22
|
+
# Otherwise the 'meta' data is not underneath any language code.
|
23
|
+
metadata = site.data['meta']
|
24
|
+
end
|
25
|
+
metadata.each do |inid, indicator|
|
14
26
|
goal = inid.split('-')[0].to_i
|
15
27
|
goals[goal] = true
|
16
28
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "jekyll"
|
2
|
+
require_relative "helpers"
|
2
3
|
|
3
4
|
module JekyllOpenSdgPlugins
|
4
5
|
class CreateIndicators < Jekyll::Generator
|
@@ -25,8 +26,17 @@ module JekyllOpenSdgPlugins
|
|
25
26
|
if languages_public[language]
|
26
27
|
language_public = languages_public[language]
|
27
28
|
end
|
29
|
+
metadata = {}
|
30
|
+
if opensdg_translated_builds(site)
|
31
|
+
# If we are using translated builds, the metadata is underneath a
|
32
|
+
# language code.
|
33
|
+
metadata = site.data[language]['meta']
|
34
|
+
else
|
35
|
+
# Otherwise the 'meta' data is not underneath any language code.
|
36
|
+
metadata = site.data['meta']
|
37
|
+
end
|
28
38
|
# Loop through the indicators (using metadata as a list).
|
29
|
-
|
39
|
+
metadata.each do |inid, meta|
|
30
40
|
# Add the language subfolder for all except the default (first) language.
|
31
41
|
dir = index == 0 ? inid : File.join(language_public, inid)
|
32
42
|
# Create the indicator page.
|
@@ -2,61 +2,109 @@ require "jekyll"
|
|
2
2
|
require 'json'
|
3
3
|
require 'deep_merge'
|
4
4
|
require 'open-uri'
|
5
|
+
require_relative "helpers"
|
5
6
|
|
6
7
|
module JekyllOpenSdgPlugins
|
7
8
|
class FetchRemoteData < Jekyll::Generator
|
8
9
|
safe true
|
9
10
|
priority :highest
|
10
11
|
|
12
|
+
def download_build(prefix)
|
13
|
+
|
14
|
+
endpoints = {
|
15
|
+
'meta' => 'meta/all.json',
|
16
|
+
'headlines' => 'headline/all.json',
|
17
|
+
'schema' => 'meta/schema.json',
|
18
|
+
'reporting' => 'stats/reporting.json',
|
19
|
+
'translations' => 'translations/translations.json'
|
20
|
+
}
|
21
|
+
build = {}
|
22
|
+
endpoints.each do |key, value|
|
23
|
+
endpoint = prefix + '/' + value
|
24
|
+
begin
|
25
|
+
source = JSON.load(open(endpoint))
|
26
|
+
build[key] = source
|
27
|
+
rescue StandardError => e
|
28
|
+
puts e.message
|
29
|
+
# For backwards compatibility, we allow 'translations' to be missing.
|
30
|
+
if key != 'translations'
|
31
|
+
abort 'Unable to fetch remote data from: ' + endpoint
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
build
|
36
|
+
end
|
37
|
+
|
11
38
|
def generate(site)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
site.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
39
|
+
|
40
|
+
if site.config['remote_data_prefix']
|
41
|
+
prefix = site.config['remote_data_prefix']
|
42
|
+
|
43
|
+
# For below, make sure there is at least an empty hash at
|
44
|
+
# site.data.translations.
|
45
|
+
if !site.data.has_key?('translations')
|
46
|
+
site.data['translations'] = {}
|
47
|
+
end
|
48
|
+
|
49
|
+
# How do we tell, before data has been fetched, whether the site is
|
50
|
+
# using translated builds? Quick and dirty way - attempt a download
|
51
|
+
# of the non-tranlsated build. If it fails, assume translated builds.
|
52
|
+
translated_builds = false
|
53
|
+
begin
|
54
|
+
JSON.load(open(prefix + '/meta/all.json'))
|
55
|
+
rescue StandardError => e
|
56
|
+
translated_builds = true
|
57
|
+
end
|
58
|
+
|
59
|
+
if translated_builds
|
60
|
+
# For translated builds, we download a build for each language, and
|
61
|
+
# place them in "subfolders" (so to speak) of site.data.
|
62
|
+
site.config['languages'].each do |language|
|
63
|
+
data_target = site.data[language]
|
64
|
+
data_source = download_build(prefix + '/' + language)
|
65
|
+
if data_target
|
66
|
+
data_target.deep_merge(data_source)
|
67
|
+
else
|
68
|
+
site.data[language] = data_source
|
69
|
+
end
|
70
|
+
# Additionally, we move the language-specific translations to the
|
71
|
+
# site.data.translations location, where all translations are kept.
|
72
|
+
translation_target = site.data['translations'][language]
|
73
|
+
translation_source = site.data[language]['translations']
|
74
|
+
if translation_target
|
75
|
+
translation_target.deep_merge(translation_source)
|
76
|
+
else
|
77
|
+
site.data['translations'][language] = translation_source
|
40
78
|
end
|
41
79
|
end
|
80
|
+
else
|
81
|
+
# For untranslated builds, we download one build only, and place it
|
82
|
+
# in the "root" (so to speak) of site.data. Nothing else is needed.
|
83
|
+
target = site.data
|
84
|
+
source = download_build(prefix)
|
85
|
+
target.deep_merge(source)
|
42
86
|
end
|
87
|
+
else
|
88
|
+
abort 'The "remote_data_prefix" configuration setting is missing.'
|
89
|
+
end
|
43
90
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
puts e.message
|
58
|
-
abort 'Unable to fetch remote translation from: ' + endpoint
|
91
|
+
# Finally support the deprecated 'remote_translations' option.
|
92
|
+
# This is deprecated because translations should now be in the
|
93
|
+
# data repository, where they will be fetched in download_build().
|
94
|
+
if site.config['remote_translations']
|
95
|
+
key = 'translations'
|
96
|
+
target = site.data[key]
|
97
|
+
site.config['remote_translations'].each do |endpoint|
|
98
|
+
begin
|
99
|
+
source = JSON.load(open(endpoint))
|
100
|
+
if target
|
101
|
+
target.deep_merge(source)
|
102
|
+
else
|
103
|
+
site.data[key] = source
|
59
104
|
end
|
105
|
+
rescue StandardError => e
|
106
|
+
puts e.message
|
107
|
+
abort 'Unable to fetch remote translation from: ' + endpoint
|
60
108
|
end
|
61
109
|
end
|
62
110
|
end
|
@@ -50,3 +50,17 @@ def opensdg_translate_key(key, translations, language)
|
|
50
50
|
# Otherwise we must have drilled all they way.
|
51
51
|
return drilled
|
52
52
|
end
|
53
|
+
|
54
|
+
# Takes a site object and decides whether it is using translated builds.
|
55
|
+
def opensdg_translated_builds(site)
|
56
|
+
# Assume the site is using translated builds.
|
57
|
+
translated_builds = true
|
58
|
+
site.config['languages'].each do |language|
|
59
|
+
# If any languages don't have a key in site.data, the site is not using
|
60
|
+
# translated builds.
|
61
|
+
if !site.data.has_key? language
|
62
|
+
translated_builds = false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
return translated_builds
|
66
|
+
end
|
@@ -34,33 +34,44 @@ module JekyllOpenSdgPlugins
|
|
34
34
|
sort_order
|
35
35
|
end
|
36
36
|
|
37
|
+
# The Jekyll baseurl is user-configured, and can be inconsistent. This
|
38
|
+
# ensure it is consistent in whether it starts/ends with a slash.
|
39
|
+
def normalize_baseurl(baseurl)
|
40
|
+
if baseurl == ''
|
41
|
+
baseurl = '/'
|
42
|
+
end
|
43
|
+
if !baseurl.start_with? '/'
|
44
|
+
baseurl = '/' + baseurl
|
45
|
+
end
|
46
|
+
if !baseurl.end_with? '/'
|
47
|
+
baseurl = baseurl + '/'
|
48
|
+
end
|
49
|
+
baseurl
|
50
|
+
end
|
51
|
+
|
37
52
|
# Compute a URL for an item, given it's number.
|
38
53
|
def get_url(baseurl, language, number, languages, languages_public)
|
39
54
|
|
55
|
+
baseurl = normalize_baseurl(baseurl)
|
56
|
+
|
40
57
|
default_language = languages[0]
|
41
58
|
language_public = language
|
42
59
|
if languages_public && languages_public[language]
|
43
60
|
language_public = languages_public[language]
|
44
61
|
end
|
45
|
-
if baseurl == ''
|
46
|
-
baseurl = '/'
|
47
|
-
end
|
48
62
|
if default_language != language
|
49
63
|
baseurl += language_public + '/'
|
50
64
|
end
|
51
|
-
if !baseurl.start_with? '/'
|
52
|
-
baseurl = '/' + baseurl
|
53
|
-
end
|
54
|
-
if !baseurl.end_with? '/'
|
55
|
-
baseurl = baseurl + '/'
|
56
|
-
end
|
57
65
|
|
58
66
|
number = number.gsub('.', '-')
|
59
67
|
baseurl + number
|
60
68
|
end
|
61
69
|
|
62
70
|
# Get a Hash of all the URLs based on one particular one.
|
63
|
-
def get_all_urls(url, language, languages, languages_public)
|
71
|
+
def get_all_urls(url, language, languages, languages_public, baseurl)
|
72
|
+
|
73
|
+
baseurl = normalize_baseurl(baseurl)
|
74
|
+
|
64
75
|
language_public = language
|
65
76
|
if languages_public && languages_public[language]
|
66
77
|
language_public = languages_public[language]
|
@@ -78,7 +89,7 @@ module JekyllOpenSdgPlugins
|
|
78
89
|
language => url
|
79
90
|
}
|
80
91
|
if language != default_language
|
81
|
-
urls[default_language] = url_without_language
|
92
|
+
urls[default_language] = baseurl + url_without_language
|
82
93
|
end
|
83
94
|
languages.each do |other_language|
|
84
95
|
if other_language == language
|
@@ -91,7 +102,7 @@ module JekyllOpenSdgPlugins
|
|
91
102
|
if languages_public && languages_public[other_language]
|
92
103
|
other_language_public = languages_public[other_language]
|
93
104
|
end
|
94
|
-
urls[other_language] =
|
105
|
+
urls[other_language] = baseurl + other_language_public + url_without_language
|
95
106
|
end
|
96
107
|
urls
|
97
108
|
end
|
@@ -210,7 +221,7 @@ module JekyllOpenSdgPlugins
|
|
210
221
|
meta_key = indicator_number.gsub('.', '-')
|
211
222
|
# The location of the metadata is different depending on whether we are
|
212
223
|
# using "translated_builds" or not.
|
213
|
-
if site
|
224
|
+
if opensdg_translated_builds(site)
|
214
225
|
meta = site.data[language]['meta'][meta_key]
|
215
226
|
else
|
216
227
|
meta = site.data['meta'][meta_key]
|
@@ -299,9 +310,15 @@ module JekyllOpenSdgPlugins
|
|
299
310
|
doc.data['goals'] = available_goals[language]
|
300
311
|
doc.data['targets'] = available_targets[language]
|
301
312
|
doc.data['indicators'] = available_indicators[language]
|
302
|
-
doc.data['t'] = site.data['translations'][language]
|
303
313
|
doc.data['baseurl'] = get_url(baseurl, language, '', languages, languages_public)
|
304
|
-
doc.data['url_by_language'] = get_all_urls(doc.url, language, languages, languages_public)
|
314
|
+
doc.data['url_by_language'] = get_all_urls(doc.url, language, languages, languages_public, baseurl)
|
315
|
+
doc.data['t'] = site.data['translations'][language]
|
316
|
+
|
317
|
+
# Set the remote_data_prefix for this indicator.
|
318
|
+
doc.data['remote_data_prefix'] = site.config['remote_data_prefix']
|
319
|
+
if opensdg_translated_builds(site)
|
320
|
+
doc.data['remote_data_prefix'] += '/' + language
|
321
|
+
end
|
305
322
|
|
306
323
|
if collection == 'indicators'
|
307
324
|
# For indicators we also set the current indicator/target/goal.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-open-sdg-plugins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brock Fanning
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -55,9 +55,7 @@ files:
|
|
55
55
|
- lib/jekyll-open-sdg-plugins/create_indicators.rb
|
56
56
|
- lib/jekyll-open-sdg-plugins/create_pages.rb
|
57
57
|
- lib/jekyll-open-sdg-plugins/fetch_remote_data.rb
|
58
|
-
- lib/jekyll-open-sdg-plugins/get_indicator_name.rb
|
59
58
|
- lib/jekyll-open-sdg-plugins/helpers.rb
|
60
|
-
- lib/jekyll-open-sdg-plugins/multilingual_metadata.rb
|
61
59
|
- lib/jekyll-open-sdg-plugins/sdg_variables.rb
|
62
60
|
- lib/jekyll-open-sdg-plugins/translate_key.rb
|
63
61
|
- lib/jekyll-open-sdg-plugins/version.rb
|
@@ -1,146 +0,0 @@
|
|
1
|
-
require "jekyll"
|
2
|
-
require_relative "helpers"
|
3
|
-
|
4
|
-
# This plugin will be removed before version 1.0.0.
|
5
|
-
# Do not rely on this!
|
6
|
-
|
7
|
-
module Jekyll
|
8
|
-
module IndicatorName
|
9
|
-
|
10
|
-
# Takes an indicator ID (dot-delimited or dash-delimited) and returns the
|
11
|
-
# translated indicator name (according to the current language). This lookup
|
12
|
-
# is as forgiving as possible, to make sure that something is always there.
|
13
|
-
#
|
14
|
-
# The order of preference in the lookup is:
|
15
|
-
#
|
16
|
-
# 1. "indicator_name_national" in translated metadata - subfolder approach
|
17
|
-
# 2. "indicator_name_national" in translated metadata - translation key approach
|
18
|
-
# 3. If the default language, "indicator_name_national" in non-translated metadata
|
19
|
-
# 4. If a global indicator, translated global indicator name
|
20
|
-
# 5. "indicator_name" in translated metadata - subfolder approach
|
21
|
-
# 6. "indicator_name" in translated metadata - translation key approach
|
22
|
-
# 7. "indicator_name" in non-translated metadata
|
23
|
-
# 8. Finally, fall back to the indicator ID
|
24
|
-
|
25
|
-
def get_indicator_name(inid)
|
26
|
-
|
27
|
-
# Safety code - abort now if id is nil.
|
28
|
-
if inid.nil?
|
29
|
-
return ""
|
30
|
-
end
|
31
|
-
|
32
|
-
# Also make sure it is a string, and otherwise just return it.
|
33
|
-
if not inid.is_a? String
|
34
|
-
return inid
|
35
|
-
end
|
36
|
-
|
37
|
-
# More safety code - abort now if inid is empty.
|
38
|
-
if inid.empty?
|
39
|
-
return ""
|
40
|
-
end
|
41
|
-
|
42
|
-
# Normalize around dash-delimited inids.
|
43
|
-
inid = inid.gsub('.', '-')
|
44
|
-
|
45
|
-
# Some variables to help our lookups later.
|
46
|
-
page = @context.environments.first['page']
|
47
|
-
language = page['language']
|
48
|
-
languages = @context.registers[:site].config['languages']
|
49
|
-
data = @context.registers[:site].data
|
50
|
-
translations = data['translations']
|
51
|
-
meta = data['meta'][inid]
|
52
|
-
|
53
|
-
# The metadata fields that we'll seek, first "override" then "default".
|
54
|
-
override_field = 'indicator_name_national'
|
55
|
-
default_field = 'indicator_name'
|
56
|
-
|
57
|
-
name = false
|
58
|
-
|
59
|
-
# 1. Is there a subfolder translation of the override field?
|
60
|
-
if meta and meta.has_key? language
|
61
|
-
if !name and meta[language].has_key? override_field
|
62
|
-
name = meta[language][override_field]
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# 2. Is the override field actually a "translation key"?
|
67
|
-
if !name
|
68
|
-
if meta and meta.has_key? override_field
|
69
|
-
untranslated = meta[override_field]
|
70
|
-
translated = opensdg_translate_key(untranslated, translations, language)
|
71
|
-
if untranslated != translated
|
72
|
-
# If the opensdg_translate_key() function returned something else,
|
73
|
-
# that means it was an actual "translation key".
|
74
|
-
name = translated
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# 3. If this is the default language, use the non-translated override
|
80
|
-
# field, if available.
|
81
|
-
if !name
|
82
|
-
if language == languages[0]
|
83
|
-
if meta and meta.has_key? override_field
|
84
|
-
name = meta[override_field]
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
# 4. Is this a global indicator with a translation?
|
90
|
-
if !name
|
91
|
-
title_key = inid + '-title'
|
92
|
-
# For backwards compatibility, look for both dot and dash-delimited keys.
|
93
|
-
title_key_dots = inid.gsub('-', '.') + '-title'
|
94
|
-
if translations.has_key? language
|
95
|
-
if translations[language].has_key? 'global_indicators'
|
96
|
-
if translations[language]['global_indicators'].has_key? title_key
|
97
|
-
name = translations[language]['global_indicators'][title_key]
|
98
|
-
elsif translations[language]['global_indicators'].has_key? title_key_dots
|
99
|
-
name = translations[language]['global_indicators'][title_key_dots]
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
# 5. Is there a subfolder translation of the default field?
|
106
|
-
if !name
|
107
|
-
if meta and meta.has_key? language
|
108
|
-
if !name and meta[language].has_key? default_field
|
109
|
-
name = meta[language][default_field]
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
# 6. Is the default field actually a "translation key"?
|
115
|
-
if !name
|
116
|
-
if meta and meta.has_key? default_field
|
117
|
-
untranslated = meta[default_field]
|
118
|
-
translated = opensdg_translate_key(untranslated, translations, language)
|
119
|
-
if untranslated != translated
|
120
|
-
# If the opensdg_translate_key() function returned something else,
|
121
|
-
# that means it was an actual "translation key".
|
122
|
-
name = translated
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# 7. Use the non-translated default field, if available.
|
128
|
-
if !name
|
129
|
-
if meta and meta.has_key? default_field
|
130
|
-
name = meta[default_field]
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
# 8. Still here? Just return the inid.
|
135
|
-
if !name
|
136
|
-
name = inid
|
137
|
-
end
|
138
|
-
|
139
|
-
# Finally return the name with key translation for good measure.
|
140
|
-
return opensdg_translate_key(name, translations, language)
|
141
|
-
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
Liquid::Template.register_filter(Jekyll::IndicatorName)
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require "jekyll"
|
2
|
-
|
3
|
-
# This plugin will be removed before version 1.0.0.
|
4
|
-
# Do not rely on this!
|
5
|
-
|
6
|
-
module JekyllOpenSdgPlugins
|
7
|
-
class MultilingualMetadataGenerator < Jekyll::Generator
|
8
|
-
safe true
|
9
|
-
priority :low
|
10
|
-
|
11
|
-
def generate(site)
|
12
|
-
# Make sure that the translated metadata contains a complete set of values
|
13
|
-
# including non-translated metadata as a fallback. This allows us to treat
|
14
|
-
# the translated metadata as complete when used in layouts and includes.
|
15
|
-
if site.config['languages']
|
16
|
-
site.config['languages'].each do |language|
|
17
|
-
site.data['meta'].each do |indicator_id, meta|
|
18
|
-
if meta[language]
|
19
|
-
meta.each do |meta_key, meta_value|
|
20
|
-
unless site.config['languages'].include? meta_key
|
21
|
-
if !meta[language][meta_key]
|
22
|
-
meta[language][meta_key] = meta_value
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|