From 6b6b5ac1c17ab2e8cf3c8d2e24b99c582e80631e Mon Sep 17 00:00:00 2001 From: Andreas Skorczyk Date: Sun, 27 Jun 2021 16:05:20 +0200 Subject: [PATCH 1/4] Split out download functionality Instead of each function implementing its own download logic, we can split it out into a `download` function. --- gomobile/CatalogDB.go | 39 ---------------------- gomobile/Download.go | 46 ++++++++++++++++++++++++++ publication/CatalogDB.go | 62 +++-------------------------------- publication/download.go | 70 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 96 deletions(-) create mode 100644 gomobile/Download.go create mode 100644 publication/download.go diff --git a/gomobile/CatalogDB.go b/gomobile/CatalogDB.go index 24f256f..aa6470a 100644 --- a/gomobile/CatalogDB.go +++ b/gomobile/CatalogDB.go @@ -6,26 +6,6 @@ import ( "github.com/AndreasSko/go-jwlm/publication" ) -// DownloadManager keeps all the information of a running download, enabling it -// to check progress and also cancel the download if necessary -type DownloadManager struct { - Progress *DownloadProgress - prgrsChan chan publication.Progress - ctx context.Context - cancel context.CancelFunc - err error -} - -// DownloadProgress represents the progress of a running download -type DownloadProgress struct { - Size int64 - BytesComplete int64 - BytesPerSecond float64 - Progress float64 - Done bool - Canceled bool -} - // DownloadCatalog downloads the newest catalog.db and saves it at dst. The // returned DownloadManager allows to keep track and manage the running download func DownloadCatalog(dst string) *DownloadManager { @@ -60,25 +40,6 @@ func DownloadCatalog(dst string) *DownloadManager { return dm } -// CancelDownload cancels a running download -func (dm *DownloadManager) CancelDownload() { - dm.cancel() - dm.Progress.Canceled = true -} - -// DownloadSuccessful indicates if the download has been successful -func (dm *DownloadManager) DownloadSuccessful() bool { - return dm.Progress.Done && dm.err == nil && !dm.Progress.Canceled -} - -// Error returns possible errors of a download as a string -func (dm *DownloadManager) Error() string { - if dm.err != nil { - return dm.err.Error() - } - return "" -} - // CatalogNeedsUpdate checks if catalog.db located at path is still up-to-date. // For now it just makes sure that it is younger than one month. // If it can't find a file at path, it returns true diff --git a/gomobile/Download.go b/gomobile/Download.go new file mode 100644 index 0000000..90fe579 --- /dev/null +++ b/gomobile/Download.go @@ -0,0 +1,46 @@ +package gomobile + +import ( + "context" + + "github.com/AndreasSko/go-jwlm/publication" +) + +// DownloadManager keeps all the information of a running download, enabling it +// to check progress and also cancel the download if necessary +type DownloadManager struct { + Progress *DownloadProgress + prgrsChan chan publication.Progress + ctx context.Context + cancel context.CancelFunc + err error +} + +// DownloadProgress represents the progress of a running download +type DownloadProgress struct { + Size int64 + BytesComplete int64 + BytesPerSecond float64 + Progress float64 + Done bool + Canceled bool +} + +// CancelDownload cancels a running download +func (dm *DownloadManager) CancelDownload() { + dm.cancel() + dm.Progress.Canceled = true +} + +// DownloadSuccessful indicates if the download has been successful +func (dm *DownloadManager) DownloadSuccessful() bool { + return dm.Progress.Done && dm.err == nil && !dm.Progress.Canceled +} + +// Error returns possible errors of a download as a string +func (dm *DownloadManager) Error() string { + if dm.err != nil { + return dm.err.Error() + } + return "" +} diff --git a/publication/CatalogDB.go b/publication/CatalogDB.go index 8272596..d279b5e 100644 --- a/publication/CatalogDB.go +++ b/publication/CatalogDB.go @@ -10,7 +10,6 @@ import ( "os" "time" - "github.com/cavaliercoder/grab" "github.com/codeclysm/extract/v3" "github.com/pkg/errors" ) @@ -21,17 +20,6 @@ var ManifestURL = "https://app.jw-cdn.org/catalogs/publications/v4/manifest.json // CatalogURL is the URL to the publication catalog var CatalogURL = "https://app.jw-cdn.org/catalogs/publications/v4/%s/catalog.db.gz" -// Progress represents the progress of a running download -type Progress struct { - Size int64 - BytesComplete int64 - BytesPerSecond float64 - Progress float64 - Duration time.Duration - ETA time.Time - Done bool -} - type catalogManifest struct { Version int `json:"version"` Current string `json:"current"` @@ -88,52 +76,13 @@ func DownloadCatalog(ctx context.Context, prgrs chan Progress, dst string) error } url := fmt.Sprintf(CatalogURL, mfst.Current) - client := grab.NewClient() - req, err := grab.NewRequest(tmp, url) + filename, err := download(ctx, prgrs, url, tmp) if err != nil { - return errors.Wrapf(err, "Error while creating request for %s", url) - } - req = req.WithContext(ctx) - resp := client.Do(req) - - progress := Progress{} - - // Send a progress over the prgrsChan every 250 milliseconds - t := time.NewTicker(250 * time.Millisecond) - defer t.Stop() -Loop: - for { - progress := Progress{ - Size: resp.Size(), - BytesComplete: resp.BytesComplete(), - BytesPerSecond: resp.BytesPerSecond(), - Progress: resp.Progress(), - Duration: resp.Duration(), - ETA: resp.ETA(), - } - select { - case <-t.C: - select { - case prgrs <- progress: - continue - default: - continue - } - case <-resp.Done: - break Loop - } - } - if err := resp.Err(); err != nil { - progress.Done = true - select { - case prgrs <- progress: - default: - } - return errors.Wrapf(err, "Error while downloading catalog from %s", url) + return fmt.Errorf("failed to download catalog: %w", err) } // Extract and save at dst - data, err := ioutil.ReadFile(resp.Filename) + data, err := ioutil.ReadFile(filename) if err != nil { return errors.Wrap(err, "Error while reading catalog.db.gz") } @@ -143,9 +92,8 @@ Loop: return errors.Wrap(err, "Error while extracting catalog.db") } - progress.Done = true select { - case prgrs <- progress: + case prgrs <- Progress{Done: true}: default: } @@ -158,7 +106,7 @@ func fetchManifest(ctx context.Context) (catalogManifest, error) { if err != nil { return catalogManifest{}, errors.Wrapf(err, "Error while creating new request for %s", ManifestURL) } - req.WithContext(ctx) + req = req.WithContext(ctx) client := &http.Client{} resp, err := client.Do(req) diff --git a/publication/download.go b/publication/download.go new file mode 100644 index 0000000..e6d38c0 --- /dev/null +++ b/publication/download.go @@ -0,0 +1,70 @@ +package publication + +import ( + "context" + "fmt" + "time" + + "github.com/cavaliercoder/grab" +) + +// Progress represents the progress of a running download +type Progress struct { + Size int64 + BytesComplete int64 + BytesPerSecond float64 + Progress float64 + Duration time.Duration + ETA time.Time + Done bool +} + +// download downloads a file from url and stores it at dst. +// The prgrs channel informs about the progress of the download. +func download(ctx context.Context, prgrs chan Progress, url string, dst string) (string, error) { + client := grab.NewClient() + req, err := grab.NewRequest(dst, url) + if err != nil { + return "", fmt.Errorf("could not create request for %s: %w", url, err) + } + req = req.WithContext(ctx) + resp := client.Do(req) + + progress := Progress{} + + // Send a progress over the prgrsChan every 250 milliseconds + t := time.NewTicker(250 * time.Millisecond) + defer t.Stop() +Loop: + for { + progress := Progress{ + Size: resp.Size(), + BytesComplete: resp.BytesComplete(), + BytesPerSecond: resp.BytesPerSecond(), + Progress: resp.Progress(), + Duration: resp.Duration(), + ETA: resp.ETA(), + } + select { + case <-t.C: + select { + case prgrs <- progress: + continue + default: + continue + } + case <-resp.Done: + break Loop + } + } + if err := resp.Err(); err != nil { + progress.Done = true + select { + case prgrs <- progress: + default: + } + return "", fmt.Errorf("could not download %s: %w", url, err) + } + + return resp.Filename, nil +} From babd0523b5671165d15c1a025c7d2df7f8c6591e Mon Sep 17 00:00:00 2001 From: Andreas Skorczyk Date: Sun, 27 Jun 2021 16:14:36 +0200 Subject: [PATCH 2/4] :sparkles: Download publication This enables to download and unpack a JWPub, to later use its SQLite DB. --- go.mod | 11 +- go.sum | 94 +- publication/MepsLanguage.go | 1399 +++++++++++++++++++++++ publication/Publication.go | 27 + publication/PublicationDownload.go | 124 ++ publication/PublicationDownload_test.go | 190 +++ publication/Publication_test.go | 91 ++ publication/testdata/lffi_E.db | 0 publication/testdata/w_CH_202102.db | 0 9 files changed, 1855 insertions(+), 81 deletions(-) create mode 100644 publication/MepsLanguage.go create mode 100644 publication/PublicationDownload.go create mode 100644 publication/PublicationDownload_test.go create mode 100644 publication/testdata/lffi_E.db create mode 100644 publication/testdata/w_CH_202102.db diff --git a/go.mod b/go.mod index 4d1f831..941b01b 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.14 require ( github.com/AlecAivazis/survey/v2 v2.2.12 github.com/DATA-DOG/go-sqlmock v1.5.0 + github.com/Jeffail/gabs v1.4.0 github.com/MakeNowJust/heredoc v1.0.0 github.com/Netflix/go-expect v0.0.0-20200312175327-da48e75238e2 github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect @@ -12,7 +13,6 @@ require ( github.com/cavaliercoder/grab v1.0.1-0.20201108051000-98a5bfe305ec github.com/codeclysm/extract/v3 v3.0.2 github.com/davecgh/go-spew v1.1.1 - github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-openapi/errors v0.20.0 // indirect github.com/go-openapi/strfmt v0.20.0 // indirect github.com/h2non/filetype v1.1.1 // indirect @@ -20,26 +20,25 @@ require ( github.com/jedib0t/go-pretty v4.3.0+incompatible github.com/juju/errors v0.0.0-20200330140219-3fe23663418f // indirect github.com/klauspost/compress v1.13.1 + github.com/kr/pty v1.1.8 // indirect github.com/mattn/go-colorable v0.1.8 // indirect github.com/mattn/go-runewidth v0.0.10 // indirect github.com/mattn/go-sqlite3 v1.14.7 github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/go-wordwrap v1.0.1 - github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/pkg/errors v0.9.1 github.com/rivo/uniseg v0.2.0 // indirect github.com/sergi/go-diff v1.2.0 github.com/sirupsen/logrus v1.8.1 github.com/smartystreets/assertions v1.2.0 // indirect - github.com/spf13/cast v1.3.1 // indirect github.com/spf13/cobra v1.1.1 - github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/viper v1.8.1 github.com/stretchr/testify v1.7.0 go.mongodb.org/mongo-driver v1.5.0 // indirect golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670 // indirect + golang.org/x/sys v0.0.0-20210611083646-a4fc73990273 // indirect golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 // indirect - golang.org/x/text v0.3.5 // indirect - gopkg.in/ini.v1 v1.62.0 // indirect + golang.org/x/text v0.3.6 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/go.sum b/go.sum index 3ddfe75..c9a971f 100644 --- a/go.sum +++ b/go.sum @@ -37,18 +37,16 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AlecAivazis/survey/v2 v2.2.9 h1:LWvJtUswz/W9/zVVXELrmlvdwWcKE60ZAw0FWV9vssk= -github.com/AlecAivazis/survey/v2 v2.2.9/go.mod h1:9DYvHgXtiXm6nCn+jXnOXLKbH+Yo9u8fAS/SduGdoPk= github.com/AlecAivazis/survey/v2 v2.2.12 h1:5a07y93zA6SZ09gOa9wLVLznF5zTJMQ+pJ3cZK4IuO8= github.com/AlecAivazis/survey/v2 v2.2.12/go.mod h1:6d4saEvBsfSHXeN1a5OA5m2+HJ2LuVokllnC77pAIKI= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= +github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= github.com/Netflix/go-expect v0.0.0-20200312175327-da48e75238e2 h1:y2avNRjCeJT8b7svzjhKZjsvW5Jki/iAqTBEPJURaUg= github.com/Netflix/go-expect v0.0.0-20200312175327-da48e75238e2/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= @@ -61,7 +59,6 @@ github.com/arduino/go-paths-helper v1.2.0/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= @@ -93,8 +90,9 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -108,7 +106,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -190,17 +187,16 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -218,8 +214,8 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -230,7 +226,6 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmg github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/h2non/filetype v1.0.6 h1:g84/+gdkAT1hnYO+tHpCLoikm13Ju55OkN4KCb1uGEQ= github.com/h2non/filetype v1.0.6/go.mod h1:isekKqOuhMj+s/7r3rIeTErIRy4Rub5uBWHfvMusLMU= github.com/h2non/filetype v1.1.1 h1:xvOwnXKAckvtLWsN398qS9QhlxlnVXBjXBydK2/UFB4= github.com/h2non/filetype v1.1.1/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= @@ -255,7 +250,6 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ= github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c h1:kp3AxgXgDOmIJFR7bIwqFhwJ2qWar8tEQSE5XXhCfVk= github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= @@ -277,7 +271,6 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/clock v0.0.0-20180524022203-d293bb356ca4/go.mod h1:nD0vlnrUjcjJhqN5WuCWZyzfd5AHZAC9/ajvbSx69xA= github.com/juju/errors v0.0.0-20150916125642-1b5e39b83d18/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 h1:rhqTjzJlm7EbkELJDKMTU7udov+Se0xZkWmugr6zGok= github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= github.com/juju/errors v0.0.0-20200330140219-3fe23663418f h1:MCOvExGLpaSIzLYB4iQXEHP4jYVU6vmzLNQPdMVrxnM= github.com/juju/errors v0.0.0-20200330140219-3fe23663418f/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= @@ -296,43 +289,29 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.9.5 h1:U+CaK85mrNNb4k8BNOfgJtJ/gr6kswUCFj6miSzVC6M= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.13 h1:eSvu8Tmq6j2psUJqJrLcWH6K3w5Dwc+qipbaA6eVEN4= -github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.1 h1:/+xsCsk06wE38cyiqOR/o7U2fSftcH72xD+BQXmja/g= -github.com/klauspost/compress v1.12.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.12.2 h1:2KCfW3I9M7nSc5wOqXAlW2v2U6v+w6cbjvbfp+OykW8= -github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.12.3 h1:G5AfA94pHPysR56qqrkO2pxEexdDzrpFJ6yt/VqWxVU= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.0 h1:2T7tUoQrQT+fQWdaY5rjWztFGAFwbGD04iPJg90ZiOs= -github.com/klauspost/compress v1.13.0/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.1 h1:wXr2uRxZTJXHLly6qhJabee5JqIhTRoLBhDOA74hDEQ= github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ= github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY= -github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -342,12 +321,9 @@ github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHX github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.7 h1:fxWBnXkxfM6sRiuH3bqJ4CfzZojMOLVc0UTsTglEghA= github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= @@ -362,9 +338,7 @@ github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTS github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -374,15 +348,11 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= -github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -403,7 +373,6 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -424,7 +393,6 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= @@ -432,44 +400,33 @@ github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIK github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.5.1 h1:VHu76Lk0LSP1x254maIu2bplkWpfBWI+B+6fdoZprcg= -github.com/spf13/afero v1.5.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.1.1 h1:KfztREH0tPxJJ+geloSLaAkaPkr4ki2Er5quFV1TDo4= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.0 h1:QRwDgoG8xX+kp69di68D+YYTCWfYEckbZRfUlEIAal0= -github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= @@ -512,7 +469,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -545,7 +501,6 @@ golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= @@ -570,7 +525,6 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -632,7 +586,6 @@ golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -671,25 +624,23 @@ golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54 h1:rF3Ohx8DRyl8h2zw9qojyLHLhrJpEMgyPOImREEryf0= golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210611083646-a4fc73990273 h1:faDu4veV+8pcThn4fewv6TVlNCezafGoC1gM/mxQLbQ= +golang.org/x/sys v0.0.0-20210611083646-a4fc73990273/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 h1:EC6+IGYTjPpRfv9a2b/6Puw0W+hLtAhkV1tPsXhutqs= golang.org/x/term v0.0.0-20210317153231-de623e64d2a6/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -751,8 +702,8 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -857,17 +808,14 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -877,19 +825,15 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/yaml.v2 v2.0.0-20170712054546-1be3d31502d6/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo= gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/publication/MepsLanguage.go b/publication/MepsLanguage.go new file mode 100644 index 0000000..2d6904e --- /dev/null +++ b/publication/MepsLanguage.go @@ -0,0 +1,1399 @@ +package publication + +import "fmt" + +type mepsLanguage struct { + LanguageID int + Symbol string + EnglishName string + VernacularName string + IsoName string + IsoAlpha2Code string + IsoAlpha3Code string +} + +func lookupMepsLanguage(id int) (mepsLanguage, error) { + if len(languages) < id { + return mepsLanguage{}, fmt.Errorf("could not find language symbol for mepsLanguageID %d", id) + } + return languages[id], nil +} + +var languages = []mepsLanguage{ + {LanguageID: 0, Symbol: "E", EnglishName: "English", VernacularName: "English", IsoName: "English", IsoAlpha2Code: "en", IsoAlpha3Code: "eng"}, + {LanguageID: 1, Symbol: "S", EnglishName: "Spanish", VernacularName: "español", IsoName: "Spanish", IsoAlpha2Code: "es", IsoAlpha3Code: "spa"}, + {LanguageID: 2, Symbol: "X", EnglishName: "German", VernacularName: "Deutsch", IsoName: "German", IsoAlpha2Code: "de", IsoAlpha3Code: "deu"}, + {LanguageID: 3, Symbol: "F", EnglishName: "French", VernacularName: "Français", IsoName: "French", IsoAlpha2Code: "fr", IsoAlpha3Code: "fra"}, + {LanguageID: 4, Symbol: "I", EnglishName: "Italian", VernacularName: "Italiano", IsoName: "Italian", IsoAlpha2Code: "it", IsoAlpha3Code: "ita"}, + {LanguageID: 5, Symbol: "T", EnglishName: "Portuguese (Brazil)", VernacularName: "Português (Brasil)", IsoName: "Portuguese", IsoAlpha2Code: "pt", IsoAlpha3Code: "por"}, + {LanguageID: 6, Symbol: "O", EnglishName: "Dutch", VernacularName: "Nederlands", IsoName: "Dutch", IsoAlpha2Code: "nl", IsoAlpha3Code: "nld"}, + {LanguageID: 7, Symbol: "J", EnglishName: "Japanese", VernacularName: "日本語", IsoName: "Japanese", IsoAlpha2Code: "ja", IsoAlpha3Code: "jpn"}, + {LanguageID: 8, Symbol: "AU", EnglishName: "Abua", VernacularName: "Abua", IsoName: "Abua", IsoAlpha2Code: " ", IsoAlpha3Code: "abn"}, + {LanguageID: 9, Symbol: "AC", EnglishName: "Acholi", VernacularName: "Acholi", IsoName: "Acoli", IsoAlpha2Code: " ", IsoAlpha3Code: "ach"}, + {LanguageID: 10, Symbol: "AF", EnglishName: "Afrikaans", VernacularName: "Afrikaans", IsoName: "Afrikaans", IsoAlpha2Code: "af", IsoAlpha3Code: "afr"}, + {LanguageID: 11, Symbol: "AL", EnglishName: "Albanian", VernacularName: "shqip", IsoName: "Tosk Albanian", IsoAlpha2Code: " ", IsoAlpha3Code: "als"}, + {LanguageID: 12, Symbol: "AM", EnglishName: "Amharic", VernacularName: "አማርኛ", IsoName: "Amharic", IsoAlpha2Code: "am", IsoAlpha3Code: "amh"}, + {LanguageID: 13, Symbol: "AI", EnglishName: "Amis", VernacularName: "阿美語", IsoName: "Amis", IsoAlpha2Code: " ", IsoAlpha3Code: "ami"}, + {LanguageID: 14, Symbol: "A", EnglishName: "Arabic", VernacularName: "العربية", IsoName: "Arabic", IsoAlpha2Code: "ar", IsoAlpha3Code: "ara"}, + {LanguageID: 15, Symbol: "R", EnglishName: "Armenian (West)", VernacularName: "Արեւմտահայերէն", IsoName: "Western Armenian", IsoAlpha2Code: " ", IsoAlpha3Code: "hyw"}, + {LanguageID: 16, Symbol: "AE", EnglishName: "Assamese", VernacularName: "অসমীয়া", IsoName: "Assamese", IsoAlpha2Code: "as", IsoAlpha3Code: "asm"}, + {LanguageID: 17, Symbol: "AS", EnglishName: "Assyrian", VernacularName: "ܐܵܬܘܿܪܵܝܵܐ", IsoName: "Assyrian Neo-Aramaic", IsoAlpha2Code: " ", IsoAlpha3Code: "aii"}, + {LanguageID: 18, Symbol: "IE", EnglishName: "Ateso", VernacularName: "Ateso", IsoName: "Teso", IsoAlpha2Code: " ", IsoAlpha3Code: "teo"}, + {LanguageID: 19, Symbol: "AR", EnglishName: "Bambara", VernacularName: "Bamanakan", IsoName: "Bambara", IsoAlpha2Code: "bm", IsoAlpha3Code: "bam"}, + {LanguageID: 20, Symbol: "BM", EnglishName: "Yemba", VernacularName: "Dschang", IsoName: "Yemba", IsoAlpha2Code: " ", IsoAlpha3Code: "ybb"}, + {LanguageID: 21, Symbol: "AO", EnglishName: "Baoule", VernacularName: "Wawle", IsoName: "Baoulé", IsoAlpha2Code: " ", IsoAlpha3Code: "bci"}, + {LanguageID: 22, Symbol: "BH", EnglishName: "Bari", VernacularName: "Bari", IsoName: "Bari", IsoAlpha2Code: " ", IsoAlpha3Code: "bfa"}, + {LanguageID: 23, Symbol: "BS", EnglishName: "Bassa (Cameroon)", VernacularName: "Basaa (Kamerun)", IsoName: "Basa (Cameroon)", IsoAlpha2Code: " ", IsoAlpha3Code: "bas"}, + {LanguageID: 24, Symbol: "BA", EnglishName: "Bassa (Liberia)", VernacularName: "", IsoName: "Bassa", IsoAlpha2Code: " ", IsoAlpha3Code: "bsq"}, + {LanguageID: 25, Symbol: "AK", EnglishName: "Batak (Karo)", VernacularName: "Batak (Karo)", IsoName: "Batak Karo", IsoAlpha2Code: " ", IsoAlpha3Code: "btx"}, + {LanguageID: 26, Symbol: "OI", EnglishName: "Odia", VernacularName: "ଓଡ଼ିଆ", IsoName: "Oriya", IsoAlpha2Code: "or", IsoAlpha3Code: "ori"}, + {LanguageID: 27, Symbol: "BT", EnglishName: "Batak (Toba)", VernacularName: "Batak (Toba)", IsoName: "Batak Toba", IsoAlpha2Code: " ", IsoAlpha3Code: "bbc"}, + {LanguageID: 28, Symbol: "EN", EnglishName: "Bena", VernacularName: "", IsoName: "Bena (Tanzania)", IsoAlpha2Code: " ", IsoAlpha3Code: "bez"}, + {LanguageID: 29, Symbol: "BE", EnglishName: "Bengali", VernacularName: "বাংলা", IsoName: "Bengali", IsoAlpha2Code: "bn", IsoAlpha3Code: "ben"}, + {LanguageID: 30, Symbol: "IK", EnglishName: "Biak", VernacularName: "Biak", IsoName: "Biak", IsoAlpha2Code: " ", IsoAlpha3Code: "bhw"}, + {LanguageID: 31, Symbol: "BI", EnglishName: "Bicol", VernacularName: "Bicol", IsoName: "Central Bicolano", IsoAlpha2Code: " ", IsoAlpha3Code: "bcl"}, + {LanguageID: 32, Symbol: "LM", EnglishName: "Bislama", VernacularName: "Bislama", IsoName: "Bislama", IsoAlpha2Code: "bi", IsoAlpha3Code: "bis"}, + {LanguageID: 33, Symbol: "BO", EnglishName: "Boulou", VernacularName: "Bulu", IsoName: "Bulu (Cameroon)", IsoAlpha2Code: " ", IsoAlpha3Code: "bum"}, + {LanguageID: 34, Symbol: "BR", EnglishName: "Braille", VernacularName: "Braille", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 35, Symbol: "BK", EnglishName: "Bukidnon", VernacularName: "", IsoName: "Binukid", IsoAlpha2Code: " ", IsoAlpha3Code: "bkd"}, + {LanguageID: 36, Symbol: "BL", EnglishName: "Bulgarian", VernacularName: "български", IsoName: "Bulgarian", IsoAlpha2Code: "bg", IsoAlpha3Code: "bul"}, + {LanguageID: 37, Symbol: "BU", EnglishName: "Myanmar", VernacularName: "မြန်မာ", IsoName: "Burmese", IsoAlpha2Code: "my", IsoAlpha3Code: "mya"}, + {LanguageID: 38, Symbol: "CB", EnglishName: "Cambodian", VernacularName: "ខ្មែរ", IsoName: "Central Khmer", IsoAlpha2Code: "km", IsoAlpha3Code: "khm"}, + {LanguageID: 39, Symbol: "CV", EnglishName: "Cebuano", VernacularName: "Cebuano", IsoName: "Cebuano", IsoAlpha2Code: " ", IsoAlpha3Code: "ceb"}, + {LanguageID: 40, Symbol: "CC", EnglishName: "Chavacano", VernacularName: "Chavacano", IsoName: "Chavacano", IsoAlpha2Code: " ", IsoAlpha3Code: "cbk"}, + {LanguageID: 41, Symbol: "CM", EnglishName: "Chamorro", VernacularName: "", IsoName: "Chamorro", IsoAlpha2Code: "ch", IsoAlpha3Code: "cha"}, + {LanguageID: 42, Symbol: "CN", EnglishName: "Chichewa", VernacularName: "Chichewa", IsoName: "Nyanja", IsoAlpha2Code: "ny", IsoAlpha3Code: "nya"}, + {LanguageID: 43, Symbol: "CH", EnglishName: "Chinese Mandarin (Traditional)", VernacularName: "中文繁體(國語)", IsoName: "Mandarin Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "cmn"}, + {LanguageID: 44, Symbol: "CHP", EnglishName: "Chinese Phonetic", VernacularName: "Chinese Phonetic", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 45, Symbol: "CG", EnglishName: "Chitonga", VernacularName: "Chitonga", IsoName: "Tonga (Zambia)", IsoAlpha2Code: " ", IsoAlpha3Code: "toi"}, + {LanguageID: 46, Symbol: "CK", EnglishName: "Chokwe", VernacularName: "Chokwe", IsoName: "Chokwe", IsoAlpha2Code: " ", IsoAlpha3Code: "cjk"}, + {LanguageID: 47, Symbol: "CW", EnglishName: "Cibemba", VernacularName: "Cibemba", IsoName: "Bemba (Zambia)", IsoAlpha2Code: " ", IsoAlpha3Code: "bem"}, + {LanguageID: 48, Symbol: "NM", EnglishName: "Cinamwanga", VernacularName: "Cinamwanga", IsoName: "Nyamwanga", IsoAlpha2Code: " ", IsoAlpha3Code: "mwn"}, + {LanguageID: 49, Symbol: "CT", EnglishName: "Chitonga (Malawi)", VernacularName: "Chitonga (Malawi)", IsoName: "Tonga (Nyasa)", IsoAlpha2Code: " ", IsoAlpha3Code: "tog"}, + {LanguageID: 50, Symbol: "CY", EnglishName: "Cree Plains (Roman)", VernacularName: "nēhiyawēwin", IsoName: "Plains Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crk"}, + {LanguageID: 51, Symbol: "CR", EnglishName: "Haitian Creole", VernacularName: "Kreyòl ayisyen", IsoName: "Haitian", IsoAlpha2Code: "ht", IsoAlpha3Code: "hat"}, + {LanguageID: 52, Symbol: "C", EnglishName: "Croatian", VernacularName: "hrvatski", IsoName: "Croatian", IsoAlpha2Code: "hr", IsoAlpha3Code: "hrv"}, + {LanguageID: 53, Symbol: "B", EnglishName: "Czech", VernacularName: "čeština", IsoName: "Czech", IsoAlpha2Code: "cs", IsoAlpha3Code: "ces"}, + {LanguageID: 54, Symbol: "D", EnglishName: "Danish", VernacularName: "Dansk", IsoName: "Danish", IsoAlpha2Code: "da", IsoAlpha3Code: "dan"}, + {LanguageID: 55, Symbol: "DK", EnglishName: "Dayak Ngaju", VernacularName: "Dayak Ngaju", IsoName: "Ngaju", IsoAlpha2Code: " ", IsoAlpha3Code: "nij"}, + {LanguageID: 56, Symbol: "MD", EnglishName: "Dibabawon", VernacularName: "", IsoName: "Dibabawon Manobo", IsoAlpha2Code: " ", IsoAlpha3Code: "mbd"}, + {LanguageID: 57, Symbol: "DI", EnglishName: "Dinka", VernacularName: "", IsoName: "Dinka", IsoAlpha2Code: " ", IsoAlpha3Code: "din"}, + {LanguageID: 58, Symbol: "DA", EnglishName: "Douala", VernacularName: "Douala", IsoName: "Duala", IsoAlpha2Code: " ", IsoAlpha3Code: "dua"}, + {LanguageID: 59, Symbol: "ED", EnglishName: "Edo", VernacularName: "Edo", IsoName: "Bini", IsoAlpha2Code: " ", IsoAlpha3Code: "bin"}, + {LanguageID: 60, Symbol: "EF", EnglishName: "Efik", VernacularName: "Efịk", IsoName: "Efik", IsoAlpha2Code: " ", IsoAlpha3Code: "efi"}, + {LanguageID: 61, Symbol: "ES", EnglishName: "Esperanto", VernacularName: "Esperanto", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 62, Symbol: "ST", EnglishName: "Estonian", VernacularName: "eesti", IsoName: "Estonian", IsoAlpha2Code: "et", IsoAlpha3Code: "est"}, + {LanguageID: 63, Symbol: "EW", EnglishName: "Ewe", VernacularName: "Eʋegbe", IsoName: "Ewe", IsoAlpha2Code: "ee", IsoAlpha3Code: "ewe"}, + {LanguageID: 64, Symbol: "FA", EnglishName: "Fante", VernacularName: "Mfantse", IsoName: "Fanti", IsoAlpha2Code: " ", IsoAlpha3Code: "fat"}, + {LanguageID: 65, Symbol: "FR", EnglishName: "Faroese", VernacularName: "Føroyskt", IsoName: "Faroese", IsoAlpha2Code: "fo", IsoAlpha3Code: "fao"}, + {LanguageID: 66, Symbol: "FN", EnglishName: "Fijian", VernacularName: "vakaViti", IsoName: "Fijian", IsoAlpha2Code: "fj", IsoAlpha3Code: "fij"}, + {LanguageID: 67, Symbol: "FI", EnglishName: "Finnish", VernacularName: "suomi", IsoName: "Finnish", IsoAlpha2Code: "fi", IsoAlpha3Code: "fin"}, + {LanguageID: 68, Symbol: "GA", EnglishName: "Ga", VernacularName: "Ga", IsoName: "Ga", IsoAlpha2Code: " ", IsoAlpha3Code: "gaa"}, + {LanguageID: 69, Symbol: "GB", EnglishName: "Kiribati", VernacularName: "Kiribati", IsoName: "Gilbertese", IsoAlpha2Code: " ", IsoAlpha3Code: "gil"}, + {LanguageID: 70, Symbol: "GY", EnglishName: "Giryama", VernacularName: "Giryama", IsoName: "Giryama", IsoAlpha2Code: " ", IsoAlpha3Code: "nyf"}, + {LanguageID: 71, Symbol: "GO", EnglishName: "Gouro", VernacularName: "Goro", IsoName: "Guro", IsoAlpha2Code: " ", IsoAlpha3Code: "goa"}, + {LanguageID: 72, Symbol: "G", EnglishName: "Greek", VernacularName: "Ελληνική", IsoName: "Modern Greek (1453-)", IsoAlpha2Code: "el", IsoAlpha3Code: "ell"}, + {LanguageID: 73, Symbol: "GL", EnglishName: "Greenlandic", VernacularName: "Kalaallisut", IsoName: "Kalaallisut", IsoAlpha2Code: "kl", IsoAlpha3Code: "kal"}, + {LanguageID: 74, Symbol: "GI", EnglishName: "Guarani", VernacularName: "guarani", IsoName: "Paraguayan Guaraní", IsoAlpha2Code: " ", IsoAlpha3Code: "gug"}, + {LanguageID: 75, Symbol: "GU", EnglishName: "Gujarati", VernacularName: "ગુજરાતી", IsoName: "Gujarati", IsoAlpha2Code: "gu", IsoAlpha3Code: "guj"}, + {LanguageID: 76, Symbol: "EG", EnglishName: "Gun", VernacularName: "Gungbe", IsoName: "Gun", IsoAlpha2Code: " ", IsoAlpha3Code: "guw"}, + {LanguageID: 77, Symbol: "ND", EnglishName: "Sindhi (Arabic)", VernacularName: "سِنڌي", IsoName: "Sindhi", IsoAlpha2Code: "sd", IsoAlpha3Code: "snd"}, + {LanguageID: 78, Symbol: "HK", EnglishName: "Chin (Hakha)", VernacularName: "Chin (Hakha)", IsoName: "Haka Chin", IsoAlpha2Code: " ", IsoAlpha3Code: "cnh"}, + {LanguageID: 79, Symbol: "HA", EnglishName: "Hausa", VernacularName: "Hausa", IsoName: "Hausa", IsoAlpha2Code: "ha", IsoAlpha3Code: "hau"}, + {LanguageID: 80, Symbol: "HW", EnglishName: "Hawaiian", VernacularName: "ʻŌlelo Hawaiʻi", IsoName: "Hawaiian", IsoAlpha2Code: " ", IsoAlpha3Code: "haw"}, + {LanguageID: 81, Symbol: "HY", EnglishName: "Haya", VernacularName: "Ekihaya", IsoName: "Haya", IsoAlpha2Code: " ", IsoAlpha3Code: "hay"}, + {LanguageID: 82, Symbol: "Q", EnglishName: "Hebrew", VernacularName: "עברית", IsoName: "Hebrew", IsoAlpha2Code: "he", IsoAlpha3Code: "heb"}, + {LanguageID: 83, Symbol: "HR", EnglishName: "Herero", VernacularName: "Otjiherero", IsoName: "Herero", IsoAlpha2Code: "hz", IsoAlpha3Code: "her"}, + {LanguageID: 84, Symbol: "HV", EnglishName: "Hiligaynon", VernacularName: "Hiligaynon", IsoName: "Hiligaynon", IsoAlpha2Code: " ", IsoAlpha3Code: "hil"}, + {LanguageID: 85, Symbol: "HI", EnglishName: "Hindi", VernacularName: "हिंदी", IsoName: "Hindi", IsoAlpha2Code: "hi", IsoAlpha3Code: "hin"}, + {LanguageID: 86, Symbol: "MO", EnglishName: "Hiri Motu", VernacularName: "Hiri Motu", IsoName: "Hiri Motu", IsoAlpha2Code: "ho", IsoAlpha3Code: "hmo"}, + {LanguageID: 87, Symbol: "HO", EnglishName: "Ajië", VernacularName: "", IsoName: "Ajië", IsoAlpha2Code: " ", IsoAlpha3Code: "aji"}, + {LanguageID: 88, Symbol: "HU", EnglishName: "Hula", VernacularName: "Vula’a", IsoName: "Hula", IsoAlpha2Code: " ", IsoAlpha3Code: "hul"}, + {LanguageID: 89, Symbol: "H", EnglishName: "Hungarian", VernacularName: "magyar", IsoName: "Hungarian", IsoAlpha2Code: "hu", IsoAlpha3Code: "hun"}, + {LanguageID: 90, Symbol: "IA", EnglishName: "Iban", VernacularName: "Iban", IsoName: "Iban", IsoAlpha2Code: " ", IsoAlpha3Code: "iba"}, + {LanguageID: 91, Symbol: "IG", EnglishName: "Ibanag", VernacularName: "Ibanag", IsoName: "Ibanag", IsoAlpha2Code: " ", IsoAlpha3Code: "ibg"}, + {LanguageID: 92, Symbol: "IC", EnglishName: "Icelandic", VernacularName: "íslenska", IsoName: "Icelandic", IsoAlpha2Code: "is", IsoAlpha3Code: "isl"}, + {LanguageID: 93, Symbol: "ID", EnglishName: "Idoma", VernacularName: "Idoma", IsoName: "Idoma", IsoAlpha2Code: " ", IsoAlpha3Code: "idu"}, + {LanguageID: 94, Symbol: "IF", EnglishName: "Ifugao", VernacularName: "Ifugao", IsoName: "Tuwali Ifugao", IsoAlpha2Code: " ", IsoAlpha3Code: "ifk"}, + {LanguageID: 95, Symbol: "AA", EnglishName: "Igala", VernacularName: "", IsoName: "Igala", IsoAlpha2Code: " ", IsoAlpha3Code: "igl"}, + {LanguageID: 96, Symbol: "IB", EnglishName: "Igbo", VernacularName: "Igbo", IsoName: "Igbo", IsoAlpha2Code: "ig", IsoAlpha3Code: "ibo"}, + {LanguageID: 97, Symbol: "IJ", EnglishName: "Ijaw", VernacularName: "Ijaw", IsoName: "Izon", IsoAlpha2Code: " ", IsoAlpha3Code: "ijc"}, + {LanguageID: 98, Symbol: "IL", EnglishName: "Iloko", VernacularName: "Iloko", IsoName: "Iloko", IsoAlpha2Code: " ", IsoAlpha3Code: "ilo"}, + {LanguageID: 99, Symbol: "IN", EnglishName: "Indonesian", VernacularName: "Indonesia", IsoName: "Indonesian", IsoAlpha2Code: "id", IsoAlpha3Code: "ind"}, + {LanguageID: 100, Symbol: "IU", EnglishName: "Inuktitut (Syllabics)", VernacularName: "ᐃᓄᒃᑎᑐᑦ", IsoName: "Inuktitut", IsoAlpha2Code: "iu", IsoAlpha3Code: "iku"}, + {LanguageID: 101, Symbol: "GC", EnglishName: "Irish", VernacularName: "Gaeilge", IsoName: "Irish", IsoAlpha2Code: "ga", IsoAlpha3Code: "gle"}, + {LanguageID: 102, Symbol: "IR", EnglishName: "Iroquois", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 103, Symbol: "IS", EnglishName: "Isoko", VernacularName: "Isoko", IsoName: "Isoko", IsoAlpha2Code: " ", IsoAlpha3Code: "iso"}, + {LanguageID: 104, Symbol: "IT", EnglishName: "Itsekiri", VernacularName: "Itsekiri", IsoName: "Isekiri", IsoAlpha2Code: " ", IsoAlpha3Code: "its"}, + {LanguageID: 105, Symbol: "IV", EnglishName: "Ivatan", VernacularName: "Ivatan", IsoName: "Ivatan", IsoAlpha2Code: " ", IsoAlpha3Code: "ivv"}, + {LanguageID: 106, Symbol: "JA", EnglishName: "Javanese", VernacularName: "Jawa", IsoName: "Javanese", IsoAlpha2Code: "jv", IsoAlpha3Code: "jav"}, + {LanguageID: 107, Symbol: "AH", EnglishName: "Kachin", VernacularName: "Kachin", IsoName: "Kachin", IsoAlpha2Code: " ", IsoAlpha3Code: "kac"}, + {LanguageID: 108, Symbol: "KL", EnglishName: "Kalanga (Botswana)", VernacularName: "Kalanga (Botswana)", IsoName: "Kalanga", IsoAlpha2Code: " ", IsoAlpha3Code: "kck"}, + {LanguageID: 109, Symbol: "KJ", EnglishName: "Kalenjin", VernacularName: "Kalenjin", IsoName: "Kalenjin", IsoAlpha2Code: " ", IsoAlpha3Code: "kln"}, + {LanguageID: 110, Symbol: "KA", EnglishName: "Kannada", VernacularName: "Kannada (ಕನ್ನಡ)", IsoName: "Kannada", IsoAlpha2Code: "kn", IsoAlpha3Code: "kan"}, + {LanguageID: 111, Symbol: "KR", EnglishName: "Karen (S'gaw)", VernacularName: "ကညီ(စှီၤ)ကျိာ်", IsoName: "S'gaw Karen", IsoAlpha2Code: " ", IsoAlpha3Code: "ksw"}, + {LanguageID: 112, Symbol: "KE", EnglishName: "Tairuma", VernacularName: "Tairuma", IsoName: "Tairuma", IsoAlpha2Code: " ", IsoAlpha3Code: "uar"}, + {LanguageID: 113, Symbol: "KC", EnglishName: "Ketchi", VernacularName: "Ketchi", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 114, Symbol: "KS", EnglishName: "Khasi", VernacularName: "Khasi", IsoName: "Khasi", IsoAlpha2Code: " ", IsoAlpha3Code: "kha"}, + {LanguageID: 115, Symbol: "KB", EnglishName: "Kikamba", VernacularName: "Kikamba", IsoName: "Kamba (Kenya)", IsoAlpha2Code: " ", IsoAlpha3Code: "kam"}, + {LanguageID: 116, Symbol: "KD", EnglishName: "Kikaonde", VernacularName: "Kikaonde", IsoName: "Kaonde", IsoAlpha2Code: " ", IsoAlpha3Code: "kqn"}, + {LanguageID: 117, Symbol: "KG", EnglishName: "Kikongo", VernacularName: "Kikongo", IsoName: "San Salvador Kongo", IsoAlpha2Code: " ", IsoAlpha3Code: "kwy"}, + {LanguageID: 118, Symbol: "KQ", EnglishName: "Kikuyu", VernacularName: "Gĩkũyũ", IsoName: "Kikuyu", IsoAlpha2Code: "ki", IsoAlpha3Code: "kik"}, + {LanguageID: 119, Symbol: "KU", EnglishName: "Kiluba", VernacularName: "Kiluba", IsoName: "Luba-Katanga", IsoAlpha2Code: "lu", IsoAlpha3Code: "lub"}, + {LanguageID: 120, Symbol: "KK", EnglishName: "Kinyakyusa", VernacularName: "Kinyakyusa", IsoName: "Nyakyusa-Ngonde", IsoAlpha2Code: " ", IsoAlpha3Code: "nyy"}, + {LanguageID: 121, Symbol: "YW", EnglishName: "Kinyarwanda", VernacularName: "Ikinyarwanda", IsoName: "Kinyarwanda", IsoAlpha2Code: "rw", IsoAlpha3Code: "kin"}, + {LanguageID: 122, Symbol: "IY", EnglishName: "Kinyiha", VernacularName: "Kinyiha", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 123, Symbol: "RU", EnglishName: "Kirundi", VernacularName: "Ikirundi", IsoName: "Rundi", IsoAlpha2Code: "rn", IsoAlpha3Code: "run"}, + {LanguageID: 124, Symbol: "KI", EnglishName: "Kisi", VernacularName: "Kisiei", IsoName: "Southern Kisi", IsoAlpha2Code: " ", IsoAlpha3Code: "kss"}, + {LanguageID: 125, Symbol: "II", EnglishName: "Kisii", VernacularName: "", IsoName: "Gusii", IsoAlpha2Code: " ", IsoAlpha3Code: "guz"}, + {LanguageID: 126, Symbol: "KV", EnglishName: "Kiwai", VernacularName: "", IsoName: "Southern Kiwai", IsoAlpha2Code: " ", IsoAlpha3Code: "kjd"}, + {LanguageID: 127, Symbol: "KN", EnglishName: "Konkani (Kannada)", VernacularName: "ಕೊಂಕಣಿ (ಕನ್ನಡ)", IsoName: "Konkani (individual language)", IsoAlpha2Code: " ", IsoAlpha3Code: "knn"}, + {LanguageID: 128, Symbol: "KT", EnglishName: "Konkani (Roman)", VernacularName: "Konkani (Romi)", IsoName: "Goan Konkani", IsoAlpha2Code: " ", IsoAlpha3Code: "gom"}, + {LanguageID: 129, Symbol: "KO", EnglishName: "Korean", VernacularName: "한국어", IsoName: "Korean", IsoAlpha2Code: "ko", IsoAlpha3Code: "kor"}, + {LanguageID: 130, Symbol: "OS", EnglishName: "Kosraean", VernacularName: "Kosraean", IsoName: "Kosraean", IsoAlpha2Code: " ", IsoAlpha3Code: "kos"}, + {LanguageID: 131, Symbol: "KP", EnglishName: "Kpelle", VernacularName: "", IsoName: "Liberia Kpelle", IsoAlpha2Code: " ", IsoAlpha3Code: "xpe"}, + {LanguageID: 132, Symbol: "UN", EnglishName: "Guna", VernacularName: "dule", IsoName: "San Blas Kuna", IsoAlpha2Code: " ", IsoAlpha3Code: "cuk"}, + {LanguageID: 133, Symbol: "KH", EnglishName: "Kwale", VernacularName: "", IsoName: "Ukwuani-Aboh-Ndoni", IsoAlpha2Code: " ", IsoAlpha3Code: "ukw"}, + {LanguageID: 134, Symbol: "WG", EnglishName: "Kwangali", VernacularName: "Rukwangali", IsoName: "Kwangali", IsoAlpha2Code: " ", IsoAlpha3Code: "kwn"}, + {LanguageID: 135, Symbol: "KY", EnglishName: "Kwanyama", VernacularName: "Oshikwanyama", IsoName: "Kuanyama", IsoAlpha2Code: "kj", IsoAlpha3Code: "kua"}, + {LanguageID: 136, Symbol: "KW", EnglishName: "Kwara'ae", VernacularName: "Kwara'ae", IsoName: "Kwara'ae", IsoAlpha2Code: " ", IsoAlpha3Code: "kwf"}, + {LanguageID: 137, Symbol: "LN", EnglishName: "Lango", VernacularName: "Lango", IsoName: "Lango (Uganda)", IsoAlpha2Code: " ", IsoAlpha3Code: "laj"}, + {LanguageID: 138, Symbol: "LA", EnglishName: "Laotian", VernacularName: "ລາວ", IsoName: "Lao", IsoAlpha2Code: "lo", IsoAlpha3Code: "lao"}, + {LanguageID: 139, Symbol: "LF", EnglishName: "Drehu", VernacularName: "Drehu", IsoName: "Dehu", IsoAlpha2Code: " ", IsoAlpha3Code: "dhv"}, + {LanguageID: 140, Symbol: "LI", EnglishName: "Lingala", VernacularName: "Lingala", IsoName: "Lingala", IsoAlpha2Code: "ln", IsoAlpha3Code: "lin"}, + {LanguageID: 141, Symbol: "L", EnglishName: "Lithuanian", VernacularName: "lietuvių", IsoName: "Lithuanian", IsoAlpha2Code: "lt", IsoAlpha3Code: "lit"}, + {LanguageID: 142, Symbol: "OM", EnglishName: "Loma", VernacularName: "", IsoName: "Loma (Liberia)", IsoAlpha2Code: " ", IsoAlpha3Code: "lom"}, + {LanguageID: 143, Symbol: "LC", EnglishName: "Luchazi", VernacularName: "Luchazi", IsoName: "Luchazi", IsoAlpha2Code: " ", IsoAlpha3Code: "lch"}, + {LanguageID: 144, Symbol: "LU", EnglishName: "Luganda", VernacularName: "Luganda", IsoName: "Ganda", IsoAlpha2Code: "lg", IsoAlpha3Code: "lug"}, + {LanguageID: 145, Symbol: "LG", EnglishName: "Lugbara", VernacularName: "Lugbara", IsoName: "Lugbara", IsoAlpha2Code: " ", IsoAlpha3Code: "lgg"}, + {LanguageID: 146, Symbol: "LY", EnglishName: "Luhya", VernacularName: "", IsoName: "Luyia", IsoAlpha2Code: " ", IsoAlpha3Code: "luy"}, + {LanguageID: 147, Symbol: "LK", EnglishName: "Bukusu", VernacularName: "", IsoName: "Bukusu", IsoAlpha2Code: " ", IsoAlpha3Code: "bxk"}, + {LanguageID: 148, Symbol: "LB", EnglishName: "Olunyole", VernacularName: "", IsoName: "Nyore", IsoAlpha2Code: " ", IsoAlpha3Code: "nyd"}, + {LanguageID: 149, Symbol: "LH", EnglishName: "Samia", VernacularName: "", IsoName: "Saamia", IsoAlpha2Code: " ", IsoAlpha3Code: "lsm"}, + {LanguageID: 150, Symbol: "LW", EnglishName: "Wanga", VernacularName: "", IsoName: "Wanga", IsoAlpha2Code: " ", IsoAlpha3Code: "lwg"}, + {LanguageID: 151, Symbol: "LO", EnglishName: "Luo", VernacularName: "Dholuo", IsoName: "Luo (Kenya and Tanzania)", IsoAlpha2Code: " ", IsoAlpha3Code: "luo"}, + {LanguageID: 152, Symbol: "LS", EnglishName: "Mizo", VernacularName: "Mizo", IsoName: "Lushai", IsoAlpha2Code: " ", IsoAlpha3Code: "lus"}, + {LanguageID: 153, Symbol: "LV", EnglishName: "Luvale", VernacularName: "Luvale", IsoName: "Luvale", IsoAlpha2Code: " ", IsoAlpha3Code: "lue"}, + {LanguageID: 154, Symbol: "MS", EnglishName: "Maasai", VernacularName: "Maasai", IsoName: "Masai", IsoAlpha2Code: " ", IsoAlpha3Code: "mas"}, + {LanguageID: 155, Symbol: "MC", EnglishName: "Macedonian", VernacularName: "македонски", IsoName: "Macedonian", IsoAlpha2Code: "mk", IsoAlpha3Code: "mkd"}, + {LanguageID: 156, Symbol: "MU", EnglishName: "Maguindanao", VernacularName: "", IsoName: "Maguindanaon", IsoAlpha2Code: " ", IsoAlpha3Code: "mdh"}, + {LanguageID: 157, Symbol: "MG", EnglishName: "Malagasy", VernacularName: "Malagasy", IsoName: "Plateau Malagasy", IsoAlpha2Code: " ", IsoAlpha3Code: "plt"}, + {LanguageID: 158, Symbol: "ML", EnglishName: "Malay", VernacularName: "Melayu", IsoName: "Malay (macrolanguage)", IsoAlpha2Code: "ms", IsoAlpha3Code: "msa"}, + {LanguageID: 159, Symbol: "MY", EnglishName: "Malayalam", VernacularName: "മലയാളം", IsoName: "Malayalam", IsoAlpha2Code: "ml", IsoAlpha3Code: "mal"}, + {LanguageID: 160, Symbol: "MT", EnglishName: "Maltese", VernacularName: "Malti", IsoName: "Maltese", IsoAlpha2Code: "mt", IsoAlpha3Code: "mlt"}, + {LanguageID: 161, Symbol: "MI", EnglishName: "Manipuri", VernacularName: "মৈতৈলোন্", IsoName: "Manipuri", IsoAlpha2Code: " ", IsoAlpha3Code: "mni"}, + {LanguageID: 162, Symbol: "MN", EnglishName: "Mansaka", VernacularName: "", IsoName: "Mansaka", IsoAlpha2Code: " ", IsoAlpha3Code: "msk"}, + {LanguageID: 163, Symbol: "MA", EnglishName: "Maori", VernacularName: "Te Reo Māori", IsoName: "Maori", IsoAlpha2Code: "mi", IsoAlpha3Code: "mri"}, + {LanguageID: 164, Symbol: "OL", EnglishName: "Maragoli", VernacularName: "Luragooli", IsoName: "Logooli", IsoAlpha2Code: " ", IsoAlpha3Code: "rag"}, + {LanguageID: 165, Symbol: "MW", EnglishName: "Maranaw", VernacularName: "Maranaw", IsoName: "Maranao", IsoAlpha2Code: " ", IsoAlpha3Code: "mrw"}, + {LanguageID: 166, Symbol: "MR", EnglishName: "Marathi", VernacularName: "मराठी", IsoName: "Marathi", IsoAlpha2Code: "mr", IsoAlpha3Code: "mar"}, + {LanguageID: 167, Symbol: "RE", EnglishName: "Nengone", VernacularName: "Nengone", IsoName: "Nengone", IsoAlpha2Code: " ", IsoAlpha3Code: "nen"}, + {LanguageID: 168, Symbol: "MQ", EnglishName: "Marquesian (Hiva Oa)", VernacularName: "Marquisien (Hiva Oa)", IsoName: "South Marquesan", IsoAlpha2Code: " ", IsoAlpha3Code: "mqm"}, + {LanguageID: 169, Symbol: "MH", EnglishName: "Marshallese", VernacularName: "Kajin M̦ajel̦", IsoName: "Marshallese", IsoAlpha2Code: "mh", IsoAlpha3Code: "mah"}, + {LanguageID: 170, Symbol: "MB", EnglishName: "Masbateno", VernacularName: "", IsoName: "Masbatenyo", IsoAlpha2Code: " ", IsoAlpha3Code: "msb"}, + {LanguageID: 171, Symbol: "CE", EnglishName: "Mauritian Creole", VernacularName: "Kreol Morisien", IsoName: "Morisyen", IsoAlpha2Code: " ", IsoAlpha3Code: "mfe"}, + {LanguageID: 172, Symbol: "ME", EnglishName: "Mende", VernacularName: "Mɛnde", IsoName: "Mende (Sierra Leone)", IsoAlpha2Code: " ", IsoAlpha3Code: "men"}, + {LanguageID: 173, Symbol: "UU", EnglishName: "Meru", VernacularName: "Kĩmĩĩrũ", IsoName: "Meru", IsoAlpha2Code: " ", IsoAlpha3Code: "mer"}, + {LanguageID: 174, Symbol: "MK", EnglishName: "Kongo", VernacularName: "Kikongo (Rép. dém. du congo)", IsoName: "Koongo", IsoAlpha2Code: " ", IsoAlpha3Code: "kng"}, + {LanguageID: 175, Symbol: "MM", EnglishName: "Moore", VernacularName: "Moore", IsoName: "Mossi", IsoAlpha2Code: " ", IsoAlpha3Code: "mos"}, + {LanguageID: 176, Symbol: "NA", EnglishName: "Nama", VernacularName: "ǀApakhoen gowab", IsoName: "Nama (Namibia)", IsoAlpha2Code: " ", IsoAlpha3Code: "naq"}, + {LanguageID: 177, Symbol: "NR", EnglishName: "Nauruan", VernacularName: "", IsoName: "Nauru", IsoAlpha2Code: "na", IsoAlpha3Code: "nau"}, + {LanguageID: 178, Symbol: "OD", EnglishName: "Ndonga", VernacularName: "Oshindonga", IsoName: "Ndonga", IsoAlpha2Code: "ng", IsoAlpha3Code: "ndo"}, + {LanguageID: 179, Symbol: "NE", EnglishName: "Nembe", VernacularName: "", IsoName: "Southeast Ijo", IsoAlpha2Code: " ", IsoAlpha3Code: "ijs"}, + {LanguageID: 180, Symbol: "NP", EnglishName: "Nepali", VernacularName: "नेपाली", IsoName: "Nepali", IsoAlpha2Code: "ne", IsoAlpha3Code: "nep"}, + {LanguageID: 181, Symbol: "MP", EnglishName: "Tok Pisin", VernacularName: "Tok Pisin", IsoName: "Tok Pisin", IsoAlpha2Code: " ", IsoAlpha3Code: "tpi"}, + {LanguageID: 182, Symbol: "NI", EnglishName: "Nias", VernacularName: "Nias", IsoName: "Nias", IsoAlpha2Code: " ", IsoAlpha3Code: "nia"}, + {LanguageID: 183, Symbol: "NN", EnglishName: "Niuean", VernacularName: "Faka-Niue", IsoName: "Niuean", IsoAlpha2Code: " ", IsoAlpha3Code: "niu"}, + {LanguageID: 184, Symbol: "N", EnglishName: "Norwegian", VernacularName: "Norsk", IsoName: "Norwegian", IsoAlpha2Code: "no", IsoAlpha3Code: "nor"}, + {LanguageID: 185, Symbol: "NU", EnglishName: "Nupe", VernacularName: "", IsoName: "Nupe-Nupe-Tako", IsoAlpha2Code: " ", IsoAlpha3Code: "nup"}, + {LanguageID: 186, Symbol: "YM", EnglishName: "Nyamwezi", VernacularName: "", IsoName: "Nyamwezi", IsoAlpha2Code: " ", IsoAlpha3Code: "nym"}, + {LanguageID: 187, Symbol: "NY", EnglishName: "Nyiha", VernacularName: "", IsoName: "Nyiha (Tanzania)", IsoAlpha2Code: " ", IsoAlpha3Code: "nih"}, + {LanguageID: 188, Symbol: "NZ", EnglishName: "Nzema", VernacularName: "Nzema", IsoName: "Nzima", IsoAlpha2Code: " ", IsoAlpha3Code: "nzi"}, + {LanguageID: 189, Symbol: "OG", EnglishName: "Khana", VernacularName: "Khana", IsoName: "Khana", IsoAlpha2Code: " ", IsoAlpha3Code: "ogo"}, + {LanguageID: 190, Symbol: "OK", EnglishName: "Oshikuambi", VernacularName: "", IsoName: "Kwambi", IsoAlpha2Code: " ", IsoAlpha3Code: "kwm"}, + {LanguageID: 191, Symbol: "OT", EnglishName: "Otetela", VernacularName: "Ɔtɛtɛla", IsoName: "Tetela", IsoAlpha2Code: " ", IsoAlpha3Code: "tll"}, + {LanguageID: 192, Symbol: "PU", EnglishName: "Palauan", VernacularName: "Palauan", IsoName: "Palauan", IsoAlpha2Code: " ", IsoAlpha3Code: "pau"}, + {LanguageID: 193, Symbol: "PM", EnglishName: "Pampango", VernacularName: "", IsoName: "Pampanga", IsoAlpha2Code: " ", IsoAlpha3Code: "pam"}, + {LanguageID: 194, Symbol: "PN", EnglishName: "Pangasinan", VernacularName: "Pangasinan", IsoName: "Pangasinan", IsoAlpha2Code: " ", IsoAlpha3Code: "pag"}, + {LanguageID: 195, Symbol: "PA", EnglishName: "Papiamento (Curaçao)", VernacularName: "Papiamentu (Kòrsou)", IsoName: "Papiamento", IsoAlpha2Code: " ", IsoAlpha3Code: "pap"}, + {LanguageID: 196, Symbol: "ZN", EnglishName: "Zande", VernacularName: "Zande", IsoName: "Zande (individual language)", IsoAlpha2Code: " ", IsoAlpha3Code: "zne"}, + {LanguageID: 197, Symbol: "PR", EnglishName: "Persian", VernacularName: "فارسی", IsoName: "Iranian Persian", IsoAlpha2Code: " ", IsoAlpha3Code: "pes"}, + {LanguageID: 198, Symbol: "P", EnglishName: "Polish", VernacularName: "polski", IsoName: "Polish", IsoAlpha2Code: "pl", IsoAlpha3Code: "pol"}, + {LanguageID: 199, Symbol: "PP", EnglishName: "Ponapean", VernacularName: "Ponapean", IsoName: "Pohnpeian", IsoAlpha2Code: " ", IsoAlpha3Code: "pon"}, + {LanguageID: 200, Symbol: "PJ", EnglishName: "Punjabi", VernacularName: "ਪੰਜਾਬੀ", IsoName: "Panjabi", IsoAlpha2Code: "pa", IsoAlpha3Code: "pan"}, + {LanguageID: 201, Symbol: "RA", EnglishName: "Rarotongan", VernacularName: "Reo Rarotonga", IsoName: "Rarotongan", IsoAlpha2Code: " ", IsoAlpha3Code: "rar"}, + {LanguageID: 202, Symbol: "M", EnglishName: "Romanian", VernacularName: "Română", IsoName: "Romanian", IsoAlpha2Code: "ro", IsoAlpha3Code: "ron"}, + {LanguageID: 203, Symbol: "OR", EnglishName: "Mahorian (Arabic)", VernacularName: "", IsoName: "Maore Comorian", IsoAlpha2Code: " ", IsoAlpha3Code: "swb"}, + {LanguageID: 204, Symbol: "RN", EnglishName: "Ronga", VernacularName: "Xironga", IsoName: "Ronga", IsoAlpha2Code: " ", IsoAlpha3Code: "rng"}, + {LanguageID: 205, Symbol: "RO", EnglishName: "Rotuman", VernacularName: "Rotuạm ta", IsoName: "Rotuman", IsoAlpha2Code: " ", IsoAlpha3Code: "rtm"}, + {LanguageID: 206, Symbol: "RR", EnglishName: "Runyankore", VernacularName: "Runyankore", IsoName: "Nyankole", IsoAlpha2Code: " ", IsoAlpha3Code: "nyn"}, + {LanguageID: 207, Symbol: "U", EnglishName: "Russian", VernacularName: "русский", IsoName: "Russian", IsoAlpha2Code: "ru", IsoAlpha3Code: "rus"}, + {LanguageID: 208, Symbol: "RT", EnglishName: "Rutoro", VernacularName: "Rutoro", IsoName: "Tooro", IsoAlpha2Code: " ", IsoAlpha3Code: "ttj"}, + {LanguageID: 209, Symbol: "SA", EnglishName: "Waray-Waray", VernacularName: "Waray-Waray", IsoName: "Waray (Philippines)", IsoAlpha2Code: " ", IsoAlpha3Code: "war"}, + {LanguageID: 210, Symbol: "ZA", EnglishName: "Sambal", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 211, Symbol: "SM", EnglishName: "Samoan", VernacularName: "Faa-Samoa", IsoName: "Samoan", IsoAlpha2Code: "sm", IsoAlpha3Code: "smo"}, + {LanguageID: 212, Symbol: "SG", EnglishName: "Sango", VernacularName: "Sango", IsoName: "Sango", IsoAlpha2Code: "sg", IsoAlpha3Code: "sag"}, + {LanguageID: 213, Symbol: "SE", EnglishName: "Sepedi", VernacularName: "Sepedi", IsoName: "Pedi", IsoAlpha2Code: " ", IsoAlpha3Code: "nso"}, + {LanguageID: 214, Symbol: "SB", EnglishName: "Serbian (Cyrillic)", VernacularName: "српски (ћирилица)", IsoName: "Serbian", IsoAlpha2Code: "sr", IsoAlpha3Code: "srp"}, + {LanguageID: 215, Symbol: "ER", EnglishName: "Serer", VernacularName: "Seereer", IsoName: "Serer", IsoAlpha2Code: " ", IsoAlpha3Code: "srr"}, + {LanguageID: 216, Symbol: "SU", EnglishName: "Sesotho (Lesotho)", VernacularName: "Sesotho (Lesotho)", IsoName: "Southern Sotho", IsoAlpha2Code: "st", IsoAlpha3Code: "sot"}, + {LanguageID: 217, Symbol: "SC", EnglishName: "Seychelles Creole", VernacularName: "Kreol Seselwa", IsoName: "Seselwa Creole French", IsoAlpha2Code: " ", IsoAlpha3Code: "crs"}, + {LanguageID: 218, Symbol: "CA", EnglishName: "Shona", VernacularName: "Shona", IsoName: "Shona", IsoAlpha2Code: "sn", IsoAlpha3Code: "sna"}, + {LanguageID: 219, Symbol: "SK", EnglishName: "Silozi", VernacularName: "Silozi", IsoName: "Lozi", IsoAlpha2Code: " ", IsoAlpha3Code: "loz"}, + {LanguageID: 220, Symbol: "SN", EnglishName: "Sinhala", VernacularName: "සිංහල", IsoName: "Sinhala", IsoAlpha2Code: "si", IsoAlpha3Code: "sin"}, + {LanguageID: 221, Symbol: "V", EnglishName: "Slovak", VernacularName: "slovenčina", IsoName: "Slovak", IsoAlpha2Code: "sk", IsoAlpha3Code: "slk"}, + {LanguageID: 222, Symbol: "SV", EnglishName: "Slovenian", VernacularName: "slovenščina", IsoName: "Slovenian", IsoAlpha2Code: "sl", IsoAlpha3Code: "slv"}, + {LanguageID: 223, Symbol: "SP", EnglishName: "Solomon Islands Pidgin", VernacularName: "Solomon Islands Pidgin", IsoName: "Pijin", IsoAlpha2Code: " ", IsoAlpha3Code: "pis"}, + {LanguageID: 224, Symbol: "SO", EnglishName: "Somali", VernacularName: "Soomaali", IsoName: "Somali", IsoAlpha2Code: "so", IsoAlpha3Code: "som"}, + {LanguageID: 225, Symbol: "SR", EnglishName: "Sranantongo", VernacularName: "Sranantongo", IsoName: "Sranan Tongo", IsoAlpha2Code: " ", IsoAlpha3Code: "srn"}, + {LanguageID: 226, Symbol: "UK", EnglishName: "Sukuma", VernacularName: "Kisukuma", IsoName: "Sukuma", IsoAlpha2Code: " ", IsoAlpha3Code: "suk"}, + {LanguageID: 227, Symbol: "SD", EnglishName: "Sunda", VernacularName: "Sunda", IsoName: "Sundanese", IsoAlpha2Code: "su", IsoAlpha3Code: "sun"}, + {LanguageID: 228, Symbol: "SW", EnglishName: "Swahili", VernacularName: "Kiswahili", IsoName: "Swahili (individual language)", IsoAlpha2Code: " ", IsoAlpha3Code: "swh"}, + {LanguageID: 229, Symbol: "ZS", EnglishName: "Swahili (Congo)", VernacularName: "Kiswahili (Congo)", IsoName: "Congo Swahili", IsoAlpha2Code: " ", IsoAlpha3Code: "swc"}, + {LanguageID: 230, Symbol: "Z", EnglishName: "Swedish", VernacularName: "Svenska", IsoName: "Swedish", IsoAlpha2Code: "sv", IsoAlpha3Code: "swe"}, + {LanguageID: 231, Symbol: "TG", EnglishName: "Tagalog", VernacularName: "Tagalog", IsoName: "Tagalog", IsoAlpha2Code: "tl", IsoAlpha3Code: "tgl"}, + {LanguageID: 232, Symbol: "TH", EnglishName: "Tahitian", VernacularName: "Tahiti", IsoName: "Tahitian", IsoAlpha2Code: "ty", IsoAlpha3Code: "tah"}, + {LanguageID: 233, Symbol: "AT", EnglishName: "Taita", VernacularName: "Kidawida", IsoName: "Taita", IsoAlpha2Code: " ", IsoAlpha3Code: "dav"}, + {LanguageID: 234, Symbol: "TL", EnglishName: "Tamil", VernacularName: "தமிழ்", IsoName: "Tamil", IsoAlpha2Code: "ta", IsoAlpha3Code: "tam"}, + {LanguageID: 235, Symbol: "TA", EnglishName: "Tausug", VernacularName: "Tausug", IsoName: "Tausug", IsoAlpha2Code: " ", IsoAlpha3Code: "tsg"}, + {LanguageID: 236, Symbol: "TU", EnglishName: "Telugu", VernacularName: "తెలుగు", IsoName: "Telugu", IsoAlpha2Code: "te", IsoAlpha3Code: "tel"}, + {LanguageID: 237, Symbol: "SI", EnglishName: "Thai", VernacularName: "ไทย", IsoName: "Thai", IsoAlpha2Code: "th", IsoAlpha3Code: "tha"}, + {LanguageID: 238, Symbol: "TT", EnglishName: "Tangkhul", VernacularName: "Tangkhul", IsoName: "Tangkhul Naga", IsoAlpha2Code: " ", IsoAlpha3Code: "nmf"}, + {LanguageID: 239, Symbol: "CI", EnglishName: "Chin (Tiddim)", VernacularName: "Chin (Tedim)", IsoName: "Tedim Chin", IsoAlpha2Code: " ", IsoAlpha3Code: "ctd"}, + {LanguageID: 240, Symbol: "TI", EnglishName: "Tigrinya", VernacularName: "ትግርኛ", IsoName: "Tigrinya", IsoAlpha2Code: "ti", IsoAlpha3Code: "tir"}, + {LanguageID: 241, Symbol: "TV", EnglishName: "Tiv", VernacularName: "Tiv", IsoName: "Tiv", IsoAlpha2Code: " ", IsoAlpha3Code: "tiv"}, + {LanguageID: 242, Symbol: "TR", EnglishName: "Toaripi", VernacularName: "Toaripi", IsoName: "Toaripi", IsoAlpha2Code: " ", IsoAlpha3Code: "tqo"}, + {LanguageID: 243, Symbol: "OE", EnglishName: "Tokelauan", VernacularName: "Faka-Tokelau", IsoName: "Tokelau", IsoAlpha2Code: " ", IsoAlpha3Code: "tkl"}, + {LanguageID: 244, Symbol: "TO", EnglishName: "Tongan", VernacularName: "Faka-Tonga", IsoName: "Tonga (Tonga Islands)", IsoAlpha2Code: "to", IsoAlpha3Code: "ton"}, + {LanguageID: 245, Symbol: "TE", EnglishName: "Chuukese", VernacularName: "Fósun Chuuk", IsoName: "Chuukese", IsoAlpha2Code: " ", IsoAlpha3Code: "chk"}, + {LanguageID: 246, Symbol: "SH", EnglishName: "Tshiluba", VernacularName: "Tshiluba", IsoName: "Luba-Lulua", IsoAlpha2Code: " ", IsoAlpha3Code: "lua"}, + {LanguageID: 247, Symbol: "TS", EnglishName: "Tsonga", VernacularName: "Xitsonga", IsoName: "Tsonga", IsoAlpha2Code: "ts", IsoAlpha3Code: "tso"}, + {LanguageID: 248, Symbol: "TN", EnglishName: "Setswana", VernacularName: "Setswana", IsoName: "Tswana", IsoAlpha2Code: "tn", IsoAlpha3Code: "tsn"}, + {LanguageID: 249, Symbol: "TB", EnglishName: "Chitumbuka", VernacularName: "Chitumbuka", IsoName: "Tumbuka", IsoAlpha2Code: " ", IsoAlpha3Code: "tum"}, + {LanguageID: 250, Symbol: "TK", EnglishName: "Turkish", VernacularName: "Türkçe", IsoName: "Turkish", IsoAlpha2Code: "tr", IsoAlpha3Code: "tur"}, + {LanguageID: 251, Symbol: "VL", EnglishName: "Tuvaluan", VernacularName: "Tuvalu", IsoName: "Tuvalu", IsoAlpha2Code: " ", IsoAlpha3Code: "tvl"}, + {LanguageID: 252, Symbol: "TW", EnglishName: "Twi", VernacularName: "Twi", IsoName: "Akan", IsoAlpha2Code: "ak", IsoAlpha3Code: "aka"}, + {LanguageID: 253, Symbol: "K", EnglishName: "Ukrainian", VernacularName: "українська", IsoName: "Ukrainian", IsoAlpha2Code: "uk", IsoAlpha3Code: "ukr"}, + {LanguageID: 254, Symbol: "UB", EnglishName: "Umbundu", VernacularName: "Umbundu", IsoName: "Umbundu", IsoAlpha2Code: " ", IsoAlpha3Code: "umb"}, + {LanguageID: 255, Symbol: "UD", EnglishName: "Urdu", VernacularName: "اُردو", IsoName: "Urdu", IsoAlpha2Code: "ur", IsoAlpha3Code: "urd"}, + {LanguageID: 256, Symbol: "UR", EnglishName: "Urhobo", VernacularName: "Urhobo", IsoName: "Urhobo", IsoAlpha2Code: " ", IsoAlpha3Code: "urh"}, + {LanguageID: 257, Symbol: "VE", EnglishName: "Venda", VernacularName: "Luvenda", IsoName: "Venda", IsoAlpha2Code: "ve", IsoAlpha3Code: "ven"}, + {LanguageID: 258, Symbol: "VT", EnglishName: "Vietnamese", VernacularName: "Việt", IsoName: "Vietnamese", IsoAlpha2Code: "vi", IsoAlpha3Code: "vie"}, + {LanguageID: 259, Symbol: "WA", EnglishName: "Wallisian", VernacularName: "Faka'uvea", IsoName: "Wallisian", IsoAlpha2Code: " ", IsoAlpha3Code: "wls"}, + {LanguageID: 260, Symbol: "W", EnglishName: "Welsh", VernacularName: "Cymraeg", IsoName: "Welsh", IsoAlpha2Code: "cy", IsoAlpha3Code: "cym"}, + {LanguageID: 261, Symbol: "WO", EnglishName: "Wolof", VernacularName: "Wolof", IsoName: "Wolof", IsoAlpha2Code: "wo", IsoAlpha3Code: "wol"}, + {LanguageID: 262, Symbol: "XO", EnglishName: "Xhosa", VernacularName: "IsiXhosa", IsoName: "Xhosa", IsoAlpha2Code: "xh", IsoAlpha3Code: "xho"}, + {LanguageID: 263, Symbol: "YA", EnglishName: "Chiyao", VernacularName: "Chiyao", IsoName: "Yao", IsoAlpha2Code: " ", IsoAlpha3Code: "yao"}, + {LanguageID: 264, Symbol: "YP", EnglishName: "Yapese", VernacularName: "Waab", IsoName: "Yapese", IsoAlpha2Code: " ", IsoAlpha3Code: "yap"}, + {LanguageID: 265, Symbol: "YG", EnglishName: "Tarok", VernacularName: "", IsoName: "Tarok", IsoAlpha2Code: " ", IsoAlpha3Code: "yer"}, + {LanguageID: 266, Symbol: "Y", EnglishName: "Yiddish", VernacularName: "", IsoName: "Yiddish", IsoAlpha2Code: "yi", IsoAlpha3Code: "yid"}, + {LanguageID: 267, Symbol: "YR", EnglishName: "Yoruba", VernacularName: "Yorùbá", IsoName: "Yoruba", IsoAlpha2Code: "yo", IsoAlpha3Code: "yor"}, + {LanguageID: 268, Symbol: "ZU", EnglishName: "Zulu", VernacularName: "IsiZulu", IsoName: "Zulu", IsoAlpha2Code: "zu", IsoAlpha3Code: "zul"}, + {LanguageID: 269, Symbol: "GK", EnglishName: "Kekchi", VernacularName: "Q’eqchi’", IsoName: "Kekchí", IsoAlpha2Code: " ", IsoAlpha3Code: "kek"}, + {LanguageID: 270, Symbol: "AY", EnglishName: "Bahasa Melayu", VernacularName: "Bahasa Melayu", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 271, Symbol: "GE", EnglishName: "Georgian", VernacularName: "ქართული", IsoName: "Georgian", IsoAlpha2Code: "ka", IsoAlpha3Code: "kat"}, + {LanguageID: 272, Symbol: "LD", EnglishName: "Lunda", VernacularName: "Lunda", IsoName: "Lunda", IsoAlpha2Code: " ", IsoAlpha3Code: "lun"}, + {LanguageID: 273, Symbol: "OA", EnglishName: "Oromo", VernacularName: "Afaan Oromoo", IsoName: "Oromo", IsoAlpha2Code: "om", IsoAlpha3Code: "orm"}, + {LanguageID: 274, Symbol: "PK", EnglishName: "Karen (Pwo Western)", VernacularName: "", IsoName: "Pwo Western Karen", IsoAlpha2Code: " ", IsoAlpha3Code: "pwo"}, + {LanguageID: 275, Symbol: "KIM", EnglishName: "Kimbundu", VernacularName: "Kimbundu", IsoName: "Kimbundu", IsoAlpha2Code: " ", IsoAlpha3Code: "kmb"}, + {LanguageID: 276, Symbol: "BQ", EnglishName: "Basque", VernacularName: "Euskara", IsoName: "Basque", IsoAlpha2Code: "eu", IsoAlpha3Code: "eus"}, + {LanguageID: 277, Symbol: "CQ", EnglishName: "Cakchiquel (Western)", VernacularName: "Kaqchikel (Sololá)", IsoName: "Kaqchikel", IsoAlpha2Code: " ", IsoAlpha3Code: "cak"}, + {LanguageID: 278, Symbol: "AN", EnglishName: "Catalan", VernacularName: "català", IsoName: "Catalan", IsoAlpha2Code: "ca", IsoAlpha3Code: "cat"}, + {LanguageID: 279, Symbol: "CHS", EnglishName: "Chinese Mandarin (Simplified)", VernacularName: "中文简体(普通话)", IsoName: "Mandarin Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "cmn"}, + {LanguageID: 280, Symbol: "GJ", EnglishName: "Guajiro", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 281, Symbol: "GR", EnglishName: "Guragigna", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 282, Symbol: "KAM", EnglishName: "Kambata", VernacularName: "", IsoName: "Kambaata", IsoAlpha2Code: " ", IsoAlpha3Code: "ktb"}, + {LanguageID: 283, Symbol: "IP", EnglishName: "Kipare", VernacularName: "Kipare", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 284, Symbol: "AB", EnglishName: "Lamba", VernacularName: "IciLamba", IsoName: "Lamba", IsoAlpha2Code: " ", IsoAlpha3Code: "lam"}, + {LanguageID: 285, Symbol: "LT", EnglishName: "Latvian", VernacularName: "latviešu", IsoName: "Latvian", IsoAlpha2Code: "lv", IsoAlpha3Code: "lav"}, + {LanguageID: 286, Symbol: "MZ", EnglishName: "Mam", VernacularName: "mam", IsoName: "Mam", IsoAlpha2Code: " ", IsoAlpha3Code: "mam"}, + {LanguageID: 287, Symbol: "MQN", EnglishName: "Marquesian (Nuku Hiva)", VernacularName: "Marquisien (Nuku Hiva)", IsoName: "North Marquesan", IsoAlpha2Code: " ", IsoAlpha3Code: "mrq"}, + {LanguageID: 288, Symbol: "DU", EnglishName: "Medumba", VernacularName: "Bangangté", IsoName: "Medumba", IsoAlpha2Code: " ", IsoAlpha3Code: "byv"}, + {LanguageID: 289, Symbol: "NG", EnglishName: "Ngambaye", VernacularName: "Ngambay", IsoName: "Ngambay", IsoAlpha2Code: " ", IsoAlpha3Code: "sba"}, + {LanguageID: 290, Symbol: "OV", EnglishName: "Ovambo", VernacularName: "Ovambo", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 291, Symbol: "PL", EnglishName: "Pulaar", VernacularName: "", IsoName: "Pulaar", IsoAlpha2Code: " ", IsoAlpha3Code: "fuc"}, + {LanguageID: 292, Symbol: "QU", EnglishName: "Quechua (Cuzco)", VernacularName: "quechua (Cusco)", IsoName: "Cusco Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "quz"}, + {LanguageID: 293, Symbol: "QC", EnglishName: "Quiche", VernacularName: "quiché", IsoName: "K'iche'", IsoAlpha2Code: " ", IsoAlpha3Code: "quc"}, + {LanguageID: 294, Symbol: "PS", EnglishName: "Samal", VernacularName: "", IsoName: "Central Sama", IsoAlpha2Code: " ", IsoAlpha3Code: "sml"}, + {LanguageID: 295, Symbol: "DM", EnglishName: "Sidama", VernacularName: "Sidaamu Afoo", IsoName: "Sidamo", IsoAlpha2Code: " ", IsoAlpha3Code: "sid"}, + {LanguageID: 296, Symbol: "AW", EnglishName: "Tshwa", VernacularName: "ciTshwa", IsoName: "Tswa", IsoAlpha2Code: " ", IsoAlpha3Code: "tsc"}, + {LanguageID: 297, Symbol: "HM", EnglishName: "Hmong (White)", VernacularName: "Hmoob Dawb", IsoName: "Hmong Daw", IsoAlpha2Code: " ", IsoAlpha3Code: "mww"}, + {LanguageID: 298, Symbol: "RD", EnglishName: "Kurdish Kurmanji", VernacularName: "Kurdî (Kurmancî)", IsoName: "Northern Kurdish", IsoAlpha2Code: " ", IsoAlpha3Code: "kmr"}, + {LanguageID: 299, Symbol: "QI", EnglishName: "Quichua", VernacularName: "quichua", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 300, Symbol: "RHG", EnglishName: "Romansh (Grishun)", VernacularName: "", IsoName: "Romansh", IsoAlpha2Code: "rm", IsoAlpha3Code: "roh"}, + {LanguageID: 301, Symbol: "RH", EnglishName: "Romansh (Ladin)", VernacularName: "Rumantsch (Ladin)", IsoName: "Romansh", IsoAlpha2Code: "rm", IsoAlpha3Code: "roh"}, + {LanguageID: 302, Symbol: "RHS", EnglishName: "Romansh (Sursilvan)", VernacularName: "romontsch (sursilvan)", IsoName: "Romansh", IsoAlpha2Code: "rm", IsoAlpha3Code: "roh"}, + {LanguageID: 303, Symbol: "SHA", EnglishName: "Shan", VernacularName: "", IsoName: "Shan", IsoAlpha2Code: " ", IsoAlpha3Code: "shn"}, + {LanguageID: 304, Symbol: "AJ", EnglishName: "Azerbaijani (Cyrillic)", VernacularName: "Aзәрбајҹан (кирил әлифбасы)", IsoName: "North Azerbaijani", IsoAlpha2Code: " ", IsoAlpha3Code: "azj"}, + {LanguageID: 305, Symbol: "KAB", EnglishName: "Kabiye", VernacularName: "Kabɩyɛ", IsoName: "Kabiyè", IsoAlpha2Code: " ", IsoAlpha3Code: "kbp"}, + {LanguageID: 306, Symbol: "KEK", EnglishName: "Kayan", VernacularName: "", IsoName: "Kayan", IsoAlpha2Code: " ", IsoAlpha3Code: "pdu"}, + {LanguageID: 307, Symbol: "TAT", EnglishName: "Tatar", VernacularName: "татар", IsoName: "Tatar", IsoAlpha2Code: "tt", IsoAlpha3Code: "tat"}, + {LanguageID: 308, Symbol: "BY", EnglishName: "Buryat", VernacularName: "буряад", IsoName: "Russia Buriat", IsoAlpha2Code: " ", IsoAlpha3Code: "bxr"}, + {LanguageID: 309, Symbol: "GBA", EnglishName: "Gbaya", VernacularName: "Gbaya", IsoName: "Gbaya (Central African Republic)", IsoAlpha2Code: " ", IsoAlpha3Code: "gba"}, + {LanguageID: 310, Symbol: "NV", EnglishName: "Navajo", VernacularName: "Diné Bizaad", IsoName: "Navajo", IsoAlpha2Code: "nv", IsoAlpha3Code: "nav"}, + {LanguageID: 311, Symbol: "OB", EnglishName: "To’abaita", VernacularName: "Toabaita", IsoName: "To'abaita", IsoAlpha2Code: " ", IsoAlpha3Code: "mlu"}, + {LanguageID: 312, Symbol: "ON", EnglishName: "Montagnais", VernacularName: "", IsoName: "Montagnais", IsoAlpha2Code: " ", IsoAlpha3Code: "moe"}, + {LanguageID: 313, Symbol: "OU", EnglishName: "Moundang", VernacularName: "Moundang", IsoName: "Mundang", IsoAlpha2Code: " ", IsoAlpha3Code: "mua"}, + {LanguageID: 314, Symbol: "RM", EnglishName: "Romany (Macedonia)", VernacularName: "romane (Makedonija)", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 315, Symbol: "RV", EnglishName: "Roviana", VernacularName: "Roviana", IsoName: "Roviana", IsoAlpha2Code: " ", IsoAlpha3Code: "rug"}, + {LanguageID: 316, Symbol: "WL", EnglishName: "Wolaita", VernacularName: "Wolayttattuwaa", IsoName: "Wolaytta", IsoAlpha2Code: " ", IsoAlpha3Code: "wal"}, + {LanguageID: 317, Symbol: "MIS", EnglishName: "Miskito", VernacularName: "miskitu", IsoName: "Mískito", IsoAlpha2Code: " ", IsoAlpha3Code: "miq"}, + {LanguageID: 318, Symbol: "AZ", EnglishName: "Kazakh", VernacularName: "қазақ", IsoName: "Kazakh", IsoAlpha2Code: "kk", IsoAlpha3Code: "kaz"}, + {LanguageID: 319, Symbol: "UG", EnglishName: "Uighur (Cyrillic)", VernacularName: "Уйғур (кирилл йезиғи)", IsoName: "Uighur", IsoAlpha2Code: "ug", IsoAlpha3Code: "uig"}, + {LanguageID: 320, Symbol: "KZ", EnglishName: "Kirghiz", VernacularName: "кыргыз", IsoName: "Kirghiz", IsoAlpha2Code: "ky", IsoAlpha3Code: "kir"}, + {LanguageID: 321, Symbol: "AP", EnglishName: "Aymara", VernacularName: "Aymara", IsoName: "Aymara", IsoAlpha2Code: "ay", IsoAlpha3Code: "aym"}, + {LanguageID: 322, Symbol: "DT", EnglishName: "Dakota", VernacularName: "", IsoName: "Dakota", IsoAlpha2Code: " ", IsoAlpha3Code: "dak"}, + {LanguageID: 323, Symbol: "EA", EnglishName: "Enga", VernacularName: "Enga", IsoName: "Enga", IsoAlpha2Code: " ", IsoAlpha3Code: "enq"}, + {LanguageID: 324, Symbol: "NC", EnglishName: "Nicobarese", VernacularName: "Nicobarese", IsoName: "Car Nicobarese", IsoAlpha2Code: " ", IsoAlpha3Code: "caq"}, + {LanguageID: 325, Symbol: "KX", EnglishName: "Kitaita", VernacularName: "Kitaita", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 326, Symbol: "LP", EnglishName: "Saami (North)", VernacularName: "sámegiella (davvi)", IsoName: "Northern Sami", IsoAlpha2Code: "se", IsoAlpha3Code: "sme"}, + {LanguageID: 327, Symbol: "AD", EnglishName: "Adyghe", VernacularName: "адыгабзэ", IsoName: "Adyghe", IsoAlpha2Code: " ", IsoAlpha3Code: "ady"}, + {LanguageID: 328, Symbol: "KHK", EnglishName: "Khakass", VernacularName: "хакас", IsoName: "Khakas", IsoAlpha2Code: " ", IsoAlpha3Code: "kjh"}, + {LanguageID: 329, Symbol: "YK", EnglishName: "Yakutsk", VernacularName: "сахалыы", IsoName: "Yakut", IsoAlpha2Code: " ", IsoAlpha3Code: "sah"}, + {LanguageID: 330, Symbol: "KHA", EnglishName: "Mongolian", VernacularName: "монгол", IsoName: "Halh Mongolian", IsoAlpha2Code: " ", IsoAlpha3Code: "khk"}, + {LanguageID: 331, Symbol: "MAR", EnglishName: "Mari", VernacularName: "марий", IsoName: "Eastern Mari", IsoAlpha2Code: " ", IsoAlpha3Code: "mhr"}, + {LanguageID: 332, Symbol: "CU", EnglishName: "Chuvash", VernacularName: "чӑвашла", IsoName: "Chuvash", IsoAlpha2Code: "cv", IsoAlpha3Code: "chv"}, + {LanguageID: 333, Symbol: "KAD", EnglishName: "Dusun", VernacularName: "Dusun", IsoName: "Central Dusun", IsoAlpha2Code: " ", IsoAlpha3Code: "dtp"}, + {LanguageID: 334, Symbol: "JC", EnglishName: "Popti’", VernacularName: "poptí", IsoName: "Popti'", IsoAlpha2Code: " ", IsoAlpha3Code: "jac"}, + {LanguageID: 335, Symbol: "KAN", EnglishName: "Akateko", VernacularName: "akateko", IsoName: "Western Kanjobal", IsoAlpha2Code: " ", IsoAlpha3Code: "knj"}, + {LanguageID: 336, Symbol: "LAH", EnglishName: "Lahu", VernacularName: "Laˇhuˍ hkawˇ", IsoName: "Lahu", IsoAlpha2Code: " ", IsoAlpha3Code: "lhu"}, + {LanguageID: 337, Symbol: "KND", EnglishName: "Konkani (Devanagari)", VernacularName: "कोंकणी (देवनागरी)", IsoName: "Kukna", IsoAlpha2Code: " ", IsoAlpha3Code: "kex"}, + {LanguageID: 338, Symbol: "ABK", EnglishName: "Abkhaz", VernacularName: "аԥсуа", IsoName: "Abkhazian", IsoAlpha2Code: "ab", IsoAlpha3Code: "abk"}, + {LanguageID: 339, Symbol: "JL", EnglishName: "Jula", VernacularName: "Jula", IsoName: "Dyula", IsoAlpha2Code: " ", IsoAlpha3Code: "dyu"}, + {LanguageID: 340, Symbol: "LIS", EnglishName: "Lisu", VernacularName: "ꓡꓲ-ꓢꓴ", IsoName: "Lisu", IsoAlpha2Code: " ", IsoAlpha3Code: "lis"}, + {LanguageID: 341, Symbol: "ZR", EnglishName: "Zarma", VernacularName: "Zarma", IsoName: "Zarma", IsoAlpha2Code: " ", IsoAlpha3Code: "dje"}, + {LanguageID: 342, Symbol: "BB", EnglishName: "Bariba", VernacularName: "Baatɔnum", IsoName: "Baatonum", IsoAlpha2Code: " ", IsoAlpha3Code: "bba"}, + {LanguageID: 343, Symbol: "OSS", EnglishName: "Ossetian", VernacularName: "ирон", IsoName: "Ossetian", IsoAlpha2Code: "os", IsoAlpha3Code: "oss"}, + {LanguageID: 344, Symbol: "FU", EnglishName: "Fulfulde (Maasina)", VernacularName: "", IsoName: "Maasina Fulfulde", IsoAlpha2Code: " ", IsoAlpha3Code: "ffm"}, + {LanguageID: 345, Symbol: "PT", EnglishName: "Paumotu", VernacularName: "", IsoName: "Tuamotuan", IsoAlpha2Code: " ", IsoAlpha3Code: "pmt"}, + {LanguageID: 346, Symbol: "LR", EnglishName: "Lari", VernacularName: "Kilari", IsoName: "Laari", IsoAlpha2Code: " ", IsoAlpha3Code: "ldi"}, + {LanguageID: 347, Symbol: "KBY", EnglishName: "Kabyle", VernacularName: "Taqbaylit", IsoName: "Kabyle", IsoAlpha2Code: " ", IsoAlpha3Code: "kab"}, + {LanguageID: 348, Symbol: "KBR", EnglishName: "Kabardin-Cherkess", VernacularName: "адыгэбзэ", IsoName: "Kabardian", IsoAlpha2Code: " ", IsoAlpha3Code: "kbd"}, + {LanguageID: 349, Symbol: "BAL", EnglishName: "Karachay-Balkar", VernacularName: "къарачай-малкъар", IsoName: "Karachay-Balkar", IsoAlpha2Code: " ", IsoAlpha3Code: "krc"}, + {LanguageID: 350, Symbol: "RDA", EnglishName: "Kurdish Sorani", VernacularName: "کوردی سۆرانی", IsoName: "Central Kurdish", IsoAlpha2Code: " ", IsoAlpha3Code: "ckb"}, + {LanguageID: 351, Symbol: "KUK", EnglishName: "Chin (Kuki)", VernacularName: "Chin (Kuki)", IsoName: "Thado Chin", IsoAlpha2Code: " ", IsoAlpha3Code: "tcz"}, + {LanguageID: 352, Symbol: "LE", EnglishName: "Lomwe", VernacularName: "Elomwe", IsoName: "Lomwe", IsoAlpha2Code: " ", IsoAlpha3Code: "ngl"}, + {LanguageID: 353, Symbol: "MAC", EnglishName: "Macua", VernacularName: "Emakhuwa", IsoName: "Makhuwa", IsoAlpha2Code: " ", IsoAlpha3Code: "vmw"}, + {LanguageID: 354, Symbol: "UE", EnglishName: "Nuer", VernacularName: "Thok Nath", IsoName: "Nuer", IsoAlpha2Code: " ", IsoAlpha3Code: "nus"}, + {LanguageID: 355, Symbol: "SEN", EnglishName: "Sena", VernacularName: "Cisena", IsoName: "Sena", IsoAlpha2Code: " ", IsoAlpha3Code: "seh"}, + {LanguageID: 356, Symbol: "TJ", EnglishName: "Tajiki", VernacularName: "тоҷикӣ", IsoName: "Tajik", IsoAlpha2Code: "tg", IsoAlpha3Code: "tgk"}, + {LanguageID: 357, Symbol: "UZ", EnglishName: "Uzbek", VernacularName: "ўзбекча", IsoName: "Uzbek", IsoAlpha2Code: "uz", IsoAlpha3Code: "uzb"}, + {LanguageID: 358, Symbol: "DR", EnglishName: "Uruund", VernacularName: "Uruund", IsoName: "Ruund", IsoAlpha2Code: " ", IsoAlpha3Code: "rnd"}, + {LanguageID: 359, Symbol: "NW", EnglishName: "Newari", VernacularName: "नेवारी", IsoName: "Newari", IsoAlpha2Code: " ", IsoAlpha3Code: "new"}, + {LanguageID: 360, Symbol: "ET", EnglishName: "Bété", VernacularName: "ˈBhɛtɩgbʋʋ", IsoName: "Gagnoa Bété", IsoAlpha2Code: " ", IsoAlpha3Code: "btg"}, + {LanguageID: 361, Symbol: "CO", EnglishName: "Chuabo", VernacularName: "Etxuwabo", IsoName: "Chuwabu", IsoAlpha2Code: " ", IsoAlpha3Code: "chw"}, + {LanguageID: 362, Symbol: "VI", EnglishName: "Tuvinian", VernacularName: "тыва", IsoName: "Tuvinian", IsoAlpha2Code: " ", IsoAlpha3Code: "tyv"}, + {LanguageID: 363, Symbol: "ZO", EnglishName: "Chin (Zotung)", VernacularName: "Chin (Zotung)", IsoName: "Zotung Chin", IsoAlpha2Code: " ", IsoAlpha3Code: "czt"}, + {LanguageID: 364, Symbol: "PJN", EnglishName: "Punjabi (Shahmukhi)", VernacularName: "پنجابی (شاہ مُکھی)", IsoName: "Western Panjabi", IsoAlpha2Code: " ", IsoAlpha3Code: "pnb"}, + {LanguageID: 365, Symbol: "MOR", EnglishName: "Moru", VernacularName: "", IsoName: "Moru", IsoAlpha2Code: " ", IsoAlpha3Code: "mgd"}, + {LanguageID: 366, Symbol: "NB", EnglishName: "Nambya", VernacularName: "Nambya", IsoName: "Nambya", IsoAlpha2Code: " ", IsoAlpha3Code: "nmq"}, + {LanguageID: 367, Symbol: "DG", EnglishName: "Dangme", VernacularName: "Dangme", IsoName: "Adangme", IsoAlpha2Code: " ", IsoAlpha3Code: "ada"}, + {LanguageID: 368, Symbol: "FF", EnglishName: "Frafra", VernacularName: "Farefare", IsoName: "Farefare", IsoAlpha2Code: " ", IsoAlpha3Code: "gur"}, + {LanguageID: 369, Symbol: "KIN", EnglishName: "Kinande", VernacularName: "Kinande", IsoName: "Nande", IsoAlpha2Code: " ", IsoAlpha3Code: "nnb"}, + {LanguageID: 370, Symbol: "KIT", EnglishName: "Kituba", VernacularName: "Kituba", IsoName: "Kituba (Democratic Republic of Congo)", IsoAlpha2Code: " ", IsoAlpha3Code: "ktu"}, + {LanguageID: 371, Symbol: "LIN", EnglishName: "Lingombe", VernacularName: "Lingombe", IsoName: "Ngombe (Democratic Republic of Congo)", IsoAlpha2Code: " ", IsoAlpha3Code: "ngc"}, + {LanguageID: 372, Symbol: "LOM", EnglishName: "Lomongo", VernacularName: "Lɔmɔngɔ", IsoName: "Mongo", IsoAlpha2Code: " ", IsoAlpha3Code: "lol"}, + {LanguageID: 373, Symbol: "ORR", EnglishName: "Mahorian (Roman)", VernacularName: "Shimaore (Alifuɓe)", IsoName: "Maore Comorian", IsoAlpha2Code: " ", IsoAlpha3Code: "swb"}, + {LanguageID: 374, Symbol: "KIP", EnglishName: "Kipende", VernacularName: "Kipende", IsoName: "Phende", IsoAlpha2Code: " ", IsoAlpha3Code: "pem"}, + {LanguageID: 375, Symbol: "BEL", EnglishName: "Belorussian", VernacularName: "беларуская", IsoName: "Belarusian", IsoAlpha2Code: "be", IsoAlpha3Code: "bel"}, + {LanguageID: 376, Symbol: "ALT", EnglishName: "Altai", VernacularName: "алтай", IsoName: "Southern Altai", IsoAlpha2Code: " ", IsoAlpha3Code: "alt"}, + {LanguageID: 377, Symbol: "BLN", EnglishName: "Balinese", VernacularName: "Bali", IsoName: "Balinese", IsoAlpha2Code: " ", IsoAlpha3Code: "ban"}, + {LanguageID: 378, Symbol: "TM", EnglishName: "Turkmen (Cyrillic)", VernacularName: "түркмен (кириллица)", IsoName: "Turkmen", IsoAlpha2Code: "tk", IsoAlpha3Code: "tuk"}, + {LanguageID: 379, Symbol: "DO", EnglishName: "Diola", VernacularName: "Jóola", IsoName: "Jola-Fonyi", IsoAlpha2Code: " ", IsoAlpha3Code: "dyo"}, + {LanguageID: 380, Symbol: "FO", EnglishName: "Fon", VernacularName: "Fɔngbe", IsoName: "Fon", IsoAlpha2Code: " ", IsoAlpha3Code: "fon"}, + {LanguageID: 381, Symbol: "FD", EnglishName: "Fulfulde (Cameroon)", VernacularName: "Fulfulde (Kamerun)", IsoName: "Adamawa Fulfulde", IsoAlpha2Code: " ", IsoAlpha3Code: "fub"}, + {LanguageID: 382, Symbol: "GN", EnglishName: "Gokana", VernacularName: "Gokana", IsoName: "Gokana", IsoAlpha2Code: " ", IsoAlpha3Code: "gkn"}, + {LanguageID: 383, Symbol: "IBI", EnglishName: "Ibinda", VernacularName: "Ibinda", IsoName: "Yombe", IsoAlpha2Code: " ", IsoAlpha3Code: "yom"}, + {LanguageID: 384, Symbol: "IH", EnglishName: "Esan", VernacularName: "Esan", IsoName: "Esan", IsoAlpha2Code: " ", IsoAlpha3Code: "ish"}, + {LanguageID: 385, Symbol: "TCR", EnglishName: "Bissau Guinean Creole", VernacularName: "Kriol di Gine-Bisau", IsoName: "Upper Guinea Crioulo", IsoAlpha2Code: " ", IsoAlpha3Code: "pov"}, + {LanguageID: 386, Symbol: "CRM", EnglishName: "Romany (Czech Republic)", VernacularName: "", IsoName: "Carpathian Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmc"}, + {LanguageID: 387, Symbol: "SL", EnglishName: "Shilluk", VernacularName: "", IsoName: "Shilluk", IsoAlpha2Code: " ", IsoAlpha3Code: "shk"}, + {LanguageID: 388, Symbol: "SBO", EnglishName: "Serbian (Roman)", VernacularName: "srpski (latinica)", IsoName: "Serbian", IsoAlpha2Code: "sr", IsoAlpha3Code: "srp"}, + {LanguageID: 389, Symbol: "RI", EnglishName: "Kriol", VernacularName: "", IsoName: "Kriol", IsoAlpha2Code: " ", IsoAlpha3Code: "rop"}, + {LanguageID: 390, Symbol: "MSH", EnglishName: "Mashi", VernacularName: "Mashi", IsoName: "Shi", IsoAlpha2Code: " ", IsoAlpha3Code: "shr"}, + {LanguageID: 391, Symbol: "NGK", EnglishName: "Ngbaka", VernacularName: "Ngbaka", IsoName: "Ngbaka", IsoAlpha2Code: " ", IsoAlpha3Code: "nga"}, + {LanguageID: 392, Symbol: "KSN", EnglishName: "Kisonge", VernacularName: "Kisongye", IsoName: "Songe", IsoAlpha2Code: " ", IsoAlpha3Code: "sop"}, + {LanguageID: 393, Symbol: "REA", EnglishName: "Armenian", VernacularName: "Հայերեն", IsoName: "Armenian", IsoAlpha2Code: "hy", IsoAlpha3Code: "hye"}, + {LanguageID: 394, Symbol: "GCS", EnglishName: "Scottish Gaelic", VernacularName: "Gàidhlig", IsoName: "Scottish Gaelic", IsoAlpha2Code: "gd", IsoAlpha3Code: "gla"}, + {LanguageID: 395, Symbol: "TOR", EnglishName: "Toraja", VernacularName: "Toraja", IsoName: "Toraja-Sa'dan", IsoAlpha2Code: " ", IsoAlpha3Code: "sda"}, + {LanguageID: 396, Symbol: "KM", EnglishName: "Komi", VernacularName: "коми", IsoName: "Komi-Zyrian", IsoAlpha2Code: " ", IsoAlpha3Code: "kpv"}, + {LanguageID: 397, Symbol: "LZ", EnglishName: "Lezgian", VernacularName: "лезги", IsoName: "Lezghian", IsoAlpha2Code: " ", IsoAlpha3Code: "lez"}, + {LanguageID: 398, Symbol: "HE", EnglishName: "Chechen", VernacularName: "нохчийн", IsoName: "Chechen", IsoAlpha2Code: "ce", IsoAlpha3Code: "che"}, + {LanguageID: 399, Symbol: "RCR", EnglishName: "Réunion Creole", VernacularName: "Kréol Rénioné", IsoName: "Réunion Creole French", IsoAlpha2Code: " ", IsoAlpha3Code: "rcf"}, + {LanguageID: 400, Symbol: "EZ", EnglishName: "Erzya", VernacularName: "эрзянь", IsoName: "Erzya", IsoAlpha2Code: " ", IsoAlpha3Code: "myv"}, + {LanguageID: 401, Symbol: "MAZ", EnglishName: "Mazatec (Huautla)", VernacularName: "énná", IsoName: "Huautla Mazatec", IsoAlpha2Code: " ", IsoAlpha3Code: "mau"}, + {LanguageID: 402, Symbol: "MOK", EnglishName: "Moksha", VernacularName: "мокшень", IsoName: "Moksha", IsoAlpha2Code: " ", IsoAlpha3Code: "mdf"}, + {LanguageID: 403, Symbol: "TZE", EnglishName: "Tzeltal", VernacularName: "tseltal", IsoName: "Tzeltal", IsoAlpha2Code: " ", IsoAlpha3Code: "tzh"}, + {LanguageID: 404, Symbol: "TZO", EnglishName: "Tzotzil", VernacularName: "tsotsil", IsoName: "Tzotzil", IsoAlpha2Code: " ", IsoAlpha3Code: "tzo"}, + {LanguageID: 405, Symbol: "UM", EnglishName: "Udmurt", VernacularName: "удмурт", IsoName: "Udmurt", IsoAlpha2Code: " ", IsoAlpha3Code: "udm"}, + {LanguageID: 406, Symbol: "ING", EnglishName: "Ingush", VernacularName: "гІалгІай", IsoName: "Ingush", IsoAlpha2Code: " ", IsoAlpha3Code: "inh"}, + {LanguageID: 407, Symbol: "MAA", EnglishName: "Chin (Mara)", VernacularName: "Chin (Mara)", IsoName: "Mara Chin", IsoAlpha2Code: " ", IsoAlpha3Code: "mrh"}, + {LanguageID: 408, Symbol: "TRN", EnglishName: "Turkana", VernacularName: "Ng'aturkana", IsoName: "Turkana", IsoAlpha2Code: " ", IsoAlpha3Code: "tuv"}, + {LanguageID: 409, Symbol: "NK", EnglishName: "Nyaneka", VernacularName: "Nyaneka", IsoName: "Nyaneka", IsoAlpha2Code: " ", IsoAlpha3Code: "nyk"}, + {LanguageID: 410, Symbol: "GZ", EnglishName: "Gagauz", VernacularName: "гaгaуз", IsoName: "Gagauz", IsoAlpha2Code: " ", IsoAlpha3Code: "gag"}, + {LanguageID: 411, Symbol: "GMA", EnglishName: "Guaymi (Atlantic)", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 412, Symbol: "WY", EnglishName: "Wayuunaiki", VernacularName: "Wayuunaiki", IsoName: "Wayuu", IsoAlpha2Code: " ", IsoAlpha3Code: "guc"}, + {LanguageID: 413, Symbol: "FT", EnglishName: "Futuna (East)", VernacularName: "Fakafutuna", IsoName: "East Futuna", IsoAlpha2Code: " ", IsoAlpha3Code: "fud"}, + {LanguageID: 414, Symbol: "BAK", EnglishName: "Bashkir", VernacularName: "башҡорт", IsoName: "Bashkir", IsoAlpha2Code: "ba", IsoAlpha3Code: "bak"}, + {LanguageID: 415, Symbol: "RDC", EnglishName: "Kurdish Kurmanji (Cyrillic)", VernacularName: "К′öрди Кöрманщи (Кирили)", IsoName: "Northern Kurdish", IsoAlpha2Code: " ", IsoAlpha3Code: "kmr"}, + {LanguageID: 416, Symbol: "FS", EnglishName: "Frisian", VernacularName: "Frysk", IsoName: "Western Frisian", IsoAlpha2Code: "fy", IsoAlpha3Code: "fry"}, + {LanguageID: 417, Symbol: "MAY", EnglishName: "Maya", VernacularName: "maaya", IsoName: "Yucateco", IsoAlpha2Code: " ", IsoAlpha3Code: "yua"}, + {LanguageID: 418, Symbol: "AV", EnglishName: "Avar", VernacularName: "магӀарул", IsoName: "Avaric", IsoAlpha2Code: "av", IsoAlpha3Code: "ava"}, + {LanguageID: 419, Symbol: "LAD", EnglishName: "Ladin (Gardenese)", VernacularName: "Ladin de Gherdëina", IsoName: "Ladin", IsoAlpha2Code: " ", IsoAlpha3Code: "lld"}, + {LanguageID: 420, Symbol: "ASL", EnglishName: "American Sign Language", VernacularName: "American Sign Language", IsoName: "American Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ase"}, + {LanguageID: 421, Symbol: "QUB", EnglishName: "Quechua (Bolivia)", VernacularName: "Quechua (Bolivia)", IsoName: "South Bolivian Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "quh"}, + {LanguageID: 422, Symbol: "TOB", EnglishName: "Toba", VernacularName: "toba", IsoName: "Toba", IsoAlpha2Code: " ", IsoAlpha3Code: "tob"}, + {LanguageID: 423, Symbol: "SKL", EnglishName: "Sakalava", VernacularName: "", IsoName: "Sakalava Malagasy", IsoAlpha2Code: " ", IsoAlpha3Code: "skg"}, + {LanguageID: 424, Symbol: "TNK", EnglishName: "Tankarana", VernacularName: "Tankarana", IsoName: "Antankarana Malagasy", IsoAlpha2Code: " ", IsoAlpha3Code: "xmv"}, + {LanguageID: 425, Symbol: "TOT", EnglishName: "Totonac", VernacularName: "totonaco", IsoName: "Papantla Totonac", IsoAlpha2Code: " ", IsoAlpha3Code: "top"}, + {LanguageID: 426, Symbol: "VZ", EnglishName: "Vezo", VernacularName: "Vezo", IsoName: "Sakalava Malagasy", IsoAlpha2Code: " ", IsoAlpha3Code: "skg"}, + {LanguageID: 427, Symbol: "MTU", EnglishName: "Motu", VernacularName: "Motu", IsoName: "Motu", IsoAlpha2Code: " ", IsoAlpha3Code: "meu"}, + {LanguageID: 428, Symbol: "PAA", EnglishName: "Papiamento (Aruba)", VernacularName: "Papiamento (Aruba)", IsoName: "Papiamento", IsoAlpha2Code: " ", IsoAlpha3Code: "pap"}, + {LanguageID: 429, Symbol: "LHK", EnglishName: "Lhukonzo", VernacularName: "Lhukonzo", IsoName: "Konzo", IsoAlpha2Code: " ", IsoAlpha3Code: "koo"}, + {LanguageID: 430, Symbol: "HUV", EnglishName: "Huave (San Mateo del Mar)", VernacularName: "ombeayiiüts", IsoName: "San Mateo Del Mar Huave", IsoAlpha2Code: " ", IsoAlpha3Code: "huv"}, + {LanguageID: 431, Symbol: "MX", EnglishName: "Mixe (North Central)", VernacularName: "ayuk", IsoName: "Coatlán Mixe", IsoAlpha2Code: " ", IsoAlpha3Code: "mco"}, + {LanguageID: 432, Symbol: "TJO", EnglishName: "Tojolabal", VernacularName: "tojol-abʼal", IsoName: "Tojolabal", IsoAlpha2Code: " ", IsoAlpha3Code: "toj"}, + {LanguageID: 433, Symbol: "AJR", EnglishName: "Azerbaijani", VernacularName: "Azərbaycan", IsoName: "North Azerbaijani", IsoAlpha2Code: " ", IsoAlpha3Code: "azj"}, + {LanguageID: 434, Symbol: "TSC", EnglishName: "Torres Strait Creole", VernacularName: "Tores Streit Kriol", IsoName: "Torres Strait Creole", IsoAlpha2Code: " ", IsoAlpha3Code: "tcs"}, + {LanguageID: 435, Symbol: "ZPI", EnglishName: "Zapotec (Isthmus)", VernacularName: "diidxazá", IsoName: "Isthmus Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zai"}, + {LanguageID: 436, Symbol: "ZPX", EnglishName: "Zapotec (Ixtlán)", VernacularName: "Dillexhon", IsoName: "Southeastern Ixtlán Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zpd"}, + {LanguageID: 437, Symbol: "ZPV", EnglishName: "Zapotec (Villa Alta)", VernacularName: "didza xhidza", IsoName: "Yatzachi Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zav"}, + {LanguageID: 438, Symbol: "ELI", EnglishName: "Liberian English", VernacularName: "", IsoName: "Liberian English", IsoAlpha2Code: " ", IsoAlpha3Code: "lir"}, + {LanguageID: 439, Symbol: "BTS", EnglishName: "Betsimisaraka (Northern)", VernacularName: "Betsimisaraka Avaratra", IsoName: "Northern Betsimisaraka Malagasy", IsoAlpha2Code: " ", IsoAlpha3Code: "bmm"}, + {LanguageID: 440, Symbol: "TTP", EnglishName: "Tetun Dili", VernacularName: "Tetun Dili", IsoName: "Tetun Dili", IsoAlpha2Code: " ", IsoAlpha3Code: "tdt"}, + {LanguageID: 441, Symbol: "MRB", EnglishName: "Marba", VernacularName: "", IsoName: "Marba", IsoAlpha2Code: " ", IsoAlpha3Code: "mpg"}, + {LanguageID: 442, Symbol: "CHL", EnglishName: "Chol", VernacularName: "ch'ol", IsoName: "Chol", IsoAlpha2Code: " ", IsoAlpha3Code: "ctu"}, + {LanguageID: 443, Symbol: "NHT", EnglishName: "Nahuatl (Northern Puebla)", VernacularName: "náhuatl del norte de Puebla", IsoName: "Northern Puebla Nahuatl", IsoAlpha2Code: " ", IsoAlpha3Code: "ncj"}, + {LanguageID: 444, Symbol: "POK", EnglishName: "Pokot", VernacularName: "", IsoName: "Pökoot", IsoAlpha2Code: " ", IsoAlpha3Code: "pko"}, + {LanguageID: 445, Symbol: "TRH", EnglishName: "Tarahumara (Central)", VernacularName: "ralámuli", IsoName: "Central Tarahumara", IsoAlpha2Code: " ", IsoAlpha3Code: "tar"}, + {LanguageID: 446, Symbol: "TRS", EnglishName: "Tarascan", VernacularName: "Purépecha", IsoName: "Purepecha", IsoAlpha2Code: " ", IsoAlpha3Code: "tsz"}, + {LanguageID: 447, Symbol: "MBK", EnglishName: "Mbukushu", VernacularName: "Thimbukushu", IsoName: "Mbukushu", IsoAlpha2Code: " ", IsoAlpha3Code: "mhw"}, + {LanguageID: 448, Symbol: "IGE", EnglishName: "Igede", VernacularName: "Igede", IsoName: "Igede", IsoAlpha2Code: " ", IsoAlpha3Code: "ige"}, + {LanguageID: 449, Symbol: "QUA", EnglishName: "Quechua (Ayacucho)", VernacularName: "Quechua (Ayacucho)", IsoName: "Ayacucho Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "quy"}, + {LanguageID: 450, Symbol: "LSA", EnglishName: "Argentinean Sign Language", VernacularName: "lengua de señas argentina", IsoName: "Argentine Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "aed"}, + {LanguageID: 451, Symbol: "AUS", EnglishName: "Australian Sign Language", VernacularName: "Auslan (Australian Sign Language)", IsoName: "Australian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "asf"}, + {LanguageID: 452, Symbol: "LSB", EnglishName: "Brazilian Sign Language", VernacularName: "Língua brasileira de sinais", IsoName: "Brazilian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "bzs"}, + {LanguageID: 453, Symbol: "BSL", EnglishName: "British Sign Language", VernacularName: "British Sign Language", IsoName: "British Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "bfi"}, + {LanguageID: 454, Symbol: "SCH", EnglishName: "Chilean Sign Language", VernacularName: "lengua de señas chilena", IsoName: "Chilean Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "csg"}, + {LanguageID: 455, Symbol: "LSC", EnglishName: "Colombian Sign Language", VernacularName: "lengua de señas colombiana", IsoName: "Colombian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "csn"}, + {LanguageID: 456, Symbol: "CSE", EnglishName: "Czech Sign Language", VernacularName: "český znakový jazyk", IsoName: "Czech Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "cse"}, + {LanguageID: 457, Symbol: "DSL", EnglishName: "Danish Sign Language", VernacularName: "Dansk tegnsprog", IsoName: "Danish Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "dsl"}, + {LanguageID: 458, Symbol: "NGT", EnglishName: "Dutch Sign Language", VernacularName: "Nederlandse Gebarentaal", IsoName: "Dutch Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "dse"}, + {LanguageID: 459, Symbol: "SEC", EnglishName: "Ecuadorian Sign Language", VernacularName: "lengua de señas ecuatoriana", IsoName: "Ecuadorian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ecs"}, + {LanguageID: 460, Symbol: "STD", EnglishName: "Estonian Sign Language", VernacularName: "eesti viipekeel", IsoName: "Estonian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "eso"}, + {LanguageID: 461, Symbol: "FID", EnglishName: "Finnish Sign Language", VernacularName: "suomalainen viittomakieli", IsoName: "Finnish Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "fse"}, + {LanguageID: 462, Symbol: "LSF", EnglishName: "French Sign Language", VernacularName: "Langue des signes française", IsoName: "French Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "fsl"}, + {LanguageID: 463, Symbol: "DGS", EnglishName: "German Sign Language", VernacularName: "Deutsche Gebärdensprache", IsoName: "German Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "gsg"}, + {LanguageID: 464, Symbol: "HDF", EnglishName: "Hungarian Sign Language", VernacularName: "magyar jelnyelv", IsoName: "Hungarian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "hsh"}, + {LanguageID: 465, Symbol: "ISL", EnglishName: "Italian Sign Language", VernacularName: "Lingua dei segni italiana", IsoName: "Italian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ise"}, + {LanguageID: 466, Symbol: "JSL", EnglishName: "Japanese Sign Language", VernacularName: "日本手話", IsoName: "Japanese Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "jsl"}, + {LanguageID: 467, Symbol: "KSL", EnglishName: "Korean Sign Language", VernacularName: "한국 수화", IsoName: "Korean Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "kvk"}, + {LanguageID: 468, Symbol: "LSM", EnglishName: "Mexican Sign Language", VernacularName: "lengua de señas mexicana", IsoName: "Mexican Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "mfs"}, + {LanguageID: 469, Symbol: "NDF", EnglishName: "Norwegian Sign Language", VernacularName: "Norsk tegnspråk", IsoName: "Norwegian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "nsl"}, + {LanguageID: 470, Symbol: "LSP", EnglishName: "Paraguayan Sign Language", VernacularName: "lengua de señas paraguaya", IsoName: "Paraguayan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "pys"}, + {LanguageID: 471, Symbol: "SPE", EnglishName: "Peruvian Sign Language", VernacularName: "lenguaje de señas peruano", IsoName: "Peruvian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "prl"}, + {LanguageID: 472, Symbol: "PDF", EnglishName: "Polish Sign Language", VernacularName: "polski język migowy", IsoName: "Polish Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "pso"}, + {LanguageID: 473, Symbol: "LSQ", EnglishName: "Quebec Sign Language", VernacularName: "Langue des signes québécoise", IsoName: "Quebec Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "fcs"}, + {LanguageID: 474, Symbol: "RSL", EnglishName: "Russian Sign Language", VernacularName: "русский жестовый", IsoName: "Russian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "rsl"}, + {LanguageID: 475, Symbol: "LSE", EnglishName: "Spanish Sign Language", VernacularName: "lengua de signos española", IsoName: "Spanish Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ssp"}, + {LanguageID: 476, Symbol: "LSV", EnglishName: "Venezuelan Sign Language", VernacularName: "lengua de señas venezolana", IsoName: "Venezuelan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "vsl"}, + {LanguageID: 477, Symbol: "PH", EnglishName: "Pashto", VernacularName: "پښتو", IsoName: "Pushto", IsoAlpha2Code: "ps", IsoAlpha3Code: "pus"}, + {LanguageID: 478, Symbol: "MWI", EnglishName: "Mentawai", VernacularName: "Mentawai", IsoName: "Mentawai", IsoAlpha2Code: " ", IsoAlpha3Code: "mwv"}, + {LanguageID: 479, Symbol: "LX", EnglishName: "Luxembourgish", VernacularName: "Lëtzebuergesch", IsoName: "Luxembourgish", IsoAlpha2Code: "lb", IsoAlpha3Code: "ltz"}, + {LanguageID: 480, Symbol: "MDI", EnglishName: "Madi", VernacularName: "Madi", IsoName: "Ma'di", IsoAlpha2Code: " ", IsoAlpha3Code: "mhi"}, + {LanguageID: 481, Symbol: "LSN", EnglishName: "Nicaraguan Sign Language", VernacularName: "lenguaje de señas nicaragüense", IsoName: "Nicaraguan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ncs"}, + {LanguageID: 482, Symbol: "RMS", EnglishName: "Romany (Eastern Slovakia)", VernacularName: "romanes (vichodoslovensko)", IsoName: "Carpathian Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmc"}, + {LanguageID: 483, Symbol: "RMO", EnglishName: "Romany (Olah)", VernacularName: "", IsoName: "Carpathian Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmc"}, + {LanguageID: 484, Symbol: "NHG", EnglishName: "Nahuatl (Guerrero)", VernacularName: "náhuatl de guerrero", IsoName: "Guerrero Nahuatl", IsoAlpha2Code: " ", IsoAlpha3Code: "ngu"}, + {LanguageID: 485, Symbol: "TLN", EnglishName: "Tlapanec", VernacularName: "me̱ʼpha̱a̱", IsoName: "Malinaltepec Me'phaa", IsoAlpha2Code: " ", IsoAlpha3Code: "tcf"}, + {LanguageID: 486, Symbol: "NDA", EnglishName: "Ndau", VernacularName: "Cindau", IsoName: "Ndau", IsoAlpha2Code: " ", IsoAlpha3Code: "ndc"}, + {LanguageID: 487, Symbol: "DGR", EnglishName: "Digor", VernacularName: "дигорон", IsoName: "Ossetian", IsoAlpha2Code: "os", IsoAlpha3Code: "oss"}, + {LanguageID: 488, Symbol: "TZU", EnglishName: "Tzutujil", VernacularName: "tzʼutujil", IsoName: "Tz'utujil", IsoAlpha2Code: " ", IsoAlpha3Code: "tzj"}, + {LanguageID: 489, Symbol: "BLF", EnglishName: "Blackfoot", VernacularName: "Siksikáíitsi'powahsini", IsoName: "Siksika", IsoAlpha2Code: " ", IsoAlpha3Code: "bla"}, + {LanguageID: 490, Symbol: "GSL", EnglishName: "Greek Sign Language", VernacularName: "Ελληνική Νοηματική Γλώσσα", IsoName: "Greek Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "gss"}, + {LanguageID: 491, Symbol: "NOR", EnglishName: "Northern Ojibwe (Roman)", VernacularName: "Anishinaabemowin", IsoName: "Northwestern Ojibwa", IsoAlpha2Code: " ", IsoAlpha3Code: "ojb"}, + {LanguageID: 492, Symbol: "NOS", EnglishName: "Northern Ojibwe (Syllabics)", VernacularName: "ᐊᓂᔑᓈᐯᒧᐎᓐ", IsoName: "Northwestern Ojibwa", IsoAlpha2Code: " ", IsoAlpha3Code: "ojb"}, + {LanguageID: 493, Symbol: "LJ", EnglishName: "Lenje", VernacularName: "Cilenje", IsoName: "Lenje", IsoAlpha2Code: " ", IsoAlpha3Code: "leh"}, + {LanguageID: 494, Symbol: "QUN", EnglishName: "Quechua (Ancash)", VernacularName: "Quechua (Ancash)", IsoName: "Huaylas Ancash Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "qwh"}, + {LanguageID: 495, Symbol: "OC", EnglishName: "Cree Omushkego (Roman)", VernacularName: "", IsoName: "Moose Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crm"}, + {LanguageID: 496, Symbol: "QSL", EnglishName: "Israeli Sign Language", VernacularName: "שפת סימנים ישראלית", IsoName: "Israeli Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "isr"}, + {LanguageID: 497, Symbol: "NAG", EnglishName: "Naga", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 498, Symbol: "RWG", EnglishName: "Rawang", VernacularName: "", IsoName: "Rawang", IsoAlpha2Code: " ", IsoAlpha3Code: "raw"}, + {LanguageID: 499, Symbol: "AKA", EnglishName: "Akha", VernacularName: "Akha", IsoName: "Akha", IsoAlpha2Code: " ", IsoAlpha3Code: "ahk"}, + {LanguageID: 500, Symbol: "FLM", EnglishName: "Chin (Falam)", VernacularName: "Chin (Falam)", IsoName: "Falam Chin", IsoAlpha2Code: " ", IsoAlpha3Code: "cfm"}, + {LanguageID: 501, Symbol: "KYH", EnglishName: "Kayah", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 502, Symbol: "MON", EnglishName: "Mon", VernacularName: "", IsoName: "Mon", IsoAlpha2Code: " ", IsoAlpha3Code: "mnw"}, + {LanguageID: 503, Symbol: "SNG", EnglishName: "Chin (Senthang)", VernacularName: "", IsoName: "Senthang Chin", IsoAlpha2Code: " ", IsoAlpha3Code: "sez"}, + {LanguageID: 504, Symbol: "WAM", EnglishName: "Wa", VernacularName: "Vax", IsoName: "Parauk", IsoAlpha2Code: " ", IsoAlpha3Code: "prk"}, + {LanguageID: 505, Symbol: "XV", EnglishName: "Xavante", VernacularName: "A'uwẽ mreme", IsoName: "Xavánte", IsoAlpha2Code: " ", IsoAlpha3Code: "xav"}, + {LanguageID: 506, Symbol: "TSL", EnglishName: "Taiwanese Sign Language", VernacularName: "台灣手語", IsoName: "Taiwan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "tss"}, + {LanguageID: 507, Symbol: "VSL", EnglishName: "Slovak Sign Language", VernacularName: "slovenský posunkový jazyk", IsoName: "Slovakian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "svk"}, + {LanguageID: 508, Symbol: "BSN", EnglishName: "Bosnian", VernacularName: "bosanski", IsoName: "Bosnian", IsoAlpha2Code: "bs", IsoAlpha3Code: "bos"}, + {LanguageID: 509, Symbol: "ZSL", EnglishName: "Zimbabwe Sign Language", VernacularName: "Zimbabwe Sign Language", IsoName: "Zimbabwe Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "zib"}, + {LanguageID: 510, Symbol: "LSL", EnglishName: "Latvian Sign Language", VernacularName: "latviešu zīmju valoda", IsoName: "Latvian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "lsl"}, + {LanguageID: 511, Symbol: "AGC", EnglishName: "Aguacatec", VernacularName: "", IsoName: "Aguacateco", IsoAlpha2Code: " ", IsoAlpha3Code: "agu"}, + {LanguageID: 512, Symbol: "AMZ", EnglishName: "Amuzgo", VernacularName: "", IsoName: "San Pedro Amuzgos Amuzgo", IsoAlpha2Code: " ", IsoAlpha3Code: "azg"}, + {LanguageID: 513, Symbol: "CCM", EnglishName: "Cochimi", VernacularName: "", IsoName: "Cochimi", IsoAlpha2Code: " ", IsoAlpha3Code: "coj"}, + {LanguageID: 514, Symbol: "CCP", EnglishName: "Cocopa", VernacularName: "", IsoName: "Cocopa", IsoAlpha2Code: " ", IsoAlpha3Code: "coc"}, + {LanguageID: 515, Symbol: "CCT", EnglishName: "Cuicatec", VernacularName: "", IsoName: "Tepeuxila Cuicatec", IsoAlpha2Code: " ", IsoAlpha3Code: "cux"}, + {LanguageID: 516, Symbol: "CHJ", EnglishName: "Chuj", VernacularName: "chuj", IsoName: "Chuj", IsoAlpha2Code: " ", IsoAlpha3Code: "cac"}, + {LanguageID: 517, Symbol: "CHO", EnglishName: "Chocho", VernacularName: "", IsoName: "Chochotec", IsoAlpha2Code: " ", IsoAlpha3Code: "coz"}, + {LanguageID: 518, Symbol: "CHT", EnglishName: "Chatino", VernacularName: "", IsoName: "Western Highland Chatino", IsoAlpha2Code: " ", IsoAlpha3Code: "ctp"}, + {LanguageID: 519, Symbol: "CLT", EnglishName: "Chontal (Tabasco)", VernacularName: "yokotʼan", IsoName: "Tabasco Chontal", IsoAlpha2Code: " ", IsoAlpha3Code: "chf"}, + {LanguageID: 520, Symbol: "CLX", EnglishName: "Chontal (Oaxaca)", VernacularName: "lataiki", IsoName: "Highland Oaxaca Chontal", IsoAlpha2Code: " ", IsoAlpha3Code: "chd"}, + {LanguageID: 521, Symbol: "CMC", EnglishName: "Chichimec", VernacularName: "", IsoName: "Chichimeca-Jonaz", IsoAlpha2Code: " ", IsoAlpha3Code: "pei"}, + {LanguageID: 522, Symbol: "CNT", EnglishName: "Chinantec", VernacularName: "", IsoName: "Tepinapa Chinantec", IsoAlpha2Code: " ", IsoAlpha3Code: "cte"}, + {LanguageID: 523, Symbol: "COR", EnglishName: "Cora (El Nayar)", VernacularName: "", IsoName: "El Nayar Cora", IsoAlpha2Code: " ", IsoAlpha3Code: "crn"}, + {LanguageID: 524, Symbol: "GRJ", EnglishName: "Guarijío", VernacularName: "", IsoName: "Huarijio", IsoAlpha2Code: " ", IsoAlpha3Code: "var"}, + {LanguageID: 525, Symbol: "HCH", EnglishName: "Wixárika", VernacularName: "wixárika", IsoName: "Huichol", IsoAlpha2Code: " ", IsoAlpha3Code: "hch"}, + {LanguageID: 526, Symbol: "HST", EnglishName: "Huastec (San Luis Potosi)", VernacularName: "tének", IsoName: "Huastec", IsoAlpha2Code: " ", IsoAlpha3Code: "hus"}, + {LanguageID: 527, Symbol: "IXC", EnglishName: "Ixcatec", VernacularName: "", IsoName: "Ixcatec", IsoAlpha2Code: " ", IsoAlpha3Code: "ixc"}, + {LanguageID: 528, Symbol: "IXL", EnglishName: "Ixil", VernacularName: "ixil", IsoName: "Ixil", IsoAlpha2Code: " ", IsoAlpha3Code: "ixl"}, + {LanguageID: 529, Symbol: "JCL", EnglishName: "Jacaltec", VernacularName: "", IsoName: "Popti'", IsoAlpha2Code: " ", IsoAlpha3Code: "jac"}, + {LanguageID: 530, Symbol: "KAI", EnglishName: "Kamia", VernacularName: "", IsoName: "Kumiai", IsoAlpha2Code: " ", IsoAlpha3Code: "dih"}, + {LanguageID: 531, Symbol: "KKP", EnglishName: "Kickapoo", VernacularName: "", IsoName: "Kickapoo", IsoAlpha2Code: " ", IsoAlpha3Code: "kic"}, + {LanguageID: 532, Symbol: "KLW", EnglishName: "Kiliwa", VernacularName: "", IsoName: "Kiliwa", IsoAlpha2Code: " ", IsoAlpha3Code: "klb"}, + {LanguageID: 533, Symbol: "LCN", EnglishName: "Lacandon", VernacularName: "", IsoName: "Lacandon", IsoAlpha2Code: " ", IsoAlpha3Code: "lac"}, + {LanguageID: 534, Symbol: "MTL", EnglishName: "Matlatzinca", VernacularName: "", IsoName: "San Francisco Matlatzinca", IsoAlpha2Code: " ", IsoAlpha3Code: "mat"}, + {LanguageID: 535, Symbol: "MTZ", EnglishName: "Motozintlec", VernacularName: "", IsoName: "Mocho", IsoAlpha2Code: " ", IsoAlpha3Code: "mhc"}, + {LanguageID: 536, Symbol: "MXG", EnglishName: "Mixtec (Guerrero)", VernacularName: "tu’un sâví", IsoName: "Metlatónoc Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "mxv"}, + {LanguageID: 537, Symbol: "MXO", EnglishName: "Mixtec (Huajuapan)", VernacularName: "Tu̱ʼun ndaʼví", IsoName: "Western Juxtlahuaca Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "jmx"}, + {LanguageID: 538, Symbol: "MYO", EnglishName: "Mayo", VernacularName: "yoremnok'ki", IsoName: "Mayo", IsoAlpha2Code: " ", IsoAlpha3Code: "mfy"}, + {LanguageID: 539, Symbol: "MZH", EnglishName: "Mazahua", VernacularName: "jñatrjo", IsoName: "Central Mazahua", IsoAlpha2Code: " ", IsoAlpha3Code: "maz"}, + {LanguageID: 540, Symbol: "NHH", EnglishName: "Nahuatl (Huasteca)", VernacularName: "náhuatl de la huasteca", IsoName: "Central Huasteca Nahuatl", IsoAlpha2Code: " ", IsoAlpha3Code: "nch"}, + {LanguageID: 541, Symbol: "NHV", EnglishName: "Nahuatl (Veracruz)", VernacularName: "náhuatl de Veracruz", IsoName: "Isthmus-Cosoleacaque Nahuatl", IsoAlpha2Code: " ", IsoAlpha3Code: "nhk"}, + {LanguageID: 542, Symbol: "OCL", EnglishName: "Ocuiltec", VernacularName: "", IsoName: "Atzingo Matlatzinca", IsoAlpha2Code: " ", IsoAlpha3Code: "ocu"}, + {LanguageID: 543, Symbol: "OTM", EnglishName: "Otomi (Mezquital Valley)", VernacularName: "Ñañu", IsoName: "Mezquital Otomi", IsoAlpha2Code: " ", IsoAlpha3Code: "ote"}, + {LanguageID: 544, Symbol: "PAI", EnglishName: "Paipai", VernacularName: "", IsoName: "Paipai", IsoAlpha2Code: " ", IsoAlpha3Code: "ppi"}, + {LanguageID: 545, Symbol: "PAM", EnglishName: "Pame (South)", VernacularName: "", IsoName: "Southern Pame", IsoAlpha2Code: " ", IsoAlpha3Code: "pmz"}, + {LanguageID: 546, Symbol: "PIM", EnglishName: "Pima", VernacularName: "", IsoName: "Pima Bajo", IsoAlpha2Code: " ", IsoAlpha3Code: "pia"}, + {LanguageID: 547, Symbol: "PPG", EnglishName: "O'odham (Tohono) ", VernacularName: "", IsoName: "Tohono O'odham", IsoAlpha2Code: " ", IsoAlpha3Code: "ood"}, + {LanguageID: 548, Symbol: "NGM", EnglishName: "Ngigua (San Marcos Tlacoyalco)", VernacularName: "ngigua de San Marcos Tlacoyalco", IsoName: "San Marcos Tlalcoyalco Popoloca", IsoAlpha2Code: " ", IsoAlpha3Code: "pls"}, + {LanguageID: 549, Symbol: "PPU", EnglishName: "Popoluca (Highland)", VernacularName: "popoluca de la Sierra", IsoName: "Highland Popoluca", IsoAlpha2Code: " ", IsoAlpha3Code: "poi"}, + {LanguageID: 550, Symbol: "SER", EnglishName: "Seri", VernacularName: "", IsoName: "Seri", IsoAlpha2Code: " ", IsoAlpha3Code: "sei"}, + {LanguageID: 551, Symbol: "TEC", EnglishName: "Teco", VernacularName: "", IsoName: "Tektiteko", IsoAlpha2Code: " ", IsoAlpha3Code: "ttc"}, + {LanguageID: 552, Symbol: "TP", EnglishName: "Tepehua (Tlachichilco)", VernacularName: "", IsoName: "Tlachichilco Tepehua", IsoAlpha2Code: " ", IsoAlpha3Code: "tpt"}, + {LanguageID: 553, Symbol: "TPN", EnglishName: "Tepehuan (Southeastern)", VernacularName: "", IsoName: "Southwestern Tepehuan", IsoAlpha2Code: " ", IsoAlpha3Code: "tla"}, + {LanguageID: 554, Symbol: "TQ", EnglishName: "Trique", VernacularName: "", IsoName: "San Martín Itunyoso Triqui", IsoAlpha2Code: " ", IsoAlpha3Code: "trq"}, + {LanguageID: 555, Symbol: "YQ", EnglishName: "Yaqui", VernacularName: "jiiak noki", IsoName: "Yaqui", IsoAlpha2Code: " ", IsoAlpha3Code: "yaq"}, + {LanguageID: 556, Symbol: "ZQ", EnglishName: "Zoque", VernacularName: "", IsoName: "Copainalá Zoque", IsoAlpha2Code: " ", IsoAlpha3Code: "zoc"}, + {LanguageID: 557, Symbol: "PSL", EnglishName: "Panamanian Sign Language", VernacularName: "lenguaje de señas panameño", IsoName: "Panamanian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "lsp"}, + {LanguageID: 558, Symbol: "BEA", EnglishName: "Beas", VernacularName: "", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 559, Symbol: "LL", EnglishName: "Lele", VernacularName: "Lele", IsoName: "Lele (Chad)", IsoAlpha2Code: " ", IsoAlpha3Code: "lln"}, + {LanguageID: 560, Symbol: "LVA", EnglishName: "Romany (Lovari, Hungary)", VernacularName: "romani (lovári, Ungriko Them)", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 561, Symbol: "MSR", EnglishName: "Mongolian Sign Language", VernacularName: "монгол дохионы хэл", IsoName: "Mongolian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "msr"}, + {LanguageID: 562, Symbol: "OKP", EnglishName: "Okpe", VernacularName: "Okpe", IsoName: "Okpe (Southwestern Edo)", IsoAlpha2Code: " ", IsoAlpha3Code: "oke"}, + {LanguageID: 563, Symbol: "KUR", EnglishName: "Kuria", VernacularName: "", IsoName: "Kuria", IsoAlpha2Code: " ", IsoAlpha3Code: "kuj"}, + {LanguageID: 564, Symbol: "SHU", EnglishName: "Shuar", VernacularName: "shuar", IsoName: "Shuar", IsoAlpha2Code: " ", IsoAlpha3Code: "jiv"}, + {LanguageID: 565, Symbol: "AGR", EnglishName: "Awajun", VernacularName: "awajun", IsoName: "Aguaruna", IsoAlpha2Code: " ", IsoAlpha3Code: "agr"}, + {LanguageID: 566, Symbol: "SCR", EnglishName: "Costa Rican Sign Language", VernacularName: "lengua de señas costarricense", IsoName: "Costa Rican Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "csr"}, + {LanguageID: 567, Symbol: "GMP", EnglishName: "Guaymi (Pacific)", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 568, Symbol: "KLK", EnglishName: "Kalmyk", VernacularName: "хальмг", IsoName: "Kalmyk", IsoAlpha2Code: " ", IsoAlpha3Code: "xal"}, + {LanguageID: 569, Symbol: "KSI", EnglishName: "Kenyan Sign Language", VernacularName: "Kenyan Sign Language", IsoName: "Kenyan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "xki"}, + {LanguageID: 570, Symbol: "ZPD", EnglishName: "Zapotec (del Valle)", VernacularName: "ditsa", IsoName: "San Juan Guelavía Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zab"}, + {LanguageID: 571, Symbol: "ZPG", EnglishName: "Zapotec (Guevea)", VernacularName: "dîdzrie’", IsoName: "Guevea De Humboldt Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zpg"}, + {LanguageID: 572, Symbol: "ZPL", EnglishName: "Zapotec (Lachiguiri)", VernacularName: "diitza", IsoName: "Lachiguiri Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zpa"}, + {LanguageID: 573, Symbol: "ZPM", EnglishName: "Zapotec (Loxicha)", VernacularName: "diʼste Loxich", IsoName: "Loxicha Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "ztp"}, + {LanguageID: 574, Symbol: "ZPT", EnglishName: "Zapotec (Quiatoni)", VernacularName: "zapoteco de Quiatoni", IsoName: "San Pedro Quiatoni Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zpf"}, + {LanguageID: 575, Symbol: "ZPC", EnglishName: "Zapotec (Quiavicuzas)", VernacularName: "ditz zea", IsoName: "Quiavicuzas Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zpj"}, + {LanguageID: 576, Symbol: "DRG", EnglishName: "Dargwa", VernacularName: "дарган", IsoName: "Dargwa", IsoAlpha2Code: " ", IsoAlpha3Code: "dar"}, + {LanguageID: 577, Symbol: "ISG", EnglishName: "Irish Sign Language", VernacularName: "Irish Sign Language", IsoName: "Irish Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "isg"}, + {LanguageID: 578, Symbol: "KMK", EnglishName: "Kumyk", VernacularName: "къумукъ", IsoName: "Kumyk", IsoAlpha2Code: " ", IsoAlpha3Code: "kum"}, + {LanguageID: 579, Symbol: "LAK", EnglishName: "Lak", VernacularName: "лакку", IsoName: "Lak", IsoAlpha2Code: " ", IsoAlpha3Code: "lbe"}, + {LanguageID: 580, Symbol: "LGP", EnglishName: "Portuguese Sign Language", VernacularName: "Língua Gestual Portuguesa", IsoName: "Portuguese Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "psr"}, + {LanguageID: 581, Symbol: "LUC", EnglishName: "Saint Lucian Creole", VernacularName: "Kwéyòl (Patwa)", IsoName: "Saint Lucian Creole French", IsoAlpha2Code: " ", IsoAlpha3Code: "acf"}, + {LanguageID: 582, Symbol: "TBN", EnglishName: "Tabasaran", VernacularName: "табасаран", IsoName: "Tabassaran", IsoAlpha2Code: " ", IsoAlpha3Code: "tab"}, + {LanguageID: 583, Symbol: "TWK", EnglishName: "Twi (Akuapem)", VernacularName: "", IsoName: "Twi", IsoAlpha2Code: "tw", IsoAlpha3Code: "twi"}, + {LanguageID: 584, Symbol: "TWS", EnglishName: "Twi (Asante)", VernacularName: "", IsoName: "Twi", IsoAlpha2Code: "tw", IsoAlpha3Code: "twi"}, + {LanguageID: 585, Symbol: "UZR", EnglishName: "Uzbek (Roman)", VernacularName: "o‘zbekcha (lotincha)", IsoName: "Uzbek", IsoAlpha2Code: "uz", IsoAlpha3Code: "uzb"}, + {LanguageID: 586, Symbol: "MOU", EnglishName: "Moussey", VernacularName: "", IsoName: "Musey", IsoAlpha2Code: " ", IsoAlpha3Code: "mse"}, + {LanguageID: 587, Symbol: "NNG", EnglishName: "Nangjere", VernacularName: "", IsoName: "Nancere", IsoAlpha2Code: " ", IsoAlpha3Code: "nnc"}, + {LanguageID: 588, Symbol: "SSL", EnglishName: "Swedish Sign Language", VernacularName: "Svenskt teckenspråk", IsoName: "Swedish Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "swl"}, + {LanguageID: 589, Symbol: "LTS", EnglishName: "Lithuanian Sign Language", VernacularName: "lietuvių gestų", IsoName: "Lithuanian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "lls"}, + {LanguageID: 590, Symbol: "CMG", EnglishName: "Comorian (Ngazidja)", VernacularName: "Shikomori (Ngazidja)", IsoName: "Ngazidja Comorian", IsoAlpha2Code: " ", IsoAlpha3Code: "zdj"}, + {LanguageID: 591, Symbol: "SNK", EnglishName: "Soninke", VernacularName: "", IsoName: "Soninke", IsoAlpha2Code: " ", IsoAlpha3Code: "snk"}, + {LanguageID: 592, Symbol: "SAS", EnglishName: "South African Sign Language", VernacularName: "South African Sign Language", IsoName: "South African Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "sfs"}, + {LanguageID: 593, Symbol: "UGA", EnglishName: "Uighur (Arabic)", VernacularName: "ئۇيغۇر تىلى \u200f(\u200fئەرەب يېزىقى\u200f)\u200f\u200f\u200f\u200f", IsoName: "Uighur", IsoAlpha2Code: "ug", IsoAlpha3Code: "uig"}, + {LanguageID: 594, Symbol: "GRF", EnglishName: "Garifuna", VernacularName: "Garifuna", IsoName: "Garifuna", IsoAlpha2Code: " ", IsoAlpha3Code: "cab"}, + {LanguageID: 595, Symbol: "LWX", EnglishName: "Low German", VernacularName: "Plautdietsch", IsoName: "Plautdietsch", IsoAlpha2Code: " ", IsoAlpha3Code: "pdt"}, + {LanguageID: 596, Symbol: "MYG", EnglishName: "Mayangna", VernacularName: "mayangna", IsoName: "Mayangna", IsoAlpha2Code: " ", IsoAlpha3Code: "yan"}, + {LanguageID: 597, Symbol: "GZR", EnglishName: "Gagauz (Roman)", VernacularName: "gagauz (latin)", IsoName: "Gagauz", IsoAlpha2Code: " ", IsoAlpha3Code: "gag"}, + {LanguageID: 598, Symbol: "WC", EnglishName: "Cree Woods (Roman)", VernacularName: "Nîhithawîwin", IsoName: "Woods Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "cwd"}, + {LanguageID: 599, Symbol: "JU", EnglishName: "Arabic (Sudanese Creole)", VernacularName: "Arabi Juba", IsoName: "Sudanese Creole Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "pga"}, + {LanguageID: 600, Symbol: "SRM", EnglishName: "Saramaccan", VernacularName: "Saamakatöngö", IsoName: "Saramaccan", IsoAlpha2Code: " ", IsoAlpha3Code: "srm"}, + {LanguageID: 601, Symbol: "GIB", EnglishName: "Guarani (Bolivia)", VernacularName: "Guaraní boliviano", IsoName: "Eastern Bolivian Guaraní", IsoAlpha2Code: " ", IsoAlpha3Code: "gui"}, + {LanguageID: 602, Symbol: "INI", EnglishName: "Indonesian Sign Language", VernacularName: "Bahasa Isyarat Indonesia", IsoName: "Indonesian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "inl"}, + {LanguageID: 603, Symbol: "SSU", EnglishName: "Suriname Sign Language", VernacularName: "Surinaamse Gebarentaal", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 604, Symbol: "NZS", EnglishName: "New Zealand Sign Language", VernacularName: "New Zealand Sign Language", IsoName: "New Zealand Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "nzs"}, + {LanguageID: 605, Symbol: "BVL", EnglishName: "Bolivian Sign Language", VernacularName: "lengua de señas boliviana", IsoName: "Bolivian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "bvl"}, + {LanguageID: 606, Symbol: "BRI", EnglishName: "Bribri", VernacularName: "bribri", IsoName: "Bribri", IsoAlpha2Code: " ", IsoAlpha3Code: "bzd"}, + {LanguageID: 607, Symbol: "CRB", EnglishName: "Carib", VernacularName: "Kariʼnia", IsoName: "Galibi Carib", IsoAlpha2Code: " ", IsoAlpha3Code: "car"}, + {LanguageID: 608, Symbol: "NBL", EnglishName: "Ndebele", VernacularName: "IsiNdebele", IsoName: "South Ndebele", IsoAlpha2Code: "nr", IsoAlpha3Code: "nbl"}, + {LanguageID: 609, Symbol: "NHC", EnglishName: "Nahuatl (Central)", VernacularName: "náhuatl del centro", IsoName: "Central Puebla Nahuatl", IsoAlpha2Code: " ", IsoAlpha3Code: "ncx"}, + {LanguageID: 610, Symbol: "SWI", EnglishName: "Swati", VernacularName: "SiSwati", IsoName: "Swati", IsoAlpha2Code: "ss", IsoAlpha3Code: "ssw"}, + {LanguageID: 611, Symbol: "CTC", EnglishName: "Crimean Tatar (Cyrillic)", VernacularName: "къырымтатар (кирилл)", IsoName: "Crimean Tatar", IsoAlpha2Code: " ", IsoAlpha3Code: "crh"}, + {LanguageID: 612, Symbol: "CTR", EnglishName: "Crimean Tatar", VernacularName: "", IsoName: "Crimean Tatar", IsoAlpha2Code: " ", IsoAlpha3Code: "crh"}, + {LanguageID: 613, Symbol: "OCS", EnglishName: "Cree Omushkego (Syllabics)", VernacularName: "", IsoName: "Moose Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crm"}, + {LanguageID: 614, Symbol: "KUA", EnglishName: "Kuanua", VernacularName: "Tinata Tuna", IsoName: "Kuanua", IsoAlpha2Code: " ", IsoAlpha3Code: "ksd"}, + {LanguageID: 615, Symbol: "BLS", EnglishName: "Bulgarian Sign Language", VernacularName: "български жестомимичен език", IsoName: "Bulgarian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "bqn"}, + {LanguageID: 616, Symbol: "SBS", EnglishName: "Serbian Sign Language", VernacularName: "српски знаковни језик", IsoName: "Yugoslavian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ysl"}, + {LanguageID: 617, Symbol: "WCS", EnglishName: "Cree Woods (Syllabics)", VernacularName: "ᓀᐦᐃᖬᐁᐧᐃᐧᐣ", IsoName: "Woods Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "cwd"}, + {LanguageID: 618, Symbol: "CYS", EnglishName: "Cree Plains (Syllabics)", VernacularName: "ᓀᐦᐃᔭᐁᐧᐃᐧᐣ", IsoName: "Plains Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crk"}, + {LanguageID: 619, Symbol: "CSL", EnglishName: "Chinese Sign Language", VernacularName: "中国手语", IsoName: "Chinese Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "csl"}, + {LanguageID: 620, Symbol: "NGL", EnglishName: "Ngangela", VernacularName: "Ngangela", IsoName: "Nyemba", IsoAlpha2Code: " ", IsoAlpha3Code: "nba"}, + {LanguageID: 621, Symbol: "PTJ", EnglishName: "Pitjantjatjara", VernacularName: "Pitjantjatjara", IsoName: "Pitjantjatjara", IsoAlpha2Code: " ", IsoAlpha3Code: "pjt"}, + {LanguageID: 622, Symbol: "SGS", EnglishName: "Swiss German Sign Language", VernacularName: "Deutschschweizer Gebärdensprache", IsoName: "Swiss-German Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "sgg"}, + {LanguageID: 623, Symbol: "SBF", EnglishName: "Belgian French Sign Language", VernacularName: "Langue des signes belge francophone", IsoName: "Langue des signes de Belgique Francophone", IsoAlpha2Code: " ", IsoAlpha3Code: "sfb"}, + {LanguageID: 624, Symbol: "CEC", EnglishName: "Central American English Creole", VernacularName: "", IsoName: "Nicaragua Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "bzk"}, + {LanguageID: 625, Symbol: "VGT", EnglishName: "Flemish Sign Language", VernacularName: "Vlaamse Gebarentaal", IsoName: "Vlaamse Gebarentaal", IsoAlpha2Code: " ", IsoAlpha3Code: "vgt"}, + {LanguageID: 626, Symbol: "LSG", EnglishName: "Guatemalan Sign Language", VernacularName: "lenguaje de señas guatemalteco", IsoName: "Guatemalan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "gsm"}, + {LanguageID: 627, Symbol: "TTM", EnglishName: "Madagascar Sign Language", VernacularName: "Tenin’ny Tanana Malagasy", IsoName: "Madagascar Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "mzc"}, + {LanguageID: 628, Symbol: "RPN", EnglishName: "Rapa Nui", VernacularName: "rapa nui", IsoName: "Rapanui", IsoAlpha2Code: " ", IsoAlpha3Code: "rap"}, + {LanguageID: 629, Symbol: "SZJ", EnglishName: "Slovenian Sign Language", VernacularName: "slovenski znakovni jezik", IsoName: "Yugoslavian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ysl"}, + {LanguageID: 630, Symbol: "MXC", EnglishName: "Mixtec (Costa)", VernacularName: "saʼan xiñi saví", IsoName: "Pinotepa Nacional Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "mio"}, + {LanguageID: 631, Symbol: "MXN", EnglishName: "Mixtec (Tilantongo)", VernacularName: "ñutnuu", IsoName: "Diuxi-Tilantongo Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "xtd"}, + {LanguageID: 632, Symbol: "MXT", EnglishName: "Mixtec (Tlaxiaco)", VernacularName: "saʼan savi", IsoName: "Southwestern Tlaxiaco Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "meh"}, + {LanguageID: 633, Symbol: "SIL", EnglishName: "Thai Sign Language", VernacularName: "ภาษามือไทย", IsoName: "Thai Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "tsq"}, + {LanguageID: 634, Symbol: "MSL", EnglishName: "Malawi Sign Language", VernacularName: "Chinenero Chamanja cha ku Malawi", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 635, Symbol: "ALQ", EnglishName: "Algonquin", VernacularName: "Anishinàbemowin", IsoName: "Algonquin", IsoAlpha2Code: " ", IsoAlpha3Code: "alq"}, + {LanguageID: 636, Symbol: "JWK", EnglishName: "Jiwaka", VernacularName: "Yuwei", IsoName: "North Wahgi", IsoAlpha2Code: " ", IsoAlpha3Code: "whg"}, + {LanguageID: 637, Symbol: "KMP", EnglishName: "Komi-Permyak", VernacularName: "коми-пермяцкӧй", IsoName: "Komi-Permyak", IsoAlpha2Code: " ", IsoAlpha3Code: "koi"}, + {LanguageID: 638, Symbol: "MLP", EnglishName: "Melpa", VernacularName: "Melpa", IsoName: "Melpa", IsoAlpha2Code: " ", IsoAlpha3Code: "med"}, + {LanguageID: 639, Symbol: "ORK", EnglishName: "Orokaiva", VernacularName: "Orokaiva", IsoName: "Orokaiva", IsoAlpha2Code: " ", IsoAlpha3Code: "okv"}, + {LanguageID: 640, Symbol: "YC", EnglishName: "Cree West Swampy (Roman)", VernacularName: "Ininîmowin", IsoName: "Swampy Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "csw"}, + {LanguageID: 641, Symbol: "YCS", EnglishName: "Cree West Swampy (Syllabics)", VernacularName: "ᐃᓂᓃᒧᐏᐣ", IsoName: "Swampy Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "csw"}, + {LanguageID: 642, Symbol: "FSL", EnglishName: "Filipino Sign Language", VernacularName: "Filipino Sign Language", IsoName: "Philippine Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "psp"}, + {LanguageID: 643, Symbol: "NGB", EnglishName: "Ngabere", VernacularName: "ngäbere", IsoName: "Ngäbere", IsoAlpha2Code: " ", IsoAlpha3Code: "gym"}, + {LanguageID: 644, Symbol: "CBS", EnglishName: "Cuban Sign Language", VernacularName: "lenguaje de señas cubano", IsoName: "Cuba Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "csf"}, + {LanguageID: 645, Symbol: "OGS", EnglishName: "Austrian Sign Language", VernacularName: "Österreichische Gebärdensprache", IsoName: "Austrian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "asq"}, + {LanguageID: 646, Symbol: "CIN", EnglishName: "Cinyanja", VernacularName: "Cinyanja", IsoName: "Nyanja", IsoAlpha2Code: "ny", IsoAlpha3Code: "nya"}, + {LanguageID: 647, Symbol: "CPC", EnglishName: "Curripaco", VernacularName: "Curripaco", IsoName: "Curripaco", IsoAlpha2Code: " ", IsoAlpha3Code: "kpc"}, + {LanguageID: 648, Symbol: "EMB", EnglishName: "Emberá (Catío)", VernacularName: "embera katio", IsoName: "Emberá-Catío", IsoAlpha2Code: " ", IsoAlpha3Code: "cto"}, + {LanguageID: 649, Symbol: "MPD", EnglishName: "Mapudungun", VernacularName: "mapudungun", IsoName: "Mapudungun", IsoAlpha2Code: " ", IsoAlpha3Code: "arn"}, + {LanguageID: 650, Symbol: "WCH", EnglishName: "Wichi", VernacularName: "wichi", IsoName: "Wichí Lhamtés Vejoz", IsoAlpha2Code: " ", IsoAlpha3Code: "wlv"}, + {LanguageID: 651, Symbol: "SSP", EnglishName: "Spanish (Spain)", VernacularName: "español (de España)", IsoName: "Spanish", IsoAlpha2Code: "es", IsoAlpha3Code: "spa"}, + {LanguageID: 652, Symbol: "SHO", EnglishName: "Honduras Sign Language", VernacularName: "lenguaje de señas hondureño", IsoName: "Honduras Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "hds"}, + {LanguageID: 653, Symbol: "KMY", EnglishName: "Kamayo", VernacularName: "Kamayo", IsoName: "Kamayo", IsoAlpha2Code: " ", IsoAlpha3Code: "kyk"}, + {LanguageID: 654, Symbol: "KUM", EnglishName: "Kuman", VernacularName: "Kuman", IsoName: "Kuman", IsoAlpha2Code: " ", IsoAlpha3Code: "kue"}, + {LanguageID: 655, Symbol: "IKN", EnglishName: "Inakeanon", VernacularName: "Inakeanon", IsoName: "Aklanon", IsoAlpha2Code: " ", IsoAlpha3Code: "akl"}, + {LanguageID: 656, Symbol: "KNR", EnglishName: "Kinaray-a", VernacularName: "Kinaray-a", IsoName: "Kinaray-A", IsoAlpha2Code: " ", IsoAlpha3Code: "krj"}, + {LanguageID: 657, Symbol: "UZA", EnglishName: "Uzbek (Arabic)", VernacularName: "", IsoName: "Uzbek", IsoAlpha2Code: "uz", IsoAlpha3Code: "uzb"}, + {LanguageID: 658, Symbol: "NAN", EnglishName: "Nanai", VernacularName: "нанай", IsoName: "Nanai", IsoAlpha2Code: " ", IsoAlpha3Code: "gld"}, + {LanguageID: 659, Symbol: "WLN", EnglishName: "Woleaian", VernacularName: "", IsoName: "Woleaian", IsoAlpha2Code: " ", IsoAlpha3Code: "woe"}, + {LanguageID: 660, Symbol: "ACH", EnglishName: "Achi", VernacularName: "achi", IsoName: "Achi", IsoAlpha2Code: " ", IsoAlpha3Code: "acr"}, + {LanguageID: 661, Symbol: "AZA", EnglishName: "Kazakh (Arabic)", VernacularName: "قازاق ٴتىلى (ارابشا جازۋى)", IsoName: "Kazakh", IsoAlpha2Code: "kk", IsoAlpha3Code: "kaz"}, + {LanguageID: 662, Symbol: "ADH", EnglishName: "Adhola", VernacularName: "Dhopadhola", IsoName: "Adhola", IsoAlpha2Code: " ", IsoAlpha3Code: "adh"}, + {LanguageID: 663, Symbol: "FTL", EnglishName: "Fataluku", VernacularName: "Fataluku", IsoName: "Fataluku", IsoAlpha2Code: " ", IsoAlpha3Code: "ddg"}, + {LanguageID: 664, Symbol: "MKS", EnglishName: "Makasae", VernacularName: "Makasae", IsoName: "Makasae", IsoAlpha2Code: " ", IsoAlpha3Code: "mkz"}, + {LanguageID: 665, Symbol: "MMB", EnglishName: "Mambae", VernacularName: "", IsoName: "Mambae", IsoAlpha2Code: " ", IsoAlpha3Code: "mgm"}, + {LanguageID: 666, Symbol: "ODW", EnglishName: "Odawa", VernacularName: "Nishnaabemwin", IsoName: "Ottawa", IsoAlpha2Code: " ", IsoAlpha3Code: "otw"}, + {LanguageID: 667, Symbol: "SLM", EnglishName: "Mozambican Sign Language", VernacularName: "Língua de Sinais Moçambicana", IsoName: "Mozambican Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "mzy"}, + {LanguageID: 668, Symbol: "NBZ", EnglishName: "Ndebele (Zimbabwe)", VernacularName: "Ndebele (Zimbabwe)", IsoName: "North Ndebele", IsoAlpha2Code: "nd", IsoAlpha3Code: "nde"}, + {LanguageID: 669, Symbol: "PIC", EnglishName: "Paicî", VernacularName: "", IsoName: "Paicî", IsoAlpha2Code: " ", IsoAlpha3Code: "pri"}, + {LanguageID: 670, Symbol: "XRC", EnglishName: "Xârâcùù", VernacularName: "", IsoName: "Xârâcùù", IsoAlpha2Code: " ", IsoAlpha3Code: "ane"}, + {LanguageID: 671, Symbol: "AHK", EnglishName: "Ashaninka", VernacularName: "ashaninka", IsoName: "Asháninka", IsoAlpha2Code: " ", IsoAlpha3Code: "cni"}, + {LanguageID: 672, Symbol: "HZJ", EnglishName: "Croatian Sign Language", VernacularName: "hrvatski znakovni jezik", IsoName: "Croatia Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "csq"}, + {LanguageID: 673, Symbol: "JCR", EnglishName: "Jamaican Creole", VernacularName: "Patwa", IsoName: "Jamaican Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "jam"}, + {LanguageID: 674, Symbol: "KRI", EnglishName: "Krio", VernacularName: "Krio", IsoName: "Krio", IsoAlpha2Code: " ", IsoAlpha3Code: "kri"}, + {LanguageID: 675, Symbol: "MHK", EnglishName: "Mohawk", VernacularName: "Kanien'kéha", IsoName: "Mohawk", IsoAlpha2Code: " ", IsoAlpha3Code: "moh"}, + {LanguageID: 676, Symbol: "MLN", EnglishName: "Molengue", VernacularName: "", IsoName: "Molengue", IsoAlpha2Code: " ", IsoAlpha3Code: "bxc"}, + {LanguageID: 677, Symbol: "SRI", EnglishName: "Sarnami", VernacularName: "Sarnami Hindoestani", IsoName: "Caribbean Hindustani", IsoAlpha2Code: " ", IsoAlpha3Code: "hns"}, + {LanguageID: 678, Symbol: "TMN", EnglishName: "Themne", VernacularName: "Themne", IsoName: "Timne", IsoAlpha2Code: " ", IsoAlpha3Code: "tem"}, + {LanguageID: 679, Symbol: "CHN", EnglishName: "Min Nan (Quanzhou)", VernacularName: "", IsoName: "Min Nan Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "nan"}, + {LanguageID: 680, Symbol: "MWL", EnglishName: "Mambwe-Lungu", VernacularName: "Cimambwe-Lungu", IsoName: "Mambwe-Lungu", IsoAlpha2Code: " ", IsoAlpha3Code: "mgr"}, + {LanguageID: 681, Symbol: "TND", EnglishName: "Tandroy", VernacularName: "Tandroy", IsoName: "Tandroy-Mahafaly Malagasy", IsoAlpha2Code: " ", IsoAlpha3Code: "tdx"}, + {LanguageID: 682, Symbol: "RNY", EnglishName: "Rumanyo", VernacularName: "Rumanyo", IsoName: "Diriku", IsoAlpha2Code: " ", IsoAlpha3Code: "diu"}, + {LanguageID: 683, Symbol: "PLG", EnglishName: "Pilagá", VernacularName: "pilagá", IsoName: "Pilagá", IsoAlpha2Code: " ", IsoAlpha3Code: "plg"}, + {LanguageID: 684, Symbol: "QIS", EnglishName: "Quichua (Santiago del Estero)", VernacularName: "quichua (Santiago del Estero)", IsoName: "Santiago del Estero Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qus"}, + {LanguageID: 685, Symbol: "ABN", EnglishName: "Abaknon", VernacularName: "Abaknon", IsoName: "Inabaknon", IsoAlpha2Code: " ", IsoAlpha3Code: "abx"}, + {LanguageID: 686, Symbol: "ARO", EnglishName: "Arosi", VernacularName: "", IsoName: "Arosi", IsoAlpha2Code: " ", IsoAlpha3Code: "aia"}, + {LanguageID: 687, Symbol: "AKN", EnglishName: "Aukan", VernacularName: "Okanisitongo", IsoName: "Eastern Maroon Creole", IsoAlpha2Code: " ", IsoAlpha3Code: "djk"}, + {LanguageID: 688, Symbol: "AYW", EnglishName: "Ayiwo", VernacularName: "", IsoName: "Ayiwo", IsoAlpha2Code: " ", IsoAlpha3Code: "nfl"}, + {LanguageID: 689, Symbol: "BAU", EnglishName: "Bauro", VernacularName: "", IsoName: "Bauro", IsoAlpha2Code: " ", IsoAlpha3Code: "bxa"}, + {LanguageID: 690, Symbol: "GTN", EnglishName: "Gitonga", VernacularName: "Gitonga", IsoName: "Gitonga", IsoAlpha2Code: " ", IsoAlpha3Code: "toh"}, + {LanguageID: 691, Symbol: "IBL", EnglishName: "Ibaloi", VernacularName: "Ibaloi", IsoName: "Ibaloi", IsoAlpha2Code: " ", IsoAlpha3Code: "ibl"}, + {LanguageID: 692, Symbol: "KNY", EnglishName: "Kankanaey", VernacularName: "Kankanaey", IsoName: "Kankanaey", IsoAlpha2Code: " ", IsoAlpha3Code: "kne"}, + {LanguageID: 693, Symbol: "KWA", EnglishName: "Kwaio", VernacularName: "", IsoName: "Kwaio", IsoAlpha2Code: " ", IsoAlpha3Code: "kwd"}, + {LanguageID: 694, Symbol: "MLG", EnglishName: "Malango", VernacularName: "", IsoName: "Malango", IsoAlpha2Code: " ", IsoAlpha3Code: "mln"}, + {LanguageID: 695, Symbol: "DAR", EnglishName: "Dari", VernacularName: "دری", IsoName: "Dari", IsoAlpha2Code: " ", IsoAlpha3Code: "prs"}, + {LanguageID: 696, Symbol: "NTU", EnglishName: "Natügu", VernacularName: "", IsoName: "Natügu", IsoAlpha2Code: " ", IsoAlpha3Code: "ntu"}, + {LanguageID: 697, Symbol: "ABB", EnglishName: "Abbey", VernacularName: "Abɛ", IsoName: "Abé", IsoAlpha2Code: " ", IsoAlpha3Code: "aba"}, + {LanguageID: 698, Symbol: "ATI", EnglishName: "Attié", VernacularName: "Akie", IsoName: "Attié", IsoAlpha2Code: " ", IsoAlpha3Code: "ati"}, + {LanguageID: 699, Symbol: "GUR", EnglishName: "Guéré", VernacularName: "wɛ", IsoName: "Wè Southern", IsoAlpha2Code: " ", IsoAlpha3Code: "gxx"}, + {LanguageID: 700, Symbol: "MBD", EnglishName: "Mbunda", VernacularName: "Mbunda", IsoName: "Mbunda", IsoAlpha2Code: " ", IsoAlpha3Code: "mck"}, + {LanguageID: 701, Symbol: "RMB", EnglishName: "Romany (Bulgaria)", VernacularName: "романи (България)", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 702, Symbol: "TPR", EnglishName: "Toupouri", VernacularName: "Toupouri", IsoName: "Tupuri", IsoAlpha2Code: " ", IsoAlpha3Code: "tui"}, + {LanguageID: 703, Symbol: "YCB", EnglishName: "Yacouba", VernacularName: "Yaoba", IsoName: "Dan", IsoAlpha2Code: " ", IsoAlpha3Code: "daf"}, + {LanguageID: 704, Symbol: "NSL", EnglishName: "Nepali Sign Language", VernacularName: "नेपाली साङ्केतिक भाषा", IsoName: "Nepalese Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "nsp"}, + {LanguageID: 705, Symbol: "LMG", EnglishName: "Romanian Sign Language", VernacularName: "Limbajul semnelor românesc", IsoName: "Romanian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "rms"}, + {LanguageID: 706, Symbol: "BMU", EnglishName: "Bomu", VernacularName: "Boomu", IsoName: "Bomu", IsoAlpha2Code: " ", IsoAlpha3Code: "bmq"}, + {LanguageID: 707, Symbol: "BNK", EnglishName: "Bunak", VernacularName: "", IsoName: "Bunak", IsoAlpha2Code: " ", IsoAlpha3Code: "bfn"}, + {LanguageID: 708, Symbol: "KEM", EnglishName: "Kemak", VernacularName: "", IsoName: "Kemak", IsoAlpha2Code: " ", IsoAlpha3Code: "kem"}, + {LanguageID: 709, Symbol: "NTE", EnglishName: "Nauete", VernacularName: "", IsoName: "Nauete", IsoAlpha2Code: " ", IsoAlpha3Code: "nxa"}, + {LanguageID: 710, Symbol: "NYU", EnglishName: "Nyungwe", VernacularName: "Cinyungwe", IsoName: "Nyungwe", IsoAlpha2Code: " ", IsoAlpha3Code: "nyu"}, + {LanguageID: 711, Symbol: "SOL", EnglishName: "Soli", VernacularName: "Cisoli", IsoName: "Soli", IsoAlpha2Code: " ", IsoAlpha3Code: "sby"}, + {LanguageID: 712, Symbol: "WMO", EnglishName: "Waimoa", VernacularName: "", IsoName: "Waima'a", IsoAlpha2Code: " ", IsoAlpha3Code: "wmh"}, + {LanguageID: 713, Symbol: "VRU", EnglishName: "Voru", VernacularName: "võro", IsoName: "Võro", IsoAlpha2Code: " ", IsoAlpha3Code: "vro"}, + {LanguageID: 714, Symbol: "HSL", EnglishName: "Hong Kong Sign Language", VernacularName: "香港手語", IsoName: "Hong Kong Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "hks"}, + {LanguageID: 715, Symbol: "MKO", EnglishName: "Makasae (Ossu)", VernacularName: "", IsoName: "Makasae", IsoAlpha2Code: " ", IsoAlpha3Code: "mkz"}, + {LanguageID: 716, Symbol: "MMA", EnglishName: "Mambae (Aileu)", VernacularName: "", IsoName: "Mambae", IsoAlpha2Code: " ", IsoAlpha3Code: "mgm"}, + {LanguageID: 717, Symbol: "MME", EnglishName: "Mambae (Ermera)", VernacularName: "Mambae (Ermera)", IsoName: "Mambae", IsoAlpha2Code: " ", IsoAlpha3Code: "mgm"}, + {LanguageID: 718, Symbol: "MMS", EnglishName: "Mambae (Ainaro and Same)", VernacularName: "", IsoName: "Mambae", IsoAlpha2Code: " ", IsoAlpha3Code: "mgm"}, + {LanguageID: 719, Symbol: "MAP", EnglishName: "Maya (Mopán)", VernacularName: "T'an", IsoName: "Mopán Maya", IsoAlpha2Code: " ", IsoAlpha3Code: "mop"}, + {LanguageID: 720, Symbol: "NEN", EnglishName: "Nsenga (Zambia)", VernacularName: "Cinsenga", IsoName: "Nsenga", IsoAlpha2Code: " ", IsoAlpha3Code: "nse"}, + {LanguageID: 721, Symbol: "SYL", EnglishName: "Sylheti (Bengali)", VernacularName: "সেলেটি (বাংলা)", IsoName: "Sylheti", IsoAlpha2Code: " ", IsoAlpha3Code: "syl"}, + {LanguageID: 722, Symbol: "TKC", EnglishName: "Turkish (Cyrillic)", VernacularName: "", IsoName: "Turkish", IsoAlpha2Code: "tr", IsoAlpha3Code: "tur"}, + {LanguageID: 723, Symbol: "BDY", EnglishName: "Bidayuh (Bukar)", VernacularName: "Bidayuh (Bukar)", IsoName: "Bukar-Sadung Bidayuh", IsoAlpha2Code: " ", IsoAlpha3Code: "sdo"}, + {LanguageID: 724, Symbol: "DGA", EnglishName: "Dagaare", VernacularName: "Dagaare", IsoName: "Southern Dagaare", IsoAlpha2Code: " ", IsoAlpha3Code: "dga"}, + {LanguageID: 725, Symbol: "MJK", EnglishName: "Mandjak", VernacularName: "Manjaku", IsoName: "Mandjak", IsoAlpha2Code: " ", IsoAlpha3Code: "mfv"}, + {LanguageID: 726, Symbol: "QIC", EnglishName: "Quichua (Chimborazo)", VernacularName: "quichua (chimborazo)", IsoName: "Chimborazo Highland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qug"}, + {LanguageID: 727, Symbol: "QII", EnglishName: "Quichua (Imbabura)", VernacularName: "quichua (imbabura)", IsoName: "Imbabura Highland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qvi"}, + {LanguageID: 728, Symbol: "QIP", EnglishName: "Quichua (Pastaza)", VernacularName: "quichua (pastaza)", IsoName: "Northern Pastaza Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qvz"}, + {LanguageID: 729, Symbol: "QIT", EnglishName: "Quichua (Tena)", VernacularName: "quichua (tena)", IsoName: "Tena Lowland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "quw"}, + {LanguageID: 730, Symbol: "HLA", EnglishName: "Halia", VernacularName: "Halia", IsoName: "Halia", IsoAlpha2Code: " ", IsoAlpha3Code: "hla"}, + {LanguageID: 731, Symbol: "NKM", EnglishName: "Nukumanu", VernacularName: "Nukumanu", IsoName: "Nukumanu", IsoAlpha2Code: " ", IsoAlpha3Code: "nuq"}, + {LanguageID: 732, Symbol: "SFC", EnglishName: "Senoufo (Cebaara)", VernacularName: "", IsoName: "Cebaara Senoufo", IsoAlpha2Code: " ", IsoAlpha3Code: "sef"}, + {LanguageID: 733, Symbol: "TCN", EnglishName: "Ticuna", VernacularName: "Ticuna", IsoName: "Ticuna", IsoAlpha2Code: " ", IsoAlpha3Code: "tca"}, + {LanguageID: 734, Symbol: "WMA", EnglishName: "Waima", VernacularName: "Waima", IsoName: "Tae'", IsoAlpha2Code: " ", IsoAlpha3Code: "rob"}, + {LanguageID: 735, Symbol: "SHC", EnglishName: "Shipibo-Conibo", VernacularName: "shipibo-conibo", IsoName: "Shipibo-Conibo", IsoAlpha2Code: " ", IsoAlpha3Code: "shp"}, + {LanguageID: 736, Symbol: "ZAS", EnglishName: "Zambian Sign Language", VernacularName: "Zambian Sign Language", IsoName: "Zambian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "zsl"}, + {LanguageID: 737, Symbol: "CNO", EnglishName: "Chinantec (Ojitlan)", VernacularName: "jújmi kiʼtsa köwɨ̱", IsoName: "Ojitlán Chinantec", IsoAlpha2Code: " ", IsoAlpha3Code: "chj"}, + {LanguageID: 738, Symbol: "RGS", EnglishName: "Rungus", VernacularName: "Momogun", IsoName: "Rungus", IsoAlpha2Code: " ", IsoAlpha3Code: "drg"}, + {LanguageID: 739, Symbol: "SLS", EnglishName: "Sri Lankan Sign Language", VernacularName: "ශ්\u200dරී ලංකා සංඥා භාෂාව", IsoName: "Sri Lankan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "sqs"}, + {LanguageID: 740, Symbol: "DWW", EnglishName: "Dawawa", VernacularName: "Dawawa", IsoName: "Dawawa", IsoAlpha2Code: " ", IsoAlpha3Code: "dww"}, + {LanguageID: 741, Symbol: "BIM", EnglishName: "Malaysian Sign Language", VernacularName: "Bahasa Isyarat Malaysia", IsoName: "Malaysian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "xml"}, + {LanguageID: 742, Symbol: "BUS", EnglishName: "Myanmar Sign Language", VernacularName: "မြန်မာ လက်သင်္ကေတပြဘာသာစကား", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 743, Symbol: "RMG", EnglishName: "Romany (Southern Greece)", VernacularName: "Ρομανί (Νότια Ελλάδα)", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 744, Symbol: "YON", EnglishName: "Yonggom", VernacularName: "", IsoName: "Yongkom", IsoAlpha2Code: " ", IsoAlpha3Code: "yon"}, + {LanguageID: 745, Symbol: "CPI", EnglishName: "Chopi", VernacularName: "Txitxopi", IsoName: "Chopi", IsoAlpha2Code: " ", IsoAlpha3Code: "cce"}, + {LanguageID: 746, Symbol: "MWM", EnglishName: "Makhuwa-Meetto", VernacularName: "", IsoName: "Makhuwa-Meetto", IsoAlpha2Code: " ", IsoAlpha3Code: "mgh"}, + {LanguageID: 747, Symbol: "MKD", EnglishName: "Makonde", VernacularName: "", IsoName: "Makonde", IsoAlpha2Code: " ", IsoAlpha3Code: "kde"}, + {LanguageID: 748, Symbol: "LSU", EnglishName: "Uruguayan Sign Language", VernacularName: "lengua de señas uruguaya", IsoName: "Uruguayan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ugy"}, + {LanguageID: 749, Symbol: "CAB", EnglishName: "Cabécar (Tayní) ", VernacularName: "cabécar", IsoName: "Cabécar", IsoAlpha2Code: " ", IsoAlpha3Code: "cjp"}, + {LanguageID: 750, Symbol: "IMN", EnglishName: "Iu Mien", VernacularName: "Iu-Mienh", IsoName: "Iu Mien", IsoAlpha2Code: " ", IsoAlpha3Code: "ium"}, + {LanguageID: 751, Symbol: "KAZ", EnglishName: "Kadazan", VernacularName: "Kadazan", IsoName: "Coastal Kadazan", IsoAlpha2Code: " ", IsoAlpha3Code: "kzj"}, + {LanguageID: 752, Symbol: "ALU", EnglishName: "Alur", VernacularName: "Alur", IsoName: "Alur", IsoAlpha2Code: " ", IsoAlpha3Code: "alz"}, + {LanguageID: 753, Symbol: "BMB", EnglishName: "Bembe", VernacularName: "Kibembe", IsoName: "Bembe", IsoAlpha2Code: " ", IsoAlpha3Code: "bmb"}, + {LanguageID: 754, Symbol: "BDZ", EnglishName: "Budza", VernacularName: "Ebudza", IsoName: "Budza", IsoAlpha2Code: " ", IsoAlpha3Code: "bja"}, + {LanguageID: 755, Symbol: "BSG", EnglishName: "Bushoong", VernacularName: "Bushoong", IsoName: "Bushoong", IsoAlpha2Code: " ", IsoAlpha3Code: "buf"}, + {LanguageID: 756, Symbol: "DNS", EnglishName: "Dengese", VernacularName: "Londengese", IsoName: "Dengese", IsoAlpha2Code: " ", IsoAlpha3Code: "dez"}, + {LanguageID: 757, Symbol: "KYK", EnglishName: "Kanyok", VernacularName: "Ciin-kanyok", IsoName: "Kanyok", IsoAlpha2Code: " ", IsoAlpha3Code: "kny"}, + {LanguageID: 758, Symbol: "LND", EnglishName: "Lendu", VernacularName: "Baledha", IsoName: "Lendu", IsoAlpha2Code: " ", IsoAlpha3Code: "led"}, + {LanguageID: 759, Symbol: "MBL", EnglishName: "Mbala", VernacularName: "Gimbala", IsoName: "Mbala", IsoAlpha2Code: " ", IsoAlpha3Code: "mdp"}, + {LanguageID: 760, Symbol: "SGA", EnglishName: "Sanga", VernacularName: "Kisanga", IsoName: "Sanga (Democratic Republic of Congo)", IsoAlpha2Code: " ", IsoAlpha3Code: "sng"}, + {LanguageID: 761, Symbol: "SGM", EnglishName: "Songomeno", VernacularName: "Losongomino", IsoName: "Songomeno", IsoAlpha2Code: " ", IsoAlpha3Code: "soe"}, + {LanguageID: 762, Symbol: "YAK", EnglishName: "Yaka", VernacularName: "Iyaka", IsoName: "Yaka (Democratic Republic of Congo)", IsoAlpha2Code: " ", IsoAlpha3Code: "yaf"}, + {LanguageID: 763, Symbol: "YNS", EnglishName: "Yansi", VernacularName: "", IsoName: "Yansi", IsoAlpha2Code: " ", IsoAlpha3Code: "yns"}, + {LanguageID: 764, Symbol: "YMB", EnglishName: "Yombe", VernacularName: "Kiyombe", IsoName: "Yombe", IsoAlpha2Code: " ", IsoAlpha3Code: "yom"}, + {LanguageID: 765, Symbol: "SBR", EnglishName: "Samburu", VernacularName: "Sampur", IsoName: "Samburu", IsoAlpha2Code: " ", IsoAlpha3Code: "saq"}, + {LanguageID: 766, Symbol: "CGW", EnglishName: "Chitonga (Zimbabwe)", VernacularName: "Chitonga (Zimbabwe)", IsoName: "Tonga (Zambia)", IsoAlpha2Code: " ", IsoAlpha3Code: "toi"}, + {LanguageID: 767, Symbol: "KLZ", EnglishName: "Kalanga (Zimbabwe)", VernacularName: "Kalanga (Zimbabwe)", IsoName: "Kalanga", IsoAlpha2Code: " ", IsoAlpha3Code: "kck"}, + {LanguageID: 768, Symbol: "GLC", EnglishName: "Galician", VernacularName: "Galego", IsoName: "Galician", IsoAlpha2Code: "gl", IsoAlpha3Code: "glg"}, + {LanguageID: 769, Symbol: "VLC", EnglishName: "Valencian", VernacularName: "valencià", IsoName: "Catalan", IsoAlpha2Code: "ca", IsoAlpha3Code: "cat"}, + {LanguageID: 770, Symbol: "ALS", EnglishName: "Albanian Sign Language", VernacularName: "shqipe e shenjave", IsoName: "Albanian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "sqk"}, + {LanguageID: 771, Symbol: "INS", EnglishName: "Indian Sign Language", VernacularName: "Indian Sign Language", IsoName: "Indian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ins"}, + {LanguageID: 772, Symbol: "MYW", EnglishName: "Manyawa", VernacularName: "Emanyawa", IsoName: "Manyawa", IsoAlpha2Code: " ", IsoAlpha3Code: "mny"}, + {LanguageID: 773, Symbol: "GHB", EnglishName: "Guahibo", VernacularName: "guahibo", IsoName: "Guahibo", IsoAlpha2Code: " ", IsoAlpha3Code: "guh"}, + {LanguageID: 774, Symbol: "PMN", EnglishName: "Pemon", VernacularName: "pemon pe", IsoName: "Pemon", IsoAlpha2Code: " ", IsoAlpha3Code: "aoc"}, + {LanguageID: 775, Symbol: "PRA", EnglishName: "Piaroa", VernacularName: "huo̧ttö̧ja̧", IsoName: "Piaroa", IsoAlpha2Code: " ", IsoAlpha3Code: "pid"}, + {LanguageID: 776, Symbol: "PME", EnglishName: "Pumé", VernacularName: "", IsoName: "Pumé", IsoAlpha2Code: " ", IsoAlpha3Code: "yae"}, + {LanguageID: 777, Symbol: "WRO", EnglishName: "Warao", VernacularName: "warao", IsoName: "Warao", IsoAlpha2Code: " ", IsoAlpha3Code: "wba"}, + {LanguageID: 778, Symbol: "YKP", EnglishName: "Yukpa", VernacularName: "yukpa", IsoName: "Yukpa", IsoAlpha2Code: " ", IsoAlpha3Code: "yup"}, + {LanguageID: 779, Symbol: "RDU", EnglishName: "Kurdish Kurmanji (Caucasus)", VernacularName: "Kurdî Kurmancî (Kavkazûs)", IsoName: "Northern Kurdish", IsoAlpha2Code: " ", IsoAlpha3Code: "kmr"}, + {LanguageID: 780, Symbol: "KGL", EnglishName: "Kikongo ya Leta", VernacularName: "Kikongo ya leta", IsoName: "Kituba (Democratic Republic of Congo)", IsoAlpha2Code: " ", IsoAlpha3Code: "ktu"}, + {LanguageID: 781, Symbol: "LGA", EnglishName: "Lega", VernacularName: "Lega", IsoName: "Lega-Shabunda", IsoAlpha2Code: " ", IsoAlpha3Code: "lea"}, + {LanguageID: 782, Symbol: "MNN", EnglishName: "Kimanyanga", VernacularName: "Kimanianga", IsoName: "Koongo", IsoAlpha2Code: " ", IsoAlpha3Code: "kng"}, + {LanguageID: 783, Symbol: "NGN", EnglishName: "Ngbandi (Northern)", VernacularName: "Ngbandi (ya Nɔrdi)", IsoName: "Northern Ngbandi", IsoAlpha2Code: " ", IsoAlpha3Code: "ngb"}, + {LanguageID: 784, Symbol: "TEK", EnglishName: "Teke (Congo Kinshasa)", VernacularName: "Kiteke (Congo Kinshasa)", IsoName: "Ibali Teke", IsoAlpha2Code: " ", IsoAlpha3Code: "tek"}, + {LanguageID: 785, Symbol: "TPO", EnglishName: "Portuguese (Portugal)", VernacularName: "Português (Portugal)", IsoName: "Portuguese", IsoAlpha2Code: "pt", IsoAlpha3Code: "por"}, + {LanguageID: 786, Symbol: "RMN", EnglishName: "Romany (Northern Greece)", VernacularName: "Ρομανί (Βόρεια Ελλάδα)", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 787, Symbol: "MAI", EnglishName: "Mazatec (Ixcatlán)", VernacularName: "", IsoName: "Ixcatlán Mazatec", IsoAlpha2Code: " ", IsoAlpha3Code: "mzi"}, + {LanguageID: 788, Symbol: "MAJ", EnglishName: "Mazatec (Jalapa de Díaz)", VernacularName: "", IsoName: "Jalapa De Díaz Mazatec", IsoAlpha2Code: " ", IsoAlpha3Code: "maj"}, + {LanguageID: 789, Symbol: "MAN", EnglishName: "Mazatec (Mazatlán)", VernacularName: "", IsoName: "Mazatlán Mazatec", IsoAlpha2Code: " ", IsoAlpha3Code: "vmz"}, + {LanguageID: 790, Symbol: "MAS", EnglishName: "Mazatec (Soyaltepec)", VernacularName: "", IsoName: "Soyaltepec Mazatec", IsoAlpha2Code: " ", IsoAlpha3Code: "vmp"}, + {LanguageID: 791, Symbol: "CNL", EnglishName: "Chinantec (San Juan Lalana)", VernacularName: "", IsoName: "Lalana Chinantec", IsoAlpha2Code: " ", IsoAlpha3Code: "cnl"}, + {LanguageID: 792, Symbol: "CNQ", EnglishName: "Chinantec (San Juan Quiotepec)", VernacularName: "", IsoName: "Quiotepec Chinantec", IsoAlpha2Code: " ", IsoAlpha3Code: "chq"}, + {LanguageID: 793, Symbol: "CNU", EnglishName: "Chinantec (Usila)", VernacularName: "", IsoName: "Usila Chinantec", IsoAlpha2Code: " ", IsoAlpha3Code: "cuc"}, + {LanguageID: 794, Symbol: "CNV", EnglishName: "Chinantec (Valle Nacional)", VernacularName: "", IsoName: "Valle Nacional Chinantec", IsoAlpha2Code: " ", IsoAlpha3Code: "cvn"}, + {LanguageID: 795, Symbol: "AMG", EnglishName: "Amuzgo (Guerrero)", VernacularName: "ñoomndaa", IsoName: "Guerrero Amuzgo", IsoAlpha2Code: " ", IsoAlpha3Code: "amu"}, + {LanguageID: 796, Symbol: "GRZ", EnglishName: "Guerze", VernacularName: "Kpɛlɛɛwoo", IsoName: "Guinea Kpelle", IsoAlpha2Code: " ", IsoAlpha3Code: "gkp"}, + {LanguageID: 797, Symbol: "TER", EnglishName: "Terêna", VernacularName: "", IsoName: "Tereno", IsoAlpha2Code: " ", IsoAlpha3Code: "ter"}, + {LanguageID: 798, Symbol: "MCS", EnglishName: "Macushi", VernacularName: "Makusi", IsoName: "Macushi", IsoAlpha2Code: " ", IsoAlpha3Code: "mbc"}, + {LanguageID: 799, Symbol: "SUS", EnglishName: "Susu", VernacularName: "Soso xui", IsoName: "Susu", IsoAlpha2Code: " ", IsoAlpha3Code: "sus"}, + {LanguageID: 800, Symbol: "MKE", EnglishName: "Maninkakan (Eastern)", VernacularName: "Maninkakan", IsoName: "Eastern Maninkakan", IsoAlpha2Code: " ", IsoAlpha3Code: "emk"}, + {LanguageID: 801, Symbol: "PMR", EnglishName: "Pomeranian", VernacularName: "Pomerisch", IsoName: "Low German", IsoAlpha2Code: " ", IsoAlpha3Code: "nds"}, + {LanguageID: 802, Symbol: "QUH", EnglishName: "Quechua (Huaylla Wanca)", VernacularName: "quechua wanka", IsoName: "Huaylla Wanca Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "qvw"}, + {LanguageID: 803, Symbol: "PLR", EnglishName: "Pular", VernacularName: "Pular", IsoName: "Pular", IsoAlpha2Code: " ", IsoAlpha3Code: "fuf"}, + {LanguageID: 804, Symbol: "SAR", EnglishName: "Sar", VernacularName: "Sar", IsoName: "Sar", IsoAlpha2Code: " ", IsoAlpha3Code: "mwm"}, + {LanguageID: 805, Symbol: "JAR", EnglishName: "Jarai", VernacularName: "", IsoName: "Jarai", IsoAlpha2Code: " ", IsoAlpha3Code: "jra"}, + {LanguageID: 806, Symbol: "RDE", EnglishName: "Rade", VernacularName: "", IsoName: "Rade", IsoAlpha2Code: " ", IsoAlpha3Code: "rad"}, + {LanguageID: 807, Symbol: "SLV", EnglishName: "Vietnamese Sign Language", VernacularName: "Ngôn ngữ ký hiệu Việt Nam", IsoName: "Hanoi Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "hab"}, + {LanguageID: 808, Symbol: "KPM", EnglishName: "Kapingamarangi", VernacularName: "", IsoName: "Kapingamarangi", IsoAlpha2Code: " ", IsoAlpha3Code: "kpg"}, + {LanguageID: 809, Symbol: "NKR", EnglishName: "Nukuoro", VernacularName: "", IsoName: "Nukuoro", IsoAlpha2Code: " ", IsoAlpha3Code: "nkr"}, + {LanguageID: 810, Symbol: "LAS", EnglishName: "Angolan Sign Language", VernacularName: "Língua angolana de sinais", IsoName: "Namibian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "nbs"}, + {LanguageID: 811, Symbol: "LLB", EnglishName: "Lala-Bisa", VernacularName: "", IsoName: "Lala-Bisa", IsoAlpha2Code: " ", IsoAlpha3Code: "leb"}, + {LanguageID: 812, Symbol: "RMP", EnglishName: "Romany (Northern Russia)", VernacularName: "романы (русска рома)", IsoName: "Baltic Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rml"}, + {LanguageID: 813, Symbol: "BTD", EnglishName: "Batak (Dairi)", VernacularName: "Pakpak", IsoName: "Batak Dairi", IsoAlpha2Code: " ", IsoAlpha3Code: "btd"}, + {LanguageID: 814, Symbol: "SGR", EnglishName: "Sangir", VernacularName: "Sangir", IsoName: "Sangir", IsoAlpha2Code: " ", IsoAlpha3Code: "sxn"}, + {LanguageID: 815, Symbol: "GRC", EnglishName: "Gourmanchéma", VernacularName: "Gulmancema", IsoName: "Gourmanchéma", IsoAlpha2Code: " ", IsoAlpha3Code: "gux"}, + {LanguageID: 816, Symbol: "KHN", EnglishName: "Kuhane (Subiya)", VernacularName: "Kuhane (Subiya)", IsoName: "Subiya", IsoAlpha2Code: " ", IsoAlpha3Code: "sbs"}, + {LanguageID: 817, Symbol: "BZK", EnglishName: "Belize Kriol", VernacularName: "Bileez Kriol", IsoName: "Belize Kriol English", IsoAlpha2Code: " ", IsoAlpha3Code: "bzj"}, + {LanguageID: 818, Symbol: "DKA", EnglishName: "Dayak Ahe", VernacularName: "", IsoName: "Kendayan", IsoAlpha2Code: " ", IsoAlpha3Code: "knx"}, + {LanguageID: 819, Symbol: "MGR", EnglishName: "Mangareva", VernacularName: "Mangareva", IsoName: "Mangareva", IsoAlpha2Code: " ", IsoAlpha3Code: "mrv"}, + {LanguageID: 820, Symbol: "XPA", EnglishName: "Pennsylvania German", VernacularName: "Pennsylvania Dutch (Deitsh)", IsoName: "Pennsylvania German", IsoAlpha2Code: " ", IsoAlpha3Code: "pdc"}, + {LanguageID: 821, Symbol: "ALN", EnglishName: "Arabic (Lebanon)", VernacularName: "العربية (اللهجة اللبنانية)", IsoName: "North Levantine Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "apc"}, + {LanguageID: 822, Symbol: "ABU", EnglishName: "Abui", VernacularName: "Alor Abui", IsoName: "Abui", IsoAlpha2Code: " ", IsoAlpha3Code: "abz"}, + {LanguageID: 823, Symbol: "ADZ", EnglishName: "Arabic (Algeria)", VernacularName: "", IsoName: "Algerian Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "arq"}, + {LanguageID: 824, Symbol: "AMO", EnglishName: "Arabic (Morocco)", VernacularName: "العربية (الدارجة المغربية)", IsoName: "Moroccan Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "ary"}, + {LanguageID: 825, Symbol: "ATN", EnglishName: "Arabic (Tunisia)", VernacularName: "العربية (الدّارجة\u200f \u200fالتّونسيّة)", IsoName: "Tunisian Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "aeb"}, + {LanguageID: 826, Symbol: "HSK", EnglishName: "Hunsrik", VernacularName: "Hunsrik", IsoName: "Hunsrik", IsoAlpha2Code: " ", IsoAlpha3Code: "hrx"}, + {LanguageID: 827, Symbol: "TAL", EnglishName: "Talian", VernacularName: "Talian", IsoName: "Venetian", IsoAlpha2Code: " ", IsoAlpha3Code: "vec"}, + {LanguageID: 828, Symbol: "QUL", EnglishName: "Quechua (Huallaga Huánuco)", VernacularName: "Quechua de Huánuco (Huallaga)", IsoName: "Huallaga Huánuco Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "qub"}, + {LanguageID: 829, Symbol: "GHS", EnglishName: "Ghanaian Sign Language", VernacularName: "Ghanaian Sign Language", IsoName: "Ghanaian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "gse"}, + {LanguageID: 830, Symbol: "RMA", EnglishName: "Romany (Argentina)", VernacularName: "Romanes Kalderash", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 831, Symbol: "LLO", EnglishName: "Lolo", VernacularName: "Ilolo", IsoName: "Lolo", IsoAlpha2Code: " ", IsoAlpha3Code: "llb"}, + {LanguageID: 832, Symbol: "GAR", EnglishName: "Garo (Abeng)", VernacularName: "গারো (আবেং)", IsoName: "Garo", IsoAlpha2Code: " ", IsoAlpha3Code: "grt"}, + {LanguageID: 833, Symbol: "GAA", EnglishName: "Garo (Achik)", VernacularName: "", IsoName: "Garo", IsoAlpha2Code: " ", IsoAlpha3Code: "grt"}, + {LanguageID: 834, Symbol: "LTG", EnglishName: "Latgalian", VernacularName: "Latgalīšu", IsoName: "Latgalian", IsoAlpha2Code: " ", IsoAlpha3Code: "ltg"}, + {LanguageID: 835, Symbol: "TCH", EnglishName: "Tachelhit", VernacularName: "", IsoName: "Tachelhit", IsoAlpha2Code: " ", IsoAlpha3Code: "shi"}, + {LanguageID: 836, Symbol: "TMZ", EnglishName: "Tamazight", VernacularName: "", IsoName: "Central Atlas Tamazight", IsoAlpha2Code: " ", IsoAlpha3Code: "tzm"}, + {LanguageID: 837, Symbol: "MXA", EnglishName: "Mixtec (Apoala)", VernacularName: "", IsoName: "Apasco-Apoala Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "mip"}, + {LanguageID: 838, Symbol: "MXM", EnglishName: "Mixtec (Mitlatongo)", VernacularName: "", IsoName: "Mitlatongo Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "vmm"}, + {LanguageID: 839, Symbol: "MXX", EnglishName: "Mixtec (Nuxaá)", VernacularName: "", IsoName: "Southeastern Nochixtlán Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "mxy"}, + {LanguageID: 840, Symbol: "MXP", EnglishName: "Mixtec (Peñoles)", VernacularName: "", IsoName: "Peñoles Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "mil"}, + {LanguageID: 841, Symbol: "PQM", EnglishName: "Poqomchi'", VernacularName: "poqomchi'", IsoName: "Poqomchi'", IsoAlpha2Code: " ", IsoAlpha3Code: "poh"}, + {LanguageID: 842, Symbol: "SVN", EnglishName: "Svan (Upper)", VernacularName: "ჟიბე ლუშნუ", IsoName: "Svan", IsoAlpha2Code: " ", IsoAlpha3Code: "sva"}, + {LanguageID: 843, Symbol: "MGL", EnglishName: "Mingrelian", VernacularName: "მარგალური", IsoName: "Mingrelian", IsoAlpha2Code: " ", IsoAlpha3Code: "xmf"}, + {LanguageID: 844, Symbol: "IPN", EnglishName: "Inupiatun (North Alaskan)", VernacularName: "", IsoName: "North Alaskan Inupiatun", IsoAlpha2Code: " ", IsoAlpha3Code: "esi"}, + {LanguageID: 845, Symbol: "SIE", EnglishName: "Thai (Northeastern)", VernacularName: "อีสาน", IsoName: "Northeastern Thai", IsoAlpha2Code: " ", IsoAlpha3Code: "tts"}, + {LanguageID: 846, Symbol: "LKT", EnglishName: "Lakota", VernacularName: "Lakotiya", IsoName: "Lakota", IsoAlpha2Code: " ", IsoAlpha3Code: "lkt"}, + {LanguageID: 847, Symbol: "CBL", EnglishName: "Cambodian Sign Language", VernacularName: "ភាសាសញ្ញាខ្មែរ", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 848, Symbol: "TYW", EnglishName: "Tyrewuju", VernacularName: "Tilewuyu", IsoName: "Galibi Carib", IsoAlpha2Code: " ", IsoAlpha3Code: "car"}, + {LanguageID: 849, Symbol: "TEB", EnglishName: "Teke (Congo Brazzaville)", VernacularName: "", IsoName: "Teke-Nzikou", IsoAlpha2Code: " ", IsoAlpha3Code: "nzu"}, + {LanguageID: 850, Symbol: "AHN", EnglishName: "Ahanta", VernacularName: "Aɣɩnda", IsoName: "Ahanta", IsoAlpha2Code: " ", IsoAlpha3Code: "aha"}, + {LanguageID: 851, Symbol: "AYN", EnglishName: "Anyin (Sanvi)", VernacularName: "", IsoName: "Anyin", IsoAlpha2Code: " ", IsoAlpha3Code: "any"}, + {LanguageID: 852, Symbol: "DGB", EnglishName: "Dagbani", VernacularName: "Dagbanli", IsoName: "Dagbani", IsoAlpha2Code: " ", IsoAlpha3Code: "dag"}, + {LanguageID: 853, Symbol: "GNJ", EnglishName: "Gonja", VernacularName: "", IsoName: "Gonja", IsoAlpha2Code: " ", IsoAlpha3Code: "gjn"}, + {LanguageID: 854, Symbol: "KSM", EnglishName: "Kasem", VernacularName: "", IsoName: "Kasem", IsoAlpha2Code: " ", IsoAlpha3Code: "xsm"}, + {LanguageID: 855, Symbol: "KKB", EnglishName: "Konkomba", VernacularName: "", IsoName: "Konkomba", IsoAlpha2Code: " ", IsoAlpha3Code: "xon"}, + {LanguageID: 856, Symbol: "KUS", EnglishName: "Kusaal", VernacularName: "", IsoName: "Kusaal", IsoAlpha2Code: " ", IsoAlpha3Code: "kus"}, + {LanguageID: 857, Symbol: "SHW", EnglishName: "Sehwi", VernacularName: "Sehwi", IsoName: "Sehwi", IsoAlpha2Code: " ", IsoAlpha3Code: "sfw"}, + {LanguageID: 858, Symbol: "TMR", EnglishName: "Turkmen", VernacularName: "türkmen", IsoName: "Turkmen", IsoAlpha2Code: "tk", IsoAlpha3Code: "tuk"}, + {LanguageID: 859, Symbol: "LSS", EnglishName: "Salvadoran Sign Language", VernacularName: "lengua de señas salvadoreña", IsoName: "Salvadoran Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "esn"}, + {LanguageID: 860, Symbol: "OTS", EnglishName: "Otomi (State of Mexico)", VernacularName: "ñätho", IsoName: "Estado de México Otomi", IsoAlpha2Code: " ", IsoAlpha3Code: "ots"}, + {LanguageID: 861, Symbol: "TLY", EnglishName: "Talysh", VernacularName: "Toloş", IsoName: "Talysh", IsoAlpha2Code: " ", IsoAlpha3Code: "tly"}, + {LanguageID: 862, Symbol: "RMC", EnglishName: "Romany (Macedonia) Cyrillic", VernacularName: "романе (Македонија) кирилица", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 863, Symbol: "SST", EnglishName: "Sisaala (Tumulung)", VernacularName: "", IsoName: "Tumulung Sisaala", IsoAlpha2Code: " ", IsoAlpha3Code: "sil"}, + {LanguageID: 864, Symbol: "ABE", EnglishName: "Ambae (East)", VernacularName: "Ambae (East)", IsoName: "East Ambae", IsoAlpha2Code: " ", IsoAlpha3Code: "omb"}, + {LanguageID: 865, Symbol: "APM", EnglishName: "Apma", VernacularName: "", IsoName: "Apma", IsoAlpha2Code: " ", IsoAlpha3Code: "app"}, + {LanguageID: 866, Symbol: "EFN", EnglishName: "Efate (North)", VernacularName: "Efate (North)", IsoName: "North Efate", IsoAlpha2Code: " ", IsoAlpha3Code: "llp"}, + {LanguageID: 867, Symbol: "EFS", EnglishName: "Efate (South)", VernacularName: "Efate (South)", IsoName: "South Efate", IsoAlpha2Code: " ", IsoAlpha3Code: "erk"}, + {LanguageID: 868, Symbol: "HNO", EnglishName: "Hano", VernacularName: "Hano", IsoName: "Hano", IsoAlpha2Code: " ", IsoAlpha3Code: "lml"}, + {LanguageID: 869, Symbol: "LNK", EnglishName: "Lenakel", VernacularName: "Lenakel", IsoName: "Lenakel", IsoAlpha2Code: " ", IsoAlpha3Code: "tnl"}, + {LanguageID: 870, Symbol: "PMA", EnglishName: "Paama", VernacularName: "Paama", IsoName: "Paama", IsoAlpha2Code: " ", IsoAlpha3Code: "pma"}, + {LanguageID: 871, Symbol: "BTA", EnglishName: "Betsimisaraka (Southern)", VernacularName: "Betsimisaraka Atsimo", IsoName: "Southern Betsimisaraka Malagasy", IsoAlpha2Code: " ", IsoAlpha3Code: "bzc"}, + {LanguageID: 872, Symbol: "DMR", EnglishName: "Damara", VernacularName: "Damara", IsoName: "Nama (Namibia)", IsoAlpha2Code: " ", IsoAlpha3Code: "naq"}, + {LanguageID: 873, Symbol: "ATY", EnglishName: "Atayal", VernacularName: "Tayal", IsoName: "Atayal", IsoAlpha2Code: " ", IsoAlpha3Code: "tay"}, + {LanguageID: 874, Symbol: "BNN", EnglishName: "Bunun (South)", VernacularName: "布農語(南部)", IsoName: "Bunun", IsoAlpha2Code: " ", IsoAlpha3Code: "bnn"}, + {LanguageID: 875, Symbol: "PWN", EnglishName: "Paiwan", VernacularName: "Payuan", IsoName: "Paiwan", IsoAlpha2Code: " ", IsoAlpha3Code: "pwn"}, + {LanguageID: 876, Symbol: "PYM", EnglishName: "Puyuma", VernacularName: "Pinuyumayan", IsoName: "Puyuma", IsoAlpha2Code: " ", IsoAlpha3Code: "pyu"}, + {LanguageID: 877, Symbol: "RKI", EnglishName: "Rukai", VernacularName: "Drekay", IsoName: "Rukai", IsoAlpha2Code: " ", IsoAlpha3Code: "dru"}, + {LanguageID: 878, Symbol: "TRK", EnglishName: "Taroko", VernacularName: "Truku", IsoName: "Taroko", IsoAlpha2Code: " ", IsoAlpha3Code: "trv"}, + {LanguageID: 879, Symbol: "YMI", EnglishName: "Yami", VernacularName: "Yami", IsoName: "Yami", IsoAlpha2Code: " ", IsoAlpha3Code: "tao"}, + {LanguageID: 880, Symbol: "BTK", EnglishName: "Batak (Simalungun)", VernacularName: "Batak (Simalungun)", IsoName: "Batak Simalungun", IsoAlpha2Code: " ", IsoAlpha3Code: "bts"}, + {LanguageID: 881, Symbol: "MDR", EnglishName: "Madura", VernacularName: "Madura", IsoName: "Madurese", IsoAlpha2Code: " ", IsoAlpha3Code: "mad"}, + {LanguageID: 882, Symbol: "CHW", EnglishName: "Min Nan (Taiwan)", VernacularName: "閩南語(台灣)", IsoName: "Min Nan Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "nan"}, + {LanguageID: 883, Symbol: "TEW", EnglishName: "Tewe", VernacularName: "Ciutee", IsoName: "Tewe", IsoAlpha2Code: " ", IsoAlpha3Code: "twx"}, + {LanguageID: 884, Symbol: "ARH", EnglishName: "Arhuaco", VernacularName: "Arhuaco", IsoName: "Arhuaco", IsoAlpha2Code: " ", IsoAlpha3Code: "arh"}, + {LanguageID: 885, Symbol: "MCG", EnglishName: "Hitnu", VernacularName: "", IsoName: "Macaguán", IsoAlpha2Code: " ", IsoAlpha3Code: "mbn"}, + {LanguageID: 886, Symbol: "WNM", EnglishName: "Woun Meu", VernacularName: "", IsoName: "Woun Meu", IsoAlpha2Code: " ", IsoAlpha3Code: "noa"}, + {LanguageID: 887, Symbol: "PAZ", EnglishName: "Páez", VernacularName: "nasa yuwe", IsoName: "Páez", IsoAlpha2Code: " ", IsoAlpha3Code: "pbb"}, + {LanguageID: 888, Symbol: "CGA", EnglishName: "Changana (Zimbabwe)", VernacularName: "Xichangana (Zimbabwe)", IsoName: "Tsonga", IsoAlpha2Code: "ts", IsoAlpha3Code: "tso"}, + {LanguageID: 889, Symbol: "AJA", EnglishName: "Azerbaijani (Arabic)", VernacularName: "آذربايجانى (عربى)", IsoName: "South Azerbaijani", IsoAlpha2Code: " ", IsoAlpha3Code: "azb"}, + {LanguageID: 890, Symbol: "CSC", EnglishName: "Corsican", VernacularName: "Corsu", IsoName: "Corsican", IsoAlpha2Code: "co", IsoAlpha3Code: "cos"}, + {LanguageID: 891, Symbol: "KMN", EnglishName: "Khmer (Northern)", VernacularName: "ขแมร์เสียม", IsoName: "Northern Khmer", IsoAlpha2Code: " ", IsoAlpha3Code: "kxm"}, + {LanguageID: 892, Symbol: "NKY", EnglishName: "Nkoya", VernacularName: "", IsoName: "Nkoya", IsoAlpha2Code: " ", IsoAlpha3Code: "nka"}, + {LanguageID: 893, Symbol: "QIB", EnglishName: "Quichua (Chibuleo)", VernacularName: "quichua (chibuleo)", IsoName: "Salasaca Highland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qxl"}, + {LanguageID: 894, Symbol: "SLN", EnglishName: "Namibian Sign Language", VernacularName: "", IsoName: "Namibian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "nbs"}, + {LanguageID: 895, Symbol: "BSH", EnglishName: "Bushi", VernacularName: "Kibushi", IsoName: "Bushi", IsoAlpha2Code: " ", IsoAlpha3Code: "buc"}, + {LanguageID: 896, Symbol: "OTE", EnglishName: "Otomi (Eastern Highland)", VernacularName: "ñuhü", IsoName: "Eastern Highland Otomi", IsoAlpha2Code: " ", IsoAlpha3Code: "otm"}, + {LanguageID: 897, Symbol: "IAA", EnglishName: "Iaai", VernacularName: "", IsoName: "Iaai", IsoAlpha2Code: " ", IsoAlpha3Code: "iai"}, + {LanguageID: 898, Symbol: "KWN", EnglishName: "Numèè (Kwenyii)", VernacularName: "Kwényï", IsoName: "Numee", IsoAlpha2Code: " ", IsoAlpha3Code: "kdk"}, + {LanguageID: 899, Symbol: "YNG", EnglishName: "Yuanga", VernacularName: "", IsoName: "Yuaga", IsoAlpha2Code: " ", IsoAlpha3Code: "nua"}, + {LanguageID: 900, Symbol: "CMU", EnglishName: "Cemuhî", VernacularName: "", IsoName: "Cemuhî", IsoAlpha2Code: " ", IsoAlpha3Code: "cam"}, + {LanguageID: 901, Symbol: "EZM", EnglishName: "English (Zambia)", VernacularName: "", IsoName: "English", IsoAlpha2Code: "en", IsoAlpha3Code: "eng"}, + {LanguageID: 902, Symbol: "AZG", EnglishName: "Amuzgo (Oaxaca)", VernacularName: "", IsoName: "San Pedro Amuzgos Amuzgo", IsoAlpha2Code: " ", IsoAlpha3Code: "azg"}, + {LanguageID: 903, Symbol: "CRS", EnglishName: "Central African Republic Sign Language", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 904, Symbol: "LSI", EnglishName: "Ivorian Sign Language", VernacularName: "Langue des signes ivoirienne", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 905, Symbol: "RML", EnglishName: "Romany (Albania)", VernacularName: "rome (shqipëri)", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 906, Symbol: "HSV", EnglishName: "Huastec (Veracruz)", VernacularName: "tének de Veracruz", IsoName: "Huastec", IsoAlpha2Code: " ", IsoAlpha3Code: "hus"}, + {LanguageID: 907, Symbol: "SGH", EnglishName: "Shughni", VernacularName: "шуғнонӣ", IsoName: "Shughni", IsoAlpha2Code: " ", IsoAlpha3Code: "sgh"}, + {LanguageID: 908, Symbol: "NKN", EnglishName: "Kyangonde", VernacularName: "Kyangonde", IsoName: "Nyakyusa-Ngonde", IsoAlpha2Code: " ", IsoAlpha3Code: "nyy"}, + {LanguageID: 909, Symbol: "MNO", EnglishName: "Mano", VernacularName: "Máá", IsoName: "Mann", IsoAlpha2Code: " ", IsoAlpha3Code: "mev"}, + {LanguageID: 910, Symbol: "KRK", EnglishName: "Karakalpak", VernacularName: "қарақалпақ", IsoName: "Kara-Kalpak", IsoAlpha2Code: " ", IsoAlpha3Code: "kaa"}, + {LanguageID: 911, Symbol: "RMR", EnglishName: "Romany (Romania)", VernacularName: "Rromani (România)", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 912, Symbol: "UBM", EnglishName: "Uab Meto", VernacularName: "Timor Dawan", IsoName: "Uab Meto", IsoAlpha2Code: " ", IsoAlpha3Code: "aoz"}, + {LanguageID: 913, Symbol: "SAL", EnglishName: "Saluan", VernacularName: "", IsoName: "Saluan", IsoAlpha2Code: " ", IsoAlpha3Code: "loe"}, + {LanguageID: 914, Symbol: "AMA", EnglishName: "Mamasa", VernacularName: "Mamasa", IsoName: "Mamasa", IsoAlpha2Code: " ", IsoAlpha3Code: "mqj"}, + {LanguageID: 915, Symbol: "KRY", EnglishName: "Kryashen", VernacularName: "керәшен татар", IsoName: "Tatar", IsoAlpha2Code: "tt", IsoAlpha3Code: "tat"}, + {LanguageID: 916, Symbol: "SPL", EnglishName: "Sepulana", VernacularName: "Sepulana", IsoName: "Pedi", IsoAlpha2Code: " ", IsoAlpha3Code: "nso"}, + {LanguageID: 917, Symbol: "DDL", EnglishName: "Dida (Lakota)", VernacularName: "", IsoName: "Lakota Dida", IsoAlpha2Code: " ", IsoAlpha3Code: "dic"}, + {LanguageID: 918, Symbol: "CKE", EnglishName: "Cherokee", VernacularName: "ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ", IsoName: "Cherokee", IsoAlpha2Code: " ", IsoAlpha3Code: "chr"}, + {LanguageID: 919, Symbol: "GCR", EnglishName: "Guadeloupean Creole", VernacularName: "Kréyòl Gwadloup", IsoName: "Guadeloupean Creole French", IsoAlpha2Code: " ", IsoAlpha3Code: "gcf"}, + {LanguageID: 920, Symbol: "GNC", EnglishName: "Guianese Creole", VernacularName: "Kréyòl gwiyanè", IsoName: "Guianese Creole French", IsoAlpha2Code: " ", IsoAlpha3Code: "gcr"}, + {LanguageID: 921, Symbol: "YU", EnglishName: "Central Alaskan Yupik", VernacularName: "", IsoName: "Central Yupik", IsoAlpha2Code: " ", IsoAlpha3Code: "esu"}, + {LanguageID: 922, Symbol: "QNJ", EnglishName: "Q'anjob'al", VernacularName: "q'anjob'al", IsoName: "Q'anjob'al", IsoAlpha2Code: " ", IsoAlpha3Code: "kjb"}, + {LanguageID: 923, Symbol: "ILA", EnglishName: "Ila", VernacularName: "", IsoName: "Ila", IsoAlpha2Code: " ", IsoAlpha3Code: "ilb"}, + {LanguageID: 924, Symbol: "WNZ", EnglishName: "Chinese (Wenzhounese)", VernacularName: "", IsoName: "Wu Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "wuu"}, + {LanguageID: 925, Symbol: "NGS", EnglishName: "Ngiva (Santa Inés Ahuatempan)", VernacularName: "", IsoName: "Santa Inés Ahuatempan Popoloca", IsoAlpha2Code: " ", IsoAlpha3Code: "pca"}, + {LanguageID: 926, Symbol: "URP", EnglishName: "Uripiv", VernacularName: "Uripiv", IsoName: "Uripiv-Wala-Rano-Atchin", IsoAlpha2Code: " ", IsoAlpha3Code: "upv"}, + {LanguageID: 927, Symbol: "CHH", EnglishName: "Hakka (Taiwan)", VernacularName: "客家話(台灣)", IsoName: "Hakka Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "hak"}, + {LanguageID: 928, Symbol: "HPI", EnglishName: "Hopi", VernacularName: "Hopi", IsoName: "Hopi", IsoAlpha2Code: " ", IsoAlpha3Code: "hop"}, + {LanguageID: 929, Symbol: "MBA", EnglishName: "Moba", VernacularName: "Muaba", IsoName: "Moba", IsoAlpha2Code: " ", IsoAlpha3Code: "mfq"}, + {LanguageID: 930, Symbol: "NGP", EnglishName: "Nigerian Pidgin", VernacularName: "Nigerian Pidgin", IsoName: "Nigerian Pidgin", IsoAlpha2Code: " ", IsoAlpha3Code: "pcm"}, + {LanguageID: 931, Symbol: "OBL", EnglishName: "Obolo", VernacularName: "Obolo", IsoName: "Obolo", IsoAlpha2Code: " ", IsoAlpha3Code: "ann"}, + {LanguageID: 932, Symbol: "SYT", EnglishName: "Saisiyat", VernacularName: "", IsoName: "Saisiyat", IsoAlpha2Code: " ", IsoAlpha3Code: "xsy"}, + {LanguageID: 933, Symbol: "SDQ", EnglishName: "Seediq", VernacularName: "Seediq", IsoName: "Taroko", IsoAlpha2Code: " ", IsoAlpha3Code: "trv"}, + {LanguageID: 934, Symbol: "TSO", EnglishName: "Tsou", VernacularName: "", IsoName: "Tsou", IsoAlpha2Code: " ", IsoAlpha3Code: "tsu"}, + {LanguageID: 935, Symbol: "KSH", EnglishName: "Kashubian", VernacularName: "kaszëbsczi", IsoName: "Kashubian", IsoAlpha2Code: " ", IsoAlpha3Code: "csb"}, + {LanguageID: 936, Symbol: "SSN", EnglishName: "Silesian", VernacularName: "cieszyński", IsoName: "Silesian", IsoAlpha2Code: " ", IsoAlpha3Code: "szl"}, + {LanguageID: 937, Symbol: "TYC", EnglishName: "Talysh (Cyrillic)", VernacularName: "", IsoName: "Talysh", IsoAlpha2Code: " ", IsoAlpha3Code: "tly"}, + {LanguageID: 938, Symbol: "MKL", EnglishName: "Mokilese", VernacularName: "", IsoName: "Mokilese", IsoAlpha2Code: " ", IsoAlpha3Code: "mkj"}, + {LanguageID: 939, Symbol: "KTI", EnglishName: "Koti", VernacularName: "Koti", IsoName: "Koti", IsoAlpha2Code: " ", IsoAlpha3Code: "eko"}, + {LanguageID: 940, Symbol: "MHM", EnglishName: "Makhuwa-Marrevone", VernacularName: "", IsoName: "Makhuwa-Marrevone", IsoAlpha2Code: " ", IsoAlpha3Code: "xmc"}, + {LanguageID: 941, Symbol: "MHS", EnglishName: "Makhuwa-Shirima", VernacularName: "", IsoName: "Makhuwa-Shirima", IsoAlpha2Code: " ", IsoAlpha3Code: "vmk"}, + {LanguageID: 942, Symbol: "MRJ", EnglishName: "Marenje", VernacularName: "", IsoName: "Marenje", IsoAlpha2Code: " ", IsoAlpha3Code: "vmr"}, + {LanguageID: 943, Symbol: "SIR", EnglishName: "Thai (Northern)", VernacularName: "กำเมือง", IsoName: "Northern Thai", IsoAlpha2Code: " ", IsoAlpha3Code: "nod"}, + {LanguageID: 944, Symbol: "SIS", EnglishName: "Thai (Southern)", VernacularName: "ไทย (ใต้)", IsoName: "Southern Thai", IsoAlpha2Code: " ", IsoAlpha3Code: "sou"}, + {LanguageID: 945, Symbol: "SIG", EnglishName: "Thai Song", VernacularName: "", IsoName: "Thai Song", IsoAlpha2Code: " ", IsoAlpha3Code: "soa"}, + {LanguageID: 946, Symbol: "YN", EnglishName: "Yong", VernacularName: "", IsoName: "Yong", IsoAlpha2Code: " ", IsoAlpha3Code: "yno"}, + {LanguageID: 947, Symbol: "RMT", EnglishName: "Romany (Poland)", VernacularName: "romani (Polska Roma)", IsoName: "Baltic Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rml"}, + {LanguageID: 948, Symbol: "FJS", EnglishName: "Fiji Sign Language", VernacularName: "Vosa Vagalu vakaViti", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 949, Symbol: "PLK", EnglishName: "Palikúr", VernacularName: "", IsoName: "Palikúr", IsoAlpha2Code: " ", IsoAlpha3Code: "plu"}, + {LanguageID: 950, Symbol: "MLS", EnglishName: "Maltese Sign Language", VernacularName: "Lingwa tas-Sinjali Maltija", IsoName: "Maltese Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "mdl"}, + {LanguageID: 951, Symbol: "KPN", EnglishName: "Karen (Pwo Northern)", VernacularName: "โผล่ง", IsoName: "Pwo Northern Karen", IsoAlpha2Code: " ", IsoAlpha3Code: "pww"}, + {LanguageID: 952, Symbol: "KHM", EnglishName: "Khmu", VernacularName: "", IsoName: "Khmu", IsoAlpha2Code: " ", IsoAlpha3Code: "kjg"}, + {LanguageID: 953, Symbol: "AJG", EnglishName: "Aja", VernacularName: "Aja", IsoName: "Aja (Benin)", IsoAlpha2Code: " ", IsoAlpha3Code: "ajg"}, + {LanguageID: 954, Symbol: "AWA", EnglishName: "Awa (Cuaiquer)", VernacularName: "", IsoName: "Awa-Cuaiquer", IsoAlpha2Code: " ", IsoAlpha3Code: "kwi"}, + {LanguageID: 955, Symbol: "CGI", EnglishName: "Cogui", VernacularName: "", IsoName: "Cogui", IsoAlpha2Code: " ", IsoAlpha3Code: "kog"}, + {LanguageID: 956, Symbol: "CRE", EnglishName: "Islander Creole English", VernacularName: "", IsoName: "Islander Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "icr"}, + {LanguageID: 957, Symbol: "EMC", EnglishName: "Emberá (Chamí)", VernacularName: "ẽbẽra beɗea chamí", IsoName: "Emberá-Chamí", IsoAlpha2Code: " ", IsoAlpha3Code: "cmi"}, + {LanguageID: 958, Symbol: "EMP", EnglishName: "Emberá (Northern)", VernacularName: "Emberá dóbida", IsoName: "Northern Emberá", IsoAlpha2Code: " ", IsoAlpha3Code: "emp"}, + {LanguageID: 959, Symbol: "FBN", EnglishName: "French (Benin)", VernacularName: "Français (Bénin)", IsoName: "French", IsoAlpha2Code: "fr", IsoAlpha3Code: "fra"}, + {LanguageID: 960, Symbol: "GBM", EnglishName: "Guambiano", VernacularName: "Namtrik", IsoName: "Guambiano", IsoAlpha2Code: " ", IsoAlpha3Code: "gum"}, + {LanguageID: 961, Symbol: "GG", EnglishName: "Gogo", VernacularName: "Cigogo", IsoName: "Gogo", IsoAlpha2Code: " ", IsoAlpha3Code: "gog"}, + {LanguageID: 962, Symbol: "GNA", EnglishName: "Guanano", VernacularName: "", IsoName: "Guanano", IsoAlpha2Code: " ", IsoAlpha3Code: "gvc"}, + {LanguageID: 963, Symbol: "HH", EnglishName: "Hehe", VernacularName: "", IsoName: "Hehe", IsoAlpha2Code: " ", IsoAlpha3Code: "heh"}, + {LanguageID: 964, Symbol: "INB", EnglishName: "Inga", VernacularName: "Inga", IsoName: "Inga", IsoAlpha2Code: " ", IsoAlpha3Code: "inb"}, + {LanguageID: 965, Symbol: "KBV", EnglishName: "Kabuverdianu", VernacularName: "Kabuverdianu", IsoName: "Kabuverdianu", IsoAlpha2Code: " ", IsoAlpha3Code: "kea"}, + {LanguageID: 966, Symbol: "MNS", EnglishName: "Melanesian Sign Language", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 967, Symbol: "NDL", EnglishName: "Ndali", VernacularName: "Ichindali", IsoName: "Ndali", IsoAlpha2Code: " ", IsoAlpha3Code: "ndh"}, + {LanguageID: 968, Symbol: "NFR", EnglishName: "Nafaanra", VernacularName: "", IsoName: "Nafaanra", IsoAlpha2Code: " ", IsoAlpha3Code: "nfr"}, + {LanguageID: 969, Symbol: "PCM", EnglishName: "Pidgin (Cameroon)", VernacularName: "Pidgin for Cameroon", IsoName: "Cameroon Pidgin", IsoAlpha2Code: " ", IsoAlpha3Code: "wes"}, + {LanguageID: 970, Symbol: "SYB", EnglishName: "Sylheti (Roman)", VernacularName: "", IsoName: "Sylheti", IsoAlpha2Code: " ", IsoAlpha3Code: "syl"}, + {LanguageID: 971, Symbol: "TUO", EnglishName: "Tucano", VernacularName: "", IsoName: "Tucano", IsoAlpha2Code: " ", IsoAlpha3Code: "tuo"}, + {LanguageID: 972, Symbol: "CHF", EnglishName: "Chinese (Fuzhounese)", VernacularName: "", IsoName: "Min Dong Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "cdo"}, + {LanguageID: 973, Symbol: "CHD", EnglishName: "Teochew", VernacularName: "潮州", IsoName: "Min Nan Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "nan"}, + {LanguageID: 974, Symbol: "HMN", EnglishName: "Hmong (Green)", VernacularName: "Moob Ntsuab", IsoName: "Hmong Njua", IsoAlpha2Code: " ", IsoAlpha3Code: "hnj"}, + {LanguageID: 975, Symbol: "KMB", EnglishName: "Kambera", VernacularName: "Kambera (Sumba Timur)", IsoName: "Kambera", IsoAlpha2Code: " ", IsoAlpha3Code: "xbr"}, + {LanguageID: 976, Symbol: "KLE", EnglishName: "Kele", VernacularName: "Lokele", IsoName: "Kele (Democratic Republic of Congo)", IsoAlpha2Code: " ", IsoAlpha3Code: "khy"}, + {LanguageID: 977, Symbol: "KUY", EnglishName: "Kuy", VernacularName: "", IsoName: "Kuy", IsoAlpha2Code: " ", IsoAlpha3Code: "kdt"}, + {LanguageID: 978, Symbol: "LGO", EnglishName: "Logo", VernacularName: "Logoti", IsoName: "Logo", IsoAlpha2Code: " ", IsoAlpha3Code: "log"}, + {LanguageID: 979, Symbol: "MHL", EnglishName: "Maithili", VernacularName: "मैथिली", IsoName: "Maithili", IsoAlpha2Code: " ", IsoAlpha3Code: "mai"}, + {LanguageID: 980, Symbol: "MGB", EnglishName: "Mangbetu", VernacularName: "Némangbetu", IsoName: "Mangbetu", IsoAlpha2Code: " ", IsoAlpha3Code: "mdj"}, + {LanguageID: 981, Symbol: "PHN", EnglishName: "Pehuenche", VernacularName: "chedungun (pewenche)", IsoName: "Mapudungun", IsoAlpha2Code: " ", IsoAlpha3Code: "arn"}, + {LanguageID: 982, Symbol: "SRG", EnglishName: "Surigaonon", VernacularName: "Surigaonon", IsoName: "Surigaonon", IsoAlpha2Code: " ", IsoAlpha3Code: "sgd"}, + {LanguageID: 983, Symbol: "XSW", EnglishName: "Swiss German", VernacularName: "Schweizerdeutsch", IsoName: "Swiss German", IsoAlpha2Code: " ", IsoAlpha3Code: "gsw"}, + {LanguageID: 984, Symbol: "TBW", EnglishName: "Taabwa", VernacularName: "", IsoName: "Taabwa", IsoAlpha2Code: " ", IsoAlpha3Code: "tap"}, + {LanguageID: 985, Symbol: "TJU", EnglishName: "Tajiki (Samarkand)", VernacularName: "тоҷикӣ (Самарқанд)", IsoName: "Tajik", IsoAlpha2Code: "tg", IsoAlpha3Code: "tgk"}, + {LanguageID: 986, Symbol: "TLR", EnglishName: "Tamil (Roman)", VernacularName: "Thamil (Rōman)", IsoName: "Tamil", IsoAlpha2Code: "ta", IsoAlpha3Code: "tam"}, + {LanguageID: 987, Symbol: "WJW", EnglishName: "Wejewa", VernacularName: "Wejewa (Sumba Barat)", IsoName: "Wejewa", IsoAlpha2Code: " ", IsoAlpha3Code: "wew"}, + {LanguageID: 988, Symbol: "HWU", EnglishName: "Hawu", VernacularName: "Sabu", IsoName: "Sabu", IsoAlpha2Code: " ", IsoAlpha3Code: "hvn"}, + {LanguageID: 989, Symbol: "KNM", EnglishName: "Kunama", VernacularName: "Kunama", IsoName: "Kunama", IsoAlpha2Code: " ", IsoAlpha3Code: "kun"}, + {LanguageID: 990, Symbol: "USL", EnglishName: "Ugandan Sign Language", VernacularName: "", IsoName: "Ugandan Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "ugn"}, + {LanguageID: 991, Symbol: "AEY", EnglishName: "Arabic (Egypt)", VernacularName: "العربية (اللهجة المصرية)", IsoName: "Egyptian Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "arz"}, + {LanguageID: 992, Symbol: "TKL", EnglishName: "Turkish Sign Language", VernacularName: "Türk İşaret Dili", IsoName: "Turkish Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "tsm"}, + {LanguageID: 993, Symbol: "KRB", EnglishName: "Armenian (Eastern dialect)", VernacularName: "Հայերեն (արևելյան բարբառ)", IsoName: "Armenian", IsoAlpha2Code: "hy", IsoAlpha3Code: "hye"}, + {LanguageID: 994, Symbol: "TTR", EnglishName: "Tat (Roman)", VernacularName: "", IsoName: "Muslim Tat", IsoAlpha2Code: " ", IsoAlpha3Code: "ttt"}, + {LanguageID: 995, Symbol: "TTC", EnglishName: "Tat (Cyrillic)", VernacularName: "", IsoName: "Muslim Tat", IsoAlpha2Code: " ", IsoAlpha3Code: "ttt"}, + {LanguageID: 996, Symbol: "CGM", EnglishName: "Changana (Mozambique)", VernacularName: "", IsoName: "Tsonga", IsoAlpha2Code: "ts", IsoAlpha3Code: "tso"}, + {LanguageID: 997, Symbol: "FGN", EnglishName: "Fang", VernacularName: "Fang", IsoName: "Fang (Equatorial Guinea)", IsoAlpha2Code: " ", IsoAlpha3Code: "fan"}, + {LanguageID: 998, Symbol: "CMT", EnglishName: "Chin (Matu)", VernacularName: "Chin (Matu)", IsoName: "Nga La", IsoAlpha2Code: " ", IsoAlpha3Code: "hlt"}, + {LanguageID: 999, Symbol: "MTC", EnglishName: "Martiniquan Creole", VernacularName: "Kréyol Matinik", IsoName: "Guadeloupean Creole French", IsoAlpha2Code: " ", IsoAlpha3Code: "gcf"}, + {LanguageID: 1000, Symbol: "EBR", EnglishName: "Ebrié", VernacularName: "", IsoName: "Ebrié", IsoAlpha2Code: " ", IsoAlpha3Code: "ebr"}, + {LanguageID: 1001, Symbol: "RME", EnglishName: "Romany (Serbia)", VernacularName: "Romane (Srbija)", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 1002, Symbol: "KRM", EnglishName: "Krumen (Pye)", VernacularName: "", IsoName: "Pye Krumen", IsoAlpha2Code: " ", IsoAlpha3Code: "pye"}, + {LanguageID: 1003, Symbol: "GBN", EnglishName: "Gban", VernacularName: "", IsoName: "Gagu", IsoAlpha2Code: " ", IsoAlpha3Code: "ggu"}, + {LanguageID: 1004, Symbol: "TIS", EnglishName: "Tiwa (Southern)", VernacularName: "", IsoName: "Southern Tiwa", IsoAlpha2Code: " ", IsoAlpha3Code: "tix"}, + {LanguageID: 1005, Symbol: "LCE", EnglishName: "Limón Creole", VernacularName: "", IsoName: "Jamaican Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "jam"}, + {LanguageID: 1006, Symbol: "SCN", EnglishName: "Sicilian", VernacularName: "", IsoName: "Sicilian", IsoAlpha2Code: " ", IsoAlpha3Code: "scn"}, + {LanguageID: 1007, Symbol: "HRV", EnglishName: "Haryanvi", VernacularName: "", IsoName: "Haryanvi", IsoAlpha2Code: " ", IsoAlpha3Code: "bgc"}, + {LanguageID: 1008, Symbol: "CHK", EnglishName: "Chinese (Yunnanese)", VernacularName: "Chinese (Yunnanese)", IsoName: "Mandarin Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "cmn"}, + {LanguageID: 1009, Symbol: "CHG", EnglishName: "Chinese (Shanghainese)", VernacularName: "", IsoName: "Wu Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "wuu"}, + {LanguageID: 1010, Symbol: "SVL", EnglishName: "Svan (Lower)", VernacularName: "ჩუბე ლუშვანუ", IsoName: "Svan", IsoAlpha2Code: " ", IsoAlpha3Code: "sva"}, + {LanguageID: 1011, Symbol: "CGS", EnglishName: "Congolese Sign Language", VernacularName: "Langue des signes congolaise", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1012, Symbol: "AYI", EnglishName: "Anyin (Indenie)", VernacularName: "", IsoName: "Anyin", IsoAlpha2Code: " ", IsoAlpha3Code: "any"}, + {LanguageID: 1013, Symbol: "GHM", EnglishName: "Ghomálá'", VernacularName: "Bandjoun-Baham", IsoName: "Ghomálá'", IsoAlpha2Code: " ", IsoAlpha3Code: "bbj"}, + {LanguageID: 1014, Symbol: "FFE", EnglishName: "Fe'fe'", VernacularName: "Bafang", IsoName: "Fe'fe'", IsoAlpha2Code: " ", IsoAlpha3Code: "fmp"}, + {LanguageID: 1015, Symbol: "BBA", EnglishName: "Bimoba", VernacularName: "", IsoName: "Bimoba", IsoAlpha2Code: " ", IsoAlpha3Code: "bim"}, + {LanguageID: 1016, Symbol: "SSA", EnglishName: "Sesotho (South Africa)", VernacularName: "", IsoName: "Southern Sotho", IsoAlpha2Code: "st", IsoAlpha3Code: "sot"}, + {LanguageID: 1017, Symbol: "NGE", EnglishName: "Ngemba", VernacularName: "", IsoName: "Ngemba", IsoAlpha2Code: " ", IsoAlpha3Code: "nge"}, + {LanguageID: 1018, Symbol: "SIH", EnglishName: "Phu Thai", VernacularName: "ภูไท", IsoName: "Phu Thai", IsoAlpha2Code: " ", IsoAlpha3Code: "pht"}, + {LanguageID: 1019, Symbol: "SIK", EnglishName: "Thai (Korat)", VernacularName: "", IsoName: "Thai", IsoAlpha2Code: "th", IsoAlpha3Code: "tha"}, + {LanguageID: 1020, Symbol: "SHD", EnglishName: "Santhali (Devanagari)", VernacularName: "", IsoName: "Santali", IsoAlpha2Code: " ", IsoAlpha3Code: "sat"}, + {LanguageID: 1021, Symbol: "SHR", EnglishName: "Santhali (Roman)", VernacularName: "", IsoName: "Santali", IsoAlpha2Code: " ", IsoAlpha3Code: "sat"}, + {LanguageID: 1022, Symbol: "TBT", EnglishName: "Tibetan", VernacularName: "", IsoName: "Tibetan", IsoAlpha2Code: "bo", IsoAlpha3Code: "bod"}, + {LanguageID: 1023, Symbol: "NMB", EnglishName: "Ngiemboon", VernacularName: "Ngiemboon", IsoName: "Ngiemboon", IsoAlpha2Code: " ", IsoAlpha3Code: "nnh"}, + {LanguageID: 1024, Symbol: "RMK", EnglishName: "Romany (Kalderash, Russia)", VernacularName: "хомани (котлярско, Хусыя)", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1025, Symbol: "RMV", EnglishName: "Romany (Vlax, Russia)", VernacularName: "романи (влахитско, Россия)", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1026, Symbol: "BDG", EnglishName: "Badaga", VernacularName: "படகா", IsoName: "Badaga", IsoAlpha2Code: " ", IsoAlpha3Code: "bfq"}, + {LanguageID: 1027, Symbol: "TSM", EnglishName: "Tsimané", VernacularName: "", IsoName: "Tsimané", IsoAlpha2Code: " ", IsoAlpha3Code: "cas"}, + {LanguageID: 1028, Symbol: "IGN", EnglishName: "Ignaciano", VernacularName: "", IsoName: "Ignaciano", IsoAlpha2Code: " ", IsoAlpha3Code: "ign"}, + {LanguageID: 1029, Symbol: "GRY", EnglishName: "Guarayu", VernacularName: "", IsoName: "Guarayu", IsoAlpha2Code: " ", IsoAlpha3Code: "gyr"}, + {LanguageID: 1030, Symbol: "CHQ", EnglishName: "Chiquitano", VernacularName: "", IsoName: "Chiquitano", IsoAlpha2Code: " ", IsoAlpha3Code: "cax"}, + {LanguageID: 1031, Symbol: "BRW", EnglishName: "Barwe", VernacularName: "", IsoName: "Barwe", IsoAlpha2Code: " ", IsoAlpha3Code: "bwg"}, + {LanguageID: 1032, Symbol: "RMX", EnglishName: "Romany (Germany)", VernacularName: "Romanes (Sinti)", IsoName: "Sinte Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmo"}, + {LanguageID: 1033, Symbol: "TTB", EnglishName: "Tetun Belu", VernacularName: "Tetun Belu", IsoName: "Tetum", IsoAlpha2Code: " ", IsoAlpha3Code: "tet"}, + {LanguageID: 1034, Symbol: "PMO", EnglishName: "Pamona", VernacularName: "Pamona", IsoName: "Pamona", IsoAlpha2Code: " ", IsoAlpha3Code: "pmf"}, + {LanguageID: 1035, Symbol: "KEI", EnglishName: "Kei", VernacularName: "Kei", IsoName: "Kei", IsoAlpha2Code: " ", IsoAlpha3Code: "kei"}, + {LanguageID: 1036, Symbol: "TII", EnglishName: "Tii", VernacularName: "Rote Tii", IsoName: "Tii", IsoAlpha2Code: " ", IsoAlpha3Code: "txq"}, + {LanguageID: 1037, Symbol: "NNS", EnglishName: "Nigerian Sign Language", VernacularName: "Nigerian Sign Language", IsoName: "Nigerian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "nsi"}, + {LanguageID: 1038, Symbol: "SHS", EnglishName: "Shuswap", VernacularName: "", IsoName: "Shuswap", IsoAlpha2Code: " ", IsoAlpha3Code: "shs"}, + {LanguageID: 1039, Symbol: "QCC", EnglishName: "Quichua (Cañar)", VernacularName: "quichua (cañar)", IsoName: "Cañar Highland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qxr"}, + {LanguageID: 1040, Symbol: "QCS", EnglishName: "Quichua (Salasaca)", VernacularName: "quichua (Salasaca)", IsoName: "Salasaca Highland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qxl"}, + {LanguageID: 1041, Symbol: "NML", EnglishName: "Ngombale", VernacularName: "Babadjou", IsoName: "Ngombale", IsoAlpha2Code: " ", IsoAlpha3Code: "nla"}, + {LanguageID: 1042, Symbol: "KWS", EnglishName: "Kwasio", VernacularName: "Kwasio", IsoName: "Kwasio", IsoAlpha2Code: " ", IsoAlpha3Code: "nmg"}, + {LanguageID: 1043, Symbol: "ESL", EnglishName: "Ethiopian Sign Language", VernacularName: "የኢትዮጵያ ምልክት ቋንቋ", IsoName: "Ethiopian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "eth"}, + {LanguageID: 1044, Symbol: "NDD", EnglishName: "Nda'nda'", VernacularName: "", IsoName: "Nda'nda'", IsoAlpha2Code: " ", IsoAlpha3Code: "nnz"}, + {LanguageID: 1045, Symbol: "TKN", EnglishName: "Tokano", VernacularName: "", IsoName: "Tokano", IsoAlpha2Code: " ", IsoAlpha3Code: "zuh"}, + {LanguageID: 1046, Symbol: "TWL", EnglishName: "Tawala", VernacularName: "", IsoName: "Tawala", IsoAlpha2Code: " ", IsoAlpha3Code: "tbo"}, + {LanguageID: 1047, Symbol: "URI", EnglishName: "Uri", VernacularName: "", IsoName: "Uri", IsoAlpha2Code: " ", IsoAlpha3Code: "uvh"}, + {LanguageID: 1048, Symbol: "WDU", EnglishName: "Wedau", VernacularName: "", IsoName: "Wedau", IsoAlpha2Code: " ", IsoAlpha3Code: "wed"}, + {LanguageID: 1049, Symbol: "KDA", EnglishName: "Kunda", VernacularName: "", IsoName: "Kunda", IsoAlpha2Code: " ", IsoAlpha3Code: "kdn"}, + {LanguageID: 1050, Symbol: "KNG", EnglishName: "Kanggape", VernacularName: "", IsoName: "Kanggape", IsoAlpha2Code: " ", IsoAlpha3Code: "igm"}, + {LanguageID: 1051, Symbol: "MIA", EnglishName: "Maia", VernacularName: "", IsoName: "Maia", IsoAlpha2Code: " ", IsoAlpha3Code: "sks"}, + {LanguageID: 1052, Symbol: "MNG", EnglishName: "Mangseng", VernacularName: "", IsoName: "Mangseng", IsoAlpha2Code: " ", IsoAlpha3Code: "mbh"}, + {LanguageID: 1053, Symbol: "NKI", EnglishName: "Nakanai", VernacularName: "", IsoName: "Nakanai", IsoAlpha2Code: " ", IsoAlpha3Code: "nak"}, + {LanguageID: 1054, Symbol: "SUU", EnglishName: "Suau", VernacularName: "", IsoName: "Suau", IsoAlpha2Code: " ", IsoAlpha3Code: "swp"}, + {LanguageID: 1055, Symbol: "BKN", EnglishName: "Boikin", VernacularName: "", IsoName: "Boikin", IsoAlpha2Code: " ", IsoAlpha3Code: "bzf"}, + {LanguageID: 1056, Symbol: "BWD", EnglishName: "Bwaidoka", VernacularName: "", IsoName: "Bwaidoka", IsoAlpha2Code: " ", IsoAlpha3Code: "bwd"}, + {LanguageID: 1057, Symbol: "ALK", EnglishName: "Alekano", VernacularName: "", IsoName: "Alekano", IsoAlpha2Code: " ", IsoAlpha3Code: "gah"}, + {LanguageID: 1058, Symbol: "MNC", EnglishName: "Mnong (Central)", VernacularName: "Bunong", IsoName: "Central Mnong", IsoAlpha2Code: " ", IsoAlpha3Code: "cmo"}, + {LanguageID: 1059, Symbol: "JVN", EnglishName: "Javanese (Eastern)", VernacularName: "Jawa Timur", IsoName: "Javanese", IsoAlpha2Code: "jv", IsoAlpha3Code: "jav"}, + {LanguageID: 1060, Symbol: "MNK", EnglishName: "Mandinka", VernacularName: "Mandinka", IsoName: "Mandinka", IsoAlpha2Code: " ", IsoAlpha3Code: "mnk"}, + {LanguageID: 1061, Symbol: "MSK", EnglishName: "Muskogee", VernacularName: "", IsoName: "Creek", IsoAlpha2Code: " ", IsoAlpha3Code: "mus"}, + {LanguageID: 1062, Symbol: "ZZN", EnglishName: "Zazaki (Northern)", VernacularName: "", IsoName: "Kirmanjki (individual language)", IsoAlpha2Code: " ", IsoAlpha3Code: "kiu"}, + {LanguageID: 1063, Symbol: "TLS", EnglishName: "Tamil (Spoken)", VernacularName: "", IsoName: "Tamil", IsoAlpha2Code: "ta", IsoAlpha3Code: "tam"}, + {LanguageID: 1064, Symbol: "ARS", EnglishName: "Armenian Sign Language", VernacularName: "Հայերեն ժեստերի լեզու", IsoName: "Armenian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "aen"}, + {LanguageID: 1065, Symbol: "RMU", EnglishName: "Romany (Ukraine)", VernacularName: "", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1066, Symbol: "HKI", EnglishName: "Hakka (Indonesia)", VernacularName: "Cina Khek (Indonesia)", IsoName: "Hakka Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "hak"}, + {LanguageID: 1067, Symbol: "MPG", EnglishName: "Mpumpong", VernacularName: "", IsoName: "Mpongmpong", IsoAlpha2Code: " ", IsoAlpha3Code: "mgg"}, + {LanguageID: 1068, Symbol: "ITW", EnglishName: "Itawit", VernacularName: "Itawit", IsoName: "Itawit", IsoAlpha2Code: " ", IsoAlpha3Code: "itv"}, + {LanguageID: 1069, Symbol: "WAN", EnglishName: "Wan", VernacularName: "", IsoName: "Wan", IsoAlpha2Code: " ", IsoAlpha3Code: "wan"}, + {LanguageID: 1070, Symbol: "ABR", EnglishName: "Abron", VernacularName: "", IsoName: "Abron", IsoAlpha2Code: " ", IsoAlpha3Code: "abr"}, + {LanguageID: 1071, Symbol: "CHC", EnglishName: "Chinese Cantonese (Traditional)", VernacularName: "中文繁體(廣東話)", IsoName: "Yue Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "yue"}, + {LanguageID: 1072, Symbol: "CNS", EnglishName: "Chinese Cantonese (Simplified)", VernacularName: "中文简体(广东话)", IsoName: "Yue Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "yue"}, + {LanguageID: 1073, Symbol: "LMB", EnglishName: "Lambya", VernacularName: "Chilambya", IsoName: "Lambya", IsoAlpha2Code: " ", IsoAlpha3Code: "lai"}, + {LanguageID: 1074, Symbol: "BFI", EnglishName: "Bafia", VernacularName: "bafia (rikpag)", IsoName: "Bafia", IsoAlpha2Code: " ", IsoAlpha3Code: "ksf"}, + {LanguageID: 1075, Symbol: "BTN", EnglishName: "Batanga", VernacularName: "", IsoName: "Batanga", IsoAlpha2Code: " ", IsoAlpha3Code: "bnm"}, + {LanguageID: 1076, Symbol: "ETN", EnglishName: "Eton", VernacularName: "Iton", IsoName: "Eton (Cameroon)", IsoAlpha2Code: " ", IsoAlpha3Code: "eto"}, + {LanguageID: 1077, Symbol: "EWN", EnglishName: "Ewondo", VernacularName: "Ewondo", IsoName: "Ewondo", IsoAlpha2Code: " ", IsoAlpha3Code: "ewo"}, + {LanguageID: 1078, Symbol: "MKA", EnglishName: "Makaa", VernacularName: "Makaa", IsoName: "Makaa", IsoAlpha2Code: " ", IsoAlpha3Code: "mcp"}, + {LanguageID: 1079, Symbol: "BBE", EnglishName: "Bube", VernacularName: "", IsoName: "Bube", IsoAlpha2Code: " ", IsoAlpha3Code: "bvb"}, + {LanguageID: 1080, Symbol: "MYN", EnglishName: "Myene", VernacularName: "", IsoName: "Myene", IsoAlpha2Code: " ", IsoAlpha3Code: "mye"}, + {LanguageID: 1081, Symbol: "NJB", EnglishName: "Njebi", VernacularName: "", IsoName: "Njebi", IsoAlpha2Code: " ", IsoAlpha3Code: "nzb"}, + {LanguageID: 1082, Symbol: "PUN", EnglishName: "Punu", VernacularName: "", IsoName: "Punu", IsoAlpha2Code: " ", IsoAlpha3Code: "puu"}, + {LanguageID: 1083, Symbol: "TWA", EnglishName: "Tewa", VernacularName: "", IsoName: "Tewa (USA)", IsoAlpha2Code: " ", IsoAlpha3Code: "tew"}, + {LanguageID: 1084, Symbol: "JML", EnglishName: "Jamaican Sign Language", VernacularName: "Jamaican Sign Language", IsoName: "Jamaican Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "jls"}, + {LanguageID: 1085, Symbol: "TRF", EnglishName: "Tarifit", VernacularName: "", IsoName: "Tarifit", IsoAlpha2Code: " ", IsoAlpha3Code: "rif"}, + {LanguageID: 1086, Symbol: "PPS", EnglishName: "Popoluca (Sayula)", VernacularName: "", IsoName: "Sayula Popoluca", IsoAlpha2Code: " ", IsoAlpha3Code: "pos"}, + {LanguageID: 1087, Symbol: "CHE", EnglishName: "Chinese (Cantonese)", VernacularName: "", IsoName: "Yue Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "yue"}, + {LanguageID: 1088, Symbol: "NNT", EnglishName: "Nenets", VernacularName: "ненэцяʼ", IsoName: "Nenets", IsoAlpha2Code: " ", IsoAlpha3Code: "yrk"}, + {LanguageID: 1089, Symbol: "SHH", EnglishName: "Shoshoni", VernacularName: "", IsoName: "Shoshoni", IsoAlpha2Code: " ", IsoAlpha3Code: "shh"}, + {LanguageID: 1090, Symbol: "HMS", EnglishName: "Hamshen (Cyrillic)", VernacularName: "һамшенерен (кирилица)", IsoName: "Western Armenian", IsoAlpha2Code: " ", IsoAlpha3Code: "hyw"}, + {LanguageID: 1091, Symbol: "APH", EnglishName: "Apache", VernacularName: "", IsoName: "Western Apache", IsoAlpha2Code: " ", IsoAlpha3Code: "apw"}, + {LanguageID: 1092, Symbol: "BFS", EnglishName: "Bai (Southern)", VernacularName: "", IsoName: "Southern Bai", IsoAlpha2Code: " ", IsoAlpha3Code: "bfs"}, + {LanguageID: 1093, Symbol: "CSN", EnglishName: "Chinese (Sichuanese)", VernacularName: "", IsoName: "Mandarin Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "cmn"}, + {LanguageID: 1094, Symbol: "DYT", EnglishName: "Dayak Tomun", VernacularName: "Dayak Tomun", IsoName: "Malayic Dayak", IsoAlpha2Code: " ", IsoAlpha3Code: "xdy"}, + {LanguageID: 1095, Symbol: "BNJ", EnglishName: "Banjar", VernacularName: "Banjar", IsoName: "Banjar", IsoAlpha2Code: " ", IsoAlpha3Code: "bjn"}, + {LanguageID: 1096, Symbol: "BKK", EnglishName: "Bakoko", VernacularName: "Bakoko", IsoName: "Bakoko", IsoAlpha2Code: " ", IsoAlpha3Code: "bkh"}, + {LanguageID: 1097, Symbol: "TNN", EnglishName: "Tunen", VernacularName: "Banen", IsoName: "Tunen", IsoAlpha2Code: " ", IsoAlpha3Code: "tvu"}, + {LanguageID: 1098, Symbol: "AWN", EnglishName: "Awing", VernacularName: "Awing", IsoName: "Awing", IsoAlpha2Code: " ", IsoAlpha3Code: "azo"}, + {LanguageID: 1099, Symbol: "HMA", EnglishName: "Hamshen (Armenian)", VernacularName: "համշեներեն (հայերեն)", IsoName: "Western Armenian", IsoAlpha2Code: " ", IsoAlpha3Code: "hyw"}, + {LanguageID: 1100, Symbol: "LBM", EnglishName: "Limbum", VernacularName: "Limbum", IsoName: "Limbum", IsoAlpha2Code: " ", IsoAlpha3Code: "lmp"}, + {LanguageID: 1101, Symbol: "BBL", EnglishName: "Bebele", VernacularName: "", IsoName: "Bebele", IsoAlpha2Code: " ", IsoAlpha3Code: "beb"}, + {LanguageID: 1102, Symbol: "MNT", EnglishName: "Montenegrin", VernacularName: "crnogorski", IsoName: "Montenegrin", IsoAlpha2Code: " ", IsoAlpha3Code: "cnr"}, + {LanguageID: 1103, Symbol: "UTE", EnglishName: "Ute", VernacularName: "", IsoName: "Ute-Southern Paiute", IsoAlpha2Code: " ", IsoAlpha3Code: "ute"}, + {LanguageID: 1104, Symbol: "JJU", EnglishName: "Jejueo", VernacularName: "", IsoName: "Jejueo", IsoAlpha2Code: " ", IsoAlpha3Code: "jje"}, + {LanguageID: 1105, Symbol: "RMH", EnglishName: "Romany (Chile)", VernacularName: "", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1106, Symbol: "MGK", EnglishName: "Mengaka", VernacularName: "", IsoName: "Mengaka", IsoAlpha2Code: " ", IsoAlpha3Code: "xmg"}, + {LanguageID: 1107, Symbol: "NGO", EnglishName: "Ngomba", VernacularName: "", IsoName: "Ngomba", IsoAlpha2Code: " ", IsoAlpha3Code: "jgo"}, + {LanguageID: 1108, Symbol: "YBS", EnglishName: "Yambassa", VernacularName: "", IsoName: "Nugunu (Cameroon)", IsoAlpha2Code: " ", IsoAlpha3Code: "yas"}, + {LanguageID: 1109, Symbol: "GNU", EnglishName: "Gounou", VernacularName: "", IsoName: "Nugunu (Cameroon)", IsoAlpha2Code: " ", IsoAlpha3Code: "yas"}, + {LanguageID: 1110, Symbol: "IUR", EnglishName: "Inuktitut (Roman)", VernacularName: "", IsoName: "Inuktitut", IsoAlpha2Code: "iu", IsoAlpha3Code: "iku"}, + {LanguageID: 1111, Symbol: "MTN", EnglishName: "Matengo", VernacularName: "", IsoName: "Matengo", IsoAlpha2Code: " ", IsoAlpha3Code: "mgv"}, + {LanguageID: 1112, Symbol: "FCA", EnglishName: "French (Canada)", VernacularName: "Français (Canada)", IsoName: "French", IsoAlpha2Code: "fr", IsoAlpha3Code: "fra"}, + {LanguageID: 1113, Symbol: "MBO", EnglishName: "Mbo", VernacularName: "Mbo", IsoName: "Mbo (Cameroon)", IsoAlpha2Code: " ", IsoAlpha3Code: "mbo"}, + {LanguageID: 1114, Symbol: "NNF", EnglishName: "Nenets (Forest)", VernacularName: "нешаӈ", IsoName: "Nenets", IsoAlpha2Code: " ", IsoAlpha3Code: "yrk"}, + {LanguageID: 1115, Symbol: "MRH", EnglishName: "Mari (Hill)", VernacularName: "кырык мары", IsoName: "Western Mari", IsoAlpha2Code: " ", IsoAlpha3Code: "mrj"}, + {LanguageID: 1116, Symbol: "KRA", EnglishName: "Koryak", VernacularName: "", IsoName: "Koryak", IsoAlpha2Code: " ", IsoAlpha3Code: "kpy"}, + {LanguageID: 1117, Symbol: "GLE", EnglishName: "Greenlandic (East)", VernacularName: "", IsoName: "Kalaallisut", IsoAlpha2Code: "kl", IsoAlpha3Code: "kal"}, + {LanguageID: 1118, Symbol: "NYG", EnglishName: "Nyengo", VernacularName: "", IsoName: "Nyengo", IsoAlpha2Code: " ", IsoAlpha3Code: "nye"}, + {LanguageID: 1119, Symbol: "MTA", EnglishName: "Meta'", VernacularName: "Meta'", IsoName: "Meta'", IsoAlpha2Code: " ", IsoAlpha3Code: "mgo"}, + {LanguageID: 1120, Symbol: "TZL", EnglishName: "Tanzanian Sign Language", VernacularName: "Lugha ya Alama ya Tanzania", IsoName: "Tanzanian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "tza"}, + {LanguageID: 1121, Symbol: "OMB", EnglishName: "Ombamba", VernacularName: "", IsoName: "Ombamba", IsoAlpha2Code: " ", IsoAlpha3Code: "mbm"}, + {LanguageID: 1122, Symbol: "KGG", EnglishName: "Kaingang", VernacularName: "", IsoName: "Kaingang", IsoAlpha2Code: " ", IsoAlpha3Code: "kgp"}, + {LanguageID: 1123, Symbol: "NGU", EnglishName: "Nhengatu", VernacularName: "Nheengatu", IsoName: "Nhengatu", IsoAlpha2Code: " ", IsoAlpha3Code: "yrl"}, + {LanguageID: 1124, Symbol: "STM", EnglishName: "Sateré-Mawé", VernacularName: "Saterê-Mauê", IsoName: "Sateré-Mawé", IsoAlpha2Code: " ", IsoAlpha3Code: "mav"}, + {LanguageID: 1125, Symbol: "WPH", EnglishName: "Wapishana", VernacularName: "", IsoName: "Wapishana", IsoAlpha2Code: " ", IsoAlpha3Code: "wap"}, + {LanguageID: 1126, Symbol: "MNM", EnglishName: "Manado Malay", VernacularName: "", IsoName: "Manado Malay", IsoAlpha2Code: " ", IsoAlpha3Code: "xmm"}, + {LanguageID: 1127, Symbol: "NVC", EnglishName: "Nivaclé", VernacularName: "nivaĉle", IsoName: "Nivaclé", IsoAlpha2Code: " ", IsoAlpha3Code: "cag"}, + {LanguageID: 1128, Symbol: "MDH", EnglishName: "Medan Hokkien", VernacularName: "Hokkien Medan", IsoName: "Min Nan Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "nan"}, + {LanguageID: 1129, Symbol: "KBE", EnglishName: "Kombe", VernacularName: "", IsoName: "Ngumbi", IsoAlpha2Code: " ", IsoAlpha3Code: "nui"}, + {LanguageID: 1130, Symbol: "KOC", EnglishName: "Korean (China)", VernacularName: "", IsoName: "Korean", IsoAlpha2Code: "ko", IsoAlpha3Code: "kor"}, + {LanguageID: 1131, Symbol: "CRW", EnglishName: "Crow", VernacularName: "", IsoName: "Crow", IsoAlpha2Code: " ", IsoAlpha3Code: "cro"}, + {LanguageID: 1132, Symbol: "PGW", EnglishName: "Pidgin (West Africa)", VernacularName: "Pidgin (West Africa)", IsoName: "Cameroon Pidgin", IsoAlpha2Code: " ", IsoAlpha3Code: "wes"}, + {LanguageID: 1133, Symbol: "RMF", EnglishName: "Romany (France)", VernacularName: "", IsoName: "Sinte Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmo"}, + {LanguageID: 1134, Symbol: "BRM", EnglishName: "Berom", VernacularName: "", IsoName: "Berom", IsoAlpha2Code: " ", IsoAlpha3Code: "bom"}, + {LanguageID: 1135, Symbol: "BUR", EnglishName: "Bura", VernacularName: "Bura", IsoName: "Bura-Pabir", IsoAlpha2Code: " ", IsoAlpha3Code: "bwr"}, + {LanguageID: 1136, Symbol: "EBA", EnglishName: "Ebira", VernacularName: "", IsoName: "Ebira", IsoAlpha2Code: " ", IsoAlpha3Code: "igb"}, + {LanguageID: 1137, Symbol: "EGG", EnglishName: "Eggon", VernacularName: "", IsoName: "Eggon", IsoAlpha2Code: " ", IsoAlpha3Code: "ego"}, + {LanguageID: 1138, Symbol: "EJH", EnglishName: "Ejagham", VernacularName: "Ejagham", IsoName: "Ejagham", IsoAlpha2Code: " ", IsoAlpha3Code: "etu"}, + {LanguageID: 1139, Symbol: "FLN", EnglishName: "Fulfulde (Nigerian)", VernacularName: "", IsoName: "Nigerian Fulfulde", IsoAlpha2Code: " ", IsoAlpha3Code: "fuv"}, + {LanguageID: 1140, Symbol: "IKW", EnglishName: "Ikwere", VernacularName: "", IsoName: "Ikwere", IsoAlpha2Code: " ", IsoAlpha3Code: "ikw"}, + {LanguageID: 1141, Symbol: "KMW", EnglishName: "Kamwe", VernacularName: "", IsoName: "Kamwe", IsoAlpha2Code: " ", IsoAlpha3Code: "hig"}, + {LanguageID: 1142, Symbol: "KNC", EnglishName: "Kanuri (Central)", VernacularName: "", IsoName: "Central Kanuri", IsoAlpha2Code: " ", IsoAlpha3Code: "knc"}, + {LanguageID: 1143, Symbol: "KKR", EnglishName: "Karekare", VernacularName: "", IsoName: "Karekare", IsoAlpha2Code: " ", IsoAlpha3Code: "kai"}, + {LanguageID: 1144, Symbol: "MBM", EnglishName: "Mbembe", VernacularName: "", IsoName: "Cross River Mbembe", IsoAlpha2Code: " ", IsoAlpha3Code: "mfn"}, + {LanguageID: 1145, Symbol: "YLA", EnglishName: "Yala", VernacularName: "Yala", IsoName: "Yala", IsoAlpha2Code: " ", IsoAlpha3Code: "yba"}, + {LanguageID: 1146, Symbol: "OBG", EnglishName: "Dutch (Belgium)", VernacularName: "", IsoName: "Dutch", IsoAlpha2Code: "nl", IsoAlpha3Code: "nld"}, + {LanguageID: 1147, Symbol: "TRW", EnglishName: "Tarahumara (Western)", VernacularName: "tarahumara occidental", IsoName: "Lowland Tarahumara", IsoAlpha2Code: " ", IsoAlpha3Code: "tac"}, + {LanguageID: 1148, Symbol: "LMS", EnglishName: "Lamnso'", VernacularName: "", IsoName: "Lamnso'", IsoAlpha2Code: " ", IsoAlpha3Code: "lns"}, + {LanguageID: 1149, Symbol: "ABJ", EnglishName: "Abidji", VernacularName: "", IsoName: "Abidji", IsoAlpha2Code: " ", IsoAlpha3Code: "abi"}, + {LanguageID: 1150, Symbol: "AUR", EnglishName: "Abure", VernacularName: "", IsoName: "Abure", IsoAlpha2Code: " ", IsoAlpha3Code: "abu"}, + {LanguageID: 1151, Symbol: "ADK", EnglishName: "Adioukrou", VernacularName: "", IsoName: "Adioukrou", IsoAlpha2Code: " ", IsoAlpha3Code: "adj"}, + {LanguageID: 1152, Symbol: "KLB", EnglishName: "Kulango (Bondoukou)", VernacularName: "", IsoName: "Bondoukou Kulango", IsoAlpha2Code: " ", IsoAlpha3Code: "kzc"}, + {LanguageID: 1153, Symbol: "LBI", EnglishName: "Lobi", VernacularName: "", IsoName: "Lobi", IsoAlpha2Code: " ", IsoAlpha3Code: "lob"}, + {LanguageID: 1154, Symbol: "RWS", EnglishName: "Rwandan Sign Language", VernacularName: "Ururimi rw'amarenga yo mu Rwanda", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1155, Symbol: "SMS", EnglishName: "Samoan Sign Language", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1156, Symbol: "CGG", EnglishName: "Chiga", VernacularName: "Orukiga", IsoName: "Chiga", IsoAlpha2Code: " ", IsoAlpha3Code: "cgg"}, + {LanguageID: 1157, Symbol: "HVU", EnglishName: "Havu", VernacularName: "Ekihavu", IsoName: "Havu", IsoAlpha2Code: " ", IsoAlpha3Code: "hav"}, + {LanguageID: 1158, Symbol: "DKS", EnglishName: "Dayak Siang", VernacularName: "", IsoName: "Siang", IsoAlpha2Code: " ", IsoAlpha3Code: "sya"}, + {LanguageID: 1159, Symbol: "MNI", EnglishName: "Mansi", VernacularName: "маньси", IsoName: "Mansi", IsoAlpha2Code: " ", IsoAlpha3Code: "mns"}, + {LanguageID: 1160, Symbol: "DND", EnglishName: "Dendi", VernacularName: "", IsoName: "Dendi (Benin)", IsoAlpha2Code: " ", IsoAlpha3Code: "ddn"}, + {LanguageID: 1161, Symbol: "SND", EnglishName: "Senoufo (Djimini)", VernacularName: "", IsoName: "Djimini Senoufo", IsoAlpha2Code: " ", IsoAlpha3Code: "dyi"}, + {LanguageID: 1162, Symbol: "CTI", EnglishName: "Chorote (Iyojwa'ja)", VernacularName: "chorote (iyojwa'ja)", IsoName: "Iyojwa'ja Chorote", IsoAlpha2Code: " ", IsoAlpha3Code: "crt"}, + {LanguageID: 1163, Symbol: "ARQ", EnglishName: "Arabic (Iraq)", VernacularName: "العربية (اللهجة\u200f \u200fالعراقية)\u200f", IsoName: "Mesopotamian Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "acm"}, + {LanguageID: 1164, Symbol: "AJD", EnglishName: "Arabic (Jordan)", VernacularName: "العربية (اللهجة\u200f \u200fالاردنية)\u200f", IsoName: "South Levantine Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "ajp"}, + {LanguageID: 1165, Symbol: "ASR", EnglishName: "Arabic (Syria)", VernacularName: "العربية (اللهجة\u200f \u200fالسورية)\u200f", IsoName: "North Levantine Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "apc"}, + {LanguageID: 1166, Symbol: "GNB", EnglishName: "Gun (Benin)", VernacularName: "", IsoName: "Gun", IsoAlpha2Code: " ", IsoAlpha3Code: "guw"}, + {LanguageID: 1167, Symbol: "CST", EnglishName: "Cora (Santa Teresa)", VernacularName: "", IsoName: "Santa Teresa Cora", IsoAlpha2Code: " ", IsoAlpha3Code: "cok"}, + {LanguageID: 1168, Symbol: "TWD", EnglishName: "Teochew (Indonesia)", VernacularName: "", IsoName: "Min Nan Chinese", IsoAlpha2Code: " ", IsoAlpha3Code: "nan"}, + {LanguageID: 1169, Symbol: "MTS", EnglishName: "Mauritian Sign Language", VernacularName: "", IsoName: "Mauritian Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "lsy"}, + {LanguageID: 1170, Symbol: "LTN", EnglishName: "Alsatian", VernacularName: "", IsoName: "Swiss German", IsoAlpha2Code: " ", IsoAlpha3Code: "gsw"}, + {LanguageID: 1171, Symbol: "CQC", EnglishName: "Cakchiquel (Central)", VernacularName: "Kaqchikel (Chimaltenango)", IsoName: "Kaqchikel", IsoAlpha2Code: " ", IsoAlpha3Code: "cak"}, + {LanguageID: 1172, Symbol: "CQE", EnglishName: "Cakchiquel (Eastern)", VernacularName: "", IsoName: "Kaqchikel", IsoAlpha2Code: " ", IsoAlpha3Code: "cak"}, + {LanguageID: 1173, Symbol: "CQS", EnglishName: "Cakchiquel (Santa María de Jesús)", VernacularName: "", IsoName: "Kaqchikel", IsoAlpha2Code: " ", IsoAlpha3Code: "cak"}, + {LanguageID: 1174, Symbol: "DGI", EnglishName: "Dogrib", VernacularName: "", IsoName: "Dogrib", IsoAlpha2Code: " ", IsoAlpha3Code: "dgr"}, + {LanguageID: 1175, Symbol: "CRT", EnglishName: "Cree Southern East", VernacularName: "", IsoName: "Southern East Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crj"}, + {LanguageID: 1176, Symbol: "SWS", EnglishName: "Swazi Sign Language", VernacularName: "Swazi Sign Language", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1177, Symbol: "WSL", EnglishName: "Botswana Sign Language", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1178, Symbol: "BLB", EnglishName: "Bisa (Lebir)", VernacularName: "Bɩsa", IsoName: "Bissa", IsoAlpha2Code: " ", IsoAlpha3Code: "bib"}, + {LanguageID: 1179, Symbol: "OSC", EnglishName: "Ossetian (Chsan)", VernacularName: "", IsoName: "Ossetian", IsoAlpha2Code: "os", IsoAlpha3Code: "oss"}, + {LanguageID: 1180, Symbol: "OSK", EnglishName: "Ossetian (Kudar)", VernacularName: "", IsoName: "Ossetian", IsoAlpha2Code: "os", IsoAlpha3Code: "oss"}, + {LanguageID: 1181, Symbol: "MWN", EnglishName: "Mwani", VernacularName: "", IsoName: "Mwani", IsoAlpha2Code: " ", IsoAlpha3Code: "wmw"}, + {LanguageID: 1182, Symbol: "MKM", EnglishName: "Makhuwa-Moniga", VernacularName: "", IsoName: "Makhuwa-Moniga", IsoAlpha2Code: " ", IsoAlpha3Code: "mhm"}, + {LanguageID: 1183, Symbol: "PHM", EnglishName: "Phimbi", VernacularName: "Chiphimbi", IsoName: "Phimbi", IsoAlpha2Code: " ", IsoAlpha3Code: "phm"}, + {LanguageID: 1184, Symbol: "TKW", EnglishName: "Takwane", VernacularName: "", IsoName: "Takwane", IsoAlpha2Code: " ", IsoAlpha3Code: "tke"}, + {LanguageID: 1185, Symbol: "KKL", EnglishName: "Kokola", VernacularName: "", IsoName: "Kokola", IsoAlpha2Code: " ", IsoAlpha3Code: "kzn"}, + {LanguageID: 1186, Symbol: "TWR", EnglishName: "Tawara", VernacularName: "", IsoName: "Tawara", IsoAlpha2Code: " ", IsoAlpha3Code: "twl"}, + {LanguageID: 1187, Symbol: "RMM", EnglishName: "Romany (Moldova) Roman", VernacularName: "цыганский (влашский, Молдова)", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1188, Symbol: "MXE", EnglishName: "Mixtec (Mixtepec)", VernacularName: "", IsoName: "Mixtepec Mixtec", IsoAlpha2Code: " ", IsoAlpha3Code: "mix"}, + {LanguageID: 1189, Symbol: "BMN", EnglishName: "Bamun", VernacularName: "Shü Pamom", IsoName: "Bamun", IsoAlpha2Code: " ", IsoAlpha3Code: "bax"}, + {LanguageID: 1190, Symbol: "DTM", EnglishName: "Ditammari", VernacularName: "", IsoName: "Ditammari", IsoAlpha2Code: " ", IsoAlpha3Code: "tbz"}, + {LanguageID: 1191, Symbol: "WMM", EnglishName: "Waama", VernacularName: "", IsoName: "Waama", IsoAlpha2Code: " ", IsoAlpha3Code: "wwa"}, + {LanguageID: 1192, Symbol: "CMS", EnglishName: "Camsá", VernacularName: "", IsoName: "Camsá", IsoAlpha2Code: " ", IsoAlpha3Code: "kbh"}, + {LanguageID: 1193, Symbol: "KRG", EnglishName: "Koreguaje", VernacularName: "", IsoName: "Koreguaje", IsoAlpha2Code: " ", IsoAlpha3Code: "coe"}, + {LanguageID: 1194, Symbol: "CBE", EnglishName: "Cubeo", VernacularName: "", IsoName: "Cubeo", IsoAlpha2Code: " ", IsoAlpha3Code: "cub"}, + {LanguageID: 1195, Symbol: "GBR", EnglishName: "Guayabero", VernacularName: "", IsoName: "Guayabero", IsoAlpha2Code: " ", IsoAlpha3Code: "guo"}, + {LanguageID: 1196, Symbol: "TNC", EnglishName: "Tunebo (Central)", VernacularName: "", IsoName: "Central Tunebo", IsoAlpha2Code: " ", IsoAlpha3Code: "tuf"}, + {LanguageID: 1197, Symbol: "MLY", EnglishName: "Malayo", VernacularName: "", IsoName: "Malayo", IsoAlpha2Code: " ", IsoAlpha3Code: "mbp"}, + {LanguageID: 1198, Symbol: "HTM", EnglishName: "Huitoto (Minica)", VernacularName: "", IsoName: "Minica Huitoto", IsoAlpha2Code: " ", IsoAlpha3Code: "hto"}, + {LanguageID: 1199, Symbol: "ARR", EnglishName: "'Are'are", VernacularName: "", IsoName: "'Are'are", IsoAlpha2Code: " ", IsoAlpha3Code: "alu"}, + {LanguageID: 1200, Symbol: "BGG", EnglishName: "Baeggu", VernacularName: "", IsoName: "Baeggu", IsoAlpha2Code: " ", IsoAlpha3Code: "bvd"}, + {LanguageID: 1201, Symbol: "BLL", EnglishName: "Baelelea", VernacularName: "", IsoName: "Baelelea", IsoAlpha2Code: " ", IsoAlpha3Code: "bvc"}, + {LanguageID: 1202, Symbol: "LNG", EnglishName: "Lengo", VernacularName: "", IsoName: "Lengo", IsoAlpha2Code: " ", IsoAlpha3Code: "lgr"}, + {LanguageID: 1203, Symbol: "DKE", EnglishName: "Duke", VernacularName: "", IsoName: "Duke", IsoAlpha2Code: " ", IsoAlpha3Code: "nke"}, + {LanguageID: 1204, Symbol: "FTK", EnglishName: "Fataleka", VernacularName: "", IsoName: "Fataleka", IsoAlpha2Code: " ", IsoAlpha3Code: "far"}, + {LanguageID: 1205, Symbol: "GLA", EnglishName: "Gela", VernacularName: "", IsoName: "Gela", IsoAlpha2Code: " ", IsoAlpha3Code: "nlg"}, + {LanguageID: 1206, Symbol: "GLL", EnglishName: "Gula'alaa", VernacularName: "", IsoName: "Gula'alaa", IsoAlpha2Code: " ", IsoAlpha3Code: "gmb"}, + {LanguageID: 1207, Symbol: "RNB", EnglishName: "Renell-Bellona", VernacularName: "", IsoName: "Rennell-Bellona", IsoAlpha2Code: " ", IsoAlpha3Code: "mnv"}, + {LanguageID: 1208, Symbol: "GHN", EnglishName: "Ghanongga", VernacularName: "", IsoName: "Ghanongga", IsoAlpha2Code: " ", IsoAlpha3Code: "ghn"}, + {LanguageID: 1209, Symbol: "KUH", EnglishName: "Kahua", VernacularName: "", IsoName: "Kahua", IsoAlpha2Code: " ", IsoAlpha3Code: "agw"}, + {LanguageID: 1210, Symbol: "WLA", EnglishName: "Wala", VernacularName: "", IsoName: "Wala", IsoAlpha2Code: " ", IsoAlpha3Code: "lgl"}, + {LanguageID: 1211, Symbol: "LAU", EnglishName: "Lau", VernacularName: "", IsoName: "Lau", IsoAlpha2Code: " ", IsoAlpha3Code: "llu"}, + {LanguageID: 1212, Symbol: "ONJ", EnglishName: "Ontong Java", VernacularName: "", IsoName: "Ontong Java", IsoAlpha2Code: " ", IsoAlpha3Code: "ojv"}, + {LanguageID: 1213, Symbol: "NLG", EnglishName: "Nalögo", VernacularName: "", IsoName: "Nalögo", IsoAlpha2Code: " ", IsoAlpha3Code: "nlz"}, + {LanguageID: 1214, Symbol: "TKP", EnglishName: "Tikopia", VernacularName: "", IsoName: "Tikopia", IsoAlpha2Code: " ", IsoAlpha3Code: "tkp"}, + {LanguageID: 1215, Symbol: "VRS", EnglishName: "Varisi", VernacularName: "", IsoName: "Varisi", IsoAlpha2Code: " ", IsoAlpha3Code: "vrs"}, + {LanguageID: 1216, Symbol: "MIR", EnglishName: "Manipuri (Roman)", VernacularName: "", IsoName: "Manipuri", IsoAlpha2Code: " ", IsoAlpha3Code: "mni"}, + {LanguageID: 1217, Symbol: "CTW", EnglishName: "Choctaw", VernacularName: "", IsoName: "Choctaw", IsoAlpha2Code: " ", IsoAlpha3Code: "cho"}, + {LanguageID: 1218, Symbol: "RNN", EnglishName: "Romanian (Vlach)", VernacularName: "rumunski (vlaški)", IsoName: "Romanian", IsoAlpha2Code: "ro", IsoAlpha3Code: "ron"}, + {LanguageID: 1219, Symbol: "LWC", EnglishName: "Limba (West-Central)", VernacularName: "", IsoName: "West-Central Limba", IsoAlpha2Code: " ", IsoAlpha3Code: "lia"}, + {LanguageID: 1220, Symbol: "KNO", EnglishName: "Kono", VernacularName: "", IsoName: "Kono (Sierra Leone)", IsoAlpha2Code: " ", IsoAlpha3Code: "kno"}, + {LanguageID: 1221, Symbol: "LGD", EnglishName: "Longuda", VernacularName: "", IsoName: "Longuda", IsoAlpha2Code: " ", IsoAlpha3Code: "lnu"}, + {LanguageID: 1222, Symbol: "RNC", EnglishName: "Romany (Crimea)", VernacularName: "", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 1223, Symbol: "CMK", EnglishName: "Como Karim", VernacularName: "", IsoName: "Como Karim", IsoAlpha2Code: " ", IsoAlpha3Code: "cfg"}, + {LanguageID: 1224, Symbol: "PTN", EnglishName: "Paiute (Northern)", VernacularName: "", IsoName: "Northern Paiute", IsoAlpha2Code: " ", IsoAlpha3Code: "pao"}, + {LanguageID: 1225, Symbol: "NMT", EnglishName: "Nomatsigenga", VernacularName: "", IsoName: "Nomatsiguenga", IsoAlpha2Code: " ", IsoAlpha3Code: "not"}, + {LanguageID: 1226, Symbol: "HWI", EnglishName: "Shawi", VernacularName: "", IsoName: "Chayahuita", IsoAlpha2Code: " ", IsoAlpha3Code: "cbt"}, + {LanguageID: 1227, Symbol: "WMP", EnglishName: "Wampís", VernacularName: "", IsoName: "Huambisa", IsoAlpha2Code: " ", IsoAlpha3Code: "hub"}, + {LanguageID: 1228, Symbol: "QUM", EnglishName: "Quechua (Lambayeque)", VernacularName: "quechua (lambayeque)", IsoName: "Lambayeque Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "quf"}, + {LanguageID: 1229, Symbol: "QUC", EnglishName: "Quechua (Cajamarca)", VernacularName: "", IsoName: "Cajamarca Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "qvc"}, + {LanguageID: 1230, Symbol: "QUS", EnglishName: "Quechua (San Martín)", VernacularName: "", IsoName: "San Martín Quechua", IsoAlpha2Code: " ", IsoAlpha3Code: "qvs"}, + {LanguageID: 1231, Symbol: "DTS", EnglishName: "Dogon (Toro So)", VernacularName: "Dɔgɔn (Tɔrɔ Sɔ)", IsoName: "Toro So Dogon", IsoAlpha2Code: " ", IsoAlpha3Code: "dts"}, + {LanguageID: 1232, Symbol: "MKY", EnglishName: "Mankanya", VernacularName: "", IsoName: "Mankanya", IsoAlpha2Code: " ", IsoAlpha3Code: "knf"}, + {LanguageID: 1233, Symbol: "PPL", EnglishName: "Papel", VernacularName: "Oium", IsoName: "Papel", IsoAlpha2Code: " ", IsoAlpha3Code: "pbo"}, + {LanguageID: 1234, Symbol: "RMI", EnglishName: "Romany (Italy)", VernacularName: "", IsoName: "Sinte Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmo"}, + {LanguageID: 1235, Symbol: "ZPA", EnglishName: "Zapotec (Amatlán)", VernacularName: "", IsoName: "Amatlán Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zpo"}, + {LanguageID: 1236, Symbol: "ZPS", EnglishName: "Zapotec (Santiago Xanica)", VernacularName: "", IsoName: "Santiago Xanica Zapotec", IsoAlpha2Code: " ", IsoAlpha3Code: "zpr"}, + {LanguageID: 1237, Symbol: "BNW", EnglishName: "Baniwa", VernacularName: "", IsoName: "Baniwa", IsoAlpha2Code: " ", IsoAlpha3Code: "bwi"}, + {LanguageID: 1238, Symbol: "NSM", EnglishName: "Nsenga (Mozambique)", VernacularName: "Chinsenga (Mozambique)", IsoName: "Nsenga", IsoAlpha2Code: " ", IsoAlpha3Code: "nse"}, + {LanguageID: 1239, Symbol: "PAO", EnglishName: "Pa'o", VernacularName: "", IsoName: "Pa'o Karen", IsoAlpha2Code: " ", IsoAlpha3Code: "blk"}, + {LanguageID: 1240, Symbol: "TEM", EnglishName: "Tem", VernacularName: "Kotokoli", IsoName: "Tem", IsoAlpha2Code: " ", IsoAlpha3Code: "kdh"}, + {LanguageID: 1241, Symbol: "RVC", EnglishName: "Romany (Moldova) Cyrillic", VernacularName: "", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1242, Symbol: "NHW", EnglishName: "Nahuatl (Western Durango)", VernacularName: "", IsoName: "Western Durango Nahuatl", IsoAlpha2Code: " ", IsoAlpha3Code: "azn"}, + {LanguageID: 1243, Symbol: "TKM", EnglishName: "Turkish (Meskhetian)", VernacularName: "ахыска", IsoName: "Turkish", IsoAlpha2Code: "tr", IsoAlpha3Code: "tur"}, + {LanguageID: 1244, Symbol: "RVK", EnglishName: "Romany (Lovari, Chokeshi)", VernacularName: "", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1245, Symbol: "CPL", EnglishName: "Cha'palaa", VernacularName: "cha’palaa", IsoName: "Chachi", IsoAlpha2Code: " ", IsoAlpha3Code: "cbi"}, + {LanguageID: 1246, Symbol: "HWP", EnglishName: "Hawai'i Pidgin", VernacularName: "Hawai’i Pidgin", IsoName: "Hawai'i Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "hwc"}, + {LanguageID: 1247, Symbol: "KHW", EnglishName: "Kashinawa", VernacularName: "", IsoName: "Cashinahua", IsoAlpha2Code: " ", IsoAlpha3Code: "cbs"}, + {LanguageID: 1248, Symbol: "KPO", EnglishName: "Kayapó", VernacularName: "", IsoName: "Kayapó", IsoAlpha2Code: " ", IsoAlpha3Code: "txu"}, + {LanguageID: 1249, Symbol: "MSS", EnglishName: "Matses", VernacularName: "", IsoName: "Matsés", IsoAlpha2Code: " ", IsoAlpha3Code: "mcf"}, + {LanguageID: 1250, Symbol: "BHJ", EnglishName: "Bhojpuri", VernacularName: "भोजपुरी", IsoName: "Bhojpuri", IsoAlpha2Code: " ", IsoAlpha3Code: "bho"}, + {LanguageID: 1251, Symbol: "MXI", EnglishName: "Mixe (Isthmus)", VernacularName: "", IsoName: "Isthmus Mixe", IsoAlpha2Code: " ", IsoAlpha3Code: "mir"}, + {LanguageID: 1252, Symbol: "MXH", EnglishName: "Mixe (Tlahuitoltepec)", VernacularName: "", IsoName: "Tlahuitoltepec Mixe", IsoAlpha2Code: " ", IsoAlpha3Code: "mxp"}, + {LanguageID: 1253, Symbol: "QIX", EnglishName: "Quichua (Cotopaxi)", VernacularName: "quichua (cotopaxi)", IsoName: "Chimborazo Highland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qug"}, + {LanguageID: 1254, Symbol: "ACS", EnglishName: "Assyro-Chaldean (Silopi)", VernacularName: "", IsoName: "Chaldean Neo-Aramaic", IsoAlpha2Code: " ", IsoAlpha3Code: "cld"}, + {LanguageID: 1255, Symbol: "NMK", EnglishName: "Namakura", VernacularName: "Namakura", IsoName: "Namakura", IsoAlpha2Code: " ", IsoAlpha3Code: "nmk"}, + {LanguageID: 1256, Symbol: "ALG", EnglishName: "Albanian (Gheg)", VernacularName: "", IsoName: "Gheg Albanian", IsoAlpha2Code: " ", IsoAlpha3Code: "aln"}, + {LanguageID: 1257, Symbol: "CDG", EnglishName: "Chedungun (Coast)", VernacularName: "", IsoName: "Mapudungun", IsoAlpha2Code: " ", IsoAlpha3Code: "arn"}, + {LanguageID: 1258, Symbol: "STN", EnglishName: "Sãotomense", VernacularName: "Santome", IsoName: "Sãotomense", IsoAlpha2Code: " ", IsoAlpha3Code: "cri"}, + {LanguageID: 1259, Symbol: "FNB", EnglishName: "Ba", VernacularName: "", IsoName: "Western Fijian", IsoAlpha2Code: " ", IsoAlpha3Code: "wyy"}, + {LanguageID: 1260, Symbol: "FNR", EnglishName: "Ra", VernacularName: "", IsoName: "Fijian", IsoAlpha2Code: "fj", IsoAlpha3Code: "fij"}, + {LanguageID: 1261, Symbol: "HFJ", EnglishName: "Hindi (Fiji)", VernacularName: "", IsoName: "Fiji Hindi", IsoAlpha2Code: " ", IsoAlpha3Code: "hif"}, + {LanguageID: 1262, Symbol: "KDV", EnglishName: "Kadavu", VernacularName: "", IsoName: "Fijian", IsoAlpha2Code: "fj", IsoAlpha3Code: "fij"}, + {LanguageID: 1263, Symbol: "LNN", EnglishName: "Lauan", VernacularName: "", IsoName: "Lauan", IsoAlpha2Code: " ", IsoAlpha3Code: "llx"}, + {LanguageID: 1264, Symbol: "MCT", EnglishName: "Macuata", VernacularName: "", IsoName: "Fijian", IsoAlpha2Code: "fj", IsoAlpha3Code: "fij"}, + {LanguageID: 1265, Symbol: "NDI", EnglishName: "Nadi", VernacularName: "", IsoName: "Fijian", IsoAlpha2Code: "fj", IsoAlpha3Code: "fij"}, + {LanguageID: 1266, Symbol: "NDR", EnglishName: "Nadroga", VernacularName: "", IsoName: "Western Fijian", IsoAlpha2Code: " ", IsoAlpha3Code: "wyy"}, + {LanguageID: 1267, Symbol: "NNR", EnglishName: "Namosi-Naitasiri-Serua", VernacularName: "", IsoName: "Namosi-Naitasiri-Serua", IsoAlpha2Code: " ", IsoAlpha3Code: "bwb"}, + {LanguageID: 1268, Symbol: "BRS", EnglishName: "Burundi Sign Language", VernacularName: "Langue Des Signes Burundaise", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1269, Symbol: "CSR", EnglishName: "Cree Southern East (Roman)", VernacularName: "", IsoName: "Southern East Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crj"}, + {LanguageID: 1270, Symbol: "CSS", EnglishName: "Cree Southern East (Syllabics)", VernacularName: "", IsoName: "Southern East Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crj"}, + {LanguageID: 1271, Symbol: "AYR", EnglishName: "Ayoreo", VernacularName: "", IsoName: "Ayoreo", IsoAlpha2Code: " ", IsoAlpha3Code: "ayo"}, + {LanguageID: 1272, Symbol: "RRL", EnglishName: "Romany (Arli)", VernacularName: "", IsoName: "Balkan Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmn"}, + {LanguageID: 1273, Symbol: "RCK", EnglishName: "Romany (Meçkar)", VernacularName: "", IsoName: "Vlax Romani", IsoAlpha2Code: " ", IsoAlpha3Code: "rmy"}, + {LanguageID: 1274, Symbol: "KDW", EnglishName: "Kadiwéu", VernacularName: "", IsoName: "Kadiwéu", IsoAlpha2Code: " ", IsoAlpha3Code: "kbc"}, + {LanguageID: 1275, Symbol: "KMR", EnglishName: "Kanamarí", VernacularName: "", IsoName: "Kanamarí", IsoAlpha2Code: " ", IsoAlpha3Code: "knm"}, + {LanguageID: 1276, Symbol: "KLN", EnglishName: "Kulina", VernacularName: "", IsoName: "Culina", IsoAlpha2Code: " ", IsoAlpha3Code: "cul"}, + {LanguageID: 1277, Symbol: "MRU", EnglishName: "Marúbo", VernacularName: "", IsoName: "Marúbo", IsoAlpha2Code: " ", IsoAlpha3Code: "mzr"}, + {LanguageID: 1278, Symbol: "MTI", EnglishName: "Matís", VernacularName: "", IsoName: "Matís", IsoAlpha2Code: " ", IsoAlpha3Code: "mpq"}, + {LanguageID: 1279, Symbol: "RSC", EnglishName: "Rusyn (Carpathian)", VernacularName: "", IsoName: "Rusyn", IsoAlpha2Code: " ", IsoAlpha3Code: "rue"}, + {LanguageID: 1280, Symbol: "HSD", EnglishName: "Huave (San Dionisio del Mar)", VernacularName: "", IsoName: "San Dionisio Del Mar Huave", IsoAlpha2Code: " ", IsoAlpha3Code: "hve"}, + {LanguageID: 1281, Symbol: "UZH", EnglishName: "Uzbek (Horezm)", VernacularName: "ўзбекча (хоразм шеваси)", IsoName: "Northern Uzbek", IsoAlpha2Code: " ", IsoAlpha3Code: "uzn"}, + {LanguageID: 1282, Symbol: "THS", EnglishName: "Tarahumara (Southeastern)", VernacularName: "", IsoName: "Southeastern Tarahumara", IsoAlpha2Code: " ", IsoAlpha3Code: "tcu"}, + {LanguageID: 1283, Symbol: "KVM", EnglishName: "Kuvale (Mucubal)", VernacularName: "", IsoName: "Kuvale", IsoAlpha2Code: " ", IsoAlpha3Code: "olu"}, + {LanguageID: 1284, Symbol: "SGO", EnglishName: "Songo", VernacularName: "", IsoName: "Nsongo", IsoAlpha2Code: " ", IsoAlpha3Code: "nsx"}, + {LanguageID: 1285, Symbol: "MKQ", EnglishName: "Mi'kmaq", VernacularName: "", IsoName: "Mi'kmaq", IsoAlpha2Code: " ", IsoAlpha3Code: "mic"}, + {LanguageID: 1286, Symbol: "LBS", EnglishName: "Lebanese Sign Language", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1287, Symbol: "AHW", EnglishName: "Achuar-Shiwiar", VernacularName: "achuar-shiwiar", IsoName: "Achuar-Shiwiar", IsoAlpha2Code: " ", IsoAlpha3Code: "acu"}, + {LanguageID: 1288, Symbol: "TPH", EnglishName: "Tepehua (Huehuetla)", VernacularName: "", IsoName: "Huehuetla Tepehua", IsoAlpha2Code: " ", IsoAlpha3Code: "tee"}, + {LanguageID: 1289, Symbol: "TPP", EnglishName: "Tepehua (Pisaflores)", VernacularName: "", IsoName: "Pisaflores Tepehua", IsoAlpha2Code: " ", IsoAlpha3Code: "tpp"}, + {LanguageID: 1290, Symbol: "KAA", EnglishName: "Kaiwá", VernacularName: "", IsoName: "Kaiwá", IsoAlpha2Code: " ", IsoAlpha3Code: "kgk"}, + {LanguageID: 1291, Symbol: "GIM", EnglishName: "Guaraní (Mbyá)", VernacularName: "", IsoName: "Mbyá Guaraní", IsoAlpha2Code: " ", IsoAlpha3Code: "gun"}, + {LanguageID: 1292, Symbol: "TPT", EnglishName: "Tepehuan (Northern)", VernacularName: "", IsoName: "Northern Tepehuan", IsoAlpha2Code: " ", IsoAlpha3Code: "ntp"}, + {LanguageID: 1293, Symbol: "TPS", EnglishName: "Tepehuan (Southwestern)", VernacularName: "", IsoName: "Southwestern Tepehuan", IsoAlpha2Code: " ", IsoAlpha3Code: "tla"}, + {LanguageID: 1294, Symbol: "BNS", EnglishName: "Blaan (Sarangani)", VernacularName: "", IsoName: "Sarangani Blaan", IsoAlpha2Code: " ", IsoAlpha3Code: "bps"}, + {LanguageID: 1295, Symbol: "CNN", EnglishName: "Cheyenne", VernacularName: "", IsoName: "Cheyenne", IsoAlpha2Code: " ", IsoAlpha3Code: "chy"}, + {LanguageID: 1296, Symbol: "KHC", EnglishName: "Mongolian (Traditional)", VernacularName: "", IsoName: "Peripheral Mongolian", IsoAlpha2Code: " ", IsoAlpha3Code: "mvf"}, + {LanguageID: 1297, Symbol: "NDN", EnglishName: "Sindhi (Indonesia)", VernacularName: "", IsoName: "Sindhi", IsoAlpha2Code: "sd", IsoAlpha3Code: "snd"}, + {LanguageID: 1298, Symbol: "YNX", EnglishName: "Yanomami (Xamatari)", VernacularName: "", IsoName: "Yanomámi", IsoAlpha2Code: " ", IsoAlpha3Code: "wca"}, + {LanguageID: 1299, Symbol: "GCE", EnglishName: "Guyanese Creole English", VernacularName: "", IsoName: "Guyanese Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "gyn"}, + {LanguageID: 1300, Symbol: "OCR", EnglishName: "Cree Omushkego", VernacularName: "", IsoName: "Moose Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crm"}, + {LanguageID: 1301, Symbol: "CYP", EnglishName: "Cree Plains", VernacularName: "", IsoName: "Plains Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "crk"}, + {LanguageID: 1302, Symbol: "YCW", EnglishName: "Cree West Swampy", VernacularName: "", IsoName: "Swampy Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "csw"}, + {LanguageID: 1303, Symbol: "WCR", EnglishName: "Cree Woods", VernacularName: "", IsoName: "Woods Cree", IsoAlpha2Code: " ", IsoAlpha3Code: "cwd"}, + {LanguageID: 1304, Symbol: "IUI", EnglishName: "Inuktitut", VernacularName: "", IsoName: "Inuktitut", IsoAlpha2Code: "iu", IsoAlpha3Code: "iku"}, + {LanguageID: 1305, Symbol: "NOJ", EnglishName: "Northern Ojibwe", VernacularName: "", IsoName: "Northwestern Ojibwa", IsoAlpha2Code: " ", IsoAlpha3Code: "ojb"}, + {LanguageID: 1306, Symbol: "SSK", EnglishName: "Sasak", VernacularName: "", IsoName: "Sasak", IsoAlpha2Code: " ", IsoAlpha3Code: "sas"}, + {LanguageID: 1307, Symbol: "CLC", EnglishName: "Chontal (Tabasco, Central)", VernacularName: "", IsoName: "Tabasco Chontal", IsoAlpha2Code: " ", IsoAlpha3Code: "chf"}, + {LanguageID: 1308, Symbol: "CLE", EnglishName: "Chontal (Tabasco, East)", VernacularName: "", IsoName: "Tabasco Chontal", IsoAlpha2Code: " ", IsoAlpha3Code: "chf"}, + {LanguageID: 1309, Symbol: "BHM", EnglishName: "Bhojpuri (Mauritius)", VernacularName: "", IsoName: "Bhojpuri", IsoAlpha2Code: " ", IsoAlpha3Code: "bho"}, + {LanguageID: 1310, Symbol: "GDE", EnglishName: "Gedeo", VernacularName: "", IsoName: "Gedeo", IsoAlpha2Code: " ", IsoAlpha3Code: "drs"}, + {LanguageID: 1311, Symbol: "MLM", EnglishName: "Malimba", VernacularName: "", IsoName: "Malimba", IsoAlpha2Code: " ", IsoAlpha3Code: "mzd"}, + {LanguageID: 1312, Symbol: "TRC", EnglishName: "Trinidadian Creole", VernacularName: "", IsoName: "Trinidadian Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "trf"}, + {LanguageID: 1313, Symbol: "RNG", EnglishName: "Rohingya", VernacularName: "", IsoName: "Rohingya", IsoAlpha2Code: " ", IsoAlpha3Code: "rhg"}, + {LanguageID: 1314, Symbol: "BJN", EnglishName: "Bajan", VernacularName: "", IsoName: "Bajan", IsoAlpha2Code: " ", IsoAlpha3Code: "bjs"}, + {LanguageID: 1315, Symbol: "VCR", EnglishName: "Vincentian Creole", VernacularName: "", IsoName: "Vincentian Creole English", IsoAlpha2Code: " ", IsoAlpha3Code: "svc"}, + {LanguageID: 1316, Symbol: "ANM", EnglishName: "Anal", VernacularName: "", IsoName: "Anal", IsoAlpha2Code: " ", IsoAlpha3Code: "anm"}, + {LanguageID: 1317, Symbol: "AWD", EnglishName: "Awadhi", VernacularName: "", IsoName: "Awadhi", IsoAlpha2Code: " ", IsoAlpha3Code: "awa"}, + {LanguageID: 1318, Symbol: "CGD", EnglishName: "Chhattisgarhi (Devanagari)", VernacularName: "छत्तीसगढ़ी (देवनागरी)", IsoName: "Chhattisgarhi", IsoAlpha2Code: " ", IsoAlpha3Code: "hne"}, + {LanguageID: 1319, Symbol: "CGR", EnglishName: "Chhattisgarhi (Roman)", VernacularName: "", IsoName: "Chhattisgarhi", IsoAlpha2Code: " ", IsoAlpha3Code: "hne"}, + {LanguageID: 1320, Symbol: "DGO", EnglishName: "Dogri", VernacularName: "", IsoName: "Dogri (individual language)", IsoAlpha2Code: " ", IsoAlpha3Code: "dgo"}, + {LanguageID: 1321, Symbol: "DZR", EnglishName: "Dzongkha (Roman)", VernacularName: "", IsoName: "Dzongkha", IsoAlpha2Code: "dz", IsoAlpha3Code: "dzo"}, + {LanguageID: 1322, Symbol: "DZ", EnglishName: "Dzongkha (Tibetan)", VernacularName: "", IsoName: "Dzongkha", IsoAlpha2Code: "dz", IsoAlpha3Code: "dzo"}, + {LanguageID: 1323, Symbol: "GRW", EnglishName: "Garhwali", VernacularName: "", IsoName: "Garhwali", IsoAlpha2Code: " ", IsoAlpha3Code: "gbm"}, + {LanguageID: 1324, Symbol: "KCC", EnglishName: "Kutchi", VernacularName: "કચ્છી", IsoName: "Kachchi", IsoAlpha2Code: " ", IsoAlpha3Code: "kfr"}, + {LanguageID: 1325, Symbol: "KGH", EnglishName: "Kangri (Hamirpuri)", VernacularName: "", IsoName: "Kangri", IsoAlpha2Code: " ", IsoAlpha3Code: "xnr"}, + {LanguageID: 1326, Symbol: "NGA", EnglishName: "Naga (Ao)", VernacularName: "", IsoName: "Ao Naga", IsoAlpha2Code: " ", IsoAlpha3Code: "njo"}, + {LanguageID: 1327, Symbol: "NGR", EnglishName: "Naga (Rongmei)", VernacularName: "", IsoName: "Rongmei Naga", IsoAlpha2Code: " ", IsoAlpha3Code: "nbu"}, + {LanguageID: 1328, Symbol: "NGD", EnglishName: "Nagamese", VernacularName: "", IsoName: "Naga Pidgin", IsoAlpha2Code: " ", IsoAlpha3Code: "nag"}, + {LanguageID: 1329, Symbol: "NYB", EnglishName: "Nyishi (Bengali)", VernacularName: "", IsoName: "Nyishi", IsoAlpha2Code: " ", IsoAlpha3Code: "njz"}, + {LanguageID: 1330, Symbol: "NYR", EnglishName: "Nyishi (Roman)", VernacularName: "", IsoName: "Nyishi", IsoAlpha2Code: " ", IsoAlpha3Code: "njz"}, + {LanguageID: 1331, Symbol: "PNR", EnglishName: "Pnar", VernacularName: "", IsoName: "Pnar", IsoAlpha2Code: " ", IsoAlpha3Code: "pbv"}, + {LanguageID: 1332, Symbol: "SDD", EnglishName: "Sadri (Devanagari)", VernacularName: "सादरी (देवनागरी)", IsoName: "Sadri", IsoAlpha2Code: " ", IsoAlpha3Code: "sck"}, + {LanguageID: 1333, Symbol: "SDO", EnglishName: "Sadri (Odia)", VernacularName: "", IsoName: "Sadri", IsoAlpha2Code: " ", IsoAlpha3Code: "sck"}, + {LanguageID: 1334, Symbol: "TLU", EnglishName: "Tulu", VernacularName: "", IsoName: "Tulu", IsoAlpha2Code: " ", IsoAlpha3Code: "tcy"}, + {LanguageID: 1335, Symbol: "CGH", EnglishName: "Chhattisgarhi", VernacularName: "", IsoName: "Chhattisgarhi", IsoAlpha2Code: " ", IsoAlpha3Code: "hne"}, + {LanguageID: 1336, Symbol: "DZH", EnglishName: "Dzongkha", VernacularName: "", IsoName: "Dzongkha", IsoAlpha2Code: "dz", IsoAlpha3Code: "dzo"}, + {LanguageID: 1337, Symbol: "NYI", EnglishName: "Nyishi", VernacularName: "", IsoName: "Nyishi", IsoAlpha2Code: " ", IsoAlpha3Code: "njz"}, + {LanguageID: 1338, Symbol: "SDR", EnglishName: "Sadri", VernacularName: "", IsoName: "Sadri", IsoAlpha2Code: " ", IsoAlpha3Code: "sck"}, + {LanguageID: 1339, Symbol: "NDW", EnglishName: "Ndau (Western)", VernacularName: "", IsoName: "Ndau", IsoAlpha2Code: " ", IsoAlpha3Code: "ndc"}, + {LanguageID: 1340, Symbol: "RNK", EnglishName: "Romanian (Vlach, Bačka)", VernacularName: "rumunski (vlaški, Bačka)", IsoName: "Romanian", IsoAlpha2Code: "ro", IsoAlpha3Code: "ron"}, + {LanguageID: 1341, Symbol: "PMT", EnglishName: "Pame (North)", VernacularName: "", IsoName: "Northern Pame", IsoAlpha2Code: " ", IsoAlpha3Code: "pmq"}, + {LanguageID: 1342, Symbol: "GJJ", EnglishName: "Guajajara", VernacularName: "", IsoName: "Guajajára", IsoAlpha2Code: " ", IsoAlpha3Code: "gub"}, + {LanguageID: 1343, Symbol: "HXK", EnglishName: "Hixkaryána", VernacularName: "", IsoName: "Hixkaryána", IsoAlpha2Code: " ", IsoAlpha3Code: "hix"}, + {LanguageID: 1344, Symbol: "MPN", EnglishName: "Malay (Papuan)", VernacularName: "", IsoName: "Papuan Malay", IsoAlpha2Code: " ", IsoAlpha3Code: "pmy"}, + {LanguageID: 1345, Symbol: "NHL", EnglishName: "Nahuatl (Tetelcingo)", VernacularName: "", IsoName: "Tetelcingo Nahuatl", IsoAlpha2Code: " ", IsoAlpha3Code: "nhg"}, + {LanguageID: 1346, Symbol: "ACD", EnglishName: "Acadian", VernacularName: "", IsoName: "French", IsoAlpha2Code: "fr", IsoAlpha3Code: "fra"}, + {LanguageID: 1347, Symbol: "FW", EnglishName: "Fwâi", VernacularName: "", IsoName: "Fwâi", IsoAlpha2Code: " ", IsoAlpha3Code: "fwa"}, + {LanguageID: 1348, Symbol: "NLN", EnglishName: "Nêlêmwa-Nixumwak", VernacularName: "", IsoName: "Nêlêmwa-Nixumwak", IsoAlpha2Code: " ", IsoAlpha3Code: "nee"}, + {LanguageID: 1349, Symbol: "TFM", EnglishName: "Totonac (Filomeno Mata-Coahuitlán)", VernacularName: "", IsoName: "Filomena Mata-Coahuitlán Totonac", IsoAlpha2Code: " ", IsoAlpha3Code: "tlp"}, + {LanguageID: 1350, Symbol: "NDV", EnglishName: "Sindhi (Devanagari)", VernacularName: "", IsoName: "Sindhi", IsoAlpha2Code: "sd", IsoAlpha3Code: "snd"}, + {LanguageID: 1351, Symbol: "DGN", EnglishName: "Dungan", VernacularName: "", IsoName: "Dungan", IsoAlpha2Code: " ", IsoAlpha3Code: "dng"}, + {LanguageID: 1352, Symbol: "SGL", EnglishName: "Singapore Sign Language", VernacularName: "", IsoName: "Singapore Sign Language", IsoAlpha2Code: " ", IsoAlpha3Code: "sls"}, + {LanguageID: 1353, Symbol: "QCQ", EnglishName: "Quichua (Quisapincha)", VernacularName: "", IsoName: "Chimborazo Highland Quichua", IsoAlpha2Code: " ", IsoAlpha3Code: "qug"}, + {LanguageID: 1354, Symbol: "MTK", EnglishName: "Mortlockese", VernacularName: "", IsoName: "Mortlockese", IsoAlpha2Code: " ", IsoAlpha3Code: "mrl"}, + {LanguageID: 1355, Symbol: "KBL", EnglishName: "Kibala", VernacularName: "", IsoName: "Bolo", IsoAlpha2Code: " ", IsoAlpha3Code: "blv"}, + {LanguageID: 1356, Symbol: "MBN", EnglishName: "Mbangala", VernacularName: "", IsoName: "Mbangala", IsoAlpha2Code: " ", IsoAlpha3Code: "mxg"}, + {LanguageID: 1357, Symbol: "KLP", EnglishName: "Kuikúro-Kalapálo", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1358, Symbol: "HDY", EnglishName: "Hadiyya", VernacularName: "", IsoName: "Hadiyya", IsoAlpha2Code: " ", IsoAlpha3Code: "hdy"}, + {LanguageID: 1359, Symbol: "BSA", EnglishName: "Barí (South America)", VernacularName: "", IsoName: "Barí", IsoAlpha2Code: " ", IsoAlpha3Code: "mot"}, + {LanguageID: 1360, Symbol: "ENW", EnglishName: "E’ñapa Woromaipu", VernacularName: "", IsoName: "E'ñapa Woromaipu", IsoAlpha2Code: " ", IsoAlpha3Code: "pbh"}, + {LanguageID: 1361, Symbol: "MQR", EnglishName: "Maquiritari", VernacularName: "", IsoName: "Maquiritari", IsoAlpha2Code: " ", IsoAlpha3Code: "mch"}, + {LanguageID: 1362, Symbol: "BNM", EnglishName: "Banda (Mid-Southern)", VernacularName: "", IsoName: "Mid-Southern Banda", IsoAlpha2Code: " ", IsoAlpha3Code: "bjo"}, + {LanguageID: 1363, Symbol: "MNJ", EnglishName: "Mandja", VernacularName: "", IsoName: "Manza", IsoAlpha2Code: " ", IsoAlpha3Code: "mzv"}, + {LanguageID: 1364, Symbol: "YKM", EnglishName: "Yakoma", VernacularName: "", IsoName: "Yakoma", IsoAlpha2Code: " ", IsoAlpha3Code: "yky"}, + {LanguageID: 1365, Symbol: "TSF", EnglishName: "Tsafiki", VernacularName: "", IsoName: "Colorado", IsoAlpha2Code: " ", IsoAlpha3Code: "cof"}, + {LanguageID: 1366, Symbol: "CBC", EnglishName: "Cabécar (Chirripó)", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1367, Symbol: "NYL", EnglishName: "Nyelâyu", VernacularName: "", IsoName: "Nyâlayu", IsoAlpha2Code: " ", IsoAlpha3Code: "yly"}, + {LanguageID: 1368, Symbol: "GGS", EnglishName: "Georgian Sign Language", VernacularName: "", IsoName: "", IsoAlpha2Code: "", IsoAlpha3Code: ""}, + {LanguageID: 1369, Symbol: "WRN", EnglishName: "Waorani", VernacularName: "", IsoName: "Waorani", IsoAlpha2Code: " ", IsoAlpha3Code: "auc"}, + {LanguageID: 1370, Symbol: "ACC", EnglishName: "Achi (Cubulco)", VernacularName: "", IsoName: "Achi", IsoAlpha2Code: " ", IsoAlpha3Code: "acr"}, + {LanguageID: 1371, Symbol: "ACR", EnglishName: "Achi (Rabinal)", VernacularName: "", IsoName: "Achi", IsoAlpha2Code: " ", IsoAlpha3Code: "acr"}, + {LanguageID: 1372, Symbol: "OSR", EnglishName: "Dutch (Suriname)", VernacularName: "", IsoName: "Dutch", IsoAlpha2Code: "nl", IsoAlpha3Code: "nld"}, + {LanguageID: 1373, Symbol: "ENG", EnglishName: "English (Nigeria)", VernacularName: "", IsoName: "English", IsoAlpha2Code: "en", IsoAlpha3Code: "eng"}, + {LanguageID: 1374, Symbol: "OKW", EnglishName: "Okinawan", VernacularName: "", IsoName: "Central Okinawan", IsoAlpha2Code: " ", IsoAlpha3Code: "ryu"}, + {LanguageID: 1375, Symbol: "ASN", EnglishName: "Arabic (Sudanese)", VernacularName: "", IsoName: "Sudanese Arabic", IsoAlpha2Code: " ", IsoAlpha3Code: "apd"}, +} diff --git a/publication/Publication.go b/publication/Publication.go index 06354d7..dc9d50d 100644 --- a/publication/Publication.go +++ b/publication/Publication.go @@ -5,7 +5,11 @@ import ( "encoding/json" "fmt" "os" + "path/filepath" + "strings" + "github.com/AndreasSko/go-jwlm/model" + snippets "github.com/AndreasSko/jwpub-snippets" "github.com/pkg/errors" // Register SQLite driver @@ -98,6 +102,29 @@ func lookupPublication(db *sql.DB, query Lookup) (Publication, error) { return publ, nil } +// GetPublicationPath generates the filename of the publication and checks if it +// exists in the publDir +func GetPublicationPath(publ Publication, publDir string) (string, error) { + language, err := lookupMepsLanguage(publ.MepsLanguageID) + if err != nil { + return "", err + } + + filename := fmt.Sprintf("%s_%s_%d", publ.KeySymbol.String, language.Symbol, publ.IssueTagNumber) + for strings.HasSuffix(filename, "0") { + filename = strings.TrimSuffix(filename, "0") + } + filename = strings.TrimSuffix(filename, "_") + filename += ".db" + + path := filepath.Join(publDir, filename) + if _, err := os.Stat(path); err != nil { + return "", fmt.Errorf("did not find publication: %w", err) + } + + return filepath.Clean(path), nil +} + // MarshalJSON returns the JSON encoding of the entry func (m Publication) MarshalJSON() ([]byte, error) { return json.Marshal(&struct { diff --git a/publication/PublicationDownload.go b/publication/PublicationDownload.go new file mode 100644 index 0000000..fa49708 --- /dev/null +++ b/publication/PublicationDownload.go @@ -0,0 +1,124 @@ +package publication + +import ( + "bytes" + "context" + "fmt" + "io/ioutil" + "net/http" + "os" + "path/filepath" + + "github.com/Jeffail/gabs" + "github.com/codeclysm/extract/v3" +) + +const publicationEndpoint = "https://app.jw-cdn.org/apis/pub-media/GETPUBMEDIALINKS?pub=%s&issue=%d&langwritten=%s&fileformat=jwpub" + +// DownloadPublication downloads, unzips and stores the SQLiteDB of the publication in the directory at dst +func DownloadPublication(ctx context.Context, prgrs chan Progress, publ Publication, dst string) (string, error) { + if prgrs != nil { + defer close(prgrs) + } + + // Create tmp folder and place all files there + tmp, err := ioutil.TempDir("", "go-jwlm") + if err != nil { + return "", fmt.Errorf("could not create temporary directory: %w", err) + } + defer os.RemoveAll(tmp) + + url, err := getPublicationURL(ctx, publ) + if err != nil { + return "", fmt.Errorf("could not get publicationURL: %w", err) + } + + filename, err := download(ctx, prgrs, url, tmp) + if err != nil { + return "", fmt.Errorf("could not download publication from %s: %w", url, err) + } + + // Extract JWPub file (first layer) + data, err := ioutil.ReadFile(filename) + if err != nil { + return "", fmt.Errorf("could not read %s: %w", filename, err) + } + buffer := bytes.NewBuffer(data) + err = extract.Zip(ctx, buffer, tmp, nil) + if err != nil { + return "", fmt.Errorf("could not extract first layer of publication: %w", err) + } + + // Extract contents (second layer) + filename = filepath.Join(tmp, "contents") + data, err = ioutil.ReadFile(filename) + if err != nil { + return "", fmt.Errorf("could not read %s: %w", filename, err) + } + buffer = bytes.NewBuffer(data) + err = extract.Zip(ctx, buffer, tmp, nil) + if err != nil { + return "", fmt.Errorf("could not extract first layer of publication: %w", err) + } + + // List all files in tmp and pick *.db file to move to dst (the rest we don't need) + files, err := ioutil.ReadDir(tmp) + if err != nil { + return "", fmt.Errorf("could not list files in tmp: %w", err) + } + filename = "" + for _, file := range files { + if !file.IsDir() && filepath.Ext(file.Name()) == ".db" { + filename = file.Name() + } + } + if filename == "" { + return "", fmt.Errorf("could not find publication .db file") + } + + dst = filepath.Join(dst, filename) + os.Rename(filepath.Join(tmp, filename), dst) + + return dst, nil +} + +// getPublicationURL looks up the URL for downloading the given publication +func getPublicationURL(ctx context.Context, publ Publication) (string, error) { + language, err := lookupMepsLanguage(publ.MepsLanguageID) + if err != nil { + return "", err + } + + url := fmt.Sprintf(publicationEndpoint, publ.KeySymbol.String, publ.IssueTagNumber, language.Symbol) + + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + return "", fmt.Errorf("error while creating new request for %s: %w", url, err) + } + req = req.WithContext(ctx) + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return "", fmt.Errorf("could not download publication manifest from %s: %w", url, err) + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("error while reading response body for publication manifest %s: %w", url, err) + } + + jsonParsed, err := gabs.ParseJSON(body) + if err != nil { + return "", fmt.Errorf("could not parse publication manifest from %s: %w", url, err) + } + + var publicationURL string + publicationURL, ok := jsonParsed.Search("files", language.Symbol, "JWPUB", "file", "url").Index(0).Data().(string) + if !ok { + return "", fmt.Errorf("could not get url from publication manifest %s from %s", body, url) + } + + return publicationURL, nil +} diff --git a/publication/PublicationDownload_test.go b/publication/PublicationDownload_test.go new file mode 100644 index 0000000..31b988f --- /dev/null +++ b/publication/PublicationDownload_test.go @@ -0,0 +1,190 @@ +package publication + +import ( + "context" + "database/sql" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestDownloadPublication(t *testing.T) { + type args struct { + publ Publication + } + tests := []struct { + name string + args args + filename string + minFileSize int + wantErr bool + }{ + { + name: "Download 2020 service year report", + args: args{ + publ: Publication{ + ID: 317733, + PublicationRootKeyID: 786, + MepsLanguageID: 0, + PublicationTypeID: 2, + IssueTagNumber: 0, + Title: "2020 Service Year Report of Jehovah’s Witnesses Worldwide", + ShortTitle: "2020 Service Year Report", + UndatedReferenceTitle: sql.NullString{"2020 Service Year Report", true}, + Year: 2020, + Symbol: "syr20", + KeySymbol: sql.NullString{"syr20", true}, + }, + }, + filename: "syr20_E.db", + minFileSize: 400000, // > 400kB + }, + { + name: "Download Watchtower", + args: args{ + publ: Publication{ + ID: 348729, + PublicationRootKeyID: 780, + MepsLanguageID: 200, + PublicationTypeID: 14, + IssueTagNumber: 20210700, + Title: "ਪਹਿਰਾਬੁਰਜ ਯਹੋਵਾਹ ਦੇ ਰਾਜ ਦੀ ਘੋਸ਼ਣਾ ਕਰਦਾ ਹੈ (ਸਟੱਡੀ)—2021", + IssueTitle: sql.NullString{"ਪਹਿਰਾਬੁਰਜ, ਜੁਲਾਈ 2021", true}, + ShortTitle: "ਪਹਿਰਾਬੁਰਜ (ਸਟੱਡੀ) (2021)", + CoverTitle: sql.NullString{"ਅਧਿਐਨ ਲੇਖ: 30 ਅਗਸਤ–26 ਸਤੰਬਰ", true}, + UndatedTitle: sql.NullString{"ਪਹਿਰਾਬੁਰਜ - ਸਟੱਡੀ ਐਡੀਸ਼ਨ", true}, + UndatedReferenceTitle: sql.NullString{"ਪਹਿਰਾਬੁਰਜ (ਸਟੱਡੀ)", true}, + Year: 2021, + Symbol: "w21", + KeySymbol: sql.NullString{"w", true}, + }, + }, + filename: "w_PJ_202107.db", + minFileSize: 600000, // > 400kB + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tmp, err := ioutil.TempDir("", "go-jwlm") + assert.NoError(t, err) + defer os.RemoveAll(tmp) + + prgrs := make(chan Progress) + done := make(chan struct{}) + var path string + go func() { + path, err = DownloadPublication(context.Background(), prgrs, tt.args.publ, tmp) + if tt.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + done <- struct{}{} + }() + for progress := range prgrs { + assert.IsType(t, Progress{}, progress) + assert.NotEqual(t, Progress{}, progress) + } + <-done + + info, err := os.Stat(path) + assert.NoError(t, err) + assert.Greater(t, info.Size(), int64(tt.minFileSize)) + + filename := filepath.Base(path) + assert.Equal(t, tt.filename, filename) + }) + } +} + +func Test_getPublicationURL(t *testing.T) { + type args struct { + ctx context.Context + publ Publication + } + tests := []struct { + name string + args args + want string + errorMsg string + }{ + { + name: "Get `Draw Close to Jehovah`", + args: args{ + ctx: context.TODO(), + publ: Publication{ + ID: 67, + PublicationRootKeyID: 64, + MepsLanguageID: 0, + PublicationTypeID: 2, + IssueTagNumber: 0, + Title: "Draw Close to Jehovah", + ShortTitle: "Close to Jehovah", + UndatedReferenceTitle: sql.NullString{"Close to Jehovah", true}, + Year: 2014, + Symbol: "cl", + KeySymbol: sql.NullString{"cl", true}, + }, + }, + want: "https://download-a.akamaihd.net/files/media_publication/36/cl_E.jwpub", + }, + { + name: "Get Watchtower issue in Chinese", + args: args{ + ctx: context.TODO(), + publ: Publication{ + ID: 305097, + PublicationRootKeyID: 780, + MepsLanguageID: 43, + PublicationTypeID: 14, + IssueTagNumber: 20210200, + Title: "The Watchtower Announcing Jehovah’s Kingdom (Study)—2021", + IssueTitle: sql.NullString{"The Watchtower, February 2021", true}, + ShortTitle: "The Watchtower (Study) (2021)", + CoverTitle: sql.NullString{"Study Articles for April 5 to May 2", true}, + UndatedTitle: sql.NullString{"The Watchtower—Study Edition", true}, + UndatedReferenceTitle: sql.NullString{"The Watchtower (Study)", true}, + Year: 2021, + Symbol: "w21", + KeySymbol: sql.NullString{"w", true}, + }, + }, + want: "https://download-a.akamaihd.net/files/media_periodical/92/w_CH_202102.jwpub", + }, + { + name: "Get with invalid MepsLanguageID", + args: args{ + ctx: context.TODO(), + publ: Publication{ + ID: 67, + PublicationRootKeyID: 64, + MepsLanguageID: 12345, + PublicationTypeID: 2, + IssueTagNumber: 0, + Title: "Draw Close to Jehovah", + ShortTitle: "Close to Jehovah", + UndatedReferenceTitle: sql.NullString{"Close to Jehovah", true}, + Year: 2014, + Symbol: "cl", + KeySymbol: sql.NullString{"cl", true}, + }, + }, + errorMsg: "could not find language symbol for mepsLanguageID 12345", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := getPublicationURL(tt.args.ctx, tt.args.publ) + if tt.errorMsg != "" { + assert.Error(t, err) + assert.EqualErrorf(t, err, tt.errorMsg, "") + return + } + + assert.Equal(t, tt.want, got) + }) + } +} diff --git a/publication/Publication_test.go b/publication/Publication_test.go index 5d522ea..01576ee 100644 --- a/publication/Publication_test.go +++ b/publication/Publication_test.go @@ -207,6 +207,97 @@ func Test_lookupPublication(t *testing.T) { assert.Equal(t, publication, res) } +func TestGetPublicationPath(t *testing.T) { + type args struct { + publ Publication + publDir string + } + tests := []struct { + name string + args args + wantContains string + wantErr bool + }{ + { + name: "WT Chinese - exists", + args: args{ + publ: Publication{ + ID: 305097, + PublicationRootKeyID: 780, + MepsLanguageID: 43, + PublicationTypeID: 14, + IssueTagNumber: 20210200, + Title: "The Watchtower Announcing Jehovah’s Kingdom (Study)—2021", + IssueTitle: sql.NullString{"The Watchtower, February 2021", true}, + ShortTitle: "The Watchtower (Study) (2021)", + CoverTitle: sql.NullString{"Study Articles for April 5 to May 2", true}, + UndatedTitle: sql.NullString{"The Watchtower—Study Edition", true}, + UndatedReferenceTitle: sql.NullString{"The Watchtower (Study)", true}, + Year: 2021, + Symbol: "w21", + KeySymbol: sql.NullString{"w", true}, + }, + publDir: "./testdata", + }, + wantContains: "testdata/w_CH_202102.db", + }, + { + name: "WT German - does not exist", + args: args{ + publ: Publication{ + ID: 305097, + PublicationRootKeyID: 780, + MepsLanguageID: 2, + PublicationTypeID: 14, + IssueTagNumber: 20210200, + Title: "The Watchtower Announcing Jehovah’s Kingdom (Study)—2021", + IssueTitle: sql.NullString{"The Watchtower, February 2021", true}, + ShortTitle: "The Watchtower (Study) (2021)", + CoverTitle: sql.NullString{"Study Articles for April 5 to May 2", true}, + UndatedTitle: sql.NullString{"The Watchtower—Study Edition", true}, + UndatedReferenceTitle: sql.NullString{"The Watchtower (Study)", true}, + Year: 2021, + Symbol: "w21", + KeySymbol: sql.NullString{"w", true}, + }, + publDir: "./testdata", + }, + wantErr: true, + }, + { + name: "Enjoy Life Forever Brochure", + args: args{ + publ: Publication{ + ID: 336509, + PublicationRootKeyID: 795, + MepsLanguageID: 0, + PublicationTypeID: 4, + IssueTagNumber: 0, + Title: "Enjoy Life Forever!—Introductory Bible Lessons", + ShortTitle: "Enjoy Life Forever!—Brochure", + UndatedReferenceTitle: sql.NullString{"Enjoy Life Forever!—Brochure", true}, + Year: 2020, + Symbol: "lffi", + KeySymbol: sql.NullString{"lffi", true}, + }, + publDir: "./testdata", + }, + wantContains: "testdata/lffi_E.db", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := GetPublicationPath(tt.args.publ, tt.args.publDir) + if tt.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + assert.Contains(t, got, filepath.Clean(tt.wantContains)) + }) + } +} + func TestPublication_MarshalJSON(t *testing.T) { publ := Publication{ ID: 1, diff --git a/publication/testdata/lffi_E.db b/publication/testdata/lffi_E.db new file mode 100644 index 0000000..e69de29 diff --git a/publication/testdata/w_CH_202102.db b/publication/testdata/w_CH_202102.db new file mode 100644 index 0000000..e69de29 From 01c1341665fab8bc634a9c0d598f48188dd88d92 Mon Sep 17 00:00:00 2001 From: Andreas Skorczyk Date: Sun, 27 Jun 2021 16:47:47 +0200 Subject: [PATCH 3/4] Require Go 1.16 --- .github/workflows/coverage.yml | 2 +- .github/workflows/main.yml | 6 +++--- go.mod | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 97d0a1f..6467070 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -11,7 +11,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2 with: - go-version: '1.14' + go-version: '1.16' - name: Checkout code uses: actions/checkout@v2 - name: Run tests diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 50d4d21..f2236f4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,7 +20,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2 with: - go-version: '1.14' + go-version: '1.16' - name: Checkout code uses: actions/checkout@v2 - name: Run tests @@ -32,13 +32,13 @@ jobs: - name: Install Go uses: actions/setup-go@v2 with: - go-version: '1.14' + go-version: '1.16' - name: Install Gomobile run: go get golang.org/x/mobile/cmd/gomobile - name: Checkout code uses: actions/checkout@v2 - name: Initialize Gomobile - run: gomobile init + run: go mod download golang.org/x/mobile && gomobile init working-directory: gomobile - name: Build for iOS run: gomobile bind -target ios -v diff --git a/go.mod b/go.mod index 941b01b..94e1b55 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/AndreasSko/go-jwlm -go 1.14 +go 1.16 require ( github.com/AlecAivazis/survey/v2 v2.2.12 From 85075c439b311ee3676a7de4957e90959374c66c Mon Sep 17 00:00:00 2001 From: Andreas Skorczyk Date: Sun, 27 Jun 2021 20:02:21 +0200 Subject: [PATCH 4/4] :sparkles: GetSnippet --- .github/workflows/main.yml | 37 +++++ go.mod | 17 +- go.sum | 7 +- gomobile/Publication.go | 96 +++++++++++ gomobile/Publication_test.go | 208 ++++++++++++++++++++++++ gomobile/testdata/catalog.db | Bin 0 -> 102400 bytes gomobile/testdata/syr20_E.db | Bin 0 -> 487424 bytes gomobile/testdata/w_CH_202102.db | 0 publication/Publication.go | 74 +++++++++ publication/PublicationDownload_test.go | 18 +- publication/Publication_test.go | 9 + publication/jwpub-snippets/fake.go | 40 +++++ publication/jwpub-snippets/go.mod | 9 + 13 files changed, 499 insertions(+), 16 deletions(-) create mode 100644 gomobile/testdata/catalog.db create mode 100644 gomobile/testdata/syr20_E.db create mode 100644 gomobile/testdata/w_CH_202102.db create mode 100644 publication/jwpub-snippets/fake.go create mode 100644 publication/jwpub-snippets/go.mod diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f2236f4..8c12ef4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,6 +23,23 @@ jobs: go-version: '1.16' - name: Checkout code uses: actions/checkout@v2 + + - name: Use github.com/AndreasSko/jwpub-snippets instead of fake implementation + uses: AndreasSko/find-and-replace-action@main + with: + from: ^replace github.com\/AndreasSko\/jwpub-snippets.*$ + to: "" + files: go.mod + + - name: Inject insteadOf config for private repo + env: + JWPUB_SNIPPET_GITHUB_TOKEN: ${{ secrets.JWPUB_SNIPPET_GITHUB_TOKEN }} + run: git config --global url."https://${JWPUB_SNIPPET_GITHUB_TOKEN}:x-oauth-basic@github.com".insteadOf "https://github.com" + + - run: go get + env: + GOPRIVATE: github.com/AndreasSko + - name: Run tests run: go test ./... @@ -33,13 +50,33 @@ jobs: uses: actions/setup-go@v2 with: go-version: '1.16' + - name: Install Gomobile run: go get golang.org/x/mobile/cmd/gomobile + - name: Checkout code uses: actions/checkout@v2 + + - name: Use github.com/AndreasSko/jwpub-snippets instead of fake implementation + uses: AndreasSko/find-and-replace-action@main + with: + from: ^replace github.com\/AndreasSko\/jwpub-snippets.*$ + to: "" + files: go.mod + + - name: Inject insteadOf config for private repo + env: + JWPUB_SNIPPET_GITHUB_TOKEN: ${{ secrets.JWPUB_SNIPPET_GITHUB_TOKEN }} + run: git config --global url."https://${JWPUB_SNIPPET_GITHUB_TOKEN}:x-oauth-basic@github.com".insteadOf "https://github.com" + + - run: go get + env: + GOPRIVATE: github.com/AndreasSko + - name: Initialize Gomobile run: go mod download golang.org/x/mobile && gomobile init working-directory: gomobile + - name: Build for iOS run: gomobile bind -target ios -v working-directory: gomobile diff --git a/go.mod b/go.mod index 94e1b55..cd5c245 100644 --- a/go.mod +++ b/go.mod @@ -4,41 +4,30 @@ go 1.16 require ( github.com/AlecAivazis/survey/v2 v2.2.12 + github.com/AndreasSko/jwpub-snippets v0.0.0-20210704143853-4c0b907b6dd3 github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/Jeffail/gabs v1.4.0 github.com/MakeNowJust/heredoc v1.0.0 github.com/Netflix/go-expect v0.0.0-20200312175327-da48e75238e2 - github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/buger/goterm v1.0.0 github.com/cavaliercoder/grab v1.0.1-0.20201108051000-98a5bfe305ec github.com/codeclysm/extract/v3 v3.0.2 github.com/davecgh/go-spew v1.1.1 - github.com/go-openapi/errors v0.20.0 // indirect - github.com/go-openapi/strfmt v0.20.0 // indirect - github.com/h2non/filetype v1.1.1 // indirect github.com/hinshun/vt10x v0.0.0-20180809195222-d55458df857c github.com/jedib0t/go-pretty v4.3.0+incompatible - github.com/juju/errors v0.0.0-20200330140219-3fe23663418f // indirect github.com/klauspost/compress v1.13.1 github.com/kr/pty v1.1.8 // indirect - github.com/mattn/go-colorable v0.1.8 // indirect - github.com/mattn/go-runewidth v0.0.10 // indirect github.com/mattn/go-sqlite3 v1.14.7 - github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/go-wordwrap v1.0.1 github.com/pkg/errors v0.9.1 - github.com/rivo/uniseg v0.2.0 // indirect github.com/sergi/go-diff v1.2.0 github.com/sirupsen/logrus v1.8.1 - github.com/smartystreets/assertions v1.2.0 // indirect github.com/spf13/cobra v1.1.1 github.com/spf13/viper v1.8.1 github.com/stretchr/testify v1.7.0 - go.mongodb.org/mongo-driver v1.5.0 // indirect - golang.org/x/crypto v0.0.0-20210317152858-513c2a44f670 // indirect golang.org/x/sys v0.0.0-20210611083646-a4fc73990273 // indirect - golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 // indirect - golang.org/x/text v0.3.6 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) + +replace github.com/AndreasSko/jwpub-snippets v0.0.0-20210627134355-912640c387c2 => ./publication/jwpub-snippets diff --git a/go.sum b/go.sum index c9a971f..c8a25bd 100644 --- a/go.sum +++ b/go.sum @@ -39,6 +39,9 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AlecAivazis/survey/v2 v2.2.12 h1:5a07y93zA6SZ09gOa9wLVLznF5zTJMQ+pJ3cZK4IuO8= github.com/AlecAivazis/survey/v2 v2.2.12/go.mod h1:6d4saEvBsfSHXeN1a5OA5m2+HJ2LuVokllnC77pAIKI= +github.com/AndreasSko/go-jwlm v0.0.0-20210626065356-cc5e9e829b5f/go.mod h1:5oGuOLP/T3tDm/jhelqhPjvjzXnrxd1r8fNf89yxLIQ= +github.com/AndreasSko/jwpub-snippets v0.0.0-20210704143853-4c0b907b6dd3 h1:eiVNO09Rz7+fAgrG2KWMW5p0dCFtgU83m3sElf5gnlU= +github.com/AndreasSko/jwpub-snippets v0.0.0-20210704143853-4c0b907b6dd3/go.mod h1:L33RcK82qxuTptAf1solrJoJFXwySwJliUppcmAaj+o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= @@ -550,6 +553,8 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -626,6 +631,7 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210611083646-a4fc73990273 h1:faDu4veV+8pcThn4fewv6TVlNCezafGoC1gM/mxQLbQ= golang.org/x/sys v0.0.0-20210611083646-a4fc73990273/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -703,7 +709,6 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= diff --git a/gomobile/Publication.go b/gomobile/Publication.go index ae401b1..0d98786 100644 --- a/gomobile/Publication.go +++ b/gomobile/Publication.go @@ -1,8 +1,11 @@ package gomobile import ( + "context" "encoding/json" + "fmt" + "github.com/AndreasSko/go-jwlm/model" "github.com/AndreasSko/go-jwlm/publication" ) @@ -35,3 +38,96 @@ func LookupPublication(dbPath string, query *PublicationLookup) string { return string(jsn) } + +// GetSnippet fetches the snippet related to a mergeConflict +func (mcw *MergeConflictsWrapper) GetSnippet(catalogDir, publDir string, conflictKey string) (string, error) { + conflict, ok := mcw.conflicts[conflictKey] + if !ok { + return "", fmt.Errorf("conflict with key %s does not exist", conflictKey) + } + + umbr, ok := conflict.Left.(*model.UserMarkBlockRange) + if !ok { + return "", fmt.Errorf("only UserMarkBlockRanges are supported for getting a snippet, %T given", conflict) + } + + location := umbr.RelatedEntries(mcw.DBWrapper.left).Location + + publQuery := publication.Lookup{ + DocumentID: int(location.DocumentID.Int32), + KeySymbol: location.KeySymbol.String, + IssueTagNumber: location.IssueTagNumber, + MepsLanguage: location.MepsLanguage, + } + publ, err := publication.LookupPublication(catalogDir, publQuery) + if err != nil { + return "", fmt.Errorf("could not lookup publication: %w", err) + } + + snippets, err := publication.GetSnippet(publDir, publ, *location, *umbr) + if err != nil { + return "", fmt.Errorf("could not get snippet: %w", err) + } + + result, err := json.Marshal(snippets) + if err != nil { + return "", fmt.Errorf("could not marshal snippets to JSON: %w", err) + } + + return string(result), nil +} + +// GetPublicationPath generates the filename of the publication (given in JSON format) +// and checks if it exists in the publDir +func GetPublicationPath(publJSON string, publDir string) (string, error) { + publ := publication.Publication{} + if err := json.Unmarshal([]byte(publJSON), &publ); err != nil { + return "", fmt.Errorf("could not unmarshal publication: %w", err) + } + + return publication.GetPublicationPath(publ, publDir) +} + +// DownloadPublication downloads the publication (given in JSON format) and saves it at dst. The +// returned DownloadManager allows to keep track and manage the running download +func DownloadPublication(publJSON string, dst string) *DownloadManager { + publ := publication.Publication{} + if err := json.Unmarshal([]byte(publJSON), &publ); err != nil { + return &DownloadManager{ + Progress: &DownloadProgress{ + Done: true, + }, + err: err, + } + } + + ctx, cancel := context.WithCancel(context.Background()) + dm := &DownloadManager{ + Progress: &DownloadProgress{}, + prgrsChan: make(chan publication.Progress), + ctx: ctx, + cancel: cancel, + } + + // Start download in sub-goroutine, while monitoring its progress + go func() { + done := make(chan struct{}) + go func() { + _, err := publication.DownloadPublication(ctx, dm.prgrsChan, publ, dst) + if err != nil { + dm.err = err + } + done <- struct{}{} + }() + for progress := range dm.prgrsChan { + dm.Progress.Size = progress.Size + dm.Progress.BytesComplete = progress.BytesComplete + dm.Progress.BytesPerSecond = progress.BytesPerSecond + dm.Progress.Progress = progress.Progress + } + <-done + dm.Progress.Done = true + }() + + return dm +} diff --git a/gomobile/Publication_test.go b/gomobile/Publication_test.go index 7ecafed..3143f8c 100644 --- a/gomobile/Publication_test.go +++ b/gomobile/Publication_test.go @@ -3,9 +3,17 @@ package gomobile import ( + "database/sql" + "fmt" + "io/ioutil" + "os" "path/filepath" "testing" + "time" + "github.com/AndreasSko/go-jwlm/merger" + "github.com/AndreasSko/go-jwlm/model" + snippets "github.com/AndreasSko/jwpub-snippets" "github.com/stretchr/testify/assert" ) @@ -58,3 +66,203 @@ func TestLookupPublication(t *testing.T) { assert.Equal(t, test.expected, res) } } + +func TestMergeConflictsWrapper_GetSnippet(t *testing.T) { + if snippets.FakeImplementation { + fmt.Println("Fake implementation used. Skipping test") + return + } + + exampleDB := &model.Database{ + BlockRange: []*model.BlockRange{ + nil, + { + BlockRangeID: 1, + Identifier: 14, + StartToken: sql.NullInt32{Int32: 0, Valid: true}, + EndToken: sql.NullInt32{Int32: 1, Valid: true}, + UserMarkID: 1, + }, + { + BlockRangeID: 1, + Identifier: 15, + StartToken: sql.NullInt32{Int32: 0, Valid: true}, + EndToken: sql.NullInt32{Int32: 1, Valid: true}, + UserMarkID: 1, + }, + }, + Location: []*model.Location{ + nil, + { + LocationID: 1, + DocumentID: sql.NullInt32{Int32: 1102020991, Valid: true}, + KeySymbol: sql.NullString{String: "syr20", Valid: true}, + MepsLanguage: 0, + LocationType: 0, + }, + }, + UserMark: []*model.UserMark{ + nil, + { + UserMarkID: 1, + LocationID: 1, + }, + }, + } + type fields struct { + DBWrapper *DatabaseWrapper + conflicts map[string]merger.MergeConflict + unsolvedConflicts map[string]bool + solutions map[string]merger.MergeSolution + } + type args struct { + catalogDir string + publDir string + conflictKey string + } + tests := []struct { + name string + fields fields + args args + want string + wantErr bool + }{ + { + name: "Get 2020 Service Year Report", + fields: fields{ + DBWrapper: &DatabaseWrapper{ + left: exampleDB, + }, + conflicts: map[string]merger.MergeConflict{ + "syr20": { + Left: &model.UserMarkBlockRange{ + UserMark: exampleDB.UserMark[1], + BlockRanges: []*model.BlockRange{ + exampleDB.BlockRange[1], + exampleDB.BlockRange[2], + }, + }, + }, + }, + }, + args: args{ + catalogDir: "./testdata/catalog.db", + publDir: "./testdata/syr20_E.db", + conflictKey: "syr20", + }, + want: "[\"Average Bible Studies Each Month: 7,705,765\",\"During the 2020 service year, Jehovah’s Witnesses spent $231\u00a0million in caring for special pioneers, missionaries, and circuit overseers in their field service assignments. Worldwide, a total of 20,994 ordained ministers staff the branch facilities. All are members of the Worldwide Order of Special Full-Time Servants of Jehovah’s Witnesses.\"]", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mcw := &MergeConflictsWrapper{ + DBWrapper: tt.fields.DBWrapper, + conflicts: tt.fields.conflicts, + unsolvedConflicts: tt.fields.unsolvedConflicts, + solutions: tt.fields.solutions, + } + got, err := mcw.GetSnippet(tt.args.catalogDir, tt.args.publDir, tt.args.conflictKey) + if tt.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + assert.Equal(t, tt.want, got) + }) + } +} + +func TestGetPublicationPath(t *testing.T) { + type args struct { + publJSON string + publDir string + } + tests := []struct { + name string + args args + wantContains string + wantErr bool + }{ + { + name: "WT Chinese - exists", + args: args{ + publJSON: `{"id":305097,"publicationRootKeyId":780,"mepsLanguageId":43,"publicationTypeId":14,"issueTagNumber":20210200,"title":"The Watchtower Announcing Jehovah’s Kingdom (Study)—2021","issueTitle":"The Watchtower, February 2021","shortTitle":"The Watchtower (Study) (2021)","coverTitle":"Study Articles for April 5 to May 2","undatedTitle":"The Watchtower—Study Edition","undatedReferenceTitle":"The Watchtower (Study)","year":2021,"symbol":"w21","keySymbol":"w","reserved":0}`, + publDir: "./testdata", + }, + wantContains: "testdata/w_CH_202102.db", + }, + { + name: "WT German - does not exist", + args: args{ + publJSON: `{"id":305097,"publicationRootKeyId":780,"mepsLanguageId":2,"publicationTypeId":14,"issueTagNumber":20210200,"title":"The Watchtower Announcing Jehovah’s Kingdom (Study)—2021","issueTitle":"The Watchtower, February 2021","shortTitle":"The Watchtower (Study) (2021)","coverTitle":"Study Articles for April 5 to May 2","undatedTitle":"The Watchtower—Study Edition","undatedReferenceTitle":"The Watchtower (Study)","year":2021,"symbol":"w21","keySymbol":"w","reserved":0}`, + publDir: "./testdata", + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := GetPublicationPath(tt.args.publJSON, tt.args.publDir) + if tt.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + assert.Contains(t, got, tt.wantContains) + }) + } +} + +func TestDownloadPublication(t *testing.T) { + type args struct { + publJSON string + } + tests := []struct { + name string + args args + filename string + minFileSize int + wantErr bool + }{ + { + name: "Download 2020 service year report", + args: args{ + publJSON: `{"id":317733,"publicationRootKeyId":786,"mepsLanguageId":0,"publicationTypeId":2,"issueTagNumber":0,"title":"2020 Service Year Report of Jehovah’s Witnesses Worldwide","issueTitle":"","shortTitle":"2020 Service Year Report","coverTitle":"","undatedTitle":"","undatedReferenceTitle":"2020 Service Year Report","year":2020,"symbol":"syr20","keySymbol":"syr20","reserved":0}`, + }, + filename: "syr20_E.db", + minFileSize: 400000, // > 400kB + }, + { + name: "Download Watchtower", + args: args{ + publJSON: `{"id":348729,"publicationRootKeyId":780,"mepsLanguageId":200,"publicationTypeId":14,"issueTagNumber":20210700,"title":"ਪਹਿਰਾਬੁਰਜ ਯਹੋਵਾਹ ਦੇ ਰਾਜ ਦੀ ਘੋਸ਼ਣਾ ਕਰਦਾ ਹੈ (ਸਟੱਡੀ)—2021","issueTitle":"ਪਹਿਰਾਬੁਰਜ, ਜੁਲਾਈ 2021","shortTitle":"ਪਹਿਰਾਬੁਰਜ (ਸਟੱਡੀ) (2021)","coverTitle":"ਅਧਿਐਨ ਲੇਖ: 30 ਅਗਸਤ–26 ਸਤੰਬਰ","undatedTitle":"ਪਹਿਰਾਬੁਰਜ - ਸਟੱਡੀ ਐਡੀਸ਼ਨ","undatedReferenceTitle":"ਪਹਿਰਾਬੁਰਜ (ਸਟੱਡੀ)","year":2021,"symbol":"w21","keySymbol":"w","reserved":0}`, + }, + filename: "w_PJ_202107.db", + minFileSize: 600000, // > 400kB + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tmp, err := ioutil.TempDir("", "go-jwlm") + assert.NoError(t, err) + defer os.RemoveAll(tmp) + + dm := DownloadPublication(tt.args.publJSON, tmp) + time.Sleep(250 * time.Millisecond) + for progress := range dm.prgrsChan { + assert.Greater(t, progress.BytesComplete, int64(1)) + if progress.Done { + break + } + } + if tt.wantErr { + assert.Error(t, dm.err) + return + } + + info, err := os.Stat(filepath.Join(tmp, tt.filename)) + assert.NoError(t, err) + assert.Greater(t, info.Size(), int64(tt.minFileSize)) + }) + } +} diff --git a/gomobile/testdata/catalog.db b/gomobile/testdata/catalog.db new file mode 100644 index 0000000000000000000000000000000000000000..55b793663b773ad35473d5c54fd30a85654b2e77 GIT binary patch literal 102400 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 R1nli+%>e0JLS6%J{V$YJBYgk> literal 0 HcmV?d00001 diff --git a/gomobile/testdata/syr20_E.db b/gomobile/testdata/syr20_E.db new file mode 100644 index 0000000000000000000000000000000000000000..e7cfbc1277e329076d9297b83a77ca402b58eefe GIT binary patch literal 487424 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�Vz}l(U9;2ON!4f+abHRF4!lLx%O^FK` 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 d9EuuQ6g4s^YNS!rxI|GSg`&m 400kB + minFileSize: 600000, // > 600kB + }, + { + name: "Wrong download", + args: args{ + publ: Publication{ + ID: 12345678910, + PublicationRootKeyID: 12345678910, + MepsLanguageID: 12345678910, + }, + }, + wantErr: true, }, } for _, tt := range tests { @@ -79,6 +90,7 @@ func TestDownloadPublication(t *testing.T) { path, err = DownloadPublication(context.Background(), prgrs, tt.args.publ, tmp) if tt.wantErr { assert.Error(t, err) + done <- struct{}{} return } assert.NoError(t, err) @@ -91,6 +103,10 @@ func TestDownloadPublication(t *testing.T) { <-done info, err := os.Stat(path) + if tt.wantErr { + assert.Error(t, err) + return + } assert.NoError(t, err) assert.Greater(t, info.Size(), int64(tt.minFileSize)) diff --git a/publication/Publication_test.go b/publication/Publication_test.go index 01576ee..3d4ad85 100644 --- a/publication/Publication_test.go +++ b/publication/Publication_test.go @@ -3,7 +3,9 @@ package publication import ( "database/sql" "encoding/json" + "os" "path/filepath" + "strings" "testing" "github.com/DATA-DOG/go-sqlmock" @@ -323,3 +325,10 @@ func TestPublication_MarshalJSON(t *testing.T) { assert.NoError(t, err) assert.Equal(t, expected, string(jsn)) } + +func Test_checkJWPubSnippetsFakeImplementation(t *testing.T) { + // Make sure we are using real implementation in GitHub Actions + if strings.ToLower(os.Getenv("GITHUB_REPOSITORY")) == "andreassko/go-jwlm" { + assert.False(t, checkJWPubSnippetsFakeImplementation()) + } +} diff --git a/publication/jwpub-snippets/fake.go b/publication/jwpub-snippets/fake.go new file mode 100644 index 0000000..9aef0b4 --- /dev/null +++ b/publication/jwpub-snippets/fake.go @@ -0,0 +1,40 @@ +package snippets + +import ( + "database/sql" + "fmt" + + "github.com/AndreasSko/go-jwlm/model" +) + +const FakeImplementation = true + +type Publication struct { + ID int + PublicationRootKeyID int + MepsLanguageID int + PublicationTypeID int + IssueTagNumber int + Title string + IssueTitle sql.NullString + ShortTitle string + CoverTitle sql.NullString + UndatedTitle sql.NullString + UndatedReferenceTitle sql.NullString + Year int + Symbol string + KeySymbol sql.NullString + Reserved int +} +type SnippetQuery struct { + Publication Publication + Location model.Location + UserMarkBlockRange model.UserMarkBlockRange +} + +// GetSnippet is a fake implementation and only used as a general replacement +// of github.com/AndreasSko/jwpub-snippets so go-jwlm is able to be built with +// or without it +func GetSnippet(publPath string, query SnippetQuery) ([]string, error) { + return nil, fmt.Errorf("Using dummy implementation") +} diff --git a/publication/jwpub-snippets/go.mod b/publication/jwpub-snippets/go.mod new file mode 100644 index 0000000..1645087 --- /dev/null +++ b/publication/jwpub-snippets/go.mod @@ -0,0 +1,9 @@ +module github.com/AndreasSko/jwpub-snippets + +go 1.16 + +require ( + github.com/AndreasSko/go-jwlm v0.0.0-20210626065356-cc5e9e829b5f + github.com/stretchr/testify v1.7.0 + golang.org/x/net v0.0.0-20210614182718-04defd469f4e +)