public static MonthMap fromAllLocales() {
        MonthMap newMonthMap = new MonthMap();
        Locale[] locales = DateFormatSymbols.getAvailableLocales();
        for (Locale locale : locales) {
            DateFormatSymbols dfs = DateFormatSymbols.getInstance(locale);
            String[] longMonths = dfs.getMonths();
            String[] shortMonths = dfs.getShortMonths();
            for (int i = 0; i < 12; i++) {
                String shortMonth = shortMonths[i].toUpperCase();
                String shortMonth4 = shortMonths[i].toUpperCase().substring(0, Math.min(4, shortMonths[i].length()));
                String longMonth = longMonths[i].toUpperCase();
                if (longMonth.startsWith(shortMonth4) || shortMonth4.endsWith(".")) {
                    // If a truncated month name matches its 4-char abbrev, we'll use it.
                    // The goal is to support both standard and non-standard abbreviations like "Octob".
                    newMonthMap.addMonth(shortMonth4, i);
                    // Finland's 11th month starts with "MAR" which collides with EN on 3-char abbrevs.
                    // Except for that, we'll recognize 3-char abbreviations
                    if (shortMonth4.length() == 4 && !locale.toString().startsWith("fi")) {
                        newMonthMap.addMonth(shortMonth.substring(0, 3), i);
                    }
                } else {
                    // Otherwise, we'll strictly match the abbreviation and full name
                    newMonthMap.addMonth(shortMonth, i);
                    newMonthMap.addMonth(longMonth, i);
                }
            }
        }
        return newMonthMap;
    }