// -*- Coding: latin-1 -*- 
// Copyright (c) 1998-2000 IBM, Inc. and others.
//
// Maltese locale.
// Maintained by srl@monkey.sbay.org [See below for full credits]
//
// For information about this country please see: http://www.magnet.mt/
//
// For information about Maltese Computing please see:
//         http://www.quadrantFive.com/SMC/
//
// Search for 'Sources' below for source abbreviations

// Quick rundown on Maltese Unicode:  [If you're not sure what 'c.' means, 
// ---------------------------------   look up in the Unicode Book the page
// c. = U+010B   C. = U+010A  'ch'     with the 01xx code points, or www.unicode.org]
// g. = U+0121   G. = U+0120  soft G
// h/ = U+0127   H/ = U+0126  voiced H [or 2nd letter of unvoiced gh/]
// z. = U+017c   Z. = U+017B  'dz'
//
// COMBINING MARKS:
// There is no combining mark for the slash (h/)
//  but, U+0307 is the DOT ABOVE needed for z., c., and g. (in collation rules)

mt {
    Version { "0.9.1" } // Tue, Jul 20, 2000 srl,     Oct 09, 2000 george
    ShortLanguage { mlt }
    Languages {

 root    { "G\u0127erq" } // the root locale

// Some of these tags look like they are in other languages, not Maltese.

 ar { G\u0127arbi }
 bg { "Bulgaru" }
 ca { "Katalan" } // bu
 cs { "\u010Aek" }
 cy { "Welx" }  // [rc]
 da { "Dani\u017C" }  // [rc]
 de { "\u0120ermani\u017C" } // [CI]
 el { "Grieg" }
 en { "Ingli\u017C" }
 es { "Spanjol" } 
 et { "Estonjan" }
 eu { "Bask" }
 fa { "Persjan" }
 fi { "Finlandi\u017C" } // [rc]
 fr { "Fran\u010Bi\u017c" } 
 he { "Ebrajk" } // rz  { see: iw }
 hr { "Kroat" }
 hu { "Ungeri\u017C" }
 hy { "Armenjan" }
 id { "Indone\u017Cjan" }
 is { "Islandi\u017C" }
 it { Taljan }  // CI dictionary
 iw { "Ebrajk" } // rz { see: he }
 ja { "\u0120appuni\u017C" } // srl, after [BM]
 lt { "Litwanjan" }
 lv { "Latvjan" }
 mt { Malti }
 no { "Norvegi\u017C" } // bu
 nl { "Olandi\u017C" } // bu
 pl { "Pollakk" }
 pt { "Portugi\u017c" }
 ro { "Rumen" }
 ru { "Russu" }
 sh { "Serbo-Kroat" }
 sk { "Slovakk" }
 sl { "Slav" } // rz [mhux Slovenjan] 
 sq { "Albani\u017C" }
 sr { "Serb" }
 sv { "Svedi\u017C" }
 sw { "Swa\u0127ili" }
 th { "Tajlandi\u017c" }
 tr { "Tork" } 
 uk { "Ukranjan" }
 ur { "Urdu" }
 vi { "Vjetnami\u017C" }
 zh { "\u010Aini\u017C" }
 zu { "\u017Bulu" }

// x1 { Magyar } 
// x2 { Makedonski } 
// x4 { Norsk } 
// x9 { Slovencina } 
// xa { Slovenscina } 
    }
    Countries {

        AE { "l-Emirati G\u0127arab" } // rz
        AL { Albanija }
        AR { Ar\u0121entina }
        AT { Awstrija }
        AU { Awstralja }
        BA { Bo\u017Cnija/\u0126erzegovina  }
        BE { Bel\u0121ju }
        BG { Bulgarija }
        BO { "Bolivja" } // [rc]
        BR { Bra\u017Cil }
        CA { Kanada }
        CH { Svizzera } // rz [S not dotted Z]
        CN { \u010Aina }
        CO { "Kolumbja" } // bu
        CU { "Kuba" }
        CY { \u010Aipru }
        CZ { Rep. \u010Aeka  }
        DE { \u0120ermanja }
        DK { Danimarka  }
        DO { "Republikka Domenikana" } // bu
        DZ { Al\u0121erija }
        EC { "Ekwador" } // bu
        EE { Estonja }
        EG { E\u0121ittu }
        ES { Spanja }
        FI { Finlandja }
        FR { Franza }
        GB { "Ingilterra" } // rz, 'Gran Brittanja is more Italian than Maltese'
        GL { "Grinlandja" } // [rc]
        GR { "Gre\u010Bja" } // [rc]/bu
        GT { "Gwatemala" } // bu
        HR { Kroazja }
        HU { Ungerija }
        IE { Irlanda }
        IL { "I\u017crael" }
        IN { Indja }
        IQ { "Iraq" }
        IR { "Iran" }
        IS { Islanda }
        IT { Italja }
        JP { \u0120appun }
        LB { "Libanu" }
        LT { Litwanja }
        LU { Lussemburgu }
        LV { Latvja }
        LY { "Libja" }
        MA { "Marokk" }
        MT { Malta }
        MX { "Messiku" }
        NL { Olanda }
        NO { Norve\u0121ja }
        PE { "Peru" }
        PK { "Pakistan" }
        PL { Polonja }
        PT { Portugall } // [KA]
        RO { Rumanija }
        RU { "Russja" } // [rc]
        SA { "Sawdi Arabja" }
        SE { \u017Bvezja }
        SI { Slovenja }
        SK { "Slovakkja" } // rz
        SY { "Sirja" }
        TH { "Tajlandja" }
        TN { "Tune\u017c" }
        TR { Turkija }
        TW { Tajwan }
        UA { Ukranja }
        US { "Stati Uniti" }
        VA { Stat tal-Vatikan  }
        YU { Jugoslavja }
        ZA { "Afrika t'Isfel" }
    }
    MonthNames {
        Jannar,
        Frar,
        Marzu,
        April,
        Mejju,
        \u0120unju,
        Lulju,
        Awissu,
        Settembru,
        Ottubru,
        Novembru,
        Di\u010Bembru
        ""
    }
//Jan Fra Mar Apr Mej Gun Lul Aww* Set Ott Nov Dic

   MonthAbbreviations {
        "Jan",
        "Fra",
        "Mar",
        "Apr",
        "Mej",
        "\u0120un",
        "Lul",
        "Awi", // jew Aww?
        "Set",
        "Ott",
        "Nov",
        "Di\u010B"
        ""
    }
    DayNames {
        il-\u0126add,
        it-Tnejn,
        it-Tlieta,
        l-Erbg\u0127a,
        il-\u0126amis,
        il-\u0120img\u0127a,
        is-Sibt
    }

    Eras {
         "QK",  // Quddiem Kristu  [from Il-BIBBJA - it-tieni edijoni,
         "WK"   // Wara Kristu      Ghaqda Biblika Maltija]
    }

    DayAbbreviations { 
        "\u0126ad",
        "Tne",
        "Tli",
        "Erb", 
        "\u0126am",
        "\u0120im",
        "Sib"
    }


    NumberElements {
        ".",
        ",",
        ";",
        "%",
        "0",
        "#",
        "-",
        E,
        "\u2030",
        "\u221e",
        "\ufffd"
    }


// illum is-Sibt, 01 ta'' Awissu, 1998 :)
    DateTimePatterns {
        "h:mm:ss a z",
        "h:mm:ss a z",
        "h:mm:ss a",
        "h:mm a",
        "EEEE, d 'ta''' MMMM, yyyy",
        "d 'ta''' MMMM",
        "dd/MM/yy",
        "dd/MM/yy",
        "{1} {0}"
    }
    DateTimeElements {
        "1",
        "1"
    }

//   Note, that 'c' doesn't exist in Maltese. But I put it here following c. 
//   for compatibility with foreign words.

// Joseph Felici Pace says: 
// a b c. [c] d e f g. g gh/ h h/ i ie j k l m n o p q r s t u v w x [y] z. z

   CollationElements
   {
        Version { "1.0" }
        Override { "FALSE" }
        Sequence { "& B < c\u0307 , C\u0307 "                       // c.  C.
         " < c,C"      
      "& F < g\u0307 , G\u0307 "                       // g.  G.
         " < g,G"
         " < g\u0127 , g\u0126 , G\u0127 , G\u0126 "   // gh  gH Gh GH
      "& H < \u0127  , \u0126 "                        // h/  H/
      "& I < ie, iE, Ie, IE   "                        // ie is a single letter
      "& Y < z\u0307 , Z\u0307"                        // z.  Z.
         " < z,Z" }
   }

// Time zone
//CET: 
    zoneStrings { 
        {
        "CET", 
        "\u0126in ta' L-Ewropa Centrali", 
        "\u0126EC", 
        "\u0126in ta' L-Ewropa Centrali ta' sajf",
        "\u0126EC-sajf"
        }
    }

    LocaleID {"3A"}

}


