diff --git a/img/ru-flag-round-icon-32.png b/img/ru-flag-round-icon-32.png
new file mode 100644
index 00000000..33286ec1
Binary files /dev/null and b/img/ru-flag-round-icon-32.png differ
diff --git a/package.json b/package.json
index 6065c377..b1e3a754 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
},
"dependencies": {
"electron-updater": "5.0.1",
- "electron-log": "4.4.6"
+ "electron-log": "4.4.7"
},
"devDependencies": {
"electron": "17.4.3",
diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json
index afd276de..b439ea00 100644
--- a/qortal-ui-core/language/de.json
+++ b/qortal-ui-core/language/de.json
@@ -14,7 +14,8 @@
"portuguese": "Portugiesisch",
"hungarian": "Ungarisch",
"serbian": "Serbisch",
- "italian": "Italienisch"
+ "italian": "Italienisch",
+ "russian": "Russisch"
},
"sidemenu": {
"mintingdetails": "PRÄGUNGSDETAILS",
diff --git a/qortal-ui-core/language/es.json b/qortal-ui-core/language/es.json
index c7b07551..1cb21b13 100644
--- a/qortal-ui-core/language/es.json
+++ b/qortal-ui-core/language/es.json
@@ -14,7 +14,8 @@
"portuguese": "Portugués",
"hungarian": "Húngaro",
"serbian": "Serbio",
- "italian": "Italiano"
+ "italian": "Italiano",
+ "russian": "Ruso"
},
"sidemenu": {
"mintingdetails": "DETALLES DE ACUÑACIÓN",
diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json
index 1a0909ab..32bbf793 100644
--- a/qortal-ui-core/language/fr.json
+++ b/qortal-ui-core/language/fr.json
@@ -14,7 +14,8 @@
"portuguese": "Portugais",
"hungarian": "Hongrois",
"serbian": "Serbe",
- "italian": "Italien"
+ "italian": "Italien",
+ "russian": "Russe"
},
"sidemenu": {
"mintingdetails": "DETAILS DE FRAPPE",
@@ -186,7 +187,7 @@
"wchange14": "Date",
"wchange15": "Signature de la transaction",
"wchange16": "Hachage de la transaction",
- "wchange17": "Envoyé",
+ "wchange17": "Envoyer",
"wchange18": "Depuis l'adresse",
"wchange19": "Solde disponible",
"wchange20": "A (adresse ou nom)",
diff --git a/qortal-ui-core/language/hindi.json b/qortal-ui-core/language/hindi.json
index f86cad50..613dd569 100644
--- a/qortal-ui-core/language/hindi.json
+++ b/qortal-ui-core/language/hindi.json
@@ -15,7 +15,8 @@
"portuguese": "पुर्तगाली",
"hungarian": "हंगेरी",
"serbian": "सर्बियाई",
- "italian": "इतालवी"
+ "italian": "इतालवी",
+ "russian": "रूसी"
},
"sidemenu": {
diff --git a/qortal-ui-core/language/hr.json b/qortal-ui-core/language/hr.json
index 115e45f3..d166aa16 100644
--- a/qortal-ui-core/language/hr.json
+++ b/qortal-ui-core/language/hr.json
@@ -14,7 +14,8 @@
"portuguese": "Portugalski",
"hungarian": "Mađarski",
"serbian": "Srpski",
- "italian": "Talijanski"
+ "italian": "Talijanski",
+ "russian": "Ruski"
},
"sidemenu": {
"mintingdetails": "DETALJI O MINTANJU",
diff --git a/qortal-ui-core/language/hu.json b/qortal-ui-core/language/hu.json
index 35f0642d..7bd9b97f 100644
--- a/qortal-ui-core/language/hu.json
+++ b/qortal-ui-core/language/hu.json
@@ -14,7 +14,8 @@
"portuguese": "Portugál",
"hungarian": "Magyar",
"serbian": "Szerb",
- "italian": "Olasz"
+ "italian": "Olasz",
+ "russian": "Orosz"
},
"sidemenu": {
"mintingdetails": "VERÉSI RÉSZLETEK",
diff --git a/qortal-ui-core/language/it.json b/qortal-ui-core/language/it.json
index 7b004fa0..a71d3e33 100644
--- a/qortal-ui-core/language/it.json
+++ b/qortal-ui-core/language/it.json
@@ -14,7 +14,8 @@
"portuguese": "Portoghese",
"hungarian": "Ungherese",
"serbian": "Serbo",
- "italian": "Italiano"
+ "italian": "Italiano",
+ "russian": "Russo"
},
"sidemenu": {
"mintingdetails": "DETTAGLI DI MINTING",
diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json
index 66746185..cf74f411 100644
--- a/qortal-ui-core/language/pl.json
+++ b/qortal-ui-core/language/pl.json
@@ -14,7 +14,8 @@
"portuguese": "Portugalski",
"hungarian": "Węgierski",
"serbian": "Serbski",
- "italian": "Włoski"
+ "italian": "Włoski",
+ "russian": "Rosyjski"
},
"sidemenu": {
"mintingdetails": "SZCZEGÓŁY MINTOWANIA",
diff --git a/qortal-ui-core/language/pt.json b/qortal-ui-core/language/pt.json
index 562a5737..bfbff7f9 100644
--- a/qortal-ui-core/language/pt.json
+++ b/qortal-ui-core/language/pt.json
@@ -14,7 +14,8 @@
"portuguese": "Português",
"hungarian": "Húngaro",
"serbian": "Sérvio",
- "italian": "Italiano"
+ "italian": "Italiano",
+ "russian": "Russo"
},
"sidemenu": {
"mintingdetails": "DETALHES DA MINERAÇÃO",
diff --git a/qortal-ui-core/language/rs.json b/qortal-ui-core/language/rs.json
index 63e8432a..c2a2e285 100644
--- a/qortal-ui-core/language/rs.json
+++ b/qortal-ui-core/language/rs.json
@@ -14,7 +14,8 @@
"portuguese": "Portugalski",
"hungarian": "Mađarski",
"serbian": "Srpski",
- "italian": "Italijan"
+ "italian": "Italijan",
+ "russian": "Ruski"
},
"sidemenu": {
"mintingdetails": "DETALJI MINTOVANJA",
diff --git a/qortal-ui-core/language/ru.json b/qortal-ui-core/language/ru.json
index 85599fe8..4b6142e8 100644
--- a/qortal-ui-core/language/ru.json
+++ b/qortal-ui-core/language/ru.json
@@ -208,7 +208,7 @@
"wchange35": "Тип",
"wchange36": "Платеж",
"wchange37": "Общая сумма",
- "wchange38": "Address has no transactions yet.",
+ "wchange38": "В адресе еще нет транзакций.",
"wchange39": "Не удалось скопировать адрес.",
"wchange40": "ОПЛАТА",
"wchange41": "Статус",
diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json
index 2a7e47a6..57841ec3 100644
--- a/qortal-ui-core/language/us.json
+++ b/qortal-ui-core/language/us.json
@@ -14,7 +14,8 @@
"portuguese": "Portuguese",
"hungarian": "Hungarian",
"serbian": "Serbian",
- "italian": "Italian"
+ "italian": "Italian",
+ "russian": "Russian"
},
"sidemenu": {
"mintingdetails": "MINTING DETAILS",
diff --git a/qortal-ui-core/language/zhc.json b/qortal-ui-core/language/zhc.json
index 5f952bd9..c63aa994 100644
--- a/qortal-ui-core/language/zhc.json
+++ b/qortal-ui-core/language/zhc.json
@@ -14,7 +14,8 @@
"portuguese": "葡萄牙文",
"hungarian": "匈牙利文",
"serbian": "塞尔维亚文",
- "italian": "意大利文"
+ "italian": "意大利文",
+ "russian": "俄语"
},
"sidemenu": {
"mintingdetails": "铸币信息",
diff --git a/qortal-ui-core/language/zht.json b/qortal-ui-core/language/zht.json
index bba97ea3..e59df6f3 100644
--- a/qortal-ui-core/language/zht.json
+++ b/qortal-ui-core/language/zht.json
@@ -14,7 +14,8 @@
"portuguese": "葡萄牙文",
"hungarian": "匈牙利文",
"serbian": "塞爾維亞文",
- "italian": "意大利文"
+ "italian": "意大利文",
+ "russian": "俄語"
},
"sidemenu": {
"mintingdetails": "鑄幣信息",
diff --git a/qortal-ui-core/src/components/language-selector.js b/qortal-ui-core/src/components/language-selector.js
index 19723ee4..68422491 100644
--- a/qortal-ui-core/src/components/language-selector.js
+++ b/qortal-ui-core/src/components/language-selector.js
@@ -51,13 +51,14 @@ class LanguageSelector extends connect(store)(LitElement) {
constructor() {
super()
+ this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
}
render() {
return html`
diff --git a/qortal-ui-core/src/components/login-view/create-account-section.js b/qortal-ui-core/src/components/login-view/create-account-section.js
index ad4b40c4..b285118f 100644
--- a/qortal-ui-core/src/components/login-view/create-account-section.js
+++ b/qortal-ui-core/src/components/login-view/create-account-section.js
@@ -1,7 +1,7 @@
import { LitElement, html, css } from 'lit'
import { connect } from 'pwa-helpers'
import { store } from '../../store.js'
-import { translate, translateUnsafeHTML } from 'lit-translate'
+import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
import { createWallet } from '../../../../qortal-ui-crypto/api/createWallet.js'
import FileSaver from 'file-saver'
@@ -121,24 +121,27 @@ class CreateAccountSection extends connect(store)(LitElement) {
const rePassword = this.shadowRoot.getElementById('rePassword').value
if (password === '') {
+ let snackbar1string = get("login.pleaseenter")
snackbar.add({
- labelText: this.renderEnterPassText(),
+ labelText: `${snackbar1string}`,
dismiss: true
})
return
}
if (password != rePassword) {
+ let snackbar2string = get("login.notmatch")
snackbar.add({
- labelText: this.renderNotMatchText(),
+ labelText: `${snackbar2string}`,
dismiss: true
})
return
}
if (password.length < 8 && lastPassword !== password) {
+ let snackbar3string = get("login.lessthen8")
snackbar.add({
- labelText: this.renderLessText(),
+ labelText: `${snackbar3string}`,
dismiss: true
})
lastPassword = password
@@ -146,8 +149,9 @@ class CreateAccountSection extends connect(store)(LitElement) {
}
if (this.saveAccount === true && nameInput === '') {
+ let snackbar4string = get("login.entername")
snackbar.add({
- labelText: this.renderEnterNameText(),
+ labelText: `${snackbar4string}`,
dismiss: true
})
return
@@ -194,8 +198,9 @@ class CreateAccountSection extends connect(store)(LitElement) {
backup: {
next: e => {
if (!this.isDownloadedBackup) {
+ let snackbar5string = get("login.downloaded")
snackbar.add({
- labelText: this.renderBackupText(),
+ labelText: `${snackbar5string}`,
dismiss: true
})
} else {
@@ -494,30 +499,10 @@ class CreateAccountSection extends connect(store)(LitElement) {
return html`${translate("login.prepare")}`
}
- renderBackupText() {
- return html`${translate("login.downloaded")}`
- }
-
renderWelcomeText() {
return html`${translate("login.welmessage")}`
}
- renderEnterPassText() {
- return html`${translate("login.pleaseenter")}`
- }
-
- renderNotMatchText() {
- return html`${translate("login.notmatch")}`
- }
-
- renderLessText() {
- return html`${translate("login.lessthen8")}`
- }
-
- renderEnterNameText() {
- return html`${translate("login.entername")}`
- }
-
renderLoadingText() {
return html`${translate("login.loading")}`
}
diff --git a/qortal-ui-core/src/components/login-view/loading-ripple_old.js b/qortal-ui-core/src/components/login-view/loading-ripple_old.js
deleted file mode 100644
index c436beb8..00000000
--- a/qortal-ui-core/src/components/login-view/loading-ripple_old.js
+++ /dev/null
@@ -1,186 +0,0 @@
-import { LitElement, html, css } from 'lit'
-import { connect } from 'pwa-helpers'
-import { store } from '../../store.js'
-
-const TRANSITION_EVENT_NAMES = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd', 'MSTransitionEnd']
-
-class LoadingRipple extends connect(store)(LitElement) {
- static get properties () {
- return {
- welcomeMessage: {
- type: String,
- attribute: 'welcome-message',
- reflectToAttribute: true
- },
- loadingMessage: {
- type: String,
- attribute: 'loading-message',
- reflectToAttribute: true
- }
- }
- }
-
- constructor () {
- super()
- this.welcomeMessage = ''
- this.loadingMessage = ''
- }
-
- static get styles () {
- return css`
- * {
- --paper-spinner-color: var(--mdc-theme-secondary);
- }
-
- `
- }
-
- render () {
- return html`
-
-
-
-
-
-
-
${this.welcomeMessage}
-
-
${this.loadingMessage}
-
-
-
-
- `
- }
-
- firstUpdated () {
- this._rippleWrapper = this.shadowRoot.getElementById('rippleWrapper')
- this._ripple = this.shadowRoot.getElementById('ripple')
- this._rippleContentWrapper = this.shadowRoot.getElementById('rippleContentWrapper')
- }
-
- // duh
- open (origin) {
- this._rippleWrapper.style.top = origin.y + 'px'
- this._rippleWrapper.style.left = origin.x + 'px'
- this._rippleContentWrapper.style.marginTop = -origin.y + 'px'
- this._rippleContentWrapper.style.marginLeft = -origin.x + 'px'
-
- return new Promise((resolve, reject) => {
- this._ripple.classList.add('activating')
- let isOpened = false
- const doneOpeningEvent = () => {
- if (isOpened) return
- // Clear events
- TRANSITION_EVENT_NAMES.forEach(name => this._ripple.removeEventListener(name, doneOpeningEvent))
- this._ripple.classList.add('activating-done')
- isOpened = true
- resolve()
- }
- TRANSITION_EVENT_NAMES.forEach(name => this._ripple.addEventListener(name, doneOpeningEvent))
- })
- }
-
- // Fades out
- fade () {
- return new Promise((resolve, reject) => {
- // CAN'T FADE OUT CAUSE THE STUPID THING GETS KILLED CAUSE OF STATE.APP.LOGGEEDIN
- // let rippleClosed = false
- this._ripple.classList.remove('activating')
- this._ripple.classList.remove('activating-done')
- this._ripple.classList.remove('disabling')
- resolve()
- })
- }
-
- // un-ripples...
- close () {
- return new Promise((resolve, reject) => {
- let rippleClosed = false
- this._ripple.classList.add('error')
- this._ripple.classList.remove('activating')
- this._ripple.classList.remove('activating-done')
- const rippleClosedEvent = () => {
- if (rippleClosed) return
- rippleClosed = true
- TRANSITION_EVENT_NAMES.forEach(name => this._ripple.removeEventListener(name, rippleClosedEvent))
- // Reset the ripple
- this._ripple.classList.remove('error')
- this.rippleIsOpen = false
- resolve()
- }
- TRANSITION_EVENT_NAMES.forEach(name => this._ripple.addEventListener(name, rippleClosedEvent))
- })
- }
-
- stateChanged (state) {
- }
-}
-
-window.customElements.define('loading-ripple', LoadingRipple)
diff --git a/qortal-ui-core/src/components/sidenav-menu.js b/qortal-ui-core/src/components/sidenav-menu.js
index 20c5f31b..3aa4bcf6 100644
--- a/qortal-ui-core/src/components/sidenav-menu.js
+++ b/qortal-ui-core/src/components/sidenav-menu.js
@@ -17,7 +17,6 @@ class SidenavMenu extends connect(store)(LitElement) {
urls: { type: Object },
theme: { type: String, reflect: true }
}
- this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
}
static get styles() {
@@ -50,6 +49,7 @@ class SidenavMenu extends connect(store)(LitElement) {
constructor() {
super()
this.urls = []
+ this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
}
render() {
diff --git a/qortal-ui-core/src/functional-components/loading-ripple.js b/qortal-ui-core/src/functional-components/loading-ripple.js
index d6b51cb2..4f16b2f9 100644
--- a/qortal-ui-core/src/functional-components/loading-ripple.js
+++ b/qortal-ui-core/src/functional-components/loading-ripple.js
@@ -29,6 +29,8 @@ class LoadingRipple extends LitElement {
static get styles () {
return css`
* {
+ --mdc-theme-primary: rgb(3, 169, 244);
+ --mdc-theme-secondary: var(--mdc-theme-primary);
--paper-spinner-color: var(--mdc-theme-secondary);
}
@@ -53,7 +55,7 @@ class LoadingRipple extends LitElement {
height:200vmax;
width:200vmax;
overflow:hidden;
- background: var(--mdc-theme-primary);
+ background: var(--black);
transform: scale(0);
overflow:hidden;
}
@@ -62,7 +64,7 @@ class LoadingRipple extends LitElement {
background: var(--mdc-theme-error)
}
#rippleShader {
- background: var(--mdc-theme-surface);
+ background: var(--white);
opacity:0;
height:100%;
width:100%;
@@ -108,9 +110,9 @@ class LoadingRipple extends LitElement {
-
${this.welcomeMessage}
+
${this.welcomeMessage}
-
${this.loadingMessage}
+
${this.loadingMessage}