Skip to content

Commit d69f4f0

Browse files
committed
Change redirects to use /:lang subpath
1 parent 8f3836a commit d69f4f0

15 files changed

+147
-97
lines changed

-debug.html

+10
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,14 @@
1616

1717
<h2>Redirects</h2>
1818
<pre><code>{% include_relative _redirects %}</code></pre>
19+
20+
<h3>Pages</h2>
21+
22+
{% assign urls_sorted = site.pages | map: "url" | sort %}
23+
24+
<ul>
25+
{% for url in urls_sorted %}
26+
<li><a href="{{url}}">{{url}}</a></li>
27+
{% endfor %}
28+
</ul>
1929
</div>

.ruby-version

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2.3.1

Gemfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ gem 'jekyll'
44
gem 'jekyll-redirect-from'
55
gem 'jekyll-paginate'
66
gem 'crowdin-cli'
7-
gem 'wdm', '>= 0.1.0' if Gem.win_platform?
7+
gem 'wdm', '>= 0.1.0' if Gem.win_platform?

Makefile

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@ serve-production: test-jekyll
2222
build-production: test-jekyll
2323
@make crowdin-download
2424
@JEKYLL_ENV=production jekyll build
25+
@ruby ./scripts/validate-translations.rb
2526

2627
crowdin-upload: test-crowdin
2728
@crowdin-cli upload sources --auto-update -b master
2829

2930
crowdin-download: test-crowdin
3031
@crowdin-cli download -b master
31-
@ruby ./scripts/normalize-frontmatter.rb
32-
@ruby ./scripts/normalize-toc.rb
32+
@ruby ./scripts/remove-unused-languages.rb
33+
@ruby ./scripts/normalize-translations.rb
3334

3435
###
3536
# Misc stuff:

_data/languages.yml

+4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
tag: ar
1111
enabled: No
1212
accept_languages: ["ar-sa", "ar-iq", "ar-eg", "ar-ly", "ar-dz", "ar-ma", "ar-tn", "ar-om", "ar-ye", "ar-sy", "ar-jo", "ar-lb", "ar-kw", "ar-ae", "ar-bh", "ar-qa"]
13+
- name: Bosanski
14+
tag: bs-BA
15+
enabled: No
16+
accept_languages: ["bs-BA"]
1317
- name: Català
1418
tag: ca
1519
enabled: No

_includes/navigation.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<nav class="navbar navbar-static-top navbar-light">
44
<div class="container">
5-
<a {% if vars_active_language.tag == "en" %} href="{{site.baseurl}}/" {% else %} href="{{url_base}}/" {% endif %}>
5+
<a href="{{url_base}}/">
66
{% include svg/yarn-kitten-full.svg class="navbar-logo" %}
77
<span class="sr-only">Yarn</span>
88
</a>
@@ -38,7 +38,7 @@
3838
<div class="dropdown-menu" aria-labelledby="dropdownNavLanguage" id="dropdownNavLanguageMenu">
3939
{% for language in site.data.languages %}
4040
{% if language.enabled %}
41-
<a href="{{site.baseurl}}/lang/{{language.tag}}/{{vars_url_relative}}"
41+
<a href="{{site.baseurl}}/{{language.tag}}/{{vars_url_relative}}"
4242
class="dropdown-item{% if vars_active_language.tag == language.tag %} active{% endif %}"
4343
data-lang="{{language.accept_languages[0]}}">
4444
{{language.name}}

_includes/vars.html

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
1+
{% capture __vars %}
12
{% assign vars_url_parts = page.url | split: "/" | shift %}
23
{% assign vars_url_language = vars_url_parts[1] %}
34
{% assign vars_url_relative = vars_url_parts | shift | shift | join: "/" | replace: ".html", "" %}
45
{% assign vars_temp_matched_languages = site.data.languages | where: "tag", vars_url_language %}
56
{% assign vars_active_language = vars_temp_matched_languages[0] %}
7+
68
{% unless vars_active_language %}
79
{% assign vars_active_language = site.data.languages[0] %}
10+
{% assign vars_production_url_base_language = "" %}
11+
{% else %}
12+
{% assign vars_production_url_base_language = "/" | append: vars_active_language.tag %}
813
{% endunless %}
14+
915
{% assign i18n = site.data.i18n[vars_active_language.tag] %}
1016

