1package locale23import "strings"45// Names are a language's names of months and days, as date formats show6// them (mmm, mmmm, ddd, dddd) and typed dates may spell them, and its7// words for the two halves of a 12-hour clock.8type Names struct {9 // Months are the months' full names as a date writes them, January10 // first: "września" in "26 września 2026".11 Months [12]string12 // Alone are the full names where a month stands without its day13 // ("wrzesień 2026"), in languages whose form differs; empty where14 // it's Months.15 Alone [12]string16 // Short are the abbreviations mmm shows: "Sep", "sept.", "9月".17 Short [12]string18 // Days are the days' full names, Sunday first; DaysShort their19 // abbreviations, as ddd shows them.20 Days, DaysShort [7]string21 // AM and PM are what AM/PM shows, where the language has words of22 // its own; empty keeps AM and PM.23 AM, PM string24}2526// Month is month m's (1 to 12) full name, standing alone or in a date27// with its day.28func (n *Names) Month(m int, alone bool) string {29 if alone && n.Alone[m-1] != "" {30 return n.Alone[m-1]31 }32 return n.Months[m-1]33}3435// English are en-US's names, which every English locale shares.36var English = &Names{37 Months: [12]string{"January", "February", "March", "April", "May", "June", "July",38 "August", "September", "October", "November", "December"},39 Short: [12]string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"},40 Days: [7]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"},41 DaysShort: [7]string{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"},42}4344// names are the languages' names, by the language of a locale's tag.45// Abbreviations are Excel's where Excel has them, so a sheet shows what46// the same format shows there; a date of numbers stays the more compact.47var names = map[string]*Names{48 "en": English,49 "de": {50 Months: [12]string{"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli",51 "August", "September", "Oktober", "November", "Dezember"},52 Short: [12]string{"Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"},53 Days: [7]string{"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"},54 DaysShort: [7]string{"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"},55 },56 "fr": {57 Months: [12]string{"janvier", "février", "mars", "avril", "mai", "juin", "juillet",58 "août", "septembre", "octobre", "novembre", "décembre"},59 Short: [12]string{"janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."},60 Days: [7]string{"dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"},61 DaysShort: [7]string{"dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."},62 },63 "es": {64 Months: [12]string{"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio",65 "agosto", "septiembre", "octubre", "noviembre", "diciembre"},66 Short: [12]string{"ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"},67 Days: [7]string{"domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"},68 DaysShort: [7]string{"dom", "lun", "mar", "mié", "jue", "vie", "sáb"},69 },70 "it": {71 Months: [12]string{"gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio",72 "agosto", "settembre", "ottobre", "novembre", "dicembre"},73 Short: [12]string{"gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"},74 Days: [7]string{"domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"},75 DaysShort: [7]string{"dom", "lun", "mar", "mer", "gio", "ven", "sab"},76 },77 "pt": {78 Months: [12]string{"janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho",79 "agosto", "setembro", "outubro", "novembro", "dezembro"},80 Short: [12]string{"jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"},81 Days: [7]string{"domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira",82 "sexta-feira", "sábado"},83 DaysShort: [7]string{"dom", "seg", "ter", "qua", "qui", "sex", "sáb"},84 },85 "nl": {86 Months: [12]string{"januari", "februari", "maart", "april", "mei", "juni", "juli",87 "augustus", "september", "oktober", "november", "december"},88 Short: [12]string{"jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"},89 Days: [7]string{"zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"},90 DaysShort: [7]string{"zo", "ma", "di", "wo", "do", "vr", "za"},91 },92 "sv": {93 Months: [12]string{"januari", "februari", "mars", "april", "maj", "juni", "juli",94 "augusti", "september", "oktober", "november", "december"},95 Short: [12]string{"jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"},96 Days: [7]string{"söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"},97 DaysShort: [7]string{"sön", "mån", "tis", "ons", "tors", "fre", "lör"},98 },99 "da": {100 Months: [12]string{"januar", "februar", "marts", "april", "maj", "juni", "juli",101 "august", "september", "oktober", "november", "december"},102 Short: [12]string{"jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"},103 Days: [7]string{"søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"},104 DaysShort: [7]string{"søn", "man", "tir", "ons", "tor", "fre", "lør"},105 },106 "nb": {107 Months: [12]string{"januar", "februar", "mars", "april", "mai", "juni", "juli",108 "august", "september", "oktober", "november", "desember"},109 Short: [12]string{"jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des"},110 Days: [7]string{"søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"},111 DaysShort: [7]string{"søn", "man", "tir", "ons", "tor", "fre", "lør"},112 },113 "fi": {114 Months: [12]string{"tammikuuta", "helmikuuta", "maaliskuuta", "huhtikuuta", "toukokuuta",115 "kesäkuuta", "heinäkuuta", "elokuuta", "syyskuuta", "lokakuuta", "marraskuuta", "joulukuuta"},116 Alone: [12]string{"tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu",117 "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"},118 Short: [12]string{"tammi", "helmi", "maalis", "huhti", "touko", "kesä", "heinä", "elo",119 "syys", "loka", "marras", "joulu"},120 Days: [7]string{"sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai",121 "lauantai"},122 DaysShort: [7]string{"su", "ma", "ti", "ke", "to", "pe", "la"},123 },124 "pl": {125 Months: [12]string{"stycznia", "lutego", "marca", "kwietnia", "maja", "czerwca", "lipca",126 "sierpnia", "września", "października", "listopada", "grudnia"},127 Alone: [12]string{"styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec",128 "sierpień", "wrzesień", "październik", "listopad", "grudzień"},129 Short: [12]string{"sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "paź", "lis", "gru"},130 Days: [7]string{"niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"},131 DaysShort: [7]string{"niedz.", "pon.", "wt.", "śr.", "czw.", "pt.", "sob."},132 },133 "cs": {134 Months: [12]string{"ledna", "února", "března", "dubna", "května", "června", "července",135 "srpna", "září", "října", "listopadu", "prosince"},136 Alone: [12]string{"leden", "únor", "březen", "duben", "květen", "červen", "červenec",137 "srpen", "září", "říjen", "listopad", "prosinec"},138 Short: [12]string{"led", "úno", "bře", "dub", "kvě", "čvn", "čvc", "srp", "zář", "říj", "lis", "pro"},139 Days: [7]string{"neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota"},140 DaysShort: [7]string{"ne", "po", "út", "st", "čt", "pá", "so"},141 },142 "ru": {143 Months: [12]string{"января", "февраля", "марта", "апреля", "мая", "июня", "июля",144 "августа", "сентября", "октября", "ноября", "декабря"},145 Alone: [12]string{"январь", "февраль", "март", "апрель", "май", "июнь", "июль",146 "август", "сентябрь", "октябрь", "ноябрь", "декабрь"},147 Short: [12]string{"янв", "фев", "мар", "апр", "мая", "июн", "июл", "авг", "сен", "окт", "ноя", "дек"},148 Days: [7]string{"воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница",149 "суббота"},150 DaysShort: [7]string{"вс", "пн", "вт", "ср", "чт", "пт", "сб"},151 },152 "tr": {153 Months: [12]string{"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz",154 "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"},155 Short: [12]string{"Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"},156 Days: [7]string{"Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"},157 DaysShort: [7]string{"Paz", "Pzt", "Sal", "Çar", "Per", "Cum", "Cmt"},158 },159 "ja": {160 Months: [12]string{"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"},161 Short: [12]string{"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"},162 Days: [7]string{"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"},163 DaysShort: [7]string{"日", "月", "火", "水", "木", "金", "土"},164 AM: "午前", PM: "午後",165 },166 "zh": {167 Months: [12]string{"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月",168 "十一月", "十二月"},169 Short: [12]string{"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"},170 Days: [7]string{"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"},171 DaysShort: [7]string{"周日", "周一", "周二", "周三", "周四", "周五", "周六"},172 AM: "上午", PM: "下午",173 },174}175176// Names are the locale's names of months and days, in its language;177// English for a nil locale.178func (l *Locale) Names() *Names {179 if l == nil || l.names == nil {180 return English181 }182 return l.names183}184185// Each locale finds its language's names once, as dates are drawn with186// them every frame.187func init() {188 for i := range table {189 lang, _, _ := strings.Cut(table[i].Tag, "-")190 table[i].names = names[lang]191 }192}