﻿// ***************************************************************************
// *
// * Copyright (C) 2014 International Business Machines
// * Corporation and others. All Rights Reserved.
// * Tool: org.unicode.cldr.icu.NewLdml2IcuConverter
// * Source File: <path>/common/main/pt_PT.xml
// *
// ***************************************************************************
pt_PT{
    Version{"2.1.8.19"}
    units{
        acceleration{
            g-force{
                dnam{"força G"}
                one{"{0} força G"}
                other{"{0} força G"}
            }
            meter-per-second-squared{
                dnam{"metros por segundo quadrado"}
                one{"{0} metro por segundo quadrado"}
                other{"{0} metros por segundo quadrado"}
            }
        }
        area{
            square-kilometer{
                dnam{"quilómetros quadrados"}
                one{"{0} quilómetro quadrado"}
                other{"{0} quilómetros quadrados"}
            }
        }
        consumption{
            liter-per-kilometer{
                dnam{"litros por quilómetro"}
                one{"{0} litro por quilómetro"}
                other{"{0} litros por quilómetro"}
            }
        }
        duration{
            hour{
                per{"{0}/h"}
            }
            second{
                per{"{0}/s"}
            }
        }
        energy{
            foodcalorie{
                dnam{"quilocalorias"}
                one{"{0} quilocaloria"}
                other{"{0} quilocalorias"}
            }
        }
        length{
            astronomical-unit{
                dnam{"unidades astronómicas"}
                one{"{0} unidade astronómica"}
                other{"{0} unidades astronómicas"}
            }
            kilometer{
                dnam{"quilómetros"}
                one{"{0} quilómetro"}
                other{"{0} quilómetros"}
            }
            micrometer{
                dnam{"micrómetros"}
                one{"{0} micrómetro"}
                other{"{0} micrómetros"}
            }
            nanometer{
                dnam{"nanómetros"}
                one{"{0} nanómetro"}
                other{"{0} nanómetros"}
            }
            picometer{
                dnam{"picómetros"}
                one{"{0} picómetro"}
                other{"{0} picómetros"}
            }
        }
        proportion{
            karat{
                dnam{"quilates"}
                one{"{0} quilate"}
                other{"{0} quilates"}
            }
        }
        speed{
            kilometer-per-hour{
                dnam{"quilómetros por hora"}
                one{"{0} quilómetro por hora"}
                other{"{0} quilómetros por hora"}
            }
        }
        volume{
            cubic-kilometer{
                dnam{"quilómetros cúbicos"}
                one{"{0} quilómetro cúbico"}
                other{"{0} quilómetros cúbicos"}
            }
        }
    }
    unitsNarrow{
        duration{
            second{
                dnam{"s"}
            }
        }
        length{
            foot{
                one{"{0}′"}
                other{"{0}′"}
            }
        }
        temperature{
            celsius{
                one{"{0}°C"}
                other{"{0}°C"}
            }
        }
    }
    unitsShort{
        acceleration{
            g-force{
                dnam{"força G"}
            }
            meter-per-second-squared{
                dnam{"m/s²"}
            }
        }
        angle{
            arc-minute{
                dnam{"minutos de arco"}
            }
            arc-second{
                dnam{"segundos de arco"}
            }
        }
        area{
            acre{
                one{"{0} acre"}
                other{"{0} acres"}
            }
            square-foot{
                dnam{"pés quadrados"}
            }
            square-inch{
                dnam{"in²"}
                one{"{0} in²"}
                other{"{0} in²"}
            }
            square-meter{
                dnam{"m²"}
            }
            square-mile{
                dnam{"mi²"}
            }
            square-yard{
                dnam{"yd²"}
            }
        }
        consumption{
            mile-per-gallon{
                dnam{"milhas/galão"}
            }
        }
        duration{
            minute{
                dnam{"minutos"}
            }
            second{
                dnam{"segundos"}
                one{"{0} s"}
                other{"{0} s"}
            }
        }
        energy{
            foodcalorie{
                dnam{"kcal"}
                one{"{0} kcal"}
                other{"{0} kcal"}
            }
        }
        length{
            inch{
                dnam{"polegadas"}
            }
            mile{
                one{"{0} milha"}
                other{"{0} milhas"}
            }
            nautical-mile{
                dnam{"nmi"}
                one{"{0} nmi"}
                other{"{0} nmi"}
            }
            parsec{
                dnam{"pc"}
            }
        }
        mass{
            carat{
                one{"{0} ct"}
                other{"{0} ct"}
            }
            ton{
                one{"{0} ton"}
                other{"{0} ton"}
            }
        }
        pressure{
            inch-hg{
                dnam{"in Hg"}
                one{"{0} inHg"}
                other{"{0} inHg"}
            }
            millibar{
                one{"{0} mb"}
                other{"{0} mb"}
            }
        }
        proportion{
            karat{
                dnam{"quilates"}
                one{"{0} kt"}
                other{"{0} kt"}
            }
        }
        speed{
            meter-per-second{
                dnam{"m/s"}
            }
            mile-per-hour{
                dnam{"mi/h"}
                one{"{0} mi/h"}
                other{"{0} mi/h"}
            }
        }
        temperature{
            celsius{
                dnam{"graus Celsius"}
                one{"{0} °C"}
                other{"{0} °C"}
            }
            fahrenheit{
                dnam{"graus Fahrenheit"}
            }
        }
        volume{
            acre-foot{
                dnam{"ac ft"}
                one{"{0} ac ft"}
                other{"{0} ac ft"}
            }
            centiliter{
                dnam{"cL"}
                one{"{0} cL"}
                other{"{0} cL"}
            }
            cubic-foot{
                dnam{"ft³"}
            }
            cubic-inch{
                dnam{"in³"}
                one{"{0} in³"}
                other{"{0} in³"}
            }
            cubic-yard{
                dnam{"yd³"}
            }
            tablespoon{
                dnam{"cs"}
                one{"{0} cs"}
                other{"{0} cs"}
            }
        }
    }
}
