diff options
Diffstat (limited to 'i18n/closure/currencySymbols.js')
| -rw-r--r-- | i18n/closure/currencySymbols.js | 385 | 
1 files changed, 385 insertions, 0 deletions
| diff --git a/i18n/closure/currencySymbols.js b/i18n/closure/currencySymbols.js new file mode 100644 index 00000000..3cbd6d0c --- /dev/null +++ b/i18n/closure/currencySymbols.js @@ -0,0 +1,385 @@ +// Copyright 2009 The Closure Library Authors. All Rights Reserved. +// +// 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. + + +/** + * @fileoverview A utility to get better currency format pattern. + * + * This module implement a new currency format representation model. It + * provides 3 currency representation forms: global, portable and local. Local + * format is the most popular format people use to represent currency in its + * circulating country without worrying about how it should be distinguished + * from other currencies.  Global format is a formal representation in context + * of multiple currencies in same page, it is ISO 4217 currency code. Portable + * format is a compromise between global and local. It looks similar to how + * people would like to see how their currencies is being represented in other + * media. While at the same time, it should be distinguishable to world's + * popular currencies (like USD, EUR) and currencies somewhat relevant in the + * area (like CNY in HK, though native currency is HKD). There is no guarantee + * of uniqueness. + * + */ + + +goog.provide('goog.i18n.currency'); + + +/** + * The mask of precision field. + * @private + */ +goog.i18n.currency.PRECISION_MASK_ = 0x07; + + +/** + * If this flag is set, it means the currency sign should position before + * number. + * @private + */ +goog.i18n.currency.POSITION_FLAG_ = 0x08; + + +/** + * Should a space to inserted between number and currency sign. + * @private + */ +goog.i18n.currency.SPACE_FLAG_ = 0x20; + + +/** + * This function will add tier2 currency support. Be default, only tier1 + * (most popular currencies) are supportted. If an application really need + * to support some of the rarely used currency, it should call this function + * before any other functions in this namespace. + */ +goog.i18n.currency.addTier2Support = function() { +  for (var key in goog.i18n.currency.CurrencyInfoTier2) { +    goog.i18n.currency.CurrencyInfo[key] = +        goog.i18n.currency.CurrencyInfoTier2[key]; +  } +}; + + +/** + * Global currency pattern always uses ISO-4217 currency code as prefix. Local + * currency sign is added if it is different from currency code. Each currency + * is unique in this form. The negative side is that ISO code looks weird in + * some countries as poeple normally do not use it. Local currency sign + * alleviate the problem, but also make it a little verbose. + * + * @param {string} currencyCode ISO-4217 3-letter currency code. + * @return {string} Global currency pattern string for given currency. + */ +goog.i18n.currency.getGlobalCurrencyPattern = function(currencyCode) { +  var info = goog.i18n.currency.CurrencyInfo[currencyCode]; +  var patternNum = info[0]; +  if (currencyCode == info[1]) { +    if ((patternNum & goog.i18n.currency.POSITION_FLAG_) == 0) { +      patternNum |= goog.i18n.currency.SPACE_FLAG_; +    } +    return goog.i18n.currency.getCurrencyPattern_(patternNum, info[1]); +  } +  return currencyCode + ' ' + +      goog.i18n.currency.getCurrencyPattern_(patternNum, info[1]); +}; + + +/** + * Return global currency sign string for those applications + * that want to handle currency sign themselves. + * + * @param {string} currencyCode ISO-4217 3-letter currency code. + * @return {string} Global currency sign for given currency. + */ +goog.i18n.currency.getGlobalCurrencySign = function(currencyCode) { +  var info = goog.i18n.currency.CurrencyInfo[currencyCode]; +  if (currencyCode == info[1]) { +      return currencyCode; +  } +  return currencyCode + ' ' + info[1]; +}; + + +/** + * Local currency pattern is the most frequently used pattern in currency's + * native region. It does not care about how it is distinguished from other + * currencies. + * + * @param {string} currencyCode ISO-4217 3-letter currency code. + * @return {string} Local currency pattern string for given currency. + */ +goog.i18n.currency.getLocalCurrencyPattern = function(currencyCode) { +  var info = goog.i18n.currency.CurrencyInfo[currencyCode]; +  return goog.i18n.currency.getCurrencyPattern_(info[0], info[1]); +}; + + +/** + * Returns local currency sign string for those applications that need to + * handle currency sign separately. + * @param {string} currencyCode ISO-4217 3-letter currency code. + * @return {string} Local currency sign for given currency. + */ +goog.i18n.currency.getLocalCurrencySign = function(currencyCode) { +  return goog.i18n.currency.CurrencyInfo[currencyCode][1]; +}; + + +/** + * Portable currency pattern is a compromise between local and global. It is + * not a mere blend or mid-way between the two. Currency sign is chosen so that + * it looks familiar to native users. It also has enough information to + * distinguish itself from other popular currencies in its native region. + * In this pattern, currency sign symbols that has availability problem in + * popular fonts are also avoided. + * + * @param {string} currencyCode ISO-4217 3-letter currency code. + * @return {string} Portable currency pattern string for given currency. + */ +goog.i18n.currency.getPortableCurrencyPattern = function(currencyCode) { +  var info = goog.i18n.currency.CurrencyInfo[currencyCode]; +  return goog.i18n.currency.getCurrencyPattern_(info[0], info[2]); +}; + + +/** + * Return portable currency sign string for those applications that need to + * handle currency sign themselves. + * @param {string} currencyCode ISO-4217 3-letter currency code. + * @return {string} Portable currency sign for given currency. + */ +goog.i18n.currency.getPortableCurrencySign = function(currencyCode) { +  return goog.i18n.currency.CurrencyInfo[currencyCode][2]; +}; + + +/** + * This function returns the default currency sign position. Some application + * may want to handle currency sign and currency amount separately. This + * function can be used in such situation to position the currency sign + * relative to amount field correctly. + * @param {string} currencyCode ISO-4217 3-letter currency code. + * @return {boolean} true if currency should be positioned before amount field. + */ +goog.i18n.currency.isPrefixSignPosition = function(currencyCode) { +  return (goog.i18n.currency.CurrencyInfo[currencyCode][0] & +          goog.i18n.currency.POSITION_FLAG_) == 0; +}; + + +/** + * This function construct the currency pattern. Currency sign is provided. The + * pattern information is encoded in patternNum. + * + * @param {number} patternNum Encoded pattern number that has + *     currency pattern information. + * @param {string} sign the currency sign that will be used in pattern. + * + * @return {string} currency pattern string. + * @private + */ +goog.i18n.currency.getCurrencyPattern_ = function(patternNum, sign) { +  var strParts = ['#,##0']; +  var precision = patternNum & goog.i18n.currency.PRECISION_MASK_; +  if (precision > 0) { +    strParts.push('.'); +    for (var i = 0; i < precision; i++) { +      strParts.push('0'); +    } +  } +  if ((patternNum & goog.i18n.currency.POSITION_FLAG_) == 0) { +    strParts.unshift((patternNum & goog.i18n.currency.SPACE_FLAG_) ? +                     "' " : "'"); +    strParts.unshift(sign); +    strParts.unshift("'"); +  } else { +    strParts.push((patternNum & goog.i18n.currency.SPACE_FLAG_) ? " '" : "'", +                  sign, "'"); +  } +  return strParts.join(''); +}; + + +/** + * Tier 1 currency information. + * @type {!Object.<!Array>} + */ +goog.i18n.currency.CurrencyInfo = { +  'AED': [2, '\u062F\u002e\u0625', 'DH'], +  'ARS': [2, '$', 'AR$'], +  'AUD': [2, '$', 'AU$'], +  'BDT': [2, '\u09F3', 'Tk'], +  'BRL': [2, 'R$', 'R$'], +  'CAD': [2, '$', 'C$'], +  'CHF': [2, 'Fr.', 'CHF'], +  'CLP': [0, '$', 'CL$'], +  'CNY': [2, '¥', 'RMB¥'], +  'COP': [2, '$', 'COL$'], +  'CRC': [2, '\u20a1', 'CR₡'], +  'CUP': [2, '$', '$MN'], +  'CZK': [10, 'Kč', 'Kč'], +  'DKK': [26, 'kr', 'kr'], +  'DOP': [2, '$', 'RD$'], +  'EGP': [2, '£', 'LE'], +  'EUR': [26, '€', '€'], +  'GBP': [2, '£', 'GB£'], +  'HKD': [2, '$', 'HK$'], +  'ILS': [10, '\u20AA', 'IL₪'], +  'INR': [2, 'Rs', 'Rs'], +  'ISK': [10, 'kr', 'kr'], +  'JMD': [2, '$', 'JA$'], +  'JPY': [0, '¥', 'JP¥'], +  'KRW': [0, '\u20A9', 'KR₩'], +  'LKR': [2, 'Rs', 'SLRs'], +  'MNT': [2, '\u20AE', 'MN₮'], +  'MXN': [2, '$', 'Mex$'], +  'MYR': [2, 'RM', 'RM'], +  'NOK': [26, 'kr', 'NOkr'], +  'PAB': [2, 'B/.', 'B/.'], +  'PEN': [2, 'S/.', 'S/.'], +  'PHP': [2, 'P', 'PHP'], +  'PKR': [2, 'Rs.', 'PKRs.'], +  'RUB': [10, 'руб', 'руб'], +  'SAR': [2, '\u0633\u002E\u0631', 'SR'], +  'SEK': [10, 'kr', 'kr'], +  'SGD': [2, '$', 'S$'], +  'THB': [2, '\u0e3f', 'THB'], +  'TRY': [2, 'YTL', 'YTL'], +  'TWD': [2, 'NT$', 'NT$'], +  'USD': [2, '$', 'US$'], +  'UYU': [2, '$', 'UY$'], +  'VND': [10, '\u20AB', 'VN₫'], +  'YER': [2, 'YER', 'YER'], +  'ZAR': [2, 'R', 'ZAR'] +}; + + +/** + * Tier 2 currency information. + * @type {!Object.<!Array>} + */ +goog.i18n.currency.CurrencyInfoTier2 = { +  'AFN': [18, '\u060b', 'AFN'], +  'ALL': [2, 'Lek', 'Lek'], +  'AMD': [10, '\u0564\u0580\u002e', 'dram'], +  'ANG': [2, '\u0083', 'NAƒ'], +  'AOA': [2, 'Kz', 'Kz'], +  'AWG': [2, 'ƒ', 'Afl.'], +  'AZN': [2, 'm', 'man'], +  'BAM': [18, 'КМ', 'KM'], +  'BBD': [2, '$', 'Bds$'], +  'BGN': [10, '\u043b\u0432', 'лв'], +  'BHD': [3, '\u0628\u002e\u062f\u002e', 'BD'], +  'BIF': [0, 'FBu', 'FBu'], +  'BMD': [2, '$', 'BD$'], +  'BND': [2, '$', 'B$'], +  'BOB': [2, 'B$', 'B$'], +  'BSD': [2, '$', 'B$'], +  'BTN': [2, 'Nu.', 'Nu.'], +  'BWP': [2, 'P', 'pula'], +  'BYR': [0, 'Br', 'Br'], +  'BZD': [2, '$', 'BZ$'], +  'CDF': [2, 'F', 'CDF'], +  'CVE': [2, '$', 'Esc'], +  'DJF': [0, 'Fdj', 'Fdj'], +  'DZD': [2, '\u062f\u062C', 'DA'], +  'EEK': [10, 'EEK', 'EEK'], +  'ERN': [2, 'Nfk', 'Nfk'], +  'ETB': [2, 'Br', 'Br'], +  'FJD': [2, '$', 'FJ$'], +  'FKP': [2, '£', 'FK£'], +  'GEL': [2, 'GEL', 'GEL'], +  'GHS': [2, '\u20B5', 'GHS¢'], +  'GIP': [2, '£', 'GI£'], +  'GMD': [2, 'D', 'GMD'], +  'GNF': [0, 'FG', 'FG'], +  'GTQ': [2, 'Q', 'GTQ'], +  'GYD': [2, '$', 'GY$'], +  'HNL': [2, 'L', 'HNL'], +  'HRK': [2, 'kn', 'kn'], +  'HTG': [2, 'G', 'HTG'], +  'HUF': [10, 'Ft', 'Ft'], +  'IDR': [2, 'Rp', 'Rp'], +  'IQD': [3, '\u0639\u062F', 'IQD'], +  'IRR': [2, '\ufdfc', 'IRR'], +  'JOD': [3, 'JOD', 'JOD'], +  'KES': [2, 'KSh', 'KSh'], +  'KGS': [2, 'som', 'som'], +  'KHR': [10, '\u17DB', 'KHR'], +  'KMF': [0, 'KMF', 'KMF'], +  'KPW': [2, '\u20A9', 'KPW'], +  'KWD': [3, '\u062F\u002e\u0643', 'KWD'], +  'KYD': [2, '$', 'CI$'], +  'KZT': [10, 'KZT', 'KZT'], +  'LAK': [2, '\u20AD', 'LA₭'], +  'LBP': [2, '\u0644\u002e\u0644', 'LBP'], +  'LRD': [2, '$', 'L$'], +  'LSL': [2, 'L', 'LSL'], +  'LTL': [10, 'Lt', 'Lt'], +  'LVL': [10, 'Ls', 'Ls'], +  'LYD': [3, '\u0644\u002e\u062F', 'LD'], +  'MAD': [2, '\u0645\u002E\u062F\u002E', 'MAD'], +  'MDL': [2, 'MDL', 'MDL'], +  'MGA': [1, 'MGA', 'MGA'], +  'MKD': [2, 'MKD', 'MKD'], +  'MMK': [2, 'K', 'MMK'], +  'MOP': [2, 'MOP$', 'MOP$'], +  'MRO': [1, 'UM', 'UM'], +  'MUR': [2, 'Rs', 'MURs'], +  'MVR': [2, 'Rf', 'MRF'], +  'MWK': [2, 'MK', 'MK'], +  'MZN': [2, 'MTn', 'MTn'], +  'NAD': [2, '$', 'N$'], +  'NGN': [2, '\u20A6', 'NG₦'], +  'NIO': [2, 'C$', 'C$'], +  'NPR': [2, 'Rs', 'NPRs'], +  'NZD': [2, '$', 'NZ$'], +  'OMR': [3, '\u0639\u002E\u062F\u002E', 'OMR'], +  'PGK': [2, 'K', 'PGK'], +  'PLN': [10, 'zł', 'zł'], +  'PYG': [0, '\u20b2', 'PYG'], +  'QAR': [2, '\u0642\u002E\u0631', 'QR'], +  'RON': [2, 'L', 'RON'], +  'RSD': [2, 'РС\u0414', 'RSD'], +  'RWF': [0, 'RF', 'RF'], +  'SBD': [2, '$', 'SI$'], +  'SCR': [2, 'SR', 'SCR'], +  'SDG': [2, 'SDG', 'SDG'], +  'SHP': [2, '£', 'SH£'], +  'SKK': [10, 'Sk', 'Sk'], +  'SLL': [2, 'Le', 'Le'], +  'SOS': [2, 'So. Sh.', 'So. Sh.'], +  'SRD': [2, '$', 'SR$'], +  'STD': [2, 'Db', 'Db'], +  'SYP': [18, 'SYP', 'SYP'], +  'SZL': [2, 'L', 'SZL'], +  'TJS': [2, 'TJS', 'TJS'], +  'TMM': [2, 'm', 'TMM'], +  'TND': [3, '\u062F\u002e\u062A ', 'DT'], +  'TOP': [2, 'T$', 'T$'], +  'TTD': [2, '$', 'TT$'], +  'TZS': [10, 'TZS', 'TZS'], +  'UAH': [10, '\u20B4', 'грн'], +  'UGX': [2, 'USh', 'USh'], +  'UZS': [2, 'UZS', 'UZS'], +  'VEF': [2, 'Bs.F', 'Bs.F'], +  'VUV': [0, 'Vt', 'Vt'], +  'WST': [2, 'WS$', 'WS$'], +  'XAF': [0, 'FCFA', 'FCFA'], +  'XCD': [2, '$', 'EC$'], +  'XOF': [0, 'CFA', 'CFA'], +  'XPF': [0, 'F', 'XPF'], +  'ZMK': [2, 'ZK', 'ZK'], +  'ZWL': [2, '$', 'ZW$'] +}; | 
