diff --git a/build/engines.js b/build/engines.js index b08a05267..dd0e005df 100644 --- a/build/engines.js +++ b/build/engines.js @@ -16,6 +16,20 @@ const i18n = require('./lang'); const mAnchor = require('markdown-it-anchor'); +// Process translation links (so /en/what-is-gender maps to /pt/que-e-gênero) +const translationLinksRaw = require('../translation-links.json'); +const translationLinksMap = {}; +for (const group of translationLinksRaw) { + for (const [lang, url] of Object.entries(group)) { + if (url in translationLinksMap) { + console.log("URL '"+url+"' appears repeatedly on translation-links.json"); + process.exit(1); + } else { + translationLinksMap[url] = group; + } + } +} + const markdownEngines = { full: markdownIt({ html: true, @@ -181,12 +195,14 @@ class Injectables { helpers () { return { - import: this.import(), - markdown: this.markdown(), - icon: this.icon(), - prod: this.production(), - rev: this.rev(), - lang: this.lang(), + import: this.import(), + markdown: this.markdown(), + icon: this.icon(), + translink: this.translink(), + prod: this.production(), + rev: this.rev(), + lang: this.lang(), + lang2: this.lang2() }; } @@ -273,6 +289,7 @@ class Injectables { }; } + // Usage {{lang 'MY-STRING'}} lang () { return function (key, ...args) { const { resolve: rval } = args.pop(); @@ -281,4 +298,38 @@ class Injectables { }; } + // Usage {{lang2 other-lang 'MY-STRING'}} + lang2 () { + return function (lang, key, ...args) { + const { resolve: rval } = args.pop(); + return i18n(lang, key, ...args); + }; + } + + // Find the translation links for the current page from the file translation-links.json + // + // If a single argument is present, a single string will be returned, otherwise an + // object with links for all languages will be returned + // + // Usage: {{translink new-lang fallback-url}} + translink () { + return function (...raw_args) { + let { resolve: rval, arguments: args } = raw_args.pop(); + args.push(undefined, undefined); + const lang = args[0]; + const fallback = args[1]; + const page_url = rval('@root.this.url').trim(); + + let ans = translationLinksMap[page_url] || {}; + if (lang !== undefined) { + ans = ans[lang]; + } + + if (ans === undefined) { + ans = fallback; + } + + return ans; + }; + } } diff --git a/gulp/index.js b/gulp/index.js index aabcd9f80..f3ace05a5 100644 --- a/gulp/index.js +++ b/gulp/index.js @@ -49,6 +49,7 @@ exports.testpush = pushToProd.dryrun; function watcher () { watch([ + 'translation-links.json' 'public/**/*.{md,hbs,html}', 'posts/**/*.{md,hbs,html}', 'templates/*.{md,hbs,html}', diff --git a/package.json b/package.json index cab08355c..db602f7a9 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "title": "That's Gender Dysphoria, FYI", "domain": "genderdysphoria.fyi", "lang": "en", + "allLangs": ["en", "zh", "fr", "de", "hu", "pl"], "siteUrl": "https://genderdysphoria.fyi", "description": "A resource for those questioning their gender, already on a gender journey, or simply wanting to learn more about what it is to be transgender.", "creator": "TwippingVanilla", diff --git a/public/de/_strings.js b/public/de/_strings.js index 19004971f..2dd4880b5 100644 --- a/public/de/_strings.js +++ b/public/de/_strings.js @@ -1,16 +1,19 @@ module.exports = exports = { + MENU_LANGUAGE_SHORT: 'Deutsch (DE)', + MENU_LANGUAGE_LONG: 'Deutsch (German)', SITE_TITLE: 'Das ist Gender Dysphorie', + HEADER_TITLE: 'FYI, das ist Gender Dysphorie', SITE_DESCRIPTION: 'Eine Informationsquelle für all jene, die ihr Geschlecht in Frage stellen, schon auf Ihrer persönlichen gender-Reise sind oder einfach mehr darüber lernen möchten was es bedeutet Transgender zu sein.', + + TRANS_TWITTER_TOPICS: 'Trans Twitter Topics', + TWEET_DATE_FORMAT: 'HH:mm - EEE, LLL do, yyyy', + MISSING_TWEET_FOR: 'Missing tweet for ', + QUOTED_TWEET_UNAVAILABLE: 'Quoted Tweet Unavailable', - HEADER_TITLE: 'FYI, das ist Gender Dysphorie', PATREON_FOOTER_BODY: 'Diese Seite wurde dank der Unterstützung der Community ermöglicht. Wenn Ihnen diese Seite geholfen hat dann können Sie via Patreon oder Ko-fi Spenden.', PATREON_FOOTER_THANKS: 'Ein besonderes Dankeschön geht an folgende Patreon Unterstützer:', FOOTER_COPYRIGHT: 'Dieser Text, der Website-Code und die ursprünglichen Bilder sind lizensiert unter CC BY-NC-SA.', FOOTER_COPYRIGHT2: 'und anderen', - - 'TRANS_TWITTER_TOPICS': 'Trans Twitter Topics', - - MENU_LANGUAGE: 'Deutsch (DE)', }; diff --git a/public/en/_strings.js b/public/en/_strings.js index 76e104762..6ae241aa1 100644 --- a/public/en/_strings.js +++ b/public/en/_strings.js @@ -1,16 +1,19 @@ module.exports = exports = { + MENU_LANGUAGE_SHORT: 'English (EN)', + MENU_LANGUAGE_LONG: 'English (EN)', SITE_TITLE: 'That\'s Gender Dysphoria, FYI', + HEADER_TITLE: 'That\'s Gender Dysphoria, FYI', SITE_DESCRIPTION: 'A resource for those questioning their gender, already on a gender journey, or simply wanting to learn more about what it is to be transgender.', - HEADER_TITLE: 'That\'s Gender Dysphoria, FYI', + TRANS_TWITTER_TOPICS: 'Trans Twitter Topics', + TWEET_DATE_FORMAT: 'h:mm aa - EEE, LLL do, yyyy', + MISSING_TWEET_FOR: 'Missing tweet for ', + QUOTED_TWEET_UNAVAILABLE: 'Quoted Tweet Unavailable', + PATREON_FOOTER_BODY: 'This site is made possible thanks to contributions from the community. If you have found this site invaluable, please consider making a pledge on patreon or a donation via Ko-fi.', PATREON_FOOTER_THANKS: 'Special thanks to the following patreon supporters:', FOOTER_COPYRIGHT: 'Site text, website code and original graphics are licensed CC BY-NC-SA.', - FOOTER_COPYRIGHT2: 'and Other Contributors', - - 'TRANS_TWITTER_TOPICS': 'Trans Twitter Topics', - - MENU_LANGUAGE: 'English (EN)', + FOOTER_COPYRIGHT2: 'and Other Contributors' }; diff --git a/public/es/_strings.js b/public/es/_strings.js index 37bfb9acc..8f8107ffc 100644 --- a/public/es/_strings.js +++ b/public/es/_strings.js @@ -1,9 +1,20 @@ module.exports = exports = { + MENU_LANGUAGE_SHORT: 'Español (ES)', + MENU_LANGUAGE_LONG: 'Español (Spanish)', SITE_TITLE: 'Eso es Disforia de Género, PSI', - HEADER_TITLE: 'Eso es Disforia de Género, PSI', + SITE_DESCRIPTION: 'Un recurso para aquellos que cuestionan su género, o que ya están en un viaje de género o simplemente quieren aprender más sobre lo que es ser transgénero.', + 'TRANS_TWITTER_TOPICS': 'Temas Trans en Twitter', + + TRANS_TWITTER_TOPICS: 'Trans Twitter Topics', + TWEET_DATE_FORMAT: 'HH:mm aa - EEE, LLL do, yyyy', + MISSING_TWEET_FOR: 'Missing tweet for ', + QUOTED_TWEET_UNAVAILABLE: 'Quoted Tweet Unavailable', - MENU_LANGUAGE: 'Español (ES)', + PATREON_FOOTER_BODY: 'This site is made possible thanks to contributions from the community. If you have found this site invaluable, please consider making a pledge on patreon or a donation via Ko-fi.', + PATREON_FOOTER_THANKS: 'Special thanks to the following patreon supporters:', + FOOTER_COPYRIGHT: 'Site text, website code and original graphics are licensed CC BY-NC-SA.', + FOOTER_COPYRIGHT2: 'and Other Contributors' }; diff --git a/public/fr/_strings.js b/public/fr/_strings.js index dc8b98f1e..d0834b493 100644 --- a/public/fr/_strings.js +++ b/public/fr/_strings.js @@ -1,16 +1,19 @@ module.exports = exports = { + MENU_LANGUAGE_SHORT: 'Français (FR)', + MENU_LANGUAGE_LONG: 'Français (French)', SITE_TITLE: 'C\'est la dysphorie de genre, pour info', + HEADER_TITLE: 'C\'est la dysphorie de genre, pour info', SITE_DESCRIPTION: 'Une ressource pour les personnes qui s\'interrogent sur leur genre, qui sont déjà engagées dans un parcours de changement de genre ou qui veulent simplement en savoir plus sur ce que c\'est que d\'être transgenre.', - HEADER_TITLE: 'C\'est la dysphorie de genre, pour info', + TRANS_TWITTER_TOPICS: 'Topics de Trans Twitter', + TWEET_DATE_FORMAT: 'HH:mm - EEE, LLL do, yyyy', + MISSING_TWEET_FOR: 'Missing tweet for ', + QUOTED_TWEET_UNAVAILABLE: 'Quoted Tweet Unavailable', + PATREON_FOOTER_BODY: 'Ce site est rendu possible grâce aux contributions de la communauté. Si tu as trouvé ce site inestimable, pense à faire un don sur patreon ou un don via Ko-fi.', PATREON_FOOTER_THANKS: 'Nous remercions tout particulièrement les supporters patreon suivants :', FOOTER_COPYRIGHT: 'Le texte du site, le code du site et les graphiques originaux sont sous license CC BY-NC-SA.', FOOTER_COPYRIGHT2: 'et autres contributeurs', - - 'TRANS_TWITTER_TOPICS': 'Topics de Trans Twitter', - - MENU_LANGUAGE: 'Français (FR)', }; diff --git a/public/hu/_strings.js b/public/hu/_strings.js index 823b69aae..e639e6fdb 100644 --- a/public/hu/_strings.js +++ b/public/hu/_strings.js @@ -1,16 +1,19 @@ module.exports = exports = { + MENU_LANGUAGE_SHORT: 'Magyar (HU)', + MENU_LANGUAGE_LONG: 'Magyar (Hungarian)', SITE_TITLE: 'Ez a Gender Diszfória, FYI', + HEADER_TITLE: 'Ez a Gender Diszfória, FYI', SITE_DESCRIPTION: 'Forrás azoknak, akik megkérdőjelezik a nemüket, akik már elindultak a saját útjukon, vagy egyszerűen csak többet szeretnének megtudni arról, hogy mit jelent transzneműnek lenni.', - HEADER_TITLE: 'Ez a Gender Diszfória, FYI', + TRANS_TWITTER_TOPICS: 'Trans Twitter Topics', + TWEET_DATE_FORMAT: 'HH:mm - EEE, LLL do, yyyy', + MISSING_TWEET_FOR: 'Missing tweet for ', + QUOTED_TWEET_UNAVAILABLE: 'Quoted Tweet Unavailable', + PATREON_FOOTER_BODY: 'Ez az oldal a közösség hozzájárulásának köszönhetően jött létre. Ha felbecsülhetetlen értékűnek találod ezt az oldalt, kérjük, hogy támogass a patreonon vagy Ko-fin keresztül.', PATREON_FOOTER_THANKS: 'Külön köszönet Patreon támogatóinknak, különösen nekik:', FOOTER_COPYRIGHT: 'Az oldal szövege, a weboldal kódja és az eredeti grafikák CC BY-NC-SA alatt licenszeltek.', FOOTER_COPYRIGHT2: 'és más közreműködők', - - 'TRANS_TWITTER_TOPICS': 'Trans Twitter Topics', - - MENU_LANGUAGE: 'Magyar (HU)', }; diff --git a/public/pl/_strings.js b/public/pl/_strings.js index d36275ce5..d281df516 100644 --- a/public/pl/_strings.js +++ b/public/pl/_strings.js @@ -1,16 +1,19 @@ module.exports = exports = { + MENU_LANGUAGE_SHORT: 'polski (PL)', + MENU_LANGUAGE_LONG: 'polski (Polish)', SITE_TITLE: 'To dysforia płciowa, FYI', + HEADER_TITLE: 'To dysforia płciowa, FYI', SITE_DESCRIPTION: 'Źródło wiedzy dla kwestionujących swoją tożsamość płciową, tych w trakcie płciowej podróży, jak i tych, którzy po prostu chcą się dowiedzieć, czym jest transpłciowość.', - HEADER_TITLE: 'To dysforia płciowa, FYI', + TRANS_TWITTER_TOPICS: 'Trans Twitter Topics', + TWEET_DATE_FORMAT: 'HH:mm - EEE, LLL do, yyyy', + MISSING_TWEET_FOR: 'Missing tweet for ', + QUOTED_TWEET_UNAVAILABLE: 'Quoted Tweet Unavailable', + PATREON_FOOTER_BODY: 'Ta strona istnieje dzięki społeczności. Jeśli jest dla ciebie nieoceniona, rozważ wsparcie na patreonie bądź donację poprzez Ko-fi.', PATREON_FOOTER_THANKS: 'Szczególne podziękowania dla następujących patronów:', FOOTER_COPYRIGHT: 'Tekst i kod strony, jak również oryginalne grafiki są licencjonowane CC BY-NC-SA.', FOOTER_COPYRIGHT2: 'i inni współautorzy', - - 'TRANS_TWITTER_TOPICS': 'Trans Twitter Topics', - - MENU_LANGUAGE: 'polski (PL)', }; diff --git a/public/zh/_strings.js b/public/zh/_strings.js index 7fe838229..7704e719f 100644 --- a/public/zh/_strings.js +++ b/public/zh/_strings.js @@ -1,16 +1,19 @@ module.exports = exports = { + MENU_LANGUAGE_SHORT: '中文 (ZH)', + MENU_LANGUAGE_LONG: '中文 (Chinese)', SITE_TITLE: '这就是性别烦躁,供参考', + HEADER_TITLE: '这就是性别烦躁,供参考', SITE_DESCRIPTION: '为那些正在质疑探索中的人、那些在跨性别道路上的人和单纯想成为盟友的人提供资源。', - HEADER_TITLE: '这就是性别烦躁,供参考', + TRANS_TWITTER_TOPICS: 'Trans Twitter Topics', + TWEET_DATE_FORMAT: 'yyyy年MM月dd日周三 下午hh:mm', + MISSING_TWEET_FOR: 'Missing tweet for ', + QUOTED_TWEET_UNAVAILABLE: 'Quoted Tweet Unavailable', + PATREON_FOOTER_BODY: 'This site is made possible thanks to contributions from the community. If you have found this site invaluable, please consider making a pledge on patreon or a donation via Ko-fi.', PATREON_FOOTER_THANKS: 'Special thanks to the following patreon supporters:', FOOTER_COPYRIGHT: 'Site text, website code and original graphics are licensed CC BY-NC-SA.', - FOOTER_COPYRIGHT2: 'and Other Contributors', - - 'TRANS_TWITTER_TOPICS': 'Trans Twitter Topics', - - MENU_LANGUAGE: '中文 (ZH)', + FOOTER_COPYRIGHT2: 'and Other Contributors' }; diff --git a/templates/language-menu.hbs b/templates/language-menu.hbs index b8a9a23a9..5ff562b44 100644 --- a/templates/language-menu.hbs +++ b/templates/language-menu.hbs @@ -1,8 +1,5 @@
diff --git a/templates/layout.hbs b/templates/layout.hbs index f577ef316..289473da3 100644 --- a/templates/layout.hbs +++ b/templates/layout.hbs @@ -65,7 +65,7 @@