// ***************************************************************************
// *
// *   Copyright (C) 2001-2003, International Business Machines
// *   Corporation and others.  All Rights Reserved.
// *
// ***************************************************************************
// * Oromo language locale.
// * Contributed by Daniel Yacob <yacob@geez.org>
// *
// * Oromo terms are provided by Mahdi Hamid Muudee of Sagalee Oromoo
// * Publishing Co. Inc and formatted in Posix format locale by Daniel Yacob of
// * the Ge'ez Frontier Foundation.  The Oromo language terms used here
// * are those considered to be canonical in the Oromo language under
// * contemporary and progressive usage adopted by government bureaus
// * across the Oromo region.  Regional synonyms naturally exist for many
// * of the month and day names.

om{
    Version{ "2.0" }
    DayAbbreviations {
        "Dil",
        "Wix",
        "Qib",
        "Rob",
        "Kam",
        "Jim",
        "San",
    }
    DayNames {
        "Dilbata",
        "Wiixata",
        "Qibxata",
        "Roobii",
        "Kamiisa",
        "Jimaata",
        "Sanbata",
    }
//    LanguageLibraryUse { "orm" }
    MonthAbbreviations {
        "Ama",
        "Gur",
        "Bit",
        "Elb",
        "Cam",
        "Wax",
        "Ado",
        "Hag",
        "Ful",
        "Onk",
        "Sad",
        "Mud",
    }
    MonthNames {
        "Amajjii",
        "Guraandhala",
        "Bitooteessa",
        "Elba",
        "Caamsa",
        "Waxabajjii",
        "Adooleessa",
        "Hagayya",
        "Fuulbana",
        "Onkololeessa",
        "Sadaasa",
        "Muddee",
    }
    Eras { 
        "KD",  // KD = Kiristoos Dura = Before Christ
        "KB",  // KB = Kiristoos Booda = After Christ
    }
    DateTimeElements:intvector { 
        7,
        1,
    }
    Languages { 
        om { "Oromoo" }
    }
    Countries { 
        ET { "Itoophiyaa" }
        KE { "Keeniyaa" }
    }

    // Currency display names
    Currencies {
        KES { "Ksh", "KES" }
    }
    LocaleScript{ 
        "Latn",  // ISO 15924 Name 
    }
    ExemplarCharacters{
	"[a-z]"
    }
}
