package intl

import "sort"

func init() {
	BuiltinLanguages = append(ManuallyLocalizedLanguages, MachineLocalizedLanguages...)
	sort.Strings(BuiltinLanguages)
	for _, lang := range AvailableLanguages {
		AvailableLanguagesMap[lang] = struct{}{}
	}
}

// BuiltinBaseLanguage is the default language. It is english.
// Default templates and translation are written in english.
const BuiltinBaseLanguage = "en"

// BuiltinLanguages are the languages we have localization.
var BuiltinLanguages []string

// ManuallyLocalizedLanguages are the languages we do localization manually.
var ManuallyLocalizedLanguages = []string{
	"en",
	"zh-HK",
	"zh-TW",
}

// MachineLocalizedLanguages are the languages localized by AI.
var MachineLocalizedLanguages = []string{
	"de",
	"el",
	"es",
	"es-419",
	"es-ES",
	"fil",
	"fr",
	"id",
	"it",
	"ja",
	"ko",
	"ms",
	"nl",
	"pl",
	"pt",
	"pt-BR",
	"pt-PT",
	"th",
	"vi",
	"zh-CN",
}

// AvailableLangagesMap is the set of available languages
var AvailableLanguagesMap = map[string]struct{}{}

// AvailableLanguages are the languages we recognize.
var AvailableLanguages = []string{
	"en",
	"af",
	"am",
	"ar",
	"hy",
	"az",
	"eu",
	"be",
	"bn",
	"bg",
	"my",
	"ca",
	"zh-HK",
	"zh-CN",
	"zh-TW",
	"hr",
	"cs",
	"da",
	"nl",
	"et",
	"fil",
	"fi",
	"fr",
	"gl",
	"ka",
	"de",
	"el",
	"hi",
	"hu",
	"is",
	"id",
	"it",
	"ja",
	"kn",
	"km",
	"ko",
	"ky",
	"lo",
	"lv",
	"lt",
	"mk",
	"ms",
	"ml",
	"mr",
	"mn",
	"ne",
	"no",
	"fa",
	"pl",
	"pt-PT",
	"pt-BR",
	"pt",
	"ro",
	"ru",
	"sr",
	"si",
	"sk",
	"sl",
	"es-ES",
	"es-419",
	"es",
	"sw",
	"sv",
	"ta",
	"te",
	"th",
	"tr",
	"uk",
	"vi",
	"zu",
}

