// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//*******************************************************************************
//*
//*   Copyright (C) 1998-2000, International Business Machines
//*   Corporation and others.  All Rights Reserved.
//*
//*******************************************************************************


// This is a test default locale file

default
{
    Version { 44.0 }

    ShortLanguage { xxx }

    string_only_in_Default { DEFAULT }

    array_only_in_Default { DEFAULT0, DEFAULT1, DEFAULT2, DEFAULT3 }

    array_2d_only_in_Default
    {
        { DEFAULT00, DEFAULT01 }
        { DEFAULT10, DEFAULT11 }
    }

    tagged_array_only_in_Default
    {
        tag2 { DEFAULT2 } 
        tag1 { DEFAULT1 } 
        tag3 { DEFAULT3 } 
        tag6 { DEFAULT6 } 
        tag12 { DEFAULT12 } 
        tag7 { DEFAULT7 } 
        tag14 { DEFAULT14 } 
        tag9 { DEFAULT9 } 
    }

    string_in_Default_te_te_IN { DEFAULT }

    array_in_Default_te_te_IN { DEFAULT0, DEFAULT1, DEFAULT2, DEFAULT3, DEFAULT4 }

    array_2d_in_Default_te_te_IN
    {
        { DEFAULT00, DEFAULT01, DEFAULT02 }
        { DEFAULT10, DEFAULT11, DEFAULT12 }
        { DEFAULT20, DEFAULT21, DEFAULT22 }
        { DEFAULT30, DEFAULT31, DEFAULT32 }
    }

    tagged_array_in_Default_te_te_IN
    {
        tag4 { DEFAULT4 } 
        tag9 { DEFAULT9 } 
        tag12 { DEFAULT12 } 
    }

    string_in_Default_te { DEFAULT }

    array_in_Default_te { DEFAULT0, DEFAULT1, DEFAULT2, DEFAULT3, DEFAULT4 }

    array_2d_in_Default_te
    {
        { DEFAULT00, DEFAULT01, DEFAULT02 }
        { DEFAULT10, DEFAULT11, DEFAULT12 }
        { DEFAULT20, DEFAULT21, DEFAULT22 }
        { DEFAULT30, DEFAULT31, DEFAULT32 }
    }

    tagged_array_in_Default_te
    {
        tag12 { DEFAULT12 } 
        tag1 { DEFAULT1 } 
        tag7 { DEFAULT7 } 
        tag3 { DEFAULT3 } 
    }

    string_in_Default_te_IN { DEFAULT }

    array_in_Default_te_IN { DEFAULT0, DEFAULT1, DEFAULT2 }

    array_2d_in_Default_te_IN
    {
        { DEFAULT00, DEFAULT01, DEFAULT02, DEFAULT03 }
        { DEFAULT10, DEFAULT11, DEFAULT12, DEFAULT13 }
        { DEFAULT20, DEFAULT21, DEFAULT22, DEFAULT23 }
    }

    tagged_array_in_Default_te_IN
    {
        tag13 { DEFAULT13 } 
        tag8 { DEFAULT8 } 
    }
}

//eof
