chore: Replace deprecated usages with Locale, LocalResources, Bitmap and toColorInt (#1316)
* Replace deprecated usages with Locale, LocalResources, Bitmap and toColorInt; remove FlagKit class * remember(resources)
This commit is contained in:
parent
b648afb889
commit
6b15d76be6
9 changed files with 82 additions and 381 deletions
|
|
@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.util.fastAny
|
||||
import androidx.paging.LoadState
|
||||
|
|
@ -116,11 +116,10 @@ internal fun BrowseSourceComfortableGridItem(
|
|||
coverBadgeEnd = {
|
||||
if (metadata is MangaDexSearchMetadata) {
|
||||
metadata.followStatus?.let { followStatus ->
|
||||
val text = LocalContext.current
|
||||
.resources
|
||||
.let {
|
||||
remember {
|
||||
it.getStringArray(R.array.md_follows_options)
|
||||
val text = LocalResources.current
|
||||
.let { resources ->
|
||||
remember(resources, followStatus) {
|
||||
resources.getStringArray(R.array.md_follows_options)
|
||||
.getOrNull(followStatus)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.util.fastAny
|
||||
import androidx.paging.LoadState
|
||||
|
|
@ -111,11 +111,10 @@ internal fun BrowseSourceCompactGridItem(
|
|||
coverBadgeEnd = {
|
||||
if (metadata is MangaDexSearchMetadata) {
|
||||
metadata.followStatus?.let { followStatus ->
|
||||
val text = LocalContext.current
|
||||
.resources
|
||||
.let {
|
||||
remember {
|
||||
it.getStringArray(R.array.md_follows_options)
|
||||
val text = LocalResources.current
|
||||
.let { resources ->
|
||||
remember(resources, followStatus) {
|
||||
resources.getStringArray(R.array.md_follows_options)
|
||||
.getOrNull(followStatus)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.util.fastAny
|
||||
import androidx.paging.LoadState
|
||||
|
|
@ -102,11 +102,10 @@ internal fun BrowseSourceListItem(
|
|||
// SY -->
|
||||
if (metadata is MangaDexSearchMetadata) {
|
||||
metadata.followStatus?.let { followStatus ->
|
||||
val text = LocalContext.current
|
||||
.resources
|
||||
.let {
|
||||
remember {
|
||||
it.getStringArray(R.array.md_follows_options)
|
||||
val text = LocalResources.current
|
||||
.let { resources ->
|
||||
remember(resources, followStatus) {
|
||||
resources.getStringArray(R.array.md_follows_options)
|
||||
.getOrNull(followStatus)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.viewinterop.AndroidView
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import androidx.core.view.updatePadding
|
||||
import coil3.asDrawable
|
||||
import coil3.imageLoader
|
||||
|
|
@ -211,12 +212,9 @@ fun MangaCoverDialog(
|
|||
|
||||
// Copy bitmap in case it came from memory cache
|
||||
// Because SSIV needs to thoroughly read the image
|
||||
val copy = (drawable as? BitmapDrawable)?.let {
|
||||
BitmapDrawable(
|
||||
view.context.resources,
|
||||
it.bitmap.copy(Bitmap.Config.HARDWARE, false),
|
||||
)
|
||||
} ?: drawable
|
||||
val copy = (drawable as? BitmapDrawable)?.bitmap?.copy(Bitmap.Config.HARDWARE, false)
|
||||
?.toDrawable(view.context.resources)
|
||||
?: drawable
|
||||
view.setImage(copy, ReaderPageImageView.Config(zoomDuration = 500))
|
||||
}
|
||||
.build()
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
|||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.runtime.toMutableStateList
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import androidx.core.content.ContextCompat
|
||||
|
|
@ -103,6 +104,7 @@ import uy.kohesive.injekt.api.get
|
|||
import java.io.File
|
||||
|
||||
object SettingsAdvancedScreen : SearchableSettings {
|
||||
@Suppress("unused")
|
||||
private fun readResolve(): Any = SettingsAdvancedScreen
|
||||
|
||||
@ReadOnlyComposable
|
||||
|
|
@ -210,7 +212,7 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
}
|
||||
context.startActivity(intent)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
} catch (_: ActivityNotFoundException) {
|
||||
context.toast(MR.strings.battery_optimization_setting_activity_not_found)
|
||||
}
|
||||
} else {
|
||||
|
|
@ -527,8 +529,8 @@ object SettingsAdvancedScreen : SearchableSettings {
|
|||
onDismissRequest: () -> Unit,
|
||||
onCleanupDownloads: (removeRead: Boolean, removeNonFavorite: Boolean) -> Unit,
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val options = remember { context.resources.getStringArray(R.array.clean_up_downloads).toList() }
|
||||
val resources = LocalResources.current
|
||||
val options = remember(resources) { resources.getStringArray(R.array.clean_up_downloads).toList() }
|
||||
val selection = remember {
|
||||
options.toMutableStateList()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import androidx.compose.runtime.toMutableStateList
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.unit.dp
|
||||
import eu.kanade.domain.source.service.SourcePreferences
|
||||
import eu.kanade.domain.track.service.TrackPreferences
|
||||
|
|
@ -55,6 +56,7 @@ import uy.kohesive.injekt.Injekt
|
|||
import uy.kohesive.injekt.api.get
|
||||
|
||||
object SettingsMangadexScreen : SearchableSettings {
|
||||
@Suppress("unused")
|
||||
private fun readResolve(): Any = SettingsMangadexScreen
|
||||
|
||||
@ReadOnlyComposable
|
||||
|
|
@ -193,9 +195,9 @@ object SettingsMangadexScreen : SearchableSettings {
|
|||
onDismissRequest: () -> Unit,
|
||||
onSelectionConfirmed: (List<String>) -> Unit,
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val items = remember {
|
||||
context.resources.getStringArray(R.array.md_follows_options)
|
||||
val resources = LocalResources.current
|
||||
val items = remember(resources) {
|
||||
resources.getStringArray(R.array.md_follows_options)
|
||||
.drop(1)
|
||||
}
|
||||
val selection = remember {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
package exh.util
|
||||
|
||||
import android.graphics.Color
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.FlowRow
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.core.graphics.toColorInt
|
||||
import exh.metadata.metadata.base.RaisedTag
|
||||
import exh.source.EH_SOURCE_ID
|
||||
import exh.source.EXH_SOURCE_ID
|
||||
|
|
@ -108,40 +108,40 @@ object SourceTagsUtil {
|
|||
MISC_COLOR("#f36594"),
|
||||
;
|
||||
|
||||
constructor(color: String) : this(Color.parseColor(color))
|
||||
constructor(color: String) : this(color.toColorInt())
|
||||
}
|
||||
|
||||
@ColorInt fun genreTextColor(genre: GenreColor): Int {
|
||||
return when (genre) {
|
||||
GenreColor.DOUJINSHI_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.MANGA_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.ARTIST_CG_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.GAME_CG_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.WESTERN_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.NON_H_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.IMAGE_SET_COLOR -> Color.parseColor("#FFFFFF")
|
||||
GenreColor.COSPLAY_COLOR -> Color.parseColor("#FFFFFF")
|
||||
GenreColor.ASIAN_PORN_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.MISC_COLOR -> Color.parseColor("#000000")
|
||||
GenreColor.DOUJINSHI_COLOR -> "#000000".toColorInt()
|
||||
GenreColor.MANGA_COLOR -> "#000000".toColorInt()
|
||||
GenreColor.ARTIST_CG_COLOR -> "#000000".toColorInt()
|
||||
GenreColor.GAME_CG_COLOR -> "#000000".toColorInt()
|
||||
GenreColor.WESTERN_COLOR -> "#000000".toColorInt()
|
||||
GenreColor.NON_H_COLOR -> "#000000".toColorInt()
|
||||
GenreColor.IMAGE_SET_COLOR -> "#FFFFFF".toColorInt()
|
||||
GenreColor.COSPLAY_COLOR -> "#FFFFFF".toColorInt()
|
||||
GenreColor.ASIAN_PORN_COLOR -> "#000000".toColorInt()
|
||||
GenreColor.MISC_COLOR -> "#000000".toColorInt()
|
||||
}
|
||||
}
|
||||
|
||||
fun getLocaleSourceUtil(language: String?) = when (language) {
|
||||
"english", "eng" -> Locale("en")
|
||||
"japanese" -> Locale("ja")
|
||||
"chinese" -> Locale("zh")
|
||||
"spanish" -> Locale("es")
|
||||
"korean" -> Locale("ko")
|
||||
"russian" -> Locale("ru")
|
||||
"french" -> Locale("fr")
|
||||
"portuguese" -> Locale("pt")
|
||||
"thai" -> Locale("th")
|
||||
"german" -> Locale("de")
|
||||
"italian" -> Locale("it")
|
||||
"vietnamese" -> Locale("vi")
|
||||
"polish" -> Locale("pl")
|
||||
"hungarian" -> Locale("hu")
|
||||
"dutch" -> Locale("nl")
|
||||
"english", "eng" -> Locale.forLanguageTag("en")
|
||||
"japanese" -> Locale.forLanguageTag("ja")
|
||||
"chinese" -> Locale.forLanguageTag("zh")
|
||||
"spanish" -> Locale.forLanguageTag("es")
|
||||
"korean" -> Locale.forLanguageTag("ko")
|
||||
"russian" -> Locale.forLanguageTag("ru")
|
||||
"french" -> Locale.forLanguageTag("fr")
|
||||
"portuguese" -> Locale.forLanguageTag("pt")
|
||||
"thai" -> Locale.forLanguageTag("th")
|
||||
"german" -> Locale.forLanguageTag("de")
|
||||
"italian" -> Locale.forLanguageTag("it")
|
||||
"vietnamese" -> Locale.forLanguageTag("vi")
|
||||
"polish" -> Locale.forLanguageTag("pl")
|
||||
"hungarian" -> Locale.forLanguageTag("hu")
|
||||
"dutch" -> Locale.forLanguageTag("nl")
|
||||
else -> null
|
||||
}
|
||||
|
||||
|
|
@ -154,21 +154,21 @@ object SourceTagsUtil {
|
|||
@Composable
|
||||
private fun LanguageFlagPreview() {
|
||||
val locales = listOf(
|
||||
Locale("en"),
|
||||
Locale("ja"),
|
||||
Locale("zh"),
|
||||
Locale("es"),
|
||||
Locale("ko"),
|
||||
Locale("ru"),
|
||||
Locale("fr"),
|
||||
Locale("pt"),
|
||||
Locale("th"),
|
||||
Locale("de"),
|
||||
Locale("it"),
|
||||
Locale("vi"),
|
||||
Locale("pl"),
|
||||
Locale("hu"),
|
||||
Locale("nl"),
|
||||
Locale.forLanguageTag("en"),
|
||||
Locale.forLanguageTag("ja"),
|
||||
Locale.forLanguageTag("zh"),
|
||||
Locale.forLanguageTag("es"),
|
||||
Locale.forLanguageTag("ko"),
|
||||
Locale.forLanguageTag("ru"),
|
||||
Locale.forLanguageTag("fr"),
|
||||
Locale.forLanguageTag("pt"),
|
||||
Locale.forLanguageTag("th"),
|
||||
Locale.forLanguageTag("de"),
|
||||
Locale.forLanguageTag("it"),
|
||||
Locale.forLanguageTag("vi"),
|
||||
Locale.forLanguageTag("pl"),
|
||||
Locale.forLanguageTag("hu"),
|
||||
Locale.forLanguageTag("nl"),
|
||||
)
|
||||
Column {
|
||||
FlowRow {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import android.graphics.Canvas
|
|||
import android.graphics.Color
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.os.Build
|
||||
|
|
@ -19,6 +18,7 @@ import androidx.core.graphics.alpha
|
|||
import androidx.core.graphics.applyCanvas
|
||||
import androidx.core.graphics.blue
|
||||
import androidx.core.graphics.createBitmap
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import androidx.core.graphics.get
|
||||
import androidx.core.graphics.green
|
||||
import androidx.core.graphics.red
|
||||
|
|
@ -66,7 +66,7 @@ object ImageUtil {
|
|||
Format.Webp -> ImageType.WEBP
|
||||
else -> null
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
|
@ -88,7 +88,7 @@ object ImageUtil {
|
|||
Format.Heif -> type.isAnimated && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
|
||||
else -> false
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
} catch (_: Exception) {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
|
@ -386,9 +386,9 @@ object ImageUtil {
|
|||
decoder?.recycle()
|
||||
|
||||
val whiteColor = Color.WHITE
|
||||
if (image == null) return ColorDrawable(whiteColor)
|
||||
if (image == null) return whiteColor.toDrawable()
|
||||
if (image.width < 50 || image.height < 50) {
|
||||
return ColorDrawable(whiteColor)
|
||||
return whiteColor.toDrawable()
|
||||
}
|
||||
|
||||
val top = 5
|
||||
|
|
@ -429,7 +429,7 @@ object ImageUtil {
|
|||
!color.isWhite() && color.isCloseTo(other)
|
||||
}
|
||||
if (isNotWhiteAndCloseTo.all { it }) {
|
||||
return ColorDrawable(topLeftPixel)
|
||||
return topLeftPixel.toDrawable()
|
||||
}
|
||||
|
||||
val cornerPixels = listOf(topLeftPixel, topRightPixel, botLeftPixel, botRightPixel)
|
||||
|
|
@ -544,8 +544,8 @@ object ImageUtil {
|
|||
val isLandscape = context.resources.configuration?.orientation == Configuration.ORIENTATION_LANDSCAPE
|
||||
if (isLandscape) {
|
||||
return when {
|
||||
darkBG -> ColorDrawable(blackColor)
|
||||
else -> ColorDrawable(whiteColor)
|
||||
darkBG -> blackColor.toDrawable()
|
||||
else -> whiteColor.toDrawable()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -566,7 +566,7 @@ object ImageUtil {
|
|||
intArrayOf(whiteColor, whiteColor, blackColor, blackColor)
|
||||
}
|
||||
darkBG -> {
|
||||
return ColorDrawable(blackColor)
|
||||
return blackColor.toDrawable()
|
||||
}
|
||||
topIsBlackStreak ||
|
||||
(
|
||||
|
|
@ -585,7 +585,7 @@ object ImageUtil {
|
|||
intArrayOf(whiteColor, whiteColor, blackColor, blackColor)
|
||||
}
|
||||
else -> {
|
||||
return ColorDrawable(whiteColor)
|
||||
return whiteColor.toDrawable()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -772,7 +772,7 @@ object ImageUtil {
|
|||
|
||||
val maxHeight = max(height, height2)
|
||||
|
||||
val result = Bitmap.createBitmap(width + width2 + centerMargin, max(height, height2), Bitmap.Config.ARGB_8888)
|
||||
val result = createBitmap(width + width2 + centerMargin, max(height, height2))
|
||||
val canvas = Canvas(result)
|
||||
canvas.drawColor(background)
|
||||
val upperPart = Rect(
|
||||
|
|
|
|||
|
|
@ -1,298 +0,0 @@
|
|||
package com.murgupluoglu.flagkit
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.graphics.drawable.Drawable
|
||||
import androidx.core.content.ContextCompat
|
||||
import java.util.Locale
|
||||
|
||||
/*
|
||||
* Created by Mustafa Ürgüplüoğlu on 06.01.2021.
|
||||
* Copyright © 2021 Mustafa Ürgüplüoğlu. All rights reserved.
|
||||
*/
|
||||
|
||||
object FlagKit {
|
||||
|
||||
fun getResId(context: Context, flagName: String): Int {
|
||||
return context.resources.getIdentifier(fixResId(flagName), "drawable", context.packageName)
|
||||
}
|
||||
|
||||
fun getDrawable(context: Context, flagName: String): Drawable? {
|
||||
val resourceId =
|
||||
context.resources.getIdentifier(fixResId(flagName), "drawable", context.packageName)
|
||||
return try {
|
||||
ContextCompat.getDrawable(context, resourceId)!!
|
||||
} catch (e: Resources.NotFoundException) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private fun fixResId(resId: String): String {
|
||||
var resourceId = resId.lowercase(Locale.ENGLISH)
|
||||
|
||||
// do is not a valid resource name (reserved Java keyword)
|
||||
if (resourceId == "do") {
|
||||
resourceId = "do_"
|
||||
}
|
||||
return resourceId
|
||||
}
|
||||
|
||||
fun getAllAvailableCodes(): List<String> {
|
||||
return listOf(
|
||||
"ad",
|
||||
"ae",
|
||||
"af",
|
||||
"ag",
|
||||
"ai",
|
||||
"al",
|
||||
"am",
|
||||
"ao",
|
||||
"ar",
|
||||
"as",
|
||||
"at",
|
||||
"au",
|
||||
"aw",
|
||||
"ax",
|
||||
"az",
|
||||
"ba",
|
||||
"bb",
|
||||
"bd",
|
||||
"be",
|
||||
"bf",
|
||||
"bg",
|
||||
"bh",
|
||||
"bi",
|
||||
"bj",
|
||||
"bl",
|
||||
"bm",
|
||||
"bn",
|
||||
"bo",
|
||||
"br",
|
||||
"bs",
|
||||
"bt",
|
||||
"bv",
|
||||
"bw",
|
||||
"by",
|
||||
"bz",
|
||||
"ca",
|
||||
"cc",
|
||||
"cd",
|
||||
"cf",
|
||||
"cg",
|
||||
"ch",
|
||||
"ci",
|
||||
"ck",
|
||||
"cl",
|
||||
"cm",
|
||||
"cn",
|
||||
"co",
|
||||
"cr",
|
||||
"cu",
|
||||
"cv",
|
||||
"cw",
|
||||
"cx",
|
||||
"cy",
|
||||
"cz",
|
||||
"de",
|
||||
"dj",
|
||||
"dk",
|
||||
"dm",
|
||||
"do",
|
||||
"dz",
|
||||
"ec",
|
||||
"ee",
|
||||
"eg",
|
||||
"er",
|
||||
"es",
|
||||
"et",
|
||||
"eu",
|
||||
"fi",
|
||||
"fj",
|
||||
"fk",
|
||||
"fm",
|
||||
"fo",
|
||||
"fr",
|
||||
"ga",
|
||||
"gb",
|
||||
"gb_eng",
|
||||
"gb_nir",
|
||||
"gb_sct",
|
||||
"gb_wls",
|
||||
"gb_zet",
|
||||
"gd",
|
||||
"ge",
|
||||
"gf",
|
||||
"gg",
|
||||
"gh",
|
||||
"gi",
|
||||
"gl",
|
||||
"gm",
|
||||
"gn",
|
||||
"gp",
|
||||
"gq",
|
||||
"gr",
|
||||
"gs",
|
||||
"gt",
|
||||
"gu",
|
||||
"gw",
|
||||
"gy",
|
||||
"hk",
|
||||
"hm",
|
||||
"hn",
|
||||
"hr",
|
||||
"ht",
|
||||
"hu",
|
||||
"id",
|
||||
"ie",
|
||||
"il",
|
||||
"im",
|
||||
"in",
|
||||
"io",
|
||||
"iq",
|
||||
"ir",
|
||||
"is",
|
||||
"it",
|
||||
"je",
|
||||
"jm",
|
||||
"jo",
|
||||
"jp",
|
||||
"ke",
|
||||
"kg",
|
||||
"kh",
|
||||
"ki",
|
||||
"km",
|
||||
"kn",
|
||||
"kp",
|
||||
"kr",
|
||||
"kw",
|
||||
"ky",
|
||||
"kz",
|
||||
"la",
|
||||
"lb",
|
||||
"lc",
|
||||
"li",
|
||||
"lk",
|
||||
"lr",
|
||||
"ls",
|
||||
"lt",
|
||||
"lu",
|
||||
"lv",
|
||||
"ly",
|
||||
"ma",
|
||||
"mc",
|
||||
"md",
|
||||
"me",
|
||||
"mf",
|
||||
"mg",
|
||||
"mh",
|
||||
"mk",
|
||||
"ml",
|
||||
"mm",
|
||||
"mn",
|
||||
"mo",
|
||||
"mp",
|
||||
"mq",
|
||||
"mr",
|
||||
"ms",
|
||||
"mt",
|
||||
"mu",
|
||||
"mv",
|
||||
"mw",
|
||||
"mx",
|
||||
"my",
|
||||
"mz",
|
||||
"na",
|
||||
"nc",
|
||||
"ne",
|
||||
"nf",
|
||||
"ng",
|
||||
"ni",
|
||||
"nl",
|
||||
"no",
|
||||
"np",
|
||||
"nr",
|
||||
"nu",
|
||||
"nz",
|
||||
"om",
|
||||
"pa",
|
||||
"pe",
|
||||
"pf",
|
||||
"pg",
|
||||
"ph",
|
||||
"pk",
|
||||
"pl",
|
||||
"pm",
|
||||
"pn",
|
||||
"pr",
|
||||
"ps",
|
||||
"pt",
|
||||
"pw",
|
||||
"py",
|
||||
"qa",
|
||||
"re",
|
||||
"ro",
|
||||
"rs",
|
||||
"ru",
|
||||
"rw",
|
||||
"sa",
|
||||
"sb",
|
||||
"sc",
|
||||
"sd",
|
||||
"se",
|
||||
"sg",
|
||||
"sh",
|
||||
"si",
|
||||
"sj",
|
||||
"sk",
|
||||
"sl",
|
||||
"sm",
|
||||
"sn",
|
||||
"so",
|
||||
"sr",
|
||||
"ss",
|
||||
"st",
|
||||
"sv",
|
||||
"sx",
|
||||
"sy",
|
||||
"sz",
|
||||
"tc",
|
||||
"td",
|
||||
"tf",
|
||||
"tg",
|
||||
"th",
|
||||
"tj",
|
||||
"tk",
|
||||
"tl",
|
||||
"tm",
|
||||
"tn",
|
||||
"to",
|
||||
"tr",
|
||||
"tt",
|
||||
"tv",
|
||||
"tw",
|
||||
"tz",
|
||||
"ua",
|
||||
"ug",
|
||||
"um",
|
||||
"us",
|
||||
"us_ca",
|
||||
"uy",
|
||||
"uz",
|
||||
"va",
|
||||
"vc",
|
||||
"ve",
|
||||
"vg",
|
||||
"vi",
|
||||
"vn",
|
||||
"vu",
|
||||
"wf",
|
||||
"ws",
|
||||
"xk",
|
||||
"ye",
|
||||
"yt",
|
||||
"za",
|
||||
"zm",
|
||||
"zw",
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue