decred.org/dcrdex@v1.0.5/client/webserver/site/src/js/locales.ts (about) 1 import State from './state' 2 import { postJSON } from './http' 3 4 type Locale = Record<string, string> 5 6 export const ID_NO_PASS_ERROR_MSG = 'NO_PASS_ERROR_MSG' 7 export const ID_NO_APP_PASS_ERROR_MSG = 'NO_APP_PASS_ERROR_MSG' 8 export const ID_SET_BUTTON_BUY = 'SET_BUTTON_BUY' 9 export const ID_SET_BUTTON_SELL = 'SET_BUTTON_SELL' 10 export const ID_OFF = 'OFF' 11 export const ID_MAX = 'MAX' 12 export const ID_READY = 'READY' 13 export const ID_NO_WALLET = 'NO_WALLET' 14 export const ID_DISABLED_MSG = 'DISABLED_MSG' 15 export const ID_WALLET_SYNC_PROGRESS = 'WALLET_SYNC_PROGRESS' 16 export const ID_HIDE_ADDITIONAL_SETTINGS = 'HIDE_ADDITIONAL_SETTINGS' 17 export const ID_SHOW_ADDITIONAL_SETTINGS = 'SHOW_ADDITIONAL_SETTINGS' 18 export const ID_BUY = 'BUY' 19 export const ID_SELL = 'SELL' 20 export const ID_NOT_SUPPORTED = 'NOT_SUPPORTED' 21 export const ID_VERSION_NOT_SUPPORTED = 'VERSION_NOT_SUPPORTED' 22 export const ID_CONNECTION_FAILED = 'CONNECTION_FAILED' 23 export const ID_ORDER_PREVIEW = 'ORDER_PREVIEW' 24 export const ID_CALCULATING = 'CALCULATING' 25 export const ID_ESTIMATE_UNAVAILABLE = 'ESTIMATE_UNAVAILABLE' 26 export const ID_NO_ZERO_RATE = 'NO_ZERO_RATE' 27 export const ID_NO_ZERO_QUANTITY = 'NO_ZERO_QUANTITY' 28 export const ID_TRADE = 'TRADE' 29 export const ID_NO_ASSET_WALLET = 'NO_ASSET_WALLET' 30 export const ID_EXECUTED = 'EXECUTED' 31 export const ID_BOOKED = 'BOOKED' 32 export const ID_CANCELING = 'CANCELING' 33 export const ID_PASSWORD_NOT_MATCH = 'PASSWORD_NOT_MATCH' 34 export const ID_ACCT_UNDEFINED = 'ACCT_UNDEFINED' 35 export const ID_KEEP_WALLET_PASS = 'KEEP_WALLET_PASS' 36 export const ID_NEW_WALLET_PASS = 'NEW_WALLET_PASS' 37 export const ID_LOT = 'LOT' 38 export const ID_LOTS = 'LOTS' 39 export const ID_UNKNOWN = 'UNKNOWN' 40 export const ID_EPOCH = 'EPOCH' 41 export const ID_ORDER_SUBMITTING = 'ORDER_SUBMITTING' 42 export const ID_SETTLING = 'SETTLING' 43 export const ID_NO_MATCH = 'NO_MATCH' 44 export const ID_CANCELED = 'CANCELED' 45 export const ID_REVOKED = 'REVOKED' 46 export const ID_WAITING_FOR_CONFS = 'WAITING_FOR_CONFS' 47 export const ID_NONE_SELECTED = 'NONE_SELECTED' 48 export const ID_REGISTRATION_FEE_SUCCESS = 'REGISTRATION_FEE_SUCCESS' 49 export const ID_API_ERROR = 'API_ERROR' 50 export const ID_ADD = 'ADD' 51 export const ID_CREATE = 'CREATE' 52 export const ID_SETUP_WALLET = 'SETUP_WALLET' 53 export const ID_WALLET_READY = 'WALLET_READY' 54 export const ID_CHANGE_WALLET_TYPE = 'CHANGE_WALLET_TYPE' 55 export const ID_KEEP_WALLET_TYPE = 'KEEP_WALLET_TYPE' 56 export const ID_WALLET_PENDING = 'WALLET_PENDING' 57 export const ID_SETUP_NEEDED = 'SETUP_NEEDED' 58 export const ID_SEND_SUCCESS = 'SEND_SUCCESS' 59 export const ID_RECONFIG_SUCCESS = 'RECONFIG_SUCCESS' 60 export const ID_RESCAN_STARTED = 'RESCAN_STARTED' 61 export const ID_NEW_WALLET_SUCCESS = 'NEW_WALLET_SUCCESS' 62 export const ID_WALLET_UNLOCKED = 'WALLET_UNLOCKED' 63 export const ID_SELLING = 'SELLING' 64 export const ID_BUYING = 'BUYING' 65 export const ID_WALLET_DISABLED_MSG = 'WALLET_DISABLED' 66 export const ID_WALLET_ENABLED_MSG = 'WALLET_ENABLED' 67 export const ID_ACTIVE_ORDERS_ERR_MSG = 'ACTIVE_ORDERS_ERR_MSG' 68 export const ID_AVAILABLE = 'AVAILABLE' 69 export const ID_LOCKED = 'LOCKED' 70 export const ID_IMMATURE = 'IMMATURE' 71 export const ID_FEE_BALANCE = 'FEE_BALANCE' 72 export const ID_CANDLES_LOADING = 'CANDLES_LOADING' 73 export const ID_DEPTH_LOADING = 'DEPTH_LOADING' 74 export const ID_INVALID_ADDRESS_MSG = 'INVALID_ADDRESS_MSG' 75 export const ID_TXFEE_UNSUPPORTED = 'TXFEE_UNSUPPORTED' 76 export const ID_TXFEE_ERR_MSG = 'TXFEE_ERR_MSG' 77 export const ID_ACTIVE_ORDERS_LOGOUT_ERR_MSG = 'ACTIVE_ORDERS_LOGOUT_ERR_MSG' 78 export const ID_INVALID_DATE_ERR_MSG = 'INVALID_DATE_ERR_MSG' 79 export const ID_NO_ARCHIVED_RECORDS = 'NO_ARCHIVED_RECORDS' 80 export const ID_DELETE_ARCHIVED_RECORDS_RESULT = 'DELETE_ARCHIVED_RECORDS_RESULT' 81 export const ID_ARCHIVED_RECORDS_PATH = 'ARCHIVED_RECORDS_PATH' 82 export const ID_DEFAULT = 'DEFAULT' 83 export const ID_ADDED = 'ADDED' 84 export const ID_DISCOVERED = 'DISCOVERED' 85 export const ID_UNSUPPORTED_ASSET_INFO_ERR_MSG = 'UNSUPPORTED_ASSET_INFO_ERR_MSG' 86 export const ID_LIMIT_ORDER = 'LIMIT_ORDER' 87 export const ID_LIMIT_ORDER_IMMEDIATE_TIF = 'LIMIT_ORDER_IMMEDIATE_TIF' 88 export const ID_MARKET_ORDER = 'MARKET_ORDER' 89 export const ID_CANCEL_ORDER = 'CANCEL_ORDER' 90 export const ID_MATCH_STATUS_NEWLY_MATCHED = 'MATCH_STATUS_NEWLY_MATCHED' 91 export const ID_MATCH_STATUS_MAKER_SWAP_CAST = 'MATCH_STATUS_MAKER_SWAP_CAST' 92 export const ID_MATCH_STATUS_TAKER_SWAP_CAST = 'MATCH_STATUS_TAKER_SWAP_CAST' 93 export const ID_MATCH_STATUS_MAKER_REDEEMED = 'MATCH_STATUS_MAKER_REDEEMED' 94 export const ID_MATCH_STATUS_REDEMPTION_SENT = 'MATCH_STATUS_REDEMPTION_SENT' 95 export const ID_MATCH_STATUS_REDEMPTION_CONFIRMED = 'MATCH_REDEMPTION_CONFIRMED' 96 export const ID_MATCH_STATUS_REVOKED = 'MATCH_STATUS_REVOKED' 97 export const ID_MATCH_STATUS_REFUNDED = 'MATCH_STATUS_REFUNDED' 98 export const ID_MATCH_STATUS_REFUND_PENDING = 'MATCH_STATUS_REFUND_PENDING' 99 export const ID_MATCH_STATUS_REDEEM_PENDING = 'MATCH_STATUS_REDEEM_PENDING' 100 export const ID_MATCH_STATUS_COMPLETE = 'MATCH_STATUS_COMPLETE' 101 export const ID_TAKER_FOUND_MAKER_REDEMPTION = 'TAKER_FOUND_MAKER_REDEMPTION' 102 export const ID_OPEN_WALLET_ERR_MSG = 'OPEN_WALLET_ERR_MSG' 103 export const ID_ORDER_ACCELERATION_FEE_ERR_MSG = 'ORDER_ACCELERATION_FEE_ERR_MSG' 104 export const ID_ORDER_ACCELERATION_ERR_MSG = 'ORDER_ACCELERATION_ERR_MSG' 105 export const ID_CONNECTED = 'CONNECTED' 106 export const ID_DISCONNECTED = 'DISCONNECTED' 107 export const ID_INVALID_CERTIFICATE = 'INVALID_CERTIFICATE' 108 export const ID_CONFIRMATIONS = 'CONFIRMATIONS' 109 export const ID_TAKER = 'TAKER' 110 export const ID_MAKER = 'MAKER' 111 export const ID_EMPTY_DEX_ADDRESS_MSG = 'EMPTY_DEX_ADDRESS_MSG' 112 export const ID_SELECT_WALLET_FOR_FEE_PAYMENT = 'SELECT_WALLET_FOR_FEE_PAYMENT' 113 export const ID_UNAVAILABLE = 'UNAVAILABLE' 114 export const ID_WALLET_SYNC_FINISHING_UP = 'WALLET_SYNC_FINISHING_UP' 115 export const ID_CONNECT_WALLET_ERR_MSG = 'CONNECTING_WALLET_ERR_MSG' 116 export const ID_REFUND_IMMINENT = 'REFUND_IMMINENT' 117 export const ID_REFUND_WILL_HAPPEN_AFTER = 'REFUND_WILL_HAPPEN_AFTER' 118 export const ID_AVAILABLE_TITLE = 'AVAILABLE_TITLE' 119 export const ID_LOCKED_TITLE = 'LOCKED_TITLE' 120 export const ID_IMMATURE_TITLE = 'IMMATURE_TITLE' 121 export const ID_SWAPPING = 'SWAPPING' 122 export const ID_BONDED = 'BONDED' 123 export const ID_LOCKED_BAL_MSG = 'LOCKED_BAL_MSG' 124 export const ID_IMMATURE_BAL_MSG = 'IMMATURE_BAL_MSG' 125 export const ID_LOCKED_SWAPPING_BAL_MSG = 'LOCKED_SWAPPING_BAL_MSG' 126 export const ID_LOCKED_BOND_BAL_MSG = 'LOCKED_BOND_BAL_MSG' 127 export const ID_RESERVES_DEFICIT = 'RESERVES_DEFICIT' 128 export const ID_RESERVES_DEFICIT_MSG = 'RESERVES_DEFICIT_MSG' 129 export const ID_BOND_RESERVES = 'BOND_RESERVES' 130 export const ID_BOND_RESERVES_MSG = 'BOND_RESERVES_MSG' 131 export const ID_SHIELDED = 'SHIELDED' 132 export const ID_TRANSPARENT = 'TRANSPARENT' 133 export const ID_SHIELDED_MSG = 'SHIELDED_MSG' 134 export const ID_ORDER = 'ORDER' 135 export const ID_LOCKED_ORDER_BAL_MSG = 'LOCKED_ORDER_BAL_MSG' 136 export const ID_CREATING_WALLETS = 'CREATING_WALLETS' 137 export const ID_ADDING_SERVERS = 'ADDING_SERVER' 138 export const ID_WALLET_RECOVERY_SUPPORT_MSG = 'WALLET_RECOVERY_SUPPORT_MSG' 139 export const ID_TICKETS_PURCHASED = 'TICKETS_PURCHASED' 140 export const ID_TICKET_STATUS_UNKNOWN = 'TICKET_STATUS_UNKNOWN' 141 export const ID_TICKET_STATUS_UNMINED = 'TICKET_STATUS_UNMINED' 142 export const ID_TICKET_STATUS_IMMATURE = 'TICKET_STATUS_IMMATURE' 143 export const ID_TICKET_STATUS_LIVE = 'TICKET_STATUS_LIVE' 144 export const ID_TICKET_STATUS_VOTED = 'TICKET_STATUS_VOTED' 145 export const ID_TICKET_STATUS_MISSED = 'TICKET_STATUS_MISSED' 146 export const ID_TICKET_STATUS_EXPIRED = 'TICKET_STATUS_EXPIRED' 147 export const ID_TICKET_STATUS_UNSPENT = 'TICKET_STATUS_UNSPENT' 148 export const ID_TICKET_STATUS_REVOKED = 'TICKET_STATUS_REVOKED' 149 export const ID_PASSWORD_RESET_SUCCESS_MSG = 'PASSWORD_RESET_SUCCESS_MSG' 150 export const ID_BROWSER_NTFN_ENABLED = 'BROWSER_NTFN_ENABLED' 151 export const ID_BROWSER_NTFN_ORDERS = 'BROWSER_NTFN_ORDERS' 152 export const ID_BROWSER_NTFN_MATCHES = 'BROWSER_NTFN_MATCHES' 153 export const ID_BROWSER_NTFN_BONDS = 'BROWSER_NTFN_BONDS' 154 export const ID_BROWSER_NTFN_CONNECTIONS = 'BROWSER_NTFN_CONNECTIONS' 155 export const ID_ORDER_BUTTON_BUY_BALANCE_ERROR = 'ORDER_BUTTON_BUY_BALANCE_ERROR' 156 export const ID_ORDER_BUTTON_SELL_BALANCE_ERROR = 'ORDER_BUTTON_SELL_BALANCE_ERROR' 157 export const ID_ORDER_BUTTON_QTY_ERROR = 'ORDER_BUTTON_QTY_ERROR' 158 export const ID_ORDER_BUTTON_QTY_RATE_ERROR = 'ORDER_BUTTON_QTY_RATE_ERROR' 159 export const ID_CREATE_ASSET_WALLET_MSG = 'CREATE_ASSET_WALLET_MSG' 160 export const ID_NO_WALLET_MSG = 'NO_WALLET_MSG' 161 export const ID_TRADING_TIER_UPDATED = 'TRADING_TIER_UPDATED' 162 export const ID_INVALID_TIER_VALUE = 'INVALID_TIER_VALUE' 163 export const ID_INVALID_COMPS_VALUE = 'INVALID_COMPS_VALUE' 164 export const ID_TX_TYPE_UNKNOWN = 'TX_TYPE_UNKNOWN' 165 export const ID_TX_TYPE_SEND = 'TX_TYPE_SEND' 166 export const ID_TX_TYPE_RECEIVE = 'TX_TYPE_RECEIVE' 167 export const ID_TX_TYPE_SWAP = 'TX_TYPE_SWAP' 168 export const ID_TX_TYPE_REDEEM = 'TX_TYPE_REDEEM' 169 export const ID_TX_TYPE_REFUND = 'TX_TYPE_REFUND' 170 export const ID_TX_TYPE_SPLIT = 'TX_TYPE_SPLIT' 171 export const ID_TX_TYPE_CREATE_BOND = 'TX_TYPE_CREATE_BOND' 172 export const ID_TX_TYPE_REDEEM_BOND = 'TX_TYPE_REDEEM_BOND' 173 export const ID_TX_TYPE_APPROVE_TOKEN = 'TX_TYPE_APPROVE_TOKEN' 174 export const ID_TX_TYPE_ACCELERATION = 'TX_TYPE_ACCELERATION' 175 export const ID_TX_TYPE_SELF_TRANSFER = 'TX_TYPE_SELF_TRANSFER' 176 export const ID_TX_TYPE_REVOKE_TOKEN_APPROVAL = 'TX_TYPE_REVOKE_TOKEN_APPROVAL' 177 export const ID_TX_TYPE_TICKET_PURCHASE = 'TX_TYPE_TICKET_PURCHASE' 178 export const ID_TX_TYPE_TICKET_VOTE = 'TX_TYPE_TICKET_VOTE' 179 export const ID_TX_TYPE_TICKET_REVOCATION = 'TX_TYPE_TICKET_REVOCATION' 180 export const ID_TX_TYPE_SWAP_OR_SEND = 'TX_TYPE_SWAP_OR_SEND' 181 export const ID_TX_TYPE_MIX = 'TX_TYPE_MIX' 182 export const ID_SWAP_OR_SEND_TOOLTIP = 'SWAP_OR_SEND_TOOLTIP' 183 export const ID_MISSING_CEX_CREDS = 'MISSING_CEX_CREDS' 184 export const ID_MATCH_BUFFER = 'MATCH_BUFFER' 185 export const ID_NO_PLACEMENTS = 'NO_PLACEMENTS' 186 export const ID_INVALID_VALUE = 'INVALID_VALUE' 187 export const ID_NO_ZERO = 'NO_ZERO' 188 export const ID_BOTTYPE_BASIC_MM = 'BOTTYPE_BASIC_MM' 189 export const ID_BOTTYPE_ARB_MM = 'BOTTYPE_ARB_MM' 190 export const ID_BOTTYPE_SIMPLE_ARB = 'BOTTYPE_SIMPLE_ARB' 191 export const ID_NO_BOTTYPE = 'NO_BOTTYPE' 192 export const ID_NO_CEX = 'NO_CEX' 193 export const ID_CEXBALANCE_ERR = 'CEXBALANCE_ERR' 194 export const ID_PENDING = 'PENDING' 195 export const ID_COMPLETE = 'COMPLETE' 196 export const ID_ARCHIVED_SETTINGS = 'ARCHIVED_SETTINGS' 197 export const ID_NO_CODE_PROVIDED = 'NO_CODE_PROVIDED' 198 export const ID_ENABLE_ACCOUNT = 'ENABLE_ACCOUNT' 199 export const ID_DISABLE_ACCOUNT = 'DISABLE_ACCOUNT' 200 export const ID_ACCOUNT_DISABLED_MSG = 'ACCOUNT_DISABLED_MSG' 201 export const ID_DEX_DISABLED_MSG = 'DEX_DISABLED_MSG' 202 export const ID_WALLET_NOT_SYNCED = 'WALLET_NOT_SYNCED' 203 export const ID_WALLET_NO_PEERS = 'WALLET_NO_PEERS' 204 export const ID_DEPOSIT_ERROR = 'DEPOSIT_ERROR' 205 export const ID_WITHDRAW_ERROR = 'WITHDRAW_ERROR' 206 export const ID_DEX_UNDERFUNDED = 'DEX_UNDERFUNDED' 207 export const ID_CEX_UNDERFUNDED = 'CEX_UNDERFUNDED' 208 export const ID_CEX_TOO_SHALLOW = 'CEX_TOO_SHALLOW' 209 export const ID_ACCOUNT_SUSPENDED = 'ACCOUNT_SUSPENDED' 210 export const ID_USER_LIMIT_TOO_LOW = 'USER_LIMIT_TOO_LOW' 211 export const ID_NO_PRICE_SOURCE = 'NO_PRICE_SOURCE' 212 export const ID_CEX_ORDERBOOK_UNSYNCED = 'CEX_ORDERBOOK_UNSYNCED' 213 export const ID_DETERMINE_PLACEMENTS_ERROR = 'DETERMINE_PLACEMENTS_ERROR' 214 export const ID_PLACE_BUY_ORDERS_ERROR = 'PLACE_BUY_ORDERS_ERROR' 215 export const ID_PLACE_SELL_ORDERS_ERROR = 'PLACE_SELL_ORDERS_ERROR' 216 export const ID_CEX_TRADE_ERROR = 'CEX_TRADE_ERROR' 217 export const ID_ORDER_REPORT_TITLE = 'ORDER_REPORT_TITLE' 218 export const ID_CEX_BALANCES = 'CEX_BALANCES' 219 export const ID_CAUSES_SELF_MATCH = 'CAUSES_SELF_MATCH' 220 export const ID_CEX_NOT_CONNECTED = 'CEX_NOT_CONNECTED' 221 export const ID_DELETE_BOT = 'DELETE_BOT' 222 223 let locale: Locale 224 225 export async function loadLocale (lang: string, commitHash: string, skipCache: boolean) { 226 if (!skipCache) { 227 const specs = State.fetchLocal(State.localeSpecsKey) 228 if (specs && specs.lang === lang && specs.commitHash === commitHash) { 229 locale = State.fetchLocal(State.localeKey) 230 return 231 } 232 } 233 locale = await postJSON('/api/locale', lang) 234 State.storeLocal(State.localeSpecsKey, { lang, commitHash }) 235 State.storeLocal(State.localeKey, locale) 236 } 237 238 /* prep will format the message to the current locale. */ 239 export function prep (k: string, args?: Record<string, string>) { 240 return stringTemplateParser(locale[k], args || {}) 241 } 242 243 window.clearLocale = () => { 244 State.removeLocal(State.localeSpecsKey) 245 State.removeLocal(State.localeKey) 246 } 247 248 /* 249 * stringTemplateParser is a template string matcher, where expression is any 250 * text. It switches what is inside double brackets (e.g. 'buy {{ asset }}') 251 * for the value described into args. args is an object with keys 252 * equal to the placeholder keys. (e.g. {"asset": "dcr"}). 253 * So that will be switched for: 'asset dcr'. 254 */ 255 function stringTemplateParser (expression: string, args: Record<string, string>) { 256 // templateMatcher matches any text which: 257 // is some {{ text }} between two brackets, and a space between them. 258 // It is global, therefore it will change all occurrences found. 259 // text can be anything, but brackets '{}' and space '\s' 260 const templateMatcher = /{{\s?([^{}\s]*)\s?}}/g 261 return expression.replace(templateMatcher, (_, value) => args[value]) 262 }