From 6d034c1e69d16a730fde41d92263ac8eaec72cfc Mon Sep 17 00:00:00 2001
From: Anu <anulithic@gmail.com>
Date: Sun, 23 Feb 2025 17:48:36 -0800
Subject: [PATCH] Add nationOf() function to translate slave nationality into a
 country name

---
 src/js/utilsSlave.js | 384 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 384 insertions(+)

diff --git a/src/js/utilsSlave.js b/src/js/utilsSlave.js
index ee6c20045c4..9361bed80b4 100644
--- a/src/js/utilsSlave.js
+++ b/src/js/utilsSlave.js
@@ -1394,6 +1394,390 @@ globalThis.moreNational = function(nation) {
 	return country;
 };
 
+/**
+ * Translate nationalities into the common name of the nation
+ * @param {string} nation
+ * @returns {string}
+ */
+globalThis.nationOf = function(nation) {
+	let country;
+	switch (nation) {
+		case "Albanian":
+		case "Algerian":
+		case "American": // could call this one the United States/the USA instead
+		case "Andorran":
+		case "Angolan":
+		case "Antiguan":
+		case "Armenian":
+		case "Aruban":
+		case "Australian":
+		case "Austrian":
+		case "Azerbaijani":
+		case "Bahraini":
+		case "Bangladeshi":
+		case "Bolivian":
+		case "Bosnian": // could call this one Bosnia and Herzegovina instead
+		case "Bulgarian":
+		case "Cambodian":
+		case "Colombian":
+		case "Costa Rican":
+		case "Croatian":
+		case "Cuban":
+		case "Eritrean":
+		case "Estonian":
+		case "Ethiopian":
+		case "French Guianan":
+		case "French Polynesian":
+		case "Gambian":
+		case "Georgian":
+		case "Ghanan":
+		case "Guatemalan":
+		case "Guinean":
+		case "Indian":
+		case "Indonesian":
+		case "Iraqi":
+		case "Israeli":
+		case "Jamaican":
+		case "Kenyan":
+		case "Korean": // I guess the Koreas unified in FC's timeline?
+		case "Kuwaiti":
+		case "Latvian":
+		case "Liberian":
+		case "Libyan":
+		case "Lithuanian":
+		case "Malaysian":
+		case "Mauritanian":
+		case "Micronesian":
+		case "Moldovan":
+		case "Mongolian":
+		case "Namibian":
+		case "New Caledonian":
+		case "Nicaraguan":
+		case "Nigerian":
+		case "Omani":
+		case "Pakistani":
+		case "Papua New Guinean":
+		case "Qatari":
+		case "Romanian":
+		case "Russian":
+		case "Rwandan":
+		case "Saint Lucian":
+		case "Samoan":
+		case "Serbian":
+		case "South African":
+		case "Sri Lankan":
+		case "Syrian":
+		case "Tanzanian":
+		case "Tongan":
+		case "Tunisian":
+		case "Ugandan":
+		case "Venezuelan":
+		case "Yemeni":
+		case "Zambian":
+			country = nation.slice(0, nation.length - 1); // remove last letter - e.g. Albanian to Albania
+			break;
+		case "Belizean":
+		case "Bruneian":
+		case "Burundian":
+		case "Cape Verdean": // or Cabo Verde?
+		case "Chilean":
+		case "Curaçaoan":
+		case "Djiboutian":
+		case "Fijian":
+		case "Greenlandic":
+		case "Haitian":
+		case "Icelandic":
+		case "Malawian":
+		case "Malian":
+		case "Nauruan":
+		case "Niuean":
+		case "Palauan":
+		case "Paraguayan":
+		case "São Toméan":
+		case "Sierra Leonean":
+		case "Singaporean":
+		case "Surinamese":
+		case "Tibetan":
+		case "Tuvaluan":
+		case "Uruguayan":
+		case "Zimbabwean":
+			country = nation.slice(0, nation.length - 2); // remove last two letters - e.g. Belizean to Belize
+			break;
+		case "Belarusian":
+		case "Beninese":
+		case "Bhutanese":
+		case "Brazilian":
+		case "Cameroonian":
+		case "Chadian":
+		case "Ecuadorian":
+		case "Egyptian":
+		case "Gabonese":
+		case "Iranian":
+		case "Japanese":
+		case "Jordanian":
+		case "Luxembourgian":
+		case "Nepalese":
+		case "Nigerien":
+		case "Senegalese":
+		case "South Sudanese":
+		case "Sudanese":
+		case "Taiwanese":
+		case "Vietnamese":
+			country = nation.slice(0, nation.length - 3); // remove last three letters - e.g. Belarusian to Belarus
+			break;
+		case "Panamanian":
+		case "Peruvian":
+		case "Togolese":
+			country = nation.slice(0, nation.length - 4); // remove last four letters - e.g. Panamanian to Panama
+			break;
+		case "Guamanian":
+			country = nation.slice(0, nation.length - 5); // remove last five letters - e.g. Guamanian to Guam - which is the only one, apparently
+			break;
+		case "Argentinian":
+		case "Bermudian":
+		case "Canadian":
+		case "Grenadian":
+		case "Chinese":
+		case "Guyanese":
+		case "Maltese":
+			country = nation.slice(0, nation.length - 3) + 'a'; // replace last three letters with 'a' - e.g. Argentinian to Argentina
+			break;
+		case "Barbadian":
+		case "Comorian":
+			country = nation.slice(0, nation.length - 3) + "os"; // replace last three letters with "os" - e.g. Barbadian to Barbados
+			break;
+		case "Hungarian":
+		case "Italian":
+			country = nation.slice(0, nation.length - 3) + 'y'; // replace last three letters with 'y' - e.g. Hungarian to Hungary
+			break;
+		case "Palestinian":
+		case "Ukrainian":
+			country = nation.slice(0, nation.length - 3) + 'e'; // replace last three letters with 'e' - e.g. Palestinian to Palestine
+			break;
+		case "Kosovan":
+		case "Mexican":
+		case "Montenegrin":
+		case "Moroccan":
+		case "Puerto Rican":
+			country = nation.slice(0, nation.length - 2) + 'o'; // replace last two letters with 'o' - e.g. Kosovan to Kosovo
+			break;
+		case "Afghan":
+		case "Tajik":
+		case "Turkmen":
+		case "Uzbek":
+			country = nation + "istan"; // add "istan" - e.g. Afghan to Afghanistan
+			break;
+		case "Kazakh":
+		case "Kyrgyz":
+			country = nation + "stan"; // add "stan" - e.g. Kazakh to Kazakhstan
+			break;
+		case "Finnish":
+		case "Polish":
+		case "Scottish":
+			country = nation.slice(0, nation.length - 4) + "land"; // replace last four letters with "land" - e.g. Finnish to Finland
+			break;
+		case "Bahamian":
+			country = "the Bahamas";
+			break;
+		case "Belgian":
+			country = "Belgium";
+			break;
+		case "Bissau-Guinean":
+			country = "Guinea-Bissau";
+			break;
+		case "British":
+			country = "Britain"; // the game considers Scots a separate nationality, so we can't use "the UK", but it does still contain Wales, Cornwall, Mann, the Channel islands, etc., so we can't just use "England" either
+			break;
+		case "Burkinabé":
+			country = "Burkina Faso";
+			break;
+		case "Burmese":
+			country = "Myanmar"; // or Burma?
+			break;
+		case "Catalan":
+			country = "Catalonia";
+			break;
+		case "Central African":
+			country = "the Central African Republic";
+			break;
+		case "Congolese":
+			country = jsEither(["the Republic of the Congo", "Congo-Brazzaville"]);
+			break;
+		case "a Cook Islander":
+			country = "the Cook Islands";
+			break;
+		case "Cypriot":
+			country = "Cyprus";
+			break;
+		case "Czech":
+			country = jsEither(["Czechia", "the Czech Republic"]);
+			break;
+		case "Danish":
+			country = "Denmark";
+			break;
+		case "Dominican":
+			country = "The Dominican Republic";
+			break;
+		case "Dominiquais":
+			country = "Dominica";
+			break;
+		case "Dutch":
+			country = "the Netherlands";
+			break;
+		case "East Timorese":
+			country = "Timor-Leste";
+			break;
+		case "Emirati":
+			country = jsEither(["the UAE", "the United Arab Emirates"]);
+			break;
+		case "Equatoguinean":
+			country = "Equatorial Guinea";
+			break;
+		case "Filipina":
+			country = "the Philippines";
+			break;
+		case "French":
+			country = "France";
+			break;
+		case "German":
+			country = "Germany";
+			break;
+		case "Greek":
+			country = "Greece";
+			break;
+		case "Honduran":
+			country = "Honduras";
+			break;
+		case "I-Kiribati":
+			country = "Kiribati";
+			break;
+		case "Irish":
+			country = "Ireland";
+			break;
+		case "Ivorian":
+			country = jsEither(["the Ivory Coast", "Côte d'Ivoire"]);
+			break;
+		case "Kittitian":
+			country = "Saint Kitts and Nevis";
+			break;
+		case "Kurdish":
+			country = "Kurdistan"; // should we say "the Kurdish people" or something instead? Kurdistan is either a vaguely-defined transnational region, or a very tenuously self-governing part of Iraq
+			break;
+		case "Laotian":
+			country = "Laos";
+			break;
+		case "Lebanese":
+			country = "Lebanon";
+			break;
+		case "a Liechtensteiner":
+			country = "Liechtenstein";
+			break;
+		case "Macedonian":
+			country = "North Macedonia"; // south Macedonians are presumably Greek
+			break;
+		case "Malagasy":
+			country = "Madagascar";
+			break;
+		case "Maldivian":
+			country = "the Maldives";
+			break;
+		case "Marshallese":
+			country = "the Marshall Islands";
+			break;
+		case "Mauritian":
+			country = "Mauritius";
+			break;
+		case "Monégasque":
+			country = "Monaco";
+			break;
+		case "Mosotho":
+			country = "Lesotho";
+			break;
+		case "Motswana":
+			country = "Botswana";
+			break;
+		case "Mozambican":
+			country = "Mozambique";
+			break;
+		case "a New Zealander":
+			country = "New Zealand";
+			break;
+		case "Ni-Vanuatu":
+			country = "Vanuatu";
+			break;
+		case "Norwegian":
+			country = "Norway";
+			break;
+		case "Portuguese":
+			country = "Portugal";
+			break;
+		case "Sahrawi":
+			country = "Western Sahara"; // alternately, the Sahrawi (Arab Democratic) Republic
+			break;
+		case "Salvadoran":
+			country = "El Salvador";
+			break;
+		case "Sammarinese":
+			country = "San Marino";
+			break;
+		case "Saudi":
+			country = "Saudi Arabia";
+			break;
+		case "Seychellois":
+			country = "Seychelles";
+			break;
+		case "Slovak":
+			country = "Slovakia";
+			break;
+		case "Slovene":
+			country = "Slovenia";
+			break;
+		case "a Solomon Islander":
+			country = "the Solomon Islands";
+			break;
+		case "Somali":
+			country = "Somalia";
+			break;
+		case "Spanish":
+			country = "Spain";
+			break;
+		case "Swazi":
+			country = "Eswatini";
+			break;
+		case "Swedish":
+			country = "Sweden";
+			break;
+		case "Swiss":
+			country = "Switzerland";
+			break;
+		case "Thai":
+			country = "Thailand";
+			break;
+		case "Trinidadian":
+			country = "Trinidad and Tobago";
+			break;
+		case "Turkish":
+			country = "Turkey"; // or do we want Türkiye?
+			break;
+		case "Vatican":
+			country = "Vatican City";
+			break;
+		case "Vincentian":
+			country = "Saint Vincent and the Grenadines";
+			break;
+		case "Zairian":
+			country = jsEither(["the Democratic Republic of the Congo", "Congo-Kinshasa"]); // or Zaire?
+			break;
+		case "Stateless":
+			country = "no country"; // best we can do, shouldn't ever come up
+			break;
+		default:
+			country = "an unknown country"; // if any new nationalities are ever added, catch them so they can be added
+			break;
+	}
+	return country;
+};
+
 /** Deflate a slave (reset inflation to none)
  * @param {FC.HumanState} slave
  */
-- 
GitLab