From 48789360b1825875c12de3bb5445796db875987c Mon Sep 17 00:00:00 2001 From: Olivier Combe Date: Mon, 21 Aug 2017 19:11:07 +0200 Subject: [PATCH] feat(common): generate `closure-locale.ts` to tree shake locale data (#18907) Closure will only keep the data for the locale defined in `goog.LOCALE` PR Close #18907 --- build.sh | 2 +- gulpfile.js | 1 + integration/bazel/angular.tsconfig.json | 1 + packages/common/locales/closure-locale.ts | 2406 +++++++++++++++++++ packages/common/locales/tsconfig-build.json | 7 +- tools/gulp-tasks/cldr.js | 13 +- tools/gulp-tasks/cldr/closure.js | 83 + tools/gulp-tasks/cldr/extract.js | 2 + 8 files changed, 2511 insertions(+), 4 deletions(-) create mode 100644 packages/common/locales/closure-locale.ts create mode 100644 tools/gulp-tasks/cldr/closure.js diff --git a/build.sh b/build.sh index 9742fc806b..51aa9fb614 100755 --- a/build.sh +++ b/build.sh @@ -485,7 +485,7 @@ do if [[ ${PACKAGE} == "common" ]]; then echo "====== Copy i18n locale data" - rsync -a --exclude=*.d.ts --exclude=*.metadata.json ${OUT_DIR}/i18n_data/ ${NPM_DIR}/i18n_data + rsync -a --exclude=*.d.ts --exclude=*.metadata.json ${OUT_DIR}/locales/ ${NPM_DIR}/locales fi else echo "====== Copy ${PACKAGE} node tool" diff --git a/gulpfile.js b/gulpfile.js index f3e8f3e8af..a4c6ead9d1 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -44,3 +44,4 @@ gulp.task('changelog', loadTask('changelog')); gulp.task('check-env', () => {/* this is a noop because the env test ran already above */}); gulp.task('cldr:extract', loadTask('cldr', 'extract')); gulp.task('cldr:download', loadTask('cldr', 'download')); +gulp.task('cldr:gen-closure-locale', loadTask('cldr', 'closure')); diff --git a/integration/bazel/angular.tsconfig.json b/integration/bazel/angular.tsconfig.json index 42540321e1..154b9bf79d 100644 --- a/integration/bazel/angular.tsconfig.json +++ b/integration/bazel/angular.tsconfig.json @@ -17,6 +17,7 @@ "node_modules/@angular/bazel/**", "node_modules/@angular/compiler-cli/**", // Workaround bug introduced by 079d884 + "node_modules/@angular/common/locales.d.ts", "node_modules/@angular/common/locales/**", "node_modules/@angular/tsc-wrapped/**" ] diff --git a/packages/common/locales/closure-locale.ts b/packages/common/locales/closure-locale.ts new file mode 100644 index 0000000000..9e7daa7b88 --- /dev/null +++ b/packages/common/locales/closure-locale.ts @@ -0,0 +1,2406 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +// THIS CODE IS GENERATED - DO NOT MODIFY +// See angular/tools/gulp-tasks/cldr/extract.js + +import {registerLocaleData} from '../src/i18n/locale_data'; +import af from './af'; +import afNA from './af-NA'; +import agq from './agq'; +import ak from './ak'; +import am from './am'; +import ar from './ar'; +import arAE from './ar-AE'; +import arBH from './ar-BH'; +import arDJ from './ar-DJ'; +import arDZ from './ar-DZ'; +import arEG from './ar-EG'; +import arEH from './ar-EH'; +import arER from './ar-ER'; +import arIL from './ar-IL'; +import arIQ from './ar-IQ'; +import arJO from './ar-JO'; +import arKM from './ar-KM'; +import arKW from './ar-KW'; +import arLB from './ar-LB'; +import arLY from './ar-LY'; +import arMA from './ar-MA'; +import arMR from './ar-MR'; +import arOM from './ar-OM'; +import arPS from './ar-PS'; +import arQA from './ar-QA'; +import arSA from './ar-SA'; +import arSD from './ar-SD'; +import arSO from './ar-SO'; +import arSS from './ar-SS'; +import arSY from './ar-SY'; +import arTD from './ar-TD'; +import arTN from './ar-TN'; +import arYE from './ar-YE'; +import as from './as'; +import asa from './asa'; +import ast from './ast'; +import az from './az'; +import azCyrl from './az-Cyrl'; +import azLatn from './az-Latn'; +import bas from './bas'; +import be from './be'; +import bem from './bem'; +import bez from './bez'; +import bg from './bg'; +import bm from './bm'; +import bn from './bn'; +import bnIN from './bn-IN'; +import bo from './bo'; +import boIN from './bo-IN'; +import br from './br'; +import brx from './brx'; +import bs from './bs'; +import bsCyrl from './bs-Cyrl'; +import bsLatn from './bs-Latn'; +import ca from './ca'; +import caAD from './ca-AD'; +import caESVALENCIA from './ca-ES-VALENCIA'; +import caFR from './ca-FR'; +import caIT from './ca-IT'; +import ce from './ce'; +import cgg from './cgg'; +import chr from './chr'; +import ckb from './ckb'; +import ckbIR from './ckb-IR'; +import cs from './cs'; +import cu from './cu'; +import cy from './cy'; +import da from './da'; +import daGL from './da-GL'; +import dav from './dav'; +import de from './de'; +import deAT from './de-AT'; +import deBE from './de-BE'; +import deCH from './de-CH'; +import deIT from './de-IT'; +import deLI from './de-LI'; +import deLU from './de-LU'; +import dje from './dje'; +import dsb from './dsb'; +import dua from './dua'; +import dyo from './dyo'; +import dz from './dz'; +import ebu from './ebu'; +import ee from './ee'; +import eeTG from './ee-TG'; +import el from './el'; +import elCY from './el-CY'; +import en from './en'; +import en001 from './en-001'; +import en150 from './en-150'; +import enAG from './en-AG'; +import enAI from './en-AI'; +import enAS from './en-AS'; +import enAT from './en-AT'; +import enAU from './en-AU'; +import enBB from './en-BB'; +import enBE from './en-BE'; +import enBI from './en-BI'; +import enBM from './en-BM'; +import enBS from './en-BS'; +import enBW from './en-BW'; +import enBZ from './en-BZ'; +import enCA from './en-CA'; +import enCC from './en-CC'; +import enCH from './en-CH'; +import enCK from './en-CK'; +import enCM from './en-CM'; +import enCX from './en-CX'; +import enCY from './en-CY'; +import enDE from './en-DE'; +import enDG from './en-DG'; +import enDK from './en-DK'; +import enDM from './en-DM'; +import enER from './en-ER'; +import enFI from './en-FI'; +import enFJ from './en-FJ'; +import enFK from './en-FK'; +import enFM from './en-FM'; +import enGB from './en-GB'; +import enGD from './en-GD'; +import enGG from './en-GG'; +import enGH from './en-GH'; +import enGI from './en-GI'; +import enGM from './en-GM'; +import enGU from './en-GU'; +import enGY from './en-GY'; +import enHK from './en-HK'; +import enIE from './en-IE'; +import enIL from './en-IL'; +import enIM from './en-IM'; +import enIN from './en-IN'; +import enIO from './en-IO'; +import enJE from './en-JE'; +import enJM from './en-JM'; +import enKE from './en-KE'; +import enKI from './en-KI'; +import enKN from './en-KN'; +import enKY from './en-KY'; +import enLC from './en-LC'; +import enLR from './en-LR'; +import enLS from './en-LS'; +import enMG from './en-MG'; +import enMH from './en-MH'; +import enMO from './en-MO'; +import enMP from './en-MP'; +import enMS from './en-MS'; +import enMT from './en-MT'; +import enMU from './en-MU'; +import enMW from './en-MW'; +import enMY from './en-MY'; +import enNA from './en-NA'; +import enNF from './en-NF'; +import enNG from './en-NG'; +import enNL from './en-NL'; +import enNR from './en-NR'; +import enNU from './en-NU'; +import enNZ from './en-NZ'; +import enPG from './en-PG'; +import enPH from './en-PH'; +import enPK from './en-PK'; +import enPN from './en-PN'; +import enPR from './en-PR'; +import enPW from './en-PW'; +import enRW from './en-RW'; +import enSB from './en-SB'; +import enSC from './en-SC'; +import enSD from './en-SD'; +import enSE from './en-SE'; +import enSG from './en-SG'; +import enSH from './en-SH'; +import enSI from './en-SI'; +import enSL from './en-SL'; +import enSS from './en-SS'; +import enSX from './en-SX'; +import enSZ from './en-SZ'; +import enTC from './en-TC'; +import enTK from './en-TK'; +import enTO from './en-TO'; +import enTT from './en-TT'; +import enTV from './en-TV'; +import enTZ from './en-TZ'; +import enUG from './en-UG'; +import enUM from './en-UM'; +import enUSPOSIX from './en-US-POSIX'; +import enVC from './en-VC'; +import enVG from './en-VG'; +import enVI from './en-VI'; +import enVU from './en-VU'; +import enWS from './en-WS'; +import enZA from './en-ZA'; +import enZM from './en-ZM'; +import enZW from './en-ZW'; +import eo from './eo'; +import es from './es'; +import es419 from './es-419'; +import esAR from './es-AR'; +import esBO from './es-BO'; +import esBR from './es-BR'; +import esBZ from './es-BZ'; +import esCL from './es-CL'; +import esCO from './es-CO'; +import esCR from './es-CR'; +import esCU from './es-CU'; +import esDO from './es-DO'; +import esEA from './es-EA'; +import esEC from './es-EC'; +import esGQ from './es-GQ'; +import esGT from './es-GT'; +import esHN from './es-HN'; +import esIC from './es-IC'; +import esMX from './es-MX'; +import esNI from './es-NI'; +import esPA from './es-PA'; +import esPE from './es-PE'; +import esPH from './es-PH'; +import esPR from './es-PR'; +import esPY from './es-PY'; +import esSV from './es-SV'; +import esUS from './es-US'; +import esUY from './es-UY'; +import esVE from './es-VE'; +import et from './et'; +import eu from './eu'; +import ewo from './ewo'; +import fa from './fa'; +import faAF from './fa-AF'; +import ff from './ff'; +import ffCM from './ff-CM'; +import ffGN from './ff-GN'; +import ffMR from './ff-MR'; +import fi from './fi'; +import fil from './fil'; +import fo from './fo'; +import foDK from './fo-DK'; +import fr from './fr'; +import frBE from './fr-BE'; +import frBF from './fr-BF'; +import frBI from './fr-BI'; +import frBJ from './fr-BJ'; +import frBL from './fr-BL'; +import frCA from './fr-CA'; +import frCD from './fr-CD'; +import frCF from './fr-CF'; +import frCG from './fr-CG'; +import frCH from './fr-CH'; +import frCI from './fr-CI'; +import frCM from './fr-CM'; +import frDJ from './fr-DJ'; +import frDZ from './fr-DZ'; +import frGA from './fr-GA'; +import frGF from './fr-GF'; +import frGN from './fr-GN'; +import frGP from './fr-GP'; +import frGQ from './fr-GQ'; +import frHT from './fr-HT'; +import frKM from './fr-KM'; +import frLU from './fr-LU'; +import frMA from './fr-MA'; +import frMC from './fr-MC'; +import frMF from './fr-MF'; +import frMG from './fr-MG'; +import frML from './fr-ML'; +import frMQ from './fr-MQ'; +import frMR from './fr-MR'; +import frMU from './fr-MU'; +import frNC from './fr-NC'; +import frNE from './fr-NE'; +import frPF from './fr-PF'; +import frPM from './fr-PM'; +import frRE from './fr-RE'; +import frRW from './fr-RW'; +import frSC from './fr-SC'; +import frSN from './fr-SN'; +import frSY from './fr-SY'; +import frTD from './fr-TD'; +import frTG from './fr-TG'; +import frTN from './fr-TN'; +import frVU from './fr-VU'; +import frWF from './fr-WF'; +import frYT from './fr-YT'; +import fur from './fur'; +import fy from './fy'; +import ga from './ga'; +import gd from './gd'; +import gl from './gl'; +import gsw from './gsw'; +import gswFR from './gsw-FR'; +import gswLI from './gsw-LI'; +import gu from './gu'; +import guz from './guz'; +import gv from './gv'; +import ha from './ha'; +import haGH from './ha-GH'; +import haNE from './ha-NE'; +import haw from './haw'; +import he from './he'; +import hi from './hi'; +import hr from './hr'; +import hrBA from './hr-BA'; +import hsb from './hsb'; +import hu from './hu'; +import hy from './hy'; +import id from './id'; +import ig from './ig'; +import ii from './ii'; +import is from './is'; +import it from './it'; +import itCH from './it-CH'; +import itSM from './it-SM'; +import itVA from './it-VA'; +import ja from './ja'; +import jgo from './jgo'; +import jmc from './jmc'; +import ka from './ka'; +import kab from './kab'; +import kam from './kam'; +import kde from './kde'; +import kea from './kea'; +import khq from './khq'; +import ki from './ki'; +import kk from './kk'; +import kkj from './kkj'; +import kl from './kl'; +import kln from './kln'; +import km from './km'; +import kn from './kn'; +import ko from './ko'; +import koKP from './ko-KP'; +import kok from './kok'; +import ks from './ks'; +import ksb from './ksb'; +import ksf from './ksf'; +import ksh from './ksh'; +import kw from './kw'; +import ky from './ky'; +import lag from './lag'; +import lb from './lb'; +import lg from './lg'; +import lkt from './lkt'; +import ln from './ln'; +import lnAO from './ln-AO'; +import lnCF from './ln-CF'; +import lnCG from './ln-CG'; +import lo from './lo'; +import lrc from './lrc'; +import lrcIQ from './lrc-IQ'; +import lt from './lt'; +import lu from './lu'; +import luo from './luo'; +import luy from './luy'; +import lv from './lv'; +import mas from './mas'; +import masTZ from './mas-TZ'; +import mer from './mer'; +import mfe from './mfe'; +import mg from './mg'; +import mgh from './mgh'; +import mgo from './mgo'; +import mk from './mk'; +import ml from './ml'; +import mn from './mn'; +import mr from './mr'; +import ms from './ms'; +import msBN from './ms-BN'; +import msSG from './ms-SG'; +import mt from './mt'; +import mua from './mua'; +import my from './my'; +import mzn from './mzn'; +import naq from './naq'; +import nb from './nb'; +import nbSJ from './nb-SJ'; +import nd from './nd'; +import nds from './nds'; +import ndsNL from './nds-NL'; +import ne from './ne'; +import neIN from './ne-IN'; +import nl from './nl'; +import nlAW from './nl-AW'; +import nlBE from './nl-BE'; +import nlBQ from './nl-BQ'; +import nlCW from './nl-CW'; +import nlSR from './nl-SR'; +import nlSX from './nl-SX'; +import nmg from './nmg'; +import nn from './nn'; +import nnh from './nnh'; +import nus from './nus'; +import nyn from './nyn'; +import om from './om'; +import omKE from './om-KE'; +import or from './or'; +import os from './os'; +import osRU from './os-RU'; +import pa from './pa'; +import paArab from './pa-Arab'; +import paGuru from './pa-Guru'; +import pl from './pl'; +import prg from './prg'; +import ps from './ps'; +import pt from './pt'; +import ptAO from './pt-AO'; +import ptCH from './pt-CH'; +import ptCV from './pt-CV'; +import ptGQ from './pt-GQ'; +import ptGW from './pt-GW'; +import ptLU from './pt-LU'; +import ptMO from './pt-MO'; +import ptMZ from './pt-MZ'; +import ptPT from './pt-PT'; +import ptST from './pt-ST'; +import ptTL from './pt-TL'; +import qu from './qu'; +import quBO from './qu-BO'; +import quEC from './qu-EC'; +import rm from './rm'; +import rn from './rn'; +import ro from './ro'; +import roMD from './ro-MD'; +import rof from './rof'; +import root from './root'; +import ru from './ru'; +import ruBY from './ru-BY'; +import ruKG from './ru-KG'; +import ruKZ from './ru-KZ'; +import ruMD from './ru-MD'; +import ruUA from './ru-UA'; +import rw from './rw'; +import rwk from './rwk'; +import sah from './sah'; +import saq from './saq'; +import sbp from './sbp'; +import se from './se'; +import seFI from './se-FI'; +import seSE from './se-SE'; +import seh from './seh'; +import ses from './ses'; +import sg from './sg'; +import shi from './shi'; +import shiLatn from './shi-Latn'; +import shiTfng from './shi-Tfng'; +import si from './si'; +import sk from './sk'; +import sl from './sl'; +import smn from './smn'; +import sn from './sn'; +import so from './so'; +import soDJ from './so-DJ'; +import soET from './so-ET'; +import soKE from './so-KE'; +import sq from './sq'; +import sqMK from './sq-MK'; +import sqXK from './sq-XK'; +import sr from './sr'; +import srCyrl from './sr-Cyrl'; +import srCyrlBA from './sr-Cyrl-BA'; +import srCyrlME from './sr-Cyrl-ME'; +import srCyrlXK from './sr-Cyrl-XK'; +import srLatn from './sr-Latn'; +import srLatnBA from './sr-Latn-BA'; +import srLatnME from './sr-Latn-ME'; +import srLatnXK from './sr-Latn-XK'; +import sv from './sv'; +import svAX from './sv-AX'; +import svFI from './sv-FI'; +import sw from './sw'; +import swCD from './sw-CD'; +import swKE from './sw-KE'; +import swUG from './sw-UG'; +import ta from './ta'; +import taLK from './ta-LK'; +import taMY from './ta-MY'; +import taSG from './ta-SG'; +import te from './te'; +import teo from './teo'; +import teoKE from './teo-KE'; +import th from './th'; +import ti from './ti'; +import tiER from './ti-ER'; +import tk from './tk'; +import to from './to'; +import tr from './tr'; +import trCY from './tr-CY'; +import twq from './twq'; +import tzm from './tzm'; +import ug from './ug'; +import uk from './uk'; +import ur from './ur'; +import urIN from './ur-IN'; +import uz from './uz'; +import uzArab from './uz-Arab'; +import uzCyrl from './uz-Cyrl'; +import uzLatn from './uz-Latn'; +import vai from './vai'; +import vaiLatn from './vai-Latn'; +import vaiVaii from './vai-Vaii'; +import vi from './vi'; +import vo from './vo'; +import vun from './vun'; +import wae from './wae'; +import xog from './xog'; +import yav from './yav'; +import yi from './yi'; +import yo from './yo'; +import yoBJ from './yo-BJ'; +import yue from './yue'; +import zgh from './zgh'; +import zh from './zh'; +import zhHans from './zh-Hans'; +import zhHansHK from './zh-Hans-HK'; +import zhHansMO from './zh-Hans-MO'; +import zhHansSG from './zh-Hans-SG'; +import zhHant from './zh-Hant'; +import zhHantHK from './zh-Hant-HK'; +import zhHantMO from './zh-Hant-MO'; +import zu from './zu'; + + +let l: any; + +switch (goog.LOCALE) { + case 'af': + l = af; + break; + case 'af_NA': + case 'af-NA': + l = afNA; + break; + case 'agq': + l = agq; + break; + case 'ak': + l = ak; + break; + case 'am': + l = am; + break; + case 'ar': + l = ar; + break; + case 'ar_AE': + case 'ar-AE': + l = arAE; + break; + case 'ar_BH': + case 'ar-BH': + l = arBH; + break; + case 'ar_DJ': + case 'ar-DJ': + l = arDJ; + break; + case 'ar_DZ': + case 'ar-DZ': + l = arDZ; + break; + case 'ar_EG': + case 'ar-EG': + l = arEG; + break; + case 'ar_EH': + case 'ar-EH': + l = arEH; + break; + case 'ar_ER': + case 'ar-ER': + l = arER; + break; + case 'ar_IL': + case 'ar-IL': + l = arIL; + break; + case 'ar_IQ': + case 'ar-IQ': + l = arIQ; + break; + case 'ar_JO': + case 'ar-JO': + l = arJO; + break; + case 'ar_KM': + case 'ar-KM': + l = arKM; + break; + case 'ar_KW': + case 'ar-KW': + l = arKW; + break; + case 'ar_LB': + case 'ar-LB': + l = arLB; + break; + case 'ar_LY': + case 'ar-LY': + l = arLY; + break; + case 'ar_MA': + case 'ar-MA': + l = arMA; + break; + case 'ar_MR': + case 'ar-MR': + l = arMR; + break; + case 'ar_OM': + case 'ar-OM': + l = arOM; + break; + case 'ar_PS': + case 'ar-PS': + l = arPS; + break; + case 'ar_QA': + case 'ar-QA': + l = arQA; + break; + case 'ar_SA': + case 'ar-SA': + l = arSA; + break; + case 'ar_SD': + case 'ar-SD': + l = arSD; + break; + case 'ar_SO': + case 'ar-SO': + l = arSO; + break; + case 'ar_SS': + case 'ar-SS': + l = arSS; + break; + case 'ar_SY': + case 'ar-SY': + l = arSY; + break; + case 'ar_TD': + case 'ar-TD': + l = arTD; + break; + case 'ar_TN': + case 'ar-TN': + l = arTN; + break; + case 'ar_YE': + case 'ar-YE': + l = arYE; + break; + case 'as': + l = as; + break; + case 'asa': + l = asa; + break; + case 'ast': + l = ast; + break; + case 'az': + l = az; + break; + case 'az_Cyrl': + case 'az-Cyrl': + l = azCyrl; + break; + case 'az_Latn': + case 'az-Latn': + l = azLatn; + break; + case 'bas': + l = bas; + break; + case 'be': + l = be; + break; + case 'bem': + l = bem; + break; + case 'bez': + l = bez; + break; + case 'bg': + l = bg; + break; + case 'bm': + l = bm; + break; + case 'bn': + l = bn; + break; + case 'bn_IN': + case 'bn-IN': + l = bnIN; + break; + case 'bo': + l = bo; + break; + case 'bo_IN': + case 'bo-IN': + l = boIN; + break; + case 'br': + l = br; + break; + case 'brx': + l = brx; + break; + case 'bs': + l = bs; + break; + case 'bs_Cyrl': + case 'bs-Cyrl': + l = bsCyrl; + break; + case 'bs_Latn': + case 'bs-Latn': + l = bsLatn; + break; + case 'ca': + l = ca; + break; + case 'ca_AD': + case 'ca-AD': + l = caAD; + break; + case 'ca_ES-VALENCIA': + case 'ca-ES-VALENCIA': + l = caESVALENCIA; + break; + case 'ca_FR': + case 'ca-FR': + l = caFR; + break; + case 'ca_IT': + case 'ca-IT': + l = caIT; + break; + case 'ce': + l = ce; + break; + case 'cgg': + l = cgg; + break; + case 'chr': + l = chr; + break; + case 'ckb': + l = ckb; + break; + case 'ckb_IR': + case 'ckb-IR': + l = ckbIR; + break; + case 'cs': + l = cs; + break; + case 'cu': + l = cu; + break; + case 'cy': + l = cy; + break; + case 'da': + l = da; + break; + case 'da_GL': + case 'da-GL': + l = daGL; + break; + case 'dav': + l = dav; + break; + case 'de': + l = de; + break; + case 'de_AT': + case 'de-AT': + l = deAT; + break; + case 'de_BE': + case 'de-BE': + l = deBE; + break; + case 'de_CH': + case 'de-CH': + l = deCH; + break; + case 'de_IT': + case 'de-IT': + l = deIT; + break; + case 'de_LI': + case 'de-LI': + l = deLI; + break; + case 'de_LU': + case 'de-LU': + l = deLU; + break; + case 'dje': + l = dje; + break; + case 'dsb': + l = dsb; + break; + case 'dua': + l = dua; + break; + case 'dyo': + l = dyo; + break; + case 'dz': + l = dz; + break; + case 'ebu': + l = ebu; + break; + case 'ee': + l = ee; + break; + case 'ee_TG': + case 'ee-TG': + l = eeTG; + break; + case 'el': + l = el; + break; + case 'el_CY': + case 'el-CY': + l = elCY; + break; + case 'en': + l = en; + break; + case 'en_001': + case 'en-001': + l = en001; + break; + case 'en_150': + case 'en-150': + l = en150; + break; + case 'en_AG': + case 'en-AG': + l = enAG; + break; + case 'en_AI': + case 'en-AI': + l = enAI; + break; + case 'en_AS': + case 'en-AS': + l = enAS; + break; + case 'en_AT': + case 'en-AT': + l = enAT; + break; + case 'en_AU': + case 'en-AU': + l = enAU; + break; + case 'en_BB': + case 'en-BB': + l = enBB; + break; + case 'en_BE': + case 'en-BE': + l = enBE; + break; + case 'en_BI': + case 'en-BI': + l = enBI; + break; + case 'en_BM': + case 'en-BM': + l = enBM; + break; + case 'en_BS': + case 'en-BS': + l = enBS; + break; + case 'en_BW': + case 'en-BW': + l = enBW; + break; + case 'en_BZ': + case 'en-BZ': + l = enBZ; + break; + case 'en_CA': + case 'en-CA': + l = enCA; + break; + case 'en_CC': + case 'en-CC': + l = enCC; + break; + case 'en_CH': + case 'en-CH': + l = enCH; + break; + case 'en_CK': + case 'en-CK': + l = enCK; + break; + case 'en_CM': + case 'en-CM': + l = enCM; + break; + case 'en_CX': + case 'en-CX': + l = enCX; + break; + case 'en_CY': + case 'en-CY': + l = enCY; + break; + case 'en_DE': + case 'en-DE': + l = enDE; + break; + case 'en_DG': + case 'en-DG': + l = enDG; + break; + case 'en_DK': + case 'en-DK': + l = enDK; + break; + case 'en_DM': + case 'en-DM': + l = enDM; + break; + case 'en_ER': + case 'en-ER': + l = enER; + break; + case 'en_FI': + case 'en-FI': + l = enFI; + break; + case 'en_FJ': + case 'en-FJ': + l = enFJ; + break; + case 'en_FK': + case 'en-FK': + l = enFK; + break; + case 'en_FM': + case 'en-FM': + l = enFM; + break; + case 'en_GB': + case 'en-GB': + l = enGB; + break; + case 'en_GD': + case 'en-GD': + l = enGD; + break; + case 'en_GG': + case 'en-GG': + l = enGG; + break; + case 'en_GH': + case 'en-GH': + l = enGH; + break; + case 'en_GI': + case 'en-GI': + l = enGI; + break; + case 'en_GM': + case 'en-GM': + l = enGM; + break; + case 'en_GU': + case 'en-GU': + l = enGU; + break; + case 'en_GY': + case 'en-GY': + l = enGY; + break; + case 'en_HK': + case 'en-HK': + l = enHK; + break; + case 'en_IE': + case 'en-IE': + l = enIE; + break; + case 'en_IL': + case 'en-IL': + l = enIL; + break; + case 'en_IM': + case 'en-IM': + l = enIM; + break; + case 'en_IN': + case 'en-IN': + l = enIN; + break; + case 'en_IO': + case 'en-IO': + l = enIO; + break; + case 'en_JE': + case 'en-JE': + l = enJE; + break; + case 'en_JM': + case 'en-JM': + l = enJM; + break; + case 'en_KE': + case 'en-KE': + l = enKE; + break; + case 'en_KI': + case 'en-KI': + l = enKI; + break; + case 'en_KN': + case 'en-KN': + l = enKN; + break; + case 'en_KY': + case 'en-KY': + l = enKY; + break; + case 'en_LC': + case 'en-LC': + l = enLC; + break; + case 'en_LR': + case 'en-LR': + l = enLR; + break; + case 'en_LS': + case 'en-LS': + l = enLS; + break; + case 'en_MG': + case 'en-MG': + l = enMG; + break; + case 'en_MH': + case 'en-MH': + l = enMH; + break; + case 'en_MO': + case 'en-MO': + l = enMO; + break; + case 'en_MP': + case 'en-MP': + l = enMP; + break; + case 'en_MS': + case 'en-MS': + l = enMS; + break; + case 'en_MT': + case 'en-MT': + l = enMT; + break; + case 'en_MU': + case 'en-MU': + l = enMU; + break; + case 'en_MW': + case 'en-MW': + l = enMW; + break; + case 'en_MY': + case 'en-MY': + l = enMY; + break; + case 'en_NA': + case 'en-NA': + l = enNA; + break; + case 'en_NF': + case 'en-NF': + l = enNF; + break; + case 'en_NG': + case 'en-NG': + l = enNG; + break; + case 'en_NL': + case 'en-NL': + l = enNL; + break; + case 'en_NR': + case 'en-NR': + l = enNR; + break; + case 'en_NU': + case 'en-NU': + l = enNU; + break; + case 'en_NZ': + case 'en-NZ': + l = enNZ; + break; + case 'en_PG': + case 'en-PG': + l = enPG; + break; + case 'en_PH': + case 'en-PH': + l = enPH; + break; + case 'en_PK': + case 'en-PK': + l = enPK; + break; + case 'en_PN': + case 'en-PN': + l = enPN; + break; + case 'en_PR': + case 'en-PR': + l = enPR; + break; + case 'en_PW': + case 'en-PW': + l = enPW; + break; + case 'en_RW': + case 'en-RW': + l = enRW; + break; + case 'en_SB': + case 'en-SB': + l = enSB; + break; + case 'en_SC': + case 'en-SC': + l = enSC; + break; + case 'en_SD': + case 'en-SD': + l = enSD; + break; + case 'en_SE': + case 'en-SE': + l = enSE; + break; + case 'en_SG': + case 'en-SG': + l = enSG; + break; + case 'en_SH': + case 'en-SH': + l = enSH; + break; + case 'en_SI': + case 'en-SI': + l = enSI; + break; + case 'en_SL': + case 'en-SL': + l = enSL; + break; + case 'en_SS': + case 'en-SS': + l = enSS; + break; + case 'en_SX': + case 'en-SX': + l = enSX; + break; + case 'en_SZ': + case 'en-SZ': + l = enSZ; + break; + case 'en_TC': + case 'en-TC': + l = enTC; + break; + case 'en_TK': + case 'en-TK': + l = enTK; + break; + case 'en_TO': + case 'en-TO': + l = enTO; + break; + case 'en_TT': + case 'en-TT': + l = enTT; + break; + case 'en_TV': + case 'en-TV': + l = enTV; + break; + case 'en_TZ': + case 'en-TZ': + l = enTZ; + break; + case 'en_UG': + case 'en-UG': + l = enUG; + break; + case 'en_UM': + case 'en-UM': + l = enUM; + break; + case 'en_US-POSIX': + case 'en-US-POSIX': + l = enUSPOSIX; + break; + case 'en_VC': + case 'en-VC': + l = enVC; + break; + case 'en_VG': + case 'en-VG': + l = enVG; + break; + case 'en_VI': + case 'en-VI': + l = enVI; + break; + case 'en_VU': + case 'en-VU': + l = enVU; + break; + case 'en_WS': + case 'en-WS': + l = enWS; + break; + case 'en_ZA': + case 'en-ZA': + l = enZA; + break; + case 'en_ZM': + case 'en-ZM': + l = enZM; + break; + case 'en_ZW': + case 'en-ZW': + l = enZW; + break; + case 'eo': + l = eo; + break; + case 'es': + l = es; + break; + case 'es_419': + case 'es-419': + l = es419; + break; + case 'es_AR': + case 'es-AR': + l = esAR; + break; + case 'es_BO': + case 'es-BO': + l = esBO; + break; + case 'es_BR': + case 'es-BR': + l = esBR; + break; + case 'es_BZ': + case 'es-BZ': + l = esBZ; + break; + case 'es_CL': + case 'es-CL': + l = esCL; + break; + case 'es_CO': + case 'es-CO': + l = esCO; + break; + case 'es_CR': + case 'es-CR': + l = esCR; + break; + case 'es_CU': + case 'es-CU': + l = esCU; + break; + case 'es_DO': + case 'es-DO': + l = esDO; + break; + case 'es_EA': + case 'es-EA': + l = esEA; + break; + case 'es_EC': + case 'es-EC': + l = esEC; + break; + case 'es_GQ': + case 'es-GQ': + l = esGQ; + break; + case 'es_GT': + case 'es-GT': + l = esGT; + break; + case 'es_HN': + case 'es-HN': + l = esHN; + break; + case 'es_IC': + case 'es-IC': + l = esIC; + break; + case 'es_MX': + case 'es-MX': + l = esMX; + break; + case 'es_NI': + case 'es-NI': + l = esNI; + break; + case 'es_PA': + case 'es-PA': + l = esPA; + break; + case 'es_PE': + case 'es-PE': + l = esPE; + break; + case 'es_PH': + case 'es-PH': + l = esPH; + break; + case 'es_PR': + case 'es-PR': + l = esPR; + break; + case 'es_PY': + case 'es-PY': + l = esPY; + break; + case 'es_SV': + case 'es-SV': + l = esSV; + break; + case 'es_US': + case 'es-US': + l = esUS; + break; + case 'es_UY': + case 'es-UY': + l = esUY; + break; + case 'es_VE': + case 'es-VE': + l = esVE; + break; + case 'et': + l = et; + break; + case 'eu': + l = eu; + break; + case 'ewo': + l = ewo; + break; + case 'fa': + l = fa; + break; + case 'fa_AF': + case 'fa-AF': + l = faAF; + break; + case 'ff': + l = ff; + break; + case 'ff_CM': + case 'ff-CM': + l = ffCM; + break; + case 'ff_GN': + case 'ff-GN': + l = ffGN; + break; + case 'ff_MR': + case 'ff-MR': + l = ffMR; + break; + case 'fi': + l = fi; + break; + case 'fil': + l = fil; + break; + case 'fo': + l = fo; + break; + case 'fo_DK': + case 'fo-DK': + l = foDK; + break; + case 'fr': + l = fr; + break; + case 'fr_BE': + case 'fr-BE': + l = frBE; + break; + case 'fr_BF': + case 'fr-BF': + l = frBF; + break; + case 'fr_BI': + case 'fr-BI': + l = frBI; + break; + case 'fr_BJ': + case 'fr-BJ': + l = frBJ; + break; + case 'fr_BL': + case 'fr-BL': + l = frBL; + break; + case 'fr_CA': + case 'fr-CA': + l = frCA; + break; + case 'fr_CD': + case 'fr-CD': + l = frCD; + break; + case 'fr_CF': + case 'fr-CF': + l = frCF; + break; + case 'fr_CG': + case 'fr-CG': + l = frCG; + break; + case 'fr_CH': + case 'fr-CH': + l = frCH; + break; + case 'fr_CI': + case 'fr-CI': + l = frCI; + break; + case 'fr_CM': + case 'fr-CM': + l = frCM; + break; + case 'fr_DJ': + case 'fr-DJ': + l = frDJ; + break; + case 'fr_DZ': + case 'fr-DZ': + l = frDZ; + break; + case 'fr_GA': + case 'fr-GA': + l = frGA; + break; + case 'fr_GF': + case 'fr-GF': + l = frGF; + break; + case 'fr_GN': + case 'fr-GN': + l = frGN; + break; + case 'fr_GP': + case 'fr-GP': + l = frGP; + break; + case 'fr_GQ': + case 'fr-GQ': + l = frGQ; + break; + case 'fr_HT': + case 'fr-HT': + l = frHT; + break; + case 'fr_KM': + case 'fr-KM': + l = frKM; + break; + case 'fr_LU': + case 'fr-LU': + l = frLU; + break; + case 'fr_MA': + case 'fr-MA': + l = frMA; + break; + case 'fr_MC': + case 'fr-MC': + l = frMC; + break; + case 'fr_MF': + case 'fr-MF': + l = frMF; + break; + case 'fr_MG': + case 'fr-MG': + l = frMG; + break; + case 'fr_ML': + case 'fr-ML': + l = frML; + break; + case 'fr_MQ': + case 'fr-MQ': + l = frMQ; + break; + case 'fr_MR': + case 'fr-MR': + l = frMR; + break; + case 'fr_MU': + case 'fr-MU': + l = frMU; + break; + case 'fr_NC': + case 'fr-NC': + l = frNC; + break; + case 'fr_NE': + case 'fr-NE': + l = frNE; + break; + case 'fr_PF': + case 'fr-PF': + l = frPF; + break; + case 'fr_PM': + case 'fr-PM': + l = frPM; + break; + case 'fr_RE': + case 'fr-RE': + l = frRE; + break; + case 'fr_RW': + case 'fr-RW': + l = frRW; + break; + case 'fr_SC': + case 'fr-SC': + l = frSC; + break; + case 'fr_SN': + case 'fr-SN': + l = frSN; + break; + case 'fr_SY': + case 'fr-SY': + l = frSY; + break; + case 'fr_TD': + case 'fr-TD': + l = frTD; + break; + case 'fr_TG': + case 'fr-TG': + l = frTG; + break; + case 'fr_TN': + case 'fr-TN': + l = frTN; + break; + case 'fr_VU': + case 'fr-VU': + l = frVU; + break; + case 'fr_WF': + case 'fr-WF': + l = frWF; + break; + case 'fr_YT': + case 'fr-YT': + l = frYT; + break; + case 'fur': + l = fur; + break; + case 'fy': + l = fy; + break; + case 'ga': + l = ga; + break; + case 'gd': + l = gd; + break; + case 'gl': + l = gl; + break; + case 'gsw': + l = gsw; + break; + case 'gsw_FR': + case 'gsw-FR': + l = gswFR; + break; + case 'gsw_LI': + case 'gsw-LI': + l = gswLI; + break; + case 'gu': + l = gu; + break; + case 'guz': + l = guz; + break; + case 'gv': + l = gv; + break; + case 'ha': + l = ha; + break; + case 'ha_GH': + case 'ha-GH': + l = haGH; + break; + case 'ha_NE': + case 'ha-NE': + l = haNE; + break; + case 'haw': + l = haw; + break; + case 'he': + l = he; + break; + case 'hi': + l = hi; + break; + case 'hr': + l = hr; + break; + case 'hr_BA': + case 'hr-BA': + l = hrBA; + break; + case 'hsb': + l = hsb; + break; + case 'hu': + l = hu; + break; + case 'hy': + l = hy; + break; + case 'id': + l = id; + break; + case 'ig': + l = ig; + break; + case 'ii': + l = ii; + break; + case 'is': + l = is; + break; + case 'it': + l = it; + break; + case 'it_CH': + case 'it-CH': + l = itCH; + break; + case 'it_SM': + case 'it-SM': + l = itSM; + break; + case 'it_VA': + case 'it-VA': + l = itVA; + break; + case 'ja': + l = ja; + break; + case 'jgo': + l = jgo; + break; + case 'jmc': + l = jmc; + break; + case 'ka': + l = ka; + break; + case 'kab': + l = kab; + break; + case 'kam': + l = kam; + break; + case 'kde': + l = kde; + break; + case 'kea': + l = kea; + break; + case 'khq': + l = khq; + break; + case 'ki': + l = ki; + break; + case 'kk': + l = kk; + break; + case 'kkj': + l = kkj; + break; + case 'kl': + l = kl; + break; + case 'kln': + l = kln; + break; + case 'km': + l = km; + break; + case 'kn': + l = kn; + break; + case 'ko': + l = ko; + break; + case 'ko_KP': + case 'ko-KP': + l = koKP; + break; + case 'kok': + l = kok; + break; + case 'ks': + l = ks; + break; + case 'ksb': + l = ksb; + break; + case 'ksf': + l = ksf; + break; + case 'ksh': + l = ksh; + break; + case 'kw': + l = kw; + break; + case 'ky': + l = ky; + break; + case 'lag': + l = lag; + break; + case 'lb': + l = lb; + break; + case 'lg': + l = lg; + break; + case 'lkt': + l = lkt; + break; + case 'ln': + l = ln; + break; + case 'ln_AO': + case 'ln-AO': + l = lnAO; + break; + case 'ln_CF': + case 'ln-CF': + l = lnCF; + break; + case 'ln_CG': + case 'ln-CG': + l = lnCG; + break; + case 'lo': + l = lo; + break; + case 'lrc': + l = lrc; + break; + case 'lrc_IQ': + case 'lrc-IQ': + l = lrcIQ; + break; + case 'lt': + l = lt; + break; + case 'lu': + l = lu; + break; + case 'luo': + l = luo; + break; + case 'luy': + l = luy; + break; + case 'lv': + l = lv; + break; + case 'mas': + l = mas; + break; + case 'mas_TZ': + case 'mas-TZ': + l = masTZ; + break; + case 'mer': + l = mer; + break; + case 'mfe': + l = mfe; + break; + case 'mg': + l = mg; + break; + case 'mgh': + l = mgh; + break; + case 'mgo': + l = mgo; + break; + case 'mk': + l = mk; + break; + case 'ml': + l = ml; + break; + case 'mn': + l = mn; + break; + case 'mr': + l = mr; + break; + case 'ms': + l = ms; + break; + case 'ms_BN': + case 'ms-BN': + l = msBN; + break; + case 'ms_SG': + case 'ms-SG': + l = msSG; + break; + case 'mt': + l = mt; + break; + case 'mua': + l = mua; + break; + case 'my': + l = my; + break; + case 'mzn': + l = mzn; + break; + case 'naq': + l = naq; + break; + case 'nb': + l = nb; + break; + case 'nb_SJ': + case 'nb-SJ': + l = nbSJ; + break; + case 'nd': + l = nd; + break; + case 'nds': + l = nds; + break; + case 'nds_NL': + case 'nds-NL': + l = ndsNL; + break; + case 'ne': + l = ne; + break; + case 'ne_IN': + case 'ne-IN': + l = neIN; + break; + case 'nl': + l = nl; + break; + case 'nl_AW': + case 'nl-AW': + l = nlAW; + break; + case 'nl_BE': + case 'nl-BE': + l = nlBE; + break; + case 'nl_BQ': + case 'nl-BQ': + l = nlBQ; + break; + case 'nl_CW': + case 'nl-CW': + l = nlCW; + break; + case 'nl_SR': + case 'nl-SR': + l = nlSR; + break; + case 'nl_SX': + case 'nl-SX': + l = nlSX; + break; + case 'nmg': + l = nmg; + break; + case 'nn': + l = nn; + break; + case 'nnh': + l = nnh; + break; + case 'nus': + l = nus; + break; + case 'nyn': + l = nyn; + break; + case 'om': + l = om; + break; + case 'om_KE': + case 'om-KE': + l = omKE; + break; + case 'or': + l = or; + break; + case 'os': + l = os; + break; + case 'os_RU': + case 'os-RU': + l = osRU; + break; + case 'pa': + l = pa; + break; + case 'pa_Arab': + case 'pa-Arab': + l = paArab; + break; + case 'pa_Guru': + case 'pa-Guru': + l = paGuru; + break; + case 'pl': + l = pl; + break; + case 'prg': + l = prg; + break; + case 'ps': + l = ps; + break; + case 'pt': + l = pt; + break; + case 'pt_AO': + case 'pt-AO': + l = ptAO; + break; + case 'pt_CH': + case 'pt-CH': + l = ptCH; + break; + case 'pt_CV': + case 'pt-CV': + l = ptCV; + break; + case 'pt_GQ': + case 'pt-GQ': + l = ptGQ; + break; + case 'pt_GW': + case 'pt-GW': + l = ptGW; + break; + case 'pt_LU': + case 'pt-LU': + l = ptLU; + break; + case 'pt_MO': + case 'pt-MO': + l = ptMO; + break; + case 'pt_MZ': + case 'pt-MZ': + l = ptMZ; + break; + case 'pt_PT': + case 'pt-PT': + l = ptPT; + break; + case 'pt_ST': + case 'pt-ST': + l = ptST; + break; + case 'pt_TL': + case 'pt-TL': + l = ptTL; + break; + case 'qu': + l = qu; + break; + case 'qu_BO': + case 'qu-BO': + l = quBO; + break; + case 'qu_EC': + case 'qu-EC': + l = quEC; + break; + case 'rm': + l = rm; + break; + case 'rn': + l = rn; + break; + case 'ro': + l = ro; + break; + case 'ro_MD': + case 'ro-MD': + l = roMD; + break; + case 'rof': + l = rof; + break; + case 'root': + l = root; + break; + case 'ru': + l = ru; + break; + case 'ru_BY': + case 'ru-BY': + l = ruBY; + break; + case 'ru_KG': + case 'ru-KG': + l = ruKG; + break; + case 'ru_KZ': + case 'ru-KZ': + l = ruKZ; + break; + case 'ru_MD': + case 'ru-MD': + l = ruMD; + break; + case 'ru_UA': + case 'ru-UA': + l = ruUA; + break; + case 'rw': + l = rw; + break; + case 'rwk': + l = rwk; + break; + case 'sah': + l = sah; + break; + case 'saq': + l = saq; + break; + case 'sbp': + l = sbp; + break; + case 'se': + l = se; + break; + case 'se_FI': + case 'se-FI': + l = seFI; + break; + case 'se_SE': + case 'se-SE': + l = seSE; + break; + case 'seh': + l = seh; + break; + case 'ses': + l = ses; + break; + case 'sg': + l = sg; + break; + case 'shi': + l = shi; + break; + case 'shi_Latn': + case 'shi-Latn': + l = shiLatn; + break; + case 'shi_Tfng': + case 'shi-Tfng': + l = shiTfng; + break; + case 'si': + l = si; + break; + case 'sk': + l = sk; + break; + case 'sl': + l = sl; + break; + case 'smn': + l = smn; + break; + case 'sn': + l = sn; + break; + case 'so': + l = so; + break; + case 'so_DJ': + case 'so-DJ': + l = soDJ; + break; + case 'so_ET': + case 'so-ET': + l = soET; + break; + case 'so_KE': + case 'so-KE': + l = soKE; + break; + case 'sq': + l = sq; + break; + case 'sq_MK': + case 'sq-MK': + l = sqMK; + break; + case 'sq_XK': + case 'sq-XK': + l = sqXK; + break; + case 'sr': + l = sr; + break; + case 'sr_Cyrl': + case 'sr-Cyrl': + l = srCyrl; + break; + case 'sr_Cyrl-BA': + case 'sr-Cyrl-BA': + l = srCyrlBA; + break; + case 'sr_Cyrl-ME': + case 'sr-Cyrl-ME': + l = srCyrlME; + break; + case 'sr_Cyrl-XK': + case 'sr-Cyrl-XK': + l = srCyrlXK; + break; + case 'sr_Latn': + case 'sr-Latn': + l = srLatn; + break; + case 'sr_Latn-BA': + case 'sr-Latn-BA': + l = srLatnBA; + break; + case 'sr_Latn-ME': + case 'sr-Latn-ME': + l = srLatnME; + break; + case 'sr_Latn-XK': + case 'sr-Latn-XK': + l = srLatnXK; + break; + case 'sv': + l = sv; + break; + case 'sv_AX': + case 'sv-AX': + l = svAX; + break; + case 'sv_FI': + case 'sv-FI': + l = svFI; + break; + case 'sw': + l = sw; + break; + case 'sw_CD': + case 'sw-CD': + l = swCD; + break; + case 'sw_KE': + case 'sw-KE': + l = swKE; + break; + case 'sw_UG': + case 'sw-UG': + l = swUG; + break; + case 'ta': + l = ta; + break; + case 'ta_LK': + case 'ta-LK': + l = taLK; + break; + case 'ta_MY': + case 'ta-MY': + l = taMY; + break; + case 'ta_SG': + case 'ta-SG': + l = taSG; + break; + case 'te': + l = te; + break; + case 'teo': + l = teo; + break; + case 'teo_KE': + case 'teo-KE': + l = teoKE; + break; + case 'th': + l = th; + break; + case 'ti': + l = ti; + break; + case 'ti_ER': + case 'ti-ER': + l = tiER; + break; + case 'tk': + l = tk; + break; + case 'to': + l = to; + break; + case 'tr': + l = tr; + break; + case 'tr_CY': + case 'tr-CY': + l = trCY; + break; + case 'twq': + l = twq; + break; + case 'tzm': + l = tzm; + break; + case 'ug': + l = ug; + break; + case 'uk': + l = uk; + break; + case 'ur': + l = ur; + break; + case 'ur_IN': + case 'ur-IN': + l = urIN; + break; + case 'uz': + l = uz; + break; + case 'uz_Arab': + case 'uz-Arab': + l = uzArab; + break; + case 'uz_Cyrl': + case 'uz-Cyrl': + l = uzCyrl; + break; + case 'uz_Latn': + case 'uz-Latn': + l = uzLatn; + break; + case 'vai': + l = vai; + break; + case 'vai_Latn': + case 'vai-Latn': + l = vaiLatn; + break; + case 'vai_Vaii': + case 'vai-Vaii': + l = vaiVaii; + break; + case 'vi': + l = vi; + break; + case 'vo': + l = vo; + break; + case 'vun': + l = vun; + break; + case 'wae': + l = wae; + break; + case 'xog': + l = xog; + break; + case 'yav': + l = yav; + break; + case 'yi': + l = yi; + break; + case 'yo': + l = yo; + break; + case 'yo_BJ': + case 'yo-BJ': + l = yoBJ; + break; + case 'yue': + l = yue; + break; + case 'zgh': + l = zgh; + break; + case 'zh': + l = zh; + break; + case 'zh_Hans': + case 'zh-Hans': + l = zhHans; + break; + case 'zh_Hans-HK': + case 'zh-Hans-HK': + l = zhHansHK; + break; + case 'zh_Hans-MO': + case 'zh-Hans-MO': + l = zhHansMO; + break; + case 'zh_Hans-SG': + case 'zh-Hans-SG': + l = zhHansSG; + break; + case 'zh_Hant': + case 'zh-Hant': + l = zhHant; + break; + case 'zh_Hant-HK': + case 'zh-Hant-HK': + l = zhHantHK; + break; + case 'zh_Hant-MO': + case 'zh-Hant-MO': + l = zhHantMO; + break; + case 'zu': + l = zu; + break; + + default: + l = en; +} + +registerLocaleData(l); diff --git a/packages/common/locales/tsconfig-build.json b/packages/common/locales/tsconfig-build.json index f7f21ad006..e6387189d2 100644 --- a/packages/common/locales/tsconfig-build.json +++ b/packages/common/locales/tsconfig-build.json @@ -1,5 +1,5 @@ { -"compilerOptions": { + "compilerOptions": { "baseUrl": ".", "declaration": true, "stripInternal": true, @@ -16,5 +16,8 @@ "target": "es5", "skipLibCheck": true, "lib": ["es2015", "dom"] - } + }, + "exclude": [ + "./closure-locale.ts" + ] } diff --git a/tools/gulp-tasks/cldr.js b/tools/gulp-tasks/cldr.js index e6785161e9..62dc23a571 100644 --- a/tools/gulp-tasks/cldr.js +++ b/tools/gulp-tasks/cldr.js @@ -25,5 +25,16 @@ module.exports = { fs.mkdirSync(cldrDataFolder); } cldrDownloader(path.join(__dirname, 'cldr/cldr-urls.json'), cldrDataFolder, done); - } + }, + + closure: gulp => done => { + const {RELATIVE_I18N_DATA_FOLDER} = require('./cldr/extract'); + console.log(RELATIVE_I18N_DATA_FOLDER, fs.existsSync(RELATIVE_I18N_DATA_FOLDER)); + if (!fs.existsSync(RELATIVE_I18N_DATA_FOLDER)) { + throw new Error( + `You must run "gulp cldr:extract" before you can create the closure-locale.ts file`); + } + const localeAll = require('./cldr/closure'); + return localeAll(gulp, done); + }, }; diff --git a/tools/gulp-tasks/cldr/closure.js b/tools/gulp-tasks/cldr/closure.js new file mode 100644 index 0000000000..667a60f8d7 --- /dev/null +++ b/tools/gulp-tasks/cldr/closure.js @@ -0,0 +1,83 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +const fs = require('fs'); +const path = require('path'); +const yargs = require('yargs').argv; +const {I18N_FOLDER, I18N_DATA_FOLDER, RELATIVE_I18N_DATA_FOLDER, HEADER} = require('./extract'); +const OUTPUT_NAME = `closure-locale.ts`; + +module.exports = (gulp, done) => { + let GOOG_LOCALES; + if (yargs.locales) { + GOOG_LOCALES = yargs.locales.split(','); + } else { + if (!fs.existsSync(path.join(__dirname, 'cldr-data'))) { + throw new Error(`You must run "gulp cldr:download" before you can extract the data`); + } + const cldrData = require('./cldr-data'); + GOOG_LOCALES = cldrData.availableLocales; + } + + console.log(`Writing file ${I18N_DATA_FOLDER}/${OUTPUT_NAME}`); + fs.writeFileSync( + `${RELATIVE_I18N_DATA_FOLDER}/${OUTPUT_NAME}`, generateAllLocalesFile(GOOG_LOCALES)); + + console.log(`Formatting ${I18N_DATA_FOLDER}/${OUTPUT_NAME}..."`); + const format = require('gulp-clang-format'); + const clangFormat = require('clang-format'); + return gulp.src([`${I18N_DATA_FOLDER}/${OUTPUT_NAME}`], {base: '.'}) + .pipe(format.format('file', clangFormat)) + .pipe(gulp.dest('.')); +}; + +/** + * Generate a file that contains all locale to import for closure. + * Tree shaking will only keep the data for the `goog.LOCALE` locale. + */ +function generateAllLocalesFile(LOCALES) { + function generateCases(locale) { + let str = ''; + if (locale.match(/-/)) { + str = `case '${locale.replace('-', '_')}':\n` + } + // clang-format off + str += `case '${locale}': + l = ${toCamelCase(locale)}; + break; +`; + // clang-format on + return str; + } + // clang-format off + return `${HEADER} +import {registerLocaleData} from '../src/i18n/locale_data'; +${LOCALES.map(locale => `import ${toCamelCase(locale)} from './${locale}';\n`).join('')} + +let l: any; + +switch (goog.LOCALE) { +${LOCALES.map(locale => generateCases(locale)).join('')} + default: + l = en; +} + +registerLocaleData(l); +`; + // clang-format on +} + +/** + * Transform a string to camelCase + */ +function toCamelCase(str) { + return str.replace(/-+([a-z0-9A-Z])/g, (...m) => m[1].toUpperCase()); +} + +module.exports.I18N_FOLDER = I18N_FOLDER; +module.exports.I18N_DATA_FOLDER = I18N_DATA_FOLDER; diff --git a/tools/gulp-tasks/cldr/extract.js b/tools/gulp-tasks/cldr/extract.js index b9d8bf9711..0922f7fd9f 100644 --- a/tools/gulp-tasks/cldr/extract.js +++ b/tools/gulp-tasks/cldr/extract.js @@ -518,3 +518,5 @@ function removeDuplicates(data) { module.exports.I18N_FOLDER = I18N_FOLDER; module.exports.I18N_DATA_FOLDER = I18N_DATA_FOLDER; +module.exports.RELATIVE_I18N_DATA_FOLDER = RELATIVE_I18N_DATA_FOLDER; +module.exports.HEADER = HEADER;