1117
{% if jekyll.environment == "development" %}
1218
{% assign url_base = site.baseurl | append: "/lang/" | append: vars_active_language.tag %}
1319
{% else %}
14-
{% assign url_base = site.baseurl %}
20+
{% assign url_base = site.baseurl | append: vars_production_url_base_language %}
1521
{% endif %}
22+
{% endcapture %}

_layouts/default.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@
5858
var langMenuItem = langMenuItems[i];
5959

6060
langMenuItem.addEventListener('click', function(event) {
61-
event.preventDefault();
6261
var target = event.currentTarget;
6362
var lang = target.dataset.lang;
64-
document.cookie = 'nf_lang=' + lang;
65-
location.reload();
63+
var date = new Date();
64+
date.setFullYear(date.getFullYear() + 1);
65+
document.cookie = 'nf_lang=' + lang + ';path=/;expires=' + date.toUTCString();
6666
});
6767
}
6868
</script>

_redirects

+28-39
Original file line numberDiff line numberDiff line change
@@ -18,53 +18,42 @@ layout: null
1818
/latest-rc.msi https://github.com/yarnpkg/yarn/releases/download/v{{site.latest_rc_version}}/yarn-{{site.latest_rc_version}}.msi 302
1919
/latest-rc.deb https://github.com/yarnpkg/yarn/releases/download/v{{site.latest_rc_version}}/yarn_{{site.latest_rc_version}}_all.deb 302
2020
/latest-rc.rpm https://github.com/yarnpkg/yarn/releases/download/v{{site.latest_rc_version}}/yarn-{{site.latest_rc_version}}-1.noarch.rpm 302
21-
2221
{% capture _redirects %}
2322

24-
{% assign urls_sorted = site.pages | map: "url" | sort %}
25-
{% assign urls_filtered = "" | split: "," | pop %}
26-
27-
{% for url in urls_sorted %}
28-
{% assign first_nine_chars = url | slice: 0, 9 %}
29-
{% if first_nine_chars == "/lang/en/" %}
30-
{% assign url_stripped = url | replace: "/lang/en/", "/" %}
31-
{% assign urls_filtered = urls_filtered | push: url_stripped %}
32-
{% endif %}
33-
{% endfor %}
34-
35-
{% assign redirects = "" | split: "," | pop %}
36-
37-
{% assign redirects = redirects | push: "# old /en/ url redirects" %}
38-
39-
{% for url in urls_filtered %}
40-
{% capture redirect %}/en{{url}} {{url}} 301{% endcapture %}
41-
{% assign redirects = redirects | push: redirect %}
42-
{% endfor %}
23+
{% assign urls_sorted = site.pages | map: "url" | sort %}
24+
{% assign urls_filtered = "" | split: "," | pop %}
4325

44-
{% assign redirects = redirects | push: "" %}
45-
{% assign redirects = redirects | push: "# language redirects" %}
46-
47-
{% for url in urls_filtered %}
48-
{% for language in site.data.languages %}
49-
{% if language.enabled %}
50-
{% for accept_language in language.accept_languages %}
51-
{% capture redirect %}{{url}} /lang/{{language.tag}}{{url}} 200 Language={{accept_language}}{% endcapture %}
52-
{% assign redirects = redirects | push: redirect %}
53-
{% endfor %}
26+
{% for url in urls_sorted %}
27+
{% assign first_nine_chars = url | slice: 0, 9 %}
28+
{% if first_nine_chars == "/lang/en/" %}
29+
{% assign url_stripped = url | replace: "/lang/en/", "/" %}
30+
{% assign urls_filtered = urls_filtered | push: url_stripped %}
5431
{% endif %}
5532
{% endfor %}
56-
{% endfor %}
57-
58-
{% assign redirects = redirects | push: "" %}
59-
{% assign redirects = redirects | push: "# default redirects" %}
6033

61-
{% for url in urls_filtered %}
62-
{% capture redirect %}{{url}} /lang/en{{url}} 200{% endcapture %}
63-
{% assign redirects = redirects | push: redirect %}
64-
{% endfor %}
34+
{% assign redirectsBase = "" | split: "," | pop %}
35+
{% assign redirectsLang = "" | split: "," | pop %}
36+
37+
{% for url in urls_filtered %}
38+
{% for language in site.data.languages %}
39+
{% if language.enabled %}
40+
{% for accept_language in language.accept_languages %}
41+
{% capture redirect %}{{url}} /{{language.tag}}{{url}} 302 Language={{accept_language}}{% endcapture %}
42+
{% assign redirectsBase = redirectsBase | push: redirect %}
43+
{% endfor %}
44+
45+
{% capture redirect %}/{{language.tag}}{{url}} /lang/{{language.tag}}{{url}} 200{% endcapture %}
46+
{% assign redirectsLang = redirectsLang | push: redirect %}
47+
{% endif %}
48+
{% endfor %}
49+
{% endfor %}
6550

