From 507c1dd69a84c738d038ca4899cb7b6e33e5e78a Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Wed, 1 Apr 2015 18:43:21 +0200 Subject: [PATCH] feat(i18n): add support for different chinese versions --- website/src/i18n.js | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/website/src/i18n.js b/website/src/i18n.js index 271036754a..92ebf96f61 100644 --- a/website/src/i18n.js +++ b/website/src/i18n.js @@ -63,15 +63,28 @@ _.each(langCodes, function(code){ // used in place of plain original 'en' var defaultLangCodes = _.without(langCodes, 'en_GB'); +// A list of languages that have different versions +var multipleVersionsLanguages = ['es', 'zh']; + +var latinAmericanSpanishes = ['es-419', 'es-mx', 'es-gt', 'es-cr', 'es-pa', 'es-do', 'es-ve', 'es-co', 'es-pe', + 'es-ar', 'es-ec', 'es-cl', 'es-uy', 'es-py', 'es-bo', 'es-sv', 'es-hn', + 'es-ni', 'es-pr']; + +var chineseVersions = ['zh-tw']; + var getUserLanguage = function(req, res, next){ var getFromBrowser = function(){ var acceptable = _(req.acceptedLanguages).map(function(lang){ return lang.slice(0, 2); }).uniq().value(); + var matches = _.intersection(acceptable, defaultLangCodes); - if(matches.length > 0 && matches[0].toLowerCase() === 'es'){ + + var iAcceptedCompleteLang = multipleVersionsLanguages.indexOf(matches[0].toLowerCase()); + + if(matches.length > 0 && iAcceptedCompleteLang !== -1){ var acceptedCompleteLang = _.find(req.acceptedLanguages, function(accepted){ - return accepted.slice(0, 2) == 'es'; + return accepted.slice(0, 2) == multipleVersionsLanguages[iAcceptedCompleteLang]; }); if(acceptedCompleteLang){ @@ -80,11 +93,15 @@ var getUserLanguage = function(req, res, next){ return 'en'; } - var latinAmericanSpanishes = ['es-419', 'es-mx', 'es-gt', 'es-cr', 'es-pa', 'es-do', 'es-ve', 'es-co', 'es-pe', - 'es-ar', 'es-ec', 'es-cl', 'es-uy', 'es-py', 'es-bo', 'es-sv', 'es-hn', - 'es-ni', 'es-pr']; + if(matches[0] === 'es'){ + return (latinAmericanSpanishes.indexOf(acceptedCompleteLang) !== -1) ? 'es_419' : 'es'; + }else if(matches[0] === 'zh'){ + var iChinese = chineseVersions.indexOf(acceptedCompleteLang.toLowerCase()); + return (iChinese !== -1) ? chineseVersions[iChinese] : 'zh'; + }else{ + return en; + } - return (latinAmericanSpanishes.indexOf(acceptedCompleteLang) !== -1) ? 'es_419' : 'es'; }else if(matches.length > 0){ return matches[0].toLowerCase(); }else{