// -- BIBLIOGRAPHY --
//
// Maltese alphabet: grazzi, to mr. Karmenu Attard
// 
//  'colour image's dictionary order (Malta, 1998) -- [CI]
//   a b c. [c] d e f g. g gh/ h h/ i ie j k l m n o p q r s t u v w x y z z.
//   Only Colour Image's dictionary has 'ie' as a separate letter. 
//    (that i have seen so far)
//
// Kapt Pawlu Bugeja's dizzunarju
//  (Kelmet il-Malti) [Grima: Marsa, Malta, 1990) - the orange one     -- [Kelmet]
//   -- same order, but lists z. before z
//
// Lydia Sciriha seems to use the order 'g g. gh/' but 'z z.' in       -- [BM]
//   Beginning Maltese (Uni ta' Malta, 1996) in the lessons,
// but in the word list (at back) it's 'g. g gh/' and 'z. z' [1st ed.]
//
// J. Aquilina in his 'Teach Yourself:Maltese' book                    -- [Ty]
//     (London: Hodder Headline, 1965 and Chicago, NTC Publishing 1995)
// uses the very different 'g. g h h/ ... n gh/ o .. x z. z' ordering, 
// placing gh/ between n and o.
//
// Casha, Charles: 'Kun Af - aktar dwar ilsienna'                       -- [KA]
//   (Blata l-Bajda, Malta: Merlin Library Ltd., 1987)

// CREDITS: above sources and also..
// - Mirka Mifsud Bonnici for much of the initial translation
// - Karmenu Attard
// - MaxMan (Manuel)
// - Ramon Casha
// - Angelo Dalli
