# 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: 2013-08-29 04:32:04 +0200 (Thu, 29 Aug 2013) $
#  number=$Revision: 9287 $
#  type=ln
AED = Dirihamɛ ya Lémila alabo
AOA = Kwanza ya Angóla
ARS = Peso y'Argentina
AUD = Dolarɛ ya Ositali|$
BHD = Dinarɛ ya Bahrɛnɛ||3
BIF = Falánga ya Burundi||0
BOB = Boliviano
BRL = Real ya Brazil|R$
BWP = Pula ya Botswana
CAD = Dolarɛ ya Kanadá|CA$
CDF = Falánga ya Kongó|FC
CHF = Falánga ya Swisɛ
CLP = Peso ya Shili|$|0
CNY = Yuanɛ Renminbi ya Sinɛ|¥
COP = Peso ya Kolombi||0
CRC = Colon ya Kosta Rika||0
CUP = Peso ya Kuba|$
CVE = Esikudo ya Kapevɛrɛ
CZK = Motolé Sheki
DJF = Falánga ya Dzibuti||0
DKK = Motolé ya Danemark
DOP = Peso Dominikani|$
DZD = Dinarɛ ya Alizeri
EGP = Paunɛ ya Ezípitɛ
ERN = Nakfa ya Elitlɛ
ETB = Birɛ ya Etsiópi
EUR = Ɛlɔ́|€
GBP = Paunɛ ya Angɛlɛtɛ́lɛ|£
GHC = Sedi ya Gana|||1
GHS = Cedi
GMD = Dalasi ya Gambi
GNF = Falánga ya Gine||0
GNS = Falánga ya Ginɛ|||1
HTG = Gurde
INR = Rupi ya Índɛ|Rs.
ISK = Motolé ya Islandi||0
JPY = Yeni ya Zapɔ|¥|0
KES = Shilingɛ ya Kenya
KMF = Falánga ya Komoro||0
LRD = Dolarɛ ya Liberya
LSL = Loti ya Lesóto
LTL = Litas ya Litwani
LVL = Lats ya Letoni|||1
LYD = Dinarɛ ya Libí||3
MAD = Dirihame ya Marokɛ
MGA = Falánga ya Madagasikarɛ||0
MRO = Ugwiya ya Moritani||0
MUR = Rupi ya Morisi||0
MWK = Kwasha ya Malawi
MXN = Peso ya Mexiko|$
MZM = Metikali ya Mozambiki|||1
NAD = Dolarɛ ya Namibi|$
NGN = Naira ya Nizerya
NOK = Motolé ya Norvej
PAB = Balboa
PEN = Sol Sika
PYG = Guarani|₲|0
RWF = Falánga ya Rwanda||0
SAR = Riyalɛ ya Alabi Sawuditɛ
SCR = Rupi ya Sɛshɛlɛ
SDG = Dinarɛ ya Sudá
SDP = Paunɛ ya Sudá|||1
SEK = Motolé ya Swédi
SHP = Paunɛ ya Sántu elena
SLL = Leonɛ||0
SOS = Shilingɛ ya Somali||0
STD = Dobra ya Sao Tomé mpé Presipe||0
SZL = Lilangeni
TND = Dinarɛ ya Tinizi||3
TZS = Shilingɛ ya Tanzani||0
UGX = Shilingɛ ya Uganda||0
USD = Dolarɛ ya Ameriki|$
XAF = Falánga CFA BEAC|FCFA|0
XOF = Falánga CFA BCEAO|CFA|0
ZAR = Randɛ ya Afríka Súdi
ZMK = Kwasha ya Zambi (1968–2012)||0|1
ZMW = Kwasha ya Zambi
ZWD = Dolarɛ ya Zimbabwɛ||0|1
