Files
n.nakhostin c873635f6f Add Flags Assets and Update Configuration
- Introduced multiple SVG flag assets to the project, enhancing the visual representation of country flags.
- Updated the configuration file to include a new path for the flags assets, ensuring proper access and organization.
- Modified the main application to accommodate the new flags path, improving the overall asset management in the application.
2025-09-09 14:48:02 +03:30

401 lines
9.7 KiB
Go

package assets
import (
"fmt"
"os"
"path/filepath"
"strings"
)
// CountryCodeMapping maps 3-letter country codes to 2-letter ISO codes
var CountryCodeMapping = map[string]string{
"POL": "pl", // Poland
"GRC": "gr", // Greece
"DEU": "de", // Germany
"FRA": "fr", // France
"ITA": "it", // Italy
"ESP": "es", // Spain
"GBR": "gb", // United Kingdom
"NLD": "nl", // Netherlands
"BEL": "be", // Belgium
"AUT": "at", // Austria
"SWE": "se", // Sweden
"DNK": "dk", // Denmark
"FIN": "fi", // Finland
"NOR": "no", // Norway
"IRL": "ie", // Ireland
"PRT": "pt", // Portugal
"CZE": "cz", // Czech Republic
"SVK": "sk", // Slovakia
"HUN": "hu", // Hungary
"ROU": "ro", // Romania
"BGR": "bg", // Bulgaria
"HRV": "hr", // Croatia
"SVN": "si", // Slovenia
"EST": "ee", // Estonia
"LVA": "lv", // Latvia
"LTU": "lt", // Lithuania
"LUX": "lu", // Luxembourg
"MLT": "mt", // Malta
"CYP": "cy", // Cyprus
"USA": "us", // United States
"CAN": "ca", // Canada
"AUS": "au", // Australia
"JPN": "jp", // Japan
"CHN": "cn", // China
"IND": "in", // India
"BRA": "br", // Brazil
"RUS": "ru", // Russia
"TUR": "tr", // Turkey
"UKR": "ua", // Ukraine
"EGY": "eg", // Egypt
"ZAF": "za", // South Africa
"NZL": "nz", // New Zealand
"KOR": "kr", // South Korea
"THA": "th", // Thailand
"SGP": "sg", // Singapore
"MYS": "my", // Malaysia
"IDN": "id", // Indonesia
"PHL": "ph", // Philippines
"VNM": "vn", // Vietnam
"CHL": "cl", // Chile
"ARG": "ar", // Argentina
"MEX": "mx", // Mexico
"PER": "pe", // Peru
"COL": "co", // Colombia
"VEN": "ve", // Venezuela
"ECU": "ec", // Ecuador
"BOL": "bo", // Bolivia
"URY": "uy", // Uruguay
"PRY": "py", // Paraguay
"GUY": "gy", // Guyana
"SUR": "sr", // Suriname
"ISR": "il", // Israel
"SAU": "sa", // Saudi Arabia
"ARE": "ae", // United Arab Emirates
"QAT": "qa", // Qatar
"KWT": "kw", // Kuwait
"BHR": "bh", // Bahrain
"OMN": "om", // Oman
"JOR": "jo", // Jordan
"LBN": "lb", // Lebanon
"SYR": "sy", // Syria
"IRQ": "iq", // Iraq
"IRN": "ir", // Iran
"AFG": "af", // Afghanistan
"PAK": "pk", // Pakistan
"BGD": "bd", // Bangladesh
"LKA": "lk", // Sri Lanka
"MDV": "mv", // Maldives
"BTN": "bt", // Bhutan
"NPL": "np", // Nepal
"MMR": "mm", // Myanmar
"LAO": "la", // Laos
"KHM": "kh", // Cambodia
"BRN": "bn", // Brunei
"TLS": "tl", // East Timor
"PNG": "pg", // Papua New Guinea
"FJI": "fj", // Fiji
"TON": "to", // Tonga
"WSM": "ws", // Samoa
"VUT": "vu", // Vanuatu
"SLB": "sb", // Solomon Islands
"KIR": "ki", // Kiribati
"TUV": "tv", // Tuvalu
"NRU": "nr", // Nauru
"PLW": "pw", // Palau
"FSM": "fm", // Federated States of Micronesia
"MHL": "mh", // Marshall Islands
"COK": "ck", // Cook Islands
"NIU": "nu", // Niue
"TKL": "tk", // Tokelau
"WLF": "wf", // Wallis and Futuna
"ASM": "as", // American Samoa
"GUM": "gu", // Guam
"MNP": "mp", // Northern Mariana Islands
"PRI": "pr", // Puerto Rico
"VIR": "vi", // U.S. Virgin Islands
"BHS": "bs", // Bahamas
"BLZ": "bz", // Belize
"CRI": "cr", // Costa Rica
"GTM": "gt", // Guatemala
"HND": "hn", // Honduras
"NIC": "ni", // Nicaragua
"PAN": "pa", // Panama
"SLV": "sv", // El Salvador
"JAM": "jm", // Jamaica
"HTI": "ht", // Haiti
"DOM": "do", // Dominican Republic
"CUB": "cu", // Cuba
"TTO": "tt", // Trinidad and Tobago
"BRB": "bb", // Barbados
"LCA": "lc", // Saint Lucia
"VCT": "vc", // Saint Vincent and the Grenadines
"GRD": "gd", // Grenada
"ATG": "ag", // Antigua and Barbuda
"DMA": "dm", // Dominica
"KNA": "kn", // Saint Kitts and Nevis
"BWA": "bw", // Botswana
"ZWE": "zw", // Zimbabwe
"ZMB": "zm", // Zambia
"MWI": "mw", // Malawi
"MOZ": "mz", // Mozambique
"MDG": "mg", // Madagascar
"MUS": "mu", // Mauritius
"SYC": "sc", // Seychelles
"COM": "km", // Comoros
"DJI": "dj", // Djibouti
"ERI": "er", // Eritrea
"ETH": "et", // Ethiopia
"KEN": "ke", // Kenya
"TZA": "tz", // Tanzania
"UGA": "ug", // Uganda
"RWA": "rw", // Rwanda
"BDI": "bi", // Burundi
"SSD": "ss", // South Sudan
"SDN": "sd", // Sudan
"LBY": "ly", // Libya
"TUN": "tn", // Tunisia
"DZA": "dz", // Algeria
"MAR": "ma", // Morocco
"ESH": "eh", // Western Sahara
"MRT": "mr", // Mauritania
"MLI": "ml", // Mali
"BFA": "bf", // Burkina Faso
"NER": "ne", // Niger
"TCD": "td", // Chad
"CAF": "cf", // Central African Republic
"CMR": "cm", // Cameroon
"GAB": "ga", // Gabon
"GNQ": "gq", // Equatorial Guinea
"STP": "st", // São Tomé and Príncipe
"GNB": "gw", // Guinea-Bissau
"GIN": "gn", // Guinea
"SLE": "sl", // Sierra Leone
"LBR": "lr", // Liberia
"CIV": "ci", // Ivory Coast
"GHA": "gh", // Ghana
"TGO": "tg", // Togo
"BEN": "bj", // Benin
"NGA": "ng", // Nigeria
"COG": "cg", // Republic of the Congo
"COD": "cd", // Democratic Republic of the Congo
"AGO": "ao", // Angola
"NAM": "na", // Namibia
"LSO": "ls", // Lesotho
"SWZ": "sz", // Eswatini
}
// GetISOCode returns the 2-letter ISO code for a 3-letter country code
func GetISOCode(countryCode string) string {
if isoCode, exists := CountryCodeMapping[strings.ToUpper(countryCode)]; exists {
return isoCode
}
return "" // Return empty string if not found
}
// IsValidCountryCode checks if a 3-letter country code is valid
func IsValidCountryCode(countryCode string) bool {
_, exists := CountryCodeMapping[strings.ToUpper(countryCode)]
return exists
}
// GetCountryName returns the full country name for a 3-letter country code
func GetCountryName(countryCode string) string {
// This is a simplified mapping - in a real application, you might want to use a more comprehensive mapping
countryNames := map[string]string{
"POL": "Poland",
"GRC": "Greece",
"DEU": "Germany",
"FRA": "France",
"ITA": "Italy",
"ESP": "Spain",
"GBR": "United Kingdom",
"NLD": "Netherlands",
"BEL": "Belgium",
"AUT": "Austria",
"SWE": "Sweden",
"DNK": "Denmark",
"FIN": "Finland",
"NOR": "Norway",
"IRL": "Ireland",
"PRT": "Portugal",
"CZE": "Czech Republic",
"SVK": "Slovakia",
"HUN": "Hungary",
"ROU": "Romania",
"BGR": "Bulgaria",
"HRV": "Croatia",
"SVN": "Slovenia",
"EST": "Estonia",
"LVA": "Latvia",
"LTU": "Lithuania",
"LUX": "Luxembourg",
"MLT": "Malta",
"CYP": "Cyprus",
"USA": "United States",
"CAN": "Canada",
"AUS": "Australia",
"JPN": "Japan",
"CHN": "China",
"IND": "India",
"BRA": "Brazil",
"RUS": "Russia",
"TUR": "Turkey",
"UKR": "Ukraine",
"EGY": "Egypt",
"ZAF": "South Africa",
"NZL": "New Zealand",
"KOR": "South Korea",
"THA": "Thailand",
"SGP": "Singapore",
"MYS": "Malaysia",
"IDN": "Indonesia",
"PHL": "Philippines",
"VNM": "Vietnam",
"CHL": "Chile",
"ARG": "Argentina",
"MEX": "Mexico",
"PER": "Peru",
"COL": "Colombia",
"VEN": "Venezuela",
"ECU": "Ecuador",
"BOL": "Bolivia",
"URY": "Uruguay",
"PRY": "Paraguay",
"GUY": "Guyana",
"SUR": "Suriname",
"ISR": "Israel",
"SAU": "Saudi Arabia",
"ARE": "United Arab Emirates",
"QAT": "Qatar",
"KWT": "Kuwait",
"BHR": "Bahrain",
"OMN": "Oman",
"JOR": "Jordan",
"LBN": "Lebanon",
"SYR": "Syria",
"IRQ": "Iraq",
"IRN": "Iran",
"AFG": "Afghanistan",
"PAK": "Pakistan",
"BGD": "Bangladesh",
"LKA": "Sri Lanka",
"MDV": "Maldives",
"BTN": "Bhutan",
"NPL": "Nepal",
"MMR": "Myanmar",
"LAO": "Laos",
"KHM": "Cambodia",
"BRN": "Brunei",
"TLS": "East Timor",
"PNG": "Papua New Guinea",
"FJI": "Fiji",
"TON": "Tonga",
"WSM": "Samoa",
"VUT": "Vanuatu",
"SLB": "Solomon Islands",
"KIR": "Kiribati",
"TUV": "Tuvalu",
"NRU": "Nauru",
"PLW": "Palau",
"FSM": "Federated States of Micronesia",
"MHL": "Marshall Islands",
"COK": "Cook Islands",
"NIU": "Niue",
"TKL": "Tokelau",
"WLF": "Wallis and Futuna",
"ASM": "American Samoa",
"GUM": "Guam",
"MNP": "Northern Mariana Islands",
"PRI": "Puerto Rico",
"VIR": "U.S. Virgin Islands",
"BHS": "Bahamas",
"BLZ": "Belize",
"CRI": "Costa Rica",
"GTM": "Guatemala",
"HND": "Honduras",
"NIC": "Nicaragua",
"PAN": "Panama",
"SLV": "El Salvador",
"JAM": "Jamaica",
"HTI": "Haiti",
"DOM": "Dominican Republic",
"CUB": "Cuba",
"TTO": "Trinidad and Tobago",
"BRB": "Barbados",
"LCA": "Saint Lucia",
"VCT": "Saint Vincent and the Grenadines",
"GRD": "Grenada",
"ATG": "Antigua and Barbuda",
"DMA": "Dominica",
"KNA": "Saint Kitts and Nevis",
"BWA": "Botswana",
"ZWE": "Zimbabwe",
"ZMB": "Zambia",
"MWI": "Malawi",
"MOZ": "Mozambique",
"MDG": "Madagascar",
"MUS": "Mauritius",
"SYC": "Seychelles",
"COM": "Comoros",
"DJI": "Djibouti",
"ERI": "Eritrea",
"ETH": "Ethiopia",
"KEN": "Kenya",
"TZA": "Tanzania",
"UGA": "Uganda",
"RWA": "Rwanda",
"BDI": "Burundi",
"SSD": "South Sudan",
"SDN": "Sudan",
"LBY": "Libya",
"TUN": "Tunisia",
"DZA": "Algeria",
"MAR": "Morocco",
"ESH": "Western Sahara",
"MRT": "Mauritania",
"MLI": "Mali",
"BFA": "Burkina Faso",
"NER": "Niger",
"TCD": "Chad",
"CAF": "Central African Republic",
"CMR": "Cameroon",
"GAB": "Gabon",
"GNQ": "Equatorial Guinea",
"STP": "São Tomé and Príncipe",
"GNB": "Guinea-Bissau",
"GIN": "Guinea",
"SLE": "Sierra Leone",
"LBR": "Liberia",
"CIV": "Ivory Coast",
"GHA": "Ghana",
"TGO": "Togo",
"BEN": "Benin",
"NGA": "Nigeria",
"COG": "Republic of the Congo",
"COD": "Democratic Republic of the Congo",
"AGO": "Angola",
"NAM": "Namibia",
"LSO": "Lesotho",
"SWZ": "Eswatini",
}
if name, exists := countryNames[strings.ToUpper(countryCode)]; exists {
return name
}
return countryCode // Return the code itself if name not found
}
// GetFlagAsset returns the flag SVG asset from filesystem
func GetFlagAsset(flagsPath, isoCode string) ([]byte, error) {
flagPath := filepath.Join(flagsPath, strings.ToLower(isoCode)+".svg")
f, err := os.ReadFile(flagPath)
if err != nil {
return nil, fmt.Errorf("failed to read flag asset, %v", flagPath)
}
return f, nil
}