diff --git a/src/routes.js b/src/routes.js index 5bef4df..6b56e57 100644 --- a/src/routes.js +++ b/src/routes.js @@ -90,7 +90,7 @@ module.exports = (app, utils) => { app.get('/api/rest_v1/page/pdf/:page', async (req, res, next) => { if(!req.params.page) { - return red.redirect('/') + return res.redirect('/') } const media = await proxyMedia(req, '/api/rest_v1/page/pdf') @@ -102,6 +102,14 @@ module.exports = (app, utils) => { return res.sendStatus(404) }) + // handle chinese variants + app.get('/zh*', (req, res, next) => { + const pathSplit = req.path.split('/') + const lang = pathSplit[1] + const page = pathSplit[2] + return res.redirect(`/wiki/${page}?lang=${lang}`) + }) + app.get('/', (req, res, next) => { return handleWikiPage(req, res, '/') }) diff --git a/src/utils.js b/src/utils.js index ad3e710..50e090a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -313,12 +313,20 @@ module.exports = function(redis) { switch (prefix) { case '/wiki/': + let wiki = 'wiki' page = req.params.page || '' sub_page = req.params.sub_page || '' if(sub_page) { sub_page = `/${sub_page}` } - url = `https://${lang}.wikipedia.org/wiki/${page}${sub_page}` + + // language variants + if(typeof validLang(lang) === 'string') { + wiki = lang + lang = lang.split('-')[0] + } + + url = `https://${lang}.wikipedia.org/${wiki}/${page}${sub_page}` break case '/w/': let file = req.params.file @@ -379,7 +387,8 @@ module.exports = function(redis) { } this.validLang = (lang, return_langs=false) => { - let valid_langs = ['ab','ace','ady','af','ak','als','am','an','ang','ar', + const lang_variants = ['zh-hans','zh-hant','zh-cn','zh-hk','zh-mo','zh-my','zh-sg','zh-tw'] + const valid_langs = ['ab','ace','ady','af','ak','als','am','an','ang','ar', 'arc','ary','arz','as','ast','atj','av','avk','awa','ay','az','azb','ba', 'ban','bar','bat-smg','bcl','be','be-tarask','bg','bh','bi','bjn','bm','bn', 'bo','bpy','br','bs','bug','bxr','ca','cbk-zam','cdo','ce','ceb','ch','chr', @@ -411,6 +420,10 @@ module.exports = function(redis) { if(valid_langs.includes(lang)) { return true } + if(lang_variants.includes(lang)) { + return lang + } + return false }