# 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-26 21:43:57 +0100 (Wed, 26 Feb 2014) $
#  number=$Revision: 9813 $
#  type=sw
AED = dirham ya Falme za Kiarabu
AFN = Afghani ya Afuganistani||0
ALL = Lek ya Albania||0
AMD = Dram ya Armenia||0
ANG = Guilder ya Antili za Kiholanzi
AOA = kwanza ya Angola
ARS = Peso ya Ajentina
AUD = dola ya Australia|$
AWG = Florin ya Aruba
AZN = Manat ya Azebaijan
BAM = Mark ya Bosnia na Hezegovina Inayoweza Kubadilishwa
BBD = Dola ya Barbados
BDT = Taka ya Bangladesh|৳
BGN = Lev ya Bulgaria
BHD = dinari ya Bahareni||3
BIF = faranga ya Burundi||0
BMD = Dola ya Bermuda|$
BND = Dola ya Brunei
BOB = Boliviano ya Bolivia
BRL = Real ya Brazil|R$
BSD = Dola ya Bahamas|$
BTN = Ngultrum ya Bhutan
BWP = pula ya Botswana
BYR = Ruble ya Belarusi||0
BZD = Dola ya Belize|$
CAD = dola ya Kanada|CA$
CDF = faranga ya Kongo
CHF = faranga ya Uswisi
CLP = Peso ya Chile|$|0
CNY = yuan Renminbi ya China|¥
COP = Peso ya Kolombia||0
CRC = Colon ya Kostarika||0
CUC = Peso ya Cuba Inayoweza Kubadilishwa
CUP = Peso ya Cuba|$
CVE = eskudo ya Kepuvede
CZK = Koruna ya Jamhuri ya Cheki
DJF = faranga ya Jibuti||0
DKK = Krone ya Denmaki
DOP = Peso ya Dominika|$
DZD = dinari ya Aljeria
EGP = pauni ya Misri
ERN = nakfa ya Eritrea
ETB = bir ya Uhabeshi
EUR = yuro|€
FJD = Dola ya Fiji
FKP = Pauni ya Visiwa vya Falkland
GBP = pauni ya Uingereza|£
GEL = Lari ya Georgia
GHC = sedi ya Ghana|||1
GHS = Cedi ya Ghana
GIP = Pauni ya Gibraltar|£
GMD = dalasi ya Gambia
GNF = Franc ya Guinea||0
GNS = faranga ya Gine|||1
GTQ = Quetzal ya Guatemala
GYD = Dola ya Guyana||0
HKD = Dola ya Hong Kong|$
HNL = Lempira ya Hondurasi
HRK = Kuna ya Kroeshia
HTG = Gourde ya Haiti
HUF = Forint ya Hangaria||0
IDR = Rupiah ya Indonesia||0
ILS = Sheqel Mpya ya Israeli|₪
INR = rupia ya India|₹
IQD = Dinari ya Irak||0
IRR = Rial ya Iran||0
ISK = Krona ya Isilandi||0
JMD = Dola ya Jamaica
JOD = Dinar ya Yordani||3
JPY = sarafu ya Kijapani|¥|0
KES = shilingi ya Kenya|Ksh
KGS = Som ya Kirigistani
KHR = Riel ya Kambodia
KMF = faranga ya Komoro||0
KPW = Won ya Korea Kaskazini||0
KRW = Won ya Korea Kusini|₩|0
KWD = Dinar ya Kuwait||3
KYD = Dola ya Visiwa vya Cayman|$
KZT = Tenge ya Kazakistani|₸
LAK = Kip ya Laosi||0
LBP = Pauni ya Lebanon||0
LKR = Rupee ya Sri Lanka
LRD = dola ya Liberia
LSL = loti ya Lesoto
LTL = Litas ya Lithuania
LVL = Lats ya Lativia|||1
LYD = dinari ya Libya||3
MAD = dirham ya Moroko
MDL = Leu ya Moldova
MGA = faranga ya Bukini||0
MKD = Denar ya Masedonia
MMK = Kyat ya Myama||0
MNT = Tugrik ya Mongolia||0
MOP = Pataca ya Macau
MRO = ugwiya ya Moritania||0
MUR = rupia ya Morisi||0
MVR = Rufiyaa ya Maldivi
MWK = kwacha ya Malawi
MXN = Peso ya Meksiko|$
MYR = Ringgit ya Malaysia
MZM = metikali ya Msumbiji (1980–2006)|||1
MZN = Metikali ya Msumbiji
NAD = dola ya Namibia|$
NGN = naira ya Nijeria
NIO = Kodoba ya Nikaragua
NOK = Krone ya Norwe
NPR = Rupee ya Nepali
NZD = Dola ya Nyuzilandi|$
OMR = Rial ya Oman||3
PAB = Balboa ya Panama
PEN = Nuevo Sol ya Peru
PGK = Kina ya Papua New Guinea
PHP = Peso ya Ufilipino
PKR = Rupee ya Pakistan||0
PLN = Zloty ya Polandi
PYG = Guarani ya Paragwai|₲|0
QAR = Rial ya Katari
RON = Leu ya Romania
RSD = Dinar ya Serbia||0
RUB = Ruble ya Urusi
RWF = faranga ya Rwanda||0
SAR = riyal ya Saudia
SBD = Dola ya Visiwa vya Solomon|$
SCR = rupia ya Shelisheli
SDG = dinari ya Sudani
SDP = pauni ya Sudani|||1
SEK = Krona ya Uswidi
SGD = Dola ya Singapuri|$
SHP = pauni ya Santahelena
SLL = leoni||0
SOS = shilingi ya Somalia||0
SRD = Dola ya Suriname
SSP = Pauni ya Sudani Kusini|£
STD = dobra ya Sao Tome na Principe||0
SYP = Pauni ya Syria||0
SZL = lilangeni
THB = Baht ya Tailandi|฿
TJS = Somoni ya Tajikistani
TMT = Manat ya Turukimenistani
TND = dinari ya Tunisia||3
TOP = Paʻanga ya Tonga
TRY = Lira ya Uturuki
TTD = Dola ya Trinidad na Tobago|$
TWD = Dola ya Taiwan|NT$
TZS = shilingi ya Tanzania|TSh|0
UAH = Hryvnia ya Ukrania|₴
UGX = shilingi ya Uganda||0
USD = dola ya Marekani|$
UYU = Peso ya Urugwai
UZS = Som ya Uzibekistani||0
VEF = Bolivar ya Venezuela
VND = Dong ya Kivietinamu|₫|0
VUV = Vatu ya Vanuatu||0
WST = Tala ya Samoa
XAF = faranga CFA BEAC|FCFA|0
XCD = Dola ya Karibea ya Mashariki|EC$
XOF = faranga CFA BCEAO|CFA|0
XPF = Franc ya CFP|CFPF|0
XXX = Fedha Isiyojulikana|||1
YER = Rial ya Yemen||0
ZAR = randi ya Afrika Kusini
ZMK = kwacha ya Zambia (1968–2012)||0|1
ZMW = kwacha ya Zambia
ZWD = dola ya Zimbabwe||0|1
