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$'] +}; |
