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

sv {
    //------------------------------------------------------------
    // Rule Based Number Format Support
    //------------------------------------------------------------

    // Spellout rules for Swedish.
    // Thanks to Kent Karlsson for cleaning up these rules.
    // (rapport inskickad till ICU 2001-11-03; ny version inskickad till Doug Felt 2001-11-07)

    SpelloutRules {
      "%year:\n"
          "=%neutrum=;\n"
          "1000>: <%neutrum<hundra[\u00ad>>];\n"
          "10,000: =%neutrum=;\n"
          // the same as default except we change the one's digit, wish there were a better way
      "%neutrum:\n"
            "-x: minus >>;\n"
            "x.x: << komma >>;\n"
            "noll; ett; tv\u00e5; tre; fyra; fem; sex; sju; \u00e5tta; nio;\n"
            "tio; elva; tolv; tretton; fjorton; femton; sexton; sjutton; arton; nitton;\n"
            "20: tjugo[>>];\n"
            "30: trettio[>>];\n"
            "40: fyrtio[>>];\n"
            "50: femtio[>>];\n"
            "60: sextio[>>];\n"
            "70: sjuttio[>>];\n"
            "80: \u00e5ttio[>>];\n"
            "90: nittio[>>];\n"
            "100: <<hundra[\u00ad>>];\n"
            "1000: ettusen[ >>];\n"
            "2000: <%default<\u00adtusen[ >>];\n"
            "1,000,000: en miljon[ >>];\n"
            "2,000,000: <%default< miljoner[ >>];\n"
            "1,000,000,000: en miljard[ >>];\n"
            "2,000,000,000: <%default< miljarder[ >>];\n"
            "1,000,000,000,000: en biljon[ >>];\n"
            "2,000,000,000,000: <%default< biljoner[ >>];\n"
            "1,000,000,000,000,000: en triljon[ >>];\n"
            "2,000,000,000,000,000: <%default< triljoner[ >>];\n"
            "1,000,000,000,000,000,000: =#,##0=;\n"
      "%default:\n"
            " -x: minus >>;\n"
            "x.x: << komma >>;\n"
            "noll; en; tv\u00e5; tre; fyra; fem; sex; sju; \u00e5tta; nio;\n"
            "tio; elva; tolv; tretton; fjorton; femton; sexton; sjutton; arton; nitton;\n"
            "20: tjugo[>>];\n"
            "30: trettio[>>];\n"
            "40: fyrtio[>>];\n"
            "50: femtio[>>];\n"
            "60: sextio[>>];\n"
            "70: sjuttio[>>];\n"
            "80: \u00e5ttio[>>];\n"
            "90: nittio[>>];\n"
            "100: etthundra[\u00ad>>];\n"
            "200: <<hundra[\u00ad>>];\n"
            "1000: ettusen[ >>];\n"
            "2000: <<\u00adtusen[ >>];\n"
            "1,000,000: en miljon[ >>];\n"
            "2,000,000: << miljoner[ >>];\n"
            "1,000,000,000: en miljard[ >>];\n"
            "2,000,000,000: << miljarder[ >>];\n"
            "1,000,000,000,000: en biljon[ >>];\n"
            "2,000,000,000,000: << biljoner[ >>];\n"
            "1,000,000,000,000,000: en triljon[ >>];\n"
            "2,000,000,000,000,000: << triljoner[ >>];\n"
            "1,000,000,000,000,000,000: =#,##0=;\n" 
/* 
 * Current (java) implementation can't handle these magnitudes
            "1,000,000,000,000,000,000: en triljard[ >>];\n"
            "2,000,000,000,000,000,000: << triljarder[ >>];\n"
 * Current (c++) implmenatation can't handle these magnitudes
            "1,000,000,000,000,000,000,000: en kvartiljon[ >>];\n"
            "2,000,000,000,000,000,000,000: << kvartiljoner[ >>];\n"
            "1,000,000,000,000,000,000,000,000: en kvartiljard[ >>];\n"
            "2,000,000,000,000,000,000,000,000: << kvartiljarder[ >>];\n"
            "1,000,000,000,000,000,000,000,000,000: en kvintiljon[ >>];\n"
            "2,000,000,000,000,000,000,000,000,000: << kvintiljoner[ >>];\n"
            "1,000,000,000,000,000,000,000,000,000,000: en kvintiljard[ >>];\n"
            "2,000,000,000,000,000,000,000,000,000,000: << kvintiljarder[ >>];\n"
            "1,000,000,000,000,000,000,000,000,000,000,000: en sextiljon[ >>];\n"
            "2,000,000,000,000,000,000,000,000,000,000,000: << sextiljoner[ >>];\n"
            "1,000,000,000,000,000,000,000,000,000,000,000,000: en sextiljard[ >>];\n"
            "2,000,000,000,000,000,000,000,000,000,000,000,000: << sextiljarder[ >>];\n"
            "1,000,000,000,000,000,000,000,000,000,000,000,000,000: =#,##0="
*/
    }
}
