// ***************************************************************************
// *
// *   Copyright (C) 2001-2003, International Business Machines
// *   Corporation and others.  All Rights Reserved.
// *
// ***************************************************************************
// * Sidama language locale.
// * Contributed by :
// *    Daniel Yacob <yacob@geez.org>, Ge'ez Frontier Foundation
// *    Sidama terms provided by Dessalegn Garsamo Gabbiso <gabbiso2001@yahoo.com>
// *    of the National University of Ireland, Dublin and A.H. Weno
// *    <bus1hwa@east-01.novell.leeds.ac.uk>.

sid {
    Version{ "x0.1" }
    Countries { 
        ET { "Itiyoophiya" }
    }
    // Currency display names
    Currencies {
        ETB { "$", "ETB" }
    }
    Languages {
        sid { "Sidaamu Afo" }
    }
    ExemplarCharacters{ "[a-z]" }
    LocaleScript:array{ "Latn" }
    // Sidama also uses a lunar calendar, when the Gregorian calendar is used
    // it is used unmodified:
    // TODO: Get translations for the lunar calendar when the calendar becomes available in ICU.
    calendar{
        gregorian{
            AmPmMarkers{
                "soodo",
                "hawwaro",
            }
            DateTimeElements:intvector { 
                7,
                1,
            }
            DateTimePatterns{
                "h:mm:ss a",
                "h:mm:ss a",
                "h:mm:ss a",
                "h:mm a",
                "EEEE, MMMM dd, yyyy",
                "dd MMMM yyyy",
                "dd-MMM-yyyy",
                "dd/MM/yy",
                "{1} {0}",
            }
            dayNames{
                format{
                    abbreviated{
                        //"Aca", // Too many days, and this doesn't look right.
                        "Sam",
                        "San",
                        "Mak",
                        "Row",
                        "Ham",
                        "Arb",
                        "Qid",
                    }
                    wide{
                        //"Qubee", // Too many days, and this doesn't look right.
                        "Sambata",
                        "Sanyo",
                        "Maakisanyo",
                        "Roowe",
                        "Hamuse",
                        "Arbe",
                        "Qidaame",
                    }
                }
            }
            eras{
                "YIA", // Yesus ilama albaani",
                "YIG", // Yesus ilama gedensaani"
            }
            monthNames{
                format{
                    abbreviated{
                        "Jan",
                        "Feb",
                        "Mar",
                        "Apr",
                        "May",
                        "Jun",
                        "Jul",
                        "Aug",
                        "Sep",
                        "Oct",
                        "Nov",
                        "Dec",
                    }
                    wide{
                        "January",
                        "February",
                        "March",
                        "April",
                        "May",
                        "June",
                        "July",
                        "August",
                        "September",
                        "October",
                        "November",
                        "December",
                    }
                }
            }
        }
    }
}