6651
{% capture newline %}
6752
{% endcapture %}
6853

6954
{% endcapture %}
70-
{{redirects | join: newline}}
55+
# With Language
56+
{{redirectsLang | join: newline}}
57+
58+
# Without Language
59+
{{redirectsBase | join: newline}}

index.html

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<html>
66
<head>
77
<meta charset="utf-8">
8+
<meta http-equiv="refresh" content="0;URL='lang/en/'" />
89
<title></title>
910
</head>
1011
<body>

scripts/normalize-frontmatter.rb

-33
This file was deleted.

scripts/normalize-toc.rb

-16
This file was deleted.

scripts/normalize-translations.rb

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
puts "Normalizing toc..."
2+
3+
# frontmatterSourceRegex = %r!\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)!m
4+
# frontmatterTargetRegex = %r!\A(\* \* \*\s*\n.*?\n?)^((\* \* \*|\.\.\.)\s*$\n?)!m
5+
6+
frontmatterSourceRegex = /^---.*?---/m
7+
frontmatterTargetRegex = /^\* \* \*.*?\* \* \*/m
8+
9+
tocRegex = /\[\]\(#toc-(.*?)\)\{#toc-.*?\}/
10+
11+
langsDir = File.join('.', 'lang')
12+
langs = Dir.entries(langsDir).drop(2).reject {|lang| lang == 'en' }
13+
14+
# Build up a hashmap with all of the source front-matters
15+
# { relativePath => frontMatter }
16+
englishFiles = Dir.glob(File.join(langsDir, 'en', '**', '*.*'))
17+
english = {}
18+
englishFiles.each {|file|
19+
path = file.sub(File.join(langsDir, 'en'), '')
20+
contents = IO.read file
21+
contents = contents.unicode_normalize
22+
result = contents.match frontmatterSourceRegex
23+
english[path] = result
24+
}
25+
26+
langs.each {|lang|
27+
files = Dir.glob(File.join(langsDir, lang, '**', '*.*'))
28+
29+
files.each {|file|
30+
puts "- Replacing #{file}"
31+
32+
path = file.sub(File.join(langsDir, lang), '')
33+
contents = IO.read file
34+
frontmatter = english[path]
35+
36+
result = contents
37+
result = result.unicode_normalize
38+
result = result.gsub /\r\n?/, "\n"
39+
result = result + "\n"
40+
result = result.gsub(tocRegex, '<a class="toc" id="toc-\1" href="#toc-\1"></a>')
41+
result = result.gsub(frontmatterTargetRegex) {|c| frontmatter } if frontmatter
42+
43+
File.write(file, result)
44+
}
45+
}

scripts/remove-unused-languages.rb

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
require "yaml"
2+
3+
puts "Removing unused languages..."
4+
5+
languagesFile = File.join('.', '_data', 'languages.yml')
6+
languages = YAML.load_file(languagesFile)
7+
8+
languagesEnabledHash = {}
9+
languages.each {|language|
10+
if language['enabled']
11+
languagesEnabledHash[ language['tag'] ] = true
12+
end
13+
}
14+
15+
langDirectory = File.join('.', 'lang')
16+
17+
langs = Dir.entries(langDirectory).select { |entry|
18+
File.directory? File.join(langDirectory, entry) and !(entry == '.' || entry == '..')
19+
}
20+
21+
langs.each {|lang|
22+
if languagesEnabledHash[lang]
23+
puts "- Leaving #{lang}"
24+
else
25+
puts "- Removing #{lang}..."
26+
system "rm _data/i18n/#{lang}.yml"
27+
system "rm -r lang/#{lang}"
28+
end
29+
}

scripts/validate-translations.rb

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
puts "Validating translations..."
2+
3+
mdFiles = Dir.glob(File.join('.', '_site', 'lang', '**', '*.md'))
4+
5+
if mdFiles.size > 0
6+
puts "Error: Found translations still in markdown"
7+
puts mdFiles
8+
exit 1
9+
else
10+
puts "Valid."
11+
exit 0
12+
end

0 commit comments

Comments
 (0)