Skip to content

Commit 7e3229e

Browse files
authored
Fix translated glossary links (#17734)
* npm start should be ja * Add special handling for glossary headings * Don't sort glossary * Use English slug to maintain anchor, re-add sort
1 parent 01e5204 commit 7e3229e

4 files changed

Lines changed: 24 additions & 8 deletions

File tree

lib/get-english-headings.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,22 @@ const headingRegex = /^###?#? (.*?)$/gm
44
// for any translated page, first get corresponding English markdown
55
// then get the headings on both the translated and English pageMap
66
// finally, create a map of translation:English for all headings on the page
7-
module.exports = function getEnglishHeadings (page, pageMap) {
7+
module.exports = function getEnglishHeadings (page, context) {
8+
// Special handling for glossaries, because their headings are
9+
// generated programatically.
10+
if (page.relativePath.endsWith('/github-glossary.md')) {
11+
// Return an object of `{ localized-term: english-slug }`
12+
const languageGlossary = context.site.data.glossaries.external
13+
return languageGlossary.reduce((prev, curr) => {
14+
prev[curr.term] = curr.slug
15+
return prev
16+
}, {})
17+
}
18+
819
const translatedHeadings = page.markdown.match(headingRegex)
920
if (!translatedHeadings) return
1021

11-
const englishPage = pageMap[`/en/${page.relativePath.replace(/.md$/, '')}`]
22+
const englishPage = context.pages[`/en/${page.relativePath.replace(/.md$/, '')}`]
1223
if (!englishPage) return
1324

1425
// FIX there may be bugs if English headings are updated before Crowdin syncs up :/

lib/page.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class Page {
138138
async _render (context) {
139139
// use English IDs/anchors for translated headings, so links don't break (see #8572)
140140
if (this.languageCode !== 'en') {
141-
const englishHeadings = getEnglishHeadings(this, context.pages)
141+
const englishHeadings = getEnglishHeadings(this, context)
142142
context.englishHeadings = englishHeadings
143143
}
144144

lib/site-data.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,18 @@ module.exports = function loadSiteData () {
3636
}
3737
}
3838

39-
// Sort glossary by language-specific function
4039
for (const language of Object.values(languages)) {
41-
if (language.code === 'en') continue
42-
siteData[language.code].site.data.glossaries.external
43-
.sort(
40+
// Add the English `slug` to each item, to link a consistent anchor
41+
siteData[language.code].site.data.glossaries.external.forEach((item, i) => {
42+
item.slug = siteData.en.site.data.glossaries.external[i].term
43+
})
44+
45+
// Sort glossary by language-specific function
46+
if (language.code !== 'en') {
47+
siteData[language.code].site.data.glossaries.external.sort(
4448
(a, b) => a.term.localeCompare(b.term, language.code)
4549
)
50+
}
4651
}
4752

4853
return siteData

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
"website-scraper": "^4.2.0"
162162
},
163163
"scripts": {
164-
"start": "cross-env NODE_ENV=development ENABLED_LANGUAGES='en,cn' nodemon server.js",
164+
"start": "cross-env NODE_ENV=development ENABLED_LANGUAGES='en,ja' nodemon server.js",
165165
"dev": "npm start",
166166
"debug": "cross-env NODE_ENV=development ENABLED_LANGUAGES='en,ja' nodemon --inspect server.js",
167167
"rest-dev": "script/rest/update-files.js && npm run dev",

0 commit comments

Comments
 (0)