// --- DEFAULTS START --- var defaults = { aa: 'ET', ab: 'GE', abr: 'GH', ace: 'ID', ach: 'UG', ada: 'GH', ady: 'RU', ae: 'IR', aeb: 'TN', af: 'ZA', agq: 'CM', aho: 'IN', ak: 'GH', akk: 'IQ', aln: 'XK', alt: 'RU', am: 'ET', amo: 'NG', aoz: 'ID', apd: 'TG', ar: 'EG', arc: 'IR', 'arc-Nbat': 'JO', 'arc-Palm': 'SY', arn: 'CL', aro: 'BO', arq: 'DZ', ary: 'MA', arz: 'EG', as: 'IN', asa: 'TZ', ase: 'US', ast: 'ES', atj: 'CA', av: 'RU', awa: 'IN', ay: 'BO', az: 'AZ', 'az-Arab': 'IR', ba: 'RU', bal: 'PK', ban: 'ID', bap: 'NP', bar: 'AT', bas: 'CM', bax: 'CM', bbc: 'ID', bbj: 'CM', bci: 'CI', be: 'BY', bej: 'SD', bem: 'ZM', bew: 'ID', bez: 'TZ', bfd: 'CM', bfq: 'IN', bft: 'PK', bfy: 'IN', bg: 'BG', bgc: 'IN', bgn: 'PK', bgx: 'TR', bhb: 'IN', bhi: 'IN', bhk: 'PH', bho: 'IN', bi: 'VU', bik: 'PH', bin: 'NG', bjj: 'IN', bjn: 'ID', bjt: 'SN', bkm: 'CM', bku: 'PH', blt: 'VN', bm: 'ML', bmq: 'ML', bn: 'BD', bo: 'CN', bpy: 'IN', bqi: 'IR', bqv: 'CI', br: 'FR', bra: 'IN', brh: 'PK', brx: 'IN', bs: 'BA', bsq: 'LR', bss: 'CM', bto: 'PH', btv: 'PK', bua: 'RU', buc: 'YT', bug: 'ID', bum: 'CM', bvb: 'GQ', byn: 'ER', byv: 'CM', bze: 'ML', ca: 'ES', cch: 'NG', ccp: 'BD', ce: 'RU', ceb: 'PH', cgg: 'UG', ch: 'GU', chk: 'FM', chm: 'RU', cho: 'US', chp: 'CA', chr: 'US', cja: 'KH', cjm: 'VN', ckb: 'IQ', co: 'FR', cop: 'EG', cps: 'PH', cr: 'CA', crh: 'UA', crj: 'CA', crk: 'CA', crl: 'CA', crm: 'CA', crs: 'SC', cs: 'CZ', csb: 'PL', csw: 'CA', ctd: 'MM', cu: 'RU', 'cu-Glag': 'BG', cv: 'RU', cy: 'GB', da: 'DK', dak: 'US', dar: 'RU', dav: 'KE', dcc: 'IN', de: 'DE', den: 'CA', dgr: 'CA', dje: 'NE', dnj: 'CI', doi: 'IN', dsb: 'DE', dtm: 'ML', dtp: 'MY', dty: 'NP', dua: 'CM', dv: 'MV', dyo: 'SN', dyu: 'BF', dz: 'BT', ebu: 'KE', ee: 'GH', efi: 'NG', egl: 'IT', egy: 'EG', eky: 'MM', el: 'GR', en: 'US', 'en-Shaw': 'GB', es: 'ES', esu: 'US', et: 'EE', ett: 'IT', eu: 'ES', ewo: 'CM', ext: 'ES', fa: 'IR', fan: 'GQ', ff: 'SN', 'ff-Adlm': 'GN', ffm: 'ML', fi: 'FI', fia: 'SD', fil: 'PH', fit: 'SE', fj: 'FJ', fo: 'FO', fon: 'BJ', fr: 'FR', frc: 'US', frp: 'FR', frr: 'DE', frs: 'DE', fub: 'CM', fud: 'WF', fuf: 'GN', fuq: 'NE', fur: 'IT', fuv: 'NG', fvr: 'SD', fy: 'NL', ga: 'IE', gaa: 'GH', gag: 'MD', gan: 'CN', gay: 'ID', gbm: 'IN', gbz: 'IR', gcr: 'GF', gd: 'GB', gez: 'ET', ggn: 'NP', gil: 'KI', gjk: 'PK', gju: 'PK', gl: 'ES', glk: 'IR', gn: 'PY', gom: 'IN', gon: 'IN', gor: 'ID', gos: 'NL', got: 'UA', grc: 'CY', 'grc-Linb': 'GR', grt: 'IN', gsw: 'CH', gu: 'IN', gub: 'BR', guc: 'CO', gur: 'GH', guz: 'KE', gv: 'IM', gvr: 'NP', gwi: 'CA', ha: 'NG', hak: 'CN', haw: 'US', haz: 'AF', he: 'IL', hi: 'IN', hif: 'FJ', hil: 'PH', hlu: 'TR', hmd: 'CN', hnd: 'PK', hne: 'IN', hnj: 'LA', hnn: 'PH', hno: 'PK', ho: 'PG', hoc: 'IN', hoj: 'IN', hr: 'HR', hsb: 'DE', hsn: 'CN', ht: 'HT', hu: 'HU', hy: 'AM', hz: 'NA', ia: 'FR', iba: 'MY', ibb: 'NG', id: 'ID', ife: 'TG', ig: 'NG', ii: 'CN', ik: 'US', ikt: 'CA', ilo: 'PH', in: 'ID', inh: 'RU', is: 'IS', it: 'IT', iu: 'CA', iw: 'IL', izh: 'RU', ja: 'JP', jam: 'JM', jgo: 'CM', ji: 'UA', jmc: 'TZ', jml: 'NP', jut: 'DK', jv: 'ID', jw: 'ID', ka: 'GE', kaa: 'UZ', kab: 'DZ', kac: 'MM', kaj: 'NG', kam: 'KE', kao: 'ML', kbd: 'RU', kby: 'NE', kcg: 'NG', kck: 'ZW', kde: 'TZ', kdh: 'TG', kdt: 'TH', kea: 'CV', ken: 'CM', kfo: 'CI', kfr: 'IN', kfy: 'IN', kg: 'CD', kge: 'ID', kgp: 'BR', kha: 'IN', khb: 'CN', khn: 'IN', khq: 'ML', kht: 'IN', khw: 'PK', ki: 'KE', kiu: 'TR', kj: 'NA', kjg: 'LA', kk: 'KZ', 'kk-Arab': 'CN', kkj: 'CM', kl: 'GL', kln: 'KE', km: 'KH', kmb: 'AO', kn: 'IN', knf: 'SN', ko: 'KR', koi: 'RU', kok: 'IN', kos: 'FM', kpe: 'LR', krc: 'RU', kri: 'SL', krj: 'PH', krl: 'RU', kru: 'IN', ks: 'IN', ksb: 'TZ', ksf: 'CM', ksh: 'DE', ku: 'TR', 'ku-Arab': 'IQ', kum: 'RU', kv: 'RU', kvr: 'ID', kvx: 'PK', kw: 'GB', kxm: 'TH', kxp: 'PK', ky: 'KG', 'ky-Arab': 'CN', 'ky-Latn': 'TR', la: 'VA', lab: 'GR', lad: 'IL', lag: 'TZ', lah: 'PK', laj: 'UG', lb: 'LU', lbe: 'RU', lbw: 'ID', lcp: 'CN', lep: 'IN', lez: 'RU', lg: 'UG', li: 'NL', lif: 'NP', 'lif-Limb': 'IN', lij: 'IT', lis: 'CN', ljp: 'ID', lki: 'IR', lkt: 'US', lmn: 'IN', lmo: 'IT', ln: 'CD', lo: 'LA', lol: 'CD', loz: 'ZM', lrc: 'IR', lt: 'LT', ltg: 'LV', lu: 'CD', lua: 'CD', luo: 'KE', luy: 'KE', luz: 'IR', lv: 'LV', lwl: 'TH', lzh: 'CN', lzz: 'TR', mad: 'ID', maf: 'CM', mag: 'IN', mai: 'IN', mak: 'ID', man: 'GM', 'man-Nkoo': 'GN', mas: 'KE', maz: 'MX', mdf: 'RU', mdh: 'PH', mdr: 'ID', men: 'SL', mer: 'KE', mfa: 'TH', mfe: 'MU', mg: 'MG', mgh: 'MZ', mgo: 'CM', mgp: 'NP', mgy: 'TZ', mh: 'MH', mi: 'NZ', min: 'ID', mis: 'IQ', mk: 'MK', ml: 'IN', mls: 'SD', mn: 'MN', 'mn-Mong': 'CN', mni: 'IN', mnw: 'MM', moe: 'CA', moh: 'CA', mos: 'BF', mr: 'IN', mrd: 'NP', mrj: 'RU', mro: 'BD', ms: 'MY', mt: 'MT', mtr: 'IN', mua: 'CM', mus: 'US', mvy: 'PK', mwk: 'ML', mwr: 'IN', mwv: 'ID', mxc: 'ZW', my: 'MM', myv: 'RU', myx: 'UG', myz: 'IR', mzn: 'IR', na: 'NR', nan: 'CN', nap: 'IT', naq: 'NA', nb: 'NO', nch: 'MX', nd: 'ZW', ndc: 'MZ', nds: 'DE', ne: 'NP', new: 'NP', ng: 'NA', ngl: 'MZ', nhe: 'MX', nhw: 'MX', nij: 'ID', niu: 'NU', njo: 'IN', nl: 'NL', nmg: 'CM', nn: 'NO', nnh: 'CM', no: 'NO', nod: 'TH', noe: 'IN', non: 'SE', nqo: 'GN', nr: 'ZA', nsk: 'CA', nso: 'ZA', nus: 'SS', nv: 'US', nxq: 'CN', ny: 'MW', nym: 'TZ', nyn: 'UG', nzi: 'GH', oc: 'FR', om: 'ET', or: 'IN', os: 'GE', osa: 'US', otk: 'MN', pa: 'IN', 'pa-Arab': 'PK', pag: 'PH', pal: 'IR', 'pal-Phlp': 'CN', pam: 'PH', pap: 'AW', pau: 'PW', pcd: 'FR', pcm: 'NG', pdc: 'US', pdt: 'CA', peo: 'IR', pfl: 'DE', phn: 'LB', pka: 'IN', pko: 'KE', pl: 'PL', pms: 'IT', pnt: 'GR', pon: 'FM', pra: 'PK', prd: 'IR', ps: 'AF', pt: 'BR', puu: 'GA', qu: 'PE', quc: 'GT', qug: 'EC', raj: 'IN', rcf: 'RE', rej: 'ID', rgn: 'IT', ria: 'IN', rif: 'MA', rjs: 'NP', rkt: 'BD', rm: 'CH', rmf: 'FI', rmo: 'CH', rmt: 'IR', rmu: 'SE', rn: 'BI', rng: 'MZ', ro: 'RO', rob: 'ID', rof: 'TZ', rtm: 'FJ', ru: 'RU', rue: 'UA', rug: 'SB', rw: 'RW', rwk: 'TZ', ryu: 'JP', sa: 'IN', saf: 'GH', sah: 'RU', saq: 'KE', sas: 'ID', sat: 'IN', sav: 'SN', saz: 'IN', sbp: 'TZ', sc: 'IT', sck: 'IN', scn: 'IT', sco: 'GB', scs: 'CA', sd: 'PK', 'sd-Deva': 'IN', 'sd-Khoj': 'IN', 'sd-Sind': 'IN', sdc: 'IT', sdh: 'IR', se: 'NO', sef: 'CI', seh: 'MZ', sei: 'MX', ses: 'ML', sg: 'CF', sga: 'IE', sgs: 'LT', shi: 'MA', shn: 'MM', si: 'LK', sid: 'ET', sk: 'SK', skr: 'PK', sl: 'SI', sli: 'PL', sly: 'ID', sm: 'WS', sma: 'SE', smj: 'SE', smn: 'FI', smp: 'IL', sms: 'FI', sn: 'ZW', snk: 'ML', so: 'SO', sou: 'TH', sq: 'AL', sr: 'RS', srb: 'IN', srn: 'SR', srr: 'SN', srx: 'IN', ss: 'ZA', ssy: 'ER', st: 'ZA', stq: 'DE', su: 'ID', suk: 'TZ', sus: 'GN', sv: 'SE', sw: 'TZ', swb: 'YT', swc: 'CD', swg: 'DE', swv: 'IN', sxn: 'ID', syl: 'BD', syr: 'IQ', szl: 'PL', ta: 'IN', taj: 'NP', tbw: 'PH', tcy: 'IN', tdd: 'CN', tdg: 'NP', tdh: 'NP', te: 'IN', tem: 'SL', teo: 'UG', tet: 'TL', tg: 'TJ', 'tg-Arab': 'PK', th: 'TH', thl: 'NP', thq: 'NP', thr: 'NP', ti: 'ET', tig: 'ER', tiv: 'NG', tk: 'TM', tkl: 'TK', tkr: 'AZ', tkt: 'NP', tl: 'PH', tly: 'AZ', tmh: 'NE', tn: 'ZA', to: 'TO', tog: 'MW', tpi: 'PG', tr: 'TR', tru: 'TR', trv: 'TW', ts: 'ZA', tsd: 'GR', tsf: 'NP', tsg: 'PH', tsj: 'BT', tt: 'RU', ttj: 'UG', tts: 'TH', ttt: 'AZ', tum: 'MW', tvl: 'TV', twq: 'NE', txg: 'CN', ty: 'PF', tyv: 'RU', tzm: 'MA', udm: 'RU', ug: 'CN', 'ug-Cyrl': 'KZ', uga: 'SY', uk: 'UA', uli: 'FM', umb: 'AO', und: 'US', unr: 'IN', 'unr-Deva': 'NP', unx: 'IN', ur: 'PK', uz: 'UZ', 'uz-Arab': 'AF', vai: 'LR', ve: 'ZA', vec: 'IT', vep: 'RU', vi: 'VN', vic: 'SX', vls: 'BE', vmf: 'DE', vmw: 'MZ', vot: 'RU', vro: 'EE', vun: 'TZ', wa: 'BE', wae: 'CH', wal: 'ET', war: 'PH', wbp: 'AU', wbq: 'IN', wbr: 'IN', wls: 'WF', wni: 'KM', wo: 'SN', wtm: 'IN', wuu: 'CN', xav: 'BR', xcr: 'TR', xh: 'ZA', xlc: 'TR', xld: 'TR', xmf: 'GE', xmn: 'CN', xmr: 'SD', xna: 'SA', xnr: 'IN', xog: 'UG', xpr: 'IR', xsa: 'YE', xsr: 'NP', yao: 'MZ', yap: 'FM', yav: 'CM', ybb: 'CM', yo: 'NG', yrl: 'BR', yua: 'MX', yue: 'HK', 'yue-Hans': 'CN', za: 'CN', zag: 'SD', zdj: 'KM', zea: 'NL', zgh: 'MA', zh: 'CN', 'zh-Bopo': 'TW', 'zh-Hanb': 'TW', 'zh-Hant': 'TW', zlm: 'TG', zmi: 'MY', zu: 'ZA', zza: 'TR', }; // --- DEFAULTS END --- module.exports = function(locale) { var split = locale.toUpperCase().split(/-|_/); var lang = split.shift(); var code = split.pop(); if (!/^[A-Z]{2}$/.test(code)) { code = defaults[lang.toLowerCase()]; } if (!code) { return ''; } const a = String.fromCodePoint(code.codePointAt(0) - 0x41 + 0x1F1E6); const b = String.fromCodePoint(code.codePointAt(1) - 0x41 + 0x1F1E6); return a + b; };