// Copied from https://github.com/unicode-org/cldr-json/blob/main/cldr-json/cldr-core/availableLocales.json
// For mapping BCP47 language tag to CLDR language tag.
var CldrLanguages = []string{
	"aa",
	"aa-DJ",
	"aa-ER",
	"ab",
	"af",
	"af-NA",
	"agq",
	"ak",
	"am",
	"an",
	"ann",
	"apc",
	"ar",
	"ar-AE",
	"ar-BH",
	"ar-DJ",
	"ar-DZ",
	"ar-EG",
	"ar-EH",
	"ar-ER",
	"ar-IL",
	"ar-IQ",
	"ar-JO",
	"ar-KM",
	"ar-KW",
	"ar-LB",
	"ar-LY",
	"ar-MA",
	"ar-MR",
	"ar-OM",
	"ar-PS",
	"ar-QA",
	"ar-SA",
	"ar-SD",
	"ar-SO",
	"ar-SS",
	"ar-SY",
	"ar-TD",
	"ar-TN",
	"ar-YE",
	"arn",
	"as",
	"asa",
	"ast",
	"az",
	"az-Arab",
	"az-Arab-IQ",
	"az-Arab-TR",
	"az-Cyrl",
	"az-Latn",
	"ba",
	"bal",
	"bal-Arab",
	"bal-Latn",
	"bas",
	"be",
	"be-tarask",
	"bem",
	"bew",
	"bez",
	"bg",
	"bgc",
	"bgn",
	"bgn-AE",
	"bgn-AF",
	"bgn-IR",
	"bgn-OM",
	"bho",
	"blo",
	"blt",
	"bm",
	"bm-Nkoo",
	"bn",
	"bn-IN",
	"bo",
	"bo-IN",
	"br",
	"brx",
	"bs",
	"bs-Cyrl",
	"bs-Latn",
	"bss",
	"byn",
	"ca",
	"ca-AD",
	"ca-ES-valencia",
	"ca-FR",
	"ca-IT",
	"cad",
	"cch",
	"ccp",
	"ccp-IN",
	"ce",
	"ceb",
	"cgg",
	"cho",
	"chr",
	"cic",
	"ckb",
	"ckb-IR",
	"co",
	"cs",
	"csw",
	"cu",
	"cv",
	"cy",
	"da",
	"da-GL",
	"dav",
	"de",
	"de-AT",
	"de-BE",
	"de-CH",
	"de-IT",
	"de-LI",
	"de-LU",
	"dje",
	"doi",
	"dsb",
	"dua",
	"dv",
	"dyo",
	"dz",
	"ebu",
	"ee",
	"ee-TG",
	"el",
	"el-CY",
	"el-polyton",
	"en",
	"en-001",
	"en-150",
	"en-AE",
	"en-AG",
	"en-AI",
	"en-AS",
	"en-AT",
	"en-AU",
	"en-BB",
	"en-BE",
	"en-BI",
	"en-BM",
	"en-BS",
	"en-BW",
	"en-BZ",
	"en-CA",
	"en-CC",
	"en-CH",
	"en-CK",
	"en-CM",
	"en-CX",
	"en-CY",
	"en-DE",
	"en-DG",
	"en-DK",
	"en-DM",
	"en-Dsrt",
	"en-ER",
	"en-FI",
	"en-FJ",
	"en-FK",
	"en-FM",
	"en-GB",
	"en-GD",
	"en-GG",
	"en-GH",
	"en-GI",
	"en-GM",
	"en-GU",
	"en-GY",
	"en-HK",
	"en-ID",
	"en-IE",
	"en-IL",
	"en-IM",
	"en-IN",
	"en-IO",
	"en-JE",
	"en-JM",
	"en-KE",
	"en-KI",
	"en-KN",
	"en-KY",
	"en-LC",
	"en-LR",
	"en-LS",
	"en-MG",
	"en-MH",
	"en-MO",
	"en-MP",
	"en-MS",
	"en-MT",
	"en-MU",
	"en-MV",
	"en-MW",
	"en-MY",
	"en-NA",
	"en-NF",
	"en-NG",
	"en-NL",
	"en-NR",
	"en-NU",
	"en-NZ",
	"en-PG",
	"en-PH",
	"en-PK",
	"en-PN",
	"en-PR",
	"en-PW",
	"en-RW",
	"en-SB",
	"en-SC",
	"en-SD",
	"en-SE",
	"en-SG",
	"en-SH",
	"en-SI",
	"en-SL",
	"en-SS",
	"en-SX",
	"en-SZ",
	"en-Shaw",
	"en-TC",
	"en-TK",
	"en-TO",
	"en-TT",
	"en-TV",
	"en-TZ",
	"en-UG",
	"en-UM",
	"en-VC",
	"en-VG",
	"en-VI",
	"en-VU",
	"en-WS",
	"en-ZA",
	"en-ZM",
	"en-ZW",
	"eo",
	"es",
	"es-419",
	"es-AR",
	"es-BO",
	"es-BR",
	"es-BZ",
	"es-CL",
	"es-CO",
	"es-CR",
	"es-CU",
	"es-DO",
	"es-EA",
	"es-EC",
	"es-GQ",
	"es-GT",
	"es-HN",
	"es-IC",
	"es-MX",
	"es-NI",
	"es-PA",
	"es-PE",
	"es-PH",
	"es-PR",
	"es-PY",
	"es-SV",
	"es-US",
	"es-UY",
	"es-VE",
	"et",
	"eu",
	"ewo",
	"fa",
	"fa-AF",
	"ff",
	"ff-Adlm",
	"ff-Adlm-BF",
	"ff-Adlm-CM",
	"ff-Adlm-GH",
	"ff-Adlm-GM",
	"ff-Adlm-GW",
	"ff-Adlm-LR",
	"ff-Adlm-MR",
	"ff-Adlm-NE",
	"ff-Adlm-NG",
	"ff-Adlm-SL",
	"ff-Adlm-SN",
	"ff-Latn",
	"ff-Latn-BF",
	"ff-Latn-CM",
	"ff-Latn-GH",
	"ff-Latn-GM",
	"ff-Latn-GN",
	"ff-Latn-GW",
	"ff-Latn-LR",
	"ff-Latn-MR",
	"ff-Latn-NE",
	"ff-Latn-NG",
	"ff-Latn-SL",
	"fi",
	"fil",
	"fo",
	"fo-DK",
	"fr",
	"fr-BE",
	"fr-BF",
	"fr-BI",
	"fr-BJ",
	"fr-BL",
	"fr-CA",
	"fr-CD",
	"fr-CF",
	"fr-CG",
	"fr-CH",
	"fr-CI",
	"fr-CM",
	"fr-DJ",
	"fr-DZ",
	"fr-GA",
	"fr-GF",
	"fr-GN",
	"fr-GP",
	"fr-GQ",
	"fr-HT",
	"fr-KM",
	"fr-LU",
	"fr-MA",
	"fr-MC",
	"fr-MF",
	"fr-MG",
	"fr-ML",
	"fr-MQ",
	"fr-MR",
	"fr-MU",
	"fr-NC",
	"fr-NE",
	"fr-PF",
	"fr-PM",
	"fr-RE",
	"fr-RW",
	"fr-SC",
	"fr-SN",
	"fr-SY",
	"fr-TD",
	"fr-TG",
	"fr-TN",
	"fr-VU",
	"fr-WF",
	"fr-YT",
	"frr",
	"fur",
	"fy",
	"ga",
	"ga-GB",
	"gaa",
	"gd",
	"gez",
	"gez-ER",
	"gl",
	"gn",
	"gsw",
	"gsw-FR",
	"gsw-LI",
	"gu",
	"guz",
	"gv",
	"ha",
	"ha-Arab",
	"ha-Arab-SD",
	"ha-GH",
	"ha-NE",
	"haw",
	"he",
	"hi",
	"hi-Latn",
	"hnj",
	"hnj-Hmnp",
	"hr",
	"hr-BA",
	"hsb",
	"hu",
	"hy",
	"ia",
	"id",
	"ie",
	"ig",
	"ii",
	"io",
	"is",
	"it",
	"it-CH",
	"it-SM",
	"it-VA",
	"iu",
	"iu-Latn",
	"ja",
	"jbo",
	"jgo",
	"jmc",
	"jv",
	"ka",
	"kab",
	"kaj",
	"kam",
	"kcg",
	"kde",
	"kea",
	"ken",
	"kgp",
	"khq",
	"ki",
	"kk",
	"kkj",
	"kl",
	"kln",
	"km",
	"kn",
	"ko",
	"ko-CN",
	"ko-KP",
	"kok",
	"kpe",
	"kpe-GN",
	"ks",
	"ks-Arab",
	"ks-Deva",
	"ksb",
	"ksf",
	"ksh",
	"ku",
	"kw",
	"kxv",
	"kxv-Deva",
	"kxv-Latn",
	"kxv-Orya",
	"kxv-Telu",
	"ky",
	"la",
	"lag",
	"lb",
	"lg",
	"lij",
	"lkt",
	"lmo",
	"ln",
	"ln-AO",
	"ln-CF",
	"ln-CG",
	"lo",
	"lrc",
	"lrc-IQ",
	"lt",
	"lu",
	"luo",
	"luy",
	"lv",
	"mai",
	"mas",
	"mas-TZ",
	"mdf",
	"mer",
	"mfe",
	"mg",
	"mgh",
	"mgo",
	"mi",
	"mic",
	"mk",
	"ml",
	"mn",
	"mn-Mong",
	"mn-Mong-MN",
	"mni",
	"mni-Beng",
	"mni-Mtei",
	"moh",
	"mr",
	"ms",
	"ms-Arab",
	"ms-Arab-BN",
	"ms-BN",
	"ms-ID",
	"ms-SG",
	"mt",
	"mua",
	"mus",
	"my",
	"myv",
	"mzn",
	"naq",
	"nb",
	"nb-SJ",
	"nd",
	"nds",
	"nds-NL",
	"ne",
	"ne-IN",
	"nl",
	"nl-AW",
	"nl-BE",
	"nl-BQ",
	"nl-CW",
	"nl-SR",
	"nl-SX",
	"nmg",
	"nn",
	"nnh",
	"no",
	"nqo",
	"nr",
	"nso",
	"nus",
	"nv",
	"ny",
	"nyn",
	"oc",
	"oc-ES",
	"om",
	"om-KE",
	"or",
	"os",
	"os-RU",
	"osa",
	"pa",
	"pa-Arab",
	"pa-Guru",
	"pap",
	"pap-AW",
	"pcm",
	"pis",
	"pl",
	"prg",
	"ps",
	"ps-PK",
	"pt",
	"pt-AO",
	"pt-CH",
	"pt-CV",
	"pt-GQ",
	"pt-GW",
	"pt-LU",
	"pt-MO",
	"pt-MZ",
	"pt-PT",
	"pt-ST",
	"pt-TL",
	"qu",
	"qu-BO",
	"qu-EC",
	"quc",
	"raj",
	"rhg",
	"rhg-Rohg",
	"rhg-Rohg-BD",
	"rif",
	"rm",
	"rn",
	"ro",
	"ro-MD",
	"rof",
	"ru",
	"ru-BY",
	"ru-KG",
	"ru-KZ",
	"ru-MD",
	"ru-UA",
	"rw",
	"rwk",
	"sa",
	"sah",
	"saq",
	"sat",
	"sat-Deva",
	"sat-Olck",
	"sbp",
	"sc",
	"scn",
	"sd",
	"sd-Arab",
	"sd-Deva",
	"sdh",
	"sdh-IQ",
	"se",
	"se-FI",
	"se-SE",
	"seh",
	"ses",
	"sg",
	"shi",
	"shi-Latn",
	"shi-Tfng",
	"shn",
	"shn-TH",
	"si",
	"sid",
	"sk",
	"skr",
	"sl",
	"sma",
	"sma-NO",
	"smj",
	"smj-NO",
	"smn",
	"sms",
	"sn",
	"so",
	"so-DJ",
	"so-ET",
	"so-KE",
	"sq",
	"sq-MK",
	"sq-XK",
	"sr",
	"sr-Cyrl",
	"sr-Cyrl-BA",
	"sr-Cyrl-ME",
	"sr-Cyrl-XK",
	"sr-Latn",
	"sr-Latn-BA",
	"sr-Latn-ME",
	"sr-Latn-XK",
	"ss",
	"ss-SZ",
	"ssy",
	"st",
	"st-LS",
	"su",
	"su-Latn",
	"sv",
	"sv-AX",
	"sv-FI",
	"sw",
	"sw-CD",
	"sw-KE",
	"sw-UG",
	"syr",
	"syr-SY",
	"szl",
	"ta",
	"ta-LK",
	"ta-MY",
	"ta-SG",
	"te",
	"teo",
	"teo-KE",
	"tg",
	"th",
	"ti",
	"ti-ER",
	"tig",
	"tk",
	"tn",
	"tn-BW",
	"to",
	"tok",
	"tpi",
	"tr",
	"tr-CY",
	"trv",
	"trw",
	"ts",
	"tt",
	"twq",
	"tyv",
	"tzm",
	"ug",
	"uk",
	"und",
	"ur",
	"ur-IN",
	"uz",
	"uz-Arab",
	"uz-Cyrl",
	"uz-Latn",
	"vai",
	"vai-Latn",
	"vai-Vaii",
	"ve",
	"vec",
	"vi",
	"vmw",
	"vo",
	"vun",
	"wa",
	"wae",
	"wal",
	"wbp",
	"wo",
	"xh",
	"xnr",
	"xog",
	"yav",
	"yi",
	"yo",
	"yo-BJ",
	"yrl",
	"yrl-CO",
	"yrl-VE",
	"yue",
	"yue-Hans",
	"yue-Hant",
	"za",
	"zgh",
	"zh",
	"zh-Hans",
	"zh-Hans-HK",
	"zh-Hans-MO",
	"zh-Hans-SG",
	"zh-Hant",
	"zh-Hant-HK",
	"zh-Hant-MO",
	"zu",
}
