# 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=rn
AED = Idiramu ryo muri Leta Zunze Ubumwe z'Abarabu
AOA = Ikwanza ryo muri Angola
AUD = Idolari ryo muri Ositaraliya|$
BHD = Idinari ry'iribahireyini||3
BIF = Ifaranga ry'Uburundi|FBu|0
BWP = Ipula ryo muri Botswana
CAD = Idolari rya Kanada|CA$
CDF = Ifaranga rya Kongo
CHF = Ifaranga ry'Ubusuwisi
CNY = Iyuwani ryo mu Bushinwa|¥
CVE = Irikaboveridiyano ryo muri Esikudo
DJF = Ifaranga ryo muri Jibuti||0
DZD = Idinari ryo muri Alijeriya
EGP = Ipawundi rya Misiri
ERN = Irinakufa ryo muri Eritereya
ETB = Ibiri ryo muri Etiyopiya
EUR = Iyero|€
GBP = Ipawundi ryo mu Bwongereza|£
GHC = Icedi ryo muri Gana|||1
GMD = Idalasi ryo muri Gambiya
GNS = Ifaranga ryo muri Gineya|||1
INR = Irupiya ryo mu Buhindi|Rs.
JPY = Iyeni ry'Ubuyapani|¥|0
KES = Ishilingi rya Kenya
KMF = Ifaranga rya Komore||0
LRD = Idolari rya Liberiya
LSL = Iloti ryo muro Lesoto
LYD = Idinari rya Libiya||3
MAD = Idiramu ryo muri Maroke
MGA = Iriyari ryo muri Madagasikari||0
MRO = Ugwiya ryo muri Moritaniya||0
MUR = Irupiya ryo mu birwa bya Morise||0
MWK = Ikwaca ryo muri Malawi
MZM = Irimetikali ryo muri Mozambike|||1
NAD = Idolari rya Namibiya|$
NGN = Inayira ryo muri Nijeriya
RWF = Ifaranga ry'u Rwanda||0
SAR = Iriyari ryo muri Arabiya Sawudite
SCR = Irupiya ryo mu birwa bya Sayisheli
SDG = Ipawundi rya Sudani
SHP = Ipawundi rya Sente Helena
SLL = Ilewone||0
SOS = Ishilingi ryo muri Somaliya||0
STD = Idobura ryo muri Sawotome na Perensipe||0
SZL = Ililangeni
TND = Idinari ryo muri Tuniziya||3
TZS = Ishilingi rya Tanzaniya||0
UGX = Ishilingi ry'Ubugande||0
USD = Idolari ry'abanyamerika|$
ZAR = Irandi ryo muri Afurika y'Epfo
ZMK = Ikwaca ryo muri Zambiya (1968–2012)||0|1
ZMW = Ikwaca ryo muri Zambiya
ZWD = Idolari ryo muri Zimbabwe||0|1
