# 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=ksh
AED = de vereineschte arraabesche Emiraate ier Dirham
AFN = Afjahni||0
ALL = albaanesche Lek||0
AMD = armeenesche Dram||0
ANG = neederlängsch antillesche Jullde
AOA = angjolaanesche Kwansa
ARS = ajentiinesche Peeso
AUD = austraalesche Dollaa|$
AWG = arubesche Florin
AZM = Asserbaidschaani Manat (1993–2006)|||1
AZN = Asserbaidschaani Manat
BAM = ömtuuschbaa Mark us Boßnije un dä Hächejovvina
BBD = Barbados-Dollaa
BDT = Taka us Bangladäsch|৳
BGN = buljaaresche Lev
BHD = Bachrainesche Denaa||3
BIF = burundesche Frang||0
BMD = Bermuuda-Dollaa|$
BND = Brunei-Dollaa
BOB = Bollivijano
BRL = brasilljaanesche Real|R$
BSD = bahama'sche Dollaa|$
BTN = bhutanesesche Ngultrum
BWP = Pula us Bozwaana
BYR = wiißrußesche Rubel||0
BZD = belizjaanesche Dollaa|$
CAD = kannaadesche Dollaa|CA$
CDF = kongjoleesesche Frang
CHF = schweijzer Fränkli
CLP = schileenesche Peeso|$|0
CNY = schineesesche Yuan Renminbi|¥
COP = kolumbesche Peso||0
CRC = koßtarikaanesche Colón||0
CUC = ömtuuschbaa kubaanesche Pesos
CUP = kubaanesche Peesos|$
CVE = kapverdesche Eskuudos
CZK = tschäschesche Kruhne
DJF = Frang uß Dschibuti||0
DKK = dänesche Kruhne
DOP = dommenikaanesche Peesos|$
DZD = aljeresche Denaa
EEK = Äßnesche Kruhne|||1
EGP = äjiptesche Pongk
ERN = Nafka uß Erritreja
ETB = ätejoopesche Birr
EUR = Euro|€
FJD = Fidschi-Dollaa
FKP = Pongk vun de Falkland-Enselle
GBP = brittesche £|£
GEL = jeorjesche Lari
GHS = janaaesche Cedi
GIP = jibraltaa'sche Pongk|£
GMD = jambesche Dalasi
GNF = Jineea-Frang||0
GTQ = juatemalesche Quetzal
GYD = Juaana-Dollaa||0
HKD = Hongkong-Dollaa|$
HNL = hondureanesche Lempira
HRK = krowaatesche Kuna
HTG = haiitesche Gourde
HUF = unjarresche Forint||0
IDR = indoneesesche Ruupije||0
ILS = ißraeelesche Schekel|₪
INR = indesche Ruupije|Rs.
IQD = iraakesche Denaa||0
IRR = persesche Rial||0
ISK = ißländesche Kruhne||0
JMD = jamaikaanesche Dollaa
JOD = Jordaanesche Dollaa||3
JPY = japaanesche Jen|¥|0
KES = Kenjaanesche Schillinge
KGS = kirjiisesche Som
KHR = kambodschaanesche Riel
KMF = kommooresche Frang||0
KPW = noodkorejaansche Won||0
KRW = söödkorejaansche Won|₩|0
KWD = kuwaitesche Denaa||3
KYD = Kaimann-Dollaa|$
KZT = kasakesche Tenge|₸
LAK = loaatesche Kip||0
LBP = libaneesesche Pongk||0
LKR = schrilankesche Ruupije
LRD = liberijaanesche Dollaa
LSL = lesoothesche Loti
LTL = littouesche Litas
LVL = lättesche Lats|||1
LYD = libesche Denaa||3
MAD = marrokaanesche Dirhamm
MDL = moldaavesche Leu
MGA = madajaskesche Ariary||0
MKD = mazedoonesche Denaa
MMK = burmeesesche Kyat||0
MNT = mongjoolesche Tugrik||0
MOP = makaneesesche Pataca
MRO = mauretanesche Ouguiya||0
MUR = maurizjahnesche Ruupije||0
MVR = mallediivesche Rufiyaa
MWK = malaawesche Kwache
MXN = mexekaanesche Peeso|$
MYR = malaisesche Ringgit
MZM = mosambikaanesche Metical (1980–2006)|||1
MZN = mossambikaanesche Metical
NAD = namiibesche Dollaa|$
NGN = nijerijaanesche Naira
NIO = nikarajaanesche Córdoba
NOK = norrweejesche Kruhne
NPR = nepaleesesche Ruupije
NZD = neuseeländesche Dollaa|$
OMR = ommaanesche Rijal||3
PAB = pannameesesche Balboa
PEN = perruaanesche Nuevo Sol
PGK = papua neujinejaanesche Kina
PHP = fillipiinesche Pesos
PKR = pakestaanesche Ruupije||0
PLN = polnesche Złoty
PYG = parajuaanesche Juarani|₲|0
QAR = kataaresche Rijal
ROL = romäänesche Leu (1952–2006)|||1
RON = romäänesche Leu
RSD = särbesche Denaare||0
RUB = russesche Ruubel
RWF = ruandesche Frang||0
SAR = saudesche Rijal
SBD = solomonesche Dollaa|$
SCR = seischellesche Ruupije
SDG = sudaneesesche Pongk
SEK = schweedesche Kruhne
SGD = singjapurejaanesche Dollaa|$
SHP = Zint-Hellena-Pongk
SKK = ßlovaakesche Kruhne|||1
SLL = ẞjärra-lejoneesesche Leone||0
SOS = somaalesche Schillenge||0
SRD = sürinameesesche Dollaa
SSP = södsudaneesesche Pongk|£
STD = Dobra vun São Tomé un Príncipe||0
SVC = asalvadorejaanesche Cosan|||1
SYP = süüresche Pund||0
SZL = swasiländesche Lilangeni
THB = tailändesche Baht|฿
TJS = tadschikißtaanesche Somoni
TMM = turkmeneßtaanesche Manat (1993–2009)||0|1
TMT = turkmeneßtaanesche Manat
TND = tuneesesche Denaa||3
TOP = tongjanes Paʻangache
TRY = törkesche Liire
TTD = Dollaa uß Trinidad un Tobääjo|$
TWD = neu taiwaneesesche Dollaa|NT$
TZS = tansaanesche Schillenge||0
UAH = ukraijnesche Hryvnia|₴
UGX = ujandesche Schillenge||0
USD = ammärrikaanesche Dollaa|$
UYU = urrujuwaische Peeso
UZS = ußbeekesche Som||0
VEF = venezuelaanesche Bolívar
VND = vijätnammeesesche Dong|₫|0
VUV = vanuatesche Vatu||0
WST = samowaanesche Tala
XAF = Kmmeruhner Frang|FCFA|0
XAG = Sellver|||1
XAU = Jold|||1
XCD = oß-karribbesche Dollaa|EC$
XFO = franzüüsesche Joldfranke|||1
XOF = Frang uß de Älfebeinköß|CFA|0
XPD = Palladijum|||1
XPF = polineesesche Frang|CFPF|0
XPT = Plaatin|||1
XTS = Währong zum Prööfe|||1
XXX = onbikannte Währong|||1
YER = jemenitesche Rijal||0
ZAR = södaffrekaanesche Rand
ZMK = sambesche Kwacha (1968–2012)||0|1
ZMW = sambesche Kwacha
ZWD = simbabwesche Dollaa (1980–2008)||0|1
ZWL = simbabwesche Dollaa (2009)|||1
