From a0dd1aec3d520573b57138138e6e56fea54d9fb9 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 24 May 2024 15:50:26 +0600 Subject: [PATCH 01/34] trying to update to new compose --- .gitignore | 1 + android/pickers/build.gradle | 1 + android/smalltextfield/build.gradle | 1 + common/compose/build.gradle | 1 + coroutines/compose/build.gradle | 1 + defaultAndroidSettings.gradle | 1 + gradle/libs.versions.toml | 5 +++-- mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle | 1 - mppJvmJsAndroidProject.gradle | 1 - mppJvmJsLinuxMingwLinuxArm64Project.gradle | 1 - mppJvmJsLinuxMingwProject.gradle | 1 - mppProjectWithSerializationAndCompose.gradle | 8 -------- 12 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 1d2d1b0e7ff..6c97217ff69 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea +.kotlin out/* *.iml target diff --git a/android/pickers/build.gradle b/android/pickers/build.gradle index c96f8bbeb52..d926ab4bbd9 100644 --- a/android/pickers/build.gradle +++ b/android/pickers/build.gradle @@ -3,6 +3,7 @@ plugins { id "org.jetbrains.kotlin.plugin.serialization" id "com.android.library" alias(libs.plugins.jb.compose) + alias(libs.plugins.kt.jb.compose) } apply from: "$mppProjectWithSerializationAndComposePresetPath" diff --git a/android/smalltextfield/build.gradle b/android/smalltextfield/build.gradle index 43d40ccd762..523f3758844 100644 --- a/android/smalltextfield/build.gradle +++ b/android/smalltextfield/build.gradle @@ -3,6 +3,7 @@ plugins { id "org.jetbrains.kotlin.plugin.serialization" id "com.android.library" alias(libs.plugins.jb.compose) + alias(libs.plugins.kt.jb.compose) } apply from: "$mppProjectWithSerializationAndComposePresetPath" diff --git a/common/compose/build.gradle b/common/compose/build.gradle index 9b26194b637..22616d2da3f 100644 --- a/common/compose/build.gradle +++ b/common/compose/build.gradle @@ -3,6 +3,7 @@ plugins { id "org.jetbrains.kotlin.plugin.serialization" id "com.android.library" alias(libs.plugins.jb.compose) + alias(libs.plugins.kt.jb.compose) } apply from: "$mppComposeJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" diff --git a/coroutines/compose/build.gradle b/coroutines/compose/build.gradle index fe1537c3ab1..e68a126b5ba 100644 --- a/coroutines/compose/build.gradle +++ b/coroutines/compose/build.gradle @@ -3,6 +3,7 @@ plugins { id "org.jetbrains.kotlin.plugin.serialization" id "com.android.library" alias(libs.plugins.jb.compose) + alias(libs.plugins.kt.jb.compose) } apply from: "$mppComposeJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" diff --git a/defaultAndroidSettings.gradle b/defaultAndroidSettings.gradle index f2170660397..c3f41ef8580 100644 --- a/defaultAndroidSettings.gradle +++ b/defaultAndroidSettings.gradle @@ -6,6 +6,7 @@ android { defaultConfig { minSdkVersion libs.versions.android.props.minSdk.get().toInteger() + compileSdkVersion libs.versions.android.props.compileSdk.get().toInteger() targetSdkVersion libs.versions.android.props.compileSdk.get().toInteger() versionCode "${android_code_version}".toInteger() versionName "$version" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 84313b0b175..17fbedf5385 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,12 @@ [versions] -kt = "1.9.23" +kt = "2.0.0" kt-serialization = "1.6.3" kt-coroutines = "1.8.1" kslog = "1.3.4" -jb-compose = "1.6.2" +jb-compose = "1.6.10" jb-exposed = "0.50.1" jb-dokka = "1.9.20" @@ -113,5 +113,6 @@ buildscript-android-dexcount = { module = "com.getkeepsafe.dexcount:dexcount-gra [plugins] jb-compose = { id = "org.jetbrains.compose", version.ref = "jb-compose" } +kt-jb-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kt" } versions = { id = "com.github.ben-manes.versions", version.ref = "versions" } diff --git a/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle b/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle index f70a1d5d842..2987a6a3d78 100644 --- a/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle +++ b/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle @@ -57,7 +57,6 @@ kotlin { jsTest { dependencies { implementation kotlin('test-js') - implementation kotlin('test-junit') } } nativeMain.dependsOn commonMain diff --git a/mppJvmJsAndroidProject.gradle b/mppJvmJsAndroidProject.gradle index cf44b62ce38..cd44ed45771 100644 --- a/mppJvmJsAndroidProject.gradle +++ b/mppJvmJsAndroidProject.gradle @@ -48,7 +48,6 @@ kotlin { jsTest { dependencies { implementation kotlin('test-js') - implementation kotlin('test-junit') } } androidUnitTest { diff --git a/mppJvmJsLinuxMingwLinuxArm64Project.gradle b/mppJvmJsLinuxMingwLinuxArm64Project.gradle index 622393cf7e6..27cba3db2e0 100644 --- a/mppJvmJsLinuxMingwLinuxArm64Project.gradle +++ b/mppJvmJsLinuxMingwLinuxArm64Project.gradle @@ -42,7 +42,6 @@ kotlin { jsTest { dependencies { implementation kotlin('test-js') - implementation kotlin('test-junit') } } diff --git a/mppJvmJsLinuxMingwProject.gradle b/mppJvmJsLinuxMingwProject.gradle index b16cba2f6df..d6c35289014 100644 --- a/mppJvmJsLinuxMingwProject.gradle +++ b/mppJvmJsLinuxMingwProject.gradle @@ -41,7 +41,6 @@ kotlin { jsTest { dependencies { implementation kotlin('test-js') - implementation kotlin('test-junit') } } mingwX64Test { diff --git a/mppProjectWithSerializationAndCompose.gradle b/mppProjectWithSerializationAndCompose.gradle index 31bc1e0a5dc..31308474059 100644 --- a/mppProjectWithSerializationAndCompose.gradle +++ b/mppProjectWithSerializationAndCompose.gradle @@ -58,7 +58,6 @@ kotlin { jsTest { dependencies { implementation kotlin('test-js') - implementation kotlin('test-junit') } } androidUnitTest { @@ -69,13 +68,6 @@ kotlin { implementation compose.uiTest } } - androidInstrumentedTest { - dependencies { - implementation kotlin('test-junit') - implementation libs.android.test.junit - implementation libs.android.espresso - } - } } } From 629d7c7a82320f8f7f58fe49d2f9c7235cc00220 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 3 Jun 2024 22:21:56 +0600 Subject: [PATCH 02/34] temporal project in upgrade --- build.gradle | 9 --------- gradle/libs.versions.toml | 8 ++++---- mppJvmJsAndroidProject.gradle | 10 ---------- mppJvmJsLinuxMingwProject.gradle | 10 ---------- 4 files changed, 4 insertions(+), 33 deletions(-) diff --git a/build.gradle b/build.gradle index b92716dd4da..74f08770aa2 100644 --- a/build.gradle +++ b/build.gradle @@ -29,15 +29,6 @@ allprojects { maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" } maven { url "https://nexus.inmo.dev/repository/maven-releases/" } } - - // temporal crutch until legacy tests will be stabled or legacy target will be removed - if (it != rootProject.findProject("docs")) { - tasks.whenTaskAdded { task -> - if(task.name == "jsLegacyBrowserTest" || task.name == "jsLegacyNodeTest") { - task.enabled = false - } - } - } } apply from: "./extensions.gradle" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 17fbedf5385..aac3c6a36df 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kt = "2.0.0" -kt-serialization = "1.6.3" +kt-serialization = "1.7.0-RC" kt-coroutines = "1.8.1" kslog = "1.3.4" @@ -21,17 +21,17 @@ koin = "3.5.6" okio = "3.9.0" -ksp = "1.9.23-1.0.20" +ksp = "2.0.0-1.0.21" kotlin-poet = "1.16.0" versions = "0.51.0" -android-gradle = "8.2.0" +android-gradle = "8.2.2" dexcount = "4.0.0" android-coreKtx = "1.13.1" android-recyclerView = "1.3.2" -android-appCompat = "1.6.1" +android-appCompat = "1.7.0" android-fragment = "1.7.1" android-espresso = "3.5.1" android-test = "1.1.5" diff --git a/mppJvmJsAndroidProject.gradle b/mppJvmJsAndroidProject.gradle index cd44ed45771..e08c7cc2f86 100644 --- a/mppJvmJsAndroidProject.gradle +++ b/mppJvmJsAndroidProject.gradle @@ -57,16 +57,6 @@ kotlin { implementation libs.android.espresso } } - mingwX64Test { - dependencies { - implementation kotlin('test-junit') - } - } - linuxX64Test { - dependencies { - implementation kotlin('test-junit') - } - } androidMain.dependsOn jvmMain } diff --git a/mppJvmJsLinuxMingwProject.gradle b/mppJvmJsLinuxMingwProject.gradle index d6c35289014..b6355513b6f 100644 --- a/mppJvmJsLinuxMingwProject.gradle +++ b/mppJvmJsLinuxMingwProject.gradle @@ -43,16 +43,6 @@ kotlin { implementation kotlin('test-js') } } - mingwX64Test { - dependencies { - implementation kotlin('test-junit') - } - } - linuxX64Test { - dependencies { - implementation kotlin('test-junit') - } - } nativeMain.dependsOn commonMain linuxX64Main.dependsOn nativeMain From 09c0cdebb54a53f02e3ae87150331abe9209f787 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 5 Jun 2024 17:10:27 +0600 Subject: [PATCH 03/34] update dependencies --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aac3c6a36df..360774e1efc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ kt-coroutines = "1.8.1" kslog = "1.3.4" -jb-compose = "1.6.10" +jb-compose = "1.6.11" jb-exposed = "0.50.1" jb-dokka = "1.9.20" @@ -22,7 +22,7 @@ koin = "3.5.6" okio = "3.9.0" ksp = "2.0.0-1.0.21" -kotlin-poet = "1.16.0" +kotlin-poet = "1.17.0" versions = "0.51.0" From a8056f3120bcd9ba3a6e53cbcb07f24ec6a02e22 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 6 Jun 2024 14:52:34 +0600 Subject: [PATCH 04/34] update dependencies --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 360774e1efc..753998b9b20 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ kt-coroutines = "1.8.1" kslog = "1.3.4" jb-compose = "1.6.11" -jb-exposed = "0.50.1" +jb-exposed = "0.51.1" jb-dokka = "1.9.20" korlibs = "5.4.0" @@ -21,7 +21,7 @@ koin = "3.5.6" okio = "3.9.0" -ksp = "2.0.0-1.0.21" +ksp = "2.0.0-1.0.22" kotlin-poet = "1.17.0" versions = "0.51.0" From f1ab5ab51fd33c9931199afbe32aeef1292fb5ed Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 6 Jun 2024 20:10:07 +0600 Subject: [PATCH 05/34] update kotlinx serialization --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 753998b9b20..3d3865a3c4e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kt = "2.0.0" -kt-serialization = "1.7.0-RC" +kt-serialization = "1.7.0" kt-coroutines = "1.8.1" kslog = "1.3.4" From 0dd8f41eb01c3d16cab74b40a7622e94196b3915 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 11 Jul 2024 20:59:05 +0600 Subject: [PATCH 06/34] update dependencies --- gradle/libs.versions.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3d3865a3c4e..b8d30c78a27 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,12 +1,12 @@ [versions] -kt = "2.0.0" -kt-serialization = "1.7.0" +kt = "2.0.20-Beta2" +kt-serialization = "1.7.1" kt-coroutines = "1.8.1" kslog = "1.3.4" -jb-compose = "1.6.11" +jb-compose = "1.7.0-dev1721" jb-exposed = "0.51.1" jb-dokka = "1.9.20" @@ -22,7 +22,7 @@ koin = "3.5.6" okio = "3.9.0" ksp = "2.0.0-1.0.22" -kotlin-poet = "1.17.0" +kotlin-poet = "1.18.0" versions = "0.51.0" From d94cd7ea9492f51b993b3a78a5f450f2afb723ce Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 25 Jul 2024 18:27:06 +0600 Subject: [PATCH 07/34] some fixes --- gradle/libs.versions.toml | 10 +- language_codes/generator/full.json | 1 + .../generator/src/main/kotlin/Main.kt | 59 +- language_codes/generator/tags.json | 1 + .../language_codes/LanguageCodes.kt | 5477 ++++++++++------- .../language_codes/StringToLanguageCodes.kt | 1490 +++-- ...sAndroidLinuxMingwLinuxArm64Project.gradle | 1 - 7 files changed, 4303 insertions(+), 2736 deletions(-) create mode 100644 language_codes/generator/full.json create mode 100644 language_codes/generator/tags.json diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b8d30c78a27..172ab0a38b1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ kt-coroutines = "1.8.1" kslog = "1.3.4" -jb-compose = "1.7.0-dev1721" +jb-compose = "1.7.0-dev1742" jb-exposed = "0.51.1" jb-dokka = "1.9.20" @@ -21,7 +21,7 @@ koin = "3.5.6" okio = "3.9.0" -ksp = "2.0.0-1.0.22" +ksp = "2.0.20-Beta2-1.0.23" kotlin-poet = "1.18.0" versions = "0.51.0" @@ -32,9 +32,9 @@ dexcount = "4.0.0" android-coreKtx = "1.13.1" android-recyclerView = "1.3.2" android-appCompat = "1.7.0" -android-fragment = "1.7.1" -android-espresso = "3.5.1" -android-test = "1.1.5" +android-fragment = "1.8.1" +android-espresso = "3.6.1" +android-test = "1.2.1" android-compose-material3 = "1.2.1" android-props-minSdk = "21" diff --git a/language_codes/generator/full.json b/language_codes/generator/full.json new file mode 100644 index 00000000000..206f917e209 --- /dev/null +++ b/language_codes/generator/full.json @@ -0,0 +1 @@ +[{"alpha3-b":"aar","alpha3-t":null,"alpha2":"aa","English":"Afar","French":"afar"},{"alpha3-b":"abk","alpha3-t":null,"alpha2":"ab","English":"Abkhazian","French":"abkhaze"},{"alpha3-b":"ace","alpha3-t":null,"alpha2":null,"English":"Achinese","French":"aceh"},{"alpha3-b":"ach","alpha3-t":null,"alpha2":null,"English":"Acoli","French":"acoli"},{"alpha3-b":"ada","alpha3-t":null,"alpha2":null,"English":"Adangme","French":"adangme"},{"alpha3-b":"ady","alpha3-t":null,"alpha2":null,"English":"Adyghe; Adygei","French":"adyghé"},{"alpha3-b":"afa","alpha3-t":null,"alpha2":null,"English":"Afro-Asiatic languages","French":"afro-asiatiques, langues"},{"alpha3-b":"afh","alpha3-t":null,"alpha2":null,"English":"Afrihili","French":"afrihili"},{"alpha3-b":"afr","alpha3-t":null,"alpha2":"af","English":"Afrikaans","French":"afrikaans"},{"alpha3-b":"ain","alpha3-t":null,"alpha2":null,"English":"Ainu","French":"aïnou"},{"alpha3-b":"aka","alpha3-t":null,"alpha2":"ak","English":"Akan","French":"akan"},{"alpha3-b":"akk","alpha3-t":null,"alpha2":null,"English":"Akkadian","French":"akkadien"},{"alpha3-b":"alb","alpha3-t":"sqi","alpha2":"sq","English":"Albanian","French":"albanais"},{"alpha3-b":"ale","alpha3-t":null,"alpha2":null,"English":"Aleut","French":"aléoute"},{"alpha3-b":"alg","alpha3-t":null,"alpha2":null,"English":"Algonquian languages","French":"algonquines, langues"},{"alpha3-b":"alt","alpha3-t":null,"alpha2":null,"English":"Southern Altai","French":"altai du Sud"},{"alpha3-b":"amh","alpha3-t":null,"alpha2":"am","English":"Amharic","French":"amharique"},{"alpha3-b":"ang","alpha3-t":null,"alpha2":null,"English":"English, Old (ca.450-1100)","French":"anglo-saxon (ca.450-1100)"},{"alpha3-b":"anp","alpha3-t":null,"alpha2":null,"English":"Angika","French":"angika"},{"alpha3-b":"apa","alpha3-t":null,"alpha2":null,"English":"Apache languages","French":"apaches, langues"},{"alpha3-b":"ara","alpha3-t":null,"alpha2":"ar","English":"Arabic","French":"arabe"},{"alpha3-b":"arc","alpha3-t":null,"alpha2":null,"English":"Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)","French":"araméen d'empire (700-300 BCE)"},{"alpha3-b":"arg","alpha3-t":null,"alpha2":"an","English":"Aragonese","French":"aragonais"},{"alpha3-b":"arm","alpha3-t":"hye","alpha2":"hy","English":"Armenian","French":"arménien"},{"alpha3-b":"arn","alpha3-t":null,"alpha2":null,"English":"Mapudungun; Mapuche","French":"mapudungun; mapuche; mapuce"},{"alpha3-b":"arp","alpha3-t":null,"alpha2":null,"English":"Arapaho","French":"arapaho"},{"alpha3-b":"art","alpha3-t":null,"alpha2":null,"English":"Artificial languages","French":"artificielles, langues"},{"alpha3-b":"arw","alpha3-t":null,"alpha2":null,"English":"Arawak","French":"arawak"},{"alpha3-b":"asm","alpha3-t":null,"alpha2":"as","English":"Assamese","French":"assamais"},{"alpha3-b":"ast","alpha3-t":null,"alpha2":null,"English":"Asturian; Bable; Leonese; Asturleonese","French":"asturien; bable; léonais; asturoléonais"},{"alpha3-b":"ath","alpha3-t":null,"alpha2":null,"English":"Athapascan languages","French":"athapascanes, langues"},{"alpha3-b":"aus","alpha3-t":null,"alpha2":null,"English":"Australian languages","French":"australiennes, langues"},{"alpha3-b":"ava","alpha3-t":null,"alpha2":"av","English":"Avaric","French":"avar"},{"alpha3-b":"ave","alpha3-t":null,"alpha2":"ae","English":"Avestan","French":"avestique"},{"alpha3-b":"awa","alpha3-t":null,"alpha2":null,"English":"Awadhi","French":"awadhi"},{"alpha3-b":"aym","alpha3-t":null,"alpha2":"ay","English":"Aymara","French":"aymara"},{"alpha3-b":"aze","alpha3-t":null,"alpha2":"az","English":"Azerbaijani","French":"azéri"},{"alpha3-b":"bad","alpha3-t":null,"alpha2":null,"English":"Banda languages","French":"banda, langues"},{"alpha3-b":"bai","alpha3-t":null,"alpha2":null,"English":"Bamileke languages","French":"bamiléké, langues"},{"alpha3-b":"bak","alpha3-t":null,"alpha2":"ba","English":"Bashkir","French":"bachkir"},{"alpha3-b":"bal","alpha3-t":null,"alpha2":null,"English":"Baluchi","French":"baloutchi"},{"alpha3-b":"bam","alpha3-t":null,"alpha2":"bm","English":"Bambara","French":"bambara"},{"alpha3-b":"ban","alpha3-t":null,"alpha2":null,"English":"Balinese","French":"balinais"},{"alpha3-b":"baq","alpha3-t":"eus","alpha2":"eu","English":"Basque","French":"basque"},{"alpha3-b":"bas","alpha3-t":null,"alpha2":null,"English":"Basa","French":"basa"},{"alpha3-b":"bat","alpha3-t":null,"alpha2":null,"English":"Baltic languages","French":"baltes, langues"},{"alpha3-b":"bej","alpha3-t":null,"alpha2":null,"English":"Beja; Bedawiyet","French":"bedja"},{"alpha3-b":"bel","alpha3-t":null,"alpha2":"be","English":"Belarusian","French":"biélorusse"},{"alpha3-b":"bem","alpha3-t":null,"alpha2":null,"English":"Bemba","French":"bemba"},{"alpha3-b":"ben","alpha3-t":null,"alpha2":"bn","English":"Bengali","French":"bengali"},{"alpha3-b":"ber","alpha3-t":null,"alpha2":null,"English":"Berber languages","French":"berbères, langues"},{"alpha3-b":"bho","alpha3-t":null,"alpha2":null,"English":"Bhojpuri","French":"bhojpuri"},{"alpha3-b":"bih","alpha3-t":null,"alpha2":"bh","English":"Bihari languages","French":"langues biharis"},{"alpha3-b":"bik","alpha3-t":null,"alpha2":null,"English":"Bikol","French":"bikol"},{"alpha3-b":"bin","alpha3-t":null,"alpha2":null,"English":"Bini; Edo","French":"bini; edo"},{"alpha3-b":"bis","alpha3-t":null,"alpha2":"bi","English":"Bislama","French":"bichlamar"},{"alpha3-b":"bla","alpha3-t":null,"alpha2":null,"English":"Siksika","French":"blackfoot"},{"alpha3-b":"bnt","alpha3-t":null,"alpha2":null,"English":"Bantu (Other)","French":"bantoues, autres langues"},{"alpha3-b":"bos","alpha3-t":null,"alpha2":"bs","English":"Bosnian","French":"bosniaque"},{"alpha3-b":"bra","alpha3-t":null,"alpha2":null,"English":"Braj","French":"braj"},{"alpha3-b":"bre","alpha3-t":null,"alpha2":"br","English":"Breton","French":"breton"},{"alpha3-b":"btk","alpha3-t":null,"alpha2":null,"English":"Batak languages","French":"batak, langues"},{"alpha3-b":"bua","alpha3-t":null,"alpha2":null,"English":"Buriat","French":"bouriate"},{"alpha3-b":"bug","alpha3-t":null,"alpha2":null,"English":"Buginese","French":"bugi"},{"alpha3-b":"bul","alpha3-t":null,"alpha2":"bg","English":"Bulgarian","French":"bulgare"},{"alpha3-b":"bur","alpha3-t":"mya","alpha2":"my","English":"Burmese","French":"birman"},{"alpha3-b":"byn","alpha3-t":null,"alpha2":null,"English":"Blin; Bilin","French":"blin; bilen"},{"alpha3-b":"cad","alpha3-t":null,"alpha2":null,"English":"Caddo","French":"caddo"},{"alpha3-b":"cai","alpha3-t":null,"alpha2":null,"English":"Central American Indian languages","French":"amérindiennes de L'Amérique centrale, langues"},{"alpha3-b":"car","alpha3-t":null,"alpha2":null,"English":"Galibi Carib","French":"karib; galibi; carib"},{"alpha3-b":"cat","alpha3-t":null,"alpha2":"ca","English":"Catalan; Valencian","French":"catalan; valencien"},{"alpha3-b":"cau","alpha3-t":null,"alpha2":null,"English":"Caucasian languages","French":"caucasiennes, langues"},{"alpha3-b":"ceb","alpha3-t":null,"alpha2":null,"English":"Cebuano","French":"cebuano"},{"alpha3-b":"cel","alpha3-t":null,"alpha2":null,"English":"Celtic languages","French":"celtiques, langues; celtes, langues"},{"alpha3-b":"cha","alpha3-t":null,"alpha2":"ch","English":"Chamorro","French":"chamorro"},{"alpha3-b":"chb","alpha3-t":null,"alpha2":null,"English":"Chibcha","French":"chibcha"},{"alpha3-b":"che","alpha3-t":null,"alpha2":"ce","English":"Chechen","French":"tchétchène"},{"alpha3-b":"chg","alpha3-t":null,"alpha2":null,"English":"Chagatai","French":"djaghataï"},{"alpha3-b":"chi","alpha3-t":"zho","alpha2":"zh","English":"Chinese","French":"chinois"},{"alpha3-b":"chk","alpha3-t":null,"alpha2":null,"English":"Chuukese","French":"chuuk"},{"alpha3-b":"chm","alpha3-t":null,"alpha2":null,"English":"Mari","French":"mari"},{"alpha3-b":"chn","alpha3-t":null,"alpha2":null,"English":"Chinook jargon","French":"chinook, jargon"},{"alpha3-b":"cho","alpha3-t":null,"alpha2":null,"English":"Choctaw","French":"choctaw"},{"alpha3-b":"chp","alpha3-t":null,"alpha2":null,"English":"Chipewyan; Dene Suline","French":"chipewyan"},{"alpha3-b":"chr","alpha3-t":null,"alpha2":null,"English":"Cherokee","French":"cherokee"},{"alpha3-b":"chu","alpha3-t":null,"alpha2":"cu","English":"Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic","French":"slavon d'église; vieux slave; slavon liturgique; vieux bulgare"},{"alpha3-b":"chv","alpha3-t":null,"alpha2":"cv","English":"Chuvash","French":"tchouvache"},{"alpha3-b":"chy","alpha3-t":null,"alpha2":null,"English":"Cheyenne","French":"cheyenne"},{"alpha3-b":"cmc","alpha3-t":null,"alpha2":null,"English":"Chamic languages","French":"chames, langues"},{"alpha3-b":"cop","alpha3-t":null,"alpha2":null,"English":"Coptic","French":"copte"},{"alpha3-b":"cor","alpha3-t":null,"alpha2":"kw","English":"Cornish","French":"cornique"},{"alpha3-b":"cos","alpha3-t":null,"alpha2":"co","English":"Corsican","French":"corse"},{"alpha3-b":"cpe","alpha3-t":null,"alpha2":null,"English":"Creoles and pidgins, English based","French":"créoles et pidgins basés sur l'anglais"},{"alpha3-b":"cpf","alpha3-t":null,"alpha2":null,"English":"Creoles and pidgins, French-based","French":"créoles et pidgins basés sur le français"},{"alpha3-b":"cpp","alpha3-t":null,"alpha2":null,"English":"Creoles and pidgins, Portuguese-based","French":"créoles et pidgins basés sur le portugais"},{"alpha3-b":"cre","alpha3-t":null,"alpha2":"cr","English":"Cree","French":"cree"},{"alpha3-b":"crh","alpha3-t":null,"alpha2":null,"English":"Crimean Tatar; Crimean Turkish","French":"tatar de Crimé"},{"alpha3-b":"crp","alpha3-t":null,"alpha2":null,"English":"Creoles and pidgins","French":"créoles et pidgins"},{"alpha3-b":"csb","alpha3-t":null,"alpha2":null,"English":"Kashubian","French":"kachoube"},{"alpha3-b":"cus","alpha3-t":null,"alpha2":null,"English":"Cushitic languages","French":"couchitiques, langues"},{"alpha3-b":"cze","alpha3-t":"ces","alpha2":"cs","English":"Czech","French":"tchèque"},{"alpha3-b":"dak","alpha3-t":null,"alpha2":null,"English":"Dakota","French":"dakota"},{"alpha3-b":"dan","alpha3-t":null,"alpha2":"da","English":"Danish","French":"danois"},{"alpha3-b":"dar","alpha3-t":null,"alpha2":null,"English":"Dargwa","French":"dargwa"},{"alpha3-b":"day","alpha3-t":null,"alpha2":null,"English":"Land Dayak languages","French":"dayak, langues"},{"alpha3-b":"del","alpha3-t":null,"alpha2":null,"English":"Delaware","French":"delaware"},{"alpha3-b":"den","alpha3-t":null,"alpha2":null,"English":"Slave (Athapascan)","French":"esclave (athapascan)"},{"alpha3-b":"dgr","alpha3-t":null,"alpha2":null,"English":"Dogrib","French":"dogrib"},{"alpha3-b":"din","alpha3-t":null,"alpha2":null,"English":"Dinka","French":"dinka"},{"alpha3-b":"div","alpha3-t":null,"alpha2":"dv","English":"Divehi; Dhivehi; Maldivian","French":"maldivien"},{"alpha3-b":"doi","alpha3-t":null,"alpha2":null,"English":"Dogri","French":"dogri"},{"alpha3-b":"dra","alpha3-t":null,"alpha2":null,"English":"Dravidian languages","French":"dravidiennes, langues"},{"alpha3-b":"dsb","alpha3-t":null,"alpha2":null,"English":"Lower Sorbian","French":"bas-sorabe"},{"alpha3-b":"dua","alpha3-t":null,"alpha2":null,"English":"Duala","French":"douala"},{"alpha3-b":"dum","alpha3-t":null,"alpha2":null,"English":"Dutch, Middle (ca.1050-1350)","French":"néerlandais moyen (ca. 1050-1350)"},{"alpha3-b":"dut","alpha3-t":"nld","alpha2":"nl","English":"Dutch; Flemish","French":"néerlandais; flamand"},{"alpha3-b":"dyu","alpha3-t":null,"alpha2":null,"English":"Dyula","French":"dioula"},{"alpha3-b":"dzo","alpha3-t":null,"alpha2":"dz","English":"Dzongkha","French":"dzongkha"},{"alpha3-b":"efi","alpha3-t":null,"alpha2":null,"English":"Efik","French":"efik"},{"alpha3-b":"egy","alpha3-t":null,"alpha2":null,"English":"Egyptian (Ancient)","French":"égyptien"},{"alpha3-b":"eka","alpha3-t":null,"alpha2":null,"English":"Ekajuk","French":"ekajuk"},{"alpha3-b":"elx","alpha3-t":null,"alpha2":null,"English":"Elamite","French":"élamite"},{"alpha3-b":"eng","alpha3-t":null,"alpha2":"en","English":"English","French":"anglais"},{"alpha3-b":"enm","alpha3-t":null,"alpha2":null,"English":"English, Middle (1100-1500)","French":"anglais moyen (1100-1500)"},{"alpha3-b":"epo","alpha3-t":null,"alpha2":"eo","English":"Esperanto","French":"espéranto"},{"alpha3-b":"est","alpha3-t":null,"alpha2":"et","English":"Estonian","French":"estonien"},{"alpha3-b":"ewe","alpha3-t":null,"alpha2":"ee","English":"Ewe","French":"éwé"},{"alpha3-b":"ewo","alpha3-t":null,"alpha2":null,"English":"Ewondo","French":"éwondo"},{"alpha3-b":"fan","alpha3-t":null,"alpha2":null,"English":"Fang","French":"fang"},{"alpha3-b":"fao","alpha3-t":null,"alpha2":"fo","English":"Faroese","French":"féroïen"},{"alpha3-b":"fat","alpha3-t":null,"alpha2":null,"English":"Fanti","French":"fanti"},{"alpha3-b":"fij","alpha3-t":null,"alpha2":"fj","English":"Fijian","French":"fidjien"},{"alpha3-b":"fil","alpha3-t":null,"alpha2":null,"English":"Filipino; Pilipino","French":"filipino; pilipino"},{"alpha3-b":"fin","alpha3-t":null,"alpha2":"fi","English":"Finnish","French":"finnois"},{"alpha3-b":"fiu","alpha3-t":null,"alpha2":null,"English":"Finno-Ugrian languages","French":"finno-ougriennes, langues"},{"alpha3-b":"fon","alpha3-t":null,"alpha2":null,"English":"Fon","French":"fon"},{"alpha3-b":"fre","alpha3-t":"fra","alpha2":"fr","English":"French","French":"français"},{"alpha3-b":"frm","alpha3-t":null,"alpha2":null,"English":"French, Middle (ca.1400-1600)","French":"français moyen (1400-1600)"},{"alpha3-b":"fro","alpha3-t":null,"alpha2":null,"English":"French, Old (842-ca.1400)","French":"français ancien (842-ca.1400)"},{"alpha3-b":"frr","alpha3-t":null,"alpha2":null,"English":"Northern Frisian","French":"frison septentrional"},{"alpha3-b":"frs","alpha3-t":null,"alpha2":null,"English":"Eastern Frisian","French":"frison oriental"},{"alpha3-b":"fry","alpha3-t":null,"alpha2":"fy","English":"Western Frisian","French":"frison occidental"},{"alpha3-b":"ful","alpha3-t":null,"alpha2":"ff","English":"Fulah","French":"peul"},{"alpha3-b":"fur","alpha3-t":null,"alpha2":null,"English":"Friulian","French":"frioulan"},{"alpha3-b":"gaa","alpha3-t":null,"alpha2":null,"English":"Ga","French":"ga"},{"alpha3-b":"gay","alpha3-t":null,"alpha2":null,"English":"Gayo","French":"gayo"},{"alpha3-b":"gba","alpha3-t":null,"alpha2":null,"English":"Gbaya","French":"gbaya"},{"alpha3-b":"gem","alpha3-t":null,"alpha2":null,"English":"Germanic languages","French":"germaniques, langues"},{"alpha3-b":"geo","alpha3-t":"kat","alpha2":"ka","English":"Georgian","French":"géorgien"},{"alpha3-b":"ger","alpha3-t":"deu","alpha2":"de","English":"German","French":"allemand"},{"alpha3-b":"gez","alpha3-t":null,"alpha2":null,"English":"Geez","French":"guèze"},{"alpha3-b":"gil","alpha3-t":null,"alpha2":null,"English":"Gilbertese","French":"kiribati"},{"alpha3-b":"gla","alpha3-t":null,"alpha2":"gd","English":"Gaelic; Scottish Gaelic","French":"gaélique; gaélique écossais"},{"alpha3-b":"gle","alpha3-t":null,"alpha2":"ga","English":"Irish","French":"irlandais"},{"alpha3-b":"glg","alpha3-t":null,"alpha2":"gl","English":"Galician","French":"galicien"},{"alpha3-b":"glv","alpha3-t":null,"alpha2":"gv","English":"Manx","French":"manx; mannois"},{"alpha3-b":"gmh","alpha3-t":null,"alpha2":null,"English":"German, Middle High (ca.1050-1500)","French":"allemand, moyen haut (ca. 1050-1500)"},{"alpha3-b":"goh","alpha3-t":null,"alpha2":null,"English":"German, Old High (ca.750-1050)","French":"allemand, vieux haut (ca. 750-1050)"},{"alpha3-b":"gon","alpha3-t":null,"alpha2":null,"English":"Gondi","French":"gond"},{"alpha3-b":"gor","alpha3-t":null,"alpha2":null,"English":"Gorontalo","French":"gorontalo"},{"alpha3-b":"got","alpha3-t":null,"alpha2":null,"English":"Gothic","French":"gothique"},{"alpha3-b":"grb","alpha3-t":null,"alpha2":null,"English":"Grebo","French":"grebo"},{"alpha3-b":"grc","alpha3-t":null,"alpha2":null,"English":"Greek, Ancient (to 1453)","French":"grec ancien (jusqu'à 1453)"},{"alpha3-b":"gre","alpha3-t":"ell","alpha2":"el","English":"Greek, Modern (1453-)","French":"grec moderne (après 1453)"},{"alpha3-b":"grn","alpha3-t":null,"alpha2":"gn","English":"Guarani","French":"guarani"},{"alpha3-b":"gsw","alpha3-t":null,"alpha2":null,"English":"Swiss German; Alemannic; Alsatian","French":"suisse alémanique; alémanique; alsacien"},{"alpha3-b":"guj","alpha3-t":null,"alpha2":"gu","English":"Gujarati","French":"goudjrati"},{"alpha3-b":"gwi","alpha3-t":null,"alpha2":null,"English":"Gwich'in","French":"gwich'in"},{"alpha3-b":"hai","alpha3-t":null,"alpha2":null,"English":"Haida","French":"haida"},{"alpha3-b":"hat","alpha3-t":null,"alpha2":"ht","English":"Haitian; Haitian Creole","French":"haïtien; créole haïtien"},{"alpha3-b":"hau","alpha3-t":null,"alpha2":"ha","English":"Hausa","French":"haoussa"},{"alpha3-b":"haw","alpha3-t":null,"alpha2":null,"English":"Hawaiian","French":"hawaïen"},{"alpha3-b":"heb","alpha3-t":null,"alpha2":"he","English":"Hebrew","French":"hébreu"},{"alpha3-b":"her","alpha3-t":null,"alpha2":"hz","English":"Herero","French":"herero"},{"alpha3-b":"hil","alpha3-t":null,"alpha2":null,"English":"Hiligaynon","French":"hiligaynon"},{"alpha3-b":"him","alpha3-t":null,"alpha2":null,"English":"Himachali languages; Western Pahari languages","French":"langues himachalis; langues paharis occidentales"},{"alpha3-b":"hin","alpha3-t":null,"alpha2":"hi","English":"Hindi","French":"hindi"},{"alpha3-b":"hit","alpha3-t":null,"alpha2":null,"English":"Hittite","French":"hittite"},{"alpha3-b":"hmn","alpha3-t":null,"alpha2":null,"English":"Hmong; Mong","French":"hmong"},{"alpha3-b":"hmo","alpha3-t":null,"alpha2":"ho","English":"Hiri Motu","French":"hiri motu"},{"alpha3-b":"hrv","alpha3-t":null,"alpha2":"hr","English":"Croatian","French":"croate"},{"alpha3-b":"hsb","alpha3-t":null,"alpha2":null,"English":"Upper Sorbian","French":"haut-sorabe"},{"alpha3-b":"hun","alpha3-t":null,"alpha2":"hu","English":"Hungarian","French":"hongrois"},{"alpha3-b":"hup","alpha3-t":null,"alpha2":null,"English":"Hupa","French":"hupa"},{"alpha3-b":"iba","alpha3-t":null,"alpha2":null,"English":"Iban","French":"iban"},{"alpha3-b":"ibo","alpha3-t":null,"alpha2":"ig","English":"Igbo","French":"igbo"},{"alpha3-b":"ice","alpha3-t":"isl","alpha2":"is","English":"Icelandic","French":"islandais"},{"alpha3-b":"ido","alpha3-t":null,"alpha2":"io","English":"Ido","French":"ido"},{"alpha3-b":"iii","alpha3-t":null,"alpha2":"ii","English":"Sichuan Yi; Nuosu","French":"yi de Sichuan"},{"alpha3-b":"ijo","alpha3-t":null,"alpha2":null,"English":"Ijo languages","French":"ijo, langues"},{"alpha3-b":"iku","alpha3-t":null,"alpha2":"iu","English":"Inuktitut","French":"inuktitut"},{"alpha3-b":"ile","alpha3-t":null,"alpha2":"ie","English":"Interlingue; Occidental","French":"interlingue"},{"alpha3-b":"ilo","alpha3-t":null,"alpha2":null,"English":"Iloko","French":"ilocano"},{"alpha3-b":"ina","alpha3-t":null,"alpha2":"ia","English":"Interlingua (International Auxiliary Language Association)","French":"interlingua (langue auxiliaire internationale)"},{"alpha3-b":"inc","alpha3-t":null,"alpha2":null,"English":"Indic languages","French":"indo-aryennes, langues"},{"alpha3-b":"ind","alpha3-t":null,"alpha2":"id","English":"Indonesian","French":"indonésien"},{"alpha3-b":"ine","alpha3-t":null,"alpha2":null,"English":"Indo-European languages","French":"indo-européennes, langues"},{"alpha3-b":"inh","alpha3-t":null,"alpha2":null,"English":"Ingush","French":"ingouche"},{"alpha3-b":"ipk","alpha3-t":null,"alpha2":"ik","English":"Inupiaq","French":"inupiaq"},{"alpha3-b":"ira","alpha3-t":null,"alpha2":null,"English":"Iranian languages","French":"iraniennes, langues"},{"alpha3-b":"iro","alpha3-t":null,"alpha2":null,"English":"Iroquoian languages","French":"iroquoises, langues"},{"alpha3-b":"ita","alpha3-t":null,"alpha2":"it","English":"Italian","French":"italien"},{"alpha3-b":"jav","alpha3-t":null,"alpha2":"jv","English":"Javanese","French":"javanais"},{"alpha3-b":"jbo","alpha3-t":null,"alpha2":null,"English":"Lojban","French":"lojban"},{"alpha3-b":"jpn","alpha3-t":null,"alpha2":"ja","English":"Japanese","French":"japonais"},{"alpha3-b":"jpr","alpha3-t":null,"alpha2":null,"English":"Judeo-Persian","French":"judéo-persan"},{"alpha3-b":"jrb","alpha3-t":null,"alpha2":null,"English":"Judeo-Arabic","French":"judéo-arabe"},{"alpha3-b":"kaa","alpha3-t":null,"alpha2":null,"English":"Kara-Kalpak","French":"karakalpak"},{"alpha3-b":"kab","alpha3-t":null,"alpha2":null,"English":"Kabyle","French":"kabyle"},{"alpha3-b":"kac","alpha3-t":null,"alpha2":null,"English":"Kachin; Jingpho","French":"kachin; jingpho"},{"alpha3-b":"kal","alpha3-t":null,"alpha2":"kl","English":"Kalaallisut; Greenlandic","French":"groenlandais"},{"alpha3-b":"kam","alpha3-t":null,"alpha2":null,"English":"Kamba","French":"kamba"},{"alpha3-b":"kan","alpha3-t":null,"alpha2":"kn","English":"Kannada","French":"kannada"},{"alpha3-b":"kar","alpha3-t":null,"alpha2":null,"English":"Karen languages","French":"karen, langues"},{"alpha3-b":"kas","alpha3-t":null,"alpha2":"ks","English":"Kashmiri","French":"kashmiri"},{"alpha3-b":"kau","alpha3-t":null,"alpha2":"kr","English":"Kanuri","French":"kanouri"},{"alpha3-b":"kaw","alpha3-t":null,"alpha2":null,"English":"Kawi","French":"kawi"},{"alpha3-b":"kaz","alpha3-t":null,"alpha2":"kk","English":"Kazakh","French":"kazakh"},{"alpha3-b":"kbd","alpha3-t":null,"alpha2":null,"English":"Kabardian","French":"kabardien"},{"alpha3-b":"kha","alpha3-t":null,"alpha2":null,"English":"Khasi","French":"khasi"},{"alpha3-b":"khi","alpha3-t":null,"alpha2":null,"English":"Khoisan languages","French":"khoïsan, langues"},{"alpha3-b":"khm","alpha3-t":null,"alpha2":"km","English":"Central Khmer","French":"khmer central"},{"alpha3-b":"kho","alpha3-t":null,"alpha2":null,"English":"Khotanese; Sakan","French":"khotanais; sakan"},{"alpha3-b":"kik","alpha3-t":null,"alpha2":"ki","English":"Kikuyu; Gikuyu","French":"kikuyu"},{"alpha3-b":"kin","alpha3-t":null,"alpha2":"rw","English":"Kinyarwanda","French":"rwanda"},{"alpha3-b":"kir","alpha3-t":null,"alpha2":"ky","English":"Kirghiz; Kyrgyz","French":"kirghiz"},{"alpha3-b":"kmb","alpha3-t":null,"alpha2":null,"English":"Kimbundu","French":"kimbundu"},{"alpha3-b":"kok","alpha3-t":null,"alpha2":null,"English":"Konkani","French":"konkani"},{"alpha3-b":"kom","alpha3-t":null,"alpha2":"kv","English":"Komi","French":"kom"},{"alpha3-b":"kon","alpha3-t":null,"alpha2":"kg","English":"Kongo","French":"kongo"},{"alpha3-b":"kor","alpha3-t":null,"alpha2":"ko","English":"Korean","French":"coréen"},{"alpha3-b":"kos","alpha3-t":null,"alpha2":null,"English":"Kosraean","French":"kosrae"},{"alpha3-b":"kpe","alpha3-t":null,"alpha2":null,"English":"Kpelle","French":"kpellé"},{"alpha3-b":"krc","alpha3-t":null,"alpha2":null,"English":"Karachay-Balkar","French":"karatchai balkar"},{"alpha3-b":"krl","alpha3-t":null,"alpha2":null,"English":"Karelian","French":"carélien"},{"alpha3-b":"kro","alpha3-t":null,"alpha2":null,"English":"Kru languages","French":"krou, langues"},{"alpha3-b":"kru","alpha3-t":null,"alpha2":null,"English":"Kurukh","French":"kurukh"},{"alpha3-b":"kua","alpha3-t":null,"alpha2":"kj","English":"Kuanyama; Kwanyama","French":"kuanyama; kwanyama"},{"alpha3-b":"kum","alpha3-t":null,"alpha2":null,"English":"Kumyk","French":"koumyk"},{"alpha3-b":"kur","alpha3-t":null,"alpha2":"ku","English":"Kurdish","French":"kurde"},{"alpha3-b":"kut","alpha3-t":null,"alpha2":null,"English":"Kutenai","French":"kutenai"},{"alpha3-b":"lad","alpha3-t":null,"alpha2":null,"English":"Ladino","French":"judéo-espagnol"},{"alpha3-b":"lah","alpha3-t":null,"alpha2":null,"English":"Lahnda","French":"lahnda"},{"alpha3-b":"lam","alpha3-t":null,"alpha2":null,"English":"Lamba","French":"lamba"},{"alpha3-b":"lao","alpha3-t":null,"alpha2":"lo","English":"Lao","French":"lao"},{"alpha3-b":"lat","alpha3-t":null,"alpha2":"la","English":"Latin","French":"latin"},{"alpha3-b":"lav","alpha3-t":null,"alpha2":"lv","English":"Latvian","French":"letton"},{"alpha3-b":"lez","alpha3-t":null,"alpha2":null,"English":"Lezghian","French":"lezghien"},{"alpha3-b":"lim","alpha3-t":null,"alpha2":"li","English":"Limburgan; Limburger; Limburgish","French":"limbourgeois"},{"alpha3-b":"lin","alpha3-t":null,"alpha2":"ln","English":"Lingala","French":"lingala"},{"alpha3-b":"lit","alpha3-t":null,"alpha2":"lt","English":"Lithuanian","French":"lituanien"},{"alpha3-b":"lol","alpha3-t":null,"alpha2":null,"English":"Mongo","French":"mongo"},{"alpha3-b":"loz","alpha3-t":null,"alpha2":null,"English":"Lozi","French":"lozi"},{"alpha3-b":"ltz","alpha3-t":null,"alpha2":"lb","English":"Luxembourgish; Letzeburgesch","French":"luxembourgeois"},{"alpha3-b":"lua","alpha3-t":null,"alpha2":null,"English":"Luba-Lulua","French":"luba-lulua"},{"alpha3-b":"lub","alpha3-t":null,"alpha2":"lu","English":"Luba-Katanga","French":"luba-katanga"},{"alpha3-b":"lug","alpha3-t":null,"alpha2":"lg","English":"Ganda","French":"ganda"},{"alpha3-b":"lui","alpha3-t":null,"alpha2":null,"English":"Luiseno","French":"luiseno"},{"alpha3-b":"lun","alpha3-t":null,"alpha2":null,"English":"Lunda","French":"lunda"},{"alpha3-b":"luo","alpha3-t":null,"alpha2":null,"English":"Luo (Kenya and Tanzania)","French":"luo (Kenya et Tanzanie)"},{"alpha3-b":"lus","alpha3-t":null,"alpha2":null,"English":"Lushai","French":"lushai"},{"alpha3-b":"mac","alpha3-t":"mkd","alpha2":"mk","English":"Macedonian","French":"macédonien"},{"alpha3-b":"mad","alpha3-t":null,"alpha2":null,"English":"Madurese","French":"madourais"},{"alpha3-b":"mag","alpha3-t":null,"alpha2":null,"English":"Magahi","French":"magahi"},{"alpha3-b":"mah","alpha3-t":null,"alpha2":"mh","English":"Marshallese","French":"marshall"},{"alpha3-b":"mai","alpha3-t":null,"alpha2":null,"English":"Maithili","French":"maithili"},{"alpha3-b":"mak","alpha3-t":null,"alpha2":null,"English":"Makasar","French":"makassar"},{"alpha3-b":"mal","alpha3-t":null,"alpha2":"ml","English":"Malayalam","French":"malayalam"},{"alpha3-b":"man","alpha3-t":null,"alpha2":null,"English":"Mandingo","French":"mandingue"},{"alpha3-b":"mao","alpha3-t":"mri","alpha2":"mi","English":"Maori","French":"maori"},{"alpha3-b":"map","alpha3-t":null,"alpha2":null,"English":"Austronesian languages","French":"austronésiennes, langues"},{"alpha3-b":"mar","alpha3-t":null,"alpha2":"mr","English":"Marathi","French":"marathe"},{"alpha3-b":"mas","alpha3-t":null,"alpha2":null,"English":"Masai","French":"massaï"},{"alpha3-b":"may","alpha3-t":"msa","alpha2":"ms","English":"Malay","French":"malais"},{"alpha3-b":"mdf","alpha3-t":null,"alpha2":null,"English":"Moksha","French":"moksa"},{"alpha3-b":"mdr","alpha3-t":null,"alpha2":null,"English":"Mandar","French":"mandar"},{"alpha3-b":"men","alpha3-t":null,"alpha2":null,"English":"Mende","French":"mendé"},{"alpha3-b":"mga","alpha3-t":null,"alpha2":null,"English":"Irish, Middle (900-1200)","French":"irlandais moyen (900-1200)"},{"alpha3-b":"mic","alpha3-t":null,"alpha2":null,"English":"Mi'kmaq; Micmac","French":"mi'kmaq; micmac"},{"alpha3-b":"min","alpha3-t":null,"alpha2":null,"English":"Minangkabau","French":"minangkabau"},{"alpha3-b":"mis","alpha3-t":null,"alpha2":null,"English":"Uncoded languages","French":"langues non codées"},{"alpha3-b":"mkh","alpha3-t":null,"alpha2":null,"English":"Mon-Khmer languages","French":"môn-khmer, langues"},{"alpha3-b":"mlg","alpha3-t":null,"alpha2":"mg","English":"Malagasy","French":"malgache"},{"alpha3-b":"mlt","alpha3-t":null,"alpha2":"mt","English":"Maltese","French":"maltais"},{"alpha3-b":"mnc","alpha3-t":null,"alpha2":null,"English":"Manchu","French":"mandchou"},{"alpha3-b":"mni","alpha3-t":null,"alpha2":null,"English":"Manipuri","French":"manipuri"},{"alpha3-b":"mno","alpha3-t":null,"alpha2":null,"English":"Manobo languages","French":"manobo, langues"},{"alpha3-b":"moh","alpha3-t":null,"alpha2":null,"English":"Mohawk","French":"mohawk"},{"alpha3-b":"mon","alpha3-t":null,"alpha2":"mn","English":"Mongolian","French":"mongol"},{"alpha3-b":"mos","alpha3-t":null,"alpha2":null,"English":"Mossi","French":"moré"},{"alpha3-b":"mul","alpha3-t":null,"alpha2":null,"English":"Multiple languages","French":"multilingue"},{"alpha3-b":"mun","alpha3-t":null,"alpha2":null,"English":"Munda languages","French":"mounda, langues"},{"alpha3-b":"mus","alpha3-t":null,"alpha2":null,"English":"Creek","French":"muskogee"},{"alpha3-b":"mwl","alpha3-t":null,"alpha2":null,"English":"Mirandese","French":"mirandais"},{"alpha3-b":"mwr","alpha3-t":null,"alpha2":null,"English":"Marwari","French":"marvari"},{"alpha3-b":"myn","alpha3-t":null,"alpha2":null,"English":"Mayan languages","French":"maya, langues"},{"alpha3-b":"myv","alpha3-t":null,"alpha2":null,"English":"Erzya","French":"erza"},{"alpha3-b":"nah","alpha3-t":null,"alpha2":null,"English":"Nahuatl languages","French":"nahuatl, langues"},{"alpha3-b":"nai","alpha3-t":null,"alpha2":null,"English":"North American Indian languages","French":"nord-amérindiennes, langues"},{"alpha3-b":"nap","alpha3-t":null,"alpha2":null,"English":"Neapolitan","French":"napolitain"},{"alpha3-b":"nau","alpha3-t":null,"alpha2":"na","English":"Nauru","French":"nauruan"},{"alpha3-b":"nav","alpha3-t":null,"alpha2":"nv","English":"Navajo; Navaho","French":"navaho"},{"alpha3-b":"nbl","alpha3-t":null,"alpha2":"nr","English":"Ndebele, South; South Ndebele","French":"ndébélé du Sud"},{"alpha3-b":"nde","alpha3-t":null,"alpha2":"nd","English":"Ndebele, North; North Ndebele","French":"ndébélé du Nord"},{"alpha3-b":"ndo","alpha3-t":null,"alpha2":"ng","English":"Ndonga","French":"ndonga"},{"alpha3-b":"nds","alpha3-t":null,"alpha2":null,"English":"Low German; Low Saxon; German, Low; Saxon, Low","French":"bas allemand; bas saxon; allemand, bas; saxon, bas"},{"alpha3-b":"nep","alpha3-t":null,"alpha2":"ne","English":"Nepali","French":"népalais"},{"alpha3-b":"new","alpha3-t":null,"alpha2":null,"English":"Nepal Bhasa; Newari","French":"nepal bhasa; newari"},{"alpha3-b":"nia","alpha3-t":null,"alpha2":null,"English":"Nias","French":"nias"},{"alpha3-b":"nic","alpha3-t":null,"alpha2":null,"English":"Niger-Kordofanian languages","French":"nigéro-kordofaniennes, langues"},{"alpha3-b":"niu","alpha3-t":null,"alpha2":null,"English":"Niuean","French":"niué"},{"alpha3-b":"nno","alpha3-t":null,"alpha2":"nn","English":"Norwegian Nynorsk; Nynorsk, Norwegian","French":"norvégien nynorsk; nynorsk, norvégien"},{"alpha3-b":"nob","alpha3-t":null,"alpha2":"nb","English":"Bokmål, Norwegian; Norwegian Bokmål","French":"norvégien bokmål"},{"alpha3-b":"nog","alpha3-t":null,"alpha2":null,"English":"Nogai","French":"nogaï; nogay"},{"alpha3-b":"non","alpha3-t":null,"alpha2":null,"English":"Norse, Old","French":"norrois, vieux"},{"alpha3-b":"nor","alpha3-t":null,"alpha2":"no","English":"Norwegian","French":"norvégien"},{"alpha3-b":"nqo","alpha3-t":null,"alpha2":null,"English":"N'Ko","French":"n'ko"},{"alpha3-b":"nso","alpha3-t":null,"alpha2":null,"English":"Pedi; Sepedi; Northern Sotho","French":"pedi; sepedi; sotho du Nord"},{"alpha3-b":"nub","alpha3-t":null,"alpha2":null,"English":"Nubian languages","French":"nubiennes, langues"},{"alpha3-b":"nwc","alpha3-t":null,"alpha2":null,"English":"Classical Newari; Old Newari; Classical Nepal Bhasa","French":"newari classique"},{"alpha3-b":"nya","alpha3-t":null,"alpha2":"ny","English":"Chichewa; Chewa; Nyanja","French":"chichewa; chewa; nyanja"},{"alpha3-b":"nym","alpha3-t":null,"alpha2":null,"English":"Nyamwezi","French":"nyamwezi"},{"alpha3-b":"nyn","alpha3-t":null,"alpha2":null,"English":"Nyankole","French":"nyankolé"},{"alpha3-b":"nyo","alpha3-t":null,"alpha2":null,"English":"Nyoro","French":"nyoro"},{"alpha3-b":"nzi","alpha3-t":null,"alpha2":null,"English":"Nzima","French":"nzema"},{"alpha3-b":"oci","alpha3-t":null,"alpha2":"oc","English":"Occitan (post 1500); Provençal","French":"occitan (après 1500); provençal"},{"alpha3-b":"oji","alpha3-t":null,"alpha2":"oj","English":"Ojibwa","French":"ojibwa"},{"alpha3-b":"ori","alpha3-t":null,"alpha2":"or","English":"Oriya","French":"oriya"},{"alpha3-b":"orm","alpha3-t":null,"alpha2":"om","English":"Oromo","French":"galla"},{"alpha3-b":"osa","alpha3-t":null,"alpha2":null,"English":"Osage","French":"osage"},{"alpha3-b":"oss","alpha3-t":null,"alpha2":"os","English":"Ossetian; Ossetic","French":"ossète"},{"alpha3-b":"ota","alpha3-t":null,"alpha2":null,"English":"Turkish, Ottoman (1500-1928)","French":"turc ottoman (1500-1928)"},{"alpha3-b":"oto","alpha3-t":null,"alpha2":null,"English":"Otomian languages","French":"otomi, langues"},{"alpha3-b":"paa","alpha3-t":null,"alpha2":null,"English":"Papuan languages","French":"papoues, langues"},{"alpha3-b":"pag","alpha3-t":null,"alpha2":null,"English":"Pangasinan","French":"pangasinan"},{"alpha3-b":"pal","alpha3-t":null,"alpha2":null,"English":"Pahlavi","French":"pahlavi"},{"alpha3-b":"pam","alpha3-t":null,"alpha2":null,"English":"Pampanga; Kapampangan","French":"pampangan"},{"alpha3-b":"pan","alpha3-t":null,"alpha2":"pa","English":"Panjabi; Punjabi","French":"pendjabi"},{"alpha3-b":"pap","alpha3-t":null,"alpha2":null,"English":"Papiamento","French":"papiamento"},{"alpha3-b":"pau","alpha3-t":null,"alpha2":null,"English":"Palauan","French":"palau"},{"alpha3-b":"peo","alpha3-t":null,"alpha2":null,"English":"Persian, Old (ca.600-400 B.C.)","French":"perse, vieux (ca. 600-400 av. J.-C.)"},{"alpha3-b":"per","alpha3-t":"fas","alpha2":"fa","English":"Persian","French":"persan"},{"alpha3-b":"phi","alpha3-t":null,"alpha2":null,"English":"Philippine languages","French":"philippines, langues"},{"alpha3-b":"phn","alpha3-t":null,"alpha2":null,"English":"Phoenician","French":"phénicien"},{"alpha3-b":"pli","alpha3-t":null,"alpha2":"pi","English":"Pali","French":"pali"},{"alpha3-b":"pol","alpha3-t":null,"alpha2":"pl","English":"Polish","French":"polonais"},{"alpha3-b":"pon","alpha3-t":null,"alpha2":null,"English":"Pohnpeian","French":"pohnpei"},{"alpha3-b":"por","alpha3-t":null,"alpha2":"pt","English":"Portuguese","French":"portugais"},{"alpha3-b":"pra","alpha3-t":null,"alpha2":null,"English":"Prakrit languages","French":"prâkrit, langues"},{"alpha3-b":"pro","alpha3-t":null,"alpha2":null,"English":"Provençal, Old (to 1500)","French":"provençal ancien (jusqu'à 1500)"},{"alpha3-b":"pus","alpha3-t":null,"alpha2":"ps","English":"Pushto; Pashto","French":"pachto"},{"alpha3-b":"qaa-qtz","alpha3-t":null,"alpha2":null,"English":"Reserved for local use","French":"réservée à l'usage local"},{"alpha3-b":"que","alpha3-t":null,"alpha2":"qu","English":"Quechua","French":"quechua"},{"alpha3-b":"raj","alpha3-t":null,"alpha2":null,"English":"Rajasthani","French":"rajasthani"},{"alpha3-b":"rap","alpha3-t":null,"alpha2":null,"English":"Rapanui","French":"rapanui"},{"alpha3-b":"rar","alpha3-t":null,"alpha2":null,"English":"Rarotongan; Cook Islands Maori","French":"rarotonga; maori des îles Cook"},{"alpha3-b":"roa","alpha3-t":null,"alpha2":null,"English":"Romance languages","French":"romanes, langues"},{"alpha3-b":"roh","alpha3-t":null,"alpha2":"rm","English":"Romansh","French":"romanche"},{"alpha3-b":"rom","alpha3-t":null,"alpha2":null,"English":"Romany","French":"tsigane"},{"alpha3-b":"rum","alpha3-t":"ron","alpha2":"ro","English":"Romanian; Moldavian; Moldovan","French":"roumain; moldave"},{"alpha3-b":"run","alpha3-t":null,"alpha2":"rn","English":"Rundi","French":"rundi"},{"alpha3-b":"rup","alpha3-t":null,"alpha2":null,"English":"Aromanian; Arumanian; Macedo-Romanian","French":"aroumain; macédo-roumain"},{"alpha3-b":"rus","alpha3-t":null,"alpha2":"ru","English":"Russian","French":"russe"},{"alpha3-b":"sad","alpha3-t":null,"alpha2":null,"English":"Sandawe","French":"sandawe"},{"alpha3-b":"sag","alpha3-t":null,"alpha2":"sg","English":"Sango","French":"sango"},{"alpha3-b":"sah","alpha3-t":null,"alpha2":null,"English":"Yakut","French":"iakoute"},{"alpha3-b":"sai","alpha3-t":null,"alpha2":null,"English":"South American Indian (Other)","French":"indiennes d'Amérique du Sud, autres langues"},{"alpha3-b":"sal","alpha3-t":null,"alpha2":null,"English":"Salishan languages","French":"salishennes, langues"},{"alpha3-b":"sam","alpha3-t":null,"alpha2":null,"English":"Samaritan Aramaic","French":"samaritain"},{"alpha3-b":"san","alpha3-t":null,"alpha2":"sa","English":"Sanskrit","French":"sanskrit"},{"alpha3-b":"sas","alpha3-t":null,"alpha2":null,"English":"Sasak","French":"sasak"},{"alpha3-b":"sat","alpha3-t":null,"alpha2":null,"English":"Santali","French":"santal"},{"alpha3-b":"scn","alpha3-t":null,"alpha2":null,"English":"Sicilian","French":"sicilien"},{"alpha3-b":"sco","alpha3-t":null,"alpha2":null,"English":"Scots","French":"écossais"},{"alpha3-b":"sel","alpha3-t":null,"alpha2":null,"English":"Selkup","French":"selkoupe"},{"alpha3-b":"sem","alpha3-t":null,"alpha2":null,"English":"Semitic languages","French":"sémitiques, langues"},{"alpha3-b":"sga","alpha3-t":null,"alpha2":null,"English":"Irish, Old (to 900)","French":"irlandais ancien (jusqu'à 900)"},{"alpha3-b":"sgn","alpha3-t":null,"alpha2":null,"English":"Sign Languages","French":"langues des signes"},{"alpha3-b":"shn","alpha3-t":null,"alpha2":null,"English":"Shan","French":"chan"},{"alpha3-b":"sid","alpha3-t":null,"alpha2":null,"English":"Sidamo","French":"sidamo"},{"alpha3-b":"sin","alpha3-t":null,"alpha2":"si","English":"Sinhala; Sinhalese","French":"singhalais"},{"alpha3-b":"sio","alpha3-t":null,"alpha2":null,"English":"Siouan languages","French":"sioux, langues"},{"alpha3-b":"sit","alpha3-t":null,"alpha2":null,"English":"Sino-Tibetan languages","French":"sino-tibétaines, langues"},{"alpha3-b":"sla","alpha3-t":null,"alpha2":null,"English":"Slavic languages","French":"slaves, langues"},{"alpha3-b":"slo","alpha3-t":"slk","alpha2":"sk","English":"Slovak","French":"slovaque"},{"alpha3-b":"slv","alpha3-t":null,"alpha2":"sl","English":"Slovenian","French":"slovène"},{"alpha3-b":"sma","alpha3-t":null,"alpha2":null,"English":"Southern Sami","French":"sami du Sud"},{"alpha3-b":"sme","alpha3-t":null,"alpha2":"se","English":"Northern Sami","French":"sami du Nord"},{"alpha3-b":"smi","alpha3-t":null,"alpha2":null,"English":"Sami languages","French":"sames, langues"},{"alpha3-b":"smj","alpha3-t":null,"alpha2":null,"English":"Lule Sami","French":"sami de Lule"},{"alpha3-b":"smn","alpha3-t":null,"alpha2":null,"English":"Inari Sami","French":"sami d'Inari"},{"alpha3-b":"smo","alpha3-t":null,"alpha2":"sm","English":"Samoan","French":"samoan"},{"alpha3-b":"sms","alpha3-t":null,"alpha2":null,"English":"Skolt Sami","French":"sami skolt"},{"alpha3-b":"sna","alpha3-t":null,"alpha2":"sn","English":"Shona","French":"shona"},{"alpha3-b":"snd","alpha3-t":null,"alpha2":"sd","English":"Sindhi","French":"sindhi"},{"alpha3-b":"snk","alpha3-t":null,"alpha2":null,"English":"Soninke","French":"soninké"},{"alpha3-b":"sog","alpha3-t":null,"alpha2":null,"English":"Sogdian","French":"sogdien"},{"alpha3-b":"som","alpha3-t":null,"alpha2":"so","English":"Somali","French":"somali"},{"alpha3-b":"son","alpha3-t":null,"alpha2":null,"English":"Songhai languages","French":"songhai, langues"},{"alpha3-b":"sot","alpha3-t":null,"alpha2":"st","English":"Sotho, Southern","French":"sotho du Sud"},{"alpha3-b":"spa","alpha3-t":null,"alpha2":"es","English":"Spanish; Castilian","French":"espagnol; castillan"},{"alpha3-b":"srd","alpha3-t":null,"alpha2":"sc","English":"Sardinian","French":"sarde"},{"alpha3-b":"srn","alpha3-t":null,"alpha2":null,"English":"Sranan Tongo","French":"sranan tongo"},{"alpha3-b":"srp","alpha3-t":null,"alpha2":"sr","English":"Serbian","French":"serbe"},{"alpha3-b":"srr","alpha3-t":null,"alpha2":null,"English":"Serer","French":"sérère"},{"alpha3-b":"ssa","alpha3-t":null,"alpha2":null,"English":"Nilo-Saharan languages","French":"nilo-sahariennes, langues"},{"alpha3-b":"ssw","alpha3-t":null,"alpha2":"ss","English":"Swati","French":"swati"},{"alpha3-b":"suk","alpha3-t":null,"alpha2":null,"English":"Sukuma","French":"sukuma"},{"alpha3-b":"sun","alpha3-t":null,"alpha2":"su","English":"Sundanese","French":"soundanais"},{"alpha3-b":"sus","alpha3-t":null,"alpha2":null,"English":"Susu","French":"soussou"},{"alpha3-b":"sux","alpha3-t":null,"alpha2":null,"English":"Sumerian","French":"sumérien"},{"alpha3-b":"swa","alpha3-t":null,"alpha2":"sw","English":"Swahili","French":"swahili"},{"alpha3-b":"swe","alpha3-t":null,"alpha2":"sv","English":"Swedish","French":"suédois"},{"alpha3-b":"syc","alpha3-t":null,"alpha2":null,"English":"Classical Syriac","French":"syriaque classique"},{"alpha3-b":"syr","alpha3-t":null,"alpha2":null,"English":"Syriac","French":"syriaque"},{"alpha3-b":"tah","alpha3-t":null,"alpha2":"ty","English":"Tahitian","French":"tahitien"},{"alpha3-b":"tai","alpha3-t":null,"alpha2":null,"English":"Tai languages","French":"tai, langues"},{"alpha3-b":"tam","alpha3-t":null,"alpha2":"ta","English":"Tamil","French":"tamoul"},{"alpha3-b":"tat","alpha3-t":null,"alpha2":"tt","English":"Tatar","French":"tatar"},{"alpha3-b":"tel","alpha3-t":null,"alpha2":"te","English":"Telugu","French":"télougou"},{"alpha3-b":"tem","alpha3-t":null,"alpha2":null,"English":"Timne","French":"temne"},{"alpha3-b":"ter","alpha3-t":null,"alpha2":null,"English":"Tereno","French":"tereno"},{"alpha3-b":"tet","alpha3-t":null,"alpha2":null,"English":"Tetum","French":"tetum"},{"alpha3-b":"tgk","alpha3-t":null,"alpha2":"tg","English":"Tajik","French":"tadjik"},{"alpha3-b":"tgl","alpha3-t":null,"alpha2":"tl","English":"Tagalog","French":"tagalog"},{"alpha3-b":"tha","alpha3-t":null,"alpha2":"th","English":"Thai","French":"thaï"},{"alpha3-b":"tib","alpha3-t":"bod","alpha2":"bo","English":"Tibetan","French":"tibétain"},{"alpha3-b":"tig","alpha3-t":null,"alpha2":null,"English":"Tigre","French":"tigré"},{"alpha3-b":"tir","alpha3-t":null,"alpha2":"ti","English":"Tigrinya","French":"tigrigna"},{"alpha3-b":"tiv","alpha3-t":null,"alpha2":null,"English":"Tiv","French":"tiv"},{"alpha3-b":"tkl","alpha3-t":null,"alpha2":null,"English":"Tokelau","French":"tokelau"},{"alpha3-b":"tlh","alpha3-t":null,"alpha2":null,"English":"Klingon; tlhIngan-Hol","French":"klingon"},{"alpha3-b":"tli","alpha3-t":null,"alpha2":null,"English":"Tlingit","French":"tlingit"},{"alpha3-b":"tmh","alpha3-t":null,"alpha2":null,"English":"Tamashek","French":"tamacheq"},{"alpha3-b":"tog","alpha3-t":null,"alpha2":null,"English":"Tonga (Nyasa)","French":"tonga (Nyasa)"},{"alpha3-b":"ton","alpha3-t":null,"alpha2":"to","English":"Tonga (Tonga Islands)","French":"tongan (Îles Tonga)"},{"alpha3-b":"tpi","alpha3-t":null,"alpha2":null,"English":"Tok Pisin","French":"tok pisin"},{"alpha3-b":"tsi","alpha3-t":null,"alpha2":null,"English":"Tsimshian","French":"tsimshian"},{"alpha3-b":"tsn","alpha3-t":null,"alpha2":"tn","English":"Tswana","French":"tswana"},{"alpha3-b":"tso","alpha3-t":null,"alpha2":"ts","English":"Tsonga","French":"tsonga"},{"alpha3-b":"tuk","alpha3-t":null,"alpha2":"tk","English":"Turkmen","French":"turkmène"},{"alpha3-b":"tum","alpha3-t":null,"alpha2":null,"English":"Tumbuka","French":"tumbuka"},{"alpha3-b":"tup","alpha3-t":null,"alpha2":null,"English":"Tupi languages","French":"tupi, langues"},{"alpha3-b":"tur","alpha3-t":null,"alpha2":"tr","English":"Turkish","French":"turc"},{"alpha3-b":"tut","alpha3-t":null,"alpha2":null,"English":"Altaic languages","French":"altaïques, langues"},{"alpha3-b":"tvl","alpha3-t":null,"alpha2":null,"English":"Tuvalu","French":"tuvalu"},{"alpha3-b":"twi","alpha3-t":null,"alpha2":"tw","English":"Twi","French":"twi"},{"alpha3-b":"tyv","alpha3-t":null,"alpha2":null,"English":"Tuvinian","French":"touva"},{"alpha3-b":"udm","alpha3-t":null,"alpha2":null,"English":"Udmurt","French":"oudmourte"},{"alpha3-b":"uga","alpha3-t":null,"alpha2":null,"English":"Ugaritic","French":"ougaritique"},{"alpha3-b":"uig","alpha3-t":null,"alpha2":"ug","English":"Uighur; Uyghur","French":"ouïgour"},{"alpha3-b":"ukr","alpha3-t":null,"alpha2":"uk","English":"Ukrainian","French":"ukrainien"},{"alpha3-b":"umb","alpha3-t":null,"alpha2":null,"English":"Umbundu","French":"umbundu"},{"alpha3-b":"und","alpha3-t":null,"alpha2":null,"English":"Undetermined","French":"indéterminée"},{"alpha3-b":"urd","alpha3-t":null,"alpha2":"ur","English":"Urdu","French":"ourdou"},{"alpha3-b":"uzb","alpha3-t":null,"alpha2":"uz","English":"Uzbek","French":"ouszbek"},{"alpha3-b":"vai","alpha3-t":null,"alpha2":null,"English":"Vai","French":"vaï"},{"alpha3-b":"ven","alpha3-t":null,"alpha2":"ve","English":"Venda","French":"venda"},{"alpha3-b":"vie","alpha3-t":null,"alpha2":"vi","English":"Vietnamese","French":"vietnamien"},{"alpha3-b":"vol","alpha3-t":null,"alpha2":"vo","English":"Volapük","French":"volapük"},{"alpha3-b":"vot","alpha3-t":null,"alpha2":null,"English":"Votic","French":"vote"},{"alpha3-b":"wak","alpha3-t":null,"alpha2":null,"English":"Wakashan languages","French":"wakashanes, langues"},{"alpha3-b":"wal","alpha3-t":null,"alpha2":null,"English":"Walamo","French":"walamo"},{"alpha3-b":"war","alpha3-t":null,"alpha2":null,"English":"Waray","French":"waray"},{"alpha3-b":"was","alpha3-t":null,"alpha2":null,"English":"Washo","French":"washo"},{"alpha3-b":"wel","alpha3-t":"cym","alpha2":"cy","English":"Welsh","French":"gallois"},{"alpha3-b":"wen","alpha3-t":null,"alpha2":null,"English":"Sorbian languages","French":"sorabes, langues"},{"alpha3-b":"wln","alpha3-t":null,"alpha2":"wa","English":"Walloon","French":"wallon"},{"alpha3-b":"wol","alpha3-t":null,"alpha2":"wo","English":"Wolof","French":"wolof"},{"alpha3-b":"xal","alpha3-t":null,"alpha2":null,"English":"Kalmyk; Oirat","French":"kalmouk; oïrat"},{"alpha3-b":"xho","alpha3-t":null,"alpha2":"xh","English":"Xhosa","French":"xhosa"},{"alpha3-b":"yao","alpha3-t":null,"alpha2":null,"English":"Yao","French":"yao"},{"alpha3-b":"yap","alpha3-t":null,"alpha2":null,"English":"Yapese","French":"yapois"},{"alpha3-b":"yid","alpha3-t":null,"alpha2":"yi","English":"Yiddish","French":"yiddish"},{"alpha3-b":"yor","alpha3-t":null,"alpha2":"yo","English":"Yoruba","French":"yoruba"},{"alpha3-b":"ypk","alpha3-t":null,"alpha2":null,"English":"Yupik languages","French":"yupik, langues"},{"alpha3-b":"zap","alpha3-t":null,"alpha2":null,"English":"Zapotec","French":"zapotèque"},{"alpha3-b":"zbl","alpha3-t":null,"alpha2":null,"English":"Blissymbols; Blissymbolics; Bliss","French":"symboles Bliss; Bliss"},{"alpha3-b":"zen","alpha3-t":null,"alpha2":null,"English":"Zenaga","French":"zenaga"},{"alpha3-b":"zgh","alpha3-t":null,"alpha2":null,"English":"Standard Moroccan Tamazight","French":"amazighe standard marocain"},{"alpha3-b":"zha","alpha3-t":null,"alpha2":"za","English":"Zhuang; Chuang","French":"zhuang; chuang"},{"alpha3-b":"znd","alpha3-t":null,"alpha2":null,"English":"Zande languages","French":"zandé, langues"},{"alpha3-b":"zul","alpha3-t":null,"alpha2":"zu","English":"Zulu","French":"zoulou"},{"alpha3-b":"zun","alpha3-t":null,"alpha2":null,"English":"Zuni","French":"zuni"},{"alpha3-b":"zxx","alpha3-t":null,"alpha2":null,"English":"No linguistic content; Not applicable","French":"pas de contenu linguistique; non applicable"},{"alpha3-b":"zza","alpha3-t":null,"alpha2":null,"English":"Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki","French":"zaza; dimili; dimli; kirdki; kirmanjki; zazaki"}] \ No newline at end of file diff --git a/language_codes/generator/src/main/kotlin/Main.kt b/language_codes/generator/src/main/kotlin/Main.kt index 061577e6fd2..529e25a1d9b 100644 --- a/language_codes/generator/src/main/kotlin/Main.kt +++ b/language_codes/generator/src/main/kotlin/Main.kt @@ -22,17 +22,24 @@ private const val baseClassSerializerAnnotationName = "@Serializable(${baseClass @Serializable private data class LanguageCode( - @SerialName("alpha2") - val tag: String, @SerialName("English") - val title: String -) + val title: String, + @SerialName("alpha2") + val alpha: String? = null, + @SerialName("alpha3-b") + val alpha2: String? = null, + @SerialName("alpha3-t") + val alpha3: String? = null, +) { + val tag: String + get() = alpha ?: alpha2 ?: alpha3!! +} -fun String.adaptAsTitle() = if (first().isDigit()) { +fun String.adaptAsTitle() = (if (first().isDigit()) { "L$this" } else { this -} +}).replace(".", "_").replace("'", "_") fun String.normalized() = Normalizer.normalize(this, Normalizer.Form.NFD).replace(Regex("[^\\p{ASCII}]"), "") @@ -73,7 +80,10 @@ data class Tag( val title: String, val tag: String, val subtags: List -) +) { + val adaptedTitle + get() = title.adaptAsTitle() +} private fun printLanguageCodeAndTags( tag: Tag, @@ -81,17 +91,19 @@ private fun printLanguageCodeAndTags( indents: String = " " ): String = if (tag.subtags.isEmpty()) { """${indents}${baseClassSerializerAnnotationName} -${indents}object ${tag.title} : ${parent ?.title ?: baseClassName}() { override val code: String = "${tag.tag}"${parent ?.let { parent -> "; override val parentLang: ${parent.title} get() = ${parent.title};" } ?: ""} }""" +${indents}object ${tag.adaptedTitle} : ${parent ?.adaptedTitle ?: baseClassName} { override val code: String = "${tag.tag}"${parent ?.let { parent -> "; override val parentLang: ${parent.adaptedTitle} get() = ${parent.adaptedTitle}" } ?: ""}; override fun toString() = code }""" } else { """ ${indents}${baseClassSerializerAnnotationName} -${indents}sealed class ${tag.title} : ${parent ?.title ?: baseClassName}() { -${indents} override val code: String = "${tag.tag}"${parent ?.let { parent -> "\n${indents} override val parentLang: ${parent.title} get() = ${parent.title};" } ?: ""} +${indents}sealed interface ${tag.adaptedTitle} : ${parent ?.adaptedTitle ?: baseClassName} { ${tag.subtags.joinToString("\n") { printLanguageCodeAndTags(it, tag, "${indents} ") }} ${indents} ${baseClassSerializerAnnotationName} -${indents} companion object : ${tag.title}() +${indents} companion object : ${tag.adaptedTitle} { +${indents} override val code: String = "${tag.tag}"${parent ?.let { parent -> "\n${indents} override val parentLang: ${parent.adaptedTitle} get() = ${parent.adaptedTitle};" } ?: ""} +${indents} override fun toString() = code +${indents} } ${indents}} """ } @@ -105,23 +117,22 @@ import kotlinx.serialization.Serializable * https://datahub.io/core/language-codes/ files (base and tags) and create the whole hierarchy using it. */ ${baseClassSerializerAnnotationName} -sealed class $baseClassName { - abstract val code: String - open val parentLang: $baseClassName? - get() = null - open val withoutDialect: String +sealed interface $baseClassName { + val code: String + val parentLang: $baseClassName? + get() = code.split("-").takeIf { it.size > 1 } ?.first() ?.let(::$unknownBaseClassName) + val withoutDialect: String get() = parentLang ?.code ?: code ${tags.joinToString("\n") { printLanguageCodeAndTags(it, indents = " ") } } $baseClassSerializerAnnotationName - data class $unknownBaseClassName (override val code: String) : $baseClassName() { + data class $unknownBaseClassName (override val code: String) : $baseClassName { override val parentLang = code.dropLastWhile { it != '-' }.removeSuffix("-").takeIf { it.length > 0 } ?.let(::$unknownBaseClassName) } @Deprecated("Renamed", ReplaceWith("$baseClassName.$unknownBaseClassName", "${if (prePackage.isNotEmpty()) "$prePackage." else ""}$baseClassName.$unknownBaseClassName")) - val $oldUnknownBaseClassName = $unknownBaseClassName - - override fun toString() = code + val $oldUnknownBaseClassName + get() = $unknownBaseClassName } @Deprecated("Renamed", ReplaceWith("$baseClassName", "${if (prePackage.isNotEmpty()) "$prePackage." else ""}$baseClassName")) typealias $oldBaseClassName = $baseClassName @@ -133,7 +144,7 @@ fun createStringConverterCode(tags: List, prePackage: String): String { pretitle: String = baseClassName, indents: String = " " ): String { - val currentTitle = "$pretitle.${tag.title}" + val currentTitle = "$pretitle.${tag.adaptedTitle}" return """${indents}$currentTitle.code -> $currentTitle${if (tag.subtags.isNotEmpty()) tag.subtags.joinToString("\n", "\n") { createDeserializeVariantForTag(it, currentTitle, indents) } else ""}""" } fun createInheritorVariantForTag( @@ -141,7 +152,7 @@ fun createStringConverterCode(tags: List, prePackage: String): String { pretitle: String = baseClassName, indents: String = " " ): String { - val currentTitle = "$pretitle.${tag.title}" + val currentTitle = "$pretitle.${tag.adaptedTitle}" val subtags = if (tag.subtags.isNotEmpty()) { tag.subtags.joinToString(",\n", ",\n") { createInheritorVariantForTag(it, currentTitle, "$indents ") } } else { @@ -155,7 +166,7 @@ fun createStringConverterCode(tags: List, prePackage: String): String { indents: String = " ", codeSuffix: String = "" ): String { - val currentTitle = "$pretitle.${tag.title}" + val currentTitle = "$pretitle.${tag.adaptedTitle}" val subtags = if (tag.subtags.isNotEmpty()) { tag.subtags.joinToString(",\n", ",\n") { createInheritorVariantForMapForTag(it, currentTitle, "$indents ", codeSuffix) } } else { @@ -266,7 +277,7 @@ suspend fun main(vararg args: String) { File(outputFolder, "LanguageCodes.kt").apply { delete() createNewFile() - writeText(targetPackagePrefix + buildKtFileContent(tags, targetPackage ?: "")) + writeText("@file:Suppress(\"SERIALIZER_TYPE_INCOMPATIBLE\")\n\n" + targetPackagePrefix + buildKtFileContent(tags, targetPackage ?: "")) } File(outputFolder, "StringToLanguageCodes.kt").apply { diff --git a/language_codes/generator/tags.json b/language_codes/generator/tags.json new file mode 100644 index 00000000000..4292c92b042 --- /dev/null +++ b/language_codes/generator/tags.json @@ -0,0 +1 @@ +[{"lang":"af","langType":"af","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"af.xml"},{"lang":"af-NA","langType":"af","territory":"NA","revGenDate":null,"defs":2,"dftLang":0,"file":"af_NA.xml"},{"lang":"af-ZA","langType":"af","territory":"ZA","revGenDate":null,"defs":0,"dftLang":0,"file":"af_ZA.xml"},{"lang":"agq","langType":"agq","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"agq.xml"},{"lang":"agq-CM","langType":"agq","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"agq_CM.xml"},{"lang":"ak","langType":"ak","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ak.xml"},{"lang":"ak-GH","langType":"ak","territory":"GH","revGenDate":null,"defs":0,"dftLang":0,"file":"ak_GH.xml"},{"lang":"am","langType":"am","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"am.xml"},{"lang":"am-ET","langType":"am","territory":"ET","revGenDate":null,"defs":0,"dftLang":0,"file":"am_ET.xml"},{"lang":"ar","langType":"ar","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"ar.xml"},{"lang":"ar-001","langType":"ar","territory":1,"revGenDate":null,"defs":0,"dftLang":0,"file":"ar_001.xml"},{"lang":"ar-AE","langType":"ar","territory":"AE","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_AE.xml"},{"lang":"ar-BH","langType":"ar","territory":"BH","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_BH.xml"},{"lang":"ar-DJ","langType":"ar","territory":"DJ","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_DJ.xml"},{"lang":"ar-DZ","langType":"ar","territory":"DZ","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_DZ.xml"},{"lang":"ar-EG","langType":"ar","territory":"EG","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_EG.xml"},{"lang":"ar-EH","langType":"ar","territory":"EH","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_EH.xml"},{"lang":"ar-ER","langType":"ar","territory":"ER","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_ER.xml"},{"lang":"ar-IL","langType":"ar","territory":"IL","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_IL.xml"},{"lang":"ar-IQ","langType":"ar","territory":"IQ","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_IQ.xml"},{"lang":"ar-JO","langType":"ar","territory":"JO","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_JO.xml"},{"lang":"ar-KM","langType":"ar","territory":"KM","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_KM.xml"},{"lang":"ar-KW","langType":"ar","territory":"KW","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_KW.xml"},{"lang":"ar-LB","langType":"ar","territory":"LB","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_LB.xml"},{"lang":"ar-LY","langType":"ar","territory":"LY","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_LY.xml"},{"lang":"ar-MA","langType":"ar","territory":"MA","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_MA.xml"},{"lang":"ar-MR","langType":"ar","territory":"MR","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_MR.xml"},{"lang":"ar-OM","langType":"ar","territory":"OM","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_OM.xml"},{"lang":"ar-PS","langType":"ar","territory":"PS","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_PS.xml"},{"lang":"ar-QA","langType":"ar","territory":"QA","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_QA.xml"},{"lang":"ar-SA","langType":"ar","territory":"SA","revGenDate":null,"defs":3,"dftLang":0,"file":"ar_SA.xml"},{"lang":"ar-SD","langType":"ar","territory":"SD","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_SD.xml"},{"lang":"ar-SO","langType":"ar","territory":"SO","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_SO.xml"},{"lang":"ar-SS","langType":"ar","territory":"SS","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_SS.xml"},{"lang":"ar-SY","langType":"ar","territory":"SY","revGenDate":null,"defs":1,"dftLang":0,"file":"ar_SY.xml"},{"lang":"ar-TD","langType":"ar","territory":"TD","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_TD.xml"},{"lang":"ar-TN","langType":"ar","territory":"TN","revGenDate":null,"defs":2,"dftLang":0,"file":"ar_TN.xml"},{"lang":"ar-YE","langType":"ar","territory":"YE","revGenDate":null,"defs":0,"dftLang":0,"file":"ar_YE.xml"},{"lang":"as","langType":"as","territory":null,"revGenDate":null,"defs":4,"dftLang":0,"file":"as.xml"},{"lang":"as-IN","langType":"as","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"as_IN.xml"},{"lang":"asa","langType":"asa","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"asa.xml"},{"lang":"asa-TZ","langType":"asa","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"asa_TZ.xml"},{"lang":"ast","langType":"ast","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ast.xml"},{"lang":"ast-ES","langType":"ast","territory":"ES","revGenDate":null,"defs":0,"dftLang":0,"file":"ast_ES.xml"},{"lang":"az","langType":"az","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"az.xml"},{"lang":"az-Cyrl","langType":"az","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"az_Cyrl.xml"},{"lang":"az-Cyrl-AZ","langType":"az","territory":"AZ","revGenDate":null,"defs":0,"dftLang":0,"file":"az_Cyrl_AZ.xml"},{"lang":"az-Latn","langType":"az","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"az_Latn.xml"},{"lang":"az-Latn-AZ","langType":"az","territory":"AZ","revGenDate":null,"defs":0,"dftLang":0,"file":"az_Latn_AZ.xml"},{"lang":"bas","langType":"bas","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"bas.xml"},{"lang":"bas-CM","langType":"bas","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"bas_CM.xml"},{"lang":"be","langType":"be","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"be.xml"},{"lang":"be-BY","langType":"be","territory":"BY","revGenDate":null,"defs":0,"dftLang":0,"file":"be_BY.xml"},{"lang":"bem","langType":"bem","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"bem.xml"},{"lang":"bem-ZM","langType":"bem","territory":"ZM","revGenDate":null,"defs":0,"dftLang":0,"file":"bem_ZM.xml"},{"lang":"bez","langType":"bez","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"bez.xml"},{"lang":"bez-TZ","langType":"bez","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"bez_TZ.xml"},{"lang":"bg","langType":"bg","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"bg.xml"},{"lang":"bg-BG","langType":"bg","territory":"BG","revGenDate":null,"defs":0,"dftLang":0,"file":"bg_BG.xml"},{"lang":"bm","langType":"bm","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"bm.xml"},{"lang":"bm-ML","langType":"bm","territory":"ML","revGenDate":null,"defs":0,"dftLang":0,"file":"bm_ML.xml"},{"lang":"bn","langType":"bn","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"bn.xml"},{"lang":"bn-BD","langType":"bn","territory":"BD","revGenDate":null,"defs":0,"dftLang":0,"file":"bn_BD.xml"},{"lang":"bn-IN","langType":"bn","territory":"IN","revGenDate":null,"defs":1,"dftLang":0,"file":"bn_IN.xml"},{"lang":"bo","langType":"bo","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"bo.xml"},{"lang":"bo-CN","langType":"bo","territory":"CN","revGenDate":null,"defs":0,"dftLang":0,"file":"bo_CN.xml"},{"lang":"bo-IN","langType":"bo","territory":"IN","revGenDate":null,"defs":2,"dftLang":0,"file":"bo_IN.xml"},{"lang":"br","langType":"br","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"br.xml"},{"lang":"br-FR","langType":"br","territory":"FR","revGenDate":null,"defs":0,"dftLang":0,"file":"br_FR.xml"},{"lang":"brx","langType":"brx","territory":null,"revGenDate":null,"defs":7,"dftLang":0,"file":"brx.xml"},{"lang":"brx-IN","langType":"brx","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"brx_IN.xml"},{"lang":"bs","langType":"bs","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"bs.xml"},{"lang":"bs-Cyrl","langType":"bs","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"bs_Cyrl.xml"},{"lang":"bs-Cyrl-BA","langType":"bs","territory":"BA","revGenDate":null,"defs":0,"dftLang":0,"file":"bs_Cyrl_BA.xml"},{"lang":"bs-Latn","langType":"bs","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"bs_Latn.xml"},{"lang":"bs-Latn-BA","langType":"bs","territory":"BA","revGenDate":null,"defs":0,"dftLang":0,"file":"bs_Latn_BA.xml"},{"lang":"ca","langType":"ca","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ca.xml"},{"lang":"ca-AD","langType":"ca","territory":"AD","revGenDate":null,"defs":0,"dftLang":0,"file":"ca_AD.xml"},{"lang":"ca-ES","langType":"ca","territory":"ES","revGenDate":null,"defs":0,"dftLang":0,"file":"ca_ES.xml"},{"lang":"ca-ES-VALENCIA","langType":"ca","territory":"ES","revGenDate":null,"defs":2,"dftLang":0,"file":"ca_ES_VALENCIA.xml"},{"lang":"ca-FR","langType":"ca","territory":"FR","revGenDate":null,"defs":1,"dftLang":0,"file":"ca_FR.xml"},{"lang":"ca-IT","langType":"ca","territory":"IT","revGenDate":null,"defs":0,"dftLang":0,"file":"ca_IT.xml"},{"lang":"ce","langType":"ce","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ce.xml"},{"lang":"ce-RU","langType":"ce","territory":"RU","revGenDate":null,"defs":0,"dftLang":0,"file":"ce_RU.xml"},{"lang":"cgg","langType":"cgg","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"cgg.xml"},{"lang":"cgg-UG","langType":"cgg","territory":"UG","revGenDate":null,"defs":0,"dftLang":0,"file":"cgg_UG.xml"},{"lang":"chr","langType":"chr","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"chr.xml"},{"lang":"chr-US","langType":"chr","territory":"US","revGenDate":null,"defs":0,"dftLang":0,"file":"chr_US.xml"},{"lang":"ckb","langType":"ckb","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"ckb.xml"},{"lang":"ckb-IQ","langType":"ckb","territory":"IQ","revGenDate":null,"defs":0,"dftLang":0,"file":"ckb_IQ.xml"},{"lang":"ckb-IR","langType":"ckb","territory":"IR","revGenDate":null,"defs":1,"dftLang":0,"file":"ckb_IR.xml"},{"lang":"cs","langType":"cs","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"cs.xml"},{"lang":"cs-CZ","langType":"cs","territory":"CZ","revGenDate":null,"defs":0,"dftLang":0,"file":"cs_CZ.xml"},{"lang":"cu","langType":"cu","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"cu.xml"},{"lang":"cu-RU","langType":"cu","territory":"RU","revGenDate":null,"defs":0,"dftLang":0,"file":"cu_RU.xml"},{"lang":"cy","langType":"cy","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"cy.xml"},{"lang":"cy-GB","langType":"cy","territory":"GB","revGenDate":null,"defs":0,"dftLang":0,"file":"cy_GB.xml"},{"lang":"da","langType":"da","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"da.xml"},{"lang":"da-DK","langType":"da","territory":"DK","revGenDate":null,"defs":0,"dftLang":0,"file":"da_DK.xml"},{"lang":"da-GL","langType":"da","territory":"GL","revGenDate":null,"defs":1,"dftLang":0,"file":"da_GL.xml"},{"lang":"dav","langType":"dav","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"dav.xml"},{"lang":"dav-KE","langType":"dav","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"dav_KE.xml"},{"lang":"de","langType":"de","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"de.xml"},{"lang":"de-AT","langType":"de","territory":"AT","revGenDate":null,"defs":4,"dftLang":0,"file":"de_AT.xml"},{"lang":"de-BE","langType":"de","territory":"BE","revGenDate":null,"defs":0,"dftLang":0,"file":"de_BE.xml"},{"lang":"de-CH","langType":"de","territory":"CH","revGenDate":null,"defs":4,"dftLang":0,"file":"de_CH.xml"},{"lang":"de-DE","langType":"de","territory":"DE","revGenDate":null,"defs":0,"dftLang":0,"file":"de_DE.xml"},{"lang":"de-IT","langType":"de","territory":"IT","revGenDate":null,"defs":1,"dftLang":0,"file":"de_IT.xml"},{"lang":"de-LI","langType":"de","territory":"LI","revGenDate":null,"defs":2,"dftLang":0,"file":"de_LI.xml"},{"lang":"de-LU","langType":"de","territory":"LU","revGenDate":null,"defs":3,"dftLang":0,"file":"de_LU.xml"},{"lang":"dje","langType":"dje","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"dje.xml"},{"lang":"dje-NE","langType":"dje","territory":"NE","revGenDate":null,"defs":0,"dftLang":0,"file":"dje_NE.xml"},{"lang":"dsb","langType":"dsb","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"dsb.xml"},{"lang":"dsb-DE","langType":"dsb","territory":"DE","revGenDate":null,"defs":0,"dftLang":0,"file":"dsb_DE.xml"},{"lang":"dua","langType":"dua","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"dua.xml"},{"lang":"dua-CM","langType":"dua","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"dua_CM.xml"},{"lang":"dyo","langType":"dyo","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"dyo.xml"},{"lang":"dyo-SN","langType":"dyo","territory":"SN","revGenDate":null,"defs":0,"dftLang":0,"file":"dyo_SN.xml"},{"lang":"dz","langType":"dz","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"dz.xml"},{"lang":"dz-BT","langType":"dz","territory":"BT","revGenDate":null,"defs":0,"dftLang":0,"file":"dz_BT.xml"},{"lang":"ebu","langType":"ebu","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ebu.xml"},{"lang":"ebu-KE","langType":"ebu","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"ebu_KE.xml"},{"lang":"ee","langType":"ee","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"ee.xml"},{"lang":"ee-GH","langType":"ee","territory":"GH","revGenDate":null,"defs":0,"dftLang":0,"file":"ee_GH.xml"},{"lang":"ee-TG","langType":"ee","territory":"TG","revGenDate":null,"defs":1,"dftLang":0,"file":"ee_TG.xml"},{"lang":"el","langType":"el","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"el.xml"},{"lang":"el-CY","langType":"el","territory":"CY","revGenDate":null,"defs":0,"dftLang":0,"file":"el_CY.xml"},{"lang":"el-GR","langType":"el","territory":"GR","revGenDate":null,"defs":0,"dftLang":0,"file":"el_GR.xml"},{"lang":"en","langType":"en","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"en.xml"},{"lang":"en-001","langType":"en","territory":1,"revGenDate":null,"defs":5,"dftLang":0,"file":"en_001.xml"},{"lang":"en-150","langType":"en","territory":150,"revGenDate":null,"defs":2,"dftLang":0,"file":"en_150.xml"},{"lang":"en-AG","langType":"en","territory":"AG","revGenDate":null,"defs":1,"dftLang":0,"file":"en_AG.xml"},{"lang":"en-AI","langType":"en","territory":"AI","revGenDate":null,"defs":2,"dftLang":0,"file":"en_AI.xml"},{"lang":"en-AS","langType":"en","territory":"AS","revGenDate":null,"defs":0,"dftLang":0,"file":"en_AS.xml"},{"lang":"en-AT","langType":"en","territory":"AT","revGenDate":null,"defs":1,"dftLang":0,"file":"en_AT.xml"},{"lang":"en-AU","langType":"en","territory":"AU","revGenDate":null,"defs":6,"dftLang":0,"file":"en_AU.xml"},{"lang":"en-BB","langType":"en","territory":"BB","revGenDate":null,"defs":1,"dftLang":0,"file":"en_BB.xml"},{"lang":"en-BE","langType":"en","territory":"BE","revGenDate":null,"defs":2,"dftLang":0,"file":"en_BE.xml"},{"lang":"en-BI","langType":"en","territory":"BI","revGenDate":null,"defs":1,"dftLang":0,"file":"en_BI.xml"},{"lang":"en-BM","langType":"en","territory":"BM","revGenDate":null,"defs":1,"dftLang":0,"file":"en_BM.xml"},{"lang":"en-BS","langType":"en","territory":"BS","revGenDate":null,"defs":2,"dftLang":0,"file":"en_BS.xml"},{"lang":"en-BW","langType":"en","territory":"BW","revGenDate":null,"defs":2,"dftLang":0,"file":"en_BW.xml"},{"lang":"en-BZ","langType":"en","territory":"BZ","revGenDate":null,"defs":3,"dftLang":0,"file":"en_BZ.xml"},{"lang":"en-CA","langType":"en","territory":"CA","revGenDate":null,"defs":3,"dftLang":0,"file":"en_CA.xml"},{"lang":"en-CC","langType":"en","territory":"CC","revGenDate":null,"defs":2,"dftLang":0,"file":"en_CC.xml"},{"lang":"en-CH","langType":"en","territory":"CH","revGenDate":null,"defs":1,"dftLang":0,"file":"en_CH.xml"},{"lang":"en-CK","langType":"en","territory":"CK","revGenDate":null,"defs":2,"dftLang":0,"file":"en_CK.xml"},{"lang":"en-CM","langType":"en","territory":"CM","revGenDate":null,"defs":1,"dftLang":0,"file":"en_CM.xml"},{"lang":"en-CX","langType":"en","territory":"CX","revGenDate":null,"defs":2,"dftLang":0,"file":"en_CX.xml"},{"lang":"en-CY","langType":"en","territory":"CY","revGenDate":null,"defs":0,"dftLang":0,"file":"en_CY.xml"},{"lang":"en-DE","langType":"en","territory":"DE","revGenDate":null,"defs":1,"dftLang":0,"file":"en_DE.xml"},{"lang":"en-DG","langType":"en","territory":"DG","revGenDate":null,"defs":1,"dftLang":0,"file":"en_DG.xml"},{"lang":"en-DK","langType":"en","territory":"DK","revGenDate":null,"defs":2,"dftLang":0,"file":"en_DK.xml"},{"lang":"en-DM","langType":"en","territory":"DM","revGenDate":null,"defs":1,"dftLang":0,"file":"en_DM.xml"},{"lang":"en-ER","langType":"en","territory":"ER","revGenDate":null,"defs":2,"dftLang":0,"file":"en_ER.xml"},{"lang":"en-FI","langType":"en","territory":"FI","revGenDate":null,"defs":2,"dftLang":0,"file":"en_FI.xml"},{"lang":"en-FJ","langType":"en","territory":"FJ","revGenDate":null,"defs":1,"dftLang":0,"file":"en_FJ.xml"},{"lang":"en-FK","langType":"en","territory":"FK","revGenDate":null,"defs":2,"dftLang":0,"file":"en_FK.xml"},{"lang":"en-FM","langType":"en","territory":"FM","revGenDate":null,"defs":0,"dftLang":0,"file":"en_FM.xml"},{"lang":"en-GB","langType":"en","territory":"GB","revGenDate":null,"defs":2,"dftLang":0,"file":"en_GB.xml"},{"lang":"en-GD","langType":"en","territory":"GD","revGenDate":null,"defs":1,"dftLang":0,"file":"en_GD.xml"},{"lang":"en-GG","langType":"en","territory":"GG","revGenDate":null,"defs":2,"dftLang":0,"file":"en_GG.xml"},{"lang":"en-GH","langType":"en","territory":"GH","revGenDate":null,"defs":2,"dftLang":0,"file":"en_GH.xml"},{"lang":"en-GI","langType":"en","territory":"GI","revGenDate":null,"defs":2,"dftLang":0,"file":"en_GI.xml"},{"lang":"en-GM","langType":"en","territory":"GM","revGenDate":null,"defs":2,"dftLang":0,"file":"en_GM.xml"},{"lang":"en-GU","langType":"en","territory":"GU","revGenDate":null,"defs":1,"dftLang":0,"file":"en_GU.xml"},{"lang":"en-GY","langType":"en","territory":"GY","revGenDate":null,"defs":2,"dftLang":0,"file":"en_GY.xml"},{"lang":"en-HK","langType":"en","territory":"HK","revGenDate":null,"defs":1,"dftLang":0,"file":"en_HK.xml"},{"lang":"en-IE","langType":"en","territory":"IE","revGenDate":null,"defs":1,"dftLang":0,"file":"en_IE.xml"},{"lang":"en-IL","langType":"en","territory":"IL","revGenDate":null,"defs":1,"dftLang":0,"file":"en_IL.xml"},{"lang":"en-IM","langType":"en","territory":"IM","revGenDate":null,"defs":2,"dftLang":0,"file":"en_IM.xml"},{"lang":"en-IN","langType":"en","territory":"IN","revGenDate":null,"defs":3,"dftLang":0,"file":"en_IN.xml"},{"lang":"en-IO","langType":"en","territory":"IO","revGenDate":null,"defs":1,"dftLang":0,"file":"en_IO.xml"},{"lang":"en-JE","langType":"en","territory":"JE","revGenDate":null,"defs":2,"dftLang":0,"file":"en_JE.xml"},{"lang":"en-JM","langType":"en","territory":"JM","revGenDate":null,"defs":2,"dftLang":0,"file":"en_JM.xml"},{"lang":"en-KE","langType":"en","territory":"KE","revGenDate":null,"defs":2,"dftLang":0,"file":"en_KE.xml"},{"lang":"en-KI","langType":"en","territory":"KI","revGenDate":null,"defs":1,"dftLang":0,"file":"en_KI.xml"},{"lang":"en-KN","langType":"en","territory":"KN","revGenDate":null,"defs":1,"dftLang":0,"file":"en_KN.xml"},{"lang":"en-KY","langType":"en","territory":"KY","revGenDate":null,"defs":2,"dftLang":0,"file":"en_KY.xml"},{"lang":"en-LC","langType":"en","territory":"LC","revGenDate":null,"defs":1,"dftLang":0,"file":"en_LC.xml"},{"lang":"en-LR","langType":"en","territory":"LR","revGenDate":null,"defs":2,"dftLang":0,"file":"en_LR.xml"},{"lang":"en-LS","langType":"en","territory":"LS","revGenDate":null,"defs":2,"dftLang":0,"file":"en_LS.xml"},{"lang":"en-MG","langType":"en","territory":"MG","revGenDate":null,"defs":2,"dftLang":0,"file":"en_MG.xml"},{"lang":"en-MH","langType":"en","territory":"MH","revGenDate":null,"defs":1,"dftLang":0,"file":"en_MH.xml"},{"lang":"en-MO","langType":"en","territory":"MO","revGenDate":null,"defs":2,"dftLang":0,"file":"en_MO.xml"},{"lang":"en-MP","langType":"en","territory":"MP","revGenDate":null,"defs":1,"dftLang":0,"file":"en_MP.xml"},{"lang":"en-MS","langType":"en","territory":"MS","revGenDate":null,"defs":2,"dftLang":0,"file":"en_MS.xml"},{"lang":"en-MT","langType":"en","territory":"MT","revGenDate":null,"defs":2,"dftLang":0,"file":"en_MT.xml"},{"lang":"en-MU","langType":"en","territory":"MU","revGenDate":null,"defs":2,"dftLang":0,"file":"en_MU.xml"},{"lang":"en-MW","langType":"en","territory":"MW","revGenDate":null,"defs":2,"dftLang":0,"file":"en_MW.xml"},{"lang":"en-MY","langType":"en","territory":"MY","revGenDate":null,"defs":2,"dftLang":0,"file":"en_MY.xml"},{"lang":"en-NA","langType":"en","territory":"NA","revGenDate":null,"defs":2,"dftLang":0,"file":"en_NA.xml"},{"lang":"en-NF","langType":"en","territory":"NF","revGenDate":null,"defs":2,"dftLang":0,"file":"en_NF.xml"},{"lang":"en-NG","langType":"en","territory":"NG","revGenDate":null,"defs":2,"dftLang":0,"file":"en_NG.xml"},{"lang":"en-NL","langType":"en","territory":"NL","revGenDate":null,"defs":1,"dftLang":0,"file":"en_NL.xml"},{"lang":"en-NR","langType":"en","territory":"NR","revGenDate":null,"defs":2,"dftLang":0,"file":"en_NR.xml"},{"lang":"en-NU","langType":"en","territory":"NU","revGenDate":null,"defs":2,"dftLang":0,"file":"en_NU.xml"},{"lang":"en-NZ","langType":"en","territory":"NZ","revGenDate":null,"defs":3,"dftLang":0,"file":"en_NZ.xml"},{"lang":"en-PG","langType":"en","territory":"PG","revGenDate":null,"defs":1,"dftLang":0,"file":"en_PG.xml"},{"lang":"en-PH","langType":"en","territory":"PH","revGenDate":null,"defs":1,"dftLang":0,"file":"en_PH.xml"},{"lang":"en-PK","langType":"en","territory":"PK","revGenDate":null,"defs":2,"dftLang":0,"file":"en_PK.xml"},{"lang":"en-PN","langType":"en","territory":"PN","revGenDate":null,"defs":2,"dftLang":0,"file":"en_PN.xml"},{"lang":"en-PR","langType":"en","territory":"PR","revGenDate":null,"defs":0,"dftLang":0,"file":"en_PR.xml"},{"lang":"en-PW","langType":"en","territory":"PW","revGenDate":null,"defs":1,"dftLang":0,"file":"en_PW.xml"},{"lang":"en-RW","langType":"en","territory":"RW","revGenDate":null,"defs":2,"dftLang":0,"file":"en_RW.xml"},{"lang":"en-SB","langType":"en","territory":"SB","revGenDate":null,"defs":1,"dftLang":0,"file":"en_SB.xml"},{"lang":"en-SC","langType":"en","territory":"SC","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SC.xml"},{"lang":"en-SD","langType":"en","territory":"SD","revGenDate":null,"defs":1,"dftLang":0,"file":"en_SD.xml"},{"lang":"en-SE","langType":"en","territory":"SE","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SE.xml"},{"lang":"en-SG","langType":"en","territory":"SG","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SG.xml"},{"lang":"en-SH","langType":"en","territory":"SH","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SH.xml"},{"lang":"en-SI","langType":"en","territory":"SI","revGenDate":null,"defs":1,"dftLang":0,"file":"en_SI.xml"},{"lang":"en-SL","langType":"en","territory":"SL","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SL.xml"},{"lang":"en-SS","langType":"en","territory":"SS","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SS.xml"},{"lang":"en-SX","langType":"en","territory":"SX","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SX.xml"},{"lang":"en-SZ","langType":"en","territory":"SZ","revGenDate":null,"defs":2,"dftLang":0,"file":"en_SZ.xml"},{"lang":"en-TC","langType":"en","territory":"TC","revGenDate":null,"defs":0,"dftLang":0,"file":"en_TC.xml"},{"lang":"en-TK","langType":"en","territory":"TK","revGenDate":null,"defs":2,"dftLang":0,"file":"en_TK.xml"},{"lang":"en-TO","langType":"en","territory":"TO","revGenDate":null,"defs":1,"dftLang":0,"file":"en_TO.xml"},{"lang":"en-TT","langType":"en","territory":"TT","revGenDate":null,"defs":1,"dftLang":0,"file":"en_TT.xml"},{"lang":"en-TV","langType":"en","territory":"TV","revGenDate":null,"defs":2,"dftLang":0,"file":"en_TV.xml"},{"lang":"en-TZ","langType":"en","territory":"TZ","revGenDate":null,"defs":2,"dftLang":0,"file":"en_TZ.xml"},{"lang":"en-UG","langType":"en","territory":"UG","revGenDate":null,"defs":2,"dftLang":0,"file":"en_UG.xml"},{"lang":"en-UM","langType":"en","territory":"UM","revGenDate":null,"defs":0,"dftLang":0,"file":"en_UM.xml"},{"lang":"en-US","langType":"en","territory":"US","revGenDate":null,"defs":0,"dftLang":0,"file":"en_US.xml"},{"lang":"en-US-POSIX","langType":"en","territory":"US","revGenDate":null,"defs":1,"dftLang":0,"file":"en_US_POSIX.xml"},{"lang":"en-VC","langType":"en","territory":"VC","revGenDate":null,"defs":1,"dftLang":0,"file":"en_VC.xml"},{"lang":"en-VG","langType":"en","territory":"VG","revGenDate":null,"defs":0,"dftLang":0,"file":"en_VG.xml"},{"lang":"en-VI","langType":"en","territory":"VI","revGenDate":null,"defs":0,"dftLang":0,"file":"en_VI.xml"},{"lang":"en-VU","langType":"en","territory":"VU","revGenDate":null,"defs":1,"dftLang":0,"file":"en_VU.xml"},{"lang":"en-WS","langType":"en","territory":"WS","revGenDate":null,"defs":1,"dftLang":0,"file":"en_WS.xml"},{"lang":"en-ZA","langType":"en","territory":"ZA","revGenDate":null,"defs":3,"dftLang":0,"file":"en_ZA.xml"},{"lang":"en-ZM","langType":"en","territory":"ZM","revGenDate":null,"defs":2,"dftLang":0,"file":"en_ZM.xml"},{"lang":"en-ZW","langType":"en","territory":"ZW","revGenDate":null,"defs":1,"dftLang":0,"file":"en_ZW.xml"},{"lang":"eo","langType":"eo","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"eo.xml"},{"lang":"eo-001","langType":"eo","territory":1,"revGenDate":null,"defs":0,"dftLang":0,"file":"eo_001.xml"},{"lang":"es","langType":"es","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"es.xml"},{"lang":"es-419","langType":"es","territory":419,"revGenDate":null,"defs":5,"dftLang":0,"file":"es_419.xml"},{"lang":"es-AR","langType":"es","territory":"AR","revGenDate":null,"defs":4,"dftLang":0,"file":"es_AR.xml"},{"lang":"es-BO","langType":"es","territory":"BO","revGenDate":null,"defs":3,"dftLang":0,"file":"es_BO.xml"},{"lang":"es-BR","langType":"es","territory":"BR","revGenDate":null,"defs":1,"dftLang":0,"file":"es_BR.xml"},{"lang":"es-BZ","langType":"es","territory":"BZ","revGenDate":null,"defs":1,"dftLang":0,"file":"es_BZ.xml"},{"lang":"es-CL","langType":"es","territory":"CL","revGenDate":null,"defs":4,"dftLang":0,"file":"es_CL.xml"},{"lang":"es-CO","langType":"es","territory":"CO","revGenDate":null,"defs":4,"dftLang":0,"file":"es_CO.xml"},{"lang":"es-CR","langType":"es","territory":"CR","revGenDate":null,"defs":3,"dftLang":0,"file":"es_CR.xml"},{"lang":"es-CU","langType":"es","territory":"CU","revGenDate":null,"defs":1,"dftLang":0,"file":"es_CU.xml"},{"lang":"es-DO","langType":"es","territory":"DO","revGenDate":null,"defs":5,"dftLang":0,"file":"es_DO.xml"},{"lang":"es-EA","langType":"es","territory":"EA","revGenDate":null,"defs":0,"dftLang":0,"file":"es_EA.xml"},{"lang":"es-EC","langType":"es","territory":"EC","revGenDate":null,"defs":3,"dftLang":0,"file":"es_EC.xml"},{"lang":"es-ES","langType":"es","territory":"ES","revGenDate":null,"defs":0,"dftLang":0,"file":"es_ES.xml"},{"lang":"es-GQ","langType":"es","territory":"GQ","revGenDate":null,"defs":1,"dftLang":0,"file":"es_GQ.xml"},{"lang":"es-GT","langType":"es","territory":"GT","revGenDate":null,"defs":4,"dftLang":0,"file":"es_GT.xml"},{"lang":"es-HN","langType":"es","territory":"HN","revGenDate":null,"defs":3,"dftLang":0,"file":"es_HN.xml"},{"lang":"es-IC","langType":"es","territory":"IC","revGenDate":null,"defs":0,"dftLang":0,"file":"es_IC.xml"},{"lang":"es-MX","langType":"es","territory":"MX","revGenDate":null,"defs":5,"dftLang":0,"file":"es_MX.xml"},{"lang":"es-NI","langType":"es","territory":"NI","revGenDate":null,"defs":3,"dftLang":0,"file":"es_NI.xml"},{"lang":"es-PA","langType":"es","territory":"PA","revGenDate":null,"defs":3,"dftLang":0,"file":"es_PA.xml"},{"lang":"es-PE","langType":"es","territory":"PE","revGenDate":null,"defs":3,"dftLang":0,"file":"es_PE.xml"},{"lang":"es-PH","langType":"es","territory":"PH","revGenDate":null,"defs":2,"dftLang":0,"file":"es_PH.xml"},{"lang":"es-PR","langType":"es","territory":"PR","revGenDate":null,"defs":4,"dftLang":0,"file":"es_PR.xml"},{"lang":"es-PY","langType":"es","territory":"PY","revGenDate":null,"defs":5,"dftLang":0,"file":"es_PY.xml"},{"lang":"es-SV","langType":"es","territory":"SV","revGenDate":null,"defs":3,"dftLang":0,"file":"es_SV.xml"},{"lang":"es-US","langType":"es","territory":"US","revGenDate":null,"defs":4,"dftLang":0,"file":"es_US.xml"},{"lang":"es-UY","langType":"es","territory":"UY","revGenDate":null,"defs":2,"dftLang":0,"file":"es_UY.xml"},{"lang":"es-VE","langType":"es","territory":"VE","revGenDate":null,"defs":3,"dftLang":0,"file":"es_VE.xml"},{"lang":"et","langType":"et","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"et.xml"},{"lang":"et-EE","langType":"et","territory":"EE","revGenDate":null,"defs":0,"dftLang":0,"file":"et_EE.xml"},{"lang":"eu","langType":"eu","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"eu.xml"},{"lang":"eu-ES","langType":"eu","territory":"ES","revGenDate":null,"defs":0,"dftLang":0,"file":"eu_ES.xml"},{"lang":"ewo","langType":"ewo","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ewo.xml"},{"lang":"ewo-CM","langType":"ewo","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"ewo_CM.xml"},{"lang":"fa","langType":"fa","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"fa.xml"},{"lang":"fa-AF","langType":"fa","territory":"AF","revGenDate":null,"defs":4,"dftLang":0,"file":"fa_AF.xml"},{"lang":"fa-IR","langType":"fa","territory":"IR","revGenDate":null,"defs":0,"dftLang":0,"file":"fa_IR.xml"},{"lang":"ff","langType":"ff","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ff.xml"},{"lang":"ff-CM","langType":"ff","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"ff_CM.xml"},{"lang":"ff-GN","langType":"ff","territory":"GN","revGenDate":null,"defs":1,"dftLang":0,"file":"ff_GN.xml"},{"lang":"ff-MR","langType":"ff","territory":"MR","revGenDate":null,"defs":2,"dftLang":0,"file":"ff_MR.xml"},{"lang":"ff-SN","langType":"ff","territory":"SN","revGenDate":null,"defs":0,"dftLang":0,"file":"ff_SN.xml"},{"lang":"fi","langType":"fi","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"fi.xml"},{"lang":"fi-FI","langType":"fi","territory":"FI","revGenDate":null,"defs":0,"dftLang":0,"file":"fi_FI.xml"},{"lang":"fil","langType":"fil","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"fil.xml"},{"lang":"fil-PH","langType":"fil","territory":"PH","revGenDate":null,"defs":0,"dftLang":0,"file":"fil_PH.xml"},{"lang":"fo","langType":"fo","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"fo.xml"},{"lang":"fo-DK","langType":"fo","territory":"DK","revGenDate":null,"defs":1,"dftLang":0,"file":"fo_DK.xml"},{"lang":"fo-FO","langType":"fo","territory":"FO","revGenDate":null,"defs":0,"dftLang":0,"file":"fo_FO.xml"},{"lang":"fr","langType":"fr","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"fr.xml"},{"lang":"fr-BE","langType":"fr","territory":"BE","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_BE.xml"},{"lang":"fr-BF","langType":"fr","territory":"BF","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_BF.xml"},{"lang":"fr-BI","langType":"fr","territory":"BI","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_BI.xml"},{"lang":"fr-BJ","langType":"fr","territory":"BJ","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_BJ.xml"},{"lang":"fr-BL","langType":"fr","territory":"BL","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_BL.xml"},{"lang":"fr-CA","langType":"fr","territory":"CA","revGenDate":null,"defs":6,"dftLang":0,"file":"fr_CA.xml"},{"lang":"fr-CD","langType":"fr","territory":"CD","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_CD.xml"},{"lang":"fr-CF","langType":"fr","territory":"CF","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_CF.xml"},{"lang":"fr-CG","langType":"fr","territory":"CG","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_CG.xml"},{"lang":"fr-CH","langType":"fr","territory":"CH","revGenDate":null,"defs":4,"dftLang":0,"file":"fr_CH.xml"},{"lang":"fr-CI","langType":"fr","territory":"CI","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_CI.xml"},{"lang":"fr-CM","langType":"fr","territory":"CM","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_CM.xml"},{"lang":"fr-DJ","langType":"fr","territory":"DJ","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_DJ.xml"},{"lang":"fr-DZ","langType":"fr","territory":"DZ","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_DZ.xml"},{"lang":"fr-FR","langType":"fr","territory":"FR","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_FR.xml"},{"lang":"fr-GA","langType":"fr","territory":"GA","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_GA.xml"},{"lang":"fr-GF","langType":"fr","territory":"GF","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_GF.xml"},{"lang":"fr-GN","langType":"fr","territory":"GN","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_GN.xml"},{"lang":"fr-GP","langType":"fr","territory":"GP","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_GP.xml"},{"lang":"fr-GQ","langType":"fr","territory":"GQ","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_GQ.xml"},{"lang":"fr-HT","langType":"fr","territory":"HT","revGenDate":null,"defs":3,"dftLang":0,"file":"fr_HT.xml"},{"lang":"fr-KM","langType":"fr","territory":"KM","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_KM.xml"},{"lang":"fr-LU","langType":"fr","territory":"LU","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_LU.xml"},{"lang":"fr-MA","langType":"fr","territory":"MA","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_MA.xml"},{"lang":"fr-MC","langType":"fr","territory":"MC","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_MC.xml"},{"lang":"fr-MF","langType":"fr","territory":"MF","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_MF.xml"},{"lang":"fr-MG","langType":"fr","territory":"MG","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_MG.xml"},{"lang":"fr-ML","langType":"fr","territory":"ML","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_ML.xml"},{"lang":"fr-MQ","langType":"fr","territory":"MQ","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_MQ.xml"},{"lang":"fr-MR","langType":"fr","territory":"MR","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_MR.xml"},{"lang":"fr-MU","langType":"fr","territory":"MU","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_MU.xml"},{"lang":"fr-NC","langType":"fr","territory":"NC","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_NC.xml"},{"lang":"fr-NE","langType":"fr","territory":"NE","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_NE.xml"},{"lang":"fr-PF","langType":"fr","territory":"PF","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_PF.xml"},{"lang":"fr-PM","langType":"fr","territory":"PM","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_PM.xml"},{"lang":"fr-RE","langType":"fr","territory":"RE","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_RE.xml"},{"lang":"fr-RW","langType":"fr","territory":"RW","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_RW.xml"},{"lang":"fr-SC","langType":"fr","territory":"SC","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_SC.xml"},{"lang":"fr-SN","langType":"fr","territory":"SN","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_SN.xml"},{"lang":"fr-SY","langType":"fr","territory":"SY","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_SY.xml"},{"lang":"fr-TD","langType":"fr","territory":"TD","revGenDate":null,"defs":1,"dftLang":0,"file":"fr_TD.xml"},{"lang":"fr-TG","langType":"fr","territory":"TG","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_TG.xml"},{"lang":"fr-TN","langType":"fr","territory":"TN","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_TN.xml"},{"lang":"fr-VU","langType":"fr","territory":"VU","revGenDate":null,"defs":2,"dftLang":0,"file":"fr_VU.xml"},{"lang":"fr-WF","langType":"fr","territory":"WF","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_WF.xml"},{"lang":"fr-YT","langType":"fr","territory":"YT","revGenDate":null,"defs":0,"dftLang":0,"file":"fr_YT.xml"},{"lang":"fur","langType":"fur","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"fur.xml"},{"lang":"fur-IT","langType":"fur","territory":"IT","revGenDate":null,"defs":0,"dftLang":0,"file":"fur_IT.xml"},{"lang":"fy","langType":"fy","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"fy.xml"},{"lang":"fy-NL","langType":"fy","territory":"NL","revGenDate":null,"defs":0,"dftLang":0,"file":"fy_NL.xml"},{"lang":"ga","langType":"ga","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ga.xml"},{"lang":"ga-IE","langType":"ga","territory":"IE","revGenDate":null,"defs":0,"dftLang":0,"file":"ga_IE.xml"},{"lang":"gd","langType":"gd","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"gd.xml"},{"lang":"gd-GB","langType":"gd","territory":"GB","revGenDate":null,"defs":0,"dftLang":0,"file":"gd_GB.xml"},{"lang":"gl","langType":"gl","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"gl.xml"},{"lang":"gl-ES","langType":"gl","territory":"ES","revGenDate":null,"defs":0,"dftLang":0,"file":"gl_ES.xml"},{"lang":"gsw","langType":"gsw","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"gsw.xml"},{"lang":"gsw-CH","langType":"gsw","territory":"CH","revGenDate":null,"defs":0,"dftLang":0,"file":"gsw_CH.xml"},{"lang":"gsw-FR","langType":"gsw","territory":"FR","revGenDate":null,"defs":0,"dftLang":0,"file":"gsw_FR.xml"},{"lang":"gsw-LI","langType":"gsw","territory":"LI","revGenDate":null,"defs":0,"dftLang":0,"file":"gsw_LI.xml"},{"lang":"gu","langType":"gu","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"gu.xml"},{"lang":"gu-IN","langType":"gu","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"gu_IN.xml"},{"lang":"guz","langType":"guz","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"guz.xml"},{"lang":"guz-KE","langType":"guz","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"guz_KE.xml"},{"lang":"gv","langType":"gv","territory":null,"revGenDate":null,"defs":4,"dftLang":0,"file":"gv.xml"},{"lang":"gv-IM","langType":"gv","territory":"IM","revGenDate":null,"defs":0,"dftLang":0,"file":"gv_IM.xml"},{"lang":"ha","langType":"ha","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ha.xml"},{"lang":"ha-GH","langType":"ha","territory":"GH","revGenDate":null,"defs":1,"dftLang":0,"file":"ha_GH.xml"},{"lang":"ha-NE","langType":"ha","territory":"NE","revGenDate":null,"defs":0,"dftLang":0,"file":"ha_NE.xml"},{"lang":"ha-NG","langType":"ha","territory":"NG","revGenDate":null,"defs":0,"dftLang":0,"file":"ha_NG.xml"},{"lang":"haw","langType":"haw","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"haw.xml"},{"lang":"haw-US","langType":"haw","territory":"US","revGenDate":null,"defs":0,"dftLang":0,"file":"haw_US.xml"},{"lang":"he","langType":"he","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"he.xml"},{"lang":"he-IL","langType":"he","territory":"IL","revGenDate":null,"defs":0,"dftLang":0,"file":"he_IL.xml"},{"lang":"hi","langType":"hi","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"hi.xml"},{"lang":"hi-IN","langType":"hi","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"hi_IN.xml"},{"lang":"hr","langType":"hr","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"hr.xml"},{"lang":"hr-BA","langType":"hr","territory":"BA","revGenDate":null,"defs":2,"dftLang":0,"file":"hr_BA.xml"},{"lang":"hr-HR","langType":"hr","territory":"HR","revGenDate":null,"defs":0,"dftLang":0,"file":"hr_HR.xml"},{"lang":"hsb","langType":"hsb","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"hsb.xml"},{"lang":"hsb-DE","langType":"hsb","territory":"DE","revGenDate":null,"defs":0,"dftLang":0,"file":"hsb_DE.xml"},{"lang":"hu","langType":"hu","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"hu.xml"},{"lang":"hu-HU","langType":"hu","territory":"HU","revGenDate":null,"defs":0,"dftLang":0,"file":"hu_HU.xml"},{"lang":"hy","langType":"hy","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"hy.xml"},{"lang":"hy-AM","langType":"hy","territory":"AM","revGenDate":null,"defs":0,"dftLang":0,"file":"hy_AM.xml"},{"lang":"id","langType":"id","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"id.xml"},{"lang":"id-ID","langType":"id","territory":"ID","revGenDate":null,"defs":0,"dftLang":0,"file":"id_ID.xml"},{"lang":"ig","langType":"ig","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ig.xml"},{"lang":"ig-NG","langType":"ig","territory":"NG","revGenDate":null,"defs":0,"dftLang":0,"file":"ig_NG.xml"},{"lang":"ii","langType":"ii","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"ii.xml"},{"lang":"ii-CN","langType":"ii","territory":"CN","revGenDate":null,"defs":0,"dftLang":0,"file":"ii_CN.xml"},{"lang":"is","langType":"is","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"is.xml"},{"lang":"is-IS","langType":"is","territory":"IS","revGenDate":null,"defs":0,"dftLang":0,"file":"is_IS.xml"},{"lang":"it","langType":"it","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"it.xml"},{"lang":"it-CH","langType":"it","territory":"CH","revGenDate":null,"defs":3,"dftLang":0,"file":"it_CH.xml"},{"lang":"it-IT","langType":"it","territory":"IT","revGenDate":null,"defs":0,"dftLang":0,"file":"it_IT.xml"},{"lang":"it-SM","langType":"it","territory":"SM","revGenDate":null,"defs":0,"dftLang":0,"file":"it_SM.xml"},{"lang":"it-VA","langType":"it","territory":"VA","revGenDate":null,"defs":0,"dftLang":0,"file":"it_VA.xml"},{"lang":"ja","langType":"ja","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ja.xml"},{"lang":"ja-JP","langType":"ja","territory":"JP","revGenDate":null,"defs":0,"dftLang":0,"file":"ja_JP.xml"},{"lang":"jgo","langType":"jgo","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"jgo.xml"},{"lang":"jgo-CM","langType":"jgo","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"jgo_CM.xml"},{"lang":"jmc","langType":"jmc","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"jmc.xml"},{"lang":"jmc-TZ","langType":"jmc","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"jmc_TZ.xml"},{"lang":"ka","langType":"ka","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ka.xml"},{"lang":"ka-GE","langType":"ka","territory":"GE","revGenDate":null,"defs":0,"dftLang":0,"file":"ka_GE.xml"},{"lang":"kab","langType":"kab","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"kab.xml"},{"lang":"kab-DZ","langType":"kab","territory":"DZ","revGenDate":null,"defs":0,"dftLang":0,"file":"kab_DZ.xml"},{"lang":"kam","langType":"kam","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"kam.xml"},{"lang":"kam-KE","langType":"kam","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"kam_KE.xml"},{"lang":"kde","langType":"kde","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"kde.xml"},{"lang":"kde-TZ","langType":"kde","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"kde_TZ.xml"},{"lang":"kea","langType":"kea","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"kea.xml"},{"lang":"kea-CV","langType":"kea","territory":"CV","revGenDate":null,"defs":0,"dftLang":0,"file":"kea_CV.xml"},{"lang":"khq","langType":"khq","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"khq.xml"},{"lang":"khq-ML","langType":"khq","territory":"ML","revGenDate":null,"defs":0,"dftLang":0,"file":"khq_ML.xml"},{"lang":"ki","langType":"ki","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ki.xml"},{"lang":"ki-KE","langType":"ki","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"ki_KE.xml"},{"lang":"kk","langType":"kk","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"kk.xml"},{"lang":"kk-KZ","langType":"kk","territory":"KZ","revGenDate":null,"defs":0,"dftLang":0,"file":"kk_KZ.xml"},{"lang":"kkj","langType":"kkj","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"kkj.xml"},{"lang":"kkj-CM","langType":"kkj","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"kkj_CM.xml"},{"lang":"kl","langType":"kl","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"kl.xml"},{"lang":"kl-GL","langType":"kl","territory":"GL","revGenDate":null,"defs":0,"dftLang":0,"file":"kl_GL.xml"},{"lang":"kln","langType":"kln","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"kln.xml"},{"lang":"kln-KE","langType":"kln","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"kln_KE.xml"},{"lang":"km","langType":"km","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"km.xml"},{"lang":"km-KH","langType":"km","territory":"KH","revGenDate":null,"defs":0,"dftLang":0,"file":"km_KH.xml"},{"lang":"kn","langType":"kn","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"kn.xml"},{"lang":"kn-IN","langType":"kn","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"kn_IN.xml"},{"lang":"ko","langType":"ko","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ko.xml"},{"lang":"ko-KP","langType":"ko","territory":"KP","revGenDate":null,"defs":2,"dftLang":0,"file":"ko_KP.xml"},{"lang":"ko-KR","langType":"ko","territory":"KR","revGenDate":null,"defs":0,"dftLang":0,"file":"ko_KR.xml"},{"lang":"kok","langType":"kok","territory":null,"revGenDate":null,"defs":4,"dftLang":0,"file":"kok.xml"},{"lang":"kok-IN","langType":"kok","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"kok_IN.xml"},{"lang":"ks","langType":"ks","territory":null,"revGenDate":null,"defs":7,"dftLang":0,"file":"ks.xml"},{"lang":"ks-IN","langType":"ks","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"ks_IN.xml"},{"lang":"ksb","langType":"ksb","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ksb.xml"},{"lang":"ksb-TZ","langType":"ksb","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"ksb_TZ.xml"},{"lang":"ksf","langType":"ksf","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ksf.xml"},{"lang":"ksf-CM","langType":"ksf","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"ksf_CM.xml"},{"lang":"ksh","langType":"ksh","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"ksh.xml"},{"lang":"ksh-DE","langType":"ksh","territory":"DE","revGenDate":null,"defs":0,"dftLang":0,"file":"ksh_DE.xml"},{"lang":"kw","langType":"kw","territory":null,"revGenDate":null,"defs":4,"dftLang":0,"file":"kw.xml"},{"lang":"kw-GB","langType":"kw","territory":"GB","revGenDate":null,"defs":0,"dftLang":0,"file":"kw_GB.xml"},{"lang":"ky","langType":"ky","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ky.xml"},{"lang":"ky-KG","langType":"ky","territory":"KG","revGenDate":null,"defs":0,"dftLang":0,"file":"ky_KG.xml"},{"lang":"lag","langType":"lag","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"lag.xml"},{"lang":"lag-TZ","langType":"lag","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"lag_TZ.xml"},{"lang":"lb","langType":"lb","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"lb.xml"},{"lang":"lb-LU","langType":"lb","territory":"LU","revGenDate":null,"defs":0,"dftLang":0,"file":"lb_LU.xml"},{"lang":"lg","langType":"lg","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"lg.xml"},{"lang":"lg-UG","langType":"lg","territory":"UG","revGenDate":null,"defs":0,"dftLang":0,"file":"lg_UG.xml"},{"lang":"lkt","langType":"lkt","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"lkt.xml"},{"lang":"lkt-US","langType":"lkt","territory":"US","revGenDate":null,"defs":0,"dftLang":0,"file":"lkt_US.xml"},{"lang":"ln","langType":"ln","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"ln.xml"},{"lang":"ln-AO","langType":"ln","territory":"AO","revGenDate":null,"defs":1,"dftLang":0,"file":"ln_AO.xml"},{"lang":"ln-CD","langType":"ln","territory":"CD","revGenDate":null,"defs":0,"dftLang":0,"file":"ln_CD.xml"},{"lang":"ln-CF","langType":"ln","territory":"CF","revGenDate":null,"defs":0,"dftLang":0,"file":"ln_CF.xml"},{"lang":"ln-CG","langType":"ln","territory":"CG","revGenDate":null,"defs":0,"dftLang":0,"file":"ln_CG.xml"},{"lang":"lo","langType":"lo","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"lo.xml"},{"lang":"lo-LA","langType":"lo","territory":"LA","revGenDate":null,"defs":0,"dftLang":0,"file":"lo_LA.xml"},{"lang":"lrc","langType":"lrc","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"lrc.xml"},{"lang":"lrc-IQ","langType":"lrc","territory":"IQ","revGenDate":null,"defs":1,"dftLang":0,"file":"lrc_IQ.xml"},{"lang":"lrc-IR","langType":"lrc","territory":"IR","revGenDate":null,"defs":0,"dftLang":0,"file":"lrc_IR.xml"},{"lang":"lt","langType":"lt","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"lt.xml"},{"lang":"lt-LT","langType":"lt","territory":"LT","revGenDate":null,"defs":0,"dftLang":0,"file":"lt_LT.xml"},{"lang":"lu","langType":"lu","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"lu.xml"},{"lang":"lu-CD","langType":"lu","territory":"CD","revGenDate":null,"defs":0,"dftLang":0,"file":"lu_CD.xml"},{"lang":"luo","langType":"luo","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"luo.xml"},{"lang":"luo-KE","langType":"luo","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"luo_KE.xml"},{"lang":"luy","langType":"luy","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"luy.xml"},{"lang":"luy-KE","langType":"luy","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"luy_KE.xml"},{"lang":"lv","langType":"lv","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"lv.xml"},{"lang":"lv-LV","langType":"lv","territory":"LV","revGenDate":null,"defs":0,"dftLang":0,"file":"lv_LV.xml"},{"lang":"mas","langType":"mas","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"mas.xml"},{"lang":"mas-KE","langType":"mas","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"mas_KE.xml"},{"lang":"mas-TZ","langType":"mas","territory":"TZ","revGenDate":null,"defs":1,"dftLang":0,"file":"mas_TZ.xml"},{"lang":"mer","langType":"mer","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"mer.xml"},{"lang":"mer-KE","langType":"mer","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"mer_KE.xml"},{"lang":"mfe","langType":"mfe","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"mfe.xml"},{"lang":"mfe-MU","langType":"mfe","territory":"MU","revGenDate":null,"defs":0,"dftLang":0,"file":"mfe_MU.xml"},{"lang":"mg","langType":"mg","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"mg.xml"},{"lang":"mg-MG","langType":"mg","territory":"MG","revGenDate":null,"defs":0,"dftLang":0,"file":"mg_MG.xml"},{"lang":"mgh","langType":"mgh","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"mgh.xml"},{"lang":"mgh-MZ","langType":"mgh","territory":"MZ","revGenDate":null,"defs":0,"dftLang":0,"file":"mgh_MZ.xml"},{"lang":"mgo","langType":"mgo","territory":null,"revGenDate":null,"defs":7,"dftLang":0,"file":"mgo.xml"},{"lang":"mgo-CM","langType":"mgo","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"mgo_CM.xml"},{"lang":"mk","langType":"mk","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"mk.xml"},{"lang":"mk-MK","langType":"mk","territory":"MK","revGenDate":null,"defs":0,"dftLang":0,"file":"mk_MK.xml"},{"lang":"ml","langType":"ml","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ml.xml"},{"lang":"ml-IN","langType":"ml","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"ml_IN.xml"},{"lang":"mn","langType":"mn","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"mn.xml"},{"lang":"mn-MN","langType":"mn","territory":"MN","revGenDate":null,"defs":0,"dftLang":0,"file":"mn_MN.xml"},{"lang":"mr","langType":"mr","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"mr.xml"},{"lang":"mr-IN","langType":"mr","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"mr_IN.xml"},{"lang":"ms","langType":"ms","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ms.xml"},{"lang":"ms-BN","langType":"ms","territory":"BN","revGenDate":null,"defs":2,"dftLang":0,"file":"ms_BN.xml"},{"lang":"ms-MY","langType":"ms","territory":"MY","revGenDate":null,"defs":0,"dftLang":0,"file":"ms_MY.xml"},{"lang":"ms-SG","langType":"ms","territory":"SG","revGenDate":null,"defs":1,"dftLang":0,"file":"ms_SG.xml"},{"lang":"mt","langType":"mt","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"mt.xml"},{"lang":"mt-MT","langType":"mt","territory":"MT","revGenDate":null,"defs":0,"dftLang":0,"file":"mt_MT.xml"},{"lang":"mua","langType":"mua","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"mua.xml"},{"lang":"mua-CM","langType":"mua","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"mua_CM.xml"},{"lang":"my","langType":"my","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"my.xml"},{"lang":"my-MM","langType":"my","territory":"MM","revGenDate":null,"defs":0,"dftLang":0,"file":"my_MM.xml"},{"lang":"mzn","langType":"mzn","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"mzn.xml"},{"lang":"mzn-IR","langType":"mzn","territory":"IR","revGenDate":null,"defs":0,"dftLang":0,"file":"mzn_IR.xml"},{"lang":"naq","langType":"naq","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"naq.xml"},{"lang":"naq-NA","langType":"naq","territory":"NA","revGenDate":null,"defs":0,"dftLang":0,"file":"naq_NA.xml"},{"lang":"nb","langType":"nb","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"nb.xml"},{"lang":"nb-NO","langType":"nb","territory":"NO","revGenDate":null,"defs":0,"dftLang":0,"file":"nb_NO.xml"},{"lang":"nb-SJ","langType":"nb","territory":"SJ","revGenDate":null,"defs":0,"dftLang":0,"file":"nb_SJ.xml"},{"lang":"nd","langType":"nd","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"nd.xml"},{"lang":"nd-ZW","langType":"nd","territory":"ZW","revGenDate":null,"defs":0,"dftLang":0,"file":"nd_ZW.xml"},{"lang":"nds","langType":"nds","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"nds.xml"},{"lang":"nds-DE","langType":"nds","territory":"DE","revGenDate":null,"defs":0,"dftLang":0,"file":"nds_DE.xml"},{"lang":"nds-NL","langType":"nds","territory":"NL","revGenDate":null,"defs":1,"dftLang":0,"file":"nds_NL.xml"},{"lang":"ne","langType":"ne","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ne.xml"},{"lang":"ne-IN","langType":"ne","territory":"IN","revGenDate":null,"defs":1,"dftLang":0,"file":"ne_IN.xml"},{"lang":"ne-NP","langType":"ne","territory":"NP","revGenDate":null,"defs":0,"dftLang":0,"file":"ne_NP.xml"},{"lang":"nl","langType":"nl","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"nl.xml"},{"lang":"nl-AW","langType":"nl","territory":"AW","revGenDate":null,"defs":1,"dftLang":0,"file":"nl_AW.xml"},{"lang":"nl-BE","langType":"nl","territory":"BE","revGenDate":null,"defs":3,"dftLang":0,"file":"nl_BE.xml"},{"lang":"nl-BQ","langType":"nl","territory":"BQ","revGenDate":null,"defs":1,"dftLang":0,"file":"nl_BQ.xml"},{"lang":"nl-CW","langType":"nl","territory":"CW","revGenDate":null,"defs":1,"dftLang":0,"file":"nl_CW.xml"},{"lang":"nl-NL","langType":"nl","territory":"NL","revGenDate":null,"defs":0,"dftLang":0,"file":"nl_NL.xml"},{"lang":"nl-SR","langType":"nl","territory":"SR","revGenDate":null,"defs":2,"dftLang":0,"file":"nl_SR.xml"},{"lang":"nl-SX","langType":"nl","territory":"SX","revGenDate":null,"defs":1,"dftLang":0,"file":"nl_SX.xml"},{"lang":"nmg","langType":"nmg","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"nmg.xml"},{"lang":"nmg-CM","langType":"nmg","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"nmg_CM.xml"},{"lang":"nn","langType":"nn","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"nn.xml"},{"lang":"nn-NO","langType":"nn","territory":"NO","revGenDate":null,"defs":0,"dftLang":0,"file":"nn_NO.xml"},{"lang":"nnh","langType":"nnh","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"nnh.xml"},{"lang":"nnh-CM","langType":"nnh","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"nnh_CM.xml"},{"lang":"nus","langType":"nus","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"nus.xml"},{"lang":"nus-SS","langType":"nus","territory":"SS","revGenDate":null,"defs":0,"dftLang":0,"file":"nus_SS.xml"},{"lang":"nyn","langType":"nyn","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"nyn.xml"},{"lang":"nyn-UG","langType":"nyn","territory":"UG","revGenDate":null,"defs":0,"dftLang":0,"file":"nyn_UG.xml"},{"lang":"om","langType":"om","territory":null,"revGenDate":null,"defs":4,"dftLang":0,"file":"om.xml"},{"lang":"om-ET","langType":"om","territory":"ET","revGenDate":null,"defs":0,"dftLang":0,"file":"om_ET.xml"},{"lang":"om-KE","langType":"om","territory":"KE","revGenDate":null,"defs":2,"dftLang":0,"file":"om_KE.xml"},{"lang":"or","langType":"or","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"or.xml"},{"lang":"or-IN","langType":"or","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"or_IN.xml"},{"lang":"os","langType":"os","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"os.xml"},{"lang":"os-GE","langType":"os","territory":"GE","revGenDate":null,"defs":0,"dftLang":0,"file":"os_GE.xml"},{"lang":"os-RU","langType":"os","territory":"RU","revGenDate":null,"defs":1,"dftLang":0,"file":"os_RU.xml"},{"lang":"pa","langType":"pa","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"pa.xml"},{"lang":"pa-Arab","langType":"pa","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"pa_Arab.xml"},{"lang":"pa-Arab-PK","langType":"pa","territory":"PK","revGenDate":null,"defs":0,"dftLang":0,"file":"pa_Arab_PK.xml"},{"lang":"pa-Guru","langType":"pa","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"pa_Guru.xml"},{"lang":"pa-Guru-IN","langType":"pa","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"pa_Guru_IN.xml"},{"lang":"pl","langType":"pl","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"pl.xml"},{"lang":"pl-PL","langType":"pl","territory":"PL","revGenDate":null,"defs":0,"dftLang":0,"file":"pl_PL.xml"},{"lang":"prg","langType":"prg","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"prg.xml"},{"lang":"prg-001","langType":"prg","territory":1,"revGenDate":null,"defs":0,"dftLang":0,"file":"prg_001.xml"},{"lang":"ps","langType":"ps","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ps.xml"},{"lang":"ps-AF","langType":"ps","territory":"AF","revGenDate":null,"defs":0,"dftLang":0,"file":"ps_AF.xml"},{"lang":"pt","langType":"pt","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"pt.xml"},{"lang":"pt-AO","langType":"pt","territory":"AO","revGenDate":null,"defs":2,"dftLang":0,"file":"pt_AO.xml"},{"lang":"pt-BR","langType":"pt","territory":"BR","revGenDate":null,"defs":0,"dftLang":0,"file":"pt_BR.xml"},{"lang":"pt-CH","langType":"pt","territory":"CH","revGenDate":null,"defs":0,"dftLang":0,"file":"pt_CH.xml"},{"lang":"pt-CV","langType":"pt","territory":"CV","revGenDate":null,"defs":2,"dftLang":0,"file":"pt_CV.xml"},{"lang":"pt-GQ","langType":"pt","territory":"GQ","revGenDate":null,"defs":0,"dftLang":0,"file":"pt_GQ.xml"},{"lang":"pt-GW","langType":"pt","territory":"GW","revGenDate":null,"defs":1,"dftLang":0,"file":"pt_GW.xml"},{"lang":"pt-LU","langType":"pt","territory":"LU","revGenDate":null,"defs":1,"dftLang":0,"file":"pt_LU.xml"},{"lang":"pt-MO","langType":"pt","territory":"MO","revGenDate":null,"defs":2,"dftLang":0,"file":"pt_MO.xml"},{"lang":"pt-MZ","langType":"pt","territory":"MZ","revGenDate":null,"defs":2,"dftLang":0,"file":"pt_MZ.xml"},{"lang":"pt-PT","langType":"pt","territory":"PT","revGenDate":null,"defs":8,"dftLang":0,"file":"pt_PT.xml"},{"lang":"pt-ST","langType":"pt","territory":"ST","revGenDate":null,"defs":2,"dftLang":0,"file":"pt_ST.xml"},{"lang":"pt-TL","langType":"pt","territory":"TL","revGenDate":null,"defs":1,"dftLang":0,"file":"pt_TL.xml"},{"lang":"qu","langType":"qu","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"qu.xml"},{"lang":"qu-BO","langType":"qu","territory":"BO","revGenDate":null,"defs":2,"dftLang":0,"file":"qu_BO.xml"},{"lang":"qu-EC","langType":"qu","territory":"EC","revGenDate":null,"defs":2,"dftLang":0,"file":"qu_EC.xml"},{"lang":"qu-PE","langType":"qu","territory":"PE","revGenDate":null,"defs":0,"dftLang":0,"file":"qu_PE.xml"},{"lang":"rm","langType":"rm","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"rm.xml"},{"lang":"rm-CH","langType":"rm","territory":"CH","revGenDate":null,"defs":0,"dftLang":0,"file":"rm_CH.xml"},{"lang":"rn","langType":"rn","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"rn.xml"},{"lang":"rn-BI","langType":"rn","territory":"BI","revGenDate":null,"defs":0,"dftLang":0,"file":"rn_BI.xml"},{"lang":"ro","langType":"ro","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ro.xml"},{"lang":"ro-MD","langType":"ro","territory":"MD","revGenDate":null,"defs":4,"dftLang":0,"file":"ro_MD.xml"},{"lang":"ro-RO","langType":"ro","territory":"RO","revGenDate":null,"defs":0,"dftLang":0,"file":"ro_RO.xml"},{"lang":"rof","langType":"rof","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"rof.xml"},{"lang":"rof-TZ","langType":"rof","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"rof_TZ.xml"},{"lang":"root","langType":"root","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"root.xml"},{"lang":"ru","langType":"ru","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"ru.xml"},{"lang":"ru-BY","langType":"ru","territory":"BY","revGenDate":null,"defs":1,"dftLang":0,"file":"ru_BY.xml"},{"lang":"ru-KG","langType":"ru","territory":"KG","revGenDate":null,"defs":1,"dftLang":0,"file":"ru_KG.xml"},{"lang":"ru-KZ","langType":"ru","territory":"KZ","revGenDate":null,"defs":1,"dftLang":0,"file":"ru_KZ.xml"},{"lang":"ru-MD","langType":"ru","territory":"MD","revGenDate":null,"defs":1,"dftLang":0,"file":"ru_MD.xml"},{"lang":"ru-RU","langType":"ru","territory":"RU","revGenDate":null,"defs":0,"dftLang":0,"file":"ru_RU.xml"},{"lang":"ru-UA","langType":"ru","territory":"UA","revGenDate":null,"defs":3,"dftLang":0,"file":"ru_UA.xml"},{"lang":"rw","langType":"rw","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"rw.xml"},{"lang":"rw-RW","langType":"rw","territory":"RW","revGenDate":null,"defs":0,"dftLang":0,"file":"rw_RW.xml"},{"lang":"rwk","langType":"rwk","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"rwk.xml"},{"lang":"rwk-TZ","langType":"rwk","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"rwk_TZ.xml"},{"lang":"sah","langType":"sah","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"sah.xml"},{"lang":"sah-RU","langType":"sah","territory":"RU","revGenDate":null,"defs":0,"dftLang":0,"file":"sah_RU.xml"},{"lang":"saq","langType":"saq","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"saq.xml"},{"lang":"saq-KE","langType":"saq","territory":"KE","revGenDate":null,"defs":0,"dftLang":0,"file":"saq_KE.xml"},{"lang":"sbp","langType":"sbp","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"sbp.xml"},{"lang":"sbp-TZ","langType":"sbp","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"sbp_TZ.xml"},{"lang":"se","langType":"se","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"se.xml"},{"lang":"se-FI","langType":"se","territory":"FI","revGenDate":null,"defs":2,"dftLang":0,"file":"se_FI.xml"},{"lang":"se-NO","langType":"se","territory":"NO","revGenDate":null,"defs":0,"dftLang":0,"file":"se_NO.xml"},{"lang":"se-SE","langType":"se","territory":"SE","revGenDate":null,"defs":1,"dftLang":0,"file":"se_SE.xml"},{"lang":"seh","langType":"seh","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"seh.xml"},{"lang":"seh-MZ","langType":"seh","territory":"MZ","revGenDate":null,"defs":0,"dftLang":0,"file":"seh_MZ.xml"},{"lang":"ses","langType":"ses","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"ses.xml"},{"lang":"ses-ML","langType":"ses","territory":"ML","revGenDate":null,"defs":0,"dftLang":0,"file":"ses_ML.xml"},{"lang":"sg","langType":"sg","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"sg.xml"},{"lang":"sg-CF","langType":"sg","territory":"CF","revGenDate":null,"defs":0,"dftLang":0,"file":"sg_CF.xml"},{"lang":"shi","langType":"shi","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"shi.xml"},{"lang":"shi-Latn","langType":"shi","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"shi_Latn.xml"},{"lang":"shi-Latn-MA","langType":"shi","territory":"MA","revGenDate":null,"defs":0,"dftLang":0,"file":"shi_Latn_MA.xml"},{"lang":"shi-Tfng","langType":"shi","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"shi_Tfng.xml"},{"lang":"shi-Tfng-MA","langType":"shi","territory":"MA","revGenDate":null,"defs":0,"dftLang":0,"file":"shi_Tfng_MA.xml"},{"lang":"si","langType":"si","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"si.xml"},{"lang":"si-LK","langType":"si","territory":"LK","revGenDate":null,"defs":0,"dftLang":0,"file":"si_LK.xml"},{"lang":"sk","langType":"sk","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"sk.xml"},{"lang":"sk-SK","langType":"sk","territory":"SK","revGenDate":null,"defs":0,"dftLang":0,"file":"sk_SK.xml"},{"lang":"sl","langType":"sl","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"sl.xml"},{"lang":"sl-SI","langType":"sl","territory":"SI","revGenDate":null,"defs":0,"dftLang":0,"file":"sl_SI.xml"},{"lang":"smn","langType":"smn","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"smn.xml"},{"lang":"smn-FI","langType":"smn","territory":"FI","revGenDate":null,"defs":0,"dftLang":0,"file":"smn_FI.xml"},{"lang":"sn","langType":"sn","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"sn.xml"},{"lang":"sn-ZW","langType":"sn","territory":"ZW","revGenDate":null,"defs":0,"dftLang":0,"file":"sn_ZW.xml"},{"lang":"so","langType":"so","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"so.xml"},{"lang":"so-DJ","langType":"so","territory":"DJ","revGenDate":null,"defs":1,"dftLang":0,"file":"so_DJ.xml"},{"lang":"so-ET","langType":"so","territory":"ET","revGenDate":null,"defs":1,"dftLang":0,"file":"so_ET.xml"},{"lang":"so-KE","langType":"so","territory":"KE","revGenDate":null,"defs":2,"dftLang":0,"file":"so_KE.xml"},{"lang":"so-SO","langType":"so","territory":"SO","revGenDate":null,"defs":0,"dftLang":0,"file":"so_SO.xml"},{"lang":"sq","langType":"sq","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"sq.xml"},{"lang":"sq-AL","langType":"sq","territory":"AL","revGenDate":null,"defs":0,"dftLang":0,"file":"sq_AL.xml"},{"lang":"sq-MK","langType":"sq","territory":"MK","revGenDate":null,"defs":2,"dftLang":0,"file":"sq_MK.xml"},{"lang":"sq-XK","langType":"sq","territory":"XK","revGenDate":null,"defs":1,"dftLang":0,"file":"sq_XK.xml"},{"lang":"sr","langType":"sr","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"sr.xml"},{"lang":"sr-Cyrl","langType":"sr","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"sr_Cyrl.xml"},{"lang":"sr-Cyrl-BA","langType":"sr","territory":"BA","revGenDate":null,"defs":2,"dftLang":0,"file":"sr_Cyrl_BA.xml"},{"lang":"sr-Cyrl-ME","langType":"sr","territory":"ME","revGenDate":null,"defs":2,"dftLang":0,"file":"sr_Cyrl_ME.xml"},{"lang":"sr-Cyrl-RS","langType":"sr","territory":"RS","revGenDate":null,"defs":0,"dftLang":0,"file":"sr_Cyrl_RS.xml"},{"lang":"sr-Cyrl-XK","langType":"sr","territory":"XK","revGenDate":null,"defs":2,"dftLang":0,"file":"sr_Cyrl_XK.xml"},{"lang":"sr-Latn","langType":"sr","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"sr_Latn.xml"},{"lang":"sr-Latn-BA","langType":"sr","territory":"BA","revGenDate":null,"defs":2,"dftLang":0,"file":"sr_Latn_BA.xml"},{"lang":"sr-Latn-ME","langType":"sr","territory":"ME","revGenDate":null,"defs":2,"dftLang":0,"file":"sr_Latn_ME.xml"},{"lang":"sr-Latn-RS","langType":"sr","territory":"RS","revGenDate":null,"defs":0,"dftLang":0,"file":"sr_Latn_RS.xml"},{"lang":"sr-Latn-XK","langType":"sr","territory":"XK","revGenDate":null,"defs":2,"dftLang":0,"file":"sr_Latn_XK.xml"},{"lang":"sv","langType":"sv","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"sv.xml"},{"lang":"sv-AX","langType":"sv","territory":"AX","revGenDate":null,"defs":0,"dftLang":0,"file":"sv_AX.xml"},{"lang":"sv-FI","langType":"sv","territory":"FI","revGenDate":null,"defs":4,"dftLang":0,"file":"sv_FI.xml"},{"lang":"sv-SE","langType":"sv","territory":"SE","revGenDate":null,"defs":0,"dftLang":0,"file":"sv_SE.xml"},{"lang":"sw","langType":"sw","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"sw.xml"},{"lang":"sw-CD","langType":"sw","territory":"CD","revGenDate":null,"defs":4,"dftLang":0,"file":"sw_CD.xml"},{"lang":"sw-KE","langType":"sw","territory":"KE","revGenDate":null,"defs":2,"dftLang":0,"file":"sw_KE.xml"},{"lang":"sw-TZ","langType":"sw","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"sw_TZ.xml"},{"lang":"sw-UG","langType":"sw","territory":"UG","revGenDate":null,"defs":1,"dftLang":0,"file":"sw_UG.xml"},{"lang":"ta","langType":"ta","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ta.xml"},{"lang":"ta-IN","langType":"ta","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"ta_IN.xml"},{"lang":"ta-LK","langType":"ta","territory":"LK","revGenDate":null,"defs":2,"dftLang":0,"file":"ta_LK.xml"},{"lang":"ta-MY","langType":"ta","territory":"MY","revGenDate":null,"defs":2,"dftLang":0,"file":"ta_MY.xml"},{"lang":"ta-SG","langType":"ta","territory":"SG","revGenDate":null,"defs":2,"dftLang":0,"file":"ta_SG.xml"},{"lang":"te","langType":"te","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"te.xml"},{"lang":"te-IN","langType":"te","territory":"IN","revGenDate":null,"defs":0,"dftLang":0,"file":"te_IN.xml"},{"lang":"teo","langType":"teo","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"teo.xml"},{"lang":"teo-KE","langType":"teo","territory":"KE","revGenDate":null,"defs":1,"dftLang":0,"file":"teo_KE.xml"},{"lang":"teo-UG","langType":"teo","territory":"UG","revGenDate":null,"defs":0,"dftLang":0,"file":"teo_UG.xml"},{"lang":"th","langType":"th","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"th.xml"},{"lang":"th-TH","langType":"th","territory":"TH","revGenDate":null,"defs":0,"dftLang":0,"file":"th_TH.xml"},{"lang":"ti","langType":"ti","territory":null,"revGenDate":null,"defs":4,"dftLang":0,"file":"ti.xml"},{"lang":"ti-ER","langType":"ti","territory":"ER","revGenDate":null,"defs":4,"dftLang":0,"file":"ti_ER.xml"},{"lang":"ti-ET","langType":"ti","territory":"ET","revGenDate":null,"defs":0,"dftLang":0,"file":"ti_ET.xml"},{"lang":"tk","langType":"tk","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"tk.xml"},{"lang":"tk-TM","langType":"tk","territory":"TM","revGenDate":null,"defs":0,"dftLang":0,"file":"tk_TM.xml"},{"lang":"to","langType":"to","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"to.xml"},{"lang":"to-TO","langType":"to","territory":"TO","revGenDate":null,"defs":0,"dftLang":0,"file":"to_TO.xml"},{"lang":"tr","langType":"tr","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"tr.xml"},{"lang":"tr-CY","langType":"tr","territory":"CY","revGenDate":null,"defs":1,"dftLang":0,"file":"tr_CY.xml"},{"lang":"tr-TR","langType":"tr","territory":"TR","revGenDate":null,"defs":0,"dftLang":0,"file":"tr_TR.xml"},{"lang":"twq","langType":"twq","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"twq.xml"},{"lang":"twq-NE","langType":"twq","territory":"NE","revGenDate":null,"defs":0,"dftLang":0,"file":"twq_NE.xml"},{"lang":"tzm","langType":"tzm","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"tzm.xml"},{"lang":"tzm-MA","langType":"tzm","territory":"MA","revGenDate":null,"defs":0,"dftLang":0,"file":"tzm_MA.xml"},{"lang":"ug","langType":"ug","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"ug.xml"},{"lang":"ug-CN","langType":"ug","territory":"CN","revGenDate":null,"defs":0,"dftLang":0,"file":"ug_CN.xml"},{"lang":"uk","langType":"uk","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"uk.xml"},{"lang":"uk-UA","langType":"uk","territory":"UA","revGenDate":null,"defs":0,"dftLang":0,"file":"uk_UA.xml"},{"lang":"ur","langType":"ur","territory":null,"revGenDate":null,"defs":10,"dftLang":0,"file":"ur.xml"},{"lang":"ur-IN","langType":"ur","territory":"IN","revGenDate":null,"defs":6,"dftLang":0,"file":"ur_IN.xml"},{"lang":"ur-PK","langType":"ur","territory":"PK","revGenDate":null,"defs":0,"dftLang":0,"file":"ur_PK.xml"},{"lang":"uz","langType":"uz","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"uz.xml"},{"lang":"uz-Arab","langType":"uz","territory":null,"revGenDate":null,"defs":5,"dftLang":0,"file":"uz_Arab.xml"},{"lang":"uz-Arab-AF","langType":"uz","territory":"AF","revGenDate":null,"defs":0,"dftLang":0,"file":"uz_Arab_AF.xml"},{"lang":"uz-Cyrl","langType":"uz","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"uz_Cyrl.xml"},{"lang":"uz-Cyrl-UZ","langType":"uz","territory":"UZ","revGenDate":null,"defs":0,"dftLang":0,"file":"uz_Cyrl_UZ.xml"},{"lang":"uz-Latn","langType":"uz","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"uz_Latn.xml"},{"lang":"uz-Latn-UZ","langType":"uz","territory":"UZ","revGenDate":null,"defs":0,"dftLang":0,"file":"uz_Latn_UZ.xml"},{"lang":"vai","langType":"vai","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"vai.xml"},{"lang":"vai-Latn","langType":"vai","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"vai_Latn.xml"},{"lang":"vai-Latn-LR","langType":"vai","territory":"LR","revGenDate":null,"defs":0,"dftLang":0,"file":"vai_Latn_LR.xml"},{"lang":"vai-Vaii","langType":"vai","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"vai_Vaii.xml"},{"lang":"vai-Vaii-LR","langType":"vai","territory":"LR","revGenDate":null,"defs":0,"dftLang":0,"file":"vai_Vaii_LR.xml"},{"lang":"vi","langType":"vi","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"vi.xml"},{"lang":"vi-VN","langType":"vi","territory":"VN","revGenDate":null,"defs":0,"dftLang":0,"file":"vi_VN.xml"},{"lang":"vo","langType":"vo","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"vo.xml"},{"lang":"vo-001","langType":"vo","territory":1,"revGenDate":null,"defs":0,"dftLang":0,"file":"vo_001.xml"},{"lang":"vun","langType":"vun","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"vun.xml"},{"lang":"vun-TZ","langType":"vun","territory":"TZ","revGenDate":null,"defs":0,"dftLang":0,"file":"vun_TZ.xml"},{"lang":"wae","langType":"wae","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"wae.xml"},{"lang":"wae-CH","langType":"wae","territory":"CH","revGenDate":null,"defs":0,"dftLang":0,"file":"wae_CH.xml"},{"lang":"xog","langType":"xog","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"xog.xml"},{"lang":"xog-UG","langType":"xog","territory":"UG","revGenDate":null,"defs":0,"dftLang":0,"file":"xog_UG.xml"},{"lang":"yav","langType":"yav","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"yav.xml"},{"lang":"yav-CM","langType":"yav","territory":"CM","revGenDate":null,"defs":0,"dftLang":0,"file":"yav_CM.xml"},{"lang":"yi","langType":"yi","territory":null,"revGenDate":null,"defs":8,"dftLang":0,"file":"yi.xml"},{"lang":"yi-001","langType":"yi","territory":1,"revGenDate":null,"defs":0,"dftLang":0,"file":"yi_001.xml"},{"lang":"yo","langType":"yo","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"yo.xml"},{"lang":"yo-BJ","langType":"yo","territory":"BJ","revGenDate":null,"defs":5,"dftLang":0,"file":"yo_BJ.xml"},{"lang":"yo-NG","langType":"yo","territory":"NG","revGenDate":null,"defs":0,"dftLang":0,"file":"yo_NG.xml"},{"lang":"yue","langType":"yue","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"yue.xml"},{"lang":"yue-HK","langType":"yue","territory":"HK","revGenDate":null,"defs":0,"dftLang":0,"file":"yue_HK.xml"},{"lang":"zgh","langType":"zgh","territory":null,"revGenDate":null,"defs":6,"dftLang":0,"file":"zgh.xml"},{"lang":"zgh-MA","langType":"zgh","territory":"MA","revGenDate":null,"defs":0,"dftLang":0,"file":"zgh_MA.xml"},{"lang":"zh","langType":"zh","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"zh.xml"},{"lang":"zh-Hans","langType":"zh","territory":null,"revGenDate":null,"defs":0,"dftLang":0,"file":"zh_Hans.xml"},{"lang":"zh-Hans-CN","langType":"zh","territory":"CN","revGenDate":null,"defs":0,"dftLang":0,"file":"zh_Hans_CN.xml"},{"lang":"zh-Hans-HK","langType":"zh","territory":"HK","revGenDate":null,"defs":3,"dftLang":0,"file":"zh_Hans_HK.xml"},{"lang":"zh-Hans-MO","langType":"zh","territory":"MO","revGenDate":null,"defs":3,"dftLang":0,"file":"zh_Hans_MO.xml"},{"lang":"zh-Hans-SG","langType":"zh","territory":"SG","revGenDate":null,"defs":3,"dftLang":0,"file":"zh_Hans_SG.xml"},{"lang":"zh-Hant","langType":"zh","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"zh_Hant.xml"},{"lang":"zh-Hant-HK","langType":"zh","territory":"HK","revGenDate":null,"defs":8,"dftLang":0,"file":"zh_Hant_HK.xml"},{"lang":"zh-Hant-MO","langType":"zh","territory":"MO","revGenDate":null,"defs":1,"dftLang":0,"file":"zh_Hant_MO.xml"},{"lang":"zh-Hant-TW","langType":"zh","territory":"TW","revGenDate":null,"defs":0,"dftLang":0,"file":"zh_Hant_TW.xml"},{"lang":"zu","langType":"zu","territory":null,"revGenDate":null,"defs":9,"dftLang":0,"file":"zu.xml"},{"lang":"zu-ZA","langType":"zu","territory":"ZA","revGenDate":null,"defs":0,"dftLang":0,"file":"zu_ZA.xml"}] \ No newline at end of file diff --git a/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/LanguageCodes.kt b/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/LanguageCodes.kt index 2e28dfa8459..4fee9960c7c 100644 --- a/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/LanguageCodes.kt +++ b/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/LanguageCodes.kt @@ -1,4 +1,4 @@ -@file:Suppress("SERIALIZER_TYPE_INCOMPATIBLE") // for suppressing of @Serializable(IetfLangSerializer::class) on inheritors of IetfLang +@file:Suppress("SERIALIZER_TYPE_INCOMPATIBLE") package dev.inmo.micro_utils.language_codes @@ -10,2591 +10,3564 @@ import kotlinx.serialization.Serializable * https://datahub.io/core/language-codes/ files (base and tags) and create the whole hierarchy using it. */ @Serializable(IetfLangSerializer::class) -sealed class IetfLang { - abstract val code: String - open val parentLang: IetfLang? - get() = null - open val withoutDialect: String +sealed interface IetfLang { + val code: String + val parentLang: IetfLang? + get() = code.split("-").takeIf { it.size > 1 } ?.first() ?.let(::UnknownIetfLang) + val withoutDialect: String get() = parentLang ?.code ?: code @Serializable(IetfLangSerializer::class) - object Afar : IetfLang() { override val code: String = "aa" } + object Afar : IetfLang { override val code: String = "aa"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object Abkhazian : IetfLang() { override val code: String = "ab" } + object Abkhazian : IetfLang { override val code: String = "ab"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object Avestan : IetfLang() { override val code: String = "ae" } + object Achinese : IetfLang { override val code: String = "ace"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Acoli : IetfLang { override val code: String = "ach"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Adangme : IetfLang { override val code: String = "ada"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AdygheAdygei : IetfLang { override val code: String = "ady"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AfroAsiaticLanguages : IetfLang { override val code: String = "afa"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Afrihili : IetfLang { override val code: String = "afh"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Afrikaans : IetfLang() { - override val code: String = "af" + sealed interface Afrikaans : IetfLang { @Serializable(IetfLangSerializer::class) - object NA : Afrikaans() { override val code: String = "af-NA"; override val parentLang: Afrikaans get() = Afrikaans; } + object NA : Afrikaans { override val code: String = "af-NA"; override val parentLang: Afrikaans get() = Afrikaans; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object ZA : Afrikaans() { override val code: String = "af-ZA"; override val parentLang: Afrikaans get() = Afrikaans; } + object ZA : Afrikaans { override val code: String = "af-ZA"; override val parentLang: Afrikaans get() = Afrikaans; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Afrikaans() + companion object : Afrikaans { + override val code: String = "af" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Ainu : IetfLang { override val code: String = "ain"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Akan : IetfLang { + + @Serializable(IetfLangSerializer::class) + object GH : Akan { override val code: String = "ak-GH"; override val parentLang: Akan get() = Akan; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Akan { + override val code: String = "ak" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Akkadian : IetfLang { override val code: String = "akk"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Albanian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AL : Albanian { override val code: String = "sq-AL"; override val parentLang: Albanian get() = Albanian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MK : Albanian { override val code: String = "sq-MK"; override val parentLang: Albanian get() = Albanian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object XK : Albanian { override val code: String = "sq-XK"; override val parentLang: Albanian get() = Albanian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Albanian { + override val code: String = "sq" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Aleut : IetfLang { override val code: String = "ale"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AlgonquianLanguages : IetfLang { override val code: String = "alg"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SouthernAltai : IetfLang { override val code: String = "alt"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Amharic : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ET : Amharic { override val code: String = "am-ET"; override val parentLang: Amharic get() = Amharic; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Amharic { + override val code: String = "am" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object EnglishOldCa_4501100 : IetfLang { override val code: String = "ang"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Angika : IetfLang { override val code: String = "anp"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ApacheLanguages : IetfLang { override val code: String = "apa"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Arabic : IetfLang { + + @Serializable(IetfLangSerializer::class) + object L001 : Arabic { override val code: String = "ar-001"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AE : Arabic { override val code: String = "ar-AE"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BH : Arabic { override val code: String = "ar-BH"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DJ : Arabic { override val code: String = "ar-DJ"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DZ : Arabic { override val code: String = "ar-DZ"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object EG : Arabic { override val code: String = "ar-EG"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object EH : Arabic { override val code: String = "ar-EH"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ER : Arabic { override val code: String = "ar-ER"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IL : Arabic { override val code: String = "ar-IL"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IQ : Arabic { override val code: String = "ar-IQ"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object JO : Arabic { override val code: String = "ar-JO"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KM : Arabic { override val code: String = "ar-KM"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KW : Arabic { override val code: String = "ar-KW"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LB : Arabic { override val code: String = "ar-LB"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LY : Arabic { override val code: String = "ar-LY"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MA : Arabic { override val code: String = "ar-MA"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MR : Arabic { override val code: String = "ar-MR"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object OM : Arabic { override val code: String = "ar-OM"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PS : Arabic { override val code: String = "ar-PS"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object QA : Arabic { override val code: String = "ar-QA"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SA : Arabic { override val code: String = "ar-SA"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SD : Arabic { override val code: String = "ar-SD"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SO : Arabic { override val code: String = "ar-SO"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SS : Arabic { override val code: String = "ar-SS"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SY : Arabic { override val code: String = "ar-SY"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TD : Arabic { override val code: String = "ar-TD"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TN : Arabic { override val code: String = "ar-TN"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object YE : Arabic { override val code: String = "ar-YE"; override val parentLang: Arabic get() = Arabic; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Arabic { + override val code: String = "ar" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object OfficialAramaic700300BCEImperialAramaic700300BCE : IetfLang { override val code: String = "arc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Aragonese : IetfLang { override val code: String = "an"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Armenian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AM : Armenian { override val code: String = "hy-AM"; override val parentLang: Armenian get() = Armenian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Armenian { + override val code: String = "hy" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object MapudungunMapuche : IetfLang { override val code: String = "arn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Arapaho : IetfLang { override val code: String = "arp"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ArtificialLanguages : IetfLang { override val code: String = "art"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Arawak : IetfLang { override val code: String = "arw"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Assamese : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Assamese { override val code: String = "as-IN"; override val parentLang: Assamese get() = Assamese; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Assamese { + override val code: String = "as" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Akan : IetfLang() { - override val code: String = "ak" + sealed interface AsturianBableLeoneseAsturleonese : IetfLang { @Serializable(IetfLangSerializer::class) - object GH : Akan() { override val code: String = "ak-GH"; override val parentLang: Akan get() = Akan; } + object ES : AsturianBableLeoneseAsturleonese { override val code: String = "ast-ES"; override val parentLang: AsturianBableLeoneseAsturleonese get() = AsturianBableLeoneseAsturleonese; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Akan() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Amharic : IetfLang() { - override val code: String = "am" - - @Serializable(IetfLangSerializer::class) - object ET : Amharic() { override val code: String = "am-ET"; override val parentLang: Amharic get() = Amharic; } - - @Serializable(IetfLangSerializer::class) - companion object : Amharic() + companion object : AsturianBableLeoneseAsturleonese { + override val code: String = "ast" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object Aragonese : IetfLang() { override val code: String = "an" } + object AthapascanLanguages : IetfLang { override val code: String = "ath"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AustralianLanguages : IetfLang { override val code: String = "aus"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Avaric : IetfLang { override val code: String = "av"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Avestan : IetfLang { override val code: String = "ae"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Awadhi : IetfLang { override val code: String = "awa"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Aymara : IetfLang { override val code: String = "ay"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Arabic : IetfLang() { - override val code: String = "ar" - - @Serializable(IetfLangSerializer::class) - object L001 : Arabic() { override val code: String = "ar-001"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object AE : Arabic() { override val code: String = "ar-AE"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object BH : Arabic() { override val code: String = "ar-BH"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object DJ : Arabic() { override val code: String = "ar-DJ"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object DZ : Arabic() { override val code: String = "ar-DZ"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object EG : Arabic() { override val code: String = "ar-EG"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object EH : Arabic() { override val code: String = "ar-EH"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object ER : Arabic() { override val code: String = "ar-ER"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object IL : Arabic() { override val code: String = "ar-IL"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object IQ : Arabic() { override val code: String = "ar-IQ"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object JO : Arabic() { override val code: String = "ar-JO"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object KM : Arabic() { override val code: String = "ar-KM"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object KW : Arabic() { override val code: String = "ar-KW"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object LB : Arabic() { override val code: String = "ar-LB"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object LY : Arabic() { override val code: String = "ar-LY"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object MA : Arabic() { override val code: String = "ar-MA"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object MR : Arabic() { override val code: String = "ar-MR"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object OM : Arabic() { override val code: String = "ar-OM"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object PS : Arabic() { override val code: String = "ar-PS"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object QA : Arabic() { override val code: String = "ar-QA"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object SA : Arabic() { override val code: String = "ar-SA"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object SD : Arabic() { override val code: String = "ar-SD"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object SO : Arabic() { override val code: String = "ar-SO"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object SS : Arabic() { override val code: String = "ar-SS"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object SY : Arabic() { override val code: String = "ar-SY"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object TD : Arabic() { override val code: String = "ar-TD"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object TN : Arabic() { override val code: String = "ar-TN"; override val parentLang: Arabic get() = Arabic; } - @Serializable(IetfLangSerializer::class) - object YE : Arabic() { override val code: String = "ar-YE"; override val parentLang: Arabic get() = Arabic; } - - @Serializable(IetfLangSerializer::class) - companion object : Arabic() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Assamese : IetfLang() { - override val code: String = "as" - - @Serializable(IetfLangSerializer::class) - object IN : Assamese() { override val code: String = "as-IN"; override val parentLang: Assamese get() = Assamese; } - - @Serializable(IetfLangSerializer::class) - companion object : Assamese() - } - - @Serializable(IetfLangSerializer::class) - object Avaric : IetfLang() { override val code: String = "av" } - @Serializable(IetfLangSerializer::class) - object Aymara : IetfLang() { override val code: String = "ay" } - - @Serializable(IetfLangSerializer::class) - sealed class Azerbaijani : IetfLang() { - override val code: String = "az" + sealed interface Azerbaijani : IetfLang { @Serializable(IetfLangSerializer::class) - sealed class Cyrl : Azerbaijani() { - override val code: String = "az-Cyrl" - override val parentLang: Azerbaijani get() = Azerbaijani; + sealed interface Cyrl : Azerbaijani { @Serializable(IetfLangSerializer::class) - object AZ : Cyrl() { override val code: String = "az-Cyrl-AZ"; override val parentLang: Cyrl get() = Cyrl; } + object AZ : Cyrl { override val code: String = "az-Cyrl-AZ"; override val parentLang: Cyrl get() = Cyrl; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Cyrl() + companion object : Cyrl { + override val code: String = "az-Cyrl" + override val parentLang: Azerbaijani get() = Azerbaijani; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Latn : Azerbaijani() { - override val code: String = "az-Latn" - override val parentLang: Azerbaijani get() = Azerbaijani; + sealed interface Latn : Azerbaijani { @Serializable(IetfLangSerializer::class) - object AZ : Latn() { override val code: String = "az-Latn-AZ"; override val parentLang: Latn get() = Latn; } + object AZ : Latn { override val code: String = "az-Latn-AZ"; override val parentLang: Latn get() = Latn; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Latn() + companion object : Latn { + override val code: String = "az-Latn" + override val parentLang: Azerbaijani get() = Azerbaijani; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : Azerbaijani() + companion object : Azerbaijani { + override val code: String = "az" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object Bashkir : IetfLang() { override val code: String = "ba" } + object BandaLanguages : IetfLang { override val code: String = "bad"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BamilekeLanguages : IetfLang { override val code: String = "bai"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Bashkir : IetfLang { override val code: String = "ba"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Baluchi : IetfLang { override val code: String = "bal"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Belarusian : IetfLang() { - override val code: String = "be" + sealed interface Bambara : IetfLang { @Serializable(IetfLangSerializer::class) - object BY : Belarusian() { override val code: String = "be-BY"; override val parentLang: Belarusian get() = Belarusian; } + object ML : Bambara { override val code: String = "bm-ML"; override val parentLang: Bambara get() = Bambara; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Belarusian() + companion object : Bambara { + override val code: String = "bm" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Balinese : IetfLang { override val code: String = "ban"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Basque : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ES : Basque { override val code: String = "eu-ES"; override val parentLang: Basque get() = Basque; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Basque { + override val code: String = "eu" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Bulgarian : IetfLang() { - override val code: String = "bg" + sealed interface Basa : IetfLang { @Serializable(IetfLangSerializer::class) - object BG : Bulgarian() { override val code: String = "bg-BG"; override val parentLang: Bulgarian get() = Bulgarian; } + object CM : Basa { override val code: String = "bas-CM"; override val parentLang: Basa get() = Basa; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Bulgarian() + companion object : Basa { + override val code: String = "bas" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object BihariLanguages : IetfLang() { override val code: String = "bh" } + object BalticLanguages : IetfLang { override val code: String = "bat"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object Bislama : IetfLang() { override val code: String = "bi" } + object BejaBedawiyet : IetfLang { override val code: String = "bej"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Bambara : IetfLang() { - override val code: String = "bm" + sealed interface Belarusian : IetfLang { @Serializable(IetfLangSerializer::class) - object ML : Bambara() { override val code: String = "bm-ML"; override val parentLang: Bambara get() = Bambara; } + object BY : Belarusian { override val code: String = "be-BY"; override val parentLang: Belarusian get() = Belarusian; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Bambara() + companion object : Belarusian { + override val code: String = "be" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Bengali : IetfLang() { - override val code: String = "bn" + sealed interface Bemba : IetfLang { @Serializable(IetfLangSerializer::class) - object BD : Bengali() { override val code: String = "bn-BD"; override val parentLang: Bengali get() = Bengali; } - @Serializable(IetfLangSerializer::class) - object IN : Bengali() { override val code: String = "bn-IN"; override val parentLang: Bengali get() = Bengali; } + object ZM : Bemba { override val code: String = "bem-ZM"; override val parentLang: Bemba get() = Bemba; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Bengali() + companion object : Bemba { + override val code: String = "bem" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Tibetan : IetfLang() { - override val code: String = "bo" + sealed interface Bengali : IetfLang { @Serializable(IetfLangSerializer::class) - object CN : Tibetan() { override val code: String = "bo-CN"; override val parentLang: Tibetan get() = Tibetan; } + object BD : Bengali { override val code: String = "bn-BD"; override val parentLang: Bengali get() = Bengali; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object IN : Tibetan() { override val code: String = "bo-IN"; override val parentLang: Tibetan get() = Tibetan; } + object IN : Bengali { override val code: String = "bn-IN"; override val parentLang: Bengali get() = Bengali; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Tibetan() + companion object : Bengali { + override val code: String = "bn" + override fun toString() = code + } } + @Serializable(IetfLangSerializer::class) + object BerberLanguages : IetfLang { override val code: String = "ber"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Bhojpuri : IetfLang { override val code: String = "bho"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BihariLanguages : IetfLang { override val code: String = "bh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Bikol : IetfLang { override val code: String = "bik"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BiniEdo : IetfLang { override val code: String = "bin"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Bislama : IetfLang { override val code: String = "bi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Siksika : IetfLang { override val code: String = "bla"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BantuOther : IetfLang { override val code: String = "bnt"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Breton : IetfLang() { - override val code: String = "br" - - @Serializable(IetfLangSerializer::class) - object FR : Breton() { override val code: String = "br-FR"; override val parentLang: Breton get() = Breton; } - - @Serializable(IetfLangSerializer::class) - companion object : Breton() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Bosnian : IetfLang() { - override val code: String = "bs" + sealed interface Bosnian : IetfLang { @Serializable(IetfLangSerializer::class) - sealed class Cyrl : Bosnian() { - override val code: String = "bs-Cyrl" - override val parentLang: Bosnian get() = Bosnian; + sealed interface Cyrl : Bosnian { @Serializable(IetfLangSerializer::class) - object BA : Cyrl() { override val code: String = "bs-Cyrl-BA"; override val parentLang: Cyrl get() = Cyrl; } + object BA : Cyrl { override val code: String = "bs-Cyrl-BA"; override val parentLang: Cyrl get() = Cyrl; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Cyrl() + companion object : Cyrl { + override val code: String = "bs-Cyrl" + override val parentLang: Bosnian get() = Bosnian; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Latn : Bosnian() { - override val code: String = "bs-Latn" - override val parentLang: Bosnian get() = Bosnian; + sealed interface Latn : Bosnian { @Serializable(IetfLangSerializer::class) - object BA : Latn() { override val code: String = "bs-Latn-BA"; override val parentLang: Latn get() = Latn; } + object BA : Latn { override val code: String = "bs-Latn-BA"; override val parentLang: Latn get() = Latn; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Latn() + companion object : Latn { + override val code: String = "bs-Latn" + override val parentLang: Bosnian get() = Bosnian; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : Bosnian() + companion object : Bosnian { + override val code: String = "bs" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Braj : IetfLang { override val code: String = "bra"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Breton : IetfLang { + + @Serializable(IetfLangSerializer::class) + object FR : Breton { override val code: String = "br-FR"; override val parentLang: Breton get() = Breton; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Breton { + override val code: String = "br" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object BatakLanguages : IetfLang { override val code: String = "btk"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Buriat : IetfLang { override val code: String = "bua"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Buginese : IetfLang { override val code: String = "bug"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Bulgarian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object BG : Bulgarian { override val code: String = "bg-BG"; override val parentLang: Bulgarian get() = Bulgarian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Bulgarian { + override val code: String = "bg" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class CatalanValencian : IetfLang() { - override val code: String = "ca" + sealed interface Burmese : IetfLang { @Serializable(IetfLangSerializer::class) - object AD : CatalanValencian() { override val code: String = "ca-AD"; override val parentLang: CatalanValencian get() = CatalanValencian; } + object MM : Burmese { override val code: String = "my-MM"; override val parentLang: Burmese get() = Burmese; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class ES : CatalanValencian() { - override val code: String = "ca-ES" - override val parentLang: CatalanValencian get() = CatalanValencian; + companion object : Burmese { + override val code: String = "my" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object BlinBilin : IetfLang { override val code: String = "byn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Caddo : IetfLang { override val code: String = "cad"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CentralAmericanIndianLanguages : IetfLang { override val code: String = "cai"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GalibiCarib : IetfLang { override val code: String = "car"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface CatalanValencian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AD : CatalanValencian { override val code: String = "ca-AD"; override val parentLang: CatalanValencian get() = CatalanValencian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface ES : CatalanValencian { @Serializable(IetfLangSerializer::class) - object VALENCIA : ES() { override val code: String = "ca-ES-VALENCIA"; override val parentLang: ES get() = ES; } + object VALENCIA : ES { override val code: String = "ca-ES-VALENCIA"; override val parentLang: ES get() = ES; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : ES() + companion object : ES { + override val code: String = "ca-ES" + override val parentLang: CatalanValencian get() = CatalanValencian; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object FR : CatalanValencian() { override val code: String = "ca-FR"; override val parentLang: CatalanValencian get() = CatalanValencian; } + object FR : CatalanValencian { override val code: String = "ca-FR"; override val parentLang: CatalanValencian get() = CatalanValencian; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object IT : CatalanValencian() { override val code: String = "ca-IT"; override val parentLang: CatalanValencian get() = CatalanValencian; } + object IT : CatalanValencian { override val code: String = "ca-IT"; override val parentLang: CatalanValencian get() = CatalanValencian; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : CatalanValencian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Chechen : IetfLang() { - override val code: String = "ce" - - @Serializable(IetfLangSerializer::class) - object RU : Chechen() { override val code: String = "ce-RU"; override val parentLang: Chechen get() = Chechen; } - - @Serializable(IetfLangSerializer::class) - companion object : Chechen() - } - - @Serializable(IetfLangSerializer::class) - object Chamorro : IetfLang() { override val code: String = "ch" } - @Serializable(IetfLangSerializer::class) - object Corsican : IetfLang() { override val code: String = "co" } - @Serializable(IetfLangSerializer::class) - object Cree : IetfLang() { override val code: String = "cr" } - - @Serializable(IetfLangSerializer::class) - sealed class Czech : IetfLang() { - override val code: String = "cs" - - @Serializable(IetfLangSerializer::class) - object CZ : Czech() { override val code: String = "cs-CZ"; override val parentLang: Czech get() = Czech; } - - @Serializable(IetfLangSerializer::class) - companion object : Czech() - } - - - @Serializable(IetfLangSerializer::class) - sealed class ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic : IetfLang() { - override val code: String = "cu" - - @Serializable(IetfLangSerializer::class) - object RU : ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic() { override val code: String = "cu-RU"; override val parentLang: ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic get() = ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic; } - - @Serializable(IetfLangSerializer::class) - companion object : ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic() - } - - @Serializable(IetfLangSerializer::class) - object Chuvash : IetfLang() { override val code: String = "cv" } - - @Serializable(IetfLangSerializer::class) - sealed class Welsh : IetfLang() { - override val code: String = "cy" - - @Serializable(IetfLangSerializer::class) - object GB : Welsh() { override val code: String = "cy-GB"; override val parentLang: Welsh get() = Welsh; } - - @Serializable(IetfLangSerializer::class) - companion object : Welsh() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Danish : IetfLang() { - override val code: String = "da" - - @Serializable(IetfLangSerializer::class) - object DK : Danish() { override val code: String = "da-DK"; override val parentLang: Danish get() = Danish; } - @Serializable(IetfLangSerializer::class) - object GL : Danish() { override val code: String = "da-GL"; override val parentLang: Danish get() = Danish; } - - @Serializable(IetfLangSerializer::class) - companion object : Danish() - } - - - @Serializable(IetfLangSerializer::class) - sealed class German : IetfLang() { - override val code: String = "de" - - @Serializable(IetfLangSerializer::class) - object AT : German() { override val code: String = "de-AT"; override val parentLang: German get() = German; } - @Serializable(IetfLangSerializer::class) - object BE : German() { override val code: String = "de-BE"; override val parentLang: German get() = German; } - @Serializable(IetfLangSerializer::class) - object CH : German() { override val code: String = "de-CH"; override val parentLang: German get() = German; } - @Serializable(IetfLangSerializer::class) - object DE : German() { override val code: String = "de-DE"; override val parentLang: German get() = German; } - @Serializable(IetfLangSerializer::class) - object IT : German() { override val code: String = "de-IT"; override val parentLang: German get() = German; } - @Serializable(IetfLangSerializer::class) - object LI : German() { override val code: String = "de-LI"; override val parentLang: German get() = German; } - @Serializable(IetfLangSerializer::class) - object LU : German() { override val code: String = "de-LU"; override val parentLang: German get() = German; } - - @Serializable(IetfLangSerializer::class) - companion object : German() - } - - @Serializable(IetfLangSerializer::class) - object DivehiDhivehiMaldivian : IetfLang() { override val code: String = "dv" } - - @Serializable(IetfLangSerializer::class) - sealed class Dzongkha : IetfLang() { - override val code: String = "dz" - - @Serializable(IetfLangSerializer::class) - object BT : Dzongkha() { override val code: String = "dz-BT"; override val parentLang: Dzongkha get() = Dzongkha; } - - @Serializable(IetfLangSerializer::class) - companion object : Dzongkha() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Ewe : IetfLang() { - override val code: String = "ee" - - @Serializable(IetfLangSerializer::class) - object GH : Ewe() { override val code: String = "ee-GH"; override val parentLang: Ewe get() = Ewe; } - @Serializable(IetfLangSerializer::class) - object TG : Ewe() { override val code: String = "ee-TG"; override val parentLang: Ewe get() = Ewe; } - - @Serializable(IetfLangSerializer::class) - companion object : Ewe() - } - - - @Serializable(IetfLangSerializer::class) - sealed class GreekModern1453 : IetfLang() { - override val code: String = "el" - - @Serializable(IetfLangSerializer::class) - object CY : GreekModern1453() { override val code: String = "el-CY"; override val parentLang: GreekModern1453 get() = GreekModern1453; } - @Serializable(IetfLangSerializer::class) - object GR : GreekModern1453() { override val code: String = "el-GR"; override val parentLang: GreekModern1453 get() = GreekModern1453; } - - @Serializable(IetfLangSerializer::class) - companion object : GreekModern1453() - } - - - @Serializable(IetfLangSerializer::class) - sealed class English : IetfLang() { - override val code: String = "en" - - @Serializable(IetfLangSerializer::class) - object L001 : English() { override val code: String = "en-001"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object L150 : English() { override val code: String = "en-150"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object AE : English() { override val code: String = "en-AE"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object AG : English() { override val code: String = "en-AG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object AI : English() { override val code: String = "en-AI"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object AS : English() { override val code: String = "en-AS"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object AT : English() { override val code: String = "en-AT"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object AU : English() { override val code: String = "en-AU"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object BB : English() { override val code: String = "en-BB"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object BE : English() { override val code: String = "en-BE"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object BI : English() { override val code: String = "en-BI"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object BM : English() { override val code: String = "en-BM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object BS : English() { override val code: String = "en-BS"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object BW : English() { override val code: String = "en-BW"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object BZ : English() { override val code: String = "en-BZ"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object CA : English() { override val code: String = "en-CA"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object CC : English() { override val code: String = "en-CC"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object CH : English() { override val code: String = "en-CH"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object CK : English() { override val code: String = "en-CK"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object CM : English() { override val code: String = "en-CM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object CX : English() { override val code: String = "en-CX"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object CY : English() { override val code: String = "en-CY"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object DE : English() { override val code: String = "en-DE"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object DG : English() { override val code: String = "en-DG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object DK : English() { override val code: String = "en-DK"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object DM : English() { override val code: String = "en-DM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object ER : English() { override val code: String = "en-ER"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object FI : English() { override val code: String = "en-FI"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object FJ : English() { override val code: String = "en-FJ"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object FK : English() { override val code: String = "en-FK"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object FM : English() { override val code: String = "en-FM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GB : English() { override val code: String = "en-GB"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GD : English() { override val code: String = "en-GD"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GG : English() { override val code: String = "en-GG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GH : English() { override val code: String = "en-GH"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GI : English() { override val code: String = "en-GI"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GM : English() { override val code: String = "en-GM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GU : English() { override val code: String = "en-GU"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object GY : English() { override val code: String = "en-GY"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object HK : English() { override val code: String = "en-HK"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object IE : English() { override val code: String = "en-IE"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object IL : English() { override val code: String = "en-IL"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object IM : English() { override val code: String = "en-IM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object IN : English() { override val code: String = "en-IN"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object IO : English() { override val code: String = "en-IO"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object JE : English() { override val code: String = "en-JE"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object JM : English() { override val code: String = "en-JM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object KE : English() { override val code: String = "en-KE"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object KI : English() { override val code: String = "en-KI"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object KN : English() { override val code: String = "en-KN"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object KY : English() { override val code: String = "en-KY"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object LC : English() { override val code: String = "en-LC"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object LR : English() { override val code: String = "en-LR"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object LS : English() { override val code: String = "en-LS"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MG : English() { override val code: String = "en-MG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MH : English() { override val code: String = "en-MH"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MO : English() { override val code: String = "en-MO"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MP : English() { override val code: String = "en-MP"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MS : English() { override val code: String = "en-MS"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MT : English() { override val code: String = "en-MT"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MU : English() { override val code: String = "en-MU"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MW : English() { override val code: String = "en-MW"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object MY : English() { override val code: String = "en-MY"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object NA : English() { override val code: String = "en-NA"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object NF : English() { override val code: String = "en-NF"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object NG : English() { override val code: String = "en-NG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object NL : English() { override val code: String = "en-NL"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object NR : English() { override val code: String = "en-NR"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object NU : English() { override val code: String = "en-NU"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object NZ : English() { override val code: String = "en-NZ"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object PG : English() { override val code: String = "en-PG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object PH : English() { override val code: String = "en-PH"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object PK : English() { override val code: String = "en-PK"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object PN : English() { override val code: String = "en-PN"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object PR : English() { override val code: String = "en-PR"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object PW : English() { override val code: String = "en-PW"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object RW : English() { override val code: String = "en-RW"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SB : English() { override val code: String = "en-SB"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SC : English() { override val code: String = "en-SC"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SD : English() { override val code: String = "en-SD"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SE : English() { override val code: String = "en-SE"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SG : English() { override val code: String = "en-SG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SH : English() { override val code: String = "en-SH"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SI : English() { override val code: String = "en-SI"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SL : English() { override val code: String = "en-SL"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SS : English() { override val code: String = "en-SS"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SX : English() { override val code: String = "en-SX"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object SZ : English() { override val code: String = "en-SZ"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object TC : English() { override val code: String = "en-TC"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object TK : English() { override val code: String = "en-TK"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object TO : English() { override val code: String = "en-TO"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object TT : English() { override val code: String = "en-TT"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object TV : English() { override val code: String = "en-TV"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object TZ : English() { override val code: String = "en-TZ"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object UG : English() { override val code: String = "en-UG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object UM : English() { override val code: String = "en-UM"; override val parentLang: English get() = English; } - - @Serializable(IetfLangSerializer::class) - sealed class US : English() { - override val code: String = "en-US" - override val parentLang: English get() = English; - - @Serializable(IetfLangSerializer::class) - object POSIX : US() { override val code: String = "en-US-POSIX"; override val parentLang: US get() = US; } - - @Serializable(IetfLangSerializer::class) - companion object : US() + companion object : CatalanValencian { + override val code: String = "ca" + override fun toString() = code } - - @Serializable(IetfLangSerializer::class) - object VC : English() { override val code: String = "en-VC"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object VG : English() { override val code: String = "en-VG"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object VI : English() { override val code: String = "en-VI"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object VU : English() { override val code: String = "en-VU"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object WS : English() { override val code: String = "en-WS"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object ZA : English() { override val code: String = "en-ZA"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object ZM : English() { override val code: String = "en-ZM"; override val parentLang: English get() = English; } - @Serializable(IetfLangSerializer::class) - object ZW : English() { override val code: String = "en-ZW"; override val parentLang: English get() = English; } - - @Serializable(IetfLangSerializer::class) - companion object : English() } + @Serializable(IetfLangSerializer::class) + object CaucasianLanguages : IetfLang { override val code: String = "cau"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Cebuano : IetfLang { override val code: String = "ceb"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CelticLanguages : IetfLang { override val code: String = "cel"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Chamorro : IetfLang { override val code: String = "ch"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Chibcha : IetfLang { override val code: String = "chb"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Esperanto : IetfLang() { - override val code: String = "eo" + sealed interface Chechen : IetfLang { @Serializable(IetfLangSerializer::class) - object L001 : Esperanto() { override val code: String = "eo-001"; override val parentLang: Esperanto get() = Esperanto; } + object RU : Chechen { override val code: String = "ce-RU"; override val parentLang: Chechen get() = Chechen; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Esperanto() + companion object : Chechen { + override val code: String = "ce" + override fun toString() = code + } } + @Serializable(IetfLangSerializer::class) + object Chagatai : IetfLang { override val code: String = "chg"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class SpanishCastilian : IetfLang() { - override val code: String = "es" - - @Serializable(IetfLangSerializer::class) - object L419 : SpanishCastilian() { override val code: String = "es-419"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object AR : SpanishCastilian() { override val code: String = "es-AR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object BO : SpanishCastilian() { override val code: String = "es-BO"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object BR : SpanishCastilian() { override val code: String = "es-BR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object BZ : SpanishCastilian() { override val code: String = "es-BZ"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object CL : SpanishCastilian() { override val code: String = "es-CL"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object CO : SpanishCastilian() { override val code: String = "es-CO"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object CR : SpanishCastilian() { override val code: String = "es-CR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object CU : SpanishCastilian() { override val code: String = "es-CU"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object DO : SpanishCastilian() { override val code: String = "es-DO"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object EA : SpanishCastilian() { override val code: String = "es-EA"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object EC : SpanishCastilian() { override val code: String = "es-EC"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object ES : SpanishCastilian() { override val code: String = "es-ES"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object GQ : SpanishCastilian() { override val code: String = "es-GQ"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object GT : SpanishCastilian() { override val code: String = "es-GT"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object HN : SpanishCastilian() { override val code: String = "es-HN"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object IC : SpanishCastilian() { override val code: String = "es-IC"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object MX : SpanishCastilian() { override val code: String = "es-MX"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object NI : SpanishCastilian() { override val code: String = "es-NI"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object PA : SpanishCastilian() { override val code: String = "es-PA"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object PE : SpanishCastilian() { override val code: String = "es-PE"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object PH : SpanishCastilian() { override val code: String = "es-PH"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object PR : SpanishCastilian() { override val code: String = "es-PR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object PY : SpanishCastilian() { override val code: String = "es-PY"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object SV : SpanishCastilian() { override val code: String = "es-SV"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object US : SpanishCastilian() { override val code: String = "es-US"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object UY : SpanishCastilian() { override val code: String = "es-UY"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - @Serializable(IetfLangSerializer::class) - object VE : SpanishCastilian() { override val code: String = "es-VE"; override val parentLang: SpanishCastilian get() = SpanishCastilian; } - - @Serializable(IetfLangSerializer::class) - companion object : SpanishCastilian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Estonian : IetfLang() { - override val code: String = "et" - - @Serializable(IetfLangSerializer::class) - object EE : Estonian() { override val code: String = "et-EE"; override val parentLang: Estonian get() = Estonian; } - - @Serializable(IetfLangSerializer::class) - companion object : Estonian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Basque : IetfLang() { - override val code: String = "eu" - - @Serializable(IetfLangSerializer::class) - object ES : Basque() { override val code: String = "eu-ES"; override val parentLang: Basque get() = Basque; } - - @Serializable(IetfLangSerializer::class) - companion object : Basque() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Persian : IetfLang() { - override val code: String = "fa" - - @Serializable(IetfLangSerializer::class) - object AF : Persian() { override val code: String = "fa-AF"; override val parentLang: Persian get() = Persian; } - @Serializable(IetfLangSerializer::class) - object IR : Persian() { override val code: String = "fa-IR"; override val parentLang: Persian get() = Persian; } - - @Serializable(IetfLangSerializer::class) - companion object : Persian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Fulah : IetfLang() { - override val code: String = "ff" + sealed interface Chinese : IetfLang { @Serializable(IetfLangSerializer::class) - sealed class Adlm : Fulah() { - override val code: String = "ff-Adlm" - override val parentLang: Fulah get() = Fulah; + sealed interface Hans : Chinese { @Serializable(IetfLangSerializer::class) - object BF : Adlm() { override val code: String = "ff-Adlm-BF"; override val parentLang: Adlm get() = Adlm; } + object CN : Hans { override val code: String = "zh-Hans-CN"; override val parentLang: Hans get() = Hans; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object CM : Adlm() { override val code: String = "ff-Adlm-CM"; override val parentLang: Adlm get() = Adlm; } + object HK : Hans { override val code: String = "zh-Hans-HK"; override val parentLang: Hans get() = Hans; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object GH : Adlm() { override val code: String = "ff-Adlm-GH"; override val parentLang: Adlm get() = Adlm; } + object MO : Hans { override val code: String = "zh-Hans-MO"; override val parentLang: Hans get() = Hans; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object GM : Adlm() { override val code: String = "ff-Adlm-GM"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object GN : Adlm() { override val code: String = "ff-Adlm-GN"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object GW : Adlm() { override val code: String = "ff-Adlm-GW"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object LR : Adlm() { override val code: String = "ff-Adlm-LR"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object MR : Adlm() { override val code: String = "ff-Adlm-MR"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object NE : Adlm() { override val code: String = "ff-Adlm-NE"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object NG : Adlm() { override val code: String = "ff-Adlm-NG"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object SL : Adlm() { override val code: String = "ff-Adlm-SL"; override val parentLang: Adlm get() = Adlm; } - @Serializable(IetfLangSerializer::class) - object SN : Adlm() { override val code: String = "ff-Adlm-SN"; override val parentLang: Adlm get() = Adlm; } + object SG : Hans { override val code: String = "zh-Hans-SG"; override val parentLang: Hans get() = Hans; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Adlm() + companion object : Hans { + override val code: String = "zh-Hans" + override val parentLang: Chinese get() = Chinese; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Latn : Fulah() { - override val code: String = "ff-Latn" - override val parentLang: Fulah get() = Fulah; + sealed interface Hant : Chinese { @Serializable(IetfLangSerializer::class) - object BF : Latn() { override val code: String = "ff-Latn-BF"; override val parentLang: Latn get() = Latn; } + object HK : Hant { override val code: String = "zh-Hant-HK"; override val parentLang: Hant get() = Hant; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object CM : Latn() { override val code: String = "ff-Latn-CM"; override val parentLang: Latn get() = Latn; } + object MO : Hant { override val code: String = "zh-Hant-MO"; override val parentLang: Hant get() = Hant; override fun toString() = code } @Serializable(IetfLangSerializer::class) - object GH : Latn() { override val code: String = "ff-Latn-GH"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object GM : Latn() { override val code: String = "ff-Latn-GM"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object GN : Latn() { override val code: String = "ff-Latn-GN"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object GW : Latn() { override val code: String = "ff-Latn-GW"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object LR : Latn() { override val code: String = "ff-Latn-LR"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object MR : Latn() { override val code: String = "ff-Latn-MR"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object NE : Latn() { override val code: String = "ff-Latn-NE"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object NG : Latn() { override val code: String = "ff-Latn-NG"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object SL : Latn() { override val code: String = "ff-Latn-SL"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object SN : Latn() { override val code: String = "ff-Latn-SN"; override val parentLang: Latn get() = Latn; } + object TW : Hant { override val code: String = "zh-Hant-TW"; override val parentLang: Hant get() = Hant; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Latn() + companion object : Hant { + override val code: String = "zh-Hant" + override val parentLang: Chinese get() = Chinese; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : Fulah() + companion object : Chinese { + override val code: String = "zh" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Chuukese : IetfLang { override val code: String = "chk"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Mari : IetfLang { override val code: String = "chm"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ChinookJargon : IetfLang { override val code: String = "chn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Choctaw : IetfLang { override val code: String = "cho"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ChipewyanDeneSuline : IetfLang { override val code: String = "chp"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Cherokee : IetfLang { + + @Serializable(IetfLangSerializer::class) + object US : Cherokee { override val code: String = "chr-US"; override val parentLang: Cherokee get() = Cherokee; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Cherokee { + override val code: String = "chr" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Finnish : IetfLang() { - override val code: String = "fi" + sealed interface ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic : IetfLang { @Serializable(IetfLangSerializer::class) - object FI : Finnish() { override val code: String = "fi-FI"; override val parentLang: Finnish get() = Finnish; } + object RU : ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic { override val code: String = "cu-RU"; override val parentLang: ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic get() = ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Finnish() + companion object : ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic { + override val code: String = "cu" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object Fijian : IetfLang() { override val code: String = "fj" } + object Chuvash : IetfLang { override val code: String = "cv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Cheyenne : IetfLang { override val code: String = "chy"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ChamicLanguages : IetfLang { override val code: String = "cmc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Coptic : IetfLang { override val code: String = "cop"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Faroese : IetfLang() { - override val code: String = "fo" + sealed interface Cornish : IetfLang { @Serializable(IetfLangSerializer::class) - object DK : Faroese() { override val code: String = "fo-DK"; override val parentLang: Faroese get() = Faroese; } - @Serializable(IetfLangSerializer::class) - object FO : Faroese() { override val code: String = "fo-FO"; override val parentLang: Faroese get() = Faroese; } + object GB : Cornish { override val code: String = "kw-GB"; override val parentLang: Cornish get() = Cornish; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Faroese() + companion object : Cornish { + override val code: String = "kw" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Corsican : IetfLang { override val code: String = "co"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CreolesAndPidginsEnglishBased : IetfLang { override val code: String = "cpe"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CreolesAndPidginsFrenchbased : IetfLang { override val code: String = "cpf"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CreolesAndPidginsPortuguesebased : IetfLang { override val code: String = "cpp"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Cree : IetfLang { override val code: String = "cr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CrimeanTatarCrimeanTurkish : IetfLang { override val code: String = "crh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CreolesAndPidgins : IetfLang { override val code: String = "crp"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kashubian : IetfLang { override val code: String = "csb"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CushiticLanguages : IetfLang { override val code: String = "cus"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Czech : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CZ : Czech { override val code: String = "cs-CZ"; override val parentLang: Czech get() = Czech; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Czech { + override val code: String = "cs" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Dakota : IetfLang { override val code: String = "dak"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Danish : IetfLang { + + @Serializable(IetfLangSerializer::class) + object DK : Danish { override val code: String = "da-DK"; override val parentLang: Danish get() = Danish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GL : Danish { override val code: String = "da-GL"; override val parentLang: Danish get() = Danish; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Danish { + override val code: String = "da" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Dargwa : IetfLang { override val code: String = "dar"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LandDayakLanguages : IetfLang { override val code: String = "day"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Delaware : IetfLang { override val code: String = "del"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SlaveAthapascan : IetfLang { override val code: String = "den"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Dogrib : IetfLang { override val code: String = "dgr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Dinka : IetfLang { override val code: String = "din"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DivehiDhivehiMaldivian : IetfLang { override val code: String = "dv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Dogri : IetfLang { override val code: String = "doi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DravidianLanguages : IetfLang { override val code: String = "dra"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface LowerSorbian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object DE : LowerSorbian { override val code: String = "dsb-DE"; override val parentLang: LowerSorbian get() = LowerSorbian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : LowerSorbian { + override val code: String = "dsb" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class French : IetfLang() { - override val code: String = "fr" + sealed interface Duala : IetfLang { @Serializable(IetfLangSerializer::class) - object BE : French() { override val code: String = "fr-BE"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object BF : French() { override val code: String = "fr-BF"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object BI : French() { override val code: String = "fr-BI"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object BJ : French() { override val code: String = "fr-BJ"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object BL : French() { override val code: String = "fr-BL"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object CA : French() { override val code: String = "fr-CA"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object CD : French() { override val code: String = "fr-CD"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object CF : French() { override val code: String = "fr-CF"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object CG : French() { override val code: String = "fr-CG"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object CH : French() { override val code: String = "fr-CH"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object CI : French() { override val code: String = "fr-CI"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object CM : French() { override val code: String = "fr-CM"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object DJ : French() { override val code: String = "fr-DJ"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object DZ : French() { override val code: String = "fr-DZ"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object FR : French() { override val code: String = "fr-FR"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object GA : French() { override val code: String = "fr-GA"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object GF : French() { override val code: String = "fr-GF"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object GN : French() { override val code: String = "fr-GN"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object GP : French() { override val code: String = "fr-GP"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object GQ : French() { override val code: String = "fr-GQ"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object HT : French() { override val code: String = "fr-HT"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object KM : French() { override val code: String = "fr-KM"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object LU : French() { override val code: String = "fr-LU"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object MA : French() { override val code: String = "fr-MA"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object MC : French() { override val code: String = "fr-MC"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object MF : French() { override val code: String = "fr-MF"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object MG : French() { override val code: String = "fr-MG"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object ML : French() { override val code: String = "fr-ML"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object MQ : French() { override val code: String = "fr-MQ"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object MR : French() { override val code: String = "fr-MR"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object MU : French() { override val code: String = "fr-MU"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object NC : French() { override val code: String = "fr-NC"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object NE : French() { override val code: String = "fr-NE"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object PF : French() { override val code: String = "fr-PF"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object PM : French() { override val code: String = "fr-PM"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object RE : French() { override val code: String = "fr-RE"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object RW : French() { override val code: String = "fr-RW"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object SC : French() { override val code: String = "fr-SC"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object SN : French() { override val code: String = "fr-SN"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object SY : French() { override val code: String = "fr-SY"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object TD : French() { override val code: String = "fr-TD"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object TG : French() { override val code: String = "fr-TG"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object TN : French() { override val code: String = "fr-TN"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object VU : French() { override val code: String = "fr-VU"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object WF : French() { override val code: String = "fr-WF"; override val parentLang: French get() = French; } - @Serializable(IetfLangSerializer::class) - object YT : French() { override val code: String = "fr-YT"; override val parentLang: French get() = French; } + object CM : Duala { override val code: String = "dua-CM"; override val parentLang: Duala get() = Duala; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : French() - } - - - @Serializable(IetfLangSerializer::class) - sealed class WesternFrisian : IetfLang() { - override val code: String = "fy" - - @Serializable(IetfLangSerializer::class) - object NL : WesternFrisian() { override val code: String = "fy-NL"; override val parentLang: WesternFrisian get() = WesternFrisian; } - - @Serializable(IetfLangSerializer::class) - companion object : WesternFrisian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Irish : IetfLang() { - override val code: String = "ga" - - @Serializable(IetfLangSerializer::class) - object GB : Irish() { override val code: String = "ga-GB"; override val parentLang: Irish get() = Irish; } - @Serializable(IetfLangSerializer::class) - object IE : Irish() { override val code: String = "ga-IE"; override val parentLang: Irish get() = Irish; } - - @Serializable(IetfLangSerializer::class) - companion object : Irish() - } - - - @Serializable(IetfLangSerializer::class) - sealed class GaelicScottishGaelic : IetfLang() { - override val code: String = "gd" - - @Serializable(IetfLangSerializer::class) - object GB : GaelicScottishGaelic() { override val code: String = "gd-GB"; override val parentLang: GaelicScottishGaelic get() = GaelicScottishGaelic; } - - @Serializable(IetfLangSerializer::class) - companion object : GaelicScottishGaelic() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Galician : IetfLang() { - override val code: String = "gl" - - @Serializable(IetfLangSerializer::class) - object ES : Galician() { override val code: String = "gl-ES"; override val parentLang: Galician get() = Galician; } - - @Serializable(IetfLangSerializer::class) - companion object : Galician() + companion object : Duala { + override val code: String = "dua" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object Guarani : IetfLang() { override val code: String = "gn" } + object DutchMiddleCa_10501350 : IetfLang { override val code: String = "dum"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Gujarati : IetfLang() { - override val code: String = "gu" + sealed interface DutchFlemish : IetfLang { @Serializable(IetfLangSerializer::class) - object IN : Gujarati() { override val code: String = "gu-IN"; override val parentLang: Gujarati get() = Gujarati; } + object AW : DutchFlemish { override val code: String = "nl-AW"; override val parentLang: DutchFlemish get() = DutchFlemish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BE : DutchFlemish { override val code: String = "nl-BE"; override val parentLang: DutchFlemish get() = DutchFlemish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BQ : DutchFlemish { override val code: String = "nl-BQ"; override val parentLang: DutchFlemish get() = DutchFlemish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CW : DutchFlemish { override val code: String = "nl-CW"; override val parentLang: DutchFlemish get() = DutchFlemish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NL : DutchFlemish { override val code: String = "nl-NL"; override val parentLang: DutchFlemish get() = DutchFlemish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SR : DutchFlemish { override val code: String = "nl-SR"; override val parentLang: DutchFlemish get() = DutchFlemish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SX : DutchFlemish { override val code: String = "nl-SX"; override val parentLang: DutchFlemish get() = DutchFlemish; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Gujarati() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Manx : IetfLang() { - override val code: String = "gv" - - @Serializable(IetfLangSerializer::class) - object IM : Manx() { override val code: String = "gv-IM"; override val parentLang: Manx get() = Manx; } - - @Serializable(IetfLangSerializer::class) - companion object : Manx() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Hausa : IetfLang() { - override val code: String = "ha" - - @Serializable(IetfLangSerializer::class) - object GH : Hausa() { override val code: String = "ha-GH"; override val parentLang: Hausa get() = Hausa; } - @Serializable(IetfLangSerializer::class) - object NE : Hausa() { override val code: String = "ha-NE"; override val parentLang: Hausa get() = Hausa; } - @Serializable(IetfLangSerializer::class) - object NG : Hausa() { override val code: String = "ha-NG"; override val parentLang: Hausa get() = Hausa; } - - @Serializable(IetfLangSerializer::class) - companion object : Hausa() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Hebrew : IetfLang() { - override val code: String = "he" - - @Serializable(IetfLangSerializer::class) - object IL : Hebrew() { override val code: String = "he-IL"; override val parentLang: Hebrew get() = Hebrew; } - - @Serializable(IetfLangSerializer::class) - companion object : Hebrew() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Hindi : IetfLang() { - override val code: String = "hi" - - @Serializable(IetfLangSerializer::class) - object IN : Hindi() { override val code: String = "hi-IN"; override val parentLang: Hindi get() = Hindi; } - - @Serializable(IetfLangSerializer::class) - companion object : Hindi() + companion object : DutchFlemish { + override val code: String = "nl" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object HiriMotu : IetfLang() { override val code: String = "ho" } + object Dyula : IetfLang { override val code: String = "dyu"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Croatian : IetfLang() { - override val code: String = "hr" + sealed interface Dzongkha : IetfLang { @Serializable(IetfLangSerializer::class) - object BA : Croatian() { override val code: String = "hr-BA"; override val parentLang: Croatian get() = Croatian; } - @Serializable(IetfLangSerializer::class) - object HR : Croatian() { override val code: String = "hr-HR"; override val parentLang: Croatian get() = Croatian; } + object BT : Dzongkha { override val code: String = "dz-BT"; override val parentLang: Dzongkha get() = Dzongkha; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Croatian() + companion object : Dzongkha { + override val code: String = "dz" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - object HaitianHaitianCreole : IetfLang() { override val code: String = "ht" } + object Efik : IetfLang { override val code: String = "efi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object EgyptianAncient : IetfLang { override val code: String = "egy"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Ekajuk : IetfLang { override val code: String = "eka"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Elamite : IetfLang { override val code: String = "elx"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - sealed class Hungarian : IetfLang() { - override val code: String = "hu" + sealed interface English : IetfLang { @Serializable(IetfLangSerializer::class) - object HU : Hungarian() { override val code: String = "hu-HU"; override val parentLang: Hungarian get() = Hungarian; } + object L001 : English { override val code: String = "en-001"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object L150 : English { override val code: String = "en-150"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AG : English { override val code: String = "en-AG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AI : English { override val code: String = "en-AI"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AS : English { override val code: String = "en-AS"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AT : English { override val code: String = "en-AT"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AU : English { override val code: String = "en-AU"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BB : English { override val code: String = "en-BB"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BE : English { override val code: String = "en-BE"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BI : English { override val code: String = "en-BI"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BM : English { override val code: String = "en-BM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BS : English { override val code: String = "en-BS"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BW : English { override val code: String = "en-BW"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BZ : English { override val code: String = "en-BZ"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CA : English { override val code: String = "en-CA"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CC : English { override val code: String = "en-CC"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CH : English { override val code: String = "en-CH"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CK : English { override val code: String = "en-CK"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CM : English { override val code: String = "en-CM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CX : English { override val code: String = "en-CX"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CY : English { override val code: String = "en-CY"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DE : English { override val code: String = "en-DE"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DG : English { override val code: String = "en-DG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DK : English { override val code: String = "en-DK"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DM : English { override val code: String = "en-DM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ER : English { override val code: String = "en-ER"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FI : English { override val code: String = "en-FI"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FJ : English { override val code: String = "en-FJ"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FK : English { override val code: String = "en-FK"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FM : English { override val code: String = "en-FM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GB : English { override val code: String = "en-GB"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GD : English { override val code: String = "en-GD"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GG : English { override val code: String = "en-GG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GH : English { override val code: String = "en-GH"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GI : English { override val code: String = "en-GI"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GM : English { override val code: String = "en-GM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GU : English { override val code: String = "en-GU"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GY : English { override val code: String = "en-GY"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HK : English { override val code: String = "en-HK"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IE : English { override val code: String = "en-IE"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IL : English { override val code: String = "en-IL"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IM : English { override val code: String = "en-IM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IN : English { override val code: String = "en-IN"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IO : English { override val code: String = "en-IO"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object JE : English { override val code: String = "en-JE"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object JM : English { override val code: String = "en-JM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KE : English { override val code: String = "en-KE"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KI : English { override val code: String = "en-KI"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KN : English { override val code: String = "en-KN"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KY : English { override val code: String = "en-KY"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LC : English { override val code: String = "en-LC"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LR : English { override val code: String = "en-LR"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LS : English { override val code: String = "en-LS"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MG : English { override val code: String = "en-MG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MH : English { override val code: String = "en-MH"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MO : English { override val code: String = "en-MO"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MP : English { override val code: String = "en-MP"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MS : English { override val code: String = "en-MS"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MT : English { override val code: String = "en-MT"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MU : English { override val code: String = "en-MU"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MW : English { override val code: String = "en-MW"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MY : English { override val code: String = "en-MY"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NA : English { override val code: String = "en-NA"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NF : English { override val code: String = "en-NF"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NG : English { override val code: String = "en-NG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NL : English { override val code: String = "en-NL"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NR : English { override val code: String = "en-NR"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NU : English { override val code: String = "en-NU"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NZ : English { override val code: String = "en-NZ"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PG : English { override val code: String = "en-PG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PH : English { override val code: String = "en-PH"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PK : English { override val code: String = "en-PK"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PN : English { override val code: String = "en-PN"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PR : English { override val code: String = "en-PR"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PW : English { override val code: String = "en-PW"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RW : English { override val code: String = "en-RW"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SB : English { override val code: String = "en-SB"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SC : English { override val code: String = "en-SC"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SD : English { override val code: String = "en-SD"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SE : English { override val code: String = "en-SE"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SG : English { override val code: String = "en-SG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SH : English { override val code: String = "en-SH"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SI : English { override val code: String = "en-SI"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SL : English { override val code: String = "en-SL"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SS : English { override val code: String = "en-SS"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SX : English { override val code: String = "en-SX"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SZ : English { override val code: String = "en-SZ"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TC : English { override val code: String = "en-TC"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TK : English { override val code: String = "en-TK"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TO : English { override val code: String = "en-TO"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TT : English { override val code: String = "en-TT"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TV : English { override val code: String = "en-TV"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TZ : English { override val code: String = "en-TZ"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object UG : English { override val code: String = "en-UG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object UM : English { override val code: String = "en-UM"; override val parentLang: English get() = English; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Hungarian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Armenian : IetfLang() { - override val code: String = "hy" - - @Serializable(IetfLangSerializer::class) - object AM : Armenian() { override val code: String = "hy-AM"; override val parentLang: Armenian get() = Armenian; } - - @Serializable(IetfLangSerializer::class) - companion object : Armenian() - } - - @Serializable(IetfLangSerializer::class) - object Herero : IetfLang() { override val code: String = "hz" } - - @Serializable(IetfLangSerializer::class) - sealed class InterlinguaInternationalAuxiliaryLanguageAssociation : IetfLang() { - override val code: String = "ia" - - @Serializable(IetfLangSerializer::class) - object L001 : InterlinguaInternationalAuxiliaryLanguageAssociation() { override val code: String = "ia-001"; override val parentLang: InterlinguaInternationalAuxiliaryLanguageAssociation get() = InterlinguaInternationalAuxiliaryLanguageAssociation; } - - @Serializable(IetfLangSerializer::class) - companion object : InterlinguaInternationalAuxiliaryLanguageAssociation() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Indonesian : IetfLang() { - override val code: String = "id" - - @Serializable(IetfLangSerializer::class) - object ID : Indonesian() { override val code: String = "id-ID"; override val parentLang: Indonesian get() = Indonesian; } - - @Serializable(IetfLangSerializer::class) - companion object : Indonesian() - } - - @Serializable(IetfLangSerializer::class) - object InterlingueOccidental : IetfLang() { override val code: String = "ie" } - - @Serializable(IetfLangSerializer::class) - sealed class Igbo : IetfLang() { - override val code: String = "ig" - - @Serializable(IetfLangSerializer::class) - object NG : Igbo() { override val code: String = "ig-NG"; override val parentLang: Igbo get() = Igbo; } - - @Serializable(IetfLangSerializer::class) - companion object : Igbo() - } - - - @Serializable(IetfLangSerializer::class) - sealed class SichuanYiNuosu : IetfLang() { - override val code: String = "ii" - - @Serializable(IetfLangSerializer::class) - object CN : SichuanYiNuosu() { override val code: String = "ii-CN"; override val parentLang: SichuanYiNuosu get() = SichuanYiNuosu; } - - @Serializable(IetfLangSerializer::class) - companion object : SichuanYiNuosu() - } - - @Serializable(IetfLangSerializer::class) - object Inupiaq : IetfLang() { override val code: String = "ik" } - @Serializable(IetfLangSerializer::class) - object Ido : IetfLang() { override val code: String = "io" } - - @Serializable(IetfLangSerializer::class) - sealed class Icelandic : IetfLang() { - override val code: String = "is" - - @Serializable(IetfLangSerializer::class) - object IS : Icelandic() { override val code: String = "is-IS"; override val parentLang: Icelandic get() = Icelandic; } - - @Serializable(IetfLangSerializer::class) - companion object : Icelandic() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Italian : IetfLang() { - override val code: String = "it" - - @Serializable(IetfLangSerializer::class) - object CH : Italian() { override val code: String = "it-CH"; override val parentLang: Italian get() = Italian; } - @Serializable(IetfLangSerializer::class) - object IT : Italian() { override val code: String = "it-IT"; override val parentLang: Italian get() = Italian; } - @Serializable(IetfLangSerializer::class) - object SM : Italian() { override val code: String = "it-SM"; override val parentLang: Italian get() = Italian; } - @Serializable(IetfLangSerializer::class) - object VA : Italian() { override val code: String = "it-VA"; override val parentLang: Italian get() = Italian; } - - @Serializable(IetfLangSerializer::class) - companion object : Italian() - } - - @Serializable(IetfLangSerializer::class) - object Inuktitut : IetfLang() { override val code: String = "iu" } - - @Serializable(IetfLangSerializer::class) - sealed class Japanese : IetfLang() { - override val code: String = "ja" - - @Serializable(IetfLangSerializer::class) - object JP : Japanese() { override val code: String = "ja-JP"; override val parentLang: Japanese get() = Japanese; } - - @Serializable(IetfLangSerializer::class) - companion object : Japanese() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Javanese : IetfLang() { - override val code: String = "jv" - - @Serializable(IetfLangSerializer::class) - object ID : Javanese() { override val code: String = "jv-ID"; override val parentLang: Javanese get() = Javanese; } - - @Serializable(IetfLangSerializer::class) - companion object : Javanese() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Georgian : IetfLang() { - override val code: String = "ka" - - @Serializable(IetfLangSerializer::class) - object GE : Georgian() { override val code: String = "ka-GE"; override val parentLang: Georgian get() = Georgian; } - - @Serializable(IetfLangSerializer::class) - companion object : Georgian() - } - - @Serializable(IetfLangSerializer::class) - object Kongo : IetfLang() { override val code: String = "kg" } - - @Serializable(IetfLangSerializer::class) - sealed class KikuyuGikuyu : IetfLang() { - override val code: String = "ki" - - @Serializable(IetfLangSerializer::class) - object KE : KikuyuGikuyu() { override val code: String = "ki-KE"; override val parentLang: KikuyuGikuyu get() = KikuyuGikuyu; } - - @Serializable(IetfLangSerializer::class) - companion object : KikuyuGikuyu() - } - - @Serializable(IetfLangSerializer::class) - object KuanyamaKwanyama : IetfLang() { override val code: String = "kj" } - - @Serializable(IetfLangSerializer::class) - sealed class Kazakh : IetfLang() { - override val code: String = "kk" - - @Serializable(IetfLangSerializer::class) - object KZ : Kazakh() { override val code: String = "kk-KZ"; override val parentLang: Kazakh get() = Kazakh; } - - @Serializable(IetfLangSerializer::class) - companion object : Kazakh() - } - - - @Serializable(IetfLangSerializer::class) - sealed class KalaallisutGreenlandic : IetfLang() { - override val code: String = "kl" - - @Serializable(IetfLangSerializer::class) - object GL : KalaallisutGreenlandic() { override val code: String = "kl-GL"; override val parentLang: KalaallisutGreenlandic get() = KalaallisutGreenlandic; } - - @Serializable(IetfLangSerializer::class) - companion object : KalaallisutGreenlandic() - } - - - @Serializable(IetfLangSerializer::class) - sealed class CentralKhmer : IetfLang() { - override val code: String = "km" - - @Serializable(IetfLangSerializer::class) - object KH : CentralKhmer() { override val code: String = "km-KH"; override val parentLang: CentralKhmer get() = CentralKhmer; } - - @Serializable(IetfLangSerializer::class) - companion object : CentralKhmer() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Kannada : IetfLang() { - override val code: String = "kn" - - @Serializable(IetfLangSerializer::class) - object IN : Kannada() { override val code: String = "kn-IN"; override val parentLang: Kannada get() = Kannada; } - - @Serializable(IetfLangSerializer::class) - companion object : Kannada() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Korean : IetfLang() { - override val code: String = "ko" - - @Serializable(IetfLangSerializer::class) - object KP : Korean() { override val code: String = "ko-KP"; override val parentLang: Korean get() = Korean; } - @Serializable(IetfLangSerializer::class) - object KR : Korean() { override val code: String = "ko-KR"; override val parentLang: Korean get() = Korean; } - - @Serializable(IetfLangSerializer::class) - companion object : Korean() - } - - @Serializable(IetfLangSerializer::class) - object Kanuri : IetfLang() { override val code: String = "kr" } - - @Serializable(IetfLangSerializer::class) - sealed class Kashmiri : IetfLang() { - override val code: String = "ks" - - - @Serializable(IetfLangSerializer::class) - sealed class Arab : Kashmiri() { - override val code: String = "ks-Arab" - override val parentLang: Kashmiri get() = Kashmiri; + sealed interface US : English { @Serializable(IetfLangSerializer::class) - object IN : Arab() { override val code: String = "ks-Arab-IN"; override val parentLang: Arab get() = Arab; } + object POSIX : US { override val code: String = "en-US-POSIX"; override val parentLang: US get() = US; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Arab() + companion object : US { + override val code: String = "en-US" + override val parentLang: English get() = English; + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object VC : English { override val code: String = "en-VC"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object VG : English { override val code: String = "en-VG"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object VI : English { override val code: String = "en-VI"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object VU : English { override val code: String = "en-VU"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object WS : English { override val code: String = "en-WS"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ZA : English { override val code: String = "en-ZA"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ZM : English { override val code: String = "en-ZM"; override val parentLang: English get() = English; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ZW : English { override val code: String = "en-ZW"; override val parentLang: English get() = English; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : English { + override val code: String = "en" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object EnglishMiddle11001500 : IetfLang { override val code: String = "enm"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Esperanto : IetfLang { + + @Serializable(IetfLangSerializer::class) + object L001 : Esperanto { override val code: String = "eo-001"; override val parentLang: Esperanto get() = Esperanto; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Esperanto { + override val code: String = "eo" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Estonian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object EE : Estonian { override val code: String = "et-EE"; override val parentLang: Estonian get() = Estonian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Estonian { + override val code: String = "et" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Ewe : IetfLang { + + @Serializable(IetfLangSerializer::class) + object GH : Ewe { override val code: String = "ee-GH"; override val parentLang: Ewe get() = Ewe; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TG : Ewe { override val code: String = "ee-TG"; override val parentLang: Ewe get() = Ewe; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Ewe { + override val code: String = "ee" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Ewondo : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CM : Ewondo { override val code: String = "ewo-CM"; override val parentLang: Ewondo get() = Ewondo; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Ewondo { + override val code: String = "ewo" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Fang : IetfLang { override val code: String = "fan"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Faroese : IetfLang { + + @Serializable(IetfLangSerializer::class) + object DK : Faroese { override val code: String = "fo-DK"; override val parentLang: Faroese get() = Faroese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FO : Faroese { override val code: String = "fo-FO"; override val parentLang: Faroese get() = Faroese; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Faroese { + override val code: String = "fo" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Fanti : IetfLang { override val code: String = "fat"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Fijian : IetfLang { override val code: String = "fj"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface FilipinoPilipino : IetfLang { + + @Serializable(IetfLangSerializer::class) + object PH : FilipinoPilipino { override val code: String = "fil-PH"; override val parentLang: FilipinoPilipino get() = FilipinoPilipino; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : FilipinoPilipino { + override val code: String = "fil" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Finnish : IetfLang { + + @Serializable(IetfLangSerializer::class) + object FI : Finnish { override val code: String = "fi-FI"; override val parentLang: Finnish get() = Finnish; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Finnish { + override val code: String = "fi" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object FinnoUgrianLanguages : IetfLang { override val code: String = "fiu"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Fon : IetfLang { override val code: String = "fon"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface French : IetfLang { + + @Serializable(IetfLangSerializer::class) + object BE : French { override val code: String = "fr-BE"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BF : French { override val code: String = "fr-BF"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BI : French { override val code: String = "fr-BI"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BJ : French { override val code: String = "fr-BJ"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BL : French { override val code: String = "fr-BL"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CA : French { override val code: String = "fr-CA"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CD : French { override val code: String = "fr-CD"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CF : French { override val code: String = "fr-CF"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CG : French { override val code: String = "fr-CG"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CH : French { override val code: String = "fr-CH"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CI : French { override val code: String = "fr-CI"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CM : French { override val code: String = "fr-CM"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DJ : French { override val code: String = "fr-DJ"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DZ : French { override val code: String = "fr-DZ"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FR : French { override val code: String = "fr-FR"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GA : French { override val code: String = "fr-GA"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GF : French { override val code: String = "fr-GF"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GN : French { override val code: String = "fr-GN"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GP : French { override val code: String = "fr-GP"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GQ : French { override val code: String = "fr-GQ"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HT : French { override val code: String = "fr-HT"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KM : French { override val code: String = "fr-KM"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LU : French { override val code: String = "fr-LU"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MA : French { override val code: String = "fr-MA"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MC : French { override val code: String = "fr-MC"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MF : French { override val code: String = "fr-MF"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MG : French { override val code: String = "fr-MG"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ML : French { override val code: String = "fr-ML"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MQ : French { override val code: String = "fr-MQ"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MR : French { override val code: String = "fr-MR"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MU : French { override val code: String = "fr-MU"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NC : French { override val code: String = "fr-NC"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NE : French { override val code: String = "fr-NE"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PF : French { override val code: String = "fr-PF"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PM : French { override val code: String = "fr-PM"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RE : French { override val code: String = "fr-RE"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RW : French { override val code: String = "fr-RW"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SC : French { override val code: String = "fr-SC"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SN : French { override val code: String = "fr-SN"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SY : French { override val code: String = "fr-SY"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TD : French { override val code: String = "fr-TD"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TG : French { override val code: String = "fr-TG"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TN : French { override val code: String = "fr-TN"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object VU : French { override val code: String = "fr-VU"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object WF : French { override val code: String = "fr-WF"; override val parentLang: French get() = French; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object YT : French { override val code: String = "fr-YT"; override val parentLang: French get() = French; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : French { + override val code: String = "fr" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object FrenchMiddleCa_14001600 : IetfLang { override val code: String = "frm"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FrenchOld842ca_1400 : IetfLang { override val code: String = "fro"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NorthernFrisian : IetfLang { override val code: String = "frr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object EasternFrisian : IetfLang { override val code: String = "frs"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface WesternFrisian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object NL : WesternFrisian { override val code: String = "fy-NL"; override val parentLang: WesternFrisian get() = WesternFrisian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : WesternFrisian { + override val code: String = "fy" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Fulah : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CM : Fulah { override val code: String = "ff-CM"; override val parentLang: Fulah get() = Fulah; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GN : Fulah { override val code: String = "ff-GN"; override val parentLang: Fulah get() = Fulah; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MR : Fulah { override val code: String = "ff-MR"; override val parentLang: Fulah get() = Fulah; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SN : Fulah { override val code: String = "ff-SN"; override val parentLang: Fulah get() = Fulah; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Fulah { + override val code: String = "ff" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Friulian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IT : Friulian { override val code: String = "fur-IT"; override val parentLang: Friulian get() = Friulian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Friulian { + override val code: String = "fur" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Ga : IetfLang { override val code: String = "gaa"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Gayo : IetfLang { override val code: String = "gay"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Gbaya : IetfLang { override val code: String = "gba"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GermanicLanguages : IetfLang { override val code: String = "gem"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Georgian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object GE : Georgian { override val code: String = "ka-GE"; override val parentLang: Georgian get() = Georgian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Georgian { + override val code: String = "ka" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface German : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AT : German { override val code: String = "de-AT"; override val parentLang: German get() = German; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BE : German { override val code: String = "de-BE"; override val parentLang: German get() = German; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CH : German { override val code: String = "de-CH"; override val parentLang: German get() = German; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DE : German { override val code: String = "de-DE"; override val parentLang: German get() = German; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IT : German { override val code: String = "de-IT"; override val parentLang: German get() = German; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LI : German { override val code: String = "de-LI"; override val parentLang: German get() = German; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LU : German { override val code: String = "de-LU"; override val parentLang: German get() = German; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : German { + override val code: String = "de" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Geez : IetfLang { override val code: String = "gez"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Gilbertese : IetfLang { override val code: String = "gil"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface GaelicScottishGaelic : IetfLang { + + @Serializable(IetfLangSerializer::class) + object GB : GaelicScottishGaelic { override val code: String = "gd-GB"; override val parentLang: GaelicScottishGaelic get() = GaelicScottishGaelic; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : GaelicScottishGaelic { + override val code: String = "gd" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Irish : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IE : Irish { override val code: String = "ga-IE"; override val parentLang: Irish get() = Irish; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Irish { + override val code: String = "ga" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Galician : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ES : Galician { override val code: String = "gl-ES"; override val parentLang: Galician get() = Galician; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Galician { + override val code: String = "gl" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Manx : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IM : Manx { override val code: String = "gv-IM"; override val parentLang: Manx get() = Manx; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Manx { + override val code: String = "gv" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object GermanMiddleHighCa_10501500 : IetfLang { override val code: String = "gmh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GermanOldHighCa_7501050 : IetfLang { override val code: String = "goh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Gondi : IetfLang { override val code: String = "gon"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Gorontalo : IetfLang { override val code: String = "gor"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Gothic : IetfLang { override val code: String = "got"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Grebo : IetfLang { override val code: String = "grb"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GreekAncientTo1453 : IetfLang { override val code: String = "grc"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface GreekModern1453 : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CY : GreekModern1453 { override val code: String = "el-CY"; override val parentLang: GreekModern1453 get() = GreekModern1453; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GR : GreekModern1453 { override val code: String = "el-GR"; override val parentLang: GreekModern1453 get() = GreekModern1453; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : GreekModern1453 { + override val code: String = "el" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Guarani : IetfLang { override val code: String = "gn"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface SwissGermanAlemannicAlsatian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CH : SwissGermanAlemannicAlsatian { override val code: String = "gsw-CH"; override val parentLang: SwissGermanAlemannicAlsatian get() = SwissGermanAlemannicAlsatian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FR : SwissGermanAlemannicAlsatian { override val code: String = "gsw-FR"; override val parentLang: SwissGermanAlemannicAlsatian get() = SwissGermanAlemannicAlsatian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LI : SwissGermanAlemannicAlsatian { override val code: String = "gsw-LI"; override val parentLang: SwissGermanAlemannicAlsatian get() = SwissGermanAlemannicAlsatian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : SwissGermanAlemannicAlsatian { + override val code: String = "gsw" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Gujarati : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Gujarati { override val code: String = "gu-IN"; override val parentLang: Gujarati get() = Gujarati; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Gujarati { + override val code: String = "gu" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Gwich_in : IetfLang { override val code: String = "gwi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Haida : IetfLang { override val code: String = "hai"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HaitianHaitianCreole : IetfLang { override val code: String = "ht"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Hausa : IetfLang { + + @Serializable(IetfLangSerializer::class) + object GH : Hausa { override val code: String = "ha-GH"; override val parentLang: Hausa get() = Hausa; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NE : Hausa { override val code: String = "ha-NE"; override val parentLang: Hausa get() = Hausa; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NG : Hausa { override val code: String = "ha-NG"; override val parentLang: Hausa get() = Hausa; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Hausa { + override val code: String = "ha" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Hawaiian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object US : Hawaiian { override val code: String = "haw-US"; override val parentLang: Hawaiian get() = Hawaiian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Hawaiian { + override val code: String = "haw" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Hebrew : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IL : Hebrew { override val code: String = "he-IL"; override val parentLang: Hebrew get() = Hebrew; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Hebrew { + override val code: String = "he" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Herero : IetfLang { override val code: String = "hz"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Hiligaynon : IetfLang { override val code: String = "hil"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HimachaliLanguagesWesternPahariLanguages : IetfLang { override val code: String = "him"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Hindi : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Hindi { override val code: String = "hi-IN"; override val parentLang: Hindi get() = Hindi; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Hindi { + override val code: String = "hi" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Hittite : IetfLang { override val code: String = "hit"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HmongMong : IetfLang { override val code: String = "hmn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HiriMotu : IetfLang { override val code: String = "ho"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Croatian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object BA : Croatian { override val code: String = "hr-BA"; override val parentLang: Croatian get() = Croatian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HR : Croatian { override val code: String = "hr-HR"; override val parentLang: Croatian get() = Croatian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Croatian { + override val code: String = "hr" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface UpperSorbian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object DE : UpperSorbian { override val code: String = "hsb-DE"; override val parentLang: UpperSorbian get() = UpperSorbian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : UpperSorbian { + override val code: String = "hsb" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Hungarian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object HU : Hungarian { override val code: String = "hu-HU"; override val parentLang: Hungarian get() = Hungarian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Hungarian { + override val code: String = "hu" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Hupa : IetfLang { override val code: String = "hup"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Iban : IetfLang { override val code: String = "iba"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Igbo : IetfLang { + + @Serializable(IetfLangSerializer::class) + object NG : Igbo { override val code: String = "ig-NG"; override val parentLang: Igbo get() = Igbo; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Igbo { + override val code: String = "ig" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Icelandic : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IS : Icelandic { override val code: String = "is-IS"; override val parentLang: Icelandic get() = Icelandic; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Icelandic { + override val code: String = "is" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Ido : IetfLang { override val code: String = "io"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface SichuanYiNuosu : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CN : SichuanYiNuosu { override val code: String = "ii-CN"; override val parentLang: SichuanYiNuosu get() = SichuanYiNuosu; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : SichuanYiNuosu { + override val code: String = "ii" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object IjoLanguages : IetfLang { override val code: String = "ijo"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Inuktitut : IetfLang { override val code: String = "iu"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object InterlingueOccidental : IetfLang { override val code: String = "ie"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Iloko : IetfLang { override val code: String = "ilo"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object InterlinguaInternationalAuxiliaryLanguageAssociation : IetfLang { override val code: String = "ia"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IndicLanguages : IetfLang { override val code: String = "inc"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Indonesian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ID : Indonesian { override val code: String = "id-ID"; override val parentLang: Indonesian get() = Indonesian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Indonesian { + override val code: String = "id" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object IndoEuropeanLanguages : IetfLang { override val code: String = "ine"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Ingush : IetfLang { override val code: String = "inh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Inupiaq : IetfLang { override val code: String = "ik"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IranianLanguages : IetfLang { override val code: String = "ira"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IroquoianLanguages : IetfLang { override val code: String = "iro"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Italian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CH : Italian { override val code: String = "it-CH"; override val parentLang: Italian get() = Italian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IT : Italian { override val code: String = "it-IT"; override val parentLang: Italian get() = Italian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SM : Italian { override val code: String = "it-SM"; override val parentLang: Italian get() = Italian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object VA : Italian { override val code: String = "it-VA"; override val parentLang: Italian get() = Italian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Italian { + override val code: String = "it" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Javanese : IetfLang { override val code: String = "jv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Lojban : IetfLang { override val code: String = "jbo"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Japanese : IetfLang { + + @Serializable(IetfLangSerializer::class) + object JP : Japanese { override val code: String = "ja-JP"; override val parentLang: Japanese get() = Japanese; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Japanese { + override val code: String = "ja" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object JudeoPersian : IetfLang { override val code: String = "jpr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object JudeoArabic : IetfLang { override val code: String = "jrb"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KaraKalpak : IetfLang { override val code: String = "kaa"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Kabyle : IetfLang { + + @Serializable(IetfLangSerializer::class) + object DZ : Kabyle { override val code: String = "kab-DZ"; override val parentLang: Kabyle get() = Kabyle; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Kabyle { + override val code: String = "kab" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object KachinJingpho : IetfLang { override val code: String = "kac"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface KalaallisutGreenlandic : IetfLang { + + @Serializable(IetfLangSerializer::class) + object GL : KalaallisutGreenlandic { override val code: String = "kl-GL"; override val parentLang: KalaallisutGreenlandic get() = KalaallisutGreenlandic; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : KalaallisutGreenlandic { + override val code: String = "kl" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Kamba : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KE : Kamba { override val code: String = "kam-KE"; override val parentLang: Kamba get() = Kamba; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Kamba { + override val code: String = "kam" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Kannada : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Kannada { override val code: String = "kn-IN"; override val parentLang: Kannada get() = Kannada; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Kannada { + override val code: String = "kn" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object KarenLanguages : IetfLang { override val code: String = "kar"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Kashmiri : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Kashmiri { override val code: String = "ks-IN"; override val parentLang: Kashmiri get() = Kashmiri; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Kashmiri { + override val code: String = "ks" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Kanuri : IetfLang { override val code: String = "kr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kawi : IetfLang { override val code: String = "kaw"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Kazakh : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KZ : Kazakh { override val code: String = "kk-KZ"; override val parentLang: Kazakh get() = Kazakh; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Kazakh { + override val code: String = "kk" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Kabardian : IetfLang { override val code: String = "kbd"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Khasi : IetfLang { override val code: String = "kha"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KhoisanLanguages : IetfLang { override val code: String = "khi"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface CentralKhmer : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KH : CentralKhmer { override val code: String = "km-KH"; override val parentLang: CentralKhmer get() = CentralKhmer; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : CentralKhmer { + override val code: String = "km" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object KhotaneseSakan : IetfLang { override val code: String = "kho"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface KikuyuGikuyu : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KE : KikuyuGikuyu { override val code: String = "ki-KE"; override val parentLang: KikuyuGikuyu get() = KikuyuGikuyu; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : KikuyuGikuyu { + override val code: String = "ki" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Kinyarwanda : IetfLang { + + @Serializable(IetfLangSerializer::class) + object RW : Kinyarwanda { override val code: String = "rw-RW"; override val parentLang: Kinyarwanda get() = Kinyarwanda; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Kinyarwanda { + override val code: String = "rw" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface KirghizKyrgyz : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KG : KirghizKyrgyz { override val code: String = "ky-KG"; override val parentLang: KirghizKyrgyz get() = KirghizKyrgyz; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : KirghizKyrgyz { + override val code: String = "ky" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Kimbundu : IetfLang { override val code: String = "kmb"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Konkani : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Konkani { override val code: String = "kok-IN"; override val parentLang: Konkani get() = Konkani; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Konkani { + override val code: String = "kok" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Komi : IetfLang { override val code: String = "kv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kongo : IetfLang { override val code: String = "kg"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Korean : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KP : Korean { override val code: String = "ko-KP"; override val parentLang: Korean get() = Korean; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KR : Korean { override val code: String = "ko-KR"; override val parentLang: Korean get() = Korean; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Korean { + override val code: String = "ko" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Kosraean : IetfLang { override val code: String = "kos"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kpelle : IetfLang { override val code: String = "kpe"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KarachayBalkar : IetfLang { override val code: String = "krc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Karelian : IetfLang { override val code: String = "krl"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KruLanguages : IetfLang { override val code: String = "kro"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kurukh : IetfLang { override val code: String = "kru"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KuanyamaKwanyama : IetfLang { override val code: String = "kj"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kumyk : IetfLang { override val code: String = "kum"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kurdish : IetfLang { override val code: String = "ku"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Kutenai : IetfLang { override val code: String = "kut"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Ladino : IetfLang { override val code: String = "lad"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Lahnda : IetfLang { override val code: String = "lah"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Lamba : IetfLang { override val code: String = "lam"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Lao : IetfLang { + + @Serializable(IetfLangSerializer::class) + object LA : Lao { override val code: String = "lo-LA"; override val parentLang: Lao get() = Lao; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Lao { + override val code: String = "lo" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Latin : IetfLang { override val code: String = "la"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Latvian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object LV : Latvian { override val code: String = "lv-LV"; override val parentLang: Latvian get() = Latvian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Latvian { + override val code: String = "lv" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Lezghian : IetfLang { override val code: String = "lez"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LimburganLimburgerLimburgish : IetfLang { override val code: String = "li"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Lingala : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AO : Lingala { override val code: String = "ln-AO"; override val parentLang: Lingala get() = Lingala; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CD : Lingala { override val code: String = "ln-CD"; override val parentLang: Lingala get() = Lingala; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CF : Lingala { override val code: String = "ln-CF"; override val parentLang: Lingala get() = Lingala; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CG : Lingala { override val code: String = "ln-CG"; override val parentLang: Lingala get() = Lingala; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Lingala { + override val code: String = "ln" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Lithuanian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object LT : Lithuanian { override val code: String = "lt-LT"; override val parentLang: Lithuanian get() = Lithuanian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Lithuanian { + override val code: String = "lt" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Mongo : IetfLang { override val code: String = "lol"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Lozi : IetfLang { override val code: String = "loz"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface LuxembourgishLetzeburgesch : IetfLang { + + @Serializable(IetfLangSerializer::class) + object LU : LuxembourgishLetzeburgesch { override val code: String = "lb-LU"; override val parentLang: LuxembourgishLetzeburgesch get() = LuxembourgishLetzeburgesch; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : LuxembourgishLetzeburgesch { + override val code: String = "lb" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object LubaLulua : IetfLang { override val code: String = "lua"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface LubaKatanga : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CD : LubaKatanga { override val code: String = "lu-CD"; override val parentLang: LubaKatanga get() = LubaKatanga; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : LubaKatanga { + override val code: String = "lu" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Ganda : IetfLang { + + @Serializable(IetfLangSerializer::class) + object UG : Ganda { override val code: String = "lg-UG"; override val parentLang: Ganda get() = Ganda; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Ganda { + override val code: String = "lg" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Luiseno : IetfLang { override val code: String = "lui"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Lunda : IetfLang { override val code: String = "lun"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface LuoKenyaAndTanzania : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KE : LuoKenyaAndTanzania { override val code: String = "luo-KE"; override val parentLang: LuoKenyaAndTanzania get() = LuoKenyaAndTanzania; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : LuoKenyaAndTanzania { + override val code: String = "luo" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Lushai : IetfLang { override val code: String = "lus"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Macedonian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object MK : Macedonian { override val code: String = "mk-MK"; override val parentLang: Macedonian get() = Macedonian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Macedonian { + override val code: String = "mk" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Madurese : IetfLang { override val code: String = "mad"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Magahi : IetfLang { override val code: String = "mag"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Marshallese : IetfLang { override val code: String = "mh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Maithili : IetfLang { override val code: String = "mai"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Makasar : IetfLang { override val code: String = "mak"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Malayalam : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Malayalam { override val code: String = "ml-IN"; override val parentLang: Malayalam get() = Malayalam; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Malayalam { + override val code: String = "ml" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Mandingo : IetfLang { override val code: String = "man"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Maori : IetfLang { override val code: String = "mi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AustronesianLanguages : IetfLang { override val code: String = "map"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Marathi : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Marathi { override val code: String = "mr-IN"; override val parentLang: Marathi get() = Marathi; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Marathi { + override val code: String = "mr" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Masai : IetfLang { + + @Serializable(IetfLangSerializer::class) + object KE : Masai { override val code: String = "mas-KE"; override val parentLang: Masai get() = Masai; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TZ : Masai { override val code: String = "mas-TZ"; override val parentLang: Masai get() = Masai; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Masai { + override val code: String = "mas" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Malay : IetfLang { + + @Serializable(IetfLangSerializer::class) + object BN : Malay { override val code: String = "ms-BN"; override val parentLang: Malay get() = Malay; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MY : Malay { override val code: String = "ms-MY"; override val parentLang: Malay get() = Malay; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SG : Malay { override val code: String = "ms-SG"; override val parentLang: Malay get() = Malay; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Malay { + override val code: String = "ms" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Moksha : IetfLang { override val code: String = "mdf"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Mandar : IetfLang { override val code: String = "mdr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Mende : IetfLang { override val code: String = "men"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IrishMiddle9001200 : IetfLang { override val code: String = "mga"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Mi_kmaqMicmac : IetfLang { override val code: String = "mic"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Minangkabau : IetfLang { override val code: String = "min"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object UncodedLanguages : IetfLang { override val code: String = "mis"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MonKhmerLanguages : IetfLang { override val code: String = "mkh"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Malagasy : IetfLang { + + @Serializable(IetfLangSerializer::class) + object MG : Malagasy { override val code: String = "mg-MG"; override val parentLang: Malagasy get() = Malagasy; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Malagasy { + override val code: String = "mg" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Maltese : IetfLang { + + @Serializable(IetfLangSerializer::class) + object MT : Maltese { override val code: String = "mt-MT"; override val parentLang: Maltese get() = Maltese; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Maltese { + override val code: String = "mt" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Manchu : IetfLang { override val code: String = "mnc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Manipuri : IetfLang { override val code: String = "mni"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ManoboLanguages : IetfLang { override val code: String = "mno"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Mohawk : IetfLang { override val code: String = "moh"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Mongolian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object MN : Mongolian { override val code: String = "mn-MN"; override val parentLang: Mongolian get() = Mongolian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Mongolian { + override val code: String = "mn" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Mossi : IetfLang { override val code: String = "mos"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MultipleLanguages : IetfLang { override val code: String = "mul"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MundaLanguages : IetfLang { override val code: String = "mun"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Creek : IetfLang { override val code: String = "mus"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Mirandese : IetfLang { override val code: String = "mwl"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Marwari : IetfLang { override val code: String = "mwr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MayanLanguages : IetfLang { override val code: String = "myn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Erzya : IetfLang { override val code: String = "myv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NahuatlLanguages : IetfLang { override val code: String = "nah"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NorthAmericanIndianLanguages : IetfLang { override val code: String = "nai"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Neapolitan : IetfLang { override val code: String = "nap"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Nauru : IetfLang { override val code: String = "na"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NavajoNavaho : IetfLang { override val code: String = "nv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NdebeleSouthSouthNdebele : IetfLang { override val code: String = "nr"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface NdebeleNorthNorthNdebele : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ZW : NdebeleNorthNorthNdebele { override val code: String = "nd-ZW"; override val parentLang: NdebeleNorthNorthNdebele get() = NdebeleNorthNorthNdebele; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : NdebeleNorthNorthNdebele { + override val code: String = "nd" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Ndonga : IetfLang { override val code: String = "ng"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface LowGermanLowSaxonGermanLowSaxonLow : IetfLang { + + @Serializable(IetfLangSerializer::class) + object DE : LowGermanLowSaxonGermanLowSaxonLow { override val code: String = "nds-DE"; override val parentLang: LowGermanLowSaxonGermanLowSaxonLow get() = LowGermanLowSaxonGermanLowSaxonLow; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NL : LowGermanLowSaxonGermanLowSaxonLow { override val code: String = "nds-NL"; override val parentLang: LowGermanLowSaxonGermanLowSaxonLow get() = LowGermanLowSaxonGermanLowSaxonLow; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : LowGermanLowSaxonGermanLowSaxonLow { + override val code: String = "nds" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Nepali : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Nepali { override val code: String = "ne-IN"; override val parentLang: Nepali get() = Nepali; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NP : Nepali { override val code: String = "ne-NP"; override val parentLang: Nepali get() = Nepali; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Nepali { + override val code: String = "ne" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object NepalBhasaNewari : IetfLang { override val code: String = "new"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Nias : IetfLang { override val code: String = "nia"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NigerKordofanianLanguages : IetfLang { override val code: String = "nic"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Niuean : IetfLang { override val code: String = "niu"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface NorwegianNynorskNynorskNorwegian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object NO : NorwegianNynorskNynorskNorwegian { override val code: String = "nn-NO"; override val parentLang: NorwegianNynorskNynorskNorwegian get() = NorwegianNynorskNynorskNorwegian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : NorwegianNynorskNynorskNorwegian { + override val code: String = "nn" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface BokmalNorwegianNorwegianBokmal : IetfLang { + + @Serializable(IetfLangSerializer::class) + object NO : BokmalNorwegianNorwegianBokmal { override val code: String = "nb-NO"; override val parentLang: BokmalNorwegianNorwegianBokmal get() = BokmalNorwegianNorwegianBokmal; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SJ : BokmalNorwegianNorwegianBokmal { override val code: String = "nb-SJ"; override val parentLang: BokmalNorwegianNorwegianBokmal get() = BokmalNorwegianNorwegianBokmal; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : BokmalNorwegianNorwegianBokmal { + override val code: String = "nb" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Nogai : IetfLang { override val code: String = "nog"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NorseOld : IetfLang { override val code: String = "non"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Norwegian : IetfLang { override val code: String = "no"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object N_Ko : IetfLang { override val code: String = "nqo"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PediSepediNorthernSotho : IetfLang { override val code: String = "nso"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NubianLanguages : IetfLang { override val code: String = "nub"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ClassicalNewariOldNewariClassicalNepalBhasa : IetfLang { override val code: String = "nwc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ChichewaChewaNyanja : IetfLang { override val code: String = "ny"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Nyamwezi : IetfLang { override val code: String = "nym"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Nyankole : IetfLang { + + @Serializable(IetfLangSerializer::class) + object UG : Nyankole { override val code: String = "nyn-UG"; override val parentLang: Nyankole get() = Nyankole; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Nyankole { + override val code: String = "nyn" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Nyoro : IetfLang { override val code: String = "nyo"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Nzima : IetfLang { override val code: String = "nzi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object OccitanPost1500Provencal : IetfLang { override val code: String = "oc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Ojibwa : IetfLang { override val code: String = "oj"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Oriya : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Oriya { override val code: String = "or-IN"; override val parentLang: Oriya get() = Oriya; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Oriya { + override val code: String = "or" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Oromo : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ET : Oromo { override val code: String = "om-ET"; override val parentLang: Oromo get() = Oromo; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KE : Oromo { override val code: String = "om-KE"; override val parentLang: Oromo get() = Oromo; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Oromo { + override val code: String = "om" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Osage : IetfLang { override val code: String = "osa"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface OssetianOssetic : IetfLang { + + @Serializable(IetfLangSerializer::class) + object GE : OssetianOssetic { override val code: String = "os-GE"; override val parentLang: OssetianOssetic get() = OssetianOssetic; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RU : OssetianOssetic { override val code: String = "os-RU"; override val parentLang: OssetianOssetic get() = OssetianOssetic; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : OssetianOssetic { + override val code: String = "os" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object TurkishOttoman15001928 : IetfLang { override val code: String = "ota"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object OtomianLanguages : IetfLang { override val code: String = "oto"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PapuanLanguages : IetfLang { override val code: String = "paa"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Pangasinan : IetfLang { override val code: String = "pag"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Pahlavi : IetfLang { override val code: String = "pal"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PampangaKapampangan : IetfLang { override val code: String = "pam"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface PanjabiPunjabi : IetfLang { + + + @Serializable(IetfLangSerializer::class) + sealed interface Arab : PanjabiPunjabi { + + @Serializable(IetfLangSerializer::class) + object PK : Arab { override val code: String = "pa-Arab-PK"; override val parentLang: Arab get() = Arab; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Arab { + override val code: String = "pa-Arab" + override val parentLang: PanjabiPunjabi get() = PanjabiPunjabi; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : Kashmiri() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Kurdish : IetfLang() { - override val code: String = "ku" - - @Serializable(IetfLangSerializer::class) - object TR : Kurdish() { override val code: String = "ku-TR"; override val parentLang: Kurdish get() = Kurdish; } - - @Serializable(IetfLangSerializer::class) - companion object : Kurdish() - } - - @Serializable(IetfLangSerializer::class) - object Komi : IetfLang() { override val code: String = "kv" } - - @Serializable(IetfLangSerializer::class) - sealed class Cornish : IetfLang() { - override val code: String = "kw" - - @Serializable(IetfLangSerializer::class) - object GB : Cornish() { override val code: String = "kw-GB"; override val parentLang: Cornish get() = Cornish; } - - @Serializable(IetfLangSerializer::class) - companion object : Cornish() - } - - - @Serializable(IetfLangSerializer::class) - sealed class KirghizKyrgyz : IetfLang() { - override val code: String = "ky" - - @Serializable(IetfLangSerializer::class) - object KG : KirghizKyrgyz() { override val code: String = "ky-KG"; override val parentLang: KirghizKyrgyz get() = KirghizKyrgyz; } - - @Serializable(IetfLangSerializer::class) - companion object : KirghizKyrgyz() - } - - @Serializable(IetfLangSerializer::class) - object Latin : IetfLang() { override val code: String = "la" } - - @Serializable(IetfLangSerializer::class) - sealed class LuxembourgishLetzeburgesch : IetfLang() { - override val code: String = "lb" - - @Serializable(IetfLangSerializer::class) - object LU : LuxembourgishLetzeburgesch() { override val code: String = "lb-LU"; override val parentLang: LuxembourgishLetzeburgesch get() = LuxembourgishLetzeburgesch; } - - @Serializable(IetfLangSerializer::class) - companion object : LuxembourgishLetzeburgesch() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Ganda : IetfLang() { - override val code: String = "lg" - - @Serializable(IetfLangSerializer::class) - object UG : Ganda() { override val code: String = "lg-UG"; override val parentLang: Ganda get() = Ganda; } - - @Serializable(IetfLangSerializer::class) - companion object : Ganda() - } - - @Serializable(IetfLangSerializer::class) - object LimburganLimburgerLimburgish : IetfLang() { override val code: String = "li" } - - @Serializable(IetfLangSerializer::class) - sealed class Lingala : IetfLang() { - override val code: String = "ln" - - @Serializable(IetfLangSerializer::class) - object AO : Lingala() { override val code: String = "ln-AO"; override val parentLang: Lingala get() = Lingala; } - @Serializable(IetfLangSerializer::class) - object CD : Lingala() { override val code: String = "ln-CD"; override val parentLang: Lingala get() = Lingala; } - @Serializable(IetfLangSerializer::class) - object CF : Lingala() { override val code: String = "ln-CF"; override val parentLang: Lingala get() = Lingala; } - @Serializable(IetfLangSerializer::class) - object CG : Lingala() { override val code: String = "ln-CG"; override val parentLang: Lingala get() = Lingala; } - - @Serializable(IetfLangSerializer::class) - companion object : Lingala() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Lao : IetfLang() { - override val code: String = "lo" - - @Serializable(IetfLangSerializer::class) - object LA : Lao() { override val code: String = "lo-LA"; override val parentLang: Lao get() = Lao; } - - @Serializable(IetfLangSerializer::class) - companion object : Lao() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Lithuanian : IetfLang() { - override val code: String = "lt" - - @Serializable(IetfLangSerializer::class) - object LT : Lithuanian() { override val code: String = "lt-LT"; override val parentLang: Lithuanian get() = Lithuanian; } - - @Serializable(IetfLangSerializer::class) - companion object : Lithuanian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class LubaKatanga : IetfLang() { - override val code: String = "lu" - - @Serializable(IetfLangSerializer::class) - object CD : LubaKatanga() { override val code: String = "lu-CD"; override val parentLang: LubaKatanga get() = LubaKatanga; } - - @Serializable(IetfLangSerializer::class) - companion object : LubaKatanga() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Latvian : IetfLang() { - override val code: String = "lv" - - @Serializable(IetfLangSerializer::class) - object LV : Latvian() { override val code: String = "lv-LV"; override val parentLang: Latvian get() = Latvian; } - - @Serializable(IetfLangSerializer::class) - companion object : Latvian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Malagasy : IetfLang() { - override val code: String = "mg" - - @Serializable(IetfLangSerializer::class) - object MG : Malagasy() { override val code: String = "mg-MG"; override val parentLang: Malagasy get() = Malagasy; } - - @Serializable(IetfLangSerializer::class) - companion object : Malagasy() - } - - @Serializable(IetfLangSerializer::class) - object Marshallese : IetfLang() { override val code: String = "mh" } - - @Serializable(IetfLangSerializer::class) - sealed class Maori : IetfLang() { - override val code: String = "mi" - - @Serializable(IetfLangSerializer::class) - object NZ : Maori() { override val code: String = "mi-NZ"; override val parentLang: Maori get() = Maori; } - - @Serializable(IetfLangSerializer::class) - companion object : Maori() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Macedonian : IetfLang() { - override val code: String = "mk" - - @Serializable(IetfLangSerializer::class) - object MK : Macedonian() { override val code: String = "mk-MK"; override val parentLang: Macedonian get() = Macedonian; } - - @Serializable(IetfLangSerializer::class) - companion object : Macedonian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Malayalam : IetfLang() { - override val code: String = "ml" - - @Serializable(IetfLangSerializer::class) - object IN : Malayalam() { override val code: String = "ml-IN"; override val parentLang: Malayalam get() = Malayalam; } - - @Serializable(IetfLangSerializer::class) - companion object : Malayalam() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Mongolian : IetfLang() { - override val code: String = "mn" - - @Serializable(IetfLangSerializer::class) - object MN : Mongolian() { override val code: String = "mn-MN"; override val parentLang: Mongolian get() = Mongolian; } - - @Serializable(IetfLangSerializer::class) - companion object : Mongolian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Marathi : IetfLang() { - override val code: String = "mr" - - @Serializable(IetfLangSerializer::class) - object IN : Marathi() { override val code: String = "mr-IN"; override val parentLang: Marathi get() = Marathi; } - - @Serializable(IetfLangSerializer::class) - companion object : Marathi() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Malay : IetfLang() { - override val code: String = "ms" - - @Serializable(IetfLangSerializer::class) - object BN : Malay() { override val code: String = "ms-BN"; override val parentLang: Malay get() = Malay; } - @Serializable(IetfLangSerializer::class) - object ID : Malay() { override val code: String = "ms-ID"; override val parentLang: Malay get() = Malay; } - @Serializable(IetfLangSerializer::class) - object MY : Malay() { override val code: String = "ms-MY"; override val parentLang: Malay get() = Malay; } - @Serializable(IetfLangSerializer::class) - object SG : Malay() { override val code: String = "ms-SG"; override val parentLang: Malay get() = Malay; } - - @Serializable(IetfLangSerializer::class) - companion object : Malay() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Maltese : IetfLang() { - override val code: String = "mt" - - @Serializable(IetfLangSerializer::class) - object MT : Maltese() { override val code: String = "mt-MT"; override val parentLang: Maltese get() = Maltese; } - - @Serializable(IetfLangSerializer::class) - companion object : Maltese() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Burmese : IetfLang() { - override val code: String = "my" - - @Serializable(IetfLangSerializer::class) - object MM : Burmese() { override val code: String = "my-MM"; override val parentLang: Burmese get() = Burmese; } - - @Serializable(IetfLangSerializer::class) - companion object : Burmese() - } - - @Serializable(IetfLangSerializer::class) - object Nauru : IetfLang() { override val code: String = "na" } - - @Serializable(IetfLangSerializer::class) - sealed class BokmalNorwegianNorwegianBokmal : IetfLang() { - override val code: String = "nb" - - @Serializable(IetfLangSerializer::class) - object NO : BokmalNorwegianNorwegianBokmal() { override val code: String = "nb-NO"; override val parentLang: BokmalNorwegianNorwegianBokmal get() = BokmalNorwegianNorwegianBokmal; } - @Serializable(IetfLangSerializer::class) - object SJ : BokmalNorwegianNorwegianBokmal() { override val code: String = "nb-SJ"; override val parentLang: BokmalNorwegianNorwegianBokmal get() = BokmalNorwegianNorwegianBokmal; } - - @Serializable(IetfLangSerializer::class) - companion object : BokmalNorwegianNorwegianBokmal() - } - - - @Serializable(IetfLangSerializer::class) - sealed class NdebeleNorthNorthNdebele : IetfLang() { - override val code: String = "nd" - - @Serializable(IetfLangSerializer::class) - object ZW : NdebeleNorthNorthNdebele() { override val code: String = "nd-ZW"; override val parentLang: NdebeleNorthNorthNdebele get() = NdebeleNorthNorthNdebele; } - - @Serializable(IetfLangSerializer::class) - companion object : NdebeleNorthNorthNdebele() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Nepali : IetfLang() { - override val code: String = "ne" - - @Serializable(IetfLangSerializer::class) - object IN : Nepali() { override val code: String = "ne-IN"; override val parentLang: Nepali get() = Nepali; } - @Serializable(IetfLangSerializer::class) - object NP : Nepali() { override val code: String = "ne-NP"; override val parentLang: Nepali get() = Nepali; } - - @Serializable(IetfLangSerializer::class) - companion object : Nepali() - } - - @Serializable(IetfLangSerializer::class) - object Ndonga : IetfLang() { override val code: String = "ng" } - - @Serializable(IetfLangSerializer::class) - sealed class DutchFlemish : IetfLang() { - override val code: String = "nl" - - @Serializable(IetfLangSerializer::class) - object AW : DutchFlemish() { override val code: String = "nl-AW"; override val parentLang: DutchFlemish get() = DutchFlemish; } - @Serializable(IetfLangSerializer::class) - object BE : DutchFlemish() { override val code: String = "nl-BE"; override val parentLang: DutchFlemish get() = DutchFlemish; } - @Serializable(IetfLangSerializer::class) - object BQ : DutchFlemish() { override val code: String = "nl-BQ"; override val parentLang: DutchFlemish get() = DutchFlemish; } - @Serializable(IetfLangSerializer::class) - object CW : DutchFlemish() { override val code: String = "nl-CW"; override val parentLang: DutchFlemish get() = DutchFlemish; } - @Serializable(IetfLangSerializer::class) - object NL : DutchFlemish() { override val code: String = "nl-NL"; override val parentLang: DutchFlemish get() = DutchFlemish; } - @Serializable(IetfLangSerializer::class) - object SR : DutchFlemish() { override val code: String = "nl-SR"; override val parentLang: DutchFlemish get() = DutchFlemish; } - @Serializable(IetfLangSerializer::class) - object SX : DutchFlemish() { override val code: String = "nl-SX"; override val parentLang: DutchFlemish get() = DutchFlemish; } - - @Serializable(IetfLangSerializer::class) - companion object : DutchFlemish() - } - - - @Serializable(IetfLangSerializer::class) - sealed class NorwegianNynorskNynorskNorwegian : IetfLang() { - override val code: String = "nn" - - @Serializable(IetfLangSerializer::class) - object NO : NorwegianNynorskNynorskNorwegian() { override val code: String = "nn-NO"; override val parentLang: NorwegianNynorskNynorskNorwegian get() = NorwegianNynorskNynorskNorwegian; } - - @Serializable(IetfLangSerializer::class) - companion object : NorwegianNynorskNynorskNorwegian() - } - - @Serializable(IetfLangSerializer::class) - object Norwegian : IetfLang() { override val code: String = "no" } - @Serializable(IetfLangSerializer::class) - object NdebeleSouthSouthNdebele : IetfLang() { override val code: String = "nr" } - @Serializable(IetfLangSerializer::class) - object NavajoNavaho : IetfLang() { override val code: String = "nv" } - @Serializable(IetfLangSerializer::class) - object ChichewaChewaNyanja : IetfLang() { override val code: String = "ny" } - @Serializable(IetfLangSerializer::class) - object OccitanPost1500 : IetfLang() { override val code: String = "oc" } - @Serializable(IetfLangSerializer::class) - object Ojibwa : IetfLang() { override val code: String = "oj" } - - @Serializable(IetfLangSerializer::class) - sealed class Oromo : IetfLang() { - override val code: String = "om" - - @Serializable(IetfLangSerializer::class) - object ET : Oromo() { override val code: String = "om-ET"; override val parentLang: Oromo get() = Oromo; } - @Serializable(IetfLangSerializer::class) - object KE : Oromo() { override val code: String = "om-KE"; override val parentLang: Oromo get() = Oromo; } - - @Serializable(IetfLangSerializer::class) - companion object : Oromo() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Oriya : IetfLang() { - override val code: String = "or" - - @Serializable(IetfLangSerializer::class) - object IN : Oriya() { override val code: String = "or-IN"; override val parentLang: Oriya get() = Oriya; } - - @Serializable(IetfLangSerializer::class) - companion object : Oriya() - } - - - @Serializable(IetfLangSerializer::class) - sealed class OssetianOssetic : IetfLang() { - override val code: String = "os" - - @Serializable(IetfLangSerializer::class) - object GE : OssetianOssetic() { override val code: String = "os-GE"; override val parentLang: OssetianOssetic get() = OssetianOssetic; } - @Serializable(IetfLangSerializer::class) - object RU : OssetianOssetic() { override val code: String = "os-RU"; override val parentLang: OssetianOssetic get() = OssetianOssetic; } - - @Serializable(IetfLangSerializer::class) - companion object : OssetianOssetic() - } - - - @Serializable(IetfLangSerializer::class) - sealed class PanjabiPunjabi : IetfLang() { - override val code: String = "pa" - - - @Serializable(IetfLangSerializer::class) - sealed class Arab : PanjabiPunjabi() { - override val code: String = "pa-Arab" - override val parentLang: PanjabiPunjabi get() = PanjabiPunjabi; + sealed interface Guru : PanjabiPunjabi { @Serializable(IetfLangSerializer::class) - object PK : Arab() { override val code: String = "pa-Arab-PK"; override val parentLang: Arab get() = Arab; } + object IN : Guru { override val code: String = "pa-Guru-IN"; override val parentLang: Guru get() = Guru; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Arab() + companion object : Guru { + override val code: String = "pa-Guru" + override val parentLang: PanjabiPunjabi get() = PanjabiPunjabi; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Guru : PanjabiPunjabi() { - override val code: String = "pa-Guru" - override val parentLang: PanjabiPunjabi get() = PanjabiPunjabi; + companion object : PanjabiPunjabi { + override val code: String = "pa" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Papiamento : IetfLang { override val code: String = "pap"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Palauan : IetfLang { override val code: String = "pau"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PersianOldCa_600400B_C_ : IetfLang { override val code: String = "peo"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Persian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AF : Persian { override val code: String = "fa-AF"; override val parentLang: Persian get() = Persian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IR : Persian { override val code: String = "fa-IR"; override val parentLang: Persian get() = Persian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Persian { + override val code: String = "fa" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object PhilippineLanguages : IetfLang { override val code: String = "phi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Phoenician : IetfLang { override val code: String = "phn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Pali : IetfLang { override val code: String = "pi"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Polish : IetfLang { + + @Serializable(IetfLangSerializer::class) + object PL : Polish { override val code: String = "pl-PL"; override val parentLang: Polish get() = Polish; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Polish { + override val code: String = "pl" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Pohnpeian : IetfLang { override val code: String = "pon"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Portuguese : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AO : Portuguese { override val code: String = "pt-AO"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BR : Portuguese { override val code: String = "pt-BR"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CH : Portuguese { override val code: String = "pt-CH"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CV : Portuguese { override val code: String = "pt-CV"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GQ : Portuguese { override val code: String = "pt-GQ"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GW : Portuguese { override val code: String = "pt-GW"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LU : Portuguese { override val code: String = "pt-LU"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MO : Portuguese { override val code: String = "pt-MO"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MZ : Portuguese { override val code: String = "pt-MZ"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PT : Portuguese { override val code: String = "pt-PT"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ST : Portuguese { override val code: String = "pt-ST"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TL : Portuguese { override val code: String = "pt-TL"; override val parentLang: Portuguese get() = Portuguese; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Portuguese { + override val code: String = "pt" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object PrakritLanguages : IetfLang { override val code: String = "pra"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ProvencalOldTo1500 : IetfLang { override val code: String = "pro"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface PushtoPashto : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AF : PushtoPashto { override val code: String = "ps-AF"; override val parentLang: PushtoPashto get() = PushtoPashto; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : PushtoPashto { + override val code: String = "ps" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object ReservedForLocalUse : IetfLang { override val code: String = "qaa-qtz"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Quechua : IetfLang { + + @Serializable(IetfLangSerializer::class) + object BO : Quechua { override val code: String = "qu-BO"; override val parentLang: Quechua get() = Quechua; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object EC : Quechua { override val code: String = "qu-EC"; override val parentLang: Quechua get() = Quechua; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PE : Quechua { override val code: String = "qu-PE"; override val parentLang: Quechua get() = Quechua; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Quechua { + override val code: String = "qu" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Rajasthani : IetfLang { override val code: String = "raj"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Rapanui : IetfLang { override val code: String = "rap"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RarotonganCookIslandsMaori : IetfLang { override val code: String = "rar"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RomanceLanguages : IetfLang { override val code: String = "roa"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Romansh : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CH : Romansh { override val code: String = "rm-CH"; override val parentLang: Romansh get() = Romansh; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Romansh { + override val code: String = "rm" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Romany : IetfLang { override val code: String = "rom"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface RomanianMoldavianMoldovan : IetfLang { + + @Serializable(IetfLangSerializer::class) + object MD : RomanianMoldavianMoldovan { override val code: String = "ro-MD"; override val parentLang: RomanianMoldavianMoldovan get() = RomanianMoldavianMoldovan; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RO : RomanianMoldavianMoldovan { override val code: String = "ro-RO"; override val parentLang: RomanianMoldavianMoldovan get() = RomanianMoldavianMoldovan; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : RomanianMoldavianMoldovan { + override val code: String = "ro" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Rundi : IetfLang { + + @Serializable(IetfLangSerializer::class) + object BI : Rundi { override val code: String = "rn-BI"; override val parentLang: Rundi get() = Rundi; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Rundi { + override val code: String = "rn" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object AromanianArumanianMacedoRomanian : IetfLang { override val code: String = "rup"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Russian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object BY : Russian { override val code: String = "ru-BY"; override val parentLang: Russian get() = Russian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KG : Russian { override val code: String = "ru-KG"; override val parentLang: Russian get() = Russian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KZ : Russian { override val code: String = "ru-KZ"; override val parentLang: Russian get() = Russian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MD : Russian { override val code: String = "ru-MD"; override val parentLang: Russian get() = Russian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RU : Russian { override val code: String = "ru-RU"; override val parentLang: Russian get() = Russian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object UA : Russian { override val code: String = "ru-UA"; override val parentLang: Russian get() = Russian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Russian { + override val code: String = "ru" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Sandawe : IetfLang { override val code: String = "sad"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Sango : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CF : Sango { override val code: String = "sg-CF"; override val parentLang: Sango get() = Sango; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Sango { + override val code: String = "sg" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Yakut : IetfLang { + + @Serializable(IetfLangSerializer::class) + object RU : Yakut { override val code: String = "sah-RU"; override val parentLang: Yakut get() = Yakut; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Yakut { + override val code: String = "sah" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object SouthAmericanIndianOther : IetfLang { override val code: String = "sai"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SalishanLanguages : IetfLang { override val code: String = "sal"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SamaritanAramaic : IetfLang { override val code: String = "sam"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sanskrit : IetfLang { override val code: String = "sa"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sasak : IetfLang { override val code: String = "sas"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Santali : IetfLang { override val code: String = "sat"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sicilian : IetfLang { override val code: String = "scn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Scots : IetfLang { override val code: String = "sco"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Selkup : IetfLang { override val code: String = "sel"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SemiticLanguages : IetfLang { override val code: String = "sem"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IrishOldTo900 : IetfLang { override val code: String = "sga"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SignLanguages : IetfLang { override val code: String = "sgn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Shan : IetfLang { override val code: String = "shn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sidamo : IetfLang { override val code: String = "sid"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface SinhalaSinhalese : IetfLang { + + @Serializable(IetfLangSerializer::class) + object LK : SinhalaSinhalese { override val code: String = "si-LK"; override val parentLang: SinhalaSinhalese get() = SinhalaSinhalese; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : SinhalaSinhalese { + override val code: String = "si" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object SiouanLanguages : IetfLang { override val code: String = "sio"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SinoTibetanLanguages : IetfLang { override val code: String = "sit"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SlavicLanguages : IetfLang { override val code: String = "sla"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Slovak : IetfLang { + + @Serializable(IetfLangSerializer::class) + object SK : Slovak { override val code: String = "sk-SK"; override val parentLang: Slovak get() = Slovak; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Slovak { + override val code: String = "sk" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Slovenian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object SI : Slovenian { override val code: String = "sl-SI"; override val parentLang: Slovenian get() = Slovenian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Slovenian { + override val code: String = "sl" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object SouthernSami : IetfLang { override val code: String = "sma"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface NorthernSami : IetfLang { + + @Serializable(IetfLangSerializer::class) + object FI : NorthernSami { override val code: String = "se-FI"; override val parentLang: NorthernSami get() = NorthernSami; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NO : NorthernSami { override val code: String = "se-NO"; override val parentLang: NorthernSami get() = NorthernSami; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SE : NorthernSami { override val code: String = "se-SE"; override val parentLang: NorthernSami get() = NorthernSami; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : NorthernSami { + override val code: String = "se" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object SamiLanguages : IetfLang { override val code: String = "smi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LuleSami : IetfLang { override val code: String = "smj"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface InariSami : IetfLang { + + @Serializable(IetfLangSerializer::class) + object FI : InariSami { override val code: String = "smn-FI"; override val parentLang: InariSami get() = InariSami; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : InariSami { + override val code: String = "smn" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Samoan : IetfLang { override val code: String = "sm"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SkoltSami : IetfLang { override val code: String = "sms"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Shona : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ZW : Shona { override val code: String = "sn-ZW"; override val parentLang: Shona get() = Shona; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Shona { + override val code: String = "sn" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Sindhi : IetfLang { override val code: String = "sd"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Soninke : IetfLang { override val code: String = "snk"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sogdian : IetfLang { override val code: String = "sog"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Somali : IetfLang { + + @Serializable(IetfLangSerializer::class) + object DJ : Somali { override val code: String = "so-DJ"; override val parentLang: Somali get() = Somali; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ET : Somali { override val code: String = "so-ET"; override val parentLang: Somali get() = Somali; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KE : Somali { override val code: String = "so-KE"; override val parentLang: Somali get() = Somali; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SO : Somali { override val code: String = "so-SO"; override val parentLang: Somali get() = Somali; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Somali { + override val code: String = "so" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object SonghaiLanguages : IetfLang { override val code: String = "son"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SothoSouthern : IetfLang { override val code: String = "st"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface SpanishCastilian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object L419 : SpanishCastilian { override val code: String = "es-419"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object AR : SpanishCastilian { override val code: String = "es-AR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BO : SpanishCastilian { override val code: String = "es-BO"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BR : SpanishCastilian { override val code: String = "es-BR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BZ : SpanishCastilian { override val code: String = "es-BZ"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CL : SpanishCastilian { override val code: String = "es-CL"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CO : SpanishCastilian { override val code: String = "es-CO"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CR : SpanishCastilian { override val code: String = "es-CR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object CU : SpanishCastilian { override val code: String = "es-CU"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object DO : SpanishCastilian { override val code: String = "es-DO"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object EA : SpanishCastilian { override val code: String = "es-EA"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object EC : SpanishCastilian { override val code: String = "es-EC"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ES : SpanishCastilian { override val code: String = "es-ES"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GQ : SpanishCastilian { override val code: String = "es-GQ"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object GT : SpanishCastilian { override val code: String = "es-GT"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object HN : SpanishCastilian { override val code: String = "es-HN"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IC : SpanishCastilian { override val code: String = "es-IC"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MX : SpanishCastilian { override val code: String = "es-MX"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NI : SpanishCastilian { override val code: String = "es-NI"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PA : SpanishCastilian { override val code: String = "es-PA"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PE : SpanishCastilian { override val code: String = "es-PE"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PH : SpanishCastilian { override val code: String = "es-PH"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PR : SpanishCastilian { override val code: String = "es-PR"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PY : SpanishCastilian { override val code: String = "es-PY"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SV : SpanishCastilian { override val code: String = "es-SV"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object US : SpanishCastilian { override val code: String = "es-US"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object UY : SpanishCastilian { override val code: String = "es-UY"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object VE : SpanishCastilian { override val code: String = "es-VE"; override val parentLang: SpanishCastilian get() = SpanishCastilian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : SpanishCastilian { + override val code: String = "es" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Sardinian : IetfLang { override val code: String = "sc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SrananTongo : IetfLang { override val code: String = "srn"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Serbian : IetfLang { + + + @Serializable(IetfLangSerializer::class) + sealed interface Cyrl : Serbian { @Serializable(IetfLangSerializer::class) - object IN : Guru() { override val code: String = "pa-Guru-IN"; override val parentLang: Guru get() = Guru; } + object BA : Cyrl { override val code: String = "sr-Cyrl-BA"; override val parentLang: Cyrl get() = Cyrl; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ME : Cyrl { override val code: String = "sr-Cyrl-ME"; override val parentLang: Cyrl get() = Cyrl; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RS : Cyrl { override val code: String = "sr-Cyrl-RS"; override val parentLang: Cyrl get() = Cyrl; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object XK : Cyrl { override val code: String = "sr-Cyrl-XK"; override val parentLang: Cyrl get() = Cyrl; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Guru() + companion object : Cyrl { + override val code: String = "sr-Cyrl" + override val parentLang: Serbian get() = Serbian; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : PanjabiPunjabi() - } - - @Serializable(IetfLangSerializer::class) - object Pali : IetfLang() { override val code: String = "pi" } - - @Serializable(IetfLangSerializer::class) - sealed class Polish : IetfLang() { - override val code: String = "pl" - - @Serializable(IetfLangSerializer::class) - object PL : Polish() { override val code: String = "pl-PL"; override val parentLang: Polish get() = Polish; } - - @Serializable(IetfLangSerializer::class) - companion object : Polish() - } - - - @Serializable(IetfLangSerializer::class) - sealed class PushtoPashto : IetfLang() { - override val code: String = "ps" - - @Serializable(IetfLangSerializer::class) - object AF : PushtoPashto() { override val code: String = "ps-AF"; override val parentLang: PushtoPashto get() = PushtoPashto; } - @Serializable(IetfLangSerializer::class) - object PK : PushtoPashto() { override val code: String = "ps-PK"; override val parentLang: PushtoPashto get() = PushtoPashto; } - - @Serializable(IetfLangSerializer::class) - companion object : PushtoPashto() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Portuguese : IetfLang() { - override val code: String = "pt" - - @Serializable(IetfLangSerializer::class) - object AO : Portuguese() { override val code: String = "pt-AO"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object BR : Portuguese() { override val code: String = "pt-BR"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object CH : Portuguese() { override val code: String = "pt-CH"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object CV : Portuguese() { override val code: String = "pt-CV"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object GQ : Portuguese() { override val code: String = "pt-GQ"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object GW : Portuguese() { override val code: String = "pt-GW"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object LU : Portuguese() { override val code: String = "pt-LU"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object MO : Portuguese() { override val code: String = "pt-MO"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object MZ : Portuguese() { override val code: String = "pt-MZ"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object PT : Portuguese() { override val code: String = "pt-PT"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object ST : Portuguese() { override val code: String = "pt-ST"; override val parentLang: Portuguese get() = Portuguese; } - @Serializable(IetfLangSerializer::class) - object TL : Portuguese() { override val code: String = "pt-TL"; override val parentLang: Portuguese get() = Portuguese; } - - @Serializable(IetfLangSerializer::class) - companion object : Portuguese() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Quechua : IetfLang() { - override val code: String = "qu" - - @Serializable(IetfLangSerializer::class) - object BO : Quechua() { override val code: String = "qu-BO"; override val parentLang: Quechua get() = Quechua; } - @Serializable(IetfLangSerializer::class) - object EC : Quechua() { override val code: String = "qu-EC"; override val parentLang: Quechua get() = Quechua; } - @Serializable(IetfLangSerializer::class) - object PE : Quechua() { override val code: String = "qu-PE"; override val parentLang: Quechua get() = Quechua; } - - @Serializable(IetfLangSerializer::class) - companion object : Quechua() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Romansh : IetfLang() { - override val code: String = "rm" - - @Serializable(IetfLangSerializer::class) - object CH : Romansh() { override val code: String = "rm-CH"; override val parentLang: Romansh get() = Romansh; } - - @Serializable(IetfLangSerializer::class) - companion object : Romansh() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Rundi : IetfLang() { - override val code: String = "rn" - - @Serializable(IetfLangSerializer::class) - object BI : Rundi() { override val code: String = "rn-BI"; override val parentLang: Rundi get() = Rundi; } - - @Serializable(IetfLangSerializer::class) - companion object : Rundi() - } - - - @Serializable(IetfLangSerializer::class) - sealed class RomanianMoldavianMoldovan : IetfLang() { - override val code: String = "ro" - - @Serializable(IetfLangSerializer::class) - object MD : RomanianMoldavianMoldovan() { override val code: String = "ro-MD"; override val parentLang: RomanianMoldavianMoldovan get() = RomanianMoldavianMoldovan; } - @Serializable(IetfLangSerializer::class) - object RO : RomanianMoldavianMoldovan() { override val code: String = "ro-RO"; override val parentLang: RomanianMoldavianMoldovan get() = RomanianMoldavianMoldovan; } - - @Serializable(IetfLangSerializer::class) - companion object : RomanianMoldavianMoldovan() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Russian : IetfLang() { - override val code: String = "ru" - - @Serializable(IetfLangSerializer::class) - object BY : Russian() { override val code: String = "ru-BY"; override val parentLang: Russian get() = Russian; } - @Serializable(IetfLangSerializer::class) - object KG : Russian() { override val code: String = "ru-KG"; override val parentLang: Russian get() = Russian; } - @Serializable(IetfLangSerializer::class) - object KZ : Russian() { override val code: String = "ru-KZ"; override val parentLang: Russian get() = Russian; } - @Serializable(IetfLangSerializer::class) - object MD : Russian() { override val code: String = "ru-MD"; override val parentLang: Russian get() = Russian; } - @Serializable(IetfLangSerializer::class) - object RU : Russian() { override val code: String = "ru-RU"; override val parentLang: Russian get() = Russian; } - @Serializable(IetfLangSerializer::class) - object UA : Russian() { override val code: String = "ru-UA"; override val parentLang: Russian get() = Russian; } - - @Serializable(IetfLangSerializer::class) - companion object : Russian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Kinyarwanda : IetfLang() { - override val code: String = "rw" - - @Serializable(IetfLangSerializer::class) - object RW : Kinyarwanda() { override val code: String = "rw-RW"; override val parentLang: Kinyarwanda get() = Kinyarwanda; } - - @Serializable(IetfLangSerializer::class) - companion object : Kinyarwanda() - } - - @Serializable(IetfLangSerializer::class) - object Sanskrit : IetfLang() { override val code: String = "sa" } - @Serializable(IetfLangSerializer::class) - object Sardinian : IetfLang() { override val code: String = "sc" } - - @Serializable(IetfLangSerializer::class) - sealed class Sindhi : IetfLang() { - override val code: String = "sd" - - - @Serializable(IetfLangSerializer::class) - sealed class Arab : Sindhi() { - override val code: String = "sd-Arab" - override val parentLang: Sindhi get() = Sindhi; + sealed interface Latn : Serbian { @Serializable(IetfLangSerializer::class) - object PK : Arab() { override val code: String = "sd-Arab-PK"; override val parentLang: Arab get() = Arab; } + object BA : Latn { override val code: String = "sr-Latn-BA"; override val parentLang: Latn get() = Latn; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ME : Latn { override val code: String = "sr-Latn-ME"; override val parentLang: Latn get() = Latn; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object RS : Latn { override val code: String = "sr-Latn-RS"; override val parentLang: Latn get() = Latn; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object XK : Latn { override val code: String = "sr-Latn-XK"; override val parentLang: Latn get() = Latn; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Arab() + companion object : Latn { + override val code: String = "sr-Latn" + override val parentLang: Serbian get() = Serbian; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Deva : Sindhi() { - override val code: String = "sd-Deva" - override val parentLang: Sindhi get() = Sindhi; + companion object : Serbian { + override val code: String = "sr" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Serer : IetfLang { override val code: String = "srr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NiloSaharanLanguages : IetfLang { override val code: String = "ssa"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Swati : IetfLang { override val code: String = "ss"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sukuma : IetfLang { override val code: String = "suk"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sundanese : IetfLang { override val code: String = "su"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Susu : IetfLang { override val code: String = "sus"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Sumerian : IetfLang { override val code: String = "sux"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Swahili : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CD : Swahili { override val code: String = "sw-CD"; override val parentLang: Swahili get() = Swahili; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KE : Swahili { override val code: String = "sw-KE"; override val parentLang: Swahili get() = Swahili; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TZ : Swahili { override val code: String = "sw-TZ"; override val parentLang: Swahili get() = Swahili; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object UG : Swahili { override val code: String = "sw-UG"; override val parentLang: Swahili get() = Swahili; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Swahili { + override val code: String = "sw" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Swedish : IetfLang { + + @Serializable(IetfLangSerializer::class) + object AX : Swedish { override val code: String = "sv-AX"; override val parentLang: Swedish get() = Swedish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object FI : Swedish { override val code: String = "sv-FI"; override val parentLang: Swedish get() = Swedish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SE : Swedish { override val code: String = "sv-SE"; override val parentLang: Swedish get() = Swedish; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Swedish { + override val code: String = "sv" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object ClassicalSyriac : IetfLang { override val code: String = "syc"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Syriac : IetfLang { override val code: String = "syr"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tahitian : IetfLang { override val code: String = "ty"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TaiLanguages : IetfLang { override val code: String = "tai"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Tamil : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Tamil { override val code: String = "ta-IN"; override val parentLang: Tamil get() = Tamil; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object LK : Tamil { override val code: String = "ta-LK"; override val parentLang: Tamil get() = Tamil; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object MY : Tamil { override val code: String = "ta-MY"; override val parentLang: Tamil get() = Tamil; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object SG : Tamil { override val code: String = "ta-SG"; override val parentLang: Tamil get() = Tamil; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Tamil { + override val code: String = "ta" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Tatar : IetfLang { override val code: String = "tt"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Telugu : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Telugu { override val code: String = "te-IN"; override val parentLang: Telugu get() = Telugu; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Telugu { + override val code: String = "te" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Timne : IetfLang { override val code: String = "tem"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tereno : IetfLang { override val code: String = "ter"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tetum : IetfLang { override val code: String = "tet"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tajik : IetfLang { override val code: String = "tg"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tagalog : IetfLang { override val code: String = "tl"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Thai : IetfLang { + + @Serializable(IetfLangSerializer::class) + object TH : Thai { override val code: String = "th-TH"; override val parentLang: Thai get() = Thai; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Thai { + override val code: String = "th" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Tibetan : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CN : Tibetan { override val code: String = "bo-CN"; override val parentLang: Tibetan get() = Tibetan; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object IN : Tibetan { override val code: String = "bo-IN"; override val parentLang: Tibetan get() = Tibetan; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Tibetan { + override val code: String = "bo" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Tigre : IetfLang { override val code: String = "tig"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Tigrinya : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ER : Tigrinya { override val code: String = "ti-ER"; override val parentLang: Tigrinya get() = Tigrinya; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ET : Tigrinya { override val code: String = "ti-ET"; override val parentLang: Tigrinya get() = Tigrinya; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Tigrinya { + override val code: String = "ti" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Tiv : IetfLang { override val code: String = "tiv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tokelau : IetfLang { override val code: String = "tkl"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KlingonTlhInganHol : IetfLang { override val code: String = "tlh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tlingit : IetfLang { override val code: String = "tli"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tamashek : IetfLang { override val code: String = "tmh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TongaNyasa : IetfLang { override val code: String = "tog"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface TongaTongaIslands : IetfLang { + + @Serializable(IetfLangSerializer::class) + object TO : TongaTongaIslands { override val code: String = "to-TO"; override val parentLang: TongaTongaIslands get() = TongaTongaIslands; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : TongaTongaIslands { + override val code: String = "to" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object TokPisin : IetfLang { override val code: String = "tpi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tsimshian : IetfLang { override val code: String = "tsi"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tswana : IetfLang { override val code: String = "tn"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tsonga : IetfLang { override val code: String = "ts"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Turkmen : IetfLang { + + @Serializable(IetfLangSerializer::class) + object TM : Turkmen { override val code: String = "tk-TM"; override val parentLang: Turkmen get() = Turkmen; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Turkmen { + override val code: String = "tk" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Tumbuka : IetfLang { override val code: String = "tum"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TupiLanguages : IetfLang { override val code: String = "tup"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Turkish : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CY : Turkish { override val code: String = "tr-CY"; override val parentLang: Turkish get() = Turkish; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object TR : Turkish { override val code: String = "tr-TR"; override val parentLang: Turkish get() = Turkish; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Turkish { + override val code: String = "tr" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object AltaicLanguages : IetfLang { override val code: String = "tut"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tuvalu : IetfLang { override val code: String = "tvl"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Twi : IetfLang { override val code: String = "tw"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Tuvinian : IetfLang { override val code: String = "tyv"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Udmurt : IetfLang { override val code: String = "udm"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Ugaritic : IetfLang { override val code: String = "uga"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface UighurUyghur : IetfLang { + + @Serializable(IetfLangSerializer::class) + object CN : UighurUyghur { override val code: String = "ug-CN"; override val parentLang: UighurUyghur get() = UighurUyghur; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : UighurUyghur { + override val code: String = "ug" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Ukrainian : IetfLang { + + @Serializable(IetfLangSerializer::class) + object UA : Ukrainian { override val code: String = "uk-UA"; override val parentLang: Ukrainian get() = Ukrainian; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Ukrainian { + override val code: String = "uk" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Umbundu : IetfLang { override val code: String = "umb"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Undetermined : IetfLang { override val code: String = "und"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Urdu : IetfLang { + + @Serializable(IetfLangSerializer::class) + object IN : Urdu { override val code: String = "ur-IN"; override val parentLang: Urdu get() = Urdu; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object PK : Urdu { override val code: String = "ur-PK"; override val parentLang: Urdu get() = Urdu; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Urdu { + override val code: String = "ur" + override fun toString() = code + } + } + + + @Serializable(IetfLangSerializer::class) + sealed interface Uzbek : IetfLang { + + + @Serializable(IetfLangSerializer::class) + sealed interface Arab : Uzbek { @Serializable(IetfLangSerializer::class) - object IN : Deva() { override val code: String = "sd-Deva-IN"; override val parentLang: Deva get() = Deva; } + object AF : Arab { override val code: String = "uz-Arab-AF"; override val parentLang: Arab get() = Arab; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Deva() + companion object : Arab { + override val code: String = "uz-Arab" + override val parentLang: Uzbek get() = Uzbek; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : Sindhi() - } - - - @Serializable(IetfLangSerializer::class) - sealed class NorthernSami : IetfLang() { - override val code: String = "se" - - @Serializable(IetfLangSerializer::class) - object FI : NorthernSami() { override val code: String = "se-FI"; override val parentLang: NorthernSami get() = NorthernSami; } - @Serializable(IetfLangSerializer::class) - object NO : NorthernSami() { override val code: String = "se-NO"; override val parentLang: NorthernSami get() = NorthernSami; } - @Serializable(IetfLangSerializer::class) - object SE : NorthernSami() { override val code: String = "se-SE"; override val parentLang: NorthernSami get() = NorthernSami; } - - @Serializable(IetfLangSerializer::class) - companion object : NorthernSami() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Sango : IetfLang() { - override val code: String = "sg" - - @Serializable(IetfLangSerializer::class) - object CF : Sango() { override val code: String = "sg-CF"; override val parentLang: Sango get() = Sango; } - - @Serializable(IetfLangSerializer::class) - companion object : Sango() - } - - - @Serializable(IetfLangSerializer::class) - sealed class SinhalaSinhalese : IetfLang() { - override val code: String = "si" - - @Serializable(IetfLangSerializer::class) - object LK : SinhalaSinhalese() { override val code: String = "si-LK"; override val parentLang: SinhalaSinhalese get() = SinhalaSinhalese; } - - @Serializable(IetfLangSerializer::class) - companion object : SinhalaSinhalese() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Slovak : IetfLang() { - override val code: String = "sk" - - @Serializable(IetfLangSerializer::class) - object SK : Slovak() { override val code: String = "sk-SK"; override val parentLang: Slovak get() = Slovak; } - - @Serializable(IetfLangSerializer::class) - companion object : Slovak() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Slovenian : IetfLang() { - override val code: String = "sl" - - @Serializable(IetfLangSerializer::class) - object SI : Slovenian() { override val code: String = "sl-SI"; override val parentLang: Slovenian get() = Slovenian; } - - @Serializable(IetfLangSerializer::class) - companion object : Slovenian() - } - - @Serializable(IetfLangSerializer::class) - object Samoan : IetfLang() { override val code: String = "sm" } - - @Serializable(IetfLangSerializer::class) - sealed class Shona : IetfLang() { - override val code: String = "sn" - - @Serializable(IetfLangSerializer::class) - object ZW : Shona() { override val code: String = "sn-ZW"; override val parentLang: Shona get() = Shona; } - - @Serializable(IetfLangSerializer::class) - companion object : Shona() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Somali : IetfLang() { - override val code: String = "so" - - @Serializable(IetfLangSerializer::class) - object DJ : Somali() { override val code: String = "so-DJ"; override val parentLang: Somali get() = Somali; } - @Serializable(IetfLangSerializer::class) - object ET : Somali() { override val code: String = "so-ET"; override val parentLang: Somali get() = Somali; } - @Serializable(IetfLangSerializer::class) - object KE : Somali() { override val code: String = "so-KE"; override val parentLang: Somali get() = Somali; } - @Serializable(IetfLangSerializer::class) - object SO : Somali() { override val code: String = "so-SO"; override val parentLang: Somali get() = Somali; } - - @Serializable(IetfLangSerializer::class) - companion object : Somali() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Albanian : IetfLang() { - override val code: String = "sq" - - @Serializable(IetfLangSerializer::class) - object AL : Albanian() { override val code: String = "sq-AL"; override val parentLang: Albanian get() = Albanian; } - @Serializable(IetfLangSerializer::class) - object MK : Albanian() { override val code: String = "sq-MK"; override val parentLang: Albanian get() = Albanian; } - @Serializable(IetfLangSerializer::class) - object XK : Albanian() { override val code: String = "sq-XK"; override val parentLang: Albanian get() = Albanian; } - - @Serializable(IetfLangSerializer::class) - companion object : Albanian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Serbian : IetfLang() { - override val code: String = "sr" - - - @Serializable(IetfLangSerializer::class) - sealed class Cyrl : Serbian() { - override val code: String = "sr-Cyrl" - override val parentLang: Serbian get() = Serbian; + sealed interface Cyrl : Uzbek { @Serializable(IetfLangSerializer::class) - object BA : Cyrl() { override val code: String = "sr-Cyrl-BA"; override val parentLang: Cyrl get() = Cyrl; } - @Serializable(IetfLangSerializer::class) - object ME : Cyrl() { override val code: String = "sr-Cyrl-ME"; override val parentLang: Cyrl get() = Cyrl; } - @Serializable(IetfLangSerializer::class) - object RS : Cyrl() { override val code: String = "sr-Cyrl-RS"; override val parentLang: Cyrl get() = Cyrl; } - @Serializable(IetfLangSerializer::class) - object XK : Cyrl() { override val code: String = "sr-Cyrl-XK"; override val parentLang: Cyrl get() = Cyrl; } + object UZ : Cyrl { override val code: String = "uz-Cyrl-UZ"; override val parentLang: Cyrl get() = Cyrl; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Cyrl() + companion object : Cyrl { + override val code: String = "uz-Cyrl" + override val parentLang: Uzbek get() = Uzbek; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Latn : Serbian() { - override val code: String = "sr-Latn" - override val parentLang: Serbian get() = Serbian; + sealed interface Latn : Uzbek { @Serializable(IetfLangSerializer::class) - object BA : Latn() { override val code: String = "sr-Latn-BA"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object ME : Latn() { override val code: String = "sr-Latn-ME"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object RS : Latn() { override val code: String = "sr-Latn-RS"; override val parentLang: Latn get() = Latn; } - @Serializable(IetfLangSerializer::class) - object XK : Latn() { override val code: String = "sr-Latn-XK"; override val parentLang: Latn get() = Latn; } + object UZ : Latn { override val code: String = "uz-Latn-UZ"; override val parentLang: Latn get() = Latn; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Latn() + companion object : Latn { + override val code: String = "uz-Latn" + override val parentLang: Uzbek get() = Uzbek; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : Serbian() + companion object : Uzbek { + override val code: String = "uz" + override fun toString() = code + } } - @Serializable(IetfLangSerializer::class) - object Swati : IetfLang() { override val code: String = "ss" } - @Serializable(IetfLangSerializer::class) - object SothoSouthern : IetfLang() { override val code: String = "st" } @Serializable(IetfLangSerializer::class) - sealed class Sundanese : IetfLang() { - override val code: String = "su" + sealed interface Vai : IetfLang { @Serializable(IetfLangSerializer::class) - sealed class Latn : Sundanese() { - override val code: String = "su-Latn" - override val parentLang: Sundanese get() = Sundanese; + sealed interface Latn : Vai { @Serializable(IetfLangSerializer::class) - object ID : Latn() { override val code: String = "su-Latn-ID"; override val parentLang: Latn get() = Latn; } + object LR : Latn { override val code: String = "vai-Latn-LR"; override val parentLang: Latn get() = Latn; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Latn() + companion object : Latn { + override val code: String = "vai-Latn" + override val parentLang: Vai get() = Vai; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - companion object : Sundanese() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Swedish : IetfLang() { - override val code: String = "sv" - - @Serializable(IetfLangSerializer::class) - object AX : Swedish() { override val code: String = "sv-AX"; override val parentLang: Swedish get() = Swedish; } - @Serializable(IetfLangSerializer::class) - object FI : Swedish() { override val code: String = "sv-FI"; override val parentLang: Swedish get() = Swedish; } - @Serializable(IetfLangSerializer::class) - object SE : Swedish() { override val code: String = "sv-SE"; override val parentLang: Swedish get() = Swedish; } - - @Serializable(IetfLangSerializer::class) - companion object : Swedish() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Swahili : IetfLang() { - override val code: String = "sw" - - @Serializable(IetfLangSerializer::class) - object CD : Swahili() { override val code: String = "sw-CD"; override val parentLang: Swahili get() = Swahili; } - @Serializable(IetfLangSerializer::class) - object KE : Swahili() { override val code: String = "sw-KE"; override val parentLang: Swahili get() = Swahili; } - @Serializable(IetfLangSerializer::class) - object TZ : Swahili() { override val code: String = "sw-TZ"; override val parentLang: Swahili get() = Swahili; } - @Serializable(IetfLangSerializer::class) - object UG : Swahili() { override val code: String = "sw-UG"; override val parentLang: Swahili get() = Swahili; } - - @Serializable(IetfLangSerializer::class) - companion object : Swahili() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Tamil : IetfLang() { - override val code: String = "ta" - - @Serializable(IetfLangSerializer::class) - object IN : Tamil() { override val code: String = "ta-IN"; override val parentLang: Tamil get() = Tamil; } - @Serializable(IetfLangSerializer::class) - object LK : Tamil() { override val code: String = "ta-LK"; override val parentLang: Tamil get() = Tamil; } - @Serializable(IetfLangSerializer::class) - object MY : Tamil() { override val code: String = "ta-MY"; override val parentLang: Tamil get() = Tamil; } - @Serializable(IetfLangSerializer::class) - object SG : Tamil() { override val code: String = "ta-SG"; override val parentLang: Tamil get() = Tamil; } - - @Serializable(IetfLangSerializer::class) - companion object : Tamil() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Telugu : IetfLang() { - override val code: String = "te" - - @Serializable(IetfLangSerializer::class) - object IN : Telugu() { override val code: String = "te-IN"; override val parentLang: Telugu get() = Telugu; } - - @Serializable(IetfLangSerializer::class) - companion object : Telugu() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Tajik : IetfLang() { - override val code: String = "tg" - - @Serializable(IetfLangSerializer::class) - object TJ : Tajik() { override val code: String = "tg-TJ"; override val parentLang: Tajik get() = Tajik; } - - @Serializable(IetfLangSerializer::class) - companion object : Tajik() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Thai : IetfLang() { - override val code: String = "th" - - @Serializable(IetfLangSerializer::class) - object TH : Thai() { override val code: String = "th-TH"; override val parentLang: Thai get() = Thai; } - - @Serializable(IetfLangSerializer::class) - companion object : Thai() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Tigrinya : IetfLang() { - override val code: String = "ti" - - @Serializable(IetfLangSerializer::class) - object ER : Tigrinya() { override val code: String = "ti-ER"; override val parentLang: Tigrinya get() = Tigrinya; } - @Serializable(IetfLangSerializer::class) - object ET : Tigrinya() { override val code: String = "ti-ET"; override val parentLang: Tigrinya get() = Tigrinya; } - - @Serializable(IetfLangSerializer::class) - companion object : Tigrinya() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Turkmen : IetfLang() { - override val code: String = "tk" - - @Serializable(IetfLangSerializer::class) - object TM : Turkmen() { override val code: String = "tk-TM"; override val parentLang: Turkmen get() = Turkmen; } - - @Serializable(IetfLangSerializer::class) - companion object : Turkmen() - } - - @Serializable(IetfLangSerializer::class) - object Tagalog : IetfLang() { override val code: String = "tl" } - @Serializable(IetfLangSerializer::class) - object Tswana : IetfLang() { override val code: String = "tn" } - - @Serializable(IetfLangSerializer::class) - sealed class TongaTongaIslands : IetfLang() { - override val code: String = "to" - - @Serializable(IetfLangSerializer::class) - object TO : TongaTongaIslands() { override val code: String = "to-TO"; override val parentLang: TongaTongaIslands get() = TongaTongaIslands; } - - @Serializable(IetfLangSerializer::class) - companion object : TongaTongaIslands() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Turkish : IetfLang() { - override val code: String = "tr" - - @Serializable(IetfLangSerializer::class) - object CY : Turkish() { override val code: String = "tr-CY"; override val parentLang: Turkish get() = Turkish; } - @Serializable(IetfLangSerializer::class) - object TR : Turkish() { override val code: String = "tr-TR"; override val parentLang: Turkish get() = Turkish; } - - @Serializable(IetfLangSerializer::class) - companion object : Turkish() - } - - @Serializable(IetfLangSerializer::class) - object Tsonga : IetfLang() { override val code: String = "ts" } - - @Serializable(IetfLangSerializer::class) - sealed class Tatar : IetfLang() { - override val code: String = "tt" - - @Serializable(IetfLangSerializer::class) - object RU : Tatar() { override val code: String = "tt-RU"; override val parentLang: Tatar get() = Tatar; } - - @Serializable(IetfLangSerializer::class) - companion object : Tatar() - } - - @Serializable(IetfLangSerializer::class) - object Twi : IetfLang() { override val code: String = "tw" } - @Serializable(IetfLangSerializer::class) - object Tahitian : IetfLang() { override val code: String = "ty" } - - @Serializable(IetfLangSerializer::class) - sealed class UighurUyghur : IetfLang() { - override val code: String = "ug" - - @Serializable(IetfLangSerializer::class) - object CN : UighurUyghur() { override val code: String = "ug-CN"; override val parentLang: UighurUyghur get() = UighurUyghur; } - - @Serializable(IetfLangSerializer::class) - companion object : UighurUyghur() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Ukrainian : IetfLang() { - override val code: String = "uk" - - @Serializable(IetfLangSerializer::class) - object UA : Ukrainian() { override val code: String = "uk-UA"; override val parentLang: Ukrainian get() = Ukrainian; } - - @Serializable(IetfLangSerializer::class) - companion object : Ukrainian() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Urdu : IetfLang() { - override val code: String = "ur" - - @Serializable(IetfLangSerializer::class) - object IN : Urdu() { override val code: String = "ur-IN"; override val parentLang: Urdu get() = Urdu; } - @Serializable(IetfLangSerializer::class) - object PK : Urdu() { override val code: String = "ur-PK"; override val parentLang: Urdu get() = Urdu; } - - @Serializable(IetfLangSerializer::class) - companion object : Urdu() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Uzbek : IetfLang() { - override val code: String = "uz" - - - @Serializable(IetfLangSerializer::class) - sealed class Arab : Uzbek() { - override val code: String = "uz-Arab" - override val parentLang: Uzbek get() = Uzbek; + sealed interface Vaii : Vai { @Serializable(IetfLangSerializer::class) - object AF : Arab() { override val code: String = "uz-Arab-AF"; override val parentLang: Arab get() = Arab; } + object LR : Vaii { override val code: String = "vai-Vaii-LR"; override val parentLang: Vaii get() = Vaii; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Arab() + companion object : Vaii { + override val code: String = "vai-Vaii" + override val parentLang: Vai get() = Vai; + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Cyrl : Uzbek() { - override val code: String = "uz-Cyrl" - override val parentLang: Uzbek get() = Uzbek; - - @Serializable(IetfLangSerializer::class) - object UZ : Cyrl() { override val code: String = "uz-Cyrl-UZ"; override val parentLang: Cyrl get() = Cyrl; } - - @Serializable(IetfLangSerializer::class) - companion object : Cyrl() + companion object : Vai { + override val code: String = "vai" + override fun toString() = code } + } + @Serializable(IetfLangSerializer::class) + object Venda : IetfLang { override val code: String = "ve"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Vietnamese : IetfLang { @Serializable(IetfLangSerializer::class) - sealed class Latn : Uzbek() { - override val code: String = "uz-Latn" - override val parentLang: Uzbek get() = Uzbek; + object VN : Vietnamese { override val code: String = "vi-VN"; override val parentLang: Vietnamese get() = Vietnamese; override fun toString() = code } - @Serializable(IetfLangSerializer::class) - object UZ : Latn() { override val code: String = "uz-Latn-UZ"; override val parentLang: Latn get() = Latn; } - - @Serializable(IetfLangSerializer::class) - companion object : Latn() + @Serializable(IetfLangSerializer::class) + companion object : Vietnamese { + override val code: String = "vi" + override fun toString() = code } - - - @Serializable(IetfLangSerializer::class) - companion object : Uzbek() - } - - @Serializable(IetfLangSerializer::class) - object Venda : IetfLang() { override val code: String = "ve" } - - @Serializable(IetfLangSerializer::class) - sealed class Vietnamese : IetfLang() { - override val code: String = "vi" - - @Serializable(IetfLangSerializer::class) - object VN : Vietnamese() { override val code: String = "vi-VN"; override val parentLang: Vietnamese get() = Vietnamese; } - - @Serializable(IetfLangSerializer::class) - companion object : Vietnamese() } @Serializable(IetfLangSerializer::class) - sealed class Volapuk : IetfLang() { - override val code: String = "vo" + sealed interface Volapuk : IetfLang { @Serializable(IetfLangSerializer::class) - object L001 : Volapuk() { override val code: String = "vo-001"; override val parentLang: Volapuk get() = Volapuk; } + object L001 : Volapuk { override val code: String = "vo-001"; override val parentLang: Volapuk get() = Volapuk; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Volapuk() - } - - @Serializable(IetfLangSerializer::class) - object Walloon : IetfLang() { override val code: String = "wa" } - - @Serializable(IetfLangSerializer::class) - sealed class Wolof : IetfLang() { - override val code: String = "wo" - - @Serializable(IetfLangSerializer::class) - object SN : Wolof() { override val code: String = "wo-SN"; override val parentLang: Wolof get() = Wolof; } - - @Serializable(IetfLangSerializer::class) - companion object : Wolof() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Xhosa : IetfLang() { - override val code: String = "xh" - - @Serializable(IetfLangSerializer::class) - object ZA : Xhosa() { override val code: String = "xh-ZA"; override val parentLang: Xhosa get() = Xhosa; } - - @Serializable(IetfLangSerializer::class) - companion object : Xhosa() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Yiddish : IetfLang() { - override val code: String = "yi" - - @Serializable(IetfLangSerializer::class) - object L001 : Yiddish() { override val code: String = "yi-001"; override val parentLang: Yiddish get() = Yiddish; } - - @Serializable(IetfLangSerializer::class) - companion object : Yiddish() - } - - - @Serializable(IetfLangSerializer::class) - sealed class Yoruba : IetfLang() { - override val code: String = "yo" - - @Serializable(IetfLangSerializer::class) - object BJ : Yoruba() { override val code: String = "yo-BJ"; override val parentLang: Yoruba get() = Yoruba; } - @Serializable(IetfLangSerializer::class) - object NG : Yoruba() { override val code: String = "yo-NG"; override val parentLang: Yoruba get() = Yoruba; } - - @Serializable(IetfLangSerializer::class) - companion object : Yoruba() - } - - @Serializable(IetfLangSerializer::class) - object ZhuangChuang : IetfLang() { override val code: String = "za" } - - @Serializable(IetfLangSerializer::class) - sealed class Chinese : IetfLang() { - override val code: String = "zh" - - - @Serializable(IetfLangSerializer::class) - sealed class Hans : Chinese() { - override val code: String = "zh-Hans" - override val parentLang: Chinese get() = Chinese; - - @Serializable(IetfLangSerializer::class) - object CN : Hans() { override val code: String = "zh-Hans-CN"; override val parentLang: Hans get() = Hans; } - @Serializable(IetfLangSerializer::class) - object HK : Hans() { override val code: String = "zh-Hans-HK"; override val parentLang: Hans get() = Hans; } - @Serializable(IetfLangSerializer::class) - object MO : Hans() { override val code: String = "zh-Hans-MO"; override val parentLang: Hans get() = Hans; } - @Serializable(IetfLangSerializer::class) - object SG : Hans() { override val code: String = "zh-Hans-SG"; override val parentLang: Hans get() = Hans; } - - @Serializable(IetfLangSerializer::class) - companion object : Hans() + companion object : Volapuk { + override val code: String = "vo" + override fun toString() = code } + } + @Serializable(IetfLangSerializer::class) + object Votic : IetfLang { override val code: String = "vot"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object WakashanLanguages : IetfLang { override val code: String = "wak"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Walamo : IetfLang { override val code: String = "wal"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Waray : IetfLang { override val code: String = "war"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Washo : IetfLang { override val code: String = "was"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Welsh : IetfLang { @Serializable(IetfLangSerializer::class) - sealed class Hant : Chinese() { - override val code: String = "zh-Hant" - override val parentLang: Chinese get() = Chinese; + object GB : Welsh { override val code: String = "cy-GB"; override val parentLang: Welsh get() = Welsh; override fun toString() = code } - @Serializable(IetfLangSerializer::class) - object HK : Hant() { override val code: String = "zh-Hant-HK"; override val parentLang: Hant get() = Hant; } - @Serializable(IetfLangSerializer::class) - object MO : Hant() { override val code: String = "zh-Hant-MO"; override val parentLang: Hant get() = Hant; } - @Serializable(IetfLangSerializer::class) - object TW : Hant() { override val code: String = "zh-Hant-TW"; override val parentLang: Hant get() = Hant; } - - @Serializable(IetfLangSerializer::class) - companion object : Hant() + @Serializable(IetfLangSerializer::class) + companion object : Welsh { + override val code: String = "cy" + override fun toString() = code } + } + @Serializable(IetfLangSerializer::class) + object SorbianLanguages : IetfLang { override val code: String = "wen"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Walloon : IetfLang { override val code: String = "wa"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Wolof : IetfLang { override val code: String = "wo"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object KalmykOirat : IetfLang { override val code: String = "xal"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Xhosa : IetfLang { override val code: String = "xh"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Yao : IetfLang { override val code: String = "yao"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Yapese : IetfLang { override val code: String = "yap"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Yiddish : IetfLang { @Serializable(IetfLangSerializer::class) - companion object : Chinese() + object L001 : Yiddish { override val code: String = "yi-001"; override val parentLang: Yiddish get() = Yiddish; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Yiddish { + override val code: String = "yi" + override fun toString() = code + } } @Serializable(IetfLangSerializer::class) - sealed class Zulu : IetfLang() { - override val code: String = "zu" + sealed interface Yoruba : IetfLang { @Serializable(IetfLangSerializer::class) - object ZA : Zulu() { override val code: String = "zu-ZA"; override val parentLang: Zulu get() = Zulu; } + object BJ : Yoruba { override val code: String = "yo-BJ"; override val parentLang: Yoruba get() = Yoruba; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NG : Yoruba { override val code: String = "yo-NG"; override val parentLang: Yoruba get() = Yoruba; override fun toString() = code } @Serializable(IetfLangSerializer::class) - companion object : Zulu() + companion object : Yoruba { + override val code: String = "yo" + override fun toString() = code + } } + @Serializable(IetfLangSerializer::class) + object YupikLanguages : IetfLang { override val code: String = "ypk"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Zapotec : IetfLang { override val code: String = "zap"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object BlissymbolsBlissymbolicsBliss : IetfLang { override val code: String = "zbl"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object Zenaga : IetfLang { override val code: String = "zen"; override fun toString() = code } @Serializable(IetfLangSerializer::class) - data class UnknownIetfLang (override val code: String) : IetfLang() { + sealed interface StandardMoroccanTamazight : IetfLang { + + @Serializable(IetfLangSerializer::class) + object MA : StandardMoroccanTamazight { override val code: String = "zgh-MA"; override val parentLang: StandardMoroccanTamazight get() = StandardMoroccanTamazight; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : StandardMoroccanTamazight { + override val code: String = "zgh" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object ZhuangChuang : IetfLang { override val code: String = "za"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ZandeLanguages : IetfLang { override val code: String = "znd"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + sealed interface Zulu : IetfLang { + + @Serializable(IetfLangSerializer::class) + object ZA : Zulu { override val code: String = "zu-ZA"; override val parentLang: Zulu get() = Zulu; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + companion object : Zulu { + override val code: String = "zu" + override fun toString() = code + } + } + + @Serializable(IetfLangSerializer::class) + object Zuni : IetfLang { override val code: String = "zun"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object NoLinguisticContentNotApplicable : IetfLang { override val code: String = "zxx"; override fun toString() = code } + @Serializable(IetfLangSerializer::class) + object ZazaDimiliDimliKirdkiKirmanjkiZazaki : IetfLang { override val code: String = "zza"; override fun toString() = code } + + @Serializable(IetfLangSerializer::class) + data class UnknownIetfLang (override val code: String) : IetfLang { override val parentLang = code.dropLastWhile { it != '-' }.removeSuffix("-").takeIf { it.length > 0 } ?.let(::UnknownIetfLang) } - @Deprecated("Renamed", ReplaceWith("UnknownIetfLang", "dev.inmo.micro_utils.language_codes.IetfLang.UnknownIetfLang")) - val UnknownIetfLanguageCode = UnknownIetfLang - - override fun toString() = code + @Deprecated("Renamed", ReplaceWith("IetfLang.UnknownIetfLang", "dev.inmo.micro_utils.language_codes.IetfLang.UnknownIetfLang")) + val UnknownIetfLanguageCode + get() = UnknownIetfLang } @Deprecated("Renamed", ReplaceWith("IetfLang", "dev.inmo.micro_utils.language_codes.IetfLang")) typealias IetfLanguageCode = IetfLang \ No newline at end of file diff --git a/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/StringToLanguageCodes.kt b/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/StringToLanguageCodes.kt index 1ce830e5321..9d9953224f3 100644 --- a/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/StringToLanguageCodes.kt +++ b/language_codes/src/commonMain/kotlin/dev/inmo/micro_utils/language_codes/StringToLanguageCodes.kt @@ -4,15 +4,31 @@ val knownLanguageCodesMap: Map by lazy { mapOf( IetfLang.Afar.code to IetfLang.Afar, IetfLang.Abkhazian.code to IetfLang.Abkhazian, - IetfLang.Avestan.code to IetfLang.Avestan, + IetfLang.Achinese.code to IetfLang.Achinese, + IetfLang.Acoli.code to IetfLang.Acoli, + IetfLang.Adangme.code to IetfLang.Adangme, + IetfLang.AdygheAdygei.code to IetfLang.AdygheAdygei, + IetfLang.AfroAsiaticLanguages.code to IetfLang.AfroAsiaticLanguages, + IetfLang.Afrihili.code to IetfLang.Afrihili, IetfLang.Afrikaans.code to IetfLang.Afrikaans, IetfLang.Afrikaans.NA.code to IetfLang.Afrikaans.NA, IetfLang.Afrikaans.ZA.code to IetfLang.Afrikaans.ZA, + IetfLang.Ainu.code to IetfLang.Ainu, IetfLang.Akan.code to IetfLang.Akan, IetfLang.Akan.GH.code to IetfLang.Akan.GH, + IetfLang.Akkadian.code to IetfLang.Akkadian, + IetfLang.Albanian.code to IetfLang.Albanian, + IetfLang.Albanian.AL.code to IetfLang.Albanian.AL, + IetfLang.Albanian.MK.code to IetfLang.Albanian.MK, + IetfLang.Albanian.XK.code to IetfLang.Albanian.XK, + IetfLang.Aleut.code to IetfLang.Aleut, + IetfLang.AlgonquianLanguages.code to IetfLang.AlgonquianLanguages, + IetfLang.SouthernAltai.code to IetfLang.SouthernAltai, IetfLang.Amharic.code to IetfLang.Amharic, IetfLang.Amharic.ET.code to IetfLang.Amharic.ET, - IetfLang.Aragonese.code to IetfLang.Aragonese, + IetfLang.EnglishOldCa_4501100.code to IetfLang.EnglishOldCa_4501100, + IetfLang.Angika.code to IetfLang.Angika, + IetfLang.ApacheLanguages.code to IetfLang.ApacheLanguages, IetfLang.Arabic.code to IetfLang.Arabic, IetfLang.Arabic.L001.code to IetfLang.Arabic.L001, IetfLang.Arabic.AE.code to IetfLang.Arabic.AE, @@ -42,79 +58,162 @@ val knownLanguageCodesMap: Map by lazy { IetfLang.Arabic.TD.code to IetfLang.Arabic.TD, IetfLang.Arabic.TN.code to IetfLang.Arabic.TN, IetfLang.Arabic.YE.code to IetfLang.Arabic.YE, + IetfLang.OfficialAramaic700300BCEImperialAramaic700300BCE.code to IetfLang.OfficialAramaic700300BCEImperialAramaic700300BCE, + IetfLang.Aragonese.code to IetfLang.Aragonese, + IetfLang.Armenian.code to IetfLang.Armenian, + IetfLang.Armenian.AM.code to IetfLang.Armenian.AM, + IetfLang.MapudungunMapuche.code to IetfLang.MapudungunMapuche, + IetfLang.Arapaho.code to IetfLang.Arapaho, + IetfLang.ArtificialLanguages.code to IetfLang.ArtificialLanguages, + IetfLang.Arawak.code to IetfLang.Arawak, IetfLang.Assamese.code to IetfLang.Assamese, IetfLang.Assamese.IN.code to IetfLang.Assamese.IN, + IetfLang.AsturianBableLeoneseAsturleonese.code to IetfLang.AsturianBableLeoneseAsturleonese, + IetfLang.AsturianBableLeoneseAsturleonese.ES.code to IetfLang.AsturianBableLeoneseAsturleonese.ES, + IetfLang.AthapascanLanguages.code to IetfLang.AthapascanLanguages, + IetfLang.AustralianLanguages.code to IetfLang.AustralianLanguages, IetfLang.Avaric.code to IetfLang.Avaric, + IetfLang.Avestan.code to IetfLang.Avestan, + IetfLang.Awadhi.code to IetfLang.Awadhi, IetfLang.Aymara.code to IetfLang.Aymara, IetfLang.Azerbaijani.code to IetfLang.Azerbaijani, IetfLang.Azerbaijani.Cyrl.code to IetfLang.Azerbaijani.Cyrl, IetfLang.Azerbaijani.Cyrl.AZ.code to IetfLang.Azerbaijani.Cyrl.AZ, IetfLang.Azerbaijani.Latn.code to IetfLang.Azerbaijani.Latn, IetfLang.Azerbaijani.Latn.AZ.code to IetfLang.Azerbaijani.Latn.AZ, + IetfLang.BandaLanguages.code to IetfLang.BandaLanguages, + IetfLang.BamilekeLanguages.code to IetfLang.BamilekeLanguages, IetfLang.Bashkir.code to IetfLang.Bashkir, - IetfLang.Belarusian.code to IetfLang.Belarusian, - IetfLang.Belarusian.BY.code to IetfLang.Belarusian.BY, - IetfLang.Bulgarian.code to IetfLang.Bulgarian, - IetfLang.Bulgarian.BG.code to IetfLang.Bulgarian.BG, - IetfLang.BihariLanguages.code to IetfLang.BihariLanguages, - IetfLang.Bislama.code to IetfLang.Bislama, + IetfLang.Baluchi.code to IetfLang.Baluchi, IetfLang.Bambara.code to IetfLang.Bambara, IetfLang.Bambara.ML.code to IetfLang.Bambara.ML, + IetfLang.Balinese.code to IetfLang.Balinese, + IetfLang.Basque.code to IetfLang.Basque, + IetfLang.Basque.ES.code to IetfLang.Basque.ES, + IetfLang.Basa.code to IetfLang.Basa, + IetfLang.Basa.CM.code to IetfLang.Basa.CM, + IetfLang.BalticLanguages.code to IetfLang.BalticLanguages, + IetfLang.BejaBedawiyet.code to IetfLang.BejaBedawiyet, + IetfLang.Belarusian.code to IetfLang.Belarusian, + IetfLang.Belarusian.BY.code to IetfLang.Belarusian.BY, + IetfLang.Bemba.code to IetfLang.Bemba, + IetfLang.Bemba.ZM.code to IetfLang.Bemba.ZM, IetfLang.Bengali.code to IetfLang.Bengali, IetfLang.Bengali.BD.code to IetfLang.Bengali.BD, IetfLang.Bengali.IN.code to IetfLang.Bengali.IN, - IetfLang.Tibetan.code to IetfLang.Tibetan, - IetfLang.Tibetan.CN.code to IetfLang.Tibetan.CN, - IetfLang.Tibetan.IN.code to IetfLang.Tibetan.IN, - IetfLang.Breton.code to IetfLang.Breton, - IetfLang.Breton.FR.code to IetfLang.Breton.FR, + IetfLang.BerberLanguages.code to IetfLang.BerberLanguages, + IetfLang.Bhojpuri.code to IetfLang.Bhojpuri, + IetfLang.BihariLanguages.code to IetfLang.BihariLanguages, + IetfLang.Bikol.code to IetfLang.Bikol, + IetfLang.BiniEdo.code to IetfLang.BiniEdo, + IetfLang.Bislama.code to IetfLang.Bislama, + IetfLang.Siksika.code to IetfLang.Siksika, + IetfLang.BantuOther.code to IetfLang.BantuOther, IetfLang.Bosnian.code to IetfLang.Bosnian, IetfLang.Bosnian.Cyrl.code to IetfLang.Bosnian.Cyrl, IetfLang.Bosnian.Cyrl.BA.code to IetfLang.Bosnian.Cyrl.BA, IetfLang.Bosnian.Latn.code to IetfLang.Bosnian.Latn, IetfLang.Bosnian.Latn.BA.code to IetfLang.Bosnian.Latn.BA, + IetfLang.Braj.code to IetfLang.Braj, + IetfLang.Breton.code to IetfLang.Breton, + IetfLang.Breton.FR.code to IetfLang.Breton.FR, + IetfLang.BatakLanguages.code to IetfLang.BatakLanguages, + IetfLang.Buriat.code to IetfLang.Buriat, + IetfLang.Buginese.code to IetfLang.Buginese, + IetfLang.Bulgarian.code to IetfLang.Bulgarian, + IetfLang.Bulgarian.BG.code to IetfLang.Bulgarian.BG, + IetfLang.Burmese.code to IetfLang.Burmese, + IetfLang.Burmese.MM.code to IetfLang.Burmese.MM, + IetfLang.BlinBilin.code to IetfLang.BlinBilin, + IetfLang.Caddo.code to IetfLang.Caddo, + IetfLang.CentralAmericanIndianLanguages.code to IetfLang.CentralAmericanIndianLanguages, + IetfLang.GalibiCarib.code to IetfLang.GalibiCarib, IetfLang.CatalanValencian.code to IetfLang.CatalanValencian, IetfLang.CatalanValencian.AD.code to IetfLang.CatalanValencian.AD, IetfLang.CatalanValencian.ES.code to IetfLang.CatalanValencian.ES, IetfLang.CatalanValencian.ES.VALENCIA.code to IetfLang.CatalanValencian.ES.VALENCIA, IetfLang.CatalanValencian.FR.code to IetfLang.CatalanValencian.FR, IetfLang.CatalanValencian.IT.code to IetfLang.CatalanValencian.IT, + IetfLang.CaucasianLanguages.code to IetfLang.CaucasianLanguages, + IetfLang.Cebuano.code to IetfLang.Cebuano, + IetfLang.CelticLanguages.code to IetfLang.CelticLanguages, + IetfLang.Chamorro.code to IetfLang.Chamorro, + IetfLang.Chibcha.code to IetfLang.Chibcha, IetfLang.Chechen.code to IetfLang.Chechen, IetfLang.Chechen.RU.code to IetfLang.Chechen.RU, - IetfLang.Chamorro.code to IetfLang.Chamorro, - IetfLang.Corsican.code to IetfLang.Corsican, - IetfLang.Cree.code to IetfLang.Cree, - IetfLang.Czech.code to IetfLang.Czech, - IetfLang.Czech.CZ.code to IetfLang.Czech.CZ, + IetfLang.Chagatai.code to IetfLang.Chagatai, + IetfLang.Chinese.code to IetfLang.Chinese, + IetfLang.Chinese.Hans.code to IetfLang.Chinese.Hans, + IetfLang.Chinese.Hans.CN.code to IetfLang.Chinese.Hans.CN, + IetfLang.Chinese.Hans.HK.code to IetfLang.Chinese.Hans.HK, + IetfLang.Chinese.Hans.MO.code to IetfLang.Chinese.Hans.MO, + IetfLang.Chinese.Hans.SG.code to IetfLang.Chinese.Hans.SG, + IetfLang.Chinese.Hant.code to IetfLang.Chinese.Hant, + IetfLang.Chinese.Hant.HK.code to IetfLang.Chinese.Hant.HK, + IetfLang.Chinese.Hant.MO.code to IetfLang.Chinese.Hant.MO, + IetfLang.Chinese.Hant.TW.code to IetfLang.Chinese.Hant.TW, + IetfLang.Chuukese.code to IetfLang.Chuukese, + IetfLang.Mari.code to IetfLang.Mari, + IetfLang.ChinookJargon.code to IetfLang.ChinookJargon, + IetfLang.Choctaw.code to IetfLang.Choctaw, + IetfLang.ChipewyanDeneSuline.code to IetfLang.ChipewyanDeneSuline, + IetfLang.Cherokee.code to IetfLang.Cherokee, + IetfLang.Cherokee.US.code to IetfLang.Cherokee.US, IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic.code to IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic, IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic.RU.code to IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic.RU, IetfLang.Chuvash.code to IetfLang.Chuvash, - IetfLang.Welsh.code to IetfLang.Welsh, - IetfLang.Welsh.GB.code to IetfLang.Welsh.GB, + IetfLang.Cheyenne.code to IetfLang.Cheyenne, + IetfLang.ChamicLanguages.code to IetfLang.ChamicLanguages, + IetfLang.Coptic.code to IetfLang.Coptic, + IetfLang.Cornish.code to IetfLang.Cornish, + IetfLang.Cornish.GB.code to IetfLang.Cornish.GB, + IetfLang.Corsican.code to IetfLang.Corsican, + IetfLang.CreolesAndPidginsEnglishBased.code to IetfLang.CreolesAndPidginsEnglishBased, + IetfLang.CreolesAndPidginsFrenchbased.code to IetfLang.CreolesAndPidginsFrenchbased, + IetfLang.CreolesAndPidginsPortuguesebased.code to IetfLang.CreolesAndPidginsPortuguesebased, + IetfLang.Cree.code to IetfLang.Cree, + IetfLang.CrimeanTatarCrimeanTurkish.code to IetfLang.CrimeanTatarCrimeanTurkish, + IetfLang.CreolesAndPidgins.code to IetfLang.CreolesAndPidgins, + IetfLang.Kashubian.code to IetfLang.Kashubian, + IetfLang.CushiticLanguages.code to IetfLang.CushiticLanguages, + IetfLang.Czech.code to IetfLang.Czech, + IetfLang.Czech.CZ.code to IetfLang.Czech.CZ, + IetfLang.Dakota.code to IetfLang.Dakota, IetfLang.Danish.code to IetfLang.Danish, IetfLang.Danish.DK.code to IetfLang.Danish.DK, IetfLang.Danish.GL.code to IetfLang.Danish.GL, - IetfLang.German.code to IetfLang.German, - IetfLang.German.AT.code to IetfLang.German.AT, - IetfLang.German.BE.code to IetfLang.German.BE, - IetfLang.German.CH.code to IetfLang.German.CH, - IetfLang.German.DE.code to IetfLang.German.DE, - IetfLang.German.IT.code to IetfLang.German.IT, - IetfLang.German.LI.code to IetfLang.German.LI, - IetfLang.German.LU.code to IetfLang.German.LU, + IetfLang.Dargwa.code to IetfLang.Dargwa, + IetfLang.LandDayakLanguages.code to IetfLang.LandDayakLanguages, + IetfLang.Delaware.code to IetfLang.Delaware, + IetfLang.SlaveAthapascan.code to IetfLang.SlaveAthapascan, + IetfLang.Dogrib.code to IetfLang.Dogrib, + IetfLang.Dinka.code to IetfLang.Dinka, IetfLang.DivehiDhivehiMaldivian.code to IetfLang.DivehiDhivehiMaldivian, + IetfLang.Dogri.code to IetfLang.Dogri, + IetfLang.DravidianLanguages.code to IetfLang.DravidianLanguages, + IetfLang.LowerSorbian.code to IetfLang.LowerSorbian, + IetfLang.LowerSorbian.DE.code to IetfLang.LowerSorbian.DE, + IetfLang.Duala.code to IetfLang.Duala, + IetfLang.Duala.CM.code to IetfLang.Duala.CM, + IetfLang.DutchMiddleCa_10501350.code to IetfLang.DutchMiddleCa_10501350, + IetfLang.DutchFlemish.code to IetfLang.DutchFlemish, + IetfLang.DutchFlemish.AW.code to IetfLang.DutchFlemish.AW, + IetfLang.DutchFlemish.BE.code to IetfLang.DutchFlemish.BE, + IetfLang.DutchFlemish.BQ.code to IetfLang.DutchFlemish.BQ, + IetfLang.DutchFlemish.CW.code to IetfLang.DutchFlemish.CW, + IetfLang.DutchFlemish.NL.code to IetfLang.DutchFlemish.NL, + IetfLang.DutchFlemish.SR.code to IetfLang.DutchFlemish.SR, + IetfLang.DutchFlemish.SX.code to IetfLang.DutchFlemish.SX, + IetfLang.Dyula.code to IetfLang.Dyula, IetfLang.Dzongkha.code to IetfLang.Dzongkha, IetfLang.Dzongkha.BT.code to IetfLang.Dzongkha.BT, - IetfLang.Ewe.code to IetfLang.Ewe, - IetfLang.Ewe.GH.code to IetfLang.Ewe.GH, - IetfLang.Ewe.TG.code to IetfLang.Ewe.TG, - IetfLang.GreekModern1453.code to IetfLang.GreekModern1453, - IetfLang.GreekModern1453.CY.code to IetfLang.GreekModern1453.CY, - IetfLang.GreekModern1453.GR.code to IetfLang.GreekModern1453.GR, + IetfLang.Efik.code to IetfLang.Efik, + IetfLang.EgyptianAncient.code to IetfLang.EgyptianAncient, + IetfLang.Ekajuk.code to IetfLang.Ekajuk, + IetfLang.Elamite.code to IetfLang.Elamite, IetfLang.English.code to IetfLang.English, IetfLang.English.L001.code to IetfLang.English.L001, IetfLang.English.L150.code to IetfLang.English.L150, - IetfLang.English.AE.code to IetfLang.English.AE, IetfLang.English.AG.code to IetfLang.English.AG, IetfLang.English.AI.code to IetfLang.English.AI, IetfLang.English.AS.code to IetfLang.English.AS, @@ -218,77 +317,28 @@ val knownLanguageCodesMap: Map by lazy { IetfLang.English.ZA.code to IetfLang.English.ZA, IetfLang.English.ZM.code to IetfLang.English.ZM, IetfLang.English.ZW.code to IetfLang.English.ZW, + IetfLang.EnglishMiddle11001500.code to IetfLang.EnglishMiddle11001500, IetfLang.Esperanto.code to IetfLang.Esperanto, IetfLang.Esperanto.L001.code to IetfLang.Esperanto.L001, - IetfLang.SpanishCastilian.code to IetfLang.SpanishCastilian, - IetfLang.SpanishCastilian.L419.code to IetfLang.SpanishCastilian.L419, - IetfLang.SpanishCastilian.AR.code to IetfLang.SpanishCastilian.AR, - IetfLang.SpanishCastilian.BO.code to IetfLang.SpanishCastilian.BO, - IetfLang.SpanishCastilian.BR.code to IetfLang.SpanishCastilian.BR, - IetfLang.SpanishCastilian.BZ.code to IetfLang.SpanishCastilian.BZ, - IetfLang.SpanishCastilian.CL.code to IetfLang.SpanishCastilian.CL, - IetfLang.SpanishCastilian.CO.code to IetfLang.SpanishCastilian.CO, - IetfLang.SpanishCastilian.CR.code to IetfLang.SpanishCastilian.CR, - IetfLang.SpanishCastilian.CU.code to IetfLang.SpanishCastilian.CU, - IetfLang.SpanishCastilian.DO.code to IetfLang.SpanishCastilian.DO, - IetfLang.SpanishCastilian.EA.code to IetfLang.SpanishCastilian.EA, - IetfLang.SpanishCastilian.EC.code to IetfLang.SpanishCastilian.EC, - IetfLang.SpanishCastilian.ES.code to IetfLang.SpanishCastilian.ES, - IetfLang.SpanishCastilian.GQ.code to IetfLang.SpanishCastilian.GQ, - IetfLang.SpanishCastilian.GT.code to IetfLang.SpanishCastilian.GT, - IetfLang.SpanishCastilian.HN.code to IetfLang.SpanishCastilian.HN, - IetfLang.SpanishCastilian.IC.code to IetfLang.SpanishCastilian.IC, - IetfLang.SpanishCastilian.MX.code to IetfLang.SpanishCastilian.MX, - IetfLang.SpanishCastilian.NI.code to IetfLang.SpanishCastilian.NI, - IetfLang.SpanishCastilian.PA.code to IetfLang.SpanishCastilian.PA, - IetfLang.SpanishCastilian.PE.code to IetfLang.SpanishCastilian.PE, - IetfLang.SpanishCastilian.PH.code to IetfLang.SpanishCastilian.PH, - IetfLang.SpanishCastilian.PR.code to IetfLang.SpanishCastilian.PR, - IetfLang.SpanishCastilian.PY.code to IetfLang.SpanishCastilian.PY, - IetfLang.SpanishCastilian.SV.code to IetfLang.SpanishCastilian.SV, - IetfLang.SpanishCastilian.US.code to IetfLang.SpanishCastilian.US, - IetfLang.SpanishCastilian.UY.code to IetfLang.SpanishCastilian.UY, - IetfLang.SpanishCastilian.VE.code to IetfLang.SpanishCastilian.VE, IetfLang.Estonian.code to IetfLang.Estonian, IetfLang.Estonian.EE.code to IetfLang.Estonian.EE, - IetfLang.Basque.code to IetfLang.Basque, - IetfLang.Basque.ES.code to IetfLang.Basque.ES, - IetfLang.Persian.code to IetfLang.Persian, - IetfLang.Persian.AF.code to IetfLang.Persian.AF, - IetfLang.Persian.IR.code to IetfLang.Persian.IR, - IetfLang.Fulah.code to IetfLang.Fulah, - IetfLang.Fulah.Adlm.code to IetfLang.Fulah.Adlm, - IetfLang.Fulah.Adlm.BF.code to IetfLang.Fulah.Adlm.BF, - IetfLang.Fulah.Adlm.CM.code to IetfLang.Fulah.Adlm.CM, - IetfLang.Fulah.Adlm.GH.code to IetfLang.Fulah.Adlm.GH, - IetfLang.Fulah.Adlm.GM.code to IetfLang.Fulah.Adlm.GM, - IetfLang.Fulah.Adlm.GN.code to IetfLang.Fulah.Adlm.GN, - IetfLang.Fulah.Adlm.GW.code to IetfLang.Fulah.Adlm.GW, - IetfLang.Fulah.Adlm.LR.code to IetfLang.Fulah.Adlm.LR, - IetfLang.Fulah.Adlm.MR.code to IetfLang.Fulah.Adlm.MR, - IetfLang.Fulah.Adlm.NE.code to IetfLang.Fulah.Adlm.NE, - IetfLang.Fulah.Adlm.NG.code to IetfLang.Fulah.Adlm.NG, - IetfLang.Fulah.Adlm.SL.code to IetfLang.Fulah.Adlm.SL, - IetfLang.Fulah.Adlm.SN.code to IetfLang.Fulah.Adlm.SN, - IetfLang.Fulah.Latn.code to IetfLang.Fulah.Latn, - IetfLang.Fulah.Latn.BF.code to IetfLang.Fulah.Latn.BF, - IetfLang.Fulah.Latn.CM.code to IetfLang.Fulah.Latn.CM, - IetfLang.Fulah.Latn.GH.code to IetfLang.Fulah.Latn.GH, - IetfLang.Fulah.Latn.GM.code to IetfLang.Fulah.Latn.GM, - IetfLang.Fulah.Latn.GN.code to IetfLang.Fulah.Latn.GN, - IetfLang.Fulah.Latn.GW.code to IetfLang.Fulah.Latn.GW, - IetfLang.Fulah.Latn.LR.code to IetfLang.Fulah.Latn.LR, - IetfLang.Fulah.Latn.MR.code to IetfLang.Fulah.Latn.MR, - IetfLang.Fulah.Latn.NE.code to IetfLang.Fulah.Latn.NE, - IetfLang.Fulah.Latn.NG.code to IetfLang.Fulah.Latn.NG, - IetfLang.Fulah.Latn.SL.code to IetfLang.Fulah.Latn.SL, - IetfLang.Fulah.Latn.SN.code to IetfLang.Fulah.Latn.SN, - IetfLang.Finnish.code to IetfLang.Finnish, - IetfLang.Finnish.FI.code to IetfLang.Finnish.FI, - IetfLang.Fijian.code to IetfLang.Fijian, + IetfLang.Ewe.code to IetfLang.Ewe, + IetfLang.Ewe.GH.code to IetfLang.Ewe.GH, + IetfLang.Ewe.TG.code to IetfLang.Ewe.TG, + IetfLang.Ewondo.code to IetfLang.Ewondo, + IetfLang.Ewondo.CM.code to IetfLang.Ewondo.CM, + IetfLang.Fang.code to IetfLang.Fang, IetfLang.Faroese.code to IetfLang.Faroese, IetfLang.Faroese.DK.code to IetfLang.Faroese.DK, IetfLang.Faroese.FO.code to IetfLang.Faroese.FO, + IetfLang.Fanti.code to IetfLang.Fanti, + IetfLang.Fijian.code to IetfLang.Fijian, + IetfLang.FilipinoPilipino.code to IetfLang.FilipinoPilipino, + IetfLang.FilipinoPilipino.PH.code to IetfLang.FilipinoPilipino.PH, + IetfLang.Finnish.code to IetfLang.Finnish, + IetfLang.Finnish.FI.code to IetfLang.Finnish.FI, + IetfLang.FinnoUgrianLanguages.code to IetfLang.FinnoUgrianLanguages, + IetfLang.Fon.code to IetfLang.Fon, IetfLang.French.code to IetfLang.French, IetfLang.French.BE.code to IetfLang.French.BE, IetfLang.French.BF.code to IetfLang.French.BF, @@ -336,175 +386,315 @@ val knownLanguageCodesMap: Map by lazy { IetfLang.French.VU.code to IetfLang.French.VU, IetfLang.French.WF.code to IetfLang.French.WF, IetfLang.French.YT.code to IetfLang.French.YT, + IetfLang.FrenchMiddleCa_14001600.code to IetfLang.FrenchMiddleCa_14001600, + IetfLang.FrenchOld842ca_1400.code to IetfLang.FrenchOld842ca_1400, + IetfLang.NorthernFrisian.code to IetfLang.NorthernFrisian, + IetfLang.EasternFrisian.code to IetfLang.EasternFrisian, IetfLang.WesternFrisian.code to IetfLang.WesternFrisian, IetfLang.WesternFrisian.NL.code to IetfLang.WesternFrisian.NL, - IetfLang.Irish.code to IetfLang.Irish, - IetfLang.Irish.GB.code to IetfLang.Irish.GB, - IetfLang.Irish.IE.code to IetfLang.Irish.IE, + IetfLang.Fulah.code to IetfLang.Fulah, + IetfLang.Fulah.CM.code to IetfLang.Fulah.CM, + IetfLang.Fulah.GN.code to IetfLang.Fulah.GN, + IetfLang.Fulah.MR.code to IetfLang.Fulah.MR, + IetfLang.Fulah.SN.code to IetfLang.Fulah.SN, + IetfLang.Friulian.code to IetfLang.Friulian, + IetfLang.Friulian.IT.code to IetfLang.Friulian.IT, + IetfLang.Ga.code to IetfLang.Ga, + IetfLang.Gayo.code to IetfLang.Gayo, + IetfLang.Gbaya.code to IetfLang.Gbaya, + IetfLang.GermanicLanguages.code to IetfLang.GermanicLanguages, + IetfLang.Georgian.code to IetfLang.Georgian, + IetfLang.Georgian.GE.code to IetfLang.Georgian.GE, + IetfLang.German.code to IetfLang.German, + IetfLang.German.AT.code to IetfLang.German.AT, + IetfLang.German.BE.code to IetfLang.German.BE, + IetfLang.German.CH.code to IetfLang.German.CH, + IetfLang.German.DE.code to IetfLang.German.DE, + IetfLang.German.IT.code to IetfLang.German.IT, + IetfLang.German.LI.code to IetfLang.German.LI, + IetfLang.German.LU.code to IetfLang.German.LU, + IetfLang.Geez.code to IetfLang.Geez, + IetfLang.Gilbertese.code to IetfLang.Gilbertese, IetfLang.GaelicScottishGaelic.code to IetfLang.GaelicScottishGaelic, IetfLang.GaelicScottishGaelic.GB.code to IetfLang.GaelicScottishGaelic.GB, + IetfLang.Irish.code to IetfLang.Irish, + IetfLang.Irish.IE.code to IetfLang.Irish.IE, IetfLang.Galician.code to IetfLang.Galician, IetfLang.Galician.ES.code to IetfLang.Galician.ES, - IetfLang.Guarani.code to IetfLang.Guarani, - IetfLang.Gujarati.code to IetfLang.Gujarati, - IetfLang.Gujarati.IN.code to IetfLang.Gujarati.IN, IetfLang.Manx.code to IetfLang.Manx, IetfLang.Manx.IM.code to IetfLang.Manx.IM, + IetfLang.GermanMiddleHighCa_10501500.code to IetfLang.GermanMiddleHighCa_10501500, + IetfLang.GermanOldHighCa_7501050.code to IetfLang.GermanOldHighCa_7501050, + IetfLang.Gondi.code to IetfLang.Gondi, + IetfLang.Gorontalo.code to IetfLang.Gorontalo, + IetfLang.Gothic.code to IetfLang.Gothic, + IetfLang.Grebo.code to IetfLang.Grebo, + IetfLang.GreekAncientTo1453.code to IetfLang.GreekAncientTo1453, + IetfLang.GreekModern1453.code to IetfLang.GreekModern1453, + IetfLang.GreekModern1453.CY.code to IetfLang.GreekModern1453.CY, + IetfLang.GreekModern1453.GR.code to IetfLang.GreekModern1453.GR, + IetfLang.Guarani.code to IetfLang.Guarani, + IetfLang.SwissGermanAlemannicAlsatian.code to IetfLang.SwissGermanAlemannicAlsatian, + IetfLang.SwissGermanAlemannicAlsatian.CH.code to IetfLang.SwissGermanAlemannicAlsatian.CH, + IetfLang.SwissGermanAlemannicAlsatian.FR.code to IetfLang.SwissGermanAlemannicAlsatian.FR, + IetfLang.SwissGermanAlemannicAlsatian.LI.code to IetfLang.SwissGermanAlemannicAlsatian.LI, + IetfLang.Gujarati.code to IetfLang.Gujarati, + IetfLang.Gujarati.IN.code to IetfLang.Gujarati.IN, + IetfLang.Gwich_in.code to IetfLang.Gwich_in, + IetfLang.Haida.code to IetfLang.Haida, + IetfLang.HaitianHaitianCreole.code to IetfLang.HaitianHaitianCreole, IetfLang.Hausa.code to IetfLang.Hausa, IetfLang.Hausa.GH.code to IetfLang.Hausa.GH, IetfLang.Hausa.NE.code to IetfLang.Hausa.NE, IetfLang.Hausa.NG.code to IetfLang.Hausa.NG, + IetfLang.Hawaiian.code to IetfLang.Hawaiian, + IetfLang.Hawaiian.US.code to IetfLang.Hawaiian.US, IetfLang.Hebrew.code to IetfLang.Hebrew, IetfLang.Hebrew.IL.code to IetfLang.Hebrew.IL, + IetfLang.Herero.code to IetfLang.Herero, + IetfLang.Hiligaynon.code to IetfLang.Hiligaynon, + IetfLang.HimachaliLanguagesWesternPahariLanguages.code to IetfLang.HimachaliLanguagesWesternPahariLanguages, IetfLang.Hindi.code to IetfLang.Hindi, IetfLang.Hindi.IN.code to IetfLang.Hindi.IN, + IetfLang.Hittite.code to IetfLang.Hittite, + IetfLang.HmongMong.code to IetfLang.HmongMong, IetfLang.HiriMotu.code to IetfLang.HiriMotu, IetfLang.Croatian.code to IetfLang.Croatian, IetfLang.Croatian.BA.code to IetfLang.Croatian.BA, IetfLang.Croatian.HR.code to IetfLang.Croatian.HR, - IetfLang.HaitianHaitianCreole.code to IetfLang.HaitianHaitianCreole, + IetfLang.UpperSorbian.code to IetfLang.UpperSorbian, + IetfLang.UpperSorbian.DE.code to IetfLang.UpperSorbian.DE, IetfLang.Hungarian.code to IetfLang.Hungarian, IetfLang.Hungarian.HU.code to IetfLang.Hungarian.HU, - IetfLang.Armenian.code to IetfLang.Armenian, - IetfLang.Armenian.AM.code to IetfLang.Armenian.AM, - IetfLang.Herero.code to IetfLang.Herero, - IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.code to IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation, - IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.L001.code to IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.L001, - IetfLang.Indonesian.code to IetfLang.Indonesian, - IetfLang.Indonesian.ID.code to IetfLang.Indonesian.ID, - IetfLang.InterlingueOccidental.code to IetfLang.InterlingueOccidental, + IetfLang.Hupa.code to IetfLang.Hupa, + IetfLang.Iban.code to IetfLang.Iban, IetfLang.Igbo.code to IetfLang.Igbo, IetfLang.Igbo.NG.code to IetfLang.Igbo.NG, - IetfLang.SichuanYiNuosu.code to IetfLang.SichuanYiNuosu, - IetfLang.SichuanYiNuosu.CN.code to IetfLang.SichuanYiNuosu.CN, - IetfLang.Inupiaq.code to IetfLang.Inupiaq, - IetfLang.Ido.code to IetfLang.Ido, IetfLang.Icelandic.code to IetfLang.Icelandic, IetfLang.Icelandic.IS.code to IetfLang.Icelandic.IS, + IetfLang.Ido.code to IetfLang.Ido, + IetfLang.SichuanYiNuosu.code to IetfLang.SichuanYiNuosu, + IetfLang.SichuanYiNuosu.CN.code to IetfLang.SichuanYiNuosu.CN, + IetfLang.IjoLanguages.code to IetfLang.IjoLanguages, + IetfLang.Inuktitut.code to IetfLang.Inuktitut, + IetfLang.InterlingueOccidental.code to IetfLang.InterlingueOccidental, + IetfLang.Iloko.code to IetfLang.Iloko, + IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.code to IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation, + IetfLang.IndicLanguages.code to IetfLang.IndicLanguages, + IetfLang.Indonesian.code to IetfLang.Indonesian, + IetfLang.Indonesian.ID.code to IetfLang.Indonesian.ID, + IetfLang.IndoEuropeanLanguages.code to IetfLang.IndoEuropeanLanguages, + IetfLang.Ingush.code to IetfLang.Ingush, + IetfLang.Inupiaq.code to IetfLang.Inupiaq, + IetfLang.IranianLanguages.code to IetfLang.IranianLanguages, + IetfLang.IroquoianLanguages.code to IetfLang.IroquoianLanguages, IetfLang.Italian.code to IetfLang.Italian, IetfLang.Italian.CH.code to IetfLang.Italian.CH, IetfLang.Italian.IT.code to IetfLang.Italian.IT, IetfLang.Italian.SM.code to IetfLang.Italian.SM, IetfLang.Italian.VA.code to IetfLang.Italian.VA, - IetfLang.Inuktitut.code to IetfLang.Inuktitut, + IetfLang.Javanese.code to IetfLang.Javanese, + IetfLang.Lojban.code to IetfLang.Lojban, IetfLang.Japanese.code to IetfLang.Japanese, IetfLang.Japanese.JP.code to IetfLang.Japanese.JP, - IetfLang.Javanese.code to IetfLang.Javanese, - IetfLang.Javanese.ID.code to IetfLang.Javanese.ID, - IetfLang.Georgian.code to IetfLang.Georgian, - IetfLang.Georgian.GE.code to IetfLang.Georgian.GE, - IetfLang.Kongo.code to IetfLang.Kongo, - IetfLang.KikuyuGikuyu.code to IetfLang.KikuyuGikuyu, - IetfLang.KikuyuGikuyu.KE.code to IetfLang.KikuyuGikuyu.KE, - IetfLang.KuanyamaKwanyama.code to IetfLang.KuanyamaKwanyama, - IetfLang.Kazakh.code to IetfLang.Kazakh, - IetfLang.Kazakh.KZ.code to IetfLang.Kazakh.KZ, + IetfLang.JudeoPersian.code to IetfLang.JudeoPersian, + IetfLang.JudeoArabic.code to IetfLang.JudeoArabic, + IetfLang.KaraKalpak.code to IetfLang.KaraKalpak, + IetfLang.Kabyle.code to IetfLang.Kabyle, + IetfLang.Kabyle.DZ.code to IetfLang.Kabyle.DZ, + IetfLang.KachinJingpho.code to IetfLang.KachinJingpho, IetfLang.KalaallisutGreenlandic.code to IetfLang.KalaallisutGreenlandic, IetfLang.KalaallisutGreenlandic.GL.code to IetfLang.KalaallisutGreenlandic.GL, - IetfLang.CentralKhmer.code to IetfLang.CentralKhmer, - IetfLang.CentralKhmer.KH.code to IetfLang.CentralKhmer.KH, + IetfLang.Kamba.code to IetfLang.Kamba, + IetfLang.Kamba.KE.code to IetfLang.Kamba.KE, IetfLang.Kannada.code to IetfLang.Kannada, IetfLang.Kannada.IN.code to IetfLang.Kannada.IN, + IetfLang.KarenLanguages.code to IetfLang.KarenLanguages, + IetfLang.Kashmiri.code to IetfLang.Kashmiri, + IetfLang.Kashmiri.IN.code to IetfLang.Kashmiri.IN, + IetfLang.Kanuri.code to IetfLang.Kanuri, + IetfLang.Kawi.code to IetfLang.Kawi, + IetfLang.Kazakh.code to IetfLang.Kazakh, + IetfLang.Kazakh.KZ.code to IetfLang.Kazakh.KZ, + IetfLang.Kabardian.code to IetfLang.Kabardian, + IetfLang.Khasi.code to IetfLang.Khasi, + IetfLang.KhoisanLanguages.code to IetfLang.KhoisanLanguages, + IetfLang.CentralKhmer.code to IetfLang.CentralKhmer, + IetfLang.CentralKhmer.KH.code to IetfLang.CentralKhmer.KH, + IetfLang.KhotaneseSakan.code to IetfLang.KhotaneseSakan, + IetfLang.KikuyuGikuyu.code to IetfLang.KikuyuGikuyu, + IetfLang.KikuyuGikuyu.KE.code to IetfLang.KikuyuGikuyu.KE, + IetfLang.Kinyarwanda.code to IetfLang.Kinyarwanda, + IetfLang.Kinyarwanda.RW.code to IetfLang.Kinyarwanda.RW, + IetfLang.KirghizKyrgyz.code to IetfLang.KirghizKyrgyz, + IetfLang.KirghizKyrgyz.KG.code to IetfLang.KirghizKyrgyz.KG, + IetfLang.Kimbundu.code to IetfLang.Kimbundu, + IetfLang.Konkani.code to IetfLang.Konkani, + IetfLang.Konkani.IN.code to IetfLang.Konkani.IN, + IetfLang.Komi.code to IetfLang.Komi, + IetfLang.Kongo.code to IetfLang.Kongo, IetfLang.Korean.code to IetfLang.Korean, IetfLang.Korean.KP.code to IetfLang.Korean.KP, IetfLang.Korean.KR.code to IetfLang.Korean.KR, - IetfLang.Kanuri.code to IetfLang.Kanuri, - IetfLang.Kashmiri.code to IetfLang.Kashmiri, - IetfLang.Kashmiri.Arab.code to IetfLang.Kashmiri.Arab, - IetfLang.Kashmiri.Arab.IN.code to IetfLang.Kashmiri.Arab.IN, + IetfLang.Kosraean.code to IetfLang.Kosraean, + IetfLang.Kpelle.code to IetfLang.Kpelle, + IetfLang.KarachayBalkar.code to IetfLang.KarachayBalkar, + IetfLang.Karelian.code to IetfLang.Karelian, + IetfLang.KruLanguages.code to IetfLang.KruLanguages, + IetfLang.Kurukh.code to IetfLang.Kurukh, + IetfLang.KuanyamaKwanyama.code to IetfLang.KuanyamaKwanyama, + IetfLang.Kumyk.code to IetfLang.Kumyk, IetfLang.Kurdish.code to IetfLang.Kurdish, - IetfLang.Kurdish.TR.code to IetfLang.Kurdish.TR, - IetfLang.Komi.code to IetfLang.Komi, - IetfLang.Cornish.code to IetfLang.Cornish, - IetfLang.Cornish.GB.code to IetfLang.Cornish.GB, - IetfLang.KirghizKyrgyz.code to IetfLang.KirghizKyrgyz, - IetfLang.KirghizKyrgyz.KG.code to IetfLang.KirghizKyrgyz.KG, + IetfLang.Kutenai.code to IetfLang.Kutenai, + IetfLang.Ladino.code to IetfLang.Ladino, + IetfLang.Lahnda.code to IetfLang.Lahnda, + IetfLang.Lamba.code to IetfLang.Lamba, + IetfLang.Lao.code to IetfLang.Lao, + IetfLang.Lao.LA.code to IetfLang.Lao.LA, IetfLang.Latin.code to IetfLang.Latin, - IetfLang.LuxembourgishLetzeburgesch.code to IetfLang.LuxembourgishLetzeburgesch, - IetfLang.LuxembourgishLetzeburgesch.LU.code to IetfLang.LuxembourgishLetzeburgesch.LU, - IetfLang.Ganda.code to IetfLang.Ganda, - IetfLang.Ganda.UG.code to IetfLang.Ganda.UG, + IetfLang.Latvian.code to IetfLang.Latvian, + IetfLang.Latvian.LV.code to IetfLang.Latvian.LV, + IetfLang.Lezghian.code to IetfLang.Lezghian, IetfLang.LimburganLimburgerLimburgish.code to IetfLang.LimburganLimburgerLimburgish, IetfLang.Lingala.code to IetfLang.Lingala, IetfLang.Lingala.AO.code to IetfLang.Lingala.AO, IetfLang.Lingala.CD.code to IetfLang.Lingala.CD, IetfLang.Lingala.CF.code to IetfLang.Lingala.CF, IetfLang.Lingala.CG.code to IetfLang.Lingala.CG, - IetfLang.Lao.code to IetfLang.Lao, - IetfLang.Lao.LA.code to IetfLang.Lao.LA, IetfLang.Lithuanian.code to IetfLang.Lithuanian, IetfLang.Lithuanian.LT.code to IetfLang.Lithuanian.LT, + IetfLang.Mongo.code to IetfLang.Mongo, + IetfLang.Lozi.code to IetfLang.Lozi, + IetfLang.LuxembourgishLetzeburgesch.code to IetfLang.LuxembourgishLetzeburgesch, + IetfLang.LuxembourgishLetzeburgesch.LU.code to IetfLang.LuxembourgishLetzeburgesch.LU, + IetfLang.LubaLulua.code to IetfLang.LubaLulua, IetfLang.LubaKatanga.code to IetfLang.LubaKatanga, IetfLang.LubaKatanga.CD.code to IetfLang.LubaKatanga.CD, - IetfLang.Latvian.code to IetfLang.Latvian, - IetfLang.Latvian.LV.code to IetfLang.Latvian.LV, - IetfLang.Malagasy.code to IetfLang.Malagasy, - IetfLang.Malagasy.MG.code to IetfLang.Malagasy.MG, - IetfLang.Marshallese.code to IetfLang.Marshallese, - IetfLang.Maori.code to IetfLang.Maori, - IetfLang.Maori.NZ.code to IetfLang.Maori.NZ, + IetfLang.Ganda.code to IetfLang.Ganda, + IetfLang.Ganda.UG.code to IetfLang.Ganda.UG, + IetfLang.Luiseno.code to IetfLang.Luiseno, + IetfLang.Lunda.code to IetfLang.Lunda, + IetfLang.LuoKenyaAndTanzania.code to IetfLang.LuoKenyaAndTanzania, + IetfLang.LuoKenyaAndTanzania.KE.code to IetfLang.LuoKenyaAndTanzania.KE, + IetfLang.Lushai.code to IetfLang.Lushai, IetfLang.Macedonian.code to IetfLang.Macedonian, IetfLang.Macedonian.MK.code to IetfLang.Macedonian.MK, + IetfLang.Madurese.code to IetfLang.Madurese, + IetfLang.Magahi.code to IetfLang.Magahi, + IetfLang.Marshallese.code to IetfLang.Marshallese, + IetfLang.Maithili.code to IetfLang.Maithili, + IetfLang.Makasar.code to IetfLang.Makasar, IetfLang.Malayalam.code to IetfLang.Malayalam, IetfLang.Malayalam.IN.code to IetfLang.Malayalam.IN, - IetfLang.Mongolian.code to IetfLang.Mongolian, - IetfLang.Mongolian.MN.code to IetfLang.Mongolian.MN, + IetfLang.Mandingo.code to IetfLang.Mandingo, + IetfLang.Maori.code to IetfLang.Maori, + IetfLang.AustronesianLanguages.code to IetfLang.AustronesianLanguages, IetfLang.Marathi.code to IetfLang.Marathi, IetfLang.Marathi.IN.code to IetfLang.Marathi.IN, + IetfLang.Masai.code to IetfLang.Masai, + IetfLang.Masai.KE.code to IetfLang.Masai.KE, + IetfLang.Masai.TZ.code to IetfLang.Masai.TZ, IetfLang.Malay.code to IetfLang.Malay, IetfLang.Malay.BN.code to IetfLang.Malay.BN, - IetfLang.Malay.ID.code to IetfLang.Malay.ID, IetfLang.Malay.MY.code to IetfLang.Malay.MY, IetfLang.Malay.SG.code to IetfLang.Malay.SG, + IetfLang.Moksha.code to IetfLang.Moksha, + IetfLang.Mandar.code to IetfLang.Mandar, + IetfLang.Mende.code to IetfLang.Mende, + IetfLang.IrishMiddle9001200.code to IetfLang.IrishMiddle9001200, + IetfLang.Mi_kmaqMicmac.code to IetfLang.Mi_kmaqMicmac, + IetfLang.Minangkabau.code to IetfLang.Minangkabau, + IetfLang.UncodedLanguages.code to IetfLang.UncodedLanguages, + IetfLang.MonKhmerLanguages.code to IetfLang.MonKhmerLanguages, + IetfLang.Malagasy.code to IetfLang.Malagasy, + IetfLang.Malagasy.MG.code to IetfLang.Malagasy.MG, IetfLang.Maltese.code to IetfLang.Maltese, IetfLang.Maltese.MT.code to IetfLang.Maltese.MT, - IetfLang.Burmese.code to IetfLang.Burmese, - IetfLang.Burmese.MM.code to IetfLang.Burmese.MM, + IetfLang.Manchu.code to IetfLang.Manchu, + IetfLang.Manipuri.code to IetfLang.Manipuri, + IetfLang.ManoboLanguages.code to IetfLang.ManoboLanguages, + IetfLang.Mohawk.code to IetfLang.Mohawk, + IetfLang.Mongolian.code to IetfLang.Mongolian, + IetfLang.Mongolian.MN.code to IetfLang.Mongolian.MN, + IetfLang.Mossi.code to IetfLang.Mossi, + IetfLang.MultipleLanguages.code to IetfLang.MultipleLanguages, + IetfLang.MundaLanguages.code to IetfLang.MundaLanguages, + IetfLang.Creek.code to IetfLang.Creek, + IetfLang.Mirandese.code to IetfLang.Mirandese, + IetfLang.Marwari.code to IetfLang.Marwari, + IetfLang.MayanLanguages.code to IetfLang.MayanLanguages, + IetfLang.Erzya.code to IetfLang.Erzya, + IetfLang.NahuatlLanguages.code to IetfLang.NahuatlLanguages, + IetfLang.NorthAmericanIndianLanguages.code to IetfLang.NorthAmericanIndianLanguages, + IetfLang.Neapolitan.code to IetfLang.Neapolitan, IetfLang.Nauru.code to IetfLang.Nauru, - IetfLang.BokmalNorwegianNorwegianBokmal.code to IetfLang.BokmalNorwegianNorwegianBokmal, - IetfLang.BokmalNorwegianNorwegianBokmal.NO.code to IetfLang.BokmalNorwegianNorwegianBokmal.NO, - IetfLang.BokmalNorwegianNorwegianBokmal.SJ.code to IetfLang.BokmalNorwegianNorwegianBokmal.SJ, + IetfLang.NavajoNavaho.code to IetfLang.NavajoNavaho, + IetfLang.NdebeleSouthSouthNdebele.code to IetfLang.NdebeleSouthSouthNdebele, IetfLang.NdebeleNorthNorthNdebele.code to IetfLang.NdebeleNorthNorthNdebele, IetfLang.NdebeleNorthNorthNdebele.ZW.code to IetfLang.NdebeleNorthNorthNdebele.ZW, + IetfLang.Ndonga.code to IetfLang.Ndonga, + IetfLang.LowGermanLowSaxonGermanLowSaxonLow.code to IetfLang.LowGermanLowSaxonGermanLowSaxonLow, + IetfLang.LowGermanLowSaxonGermanLowSaxonLow.DE.code to IetfLang.LowGermanLowSaxonGermanLowSaxonLow.DE, + IetfLang.LowGermanLowSaxonGermanLowSaxonLow.NL.code to IetfLang.LowGermanLowSaxonGermanLowSaxonLow.NL, IetfLang.Nepali.code to IetfLang.Nepali, IetfLang.Nepali.IN.code to IetfLang.Nepali.IN, IetfLang.Nepali.NP.code to IetfLang.Nepali.NP, - IetfLang.Ndonga.code to IetfLang.Ndonga, - IetfLang.DutchFlemish.code to IetfLang.DutchFlemish, - IetfLang.DutchFlemish.AW.code to IetfLang.DutchFlemish.AW, - IetfLang.DutchFlemish.BE.code to IetfLang.DutchFlemish.BE, - IetfLang.DutchFlemish.BQ.code to IetfLang.DutchFlemish.BQ, - IetfLang.DutchFlemish.CW.code to IetfLang.DutchFlemish.CW, - IetfLang.DutchFlemish.NL.code to IetfLang.DutchFlemish.NL, - IetfLang.DutchFlemish.SR.code to IetfLang.DutchFlemish.SR, - IetfLang.DutchFlemish.SX.code to IetfLang.DutchFlemish.SX, + IetfLang.NepalBhasaNewari.code to IetfLang.NepalBhasaNewari, + IetfLang.Nias.code to IetfLang.Nias, + IetfLang.NigerKordofanianLanguages.code to IetfLang.NigerKordofanianLanguages, + IetfLang.Niuean.code to IetfLang.Niuean, IetfLang.NorwegianNynorskNynorskNorwegian.code to IetfLang.NorwegianNynorskNynorskNorwegian, IetfLang.NorwegianNynorskNynorskNorwegian.NO.code to IetfLang.NorwegianNynorskNynorskNorwegian.NO, + IetfLang.BokmalNorwegianNorwegianBokmal.code to IetfLang.BokmalNorwegianNorwegianBokmal, + IetfLang.BokmalNorwegianNorwegianBokmal.NO.code to IetfLang.BokmalNorwegianNorwegianBokmal.NO, + IetfLang.BokmalNorwegianNorwegianBokmal.SJ.code to IetfLang.BokmalNorwegianNorwegianBokmal.SJ, + IetfLang.Nogai.code to IetfLang.Nogai, + IetfLang.NorseOld.code to IetfLang.NorseOld, IetfLang.Norwegian.code to IetfLang.Norwegian, - IetfLang.NdebeleSouthSouthNdebele.code to IetfLang.NdebeleSouthSouthNdebele, - IetfLang.NavajoNavaho.code to IetfLang.NavajoNavaho, + IetfLang.N_Ko.code to IetfLang.N_Ko, + IetfLang.PediSepediNorthernSotho.code to IetfLang.PediSepediNorthernSotho, + IetfLang.NubianLanguages.code to IetfLang.NubianLanguages, + IetfLang.ClassicalNewariOldNewariClassicalNepalBhasa.code to IetfLang.ClassicalNewariOldNewariClassicalNepalBhasa, IetfLang.ChichewaChewaNyanja.code to IetfLang.ChichewaChewaNyanja, - IetfLang.OccitanPost1500.code to IetfLang.OccitanPost1500, + IetfLang.Nyamwezi.code to IetfLang.Nyamwezi, + IetfLang.Nyankole.code to IetfLang.Nyankole, + IetfLang.Nyankole.UG.code to IetfLang.Nyankole.UG, + IetfLang.Nyoro.code to IetfLang.Nyoro, + IetfLang.Nzima.code to IetfLang.Nzima, + IetfLang.OccitanPost1500Provencal.code to IetfLang.OccitanPost1500Provencal, IetfLang.Ojibwa.code to IetfLang.Ojibwa, + IetfLang.Oriya.code to IetfLang.Oriya, + IetfLang.Oriya.IN.code to IetfLang.Oriya.IN, IetfLang.Oromo.code to IetfLang.Oromo, IetfLang.Oromo.ET.code to IetfLang.Oromo.ET, IetfLang.Oromo.KE.code to IetfLang.Oromo.KE, - IetfLang.Oriya.code to IetfLang.Oriya, - IetfLang.Oriya.IN.code to IetfLang.Oriya.IN, + IetfLang.Osage.code to IetfLang.Osage, IetfLang.OssetianOssetic.code to IetfLang.OssetianOssetic, IetfLang.OssetianOssetic.GE.code to IetfLang.OssetianOssetic.GE, IetfLang.OssetianOssetic.RU.code to IetfLang.OssetianOssetic.RU, + IetfLang.TurkishOttoman15001928.code to IetfLang.TurkishOttoman15001928, + IetfLang.OtomianLanguages.code to IetfLang.OtomianLanguages, + IetfLang.PapuanLanguages.code to IetfLang.PapuanLanguages, + IetfLang.Pangasinan.code to IetfLang.Pangasinan, + IetfLang.Pahlavi.code to IetfLang.Pahlavi, + IetfLang.PampangaKapampangan.code to IetfLang.PampangaKapampangan, IetfLang.PanjabiPunjabi.code to IetfLang.PanjabiPunjabi, IetfLang.PanjabiPunjabi.Arab.code to IetfLang.PanjabiPunjabi.Arab, IetfLang.PanjabiPunjabi.Arab.PK.code to IetfLang.PanjabiPunjabi.Arab.PK, IetfLang.PanjabiPunjabi.Guru.code to IetfLang.PanjabiPunjabi.Guru, IetfLang.PanjabiPunjabi.Guru.IN.code to IetfLang.PanjabiPunjabi.Guru.IN, + IetfLang.Papiamento.code to IetfLang.Papiamento, + IetfLang.Palauan.code to IetfLang.Palauan, + IetfLang.PersianOldCa_600400B_C_.code to IetfLang.PersianOldCa_600400B_C_, + IetfLang.Persian.code to IetfLang.Persian, + IetfLang.Persian.AF.code to IetfLang.Persian.AF, + IetfLang.Persian.IR.code to IetfLang.Persian.IR, + IetfLang.PhilippineLanguages.code to IetfLang.PhilippineLanguages, + IetfLang.Phoenician.code to IetfLang.Phoenician, IetfLang.Pali.code to IetfLang.Pali, IetfLang.Polish.code to IetfLang.Polish, IetfLang.Polish.PL.code to IetfLang.Polish.PL, - IetfLang.PushtoPashto.code to IetfLang.PushtoPashto, - IetfLang.PushtoPashto.AF.code to IetfLang.PushtoPashto.AF, - IetfLang.PushtoPashto.PK.code to IetfLang.PushtoPashto.PK, + IetfLang.Pohnpeian.code to IetfLang.Pohnpeian, IetfLang.Portuguese.code to IetfLang.Portuguese, IetfLang.Portuguese.AO.code to IetfLang.Portuguese.AO, IetfLang.Portuguese.BR.code to IetfLang.Portuguese.BR, @@ -518,17 +708,28 @@ val knownLanguageCodesMap: Map by lazy { IetfLang.Portuguese.PT.code to IetfLang.Portuguese.PT, IetfLang.Portuguese.ST.code to IetfLang.Portuguese.ST, IetfLang.Portuguese.TL.code to IetfLang.Portuguese.TL, + IetfLang.PrakritLanguages.code to IetfLang.PrakritLanguages, + IetfLang.ProvencalOldTo1500.code to IetfLang.ProvencalOldTo1500, + IetfLang.PushtoPashto.code to IetfLang.PushtoPashto, + IetfLang.PushtoPashto.AF.code to IetfLang.PushtoPashto.AF, + IetfLang.ReservedForLocalUse.code to IetfLang.ReservedForLocalUse, IetfLang.Quechua.code to IetfLang.Quechua, IetfLang.Quechua.BO.code to IetfLang.Quechua.BO, IetfLang.Quechua.EC.code to IetfLang.Quechua.EC, IetfLang.Quechua.PE.code to IetfLang.Quechua.PE, + IetfLang.Rajasthani.code to IetfLang.Rajasthani, + IetfLang.Rapanui.code to IetfLang.Rapanui, + IetfLang.RarotonganCookIslandsMaori.code to IetfLang.RarotonganCookIslandsMaori, + IetfLang.RomanceLanguages.code to IetfLang.RomanceLanguages, IetfLang.Romansh.code to IetfLang.Romansh, IetfLang.Romansh.CH.code to IetfLang.Romansh.CH, - IetfLang.Rundi.code to IetfLang.Rundi, - IetfLang.Rundi.BI.code to IetfLang.Rundi.BI, + IetfLang.Romany.code to IetfLang.Romany, IetfLang.RomanianMoldavianMoldovan.code to IetfLang.RomanianMoldavianMoldovan, IetfLang.RomanianMoldavianMoldovan.MD.code to IetfLang.RomanianMoldavianMoldovan.MD, IetfLang.RomanianMoldavianMoldovan.RO.code to IetfLang.RomanianMoldavianMoldovan.RO, + IetfLang.Rundi.code to IetfLang.Rundi, + IetfLang.Rundi.BI.code to IetfLang.Rundi.BI, + IetfLang.AromanianArumanianMacedoRomanian.code to IetfLang.AromanianArumanianMacedoRomanian, IetfLang.Russian.code to IetfLang.Russian, IetfLang.Russian.BY.code to IetfLang.Russian.BY, IetfLang.Russian.KG.code to IetfLang.Russian.KG, @@ -536,39 +737,88 @@ val knownLanguageCodesMap: Map by lazy { IetfLang.Russian.MD.code to IetfLang.Russian.MD, IetfLang.Russian.RU.code to IetfLang.Russian.RU, IetfLang.Russian.UA.code to IetfLang.Russian.UA, - IetfLang.Kinyarwanda.code to IetfLang.Kinyarwanda, - IetfLang.Kinyarwanda.RW.code to IetfLang.Kinyarwanda.RW, - IetfLang.Sanskrit.code to IetfLang.Sanskrit, - IetfLang.Sardinian.code to IetfLang.Sardinian, - IetfLang.Sindhi.code to IetfLang.Sindhi, - IetfLang.Sindhi.Arab.code to IetfLang.Sindhi.Arab, - IetfLang.Sindhi.Arab.PK.code to IetfLang.Sindhi.Arab.PK, - IetfLang.Sindhi.Deva.code to IetfLang.Sindhi.Deva, - IetfLang.Sindhi.Deva.IN.code to IetfLang.Sindhi.Deva.IN, - IetfLang.NorthernSami.code to IetfLang.NorthernSami, - IetfLang.NorthernSami.FI.code to IetfLang.NorthernSami.FI, - IetfLang.NorthernSami.NO.code to IetfLang.NorthernSami.NO, - IetfLang.NorthernSami.SE.code to IetfLang.NorthernSami.SE, + IetfLang.Sandawe.code to IetfLang.Sandawe, IetfLang.Sango.code to IetfLang.Sango, IetfLang.Sango.CF.code to IetfLang.Sango.CF, + IetfLang.Yakut.code to IetfLang.Yakut, + IetfLang.Yakut.RU.code to IetfLang.Yakut.RU, + IetfLang.SouthAmericanIndianOther.code to IetfLang.SouthAmericanIndianOther, + IetfLang.SalishanLanguages.code to IetfLang.SalishanLanguages, + IetfLang.SamaritanAramaic.code to IetfLang.SamaritanAramaic, + IetfLang.Sanskrit.code to IetfLang.Sanskrit, + IetfLang.Sasak.code to IetfLang.Sasak, + IetfLang.Santali.code to IetfLang.Santali, + IetfLang.Sicilian.code to IetfLang.Sicilian, + IetfLang.Scots.code to IetfLang.Scots, + IetfLang.Selkup.code to IetfLang.Selkup, + IetfLang.SemiticLanguages.code to IetfLang.SemiticLanguages, + IetfLang.IrishOldTo900.code to IetfLang.IrishOldTo900, + IetfLang.SignLanguages.code to IetfLang.SignLanguages, + IetfLang.Shan.code to IetfLang.Shan, + IetfLang.Sidamo.code to IetfLang.Sidamo, IetfLang.SinhalaSinhalese.code to IetfLang.SinhalaSinhalese, IetfLang.SinhalaSinhalese.LK.code to IetfLang.SinhalaSinhalese.LK, + IetfLang.SiouanLanguages.code to IetfLang.SiouanLanguages, + IetfLang.SinoTibetanLanguages.code to IetfLang.SinoTibetanLanguages, + IetfLang.SlavicLanguages.code to IetfLang.SlavicLanguages, IetfLang.Slovak.code to IetfLang.Slovak, IetfLang.Slovak.SK.code to IetfLang.Slovak.SK, IetfLang.Slovenian.code to IetfLang.Slovenian, IetfLang.Slovenian.SI.code to IetfLang.Slovenian.SI, + IetfLang.SouthernSami.code to IetfLang.SouthernSami, + IetfLang.NorthernSami.code to IetfLang.NorthernSami, + IetfLang.NorthernSami.FI.code to IetfLang.NorthernSami.FI, + IetfLang.NorthernSami.NO.code to IetfLang.NorthernSami.NO, + IetfLang.NorthernSami.SE.code to IetfLang.NorthernSami.SE, + IetfLang.SamiLanguages.code to IetfLang.SamiLanguages, + IetfLang.LuleSami.code to IetfLang.LuleSami, + IetfLang.InariSami.code to IetfLang.InariSami, + IetfLang.InariSami.FI.code to IetfLang.InariSami.FI, IetfLang.Samoan.code to IetfLang.Samoan, + IetfLang.SkoltSami.code to IetfLang.SkoltSami, IetfLang.Shona.code to IetfLang.Shona, IetfLang.Shona.ZW.code to IetfLang.Shona.ZW, + IetfLang.Sindhi.code to IetfLang.Sindhi, + IetfLang.Soninke.code to IetfLang.Soninke, + IetfLang.Sogdian.code to IetfLang.Sogdian, IetfLang.Somali.code to IetfLang.Somali, IetfLang.Somali.DJ.code to IetfLang.Somali.DJ, IetfLang.Somali.ET.code to IetfLang.Somali.ET, IetfLang.Somali.KE.code to IetfLang.Somali.KE, IetfLang.Somali.SO.code to IetfLang.Somali.SO, - IetfLang.Albanian.code to IetfLang.Albanian, - IetfLang.Albanian.AL.code to IetfLang.Albanian.AL, - IetfLang.Albanian.MK.code to IetfLang.Albanian.MK, - IetfLang.Albanian.XK.code to IetfLang.Albanian.XK, + IetfLang.SonghaiLanguages.code to IetfLang.SonghaiLanguages, + IetfLang.SothoSouthern.code to IetfLang.SothoSouthern, + IetfLang.SpanishCastilian.code to IetfLang.SpanishCastilian, + IetfLang.SpanishCastilian.L419.code to IetfLang.SpanishCastilian.L419, + IetfLang.SpanishCastilian.AR.code to IetfLang.SpanishCastilian.AR, + IetfLang.SpanishCastilian.BO.code to IetfLang.SpanishCastilian.BO, + IetfLang.SpanishCastilian.BR.code to IetfLang.SpanishCastilian.BR, + IetfLang.SpanishCastilian.BZ.code to IetfLang.SpanishCastilian.BZ, + IetfLang.SpanishCastilian.CL.code to IetfLang.SpanishCastilian.CL, + IetfLang.SpanishCastilian.CO.code to IetfLang.SpanishCastilian.CO, + IetfLang.SpanishCastilian.CR.code to IetfLang.SpanishCastilian.CR, + IetfLang.SpanishCastilian.CU.code to IetfLang.SpanishCastilian.CU, + IetfLang.SpanishCastilian.DO.code to IetfLang.SpanishCastilian.DO, + IetfLang.SpanishCastilian.EA.code to IetfLang.SpanishCastilian.EA, + IetfLang.SpanishCastilian.EC.code to IetfLang.SpanishCastilian.EC, + IetfLang.SpanishCastilian.ES.code to IetfLang.SpanishCastilian.ES, + IetfLang.SpanishCastilian.GQ.code to IetfLang.SpanishCastilian.GQ, + IetfLang.SpanishCastilian.GT.code to IetfLang.SpanishCastilian.GT, + IetfLang.SpanishCastilian.HN.code to IetfLang.SpanishCastilian.HN, + IetfLang.SpanishCastilian.IC.code to IetfLang.SpanishCastilian.IC, + IetfLang.SpanishCastilian.MX.code to IetfLang.SpanishCastilian.MX, + IetfLang.SpanishCastilian.NI.code to IetfLang.SpanishCastilian.NI, + IetfLang.SpanishCastilian.PA.code to IetfLang.SpanishCastilian.PA, + IetfLang.SpanishCastilian.PE.code to IetfLang.SpanishCastilian.PE, + IetfLang.SpanishCastilian.PH.code to IetfLang.SpanishCastilian.PH, + IetfLang.SpanishCastilian.PR.code to IetfLang.SpanishCastilian.PR, + IetfLang.SpanishCastilian.PY.code to IetfLang.SpanishCastilian.PY, + IetfLang.SpanishCastilian.SV.code to IetfLang.SpanishCastilian.SV, + IetfLang.SpanishCastilian.US.code to IetfLang.SpanishCastilian.US, + IetfLang.SpanishCastilian.UY.code to IetfLang.SpanishCastilian.UY, + IetfLang.SpanishCastilian.VE.code to IetfLang.SpanishCastilian.VE, + IetfLang.Sardinian.code to IetfLang.Sardinian, + IetfLang.SrananTongo.code to IetfLang.SrananTongo, IetfLang.Serbian.code to IetfLang.Serbian, IetfLang.Serbian.Cyrl.code to IetfLang.Serbian.Cyrl, IetfLang.Serbian.Cyrl.BA.code to IetfLang.Serbian.Cyrl.BA, @@ -580,52 +830,79 @@ val knownLanguageCodesMap: Map by lazy { IetfLang.Serbian.Latn.ME.code to IetfLang.Serbian.Latn.ME, IetfLang.Serbian.Latn.RS.code to IetfLang.Serbian.Latn.RS, IetfLang.Serbian.Latn.XK.code to IetfLang.Serbian.Latn.XK, + IetfLang.Serer.code to IetfLang.Serer, + IetfLang.NiloSaharanLanguages.code to IetfLang.NiloSaharanLanguages, IetfLang.Swati.code to IetfLang.Swati, - IetfLang.SothoSouthern.code to IetfLang.SothoSouthern, + IetfLang.Sukuma.code to IetfLang.Sukuma, IetfLang.Sundanese.code to IetfLang.Sundanese, - IetfLang.Sundanese.Latn.code to IetfLang.Sundanese.Latn, - IetfLang.Sundanese.Latn.ID.code to IetfLang.Sundanese.Latn.ID, - IetfLang.Swedish.code to IetfLang.Swedish, - IetfLang.Swedish.AX.code to IetfLang.Swedish.AX, - IetfLang.Swedish.FI.code to IetfLang.Swedish.FI, - IetfLang.Swedish.SE.code to IetfLang.Swedish.SE, + IetfLang.Susu.code to IetfLang.Susu, + IetfLang.Sumerian.code to IetfLang.Sumerian, IetfLang.Swahili.code to IetfLang.Swahili, IetfLang.Swahili.CD.code to IetfLang.Swahili.CD, IetfLang.Swahili.KE.code to IetfLang.Swahili.KE, IetfLang.Swahili.TZ.code to IetfLang.Swahili.TZ, IetfLang.Swahili.UG.code to IetfLang.Swahili.UG, + IetfLang.Swedish.code to IetfLang.Swedish, + IetfLang.Swedish.AX.code to IetfLang.Swedish.AX, + IetfLang.Swedish.FI.code to IetfLang.Swedish.FI, + IetfLang.Swedish.SE.code to IetfLang.Swedish.SE, + IetfLang.ClassicalSyriac.code to IetfLang.ClassicalSyriac, + IetfLang.Syriac.code to IetfLang.Syriac, + IetfLang.Tahitian.code to IetfLang.Tahitian, + IetfLang.TaiLanguages.code to IetfLang.TaiLanguages, IetfLang.Tamil.code to IetfLang.Tamil, IetfLang.Tamil.IN.code to IetfLang.Tamil.IN, IetfLang.Tamil.LK.code to IetfLang.Tamil.LK, IetfLang.Tamil.MY.code to IetfLang.Tamil.MY, IetfLang.Tamil.SG.code to IetfLang.Tamil.SG, + IetfLang.Tatar.code to IetfLang.Tatar, IetfLang.Telugu.code to IetfLang.Telugu, IetfLang.Telugu.IN.code to IetfLang.Telugu.IN, + IetfLang.Timne.code to IetfLang.Timne, + IetfLang.Tereno.code to IetfLang.Tereno, + IetfLang.Tetum.code to IetfLang.Tetum, IetfLang.Tajik.code to IetfLang.Tajik, - IetfLang.Tajik.TJ.code to IetfLang.Tajik.TJ, + IetfLang.Tagalog.code to IetfLang.Tagalog, IetfLang.Thai.code to IetfLang.Thai, IetfLang.Thai.TH.code to IetfLang.Thai.TH, + IetfLang.Tibetan.code to IetfLang.Tibetan, + IetfLang.Tibetan.CN.code to IetfLang.Tibetan.CN, + IetfLang.Tibetan.IN.code to IetfLang.Tibetan.IN, + IetfLang.Tigre.code to IetfLang.Tigre, IetfLang.Tigrinya.code to IetfLang.Tigrinya, IetfLang.Tigrinya.ER.code to IetfLang.Tigrinya.ER, IetfLang.Tigrinya.ET.code to IetfLang.Tigrinya.ET, - IetfLang.Turkmen.code to IetfLang.Turkmen, - IetfLang.Turkmen.TM.code to IetfLang.Turkmen.TM, - IetfLang.Tagalog.code to IetfLang.Tagalog, - IetfLang.Tswana.code to IetfLang.Tswana, + IetfLang.Tiv.code to IetfLang.Tiv, + IetfLang.Tokelau.code to IetfLang.Tokelau, + IetfLang.KlingonTlhInganHol.code to IetfLang.KlingonTlhInganHol, + IetfLang.Tlingit.code to IetfLang.Tlingit, + IetfLang.Tamashek.code to IetfLang.Tamashek, + IetfLang.TongaNyasa.code to IetfLang.TongaNyasa, IetfLang.TongaTongaIslands.code to IetfLang.TongaTongaIslands, IetfLang.TongaTongaIslands.TO.code to IetfLang.TongaTongaIslands.TO, + IetfLang.TokPisin.code to IetfLang.TokPisin, + IetfLang.Tsimshian.code to IetfLang.Tsimshian, + IetfLang.Tswana.code to IetfLang.Tswana, + IetfLang.Tsonga.code to IetfLang.Tsonga, + IetfLang.Turkmen.code to IetfLang.Turkmen, + IetfLang.Turkmen.TM.code to IetfLang.Turkmen.TM, + IetfLang.Tumbuka.code to IetfLang.Tumbuka, + IetfLang.TupiLanguages.code to IetfLang.TupiLanguages, IetfLang.Turkish.code to IetfLang.Turkish, IetfLang.Turkish.CY.code to IetfLang.Turkish.CY, IetfLang.Turkish.TR.code to IetfLang.Turkish.TR, - IetfLang.Tsonga.code to IetfLang.Tsonga, - IetfLang.Tatar.code to IetfLang.Tatar, - IetfLang.Tatar.RU.code to IetfLang.Tatar.RU, + IetfLang.AltaicLanguages.code to IetfLang.AltaicLanguages, + IetfLang.Tuvalu.code to IetfLang.Tuvalu, IetfLang.Twi.code to IetfLang.Twi, - IetfLang.Tahitian.code to IetfLang.Tahitian, + IetfLang.Tuvinian.code to IetfLang.Tuvinian, + IetfLang.Udmurt.code to IetfLang.Udmurt, + IetfLang.Ugaritic.code to IetfLang.Ugaritic, IetfLang.UighurUyghur.code to IetfLang.UighurUyghur, IetfLang.UighurUyghur.CN.code to IetfLang.UighurUyghur.CN, IetfLang.Ukrainian.code to IetfLang.Ukrainian, IetfLang.Ukrainian.UA.code to IetfLang.Ukrainian.UA, + IetfLang.Umbundu.code to IetfLang.Umbundu, + IetfLang.Undetermined.code to IetfLang.Undetermined, IetfLang.Urdu.code to IetfLang.Urdu, IetfLang.Urdu.IN.code to IetfLang.Urdu.IN, IetfLang.Urdu.PK.code to IetfLang.Urdu.PK, @@ -636,49 +913,79 @@ val knownLanguageCodesMap: Map by lazy { IetfLang.Uzbek.Cyrl.UZ.code to IetfLang.Uzbek.Cyrl.UZ, IetfLang.Uzbek.Latn.code to IetfLang.Uzbek.Latn, IetfLang.Uzbek.Latn.UZ.code to IetfLang.Uzbek.Latn.UZ, + IetfLang.Vai.code to IetfLang.Vai, + IetfLang.Vai.Latn.code to IetfLang.Vai.Latn, + IetfLang.Vai.Latn.LR.code to IetfLang.Vai.Latn.LR, + IetfLang.Vai.Vaii.code to IetfLang.Vai.Vaii, + IetfLang.Vai.Vaii.LR.code to IetfLang.Vai.Vaii.LR, IetfLang.Venda.code to IetfLang.Venda, IetfLang.Vietnamese.code to IetfLang.Vietnamese, IetfLang.Vietnamese.VN.code to IetfLang.Vietnamese.VN, IetfLang.Volapuk.code to IetfLang.Volapuk, IetfLang.Volapuk.L001.code to IetfLang.Volapuk.L001, + IetfLang.Votic.code to IetfLang.Votic, + IetfLang.WakashanLanguages.code to IetfLang.WakashanLanguages, + IetfLang.Walamo.code to IetfLang.Walamo, + IetfLang.Waray.code to IetfLang.Waray, + IetfLang.Washo.code to IetfLang.Washo, + IetfLang.Welsh.code to IetfLang.Welsh, + IetfLang.Welsh.GB.code to IetfLang.Welsh.GB, + IetfLang.SorbianLanguages.code to IetfLang.SorbianLanguages, IetfLang.Walloon.code to IetfLang.Walloon, IetfLang.Wolof.code to IetfLang.Wolof, - IetfLang.Wolof.SN.code to IetfLang.Wolof.SN, + IetfLang.KalmykOirat.code to IetfLang.KalmykOirat, IetfLang.Xhosa.code to IetfLang.Xhosa, - IetfLang.Xhosa.ZA.code to IetfLang.Xhosa.ZA, + IetfLang.Yao.code to IetfLang.Yao, + IetfLang.Yapese.code to IetfLang.Yapese, IetfLang.Yiddish.code to IetfLang.Yiddish, IetfLang.Yiddish.L001.code to IetfLang.Yiddish.L001, IetfLang.Yoruba.code to IetfLang.Yoruba, IetfLang.Yoruba.BJ.code to IetfLang.Yoruba.BJ, IetfLang.Yoruba.NG.code to IetfLang.Yoruba.NG, + IetfLang.YupikLanguages.code to IetfLang.YupikLanguages, + IetfLang.Zapotec.code to IetfLang.Zapotec, + IetfLang.BlissymbolsBlissymbolicsBliss.code to IetfLang.BlissymbolsBlissymbolicsBliss, + IetfLang.Zenaga.code to IetfLang.Zenaga, + IetfLang.StandardMoroccanTamazight.code to IetfLang.StandardMoroccanTamazight, + IetfLang.StandardMoroccanTamazight.MA.code to IetfLang.StandardMoroccanTamazight.MA, IetfLang.ZhuangChuang.code to IetfLang.ZhuangChuang, - IetfLang.Chinese.code to IetfLang.Chinese, - IetfLang.Chinese.Hans.code to IetfLang.Chinese.Hans, - IetfLang.Chinese.Hans.CN.code to IetfLang.Chinese.Hans.CN, - IetfLang.Chinese.Hans.HK.code to IetfLang.Chinese.Hans.HK, - IetfLang.Chinese.Hans.MO.code to IetfLang.Chinese.Hans.MO, - IetfLang.Chinese.Hans.SG.code to IetfLang.Chinese.Hans.SG, - IetfLang.Chinese.Hant.code to IetfLang.Chinese.Hant, - IetfLang.Chinese.Hant.HK.code to IetfLang.Chinese.Hant.HK, - IetfLang.Chinese.Hant.MO.code to IetfLang.Chinese.Hant.MO, - IetfLang.Chinese.Hant.TW.code to IetfLang.Chinese.Hant.TW, + IetfLang.ZandeLanguages.code to IetfLang.ZandeLanguages, IetfLang.Zulu.code to IetfLang.Zulu, - IetfLang.Zulu.ZA.code to IetfLang.Zulu.ZA + IetfLang.Zulu.ZA.code to IetfLang.Zulu.ZA, + IetfLang.Zuni.code to IetfLang.Zuni, + IetfLang.NoLinguisticContentNotApplicable.code to IetfLang.NoLinguisticContentNotApplicable, + IetfLang.ZazaDimiliDimliKirdkiKirmanjkiZazaki.code to IetfLang.ZazaDimiliDimliKirdkiKirmanjkiZazaki ) } val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { mapOf( IetfLang.Afar.code.lowercase() to IetfLang.Afar, IetfLang.Abkhazian.code.lowercase() to IetfLang.Abkhazian, - IetfLang.Avestan.code.lowercase() to IetfLang.Avestan, + IetfLang.Achinese.code.lowercase() to IetfLang.Achinese, + IetfLang.Acoli.code.lowercase() to IetfLang.Acoli, + IetfLang.Adangme.code.lowercase() to IetfLang.Adangme, + IetfLang.AdygheAdygei.code.lowercase() to IetfLang.AdygheAdygei, + IetfLang.AfroAsiaticLanguages.code.lowercase() to IetfLang.AfroAsiaticLanguages, + IetfLang.Afrihili.code.lowercase() to IetfLang.Afrihili, IetfLang.Afrikaans.code.lowercase() to IetfLang.Afrikaans, IetfLang.Afrikaans.NA.code.lowercase() to IetfLang.Afrikaans.NA, IetfLang.Afrikaans.ZA.code.lowercase() to IetfLang.Afrikaans.ZA, + IetfLang.Ainu.code.lowercase() to IetfLang.Ainu, IetfLang.Akan.code.lowercase() to IetfLang.Akan, IetfLang.Akan.GH.code.lowercase() to IetfLang.Akan.GH, + IetfLang.Akkadian.code.lowercase() to IetfLang.Akkadian, + IetfLang.Albanian.code.lowercase() to IetfLang.Albanian, + IetfLang.Albanian.AL.code.lowercase() to IetfLang.Albanian.AL, + IetfLang.Albanian.MK.code.lowercase() to IetfLang.Albanian.MK, + IetfLang.Albanian.XK.code.lowercase() to IetfLang.Albanian.XK, + IetfLang.Aleut.code.lowercase() to IetfLang.Aleut, + IetfLang.AlgonquianLanguages.code.lowercase() to IetfLang.AlgonquianLanguages, + IetfLang.SouthernAltai.code.lowercase() to IetfLang.SouthernAltai, IetfLang.Amharic.code.lowercase() to IetfLang.Amharic, IetfLang.Amharic.ET.code.lowercase() to IetfLang.Amharic.ET, - IetfLang.Aragonese.code.lowercase() to IetfLang.Aragonese, + IetfLang.EnglishOldCa_4501100.code.lowercase() to IetfLang.EnglishOldCa_4501100, + IetfLang.Angika.code.lowercase() to IetfLang.Angika, + IetfLang.ApacheLanguages.code.lowercase() to IetfLang.ApacheLanguages, IetfLang.Arabic.code.lowercase() to IetfLang.Arabic, IetfLang.Arabic.L001.code.lowercase() to IetfLang.Arabic.L001, IetfLang.Arabic.AE.code.lowercase() to IetfLang.Arabic.AE, @@ -708,79 +1015,162 @@ val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { IetfLang.Arabic.TD.code.lowercase() to IetfLang.Arabic.TD, IetfLang.Arabic.TN.code.lowercase() to IetfLang.Arabic.TN, IetfLang.Arabic.YE.code.lowercase() to IetfLang.Arabic.YE, + IetfLang.OfficialAramaic700300BCEImperialAramaic700300BCE.code.lowercase() to IetfLang.OfficialAramaic700300BCEImperialAramaic700300BCE, + IetfLang.Aragonese.code.lowercase() to IetfLang.Aragonese, + IetfLang.Armenian.code.lowercase() to IetfLang.Armenian, + IetfLang.Armenian.AM.code.lowercase() to IetfLang.Armenian.AM, + IetfLang.MapudungunMapuche.code.lowercase() to IetfLang.MapudungunMapuche, + IetfLang.Arapaho.code.lowercase() to IetfLang.Arapaho, + IetfLang.ArtificialLanguages.code.lowercase() to IetfLang.ArtificialLanguages, + IetfLang.Arawak.code.lowercase() to IetfLang.Arawak, IetfLang.Assamese.code.lowercase() to IetfLang.Assamese, IetfLang.Assamese.IN.code.lowercase() to IetfLang.Assamese.IN, + IetfLang.AsturianBableLeoneseAsturleonese.code.lowercase() to IetfLang.AsturianBableLeoneseAsturleonese, + IetfLang.AsturianBableLeoneseAsturleonese.ES.code.lowercase() to IetfLang.AsturianBableLeoneseAsturleonese.ES, + IetfLang.AthapascanLanguages.code.lowercase() to IetfLang.AthapascanLanguages, + IetfLang.AustralianLanguages.code.lowercase() to IetfLang.AustralianLanguages, IetfLang.Avaric.code.lowercase() to IetfLang.Avaric, + IetfLang.Avestan.code.lowercase() to IetfLang.Avestan, + IetfLang.Awadhi.code.lowercase() to IetfLang.Awadhi, IetfLang.Aymara.code.lowercase() to IetfLang.Aymara, IetfLang.Azerbaijani.code.lowercase() to IetfLang.Azerbaijani, IetfLang.Azerbaijani.Cyrl.code.lowercase() to IetfLang.Azerbaijani.Cyrl, IetfLang.Azerbaijani.Cyrl.AZ.code.lowercase() to IetfLang.Azerbaijani.Cyrl.AZ, IetfLang.Azerbaijani.Latn.code.lowercase() to IetfLang.Azerbaijani.Latn, IetfLang.Azerbaijani.Latn.AZ.code.lowercase() to IetfLang.Azerbaijani.Latn.AZ, + IetfLang.BandaLanguages.code.lowercase() to IetfLang.BandaLanguages, + IetfLang.BamilekeLanguages.code.lowercase() to IetfLang.BamilekeLanguages, IetfLang.Bashkir.code.lowercase() to IetfLang.Bashkir, - IetfLang.Belarusian.code.lowercase() to IetfLang.Belarusian, - IetfLang.Belarusian.BY.code.lowercase() to IetfLang.Belarusian.BY, - IetfLang.Bulgarian.code.lowercase() to IetfLang.Bulgarian, - IetfLang.Bulgarian.BG.code.lowercase() to IetfLang.Bulgarian.BG, - IetfLang.BihariLanguages.code.lowercase() to IetfLang.BihariLanguages, - IetfLang.Bislama.code.lowercase() to IetfLang.Bislama, + IetfLang.Baluchi.code.lowercase() to IetfLang.Baluchi, IetfLang.Bambara.code.lowercase() to IetfLang.Bambara, IetfLang.Bambara.ML.code.lowercase() to IetfLang.Bambara.ML, + IetfLang.Balinese.code.lowercase() to IetfLang.Balinese, + IetfLang.Basque.code.lowercase() to IetfLang.Basque, + IetfLang.Basque.ES.code.lowercase() to IetfLang.Basque.ES, + IetfLang.Basa.code.lowercase() to IetfLang.Basa, + IetfLang.Basa.CM.code.lowercase() to IetfLang.Basa.CM, + IetfLang.BalticLanguages.code.lowercase() to IetfLang.BalticLanguages, + IetfLang.BejaBedawiyet.code.lowercase() to IetfLang.BejaBedawiyet, + IetfLang.Belarusian.code.lowercase() to IetfLang.Belarusian, + IetfLang.Belarusian.BY.code.lowercase() to IetfLang.Belarusian.BY, + IetfLang.Bemba.code.lowercase() to IetfLang.Bemba, + IetfLang.Bemba.ZM.code.lowercase() to IetfLang.Bemba.ZM, IetfLang.Bengali.code.lowercase() to IetfLang.Bengali, IetfLang.Bengali.BD.code.lowercase() to IetfLang.Bengali.BD, IetfLang.Bengali.IN.code.lowercase() to IetfLang.Bengali.IN, - IetfLang.Tibetan.code.lowercase() to IetfLang.Tibetan, - IetfLang.Tibetan.CN.code.lowercase() to IetfLang.Tibetan.CN, - IetfLang.Tibetan.IN.code.lowercase() to IetfLang.Tibetan.IN, - IetfLang.Breton.code.lowercase() to IetfLang.Breton, - IetfLang.Breton.FR.code.lowercase() to IetfLang.Breton.FR, + IetfLang.BerberLanguages.code.lowercase() to IetfLang.BerberLanguages, + IetfLang.Bhojpuri.code.lowercase() to IetfLang.Bhojpuri, + IetfLang.BihariLanguages.code.lowercase() to IetfLang.BihariLanguages, + IetfLang.Bikol.code.lowercase() to IetfLang.Bikol, + IetfLang.BiniEdo.code.lowercase() to IetfLang.BiniEdo, + IetfLang.Bislama.code.lowercase() to IetfLang.Bislama, + IetfLang.Siksika.code.lowercase() to IetfLang.Siksika, + IetfLang.BantuOther.code.lowercase() to IetfLang.BantuOther, IetfLang.Bosnian.code.lowercase() to IetfLang.Bosnian, IetfLang.Bosnian.Cyrl.code.lowercase() to IetfLang.Bosnian.Cyrl, IetfLang.Bosnian.Cyrl.BA.code.lowercase() to IetfLang.Bosnian.Cyrl.BA, IetfLang.Bosnian.Latn.code.lowercase() to IetfLang.Bosnian.Latn, IetfLang.Bosnian.Latn.BA.code.lowercase() to IetfLang.Bosnian.Latn.BA, + IetfLang.Braj.code.lowercase() to IetfLang.Braj, + IetfLang.Breton.code.lowercase() to IetfLang.Breton, + IetfLang.Breton.FR.code.lowercase() to IetfLang.Breton.FR, + IetfLang.BatakLanguages.code.lowercase() to IetfLang.BatakLanguages, + IetfLang.Buriat.code.lowercase() to IetfLang.Buriat, + IetfLang.Buginese.code.lowercase() to IetfLang.Buginese, + IetfLang.Bulgarian.code.lowercase() to IetfLang.Bulgarian, + IetfLang.Bulgarian.BG.code.lowercase() to IetfLang.Bulgarian.BG, + IetfLang.Burmese.code.lowercase() to IetfLang.Burmese, + IetfLang.Burmese.MM.code.lowercase() to IetfLang.Burmese.MM, + IetfLang.BlinBilin.code.lowercase() to IetfLang.BlinBilin, + IetfLang.Caddo.code.lowercase() to IetfLang.Caddo, + IetfLang.CentralAmericanIndianLanguages.code.lowercase() to IetfLang.CentralAmericanIndianLanguages, + IetfLang.GalibiCarib.code.lowercase() to IetfLang.GalibiCarib, IetfLang.CatalanValencian.code.lowercase() to IetfLang.CatalanValencian, IetfLang.CatalanValencian.AD.code.lowercase() to IetfLang.CatalanValencian.AD, IetfLang.CatalanValencian.ES.code.lowercase() to IetfLang.CatalanValencian.ES, IetfLang.CatalanValencian.ES.VALENCIA.code.lowercase() to IetfLang.CatalanValencian.ES.VALENCIA, IetfLang.CatalanValencian.FR.code.lowercase() to IetfLang.CatalanValencian.FR, IetfLang.CatalanValencian.IT.code.lowercase() to IetfLang.CatalanValencian.IT, + IetfLang.CaucasianLanguages.code.lowercase() to IetfLang.CaucasianLanguages, + IetfLang.Cebuano.code.lowercase() to IetfLang.Cebuano, + IetfLang.CelticLanguages.code.lowercase() to IetfLang.CelticLanguages, + IetfLang.Chamorro.code.lowercase() to IetfLang.Chamorro, + IetfLang.Chibcha.code.lowercase() to IetfLang.Chibcha, IetfLang.Chechen.code.lowercase() to IetfLang.Chechen, IetfLang.Chechen.RU.code.lowercase() to IetfLang.Chechen.RU, - IetfLang.Chamorro.code.lowercase() to IetfLang.Chamorro, - IetfLang.Corsican.code.lowercase() to IetfLang.Corsican, - IetfLang.Cree.code.lowercase() to IetfLang.Cree, - IetfLang.Czech.code.lowercase() to IetfLang.Czech, - IetfLang.Czech.CZ.code.lowercase() to IetfLang.Czech.CZ, + IetfLang.Chagatai.code.lowercase() to IetfLang.Chagatai, + IetfLang.Chinese.code.lowercase() to IetfLang.Chinese, + IetfLang.Chinese.Hans.code.lowercase() to IetfLang.Chinese.Hans, + IetfLang.Chinese.Hans.CN.code.lowercase() to IetfLang.Chinese.Hans.CN, + IetfLang.Chinese.Hans.HK.code.lowercase() to IetfLang.Chinese.Hans.HK, + IetfLang.Chinese.Hans.MO.code.lowercase() to IetfLang.Chinese.Hans.MO, + IetfLang.Chinese.Hans.SG.code.lowercase() to IetfLang.Chinese.Hans.SG, + IetfLang.Chinese.Hant.code.lowercase() to IetfLang.Chinese.Hant, + IetfLang.Chinese.Hant.HK.code.lowercase() to IetfLang.Chinese.Hant.HK, + IetfLang.Chinese.Hant.MO.code.lowercase() to IetfLang.Chinese.Hant.MO, + IetfLang.Chinese.Hant.TW.code.lowercase() to IetfLang.Chinese.Hant.TW, + IetfLang.Chuukese.code.lowercase() to IetfLang.Chuukese, + IetfLang.Mari.code.lowercase() to IetfLang.Mari, + IetfLang.ChinookJargon.code.lowercase() to IetfLang.ChinookJargon, + IetfLang.Choctaw.code.lowercase() to IetfLang.Choctaw, + IetfLang.ChipewyanDeneSuline.code.lowercase() to IetfLang.ChipewyanDeneSuline, + IetfLang.Cherokee.code.lowercase() to IetfLang.Cherokee, + IetfLang.Cherokee.US.code.lowercase() to IetfLang.Cherokee.US, IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic.code.lowercase() to IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic, IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic.RU.code.lowercase() to IetfLang.ChurchSlavicOldSlavonicChurchSlavonicOldBulgarianOldChurchSlavonic.RU, IetfLang.Chuvash.code.lowercase() to IetfLang.Chuvash, - IetfLang.Welsh.code.lowercase() to IetfLang.Welsh, - IetfLang.Welsh.GB.code.lowercase() to IetfLang.Welsh.GB, + IetfLang.Cheyenne.code.lowercase() to IetfLang.Cheyenne, + IetfLang.ChamicLanguages.code.lowercase() to IetfLang.ChamicLanguages, + IetfLang.Coptic.code.lowercase() to IetfLang.Coptic, + IetfLang.Cornish.code.lowercase() to IetfLang.Cornish, + IetfLang.Cornish.GB.code.lowercase() to IetfLang.Cornish.GB, + IetfLang.Corsican.code.lowercase() to IetfLang.Corsican, + IetfLang.CreolesAndPidginsEnglishBased.code.lowercase() to IetfLang.CreolesAndPidginsEnglishBased, + IetfLang.CreolesAndPidginsFrenchbased.code.lowercase() to IetfLang.CreolesAndPidginsFrenchbased, + IetfLang.CreolesAndPidginsPortuguesebased.code.lowercase() to IetfLang.CreolesAndPidginsPortuguesebased, + IetfLang.Cree.code.lowercase() to IetfLang.Cree, + IetfLang.CrimeanTatarCrimeanTurkish.code.lowercase() to IetfLang.CrimeanTatarCrimeanTurkish, + IetfLang.CreolesAndPidgins.code.lowercase() to IetfLang.CreolesAndPidgins, + IetfLang.Kashubian.code.lowercase() to IetfLang.Kashubian, + IetfLang.CushiticLanguages.code.lowercase() to IetfLang.CushiticLanguages, + IetfLang.Czech.code.lowercase() to IetfLang.Czech, + IetfLang.Czech.CZ.code.lowercase() to IetfLang.Czech.CZ, + IetfLang.Dakota.code.lowercase() to IetfLang.Dakota, IetfLang.Danish.code.lowercase() to IetfLang.Danish, IetfLang.Danish.DK.code.lowercase() to IetfLang.Danish.DK, IetfLang.Danish.GL.code.lowercase() to IetfLang.Danish.GL, - IetfLang.German.code.lowercase() to IetfLang.German, - IetfLang.German.AT.code.lowercase() to IetfLang.German.AT, - IetfLang.German.BE.code.lowercase() to IetfLang.German.BE, - IetfLang.German.CH.code.lowercase() to IetfLang.German.CH, - IetfLang.German.DE.code.lowercase() to IetfLang.German.DE, - IetfLang.German.IT.code.lowercase() to IetfLang.German.IT, - IetfLang.German.LI.code.lowercase() to IetfLang.German.LI, - IetfLang.German.LU.code.lowercase() to IetfLang.German.LU, + IetfLang.Dargwa.code.lowercase() to IetfLang.Dargwa, + IetfLang.LandDayakLanguages.code.lowercase() to IetfLang.LandDayakLanguages, + IetfLang.Delaware.code.lowercase() to IetfLang.Delaware, + IetfLang.SlaveAthapascan.code.lowercase() to IetfLang.SlaveAthapascan, + IetfLang.Dogrib.code.lowercase() to IetfLang.Dogrib, + IetfLang.Dinka.code.lowercase() to IetfLang.Dinka, IetfLang.DivehiDhivehiMaldivian.code.lowercase() to IetfLang.DivehiDhivehiMaldivian, + IetfLang.Dogri.code.lowercase() to IetfLang.Dogri, + IetfLang.DravidianLanguages.code.lowercase() to IetfLang.DravidianLanguages, + IetfLang.LowerSorbian.code.lowercase() to IetfLang.LowerSorbian, + IetfLang.LowerSorbian.DE.code.lowercase() to IetfLang.LowerSorbian.DE, + IetfLang.Duala.code.lowercase() to IetfLang.Duala, + IetfLang.Duala.CM.code.lowercase() to IetfLang.Duala.CM, + IetfLang.DutchMiddleCa_10501350.code.lowercase() to IetfLang.DutchMiddleCa_10501350, + IetfLang.DutchFlemish.code.lowercase() to IetfLang.DutchFlemish, + IetfLang.DutchFlemish.AW.code.lowercase() to IetfLang.DutchFlemish.AW, + IetfLang.DutchFlemish.BE.code.lowercase() to IetfLang.DutchFlemish.BE, + IetfLang.DutchFlemish.BQ.code.lowercase() to IetfLang.DutchFlemish.BQ, + IetfLang.DutchFlemish.CW.code.lowercase() to IetfLang.DutchFlemish.CW, + IetfLang.DutchFlemish.NL.code.lowercase() to IetfLang.DutchFlemish.NL, + IetfLang.DutchFlemish.SR.code.lowercase() to IetfLang.DutchFlemish.SR, + IetfLang.DutchFlemish.SX.code.lowercase() to IetfLang.DutchFlemish.SX, + IetfLang.Dyula.code.lowercase() to IetfLang.Dyula, IetfLang.Dzongkha.code.lowercase() to IetfLang.Dzongkha, IetfLang.Dzongkha.BT.code.lowercase() to IetfLang.Dzongkha.BT, - IetfLang.Ewe.code.lowercase() to IetfLang.Ewe, - IetfLang.Ewe.GH.code.lowercase() to IetfLang.Ewe.GH, - IetfLang.Ewe.TG.code.lowercase() to IetfLang.Ewe.TG, - IetfLang.GreekModern1453.code.lowercase() to IetfLang.GreekModern1453, - IetfLang.GreekModern1453.CY.code.lowercase() to IetfLang.GreekModern1453.CY, - IetfLang.GreekModern1453.GR.code.lowercase() to IetfLang.GreekModern1453.GR, + IetfLang.Efik.code.lowercase() to IetfLang.Efik, + IetfLang.EgyptianAncient.code.lowercase() to IetfLang.EgyptianAncient, + IetfLang.Ekajuk.code.lowercase() to IetfLang.Ekajuk, + IetfLang.Elamite.code.lowercase() to IetfLang.Elamite, IetfLang.English.code.lowercase() to IetfLang.English, IetfLang.English.L001.code.lowercase() to IetfLang.English.L001, IetfLang.English.L150.code.lowercase() to IetfLang.English.L150, - IetfLang.English.AE.code.lowercase() to IetfLang.English.AE, IetfLang.English.AG.code.lowercase() to IetfLang.English.AG, IetfLang.English.AI.code.lowercase() to IetfLang.English.AI, IetfLang.English.AS.code.lowercase() to IetfLang.English.AS, @@ -884,77 +1274,28 @@ val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { IetfLang.English.ZA.code.lowercase() to IetfLang.English.ZA, IetfLang.English.ZM.code.lowercase() to IetfLang.English.ZM, IetfLang.English.ZW.code.lowercase() to IetfLang.English.ZW, + IetfLang.EnglishMiddle11001500.code.lowercase() to IetfLang.EnglishMiddle11001500, IetfLang.Esperanto.code.lowercase() to IetfLang.Esperanto, IetfLang.Esperanto.L001.code.lowercase() to IetfLang.Esperanto.L001, - IetfLang.SpanishCastilian.code.lowercase() to IetfLang.SpanishCastilian, - IetfLang.SpanishCastilian.L419.code.lowercase() to IetfLang.SpanishCastilian.L419, - IetfLang.SpanishCastilian.AR.code.lowercase() to IetfLang.SpanishCastilian.AR, - IetfLang.SpanishCastilian.BO.code.lowercase() to IetfLang.SpanishCastilian.BO, - IetfLang.SpanishCastilian.BR.code.lowercase() to IetfLang.SpanishCastilian.BR, - IetfLang.SpanishCastilian.BZ.code.lowercase() to IetfLang.SpanishCastilian.BZ, - IetfLang.SpanishCastilian.CL.code.lowercase() to IetfLang.SpanishCastilian.CL, - IetfLang.SpanishCastilian.CO.code.lowercase() to IetfLang.SpanishCastilian.CO, - IetfLang.SpanishCastilian.CR.code.lowercase() to IetfLang.SpanishCastilian.CR, - IetfLang.SpanishCastilian.CU.code.lowercase() to IetfLang.SpanishCastilian.CU, - IetfLang.SpanishCastilian.DO.code.lowercase() to IetfLang.SpanishCastilian.DO, - IetfLang.SpanishCastilian.EA.code.lowercase() to IetfLang.SpanishCastilian.EA, - IetfLang.SpanishCastilian.EC.code.lowercase() to IetfLang.SpanishCastilian.EC, - IetfLang.SpanishCastilian.ES.code.lowercase() to IetfLang.SpanishCastilian.ES, - IetfLang.SpanishCastilian.GQ.code.lowercase() to IetfLang.SpanishCastilian.GQ, - IetfLang.SpanishCastilian.GT.code.lowercase() to IetfLang.SpanishCastilian.GT, - IetfLang.SpanishCastilian.HN.code.lowercase() to IetfLang.SpanishCastilian.HN, - IetfLang.SpanishCastilian.IC.code.lowercase() to IetfLang.SpanishCastilian.IC, - IetfLang.SpanishCastilian.MX.code.lowercase() to IetfLang.SpanishCastilian.MX, - IetfLang.SpanishCastilian.NI.code.lowercase() to IetfLang.SpanishCastilian.NI, - IetfLang.SpanishCastilian.PA.code.lowercase() to IetfLang.SpanishCastilian.PA, - IetfLang.SpanishCastilian.PE.code.lowercase() to IetfLang.SpanishCastilian.PE, - IetfLang.SpanishCastilian.PH.code.lowercase() to IetfLang.SpanishCastilian.PH, - IetfLang.SpanishCastilian.PR.code.lowercase() to IetfLang.SpanishCastilian.PR, - IetfLang.SpanishCastilian.PY.code.lowercase() to IetfLang.SpanishCastilian.PY, - IetfLang.SpanishCastilian.SV.code.lowercase() to IetfLang.SpanishCastilian.SV, - IetfLang.SpanishCastilian.US.code.lowercase() to IetfLang.SpanishCastilian.US, - IetfLang.SpanishCastilian.UY.code.lowercase() to IetfLang.SpanishCastilian.UY, - IetfLang.SpanishCastilian.VE.code.lowercase() to IetfLang.SpanishCastilian.VE, IetfLang.Estonian.code.lowercase() to IetfLang.Estonian, IetfLang.Estonian.EE.code.lowercase() to IetfLang.Estonian.EE, - IetfLang.Basque.code.lowercase() to IetfLang.Basque, - IetfLang.Basque.ES.code.lowercase() to IetfLang.Basque.ES, - IetfLang.Persian.code.lowercase() to IetfLang.Persian, - IetfLang.Persian.AF.code.lowercase() to IetfLang.Persian.AF, - IetfLang.Persian.IR.code.lowercase() to IetfLang.Persian.IR, - IetfLang.Fulah.code.lowercase() to IetfLang.Fulah, - IetfLang.Fulah.Adlm.code.lowercase() to IetfLang.Fulah.Adlm, - IetfLang.Fulah.Adlm.BF.code.lowercase() to IetfLang.Fulah.Adlm.BF, - IetfLang.Fulah.Adlm.CM.code.lowercase() to IetfLang.Fulah.Adlm.CM, - IetfLang.Fulah.Adlm.GH.code.lowercase() to IetfLang.Fulah.Adlm.GH, - IetfLang.Fulah.Adlm.GM.code.lowercase() to IetfLang.Fulah.Adlm.GM, - IetfLang.Fulah.Adlm.GN.code.lowercase() to IetfLang.Fulah.Adlm.GN, - IetfLang.Fulah.Adlm.GW.code.lowercase() to IetfLang.Fulah.Adlm.GW, - IetfLang.Fulah.Adlm.LR.code.lowercase() to IetfLang.Fulah.Adlm.LR, - IetfLang.Fulah.Adlm.MR.code.lowercase() to IetfLang.Fulah.Adlm.MR, - IetfLang.Fulah.Adlm.NE.code.lowercase() to IetfLang.Fulah.Adlm.NE, - IetfLang.Fulah.Adlm.NG.code.lowercase() to IetfLang.Fulah.Adlm.NG, - IetfLang.Fulah.Adlm.SL.code.lowercase() to IetfLang.Fulah.Adlm.SL, - IetfLang.Fulah.Adlm.SN.code.lowercase() to IetfLang.Fulah.Adlm.SN, - IetfLang.Fulah.Latn.code.lowercase() to IetfLang.Fulah.Latn, - IetfLang.Fulah.Latn.BF.code.lowercase() to IetfLang.Fulah.Latn.BF, - IetfLang.Fulah.Latn.CM.code.lowercase() to IetfLang.Fulah.Latn.CM, - IetfLang.Fulah.Latn.GH.code.lowercase() to IetfLang.Fulah.Latn.GH, - IetfLang.Fulah.Latn.GM.code.lowercase() to IetfLang.Fulah.Latn.GM, - IetfLang.Fulah.Latn.GN.code.lowercase() to IetfLang.Fulah.Latn.GN, - IetfLang.Fulah.Latn.GW.code.lowercase() to IetfLang.Fulah.Latn.GW, - IetfLang.Fulah.Latn.LR.code.lowercase() to IetfLang.Fulah.Latn.LR, - IetfLang.Fulah.Latn.MR.code.lowercase() to IetfLang.Fulah.Latn.MR, - IetfLang.Fulah.Latn.NE.code.lowercase() to IetfLang.Fulah.Latn.NE, - IetfLang.Fulah.Latn.NG.code.lowercase() to IetfLang.Fulah.Latn.NG, - IetfLang.Fulah.Latn.SL.code.lowercase() to IetfLang.Fulah.Latn.SL, - IetfLang.Fulah.Latn.SN.code.lowercase() to IetfLang.Fulah.Latn.SN, - IetfLang.Finnish.code.lowercase() to IetfLang.Finnish, - IetfLang.Finnish.FI.code.lowercase() to IetfLang.Finnish.FI, - IetfLang.Fijian.code.lowercase() to IetfLang.Fijian, + IetfLang.Ewe.code.lowercase() to IetfLang.Ewe, + IetfLang.Ewe.GH.code.lowercase() to IetfLang.Ewe.GH, + IetfLang.Ewe.TG.code.lowercase() to IetfLang.Ewe.TG, + IetfLang.Ewondo.code.lowercase() to IetfLang.Ewondo, + IetfLang.Ewondo.CM.code.lowercase() to IetfLang.Ewondo.CM, + IetfLang.Fang.code.lowercase() to IetfLang.Fang, IetfLang.Faroese.code.lowercase() to IetfLang.Faroese, IetfLang.Faroese.DK.code.lowercase() to IetfLang.Faroese.DK, IetfLang.Faroese.FO.code.lowercase() to IetfLang.Faroese.FO, + IetfLang.Fanti.code.lowercase() to IetfLang.Fanti, + IetfLang.Fijian.code.lowercase() to IetfLang.Fijian, + IetfLang.FilipinoPilipino.code.lowercase() to IetfLang.FilipinoPilipino, + IetfLang.FilipinoPilipino.PH.code.lowercase() to IetfLang.FilipinoPilipino.PH, + IetfLang.Finnish.code.lowercase() to IetfLang.Finnish, + IetfLang.Finnish.FI.code.lowercase() to IetfLang.Finnish.FI, + IetfLang.FinnoUgrianLanguages.code.lowercase() to IetfLang.FinnoUgrianLanguages, + IetfLang.Fon.code.lowercase() to IetfLang.Fon, IetfLang.French.code.lowercase() to IetfLang.French, IetfLang.French.BE.code.lowercase() to IetfLang.French.BE, IetfLang.French.BF.code.lowercase() to IetfLang.French.BF, @@ -1002,175 +1343,315 @@ val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { IetfLang.French.VU.code.lowercase() to IetfLang.French.VU, IetfLang.French.WF.code.lowercase() to IetfLang.French.WF, IetfLang.French.YT.code.lowercase() to IetfLang.French.YT, + IetfLang.FrenchMiddleCa_14001600.code.lowercase() to IetfLang.FrenchMiddleCa_14001600, + IetfLang.FrenchOld842ca_1400.code.lowercase() to IetfLang.FrenchOld842ca_1400, + IetfLang.NorthernFrisian.code.lowercase() to IetfLang.NorthernFrisian, + IetfLang.EasternFrisian.code.lowercase() to IetfLang.EasternFrisian, IetfLang.WesternFrisian.code.lowercase() to IetfLang.WesternFrisian, IetfLang.WesternFrisian.NL.code.lowercase() to IetfLang.WesternFrisian.NL, - IetfLang.Irish.code.lowercase() to IetfLang.Irish, - IetfLang.Irish.GB.code.lowercase() to IetfLang.Irish.GB, - IetfLang.Irish.IE.code.lowercase() to IetfLang.Irish.IE, + IetfLang.Fulah.code.lowercase() to IetfLang.Fulah, + IetfLang.Fulah.CM.code.lowercase() to IetfLang.Fulah.CM, + IetfLang.Fulah.GN.code.lowercase() to IetfLang.Fulah.GN, + IetfLang.Fulah.MR.code.lowercase() to IetfLang.Fulah.MR, + IetfLang.Fulah.SN.code.lowercase() to IetfLang.Fulah.SN, + IetfLang.Friulian.code.lowercase() to IetfLang.Friulian, + IetfLang.Friulian.IT.code.lowercase() to IetfLang.Friulian.IT, + IetfLang.Ga.code.lowercase() to IetfLang.Ga, + IetfLang.Gayo.code.lowercase() to IetfLang.Gayo, + IetfLang.Gbaya.code.lowercase() to IetfLang.Gbaya, + IetfLang.GermanicLanguages.code.lowercase() to IetfLang.GermanicLanguages, + IetfLang.Georgian.code.lowercase() to IetfLang.Georgian, + IetfLang.Georgian.GE.code.lowercase() to IetfLang.Georgian.GE, + IetfLang.German.code.lowercase() to IetfLang.German, + IetfLang.German.AT.code.lowercase() to IetfLang.German.AT, + IetfLang.German.BE.code.lowercase() to IetfLang.German.BE, + IetfLang.German.CH.code.lowercase() to IetfLang.German.CH, + IetfLang.German.DE.code.lowercase() to IetfLang.German.DE, + IetfLang.German.IT.code.lowercase() to IetfLang.German.IT, + IetfLang.German.LI.code.lowercase() to IetfLang.German.LI, + IetfLang.German.LU.code.lowercase() to IetfLang.German.LU, + IetfLang.Geez.code.lowercase() to IetfLang.Geez, + IetfLang.Gilbertese.code.lowercase() to IetfLang.Gilbertese, IetfLang.GaelicScottishGaelic.code.lowercase() to IetfLang.GaelicScottishGaelic, IetfLang.GaelicScottishGaelic.GB.code.lowercase() to IetfLang.GaelicScottishGaelic.GB, + IetfLang.Irish.code.lowercase() to IetfLang.Irish, + IetfLang.Irish.IE.code.lowercase() to IetfLang.Irish.IE, IetfLang.Galician.code.lowercase() to IetfLang.Galician, IetfLang.Galician.ES.code.lowercase() to IetfLang.Galician.ES, - IetfLang.Guarani.code.lowercase() to IetfLang.Guarani, - IetfLang.Gujarati.code.lowercase() to IetfLang.Gujarati, - IetfLang.Gujarati.IN.code.lowercase() to IetfLang.Gujarati.IN, IetfLang.Manx.code.lowercase() to IetfLang.Manx, IetfLang.Manx.IM.code.lowercase() to IetfLang.Manx.IM, + IetfLang.GermanMiddleHighCa_10501500.code.lowercase() to IetfLang.GermanMiddleHighCa_10501500, + IetfLang.GermanOldHighCa_7501050.code.lowercase() to IetfLang.GermanOldHighCa_7501050, + IetfLang.Gondi.code.lowercase() to IetfLang.Gondi, + IetfLang.Gorontalo.code.lowercase() to IetfLang.Gorontalo, + IetfLang.Gothic.code.lowercase() to IetfLang.Gothic, + IetfLang.Grebo.code.lowercase() to IetfLang.Grebo, + IetfLang.GreekAncientTo1453.code.lowercase() to IetfLang.GreekAncientTo1453, + IetfLang.GreekModern1453.code.lowercase() to IetfLang.GreekModern1453, + IetfLang.GreekModern1453.CY.code.lowercase() to IetfLang.GreekModern1453.CY, + IetfLang.GreekModern1453.GR.code.lowercase() to IetfLang.GreekModern1453.GR, + IetfLang.Guarani.code.lowercase() to IetfLang.Guarani, + IetfLang.SwissGermanAlemannicAlsatian.code.lowercase() to IetfLang.SwissGermanAlemannicAlsatian, + IetfLang.SwissGermanAlemannicAlsatian.CH.code.lowercase() to IetfLang.SwissGermanAlemannicAlsatian.CH, + IetfLang.SwissGermanAlemannicAlsatian.FR.code.lowercase() to IetfLang.SwissGermanAlemannicAlsatian.FR, + IetfLang.SwissGermanAlemannicAlsatian.LI.code.lowercase() to IetfLang.SwissGermanAlemannicAlsatian.LI, + IetfLang.Gujarati.code.lowercase() to IetfLang.Gujarati, + IetfLang.Gujarati.IN.code.lowercase() to IetfLang.Gujarati.IN, + IetfLang.Gwich_in.code.lowercase() to IetfLang.Gwich_in, + IetfLang.Haida.code.lowercase() to IetfLang.Haida, + IetfLang.HaitianHaitianCreole.code.lowercase() to IetfLang.HaitianHaitianCreole, IetfLang.Hausa.code.lowercase() to IetfLang.Hausa, IetfLang.Hausa.GH.code.lowercase() to IetfLang.Hausa.GH, IetfLang.Hausa.NE.code.lowercase() to IetfLang.Hausa.NE, IetfLang.Hausa.NG.code.lowercase() to IetfLang.Hausa.NG, + IetfLang.Hawaiian.code.lowercase() to IetfLang.Hawaiian, + IetfLang.Hawaiian.US.code.lowercase() to IetfLang.Hawaiian.US, IetfLang.Hebrew.code.lowercase() to IetfLang.Hebrew, IetfLang.Hebrew.IL.code.lowercase() to IetfLang.Hebrew.IL, + IetfLang.Herero.code.lowercase() to IetfLang.Herero, + IetfLang.Hiligaynon.code.lowercase() to IetfLang.Hiligaynon, + IetfLang.HimachaliLanguagesWesternPahariLanguages.code.lowercase() to IetfLang.HimachaliLanguagesWesternPahariLanguages, IetfLang.Hindi.code.lowercase() to IetfLang.Hindi, IetfLang.Hindi.IN.code.lowercase() to IetfLang.Hindi.IN, + IetfLang.Hittite.code.lowercase() to IetfLang.Hittite, + IetfLang.HmongMong.code.lowercase() to IetfLang.HmongMong, IetfLang.HiriMotu.code.lowercase() to IetfLang.HiriMotu, IetfLang.Croatian.code.lowercase() to IetfLang.Croatian, IetfLang.Croatian.BA.code.lowercase() to IetfLang.Croatian.BA, IetfLang.Croatian.HR.code.lowercase() to IetfLang.Croatian.HR, - IetfLang.HaitianHaitianCreole.code.lowercase() to IetfLang.HaitianHaitianCreole, + IetfLang.UpperSorbian.code.lowercase() to IetfLang.UpperSorbian, + IetfLang.UpperSorbian.DE.code.lowercase() to IetfLang.UpperSorbian.DE, IetfLang.Hungarian.code.lowercase() to IetfLang.Hungarian, IetfLang.Hungarian.HU.code.lowercase() to IetfLang.Hungarian.HU, - IetfLang.Armenian.code.lowercase() to IetfLang.Armenian, - IetfLang.Armenian.AM.code.lowercase() to IetfLang.Armenian.AM, - IetfLang.Herero.code.lowercase() to IetfLang.Herero, - IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.code.lowercase() to IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation, - IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.L001.code.lowercase() to IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.L001, - IetfLang.Indonesian.code.lowercase() to IetfLang.Indonesian, - IetfLang.Indonesian.ID.code.lowercase() to IetfLang.Indonesian.ID, - IetfLang.InterlingueOccidental.code.lowercase() to IetfLang.InterlingueOccidental, + IetfLang.Hupa.code.lowercase() to IetfLang.Hupa, + IetfLang.Iban.code.lowercase() to IetfLang.Iban, IetfLang.Igbo.code.lowercase() to IetfLang.Igbo, IetfLang.Igbo.NG.code.lowercase() to IetfLang.Igbo.NG, - IetfLang.SichuanYiNuosu.code.lowercase() to IetfLang.SichuanYiNuosu, - IetfLang.SichuanYiNuosu.CN.code.lowercase() to IetfLang.SichuanYiNuosu.CN, - IetfLang.Inupiaq.code.lowercase() to IetfLang.Inupiaq, - IetfLang.Ido.code.lowercase() to IetfLang.Ido, IetfLang.Icelandic.code.lowercase() to IetfLang.Icelandic, IetfLang.Icelandic.IS.code.lowercase() to IetfLang.Icelandic.IS, + IetfLang.Ido.code.lowercase() to IetfLang.Ido, + IetfLang.SichuanYiNuosu.code.lowercase() to IetfLang.SichuanYiNuosu, + IetfLang.SichuanYiNuosu.CN.code.lowercase() to IetfLang.SichuanYiNuosu.CN, + IetfLang.IjoLanguages.code.lowercase() to IetfLang.IjoLanguages, + IetfLang.Inuktitut.code.lowercase() to IetfLang.Inuktitut, + IetfLang.InterlingueOccidental.code.lowercase() to IetfLang.InterlingueOccidental, + IetfLang.Iloko.code.lowercase() to IetfLang.Iloko, + IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation.code.lowercase() to IetfLang.InterlinguaInternationalAuxiliaryLanguageAssociation, + IetfLang.IndicLanguages.code.lowercase() to IetfLang.IndicLanguages, + IetfLang.Indonesian.code.lowercase() to IetfLang.Indonesian, + IetfLang.Indonesian.ID.code.lowercase() to IetfLang.Indonesian.ID, + IetfLang.IndoEuropeanLanguages.code.lowercase() to IetfLang.IndoEuropeanLanguages, + IetfLang.Ingush.code.lowercase() to IetfLang.Ingush, + IetfLang.Inupiaq.code.lowercase() to IetfLang.Inupiaq, + IetfLang.IranianLanguages.code.lowercase() to IetfLang.IranianLanguages, + IetfLang.IroquoianLanguages.code.lowercase() to IetfLang.IroquoianLanguages, IetfLang.Italian.code.lowercase() to IetfLang.Italian, IetfLang.Italian.CH.code.lowercase() to IetfLang.Italian.CH, IetfLang.Italian.IT.code.lowercase() to IetfLang.Italian.IT, IetfLang.Italian.SM.code.lowercase() to IetfLang.Italian.SM, IetfLang.Italian.VA.code.lowercase() to IetfLang.Italian.VA, - IetfLang.Inuktitut.code.lowercase() to IetfLang.Inuktitut, + IetfLang.Javanese.code.lowercase() to IetfLang.Javanese, + IetfLang.Lojban.code.lowercase() to IetfLang.Lojban, IetfLang.Japanese.code.lowercase() to IetfLang.Japanese, IetfLang.Japanese.JP.code.lowercase() to IetfLang.Japanese.JP, - IetfLang.Javanese.code.lowercase() to IetfLang.Javanese, - IetfLang.Javanese.ID.code.lowercase() to IetfLang.Javanese.ID, - IetfLang.Georgian.code.lowercase() to IetfLang.Georgian, - IetfLang.Georgian.GE.code.lowercase() to IetfLang.Georgian.GE, - IetfLang.Kongo.code.lowercase() to IetfLang.Kongo, - IetfLang.KikuyuGikuyu.code.lowercase() to IetfLang.KikuyuGikuyu, - IetfLang.KikuyuGikuyu.KE.code.lowercase() to IetfLang.KikuyuGikuyu.KE, - IetfLang.KuanyamaKwanyama.code.lowercase() to IetfLang.KuanyamaKwanyama, - IetfLang.Kazakh.code.lowercase() to IetfLang.Kazakh, - IetfLang.Kazakh.KZ.code.lowercase() to IetfLang.Kazakh.KZ, + IetfLang.JudeoPersian.code.lowercase() to IetfLang.JudeoPersian, + IetfLang.JudeoArabic.code.lowercase() to IetfLang.JudeoArabic, + IetfLang.KaraKalpak.code.lowercase() to IetfLang.KaraKalpak, + IetfLang.Kabyle.code.lowercase() to IetfLang.Kabyle, + IetfLang.Kabyle.DZ.code.lowercase() to IetfLang.Kabyle.DZ, + IetfLang.KachinJingpho.code.lowercase() to IetfLang.KachinJingpho, IetfLang.KalaallisutGreenlandic.code.lowercase() to IetfLang.KalaallisutGreenlandic, IetfLang.KalaallisutGreenlandic.GL.code.lowercase() to IetfLang.KalaallisutGreenlandic.GL, - IetfLang.CentralKhmer.code.lowercase() to IetfLang.CentralKhmer, - IetfLang.CentralKhmer.KH.code.lowercase() to IetfLang.CentralKhmer.KH, + IetfLang.Kamba.code.lowercase() to IetfLang.Kamba, + IetfLang.Kamba.KE.code.lowercase() to IetfLang.Kamba.KE, IetfLang.Kannada.code.lowercase() to IetfLang.Kannada, IetfLang.Kannada.IN.code.lowercase() to IetfLang.Kannada.IN, + IetfLang.KarenLanguages.code.lowercase() to IetfLang.KarenLanguages, + IetfLang.Kashmiri.code.lowercase() to IetfLang.Kashmiri, + IetfLang.Kashmiri.IN.code.lowercase() to IetfLang.Kashmiri.IN, + IetfLang.Kanuri.code.lowercase() to IetfLang.Kanuri, + IetfLang.Kawi.code.lowercase() to IetfLang.Kawi, + IetfLang.Kazakh.code.lowercase() to IetfLang.Kazakh, + IetfLang.Kazakh.KZ.code.lowercase() to IetfLang.Kazakh.KZ, + IetfLang.Kabardian.code.lowercase() to IetfLang.Kabardian, + IetfLang.Khasi.code.lowercase() to IetfLang.Khasi, + IetfLang.KhoisanLanguages.code.lowercase() to IetfLang.KhoisanLanguages, + IetfLang.CentralKhmer.code.lowercase() to IetfLang.CentralKhmer, + IetfLang.CentralKhmer.KH.code.lowercase() to IetfLang.CentralKhmer.KH, + IetfLang.KhotaneseSakan.code.lowercase() to IetfLang.KhotaneseSakan, + IetfLang.KikuyuGikuyu.code.lowercase() to IetfLang.KikuyuGikuyu, + IetfLang.KikuyuGikuyu.KE.code.lowercase() to IetfLang.KikuyuGikuyu.KE, + IetfLang.Kinyarwanda.code.lowercase() to IetfLang.Kinyarwanda, + IetfLang.Kinyarwanda.RW.code.lowercase() to IetfLang.Kinyarwanda.RW, + IetfLang.KirghizKyrgyz.code.lowercase() to IetfLang.KirghizKyrgyz, + IetfLang.KirghizKyrgyz.KG.code.lowercase() to IetfLang.KirghizKyrgyz.KG, + IetfLang.Kimbundu.code.lowercase() to IetfLang.Kimbundu, + IetfLang.Konkani.code.lowercase() to IetfLang.Konkani, + IetfLang.Konkani.IN.code.lowercase() to IetfLang.Konkani.IN, + IetfLang.Komi.code.lowercase() to IetfLang.Komi, + IetfLang.Kongo.code.lowercase() to IetfLang.Kongo, IetfLang.Korean.code.lowercase() to IetfLang.Korean, IetfLang.Korean.KP.code.lowercase() to IetfLang.Korean.KP, IetfLang.Korean.KR.code.lowercase() to IetfLang.Korean.KR, - IetfLang.Kanuri.code.lowercase() to IetfLang.Kanuri, - IetfLang.Kashmiri.code.lowercase() to IetfLang.Kashmiri, - IetfLang.Kashmiri.Arab.code.lowercase() to IetfLang.Kashmiri.Arab, - IetfLang.Kashmiri.Arab.IN.code.lowercase() to IetfLang.Kashmiri.Arab.IN, + IetfLang.Kosraean.code.lowercase() to IetfLang.Kosraean, + IetfLang.Kpelle.code.lowercase() to IetfLang.Kpelle, + IetfLang.KarachayBalkar.code.lowercase() to IetfLang.KarachayBalkar, + IetfLang.Karelian.code.lowercase() to IetfLang.Karelian, + IetfLang.KruLanguages.code.lowercase() to IetfLang.KruLanguages, + IetfLang.Kurukh.code.lowercase() to IetfLang.Kurukh, + IetfLang.KuanyamaKwanyama.code.lowercase() to IetfLang.KuanyamaKwanyama, + IetfLang.Kumyk.code.lowercase() to IetfLang.Kumyk, IetfLang.Kurdish.code.lowercase() to IetfLang.Kurdish, - IetfLang.Kurdish.TR.code.lowercase() to IetfLang.Kurdish.TR, - IetfLang.Komi.code.lowercase() to IetfLang.Komi, - IetfLang.Cornish.code.lowercase() to IetfLang.Cornish, - IetfLang.Cornish.GB.code.lowercase() to IetfLang.Cornish.GB, - IetfLang.KirghizKyrgyz.code.lowercase() to IetfLang.KirghizKyrgyz, - IetfLang.KirghizKyrgyz.KG.code.lowercase() to IetfLang.KirghizKyrgyz.KG, + IetfLang.Kutenai.code.lowercase() to IetfLang.Kutenai, + IetfLang.Ladino.code.lowercase() to IetfLang.Ladino, + IetfLang.Lahnda.code.lowercase() to IetfLang.Lahnda, + IetfLang.Lamba.code.lowercase() to IetfLang.Lamba, + IetfLang.Lao.code.lowercase() to IetfLang.Lao, + IetfLang.Lao.LA.code.lowercase() to IetfLang.Lao.LA, IetfLang.Latin.code.lowercase() to IetfLang.Latin, - IetfLang.LuxembourgishLetzeburgesch.code.lowercase() to IetfLang.LuxembourgishLetzeburgesch, - IetfLang.LuxembourgishLetzeburgesch.LU.code.lowercase() to IetfLang.LuxembourgishLetzeburgesch.LU, - IetfLang.Ganda.code.lowercase() to IetfLang.Ganda, - IetfLang.Ganda.UG.code.lowercase() to IetfLang.Ganda.UG, + IetfLang.Latvian.code.lowercase() to IetfLang.Latvian, + IetfLang.Latvian.LV.code.lowercase() to IetfLang.Latvian.LV, + IetfLang.Lezghian.code.lowercase() to IetfLang.Lezghian, IetfLang.LimburganLimburgerLimburgish.code.lowercase() to IetfLang.LimburganLimburgerLimburgish, IetfLang.Lingala.code.lowercase() to IetfLang.Lingala, IetfLang.Lingala.AO.code.lowercase() to IetfLang.Lingala.AO, IetfLang.Lingala.CD.code.lowercase() to IetfLang.Lingala.CD, IetfLang.Lingala.CF.code.lowercase() to IetfLang.Lingala.CF, IetfLang.Lingala.CG.code.lowercase() to IetfLang.Lingala.CG, - IetfLang.Lao.code.lowercase() to IetfLang.Lao, - IetfLang.Lao.LA.code.lowercase() to IetfLang.Lao.LA, IetfLang.Lithuanian.code.lowercase() to IetfLang.Lithuanian, IetfLang.Lithuanian.LT.code.lowercase() to IetfLang.Lithuanian.LT, + IetfLang.Mongo.code.lowercase() to IetfLang.Mongo, + IetfLang.Lozi.code.lowercase() to IetfLang.Lozi, + IetfLang.LuxembourgishLetzeburgesch.code.lowercase() to IetfLang.LuxembourgishLetzeburgesch, + IetfLang.LuxembourgishLetzeburgesch.LU.code.lowercase() to IetfLang.LuxembourgishLetzeburgesch.LU, + IetfLang.LubaLulua.code.lowercase() to IetfLang.LubaLulua, IetfLang.LubaKatanga.code.lowercase() to IetfLang.LubaKatanga, IetfLang.LubaKatanga.CD.code.lowercase() to IetfLang.LubaKatanga.CD, - IetfLang.Latvian.code.lowercase() to IetfLang.Latvian, - IetfLang.Latvian.LV.code.lowercase() to IetfLang.Latvian.LV, - IetfLang.Malagasy.code.lowercase() to IetfLang.Malagasy, - IetfLang.Malagasy.MG.code.lowercase() to IetfLang.Malagasy.MG, - IetfLang.Marshallese.code.lowercase() to IetfLang.Marshallese, - IetfLang.Maori.code.lowercase() to IetfLang.Maori, - IetfLang.Maori.NZ.code.lowercase() to IetfLang.Maori.NZ, + IetfLang.Ganda.code.lowercase() to IetfLang.Ganda, + IetfLang.Ganda.UG.code.lowercase() to IetfLang.Ganda.UG, + IetfLang.Luiseno.code.lowercase() to IetfLang.Luiseno, + IetfLang.Lunda.code.lowercase() to IetfLang.Lunda, + IetfLang.LuoKenyaAndTanzania.code.lowercase() to IetfLang.LuoKenyaAndTanzania, + IetfLang.LuoKenyaAndTanzania.KE.code.lowercase() to IetfLang.LuoKenyaAndTanzania.KE, + IetfLang.Lushai.code.lowercase() to IetfLang.Lushai, IetfLang.Macedonian.code.lowercase() to IetfLang.Macedonian, IetfLang.Macedonian.MK.code.lowercase() to IetfLang.Macedonian.MK, + IetfLang.Madurese.code.lowercase() to IetfLang.Madurese, + IetfLang.Magahi.code.lowercase() to IetfLang.Magahi, + IetfLang.Marshallese.code.lowercase() to IetfLang.Marshallese, + IetfLang.Maithili.code.lowercase() to IetfLang.Maithili, + IetfLang.Makasar.code.lowercase() to IetfLang.Makasar, IetfLang.Malayalam.code.lowercase() to IetfLang.Malayalam, IetfLang.Malayalam.IN.code.lowercase() to IetfLang.Malayalam.IN, - IetfLang.Mongolian.code.lowercase() to IetfLang.Mongolian, - IetfLang.Mongolian.MN.code.lowercase() to IetfLang.Mongolian.MN, + IetfLang.Mandingo.code.lowercase() to IetfLang.Mandingo, + IetfLang.Maori.code.lowercase() to IetfLang.Maori, + IetfLang.AustronesianLanguages.code.lowercase() to IetfLang.AustronesianLanguages, IetfLang.Marathi.code.lowercase() to IetfLang.Marathi, IetfLang.Marathi.IN.code.lowercase() to IetfLang.Marathi.IN, + IetfLang.Masai.code.lowercase() to IetfLang.Masai, + IetfLang.Masai.KE.code.lowercase() to IetfLang.Masai.KE, + IetfLang.Masai.TZ.code.lowercase() to IetfLang.Masai.TZ, IetfLang.Malay.code.lowercase() to IetfLang.Malay, IetfLang.Malay.BN.code.lowercase() to IetfLang.Malay.BN, - IetfLang.Malay.ID.code.lowercase() to IetfLang.Malay.ID, IetfLang.Malay.MY.code.lowercase() to IetfLang.Malay.MY, IetfLang.Malay.SG.code.lowercase() to IetfLang.Malay.SG, + IetfLang.Moksha.code.lowercase() to IetfLang.Moksha, + IetfLang.Mandar.code.lowercase() to IetfLang.Mandar, + IetfLang.Mende.code.lowercase() to IetfLang.Mende, + IetfLang.IrishMiddle9001200.code.lowercase() to IetfLang.IrishMiddle9001200, + IetfLang.Mi_kmaqMicmac.code.lowercase() to IetfLang.Mi_kmaqMicmac, + IetfLang.Minangkabau.code.lowercase() to IetfLang.Minangkabau, + IetfLang.UncodedLanguages.code.lowercase() to IetfLang.UncodedLanguages, + IetfLang.MonKhmerLanguages.code.lowercase() to IetfLang.MonKhmerLanguages, + IetfLang.Malagasy.code.lowercase() to IetfLang.Malagasy, + IetfLang.Malagasy.MG.code.lowercase() to IetfLang.Malagasy.MG, IetfLang.Maltese.code.lowercase() to IetfLang.Maltese, IetfLang.Maltese.MT.code.lowercase() to IetfLang.Maltese.MT, - IetfLang.Burmese.code.lowercase() to IetfLang.Burmese, - IetfLang.Burmese.MM.code.lowercase() to IetfLang.Burmese.MM, + IetfLang.Manchu.code.lowercase() to IetfLang.Manchu, + IetfLang.Manipuri.code.lowercase() to IetfLang.Manipuri, + IetfLang.ManoboLanguages.code.lowercase() to IetfLang.ManoboLanguages, + IetfLang.Mohawk.code.lowercase() to IetfLang.Mohawk, + IetfLang.Mongolian.code.lowercase() to IetfLang.Mongolian, + IetfLang.Mongolian.MN.code.lowercase() to IetfLang.Mongolian.MN, + IetfLang.Mossi.code.lowercase() to IetfLang.Mossi, + IetfLang.MultipleLanguages.code.lowercase() to IetfLang.MultipleLanguages, + IetfLang.MundaLanguages.code.lowercase() to IetfLang.MundaLanguages, + IetfLang.Creek.code.lowercase() to IetfLang.Creek, + IetfLang.Mirandese.code.lowercase() to IetfLang.Mirandese, + IetfLang.Marwari.code.lowercase() to IetfLang.Marwari, + IetfLang.MayanLanguages.code.lowercase() to IetfLang.MayanLanguages, + IetfLang.Erzya.code.lowercase() to IetfLang.Erzya, + IetfLang.NahuatlLanguages.code.lowercase() to IetfLang.NahuatlLanguages, + IetfLang.NorthAmericanIndianLanguages.code.lowercase() to IetfLang.NorthAmericanIndianLanguages, + IetfLang.Neapolitan.code.lowercase() to IetfLang.Neapolitan, IetfLang.Nauru.code.lowercase() to IetfLang.Nauru, - IetfLang.BokmalNorwegianNorwegianBokmal.code.lowercase() to IetfLang.BokmalNorwegianNorwegianBokmal, - IetfLang.BokmalNorwegianNorwegianBokmal.NO.code.lowercase() to IetfLang.BokmalNorwegianNorwegianBokmal.NO, - IetfLang.BokmalNorwegianNorwegianBokmal.SJ.code.lowercase() to IetfLang.BokmalNorwegianNorwegianBokmal.SJ, + IetfLang.NavajoNavaho.code.lowercase() to IetfLang.NavajoNavaho, + IetfLang.NdebeleSouthSouthNdebele.code.lowercase() to IetfLang.NdebeleSouthSouthNdebele, IetfLang.NdebeleNorthNorthNdebele.code.lowercase() to IetfLang.NdebeleNorthNorthNdebele, IetfLang.NdebeleNorthNorthNdebele.ZW.code.lowercase() to IetfLang.NdebeleNorthNorthNdebele.ZW, + IetfLang.Ndonga.code.lowercase() to IetfLang.Ndonga, + IetfLang.LowGermanLowSaxonGermanLowSaxonLow.code.lowercase() to IetfLang.LowGermanLowSaxonGermanLowSaxonLow, + IetfLang.LowGermanLowSaxonGermanLowSaxonLow.DE.code.lowercase() to IetfLang.LowGermanLowSaxonGermanLowSaxonLow.DE, + IetfLang.LowGermanLowSaxonGermanLowSaxonLow.NL.code.lowercase() to IetfLang.LowGermanLowSaxonGermanLowSaxonLow.NL, IetfLang.Nepali.code.lowercase() to IetfLang.Nepali, IetfLang.Nepali.IN.code.lowercase() to IetfLang.Nepali.IN, IetfLang.Nepali.NP.code.lowercase() to IetfLang.Nepali.NP, - IetfLang.Ndonga.code.lowercase() to IetfLang.Ndonga, - IetfLang.DutchFlemish.code.lowercase() to IetfLang.DutchFlemish, - IetfLang.DutchFlemish.AW.code.lowercase() to IetfLang.DutchFlemish.AW, - IetfLang.DutchFlemish.BE.code.lowercase() to IetfLang.DutchFlemish.BE, - IetfLang.DutchFlemish.BQ.code.lowercase() to IetfLang.DutchFlemish.BQ, - IetfLang.DutchFlemish.CW.code.lowercase() to IetfLang.DutchFlemish.CW, - IetfLang.DutchFlemish.NL.code.lowercase() to IetfLang.DutchFlemish.NL, - IetfLang.DutchFlemish.SR.code.lowercase() to IetfLang.DutchFlemish.SR, - IetfLang.DutchFlemish.SX.code.lowercase() to IetfLang.DutchFlemish.SX, + IetfLang.NepalBhasaNewari.code.lowercase() to IetfLang.NepalBhasaNewari, + IetfLang.Nias.code.lowercase() to IetfLang.Nias, + IetfLang.NigerKordofanianLanguages.code.lowercase() to IetfLang.NigerKordofanianLanguages, + IetfLang.Niuean.code.lowercase() to IetfLang.Niuean, IetfLang.NorwegianNynorskNynorskNorwegian.code.lowercase() to IetfLang.NorwegianNynorskNynorskNorwegian, IetfLang.NorwegianNynorskNynorskNorwegian.NO.code.lowercase() to IetfLang.NorwegianNynorskNynorskNorwegian.NO, + IetfLang.BokmalNorwegianNorwegianBokmal.code.lowercase() to IetfLang.BokmalNorwegianNorwegianBokmal, + IetfLang.BokmalNorwegianNorwegianBokmal.NO.code.lowercase() to IetfLang.BokmalNorwegianNorwegianBokmal.NO, + IetfLang.BokmalNorwegianNorwegianBokmal.SJ.code.lowercase() to IetfLang.BokmalNorwegianNorwegianBokmal.SJ, + IetfLang.Nogai.code.lowercase() to IetfLang.Nogai, + IetfLang.NorseOld.code.lowercase() to IetfLang.NorseOld, IetfLang.Norwegian.code.lowercase() to IetfLang.Norwegian, - IetfLang.NdebeleSouthSouthNdebele.code.lowercase() to IetfLang.NdebeleSouthSouthNdebele, - IetfLang.NavajoNavaho.code.lowercase() to IetfLang.NavajoNavaho, + IetfLang.N_Ko.code.lowercase() to IetfLang.N_Ko, + IetfLang.PediSepediNorthernSotho.code.lowercase() to IetfLang.PediSepediNorthernSotho, + IetfLang.NubianLanguages.code.lowercase() to IetfLang.NubianLanguages, + IetfLang.ClassicalNewariOldNewariClassicalNepalBhasa.code.lowercase() to IetfLang.ClassicalNewariOldNewariClassicalNepalBhasa, IetfLang.ChichewaChewaNyanja.code.lowercase() to IetfLang.ChichewaChewaNyanja, - IetfLang.OccitanPost1500.code.lowercase() to IetfLang.OccitanPost1500, + IetfLang.Nyamwezi.code.lowercase() to IetfLang.Nyamwezi, + IetfLang.Nyankole.code.lowercase() to IetfLang.Nyankole, + IetfLang.Nyankole.UG.code.lowercase() to IetfLang.Nyankole.UG, + IetfLang.Nyoro.code.lowercase() to IetfLang.Nyoro, + IetfLang.Nzima.code.lowercase() to IetfLang.Nzima, + IetfLang.OccitanPost1500Provencal.code.lowercase() to IetfLang.OccitanPost1500Provencal, IetfLang.Ojibwa.code.lowercase() to IetfLang.Ojibwa, + IetfLang.Oriya.code.lowercase() to IetfLang.Oriya, + IetfLang.Oriya.IN.code.lowercase() to IetfLang.Oriya.IN, IetfLang.Oromo.code.lowercase() to IetfLang.Oromo, IetfLang.Oromo.ET.code.lowercase() to IetfLang.Oromo.ET, IetfLang.Oromo.KE.code.lowercase() to IetfLang.Oromo.KE, - IetfLang.Oriya.code.lowercase() to IetfLang.Oriya, - IetfLang.Oriya.IN.code.lowercase() to IetfLang.Oriya.IN, + IetfLang.Osage.code.lowercase() to IetfLang.Osage, IetfLang.OssetianOssetic.code.lowercase() to IetfLang.OssetianOssetic, IetfLang.OssetianOssetic.GE.code.lowercase() to IetfLang.OssetianOssetic.GE, IetfLang.OssetianOssetic.RU.code.lowercase() to IetfLang.OssetianOssetic.RU, + IetfLang.TurkishOttoman15001928.code.lowercase() to IetfLang.TurkishOttoman15001928, + IetfLang.OtomianLanguages.code.lowercase() to IetfLang.OtomianLanguages, + IetfLang.PapuanLanguages.code.lowercase() to IetfLang.PapuanLanguages, + IetfLang.Pangasinan.code.lowercase() to IetfLang.Pangasinan, + IetfLang.Pahlavi.code.lowercase() to IetfLang.Pahlavi, + IetfLang.PampangaKapampangan.code.lowercase() to IetfLang.PampangaKapampangan, IetfLang.PanjabiPunjabi.code.lowercase() to IetfLang.PanjabiPunjabi, IetfLang.PanjabiPunjabi.Arab.code.lowercase() to IetfLang.PanjabiPunjabi.Arab, IetfLang.PanjabiPunjabi.Arab.PK.code.lowercase() to IetfLang.PanjabiPunjabi.Arab.PK, IetfLang.PanjabiPunjabi.Guru.code.lowercase() to IetfLang.PanjabiPunjabi.Guru, IetfLang.PanjabiPunjabi.Guru.IN.code.lowercase() to IetfLang.PanjabiPunjabi.Guru.IN, + IetfLang.Papiamento.code.lowercase() to IetfLang.Papiamento, + IetfLang.Palauan.code.lowercase() to IetfLang.Palauan, + IetfLang.PersianOldCa_600400B_C_.code.lowercase() to IetfLang.PersianOldCa_600400B_C_, + IetfLang.Persian.code.lowercase() to IetfLang.Persian, + IetfLang.Persian.AF.code.lowercase() to IetfLang.Persian.AF, + IetfLang.Persian.IR.code.lowercase() to IetfLang.Persian.IR, + IetfLang.PhilippineLanguages.code.lowercase() to IetfLang.PhilippineLanguages, + IetfLang.Phoenician.code.lowercase() to IetfLang.Phoenician, IetfLang.Pali.code.lowercase() to IetfLang.Pali, IetfLang.Polish.code.lowercase() to IetfLang.Polish, IetfLang.Polish.PL.code.lowercase() to IetfLang.Polish.PL, - IetfLang.PushtoPashto.code.lowercase() to IetfLang.PushtoPashto, - IetfLang.PushtoPashto.AF.code.lowercase() to IetfLang.PushtoPashto.AF, - IetfLang.PushtoPashto.PK.code.lowercase() to IetfLang.PushtoPashto.PK, + IetfLang.Pohnpeian.code.lowercase() to IetfLang.Pohnpeian, IetfLang.Portuguese.code.lowercase() to IetfLang.Portuguese, IetfLang.Portuguese.AO.code.lowercase() to IetfLang.Portuguese.AO, IetfLang.Portuguese.BR.code.lowercase() to IetfLang.Portuguese.BR, @@ -1184,17 +1665,28 @@ val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { IetfLang.Portuguese.PT.code.lowercase() to IetfLang.Portuguese.PT, IetfLang.Portuguese.ST.code.lowercase() to IetfLang.Portuguese.ST, IetfLang.Portuguese.TL.code.lowercase() to IetfLang.Portuguese.TL, + IetfLang.PrakritLanguages.code.lowercase() to IetfLang.PrakritLanguages, + IetfLang.ProvencalOldTo1500.code.lowercase() to IetfLang.ProvencalOldTo1500, + IetfLang.PushtoPashto.code.lowercase() to IetfLang.PushtoPashto, + IetfLang.PushtoPashto.AF.code.lowercase() to IetfLang.PushtoPashto.AF, + IetfLang.ReservedForLocalUse.code.lowercase() to IetfLang.ReservedForLocalUse, IetfLang.Quechua.code.lowercase() to IetfLang.Quechua, IetfLang.Quechua.BO.code.lowercase() to IetfLang.Quechua.BO, IetfLang.Quechua.EC.code.lowercase() to IetfLang.Quechua.EC, IetfLang.Quechua.PE.code.lowercase() to IetfLang.Quechua.PE, + IetfLang.Rajasthani.code.lowercase() to IetfLang.Rajasthani, + IetfLang.Rapanui.code.lowercase() to IetfLang.Rapanui, + IetfLang.RarotonganCookIslandsMaori.code.lowercase() to IetfLang.RarotonganCookIslandsMaori, + IetfLang.RomanceLanguages.code.lowercase() to IetfLang.RomanceLanguages, IetfLang.Romansh.code.lowercase() to IetfLang.Romansh, IetfLang.Romansh.CH.code.lowercase() to IetfLang.Romansh.CH, - IetfLang.Rundi.code.lowercase() to IetfLang.Rundi, - IetfLang.Rundi.BI.code.lowercase() to IetfLang.Rundi.BI, + IetfLang.Romany.code.lowercase() to IetfLang.Romany, IetfLang.RomanianMoldavianMoldovan.code.lowercase() to IetfLang.RomanianMoldavianMoldovan, IetfLang.RomanianMoldavianMoldovan.MD.code.lowercase() to IetfLang.RomanianMoldavianMoldovan.MD, IetfLang.RomanianMoldavianMoldovan.RO.code.lowercase() to IetfLang.RomanianMoldavianMoldovan.RO, + IetfLang.Rundi.code.lowercase() to IetfLang.Rundi, + IetfLang.Rundi.BI.code.lowercase() to IetfLang.Rundi.BI, + IetfLang.AromanianArumanianMacedoRomanian.code.lowercase() to IetfLang.AromanianArumanianMacedoRomanian, IetfLang.Russian.code.lowercase() to IetfLang.Russian, IetfLang.Russian.BY.code.lowercase() to IetfLang.Russian.BY, IetfLang.Russian.KG.code.lowercase() to IetfLang.Russian.KG, @@ -1202,39 +1694,88 @@ val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { IetfLang.Russian.MD.code.lowercase() to IetfLang.Russian.MD, IetfLang.Russian.RU.code.lowercase() to IetfLang.Russian.RU, IetfLang.Russian.UA.code.lowercase() to IetfLang.Russian.UA, - IetfLang.Kinyarwanda.code.lowercase() to IetfLang.Kinyarwanda, - IetfLang.Kinyarwanda.RW.code.lowercase() to IetfLang.Kinyarwanda.RW, - IetfLang.Sanskrit.code.lowercase() to IetfLang.Sanskrit, - IetfLang.Sardinian.code.lowercase() to IetfLang.Sardinian, - IetfLang.Sindhi.code.lowercase() to IetfLang.Sindhi, - IetfLang.Sindhi.Arab.code.lowercase() to IetfLang.Sindhi.Arab, - IetfLang.Sindhi.Arab.PK.code.lowercase() to IetfLang.Sindhi.Arab.PK, - IetfLang.Sindhi.Deva.code.lowercase() to IetfLang.Sindhi.Deva, - IetfLang.Sindhi.Deva.IN.code.lowercase() to IetfLang.Sindhi.Deva.IN, - IetfLang.NorthernSami.code.lowercase() to IetfLang.NorthernSami, - IetfLang.NorthernSami.FI.code.lowercase() to IetfLang.NorthernSami.FI, - IetfLang.NorthernSami.NO.code.lowercase() to IetfLang.NorthernSami.NO, - IetfLang.NorthernSami.SE.code.lowercase() to IetfLang.NorthernSami.SE, + IetfLang.Sandawe.code.lowercase() to IetfLang.Sandawe, IetfLang.Sango.code.lowercase() to IetfLang.Sango, IetfLang.Sango.CF.code.lowercase() to IetfLang.Sango.CF, + IetfLang.Yakut.code.lowercase() to IetfLang.Yakut, + IetfLang.Yakut.RU.code.lowercase() to IetfLang.Yakut.RU, + IetfLang.SouthAmericanIndianOther.code.lowercase() to IetfLang.SouthAmericanIndianOther, + IetfLang.SalishanLanguages.code.lowercase() to IetfLang.SalishanLanguages, + IetfLang.SamaritanAramaic.code.lowercase() to IetfLang.SamaritanAramaic, + IetfLang.Sanskrit.code.lowercase() to IetfLang.Sanskrit, + IetfLang.Sasak.code.lowercase() to IetfLang.Sasak, + IetfLang.Santali.code.lowercase() to IetfLang.Santali, + IetfLang.Sicilian.code.lowercase() to IetfLang.Sicilian, + IetfLang.Scots.code.lowercase() to IetfLang.Scots, + IetfLang.Selkup.code.lowercase() to IetfLang.Selkup, + IetfLang.SemiticLanguages.code.lowercase() to IetfLang.SemiticLanguages, + IetfLang.IrishOldTo900.code.lowercase() to IetfLang.IrishOldTo900, + IetfLang.SignLanguages.code.lowercase() to IetfLang.SignLanguages, + IetfLang.Shan.code.lowercase() to IetfLang.Shan, + IetfLang.Sidamo.code.lowercase() to IetfLang.Sidamo, IetfLang.SinhalaSinhalese.code.lowercase() to IetfLang.SinhalaSinhalese, IetfLang.SinhalaSinhalese.LK.code.lowercase() to IetfLang.SinhalaSinhalese.LK, + IetfLang.SiouanLanguages.code.lowercase() to IetfLang.SiouanLanguages, + IetfLang.SinoTibetanLanguages.code.lowercase() to IetfLang.SinoTibetanLanguages, + IetfLang.SlavicLanguages.code.lowercase() to IetfLang.SlavicLanguages, IetfLang.Slovak.code.lowercase() to IetfLang.Slovak, IetfLang.Slovak.SK.code.lowercase() to IetfLang.Slovak.SK, IetfLang.Slovenian.code.lowercase() to IetfLang.Slovenian, IetfLang.Slovenian.SI.code.lowercase() to IetfLang.Slovenian.SI, + IetfLang.SouthernSami.code.lowercase() to IetfLang.SouthernSami, + IetfLang.NorthernSami.code.lowercase() to IetfLang.NorthernSami, + IetfLang.NorthernSami.FI.code.lowercase() to IetfLang.NorthernSami.FI, + IetfLang.NorthernSami.NO.code.lowercase() to IetfLang.NorthernSami.NO, + IetfLang.NorthernSami.SE.code.lowercase() to IetfLang.NorthernSami.SE, + IetfLang.SamiLanguages.code.lowercase() to IetfLang.SamiLanguages, + IetfLang.LuleSami.code.lowercase() to IetfLang.LuleSami, + IetfLang.InariSami.code.lowercase() to IetfLang.InariSami, + IetfLang.InariSami.FI.code.lowercase() to IetfLang.InariSami.FI, IetfLang.Samoan.code.lowercase() to IetfLang.Samoan, + IetfLang.SkoltSami.code.lowercase() to IetfLang.SkoltSami, IetfLang.Shona.code.lowercase() to IetfLang.Shona, IetfLang.Shona.ZW.code.lowercase() to IetfLang.Shona.ZW, + IetfLang.Sindhi.code.lowercase() to IetfLang.Sindhi, + IetfLang.Soninke.code.lowercase() to IetfLang.Soninke, + IetfLang.Sogdian.code.lowercase() to IetfLang.Sogdian, IetfLang.Somali.code.lowercase() to IetfLang.Somali, IetfLang.Somali.DJ.code.lowercase() to IetfLang.Somali.DJ, IetfLang.Somali.ET.code.lowercase() to IetfLang.Somali.ET, IetfLang.Somali.KE.code.lowercase() to IetfLang.Somali.KE, IetfLang.Somali.SO.code.lowercase() to IetfLang.Somali.SO, - IetfLang.Albanian.code.lowercase() to IetfLang.Albanian, - IetfLang.Albanian.AL.code.lowercase() to IetfLang.Albanian.AL, - IetfLang.Albanian.MK.code.lowercase() to IetfLang.Albanian.MK, - IetfLang.Albanian.XK.code.lowercase() to IetfLang.Albanian.XK, + IetfLang.SonghaiLanguages.code.lowercase() to IetfLang.SonghaiLanguages, + IetfLang.SothoSouthern.code.lowercase() to IetfLang.SothoSouthern, + IetfLang.SpanishCastilian.code.lowercase() to IetfLang.SpanishCastilian, + IetfLang.SpanishCastilian.L419.code.lowercase() to IetfLang.SpanishCastilian.L419, + IetfLang.SpanishCastilian.AR.code.lowercase() to IetfLang.SpanishCastilian.AR, + IetfLang.SpanishCastilian.BO.code.lowercase() to IetfLang.SpanishCastilian.BO, + IetfLang.SpanishCastilian.BR.code.lowercase() to IetfLang.SpanishCastilian.BR, + IetfLang.SpanishCastilian.BZ.code.lowercase() to IetfLang.SpanishCastilian.BZ, + IetfLang.SpanishCastilian.CL.code.lowercase() to IetfLang.SpanishCastilian.CL, + IetfLang.SpanishCastilian.CO.code.lowercase() to IetfLang.SpanishCastilian.CO, + IetfLang.SpanishCastilian.CR.code.lowercase() to IetfLang.SpanishCastilian.CR, + IetfLang.SpanishCastilian.CU.code.lowercase() to IetfLang.SpanishCastilian.CU, + IetfLang.SpanishCastilian.DO.code.lowercase() to IetfLang.SpanishCastilian.DO, + IetfLang.SpanishCastilian.EA.code.lowercase() to IetfLang.SpanishCastilian.EA, + IetfLang.SpanishCastilian.EC.code.lowercase() to IetfLang.SpanishCastilian.EC, + IetfLang.SpanishCastilian.ES.code.lowercase() to IetfLang.SpanishCastilian.ES, + IetfLang.SpanishCastilian.GQ.code.lowercase() to IetfLang.SpanishCastilian.GQ, + IetfLang.SpanishCastilian.GT.code.lowercase() to IetfLang.SpanishCastilian.GT, + IetfLang.SpanishCastilian.HN.code.lowercase() to IetfLang.SpanishCastilian.HN, + IetfLang.SpanishCastilian.IC.code.lowercase() to IetfLang.SpanishCastilian.IC, + IetfLang.SpanishCastilian.MX.code.lowercase() to IetfLang.SpanishCastilian.MX, + IetfLang.SpanishCastilian.NI.code.lowercase() to IetfLang.SpanishCastilian.NI, + IetfLang.SpanishCastilian.PA.code.lowercase() to IetfLang.SpanishCastilian.PA, + IetfLang.SpanishCastilian.PE.code.lowercase() to IetfLang.SpanishCastilian.PE, + IetfLang.SpanishCastilian.PH.code.lowercase() to IetfLang.SpanishCastilian.PH, + IetfLang.SpanishCastilian.PR.code.lowercase() to IetfLang.SpanishCastilian.PR, + IetfLang.SpanishCastilian.PY.code.lowercase() to IetfLang.SpanishCastilian.PY, + IetfLang.SpanishCastilian.SV.code.lowercase() to IetfLang.SpanishCastilian.SV, + IetfLang.SpanishCastilian.US.code.lowercase() to IetfLang.SpanishCastilian.US, + IetfLang.SpanishCastilian.UY.code.lowercase() to IetfLang.SpanishCastilian.UY, + IetfLang.SpanishCastilian.VE.code.lowercase() to IetfLang.SpanishCastilian.VE, + IetfLang.Sardinian.code.lowercase() to IetfLang.Sardinian, + IetfLang.SrananTongo.code.lowercase() to IetfLang.SrananTongo, IetfLang.Serbian.code.lowercase() to IetfLang.Serbian, IetfLang.Serbian.Cyrl.code.lowercase() to IetfLang.Serbian.Cyrl, IetfLang.Serbian.Cyrl.BA.code.lowercase() to IetfLang.Serbian.Cyrl.BA, @@ -1246,52 +1787,79 @@ val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { IetfLang.Serbian.Latn.ME.code.lowercase() to IetfLang.Serbian.Latn.ME, IetfLang.Serbian.Latn.RS.code.lowercase() to IetfLang.Serbian.Latn.RS, IetfLang.Serbian.Latn.XK.code.lowercase() to IetfLang.Serbian.Latn.XK, + IetfLang.Serer.code.lowercase() to IetfLang.Serer, + IetfLang.NiloSaharanLanguages.code.lowercase() to IetfLang.NiloSaharanLanguages, IetfLang.Swati.code.lowercase() to IetfLang.Swati, - IetfLang.SothoSouthern.code.lowercase() to IetfLang.SothoSouthern, + IetfLang.Sukuma.code.lowercase() to IetfLang.Sukuma, IetfLang.Sundanese.code.lowercase() to IetfLang.Sundanese, - IetfLang.Sundanese.Latn.code.lowercase() to IetfLang.Sundanese.Latn, - IetfLang.Sundanese.Latn.ID.code.lowercase() to IetfLang.Sundanese.Latn.ID, - IetfLang.Swedish.code.lowercase() to IetfLang.Swedish, - IetfLang.Swedish.AX.code.lowercase() to IetfLang.Swedish.AX, - IetfLang.Swedish.FI.code.lowercase() to IetfLang.Swedish.FI, - IetfLang.Swedish.SE.code.lowercase() to IetfLang.Swedish.SE, + IetfLang.Susu.code.lowercase() to IetfLang.Susu, + IetfLang.Sumerian.code.lowercase() to IetfLang.Sumerian, IetfLang.Swahili.code.lowercase() to IetfLang.Swahili, IetfLang.Swahili.CD.code.lowercase() to IetfLang.Swahili.CD, IetfLang.Swahili.KE.code.lowercase() to IetfLang.Swahili.KE, IetfLang.Swahili.TZ.code.lowercase() to IetfLang.Swahili.TZ, IetfLang.Swahili.UG.code.lowercase() to IetfLang.Swahili.UG, + IetfLang.Swedish.code.lowercase() to IetfLang.Swedish, + IetfLang.Swedish.AX.code.lowercase() to IetfLang.Swedish.AX, + IetfLang.Swedish.FI.code.lowercase() to IetfLang.Swedish.FI, + IetfLang.Swedish.SE.code.lowercase() to IetfLang.Swedish.SE, + IetfLang.ClassicalSyriac.code.lowercase() to IetfLang.ClassicalSyriac, + IetfLang.Syriac.code.lowercase() to IetfLang.Syriac, + IetfLang.Tahitian.code.lowercase() to IetfLang.Tahitian, + IetfLang.TaiLanguages.code.lowercase() to IetfLang.TaiLanguages, IetfLang.Tamil.code.lowercase() to IetfLang.Tamil, IetfLang.Tamil.IN.code.lowercase() to IetfLang.Tamil.IN, IetfLang.Tamil.LK.code.lowercase() to IetfLang.Tamil.LK, IetfLang.Tamil.MY.code.lowercase() to IetfLang.Tamil.MY, IetfLang.Tamil.SG.code.lowercase() to IetfLang.Tamil.SG, + IetfLang.Tatar.code.lowercase() to IetfLang.Tatar, IetfLang.Telugu.code.lowercase() to IetfLang.Telugu, IetfLang.Telugu.IN.code.lowercase() to IetfLang.Telugu.IN, + IetfLang.Timne.code.lowercase() to IetfLang.Timne, + IetfLang.Tereno.code.lowercase() to IetfLang.Tereno, + IetfLang.Tetum.code.lowercase() to IetfLang.Tetum, IetfLang.Tajik.code.lowercase() to IetfLang.Tajik, - IetfLang.Tajik.TJ.code.lowercase() to IetfLang.Tajik.TJ, + IetfLang.Tagalog.code.lowercase() to IetfLang.Tagalog, IetfLang.Thai.code.lowercase() to IetfLang.Thai, IetfLang.Thai.TH.code.lowercase() to IetfLang.Thai.TH, + IetfLang.Tibetan.code.lowercase() to IetfLang.Tibetan, + IetfLang.Tibetan.CN.code.lowercase() to IetfLang.Tibetan.CN, + IetfLang.Tibetan.IN.code.lowercase() to IetfLang.Tibetan.IN, + IetfLang.Tigre.code.lowercase() to IetfLang.Tigre, IetfLang.Tigrinya.code.lowercase() to IetfLang.Tigrinya, IetfLang.Tigrinya.ER.code.lowercase() to IetfLang.Tigrinya.ER, IetfLang.Tigrinya.ET.code.lowercase() to IetfLang.Tigrinya.ET, - IetfLang.Turkmen.code.lowercase() to IetfLang.Turkmen, - IetfLang.Turkmen.TM.code.lowercase() to IetfLang.Turkmen.TM, - IetfLang.Tagalog.code.lowercase() to IetfLang.Tagalog, - IetfLang.Tswana.code.lowercase() to IetfLang.Tswana, + IetfLang.Tiv.code.lowercase() to IetfLang.Tiv, + IetfLang.Tokelau.code.lowercase() to IetfLang.Tokelau, + IetfLang.KlingonTlhInganHol.code.lowercase() to IetfLang.KlingonTlhInganHol, + IetfLang.Tlingit.code.lowercase() to IetfLang.Tlingit, + IetfLang.Tamashek.code.lowercase() to IetfLang.Tamashek, + IetfLang.TongaNyasa.code.lowercase() to IetfLang.TongaNyasa, IetfLang.TongaTongaIslands.code.lowercase() to IetfLang.TongaTongaIslands, IetfLang.TongaTongaIslands.TO.code.lowercase() to IetfLang.TongaTongaIslands.TO, + IetfLang.TokPisin.code.lowercase() to IetfLang.TokPisin, + IetfLang.Tsimshian.code.lowercase() to IetfLang.Tsimshian, + IetfLang.Tswana.code.lowercase() to IetfLang.Tswana, + IetfLang.Tsonga.code.lowercase() to IetfLang.Tsonga, + IetfLang.Turkmen.code.lowercase() to IetfLang.Turkmen, + IetfLang.Turkmen.TM.code.lowercase() to IetfLang.Turkmen.TM, + IetfLang.Tumbuka.code.lowercase() to IetfLang.Tumbuka, + IetfLang.TupiLanguages.code.lowercase() to IetfLang.TupiLanguages, IetfLang.Turkish.code.lowercase() to IetfLang.Turkish, IetfLang.Turkish.CY.code.lowercase() to IetfLang.Turkish.CY, IetfLang.Turkish.TR.code.lowercase() to IetfLang.Turkish.TR, - IetfLang.Tsonga.code.lowercase() to IetfLang.Tsonga, - IetfLang.Tatar.code.lowercase() to IetfLang.Tatar, - IetfLang.Tatar.RU.code.lowercase() to IetfLang.Tatar.RU, + IetfLang.AltaicLanguages.code.lowercase() to IetfLang.AltaicLanguages, + IetfLang.Tuvalu.code.lowercase() to IetfLang.Tuvalu, IetfLang.Twi.code.lowercase() to IetfLang.Twi, - IetfLang.Tahitian.code.lowercase() to IetfLang.Tahitian, + IetfLang.Tuvinian.code.lowercase() to IetfLang.Tuvinian, + IetfLang.Udmurt.code.lowercase() to IetfLang.Udmurt, + IetfLang.Ugaritic.code.lowercase() to IetfLang.Ugaritic, IetfLang.UighurUyghur.code.lowercase() to IetfLang.UighurUyghur, IetfLang.UighurUyghur.CN.code.lowercase() to IetfLang.UighurUyghur.CN, IetfLang.Ukrainian.code.lowercase() to IetfLang.Ukrainian, IetfLang.Ukrainian.UA.code.lowercase() to IetfLang.Ukrainian.UA, + IetfLang.Umbundu.code.lowercase() to IetfLang.Umbundu, + IetfLang.Undetermined.code.lowercase() to IetfLang.Undetermined, IetfLang.Urdu.code.lowercase() to IetfLang.Urdu, IetfLang.Urdu.IN.code.lowercase() to IetfLang.Urdu.IN, IetfLang.Urdu.PK.code.lowercase() to IetfLang.Urdu.PK, @@ -1302,34 +1870,48 @@ val knownLanguageCodesMapByLowerCasedKeys: Map by lazy { IetfLang.Uzbek.Cyrl.UZ.code.lowercase() to IetfLang.Uzbek.Cyrl.UZ, IetfLang.Uzbek.Latn.code.lowercase() to IetfLang.Uzbek.Latn, IetfLang.Uzbek.Latn.UZ.code.lowercase() to IetfLang.Uzbek.Latn.UZ, + IetfLang.Vai.code.lowercase() to IetfLang.Vai, + IetfLang.Vai.Latn.code.lowercase() to IetfLang.Vai.Latn, + IetfLang.Vai.Latn.LR.code.lowercase() to IetfLang.Vai.Latn.LR, + IetfLang.Vai.Vaii.code.lowercase() to IetfLang.Vai.Vaii, + IetfLang.Vai.Vaii.LR.code.lowercase() to IetfLang.Vai.Vaii.LR, IetfLang.Venda.code.lowercase() to IetfLang.Venda, IetfLang.Vietnamese.code.lowercase() to IetfLang.Vietnamese, IetfLang.Vietnamese.VN.code.lowercase() to IetfLang.Vietnamese.VN, IetfLang.Volapuk.code.lowercase() to IetfLang.Volapuk, IetfLang.Volapuk.L001.code.lowercase() to IetfLang.Volapuk.L001, + IetfLang.Votic.code.lowercase() to IetfLang.Votic, + IetfLang.WakashanLanguages.code.lowercase() to IetfLang.WakashanLanguages, + IetfLang.Walamo.code.lowercase() to IetfLang.Walamo, + IetfLang.Waray.code.lowercase() to IetfLang.Waray, + IetfLang.Washo.code.lowercase() to IetfLang.Washo, + IetfLang.Welsh.code.lowercase() to IetfLang.Welsh, + IetfLang.Welsh.GB.code.lowercase() to IetfLang.Welsh.GB, + IetfLang.SorbianLanguages.code.lowercase() to IetfLang.SorbianLanguages, IetfLang.Walloon.code.lowercase() to IetfLang.Walloon, IetfLang.Wolof.code.lowercase() to IetfLang.Wolof, - IetfLang.Wolof.SN.code.lowercase() to IetfLang.Wolof.SN, + IetfLang.KalmykOirat.code.lowercase() to IetfLang.KalmykOirat, IetfLang.Xhosa.code.lowercase() to IetfLang.Xhosa, - IetfLang.Xhosa.ZA.code.lowercase() to IetfLang.Xhosa.ZA, + IetfLang.Yao.code.lowercase() to IetfLang.Yao, + IetfLang.Yapese.code.lowercase() to IetfLang.Yapese, IetfLang.Yiddish.code.lowercase() to IetfLang.Yiddish, IetfLang.Yiddish.L001.code.lowercase() to IetfLang.Yiddish.L001, IetfLang.Yoruba.code.lowercase() to IetfLang.Yoruba, IetfLang.Yoruba.BJ.code.lowercase() to IetfLang.Yoruba.BJ, IetfLang.Yoruba.NG.code.lowercase() to IetfLang.Yoruba.NG, + IetfLang.YupikLanguages.code.lowercase() to IetfLang.YupikLanguages, + IetfLang.Zapotec.code.lowercase() to IetfLang.Zapotec, + IetfLang.BlissymbolsBlissymbolicsBliss.code.lowercase() to IetfLang.BlissymbolsBlissymbolicsBliss, + IetfLang.Zenaga.code.lowercase() to IetfLang.Zenaga, + IetfLang.StandardMoroccanTamazight.code.lowercase() to IetfLang.StandardMoroccanTamazight, + IetfLang.StandardMoroccanTamazight.MA.code.lowercase() to IetfLang.StandardMoroccanTamazight.MA, IetfLang.ZhuangChuang.code.lowercase() to IetfLang.ZhuangChuang, - IetfLang.Chinese.code.lowercase() to IetfLang.Chinese, - IetfLang.Chinese.Hans.code.lowercase() to IetfLang.Chinese.Hans, - IetfLang.Chinese.Hans.CN.code.lowercase() to IetfLang.Chinese.Hans.CN, - IetfLang.Chinese.Hans.HK.code.lowercase() to IetfLang.Chinese.Hans.HK, - IetfLang.Chinese.Hans.MO.code.lowercase() to IetfLang.Chinese.Hans.MO, - IetfLang.Chinese.Hans.SG.code.lowercase() to IetfLang.Chinese.Hans.SG, - IetfLang.Chinese.Hant.code.lowercase() to IetfLang.Chinese.Hant, - IetfLang.Chinese.Hant.HK.code.lowercase() to IetfLang.Chinese.Hant.HK, - IetfLang.Chinese.Hant.MO.code.lowercase() to IetfLang.Chinese.Hant.MO, - IetfLang.Chinese.Hant.TW.code.lowercase() to IetfLang.Chinese.Hant.TW, + IetfLang.ZandeLanguages.code.lowercase() to IetfLang.ZandeLanguages, IetfLang.Zulu.code.lowercase() to IetfLang.Zulu, - IetfLang.Zulu.ZA.code.lowercase() to IetfLang.Zulu.ZA + IetfLang.Zulu.ZA.code.lowercase() to IetfLang.Zulu.ZA, + IetfLang.Zuni.code.lowercase() to IetfLang.Zuni, + IetfLang.NoLinguisticContentNotApplicable.code.lowercase() to IetfLang.NoLinguisticContentNotApplicable, + IetfLang.ZazaDimiliDimliKirdkiKirmanjkiZazaki.code.lowercase() to IetfLang.ZazaDimiliDimliKirdkiKirmanjkiZazaki ) } val knownLanguageCodes: List by lazy { diff --git a/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle b/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle index 7cf4d24aa97..78a333a7f04 100644 --- a/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle +++ b/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle @@ -77,7 +77,6 @@ kotlin { jsTest { dependencies { implementation kotlin('test-js') - implementation kotlin('test-junit') } } nativeMain.dependsOn commonMain From 19bbfd49162a9ee4c81d8e4bec6804c751af8429 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 25 Jul 2024 18:53:47 +0600 Subject: [PATCH 08/34] downgrade kotlin and fix build --- gradle/libs.versions.toml | 4 +- startup/plugin/build.gradle | 1 + .../kotlin/StartPluginSerializer.kt | 39 ++++++++++++++++++- .../jsMain/kotlin/StartPluginSerializer.js.kt | 13 +++++++ .../jsMain/kotlin/StartPluginSerializer.kt | 35 ----------------- .../kotlin/StartPluginSerializer.jvm.kt | 17 ++++++++ .../jvmMain/kotlin/StartPluginSerializer.kt | 23 ----------- .../kotlin/StartPluginSerializer.kt | 36 ----------------- .../kotlin/StartPluginSerializer.kt | 36 ----------------- .../kotlin/StartPluginSerializer.native.kt | 13 +++++++ 10 files changed, 84 insertions(+), 133 deletions(-) create mode 100644 startup/plugin/src/jsMain/kotlin/StartPluginSerializer.js.kt delete mode 100644 startup/plugin/src/jsMain/kotlin/StartPluginSerializer.kt create mode 100644 startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.jvm.kt delete mode 100644 startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.kt delete mode 100644 startup/plugin/src/linuxX64Main/kotlin/StartPluginSerializer.kt delete mode 100644 startup/plugin/src/mingwX64Main/kotlin/StartPluginSerializer.kt create mode 100644 startup/plugin/src/nativeMain/kotlin/StartPluginSerializer.native.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 172ab0a38b1..214fd3c041b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -kt = "2.0.20-Beta2" +kt = "2.0.0" kt-serialization = "1.7.1" kt-coroutines = "1.8.1" @@ -21,7 +21,7 @@ koin = "3.5.6" okio = "3.9.0" -ksp = "2.0.20-Beta2-1.0.23" +ksp = "2.0.0-1.0.23" kotlin-poet = "1.18.0" versions = "0.51.0" diff --git a/startup/plugin/build.gradle b/startup/plugin/build.gradle index 6da68fd5aec..0aef62701a0 100644 --- a/startup/plugin/build.gradle +++ b/startup/plugin/build.gradle @@ -13,6 +13,7 @@ kotlin { api libs.kslog api libs.kt.reflect api project(":micro_utils.coroutines") + api libs.uuid } } jsMain { diff --git a/startup/plugin/src/commonMain/kotlin/StartPluginSerializer.kt b/startup/plugin/src/commonMain/kotlin/StartPluginSerializer.kt index 15e4a6be604..6dfe08987c7 100644 --- a/startup/plugin/src/commonMain/kotlin/StartPluginSerializer.kt +++ b/startup/plugin/src/commonMain/kotlin/StartPluginSerializer.kt @@ -1,5 +1,42 @@ package dev.inmo.micro_utils.startup.plugin +import com.benasher44.uuid.uuid4 import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder -expect object StartPluginSerializer : KSerializer +object StartPluginSerializer : KSerializer { + private val registeredPlugins = mutableMapOf() + private val registeredPluginsByPlugin = mutableMapOf() + override val descriptor: SerialDescriptor = String.serializer().descriptor + + override fun deserialize(decoder: Decoder): StartPlugin { + alternativeDeserialize(decoder) ?.let { return it } + val name = decoder.decodeString() + return registeredPlugins[name] ?: error("Unable to find startup plugin for $name") + } + + override fun serialize(encoder: Encoder, value: StartPlugin) { + if (alternativeSerialize(encoder, value)) { + return + } + val name = registeredPluginsByPlugin[value] ?: uuid4().toString().also { + registeredPlugins[it] = value + registeredPluginsByPlugin[value] = it + } + encoder.encodeString(name) + } + + /** + * Register plugin inside of this [KSerializer]. Since plugin has been registered, you may use its [name] in any + * serialized [dev.inmo.micro_utils.startup.launcher.Config] to retrieve [plugin] you passed here + */ + fun registerPlugin(name: String, plugin: StartPlugin) { + registeredPlugins[name] = plugin + } +} + +internal expect fun alternativeDeserialize(decoder: Decoder): StartPlugin? +internal expect fun alternativeSerialize(encoder: Encoder, value: StartPlugin): Boolean diff --git a/startup/plugin/src/jsMain/kotlin/StartPluginSerializer.js.kt b/startup/plugin/src/jsMain/kotlin/StartPluginSerializer.js.kt new file mode 100644 index 00000000000..db3d48e3e5e --- /dev/null +++ b/startup/plugin/src/jsMain/kotlin/StartPluginSerializer.js.kt @@ -0,0 +1,13 @@ +package dev.inmo.micro_utils.startup.plugin + +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +internal actual fun alternativeDeserialize(decoder: Decoder): StartPlugin? { + return null +} + +internal actual fun alternativeSerialize( + encoder: Encoder, + value: StartPlugin +): Boolean = false \ No newline at end of file diff --git a/startup/plugin/src/jsMain/kotlin/StartPluginSerializer.kt b/startup/plugin/src/jsMain/kotlin/StartPluginSerializer.kt deleted file mode 100644 index b8eda302903..00000000000 --- a/startup/plugin/src/jsMain/kotlin/StartPluginSerializer.kt +++ /dev/null @@ -1,35 +0,0 @@ -package dev.inmo.micro_utils.startup.plugin - -import com.benasher44.uuid.uuid4 -import kotlinx.serialization.KSerializer -import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder - -actual object StartPluginSerializer : KSerializer { - private val registeredPlugins = mutableMapOf() - private val registeredPluginsByPlugin = mutableMapOf() - override val descriptor: SerialDescriptor = String.serializer().descriptor - - override fun deserialize(decoder: Decoder): StartPlugin { - val name = decoder.decodeString() - return registeredPlugins[name] ?: error("Unable to find startup plugin for $name") - } - - override fun serialize(encoder: Encoder, value: StartPlugin) { - val name = registeredPluginsByPlugin[value] ?: uuid4().toString().also { - registeredPlugins[it] = value - registeredPluginsByPlugin[value] = it - } - encoder.encodeString(name) - } - - /** - * Register plugin inside of this [KSerializer]. Since plugin has been registered, you may use its [name] in any - * serialized [dev.inmo.micro_utils.startup.launcher.Config] to retrieve [plugin] you passed here - */ - fun registerPlugin(name: String, plugin: StartPlugin) { - registeredPlugins[name] = plugin - } -} diff --git a/startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.jvm.kt b/startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.jvm.kt new file mode 100644 index 00000000000..ad53c7cf590 --- /dev/null +++ b/startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.jvm.kt @@ -0,0 +1,17 @@ +package dev.inmo.micro_utils.startup.plugin + +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +internal actual fun alternativeDeserialize(decoder: Decoder): StartPlugin? { + val kclass = Class.forName(decoder.decodeString()).kotlin + return (kclass.objectInstance ?: kclass.constructors.first { it.parameters.isEmpty() }.call()) as StartPlugin +} + +internal actual fun alternativeSerialize( + encoder: Encoder, + value: StartPlugin +): Boolean { + encoder.encodeString(value::class.java.canonicalName ?: return false) + return true +} \ No newline at end of file diff --git a/startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.kt b/startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.kt deleted file mode 100644 index 0e650c70df5..00000000000 --- a/startup/plugin/src/jvmMain/kotlin/StartPluginSerializer.kt +++ /dev/null @@ -1,23 +0,0 @@ -package dev.inmo.micro_utils.startup.plugin - -import kotlinx.serialization.KSerializer -import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder - -actual object StartPluginSerializer : KSerializer { - override val descriptor: SerialDescriptor - get() = String.serializer().descriptor - - override fun deserialize(decoder: Decoder): StartPlugin { - val kclass = Class.forName(decoder.decodeString()).kotlin - return (kclass.objectInstance ?: kclass.constructors.first { it.parameters.isEmpty() }.call()) as StartPlugin - } - - override fun serialize(encoder: Encoder, value: StartPlugin) { - encoder.encodeString( - value::class.java.canonicalName - ) - } -} diff --git a/startup/plugin/src/linuxX64Main/kotlin/StartPluginSerializer.kt b/startup/plugin/src/linuxX64Main/kotlin/StartPluginSerializer.kt deleted file mode 100644 index 176d0995bcb..00000000000 --- a/startup/plugin/src/linuxX64Main/kotlin/StartPluginSerializer.kt +++ /dev/null @@ -1,36 +0,0 @@ -package dev.inmo.micro_utils.startup.plugin - -import com.benasher44.uuid.uuid4 -import kotlinx.serialization.KSerializer -import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder -import kotlin.reflect.KClass - -actual object StartPluginSerializer : KSerializer { - private val registeredPlugins = mutableMapOf() - private val registeredPluginsByPlugin = mutableMapOf() - override val descriptor: SerialDescriptor = String.serializer().descriptor - - override fun deserialize(decoder: Decoder): StartPlugin { - val name = decoder.decodeString() - return registeredPlugins[name] ?: error("Unable to find startup plugin for $name") - } - - override fun serialize(encoder: Encoder, value: StartPlugin) { - val name = registeredPluginsByPlugin[value] ?: uuid4().toString().also { - registeredPlugins[it] = value - registeredPluginsByPlugin[value] = it - } - encoder.encodeString(name) - } - - /** - * Register plugin inside of this [KSerializer]. Since plugin has been registered, you may use its [name] in any - * serialized [dev.inmo.micro_utils.startup.launcher.Config] to retrieve [plugin] you passed here - */ - fun registerPlugin(name: String, plugin: StartPlugin) { - registeredPlugins[name] = plugin - } -} diff --git a/startup/plugin/src/mingwX64Main/kotlin/StartPluginSerializer.kt b/startup/plugin/src/mingwX64Main/kotlin/StartPluginSerializer.kt deleted file mode 100644 index 176d0995bcb..00000000000 --- a/startup/plugin/src/mingwX64Main/kotlin/StartPluginSerializer.kt +++ /dev/null @@ -1,36 +0,0 @@ -package dev.inmo.micro_utils.startup.plugin - -import com.benasher44.uuid.uuid4 -import kotlinx.serialization.KSerializer -import kotlinx.serialization.builtins.serializer -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder -import kotlin.reflect.KClass - -actual object StartPluginSerializer : KSerializer { - private val registeredPlugins = mutableMapOf() - private val registeredPluginsByPlugin = mutableMapOf() - override val descriptor: SerialDescriptor = String.serializer().descriptor - - override fun deserialize(decoder: Decoder): StartPlugin { - val name = decoder.decodeString() - return registeredPlugins[name] ?: error("Unable to find startup plugin for $name") - } - - override fun serialize(encoder: Encoder, value: StartPlugin) { - val name = registeredPluginsByPlugin[value] ?: uuid4().toString().also { - registeredPlugins[it] = value - registeredPluginsByPlugin[value] = it - } - encoder.encodeString(name) - } - - /** - * Register plugin inside of this [KSerializer]. Since plugin has been registered, you may use its [name] in any - * serialized [dev.inmo.micro_utils.startup.launcher.Config] to retrieve [plugin] you passed here - */ - fun registerPlugin(name: String, plugin: StartPlugin) { - registeredPlugins[name] = plugin - } -} diff --git a/startup/plugin/src/nativeMain/kotlin/StartPluginSerializer.native.kt b/startup/plugin/src/nativeMain/kotlin/StartPluginSerializer.native.kt new file mode 100644 index 00000000000..db3d48e3e5e --- /dev/null +++ b/startup/plugin/src/nativeMain/kotlin/StartPluginSerializer.native.kt @@ -0,0 +1,13 @@ +package dev.inmo.micro_utils.startup.plugin + +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +internal actual fun alternativeDeserialize(decoder: Decoder): StartPlugin? { + return null +} + +internal actual fun alternativeSerialize( + encoder: Encoder, + value: StartPlugin +): Boolean = false \ No newline at end of file From 9ba4d98c303e6436ce9db816bf9dfb185ad6c9dc Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 30 Jul 2024 23:25:54 +0600 Subject: [PATCH 09/34] migrations onto new libraries --- gradle/libs.versions.toml | 6 ++-- .../ktor/client/OnUploadCallback.kt | 2 +- .../ktor/common/CreateTempFileFromInput.kt | 6 ++-- .../ApplicationCallRespondWithTypeInfo.kt | 5 +-- .../ktor/server/DownloadFileItem.kt | 20 +++++------ .../ktor/server/NewFlowsWebsocket.kt | 4 +-- .../micro_utils/ktor/server/StartServer.kt | 35 +++++++++++-------- .../TemporalFilesRoutingConfigurator.kt | 18 +++++++--- .../ktor/server/UniloadMultipart.kt | 3 +- .../ApplicationRoutingConfigurator.kt | 9 ++--- .../key/value/KtorWriteKeyValueRepoClient.kt | 2 +- .../values/KtorWriteKeyValuesRepoClient.kt | 2 +- .../ktor/server/crud/KtorCRUDRepoRoutes.kt | 8 ++--- .../server/crud/KtorReadCRUDRepoRoutes.kt | 8 ++--- .../server/crud/KtorWriteCRUDRepoRoutes.kt | 4 +-- .../key/value/KtorKeyValueRepoRoutes.kt | 8 ++--- .../key/value/KtorReadKeyValueRepoRoutes.kt | 10 +++--- .../key/value/KtorWriteKeyValueRepoRoutes.kt | 4 +-- .../key/values/KtorKeyValuesRepoRoutes.kt | 8 ++--- .../key/values/KtorReadKeyValuesRepoRoutes.kt | 10 +++--- .../values/KtorWriteKeyValuesRepoRoutes.kt | 4 +-- 21 files changed, 93 insertions(+), 83 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 214fd3c041b..df5661c6e63 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,19 +1,19 @@ [versions] -kt = "2.0.0" +kt = "2.0.20-RC" kt-serialization = "1.7.1" kt-coroutines = "1.8.1" kslog = "1.3.4" -jb-compose = "1.7.0-dev1742" +jb-compose = "1.7.0-dev1750" jb-exposed = "0.51.1" jb-dokka = "1.9.20" korlibs = "5.4.0" uuid = "0.8.4" -ktor = "2.3.11" +ktor = "3.0.0-beta-2" gh-release = "2.5.2" diff --git a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt index abd79c93b2b..86c7d065b09 100644 --- a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt +++ b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt @@ -1,3 +1,3 @@ package dev.inmo.micro_utils.ktor.client -typealias OnUploadCallback = suspend (uploaded: Long, count: Long) -> Unit +typealias OnUploadCallback = suspend (uploaded: Long, count: Long?) -> Unit diff --git a/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt b/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt index 5c7b97f888f..d49edd0c0d8 100644 --- a/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt +++ b/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt @@ -1,10 +1,8 @@ package dev.inmo.micro_utils.ktor.common import io.ktor.utils.io.core.Input -import io.ktor.utils.io.core.copyTo -import io.ktor.utils.io.streams.asOutput +import kotlinx.io.asSink import java.io.File -import java.io.InputStream import java.util.UUID fun Input.downloadToTempFile( @@ -17,7 +15,7 @@ fun Input.downloadToTempFile( folder ).apply { outputStream().use { - copyTo(it.asOutput()) + this@downloadToTempFile.transferTo(it.asSink()) } deleteOnExit() } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt index 207dde73a63..5c1ce621af9 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt @@ -1,8 +1,9 @@ package dev.inmo.micro_utils.ktor.server import io.ktor.server.application.ApplicationCall +import io.ktor.server.http.* import io.ktor.server.response.responseType -import io.ktor.util.InternalAPI +import io.ktor.utils.io.InternalAPI import io.ktor.util.reflect.TypeInfo @InternalAPI @@ -11,5 +12,5 @@ suspend fun ApplicationCall.respond( typeInfo: TypeInfo ) { response.responseType = typeInfo - response.pipeline.execute(this, message as Any) + respond(message, typeInfo) } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt index 998fef99797..d2f367644db 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt @@ -2,21 +2,19 @@ package dev.inmo.micro_utils.ktor.server import com.benasher44.uuid.uuid4 import io.ktor.http.content.PartData -import io.ktor.utils.io.copyTo -import io.ktor.utils.io.core.copyTo +import io.ktor.util.cio.* +import io.ktor.utils.io.* import io.ktor.utils.io.jvm.javaio.copyTo -import io.ktor.utils.io.streams.asOutput +import kotlinx.io.asSink import java.io.File -fun PartData.FileItem.download(target: File) { - provider().use { input -> - target.outputStream().asOutput().use { - input.copyTo(it) - } - } +suspend fun PartData.FileItem.download(target: File) { + provider().copyAndClose( + target.writeChannel() + ) } -fun PartData.FileItem.downloadToTemporalFile(): File { +suspend fun PartData.FileItem.downloadToTemporalFile(): File { val outputFile = File.createTempFile(uuid4().toString(), ".temp").apply { deleteOnExit() } @@ -27,7 +25,7 @@ fun PartData.FileItem.downloadToTemporalFile(): File { fun PartData.BinaryItem.download(target: File) { provider().use { input -> target.outputStream().use { - input.copyTo(it.asOutput()) + input.transferTo(it.asSink()) } } } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt index fa2822c39c1..0240a55fc5e 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt @@ -5,14 +5,14 @@ import dev.inmo.micro_utils.ktor.common.* import io.ktor.http.URLProtocol import io.ktor.server.application.install import io.ktor.server.application.pluginOrNull -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.application import io.ktor.server.websocket.* import io.ktor.websocket.send import kotlinx.coroutines.flow.Flow import kotlinx.serialization.SerializationStrategy -inline fun Route.includeWebsocketHandling( +inline fun Routing.includeWebsocketHandling( suburl: String, flow: Flow, protocol: URLProtocol? = null, diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt index 821403521f6..8ad61980db2 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt @@ -1,7 +1,7 @@ package dev.inmo.micro_utils.ktor.server import dev.inmo.micro_utils.ktor.server.configurators.KtorApplicationConfigurator -import io.ktor.server.application.Application +import io.ktor.server.application.* import io.ktor.server.cio.CIO import io.ktor.server.cio.CIOApplicationEngine import io.ktor.server.engine.* @@ -11,20 +11,22 @@ fun , host: String = "localhost", port: Int = Random.nextInt(1024, 65535), - additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {}, + additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {}, additionalConfigurationConfigurator: TConfiguration.() -> Unit = {}, + environment: ApplicationEnvironment = applicationEnvironment(), block: Application.() -> Unit -): TEngine = embeddedServer( +): EmbeddedServer = embeddedServer( engine, - applicationEngineEnvironment { - module(block) + environment, + { connector { this.host = host this.port = port + additionalEngineEnvironmentConfigurator() } - additionalEngineEnvironmentConfigurator() + additionalConfigurationConfigurator() }, - additionalConfigurationConfigurator + module = block ) /** @@ -35,15 +37,17 @@ fun Unit = {}, + additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {}, additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {}, + environment: ApplicationEnvironment = applicationEnvironment(), block: Application.() -> Unit -): CIOApplicationEngine = createKtorServer( +): EmbeddedServer = createKtorServer( CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, + environment, block ) @@ -51,15 +55,17 @@ fun , host: String = "localhost", port: Int = Random.nextInt(1024, 65535), - additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {}, + additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {}, additionalConfigurationConfigurator: TConfiguration.() -> Unit = {}, + environment: ApplicationEnvironment = applicationEnvironment(), configurators: List -): TEngine = createKtorServer( +): EmbeddedServer = createKtorServer( engine, host, port, additionalEngineEnvironmentConfigurator, - additionalConfigurationConfigurator + additionalConfigurationConfigurator, + environment, ) { configurators.forEach { it.apply { configure() } } } @@ -73,6 +79,7 @@ fun createKtorServer( host: String = "localhost", port: Int = Random.nextInt(1024, 65535), configurators: List, - additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {}, + additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {}, additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {}, -): ApplicationEngine = createKtorServer(CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, configurators) + environment: ApplicationEnvironment = applicationEnvironment(), +): EmbeddedServer = createKtorServer(CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, environment, configurators) diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt index dd45d06741a..dd3e4048d3d 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt @@ -14,9 +14,10 @@ import io.ktor.server.application.call import io.ktor.server.request.receiveMultipart import io.ktor.server.response.respond import io.ktor.server.response.respondText -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.post import kotlinx.coroutines.* +import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.* import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -26,7 +27,10 @@ import java.nio.file.attribute.FileTime class TemporalFilesRoutingConfigurator( private val subpath: String = DefaultTemporalFilesSubPath, - private val temporalFilesUtilizer: TemporalFilesUtilizer = TemporalFilesUtilizer + private val temporalFilesUtilizer: TemporalFilesUtilizer = TemporalFilesUtilizer, + filesFlowReplay: Int = 0, + filesFlowExtraBufferCapacity: Int = Int.MAX_VALUE, + filesFlowOnBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND ) : ApplicationRoutingConfigurator.Element { interface TemporalFilesUtilizer { fun start(filesMap: MutableMap, filesMutex: Mutex, onNewFileFlow: Flow): Job @@ -74,10 +78,14 @@ class TemporalFilesRoutingConfigurator( private val temporalFilesMap = mutableMapOf() private val temporalFilesMutex = Mutex() - private val filesFlow = MutableSharedFlow() + private val filesFlow = MutableSharedFlow( + replay = filesFlowReplay, + extraBufferCapacity = filesFlowExtraBufferCapacity, + onBufferOverflow = filesFlowOnBufferOverflow + ) val utilizerJob = temporalFilesUtilizer.start(temporalFilesMap, temporalFilesMutex, filesFlow.asSharedFlow()) - override fun Route.invoke() { + override fun Routing.invoke() { post(subpath) { val multipart = call.receiveMultipart() @@ -111,7 +119,7 @@ class TemporalFilesRoutingConfigurator( temporalFilesMap[fileId] = file } call.respondText(fileId.string) - launchSafelyWithoutExceptions { filesFlow.emit(fileId) } + filesFlow.emit(fileId) } ?: call.respond(HttpStatusCode.BadRequest) } } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt index 7898092e54d..0bf7828a49b 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt @@ -6,6 +6,7 @@ import dev.inmo.micro_utils.ktor.common.downloadToTempFile import io.ktor.http.content.* import io.ktor.server.application.ApplicationCall import io.ktor.server.request.receiveMultipart +import io.ktor.utils.io.* import io.ktor.utils.io.core.* import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.isActive @@ -47,7 +48,7 @@ suspend fun ApplicationCall.uniloadMultipart( onBinaryChannelItem ) { when (it.name) { - "bytes" -> resultInput = it.provider() + "bytes" -> resultInput = it.provider().readBuffer() else -> onCustomFileItem(it) } } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt index 3c008d79b87..a9d896e23d0 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt @@ -2,8 +2,7 @@ package dev.inmo.micro_utils.ktor.server.configurators import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator.Element import io.ktor.server.application.* -import io.ktor.server.routing.Route -import io.ktor.server.routing.Routing +import io.ktor.server.routing.* import kotlinx.serialization.Contextual import kotlinx.serialization.Serializable @@ -11,7 +10,7 @@ import kotlinx.serialization.Serializable class ApplicationRoutingConfigurator( private val elements: List<@Contextual Element> ) : KtorApplicationConfigurator { - fun interface Element { operator fun Route.invoke() } + fun interface Element { operator fun Routing.invoke() } private val rootInstaller = Element { elements.forEach { it.apply { invoke() } @@ -19,9 +18,7 @@ class ApplicationRoutingConfigurator( } override fun Application.configure() { - pluginOrNull(Routing) ?.apply { - rootInstaller.apply { invoke() } - } ?: install(Routing) { + routing { rootInstaller.apply { invoke() } } } diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt index 12de3b5538a..04548c751ba 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt @@ -8,7 +8,7 @@ import dev.inmo.micro_utils.repos.ktor.common.key_value.* import io.ktor.client.HttpClient import io.ktor.client.request.post import io.ktor.http.* -import io.ktor.util.InternalAPI +import io.ktor.utils.io.InternalAPI import io.ktor.util.reflect.TypeInfo import io.ktor.util.reflect.typeInfo import kotlinx.coroutines.flow.Flow diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt index 5fe28f0a7af..50225e60d9d 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt @@ -8,7 +8,7 @@ import dev.inmo.micro_utils.repos.ktor.common.one_to_many.* import io.ktor.client.HttpClient import io.ktor.client.request.post import io.ktor.http.* -import io.ktor.util.InternalAPI +import io.ktor.utils.io.InternalAPI import io.ktor.util.reflect.TypeInfo import io.ktor.util.reflect.typeInfo import kotlinx.coroutines.flow.Flow diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt index f7d950229bd..dbc14399fae 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt @@ -2,10 +2,10 @@ package dev.inmo.micro_utils.repos.ktor.server.crud import dev.inmo.micro_utils.ktor.common.* import dev.inmo.micro_utils.repos.CRUDRepo -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import kotlinx.serialization.* -inline fun Route.configureCRUDRepoRoutes( +inline fun Routing.configureCRUDRepoRoutes( originalRepo: CRUDRepo, noinline idDeserializer: suspend (String) -> IdType ) { @@ -13,7 +13,7 @@ inline fun Route.configureCRUDRepoRoutes( +inline fun Routing.configureCRUDRepoRoutes( originalRepo: CRUDRepo, idsSerializer: KSerializer, serialFormat: StringFormat @@ -21,7 +21,7 @@ inline fun Route.configureCRUDRepoRoutes( +inline fun Routing.configureCRUDRepoRoutes( originalRepo: CRUDRepo, idsSerializer: KSerializer, serialFormat: BinaryFormat diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt index 7b295deefae..79b3dc87652 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt @@ -11,11 +11,11 @@ import dev.inmo.micro_utils.repos.ktor.common.idParameterName import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.response.respond -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.get import kotlinx.serialization.* -inline fun Route.configureReadCRUDRepoRoutes( +inline fun Routing.configureReadCRUDRepoRoutes( originalRepo: ReadCRUDRepo, noinline idDeserializer: suspend (String) -> IdType ) { @@ -65,7 +65,7 @@ inline fun Route.configureReadCRUDRepoRoute } } -inline fun Route.configureReadCRUDRepoRoutes( +inline fun Routing.configureReadCRUDRepoRoutes( originalRepo: ReadCRUDRepo, idsSerializer: KSerializer, serialFormat: StringFormat @@ -73,7 +73,7 @@ inline fun Route.configureReadCRUDRepoRoute serialFormat.decodeFromString(idsSerializer, it) } -inline fun Route.configureReadCRUDRepoRoutes( +inline fun Routing.configureReadCRUDRepoRoutes( originalRepo: ReadCRUDRepo, idsSerializer: KSerializer, serialFormat: BinaryFormat diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt index 368f928d141..7d297850f7d 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt @@ -7,10 +7,10 @@ import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.request.receive import io.ktor.server.response.respond -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.post -inline fun Route.configureWriteCRUDRepoRoutes( +inline fun Routing.configureWriteCRUDRepoRoutes( originalRepo: WriteCRUDRepo ) { includeWebsocketHandling( diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt index 1ff64d93a00..59ad0d31660 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt @@ -3,10 +3,10 @@ package dev.inmo.micro_utils.repos.ktor.server.key.value import dev.inmo.micro_utils.ktor.common.* import dev.inmo.micro_utils.repos.KeyValueRepo import io.ktor.http.* -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import kotlinx.serialization.* -inline fun Route.configureKeyValueRepoRoutes ( +inline fun Routing.configureKeyValueRepoRoutes ( originalRepo: KeyValueRepo, noinline idDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -15,7 +15,7 @@ inline fun Route.configureKeyValueRepoR configureWriteKeyValueRepoRoutes(originalRepo) } -inline fun Route.configureKeyValueRepoRoutes( +inline fun Routing.configureKeyValueRepoRoutes( originalRepo: KeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -30,7 +30,7 @@ inline fun Route.configureKeyValueRepoR } ) -inline fun Route.configureKeyValueRepoRoutes( +inline fun Routing.configureKeyValueRepoRoutes( originalRepo: KeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt index 418d87cae7e..f3e0104806a 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt @@ -14,14 +14,14 @@ import dev.inmo.micro_utils.repos.ktor.common.reversedParameterName import io.ktor.http.* import io.ktor.server.application.call import io.ktor.server.response.respond -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.get -import io.ktor.util.InternalAPI +import io.ktor.utils.io.InternalAPI import io.ktor.util.reflect.typeInfo import kotlinx.serialization.* @OptIn(InternalAPI::class) -inline fun Route.configureReadKeyValueRepoRoutes ( +inline fun Routing.configureReadKeyValueRepoRoutes ( originalRepo: ReadKeyValueRepo, noinline idDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -79,7 +79,7 @@ inline fun Route.configureReadKeyValueRepoRoutes ( } } -inline fun Route.configureReadKeyValueRepoRoutes( +inline fun Routing.configureReadKeyValueRepoRoutes( originalRepo: ReadKeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -94,7 +94,7 @@ inline fun Route.configureReadKeyValueRepoRoutes( } ) -inline fun Route.configureReadKeyValueRepoRoutes( +inline fun Routing.configureReadKeyValueRepoRoutes( originalRepo: ReadKeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt index 78e39e8ff66..c3bc47e0240 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt @@ -7,11 +7,11 @@ import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.request.receive import io.ktor.server.response.respond -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.post import io.ktor.util.reflect.typeInfo -inline fun Route.configureWriteKeyValueRepoRoutes ( +inline fun Routing.configureWriteKeyValueRepoRoutes ( originalRepo: WriteKeyValueRepo ) { includeWebsocketHandling( diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt index 541ca5fd7ce..56fe0821c37 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt @@ -3,10 +3,10 @@ package dev.inmo.micro_utils.repos.ktor.server.key.values import dev.inmo.micro_utils.ktor.common.* import dev.inmo.micro_utils.repos.* import io.ktor.http.* -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import kotlinx.serialization.* -inline fun Route.configureKeyValuesRepoRoutes ( +inline fun Routing.configureKeyValuesRepoRoutes ( originalRepo: KeyValuesRepo, noinline keyDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -15,7 +15,7 @@ inline fun Route.configureKeyValuesRepo configureWriteKeyValuesRepoRoutes(originalRepo) } -inline fun Route.configureKeyValuesRepoRoutes( +inline fun Routing.configureKeyValuesRepoRoutes( originalRepo: KeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -30,7 +30,7 @@ inline fun Route.configureKeyValuesRepo } ) -inline fun Route.configureKeyValuesRepoRoutes( +inline fun Routing.configureKeyValuesRepoRoutes( originalRepo: KeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt index 0953465cd60..82df24d1c53 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt @@ -12,14 +12,14 @@ import dev.inmo.micro_utils.repos.ktor.common.one_to_many.* import io.ktor.http.* import io.ktor.server.application.call import io.ktor.server.response.respond -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.get -import io.ktor.util.InternalAPI +import io.ktor.utils.io.InternalAPI import io.ktor.util.reflect.typeInfo import kotlinx.serialization.* @OptIn(InternalAPI::class) -inline fun Route.configureReadKeyValuesRepoRoutes ( +inline fun Routing.configureReadKeyValuesRepoRoutes ( originalRepo: ReadKeyValuesRepo, noinline keyDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -76,7 +76,7 @@ inline fun Route.configureReadKeyValuesRepoRoutes ( } } -inline fun Route.configureReadKeyValuesRepoRoutes( +inline fun Routing.configureReadKeyValuesRepoRoutes( originalRepo: ReadKeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -91,7 +91,7 @@ inline fun Route.configureReadKeyValuesRepoRoutes( } ) -inline fun Route.configureReadKeyValuesRepoRoutes( +inline fun Routing.configureReadKeyValuesRepoRoutes( originalRepo: ReadKeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt index 3f78ca0a7be..73c4d142eb4 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt @@ -7,11 +7,11 @@ import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.request.receive import io.ktor.server.response.respond -import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import io.ktor.server.routing.post import io.ktor.util.reflect.typeInfo -inline fun Route.configureWriteKeyValuesRepoRoutes ( +inline fun Routing.configureWriteKeyValuesRepoRoutes ( originalRepo: WriteKeyValuesRepo ) { includeWebsocketHandling( From e68735d0613657e60b19f10e7cfcbf4c1127b442 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 30 Jul 2024 23:30:11 +0600 Subject: [PATCH 10/34] Revert "migrations onto new libraries" This reverts commit 647cd7d7b4ac900664769f0532e81bece1db73a8. --- gradle/libs.versions.toml | 6 ++-- .../ktor/client/OnUploadCallback.kt | 2 +- .../ktor/common/CreateTempFileFromInput.kt | 6 ++-- .../ApplicationCallRespondWithTypeInfo.kt | 5 ++- .../ktor/server/DownloadFileItem.kt | 20 ++++++----- .../ktor/server/NewFlowsWebsocket.kt | 4 +-- .../micro_utils/ktor/server/StartServer.kt | 35 ++++++++----------- .../TemporalFilesRoutingConfigurator.kt | 18 +++------- .../ktor/server/UniloadMultipart.kt | 3 +- .../ApplicationRoutingConfigurator.kt | 9 +++-- .../key/value/KtorWriteKeyValueRepoClient.kt | 2 +- .../values/KtorWriteKeyValuesRepoClient.kt | 2 +- .../ktor/server/crud/KtorCRUDRepoRoutes.kt | 8 ++--- .../server/crud/KtorReadCRUDRepoRoutes.kt | 8 ++--- .../server/crud/KtorWriteCRUDRepoRoutes.kt | 4 +-- .../key/value/KtorKeyValueRepoRoutes.kt | 8 ++--- .../key/value/KtorReadKeyValueRepoRoutes.kt | 10 +++--- .../key/value/KtorWriteKeyValueRepoRoutes.kt | 4 +-- .../key/values/KtorKeyValuesRepoRoutes.kt | 8 ++--- .../key/values/KtorReadKeyValuesRepoRoutes.kt | 10 +++--- .../values/KtorWriteKeyValuesRepoRoutes.kt | 4 +-- 21 files changed, 83 insertions(+), 93 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index df5661c6e63..214fd3c041b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,19 +1,19 @@ [versions] -kt = "2.0.20-RC" +kt = "2.0.0" kt-serialization = "1.7.1" kt-coroutines = "1.8.1" kslog = "1.3.4" -jb-compose = "1.7.0-dev1750" +jb-compose = "1.7.0-dev1742" jb-exposed = "0.51.1" jb-dokka = "1.9.20" korlibs = "5.4.0" uuid = "0.8.4" -ktor = "3.0.0-beta-2" +ktor = "2.3.11" gh-release = "2.5.2" diff --git a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt index 86c7d065b09..abd79c93b2b 100644 --- a/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt +++ b/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/ktor/client/OnUploadCallback.kt @@ -1,3 +1,3 @@ package dev.inmo.micro_utils.ktor.client -typealias OnUploadCallback = suspend (uploaded: Long, count: Long?) -> Unit +typealias OnUploadCallback = suspend (uploaded: Long, count: Long) -> Unit diff --git a/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt b/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt index d49edd0c0d8..5c7b97f888f 100644 --- a/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt +++ b/ktor/common/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/common/CreateTempFileFromInput.kt @@ -1,8 +1,10 @@ package dev.inmo.micro_utils.ktor.common import io.ktor.utils.io.core.Input -import kotlinx.io.asSink +import io.ktor.utils.io.core.copyTo +import io.ktor.utils.io.streams.asOutput import java.io.File +import java.io.InputStream import java.util.UUID fun Input.downloadToTempFile( @@ -15,7 +17,7 @@ fun Input.downloadToTempFile( folder ).apply { outputStream().use { - this@downloadToTempFile.transferTo(it.asSink()) + copyTo(it.asOutput()) } deleteOnExit() } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt index 5c1ce621af9..207dde73a63 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/ApplicationCallRespondWithTypeInfo.kt @@ -1,9 +1,8 @@ package dev.inmo.micro_utils.ktor.server import io.ktor.server.application.ApplicationCall -import io.ktor.server.http.* import io.ktor.server.response.responseType -import io.ktor.utils.io.InternalAPI +import io.ktor.util.InternalAPI import io.ktor.util.reflect.TypeInfo @InternalAPI @@ -12,5 +11,5 @@ suspend fun ApplicationCall.respond( typeInfo: TypeInfo ) { response.responseType = typeInfo - respond(message, typeInfo) + response.pipeline.execute(this, message as Any) } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt index d2f367644db..998fef99797 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/DownloadFileItem.kt @@ -2,19 +2,21 @@ package dev.inmo.micro_utils.ktor.server import com.benasher44.uuid.uuid4 import io.ktor.http.content.PartData -import io.ktor.util.cio.* -import io.ktor.utils.io.* +import io.ktor.utils.io.copyTo +import io.ktor.utils.io.core.copyTo import io.ktor.utils.io.jvm.javaio.copyTo -import kotlinx.io.asSink +import io.ktor.utils.io.streams.asOutput import java.io.File -suspend fun PartData.FileItem.download(target: File) { - provider().copyAndClose( - target.writeChannel() - ) +fun PartData.FileItem.download(target: File) { + provider().use { input -> + target.outputStream().asOutput().use { + input.copyTo(it) + } + } } -suspend fun PartData.FileItem.downloadToTemporalFile(): File { +fun PartData.FileItem.downloadToTemporalFile(): File { val outputFile = File.createTempFile(uuid4().toString(), ".temp").apply { deleteOnExit() } @@ -25,7 +27,7 @@ suspend fun PartData.FileItem.downloadToTemporalFile(): File { fun PartData.BinaryItem.download(target: File) { provider().use { input -> target.outputStream().use { - input.transferTo(it.asSink()) + input.copyTo(it.asOutput()) } } } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt index 0240a55fc5e..fa2822c39c1 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/NewFlowsWebsocket.kt @@ -5,14 +5,14 @@ import dev.inmo.micro_utils.ktor.common.* import io.ktor.http.URLProtocol import io.ktor.server.application.install import io.ktor.server.application.pluginOrNull -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.application import io.ktor.server.websocket.* import io.ktor.websocket.send import kotlinx.coroutines.flow.Flow import kotlinx.serialization.SerializationStrategy -inline fun Routing.includeWebsocketHandling( +inline fun Route.includeWebsocketHandling( suburl: String, flow: Flow, protocol: URLProtocol? = null, diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt index 8ad61980db2..821403521f6 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/StartServer.kt @@ -1,7 +1,7 @@ package dev.inmo.micro_utils.ktor.server import dev.inmo.micro_utils.ktor.server.configurators.KtorApplicationConfigurator -import io.ktor.server.application.* +import io.ktor.server.application.Application import io.ktor.server.cio.CIO import io.ktor.server.cio.CIOApplicationEngine import io.ktor.server.engine.* @@ -11,22 +11,20 @@ fun , host: String = "localhost", port: Int = Random.nextInt(1024, 65535), - additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {}, + additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {}, additionalConfigurationConfigurator: TConfiguration.() -> Unit = {}, - environment: ApplicationEnvironment = applicationEnvironment(), block: Application.() -> Unit -): EmbeddedServer = embeddedServer( +): TEngine = embeddedServer( engine, - environment, - { + applicationEngineEnvironment { + module(block) connector { this.host = host this.port = port - additionalEngineEnvironmentConfigurator() } - additionalConfigurationConfigurator() + additionalEngineEnvironmentConfigurator() }, - module = block + additionalConfigurationConfigurator ) /** @@ -37,17 +35,15 @@ fun Unit = {}, + additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {}, additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {}, - environment: ApplicationEnvironment = applicationEnvironment(), block: Application.() -> Unit -): EmbeddedServer = createKtorServer( +): CIOApplicationEngine = createKtorServer( CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, - environment, block ) @@ -55,17 +51,15 @@ fun , host: String = "localhost", port: Int = Random.nextInt(1024, 65535), - additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {}, + additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {}, additionalConfigurationConfigurator: TConfiguration.() -> Unit = {}, - environment: ApplicationEnvironment = applicationEnvironment(), configurators: List -): EmbeddedServer = createKtorServer( +): TEngine = createKtorServer( engine, host, port, additionalEngineEnvironmentConfigurator, - additionalConfigurationConfigurator, - environment, + additionalConfigurationConfigurator ) { configurators.forEach { it.apply { configure() } } } @@ -79,7 +73,6 @@ fun createKtorServer( host: String = "localhost", port: Int = Random.nextInt(1024, 65535), configurators: List, - additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {}, + additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {}, additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {}, - environment: ApplicationEnvironment = applicationEnvironment(), -): EmbeddedServer = createKtorServer(CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, environment, configurators) +): ApplicationEngine = createKtorServer(CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, configurators) diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt index dd3e4048d3d..dd45d06741a 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/TemporalFilesRoutingConfigurator.kt @@ -14,10 +14,9 @@ import io.ktor.server.application.call import io.ktor.server.request.receiveMultipart import io.ktor.server.response.respond import io.ktor.server.response.respondText -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.post import kotlinx.coroutines.* -import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.* import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock @@ -27,10 +26,7 @@ import java.nio.file.attribute.FileTime class TemporalFilesRoutingConfigurator( private val subpath: String = DefaultTemporalFilesSubPath, - private val temporalFilesUtilizer: TemporalFilesUtilizer = TemporalFilesUtilizer, - filesFlowReplay: Int = 0, - filesFlowExtraBufferCapacity: Int = Int.MAX_VALUE, - filesFlowOnBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND + private val temporalFilesUtilizer: TemporalFilesUtilizer = TemporalFilesUtilizer ) : ApplicationRoutingConfigurator.Element { interface TemporalFilesUtilizer { fun start(filesMap: MutableMap, filesMutex: Mutex, onNewFileFlow: Flow): Job @@ -78,14 +74,10 @@ class TemporalFilesRoutingConfigurator( private val temporalFilesMap = mutableMapOf() private val temporalFilesMutex = Mutex() - private val filesFlow = MutableSharedFlow( - replay = filesFlowReplay, - extraBufferCapacity = filesFlowExtraBufferCapacity, - onBufferOverflow = filesFlowOnBufferOverflow - ) + private val filesFlow = MutableSharedFlow() val utilizerJob = temporalFilesUtilizer.start(temporalFilesMap, temporalFilesMutex, filesFlow.asSharedFlow()) - override fun Routing.invoke() { + override fun Route.invoke() { post(subpath) { val multipart = call.receiveMultipart() @@ -119,7 +111,7 @@ class TemporalFilesRoutingConfigurator( temporalFilesMap[fileId] = file } call.respondText(fileId.string) - filesFlow.emit(fileId) + launchSafelyWithoutExceptions { filesFlow.emit(fileId) } } ?: call.respond(HttpStatusCode.BadRequest) } } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt index 0bf7828a49b..7898092e54d 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/UniloadMultipart.kt @@ -6,7 +6,6 @@ import dev.inmo.micro_utils.ktor.common.downloadToTempFile import io.ktor.http.content.* import io.ktor.server.application.ApplicationCall import io.ktor.server.request.receiveMultipart -import io.ktor.utils.io.* import io.ktor.utils.io.core.* import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.isActive @@ -48,7 +47,7 @@ suspend fun ApplicationCall.uniloadMultipart( onBinaryChannelItem ) { when (it.name) { - "bytes" -> resultInput = it.provider().readBuffer() + "bytes" -> resultInput = it.provider() else -> onCustomFileItem(it) } } diff --git a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt index a9d896e23d0..3c008d79b87 100644 --- a/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt +++ b/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/ktor/server/configurators/ApplicationRoutingConfigurator.kt @@ -2,7 +2,8 @@ package dev.inmo.micro_utils.ktor.server.configurators import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator.Element import io.ktor.server.application.* -import io.ktor.server.routing.* +import io.ktor.server.routing.Route +import io.ktor.server.routing.Routing import kotlinx.serialization.Contextual import kotlinx.serialization.Serializable @@ -10,7 +11,7 @@ import kotlinx.serialization.Serializable class ApplicationRoutingConfigurator( private val elements: List<@Contextual Element> ) : KtorApplicationConfigurator { - fun interface Element { operator fun Routing.invoke() } + fun interface Element { operator fun Route.invoke() } private val rootInstaller = Element { elements.forEach { it.apply { invoke() } @@ -18,7 +19,9 @@ class ApplicationRoutingConfigurator( } override fun Application.configure() { - routing { + pluginOrNull(Routing) ?.apply { + rootInstaller.apply { invoke() } + } ?: install(Routing) { rootInstaller.apply { invoke() } } } diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt index 04548c751ba..12de3b5538a 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/value/KtorWriteKeyValueRepoClient.kt @@ -8,7 +8,7 @@ import dev.inmo.micro_utils.repos.ktor.common.key_value.* import io.ktor.client.HttpClient import io.ktor.client.request.post import io.ktor.http.* -import io.ktor.utils.io.InternalAPI +import io.ktor.util.InternalAPI import io.ktor.util.reflect.TypeInfo import io.ktor.util.reflect.typeInfo import kotlinx.coroutines.flow.Flow diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt index 50225e60d9d..5fe28f0a7af 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key/values/KtorWriteKeyValuesRepoClient.kt @@ -8,7 +8,7 @@ import dev.inmo.micro_utils.repos.ktor.common.one_to_many.* import io.ktor.client.HttpClient import io.ktor.client.request.post import io.ktor.http.* -import io.ktor.utils.io.InternalAPI +import io.ktor.util.InternalAPI import io.ktor.util.reflect.TypeInfo import io.ktor.util.reflect.typeInfo import kotlinx.coroutines.flow.Flow diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt index dbc14399fae..f7d950229bd 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorCRUDRepoRoutes.kt @@ -2,10 +2,10 @@ package dev.inmo.micro_utils.repos.ktor.server.crud import dev.inmo.micro_utils.ktor.common.* import dev.inmo.micro_utils.repos.CRUDRepo -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import kotlinx.serialization.* -inline fun Routing.configureCRUDRepoRoutes( +inline fun Route.configureCRUDRepoRoutes( originalRepo: CRUDRepo, noinline idDeserializer: suspend (String) -> IdType ) { @@ -13,7 +13,7 @@ inline fun Routing.configureCRUDRepoRoutes( +inline fun Route.configureCRUDRepoRoutes( originalRepo: CRUDRepo, idsSerializer: KSerializer, serialFormat: StringFormat @@ -21,7 +21,7 @@ inline fun Routing.configureCRUDRepoRoutes( +inline fun Route.configureCRUDRepoRoutes( originalRepo: CRUDRepo, idsSerializer: KSerializer, serialFormat: BinaryFormat diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt index 79b3dc87652..7b295deefae 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorReadCRUDRepoRoutes.kt @@ -11,11 +11,11 @@ import dev.inmo.micro_utils.repos.ktor.common.idParameterName import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.response.respond -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.get import kotlinx.serialization.* -inline fun Routing.configureReadCRUDRepoRoutes( +inline fun Route.configureReadCRUDRepoRoutes( originalRepo: ReadCRUDRepo, noinline idDeserializer: suspend (String) -> IdType ) { @@ -65,7 +65,7 @@ inline fun Routing.configureReadCRUDRepoRou } } -inline fun Routing.configureReadCRUDRepoRoutes( +inline fun Route.configureReadCRUDRepoRoutes( originalRepo: ReadCRUDRepo, idsSerializer: KSerializer, serialFormat: StringFormat @@ -73,7 +73,7 @@ inline fun Routing.configureReadCRUDRepoRou serialFormat.decodeFromString(idsSerializer, it) } -inline fun Routing.configureReadCRUDRepoRoutes( +inline fun Route.configureReadCRUDRepoRoutes( originalRepo: ReadCRUDRepo, idsSerializer: KSerializer, serialFormat: BinaryFormat diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt index 7d297850f7d..368f928d141 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/crud/KtorWriteCRUDRepoRoutes.kt @@ -7,10 +7,10 @@ import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.request.receive import io.ktor.server.response.respond -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.post -inline fun Routing.configureWriteCRUDRepoRoutes( +inline fun Route.configureWriteCRUDRepoRoutes( originalRepo: WriteCRUDRepo ) { includeWebsocketHandling( diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt index 59ad0d31660..1ff64d93a00 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorKeyValueRepoRoutes.kt @@ -3,10 +3,10 @@ package dev.inmo.micro_utils.repos.ktor.server.key.value import dev.inmo.micro_utils.ktor.common.* import dev.inmo.micro_utils.repos.KeyValueRepo import io.ktor.http.* -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import kotlinx.serialization.* -inline fun Routing.configureKeyValueRepoRoutes ( +inline fun Route.configureKeyValueRepoRoutes ( originalRepo: KeyValueRepo, noinline idDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -15,7 +15,7 @@ inline fun Routing.configureKeyValueRep configureWriteKeyValueRepoRoutes(originalRepo) } -inline fun Routing.configureKeyValueRepoRoutes( +inline fun Route.configureKeyValueRepoRoutes( originalRepo: KeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -30,7 +30,7 @@ inline fun Routing.configureKeyValueRep } ) -inline fun Routing.configureKeyValueRepoRoutes( +inline fun Route.configureKeyValueRepoRoutes( originalRepo: KeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt index f3e0104806a..418d87cae7e 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorReadKeyValueRepoRoutes.kt @@ -14,14 +14,14 @@ import dev.inmo.micro_utils.repos.ktor.common.reversedParameterName import io.ktor.http.* import io.ktor.server.application.call import io.ktor.server.response.respond -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.get -import io.ktor.utils.io.InternalAPI +import io.ktor.util.InternalAPI import io.ktor.util.reflect.typeInfo import kotlinx.serialization.* @OptIn(InternalAPI::class) -inline fun Routing.configureReadKeyValueRepoRoutes ( +inline fun Route.configureReadKeyValueRepoRoutes ( originalRepo: ReadKeyValueRepo, noinline idDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -79,7 +79,7 @@ inline fun Routing.configureReadKeyValueRepoRoutes } } -inline fun Routing.configureReadKeyValueRepoRoutes( +inline fun Route.configureReadKeyValueRepoRoutes( originalRepo: ReadKeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -94,7 +94,7 @@ inline fun Routing.configureReadKeyValueRepoRoutes( } ) -inline fun Routing.configureReadKeyValueRepoRoutes( +inline fun Route.configureReadKeyValueRepoRoutes( originalRepo: ReadKeyValueRepo, idsSerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt index c3bc47e0240..78e39e8ff66 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/value/KtorWriteKeyValueRepoRoutes.kt @@ -7,11 +7,11 @@ import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.request.receive import io.ktor.server.response.respond -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.post import io.ktor.util.reflect.typeInfo -inline fun Routing.configureWriteKeyValueRepoRoutes ( +inline fun Route.configureWriteKeyValueRepoRoutes ( originalRepo: WriteKeyValueRepo ) { includeWebsocketHandling( diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt index 56fe0821c37..541ca5fd7ce 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorKeyValuesRepoRoutes.kt @@ -3,10 +3,10 @@ package dev.inmo.micro_utils.repos.ktor.server.key.values import dev.inmo.micro_utils.ktor.common.* import dev.inmo.micro_utils.repos.* import io.ktor.http.* -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import kotlinx.serialization.* -inline fun Routing.configureKeyValuesRepoRoutes ( +inline fun Route.configureKeyValuesRepoRoutes ( originalRepo: KeyValuesRepo, noinline keyDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -15,7 +15,7 @@ inline fun Routing.configureKeyValuesRe configureWriteKeyValuesRepoRoutes(originalRepo) } -inline fun Routing.configureKeyValuesRepoRoutes( +inline fun Route.configureKeyValuesRepoRoutes( originalRepo: KeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -30,7 +30,7 @@ inline fun Routing.configureKeyValuesRe } ) -inline fun Routing.configureKeyValuesRepoRoutes( +inline fun Route.configureKeyValuesRepoRoutes( originalRepo: KeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt index 82df24d1c53..0953465cd60 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorReadKeyValuesRepoRoutes.kt @@ -12,14 +12,14 @@ import dev.inmo.micro_utils.repos.ktor.common.one_to_many.* import io.ktor.http.* import io.ktor.server.application.call import io.ktor.server.response.respond -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.get -import io.ktor.utils.io.InternalAPI +import io.ktor.util.InternalAPI import io.ktor.util.reflect.typeInfo import kotlinx.serialization.* @OptIn(InternalAPI::class) -inline fun Routing.configureReadKeyValuesRepoRoutes ( +inline fun Route.configureReadKeyValuesRepoRoutes ( originalRepo: ReadKeyValuesRepo, noinline keyDeserializer: suspend (String) -> Key, noinline valueDeserializer: suspend (String) -> Value @@ -76,7 +76,7 @@ inline fun Routing.configureReadKeyValuesRepoRoutes } } -inline fun Routing.configureReadKeyValuesRepoRoutes( +inline fun Route.configureReadKeyValuesRepoRoutes( originalRepo: ReadKeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, @@ -91,7 +91,7 @@ inline fun Routing.configureReadKeyValuesRepoRoutes } ) -inline fun Routing.configureReadKeyValuesRepoRoutes( +inline fun Route.configureReadKeyValuesRepoRoutes( originalRepo: ReadKeyValuesRepo, keySerializer: DeserializationStrategy, valueSerializer: DeserializationStrategy, diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt index 73c4d142eb4..3f78ca0a7be 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key/values/KtorWriteKeyValuesRepoRoutes.kt @@ -7,11 +7,11 @@ import io.ktor.http.HttpStatusCode import io.ktor.server.application.call import io.ktor.server.request.receive import io.ktor.server.response.respond -import io.ktor.server.routing.Routing +import io.ktor.server.routing.Route import io.ktor.server.routing.post import io.ktor.util.reflect.typeInfo -inline fun Routing.configureWriteKeyValuesRepoRoutes ( +inline fun Route.configureWriteKeyValuesRepoRoutes ( originalRepo: WriteKeyValuesRepo ) { includeWebsocketHandling( From 2ab06fbafd6897fc00f6ff58ea8ab30b25e1ec95 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 31 Jul 2024 00:04:38 +0600 Subject: [PATCH 11/34] change version --- CHANGELOG.md | 2 ++ gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34ce9695623..c6a1a2bb924 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## 0.22.0 + ## 0.21.6 * `KSP`: diff --git a/gradle.properties b/gradle.properties index 00bb79cbadb..faf44e685ed 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ crypto_js_version=4.1.1 # Project data group=dev.inmo -version=0.21.6 +version=0.22.0 android_code_version=265 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 214fd3c041b..c9d97018f7a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ kt-coroutines = "1.8.1" kslog = "1.3.4" -jb-compose = "1.7.0-dev1742" +jb-compose = "1.7.0-alpha02" jb-exposed = "0.51.1" jb-dokka = "1.9.20" From 491dac5bf07230dd53bef22151e0fd1e585a3620 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 17:38:24 +0600 Subject: [PATCH 12/34] update exposed --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c9d97018f7a..f9cfc9057ce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ kt-coroutines = "1.8.1" kslog = "1.3.4" jb-compose = "1.7.0-alpha02" -jb-exposed = "0.51.1" +jb-exposed = "0.53.0" jb-dokka = "1.9.20" korlibs = "5.4.0" @@ -32,7 +32,7 @@ dexcount = "4.0.0" android-coreKtx = "1.13.1" android-recyclerView = "1.3.2" android-appCompat = "1.7.0" -android-fragment = "1.8.1" +android-fragment = "1.8.2" android-espresso = "3.6.1" android-test = "1.2.1" android-compose-material3 = "1.2.1" From 892fa90c37960ec8157cddf13dc3f52ca2f805c2 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 20:14:23 +0600 Subject: [PATCH 13/34] start add cache repos tests --- .../kotlin/full/FullCRUDCacheRepoTests.kt | 142 ++++++++++++++++++ .../kotlin/full/FullKeyValueCacheRepoTests.kt | 91 +++++++++++ 2 files changed, 233 insertions(+) create mode 100644 repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt create mode 100644 repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt diff --git a/repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt new file mode 100644 index 00000000000..b76b6f77481 --- /dev/null +++ b/repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt @@ -0,0 +1,142 @@ +package full + +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.MapCRUDRepo +import dev.inmo.micro_utils.repos.MapKeyValueRepo +import dev.inmo.micro_utils.repos.cache.full.FullCRUDCacheRepo +import dev.inmo.micro_utils.repos.create +import dev.inmo.micro_utils.repos.deleteById +import kotlinx.coroutines.test.runTest +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class FullCRUDCacheRepoTests { + data class New( + val data: String + ) + data class Registered( + val id: String, + val data: String + ) + @Test + fun creatingWorksProperly() = runTest { + val testData = (0 until 1000).map { + (it.toString() + uuid4().toString()) + } + val updatedTestData = (0 until 1000).map { + (it.toString() + uuid4().toString()) + } + val kvCache = MapKeyValueRepo() + val crudRepo = MapCRUDRepo( + { new, id, old -> + Registered(id, new.data) + } + ) { + val id = uuid4().toString() + id to Registered(id, it.data) + } + + val cacheRepo = FullCRUDCacheRepo( + crudRepo, + kvCache, + idGetter = { it.id } + ) + + val registereds = testData.map { + val created = cacheRepo.create(New(it)).first() + assertEquals(it, created.data) + assertEquals(kvCache.get(created.id), created) + assertEquals(crudRepo.getById(created.id), created) + created + } + + cacheRepo.getAll().forEach { (id, value) -> + assertTrue { + registereds.first { + it.id == id + } == value + } + } + val updatedRegistereds = registereds.mapIndexed { i, it -> + val updated = cacheRepo.update(it.id, New(updatedTestData[i])) ?: error("Unable to update data for $it") + assertEquals(updatedTestData[i], updated.data) + assertEquals(kvCache.get(updated.id), updated) + assertEquals(crudRepo.getById(updated.id), updated) + updated + } + cacheRepo.getAll().forEach { (id, value) -> + assertTrue { + updatedRegistereds.first { + it.id == id + } == value + } + } + } + @Test + fun precachingWorksProperly() = runTest { + val testData = (0 until 1000).map { + (it.toString() + uuid4().toString()) + } + val kvCache = MapKeyValueRepo() + val crudRepo = MapCRUDRepo( + { new, id, old -> + Registered(id, new.data) + } + ) { + val id = uuid4().toString() + id to Registered(id, it.data) + } + val registereds = crudRepo.create(testData.map { New(it) }) + + val cacheRepo = FullCRUDCacheRepo( + crudRepo, + kvCache, + idGetter = { it.id } + ) + + cacheRepo.getAll().forEach { (id, value) -> + assertTrue { + registereds.first { + it.id == id + } == value + } + } + } + @Test + fun removingWorksProperly() = runTest { + val testData = (0 until 1000).map { + (it.toString() + uuid4().toString()) + } + val kvCache = MapKeyValueRepo() + val crudRepo = MapCRUDRepo( + { new, id, old -> + Registered(id, new.data) + } + ) { + val id = uuid4().toString() + id to Registered(id, it.data) + } + val registereds = crudRepo.create(testData.map { New(it) }) + + val cacheRepo = FullCRUDCacheRepo( + crudRepo, + kvCache, + idGetter = { it.id } + ) + + registereds.forEach { + val id = it.id + assertTrue { + cacheRepo.getAll()[id] == it + } + + cacheRepo.deleteById(id) + assertFalse { + cacheRepo.contains(id) + } + } + assertEquals(0, cacheRepo.count()) + } +} diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt new file mode 100644 index 00000000000..8a541608811 --- /dev/null +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt @@ -0,0 +1,91 @@ +package full + +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.cache.full.FullKeyValueCacheRepo +import kotlinx.coroutines.test.runTest +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class FullKeyValueCacheRepoTests { + @Test + fun creatingWorksProperly() = runTest { + val testData = (0 until 1000).associate { + (it.toString() + uuid4().toString()) to uuid4().toString() + } + val updatedTestData = testData.keys.associateWith { + uuid4().toString() + } + val kvCache = MapKeyValueRepo() + val kvRepo = MapKeyValueRepo() + + val cacheRepo = FullKeyValueCacheRepo( + kvRepo, + kvCache + ) + + testData.forEach { + cacheRepo.set(it.key, it.value) + assertEquals(it.value, cacheRepo.get(it.key)) + assertEquals(it.value, kvRepo.get(it.key)) + assertEquals(it.value, kvCache.get(it.key)) + } + + updatedTestData.forEach { + cacheRepo.set(it.key, it.value) + assertEquals(cacheRepo.get(it.key), it.value) + assertEquals(kvRepo.get(it.key), it.value) + assertEquals(kvCache.get(it.key), it.value) + } + } + @Test + fun precachingWorksProperly() = runTest { + val testData = (0 until 1000).associate { + (it.toString() + uuid4().toString()) to uuid4().toString() + } + val kvCache = MapKeyValueRepo() + val kvRepo = MapKeyValueRepo() + kvRepo.set(testData) + + val cacheRepo = FullKeyValueCacheRepo( + kvRepo, + kvCache + ) + + + cacheRepo.getAll().forEach { (id, value) -> + assertTrue { + testData[id] == value + } + } + } + @Test + fun unsettingWorksProperly() = runTest { + val testData = (0 until 1000).associate { + (it.toString() + uuid4().toString()) to uuid4().toString() + } + val kvCache = MapKeyValueRepo() + val kvRepo = MapKeyValueRepo() + kvRepo.set(testData) + + val cacheRepo = FullKeyValueCacheRepo( + kvRepo, + kvCache + ) + + testData.forEach { + val id = it.key + assertTrue { + cacheRepo.getAll()[id] == it.value + } + + cacheRepo.unset(id) + assertFalse { + cacheRepo.contains(id) + } + } + assertEquals(0, cacheRepo.count()) + } +} From 120e7228c78ec1c302d8cd766016c022468a620a Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 22:17:52 +0600 Subject: [PATCH 14/34] add FullKeyValuesCacheRepoTests and small rewrite of MapWriteKeyValuesRepo.set(Map>) function --- .../repos/cache/full/FullKeyValueCacheRepo.kt | 22 ++++ .../cache/full/FullKeyValuesCacheRepo.kt | 101 ++++++++++++++++-- .../full/FullKeyValuesCacheRepoTests.kt | 56 ++++++++++ .../micro_utils/repos/MapKeyValuesRepo.kt | 13 +++ 4 files changed, 186 insertions(+), 6 deletions(-) create mode 100644 repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt index 86140ebe27f..0eeae1cba92 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt @@ -154,6 +154,28 @@ open class FullKeyValueCacheRepo( parentRepo.clear() kvCache.clear() } + + override suspend fun set(toSet: Map) { + locker.withWriteLock { + super.set(toSet) + kvCache.set( + toSet.filter { + parentRepo.contains(it.key) + } + ) + } + } + + override suspend fun unset(toUnset: List) { + locker.withWriteLock { + super.unset(toUnset) + kvCache.unset( + toUnset.filter { + !parentRepo.contains(it) + } + ) + } + } } fun KeyValueRepo.fullyCached( diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt index 80844c4d097..aea3163ed0a 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt @@ -65,6 +65,42 @@ open class FullReadKeyValuesCacheRepo( ) } + override suspend fun getAll(k: Key, reversed: Boolean): List { + return doOrTakeAndActualizeWithWriteLock( + { + get(k) ?.optionallyReverse(reversed).optionalOrAbsentIfNull + }, + { getAll(k, reversed) }, + { kvCache.set(k, it.optionallyReverse(reversed)) } + ) + } + + override suspend fun getAll(reverseLists: Boolean): Map> { + return doOrTakeAndActualizeWithWriteLock( + { + getAll().takeIf { it.isNotEmpty() } ?.let { + if (reverseLists) { + it.mapValues { it.value.reversed() } + } else { + it + } + }.optionalOrAbsentIfNull + }, + { getAll(reverseLists) }, + { + kvCache.set( + it.let { + if (reverseLists) { + it.mapValues { it.value.reversed() } + } else { + it + } + } + ) + } + ) + } + override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult { return doOrTakeAndActualize( { @@ -163,14 +199,15 @@ fun WriteKeyValuesRepo.caching( ) = FullWriteKeyValuesCacheRepo(this, kvCache, scope, locker) open class FullKeyValuesCacheRepo( - protected open val parentRepo: KeyValuesRepo, + override val parentRepo: KeyValuesRepo, kvCache: KeyValueRepo>, scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, locker: SmartRWLocker = SmartRWLocker(), -) : FullWriteKeyValuesCacheRepo(parentRepo, kvCache, scope, locker), +) : //FullWriteKeyValuesCacheRepo(parentRepo, kvCache, scope, locker), KeyValuesRepo, - ReadKeyValuesRepo by FullReadKeyValuesCacheRepo(parentRepo, kvCache, locker) { + FullReadKeyValuesCacheRepo(parentRepo, kvCache, locker), + WriteKeyValuesRepo by parentRepo { init { if (!skipStartInvalidate) { scope.launchSafelyWithoutExceptions { invalidate() } @@ -190,11 +227,63 @@ open class FullKeyValuesCacheRepo( } override suspend fun set(toSet: Map>) { - super.set(toSet) + locker.withWriteLock { + parentRepo.set(toSet) + kvCache.set( + toSet.filter { + parentRepo.contains(it.key) + } + ) + } } - override suspend fun removeWithValue(v: Value) { - super.removeWithValue(v) + override suspend fun add(toAdd: Map>) { + locker.withWriteLock { + parentRepo.add(toAdd) + toAdd.forEach { + val filtered = it.value.filter { v -> + parentRepo.contains(it.key, v) + }.ifEmpty { + return@forEach + } + kvCache.set( + it.key, + (kvCache.get(it.key) ?: emptyList()) + filtered + ) + } + } + } + + override suspend fun remove(toRemove: Map>) { + locker.withWriteLock { + parentRepo.remove(toRemove) + toRemove.forEach { + val filtered = it.value.filter { v -> + !parentRepo.contains(it.key, v) + }.ifEmpty { + return@forEach + }.toSet() + val resultList = (kvCache.get(it.key) ?: emptyList()) - filtered + if (resultList.isEmpty()) { + kvCache.unset(it.key) + } else { + kvCache.set( + it.key, + resultList + ) + } + } + } + } + + override suspend fun clear(k: Key) { + locker.withWriteLock { + parentRepo.clear(k) + if (parentRepo.contains(k)) { + return@withWriteLock + } + kvCache.unset(k) + } } } diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt new file mode 100644 index 00000000000..ce37c92233d --- /dev/null +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt @@ -0,0 +1,56 @@ +package full + +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.cache.full.FullKeyValuesCacheRepo +import korlibs.time.days +import korlibs.time.years +import kotlinx.coroutines.test.runTest +import kotlin.test.* + +class FullKeyValuesCacheRepoTests { + @Test + fun creatingWorksProperly() = runTest(timeout = 1.days) { + val testData = (0 until 1000).associate { + (it.toString() + uuid4().toString()) to (0 until 1000).map { + uuid4().toString() + }.sorted() + } + val updatedTestData = testData.keys.associateWith { + (0 until 1000).map { + uuid4().toString() + }.sorted() + } + val addedData = testData.keys.associateWith { + uuid4().toString() + } + val kvCache = MapKeyValueRepo>() + val kvRepo = MapKeyValuesRepo() + + val cacheRepo = FullKeyValuesCacheRepo( + kvRepo, + kvCache + ) + + testData.forEach { + cacheRepo.set(it.key, it.value) + assertContentEquals(it.value, cacheRepo.getAll(it.key)) + assertContentEquals(it.value, kvRepo.getAll(it.key)) + assertContentEquals(it.value, kvCache.get(it.key) ?.sorted()) + } + + updatedTestData.forEach { + cacheRepo.set(it.key, it.value) + assertContentEquals(it.value, cacheRepo.getAll(it.key)) + assertContentEquals(it.value, kvRepo.getAll(it.key)) + assertContentEquals(it.value, kvCache.get(it.key) ?.sorted()) + } + + addedData.forEach { + cacheRepo.add(it.key, it.value) + assertTrue(cacheRepo.contains(it.key, it.value)) + assertTrue(kvRepo.contains(it.key, it.value)) + assertTrue(kvCache.get(it.key) !!.contains(it.value)) + } + } +} diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt index 226bb93a36d..fb9bc5d8a7f 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt @@ -108,6 +108,19 @@ class MapWriteKeyValuesRepo( } } + override suspend fun set(toSet: Map>) { + locker.withWriteLock { + toSet.forEach { + map[it.key] = it.value.toMutableList() + } + } + toSet.forEach { (k, v) -> + v.forEach { + _onNewValue.emit(k to it) + } + } + } + override suspend fun remove(toRemove: Map>) { val removed = mutableListOf>() val cleared = mutableListOf() From 18f67cd4f2ff57fce593b0399bd55cc70206cb14 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 22:41:17 +0600 Subject: [PATCH 15/34] small improvement of test data in Full Cache tests --- .../src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt | 4 ++-- .../commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt | 4 ++-- .../commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt index b76b6f77481..358294c81eb 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullCRUDCacheRepoTests.kt @@ -23,10 +23,10 @@ class FullCRUDCacheRepoTests { @Test fun creatingWorksProperly() = runTest { val testData = (0 until 1000).map { - (it.toString() + uuid4().toString()) + ("$it-" + uuid4().toString()) } val updatedTestData = (0 until 1000).map { - (it.toString() + uuid4().toString()) + ("$it-" + uuid4().toString()) } val kvCache = MapKeyValueRepo() val crudRepo = MapCRUDRepo( diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt index 8a541608811..0080570b439 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt @@ -13,10 +13,10 @@ class FullKeyValueCacheRepoTests { @Test fun creatingWorksProperly() = runTest { val testData = (0 until 1000).associate { - (it.toString() + uuid4().toString()) to uuid4().toString() + ("$it-" + uuid4().toString()) to "$it-" + uuid4().toString() } val updatedTestData = testData.keys.associateWith { - uuid4().toString() + "$it-" + uuid4().toString() } val kvCache = MapKeyValueRepo() val kvRepo = MapKeyValueRepo() diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt index ce37c92233d..4a83b6874e0 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt @@ -12,17 +12,17 @@ class FullKeyValuesCacheRepoTests { @Test fun creatingWorksProperly() = runTest(timeout = 1.days) { val testData = (0 until 1000).associate { - (it.toString() + uuid4().toString()) to (0 until 1000).map { - uuid4().toString() + ("$it-" + uuid4().toString()) to (0 until 1000).map { + "$it-" + uuid4().toString() }.sorted() } val updatedTestData = testData.keys.associateWith { (0 until 1000).map { - uuid4().toString() + "$it-" + uuid4().toString() }.sorted() } val addedData = testData.keys.associateWith { - uuid4().toString() + "$it-" + uuid4().toString() } val kvCache = MapKeyValueRepo>() val kvRepo = MapKeyValuesRepo() From ea82a59f317b9de27755d8a772f1a9a1f921d87f Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 22:43:02 +0600 Subject: [PATCH 16/34] update gradle wrapper version --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 48c0a02ca41..19cfad969ba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 8713fb04c5f5cf616924b82b3a961d72573a2516 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 23:02:24 +0600 Subject: [PATCH 17/34] small change in MapWriteKeyValuesRepo.set and remove duration of FullKeyValuesCacheRepoTests.creatingWorksProperly --- .../commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt | 2 +- .../kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt index 4a83b6874e0..c92a1a44881 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt @@ -10,7 +10,7 @@ import kotlin.test.* class FullKeyValuesCacheRepoTests { @Test - fun creatingWorksProperly() = runTest(timeout = 1.days) { + fun creatingWorksProperly() = runTest { val testData = (0 until 1000).associate { ("$it-" + uuid4().toString()) to (0 until 1000).map { "$it-" + uuid4().toString() diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt index fb9bc5d8a7f..3a004120f92 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt @@ -110,9 +110,9 @@ class MapWriteKeyValuesRepo( override suspend fun set(toSet: Map>) { locker.withWriteLock { - toSet.forEach { - map[it.key] = it.value.toMutableList() - } + map.putAll( + toSet.mapValues { it.value.toMutableList() } + ) } toSet.forEach { (k, v) -> v.forEach { From 36093b97417f4d886547e69697c7ad07a9276138 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 23:36:08 +0600 Subject: [PATCH 18/34] fix of full caches initial actualization and realize MapKeyValuesRepo methods getAll --- .../repos/cache/full/FullCRUDCacheRepo.kt | 17 +++++++++++++-- .../repos/cache/full/FullKeyValueCacheRepo.kt | 17 +++++++++++++-- .../cache/full/FullKeyValuesCacheRepo.kt | 21 +++++++++++++++---- .../full/FullKeyValuesCacheRepoTests.kt | 1 + .../inmo/micro_utils/repos/MapKeyValueRepo.kt | 4 +++- .../micro_utils/repos/MapKeyValuesRepo.kt | 15 +++++++++++++ 6 files changed, 66 insertions(+), 9 deletions(-) diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt index 0afab87f949..d163b968f9d 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullCRUDCacheRepo.kt @@ -98,7 +98,7 @@ open class FullCRUDCacheRepo( kvCache: KeyValueRepo, scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, - locker: SmartRWLocker = SmartRWLocker(), + locker: SmartRWLocker = SmartRWLocker(writeIsLocked = !skipStartInvalidate), idGetter: (ObjectType) -> IdType ) : FullReadCRUDCacheRepo( parentRepo, @@ -116,10 +116,23 @@ open class FullCRUDCacheRepo( CRUDRepo { init { if (!skipStartInvalidate) { - scope.launchSafelyWithoutExceptions { invalidate() } + scope.launchSafelyWithoutExceptions { + if (locker.writeMutex.isLocked) { + initialInvalidate() + } else { + invalidate() + } + } } } + protected open suspend fun initialInvalidate() { + try { + kvCache.actualizeAll(parentRepo, locker = null) + } finally { + locker.unlockWrite() + } + } override suspend fun invalidate() { actualizeAll() } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt index 0eeae1cba92..20b08e237b6 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt @@ -130,7 +130,7 @@ open class FullKeyValueCacheRepo( kvCache: KeyValueRepo, scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, - locker: SmartRWLocker = SmartRWLocker() + locker: SmartRWLocker = SmartRWLocker(writeIsLocked = !skipStartInvalidate), ) : FullWriteKeyValueCacheRepo(parentRepo, kvCache, scope), KeyValueRepo, ReadKeyValueRepo by FullReadKeyValueCacheRepo( @@ -140,12 +140,25 @@ open class FullKeyValueCacheRepo( ) { init { if (!skipStartInvalidate) { - scope.launchSafelyWithoutExceptions { invalidate() } + scope.launchSafelyWithoutExceptions { + if (locker.writeMutex.isLocked) { + initialInvalidate() + } else { + invalidate() + } + } } } override suspend fun unsetWithValues(toUnset: List) = parentRepo.unsetWithValues(toUnset) + protected open suspend fun initialInvalidate() { + try { + kvCache.actualizeAll(parentRepo, locker = null) + } finally { + locker.unlockWrite() + } + } override suspend fun invalidate() { kvCache.actualizeAll(parentRepo, locker) } diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt index aea3163ed0a..c68e238d27d 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValuesCacheRepo.kt @@ -10,6 +10,7 @@ import dev.inmo.micro_utils.pagination.utils.* import dev.inmo.micro_utils.repos.* import dev.inmo.micro_utils.repos.cache.util.ActualizeAllClearMode import dev.inmo.micro_utils.repos.cache.util.actualizeAll +import dev.inmo.micro_utils.repos.pagination.maxPagePagination import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.* @@ -203,14 +204,19 @@ open class FullKeyValuesCacheRepo( kvCache: KeyValueRepo>, scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, - locker: SmartRWLocker = SmartRWLocker(), -) : //FullWriteKeyValuesCacheRepo(parentRepo, kvCache, scope, locker), - KeyValuesRepo, + locker: SmartRWLocker = SmartRWLocker(writeIsLocked = !skipStartInvalidate), +) : KeyValuesRepo, FullReadKeyValuesCacheRepo(parentRepo, kvCache, locker), WriteKeyValuesRepo by parentRepo { init { if (!skipStartInvalidate) { - scope.launchSafelyWithoutExceptions { invalidate() } + scope.launchSafelyWithoutExceptions { + if (locker.writeMutex.isLocked) { + initialInvalidate() + } else { + invalidate() + } + } } } @@ -222,6 +228,13 @@ open class FullKeyValuesCacheRepo( } } + protected open suspend fun initialInvalidate() { + try { + kvCache.actualizeAll(parentRepo, locker = null) + } finally { + locker.unlockWrite() + } + } override suspend fun invalidate() { kvCache.actualizeAll(parentRepo, locker = locker) } diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt index c92a1a44881..4a2ffb34512 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt @@ -3,6 +3,7 @@ package full import com.benasher44.uuid.uuid4 import dev.inmo.micro_utils.repos.* import dev.inmo.micro_utils.repos.cache.full.FullKeyValuesCacheRepo +import dev.inmo.micro_utils.repos.pagination.maxPagePagination import korlibs.time.days import korlibs.time.years import kotlinx.coroutines.test.runTest diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt index 32b6815330f..460b3c9b794 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt @@ -24,7 +24,9 @@ class ReadMapKeyValueRepo( ) : ReadKeyValueRepo { constructor(map: Map = emptyMap()) : this(map, SmartRWLocker()) - override suspend fun get(k: Key): Value? = locker.withReadAcquire { map[k] } + override suspend fun get(k: Key): Value? = locker.withReadAcquire { + map[k] + } override suspend fun values( pagination: Pagination, diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt index 3a004120f92..a5e54cf0910 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt @@ -4,6 +4,7 @@ import dev.inmo.micro_utils.coroutines.SmartRWLocker import dev.inmo.micro_utils.coroutines.withReadAcquire import dev.inmo.micro_utils.coroutines.withWriteLock import dev.inmo.micro_utils.pagination.* +import dev.inmo.micro_utils.pagination.utils.optionallyReverse import dev.inmo.micro_utils.pagination.utils.paginate import dev.inmo.micro_utils.pagination.utils.reverse import kotlinx.coroutines.flow.* @@ -33,6 +34,20 @@ class MapReadKeyValuesRepo( ) } + override suspend fun getAll(k: Key, reversed: Boolean): List { + return locker.withReadAcquire { map[k] ?.optionallyReverse(reversed) ?: return emptyList() } + } + + override suspend fun getAll(reverseLists: Boolean): Map> { + return locker.withReadAcquire { + if (reverseLists) { + map.mapValues { it.value.reversed() } + } else { + map.toMap() + } + } + } + override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult { val keys = locker.withReadAcquire { map.keys From 5fbc1a132fddec064f16c6d1515520d8bdd63f3e Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 2 Aug 2024 23:58:04 +0600 Subject: [PATCH 19/34] improvements in SmartRWLocker and breaking of FullKeyValueCacheRepo tests --- .../kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt index 65eb1732bb6..faeea009ed9 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt @@ -13,7 +13,7 @@ import kotlin.contracts.contract * * [unlockWrite] will just unlock [writeMutex] */ class SmartRWLocker(private val readPermits: Int = Int.MAX_VALUE, writeIsLocked: Boolean = false) { - private val _readSemaphore = SmartSemaphore.Mutable(permits = readPermits, acquiredPermits = 0) + private val _readSemaphore = SmartSemaphore.Mutable(permits = readPermits, acquiredPermits = if (writeIsLocked) readPermits else 0) private val _writeMutex = SmartMutex.Mutable(locked = writeIsLocked) val readSemaphore: SmartSemaphore.Immutable = _readSemaphore.immutable() @@ -23,7 +23,6 @@ class SmartRWLocker(private val readPermits: Int = Int.MAX_VALUE, writeIsLocked: * Do lock in [readSemaphore] inside of [writeMutex] locking */ suspend fun acquireRead() { - _writeMutex.waitUnlock() _readSemaphore.acquire() } @@ -38,8 +37,8 @@ class SmartRWLocker(private val readPermits: Int = Int.MAX_VALUE, writeIsLocked: * Locking [writeMutex] and wait while all [readSemaphore] permits will be freed */ suspend fun lockWrite() { - _writeMutex.lock() _readSemaphore.acquire(readPermits) + _writeMutex.lock() } /** From bf293a8f8fd8e084e4b6d7f7b2d681e7a601aaaf Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 3 Aug 2024 01:47:39 +0600 Subject: [PATCH 20/34] fix of tests --- .../micro_utils/coroutines/SmartRWLocker.kt | 3 ++- ...JsAndroidLinuxMingwLinuxArm64Project.gradle | 16 ++++++++++++++-- ...JsAndroidLinuxMingwLinuxArm64Project.gradle | 18 +++++++++++++++--- mppJvmJsAndroidProject.gradle | 16 ++++++++++++++-- mppJvmJsLinuxMingwLinuxArm64Project.gradle | 16 ++++++++++++++-- mppJvmJsLinuxMingwProject.gradle | 16 ++++++++++++++-- mppProjectWithSerializationAndCompose.gradle | 16 ++++++++++++++-- .../repos/cache/full/FullKeyValueCacheRepo.kt | 11 ++++++----- 8 files changed, 93 insertions(+), 19 deletions(-) diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt index faeea009ed9..08069672cd6 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartRWLocker.kt @@ -23,6 +23,7 @@ class SmartRWLocker(private val readPermits: Int = Int.MAX_VALUE, writeIsLocked: * Do lock in [readSemaphore] inside of [writeMutex] locking */ suspend fun acquireRead() { + _writeMutex.waitUnlock() _readSemaphore.acquire() } @@ -37,8 +38,8 @@ class SmartRWLocker(private val readPermits: Int = Int.MAX_VALUE, writeIsLocked: * Locking [writeMutex] and wait while all [readSemaphore] permits will be freed */ suspend fun lockWrite() { - _readSemaphore.acquire(readPermits) _writeMutex.lock() + _readSemaphore.acquire(readPermits) } /** diff --git a/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle b/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle index 78a333a7f04..f7dee6e0a65 100644 --- a/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle +++ b/mppComposeJvmJsAndroidLinuxMingwLinuxArm64Project.gradle @@ -12,8 +12,20 @@ kotlin { } } js (IR) { - browser() - nodejs() + browser { + testTask { + useMocha { + timeout = "60000" + } + } + } + nodejs { + testTask { + useMocha { + timeout = "60000" + } + } + } } androidTarget { publishAllLibraryVariants() diff --git a/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle b/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle index 2987a6a3d78..9fb86a673ed 100644 --- a/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle +++ b/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle @@ -12,8 +12,20 @@ kotlin { } } js (IR) { - browser() - nodejs() + browser { + testTask { + useMocha { + timeout = "60000" + } + } + } + nodejs { + testTask { + useMocha { + timeout = "60000" + } + } + } } androidTarget { publishAllLibraryVariants() @@ -36,7 +48,7 @@ kotlin { } commonTest { dependencies { - implementation kotlin('test-common') + implementation kotlin('test') implementation kotlin('test-annotations-common') implementation libs.kt.coroutines.test } diff --git a/mppJvmJsAndroidProject.gradle b/mppJvmJsAndroidProject.gradle index e08c7cc2f86..95d22babd49 100644 --- a/mppJvmJsAndroidProject.gradle +++ b/mppJvmJsAndroidProject.gradle @@ -12,8 +12,20 @@ kotlin { } } js (IR) { - browser() - nodejs() + browser { + testTask { + useMocha { + timeout = "60000" + } + } + } + nodejs { + testTask { + useMocha { + timeout = "60000" + } + } + } } androidTarget { publishAllLibraryVariants() diff --git a/mppJvmJsLinuxMingwLinuxArm64Project.gradle b/mppJvmJsLinuxMingwLinuxArm64Project.gradle index 27cba3db2e0..9d4d450a220 100644 --- a/mppJvmJsLinuxMingwLinuxArm64Project.gradle +++ b/mppJvmJsLinuxMingwLinuxArm64Project.gradle @@ -12,8 +12,20 @@ kotlin { } } js (IR) { - browser() - nodejs() + browser { + testTask { + useMocha { + timeout = "60000" + } + } + } + nodejs { + testTask { + useMocha { + timeout = "60000" + } + } + } } linuxX64() mingwX64() diff --git a/mppJvmJsLinuxMingwProject.gradle b/mppJvmJsLinuxMingwProject.gradle index b6355513b6f..8f56313f224 100644 --- a/mppJvmJsLinuxMingwProject.gradle +++ b/mppJvmJsLinuxMingwProject.gradle @@ -12,8 +12,20 @@ kotlin { } } js (IR) { - browser() - nodejs() + browser { + testTask { + useMocha { + timeout = "60000" + } + } + } + nodejs { + testTask { + useMocha { + timeout = "60000" + } + } + } } linuxX64() mingwX64() diff --git a/mppProjectWithSerializationAndCompose.gradle b/mppProjectWithSerializationAndCompose.gradle index 31308474059..28f51365a70 100644 --- a/mppProjectWithSerializationAndCompose.gradle +++ b/mppProjectWithSerializationAndCompose.gradle @@ -12,8 +12,20 @@ kotlin { } } js (IR) { - browser() - nodejs() + browser { + testTask { + useMocha { + timeout = "60000" + } + } + } + nodejs { + testTask { + useMocha { + timeout = "60000" + } + } + } } androidTarget { publishAllLibraryVariants() diff --git a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt index 20b08e237b6..7defa718495 100644 --- a/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt +++ b/repos/cache/src/commonMain/kotlin/dev/inmo/micro_utils/repos/cache/full/FullKeyValueCacheRepo.kt @@ -126,14 +126,15 @@ fun WriteKeyValueRepo.caching( ) = FullWriteKeyValueCacheRepo(this, kvCache, scope) open class FullKeyValueCacheRepo( - protected open val parentRepo: KeyValueRepo, + override val parentRepo: KeyValueRepo, kvCache: KeyValueRepo, scope: CoroutineScope = CoroutineScope(Dispatchers.Default), skipStartInvalidate: Boolean = false, locker: SmartRWLocker = SmartRWLocker(writeIsLocked = !skipStartInvalidate), -) : FullWriteKeyValueCacheRepo(parentRepo, kvCache, scope), +) : //FullWriteKeyValueCacheRepo(parentRepo, kvCache, scope), KeyValueRepo, - ReadKeyValueRepo by FullReadKeyValueCacheRepo( + WriteKeyValueRepo by parentRepo, + FullReadKeyValueCacheRepo( parentRepo, kvCache, locker @@ -170,7 +171,7 @@ open class FullKeyValueCacheRepo( override suspend fun set(toSet: Map) { locker.withWriteLock { - super.set(toSet) + parentRepo.set(toSet) kvCache.set( toSet.filter { parentRepo.contains(it.key) @@ -181,7 +182,7 @@ open class FullKeyValueCacheRepo( override suspend fun unset(toUnset: List) { locker.withWriteLock { - super.unset(toUnset) + parentRepo.unset(toUnset) kvCache.unset( toUnset.filter { !parentRepo.contains(it) From 9f2f0de0c402d1f12e19d2678dc39f5cf2f9653f Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 6 Aug 2024 14:07:57 +0600 Subject: [PATCH 21/34] add check of emptiness in map reslozations of KV/KVs repos --- .../kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt | 2 ++ .../kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt index 460b3c9b794..901802e76b0 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt @@ -102,11 +102,13 @@ class WriteMapKeyValueRepo( constructor(map: MutableMap = mutableMapOf()) : this(map, SmartRWLocker()) override suspend fun set(toSet: Map) { + if (toSet.isEmpty()) return locker.withWriteLock { map.putAll(toSet) } toSet.forEach { (k, v) -> _onNewValue.emit(k to v) } } override suspend fun unset(toUnset: List) { + if (toUnset.isEmpty()) return locker.withWriteLock { toUnset.mapNotNull { k -> map.remove(k) ?.let { _ -> k } diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt index a5e54cf0910..cf9a68bbb38 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValuesRepo.kt @@ -124,6 +124,8 @@ class MapWriteKeyValuesRepo( } override suspend fun set(toSet: Map>) { + if (toSet.isEmpty()) return + locker.withWriteLock { map.putAll( toSet.mapValues { it.value.toMutableList() } @@ -137,6 +139,8 @@ class MapWriteKeyValuesRepo( } override suspend fun remove(toRemove: Map>) { + if (toRemove.isEmpty()) return + val removed = mutableListOf>() val cleared = mutableListOf() locker.withWriteLock { From 9e70f73684932620548a60a5ee4a354865acb7ad Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 6 Aug 2024 17:09:13 +0600 Subject: [PATCH 22/34] upgrade kotlin --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f9cfc9057ce..e405865cb4a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -kt = "2.0.0" +kt = "2.0.10" kt-serialization = "1.7.1" kt-coroutines = "1.8.1" From dbff3d7cf12e6d613ded0c7e5cbf08e5457ad00c Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 6 Aug 2024 22:11:31 +0600 Subject: [PATCH 23/34] small change in FullKeyValuesCacheRepoTests and FullKeyValueCacheRepoTests --- .../src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt | 3 ++- .../src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt index 0080570b439..d4008bce742 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt @@ -23,7 +23,8 @@ class FullKeyValueCacheRepoTests { val cacheRepo = FullKeyValueCacheRepo( kvRepo, - kvCache + kvCache, + skipStartInvalidate = true ) testData.forEach { diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt index 4a2ffb34512..9fe58d6327a 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt @@ -30,7 +30,8 @@ class FullKeyValuesCacheRepoTests { val cacheRepo = FullKeyValuesCacheRepo( kvRepo, - kvCache + kvCache, + skipStartInvalidate = true ) testData.forEach { From efa869f91a206098bd40e33067455e565d4c541d Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 6 Aug 2024 23:56:31 +0600 Subject: [PATCH 24/34] Update build.yml --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 97ef9be2041..f92649fc9fb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,7 @@ name: Build on: [push] jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 From e8232664f3366118f10bbd94cbe49faeeb41445d Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 7 Aug 2024 16:30:43 +0600 Subject: [PATCH 25/34] update delay on creating tests in cache --- .../commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt | 6 +++--- .../commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt index d4008bce742..ee11087c3e9 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValueCacheRepoTests.kt @@ -3,6 +3,7 @@ package full import com.benasher44.uuid.uuid4 import dev.inmo.micro_utils.repos.* import dev.inmo.micro_utils.repos.cache.full.FullKeyValueCacheRepo +import korlibs.time.seconds import kotlinx.coroutines.test.runTest import kotlin.test.Test import kotlin.test.assertEquals @@ -11,7 +12,7 @@ import kotlin.test.assertTrue class FullKeyValueCacheRepoTests { @Test - fun creatingWorksProperly() = runTest { + fun creatingWorksProperly() = runTest(timeout = 120.seconds) { val testData = (0 until 1000).associate { ("$it-" + uuid4().toString()) to "$it-" + uuid4().toString() } @@ -23,8 +24,7 @@ class FullKeyValueCacheRepoTests { val cacheRepo = FullKeyValueCacheRepo( kvRepo, - kvCache, - skipStartInvalidate = true + kvCache ) testData.forEach { diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt index 9fe58d6327a..33545abf474 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt @@ -5,13 +5,14 @@ import dev.inmo.micro_utils.repos.* import dev.inmo.micro_utils.repos.cache.full.FullKeyValuesCacheRepo import dev.inmo.micro_utils.repos.pagination.maxPagePagination import korlibs.time.days +import korlibs.time.seconds import korlibs.time.years import kotlinx.coroutines.test.runTest import kotlin.test.* class FullKeyValuesCacheRepoTests { @Test - fun creatingWorksProperly() = runTest { + fun creatingWorksProperly() = runTest(timeout = 120.seconds) { val testData = (0 until 1000).associate { ("$it-" + uuid4().toString()) to (0 until 1000).map { "$it-" + uuid4().toString() From aeca32498aec02be1f6b3e776422047d6628d106 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 7 Aug 2024 16:32:55 +0600 Subject: [PATCH 26/34] Revert "Update build.yml" This reverts commit ab0b3a8f0d2c2a38eab5c9910f8ae5543a487c97. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f92649fc9fb..97ef9be2041 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,7 @@ name: Build on: [push] jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 From 8d86f29325af58a0b0e975be8ef6a1217ed5a6cc Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 7 Aug 2024 16:32:57 +0600 Subject: [PATCH 27/34] Revert "small change in FullKeyValuesCacheRepoTests and FullKeyValueCacheRepoTests" This reverts commit 3db8d2291e73812f9eebcec1c0ad088ad0ca854a. --- .../src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt index 33545abf474..1d5c699f291 100644 --- a/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt +++ b/repos/cache/src/commonTest/kotlin/full/FullKeyValuesCacheRepoTests.kt @@ -31,8 +31,7 @@ class FullKeyValuesCacheRepoTests { val cacheRepo = FullKeyValuesCacheRepo( kvRepo, - kvCache, - skipStartInvalidate = true + kvCache ) testData.forEach { From b0569f8421260f33ccff1ea36667fff201184ba7 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 9 Aug 2024 19:22:32 +0600 Subject: [PATCH 28/34] add tests for cruds --- .gitignore | 1 + gradle/libs.versions.toml | 7 +- repos/common/tests/build.gradle | 69 +++++++++++++++++ .../commonMain/kotlin/CommonCRUDRepoTests.kt | 76 ++++++++++++++++++ .../kotlin/CommonKeyValueRepoTests.kt | 50 ++++++++++++ .../kotlin/CommonKeyValuesRepoTests.kt | 46 +++++++++++ .../src/commonMain/kotlin/CommonRepoTests.kt | 6 ++ repos/exposed/build.gradle | 7 ++ .../exposed/AbstractExposedWriteCRUDRepo.kt | 4 +- .../keyvalue/AbstractExposedKeyValueRepo.kt | 6 +- .../onetomany/AbstractExposedKeyValuesRepo.kt | 25 +++++- .../AbstractExposedReadKeyValuesRepo.kt | 4 +- repos/exposed/src/jvmTest/kotlin/Database.kt | 21 +++++ .../jvmTest/kotlin/ExposedCRUDRepoTests.kt | 77 +++++++++++++++++++ .../kotlin/ExposedKeyValueRepoTests.kt | 67 ++++++++++++++++ .../kotlin/ExposedKeyValuesRepoTests.kt | 57 ++++++++++++++ repos/inmemory/build.gradle | 5 ++ .../kotlin/InMemoryCRUDRepoTests.kt | 31 ++++++++ .../kotlin/InMemoryKeyValueRepoTests.kt | 20 +++++ .../kotlin/InMemoryKeyValuesRepoTests.kt | 14 ++++ settings.gradle | 1 + 21 files changed, 585 insertions(+), 9 deletions(-) create mode 100644 repos/common/tests/build.gradle create mode 100644 repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt create mode 100644 repos/common/tests/src/commonMain/kotlin/CommonKeyValueRepoTests.kt create mode 100644 repos/common/tests/src/commonMain/kotlin/CommonKeyValuesRepoTests.kt create mode 100644 repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt create mode 100644 repos/exposed/src/jvmTest/kotlin/Database.kt create mode 100644 repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt create mode 100644 repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt create mode 100644 repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt create mode 100644 repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt create mode 100644 repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt create mode 100644 repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt diff --git a/.gitignore b/.gitignore index 6c97217ff69..42156086770 100644 --- a/.gitignore +++ b/.gitignore @@ -18,5 +18,6 @@ publishing.sh local.* local/ +**/*.local.* .kotlin/ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e405865cb4a..77581e5a842 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,8 @@ jb-compose = "1.7.0-alpha02" jb-exposed = "0.53.0" jb-dokka = "1.9.20" +sqlite = "3.46.0.1" + korlibs = "5.4.0" uuid = "0.8.4" @@ -21,7 +23,7 @@ koin = "3.5.6" okio = "3.9.0" -ksp = "2.0.0-1.0.23" +ksp = "2.0.10-1.0.24" kotlin-poet = "1.18.0" versions = "0.51.0" @@ -52,6 +54,7 @@ kt-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization- kt-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kt-coroutines" } kt-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kt-coroutines" } kt-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kt-coroutines" } +kt-coroutines-debug = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-debug", version.ref = "kt-coroutines" } ktor-io = { module = "io.ktor:ktor-io", version.ref = "ktor" } @@ -79,6 +82,8 @@ koin = { module = "io.insert-koin:koin-core", version.ref = "koin" } jb-exposed = { module = "org.jetbrains.exposed:exposed-core", version.ref = "jb-exposed" } +jb-exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "jb-exposed" } +sqlite = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" } android-coreKtx = { module = "androidx.core:core-ktx", version.ref = "android-coreKtx" } diff --git a/repos/common/tests/build.gradle b/repos/common/tests/build.gradle new file mode 100644 index 00000000000..ba8a8f0d4ec --- /dev/null +++ b/repos/common/tests/build.gradle @@ -0,0 +1,69 @@ +plugins { + id "org.jetbrains.kotlin.multiplatform" + id "org.jetbrains.kotlin.plugin.serialization" + id "com.android.library" +} + +project.version = "$version" +project.group = "$group" + +kotlin { + jvm { + compilations.main { + kotlinOptions { + jvmTarget = "17" + } + } + } + js (IR) { + browser() + nodejs() + } + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "17" + } + } + } + linuxX64() + mingwX64() + linuxArm64() + + sourceSets { + commonMain { + dependencies { + implementation kotlin('stdlib') + api libs.kt.serialization + api kotlin('test') + api kotlin('test-annotations-common') + api libs.kt.coroutines.test + api project(":micro_utils.repos.common") + } + } + + jvmMain { + dependencies { + implementation kotlin('test-junit') + } + } + jsMain { + dependencies { + implementation kotlin('test-js') + } + } + nativeMain.dependsOn commonMain + linuxX64Main.dependsOn nativeMain + mingwX64Main.dependsOn nativeMain + linuxArm64Main.dependsOn nativeMain + + androidMain.dependsOn jvmMain + } +} + +apply from: "$defaultAndroidSettingsPresetPath" + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} \ No newline at end of file diff --git a/repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt b/repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt new file mode 100644 index 00000000000..d8f21192b3d --- /dev/null +++ b/repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt @@ -0,0 +1,76 @@ +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.CRUDRepo +import dev.inmo.micro_utils.repos.create +import dev.inmo.micro_utils.repos.deleteById +import korlibs.time.seconds +import kotlinx.coroutines.test.runTest +import kotlin.test.* + +abstract class CommonCRUDRepoTests : CommonRepoTests>() { + data class New( + val data: String + ) + data class Registered( + val id: String, + val data: String + ) + + open fun creatingWorksProperly() = runTest(timeout = 120.seconds) { + val crudRepo = repoCreator() + val testData = (0 until testSequencesSize).map { + ("$it-" + uuid4().toString()) + } + val updatedTestData = (0 until 1000).map { + ("$it-" + uuid4().toString()) + } + + val registereds = testData.map { + val created = crudRepo.create(New(it)).first() + assertEquals(it, created.data) + assertEquals(crudRepo.getById(created.id), created) + created + } + + crudRepo.getAll().forEach { (id, value) -> + assertTrue { + registereds.first { + it.id == id + } == value + } + } + val updatedRegistereds = registereds.mapIndexed { i, it -> + val updated = crudRepo.update(it.id, New(updatedTestData[i])) ?: error("Unable to update data for $it") + assertEquals(updatedTestData[i], updated.data) + assertEquals(crudRepo.getById(updated.id), updated) + updated + } + crudRepo.getAll().forEach { (id, value) -> + assertTrue { + updatedRegistereds.first { + it.id == id + } == value + } + } + } + @Test + open fun removingWorksProperly() = runTest { + val crudRepo = repoCreator() + val testData = (0 until testSequencesSize).map { + (it.toString() + uuid4().toString()) + } + val registereds = crudRepo.create(testData.map { New(it) }) + + registereds.forEach { + val id = it.id + assertTrue { + crudRepo.getAll()[id] == it + } + + crudRepo.deleteById(id) + assertFalse { + crudRepo.contains(id) + } + } + assertEquals(0, crudRepo.count()) + } +} diff --git a/repos/common/tests/src/commonMain/kotlin/CommonKeyValueRepoTests.kt b/repos/common/tests/src/commonMain/kotlin/CommonKeyValueRepoTests.kt new file mode 100644 index 00000000000..b461f1876f1 --- /dev/null +++ b/repos/common/tests/src/commonMain/kotlin/CommonKeyValueRepoTests.kt @@ -0,0 +1,50 @@ +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.* +import korlibs.time.seconds +import kotlinx.coroutines.test.runTest +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +abstract class CommonKeyValueRepoTests : CommonRepoTests>() { + open fun creatingWorksProperly() = runTest(timeout = 120.seconds) { + val repo = repoCreator() + val testData = (0 until testSequencesSize).associate { + ("$it-" + uuid4().toString()) to "$it-" + uuid4().toString() + } + val updatedTestData = testData.keys.associateWith { + "$it-" + uuid4().toString() + } + + testData.forEach { + repo.set(it.key, it.value) + assertEquals(it.value, repo.get(it.key)) + } + + updatedTestData.forEach { + repo.set(it.key, it.value) + assertEquals(repo.get(it.key), it.value) + } + } + open fun unsettingWorksProperly() = runTest { + val repo = repoCreator() + val testData = (0 until testSequencesSize).associate { + (it.toString() + uuid4().toString()) to uuid4().toString() + } + + repo.set(testData) + + testData.forEach { + val id = it.key + assertTrue { + repo.getAll()[id] == it.value + } + + repo.unset(id) + assertFalse { + repo.contains(id) + } + } + assertEquals(0, repo.count()) + } +} diff --git a/repos/common/tests/src/commonMain/kotlin/CommonKeyValuesRepoTests.kt b/repos/common/tests/src/commonMain/kotlin/CommonKeyValuesRepoTests.kt new file mode 100644 index 00000000000..a13ad8695de --- /dev/null +++ b/repos/common/tests/src/commonMain/kotlin/CommonKeyValuesRepoTests.kt @@ -0,0 +1,46 @@ +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.* +import korlibs.time.seconds +import kotlinx.coroutines.joinAll +import kotlinx.coroutines.launch +import kotlinx.coroutines.test.runTest +import kotlin.test.* + +abstract class CommonKeyValuesRepoTests : CommonRepoTests>() { + open fun creatingWorksProperly() = runTest(timeout = 120.seconds) { + val repo = repoCreator() + val testData = (0 until testSequencesSize).associate { + ("$it-" + uuid4().toString()) to (0 until 1000).map { + "$it-" + uuid4().toString() + }.sorted() + } + val updatedTestData = testData.keys.associateWith { + (0 until 1000).map { + "$it-" + uuid4().toString() + }.sorted() + } + val addedData = testData.keys.associateWith { + "$it-" + uuid4().toString() + } + + updatedTestData.map { + launch { + repo.set(it.key, it.value) + assertContentEquals(it.value.sorted(), repo.getAll(it.key).sorted()) + } + }.joinAll() + + updatedTestData.map { + launch { + repo.set(it.key, it.value) + val all = repo.getAll(it.key) + assertContentEquals(it.value.sorted(), all.sorted()) + } + }.joinAll() + + addedData.forEach { + repo.add(it.key, it.value) + assertTrue(repo.contains(it.key, it.value)) + } + } +} diff --git a/repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt b/repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt new file mode 100644 index 00000000000..b774bfdbd61 --- /dev/null +++ b/repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt @@ -0,0 +1,6 @@ +import dev.inmo.micro_utils.repos.CRUDRepo + +abstract class CommonRepoTests { + protected open val testSequencesSize = 1000 + protected abstract val repoCreator: suspend () -> T +} \ No newline at end of file diff --git a/repos/exposed/build.gradle b/repos/exposed/build.gradle index dcb01813d04..c92d0d600f3 100644 --- a/repos/exposed/build.gradle +++ b/repos/exposed/build.gradle @@ -14,5 +14,12 @@ kotlin { api internalProject("micro_utils.pagination.exposed") } } + jvmTest { + dependencies { + api libs.sqlite + api libs.jb.exposed.jdbc + api project(":micro_utils.repos.common.tests") + } + } } } diff --git a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt index 083ccb075b6..6126720eb93 100644 --- a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt +++ b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt @@ -52,9 +52,9 @@ abstract class AbstractExposedWriteCRUDRepo( * * @return In case when id for the model has been created new [IdType] should be returned */ - protected open fun createAndInsertId(value: InputValueType, it: InsertStatement): IdType? = null + protected open fun createAndInsertId(value: InputValueType, it: UpdateBuilder): IdType? = null - protected open fun insert(value: InputValueType, it: InsertStatement) { + protected open fun insert(value: InputValueType, it: UpdateBuilder) { val id = createAndInsertId(value, it) update(id, value, it as UpdateBuilder) } diff --git a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/AbstractExposedKeyValueRepo.kt b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/AbstractExposedKeyValueRepo.kt index a5a939c1b10..74ca058b1ec 100644 --- a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/AbstractExposedKeyValueRepo.kt +++ b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/AbstractExposedKeyValueRepo.kt @@ -23,11 +23,11 @@ abstract class AbstractExposedKeyValueRepo( override val onValueRemoved: Flow = _onValueRemoved.asSharedFlow() protected abstract fun update(k: Key, v: Value, it: UpdateBuilder) - protected abstract fun insertKey(k: Key, v: Value, it: InsertStatement) + protected abstract fun insertKey(k: Key, v: Value, it: UpdateBuilder) - protected open fun insert(k: Key, v: Value, it: InsertStatement) { + protected open fun insert(k: Key, v: Value, it: UpdateBuilder) { insertKey(k, v, it) - update(k, v, it as UpdateBuilder) + update(k, v, it) } override suspend fun set(toSet: Map) { diff --git a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedKeyValuesRepo.kt b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedKeyValuesRepo.kt index f7d0fb5e3c6..7c934de83eb 100644 --- a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedKeyValuesRepo.kt +++ b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedKeyValuesRepo.kt @@ -5,6 +5,7 @@ import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.* import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.statements.InsertStatement +import org.jetbrains.exposed.sql.statements.UpdateBuilder import org.jetbrains.exposed.sql.transactions.transaction abstract class AbstractExposedKeyValuesRepo( @@ -26,7 +27,7 @@ abstract class AbstractExposedKeyValuesRepo( override val onDataCleared: Flow get() = _onDataCleared.asSharedFlow() - protected abstract fun insert(k: Key, v: Value, it: InsertStatement) + protected abstract fun insert(k: Key, v: Value, it: UpdateBuilder) override suspend fun add(toAdd: Map>) { transaction(database) { @@ -48,6 +49,28 @@ abstract class AbstractExposedKeyValuesRepo( }.forEach { _onNewValue.emit(it) } } + override suspend fun set(toSet: Map>) { + if (toSet.isEmpty()) return + val prepreparedData = toSet.flatMap { (k, vs) -> + vs.map { v -> + k to v + } + } + + transaction(database) { + deleteWhere { + selectByIds(it, toSet.keys.toList()) + } + batchInsert( + prepreparedData, + ) { (k, v) -> + insert(k, v, this) + }.map { + it.asKey to it.asObject + } + }.forEach { _onNewValue.emit(it) } + } + override suspend fun remove(toRemove: Map>) { transaction(database) { toRemove.keys.flatMap { k -> diff --git a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedReadKeyValuesRepo.kt b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedReadKeyValuesRepo.kt index 1864ee0581d..95563e43724 100644 --- a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedReadKeyValuesRepo.kt +++ b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/onetomany/AbstractExposedReadKeyValuesRepo.kt @@ -83,8 +83,8 @@ abstract class AbstractExposedReadKeyValuesRepo( } } - override suspend fun getAll(k: Key, reverseLists: Boolean): List = transaction(database) { - val query = if (reverseLists) { + override suspend fun getAll(k: Key, reversed: Boolean): List = transaction(database) { + val query = if (reversed) { selectAll().where { selectById(k) }.orderBy(keyColumn, SortOrder.DESC) } else { selectAll().where { selectById(k) } diff --git a/repos/exposed/src/jvmTest/kotlin/Database.kt b/repos/exposed/src/jvmTest/kotlin/Database.kt new file mode 100644 index 00000000000..6a7c2edfb75 --- /dev/null +++ b/repos/exposed/src/jvmTest/kotlin/Database.kt @@ -0,0 +1,21 @@ +package full + +import com.benasher44.uuid.uuid4 +import org.jetbrains.exposed.sql.Database +import org.jetbrains.exposed.sql.transactions.transactionManager +import org.sqlite.JDBC +import java.io.File +import java.sql.Connection + +fun filename() = "${uuid4()}.local.sql".also { + val file = File(it) + file.createNewFile() + file.deleteOnExit() +} +fun createDatabase(filename: String) = Database.connect( + url = "jdbc:sqlite:$filename", + driver = JDBC::class.qualifiedName!! +).also { + it.transactionManager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE + it.connector().close() +} diff --git a/repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt b/repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt new file mode 100644 index 00000000000..7821a94e587 --- /dev/null +++ b/repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt @@ -0,0 +1,77 @@ +package full + +import CommonCRUDRepoTests +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.CRUDRepo +import dev.inmo.micro_utils.repos.create +import dev.inmo.micro_utils.repos.deleteById +import dev.inmo.micro_utils.repos.exposed.AbstractExposedCRUDRepo +import dev.inmo.micro_utils.repos.exposed.initTable +import korlibs.time.seconds +import kotlinx.coroutines.test.TestResult +import kotlinx.coroutines.test.runTest +import org.jetbrains.exposed.sql.Database +import org.jetbrains.exposed.sql.ISqlExpressionBuilder +import org.jetbrains.exposed.sql.Op +import org.jetbrains.exposed.sql.ResultRow +import org.jetbrains.exposed.sql.statements.InsertStatement +import org.jetbrains.exposed.sql.statements.UpdateBuilder +import java.io.File +import javax.xml.crypto.Data +import kotlin.test.* + +class ExposedCRUDRepoTests : CommonCRUDRepoTests() { + class Repo(override val database: Database) : AbstractExposedCRUDRepo() { + val idColumn = text("_id") + val dataColumn = text("data") + + override val primaryKey: PrimaryKey = PrimaryKey(idColumn) + + override val ResultRow.asId: String + get() = get(idColumn) + override val ResultRow.asObject: CommonCRUDRepoTests.Registered + get() = CommonCRUDRepoTests.Registered( + asId, + get(dataColumn) + ) + override val selectById: ISqlExpressionBuilder.(String) -> Op = { idColumn.eq(it) } + + init { + initTable() + } + + override fun update(id: String?, value: CommonCRUDRepoTests.New, it: UpdateBuilder) { + it[idColumn] = id ?: uuid4().toString() + it[dataColumn] = value.data + } + + override fun InsertStatement.asObject(value: CommonCRUDRepoTests.New): CommonCRUDRepoTests.Registered { + return CommonCRUDRepoTests.Registered( + get(idColumn), + get(dataColumn) + ) + } + } + val filename = filename() + var database: Database? = null + override val repoCreator: suspend () -> CRUDRepo = { Repo(database!!) } + @BeforeTest + fun beforeTest() { + database = createDatabase(filename) + } + @AfterTest + fun afterTest() { + database = null + File(filename).delete() + } + + @Test + override fun creatingWorksProperly(): TestResult { + return super.creatingWorksProperly() + } + + @Test + override fun removingWorksProperly(): TestResult { + return super.removingWorksProperly() + } +} diff --git a/repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt new file mode 100644 index 00000000000..e142511804d --- /dev/null +++ b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt @@ -0,0 +1,67 @@ +package full + +import CommonKeyValueRepoTests +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.exposed.initTable +import dev.inmo.micro_utils.repos.exposed.keyvalue.AbstractExposedKeyValueRepo +import korlibs.time.seconds +import kotlinx.coroutines.test.TestResult +import kotlinx.coroutines.test.runTest +import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.statements.InsertStatement +import org.jetbrains.exposed.sql.statements.UpdateBuilder +import java.io.File +import kotlin.test.* + +class ExposedKeyValueRepoTests : CommonKeyValueRepoTests() { + class Repo(override val database: Database) : AbstractExposedKeyValueRepo(database) { + override val keyColumn = text("_id") + val dataColumn = text("data") + + override val primaryKey: PrimaryKey = PrimaryKey(keyColumn) + + override val ResultRow.asKey: String + get() = get(keyColumn) + override val selectByValue: ISqlExpressionBuilder.(String) -> Op = { dataColumn.eq(it) } + override val ResultRow.asObject: String + get() = get(dataColumn) + override val selectById: ISqlExpressionBuilder.(String) -> Op = { keyColumn.eq(it) } + + init { + initTable() + } + + override fun update(k: String, v: String, it: UpdateBuilder) { + it[keyColumn] = k + it[dataColumn] = v + } + + override fun insertKey(k: String, v: String, it: UpdateBuilder) { + it[keyColumn] = k + } + } + val filename = filename() + var database: Database? = null + @BeforeTest + fun beforeTest() { + database = createDatabase(filename) + } + @AfterTest + fun afterTest() { + database = null + File(filename).delete() + } + + override val repoCreator: suspend () -> KeyValueRepo = { Repo(database!!) } + + @Test + override fun creatingWorksProperly(): TestResult { + return super.creatingWorksProperly() + } + + @Test + override fun unsettingWorksProperly(): TestResult { + return super.unsettingWorksProperly() + } +} diff --git a/repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt new file mode 100644 index 00000000000..43ec7718941 --- /dev/null +++ b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt @@ -0,0 +1,57 @@ +package full + +import CommonKeyValuesRepoTests +import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.exposed.initTable +import dev.inmo.micro_utils.repos.exposed.onetomany.AbstractExposedKeyValuesRepo +import kotlinx.coroutines.test.TestResult +import org.jetbrains.exposed.sql.Database +import org.jetbrains.exposed.sql.ISqlExpressionBuilder +import org.jetbrains.exposed.sql.Op +import org.jetbrains.exposed.sql.ResultRow +import org.jetbrains.exposed.sql.statements.UpdateBuilder +import java.io.File +import kotlin.test.* + +class ExposedKeyValuesRepoTests : CommonKeyValuesRepoTests() { + override val testSequencesSize: Int = 100 + class Repo(override val database: Database) : AbstractExposedKeyValuesRepo(database) { + + override val keyColumn = text("_id") + val dataColumn = text("data") + + override val ResultRow.asKey: String + get() = get(keyColumn) + override val selectByValue: ISqlExpressionBuilder.(String) -> Op = { dataColumn.eq(it) } + override val ResultRow.asObject: String + get() = get(dataColumn) + override val selectById: ISqlExpressionBuilder.(String) -> Op = { keyColumn.eq(it) } + + init { + initTable() + } + + override fun insert(k: String, v: String, it: UpdateBuilder) { + it[keyColumn] = k + it[dataColumn] = v + } + } + val filename = filename() + var database: Database? = null + @BeforeTest + fun beforeTest() { + database = createDatabase(filename) + } + @AfterTest + fun afterTest() { + database = null + File(filename).delete() + } + + override val repoCreator: suspend () -> KeyValuesRepo = { Repo(database!!) } + + @Test + override fun creatingWorksProperly(): TestResult { + super.creatingWorksProperly() + } +} diff --git a/repos/inmemory/build.gradle b/repos/inmemory/build.gradle index 7de5521c228..ec31c5fa1ea 100644 --- a/repos/inmemory/build.gradle +++ b/repos/inmemory/build.gradle @@ -14,5 +14,10 @@ kotlin { api internalProject("micro_utils.coroutines") } } + commonTest { + dependencies { + api project(":micro_utils.repos.common.tests") + } + } } } \ No newline at end of file diff --git a/repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt b/repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt new file mode 100644 index 00000000000..c14d499212d --- /dev/null +++ b/repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt @@ -0,0 +1,31 @@ +package full + +import CommonCRUDRepoTests +import com.benasher44.uuid.uuid4 +import dev.inmo.micro_utils.repos.CRUDRepo +import dev.inmo.micro_utils.repos.MapCRUDRepo +import kotlinx.coroutines.test.TestResult +import kotlin.test.* + +class InMemoryCRUDRepoTests : CommonCRUDRepoTests() { + override val repoCreator: suspend () -> CRUDRepo = { + MapCRUDRepo( + { new, id, old -> + Registered(id, new.data) + } + ) { + val id = uuid4().toString() + id to Registered(id, it.data) + } + } + + @Test + override fun creatingWorksProperly(): TestResult { + return super.creatingWorksProperly() + } + + @Test + override fun removingWorksProperly(): TestResult { + return super.removingWorksProperly() + } +} diff --git a/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt new file mode 100644 index 00000000000..3da9bf755b8 --- /dev/null +++ b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt @@ -0,0 +1,20 @@ +package full + +import CommonKeyValueRepoTests +import dev.inmo.micro_utils.repos.* +import kotlinx.coroutines.test.TestResult +import kotlin.test.* + +class InMemoryKeyValueRepoTests : CommonKeyValueRepoTests() { + override val repoCreator: suspend () -> KeyValueRepo = { MapKeyValueRepo() } + + @Test + override fun creatingWorksProperly(): TestResult { + return super.creatingWorksProperly() + } + + @Test + override fun unsettingWorksProperly(): TestResult { + return super.unsettingWorksProperly() + } +} diff --git a/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt new file mode 100644 index 00000000000..0d943bb713d --- /dev/null +++ b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt @@ -0,0 +1,14 @@ +package full + +import CommonKeyValuesRepoTests +import dev.inmo.micro_utils.repos.* +import kotlinx.coroutines.test.TestResult +import kotlin.test.* + +class InMemoryKeyValuesRepoTests : CommonKeyValuesRepoTests() { + override val repoCreator: suspend () -> KeyValuesRepo = { MapKeyValuesRepo() } + @Test + override fun creatingWorksProperly(): TestResult { + return super.creatingWorksProperly() + } +} diff --git a/settings.gradle b/settings.gradle index 039ae66714a..3c8ea281c61 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,6 +18,7 @@ String[] includes = [ ":language_codes", ":language_codes:generator", ":repos:common", + ":repos:common:tests", ":repos:generator", ":repos:generator:test", ":repos:cache", From 27f5549f5654db7f01b6561467ed15c10660422a Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 9 Aug 2024 21:58:09 +0600 Subject: [PATCH 29/34] improve tests of repos --- .../commonMain/kotlin/CommonCRUDRepoTests.kt | 10 ++- .../kotlin/CommonKeyValueRepoTests.kt | 9 ++- .../kotlin/CommonKeyValuesRepoTests.kt | 5 +- .../src/commonMain/kotlin/CommonRepoTests.kt | 2 +- .../jvmTest/kotlin/ExposedCRUDRepoTests.kt | 33 +++------- .../kotlin/ExposedKeyValueRepoTests.kt | 27 +++----- .../kotlin/ExposedKeyValuesRepoTests.kt | 13 ++-- .../kotlin/InMemoryCRUDRepoTests.kt | 14 +---- .../kotlin/InMemoryKeyValueRepoTests.kt | 17 +---- .../kotlin/InMemoryKeyValuesRepoTests.kt | 11 +--- repos/ktor/common/build.gradle | 1 + .../common/src/jvmTest/kotlin/ComplexData.kt | 2 + .../{CRUDTests.kt => KtorCRUDRepoTests.kt} | 50 +++++++++++++-- .../{KVTests.kt => KtorKeyValueRepoTests.kt} | 43 +++++++++++-- ...{KVsTests.kt => KtorKeyValuesRepoTests.kt} | 63 ++++++++++++++----- .../src/jvmTest/kotlin/KtorRepoTestsHelper.kt | 44 +++++++++++++ .../common/src/jvmTest/kotlin/SimpleData.kt | 2 + 17 files changed, 229 insertions(+), 117 deletions(-) rename repos/ktor/common/src/jvmTest/kotlin/{CRUDTests.kt => KtorCRUDRepoTests.kt} (71%) rename repos/ktor/common/src/jvmTest/kotlin/{KVTests.kt => KtorKeyValueRepoTests.kt} (80%) rename repos/ktor/common/src/jvmTest/kotlin/{KVsTests.kt => KtorKeyValuesRepoTests.kt} (76%) create mode 100644 repos/ktor/common/src/jvmTest/kotlin/KtorRepoTestsHelper.kt diff --git a/repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt b/repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt index d8f21192b3d..b9177691ade 100644 --- a/repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt +++ b/repos/common/tests/src/commonMain/kotlin/CommonCRUDRepoTests.kt @@ -1,21 +1,27 @@ +package dev.inmo.micro_utils.repos.common.tests + import com.benasher44.uuid.uuid4 import dev.inmo.micro_utils.repos.CRUDRepo import dev.inmo.micro_utils.repos.create import dev.inmo.micro_utils.repos.deleteById import korlibs.time.seconds import kotlinx.coroutines.test.runTest +import kotlinx.serialization.Serializable import kotlin.test.* abstract class CommonCRUDRepoTests : CommonRepoTests>() { + @Serializable data class New( val data: String ) + @Serializable data class Registered( val id: String, val data: String ) - open fun creatingWorksProperly() = runTest(timeout = 120.seconds) { + @Test + fun creatingWorksProperly() = runTest(timeout = 120.seconds) { val crudRepo = repoCreator() val testData = (0 until testSequencesSize).map { ("$it-" + uuid4().toString()) @@ -53,7 +59,7 @@ abstract class CommonCRUDRepoTests : CommonRepoTests>() { - open fun creatingWorksProperly() = runTest(timeout = 120.seconds) { + @Test + fun creatingWorksProperly() = runTest(timeout = 120.seconds) { val repo = repoCreator() val testData = (0 until testSequencesSize).associate { ("$it-" + uuid4().toString()) to "$it-" + uuid4().toString() @@ -26,7 +30,8 @@ abstract class CommonKeyValueRepoTests : CommonRepoTests>() { - open fun creatingWorksProperly() = runTest(timeout = 120.seconds) { + @Test + fun creatingWorksProperly() = runTest(timeout = 120.seconds) { val repo = repoCreator() val testData = (0 until testSequencesSize).associate { ("$it-" + uuid4().toString()) to (0 until 1000).map { diff --git a/repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt b/repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt index b774bfdbd61..433b9ddf87e 100644 --- a/repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt +++ b/repos/common/tests/src/commonMain/kotlin/CommonRepoTests.kt @@ -1,4 +1,4 @@ -import dev.inmo.micro_utils.repos.CRUDRepo +package dev.inmo.micro_utils.repos.common.tests abstract class CommonRepoTests { protected open val testSequencesSize = 1000 diff --git a/repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt b/repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt index 7821a94e587..430bbcd0994 100644 --- a/repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt +++ b/repos/exposed/src/jvmTest/kotlin/ExposedCRUDRepoTests.kt @@ -1,15 +1,10 @@ package full -import CommonCRUDRepoTests import com.benasher44.uuid.uuid4 import dev.inmo.micro_utils.repos.CRUDRepo -import dev.inmo.micro_utils.repos.create -import dev.inmo.micro_utils.repos.deleteById +import dev.inmo.micro_utils.repos.common.tests.CommonCRUDRepoTests import dev.inmo.micro_utils.repos.exposed.AbstractExposedCRUDRepo import dev.inmo.micro_utils.repos.exposed.initTable -import korlibs.time.seconds -import kotlinx.coroutines.test.TestResult -import kotlinx.coroutines.test.runTest import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.ISqlExpressionBuilder import org.jetbrains.exposed.sql.Op @@ -17,11 +12,11 @@ import org.jetbrains.exposed.sql.ResultRow import org.jetbrains.exposed.sql.statements.InsertStatement import org.jetbrains.exposed.sql.statements.UpdateBuilder import java.io.File -import javax.xml.crypto.Data -import kotlin.test.* +import kotlin.test.AfterTest +import kotlin.test.BeforeTest class ExposedCRUDRepoTests : CommonCRUDRepoTests() { - class Repo(override val database: Database) : AbstractExposedCRUDRepo() { + class Repo(override val database: Database) : AbstractExposedCRUDRepo() { val idColumn = text("_id") val dataColumn = text("data") @@ -29,8 +24,8 @@ class ExposedCRUDRepoTests : CommonCRUDRepoTests() { override val ResultRow.asId: String get() = get(idColumn) - override val ResultRow.asObject: CommonCRUDRepoTests.Registered - get() = CommonCRUDRepoTests.Registered( + override val ResultRow.asObject: Registered + get() = Registered( asId, get(dataColumn) ) @@ -40,13 +35,13 @@ class ExposedCRUDRepoTests : CommonCRUDRepoTests() { initTable() } - override fun update(id: String?, value: CommonCRUDRepoTests.New, it: UpdateBuilder) { + override fun update(id: String?, value: New, it: UpdateBuilder) { it[idColumn] = id ?: uuid4().toString() it[dataColumn] = value.data } - override fun InsertStatement.asObject(value: CommonCRUDRepoTests.New): CommonCRUDRepoTests.Registered { - return CommonCRUDRepoTests.Registered( + override fun InsertStatement.asObject(value: New): Registered { + return Registered( get(idColumn), get(dataColumn) ) @@ -64,14 +59,4 @@ class ExposedCRUDRepoTests : CommonCRUDRepoTests() { database = null File(filename).delete() } - - @Test - override fun creatingWorksProperly(): TestResult { - return super.creatingWorksProperly() - } - - @Test - override fun removingWorksProperly(): TestResult { - return super.removingWorksProperly() - } } diff --git a/repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt index e142511804d..7c325d90c61 100644 --- a/repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt +++ b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValueRepoTests.kt @@ -1,18 +1,17 @@ package full -import CommonKeyValueRepoTests -import com.benasher44.uuid.uuid4 -import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.KeyValueRepo +import dev.inmo.micro_utils.repos.common.tests.CommonKeyValueRepoTests import dev.inmo.micro_utils.repos.exposed.initTable import dev.inmo.micro_utils.repos.exposed.keyvalue.AbstractExposedKeyValueRepo -import korlibs.time.seconds -import kotlinx.coroutines.test.TestResult -import kotlinx.coroutines.test.runTest -import org.jetbrains.exposed.sql.* -import org.jetbrains.exposed.sql.statements.InsertStatement +import org.jetbrains.exposed.sql.Database +import org.jetbrains.exposed.sql.ISqlExpressionBuilder +import org.jetbrains.exposed.sql.Op +import org.jetbrains.exposed.sql.ResultRow import org.jetbrains.exposed.sql.statements.UpdateBuilder import java.io.File -import kotlin.test.* +import kotlin.test.AfterTest +import kotlin.test.BeforeTest class ExposedKeyValueRepoTests : CommonKeyValueRepoTests() { class Repo(override val database: Database) : AbstractExposedKeyValueRepo(database) { @@ -54,14 +53,4 @@ class ExposedKeyValueRepoTests : CommonKeyValueRepoTests() { } override val repoCreator: suspend () -> KeyValueRepo = { Repo(database!!) } - - @Test - override fun creatingWorksProperly(): TestResult { - return super.creatingWorksProperly() - } - - @Test - override fun unsettingWorksProperly(): TestResult { - return super.unsettingWorksProperly() - } } diff --git a/repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt index 43ec7718941..9bafab6fa5c 100644 --- a/repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt +++ b/repos/exposed/src/jvmTest/kotlin/ExposedKeyValuesRepoTests.kt @@ -1,17 +1,17 @@ package full -import CommonKeyValuesRepoTests -import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.KeyValuesRepo +import dev.inmo.micro_utils.repos.common.tests.CommonKeyValuesRepoTests import dev.inmo.micro_utils.repos.exposed.initTable import dev.inmo.micro_utils.repos.exposed.onetomany.AbstractExposedKeyValuesRepo -import kotlinx.coroutines.test.TestResult import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.ISqlExpressionBuilder import org.jetbrains.exposed.sql.Op import org.jetbrains.exposed.sql.ResultRow import org.jetbrains.exposed.sql.statements.UpdateBuilder import java.io.File -import kotlin.test.* +import kotlin.test.AfterTest +import kotlin.test.BeforeTest class ExposedKeyValuesRepoTests : CommonKeyValuesRepoTests() { override val testSequencesSize: Int = 100 @@ -49,9 +49,4 @@ class ExposedKeyValuesRepoTests : CommonKeyValuesRepoTests() { } override val repoCreator: suspend () -> KeyValuesRepo = { Repo(database!!) } - - @Test - override fun creatingWorksProperly(): TestResult { - super.creatingWorksProperly() - } } diff --git a/repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt b/repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt index c14d499212d..132b57deebb 100644 --- a/repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt +++ b/repos/inmemory/src/commonTest/kotlin/InMemoryCRUDRepoTests.kt @@ -1,11 +1,9 @@ package full -import CommonCRUDRepoTests import com.benasher44.uuid.uuid4 import dev.inmo.micro_utils.repos.CRUDRepo import dev.inmo.micro_utils.repos.MapCRUDRepo -import kotlinx.coroutines.test.TestResult -import kotlin.test.* +import dev.inmo.micro_utils.repos.common.tests.CommonCRUDRepoTests class InMemoryCRUDRepoTests : CommonCRUDRepoTests() { override val repoCreator: suspend () -> CRUDRepo = { @@ -18,14 +16,4 @@ class InMemoryCRUDRepoTests : CommonCRUDRepoTests() { id to Registered(id, it.data) } } - - @Test - override fun creatingWorksProperly(): TestResult { - return super.creatingWorksProperly() - } - - @Test - override fun removingWorksProperly(): TestResult { - return super.removingWorksProperly() - } } diff --git a/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt index 3da9bf755b8..fd0a3b79f82 100644 --- a/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt +++ b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValueRepoTests.kt @@ -1,20 +1,9 @@ package full -import CommonKeyValueRepoTests -import dev.inmo.micro_utils.repos.* -import kotlinx.coroutines.test.TestResult -import kotlin.test.* +import dev.inmo.micro_utils.repos.KeyValueRepo +import dev.inmo.micro_utils.repos.MapKeyValueRepo +import dev.inmo.micro_utils.repos.common.tests.CommonKeyValueRepoTests class InMemoryKeyValueRepoTests : CommonKeyValueRepoTests() { override val repoCreator: suspend () -> KeyValueRepo = { MapKeyValueRepo() } - - @Test - override fun creatingWorksProperly(): TestResult { - return super.creatingWorksProperly() - } - - @Test - override fun unsettingWorksProperly(): TestResult { - return super.unsettingWorksProperly() - } } diff --git a/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt index 0d943bb713d..03bee23d43f 100644 --- a/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt +++ b/repos/inmemory/src/commonTest/kotlin/InMemoryKeyValuesRepoTests.kt @@ -1,14 +1,9 @@ package full -import CommonKeyValuesRepoTests -import dev.inmo.micro_utils.repos.* -import kotlinx.coroutines.test.TestResult -import kotlin.test.* +import dev.inmo.micro_utils.repos.KeyValuesRepo +import dev.inmo.micro_utils.repos.MapKeyValuesRepo +import dev.inmo.micro_utils.repos.common.tests.CommonKeyValuesRepoTests class InMemoryKeyValuesRepoTests : CommonKeyValuesRepoTests() { override val repoCreator: suspend () -> KeyValuesRepo = { MapKeyValuesRepo() } - @Test - override fun creatingWorksProperly(): TestResult { - return super.creatingWorksProperly() - } } diff --git a/repos/ktor/common/build.gradle b/repos/ktor/common/build.gradle index f66aa9f0f4d..c6755dbf3d2 100644 --- a/repos/ktor/common/build.gradle +++ b/repos/ktor/common/build.gradle @@ -16,6 +16,7 @@ kotlin { jvmTest { dependencies { implementation internalProject("micro_utils.repos.common") + implementation internalProject("micro_utils.repos.common.tests") implementation internalProject("micro_utils.repos.ktor.client") implementation internalProject("micro_utils.repos.ktor.server") implementation internalProject("micro_utils.repos.inmemory") diff --git a/repos/ktor/common/src/jvmTest/kotlin/ComplexData.kt b/repos/ktor/common/src/jvmTest/kotlin/ComplexData.kt index ad202ee46b3..39f870f49c7 100644 --- a/repos/ktor/common/src/jvmTest/kotlin/ComplexData.kt +++ b/repos/ktor/common/src/jvmTest/kotlin/ComplexData.kt @@ -1,3 +1,5 @@ +package dev.inmo.micro_utils.repos.ktor + import com.benasher44.uuid.uuid4 import kotlinx.serialization.Serializable diff --git a/repos/ktor/common/src/jvmTest/kotlin/CRUDTests.kt b/repos/ktor/common/src/jvmTest/kotlin/KtorCRUDRepoTests.kt similarity index 71% rename from repos/ktor/common/src/jvmTest/kotlin/CRUDTests.kt rename to repos/ktor/common/src/jvmTest/kotlin/KtorCRUDRepoTests.kt index 922a72289da..0ed2b98eba3 100644 --- a/repos/ktor/common/src/jvmTest/kotlin/CRUDTests.kt +++ b/repos/ktor/common/src/jvmTest/kotlin/KtorCRUDRepoTests.kt @@ -1,4 +1,8 @@ +package dev.inmo.micro_utils.repos.ktor + +import com.benasher44.uuid.uuid4 import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.common.tests.CommonCRUDRepoTests import dev.inmo.micro_utils.repos.ktor.client.crud.KtorCRUDRepoClient import dev.inmo.micro_utils.repos.ktor.server.crud.configureCRUDRepoRoutes import io.ktor.client.HttpClient @@ -8,17 +12,53 @@ import io.ktor.serialization.kotlinx.KotlinxWebsocketSerializationConverter import io.ktor.serialization.kotlinx.json.json import io.ktor.server.application.install import io.ktor.server.cio.CIO +import io.ktor.server.engine.* import io.ktor.server.plugins.contentnegotiation.ContentNegotiation import io.ktor.server.routing.routing import io.ktor.server.websocket.WebSockets -import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestResult import kotlinx.coroutines.test.runTest import kotlinx.serialization.json.Json +import kotlin.test.AfterTest +import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals -class CRUDTests { - @OptIn(ExperimentalCoroutinesApi::class) +class KtorCRUDRepoTests : CommonCRUDRepoTests() { + private var engine: ApplicationEngine? = null + + @BeforeTest + fun beforeTest() { + engine = KtorRepoTestsHelper.beforeTest { + configureCRUDRepoRoutes( + MapCRUDRepo( + { new, id, old -> + Registered(id, new.data) + } + ) { + val id = uuid4().toString() + id to Registered(id, it.data) + } + ) { + it + } + } + } + @AfterTest + fun afterTest() { + engine ?.let(KtorRepoTestsHelper::afterTest) + } + + override val repoCreator: suspend () -> CRUDRepo = { + KtorCRUDRepoClient( + "http://127.0.0.1:23456", + KtorRepoTestsHelper.client(), + ContentType.Application.Json + ) { + it + } + } + @Test fun testCRUDFunctions() { runTest { @@ -33,7 +73,7 @@ class CRUDTests { } val server = io.ktor.server.engine.embeddedServer( CIO, - 23456, + 34567, "127.0.0.1" ) { install(ContentNegotiation) { @@ -60,7 +100,7 @@ class CRUDTests { } } val crudClient = KtorCRUDRepoClient( - "http://127.0.0.1:23456", + "http://127.0.0.1:34567", client, ContentType.Application.Json ) { diff --git a/repos/ktor/common/src/jvmTest/kotlin/KVTests.kt b/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValueRepoTests.kt similarity index 80% rename from repos/ktor/common/src/jvmTest/kotlin/KVTests.kt rename to repos/ktor/common/src/jvmTest/kotlin/KtorKeyValueRepoTests.kt index 2a0df3bff7f..80942cba6a8 100644 --- a/repos/ktor/common/src/jvmTest/kotlin/KVTests.kt +++ b/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValueRepoTests.kt @@ -1,8 +1,13 @@ +package dev.inmo.micro_utils.repos.ktor + import dev.inmo.micro_utils.pagination.firstPageWithOneElementPagination import dev.inmo.micro_utils.pagination.utils.getAllWithNextPaging import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.common.tests.CommonKeyValueRepoTests import dev.inmo.micro_utils.repos.ktor.client.key.value.KtorKeyValueRepoClient +import dev.inmo.micro_utils.repos.ktor.client.key.values.KtorKeyValuesRepoClient import dev.inmo.micro_utils.repos.ktor.server.key.value.configureKeyValueRepoRoutes +import dev.inmo.micro_utils.repos.ktor.server.key.values.configureKeyValuesRepoRoutes import io.ktor.client.HttpClient import io.ktor.client.plugins.logging.Logging import io.ktor.http.ContentType @@ -10,17 +15,47 @@ import io.ktor.serialization.kotlinx.KotlinxWebsocketSerializationConverter import io.ktor.serialization.kotlinx.json.json import io.ktor.server.application.install import io.ktor.server.cio.CIO +import io.ktor.server.engine.* import io.ktor.server.plugins.contentnegotiation.ContentNegotiation import io.ktor.server.routing.routing import io.ktor.server.websocket.WebSockets import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestResult import kotlinx.coroutines.test.runTest import kotlinx.serialization.builtins.serializer import kotlinx.serialization.json.Json import kotlin.test.* -class KVTests { - @OptIn(ExperimentalCoroutinesApi::class) +class KtorKeyValueRepoTests : CommonKeyValueRepoTests() { + private var engine: ApplicationEngine? = null + + override val repoCreator: suspend () -> KeyValueRepo = { + KtorKeyValueRepoClient( + "http://127.0.0.1:23456", + KtorRepoTestsHelper.client(), + ContentType.Application.Json, + String.serializer(), + String.serializer(), + Json + ) + } + + @BeforeTest + fun beforeTest() { + engine = KtorRepoTestsHelper.beforeTest { + configureKeyValueRepoRoutes( + MapKeyValueRepo(), + String.serializer(), + String.serializer(), + Json + ) + } + } + @AfterTest + fun afterTest() { + engine ?.let(KtorRepoTestsHelper::afterTest) + } + @Test fun testKVFunctions() { runTest { @@ -28,7 +63,7 @@ class KVTests { val repo = MapKeyValueRepo(map) val server = io.ktor.server.engine.embeddedServer( CIO, - 23456, + 34567, "127.0.0.1" ) { install(ContentNegotiation) { @@ -56,7 +91,7 @@ class KVTests { } } val crudClient = KtorKeyValueRepoClient( - "http://127.0.0.1:23456", + "http://127.0.0.1:34567", client, ContentType.Application.Json, Int.serializer(), diff --git a/repos/ktor/common/src/jvmTest/kotlin/KVsTests.kt b/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValuesRepoTests.kt similarity index 76% rename from repos/ktor/common/src/jvmTest/kotlin/KVsTests.kt rename to repos/ktor/common/src/jvmTest/kotlin/KtorKeyValuesRepoTests.kt index de3ff95484a..a5f7214fafa 100644 --- a/repos/ktor/common/src/jvmTest/kotlin/KVsTests.kt +++ b/repos/ktor/common/src/jvmTest/kotlin/KtorKeyValuesRepoTests.kt @@ -1,26 +1,59 @@ +package dev.inmo.micro_utils.repos.ktor + import dev.inmo.micro_utils.pagination.firstPageWithOneElementPagination import dev.inmo.micro_utils.pagination.utils.getAllWithNextPaging import dev.inmo.micro_utils.repos.* +import dev.inmo.micro_utils.repos.common.tests.CommonKeyValuesRepoTests import dev.inmo.micro_utils.repos.ktor.client.key.values.KtorKeyValuesRepoClient import dev.inmo.micro_utils.repos.ktor.server.key.values.configureKeyValuesRepoRoutes -import io.ktor.client.HttpClient -import io.ktor.client.plugins.logging.Logging +import io.ktor.client.* +import io.ktor.client.plugins.logging.* import io.ktor.http.ContentType -import io.ktor.serialization.kotlinx.KotlinxWebsocketSerializationConverter -import io.ktor.serialization.kotlinx.json.json -import io.ktor.server.application.install -import io.ktor.server.cio.CIO -import io.ktor.server.plugins.contentnegotiation.ContentNegotiation -import io.ktor.server.routing.routing -import io.ktor.server.websocket.WebSockets -import kotlinx.coroutines.ExperimentalCoroutinesApi +import io.ktor.serialization.kotlinx.* +import io.ktor.serialization.kotlinx.json.* +import io.ktor.server.application.* +import io.ktor.server.cio.* +import io.ktor.server.engine.* +import io.ktor.server.plugins.contentnegotiation.* +import io.ktor.server.routing.* +import io.ktor.server.websocket.* import kotlinx.coroutines.test.runTest import kotlinx.serialization.builtins.serializer import kotlinx.serialization.json.Json import kotlin.test.* -class KVsTests { - @OptIn(ExperimentalCoroutinesApi::class) +class KtorKeyValuesRepoTests : CommonKeyValuesRepoTests() { + private var engine: ApplicationEngine? = null + override val testSequencesSize: Int + get() = 100 + + override val repoCreator: suspend () -> KeyValuesRepo = { + KtorKeyValuesRepoClient( + "http://127.0.0.1:23456", + KtorRepoTestsHelper.client(), + ContentType.Application.Json, + String.serializer(), + String.serializer(), + Json + ) + } + + @BeforeTest + fun beforeTest() { + engine = KtorRepoTestsHelper.beforeTest { + configureKeyValuesRepoRoutes( + MapKeyValuesRepo(), + String.serializer(), + String.serializer(), + Json + ) + } + } + @AfterTest + fun afterTest() { + engine ?.let(KtorRepoTestsHelper::afterTest) + } + @Test fun testKVsFunctions() { runTest { @@ -28,7 +61,7 @@ class KVsTests { val repo = MapKeyValuesRepo(map) val server = io.ktor.server.engine.embeddedServer( CIO, - 23456, + 34567, "127.0.0.1" ) { install(ContentNegotiation) { @@ -42,7 +75,7 @@ class KVsTests { repo, Int.serializer(), ComplexData.serializer(), - Json {} + Json ) } }.start(false) @@ -56,7 +89,7 @@ class KVsTests { } } val crudClient = KtorKeyValuesRepoClient( - "http://127.0.0.1:23456", + "http://127.0.0.1:34567", client, ContentType.Application.Json, Int.serializer(), diff --git a/repos/ktor/common/src/jvmTest/kotlin/KtorRepoTestsHelper.kt b/repos/ktor/common/src/jvmTest/kotlin/KtorRepoTestsHelper.kt new file mode 100644 index 00000000000..d50cd7fca5d --- /dev/null +++ b/repos/ktor/common/src/jvmTest/kotlin/KtorRepoTestsHelper.kt @@ -0,0 +1,44 @@ +package dev.inmo.micro_utils.repos.ktor + +import io.ktor.client.* +import io.ktor.client.plugins.logging.* +import io.ktor.serialization.kotlinx.* +import io.ktor.serialization.kotlinx.json.* +import io.ktor.server.application.* +import io.ktor.server.cio.* +import io.ktor.server.engine.* +import io.ktor.server.plugins.contentnegotiation.* +import io.ktor.server.routing.* +import io.ktor.server.websocket.* +import kotlinx.serialization.json.Json + +object KtorRepoTestsHelper { + fun beforeTest(routingConfigurator: Routing.() -> Unit): ApplicationEngine { + return embeddedServer( + CIO, + 23456, + "127.0.0.1" + ) { + install(ContentNegotiation) { + json() + } + install(WebSockets) { + contentConverter = KotlinxWebsocketSerializationConverter(Json) + } + routing(routingConfigurator) + }.start(false) + } + fun afterTest(engine: ApplicationEngine) { + engine.stop() + } + fun client(): HttpClient = HttpClient { + install(io.ktor.client.plugins.contentnegotiation.ContentNegotiation) { + json() + } + install(Logging) + install(io.ktor.client.plugins.websocket.WebSockets) { + contentConverter = KotlinxWebsocketSerializationConverter(Json) + } + } + +} diff --git a/repos/ktor/common/src/jvmTest/kotlin/SimpleData.kt b/repos/ktor/common/src/jvmTest/kotlin/SimpleData.kt index a078cfe0cf1..6ea7697f9ab 100644 --- a/repos/ktor/common/src/jvmTest/kotlin/SimpleData.kt +++ b/repos/ktor/common/src/jvmTest/kotlin/SimpleData.kt @@ -1,3 +1,5 @@ +package dev.inmo.micro_utils.repos.ktor + import com.benasher44.uuid.uuid4 import kotlinx.serialization.Serializable From 42bf3cd4e380a4a205b73c29f759ecc7d9e64850 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 9 Aug 2024 22:21:53 +0600 Subject: [PATCH 30/34] update kotlin-poet --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 77581e5a842..a00c41c62c7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ koin = "3.5.6" okio = "3.9.0" ksp = "2.0.10-1.0.24" -kotlin-poet = "1.18.0" +kotlin-poet = "1.18.1" versions = "0.51.0" From f1ddbea06ed508ec02c7e4520003eff6ba852a35 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 9 Aug 2024 23:06:50 +0600 Subject: [PATCH 31/34] update android version --- .../kotlin/dev/inmo/micro_utils/common/DiffUtils.kt | 2 +- gradle/libs.versions.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt index f4c8008223d..9c173deb931 100644 --- a/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt +++ b/common/src/commonMain/kotlin/dev/inmo/micro_utils/common/DiffUtils.kt @@ -8,7 +8,7 @@ private inline fun getObject( additional: MutableList, iterator: Iterator ): T? = when { - additional.isNotEmpty() -> additional.removeFirst() + additional.isNotEmpty() -> additional.removeAt(0) iterator.hasNext() -> iterator.next() else -> null } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a00c41c62c7..b6b2f5ea393 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -40,8 +40,8 @@ android-test = "1.2.1" android-compose-material3 = "1.2.1" android-props-minSdk = "21" -android-props-compileSdk = "34" -android-props-buildTools = "34.0.0" +android-props-compileSdk = "35" +android-props-buildTools = "35.0.0" [libraries] From afd0c9784fa8b19add094db4c5223ad3549a606d Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 11 Aug 2024 12:41:30 +0600 Subject: [PATCH 32/34] Update libs.versions.toml --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b6b2f5ea393..05da6f4b6b2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ kt = "2.0.10" kt-serialization = "1.7.1" kt-coroutines = "1.8.1" -kslog = "1.3.4" +kslog = "1.3.5" jb-compose = "1.7.0-alpha02" jb-exposed = "0.53.0" From c75a9c0f617d49fbbfa5ee8369e6ef5fa086b852 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 11 Aug 2024 16:43:51 +0600 Subject: [PATCH 33/34] update dependencies --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6a1a2bb924..2cf9e268b6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ ## 0.22.0 +**THIS UPDATE CONTAINS BREAKING CHANGES ACCORDING TO UPDATE UP TO KOTLIN 2.0** + +* `Versions`: + * `Kotlin`: `1.9.23` -> `2.0.10` + * `Serialization`: `1.6.3` -> `1.7.1` + * `KSLog`: `1.3.4` -> `1.3.5` + * `Compose`: `1.6.2` -> `1.7.0-alpha02` + * `Exposed`: `0.50.1` -> `0.53.0` + * `AndroidAppCompat`: `1.6.1` -> `1.7.0` + * `AndroidFragment`: `1.7.1` -> `1.8.2` + ## 0.21.6 * `KSP`: From 7feac213f6d661893f5ae8ef238f021d6d61523a Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 11 Aug 2024 16:51:09 +0600 Subject: [PATCH 34/34] update android code version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index faf44e685ed..caaa7fba70f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,4 +16,4 @@ crypto_js_version=4.1.1 group=dev.inmo version=0.22.0 -android_code_version=265 +android_code_version=266