diff --git a/qortal-ui-core/language/cn.json b/qortal-ui-core/language/cn.json index ebbb454b..bf00b47e 100644 --- a/qortal-ui-core/language/cn.json +++ b/qortal-ui-core/language/cn.json @@ -205,5 +205,39 @@ "wchange40": "PAYMENT", "wchange41": "Status", "wchange42": "Confirmations" + }, + "tradepage": { + "tchange1": "Trade Portal", + "tchange2": "Select Trading Pair", + "tchange3": "HISTORIC MARKET TRADES", + "tchange4": "MY TRADE HISTORY", + "tchange5": "OPEN MARKET SELL ORDERS", + "tchange6": "MY ORDERS", + "tchange7": "Stuck Offers", + "tchange8": "Amount", + "tchange9": "Price", + "tchange10": "Total", + "tchange11": "Date", + "tchange12": "Status", + "tchange13": "Seller", + "tchange14": "Price Each", + "tchange15": "Clear Form", + "tchange16": "You have", + "tchange17": "Action", + "tchange18": "BUY", + "tchange19": "SELL", + "tchange20": "Failed to Create Trade. Try again!", + "tchange21": "Failed to Create Trade. Error Code", + "tchange22": "Insufficient Funds!", + "tchange23": "Buy Request Successful!", + "tchange24": "Buy Request Existing!", + "tchange25": "Failed to Create Trade. Error Code", + "tchange26": "Trade Cancelling In Progress!", + "tchange27": "Failed to Cancel Trade. Try again!", + "tchange28": "Failed to Cancel Trade. Error Code", + "tchange29": "CANCEL", + "tchange30": "Failed to Fetch Balance. Try again!", + "tchange31": "SOLD", + "tchange32": "BOUGHT" } } \ No newline at end of file diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json index d9d70615..0b094ef6 100644 --- a/qortal-ui-core/language/de.json +++ b/qortal-ui-core/language/de.json @@ -205,5 +205,39 @@ "wchange40": "ZAHLUNG", "wchange41": "Status", "wchange42": "Bestätigungen" + }, + "tradepage": { + "tchange1": "Handelsportal", + "tchange2": "Wählen Sie ein Handelspaar", + "tchange3": "HISTORISCHER MARKTHANDEL", + "tchange4": "MEINE HANDELSGESCHICHTE", + "tchange5": "OFFENE MARKT-VERKAUFSAUFTRÄGE", + "tchange6": "MEINE BESTELLUNGEN", + "tchange7": "Festgefahrene Angebote", + "tchange8": "Menge", + "tchange9": "Preis", + "tchange10": "Gesamt", + "tchange11": "Datum", + "tchange12": "Status", + "tchange13": "Verkäufer", + "tchange14": "Preis pro Stück", + "tchange15": "Lösche Formulardaten", + "tchange16": "Sie haben", + "tchange17": "Aktion", + "tchange18": "KAUFEN", + "tchange19": "VERKAUFEN", + "tchange20": "Handel konnte nicht erstellt werden. Versuchen Sie es nochmal!", + "tchange21": "Handel konnte nicht erstellt werden. Fehlercode", + "tchange22": "Unzureichendes Guthaben!", + "tchange23": "Kaufanfrage erfolgreich!", + "tchange24": "Kaufanfrage existiert bereits!", + "tchange25": "Handel konnte nicht erstellt werden. Fehlercode", + "tchange26": "Trade Cancelling In Progress!", + "tchange27": "Trade konnte nicht abgebrochen werden. Versuchen Sie es nochmal!", + "tchange28": "Trade konnte nicht abgebrochen werden. Fehlercode", + "tchange29": "ABBRECHEN", + "tchange30": "Guthaben konnte nicht abgerufen werden. Versuchen Sie es nochmal!", + "tchange31": "VERKAUFT", + "tchange32": "GEKAUFT" } } \ No newline at end of file diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json index 63b82fe3..8c50789b 100644 --- a/qortal-ui-core/language/fr.json +++ b/qortal-ui-core/language/fr.json @@ -205,5 +205,39 @@ "wchange40": "PAYMENT", "wchange41": "Status", "wchange42": "Confirmations" + }, + "tradepage": { + "tchange1": "Trade Portal", + "tchange2": "Select Trading Pair", + "tchange3": "HISTORIC MARKET TRADES", + "tchange4": "MY TRADE HISTORY", + "tchange5": "OPEN MARKET SELL ORDERS", + "tchange6": "MY ORDERS", + "tchange7": "Stuck Offers", + "tchange8": "Amount", + "tchange9": "Price", + "tchange10": "Total", + "tchange11": "Date", + "tchange12": "Status", + "tchange13": "Seller", + "tchange14": "Price Each", + "tchange15": "Clear Form", + "tchange16": "You have", + "tchange17": "Action", + "tchange18": "BUY", + "tchange19": "SELL", + "tchange20": "Failed to Create Trade. Try again!", + "tchange21": "Failed to Create Trade. Error Code", + "tchange22": "Insufficient Funds!", + "tchange23": "Buy Request Successful!", + "tchange24": "Buy Request Existing!", + "tchange25": "Failed to Create Trade. Error Code", + "tchange26": "Trade Cancelling In Progress!", + "tchange27": "Failed to Cancel Trade. Try again!", + "tchange28": "Failed to Cancel Trade. Error Code", + "tchange29": "CANCEL", + "tchange30": "Failed to Fetch Balance. Try again!", + "tchange31": "SOLD", + "tchange32": "BOUGHT" } } \ No newline at end of file diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json index a769c9b9..bf59b6f8 100644 --- a/qortal-ui-core/language/pl.json +++ b/qortal-ui-core/language/pl.json @@ -205,5 +205,39 @@ "wchange40": "PAYMENT", "wchange41": "Status", "wchange42": "Confirmations" + }, + "tradepage": { + "tchange1": "Trade Portal", + "tchange2": "Select Trading Pair", + "tchange3": "HISTORIC MARKET TRADES", + "tchange4": "MY TRADE HISTORY", + "tchange5": "OPEN MARKET SELL ORDERS", + "tchange6": "MY ORDERS", + "tchange7": "Stuck Offers", + "tchange8": "Amount", + "tchange9": "Price", + "tchange10": "Total", + "tchange11": "Date", + "tchange12": "Status", + "tchange13": "Seller", + "tchange14": "Price Each", + "tchange15": "Clear Form", + "tchange16": "You have", + "tchange17": "Action", + "tchange18": "BUY", + "tchange19": "SELL", + "tchange20": "Failed to Create Trade. Try again!", + "tchange21": "Failed to Create Trade. Error Code", + "tchange22": "Insufficient Funds!", + "tchange23": "Buy Request Successful!", + "tchange24": "Buy Request Existing!", + "tchange25": "Failed to Create Trade. Error Code", + "tchange26": "Trade Cancelling In Progress!", + "tchange27": "Failed to Cancel Trade. Try again!", + "tchange28": "Failed to Cancel Trade. Error Code", + "tchange29": "CANCEL", + "tchange30": "Failed to Fetch Balance. Try again!", + "tchange31": "SOLD", + "tchange32": "BOUGHT" } } diff --git a/qortal-ui-core/language/sp.json b/qortal-ui-core/language/sp.json index 6acfdd30..a35547c9 100644 --- a/qortal-ui-core/language/sp.json +++ b/qortal-ui-core/language/sp.json @@ -205,5 +205,39 @@ "wchange40": "PAYMENT", "wchange41": "Status", "wchange42": "Confirmations" + }, + "tradepage": { + "tchange1": "Trade Portal", + "tchange2": "Select Trading Pair", + "tchange3": "HISTORIC MARKET TRADES", + "tchange4": "MY TRADE HISTORY", + "tchange5": "OPEN MARKET SELL ORDERS", + "tchange6": "MY ORDERS", + "tchange7": "Stuck Offers", + "tchange8": "Amount", + "tchange9": "Price", + "tchange10": "Total", + "tchange11": "Date", + "tchange12": "Status", + "tchange13": "Seller", + "tchange14": "Price Each", + "tchange15": "Clear Form", + "tchange16": "You have", + "tchange17": "Action", + "tchange18": "BUY", + "tchange19": "SELL", + "tchange20": "Failed to Create Trade. Try again!", + "tchange21": "Failed to Create Trade. Error Code", + "tchange22": "Insufficient Funds!", + "tchange23": "Buy Request Successful!", + "tchange24": "Buy Request Existing!", + "tchange25": "Failed to Create Trade. Error Code", + "tchange26": "Trade Cancelling In Progress!", + "tchange27": "Failed to Cancel Trade. Try again!", + "tchange28": "Failed to Cancel Trade. Error Code", + "tchange29": "CANCEL", + "tchange30": "Failed to Fetch Balance. Try again!", + "tchange31": "SOLD", + "tchange32": "BOUGHT" } } \ No newline at end of file diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json index 3918266d..e09c4946 100644 --- a/qortal-ui-core/language/us.json +++ b/qortal-ui-core/language/us.json @@ -205,5 +205,39 @@ "wchange40": "PAYMENT", "wchange41": "Status", "wchange42": "Confirmations" + }, + "tradepage": { + "tchange1": "Trade Portal", + "tchange2": "Select Trading Pair", + "tchange3": "HISTORIC MARKET TRADES", + "tchange4": "MY TRADE HISTORY", + "tchange5": "OPEN MARKET SELL ORDERS", + "tchange6": "MY ORDERS", + "tchange7": "Stuck Offers", + "tchange8": "Amount", + "tchange9": "Price", + "tchange10": "Total", + "tchange11": "Date", + "tchange12": "Status", + "tchange13": "Seller", + "tchange14": "Price Each", + "tchange15": "Clear Form", + "tchange16": "You have", + "tchange17": "Action", + "tchange18": "BUY", + "tchange19": "SELL", + "tchange20": "Failed to Create Trade. Try again!", + "tchange21": "Failed to Create Trade. Error Code", + "tchange22": "Insufficient Funds!", + "tchange23": "Buy Request Successful!", + "tchange24": "Buy Request Existing!", + "tchange25": "Failed to Create Trade. Error Code", + "tchange26": "Trade Cancelling In Progress!", + "tchange27": "Failed to Cancel Trade. Try again!", + "tchange28": "Failed to Cancel Trade. Error Code", + "tchange29": "CANCEL", + "tchange30": "Failed to Fetch Balance. Try again!", + "tchange31": "SOLD", + "tchange32": "BOUGHT" } } \ No newline at end of file diff --git a/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js b/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js index 12b2d52a..115b5177 100644 --- a/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js +++ b/qortal-ui-plugins/plugins/core/trade-portal/trade-portal.src.js @@ -1,6 +1,11 @@ import { LitElement, html, css } from 'lit' import { render } from 'lit/html.js' import { Epml } from '../../../epml.js' +import { use, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' + +registerTranslateConfig({ + loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) +}) import '@material/mwc-button' import '@material/mwc-textfield' @@ -35,7 +40,9 @@ class TradePortal extends LitElement { isLoadingHistoricTrades: { type: Boolean }, isLoadingOpenTrades: { type: Boolean }, isLoadingMyOpenOrders: { type: Boolean }, - theme: { type: String, reflect: true } + theme: { type: String, reflect: true }, + amountString: { type: String }, + priceString: { type: String } } } @@ -409,6 +416,7 @@ class TradePortal extends LitElement { name: "QORTAL", balance: "0", coinCode: "QORT", + coinAmount: this.amountString } let litecoin = { @@ -422,7 +430,8 @@ class TradePortal extends LitElement { myHistoricTrades: [], myOfferingOrders: [], openTradeOrders: null, - tradeOffersSocketCounter: 1 + tradeOffersSocketCounter: 1, + coinAmount: this.amountString } let dogecoin = { @@ -436,7 +445,8 @@ class TradePortal extends LitElement { myHistoricTrades: [], myOfferingOrders: [], openTradeOrders: null, - tradeOffersSocketCounter: 1 + tradeOffersSocketCounter: 1, + coinAmount: this.amountString } this.listedCoins = new Map() @@ -444,6 +454,9 @@ class TradePortal extends LitElement { this.listedCoins.set("LITECOIN", litecoin) this.listedCoins.set("DOGECOIN", dogecoin) + this.amountString = this.renderAmountText() + this.priceString = this.renderPriceText() + workers.set("QORTAL", { tradesConnectedWorker: null, handleStuckTradesConnectedWorker: null @@ -480,15 +493,15 @@ class TradePortal extends LitElement { return html`
-
HISTORIC MARKET TRADES
+
${translate("tradepage.tchange3")}
Loading...
- + { const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) render(html`${price}`, root) @@ -498,7 +511,7 @@ class TradePortal extends LitElement { { render(html` ${data.item.foreignAmount} `, root) }} @@ -515,14 +528,13 @@ class TradePortal extends LitElement { return html`
-
OPEN MARKET SELL ORDERS
+
${translate("tradepage.tchange5")}
Loading...
{ @@ -533,7 +545,7 @@ class TradePortal extends LitElement { { @@ -544,7 +556,7 @@ class TradePortal extends LitElement { { render(html` ${data.item.foreignAmount} `, root) }} @@ -553,7 +565,7 @@ class TradePortal extends LitElement { { render(html` ${data.item.qortalCreator} `, root) }} @@ -571,20 +583,20 @@ class TradePortal extends LitElement {
- - + +
- +

- You have: ${this.listedCoins.get(this.selectedCoin).balance} ${this.listedCoins.get(this.selectedCoin).coinCode} + ${translate("tradepage.tchange16")}: ${this.listedCoins.get(this.selectedCoin).balance} ${this.listedCoins.get(this.selectedCoin).coinCode}
- ${this.isBuyLoading === false ? 'BUY' : html``} + ${this.isBuyLoading === false ? html`${translate("tradepage.tchange18")}` : html``}
@@ -641,13 +653,13 @@ class TradePortal extends LitElement {
- +

- You have: ${this.listedCoins.get("QORTAL").balance} QORT + ${translate("tradepage.tchange16")}: ${this.listedCoins.get("QORTAL").balance} QORT
- ${this.isSellLoading === false ? 'SELL' : html``} + ${this.isSellLoading === false ? html`${translate("tradepage.tchange19")}` : html``}
@@ -702,14 +714,14 @@ class TradePortal extends LitElement { return html`
-
MY ORDERS this.showStuckOrdersDialog()}>
+
${translate("tradepage.tchange6")} this.showStuckOrdersDialog()}>
Loading...
{ const dateString = new Date(data.item.timestamp).toLocaleString() render(html`${dateString}`, root) @@ -719,7 +731,7 @@ class TradePortal extends LitElement { { render(html` ${data.item._tradeState} `, root) }} @@ -728,7 +740,7 @@ class TradePortal extends LitElement { { const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) render(html`${price}`, root) @@ -738,19 +750,20 @@ class TradePortal extends LitElement { { render(html`${this.renderCancelButton(data.item)}`, root) }} @@ -767,13 +780,13 @@ class TradePortal extends LitElement { return html`
-
MY TRADE HISTORY
+
${translate("tradepage.tchange4")}
{ const dateString = new Date(data.item.timestamp).toLocaleString() render(html`${dateString}`, root) @@ -783,10 +796,10 @@ class TradePortal extends LitElement { { - if (data.item.mode === 'SOLD') return render(html` ${data.item.mode} `, root) - if (data.item.mode === 'BOUGHT') return render(html` ${data.item.mode} `, root) + if (data.item.mode === 'SOLD') return render(html` ${translate("tradepage.tchange31")} `, root) + if (data.item.mode === 'BOUGHT') return render(html` ${translate("tradepage.tchange32")} `, root) return render(html` ${data.item.mode} `, root) }} > @@ -794,7 +807,7 @@ class TradePortal extends LitElement { { const price = this.round(parseFloat(data.item.foreignAmount) / parseFloat(data.item.qortAmount)) render(html`${price}`, root) @@ -804,13 +817,13 @@ class TradePortal extends LitElement { { render(html` ${data.item.foreignAmount} `, root) }} @@ -827,8 +840,8 @@ class TradePortal extends LitElement { return html`
-

Qortal Trade Portal -  

- +

Qortal ${translate("tradepage.tchange1")} -  

+ QORT / LTC QORT / DOGE @@ -848,18 +861,18 @@ class TradePortal extends LitElement {
-

Stuck Offers

+

${translate("tradepage.tchange7")}


- - - - { render(html`${this.renderCancelStuckOfferButton(data.item)}`, root) }}> + + + + { render(html`${this.renderCancelStuckOfferButton(data.item)}`, root) }}>
- Close + ${translate("general.close")}
` } @@ -874,6 +887,12 @@ class TradePortal extends LitElement { this.changeTheme(); }, 100) + this.changeLanguage() + + setInterval(() => { + this.changeLanguage() + }, 100) + this.updateWalletBalance() setTimeout(() => { @@ -882,6 +901,7 @@ class TradePortal extends LitElement { // Set Trade Panes this._openOrdersGrid = this.shadowRoot.getElementById('openOrdersGrid') + this._openOrdersGrid.querySelector('#priceColumn').headerRenderer = function (root) { root.innerHTML = 'Price (' + _this.listedCoins.get(_this.selectedCoin).coinCode + ')' } @@ -962,6 +982,25 @@ class TradePortal extends LitElement { document.querySelector('html').setAttribute('theme', this.theme); } + changeLanguage() { + const checkLanguage = localStorage.getItem('qortalLanguage') + + if (checkLanguage === null || checkLanguage.length === 0) { + localStorage.setItem('qortalLanguage', 'us') + use('us') + } else { + use(checkLanguage) + } + } + + renderAmountText() { + return html`${translate("tradepage.tchange8")}` + } + + renderPriceText() { + return html`${translate("tradepage.tchange9")}` + } + updateWalletBalance() { let _url = `` let _body = null @@ -986,7 +1025,7 @@ class TradePortal extends LitElement { }) .then((res) => { if (isNaN(Number(res))) { - parentEpml.request('showSnackBar', 'Failed to Fetch Balance. Try again!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange30")}`) } else { this.listedCoins.get(this.selectedCoin).balance = (Number(res) / 1e8).toFixed(8) } @@ -1674,18 +1713,18 @@ class TradePortal extends LitElement { } else if (response === false) { this.isSellLoading = false this.sellBtnDisable = false - parentEpml.request('showSnackBar', 'Failed to Create Trade. Try again!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange20")}`) } else { this.isSellLoading = false this.sellBtnDisable = false - parentEpml.request('showSnackBar', `Failed to Create Trade. ERROR_CODE: ${response.message}`) + parentEpml.request('showSnackBar', `${translate("tradepage.tchange21")}: ${response.message}`) } } if (this.round(parseFloat(fundingQortAmount) + parseFloat(0.002)) > parseFloat(this.listedCoins.get("QORTAL").balance)) { this.isSellLoading = false this.sellBtnDisable = false - parentEpml.request('showSnackBar', 'Insufficient Funds!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange22")}`) return false } else { const res = await makeRequest() @@ -1727,15 +1766,15 @@ class TradePortal extends LitElement { this.shadowRoot.getElementById('buyPriceInput').value = this.initialAmount this.shadowRoot.getElementById('buyTotalInput').value = this.initialAmount this.shadowRoot.getElementById('qortalAtAddress').value = '' - parentEpml.request('showSnackBar', 'Buy Request Successful!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange23")}`) } else if (response === false) { this.isBuyLoading = false this.buyBtnDisable = false - parentEpml.request('showSnackBar', 'Buy Request Existing!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange24")}`) } else { this.isBuyLoading = false this.buyBtnDisable = false - parentEpml.request('showSnackBar', `Failed to Create Trade. ERROR_CODE: ${response.message}`) + parentEpml.request('showSnackBar', `${translate("tradepage.tchange25")}: ${response.message}`) } } @@ -1761,15 +1800,15 @@ class TradePortal extends LitElement { if (response === true) { button.remove() this.cancelBtnDisable = false - parentEpml.request('showSnackBar', 'Trade Cancelling In Progress!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange26")}`) } else if (response === false) { button.innerHTML = 'CANCEL' this.cancelBtnDisable = false - parentEpml.request('showSnackBar', 'Failed to Cancel Trade. Try again!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange27")}`) } else { button.innerHTML = 'CANCEL' this.cancelBtnDisable = false - parentEpml.request('showSnackBar', `Failed to Cancel Trade. ERROR_CODE: ${response.message}`) + parentEpml.request('showSnackBar', `${translate("tradepage.tchange28")}: ${response.message}`) } } @@ -1791,7 +1830,7 @@ class TradePortal extends LitElement { renderCancelButton(stateItem) { if (stateItem.tradeState === 'BOB_WAITING_FOR_MESSAGE') { - return html` this.cancelAction(stateItem)}>CANCEL` + return html` this.cancelAction(stateItem)}>${translate("tradepage.tchange29")}` } else { return '' } @@ -1815,13 +1854,13 @@ class TradePortal extends LitElement { const manageResponse = (response) => { if (response === true) { this.cancelStuckOfferBtnDisable = false - parentEpml.request('showSnackBar', 'Trade Cancelling In Progress!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange26")}`) } else if (response === false) { this.cancelStuckOfferBtnDisable = false - parentEpml.request('showSnackBar', 'Failed to Cancel Trade. Try again!') + parentEpml.request('showSnackBar', `${translate("tradepage.tchange27")}`) } else { this.cancelStuckOfferBtnDisable = false - parentEpml.request('showSnackBar', `Failed to Cancel Trade. ERROR_CODE: ${response.message}`) + parentEpml.request('showSnackBar', `${translate("tradepage.tchange28")}: ${response.message}`) } }