// *******************************************************************************
// *
// *   Copyright (C) 1997-2001, International Business Machines
// *   Corporation and others.  All Rights Reserved.
// *
// *******************************************************************************

fr {
    Version{"1.0.1"}
    CollationElements { 
	    Version { "1.0" }
		Sequence { "[backwards 2]&A<<\u00e6/e<<<\u00c6/E" }
	}
    Countries { 
        AR { "Argentine" }
        AT { "Autriche" }
        AU { "Australie" }
        BE { "Belgique" }
        BM { "Bermudes" }
        BR { "Br\u00E9zil" }
        CA { "Canada" }
        CH { "Suisse" }
        CL { "Chili" }
        CN { "Chine" }
        CO { "Colombie" }
        CU { "Cuba" }
        CY { "Chypre" }
        CZ { "R\u00E9publique Tch\u00e8que" }
        DE { "Allemagne" }
        DK { "Danemark" }
        DO { "R\u00E9publique Dominicaine" } 
        DZ { "Alg\u00E9rie" }
        ES { "Espagne" }
        FI { "Finlande" }
        FR { "France" }
        GB { "Royaume Uni" }
        GR { "Gr\u00E8ce" }
        HR { "Croatie" }
        ID { "Indon\u00E9sie" }
        IE { "Irlande" }
        IL { "Isra\u00EBl" }
        IT { "Italie" }
        JP { "Japon" }
        MT { "Malte" }
        MX { "Mexique" }
        NL { "Pays-Bas" }
        NO { "Norv\u00E8ge" }
        NZ { "Nouvelle-Z\u00E9lande" }
        PT { "Portugal" }
        RU { "Russie" }
        SE { "Su\u00E8de" }
        TR { "Turquie" }
        US { "\u00C9tats-Unis" }
        VE { "Venezuela" }
        YU { "Yougoslavie" }
        ZA { "Afrique du Sud" }
    }

    Languages { 
    root  { "racine" }
        cs { "tch\u00e8que" }
        da { "danois" }
        de { "allemand" }
        el { "grec" }
        en { "anglais" }
        es { "espagnol" }
        fi { "finnois" }
        fr { "fran\u00E7ais" }
        hr { "croate" }
        it { "italien" }
        ja { "japonais" }
        mt { "maltais" }
        nl { "hollandais" } // ne'erlandais ?
        no { "norv\u00E9gien" }
        pt { "portugais" }
        ru { "russe" }
        sv { "su\u00E9dois" }
        tr { "turc" }
        zh { "chinois" }
    }

    DateTimeElements { 
            "2",
            "1",
    }
    DateTimePatterns { 
            "HH' h 'mm z",
            "HH:mm:ss z",
            "HH:mm:ss",
            "HH:mm",
            "EEEE d MMMM yyyy",
            "d MMMM yyyy",
            "d MMM yy",
            "dd/MM/yy",
            "{1} {0}",
    }
    DayAbbreviations { 
            "dim.",
            "lun.",
            "mar.",
            "mer.",
            "jeu.",
            "ven.",
            "sam.",
    }
    DayNames { 
            "dimanche",
            "lundi",
            "mardi",
            "mercredi",
            "jeudi",
            "vendredi",
            "samedi",
    }


    Eras { 
            "av. J.-C.",
            "ap. J.-C.",
    }
    LocaleID { "0c" }
    LocaleString { "fr" }
    MonthAbbreviations { 
            "janv.",
            "f\u00E9vr.",
            "mars",
            "avr.",
            "mai",
            "juin",
            "juil.",
            "ao\u00FBt",
            "sept.",
            "oct.",
            "nov.",
            "d\u00E9c.",
            "",
    }
    MonthNames { 
            "janvier",
            "f\u00E9vrier",
            "mars",
            "avril",
            "mai",
            "juin",
            "juillet",
            "ao\u00FBt",
            "septembre",
            "octobre",
            "novembre",
            "d\u00E9cembre",
            "",
    }
    NumberElements { 
            ",",
            "\u00A0",
            ";",
            "%",
            "0",
            "#",
            "-",
            "E",
            "\u2030",
            "\u221E",
            "\uFFFD",
    }
    NumberPatterns { 
            "#,##0.###;-#,##0.###",
            "#,##0.00 \u00A4;-#,##0.00 \u00A4",
            "#,##0%",
    }
    ShortLanguage { "fra" }
    localPatternChars { "GanjkHmsSEDFwWxhKzAe" }
    zoneStrings { 
        {
                "Africa/Casablanca",
                "GMT",
                "GMT",
                "GMT",
                "GMT",
        }

// http://www.elections.ca/gen_info/backgrounders/ec90815_f.html
// http://lcweb.loc.gov/standards/iso639-2/frenchlangn.html
// http://www.egt.ie/standards/iso3166/iso3166-1-fr.html

    }
    LocaleScript{  
                "Latn",  // ISO 15924 Name 
    }

    //------------------------------------------------------------
    // Rule Based Number Format Support
    //------------------------------------------------------------

//         * Spellout rules for French.  French adds some interesting quirks of its
//         * own: 1) The word "et" is interposed between the tens and ones digits,
//         * but only if the ones digit if 1: 20 is "vingt," and 2 is "vingt-deux,"
//         * but 21 is "vingt-et-un."  2)  There are no words for 70, 80, or 90.
//         * "quatre-vingts" ("four twenties") is used for 80, and values proceed
//         * by score from 60 to 99 (e.g., 73 is "soixante-treize" ["sixty-thirteen"]).
//         * Numbers from 1,100 to 1,199 are rendered as hundreds rather than
//         * thousands: 1,100 is "onze cents" ("eleven hundred"), rather than
//         * "mille cent" ("one thousand one hundred")

    SpelloutRules {
            // the main rule set
            "%main:\n"
            "    -x: moins >>;\n"
            "    x.x: << virgule >>;\n"
                   // words for numbers from 0 to 10
            "    z\u00e9ro; un; deux; trois; quatre; cinq; six; sept; huit; neuf;\n"
            "    dix; onze; douze; treize; quatorze; quinze; seize;\n"
            "        dix-sept; dix-huit; dix-neuf;\n"
                   // ords for the multiples of 10: %%alt-ones inserts "et"
                   // when needed
            "    20: vingt[->%%alt-ones>];\n"
            "    30: trente[->%%alt-ones>];\n"
            "    40: quarante[->%%alt-ones>];\n"
            "    50: cinquante[->%%alt-ones>];\n"
                   // rule for 60.  The /20 causes this rule's multiplier to be
                   // 20 rather than 10, allowinhg us to recurse for all values
                   // from 60 to 79...
            "    60/20: soixante[->%%alt-ones>];\n"
                   // ...except for 71, which must be special-cased
            "    71: soixante et onze;\n"
                   // at 72, we have to repeat the rule for 60 to get us to 79
            "    72/20: soixante->%%alt-ones>;\n"
                   // at 80, we state a new rule with the phrase for 80.  Since
                   // it changes form when there's a ones digit, we need a second
                   // rule at 81.  This rule also includes "/20," allowing it to
                   // be used correctly for all values up to 99
            "    80: quatre-vingts; 81/20: quatre-vingt->>;\n"
                   // "cent" becomes plural when preceded by a multiplier, and
                   // the multiplier is omitted from the singular form
            "    100: cent[ >>];\n"
            "    200: << cents[ >>];\n"
            "    1000: mille[ >>];\n"
                   // values from 1,100 to 1,199 are rendered as "onze cents..."
                   // instead of "mille cent..."  The > after "1000" decreases
                   // the rule's exponent, causing its multiplier to be 100 instead
                   // of 1,000.  This prevents us from getting "onze cents cent
                   // vingt-deux" ("eleven hundred one hundred twenty-two").
            "    1100>: onze cents[ >>];\n"
                   // at 1,200, we go back to formating in thousands, so we
                   // repeat the rule for 1,000
            "    1200: mille >>;\n"
                   // at 2,000, the multiplier is added
            "    2000: << mille[ >>];\n"
            "    1,000,000: << million[ >>];\n"
            "    1,000,000,000: << milliarde[ >>];\n"
            "    1,000,000,000,000: << billion[ >>];\n"
            "    1,000,000,000,000,000: =#,##0=;\n"
            // %%alt-ones is used to insert "et" when the ones digit is 1
            "%%alt-ones:\n"
            "    ; et-un; =%main=;\n" 
            "%%lenient-parse:\n"
            "    &\u0000 << ' ' << ',' << '-';\n"
    }
}
