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  }