# Copyright 2014 Google Inc.
# 
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag|rounding
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# If a currency should be rounded to a multiple of of the least significant
#   digit, rounding will be present
# Trailing empty fields can be omitted

# DO NOT EDIT - GENERATED FROM CLDR DATA:
#  cldrVersion=25
#  date=$Date: 2014-02-25 22:16:49 +0100 (Tue, 25 Feb 2014) $
#  number=$Revision: 9791 $
#  type=root
AED = Arabiar Emirerri Batuetako dirhama
AFN = Afganistango afghania||0
ALL = Albaniako leka||0
AMD = Armeniako drama||0
ANG = Holandarren Antilletako guilderra
AOA = Angolako kwanza
ARS = Argentinako pesoa
AUD = Australiako dolarra|$
AWG = Arubeko florina
AZN = Azerbaijango manata
BAM = Bosnia-Herzegovinako marko trukakorra
BBD = Barbadosetako dolarra
BDT = Bangladesheko taka|৳
BGN = Bulgariako leva
BHD = Bahraingo dinarra||3
BIF = Burundiko frankoa||0
BMD = Bermudetako dolarra|$
BND = Bruneiko dolarra
BOB = Boliviako bolivianoa
BRL = Brasilgo erreala|R$
BSD = Bahametako dolarra|$
BTN = Bhutango ngultruma
BWP = Bosniako pula
BYR = Bielorrusiako errubloa||0
BZD = Belizeko dolarra|$
CAD = Kanadako dolarra|CA$
CDF = Kongoko frankoa
CHF = Suitzako frankoa
CLP = Txileko pesoa|$|0
CNY = Txinako yuana|¥
COP = Kolonbiako pesoa||0
CRC = Costa Ricako colona||0
CUC = Kubako peso trukakorra
CUP = Kubako pesoa|$
CVE = Cabo Verdeko ezkutua
CZK = Txekiar Errepublikako koroa
DJF = Djibouteko frankoa||0
DKK = Danimarkako koroa
DOP = Dominikar Errepublikako pesoa|$
DZD = Algeriako dinarra
EGP = Egiptoko libera
ERN = Eritreako nakfa
ETB = Etiopiako birra
EUR = Euroa|€
FJD = Fijiko dolarra
FKP = Falkland uharteetako libera
GBP = Libera esterlina|£
GEL = Georgiako laria
GHS = Ghanako cedia
GIP = Gibraltarreko libera|£
GMD = Ganbiako dalasia
GNF = Gineako frankoa||0
GTQ = Guatemalako quetzala
GYD = Guyanako dolarra||0
HKD = Hong Kongeko dolarra|$
HNL = Hondurasko lempira
HRK = Kroaziako kuna
HTG = Haitiko gourdea
HUF = Hungariako florina||0
IDR = Indonesiako errupia||0
ILS = Israeleko sheqel berria|₪
INR = Indiako errupia|₹
IQD = Irakeko dinarra||0
IRR = Irango riala||0
ISK = Islandiako koroa||0
JMD = Jamaikako dolarra
JOD = Jordaniako dinarra||3
JPY = Japoniako yena|¥|0
KES = Kenyako txelina
KGS = Kirgizistango soma
KHR = Kanbodiako riela
KMF = Komoreetako frankoa||0
KPW = Ipar Koreako wona||0
KRW = Hego Koreako wona|₩|0
KWD = Kuwaiteko dinarra||3
KYD = Kaiman uharteetako dolarra|$
KZT = Kazakhstango tengea|₸
LAK = Laoseko kipa||0
LBP = Libanoko libera||0
LKR = Sri Lankako errupia
LRD = Liberiako dolarra
LSL = Lesothoko lotia
LTL = Lituaniako litasa
LVL = Letoniako latsa|||1
LYD = Libiako dinarra||3
MAD = Marokoko dirhama
MDL = Moldaviako leua
MGA = Madagaskarreko ariarya||0
MKD = Mazedoniako denara
MMK = Myanmarreko kyata||0
MNT = Mongoliako tugrika||0
MOP = Macanako pataca
MRO = Mauritaniako ouguiya||0
MUR = Maurizio uharteetako errupia||0
MVR = Maldivetako rufiyaa
MWK = Malawiko kwacha
MXN = Mexikoko pesoa|$
MYR = Malaysiako ringgita
MZN = Mozambikeko metikala
NAD = Namibiako dolarra|$
NGN = Nigeriako naira
NIO = Nikaraguako cordoba
NOK = Norvegiako koroa
NPR = Nepalgo errupia
NZD = Zeelanda Berriko dolarra|$
OMR = Omango riala||3
PAB = Panamako balboa
PEN = Peruko sol berria
PGK = Papua Ginea Berriko kina
PHP = Filipinetako pesoa
PKR = Pakistango errupia||0
PLN = Poloniako zlotya
PYG = Paraguaiko guarania|₲|0
QAR = Qatarreko riala
RON = Errumaniako leua
RSD = Serbiako dinarra||0
RUB = Errusiako errubloa
RWF = Ruandako frankoa||0
SAR = Saudiko riala
SBD = Salomon uharteetako dolarra|$
SCR = Seychelleetako errupia
SDG = Sudango libera
SEK = Suediako koroa
SGD = Singapurreko dolarra|$
SHP = Santa Helenako libera
SLL = Sierra Leonako leona||0
SOS = Somaliako txelina||0
SRD = Surinameko dolarra
SSP = Hego Sudango libera|£
STD = Sao Tomeko eta Principeko dobra||0
SYP = Siriako libera||0
SZL = Swaziko lilangenia
THB = Thailandiako bahta|฿
TJS = Tajikistango somonia
TMT = Turkmenistango manata
TND = Tunisiako dinarra||3
TOP = Tongako Paʻanga
TRY = Turkiako lira
TTD = Trinidadeko eta Tobagoko dolarra|$
TWD = Taiwango dolar berria|NT$
TZS = Tanzaniako txelina||0
UAH = Ukrainako hryvnia|₴
UGX = Ugandako txelina||0
USD = AEBetako dolarra|$
UYU = Uruguaiko pesoa
UZS = Uzbekistango soma||0
VEF = Venezuelako bolivarra
VND = Vietnameko donga|₫|0
VUV = Vanuatuko vatua||0
WST = Samoko tala
XAF = Afrika erdialdeko frankoa BEAC|FCFA|0
XCD = Karibe ekialdeko dolarra|EC$
XOF = Afrika ekialdeko frankoa BCEAO|CFA|0
XPF = CFP frankoa|CFPF|0
XXX = Moneta ezezaguna|||1
YER = Yemengo riala||0
ZAR = Hegoafrikako randa
ZMK = Zambiako kwacha (1968–2012)||0|1
ZMW = Zambiako kwacha
