# 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-03-01 06:57:43 +0100 (Sat, 01 Mar 2014) $
#  number=$Revision: 9852 $
#  type=root
AED = Verenigde Arabiese Emirate dirham
AFN = Afgaanse afgani||0
ALL = Albanese lek||0
AMD = Armeense dram||0
ANG = Nederlands-Antilliaanse gulde
AOA = Angolese kwanza
ARS = Argentynse peso
AUD = Australiese dollar|$
AWG = Arubaanse floryn
AZN = Azerbeidjaanse manat
BAM = Bosnië en Herzegowina omskakelbare marka
BBD = Barbados-dollar
BDT = Bangladesjiese taka|৳
BGN = Bulgaarse lev
BHD = Bahrainse dinar||3
BIF = Burundiese frank||0
BMD = Bermuda-dollar|$
BND = Broeneise dollar
BOB = Boliviaanse boliviano
BRL = Brasiliaanse real|R$
BSD = Bahamiaanse dollar|$
BTN = Bhoetanese ngoeltroem
BWP = Botswana pula
BYR = Belo-Russiese roebel||0
BZD = Beliziese dollar|$
CAD = Kanadese dollar|CA$
CDF = Kongolese frank
CHF = Switserse frank
CLP = Chileense peso|$|0
CNY = Sjinese joean renminbi|¥
COP = Colombiaanse peso||0
CRC = Costa Ricaanse colón||0
CUC = Kubaanse omskakelbare peso
CUP = Kubaanse peso|$
CVE = Kaap Verdiese escudo
CZK = Tsjeggiese kroon
DJF = Djiboeti frank||0
DKK = Deense kroon
DOP = Dominikaanse peso|$
DZD = Algeriese dinar
EGP = Egiptiese pond
ERN = Eritrese nakfa
ETB = Etiopiese birr
EUR = Euro|€
FJD = Fidjiaanse dollar
FKP = Falkland-eilande pond
GBP = Britse pond|£
GEL = Georgiese lari
GHC = Ghanese cedi (1979–2007)|||1
GHS = Ghanese cedi
GIP = Gibraltarese pond|£
GMD = Gambiese dalasi
GNF = Guinese frank||0
GNS = Guinese syli|||1
GTQ = Guatemalaanse quetzal
GYD = Guyanese dollar||0
HKD = Hong Kong dollar|$
HNL = Hondurese lempira
HRK = Kroatiese kuna
HTG = Haïtiaanse gourde
IDR = Indonesiese roepia||0
ILS = Israeliese nuwe sikkel|₪
INR = Indiese rupee|₹
IQD = Irakse dinar||0
IRR = Iranse rial||0
ISK = Yslandse kroon||0
ITL = Italiaanse lier||0|1
JMD = Jamaikaanse dollar
JOD = Jordaniese dinar||3
JPY = Japannese jen|¥|0
KES = Keniaanse sjieling
KGS = Kirgisiese som
KHR = Kambodjaanse riel
KMF = Comoriese frank||0
KPW = Noord-Koreaanse won||0
KRW = Suid-Koreaanse won|₩|0
KWD = Koeweitse dinar||3
KYD = Cayman-eilande dollar|$
KZT = Kazakse tenge|₸
LAK = Laosiaanse kip||0
LBP = Lebanese pond||0
LKR = Sri Lankaanse roepee
LRD = Liberiese dollar
LSL = Lesotho loti
LTL = Litause litas
LVL = Lettiese lats|||1
LYD = Libiese dinar||3
MAD = Marokkaanse dirham
MDL = Moldowiese leu
MGA = Malgassiese ariary||0
MKD = Macedoniese denar
MMK = Myanma kyat||0
MNT = Mongoolse toegrik||0
MOP = Macaose pataca
MRO = Mauritaniese ouguiya||0
MUR = Mauritiaanse rupee||0
MVR = Malediviese rufia
MWK = Malawiese kwacha
MXN = Meksikaanse peso|$
MYR = Maleisiese ringgit
MZM = Mosambiekse metical (1980–2006)|||1
MZN = Mosambiekse metical
NAD = Namibiese dollar|$
NGN = Nigeriese naira
NIO = Nicaraguaanse córdoba
NOK = Noorse kroon
NPR = Nepalese roepee
NZD = Nieu-Seeland dollar|$
OMR = Omaanse rial||3
PAB = Panamese balboa
PEN = Peruaanse nuwe sol
PGK = Papoease kina
PHP = Filippynse peso
PKR = Pakistanse roepee||0
PLN = Poolse zloty
PYG = Paraguaanse guarani|₲|0
QAR = Katarese rial
RON = Roemeense leu
RSD = Serbiese dinar||0
RUB = Russiese roebel
RWF = Rwandiese frank||0
SAR = Saoedi-Arabiese riyal
SBD = Salomonseilande dollar|$
SCR = Seychellese rupee
SDG = Soedannese pond
SDP = Soedannese pond (1957–1998)|||1
SEK = Sweedse kroon
SGD = Singapoer-dollar|$
SHP = Sint Helena pond
SLL = Sierra Leonese leone||0
SOS = Somaliese sjieling||0
SRD = Surinaamse dollar
SSP = Suid-Soedanese pond|£
STD = São Tomé en Príncipe dobra||0
SYP = Siriese pond||0
SZL = Swazilandse lilangeni
THB = Thaise baht|฿
TJS = Tadjikse roebel
TMT = Toerkmeense manat
TND = Tunisiese dinar||3
TOP = Tongaanse pa'anga
TRL = Turkse lier (1922–2005)||0|1
TRY = Turkse lier
TTD = Trinidad en Tobago dollar|$
TWD = Nuwe Taiwanese dollar|NT$
TZS = Tanzaniese sjieling||0
UAH = Oekraïnse hriwna|₴
UGX = Ugandese sjieling||0
USD = Amerikaanse dollar|$
UYU = Uruguaanse peso
UZS = Oezbekiese som||0
VEF = Venezolaanse bolivar
VND = Viëtnamese dong|₫|0
VUV = Vanuatu vatu||0
WST = Samoaanse tala
XAF = CFA frank BEAC|FCFA|0
XCD = Oos-Karibbiese dollar|EC$
XOF = CFA frank BCEAO|CFA|0
XPF = CFP-frank|CFPF|0
XXX = Onbekende geldeenheid|||1
YER = Jemenitiese rial||0
ZAR = Suid-Afrikaanse rand|R
ZMK = Zambiese kwacha (1968–2012)||0|1
ZMW = Zambiese kwacha
ZWD = Zimbabwiese dollar||0|1
