4
1
mirror of https://github.com/Qortal/qortal-ui.git synced 2025-02-11 17:55:51 +00:00

Merge remote-tracking branch 'upstream/master' into feature/implement-logic-edit-reply-messages

This commit is contained in:
Phillip Lang Martinez 2023-01-03 19:56:43 -05:00
commit 486df018b1
85 changed files with 14173 additions and 1158 deletions

View File

@ -22,13 +22,14 @@ Packages required:
Easiest way to install the lastest required packages on Linux is via nvm.
``` sudo apt update && sudo apt install curl -y ``` <br/>
``` sudo rm -rf ~/.nvm ``` (Only for update node version)<br/>
``` curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash ``` <br/>
``` source ~/.profile ``` (For Debian based distro) <br/>
``` source ~/.bashrc ``` (For Fedora / CentOS) <br/>
``` nvm ls-remote ``` (Fetch list of available versions) <br/>
``` nvm install v16.16.0 ``` (LTS: Gallium supported by Electron) <br/>
``` npm --location=global install yarn ``` <br/>
``` npm --location=global install npm@8.19.2 ``` <br/>
``` nvm install v16.17.1 ``` (LTS: Gallium supported by Electron) <br/>
``` npm --location=global install yarn@1.22.19 ``` <br/>
``` npm --location=global install npm@9.2.0 ``` <br/>
On BSD do a ``` pkg_add node followed by npm install -g yarn ```

View File

@ -27,6 +27,8 @@ files:
- "config/"
- "scripts/"
- "build/"
- "lib/*.js"
- "locales/*.json"
# Mac OS configuration
mac:

View File

@ -1,15 +1,20 @@
const { app, BrowserWindow, ipcMain, Menu, Notification, Tray, nativeImage, dialog } = require('electron');
const { autoUpdater } = require('electron-updater');
const server = require('./server.js');
const log = require('electron-log');
const path = require('path');
const { app, BrowserWindow, ipcMain, Menu, Notification, Tray, nativeImage, dialog, webContents, nativeTheme } = require('electron')
const { autoUpdater } = require('electron-updater')
const server = require('./server.js')
const log = require('electron-log')
const path = require('path')
const i18n = require("./lib/i18n.js")
app.commandLine.appendSwitch('js-flags', '--max-old-space-size=512')
app.disableHardwareAcceleration()
app.enableSandbox()
process.env['APP_PATH'] = app.getAppPath();
process.env['APP_PATH'] = app.getAppPath()
autoUpdater.logger = log;
log.info('App starting...');
autoUpdater.autoDownload = false
autoUpdater.autoInstallOnAppQuit = false
autoUpdater.logger = log
autoUpdater.logger.transports.file.level = 'info'
log.info('App starting...')
const editMenu = Menu.buildFromTemplate([
{
@ -17,7 +22,7 @@ const editMenu = Menu.buildFromTemplate([
submenu: [{
label: "Quit",
click() {
app.quit();
app.quit()
}
}]
},
@ -33,20 +38,11 @@ const editMenu = Menu.buildFromTemplate([
{label: "Select All", accelerator: "CommandOrControl+A", selector: "selectAll:"}
]
}
]);
])
Menu.setApplicationMenu(editMenu);
Menu.setApplicationMenu(editMenu)
let myWindow = null;
// TODO: Move the Tray function into another file (maybe Tray.js) -_-
// const tray = new Tray(nativeImage.createEmpty());
const APP_ICON = path.join(__dirname, 'img', 'icons');
const iconPath = () => {
return APP_ICON + (process.platform === 'win32' ? '/ico/256x256.ico' : '/png/256x256.png');
};
let myWindow = null
function createWindow() {
myWindow = new BrowserWindow({
@ -55,15 +51,14 @@ function createWindow() {
height: 720,
minWidth: 700,
minHeight: 640,
icon: iconPath(),
icon: path.join(__dirname + '/img/icons/png/256x256.png'),
title: "Qortal UI",
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: false,
nodeIntegrationInWorker: true,
partition: 'persist:webviewsession',
enableRemoteModule: false,
nativeWindowOpen: false,
sandbox: true
enableRemoteModule: false
},
show: false
})
@ -73,16 +68,26 @@ function createWindow() {
myWindow.on('closed', function () {
myWindow = null
})
myWindow.on('minimize',function(event) {
myWindow.on('minimize', function (event) {
event.preventDefault()
myWindow.hide()
})
ipcMain.handle('dark-mode:toggle', () => {
if (nativeTheme.shouldUseDarkColors) {
nativeTheme.themeSource = 'light'
} else {
nativeTheme.themeSource = 'dark'
}
return nativeTheme.shouldUseDarkColors
})
ipcMain.handle('dark-mode:system', () => {
nativeTheme.themeSource = 'system'
})
}
const createTray = () => {
let myTray = new Tray(__dirname + '/img/icons/png/tray/tray.png')
let myTray = new Tray(path.join(__dirname + '/img/icons/png/tray/tray.png'))
const contextMenu = Menu.buildFromTemplate([
{
label: `Qortal UI v${app.getVersion()}`,
@ -92,15 +97,15 @@ const createTray = () => {
type: 'separator',
},
{
label: 'Show Qortal UI',
label: i18n.__("electron_translate_1"),
click: function () {
myWindow.maximize()
myWindow.show()
},
},
{
label: 'Quit',
click() {
label: i18n.__("electron_translate_2"),
click: function () {
myTray.destroy()
app.quit()
},
@ -112,57 +117,74 @@ const createTray = () => {
myTray.on("double-click", () => myWindow.maximize() , myWindow.show())
}
const isLock = app.requestSingleInstanceLock();
const isLock = app.requestSingleInstanceLock()
if (!isLock) {
app.quit()
} else {
app.on('second-instance', (event, cmd, dir) => {
app.on('second-instance', (event, commandLine, workingDirectory) => {
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
if (myWindow.isMinimized())
myWindow.maximize()
myWindow.show()
}
})
app.allowRendererProcessReuse = true
app.on('ready', () => {
createWindow();
createTray();
app.whenReady().then(() => {
createWindow()
createTray()
if (process.platform === 'win32') {
app.setAppUserModelId("org.qortal.QortalUI");
app.setAppUserModelId("org.qortal.QortalUI")
}
autoUpdater.checkForUpdatesAndNotify();
autoUpdater.checkForUpdatesAndNotify()
setInterval(() => {
autoUpdater.checkForUpdatesAndNotify();
}, 1000 * 60 * 15)
autoUpdater.checkForUpdatesAndNotify()
}, 1000 * 60 * 720)
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
createTray()
}
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit();
}
})
app.on('activate', function () {
if (myWindow === null) {
createWindow();
createTray();
}
})
ipcMain.on('app_version', (event) => {
log.info(app.getVersion());
mainWindow.webContents.send('app_version', { version: app.getVersion() });
});
autoUpdater.on('update-available', () => {
const n = new Notification({
title: 'Update Available!',
body: 'It will be downloaded ⌛️ in the background!'
log.info(app.getVersion())
mainWindow.webContents.send('app_version', { version: app.getVersion() })
})
autoUpdater.on('update-available', (event) => {
const downloadOpts = {
type: 'info',
buttons: ['YES', 'NO'],
title: i18n.__("electron_translate_3"),
detail: i18n.__("electron_translate_4")
}
dialog.showMessageBox(downloadOpts).then((returnValue) => {
if (returnValue.response === 0) {
autoUpdater.downloadUpdate()
const dl = new Notification({
title: i18n.__("electron_translate_11"),
body: i18n.__("electron_translate_12")
})
dl.show()
} else {
return
}
})
n.show();
})
autoUpdater.on('download-progress', (progressObj) => {
myWindow.webContents.send('downloadProgress', progressObj)
})
autoUpdater.on('update-downloaded', (event) => {
const dialogOpts = {
type: 'info',
buttons: ['Restart now', 'Install after close Qortal UI'],
title: 'Update available',
detail: 'A new Qortal UI version has been downloaded. Click RESTART NOW to apply update, or INSTALL AFTER CLOSE QORTAL UI to install after you quit the UI.'
buttons: [i18n.__("electron_translate_5"), i18n.__("electron_translate_6")],
title: i18n.__("electron_translate_7"),
message: i18n.__("electron_translate_8"),
detail: i18n.__("electron_translate_9")
}
dialog.showMessageBox(dialogOpts).then((returnValue) => {
if (returnValue.response === 0) {
@ -174,9 +196,12 @@ if (!isLock) {
})
autoUpdater.on('error', (err) => {
const n = new Notification({
title: 'Error while Updating...',
title: i18n.__("electron_translate_10"),
body: err
})
n.show();
n.show()
})
process.on('uncaughtException', function (err) {
log.info("***WHOOPS TIME****"+err)
})
}

BIN
img/notfound.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

165
lib/i18n.js Normal file
View File

@ -0,0 +1,165 @@
const osLocale = require("os-locale");
const fs = require("fs");
const path = require("path");
let cache = {
defaultLocale: "en",
availableLocales: [],
canonicalLocales: [],
locales: []
};
let i18n = {};
i18n.__ = function(name) {
i18n.getLocale();
let string = i18n.getLocaleData(cache.locale)[name] || i18n.getLocaleData(cache.defaultLocale)[name];
if (!string) {
let underscoreIndex = cache.locale.indexOf("_");
if (underscoreIndex !== -1) {
let localeBaseCode = cache.locale.substring(0, underscoreIndex);
if (i18n.localeExists(localeBaseCode)) {
string = i18n.getLocaleData(localeBaseCode)[name];
}
}
}
if (string) {
if (arguments.length === 1) {
return string;
} else {
for (let i = 0, l = arguments.length - 1; i < l; i++) {
string = string.replace("$" + i, arguments[1 + i]);
}
return string;
}
} else {
console.warn(`String "${name}" does not exist.`)
}
};
i18n.localeExists = function(locale) {
return i18n.getAvailableLocales().indexOf(locale) !== -1;
};
i18n.getLocaleData = function(locale) {
if (!cache.locales[locale]) {
cache.locales[locale] = i18n.readLocaleFile(locale);
}
return cache.locales[locale];
};
i18n.readLocaleFile = function(locale) {
let localeData = JSON.parse(fs.readFileSync(
path.join(__dirname, "..", "locales", locale + ".json"),
{ encoding: "utf8" }
));
if (localeData.__redirect__) {
let redirectedLocaleData = JSON.parse(fs.readFileSync(
path.join(__dirname, "..", "locales", localeData.__redirect__ + ".json"),
{ encoding: "utf8" }
));
redirectedLocaleData.__is_redirected__ = true;
redirectedLocaleData.__canonical__ = localeData.__redirect__;
return redirectedLocaleData;
} else {
return localeData;
}
};
i18n.doDOMReplacement = function() {
let elems0 = document.getElementsByClassName("i18n");
for (let i = 0, l = elems0.length; i < l; i++) {
elems0[i].innerHTML = i18n.__(elems0[i].dataset.i18nName);
}
let elems1 = document.getElementsByClassName("i18n-attr");
for (let i = 0, l = elems1.length; i < l; i++) {
let mappings = elems1[i].dataset.i18nMap.split(";");
for (let j = 0, m = mappings.length; j < m; j++) {
let keyVal = mappings[j].split(":");
elems1[i].setAttribute(keyVal[0], i18n.__(keyVal[1]));
}
}
};
i18n.setLocale = function(locale) {
if (i18n.localeExists(locale)) {
cache.locale = locale;
return true;
}
return false;
};
i18n.getLocale = function() {
if (!cache.locale) {
let systemLocale = osLocale.sync();
let availableLocales = i18n.getAvailableLocales();
if (availableLocales.indexOf(systemLocale) !== -1) {
cache.locale = systemLocale;
} else if (availableLocales.indexOf(systemLocale.split("_")[0]) !== -1) {
cache.locale = systemLocale.split("_")[0];
} else {
var looseLocaleMatch;
for (let i = 0, l = availableLocales.length; i < l; i++) {
if (availableLocales[i].split("_")[0] === systemLocale.split("_")[0]) {
looseLocaleMatch = availableLocales[i];
break;
}
}
if (looseLocaleMatch) {
cache.locale = looseLocaleMatch;
} else {
cache.locale = cache.defaultLocale;
}
}
}
return cache.locale;
};
i18n.getCanonicalLocale = function() {
i18n.getLocale();
if (!cache.locales[cache.locale]) {
cache.locales[cache.locale] = i18n.readLocaleFile(cache.locale);
}
if (cache.locales[cache.locale].__canonical__) {
return cache.locales[cache.locale].__canonical__;
} else {
return cache.locale;
}
};
i18n.getAvailableLocales = function(canonicalOnly) {
if (!cache.availableLocales.length) {
let filenames = fs.readdirSync(path.join(__dirname, "..", "locales"));
for (let i = 0, l = filenames.length; i < l; i++) {
cache.availableLocales.push(filenames[i].split(".")[0]);
}
}
if (canonicalOnly) {
return i18n.getCanonicalLocales();
} else {
return cache.availableLocales;
}
};
i18n.getCanonicalLocales = function() {
i18n.getAvailableLocales();
if (!cache.canonicalLocales.length) {
for (let i = 0, l = cache.availableLocales.length; i < l; i++) {
if (!i18n.readLocaleFile(cache.availableLocales[i]).hasOwnProperty("__is_redirected__")) {
cache.canonicalLocales.push(cache.availableLocales[i]);
}
}
}
return cache.canonicalLocales;
};
i18n.getDefaultLocale = function() {
return cache.defaultLocale;
};
module.exports = i18n;

16
locales/bg.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Български",
"electron_translate_1": "Показване на Qortal UI",
"electron_translate_2": "Изход",
"electron_translate_3": "Налична е актуализация",
"electron_translate_4": "Налична е нова версия на Qortal UI. Искате ли да я изтеглите?",
"electron_translate_5": "ИНСТАЛИРАНЕ СЕГА",
"electron_translate_6": "МОЖЕ БИ ПО-КЪСНО",
"electron_translate_7": "Актуализацията е готова за инсталиране",
"electron_translate_8": "Беше изтеглена нова версия на Qortal UI.",
"electron_translate_9": "Щракнете върху ИНСТАЛИРАНЕ СЕГА, за да приложите актуализация, МОЖЕ БИ ПО-КЪСНО, за да не актуализирате потребителския интерфейс.",
"electron_translate_10": "Грешка при актуализиране...",
"electron_translate_11": "ИЗТЕГЛЕТЕ АКТУАЛИЗАЦИЯТА",
"electron_translate_12": "Ще бъде изтеглено ⌛️ във фонов режим!"
}

16
locales/de.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Deutsch, Deutschland",
"electron_translate_1": "Qortal-UI anzeigen",
"electron_translate_2": "Beenden",
"electron_translate_3": "Update verfügbar",
"electron_translate_4": "Eine neue Version der Qortal-Benutzeroberfläche ist verfügbar. Möchten Sie sie herunterladen?",
"electron_translate_5": "JETZT INSTALLIEREN",
"electron_translate_6": "VIELLEICHT SPÄTER",
"electron_translate_7": "Update zur Installation bereit",
"electron_translate_8": "Eine neue Qortal-UI-Version wurde heruntergeladen.",
"electron_translate_9": "Klicken Sie auf JETZT INSTALLIEREN, um das Update anzuwenden, VIELLEICHT SPÄTER, um die Benutzeroberfläche nicht zu aktualisieren.",
"electron_translate_10": "Fehler beim Aktualisieren...",
"electron_translate_11": "UPDATE HERUNTERLADEN",
"electron_translate_12": "Das Update wird im Hintergrund heruntergeladen ⌛️!"
}

16
locales/en.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "English",
"electron_translate_1": "Show Qortal UI",
"electron_translate_2": "Quit",
"electron_translate_3": "Update available",
"electron_translate_4": "A new Qortal UI version is available. You want to download it ?",
"electron_translate_5": "INSTALL NOW",
"electron_translate_6": "MAYBE LATER",
"electron_translate_7": "Update ready to install",
"electron_translate_8": "A new Qortal UI version has been downloaded.",
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
"electron_translate_10": "Error while Updating...",
"electron_translate_11": "DOWNLOAD UPDATE",
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
}

16
locales/es.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "español",
"electron_translate_1": "Mostrar interfaz de usuario de Qortal",
"electron_translate_2": "Salir",
"electron_translate_3": "Actualización disponible",
"electron_translate_4": "Hay una nueva versión de Qortal UI disponible. ¿Quieres descargarla?",
"electron_translate_5": "INSTALAR AHORA",
"electron_translate_6": "QUIZÁS MÁS TARDE",
"electron_translate_7": "Actualización lista para instalar",
"electron_translate_8": "Se ha descargado una nueva versión de la interfaz de usuario de Qortal.",
"electron_translate_9": "Haz clic en INSTALAR AHORA para aplicar la actualización, QUIZÁS MÁS TARDE para no actualizar la interfaz de usuario".,
"electron_translate_10": "Error al actualizar...",
"electron_translate_11": "DESCARGAR ACTUALIZACIÓN",
"electron_translate_12": "¡Se descargará ⌛️ en segundo plano!"
}

16
locales/fr.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Français",
"electron_translate_1": "Afficher l'interface utilisateur de Qortal",
"electron_translate_2": "Quitter",
"electron_translate_3": "Mise à jour disponible",
"electron_translate_4": "Une nouvelle version de l'UI Qortal est disponible. Vous voulez la télécharger ?",
"electron_translate_5": "INSTALLER MAINTENANT",
"electron_translate_6": "PEUT-ÊTRE PLUS TARD",
"electron_translate_7": "Mise à jour prête à installer",
"electron_translate_8": "Une nouvelle version de l'interface utilisateur de Qortal a été téléchargée.",
"electron_translate_9": "Cliquez sur INSTALLER MAINTENANT pour appliquer la mise à jour, PEUT-ÊTRE PLUS TARD pour ne pas mettre à jour l'interface utilisateur.",
"electron_translate_10": "Erreur lors de la mise à jour...",
"electron_translate_11": "TÉLÉCHARGER LA MISE À JOUR",
"electron_translate_12": "Il sera téléchargé ⌛️ en arrière-plan !"
}

16
locales/it.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Italiano",
"electron_translate_1": "Mostra UI Qortal",
"electron_translate_2": "Esci",
"electron_translate_3": "Aggiornamento disponibile",
"electron_translate_4": "È disponibile una nuova versione dell'interfaccia utente di Qortal. Vuoi scaricarla?",
"electron_translate_5": "INSTALLA ORA",
"electron_translate_6": "FORSE PIÙ TARDI",
"electron_translate_7": "Aggiornamento pronto per l'installazione",
"electron_translate_8": "È stata scaricata una nuova versione dell'interfaccia utente di Qortal.",
"electron_translate_9": "Fai clic su INSTALLA ORA per applicare l'aggiornamento, FORSE DOPO per non aggiornare l'interfaccia utente.",
"electron_translate_10": "Errore durante l'aggiornamento...",
"electron_translate_11": "SCARICA AGGIORNAMENTO",
"electron_translate_12": "Verrà scaricato ⌛️ in background!"
}

16
locales/ko.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "한국어",
"electron_translate_1": "Qortal UI 표시",
"electron_translate_2": "종료",
"electron_translate_3": "업데이트 가능",
"electron_translate_4": "새로운 Qortal UI 버전을 사용할 수 있습니다. 다운로드하시겠습니까?",
"electron_translate_5": "지금 설치",
"electron_translate_6": "나중에 가능",
"electron_translate_7": "업데이트 설치 준비 완료",
"electron_translate_8": "새로운 Qortal UI 버전이 다운로드되었습니다.",
"electron_translate_9": "업데이트를 적용하려면 지금 설치를 클릭하고 UI를 업데이트하지 않으려면 나중에 할 수도 있습니다.",
"electron_translate_10": "업데이트 중 오류...",
"electron_translate_11": "업데이트 다운로드",
"electron_translate_12": "백그라운드에서 ⌛️ 다운로드됩니다!"
}

16
locales/nl.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Nederlands",
"electron_translate_1": "Toon Qortal UI",
"electron_translate_2": "Stoppen",
"electron_translate_3": "Update beschikbaar",
"electron_translate_4": "Er is een nieuwe Qortal UI-versie beschikbaar. Wil je deze downloaden?",
"electron_translate_5": "NU INSTALLEREN",
"electron_translate_6": "MISSCHIEN LATER",
"electron_translate_7": "Update klaar om te installeren",
"electron_translate_8": "Er is een nieuwe Qortal UI-versie gedownload.",
"electron_translate_9": "Klik op NU INSTALLEREN om de update toe te passen, MISSCHIEN LATER om de gebruikersinterface niet bij te werken.",
"electron_translate_10": "Fout tijdens updaten...",
"electron_translate_11": "UPDATE DOWNLOADEN",
"electron_translate_12": "Het wordt ⌛️ op de achtergrond gedownload!"
}

16
locales/pt.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Português",
"electron_translate_1": "Mostrar Qortal UI",
"electron_translate_2": "Sair",
"electron_translate_3": "Atualização disponível",
"electron_translate_4": "Uma nova versão Qortal UI está disponível. Deseja baixá-la?",
"electron_translate_5": "INSTALE AGORA",
"electron_translate_6": "TALVEZ MAIS TARDE",
"electron_translate_7": "Atualização pronta para instalar",
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
"electron_translate_10": "Erro ao atualizar...",
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
}

16
locales/pt_BR.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Português Brasileiro",
"electron_translate_1": "Mostrar Qortal UI",
"electron_translate_2": "Sair",
"electron_translate_3": "Atualização disponível",
"electron_translate_4": "Uma nova versão Qortal UI está disponível. Deseja baixá-la?",
"electron_translate_5": "INSTALE AGORA",
"electron_translate_6": "TALVEZ MAIS TARDE",
"electron_translate_7": "Atualização pronta para instalar",
"electron_translate_8": "Uma nova versão Qortal UI foi baixada.",
"electron_translate_9": "Clique em INSTALAR AGORA para aplicar a atualização, TALVEZ MAIS TARDE para não atualizar a UI.",
"electron_translate_10": "Erro ao atualizar...",
"electron_translate_11": "BAIXAR ATUALIZAÇÃO",
"electron_translate_12": "Será baixado ⌛️ em segundo plano!"
}

16
locales/ru_RU.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Русский, Россия",
"electron_translate_1": "Показать пользовательский интерфейс Qortal",
"electron_translate_2": "Выйти",
"electron_translate_3": "Доступно обновление",
"electron_translate_4": "Доступна новая версия пользовательского интерфейса Qortal. Хотите скачать ее?",
"electron_translate_5": "УСТАНОВИТЬ СЕЙЧАС",
"electron_translate_6": "МОЖЕТ БЫТЬ ПОЗЖЕ",
"electron_translate_7": "Обновление готово к установке",
"electron_translate_8": "Загружена новая версия пользовательского интерфейса Qortal.",
"electron_translate_9": "Нажмите УСТАНОВИТЬ СЕЙЧАС, чтобы применить обновление, МОЖЕТ БЫТЬ ПОЗЖЕ, чтобы не обновлять пользовательский интерфейс.",
"electron_translate_10": "Ошибка при обновлении...",
"electron_translate_11": "СКАЧАТЬ ОБНОВЛЕНИЕ",
"electron_translate_12": "Он будет загружен ⌛️ в фоновом режиме!"
}

16
locales/tr.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Türkçe",
"electron_translate_1": "Qortal Kullanıcı Arayüzünü Göster",
"electron_translate_2": ık",
"electron_translate_3": "Güncelleme mevcut",
"electron_translate_4": "Yeni bir Qortal UI sürümü mevcut. İndirmek istiyor musunuz?",
"electron_translate_5": "ŞİMDİ YÜKLE",
"electron_translate_6": "BELKİ SONRA",
"electron_translate_7": "Güncelleme yüklenmeye hazır",
"electron_translate_8": "Yeni bir Qortal UI sürümü indirildi.",
"electron_translate_9": "Güncellemeyi uygulamak için ŞİMDİ YÜKLE'ye tıklayın, kullanıcı arayüzünü güncellememek için MAYBE SONRA tıklayın.",
"electron_translate_10": "Güncelleme Sırasında Hata...",
"electron_translate_11": "GÜNCELLEMEYİ İNDİRİN",
"electron_translate_12": "Arka planda ⌛️ indirilecek!"
}

16
locales/uk.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "Українська, Україна",
"electron_translate_1": "Show Qortal UI",
"electron_translate_2": "Quit",
"electron_translate_3": "Update available",
"electron_translate_4": "A new Qortal UI version is available. You want to download it ?",
"electron_translate_5": "INSTALL NOW",
"electron_translate_6": "MAYBE LATER",
"electron_translate_7": "Update ready to install",
"electron_translate_8": "A new Qortal UI version has been downloaded.",
"electron_translate_9": "Click INSTALL NOW to apply update, MAYBE LATER to not update the UI.",
"electron_translate_10": "Error while Updating...",
"electron_translate_11": "DOWNLOAD UPDATE",
"electron_translate_12": "It will be downloaded ⌛️ in the background!"
}

16
locales/zh_CN.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "中文 (简体)",
"electron_translate_1": "显示 Qortal 用户界面",
"electron_translate_2": "退出",
"electron_translate_3": "更新可用",
"electron_translate_4": "一个新的 Qortal UI 版本可用。你想下载它吗?",
"electron_translate_5": "立即安装",
"electron_translate_6": "稍后再说",
"electron_translate_7": "更新准备安装",
"electron_translate_8": "已下载新的 Qortal UI 版本。",
"electron_translate_9": "点击现在安装应用更新,可能稍后不更新用户界面。",
"electron_translate_10": "更新时出错...",
"electron_translate_11": "下载更新",
"electron_translate_12": "它将在后台下载 ⌛️!"
}

3
locales/zh_HK.json Normal file
View File

@ -0,0 +1,3 @@
{
"__redirect__": "zh_TW"
}

16
locales/zh_TW.json Normal file
View File

@ -0,0 +1,16 @@
{
"__locale_name__": "中文 (繁體)",
"electron_translate_1": "顯示 Qortal 用戶界面",
"electron_translate_2": "退出",
"electron_translate_3": "更新可用",
"electron_translate_4": "一個新的 Qortal UI 版本可用。你想下載它嗎?",
"electron_translate_5": "立即安裝",
"electron_translate_6": "稍後再說",
"electron_translate_7": "更新準備安裝",
"electron_translate_8": "已下載新的 Qortal UI 版本。",
"electron_translate_9": "點擊現在安裝應用更新,可能稍後不更新用戶界面。",
"electron_translate_10": "更新時出錯...",
"electron_translate_11": "下載更新",
"electron_translate_12": "它將在後台下載 ⌛️!"
}

View File

@ -1,48 +1,49 @@
{
"name": "qortal-ui",
"version": "2.1.1",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
"QORTAL",
"DECENTRALIZED"
],
"main": "electron.js",
"repository": {
"type": "git",
"url": "git+https://github.com/Qortal/qortal-ui.git"
},
"homepage": "https://qortal.org",
"author": "QORTAL <admin@qortal.org>",
"license": "GPL-3.0",
"scripts": {
"install_link:all": "(cd qortal-ui-core && yarn install && yarn link) && (cd qortal-ui-plugins && yarn install && yarn link) && (cd qortal-ui-crypto && yarn install && yarn link) && (yarn link qortal-ui-core && yarn link qortal-ui-plugins && yarn link qortal-ui-crypto)",
"dev": "node server.js",
"prebuild": "node -p \"'export const UI_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > qortal-ui-core/src/redux/app/version.js",
"build-dev": "node build.js",
"build": "NODE_ENV=production node build.js",
"server": "NODE_ENV=production node server.js",
"watch": "node watch.js",
"watch-inline": "node watch-inline.js",
"start-electron": "NODE_ENV=production electron .",
"build-electron": "electron-builder build --publish never",
"deploy-electron": "electron-builder build --win --publish never",
"release": "NODE_ENV=production electron-builder build --publish never",
"update-package-json": "node update-package-json.js",
"publish": "electron-builder -p always"
},
"dependencies": {
"electron-log": "4.4.8",
"electron-updater": "5.2.1"
},
"devDependencies": {
"electron": "21.1.1",
"electron-builder": "23.3.3",
"electron-notarize": "1.2.1",
"electron-packager": "16.0.0",
"shelljs": "0.8.5"
},
"engines": {
"node": ">=16.15.0"
}
"name": "qortal-ui",
"version": "2.2.4",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
"QORTAL",
"DECENTRALIZED"
],
"main": "electron.js",
"repository": {
"type": "git",
"url": "git+https://github.com/Qortal/qortal-ui.git"
},
"homepage": "https://qortal.org",
"author": "QORTAL <admin@qortal.org>",
"license": "GPL-3.0",
"scripts": {
"install_link:all": "(cd qortal-ui-core && yarn install && yarn link) && (cd qortal-ui-plugins && yarn install && yarn link) && (cd qortal-ui-crypto && yarn install && yarn link) && (yarn link qortal-ui-core && yarn link qortal-ui-plugins && yarn link qortal-ui-crypto)",
"dev": "node server.js",
"prebuild": "node -p \"'export const UI_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > qortal-ui-core/src/redux/app/version.js",
"build-dev": "node build.js",
"build": "NODE_ENV=production node build.js",
"server": "NODE_ENV=production node server.js",
"watch": "node watch.js",
"watch-inline": "node watch-inline.js",
"start-electron": "NODE_ENV=production electron .",
"build-electron": "electron-builder build --publish never",
"deploy-electron": "electron-builder build --win --publish never",
"release": "NODE_ENV=production electron-builder build --publish never",
"update-package-json": "node update-package-json.js",
"publish": "electron-builder -p always"
},
"dependencies": {
"electron-log": "4.4.8",
"electron-updater": "5.3.0",
"os-locale": "3.0.0"
},
"devDependencies": {
"electron": "22.0.0",
"electron-builder": "23.6.0",
"electron-packager": "17.1.1",
"@electron/notarize": "1.2.3",
"shelljs": "0.8.5"
},
"engines": {
"node": ">=16.17.1"
}
}

View File

@ -21,7 +21,6 @@ const apiComponents = {
}
}
const functionalComponents = {
'loading-ripple': {
file: 'functional-components/loading-ripple.js',
@ -69,10 +68,6 @@ const elementComponents = {
file: 'components/show-plugin.js',
className: 'ShowPlugin'
},
'sidenav-menu': {
file: 'components/sidenav-menu.js',
className: 'SidenavMenu'
},
'wallet-profile': {
file: 'components/wallet-profile.js',
className: 'WalletProfile'
@ -118,6 +113,10 @@ const elementComponents = {
className: 'NotificationsView'
}
}
},
'user-info-view': {
file: 'components/user-info-view/user-info-view.js',
className: 'UserInfoView'
}
}
}

View File

@ -1,11 +1,14 @@
export * from '../components/main-app.js'
export * from '../styles/app-styles.js'
export * from '../styles/app-theme.js'
export * from '../components/app-view.js'
export * from '../components/show-plugin.js'
export * from '../components/sidenav-menu.js'
export * from '../components/wallet-profile.js'
export * from '../components/app-info.js'
export * from '../components/login-view/login-view.js'
export * from '../components/app-view.js'
export * from '../components/language-selector.js'
export * from '../components/main-app.js'
export * from '../components/qort-theme-toggle.js'
export * from '../components/show-plugin.js'
export * from '../components/start-minting.js'
export * from '../components/wallet-profile.js'
export * from '../components/login-view/create-account-section.js'
export * from '../components/login-view/login-section.js'
export * from '../components/login-view/login-view.js'
export * from '../components/user-info-view/user-info-view.js'
export * from '../styles/app-styles.js'
export * from '../styles/app-theme.js'

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"GRUPPENMANAGEMENT",
"puzzles":"RÄTSEL",
"nodemanagement":"KNOTENVERWALTUNG"
"nodemanagement":"KNOTENVERWALTUNG",
"trading":"HANDELN",
"groups":"GRUPPEN"
},
"login":{
"login":"Einloggen",
@ -133,7 +135,8 @@
"uiversion":"UI Version",
"coreversion":"Kern Version",
"minting":"(Prägung)",
"synchronizing":"Synchronisieren"
"synchronizing":"Synchronisieren",
"peers":"Verbundene Peers"
},
"walletprofile":{
"minterlevel":"Minter Level",
@ -150,7 +153,9 @@
"next":"Weiter",
"create":"Erstellen",
"continue":"Fortsetzen",
"save":"Speichern"
"save":"Speichern",
"balance":"Guthaben",
"balances":"IHR WALLET-GUTHABEN"
},
"startminting":{
"smchange1":"Prägekonten können nicht abgerufen werden",
@ -308,7 +313,22 @@
"tchange30":"Guthaben konnte nicht abgerufen werden. Versuchen Sie es nochmal!",
"tchange31":"VERKAUFT",
"tchange32":"GEKAUFT",
"tchange33":"Tauschrate"
"tchange33":"Durchschnitt",
"tchange34":"Betrag darf nicht 0 sein",
"tchange35":"Der Preis darf nicht 0 sein",
"tchange36":"AUSSTEHENDER AUTOKAUF",
"tchange37":"Keine automatische Kaufbestellung gefunden!",
"tchange38":"HINZUFÜGEN",
"tchange39":"AUTO KAUFAUFTRAG",
"tchange40":"Preis",
"tchange41":"Automatischer Kaufauftrag erfolgreich entfernt!",
"tchange42":"MARKET OFFENE VERKAUFSAUFTRÄGE",
"tchange43":"MEINE KAUFGESCHICHTE",
"tchange44":"Automatischer Kaufauftrag erfolgreich hinzugefügt!",
"tchange45":"AUTO KAUFEN MIT",
"tchange46":"AUTOKAUF",
"tchange47":"Verkaufe für diesen Preis",
"tchange48":"NICHT GENUG"
},
"rewardsharepage":{
"rchange1":"Belohnungsanteile",
@ -352,7 +372,29 @@
"nchange15":"Avatar festlegen",
"nchange16":"Core-Update erforderlich",
"nchange17":"Name existiert bereits!",
"nchange18":"Namensregistrierung erfolgreich!"
"nchange18":"Namensregistrierung erfolgreich!",
"nchange19":"Name Verkaufen",
"nchange20":"Verkauf abbrechen",
"nchange21":"Name kaufen",
"nchange22":"Offenstehende Namen zum Verkauf",
"nchange23":"Verkaufspreis",
"nchange24":"Keine Namen zu verkaufen",
"nchange25":"Name zu verkaufen",
"nchange26":"Sind Sie sicher, dass Sie diesen Namen verkaufen möchten?",
"nchange27":"Für diesen Preis in QORT",
"nchange28":"Beim Drücken auf Bestätigen wird die Anfrage zum Verkauf gesendet!",
"nchange29":"Name zu stornieren",
"nchange30":"Sind Sie sicher, den Verkauf für diesen Namen abzubrechen?",
"nchange31":"Beim Drücken auf Bestätigen wird die Anfrage zum Stornieren des Verkaufs gesendet!",
"nchange32":"Namensverkaufsanfrage erfolgreich!",
"nchange33":"Verkaufsnamensanfrage erfolgreich stornieren!",
"nchange34":"Kaufname-Anfrage erfolgreich!",
"nchange35":"DU HAST EINEN NAMEN!",
"nchange36":"Nur Konten ohne registrierten Namen können einen Namen kaufen.",
"nchange37":"ACHTUNG!",
"nchange38":"Du hast nicht genug Qort, um diesen Namen zu kaufen.",
"nchange39":"Sind Sie sicher, diesen Namen zu kaufen?",
"nchange40":"Wenn Sie auf Bestätigen drücken, wird die Anfrage zum Kauf des Namens gesendet!"
},
"websitespage":{
"schange1":"Webseiten durchsuchen",
@ -483,7 +525,9 @@
"cchange21":"Senden fehlgeschlagen, bitte erneut versuchen...",
"cchange22":"Lade Nachrichten...",
"cchange23":"Nachricht kann nicht entschlüsselt werden!",
"cchange24":"Die maximale Zeichenzahl pro Nachricht beträgt 255"
"cchange24":"Die maximale Zeichenzahl pro Nachricht beträgt 255",
"cchange25":"Ihr Guthaben liegt unter 4,20 QORT",
"cchange26":"Aus Gründen der Spam-Bekämpfung benötigen Konten mit einem Qort-Guthaben von weniger als 4,20 viel Zeit, um Nachrichten in Q-Chat zu SENDEN. Wenn Sie die Sendegeschwindigkeit für Q-Chat-Nachrichten sofort erhöhen möchten, besorgen Sie sich über 4,20 QORT an Ihre Adresse. Dies kann mit Trades im Handelsportal oder über einen anderen Qortian erfolgen, der Ihnen die QORT gibt. Sobald Sie über 4,20 QORT in Ihrem Konto haben, werden Q-Chat-Nachrichten sofort gesendet und dieser Dialog wird nicht mehr angezeigt Show. Vielen Dank für Ihr Verständnis für diese notwendige Spam-Präventionsmethode, und wir hoffen, dass Ihnen Qortal gefällt!"
},
"welcomepage":{
"wcchange1":"Willkommen zu Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Sponsoring-Schlüssel kopieren",
"schange20":"Beziehung schaffen",
"schange21":"Sponsoring-Schlüssel entfernen"
},
"explorerpage":{
"exp1":"Adresse oder Name zum Suchen",
"exp2":"Kontostand",
"exp3":"Mehr Info",
"exp4":"Adresse oder Name nicht gefunden !",
"exp5":"Beachten Sie, dass bei registrierten Namen zwischen Groß- und Kleinschreibung unterschieden wird.",
"exp6":"Gründer",
"exp7":"Info",
"exp8":"Alle Kaufgeschäfte anzeigen",
"exp9":"Alle Verkaufsgeschäfte anzeigen",
"exp10":"KAUFGESCHICHTE",
"exp11":"VERKAUFSGESCHICHTE",
"exp12":"Noch keine Kauftransaktionen getätigt.",
"exp13":"Noch keine Verkaufsgeschäfte getätigt.",
"exp14":"Vollständige Informationen anzeigen",
"exp15":"Prägung seit",
"exp16":"Nicht am prägen",
"exp17":"ALLE ZAHLUNGEN",
"exp18":"Zahlungen",
"exp19":"Gesendet",
"exp20":"Empfangen",
"exp21":"Trades"
},
"managegroup":{
"mg1":"Gruppenmitglieder",
"mg2":"Zur Gruppe einladen",
"mg3":"Gruppen-Admins",
"mg4":"Gruppe aktualisieren",
"mg5":"Gruppe verwalten schließen",
"mg6":"BAN",
"mg7":"KICK",
"mg8":"Gruppen-ID",
"mg9":"Beigetreten",
"mg10":"Gruppenadministrator hinzufügen",
"mg11":"Sind Sie sicher, dass Sie dieses Mitglied zu den Administratoren hinzufügen möchten?",
"mg12":"Beim Drücken auf Bestätigen wird eine Admin-Anfrage gesendet!",
"mg13":"Gruppenadministrator entfernen",
"mg14":"Admin-Adresse entfernen",
"mg15":"Möchten Sie dieses Mitglied wirklich aus den Administratoren entfernen?",
"mg16":"Beim Drücken auf Bestätigen wird eine Admin-Anforderung zum Entfernen gesendet!",
"mg17":"Mitglied aus Gruppe sperren",
"mg18":"Mitgliedsname",
"mg19":"Mitgliedsadresse",
"mg20":"Wie lange verbieten",
"mg21":"Grund für Sperre",
"mg22":"Möchtest du dieses Mitglied wirklich aus der Gruppe verbannen?",
"mg23":"Beim Drücken auf Bestätigen wird die Sperranfrage gesendet!",
"mg24":"FÜR IMMER",
"mg25":"Gesperrte Mitglieder",
"mg26":"VERBOT AUFHEBEN",
"mg27":"Ablauf der Sperre",
"mg28":"Sperrung eines Gruppenmitglieds aufheben",
"mg29":"Sind Sie sicher, dass Sie die Sperre für dieses Mitglied aus der Gruppe aufheben wollen?",
"mg30":"Beim Drücken auf Bestätigen wird die Anfrage zum Aufheben des Verbots gesendet!",
"mg31":"Mitglied aus Gruppe werfen",
"mg32":"Grund für Tritt",
"mg33":"Wollen Sie dieses Mitglied wirklich aus der Gruppe werfen?",
"mg34":"Beim Bestätigen wird die Kick-Anfrage gesendet!",
"mg35":"Keine offenen Gruppeneinladungen",
"mg36":"Ihre offene Gruppe lädt ein",
"mg37":"Adresse oder Name zum Einladen",
"mg38":"Ablaufzeit der Einladung",
"mg39":"Alle Felder sind Pflichtfelder",
"mg40":"Möchten Sie dieses Mitglied wirklich in die Gruppe einladen?",
"mg41":"Beim Drücken auf Bestätigen wird die Einladungsanfrage gesendet!",
"mg42":"Gruppentyp",
"mg43":"Verfall einladen",
"mg44":"Öffentliche Gruppe",
"mg45":"Private Gruppe",
"mg46":"Einladung stornieren",
"mg47":"Einladung zur Gruppe abbrechen",
"mg48":"Möchten Sie die Einladung für dieses Mitglied wirklich abbrechen?",
"mg49":"Beim Drücken auf Bestätigen wird die Anfrage zum Abbrechen der Einladung gesendet!",
"mg50":"Kommt bald...",
"mg51":"Minimum 3 Zeichen / Maximum 32 Zeichen",
"mg52":"Maximal 128 Zeichen"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"GESTIÓN DE GRUPO",
"puzzles":"ROMPECABEZAS",
"nodemanagement":"GESTIÓN DE NODO"
"nodemanagement":"GESTIÓN DE NODO",
"trading":"COMERCIO",
"groups":"GRUPOS"
},
"login":{
"login":"Iniciar sesión",
@ -133,7 +135,8 @@
"uiversion":"Versión de la UI",
"coreversion":"Versión del Core",
"minting":"(Acuñando)",
"synchronizing":"Sincronizando"
"synchronizing":"Sincronizando",
"peers":"Compañeros conectados"
},
"walletprofile":{
"minterlevel":"Nivel del acuñador",
@ -150,7 +153,9 @@
"next":"Siguiente",
"create":"Crear",
"continue":"Continuar",
"save":"Guardar"
"save":"Guardar",
"balance":"Saldo",
"balances":"LOS SALDOS DE TU BILLETERA"
},
"startminting":{
"smchange1":"No se pueden obtener cuentas de acuñación",
@ -308,7 +313,22 @@
"tchange30":"Fallo en la obtención del saldo. Inténtelo de nuevo!",
"tchange31":"VENDIDO",
"tchange32":"COMPRADO",
"tchange33":"Tipo de cambio"
"tchange33":"Promedio",
"tchange34":"La cantidad no puede ser 0",
"tchange35":"El precio no puede ser 0",
"tchange36":"AUTO COMPRA PENDIENTE",
"tchange37":"No se ha encontrado ninguna orden de compra automática!",
"tchange38":"AGREGAR",
"tchange39":"AUTO ORDEN DE COMPRA",
"tchange40":"Precio",
"tchange41":"Orden de compra automática eliminada con éxito!",
"tchange42":"MERCADO ABIERTO ÓRDENES DE VENTA",
"tchange43":"MI HISTORIAL DE COMPRAS",
"tchange44":"Orden de compra automática agregada con éxito!",
"tchange45":"AUTO COMPRAR CON",
"tchange46":"COMPRA AUTOMÁTICA",
"tchange47":"Vender por este precio",
"tchange48":"NO ES SUFICIENTE"
},
"rewardsharepage":{
"rchange1":"Rewardshares",
@ -352,7 +372,29 @@
"nchange15":"Establecer Avatar",
"nchange16":"Es necesario actualizar el Core",
"nchange17":"El Nombre ya existe!",
"nchange18":"Registro de nombre existoso!"
"nchange18":"Registro de nombre existoso!",
"nchange19":"Nombre de venta",
"nchange20":"Cancelar venta",
"nchange21":"Nombre de compra",
"nchange22":"Nombres de mercado abierto para vender",
"nchange23":"Precio de venta",
"nchange24":"No hay nombres para vender",
"nchange25":"Nombre para vender",
"nchange26":"¿Estás seguro de vender este nombre?",
"nchange27":"Por este precio en QORT",
"nchange28":"¡Al presionar confirmar, se enviará la solicitud de nombre de venta!",
"nchange29":"Nombre para cancelar",
"nchange30":"¿Está seguro de cancelar la venta de este nombre?",
"nchange31":"¡Al presionar confirmar, se enviará la solicitud de cancelación de nombre de venta!",
"nchange32":"¡Solicitud de nombre de venta exitosa!",
"nchange33":"¡Cancelar solicitud de venta de nombre exitosa!",
"nchange34":"¡Solicitud de nombre de compra exitosa!",
"nchange35":"¡TIENES UN NOMBRE!",
"nchange36":"Solo las cuentas sin nombre registrado pueden comprar un nombre.",
"nchange37":"¡ATENCIÓN!",
"nchange38":"No tienes suficiente qort para comprar este nombre.",
"nchange39":"¿Estás seguro de comprar este nombre?",
"nchange40":"¡Al presionar confirmar, se enviará la solicitud de compra de nombre!"
},
"websitespage":{
"schange1":"Navegar sitios web",
@ -483,7 +525,9 @@
"cchange21":"El envío ha fallado, por favor intente de nuevo...",
"cchange22":"Cargando Mensajes...",
"cchange23":"No se puede descifrar el mensaje!",
"cchange24":"El máximo de caracteres por mensaje es de 255"
"cchange24":"El máximo de caracteres por mensaje es de 255",
"cchange25":"Su saldo es inferior a 4,20 QORT",
"cchange26":"Debido a la necesidad de combatir el spam, las cuentas con menos de 4.20 Qort de saldo tardarán mucho tiempo en ENVIAR mensajes en Q-Chat. Si desea aumentar inmediatamente la velocidad de envío de mensajes de Q-Chat, obtenga más de 4.20 QORT a su dirección. Esto se puede hacer con intercambios en el Portal de comercio, o por medio de otro Qortian que le proporcione el QORT. Una vez que tenga más de 4.20 QORT en su cuenta, los mensajes de Q-Chat serán instantáneos y este cuadro de diálogo ya no aparecerá. ¡Gracias por su comprensión de este método de prevención de spam necesario, y esperamos que disfrute de Qortal!"
},
"welcomepage":{
"wcchange1":"Bienvenido al Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Copiar clave de patrocinio",
"schange20":"Creando relación",
"schange21":"Eliminar clave de patrocinio"
},
"explorerpage":{
"exp1":"Dirección o nombre a buscar",
"exp2":"Saldo de la cuenta",
"exp3":"Más información",
"exp4":"No se encontró la dirección o el nombre!",
"exp5":"Tenga en cuenta que los nombres registrados distinguen entre mayúsculas y minúsculas.",
"exp6":"Fundador",
"exp7":"Información",
"exp8":"Mostrar todas las operaciones de compra",
"exp9":"Mostrar todas las operaciones de venta",
"exp10":"HISTORIAL DE COMPRAS",
"exp11":"HISTORIAL DE VENTAS",
"exp12":"Aún no se han realizado operaciones de compra.",
"exp13":"Aún no se han realizado operaciones de venta.",
"exp14":"Mostrar información completa",
"exp15":"Acuñando desde",
"exp16":"No acuña",
"exp17":"TODOS LOS PAGOS",
"exp18":"Pagos",
"exp19":"Enviado",
"exp20":"Recibido",
"exp21":"Oficios"
},
"managegroup":{
"mg1":"Miembros del grupo",
"mg2":"Invitar al grupo",
"mg3":"Administradores del grupo",
"mg4":"Grupo de actualización",
"mg5":"Cerrar Administrar Grupo",
"mg6":"PROHIBICIÓN",
"mg7":"PATADA",
"mg8":"ID de grupo",
"mg9":"Unido",
"mg10":"Agregar administrador de grupo",
"mg11":"¿Está seguro de agregar este miembro a los administradores?",
"mg12":"¡Al presionar confirmar, se enviará una solicitud de agregar administrador!",
"mg13":"Eliminar administrador de grupo",
"mg14":"Eliminar dirección de administrador",
"mg15":"¿Está seguro de eliminar a este miembro de los administradores?",
"mg16":"¡Al presionar confirmar, se enviará la solicitud de eliminación de administrador!",
"mg17":"Prohibir miembro del grupo",
"mg18":"Nombre del miembro",
"mg19":"Dirección del miembro",
"mg20":"Cuánto tiempo para prohibir",
"mg21":"Motivo de la prohibición",
"mg22":"¿Estás seguro de expulsar a este miembro del grupo?",
"mg23":"¡Al presionar confirmar, se enviará la solicitud de baneo!",
"mg24":"PARA SIEMPRE",
"mg25":"Miembros Prohibidos",
"mg26":"CANCELAR PROHIBICIÓN",
"mg27":"Caducidad de prohibición",
"mg28":"Cancelar bloqueo de miembro del grupo",
"mg29":"¿Estás seguro de cancelar la prohibición de este miembro del grupo?",
"mg30":"¡Al presionar confirmar, se enviará la solicitud de cancelación de baneo!",
"mg31":"Expulsar miembro del grupo",
"mg32":"Motivo de la patada",
"mg33":"¿Estás seguro de expulsar a este miembro del grupo?",
"mg34":"¡Al presionar confirmar, se enviará la solicitud de patada!",
"mg35":"Sin invitaciones de grupo abierto",
"mg36":"Su grupo abierto invita",
"mg37":"Dirección o nombre a invitar",
"mg38":"Tiempo de vencimiento de la invitación",
"mg39":"Todos los campos son obligatorios",
"mg40":"¿Estás seguro de invitar a este miembro al grupo?",
"mg41":"¡Al presionar confirmar, se enviará la solicitud de invitación!",
"mg42":"Tipo de grupo",
"mg43":"Caducidad de la invitación",
"mg44":"Grupo Público",
"mg45":"Grupo Privado",
"mg46":"Cancelar invitación",
"mg47":"Cancelar invitación al grupo",
"mg48":"¿Estás seguro de cancelar la invitación de este miembro?",
"mg49":"¡Al presionar confirmar, se enviará la solicitud de cancelación de invitación!",
"mg50":"Próximamente...",
"mg51":"Mínimo 3 Caracteres / Máximo 32 Caracteres",
"mg52":"Máximo de 128 caracteres"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"GESTION DE GROUPES",
"puzzles":"PUZZLES",
"nodemanagement":"GESTION DE NOEUDS"
"nodemanagement":"GESTION DE NOEUDS",
"trading":"COMMERCE",
"groups":"GROUPES"
},
"login":{
"login":"Connexion",
@ -133,7 +135,8 @@
"uiversion":"UI Version",
"coreversion":"Core Version",
"minting":"(Frappe)",
"synchronizing":"Synchronisation"
"synchronizing":"Synchronisation",
"peers":"Pairs connectés"
},
"walletprofile":{
"minterlevel":"Niveau de frappeur",
@ -150,7 +153,9 @@
"next":"Suivant",
"create":"Créer",
"continue":"Continuer",
"save":"Sauvegarder"
"save":"Sauvegarder",
"balance":"Solde",
"balances":"VOS SOLDES DE PORTEFEUILLE"
},
"startminting":{
"smchange1":"Impossible de récupérer les comptes de frappe",
@ -308,7 +313,22 @@
"tchange30":"Échec de la récupération du solde. Réessayez!",
"tchange31":"VENDU",
"tchange32":"ACHETE",
"tchange33":"Taux de change"
"tchange33":"Moyen",
"tchange34":"Le montant ne peut pas être 0",
"tchange35":"Le prix ne peut pas être 0",
"tchange36":"ACHAT AUTOMATIQUE EN ATTENTE",
"tchange37":"Aucune commande d'achat automatique trouvée !",
"tchange38":"AJOUTER",
"tchange39":"COMMANDE D'ACHAT AUTOMATIQUE",
"tchange40":"Prix",
"tchange41":"Commande d'achat automatique supprimée avec succès !",
"tchange42":"ORDRES DE VENTE À L'OUVERTURE DU MARCHÉ",
"tchange43":"MON HISTORIQUE D'ACHAT",
"tchange44":"Commande d'achat automatique ajoutée avec succès !",
"tchange45":"ACHAT AUTO AVEC",
"tchange46":"ACHAT AUTOMATIQUE",
"tchange47":"Vendre à ce prix",
"tchange48":"PAS ASSEZ"
},
"rewardsharepage":{
"rchange1":"Récompenses",
@ -352,7 +372,29 @@
"nchange15":"Définir Avatar",
"nchange16":"Besoin dune mise à jour du core",
"nchange17":"Ce nom existe déjà!",
"nchange18":"Enregistrement du nom réussi!"
"nchange18":"Enregistrement du nom réussi!",
"nchange19":"Nom de vente",
"nchange20":"Annuler la vente",
"nchange21":"Acheter le nom",
"nchange22":"Noms du marché ouvert à vendre",
"nchange23":"Prix de vente",
"nchange24":"Aucun nom à vendre",
"nchange25":"Nom à vendre",
"nchange26":"Êtes-vous sûr de vendre ce nom ?",
"nchange27":"Pour ce prix en QORT",
"nchange28":"En appuyant sur confirmer, la demande de nom de vente sera envoyée !",
"nchange29":"Nom à annuler",
"nchange30":"Êtes-vous sûr d'annuler la vente pour ce nom ?",
"nchange31":"En appuyant sur confirmer, la demande d'annulation du nom de vente sera envoyée !",
"nchange32":"Demande de vente de nom réussie !",
"nchange33":"Annulation de la demande de vente de nom réussie !",
"nchange34":"Demande d'achat de nom réussie !",
"nchange35":"VOUS AVEZ UN NOM !",
"nchange36":"Seuls les comptes sans nom enregistré peuvent acheter un nom.",
"nchange37":"ATTENTION !",
"nchange38":"Vous n'avez pas assez de qort pour acheter ce nom.",
"nchange39":"Êtes-vous sûr d'acheter ce nom ?",
"nchange40":"En appuyant sur confirmer, la demande d'achat de nom sera envoyée !"
},
"websitespage":{
"schange1":"Parcourir les sites Web",
@ -483,7 +525,9 @@
"cchange21":"Échec de lenvoi, veuillez réessayer...",
"cchange22":"Chargement des messages...",
"cchange23":"Impossible de déchiffrer le message!",
"cchange24":"Le nombre maximum de caractères par message est 255"
"cchange24":"Le nombre maximum de caractères par message est 255",
"cchange25":"Votre solde est inférieur à 4,20 QORT",
"cchange26":"En raison de la nécessité de lutter contre le spam, les comptes avec un solde Qort inférieur à 4,20 mettront beaucoup de temps à ENVOYER des messages dans Q-Chat. Si vous souhaitez augmenter immédiatement la vitesse d'envoi des messages Q-Chat, obtenez plus de 4,20 QORT à votre adresse. Cela peut être fait avec des métiers dans le portail commercial, ou par le biais d'un autre Qortian vous donnant le QORT. Une fois que vous avez plus de 4,20 QORT dans votre compte, les messages Q-Chat seront instantanés et cette boîte de dialogue ne sera plus Nous vous remercions de votre compréhension de cette méthode de prévention du spam nécessaire, et nous espérons que vous apprécierez Qortal !"
},
"welcomepage":{
"wcchange1":"Bienvenue dans Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Copier la clé de parrainage",
"schange20":"Créer une relation",
"schange21":"Supprimer la clé de parrainage"
},
"explorerpage":{
"exp1":"Adresse ou nom à rechercher",
"exp2":"Solde du compte",
"exp3":"Plus d'informations",
"exp4":"Adresse ou nom introuvable !",
"exp5":"Notez que les noms enregistrés sont sensibles à la casse.",
"exp6":"Fondateur",
"exp7":"Info",
"exp8":"Afficher toutes les transactions d'achat",
"exp9":"Afficher toutes les transactions de vente",
"exp10":"ACHETER L'HISTORIQUE",
"exp11":"HISTORIQUE DE VENTE",
"exp12":"Aucune transaction d'achat n'a encore été effectuée.",
"exp13":"Aucune transaction de vente n'a encore été effectuée.",
"exp14":"Afficher les informations complètes",
"exp15":"Fabrication depuis",
"exp16":"Pas de frappe",
"exp17":"TOUS LES PAIEMENTS",
"exp18":"Paiements",
"exp19":"Envoyé",
"exp20":"Reçu",
"exp21":"Métiers"
},
"managegroup":{
"mg1":"Membres du groupe",
"mg2":"Inviter au groupe",
"mg3":"Administrateurs du groupe",
"mg4":"Groupe de mise à jour",
"mg5":"Fermer le groupe de gestion",
"mg6":"BAN",
"mg7":"COUP DE PIED",
"mg8":"ID de groupe",
"mg9":"Rejoint",
"mg10":"Ajouter un administrateur de groupe",
"mg11":"Êtes-vous sûr d'ajouter ce membre aux admins ?",
"mg12":"En appuyant sur confirmer, une demande d'ajout d'administrateur sera envoyée !",
"mg13":"Supprimer l'administrateur du groupe",
"mg14":"Supprimer l'adresse administrateur",
"mg15":"Êtes-vous sûr de supprimer ce membre des admins ?",
"mg16":"En appuyant sur confirmer, la demande de suppression de l'administrateur sera envoyée !",
"mg17":"Bannir un membre du groupe",
"mg18":"Nom du membre",
"mg19":"Adresse du membre",
"mg20":"Combien de temps pour interdire",
"mg21":"Raison du bannissement",
"mg22":"Êtes-vous sûr de bannir ce membre du groupe ?",
"mg23":"En appuyant sur confirmer, la demande d'interdiction sera envoyée !",
"mg24":"TOUJOURS",
"mg25":"Membres bannis",
"mg26":"ANNULER L'INTERDICTION",
"mg27":"Expiration de l'interdiction",
"mg28":"Annuler l'exclusion du membre du groupe",
"mg29":"Êtes-vous sûr d'annuler l'exclusion de ce membre du groupe ?",
"mg30":"En appuyant sur confirmer, la demande d'annulation du bannissement sera envoyée !",
"mg31":"Expulser un membre du groupe",
"mg32":"Raison du coup de pied",
"mg33":"Êtes-vous sûr d'exclure ce membre du groupe ?",
"mg34":"En appuyant sur confirmer, la demande de kick sera envoyée !",
"mg35":"Aucune invitation de groupe ouverte",
"mg36":"Votre groupe ouvert invite",
"mg37":"Adresse ou nom à inviter",
"mg38":"Heure d'expiration de l'invitation",
"mg39":"Tous les champs sont obligatoires",
"mg40":"Êtes-vous sûr d'inviter ce membre dans le groupe ?",
"mg41":"En appuyant sur confirmer, la demande d'invitation sera envoyée !",
"mg42":"Type de groupe",
"mg43":"Expiration de l'invitation",
"mg44":"Groupe public",
"mg45":"Groupe privé",
"mg46":"Annuler l'invitation",
"mg47":"Annuler l'invitation au groupe",
"mg48":"Êtes-vous sûr d'annuler l'invitation de ce membre ?",
"mg49":"En appuyant sur confirmer, la demande d'annulation d'invitation sera envoyée !",
"mg50":"Bientôt disponible...",
"mg51":"Minimum 3 caractères / Maximum 32 caractères",
"mg52":"Maximum 128 caractères"
}
}

View File

@ -35,7 +35,9 @@
"qchat":"क्यू-चैट",
"groupmanagement":"समूह प्रबंधन",
"puzzles":"पहेलि",
"nodemanagement":"नोड प्रबंधन"
"nodemanagement":"नोड प्रबंधन",
"trading":"व्यापार",
"groups":"समूह"
},
"login":{
"login":"लॉग इन करें",
@ -134,7 +136,8 @@
"uiversion":"यूआई संस्करण",
"coreversion":"कोर संस्करण",
"minting":"(ढलाई)",
"synchronizing":"सिंक्रनाइज़"
"synchronizing":"सिंक्रनाइज़",
"peers":"कनेक्टेड पीयर्स"
},
"walletprofile":{
"minterlevel":"मिन्टर लेवल",
@ -151,7 +154,9 @@
"next":"अगला",
"create":"बनाएं",
"continue":"जारी रखें",
"save":"सहेजें"
"save":"सहेजें",
"balance":"संतुलन",
"balances":"आपका वॉलेट बैलेंस"
},
"startminting":{
"smchange1":"खनन खाते नहीं लाए जा सकते",
@ -309,7 +314,22 @@
"tchange30":"शेष को लाने में विफल फिर से प्रयास करें!",
"tchange31":"बेचा",
"tchange32":"खरीद लिया",
"tchange33":"विनिमय दर"
"tchange33":"औसत",
"tchange34":"राशि 0 नहीं हो सकती",
"tchange35":"मूल्य 0 नहीं हो सकता",
"tchange36":"लंबित ऑटो खरीद",
"tchange37":"कोई ऑटो खरीद आदेश नहीं मिला!",
"tchange38":"जोड़ें",
"tchange39":"ऑटो खरीद आदेश",
"tchange40":"कीमत",
"tchange41":"स्वचालित खरीद आदेश सफलतापूर्वक निकाला गया!",
"tchange42":"मार्केट ओपन सेल ऑर्डर",
"tchange43":"मेरा इतिहास खरीदें",
"tchange44":"स्वतः खरीद आदेश सफलतापूर्वक जोड़ा गया!",
"tchange45":"ऑटो के साथ खरीदें",
"tchange46":"ऑटो खरीदें",
"tchange47":"इस कीमत पर बेचें",
"tchange48":"पर्याप्त नहीं"
},
"rewardsharepage":{
"rchange1":"रिवॉर्डशेयर",
@ -353,7 +373,29 @@
"nchange15":"अवतार सेट करें",
"nchange16":"कोर अपडेट की जरूरत है",
"nchange17":"नाम पहले से मौजूद है!",
"nchange18":"नाम पंजीकरण सफल!"
"nchange18":"नाम पंजीकरण सफल!",
"nchange19":"बेचने का नाम",
"nchange20":"बेचना रद्द करें",
"nchange21":"खरीदें नाम",
"nchange22":"बेचने के लिए खुले बाज़ार के नाम",
"nchange23":"मूल्य बेचें",
"nchange24":"बिक्री के लिए कोई नाम नहीं",
"nchange25":"बेचने के लिए नाम",
"nchange26":"क्या आप वाकई इस नाम को बेचना चाहते हैं?",
"nchange27":"QORT में इस कीमत के लिए",
"nchange28":"पुष्टि करें दबाने पर, विक्रय नाम अनुरोध भेजा जाएगा!",
"nchange29":"रद्द करने के लिए नाम",
"nchange30":"क्या आप निश्चित रूप से इस नाम के लिए बिक्री रद्द करना चाहते हैं?",
"nchange31":"कन्फर्म दबाने पर, कैंसिल सेल नेम रिक्वेस्ट भेजी जाएगी!",
"nchange32":"नाम बेचने का अनुरोध सफल!",
"nchange33":"रद्द करें नाम बेचने का अनुरोध सफल!",
"nchange34":"नाम खरीदें अनुरोध सफल!",
"nchange35":"आपके पास एक नाम है!",
"nchange36":"केवल बिना पंजीकृत नाम वाले खाते ही नाम खरीद सकते हैं।",
"nchange37":"ध्यान!",
"nchange38":"आपके पास इस नाम को खरीदने के लिए पर्याप्त संसाधन नहीं हैं।",
"nchange39":"क्या आप वाकई इस नाम को खरीदना चाहते हैं?",
"nchange40":"कन्फर्म दबाने पर, बाय नेम रिक्वेस्ट भेजी जाएगी!"
},
"websitespage":{
"schange1":"वेबसाइट ब्राउज़ करें",
@ -484,7 +526,9 @@
"cchange21":"भेजना विफल, कृपया पुन: प्रयास करें...",
"cchange22":"संदेश लोड हो रहा है ...",
"cchange23":"संदेश डिक्रिप्ट नहीं कर सकता!",
"cchange24":"प्रति संदेश अधिकतम वर्ण 255 है"
"cchange24":"प्रति संदेश अधिकतम वर्ण 255 है",
"cchange25":"आपका बैलेंस 4.20 QORT से कम है",
"cchange26":"स्पैम से निपटने की आवश्यकता के कारण, 4.20 Qort से कम बैलेंस वाले खातों को Q-Chat में संदेश भेजने में लंबा समय लगेगा। यदि आप Q-Chat संदेशों के लिए भेजने की गति को तुरंत बढ़ाना चाहते हैं, तो 4.20 से अधिक प्राप्त करें। आपके पते पर QORT। यह व्यापार पोर्टल में ट्रेडों के साथ किया जा सकता है, या आपको QORT देने वाले किसी अन्य QORTIAN के माध्यम से किया जा सकता है। एक बार जब आपके खाते में 4.20 QORT से अधिक हो जाते हैं, तो Q-चैट संदेश तत्काल होंगे और यह डायलॉग अब और नहीं होगा दिखाएँ। इस आवश्यक स्पैम रोकथाम विधि को समझने के लिए धन्यवाद, और हम आशा करते हैं कि आप Qortal का आनंद लेंगे!"
},
"welcomepage":{
"wcchange1":"क्यू-चैट में आपका स्वागत है",
@ -675,5 +719,82 @@
"schange19":"कॉपी प्रायोजन कुंजी",
"schange20":"संबंध बनाना",
"schange21":"प्रायोजन कुंजी हटाएं"
},
"explorerpage":{
"exp1":"खोजने के लिए पता या नाम",
"exp2":"खाते में शेष",
"exp3":"और जानकारी",
"exp4":"पता या नाम नहीं मिला !",
"exp5":"ध्यान दें कि पंजीकृत नाम केस-संवेदी होते हैं।",
"exp6":"संस्थापक",
"exp7":"जानकारी",
"exp8":"सभी खरीदें ट्रेड दिखाएं",
"exp9":"सभी विक्रय ट्रेड दिखाएं",
"exp10":"इतिहास खरीदें",
"exp11":"इतिहास बेचें",
"exp12":"अभी तक कोई खरीदारी नहीं की गई है।",
"exp13":"अभी तक कोई बिक्री सौदे नहीं हुए हैं।",
"exp14":"पूरी जानकारी दिखाएं",
"exp15":"तब से मिंटिंग",
"exp16":"मिंटिंग नहीं",
"exp17":"सभी भुगतान",
"exp18":"भुगतान",
"exp19":"भेजा गया",
"exp20":"प्राप्त",
"exp21":"ट्रेडों"
},
"managegroup":{
"mg1":"समूह के सदस्य",
"mg2":"समूह में आमंत्रित करें",
"mg3":"ग्रुप एडमिन",
"mg4":"अपडेट ग्रुप",
"mg5":"समूह प्रबंधन बंद करें",
"mg6":"प्रतिबंध",
"mg7":"किक",
"mg8":"ग्रुप आईडी",
"mg9":"शामिल हुए",
"mg10":"ग्रुप एडमिन जोड़ें",
"mg11":"क्या आप वाकई इस सदस्य को व्यवस्थापकों में जोड़ना चाहते हैं?",
"mg12":"पुष्टि करें दबाने पर, ऐड एडमिन रिक्वेस्ट भेजी जाएगी!",
"mg13":"ग्रुप एडमिन हटाएं",
"mg14":"व्यवस्थापक पता हटाएं",
"mg15":"क्या आप निश्चित रूप से इस सदस्य को व्यवस्थापक से हटाना चाहते हैं?",
"mg16":"पुष्टि करें दबाने पर, व्यवस्थापक अनुरोध को हटा दें!",
"mg17":"सदस्य को समूह से प्रतिबंधित करें",
"mg18":"सदस्य का नाम",
"mg19":"सदस्य का पता",
"mg20":"कितने समय के लिए प्रतिबंध",
"mg21":"प्रतिबंध का कारण",
"mg22":"क्या आप वाकई इस सदस्य को समूह से प्रतिबंधित करना चाहते हैं?",
"mg23":"पुष्टि करें दबाने पर, प्रतिबंध अनुरोध भेजा जाएगा!",
"mg24":"हमेशा के लिए",
"mg25":"प्रतिबंधित सदस्य",
"mg26":"प्रतिबंध रद्द करें",
"mg27":"प्रतिबंध समाप्ति",
"mg28":"समूह से सदस्य को प्रतिबंधित करना रद्द करें",
"mg29":"क्या आप निश्चित रूप से इस सदस्य के लिए समूह से प्रतिबंध रद्द करना चाहते हैं?",
"mg30":"पुष्टि करें दबाने पर, रद्द प्रतिबंध अनुरोध भेजा जाएगा!",
"mg31":"समूह से सदस्य को लात मारो",
"mg32":"किक का कारण",
"mg33":"क्या आप निश्चित रूप से इस सदस्य को समूह से निकाल देंगे?",
"mg34":"पुष्टि करें दबाने पर, किक अनुरोध भेजा जाएगा!",
"mg35":"कोई खुला समूह आमंत्रण नहीं",
"mg36":"आपका खुला समूह आमंत्रित करता है",
"mg37":"आमंत्रित करने के लिए पता या नाम",
"mg38":"समाप्ति समय आमंत्रित करें",
"mg39":"सभी फ़ील्ड आवश्यक हैं",
"mg40":"क्या आप वाकई इस सदस्य को समूह में आमंत्रित करना चाहते हैं?",
"mg41":"पुष्टि करें दबाने पर, आमंत्रण अनुरोध भेजा जाएगा!",
"mg42":"समूह प्रकार",
"mg43":"समाप्ति आमंत्रित करें",
"mg44":"सार्वजनिक समूह",
"mg45":"निजी समूह",
"mg46":"आमंत्रण रद्द करें",
"mg47":"समूह में आमंत्रण रद्द करें",
"mg48":"क्या आप वाकई इस सदस्य के लिए आमंत्रण रद्द करना चाहते हैं?",
"mg49":"पुष्टि करें दबाने पर, रद्द आमंत्रण अनुरोध भेजा जाएगा!",
"mg50":"जल्द ही आ रहा है ...",
"mg51": "न्यूनतम 3 वर्ण / अधिकतम 32 वर्ण",
"mg52": "अधिकतम 128 वर्ण"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-ČAVRLJANJE",
"groupmanagement":"UPRAVLJANJE GRUPAMA",
"puzzles":"ZAGONETKE",
"nodemanagement":"UPRAVLJANJE ČVOROVIMA"
"nodemanagement":"UPRAVLJANJE ČVOROVIMA",
"trading":"TRGOVANJE",
"groups":"GRUPE"
},
"login":{
"login":"Prijavi se",
@ -133,7 +135,8 @@
"uiversion":"Verzija upravljačkog sučelja - UI",
"coreversion":"Verzija jezgre - Core",
"minting":"(Mintanje)",
"synchronizing":"Sinkroniziranje"
"synchronizing":"Sinkroniziranje",
"peers":"Povezani vršnjaci"
},
"walletprofile":{
"minterlevel":"Minter Level",
@ -150,7 +153,9 @@
"next":"Sljedeće",
"create":"Stvori",
"continue":"Nastavi",
"save":"Spremi"
"save":"Spremi",
"balance":"Kreditna",
"balances":"VAŠ NOVČANIK JE NA SALJU"
},
"startminting":{
"smchange1":"Nije moguće dohvatiti račune za kovanje",
@ -308,7 +313,22 @@
"tchange30":"Neuspješno dohvatiti stanje. Pokušajte ponovno!",
"tchange31":"PRODANO",
"tchange32":"KUPLJENO",
"tchange33":"Tečaj"
"tchange33":"Prosjek",
"tchange34":"Iznos ne može biti 0",
"tchange35":"Cijena ne može biti 0",
"tchange36":"ČEKA SE AUTO KUPNJA",
"tchange37":"Nije pronađena automatska narudžba za kupnju!",
"tchange38":"DODATI",
"tchange39":"AUTOMATSKA NARUDŽBA",
"tchange40":"Cijena",
"tchange41":"Uspješno uklonjena automatska narudžba za kupnju!",
"tchange42":"TRŽIŠNI OTVORENI PRODAJNI NALOGI",
"tchange43":"MOJA POVIJEST KUPNJE",
"tchange44":"Uspješno dodana automatska narudžba za kupnju!",
"tchange45":"AUTO KUPITE SA",
"tchange46":"AUTO OTKUP",
"tchange47":"Prodaj za ovu cijenu",
"tchange48":"NEDOVOLJNO"
},
"rewardsharepage":{
"rchange1":"Nagradni udio (Rewardshares)",
@ -352,7 +372,29 @@
"nchange15":"Namjesti Avatar",
"nchange16":"Potrebno ažuriranje jezgre (core)",
"nchange17":"Ime već postoji!",
"nchange18":"Registracija imena uspješna!"
"nchange18":"Registracija imena uspješna!",
"nchange19":"Ime prodaje",
"nchange20":"Otkaži prodaju",
"nchange21":"Ime kupovine",
"nchange22":"Imena otvorenog tržišta za prodaju",
"nchange23":"Prodajna cijena",
"nchange24":"Nema imena za prodaju",
"nchange25":"Ime za prodaju",
"nchange26":"Jeste li sigurni da ćete prodati ovo ime?",
"nchange27":"Za ovu cijenu u QORT",
"nchange28":"Pritiskom na potvrdu, zahtjev za prodajnim imenom bit će poslan!",
"nchange29":"Ime za poništavanje",
"nchange30":"Jeste li sigurni da ćete otkazati prodaju za ovo ime?",
"nchange31":"Pritiskom na potvrdu, zahtjev za poništenje prodajnog imena bit će poslan!",
"nchange32":"Zahtjev za ime prodaje uspješan!",
"nchange33":"Uspješno poništite zahtjev za ime prodaje!",
"nchange34":"Zahtjev za naziv kupnje uspješan!",
"nchange35":"IMATE IME!",
"nchange36":"Samo računi bez registriranog imena mogu kupiti ime.",
"nchange37":"PAŽNJA!",
"nchange38":"Nemate dovoljno qort da kupite ovo ime.",
"nchange39":"Jeste li sigurni da želite kupiti ovo ime?",
"nchange40":"Pritiskom na potvrdu, zahtjev za kupnju imena bit će poslan!"
},
"websitespage":{
"schange1":"Pregledavanje web stranica",
@ -483,7 +525,9 @@
"cchange21":"Slanje neuspješno, molimo ponovite...",
"cchange22":"Učitavanje poruka...",
"cchange23":"Nemoguće dešifrirati poruku!",
"cchange24":"Maksimalno 255 slova po poruci."
"cchange24":"Maksimalno 255 slova po poruci.",
"cchange25":"Vaš saldo je ispod 4,20 QORT",
"cchange26":"Zbog potrebe za suzbijanjem neželjene pošte, računima sa saldom ispod 4.20 Qort trebat će dugo vremena za POŠALJANJE poruka u Q-Chatu. Ako želite odmah povećati brzinu slanja za Q-Chat poruke, nabavite preko 4.20 QORT na vašu adresu. To se može učiniti trgovanjem na Trade Portalu ili putem drugog Qortiana koji vam daje QORT. Kada budete imali više od 4,20 QORT na svom računu, Q-Chat poruke bit će trenutne i ovaj dijaloški okvir više neće biti show. Hvala vam na razumijevanju ove neophodne metode za sprječavanje spama i nadamo se da ćete uživati u Qortalu!"
},
"welcomepage":{
"wcchange1":"Dobrodošli u Q-Čavrljanje",
@ -674,5 +718,82 @@
"schange19":"Kopiraj ključ sponzorstva",
"schange20":"Stvaranje odnosa",
"schange21":"Ukloni sponzorski ključ"
},
"explorerpage":{
"exp1":"Adresa ili ime za pretraživanje",
"exp2":"Stanje na računu",
"exp3":"Više informacija",
"exp4":"Adresa ili ime nisu pronađeni!",
"exp5":"Imajte na umu da su registrirana imena osjetljiva na velika i mala slova.",
"exp6":"Osnivač",
"exp7":"Info",
"exp8":"Prikaži sve kupovine",
"exp9":"Prikaži sve prodajne trgovine",
"exp10":"POVIJEST KUPNJE",
"exp11":"POVIJEST PRODAJE",
"exp12":"Još nema transakcija kupnje.",
"exp13":"Još nema prodajnih transakcija.",
"exp14":"Prikaži potpune informacije",
"exp15":"Kovanje od",
"exp16":"Nije kovano",
"exp17":"SVA PLAĆANJA",
"exp18":"Plaćanja",
"exp19":"Poslano",
"exp20":"Primljeno",
"exp21":"Obrta"
},
"managegroup":{
"mg1":"Članovi grupe",
"mg2":"Pozovi u grupu",
"mg3":"Administratori grupe",
"mg4":"Ažuriraj grupu",
"mg5":"Zatvori upravljanje grupom",
"mg6":"ZABRANA",
"mg7":"UDAR",
"mg8":"ID grupe",
"mg9":"Pridružio se",
"mg10":"Dodaj administratora grupe",
"mg11":"Jeste li sigurni da želite dodati ovog člana u administratore?",
"mg12":"Kada pritisnete potvrdu, bit će poslan zahtjev za dodavanje administratora!",
"mg13":"Ukloni administratora grupe",
"mg14":"Ukloni administratorsku adresu",
"mg15":"Jeste li sigurni da želite ukloniti ovog člana iz administratora?",
"mg16":"Pritiskom na potvrdu, bit će poslan zahtjev za uklanjanje administratora!",
"mg17":"Blokiraj člana iz grupe",
"mg18":"Ime člana",
"mg19":"Adresa člana",
"mg20":"Koliko dugo zabraniti",
"mg21":"Razlog zabrane",
"mg22":"Jeste li sigurni da želite zabraniti ovog člana iz grupe?",
"mg23":"Pritiskom na potvrdu, zahtjev za zabranu će biti poslan!",
"mg24":"ZAUVIJEK",
"mg25":"Zabranjeni članovi",
"mg26":"PONIŠTI BRANU",
"mg27":"Istek zabrane",
"mg28":"Otkaži zabranu pristupa članu grupi",
"mg29":"Jeste li sigurni da želite poništiti zabranu ovog člana iz grupe?",
"mg30":"Pritiskom na potvrdu, zahtjev za otkazivanje zabrane bit će poslan!",
"mg31":"Izbaci člana iz grupe",
"mg32":"Razlog za udarac",
"mg33":"Jeste li sigurni da ćete ovog člana izbaciti iz grupe?",
"mg34":"Pritiskom na potvrdu, zahtjev za izbačaj će biti poslan!",
"mg35":"Nema otvorenih grupnih poziva",
"mg36":"Vaše otvorene grupne pozivnice",
"mg37":"Adresa ili ime za poziv",
"mg38":"Vrijeme isteka poziva",
"mg39":"Sva su polja obavezna",
"mg40":"Jeste li sigurni da želite pozvati ovog člana u grupu?",
"mg41":"Pritiskom na potvrdu, zahtjev za pozivnicu bit će poslan!",
"mg42":"Vrsta grupe",
"mg43":"Istek poziva",
"mg44":"Javna grupa",
"mg45":"Privatna grupa",
"mg46":"Poništi poziv",
"mg47":"Otkaži poziv u grupu",
"mg48":"Jeste li sigurni da želite otkazati poziv za ovog člana?",
"mg49":"Pritiskom na potvrdu, zahtjev za pozivnicu za otkazivanje bit će poslan!",
"mg50":"Uskoro...",
"mg51": "Minimalno 3 znaka / Maksimalno 32 znaka",
"mg52": "Maksimalno 128 znakova"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"CSOPORTKEZELÉS",
"puzzles":"REJTVÉNYEK",
"nodemanagement":"CSOMÓPONTKEZELÉS"
"nodemanagement":"CSOMÓPONTKEZELÉS",
"trading":"KERESKEDÉS",
"groups":"CSOPORTOK"
},
"login":{
"login":"Bejelentkezés",
@ -133,7 +135,8 @@
"uiversion":"UI Verzió",
"coreversion":"Mag verzió",
"minting":"(Verés)",
"synchronizing":"Szinkronizálása"
"synchronizing":"Szinkronizálása",
"peers":"Connected Peers"
},
"walletprofile":{
"minterlevel":"Pénzverő Szint",
@ -150,7 +153,9 @@
"next":"Következő",
"create":"Létrehozáshoz",
"continue":"Folytatódik/folytatáshoz",
"save":"Mentéshez"
"save":"Mentéshez",
"balance":"Hitel",
"balances":"A PÉNZTÁRCSA EGYENLEGEK"
},
"startminting":{
"smchange1":"Nem lehet lekérni a pénzverési számlákat",
@ -308,7 +313,22 @@
"tchange30":"Nem sikerült lekérni az egyenleget. Próbáld újra!",
"tchange31":"ELADOTT",
"tchange32":"VÁSÁROLT",
"tchange33":"Árfolyam"
"tchange33":"Átlagos",
"tchange34":"Az összeg nem lehet 0",
"tchange35":"Az ár nem lehet 0",
"tchange36":"FÜGGŐBEN AUTOMATIKUS VÁSÁRLÁS",
"tchange37":"Nem található automatikus vásárlási rendelés!",
"tchange38":"HOZZÁAD",
"tchange39":"AUTOMATIKUS VÁSÁRLÁSI MEGRENDELÉS",
"tchange40":"Ár",
"tchange41":"Az automatikus vásárlási rendelés sikeresen eltávolítva!",
"tchange42":"NYÍLT PIACI ELADÁSI MEGRENDELÉSEK",
"tchange43":"VÁSÁRLÁSI TÖRTÉNETEM",
"tchange44":"Az automatikus vásárlási rendelés sikeresen hozzáadva!",
"tchange45":"AUTOMATIKUS VÁSÁRLÁS",
"tchange46":"AUTOMATIKUS VÁSÁRLÁS",
"tchange47":"Eladni ezen az áron",
"tchange48":"NEM ELÉG"
},
"rewardsharepage":{
"rchange1":"Jutalommegosztások",
@ -352,7 +372,29 @@
"nchange15":"Avatar Beállítása",
"nchange16":"Alapvető Frissítésre Van Szükség",
"nchange17":"A Név Már Létezik!",
"nchange18":"Sikeres Névregisztráció!"
"nchange18":"Sikeres Névregisztráció!",
"nchange19":"Eladási név",
"nchange20":"Eladás törlése",
"nchange21":"Vásárlási név",
"nchange22":"Eladó nyílt piaci nevek",
"nchange23":"Eladási ár",
"nchange24":"Nincsenek eladható nevek",
"nchange25":"Eladó név",
"nchange26":"Biztosan eladja ezt a nevet?",
"nchange27":"Erre az árra QORT-ban",
"nchange28":"A megerősítés megnyomására elküldjük az eladási névkérést!",
"nchange29":"Megszakítandó név",
"nchange30":"Biztosan visszavonja ennek a névnek az eladását?",
"nchange31":"A megerősítés megnyomására elküldjük az eladási név törlési kérelmét!",
"nchange32":"Eladási névkérés sikeres!",
"nchange33":"Az eladási névkérés törlése sikeres!",
"nchange34":"Névvásárlási kérelem sikeres!",
"nchange35":"VAN NEVE!",
"nchange36":"Csak a regisztrált név nélküli fiókok vásárolhatnak nevet.",
"nchange37":"FIGYELEM!",
"nchange38":"Nincs elég qortja ennek a névnek a megvásárlásához.",
"nchange39":"Biztosan megveszi ezt a nevet?",
"nchange40":"A megerősítés megnyomására a vásárlási névkérelem elküldésre kerül!"
},
"websitespage":{
"schange1":"Webhelyek Böngészése",
@ -483,7 +525,9 @@
"cchange21":"A küldés sikertelen, próbálkozzon újra...",
"cchange22":"Üzenetek Betöltése...",
"cchange23":"Az Üzenet Nem Visszafejthető!",
"cchange24":"Üzenetenkénti maximális karakterszám 255"
"cchange24":"Üzenetenkénti maximális karakterszám 255",
"cchange25":"Az Ön egyenlege 4,20 QORT alatt van",
"cchange26":"A spam elleni küzdelem szükségessége miatt a 4,20 alatti Qort-egyenleggel rendelkező fiókoknál sokáig tart az üzenetek KÜLDÉSE a Q-Chat szolgáltatásban. Ha azonnal meg szeretné növelni a Q-Chat üzenetek küldési sebességét, szerezzen be 4,20 feletti QORT az Ön címére. Ezt megteheti a Kereskedelmi Portálon végzett kereskedésekkel, vagy egy másik QORT-al, amely megadja a QORT-t. Ha 4,20 QORT felett van a fiókjában, a Q-Chat üzenetek azonnal megjelennek, és ez a párbeszédpanel többé nem Köszönjük, hogy megértette ezt a szükséges spammegelőzési módszert, és reméljük, hogy élvezni fogja a Qortalt!"
},
"welcomepage":{
"wcchange1":"Üdvözöljük a Q-Chathoz",
@ -674,5 +718,82 @@
"schange19":"Szponzori kulcs másolása",
"schange20":"Kapcsolatteremtés",
"schange21":"Szponzori kulcs távolítsa"
},
"explorerpage":{
"exp1":"Keresendő cím vagy név",
"exp2":"Számlaegyenleg",
"exp3":"Több információ",
"exp4":"Cím vagy név nem található!",
"exp5":"Vegye figyelembe, hogy a regisztrált nevek megkülönböztetik a kis- és nagybetűket.",
"exp6":"Alapító",
"exp7":"Info",
"exp8":"Minden vételi ügylet megjelenítése",
"exp9":"Minden eladási ügylet megjelenítése",
"exp10":"VÁSÁRLÁSI ELŐZMÉNYEK",
"exp11":"ELADÁSI ELŐZMÉNYEK",
"exp12":"Még nem történt vásárlási ügylet.",
"exp13":"Még nem történt eladási ügylet.",
"exp14":"Teljes információ megjelenítése",
"exp15":"A pénzverés óta",
"exp16":"Nem pénzverés",
"exp17":"MINDEN FIZETÉS",
"exp18":"Kifizetések",
"exp19":"Elküldve",
"exp20":"Fogadott",
"exp21":"Passzátszelek"
},
"managegroup":{
"mg1":"Csoporttagok",
"mg2":"Meghívás csoportba",
"mg3":"Csoportadminisztrátorok",
"mg4":"Csoport frissítése",
"mg5":"Csoportkezelés bezárása",
"mg6":"BAN",
"mg7":"KICK",
"mg8":"Csoportazonosító",
"mg9":"Csatlakozva",
"mg10":"Csoportadminisztrátor hozzáadása",
"mg11":"Biztosan felveszi ezt a tagot a rendszergazdák közé?",
"mg12":"A megerősítés megnyomására a rendszer elküldi az adminisztrátor felvételét!",
"mg13":"Csoportadminisztrátor eltávolítása",
"mg14":"Rendszergazdai cím eltávolítása",
"mg15":"Biztosan eltávolítja ezt a tagot az adminisztrátorok közül?",
"mg16":"A megerősítés megnyomására adminisztrátor eltávolítási kérelmet küldünk!",
"mg17":"Tag kitiltása a csoportból",
"mg18":"Tag neve",
"mg19":"Tag címe",
"mg20":"Meddig tiltható",
"mg21":"A kitiltás oka",
"mg22":"Biztosan kitiltja ezt a tagot a csoportból?",
"mg23":"A megerősítés megnyomására a kitiltási kérelem elküldésre kerül!",
"mg24":"ÖRÖK",
"mg25":"Tiltott tagok",
"mg26":"TILTÁS TÖRLÉSE",
"mg27":"A kitiltás lejárta",
"mg28":"Tag kitiltása a csoportból",
"mg29":"Biztosan törli ennek a tagnak a csoportból való kitiltását?",
"mg30":"A megerősítés megnyomására a rendszer elküldi a kitiltási kérelmet!",
"mg31":"Tag kirúgása a csoportból",
"mg32":"Reason For Kick",
"mg33":"Biztosan kirúgod ezt a tagot a csoportból?",
"mg34":"A megerősítés megnyomására elküldésre kerül a rúgás kérés!",
"mg35":"Nincs nyitott csoportmeghívás",
"mg36":"Az Ön nyílt csoportos meghívásai",
"mg37":"Meghívandó cím vagy név",
"mg38":"Meghívás lejárati ideje",
"mg39":"Minden mező kitöltése kötelező",
"mg40":"Biztosan meghívja ezt a tagot a csoportba?",
"mg41":"A megerősítés megnyomására a rendszer elküldi a meghívási kérelmet!",
"mg42":"Csoporttípus",
"mg43":"Meghívás lejárt",
"mg44":"Nyilvános csoport",
"mg45":"Privát csoport",
"mg46":"Meghívás visszavonása",
"mg47":"Csoportba való meghívás visszavonása",
"mg48":"Biztosan visszavonja ennek a tagnak a meghívását?",
"mg49":"A megerősítés megnyomására a rendszer elküldi a meghívó visszavonási kérelmét!",
"mg50":"Hamarosan...",
"mg51":"Minimum 3 karakter / legfeljebb 32 karakter",
"mg52":"Legfeljebb 128 karakter"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"GESTIONE DEI GRUPPI",
"puzzles":"PUZZLES",
"nodemanagement":"GESTIONE DEI NODI"
"nodemanagement":"GESTIONE DEI NODI",
"trading":"COMMERCIO",
"groups":"GRUPPI"
},
"login":{
"login":"Login",
@ -133,7 +135,8 @@
"uiversion":"Versione UI",
"coreversion":"Versione principale",
"minting":"(Minting)",
"synchronizing":"Sincronizzazione"
"synchronizing":"Sincronizzazione",
"peers":"Pari connessi"
},
"walletprofile":{
"minterlevel":"Livello Minter",
@ -150,7 +153,9 @@
"next":"Avanti",
"create":"Creare",
"continue":"Continua",
"save":"Salva"
"save":"Salva",
"balance":"Saldo",
"balances":"IL TUO SALDO DEL PORTAFOGLIO"
},
"startminting":{
"smchange1":"Impossibile recuperare i conti di conio",
@ -308,7 +313,22 @@
"tchange30":"Impossibile recuperare il saldo. Riprova!",
"tchange31":"VENDUTO",
"tchange32":"ACQUISTATO",
"tchange33":"Tasso di cambio"
"tchange33":"Media",
"tchange34":"L'importo non può essere 0",
"tchange35":"Il prezzo non può essere 0",
"tchange36":"ACQUISTO AUTO IN ATTESA",
"tchange37":"Nessun ordine di acquisto automatico trovato!",
"tchange38":"INSERISCI",
"tchange39":"ORDINE DI ACQUISTO AUTOMATICO",
"tchange40":"Prezzo",
"tchange41":"Ordine di acquisto automatico rimosso con successo!",
"tchange42":"MERCATO APERTO ORDINI DI VENDITA",
"tchange43":"LA MIA STORIA DI ACQUISTO",
"tchange44":"Ordine di acquisto automatico aggiunto con successo!",
"tchange45":"ACQUISTA AUTO CON",
"tchange46":"ACQUISTO AUTO",
"tchange47":"Vendi a questo prezzo",
"tchange48":"NON ABBASTANZA"
},
"rewardsharepage":{
"rchange1":"Quote di ricompensa",
@ -352,7 +372,29 @@
"nchange15":"Imposta avatar",
"nchange16":"Necessita aggiornamento principale",
"nchange17":"Il nome esiste già!",
"nchange18":"Registrazione nome riuscita!"
"nchange18":"Registrazione nome riuscita!",
"nchange19":"Vendi nome",
"nchange20":"Annulla vendita",
"nchange21":"Acquista nome",
"nchange22":"Nomi di mercato aperto da vendere",
"nchange23":"Prezzo di vendita",
"nchange24":"Nessun nome da vendere",
"nchange25":"Nome da vendere",
"nchange26":"Sei sicuro di vendere questo nome?",
"nchange27":"Per questo prezzo in QORT",
"nchange28":"Premendo conferma, verrà inviata la richiesta di vendita del nome!",
"nchange29":"Nome da cancellare",
"nchange30":"Sei sicuro di annullare la vendita per questo nome?",
"nchange31":"Premendo conferma, verrà inviata la richiesta di annullamento della vendita del nome!",
"nchange32":"Richiesta di vendita del nome riuscita!",
"nchange33":"Annulla la richiesta di vendita del nome riuscita!",
"nchange34":"Richiesta acquisto nome riuscita!",
"nchange35":"HAI UN NOME!",
"nchange36":"Solo gli account senza nome registrato possono acquistare un nome.",
"nchange37":"ATTENZIONE!",
"nchange38":"Non hai abbastanza qort per acquistare questo nome.",
"nchange39":"Sei sicuro di acquistare questo nome?",
"nchange40":"Premendo conferma, verrà inviata la richiesta di acquisto del nome!"
},
"websitespage":{
"schange1":"Sfoglia siti Web",
@ -483,7 +525,9 @@
"cchange21":"Invio fallito, per favore riprova...",
"cchange22":"Caricamento messaggi...",
"cchange23":"Impossibile decifrare il messaggio!",
"cchange24":"Il massimo di caratteri per messaggio è 255"
"cchange24":"Il massimo di caratteri per messaggio è 255",
"cchange25":"Il tuo saldo è inferiore a 4,20 QORT",
"cchange26":"Per la necessità di combattere lo spam, gli account con un saldo Qort inferiore a 4.20 impiegheranno molto tempo per INVIARE messaggi in Q-Chat. Se desideri aumentare immediatamente la velocità di invio per i messaggi Q-Chat, ottieni oltre 4.20 QORT al tuo indirizzo. Questo può essere fatto con scambi nel Portale commerciale, o tramite un altro Qortian che ti fornisce il QORT. Una volta che hai più di 4.20 QORT nel tuo account, i messaggi Q-Chat saranno istantanei e questa finestra di dialogo non sarà più show. Grazie per la tua comprensione di questo necessario metodo di prevenzione dello spam e speriamo che ti piaccia Qortal!"
},
"welcomepage":{
"wcchange1":"Benvenuto in Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Copia la chiave di sponsorizzazione",
"schange20":"Creare relazione",
"schange21":"Rimuovi la chiave di sponsorizzazione"
},
"explorerpage":{
"exp1":"Indirizzo o nome da cercare",
"exp2":"Saldo del conto",
"exp3":"Ulteriori informazioni",
"exp4":"Indirizzo o nome non trovato!",
"exp5":"Si noti che i nomi registrati fanno distinzione tra maiuscole e minuscole.",
"exp6":"Fondatore",
"exp7":"Informazioni",
"exp8":"Mostra tutte le compravendite",
"exp9":"Mostra tutte le operazioni di vendita",
"exp10":"ACQUISTA CRONOLOGIA",
"exp11":"VENDI STORIA",
"exp12":"Nessuna operazione di acquisto ancora effettuata.",
"exp13":"Nessuna operazione di vendita ancora effettuata.",
"exp14":"Mostra informazioni complete",
"exp15":"Conio da",
"exp16":"Non conio",
"exp17":"TUTTI I PAGAMENTI",
"exp18":"Pagamenti",
"exp19":"Inviato",
"exp20":"Ricevuto",
"exp21":"Mestieri"
},
"managegroup":{
"mg1":"Membri del gruppo",
"mg2":"Invita al gruppo",
"mg3":"Amministratori gruppo",
"mg4":"Aggiorna gruppo",
"mg5":"Chiudi Gestisci gruppo",
"mg6":"BAN",
"mg7":"CALCI",
"mg8":"ID gruppo",
"mg9":"Iscritto",
"mg10":"Aggiungi amministratore gruppo",
"mg11":"Sei sicuro di aggiungere questo membro agli amministratori ?",
"mg12":"Premendo conferma, verrà inviata la richiesta di aggiunta admin!",
"mg13":"Rimuovi amministratore gruppo",
"mg14":"Rimuovi indirizzo amministratore",
"mg15":"Sei sicuro di rimuovere questo membro dagli amministratori?",
"mg16":"Premendo conferma, verrà inviata la richiesta di rimozione admin!",
"mg17":"Escludi membro dal gruppo",
"mg18":"Nome membro",
"mg19":"Indirizzo membro",
"mg20":"Per quanto tempo vietare",
"mg21":"Motivo dell'esclusione",
"mg22":"Sei sicuro di escludere questo membro dal gruppo ?",
"mg23":"Premendo conferma, verrà inviata la richiesta di ban!",
"mg24":"PER SEMPRE",
"mg25":"Membri bannati",
"mg26":"ANNULLA BAN",
"mg27":"Scadenza ban",
"mg28":"Annulla Escludi membro dal gruppo",
"mg29":"Sei sicuro di voler annullare il ban per questo membro dal gruppo ?",
"mg30":"Premendo conferma, verrà inviata la richiesta di annullamento ban!",
"mg31":"Espelle un membro dal gruppo",
"mg32":"Motivo del calcio",
"mg33":"Sei sicuro di cacciare questo membro dal gruppo?",
"mg34":"Premendo conferma, la richiesta di kick verrà inviata!",
"mg35":"Nessun invito di gruppo aperto",
"mg36":"I tuoi inviti di gruppo aperti",
"mg37":"Indirizzo o nome da invitare",
"mg38":"Tempo di scadenza invito",
"mg39":"Tutti i campi sono obbligatori",
"mg40":"Sei sicuro di invitare questo membro nel gruppo ?",
"mg41":"Premendo conferma, la richiesta di invito verrà inviata!",
"mg42":"Tipo gruppo",
"mg43":"Scadenza invito",
"mg44":"Gruppo pubblico",
"mg45":"Gruppo privato",
"mg46":"Annulla invito",
"mg47":"Annulla invito al gruppo",
"mg48":"Sei sicuro di annullare l'invito per questo membro ?",
"mg49":"Premendo conferma, verrà inviata la richiesta di annullamento dell'invito!",
"mg50":"Prossimamente...",
"mg51":"Minimo 3 caratteri / Massimo 32 caratteri",
"mg52":"Massimo 128 caratteri"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"그룹 관리",
"puzzles":"퍼즐",
"nodemanagement":"노드 관리"
"nodemanagement":"노드 관리",
"trading":"무역",
"groups":"여러 떼"
},
"login":{
"login":"로그인",
@ -133,7 +135,8 @@
"uiversion":"UI 버전",
"coreversion":"Core 버전",
"minting":"(민팅)",
"synchronizing":"동기화 중"
"synchronizing":"동기화 중",
"peers":"연결된 피어"
},
"walletprofile":{
"minterlevel":"민터 레벨",
@ -150,7 +153,9 @@
"next":"다음",
"create":"생성",
"continue":"계속하다",
"save":"저장"
"save":"저장",
"balance":"균형",
"balances":"지갑 잔액"
},
"startminting":{
"smchange1":"발행 계정을 가져올 수 없습니다",
@ -308,7 +313,22 @@
"tchange30":"밸런스를 가져오지 못했습니다. 다시 시도하십시오.!",
"tchange31":"판매된",
"tchange32":"구매된",
"tchange33":"환율"
"tchange33":"평균",
"tchange34":"금액은 0일 수 없습니다.",
"tchange35":"가격은 0일 수 없습니다.",
"tchange36":"대기 중인 자동 구매",
"tchange37":"자동 구매 주문이 없습니다!",
"tchange38":"추가하다",
"tchange39":"자동 구매 주문",
"tchange40":"가격",
"tchange41":"자동 구매 주문을 성공적으로 제거했습니다!",
"tchange42":"시장 오픈 매도 주문",
"tchange43":"내 구매 내역",
"tchange44":"자동 구매 주문을 성공적으로 추가했습니다!",
"tchange45":"자동 구매",
"tchange46":"자동 구매",
"tchange47":"이 가격에 팔아요",
"tchange48":"부족한"
},
"rewardsharepage":{
"rchange1":"보상 공유",
@ -352,7 +372,29 @@
"nchange15":"아바타 설정",
"nchange16":"핵심 업데이트 필요",
"nchange17":"이름이 이미 있습니다!",
"nchange18":"이름 등록 성공!"
"nchange18":"이름 등록 성공!",
"nchange19":"판매 이름",
"nchange20":"매도 취소",
"nchange21":"구매 이름",
"nchange22":"판매할 공개 시장 이름",
"nchange23":"판매 가격",
"nchange24":"판매할 이름 없음",
"nchange25":"판매할 이름",
"nchange26":"이 이름을 판매하시겠습니까?",
"nchange27":"QORT에서 이 가격",
"nchange28":"확인을 누르면 판매 이름 요청이 전송됩니다!",
"nchange29":"취소할 이름",
"nchange30":"이 이름에 대한 판매를 취소하시겠습니까?",
"nchange31":"확인을 누르면 이름 판매 취소 요청이 전송됩니다!",
"nchange32":"판매 이름 요청 성공!",
"nchange33":"이름 판매 요청 취소 성공!",
"nchange34":"구매 이름 요청 성공!",
"nchange35":"이름이 있습니다!",
"nchange36":"등록된 이름이 없는 계정만 이름을 살 수 있습니다.",
"nchange37":"주의!",
"nchange38":"이 이름을 살 만큼 충분한 qort가 없습니다.",
"nchange39":"이 이름을 구입하시겠습니까?",
"nchange40":"확인을 누르면 구매 이름 요청이 전송됩니다!"
},
"websitespage":{
"schange1":"웹 사이트 찾아보기",
@ -483,7 +525,9 @@
"cchange21":"전송에 실패했습니다. 다시 시도하십시오..",
"cchange22":"메시지 로드 중...",
"cchange23":"메시지의 암호를 해독할 수 없습니다!",
"cchange24":"메시지당 최대 글자 수는 255자입니다."
"cchange24":"메시지당 최대 글자 수는 255자입니다.",
"cchange25":"잔액이 4.20QORT 미만입니다.",
"cchange26":"스팸 방지를 위해 잔액이 4.20Qort 미만인 계정은 Q-Chat에서 메시지를 보내는 데 시간이 오래 걸립니다. Q-Chat 메시지 전송 속도를 즉시 높이려면 4.20 이상을 얻으십시오. 귀하의 주소로 QORT. 이것은 Trade Portal에서 거래하거나 QORT를 제공하는 다른 Qortian을 통해 수행할 수 있습니다. 계정에 4.20 QORT 이상이 있으면 Q-Chat 메시지가 즉시 전송되며 이 대화 상자는 더 이상 표시되지 않습니다. 이 필요한 스팸 방지 방법에 대해 이해해 주셔서 감사합니다. Qortal을 즐기시기 바랍니다!"
},
"welcomepage":{
"wcchange1":"Q-Chat에 오신 것을 환영합니다.",
@ -674,5 +718,82 @@
"schange19":"후원 키 복사",
"schange20":"관계 만들기",
"schange21":"후원 키 제거"
},
"explorerpage":{
"exp1":"검색할 주소 또는 이름",
"exp2":"계정 잔액",
"exp3":"더 많은 정보",
"exp4":"주소 또는 이름을 찾을 수 없습니다!",
"exp5":"등록된 이름은 대소문자를 구분합니다.",
"exp6":"설립자",
"exp7":"정보",
"exp8":"모든 구매 거래 보기",
"exp9":"매도 거래 모두 보기",
"exp10":"내역 구매",
"exp11":"판매 내역",
"exp12":"아직 구매 거래가 이루어지지 않았습니다.",
"exp13":"아직 판매 거래가 이루어지지 않았습니다.",
"exp14":"완전한 정보 표시",
"exp15":"조폐 이후",
"exp16":"조폐되지 않음",
"exp17":"모든 결제",
"exp18":"결제",
"exp19":"보냈습니다",
"exp20":"수신됨",
"exp21":"거래"
},
"managegroup":{
"mg1":"그룹 구성원",
"mg2":"그룹에 초대",
"mg3":"그룹 관리자",
"mg4":"그룹 업데이트",
"mg5":"그룹 관리 닫기",
"mg6":"금지",
"mg7":"킥",
"mg8":"그룹 ID",
"mg9":"연결됨",
"mg10":"그룹 관리자 추가",
"mg11":"이 구성원을 관리자에 추가하시겠습니까?",
"mg12":"확인을 누르면 관리자 추가 요청이 전송됩니다!",
"mg13":"그룹 관리자 제거",
"mg14":"관리자 주소 제거",
"mg15":"관리자에서 이 구성원을 제거하시겠습니까?",
"mg16":"확인을 누르면 관리자 제거 요청이 전송됩니다!",
"mg17":"그룹에서 구성원 금지",
"mg18":"회원 이름",
"mg19":"회원 주소",
"mg20":"금지 기간",
"mg21":"금지 사유",
"mg22":"이 멤버를 그룹에서 차단하시겠습니까?",
"mg23":"확인을 누르면 차단 요청이 전송됩니다!",
"mg24":"영원히",
"mg25":"차단된 회원",
"mg26":"차단 취소",
"mg27":"금지 만료",
"mg28":"그룹에서 회원 차단 취소",
"mg29":"그룹에서 이 멤버에 대한 차단을 취소하시겠습니까?",
"mg30":"확인을 누르면 차단 취소 요청이 전송됩니다!",
"mg31":"그룹에서 구성원 추방",
"mg32":"차기 이유",
"mg33":"이 멤버를 그룹에서 추방하시겠습니까?",
"mg34":"확인을 누르면 킥 요청이 전송됩니다!",
"mg35":"공개 그룹 초대 없음",
"mg36":"공개 그룹 초대",
"mg37":"초대할 주소 또는 이름",
"mg38":"초대 만료 시간",
"mg39":"모든 필드는 필수입니다",
"mg40":"이 회원을 그룹에 초대하시겠습니까?",
"mg41":"확인을 누르면 초대 요청이 전송됩니다!",
"mg42":"그룹 유형",
"mg43":"초대 만료",
"mg44":"공개 그룹",
"mg45":"비공개 그룹",
"mg46":"초대 취소",
"mg47":"그룹에 초대 취소",
"mg48":"이 회원에 대한 초대를 취소하시겠습니까?",
"mg49":"확인을 누르면 초대 취소 요청이 전송됩니다!",
"mg50":"출시 예정...",
"mg51":"최소 3자 / 최대 32자",
"mg52":"최대 128자"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"GRUPPEADMINISTRASJON",
"puzzles":"PUZZLES",
"nodemanagement":"NODEADMINISTRASJON"
"nodemanagement":"NODEADMINISTRASJON",
"trading":"HANDEL",
"groups":"GRUPPER"
},
"login":{
"login":"Logg på",
@ -133,7 +135,8 @@
"uiversion":"Versjon av brukergrensesnitt",
"coreversion":"Versjon av kjerne",
"minting":"(Minter)",
"synchronizing":"Synkroniserer"
"synchronizing":"Synkroniserer",
"peers":"Tilknyttede jevnaldrende"
},
"walletprofile":{
"minterlevel":"Minternivå",
@ -150,7 +153,9 @@
"next":"Neste",
"create":"Opprett",
"continue":"Fortsett",
"save":"Lagre"
"save":"Lagre",
"balance":"Saldo",
"balances":"DIN WALLET-SALDO"
},
"startminting":{
"smchange1":"Kan ikke hente myntingkontoer",
@ -308,7 +313,22 @@
"tchange30":"Kunne ikke hente saldoen. Prøv igjen!",
"tchange31":"SOLGT",
"tchange32":"KJØPT",
"tchange33":"Vekslingskurs"
"tchange33":"Gjennomsnitt",
"tchange34":"Beløpet kan ikke være 0",
"tchange35":"Prisen kan ikke være 0",
"tchange36":"VENTENDE AUTOKJØP",
"tchange37":"Ingen autokjøpsordre funnet!",
"tchange38":"LEGGE TIL",
"tchange39":"AUTO KJØP ORDRE",
"tchange40":"Pris",
"tchange41":"Fjernet automatisk kjøpsordre!",
"tchange42":"MARKED ÅPNE SALGSORDRE",
"tchange43":"MIN KJØPSHISTORIE",
"tchange44":"Autokjøpsordre er lagt til!",
"tchange45":"AUTOKJØP MED",
"tchange46":"AUTOKJØP",
"tchange47":"Selges for denne prisen",
"tchange48":"IKKE NOK"
},
"rewardsharepage":{
"rchange1":"Belønningsdel",
@ -352,7 +372,29 @@
"nchange15":"Sett avatar",
"nchange16":"Behøver core-oppdatering",
"nchange17":"Navnet finnes allerede!",
"nchange18":"Navneregistrering vellykket!"
"nchange18":"Navneregistrering vellykket!",
"nchange19":"Selgsnavn",
"nchange20":"Avbryt salg",
"nchange21":"Kjøp navn",
"nchange22":"Åpne markedsnavn å selge",
"nchange23":"Selgspris",
"nchange24":"Ingen navn å selge",
"nchange25":"Navn å selge",
"nchange26":"Er du sikker på å selge dette navnet?",
"nchange27":"For denne prisen i QORT",
"nchange28":"Når du trykker bekrefte, vil forespørselen om salgsnavn bli sendt!",
"nchange29":"Navn som skal avbrytes",
"nchange30":"Er du sikker på å kansellere salget for dette navnet?",
"nchange31":"Når du trykker på bekreftelse, vil forespørselen om kansellering av salgsnavn bli sendt!",
"nchange32":"Selgsnavneforespørselen er vellykket!",
"nchange33":"Avbryt forespørsel om salg av navn vellykket!",
"nchange34":"Kjøp navneforespørsel vellykket!",
"nchange35":"DU HAR ET NAVN!",
"nchange36":"Bare kontoer uten registrert navn kan kjøpe et navn.",
"nchange37":"OBS!",
"nchange38":"Du har ikke nok qort til å kjøpe dette navnet.",
"nchange39":"Er du sikker på å kjøpe dette navnet?",
"nchange40":"Når du trykker bekreft, vil forespørselen om kjøpsnavn bli sendt!"
},
"websitespage":{
"schange1":"Bla gjennom nettsteder",
@ -483,7 +525,9 @@
"cchange21":"Sending mislyktes. Prøv på nytt...",
"cchange22":"Laster meldinger...",
"cchange23":"Kan ikke dekryptere melding!",
"cchange24":"Maksimalt antall tegn per melding er 255"
"cchange24":"Maksimalt antall tegn per melding er 255",
"cchange25":"Saldoen din er under 4,20 QORT",
"cchange26":"Av behovet for å bekjempe spam, vil kontoer med under 4.20 Qort-saldo bruke lang tid på å SENDE meldinger i Q-Chat. Hvis du umiddelbart ønsker å øke sendehastigheten for Q-Chat-meldinger, få over 4.20 QORT til adressen din. Dette kan gjøres med handler i handelsportalen, eller ved at en annen Qortian gir deg QORT. Når du har over 4,20 QORT på kontoen din, vil Q-Chat-meldinger være øyeblikkelig og denne dialogen vil ikke lenger show. Takk for at du forstår denne nødvendige spamforebyggingsmetoden, og vi håper du liker Qortal!"
},
"welcomepage":{
"wcchange1":"Velkommen til Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Kopier sponsornøkkel",
"schange20":"Skaper forhold",
"schange21":"Fjern sponsornøkkel"
},
"explorerpage":{
"exp1":"Adresse eller navn for å søke",
"exp2":"Saldo",
"exp3":"Mer informasjon",
"exp4":"Finner ikke adresse eller navn!",
"exp5":"Merk at registrerte navn skiller mellom store og små bokstaver.",
"exp6":"Grunnlegger",
"exp7":"Info",
"exp8":"Vis alle kjøpshandler",
"exp9":"Vis alle salgshandler",
"exp10":"KJØPHISTORIE",
"exp11":"SELGSHISTORIE",
"exp12":"Ingen kjøpshandler gjort ennå.",
"exp13":"Ingen salgshandler gjort ennå.",
"exp14":"Vis fullstendig informasjon",
"exp15":"Preging siden",
"exp16":"Ikke preging",
"exp17":"ALLE BETALINGER",
"exp18":"Betalinger",
"exp19":"Sendt",
"exp20":"Motta",
"exp21":"Handler"
},
"managegroup":{
"mg1":"Gruppemedlemmer",
"mg2":"Inviter til gruppe",
"mg3":"Gruppe administratorer",
"mg4":"Oppdater gruppe",
"mg5":"Lukk Administrer gruppe",
"mg6":"BANNE",
"mg7":"KICK",
"mg8":"Gruppe ID",
"mg9":"Bli med",
"mg10":"Legg til gruppeadministrator",
"mg11":"Er du sikker på å legge til dette medlemmet til administratorer?",
"mg12":"Når du trykker på bekreftelse, vil forespørsel om legg til admin bli sendt!",
"mg13":"Fjern gruppeadministrator",
"mg14":"Fjern administratoradresse",
"mg15":"Er du sikker på å fjerne dette medlemmet fra administratorer?",
"mg16":"Når du trykker på bekreftelse, vil forespørsel om fjerning bli sendt!",
"mg17":"Utesteng medlem fra gruppen",
"mg18":"Medlemsnavn",
"mg19":"Medlemsadresse",
"mg20":"Hvor lenge å utestenge",
"mg21":"Årsak til forbud",
"mg22":"Er du sikker på å utestenge dette medlemmet fra gruppen?",
"mg23":"Når du trykker på bekreftelse, vil forbudsforespørselen bli sendt!",
"mg24":"FOR ALLTID",
"mg25":"Utstengte medlemmer",
"mg26":"AVBRYT FORBINDELSE",
"mg27":"Forbudsutløp",
"mg28":"Avbryt utesteng medlem fra gruppen",
"mg29":"Er du sikker på å avbryte utestengelsen for dette medlemmet fra gruppen?",
"mg30":"Når du trykker på bekreftelse, vil forespørselen om kansellering bli sendt!",
"mg31":"Spark medlem fra gruppen",
"mg32":"Grunn til spark",
"mg33":"Er du sikker på å sparke dette medlemmet fra gruppen?",
"mg34":"Når du trykker på bekreft, vil sparkeforespørselen bli sendt!",
"mg35":"Ingen åpne gruppeinvitasjoner",
"mg36":"Dine åpne gruppeinvitasjoner",
"mg37":"Adresse eller navn å invitere",
"mg38":"Utløpstid for invitasjon",
"mg39":"Alle felt er påkrevd",
"mg40":"Er du sikker på å invitere dette medlemmet til gruppen?",
"mg41":"Når du trykker bekrefte, vil invitasjonsforespørselen bli sendt!",
"mg42":"Gruppetype",
"mg43":"Invitasjonsutløp",
"mg44":"Offentlig gruppe",
"mg45":"Privat gruppe",
"mg46":"Avbryt invitasjon",
"mg47":"Avbryt invitasjon til gruppe",
"mg48":"Er du sikker på å avbryte invitasjonen til dette medlemmet?",
"mg49":"Når du trykker på bekreftelse, vil forespørselen om kansellering av invitasjon bli sendt!",
"mg50":"Kommer snart...",
"mg51":"Minimum 3 tegn / maksimum 32 tegn",
"mg52": "Maksimalt 128 tegn"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"ZARZĄDZANIE GRUPAMI",
"puzzles":"PUZZLE",
"nodemanagement":"ZARZĄDZANIE WĘZŁAMI"
"nodemanagement":"ZARZĄDZANIE WĘZŁAMI",
"trading":"HANDLOWY",
"groups":"GRUPY"
},
"login":{
"login":"Zaloguj się",
@ -133,7 +135,8 @@
"uiversion":"Wersja interfejsu użytkownika",
"coreversion":"Wersja rdzenia",
"minting":"(Minting)",
"synchronizing":"Synchronizacja"
"synchronizing":"Synchronizacja",
"peers":"Połączeni rówieśnicy"
},
"walletprofile":{
"minterlevel":"Poziom Mintera",
@ -150,7 +153,9 @@
"next":"Następny",
"create":"Utwórz",
"continue":"Kontynuuj",
"save":"Zapisz"
"save":"Zapisz",
"balance":"Saldo",
"balances":"SALDO TWOJEGO PORTFELA"
},
"startminting":{
"smchange1":"Nie można pobrać kont menniczych",
@ -308,7 +313,22 @@
"tchange30":"Nie udało się pobrać salda. Spróbuj ponownie!",
"tchange31":"SPRZEDANY",
"tchange32":"KUPIONY",
"tchange33":"Kurs wymiany"
"tchange33":"Przeciętny",
"tchange34":"Kwota nie może wynosić 0",
"tchange35":"Cena nie może wynosić 0",
"tchange36":"OCZEKUJĄCY NA AUTOMATYCZNY KUP",
"tchange37":"Nie znaleziono automatycznego zamówienia zakupu!",
"tchange38":"DODAJ",
"tchange39":"AUTOMATYCZNE ZAMÓWIENIE",
"tchange40":"Cena £",
"tchange41":"Pomyślnie usunięto automatyczne zamówienie zakupu!",
"tchange42":"RYNEK OTWARTYCH ZLECEŃ SPRZEDAŻY",
"tchange43":"MOJA HISTORIA ZAKUPÓW",
"tchange44":"Pomyślnie dodano automatyczne zamówienie zakupu!",
"tchange45":"AUTO KUP Z",
"tchange46":"AUTO KUP",
"tchange47":"Sprzedaj za tę cenę",
"tchange48":"NIEWYSTARCZAJĄCO"
},
"rewardsharepage":{
"rchange1":"Podział nagród",
@ -352,7 +372,29 @@
"nchange15":"Ustaw awatara",
"nchange16":"Potrzebna aktualizacja rdzenia",
"nchange17":"Nazwa już istnieje!",
"nchange18":"Rejestracja nazwy powiodła się!"
"nchange18":"Rejestracja nazwy powiodła się!",
"nchange19":"Nazwa sprzedaży",
"nchange20":"Anuluj sprzedaż",
"nchange21":"Kup nazwę",
"nchange22":"Otwórz nazwy rynków do sprzedaży",
"nchange23":"Cena sprzedaży",
"nchange24":"Brak nazw do sprzedania",
"nchange25":"Nazwa do sprzedania",
"nchange26":"Czy na pewno chcesz sprzedać tę nazwę?",
"nchange27":"Za tę cenę w QORT",
"nchange28":"Po naciśnięciu potwierdzenia zostanie wysłane zapytanie o nazwę sprzedaży!",
"nchange29":"Nazwa do anulowania",
"nchange30":"Czy na pewno chcesz anulować sprzedaż dla tej nazwy?",
"nchange31":"Po naciśnięciu potwierdzenia zostanie wysłane żądanie anulowania nazwy sprzedaży!",
"nchange32":"Żądanie nazwy sprzedaży powiodło się!",
"nchange33":"Anulowanie żądania nazwy sprzedaży powiodło się!",
"nchange34":"Żądanie nazwy zakupu powiodło się!",
"nchange35":"MASZ IMIĘ!",
"nchange36":"Tylko konta bez zarejestrowanej nazwy mogą kupić nazwę.",
"nchange37":"UWAGA!",
"nchange38":"Nie masz wystarczającej ilości qort, aby kupić tę nazwę.",
"nchange39":"Czy na pewno kupisz tę nazwę?",
"nchange40":"Po naciśnięciu potwierdzenia, prośba o nazwę kupna zostanie wysłana!"
},
"websitespage":{
"schange1":"Przeglądaj strony internetowe",
@ -483,7 +525,9 @@
"cchange21":"Wysyłanie nie powiodło się, spróbuj ponownie...",
"cchange22":"Ładowanie wiadomości...",
"cchange23":"Nie można odszyfrować wiadomości!",
"cchange24":"Maksymalna liczba znaków na wiadomość to 255"
"cchange24":"Maksymalna liczba znaków na wiadomość to 255",
"cchange25":"Twoje saldo jest poniżej 4,20 QORT",
"cchange26":"Ze względu na konieczność zwalczania spamu konta z saldem poniżej 4,20 Qort będą potrzebowały dużo czasu na WYSYŁANIE wiadomości w Q-Chat. Jeśli chcesz natychmiast zwiększyć prędkość wysyłania wiadomości Q-Chat, uzyskaj ponad 4,20 QORT na Twój adres. Można to zrobić za pomocą transakcji w Portalu handlowym lub za pośrednictwem innego Qortian, który przekaże Ci QORT. Gdy masz ponad 4,20 QORT na swoim koncie, wiadomości Q-Chat będą natychmiastowe i to okno dialogowe nie będzie już więcej pokaż. Dziękujemy za zrozumienie tej niezbędnej metody zapobiegania spamowi i mamy nadzieję, że spodoba ci się Qortal!"
},
"welcomepage":{
"wcchange1":"Witamy w Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Kopiuj klucz sponsorski",
"schange20":"Tworzenie relacji",
"schange21":"Usuń klucz sponsorsk"
},
"explorerpage":{
"exp1":"Adres lub nazwa do wyszukania",
"exp2":"Bilans konta",
"exp3":"Więcej informacji",
"exp4":"Nie znaleziono adresu lub nazwy!",
"exp5":"Należy pamiętać, że w zarejestrowanych nazwach rozróżniana jest wielkość liter.",
"exp6":"Założyciel",
"exp7":"Informacje",
"exp8":"Pokaż wszystkie transakcje kupna",
"exp9":"Pokaż wszystkie transakcje sprzedaży",
"exp10":"KUP HISTORIĘ",
"exp11":"HISTORIA SPRZEDAŻY",
"exp12":"Nie dokonano jeszcze żadnych transakcji kupna.",
"exp13":"Nie dokonano jeszcze żadnych transakcji sprzedaży.",
"exp14":"Pokaż pełne informacje",
"exp15":"Bicie od",
"exp16":"Bez bicia",
"exp17":"WSZYSTKIE PŁATNOŚCI",
"exp18":"Płatności",
"exp19":"Wysłane",
"exp20":"Otrzymano",
"exp21":"Transakcji"
},
"managegroup":{
"mg1":"Członkowie grupy",
"mg2":"Zaproś do grupy",
"mg3":"Administratorzy grupy",
"mg4":"Grupa aktualizacji",
"mg5":"Zamknij Zarządzaj grupą",
"mg6":"BAN",
"mg7":"KOPANIE",
"mg8":"Identyfikator grupy",
"mg9":"Dołączył",
"mg10":"Dodaj administratora grupy",
"mg11":"Czy na pewno chcesz dodać tego członka do administratorów?",
"mg12":"Po naciśnięciu potwierdzenia zostanie wysłana prośba o dodanie administratora!",
"mg13":"Usuń administratora grupy",
"mg14":"Usuń adres administratora",
"mg15":"Czy na pewno chcesz usunąć tego członka z listy administratorów?",
"mg16":"Po naciśnięciu potwierdzenia zostanie wysłana prośba o usunięcie administratora!",
"mg17":"Zablokuj członka grupy",
"mg18":"Nazwa członka",
"mg19":"Adres członka",
"mg20":"Jak długo banować",
"mg21":"Powód bana",
"mg22":"Czy na pewno chcesz zablokować tego członka grupy?",
"mg23":"Po naciśnięciu potwierdzenia, prośba o ban zostanie wysłana!",
"mg24":"ZAWSZE",
"mg25":"Zablokowani członkowie",
"mg26":"ANULUJ BAN",
"mg27":"Wygaśnięcie bana",
"mg28":"Anuluj zablokowanie członka z grupy",
"mg29":"Czy na pewno chcesz anulować bana dla tego członka grupy?",
"mg30":"Po naciśnięciu potwierdzenia zostanie wysłane żądanie anulowania bana!",
"mg31":"Wyrzuć członka z grupy",
"mg32":"Powód wyrzucenia",
"mg33":"Czy na pewno chcesz wyrzucić tego członka z grupy?",
"mg34":"Po naciśnięciu potwierdzenia prośba o wyrzucenie zostanie wysłana!",
"mg35":"Brak otwartych zaproszeń do grup",
"mg36":"Twoje otwarte zaproszenia do grupy",
"mg37":"Adres lub nazwa do zaproszenia",
"mg38":"Czas wygaśnięcia zaproszenia",
"mg39":"Wszystkie pola są wymagane",
"mg40":"Czy na pewno chcesz zaprosić tego członka do grupy?",
"mg41":"Po naciśnięciu potwierdzenia, prośba o zaproszenie zostanie wysłana!",
"mg42":"Typ grupy",
"mg43":"Wygaśnięcie zaproszenia",
"mg44":"Grupa publiczna",
"mg45":"Grupa prywatna",
"mg46":"Anuluj zaproszenie",
"mg47":"Anuluj zaproszenie do grupy",
"mg48":"Czy na pewno chcesz anulować zaproszenie dla tego członka?",
"mg49":"Po naciśnięciu potwierdzenia zostanie wysłana prośba o anulowanie zaproszenia!",
"mg50":"Już wkrótce...",
"mg51": "Minimum 3 znaki / Maksymalnie 32 znaki",
"mg52": "Maksymalnie 128 znaków"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"GESTÃO DE GRUPOS",
"puzzles":"ENIGMAS",
"nodemanagement":"GERENCIAMENTO DO NÓDULO"
"nodemanagement":"GERENCIAMENTO DO NÓDULO",
"trading":"NEGOCIAÇÃO",
"groups":"GRUPOS"
},
"login":{
"login":"Login",
@ -133,7 +135,8 @@
"uiversion":"Versão do UI",
"coreversion":"Versão do Core",
"minting":"(Minerando)",
"synchronizing":"Sincronizando"
"synchronizing":"Sincronizando",
"peers":"Pares conectados"
},
"walletprofile":{
"minterlevel":"Nível do Minerador",
@ -150,7 +153,9 @@
"next":"Próximo",
"create":"Criar",
"continue":"Continuar",
"save":"Salvar"
"save":"Salvar",
"balance":"Saldo",
"balances":"SEUS SALDOS DE CARTEIRA"
},
"startminting":{
"smchange1":"Não é possível buscar contas de cunhagem",
@ -308,7 +313,22 @@
"tchange30":"Falha buscando Saldo. Tente novamente!",
"tchange31":"VENDIDO",
"tchange32":"COMPRADO",
"tchange33":"Taxa de câmbio"
"tchange33":"Média",
"tchange34":"O valor nao pode ser 0",
"tchange35":"O preço nao pode ser 0",
"tchange36":"COMPRA AUTOMÁTICA PENDENTE",
"tchange37":"Nenhuma ordem de compra automática encontrada!",
"tchange38":"ADICIONAR",
"tchange39":"ORDEM DE COMPRA AUTOMÁTICA",
"tchange40":"Preço",
"tchange41":"Pedido de compra automática removido com sucesso!",
"tchange42":"ORDENS DE VENDA ABERTA AO MERCADO",
"tchange43":"MEU HISTÓRICO DE COMPRAS",
"tchange44":"Pedido de compra automática adicionado com sucesso!",
"tchange45":"COMPRA AUTOMÁTICA COM",
"tchange46":"COMPRA AUTOMÁTICA",
"tchange47":"Vendo por este preço",
"tchange48":"INSUFICIENTE"
},
"rewardsharepage":{
"rchange1":"Ações de recompensa",
@ -352,7 +372,29 @@
"nchange15":"Escolher Avatar",
"nchange16":"Precisa atualizar o CORE",
"nchange17":"Nome já existe!",
"nchange18":"Registro de nome bem sucedido!"
"nchange18":"Registro de nome bem sucedido!",
"nchange19":"Nome de venda",
"nchange20":"Cancelar venda",
"nchange21":"Nome da compra",
"nchange22":"Nomes de mercado aberto para vender",
"nchange23":"Preço de venda",
"nchange24":"Sem nomes para vender",
"nchange25":"Nome para vender",
"nchange26":"Tem certeza que vende este nome ?",
"nchange27":"Por este preço em QORT",
"nchange28":"Ao clicar em confirmar, a solicitação do nome de venda será enviada!",
"nchange29":"Nome para Cancelar",
"nchange30":"Tem certeza que deseja cancelar a venda deste nome ?",
"nchange31":"Ao pressionar confirmar, a solicitação de cancelamento de nome de venda será enviada!",
"nchange32":"Solicitação de nome de venda bem-sucedida!",
"nchange33":"Cancelar solicitação de nome de venda com sucesso!",
"nchange34":"Pedido de nome de compra bem-sucedido!",
"nchange35":"VOCÊ TEM UM NOME!",
"nchange36":"Apenas contas sem nome registrado podem comprar um nome.",
"nchange37":"ATENÇÃO!",
"nchange38":"Você não tem qort suficiente para comprar este nome.",
"nchange39":"Tem certeza que deseja comprar este nome ?",
"nchange40":"Ao pressionar confirmar, a solicitação do nome de compra será enviada!"
},
"websitespage":{
"schange1":"Navegar Sites",
@ -483,7 +525,9 @@
"cchange21":"Envio falhou, por favor, tente novamente...",
"cchange22":"Carregando Mensagens...",
"cchange23":"Não foi possível descriptografar mensagem!",
"cchange24":"Caracteres máximos por mensagem é 255"
"cchange24":"Caracteres máximos por mensagem é 255",
"cchange25":"Seu saldo está abaixo de 4,20 QORT",
"cchange26":"Por necessidade de combater o spam, contas com saldo abaixo de 4,20 Qort levarão muito tempo para ENVIAR mensagens no Q-Chat. Se você deseja aumentar imediatamente a velocidade de envio de mensagens do Q-Chat, obtenha acima de 4,20 QORT para o seu endereço. Isso pode ser feito com negociações no Portal de Negociações, ou por meio de outro Qortian que lhe forneça o QORT. Assim que você tiver mais de 4,20 QORT em sua conta, as mensagens do Q-Chat serão instantâneas e esta caixa de diálogo não será mais show. Obrigado por sua compreensão deste método necessário de prevenção de spam e esperamos que você goste do Qortal!"
},
"welcomepage":{
"wcchange1":"Bem-vindo ao Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Copiar chave de patrocínio",
"schange20":"Criando relacionamento",
"schange21":"Remover chave de patrocínio"
},
"explorerpage":{
"exp1":"Endereço ou nome para pesquisar",
"exp2":"Saldo da conta",
"exp3":"Mais informações",
"exp4":"Endereço ou nome não encontrado!",
"exp5":"Observe que os nomes registrados diferenciam maiúsculas de minúsculas.",
"exp6":"Fundador",
"exp7":"Informações",
"exp8":"Mostrar todas as negociações de compra",
"exp9":"Mostrar todas as negociações de venda",
"exp10":"COMPRAR HISTÓRICO",
"exp11":"HISTÓRICO DE VENDAS",
"exp12":"Nenhuma negociação de compra feita ainda.",
"exp13":"Nenhuma negociação de venda feita ainda.",
"exp14":"Mostrar informações completas",
"exp15":"Criando desde",
"exp16":"Não está cunhando",
"exp17":"TODOS OS PAGAMENTOS",
"exp18":"Pagamentos",
"exp19":"Enviado",
"exp20":"Recebido",
"exp21":"Comércios"
},
"managegroup":{
"mg1":"Membros do grupo",
"mg2":"Convidar para grupo",
"mg3":"Administradores de grupo",
"mg4":"Atualizar grupo",
"mg5":"Fechar Gerenciar Grupo",
"mg6":"BAN",
"mg7":"Chute",
"mg8":"ID do Grupo",
"mg9":"Entrou",
"mg10":"Adicionar administrador de grupo",
"mg11":"Tem certeza que deseja adicionar este membro aos administradores?",
"mg12":"Ao pressionar confirmar, a solicitação de adição de administrador será enviada!",
"mg13":"Remover administrador do grupo",
"mg14":"Remover endereço do administrador",
"mg15":"Tem certeza que deseja remover este membro dos administradores?",
"mg16":"Ao pressionar confirmar, a solicitação de remoção do administrador será enviada!",
"mg17":"Banir membro do grupo",
"mg18":"Nome do membro",
"mg19":"Endereço do Membro",
"mg20":"Quanto tempo para banir",
"mg21":"Motivo do Banimento",
"mg22":"Tem certeza que deseja banir este membro do grupo?",
"mg23":"Ao clicar em confirmar, o pedido de banimento será enviado!",
"mg24":"PARA SEMPRE",
"mg25":"Membros banidos",
"mg26":"CANCELAR BAN",
"mg27":"Expiração do banimento",
"mg28":"Cancelar banimento de membro do grupo",
"mg29":"Tem certeza que deseja cancelar o banimento deste membro do grupo ?",
"mg30":"Ao apertar confirmar, o pedido de cancelamento de ban será enviado!",
"mg31":"Expulsar membro do grupo",
"mg32":"Motivo do Chute",
"mg33":"Tem certeza que deseja expulsar este membro do grupo?",
"mg34":"Ao apertar confirmar, o pedido de kick será enviado!",
"mg35":"Nenhum convite de grupo aberto",
"mg36":"Seus convites para grupos abertos",
"mg37":"Endereço ou nome para convidar",
"mg38":"Tempo de expiração do convite",
"mg39":"Todos os campos são obrigatórios",
"mg40":"Tem certeza que deseja convidar este membro para o grupo?",
"mg41":"Ao clicar em confirmar, a solicitação de convite será enviada!",
"mg42":"Tipo de grupo",
"mg43":"Convite Expiração",
"mg44":"Grupo público",
"mg45":"Grupo Privado",
"mg46":"Cancelar convite",
"mg47":"Cancelar convite para grupo",
"mg48":"Tem certeza que deseja cancelar o convite para este membro ?",
"mg49":"Ao pressionar confirmar, a solicitação de cancelamento do convite será enviada!",
"mg50":"Em Breve...",
"mg51":"Mínimo de 3 caracteres / Máximo de 32 caracteres",
"mg52":"Máximo de 128 caracteres"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"GESTIONARE GRUP",
"puzzles":"PUZZLE-URI",
"nodemanagement":"GESTIONARE NOD"
"nodemanagement":"GESTIONARE NOD",
"trading":"COMERCIAL",
"groups":"GRUPURI"
},
"login":{
"login":"Login",
@ -133,7 +135,8 @@
"uiversion":"Versiunea UI",
"coreversion":"Versiune Program",
"minting":"Minting (Producere a monedei)",
"synchronizing":"Se sincronizeaza"
"synchronizing":"Se sincronizeaza",
"peers":"Peers conectați"
},
"walletprofile":{
"minterlevel":"Nivelul Minter-ului",
@ -150,7 +153,9 @@
"next":"Inainte",
"create":"Creaza",
"continue":"Continua",
"save":"Salveza"
"save":"Salveza",
"balance":"Credit",
"balances":"SOLDELE PORTOTELULUI DVS"
},
"startminting":{
"smchange1":"Nu se pot prelua conturile de batere",
@ -308,7 +313,22 @@
"tchange30":"Nu s-a reusit actualizarea soldului. Mai incearca odata!",
"tchange31":"VANDUT",
"tchange32":"CUMPARAT",
"tchange33":"Rata de schimb"
"tchange33":"In medie",
"tchange34":"Suma nu poate fi 0",
"tchange35":"Pretul nu poate fi 0",
"tchange36":"CUMPARARE AUTOMATĂ in așteptare",
"tchange37":"Nu a fost gasită nicio comandă de cumparare automata!",
"tchange38":"ADAUGA",
"tchange39":"COMANDA DE CUMPARARE AUTOMATA",
"tchange40":"Pret",
"tchange41":"Comanda de cumparare automata a fost eliminata cu succes!",
"tchange42":"PIATA DESCHISA COMENZI DE VANZARE",
"tchange43":"ISTORICUL MEU DE CUMPARARI",
"tchange44":"Comanda de cumparare automata a fost adaugata cu succes!",
"tchange45":"CUMPARA AUTOMATA CU",
"tchange46":"CUMPARARE AUTOMATA",
"tchange47":"Vinde la acest pret",
"tchange48":"INSUFICIENT"
},
"rewardsharepage":{
"rchange1":"Cote de recompensa",
@ -352,7 +372,29 @@
"nchange15":"Configureaza Avatar",
"nchange16":"Este necesara actualizarea versiunii de baza",
"nchange17":"Numele Exista deja!",
"nchange18":"Inregistrarea numelui s-a realizat cu succes!"
"nchange18":"Inregistrarea numelui s-a realizat cu succes!",
"nchange19":"Numele vinde",
"nchange20":"Anulați vânzarea",
"nchange21":"Cumpărați numele",
"nchange22":"Nume piețe deschise de vândut",
"nchange23":"Preț de vânzare",
"nchange24":"Fără nume de vândut",
"nchange25":"Nume de vândut",
"nchange26":"Sunteți sigur că veți vinde acest nume?",
"nchange27":"Pentru acest preț în QORT",
"nchange28":"La apăsarea confirmării, cererea de nume de vânzare va fi trimisă!",
"nchange29":"Nume de anulat",
"nchange30":"Sunteți sigur că anulați vânzarea pentru acest nume?",
"nchange31":"La apăsarea confirmării, cererea de anulare a numelui de vânzare va fi trimisă!",
"nchange32":"Solicitarea numelui de vânzare a reușit!",
"nchange33":"Anulați cererea de nume de vânzare reușită!",
"nchange34":"Solicitarea de cumpărare a numelui a reușit!",
"nchange35":"AI UN NUME!",
"nchange36":"Numai conturile fără nume înregistrat pot cumpăra un nume.",
"nchange37":"ATENȚIE!",
"nchange38":"Nu aveți suficient qort pentru a cumpăra acest nume.",
"nchange39":"Sunteți sigur că veți cumpăra acest nume?",
"nchange40":"La apăsarea confirmării, cererea de nume de cumpărare va fi trimisă!"
},
"websitespage":{
"schange1":"Navigati pe Site-uri Web",
@ -483,7 +525,9 @@
"cchange21":"Mesajul nu s-a trimis, te rog sa incerci din nou...",
"cchange22":"Se incarca mesajele...",
"cchange23":"Nu se poate decripta mesajul!",
"cchange24":"Numarul maxim de caractere pe mesaj este 255"
"cchange24":"Numarul maxim de caractere pe mesaj este 255",
"cchange25":"Soldul dvs. este sub 4,20 QORT",
"cchange26":"Din nevoia de a combate spam-ul, conturile cu soldul Qort sub 4,20 va dura mult timp pentru a TRIMITE mesaje în Q-Chat. Dacă doriți să creșteți imediat viteza de trimitere a mesajelor Q-Chat, obțineți peste 4,20 QORT la adresa dvs. Acest lucru se poate face cu tranzacții în Portalul de comerț sau printr-un alt Qortian care vă oferă QORT. După ce aveți peste 4,20 QORT în contul dvs., mesajele Q-Chat vor fi instantanee și acest dialog nu va mai fi Vă mulțumim pentru înțelegerea acestei metode necesare de prevenire a spamului și sperăm să vă bucurați de Qortal!"
},
"welcomepage":{
"wcchange1":"Bine ai venit la Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Copiati cheia de sponsorizare",
"schange20":"Crearea unei relatii",
"schange21":"Eliminati cheia de sponsorizare"
},
"explorerpage":{
"exp1":"Adresa sau numele de căutat",
"exp2":"Soldul contului",
"exp3":"Mai multe informatii",
"exp4":"Adresa sau Numele nu a fost găsit!",
"exp5":"Retineti că numele înregistrate sunt sensibile la majuscule.",
"exp6":"Fondator",
"exp7":"Info",
"exp8":"Afișati toate tranzactiile de cumpărare",
"exp9":"Afișati toate tranzactiile de vânzare",
"exp10":"ISTORICUL CUMPĂRĂRII",
"exp11":"ISTORICUL VÂNZĂRILOR",
"exp12":"Nu s-a efectuat încă tranzactii de cumpărare.",
"exp13":"Încă nu au fost efectuate tranzactii de vânzare.",
"exp14":"Afișati informatiile complete",
"exp15":"Battering de la",
"exp16":"Nu se bate",
"exp17":"TOATE PLĂTILE",
"exp18":"Plăti",
"exp19":"Trimis",
"exp20":"Primit",
"exp21":"Meserii"
},
"managegroup":{
"mg1":"Membrii grupului",
"mg2":"Invitați la grup",
"mg3":"Administratori de grup",
"mg4":"Actualizare grup",
"mg5":"Închideți grupul de gestionare",
"mg6":"BAN",
"mg7":"KICK",
"mg8":"ID grup",
"mg9":"S-a alăturat",
"mg10":"Adăugați administrator de grup",
"mg11":"Sigur adăugați acest membru la administratori?",
"mg12":"La apăsarea confirmării, va fi trimisă cererea de adăugare a administratorului!",
"mg13":"Elimină administratorul grupului",
"mg14":"Elimină adresa de administrator",
"mg15":"Sunteți sigur că eliminați acest membru de la administratori?",
"mg16":"La apăsarea confirmării, va fi trimisă cererea de eliminare a administratorului!",
"mg17":"Excludeți membrul din grup",
"mg18":"Numele membrului",
"mg19":"Adresa membrului",
"mg20":"Cât timp se interzice",
"mg21":"Motivul interzicerii",
"mg22":"Sigur interziceți acest membru din grup?",
"mg23":"La apăsarea confirmării, cererea de ban va fi trimisă!",
"mg24":"Pentru totdeauna",
"mg25":"Membri interziși",
"mg26":"Anulați interzicerea",
"mg27":"Expirare interzis",
"mg28":"Anulați interzicerea membrului din grup",
"mg29":"Sigur anulați interdicția pentru acest membru din grup?",
"mg30":"La apăsarea confirmării, cererea de anulare a interzicerii va fi trimisă!",
"mg31":"Loviți membrul din grup",
"mg32":"Motivul lovirii",
"mg33":"Sigur îl dați afară pe acest membru din grup?",
"mg34":"La apăsarea confirmării, cererea de lovire va fi trimisă!",
"mg35":"Fără invitații de grup deschise",
"mg36":"Invitațiile dvs. de grup deschis",
"mg37":"Adresa sau numele de invitat",
"mg38":"Timp de expirare a invitației",
"mg39":"Toate câmpurile sunt obligatorii",
"mg40":"Sigur inviți acest membru în grup?",
"mg41":"La apăsarea confirmării, cererea de invitație va fi trimisă!",
"mg42":"Tipul de grup",
"mg43":"Expirare invitație",
"mg44":"Grup public",
"mg45":"Grup privat",
"mg46":"Anulați invitația",
"mg47":"Anulați invitația la grup",
"mg48":"Sigur anulați invitația pentru acest membru?",
"mg49":"La apăsarea confirmării, cererea de anulare a invitației va fi trimisă!",
"mg50":"În curând...",
"mg51":"Minim 3 caractere / Maxim 32 de caractere",
"mg52":"Maximum 128 de caractere"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-ĆASKANJE",
"groupmanagement":"MENADŽMENT GRUPA",
"puzzles":"SLAGALICE",
"nodemanagement":"MENADŽMENT ČVORIŠTA"
"nodemanagement":"MENADŽMENT ČVORIŠTA",
"trading":"TRADING",
"groups":"GRUPE"
},
"login":{
"login":"Prijava",
@ -133,7 +135,8 @@
"uiversion":"Verzija korisničkog interfejsa",
"coreversion":"Verzija Jezgra",
"minting":"(Mintuje se)",
"synchronizing":"Sinhronizuje se"
"synchronizing":"Sinhronizuje se",
"peers":"Connected Peers"
},
"walletprofile":{
"minterlevel":"Novi Mintera",
@ -150,7 +153,9 @@
"next":"Dalje",
"create":"Napravite",
"continue":"Nastavite",
"save":"Sačuvajte"
"save":"Sačuvajte",
"balance":"Kredit",
"balances":"VAŠI STANJE U NOVČANIKU"
},
"startminting":{
"smchange1":"Nije moguće preuzeti naloge za kovanje",
@ -308,7 +313,22 @@
"tchange30":"Neuspešna provera salda. Pokušajte ponovo!",
"tchange31":"PRODATO",
"tchange32":"KUPLJENO",
"tchange33":"Kurs"
"tchange33":"Prosek",
"tchange34":"Iznos ne može biti 0",
"tchange35":"Cena ne može biti 0",
"tchange36":"NA ČEKANJU AUTOMATSKA KUPOVINA",
"tchange37":"Nije pronađena narudžbina za automatsku kupovinu!",
"tchange38":"DODATI",
"tchange39":"AUTO KUPOVINA",
"tchange40":"Cena",
"tchange41":"Narudžbina za automatsku kupovinu je uspešno uklonjena!",
"tchange42":"TRŽIŠTE OTVORENI NALOG ZA PRODAJU",
"tchange43":"MOJA ISTORIJA KUPOVINE",
"tchange44":"Narudžbina za automatsku kupovinu je uspešno dodata!",
"tchange45":"AUTO KUPI SA",
"tchange46":"AUTO BUI",
"tchange47":"Prodaj za ovu cenu",
"tchange48":"NEDOVOLJNO"
},
"rewardsharepage":{
"rchange1":"Udeo nagrade",
@ -352,7 +372,29 @@
"nchange15":"Podesite Avatar",
"nchange16":"Potrebno ažuriranje jezgra",
"nchange17":"Ime već postoji!",
"nchange18":"Registracija imena uspešna!"
"nchange18":"Registracija imena uspešna!",
"nchange19":"Ime prodaje",
"nchange20":"Otkaži prodaju",
"nchange21":"Kupite ime",
"nchange22":"Imena na otvorenom tržištu za prodaju",
"nchange23":"Cena prodaje",
"nchange24":"Nema imena za prodaju",
"nchange25":"Ime za prodaju",
"nchange26":"Da li ste sigurni da prodajete ovo ime?",
"nchange27":"Za ovu cenu u KORT",
"nchange28":"Pritiskom na potvrdu, zahtev za ime prodaje će biti poslat!",
"nchange29":"Ime za otkazivanje",
"nchange30":"Da li ste sigurni da otkažete prodaju za ovo ime?",
"nchange31":"Pritiskom na potvrdu, zahtev za otkazivanje prodaje će biti poslat!",
"nchange32":"Zahtev za prodaju imena je uspešan!",
"nchange33":"Otkaži zahtev za prodaju imena uspešno!",
"nchange34":"Zahtev za kupovinu imena je uspešan!",
"nchange35":"IMAŠ IME!",
"nchange36":"Samo nalozi bez registrovanog imena mogu kupiti ime.",
"nchange37":"PAŽNJA!",
"nchange38":"Nemate dovoljno kort da kupite ovo ime.",
"nchange39":"Da li ste sigurni da kupujete ovo ime?",
"nchange40":"Pritiskom na potvrdu, zahtev za kupovinu imena će biti poslat!"
},
"websitespage":{
"schange1":"Pretraživanje web sajtova",
@ -483,7 +525,9 @@
"cchange21":"Slanje neuspešno, Molim pokušajte ponovo...",
"cchange22":"Učitavanje poruka...",
"cchange23":"Nemogućnost dešifrovanja poruke!",
"cchange24":"Maksimalan broj karaktera po poruci je 255"
"cchange24":"Maksimalan broj karaktera po poruci je 255",
"cchange25":"Vaše stanje je ispod 4,20 QORT",
"cchange26":"Iz potrebe za borbom protiv neželjene pošte, nalozima sa ispod 4.20 QORT saldo će trebati dosta vremena da ŠALJE poruke u K-Chat-u. Ako želite da odmah povećate brzinu slanja K-Chat poruka, nabavite preko 4,20 QORT na vašu adresu. Ovo se može uraditi sa trgovinama na Trgovačkom portalu ili putem drugog Qortian-a koji vam daje KORT. Kada budete imali preko 4,20 KORT na svom nalogu, Q-Chat poruke će biti trenutne i ovaj dijalog više neće biti shov. Hvala vam na razumevanju ovog neophodnog metoda prevencije neželjene pošte i nadamo se da ćete uživati u Qortal-u!"
},
"welcomepage":{
"wcchange1":"Dobrodošli na Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Kopiraj sponzorski ključ",
"schange20":"Stvaranje odnosa",
"schange21":"Uklonite sponzorski ključ"
},
"explorerpage":{
"exp1":"Adresa ili ime za pretragu",
"exp2":"Stanje na računu",
"exp3":"Više informacija",
"exp4":"Adresa ili ime nisu pronađeni!",
"exp5":"Imajte na umu da registrovana imena razlikuju velika i mala slova.",
"exp6":"Osnivač",
"exp7":"Info",
"exp8":"Prikaži sve kupovne trgovine",
"exp9":"Prikaži sve poslove prodaje",
"exp10":"KUPITE ISTORIJU",
"exp11":"ISTORIJA PRODAJE",
"exp12":"Još nije napravljena kupovina.",
"exp13":"Još nije izvršena nijedna trgovina.",
"exp14":"Prikaži kompletne informacije",
"exp15":"Kovanje od",
"exp16":"Ne kuje",
"exp17": "SVA PLAĆANJA",
"exp18":"Plaćanja",
"exp19":"Poslato",
"exp20":"Primljeno",
"exp21":"Trgovine"
},
"managegroup":{
"mg1":"Članovi grupe",
"mg2":"Pozovi u grupu",
"mg3":"Administratori grupe",
"mg4":"Ažuriraj grupu",
"mg5":"Zatvori grupu za upravljanje",
"mg6":"BAN",
"mg7":"KICK",
"mg8":"ID grupe",
"mg9":"Pridružen",
"mg10":"Dodaj administratora grupe",
"mg11":"Da li ste sigurni da dodate ovog člana administratorima?",
"mg12":"Pritiskom na potvrdu, biće poslat zahtev za dodavanje administratora!",
"mg13":"Ukloni administratora grupe",
"mg14":"Ukloni adresu administratora",
"mg15":"Da li ste sigurni da uklonite ovog člana iz administratora?",
"mg16":"Pritiskom na potvrdu, biće poslat zahtev za uklanjanje administratora!",
"mg17":"Zabrani članu iz grupe",
"mg18":"Ime člana",
"mg19":"Adresa člana",
"mg20":"Koliko dugo zabraniti",
"mg21":"Razlog za zabranu",
"mg22":"Da li ste sigurni da zabranjujete ovog člana iz grupe?",
"mg23":"Pritiskom na potvrdi, zahtev za zabranu će biti poslat!",
"mg24":"ZAUVEK",
"mg25":"Zabranjeni članovi",
"mg26":"OTKAŽI BAN",
"mg27":"Istek zabrane",
"mg28":"Otkaži zabranu člana iz grupe",
"mg29":"Da li ste sigurni da poništite zabranu za ovog člana iz grupe?",
"mg30":"Pritiskom na potvrdi, zahtev za zabranu otkazivanja će biti poslat!",
"mg31":"Izbaci člana iz grupe",
"mg32":"Razlog za udarac",
"mg33":"Da li ste sigurni da ćete izbaciti ovog člana iz grupe?",
"mg34":"Pritiskom na potvrdu, zahtev za kick će biti poslan!",
"mg35":"Nema otvorenih grupnih poziva",
"mg36":"Vaša otvorena grupa poziva",
"mg37":"Adresa ili ime za pozivanje",
"mg38":"Vreme isteka pozivnice",
"mg39":"Sva polja su obavezna",
"mg40":"Da li ste sigurni da pozovete ovog člana u grupu?",
"mg41":"Pritiskom na potvrdi, zahtev za poziv će biti poslat!",
"mg42":"Tip grupe",
"mg43":"Istek poziva",
"mg44":"Javna grupa",
"mg45":"Privatna grupa",
"mg46":"Otkaži poziv",
"mg47":"Otkaži poziv u grupu",
"mg48":"Da li ste sigurni da otkažete poziv za ovog člana?",
"mg49":"Pritiskom na potvrdi, zahtev za otkazivanje pozivnice će biti poslat!",
"mg50":"Uskoro...",
"mg51":"Najmanje 3 znaka / maksimalno 32 znaka",
"mg52":"Maksimalno 128 znakova"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-ЧАТ",
"groupmanagement":"УПРАВЛЕНИЕ ГРУППАМИ",
"puzzles":"ГОЛОВОЛОМКИ",
"nodemanagement":"УПРАВЛЕНИЕ УЗЛАМИ"
"nodemanagement":"УПРАВЛЕНИЕ УЗЛАМИ",
"trading":"ТОРГОВЛЯ",
"groups":"ГРУППЫ"
},
"login":{
"login":"Войти",
@ -133,7 +135,8 @@
"uiversion":"версия приложения",
"coreversion":"Версия ядра",
"minting":"(Чеканка)",
"synchronizing":"Синхронизация"
"synchronizing":"Синхронизация",
"peers":"Подключенные пиры"
},
"walletprofile":{
"minterlevel":"Уровень Minter",
@ -150,7 +153,9 @@
"next":"Следующий",
"create":"Создать",
"continue":"Продолжить",
"save":"Сохранить"
"save":"Сохранить",
"balance":"кредит",
"balances":"БАЛАНС ВАШЕГО КОШЕЛЬКА"
},
"startminting":{
"smchange1":"Не удается получить учетные записи минтинга",
@ -308,7 +313,22 @@
"tchange30":"Не удалось получить баланс. Повторите попытку!",
"tchange31":"ПРОДАНО",
"tchange32":"КУПИЛ",
"tchange33":"Обменный курс"
"tchange33":"Средний",
"tchange34":"Сумма не может быть 0",
"tchange35":"Цена не может быть 0",
"tchange36":"ОЖИДАНИЕ ПОКУПКИ АВТО",
"tchange37":"Заказ на автоматическую покупку не найден!",
"tchange38":"ДОБАВЛЯТЬ",
"tchange39":"АВТО КУПИТЬ ЗАКАЗ",
"tchange40":"Цена",
"tchange41":"Заказ на автоматическую покупку успешно удален!",
"tchange42":"РЫНОК ОТКРЫТЫЕ ЗАКАЗЫ НА ПРОДАЖУ",
"tchange43":"МОЯ ИСТОРИЯ ПОКУПОК",
"tchange44":"Заказ на автоматическую покупку успешно добавлен!",
"tchange45":"АВТО КУПИТЬ С",
"tchange46":"АВТО КУПИТЬ",
"tchange47":"Продать по этой цене",
"tchange48":"НЕДОСТАТОЧНО"
},
"rewardsharepage":{
"rchange1":"Вознаграждения",
@ -352,7 +372,29 @@
"nchange15":"Установить аватар",
"nchange16":"Требуется обновление ядра",
"nchange17":"Имя уже существует!",
"nchange18":"Регистрация имени прошло успешно!"
"nchange18":"Регистрация имени прошло успешно!",
"nchange19":"Продать имя",
"nchange20":"Отменить продажу",
"nchange21":"Купить имя",
"nchange22":"Имена на открытом рынке для продажи",
"nchange23":"Цена продажи",
"nchange24":"Нет имен для продажи",
"nchange25":"Имя для продажи",
"nchange26":"Вы уверены, что продаете это имя?",
"nchange27":"По этой цене в QORT",
"nchange28":"При нажатии подтверждения будет отправлен запрос на продажу имени!",
"nchange29":"Имя для отмены",
"nchange30":"Вы уверены, что хотите отменить продажу этого имени?",
"nchange31":"При нажатии кнопки подтверждения будет отправлен запрос на отмену продажи имени!",
"nchange32":"Запрос на продажу имени успешен!",
"nchange33":"Отменить запрос на продажу имени успешно!",
"nchange34":"Запрос имени на покупку выполнен успешно!",
"nchange35":"У ВАС ЕСТЬ ИМЯ!",
"nchange36":"Только аккаунты без зарегистрированного имени могут купить имя.",
"nchange37":"ВНИМАНИЕ!",
"nchange38":"У вас недостаточно qort, чтобы купить это имя.",
"nchange39":"Вы уверены, что купите это имя?",
"nchange40":"При нажатии кнопки подтверждения будет отправлен запрос имени на покупку!"
},
"websitespage":{
"schange1":"Просматривать веб-сайты",
@ -483,7 +525,9 @@
"cchange21":"Ошибка отправки. Повторите попытку...",
"cchange22":"Загружаются сообщения...",
"cchange23":"Невозможно расшифровать сообщение!",
"cchange24":"Максимальное количество символов в сообщении - 255"
"cchange24":"Максимальное количество символов в сообщении - 255",
"cchange25":"Ваш баланс меньше 4,20 QORT",
"cchange26":"Из-за необходимости бороться со спамом учетным записям с балансом Qort менее 4,20 потребуется много времени для ОТПРАВКИ сообщений в Q-Chat. Если вы хотите немедленно увеличить скорость отправки сообщений Q-Chat, получите более 4,20 QORT на ваш адрес. Это можно сделать с помощью сделок на Торговом портале или с помощью другого Qortian, который предоставит вам QORT. Как только на вашем счету будет более 4,20 QORT, сообщения Q-Chat будут мгновенными, и этот диалог больше не будет show. Благодарим вас за понимание этого необходимого метода предотвращения спама, и мы надеемся, что вам понравится Qortal!"
},
"welcomepage":{
"wcchange1":"Добро пожаловать в Q-Chat",
@ -674,5 +718,82 @@
"schange19":"Копировать спонсорский ключ",
"schange20":"Создание отношений",
"schange21":"Удалить спонсорский ключ"
},
"explorerpage":{
"exp1":"Адрес или имя для поиска",
"exp2":"Баланс",
"exp3":"Больше информации",
"exp4":"Адрес или имя не найдено!",
"exp5":"Обратите внимание, что зарегистрированные имена вводятся с учетом регистра.",
"exp6":"Основатель",
"exp7":"Информация",
"exp8":"Показать все сделки на покупку",
"exp9":"Показать все сделки на продажу",
"exp10":"ИСТОРИЯ ПОКУПОК",
"exp11":"ИСТОРИЯ ПРОДАЖ",
"exp12":"Сделок на покупку еще не было.",
"exp13":"Сделок на продажу еще не было.",
"exp14":"Показать полную информацию",
"exp15":"Чеканка с",
"exp16":"Не чеканка",
"exp17":"ВСЕ ПЛАТЕЖИ",
"exp18":"Платежи",
"exp19":"Отправлено",
"exp20":"Получено",
"exp21":"Сделок"
},
"managegroup":{
"mg1":"Члены группы",
"mg2":"Пригласить в группу",
"mg3":"Администраторы группы",
"mg4":"Обновить группу",
"mg5":"Закрыть группу управления",
"mg6":"БАН",
"mg7":"УДАР",
"mg8":"Идентификатор группы",
"mg9":"Присоединился",
"mg10":"Добавить администратора группы",
"mg11":"Вы уверены, что хотите добавить этого участника в список администраторов?",
"mg12":"При нажатии подтверждения будет отправлен запрос на добавление администратора!",
"mg13":"Удалить администратора группы",
"mg14":"Удалить адрес администратора",
"mg15":"Вы действительно хотите удалить этого участника из списка администраторов?",
"mg16":"При нажатии подтверждения будет отправлен запрос на удаление администратора!",
"mg17":"Забанить члена группы",
"mg18":"Имя пользователя",
"mg19":"Адрес пользователя",
"mg20":"Как долго банить",
"mg21":"Причина бана",
"mg22":"Вы уверены, что хотите исключить этого участника из группы?",
"mg23":"При нажатии подтверждения будет отправлен запрос на бан!",
"mg24":"НАВСЕГДА",
"mg25":"Заблокированные участники",
"mg26":"ОТМЕНИТЬ БАН",
"mg27":"Срок действия бана",
"mg28":"Отменить бан участника из группы",
"mg29":"Вы уверены, что хотите отменить бан этого участника в группе?",
"mg30":"При нажатии подтверждения будет отправлен запрос на отмену бана!",
"mg31":"Исключить участника из группы",
"mg32":"Причина удаления",
"mg33":"Вы уверены, что хотите исключить этого участника из группы?",
"mg34":"При нажатии подтверждения будет отправлен запрос на удаление!",
"mg35":"Нет приглашений в открытые группы",
"mg36":"Ваша открытая группа приглашает",
"mg37":"Адрес или имя для приглашения",
"mg38":"Срок действия приглашения",
"mg39":"Обязательны все поля",
"mg40":"Вы уверены, что хотите пригласить этого участника в группу?",
"mg41":"При нажатии подтверждения будет отправлен запрос на приглашение!",
"mg42":"Тип группы",
"mg43":"Срок действия приглашения истек",
"mg44":"Общедоступная группа",
"mg45":"Частная группа",
"mg46":"Отменить приглашение",
"mg47":"Отменить приглашение в группу",
"mg48":"Вы уверены, что хотите отменить приглашение для этого участника?",
"mg49":"При нажатии подтверждения будет отправлен запрос на отмену приглашения!",
"mg50":"Скоро...",
"mg51":"Минимум 3 символа / максимум 32 символа",
"mg52":"Максимум 128 символов"
}
}

View File

@ -21,20 +21,22 @@
"korean": "Korean"
},
"sidemenu": {
"minting": "MINTING",
"mintingdetails": "MINTING DETAILS",
"becomeAMinter": "BECOME A MINTER",
"wallets": "WALLETS",
"tradeportal": "TRADE PORTAL",
"rewardshare": "REWARD SHARE",
"nameregistration": "NAME REGISTRATION",
"websites": "WEBSITES",
"management": "MANAGEMENT",
"datamanagement": "DATA MANAGEMENT",
"qchat": "Q-CHAT",
"groupmanagement": "GROUP MANAGEMENT",
"puzzles": "PUZZLES",
"nodemanagement": "NODE MANAGEMENT"
"minting":"MINTING",
"mintingdetails":"MINTING DETAILS",
"becomeAMinter":"BECOME A MINTER",
"wallets":"WALLETS",
"tradeportal":"TRADE PORTAL",
"rewardshare":"REWARD SHARE",
"nameregistration":"NAME REGISTRATION",
"websites":"WEBSITES",
"management":"MANAGEMENT",
"datamanagement":"DATA MANAGEMENT",
"qchat":"Q-CHAT",
"groupmanagement":"GROUP MANAGEMENT",
"puzzles":"PUZZLES",
"nodemanagement":"NODE MANAGEMENT",
"trading":"TRADING",
"groups":"GROUPS"
},
"login": {
"login": "Login",
@ -128,29 +130,32 @@
"snack4": "Nodes successfully saved as",
"snack5": "Nodes successfully imported"
},
"appinfo": {
"blockheight": "Block Height",
"uiversion": "UI Version",
"coreversion": "Core Version",
"minting": "(Minting)",
"synchronizing": "Synchronizing"
"appinfo":{
"blockheight":"Block Height",
"uiversion":"UI Version",
"coreversion":"Core Version",
"minting":"(Minting)",
"synchronizing":"Synchronizing",
"peers":"Connected Peers"
},
"walletprofile": {
"minterlevel": "Minter Level",
"blocksminted": "Blocks Minted"
},
"general": {
"yes": "Yes",
"no": "No",
"confirm": "Confirm",
"decline": "Decline",
"open": "Open",
"close": "Close",
"back": "Back",
"next": "Next",
"create": "Create",
"continue": "Continue",
"save": "Save"
"general":{
"yes":"Yes",
"no":"No",
"confirm":"Confirm",
"decline":"Decline",
"open":"Open",
"close":"Close",
"back":"Back",
"next":"Next",
"create":"Create",
"continue":"Continue",
"save":"Save",
"balance":"Balance",
"balances":"YOUR WALLET BALANCES"
},
"startminting": {
"smchange1": "Cannot fetch minting accounts",
@ -275,40 +280,55 @@
"wchange56": "WARNING!",
"wchange57": "Memo"
},
"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",
"tchange33": "Exchange Rate"
"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",
"tchange33":"Average",
"tchange34":"Amount can not be 0",
"tchange35":"Price can not be 0",
"tchange36":"PENDING AUTO BUY",
"tchange37":"No auto buy order found !",
"tchange38":"ADD",
"tchange39":"AUTO BUY ORDER",
"tchange40":"Price",
"tchange41":"Successfully removed auto buy order!",
"tchange42":"MARKET OPEN SELL ORDERS",
"tchange43":"MY BUY HISTORY",
"tchange44":"Successfully added auto buy order!",
"tchange45":"AUTO BUY WITH",
"tchange46":"AUTO BUY",
"tchange47":"Sell for this price",
"tchange48":"NOT ENOUGH"
},
"rewardsharepage": {
"rchange1": "Rewardshares",
@ -334,25 +354,47 @@
"rchange21": "Reward Share Successful!",
"rchange22": "Reward Share Removed Successfully!"
},
"registernamepage": {
"nchange1": "Name Registration",
"nchange2": "Register Name",
"nchange3": "Registered Names",
"nchange4": "Avatar",
"nchange5": "Name",
"nchange6": "Owner",
"nchange7": "Action",
"nchange8": "No names registered by this account!",
"nchange9": "Register a Name!",
"nchange10": "Description (optional)",
"nchange11": "Doing something delicious",
"nchange12": "Registering Name",
"nchange13": "The current name registration fee is",
"nchange14": "Register",
"nchange15": "Set Avatar",
"nchange16": "Need Core Update",
"nchange17": "Name Already Exists!",
"nchange18": "Name Registration Successful!"
"registernamepage":{
"nchange1":"Name Registration",
"nchange2":"Register Name",
"nchange3":"Registered Names",
"nchange4":"Avatar",
"nchange5":"Name",
"nchange6":"Owner",
"nchange7":"Action",
"nchange8":"No names registered by this account!",
"nchange9":"Register a Name!",
"nchange10":"Description (optional)",
"nchange11":"Doing something delicious",
"nchange12":"Registering Name",
"nchange13":"The current name registration fee is",
"nchange14":"Register",
"nchange15":"Set Avatar",
"nchange16":"Need Core Update",
"nchange17":"Name Already Exists!",
"nchange18":"Name Registration Successful!",
"nchange19":"Sell Name",
"nchange20":"Cancel Sell",
"nchange21":"Buy Name",
"nchange22":"Open Market Names To Sell",
"nchange23":"Sell Price",
"nchange24":"No Names To Sell",
"nchange25":"Name To Sell",
"nchange26":"Are you sure to sell this name ?",
"nchange27":"For this price in QORT",
"nchange28":"On pressing confirm, the sell name request will be sent!",
"nchange29":"Name To Cancel",
"nchange30":"Are you sure to cancel the sell for this name ?",
"nchange31":"On pressing confirm, the cancel sell name request will be sent!",
"nchange32":"Sell Name Request Successful!",
"nchange33":"Cancel Sell Name Request Successful!",
"nchange34":"Buy Name Request Successful!",
"nchange35":"YOU HAVE A NAME!",
"nchange36":"Only accounts with no registered name can buy a name.",
"nchange37":"ATTENTION!",
"nchange38":"You not have enough qort to buy this name.",
"nchange39":"Are you sure to buy this name ?",
"nchange40":"On pressing confirm, the buy name request will be sent!"
},
"websitespage": {
"schange1": "Browse Websites",
@ -498,7 +540,10 @@
"cchange37": "No Results Found",
"cchange38": "User Verified",
"cchange39": "Cannot send an encrypted message to this user since they do not have their publickey on chain.",
"cchange40": "IMAGE (click to view)"
"cchange40": "IMAGE (click to view)",
"cchange41":"Your Balance Is Under 4.20 QORT",
"cchange42":"Out of the need to combat spam, accounts with under 4.20 Qort balance will take a long time to SEND messages in Q-Chat. If you wish to immediately increase the send speed for Q-Chat messages, obtain over 4.20 QORT to your address. This can be done with trades in the Trade Portal, or by way of another Qortian giving you the QORT. Once you have over 4.20 QORT in your account, Q-Chat messages will be instant and this dialog will no more show. Thank you for your understanding of this necessary spam prevention method, and we hope you enjoy Qortal!"
},
"welcomepage": {
"wcchange1": "Welcome to Q-Chat",
@ -674,27 +719,104 @@
"rewarddialog5": "You are removing a reward share transaction associated with account:",
"rewarddialog6": "On pressing confirm, the rewardshare will be removed and the minting key will become invalid."
},
"sponsorshipspage": {
"schange1": "Active Sponsorships",
"schange2": "Account Address",
"schange3": "Total Sponsorships active",
"schange4": "Next sponsorship ending in",
"schange5": "Sponsor New Minter",
"schange6": "Finished Sponsorships",
"schange7": "Completed",
"schange8": "Addresses",
"schange9": "You currently have no active sponsorships",
"schange10": "Public Key Lookup",
"schange11": "Copy",
"schange12": "Address to Public Key Converter",
"schange13": "Enter address",
"schange14": "In progress",
"schange15": "Finishing up",
"schange16": "Copy the key below and share it with your sponsored person.",
"schange17": "Copied to clipboard",
"schange18": "Warning: do not leave this plugin or close the Qortal UI until completion!",
"schange19": "Copy Sponsorship Key",
"schange20": "Creating relationship",
"schange21": "Remove Sponsorship Key"
"sponsorshipspage":{
"schange1":"Active Sponsorships",
"schange2":"Account Address",
"schange3":"Total Sponsorships active",
"schange4":"Next sponsorship ending in",
"schange5":"Sponsor New Minter",
"schange6":"Finished Sponsorships",
"schange7":"Completed",
"schange8":"Addresses",
"schange9":"You currently have no active sponsorships",
"schange10":"Public Key Lookup",
"schange11":"Copy",
"schange12":"Address to Public Key Converter",
"schange13":"Enter address",
"schange14":"In progress",
"schange15":"Finishing up",
"schange16":"Copy the key below and share it with your sponsored person.",
"schange17":"Copied to clipboard",
"schange18":"Warning: do not leave this plugin or close the Qortal UI until completion!",
"schange19":"Copy Sponsorship Key",
"schange20":"Creating relationship",
"schange21":"Remove Sponsorship Key"
},
"explorerpage":{
"exp1":"Address or name to search",
"exp2":"Account Balance",
"exp3":"More Info",
"exp4":"Address or Name not found !",
"exp5":"Note that registered names are case-sensitive.",
"exp6":"Founder",
"exp7":"Info",
"exp8":"Show all buy trades",
"exp9":"Show all sell trades",
"exp10":"BUY HISTORY",
"exp11":"SELL HISTORY",
"exp12":"No buy trades made yet.",
"exp13":"No sell trades made yet.",
"exp14":"Show complete info",
"exp15":"Minting Since",
"exp16":"Not Minting",
"exp17":"ALL PAYMENTS",
"exp18":"Payments",
"exp19":"Sent",
"exp20":"Received",
"exp21":"Trades"
},
"managegroup":{
"mg1":"Group Members",
"mg2":"Invite To Group",
"mg3":"Group Admins",
"mg4":"Update Group",
"mg5":"Close Manage Group",
"mg6":"BAN",
"mg7":"KICK",
"mg8":"Group ID",
"mg9":"Joined",
"mg10":"Add Group Admin",
"mg11":"Are you sure to add this member to admins ?",
"mg12":"On pressing confirm, add admin request will be sent!",
"mg13":"Remove Group Admin",
"mg14":"Remove Admin Address",
"mg15":"Are you sure to remove this member from admins ?",
"mg16":"On pressing confirm, remove admin request will be sent!",
"mg17":"Ban Member From Group",
"mg18":"Member Name",
"mg19":"Member Address",
"mg20":"How Long To Ban",
"mg21":"Reason For Ban",
"mg22":"Are you sure to ban this member from the group ?",
"mg23":"On pressing confirm, the ban request will be sent!",
"mg24":"FOREVER",
"mg25":"Banned Members",
"mg26":"CANCEL BAN",
"mg27":"Ban Expiry",
"mg28":"Cancel Ban Member From Group",
"mg29":"Are you sure to cancel the ban for this member from the group ?",
"mg30":"On pressing confirm, the cancel ban request will be sent!",
"mg31":"Kick Member From Group",
"mg32":"Reason For Kick",
"mg33":"Are you sure to kick this member from the group ?",
"mg34":"On pressing confirm, the kick request will be sent!",
"mg35":"No Open Group Invites",
"mg36":"Your Open Group Invites",
"mg37":"Address or name to invite",
"mg38":"Invite Expiry Time",
"mg39":"All Fields Are Required",
"mg40":"Are you sure to invite this member to the group ?",
"mg41":"On pressing confirm, the invite request will be sent!",
"mg42":"Group Type",
"mg43":"Invite Expiry",
"mg44":"Public Group",
"mg45":"Private Group",
"mg46":"Cancel Invite",
"mg47":"Cancel Invite To Group",
"mg48":"Are you sure to cancel the invite for this member ?",
"mg49":"On pressing confirm, the cancel invite request will be sent!",
"mg50":"Coming Soon...",
"mg51":"Minimum 3 Characters / Maximum 32 Characters",
"mg52":"Maximum 128 Characters"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"群组管理",
"puzzles":"益智游戏",
"nodemanagement":"节点管理"
"nodemanagement":"节点管理",
"trading":"贸易",
"groups":"团体"
},
"login":{
"login":"登入",
@ -133,7 +135,8 @@
"uiversion":"UI版本",
"coreversion":"核心版本",
"minting":"(铸币中)",
"synchronizing":"正在同步中"
"synchronizing":"正在同步中",
"peers":"连接点"
},
"walletprofile":{
"minterlevel":"铸币等级",
@ -150,7 +153,9 @@
"next":"下一步",
"create":"新建",
"continue":"继续",
"save":"保存"
"save":"保存",
"balance":"信用",
"balances":"您的钱包余额"
},
"startminting":{
"smchange1":"无法获取铸币帐户",
@ -308,7 +313,22 @@
"tchange30":"加载余额失败。请重新尝试!",
"tchange31":"已卖出",
"tchange32":"已买入",
"tchange33":"汇率"
"tchange33":"平均",
"tchange34":"金额不能为0",
"tchange35":"价格不能为0",
"tchange36":"待定汽车购买",
"tchange37":"未找到自动购买订单!",
"tchange38":"添加",
"tchange39":"自动购买订单",
"tchange40":"价格",
"tchange41":"成功删除自动购买订单!",
"tchange42":"开市卖单",
"tchange43":"我的购买历史",
"tchange44":"成功添加自动买单!",
"tchange45":"自动购买",
"tchange46":"自动购买",
"tchange47":"以这个价格出售",
"tchange48":"不够"
},
"rewardsharepage":{
"rchange1":"铸币密钥",
@ -352,7 +372,29 @@
"nchange15":"设置头像",
"nchange16":"节点核心需要更新",
"nchange17":"名称已存在!",
"nchange18":"注册名称成功!"
"nchange18":"注册名称成功!",
"nchange19":"销售名称",
"nchange20":"取消销售",
"nchange21":"购买名称",
"nchange22":"公开市场名称出售",
"nchange23":"卖出价",
"nchange24":"没有名字可以卖",
"nchange25":"出售名称",
"nchange26":"你确定要卖这个名字吗?",
"nchange27":"对于 QORT 中的这个价格",
"nchange28":"按下确认后,将发送销售名称请求!",
"nchange29":"要取消的名称",
"nchange30":"你确定要取消这个名字的出售吗?",
"nchange31":"按下确认后,将发送取消销售名称请求!",
"nchange32":"销售名称请求成功!",
"nchange33":"取消销售名称请求成功!",
"nchange34":"购买名称请求成功!",
"nchange35":"你有名字!",
"nchange36":"只有没有注册名字的账户才能买名字。",
"nchange37":"注意!",
"nchange38":"你没有足够的 qort 来购买这个名字。",
"nchange39":"你确定要买这个名字吗?",
"nchange40":"按下确认后,将发送购买名称请求!"
},
"websitespage":{
"schange1":"浏览网站",
@ -483,7 +525,9 @@
"cchange21":"发送失败, 请再此尝试...",
"cchange22":"正在加载信息内容...",
"cchange23":"未能解密信息内容!",
"cchange24":"每个信息的最大字符数为 255"
"cchange24":"每个信息的最大字符数为 255",
"cchange25":"您的余额低于 4.20 QORT",
"cchange26":"出于打击垃圾邮件的需要Qort余额低于4.20的账户在Q-Chat中发送消息需要很长时间。如果你想立即提高Q-Chat消息的发送速度请获取4.20以上 QORT 到您的地址。这可以通过贸易门户中的交易来完成,或者通过另一个 Qortian 给您 QORT。一旦您的帐户中有超过 4.20 QORTQ-Chat 消息将是即时的并且此对话框将不再存在 显示。感谢您了解这种必要的垃圾邮件预防方法,我们希望您喜欢 Qortal"
},
"welcomepage":{
"wcchange1":"欢迎来到 Q-Chat",
@ -674,5 +718,82 @@
"schange19":"复制赞助密钥",
"schange20":"建立关系",
"schange21":"删除赞助密钥"
},
"explorerpage":{
"exp1":"需要搜索的钱包地址或名称",
"exp2":"账户余额",
"exp3":"更多信息",
"exp4":"找不到相关钱包地址或名称!",
"exp5":"请注意,注册名称区分大小写。",
"exp6":"创始人",
"exp7":"信息",
"exp8":"显示所有买入交易",
"exp9":"显示所有卖出交易",
"exp10":"买入历史",
"exp11":"卖出历史",
"exp12":"还没有买入交易。",
"exp13":"还没有卖出交易。",
"exp14":"显示完整信息",
"exp15":"铸币时间",
"exp16":"不铸币",
"exp17":"所有付款",
"exp18":"付款",
"exp19":"已发送",
"exp20":"已收到",
"exp21":"交易"
},
"managegroup":{
"mg1":"群组成员",
"mg2":"邀请加入群组",
"mg3":"组管理员",
"mg4":"更新组",
"mg5":"关闭管理组",
"mg6":"禁令",
"mg7":"踢",
"mg8":"组号",
"mg9":"已加入",
"mg10":"添加群组管理员",
"mg11":"您确定将此成员添加到管理员吗?",
"mg12":"按下确认后,将发送添加管理员请求!",
"mg13":"删除组管理员",
"mg14":"删除管理员地址",
"mg15":"你确定要从管理员中删除该成员吗?",
"mg16":"按下确认后,将发送删除管理员请求!",
"mg17":"禁止群组成员",
"mg18":"会员姓名",
"mg19":"会员地址",
"mg20":"禁止多久",
"mg21":"封禁原因",
"mg22":"您确定要将此成员加入群组吗?",
"mg23":"按下确认后,将发送封禁请求!",
"mg24":"永远",
"mg25":"被禁止的会员",
"mg26":"取消禁令",
"mg27":"禁止到期",
"mg28":"取消群成员封禁",
"mg29":"你确定要取消对这个成员的群禁言吗?",
"mg30":"按下确认后,将发送取消禁令请求!",
"mg31":"将成员踢出群组",
"mg32":"踢球原因",
"mg33":"您确定将该成员踢出群吗?",
"mg34":"按下确认后,将发送踢球请求!",
"mg35":"没有公开组邀请",
"mg36":"你的公开组邀请",
"mg37":"邀请地址或姓名",
"mg38":"邀请到期时间",
"mg39":"所有字段都需要",
"mg40":"您确定邀请该成员加入群组吗?",
"mg41":"按下确认后,将发送邀请请求!",
"mg42":"组类型",
"mg43":"邀请到期",
"mg44":"公共组",
"mg45":"私有组",
"mg46":"取消邀请",
"mg47":"取消群邀请",
"mg48":"您确定要取消对该会员的邀请吗?",
"mg49":"按下确认后,将发送取消邀请请求!",
"mg50":"即将推出……",
"mg51":"最少 3 个字符 / 最多 32 个字符",
"mg52":"最多 128 个字符"
}
}

View File

@ -34,7 +34,9 @@
"qchat":"Q-CHAT",
"groupmanagement":"群組管理",
"puzzles":"益智遊戲",
"nodemanagement":"節點管理"
"nodemanagement":"節點管理",
"trading":"貿易",
"groups":"團體"
},
"login":{
"login":"登入",
@ -133,7 +135,8 @@
"uiversion":"UI版本",
"coreversion":"核心版本",
"minting":"(鑄幣中)",
"synchronizing":"正在同步中"
"synchronizing":"正在同步中",
"peers":"連接點"
},
"walletprofile":{
"minterlevel":"鑄幣等級",
@ -150,7 +153,9 @@
"next":"下一步",
"create":"創建",
"continue":"繼續",
"save":"保存"
"save":"保存",
"balance":"信用",
"balances":"您的錢包餘額"
},
"startminting":{
"smchange1":"無法獲取鑄幣帳戶",
@ -308,7 +313,22 @@
"tchange30":"加載餘額失敗。請重新嘗試!",
"tchange31":"已賣出",
"tchange32":"已買入",
"tchange33":"匯率"
"tchange33":"平均",
"tchange34":"金額不能為0",
"tchange35":"價格不能為0",
"tchange36":"待定汽車購買",
"tchange37":"未找到自動購買訂單!",
"tchange38":"添加",
"tchange39":"自動購買訂單",
"tchange40":"價格",
"tchange41":"成功刪除自動購買訂單!",
"tchange42":"開市賣單",
"tchange43":"我的購買歷史",
"tchange44":"成功添加自動買單!",
"tchange45":"自動購買",
"tchange46":"自動購買",
"tchange47":"以這個價格出售",
"tchange48":"不夠"
},
"rewardsharepage":{
"rchange1":"鑄幣密鑰",
@ -352,7 +372,29 @@
"nchange15":"設置頭像",
"nchange16":"節點核心需要更新",
"nchange17":"名稱已存在!",
"nchange18":"註冊名稱成功!"
"nchange18":"註冊名稱成功!",
"nchange19":"銷售名稱",
"nchange20":"取消銷售",
"nchange21":"購買名稱",
"nchange22":"公開市場名稱出售",
"nchange23":"賣出價",
"nchange24":"沒有名字可以賣",
"nchange25":"出售名稱",
"nchange26":"你確定要賣這個名字嗎?",
"nchange27":"對於 QORT 中的這個價格",
"nchange28":"按下確認後,將發送銷售名稱請求!",
"nchange29":"要取消的名稱",
"nchange30":"你確定要取消這個名字的出售嗎?",
"nchange31":"按下確認後,將發送取消銷售名稱請求!",
"nchange32":"銷售名稱請求成功!",
"nchange33":"取消銷售名稱請求成功!",
"nchange34":"購買名稱請求成功!",
"nchange35":"你有名字!",
"nchange36":"只有沒有註冊名字的賬戶才能買名字。",
"nchange37":"注意!",
"nchange38":"你沒有足夠的 qort 來購買這個名字。",
"nchange39":"你確定要買這個名字嗎?",
"nchange40":"按下確認後,將發送購買名稱請求!"
},
"websitespage":{
"schange1":"瀏覽網站",
@ -483,7 +525,9 @@
"cchange21":"發送失敗, 請再此嘗試...",
"cchange22":"正在加載信息内容...",
"cchange23":"未能解密信息内容!",
"cchange24":"每個信息的最大字符數為 255"
"cchange24":"每個信息的最大字符數為 255",
"cchange25":"您的餘額低於 4.20 QORT",
"cchange26":"出於打擊垃圾郵件的需要Qort餘額低於4.20的賬戶在Q-Chat中發送消息需要很長時間。如果你想立即提高Q-Chat消息的發送速度請獲取4.20以上 QORT 到您的地址。這可以通過貿易門戶中的交易來完成,或者通過另一個 Qortian 給您 QORT。一旦您的帳戶中有超過 4.20 QORTQ-Chat 消息將是即時的並且此對話框將不再存在 顯示。感謝您了解這種必要的垃圾郵件預防方法,我們希望您喜歡 Qortal"
},
"welcomepage":{
"wcchange1":"歡迎來到 Q-Chat",
@ -674,5 +718,82 @@
"schange19":"複製贊助密鑰",
"schange20":"建立關係",
"schange21":"刪除贊助密鑰"
},
"explorerpage":{
"exp1":"需要搜索的錢包地址或名稱",
"exp2":"賬戶餘額",
"exp3":"更多信息",
"exp4":"找不到相關錢包地址或名稱!",
"exp5":"請注意,註冊名稱區分大小寫。",
"exp6":"創始人",
"exp7":"信息",
"exp8":"顯示所有買入交易",
"exp9":"顯示所有賣出交易",
"exp10":"買入歷史",
"exp11":"賣出歷史",
"exp12":"還沒有買入交易。",
"exp13":"還沒有賣出交易。",
"exp14":"顯示完整信息",
"exp15":"鑄幣時間",
"exp16":"不鑄幣",
"exp17":"所有付款",
"exp18":"付款",
"exp19":"已發送",
"exp20":"已收到",
"exp21":"交易"
},
"managegroup":{
"mg1":"群組成員",
"mg2":"邀請加入群組",
"mg3":"組管理員",
"mg4":"更新組",
"mg5":"關閉管理組",
"mg6":"禁令",
"mg7":"踢",
"mg8":"組號",
"mg9":"已加入",
"mg10":"添加群組管理員",
"mg11":"您確定將此成員添加到管理員嗎?",
"mg12":"按下確認後,將發送添加管理員請求!",
"mg13":"刪除組管理員",
"mg14":"刪除管理員地址",
"mg15":"你確定要從管理員中刪除該成員嗎?",
"mg16":"按下確認後,將發送刪除管理員請求!",
"mg17":"禁止群組成員",
"mg18":"會員姓名",
"mg19":"會員地址",
"mg20":"禁止多久",
"mg21":"封禁原因",
"mg22":"您確定要將此成員加入群組嗎?",
"mg23":"按下確認後,將發送封禁請求!",
"mg24":"永遠",
"mg25":"被禁止的會員",
"mg26":"取消禁令",
"mg27":"禁止到期",
"mg28":"取消群成員封禁",
"mg29":"你確定要取消對這個成員的群禁言嗎?",
"mg30":"按下確認後,將發送取消禁令請求!",
"mg31":"將成員踢出群組",
"mg32":"踢球原因",
"mg33":"您確定將該成員踢出群嗎?",
"mg34":"按下確認後,將發送踢球請求!",
"mg35":"沒有公開組邀請",
"mg36":"你的公開組邀請",
"mg37":"邀請地址或姓名",
"mg38":"邀請到期時間",
"mg39":"所有字段都需要",
"mg40":"您確定邀請該成員加入群組嗎?",
"mg41":"按下確認後,將發送邀請請求!",
"mg42":"組類型",
"mg43":"邀請到期",
"mg44":"公共組",
"mg45":"私有組",
"mg46":"取消邀請",
"mg47":"取消群邀請",
"mg48":"您確定要取消對該會員的邀請嗎?",
"mg49":"按下確認後,將發送取消邀請請求!",
"mg50":"即將推出……",
"mg51":"最少 3 個字符 / 最多 32 個字符",
"mg52":"最多 128 個字符"
}
}

View File

@ -1,7 +1,7 @@
{
"name": "qortal-ui-core",
"version": "2.2.3",
"description": "QORTAL-UI Core",
"version": "2.2.5",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
"QORTAL",
@ -17,12 +17,12 @@
"author": "QORTAL <admin@qortal.org>",
"license": "GPL-3.0",
"dependencies": {
"@hapi/hapi": "20.2.2",
"@hapi/hapi": "21.1.0",
"@hapi/inert": "7.0.0",
"sass": "1.55.0"
"sass": "1.57.1"
},
"devDependencies": {
"@babel/core": "7.19.3",
"@babel/core": "7.20.7",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
"@material/mwc-dialog": "0.27.0",
@ -53,34 +53,35 @@
"@polymer/paper-spinner": "3.0.2",
"@polymer/paper-toast": "3.0.1",
"@polymer/paper-tooltip": "3.0.1",
"@rollup/plugin-alias": "4.0.0",
"@rollup/plugin-babel": "6.0.0",
"@rollup/plugin-commonjs": "23.0.0",
"@rollup/plugin-node-resolve": "15.0.0",
"@rollup/plugin-replace": "5.0.0",
"@vaadin/grid": "23.2.5",
"@vaadin/icons": "23.2.5",
"@vaadin/password-field": "23.2.5",
"@rollup/plugin-alias": "4.0.2",
"@rollup/plugin-babel": "6.0.3",
"@rollup/plugin-commonjs": "24.0.0",
"@rollup/plugin-node-resolve": "15.0.1",
"@rollup/plugin-replace": "5.0.2",
"@rollup/plugin-terser": "0.2.1",
"@vaadin/button": "23.3.2",
"@vaadin/grid": "23.3.2",
"@vaadin/icons": "23.3.2",
"@vaadin/password-field": "23.3.2",
"@vaadin/tooltip": "23.3.2",
"asmcrypto.js": "2.3.2",
"bcryptjs": "2.4.3",
"epml": "0.3.3",
"file-saver": "2.0.5",
"lit": "2.4.0",
"lit": "2.5.0",
"lit-translate": "2.0.1",
"postcss": "8.4.18",
"pwa-helpers": "0.9.1",
"random-sentence-generator": "0.0.8",
"redux": "4.2.0",
"redux-thunk": "2.4.1",
"rollup": "2.79.1",
"redux-thunk": "2.4.2",
"rollup": "3.9.0",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-postcss": "4.0.2",
"rollup-plugin-progress": "1.1.2",
"rollup-plugin-scss": "3.0.0",
"rollup-plugin-terser": "7.0.2",
"rollup-plugin-web-worker-loader": "^1.6.1"
},
"engines": {
"node": ">=16.15.0"
"node": ">=16.17.1"
}
}

View File

@ -103,9 +103,10 @@ class AppInfo extends connect(store)(LitElement) {
render() {
return html`
<div id="profileInMenu">
<span class="info">${translate("appinfo.blockheight")}: ${this.nodeInfo.height ? this.nodeInfo.height : ''} <span class=${this.cssStatus}>${this._renderStatus()}</span></span>
<span class="info">${translate("appinfo.uiversion")}: ${this.nodeConfig.version ? this.nodeConfig.version : ''}</span>
${this._renderCoreVersion()}
<span class="info">${translate("appinfo.blockheight")}: ${this.nodeInfo.height ? this.nodeInfo.height : ''} <span class=${this.cssStatus}>${this._renderStatus()}</span></span>
<span class="info">${translate("appinfo.peers")}: ${this.nodeInfo.numberOfConnections ? this.nodeInfo.numberOfConnections : ''}
<a id="pageLink"></a>
</div>
`
@ -222,7 +223,7 @@ class AppInfo extends connect(store)(LitElement) {
setInterval(() => {
this.getNodeInfo()
this.getCoreInfo()
}, 60000)
}, 30000)
}
async getNodeInfo() {

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,7 @@ import './login-view/login-view.js'
import './app-view.js'
import copyTextMenu from '../functional-components/copy-text-menu.js'
import framePasteMenu from '../functional-components/frame-paste-menu.js';
import framePasteMenu from '../functional-components/frame-paste-menu.js'
installRouter((location) => store.dispatch(doNavigate(location)))

View File

@ -1,250 +0,0 @@
import { LitElement, html, css } from 'lit';
import { connect } from 'pwa-helpers';
import { store } from '../store.js';
import { translate, translateUnsafeHTML } from 'lit-translate';
import '@polymer/paper-ripple';
import '@vaadin/icon';
import '@vaadin/icons';
import '../functional-components/side-menu.js';
import '../functional-components/side-menu-item.js';
import './start-minting.js'
class SidenavMenu extends connect(store)(LitElement) {
static get properties() {
return {
config: { type: Object },
urls: { type: Object },
nodeType: { type: String, reflect: true },
theme: { type: String, reflect: true },
addressInfo: { type: Object }
};
}
static get styles() {
return [
css`
* {
--item-selected-color: var(--nav-selected-color);
--item-selected-color-text: var(--nav-selected-color-text);
--item-color-active: var(--nav-color-active);
--item-color-hover: var(--nav-color-hover);
--item-text-color: var(--nav-text-color);
--item-icon-color: var(--nav-icon-color);
--item-border-color: var(--nav-border-color);
--item-border-selected-color: var(--nav-border-selected-color);
}
.s-menu {
list-style: none;
padding: 0px 0px;
background: var(--sidetopbar);
border-radius: 2px;
width: 100%;
border-top: 1px solid var(--border);
outline: none;
}
`,
];
}
constructor() {
super();
this.urls = [];
this.nodeType = '';
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light';
this.addressInfo = {};
}
render() {
return html`
<div class="s-menu">
<side-menu>
${this.renderNodeTypeMenu()}
</side-menu>
</div>
`;
}
firstUpdated() {
this.getNodeType();
}
async getNodeType() {
const myNode =
store.getState().app.nodeConfig.knownNodes[
store.getState().app.nodeConfig.node
];
const nodeUrl =
myNode.protocol + '://' + myNode.domain + ':' + myNode.port;
const url = `${nodeUrl}/admin/info`;
await fetch(url)
.then((response) => {
return response.json();
})
.then((data) => {
this.nodeType = data.type;
})
.catch((err) => {
console.error('Request failed', err);
});
}
renderNodeTypeMenu() {
const addressInfo = this.addressInfo;
const isMinter = addressInfo?.error !== 124 && +addressInfo?.level > 0;
const isSponsor = +addressInfo?.level >= 5
if (this.nodeType === 'lite') {
return html`
<side-menu-item
label="${translate('sidemenu.wallets')}"
href="/app/wallet"
selected
>
<vaadin-icon icon="vaadin:wallet" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.nameregistration')}"
href="/app/name-registration"
>
<vaadin-icon icon="vaadin:user-check" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.datamanagement')}"
href="/app/data-management"
>
<vaadin-icon icon="vaadin:database" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.qchat')}"
href="/app/q-chat"
>
<vaadin-icon icon="vaadin:chat" slot="icon"></vaadin-icon>
</side-menu-item>
${this.renderNodeManagement()}
`;
} else {
return html`
<side-menu-item
label="${translate('sidemenu.minting')}"
expanded
>
<vaadin-icon icon="vaadin:info-circle" slot="icon"></vaadin-icon>
<side-menu-item
label="${translate('sidemenu.mintingdetails')}"
href="/app/minting"
?hide=${!isMinter}
>
<vaadin-icon icon="vaadin:info-circle" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.becomeAMinter')}"
href="/app/become-minter"
?hide=${isMinter}
>
<vaadin-icon icon="vaadin:thumbs-up" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('mintingpage.mchange35')}"
href="/app/sponsorship-list"
?hide=${!isSponsor}
>
<vaadin-icon icon="vaadin:list-ol" slot="icon"></vaadin-icon>
</side-menu-item>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.wallets')}"
href="/app/wallet"
selected
>
<vaadin-icon icon="vaadin:wallet" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.tradeportal')}"
href="/app/trade-portal"
>
<vaadin-icon icon="vaadin:bullets" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.rewardshare')}"
href="/app/reward-share"
>
<vaadin-icon icon="vaadin:share-square" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.qchat')}"
href="/app/q-chat"
>
<vaadin-icon icon="vaadin:chat" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.nameregistration')}"
href="/app/name-registration"
>
<vaadin-icon icon="vaadin:user-check" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.websites')}"
href="/app/websites"
>
<vaadin-icon icon="vaadin:desktop" slot="icon" ></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.puzzles')}"
href="/app/puzzles"
>
<vaadin-icon icon="vaadin:puzzle-piece" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.management')}"
expanded
>
<vaadin-icon icon="vaadin:cogs" slot="icon"></vaadin-icon>
<side-menu-item
label="${translate('sidemenu.datamanagement')}"
href="/app/data-management"
>
<vaadin-icon icon="vaadin:database" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.groupmanagement')}"
href="/app/group-management"
>
<vaadin-icon icon="vaadin:group" slot="icon"></vaadin-icon>
</side-menu-item>
${this.renderNodeManagement()}
</side-menu-item>
<div>
<start-minting></start-minting>
</div>
`;
}
}
renderNodeManagement() {
const checkNodeManagement = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node];
if ((checkNodeManagement.enableManagement = true)) {
return html`
<side-menu-item
label="${translate('sidemenu.nodemanagement')}"
href="/app/node-management"
>
<vaadin-icon icon="vaadin:cloud" slot="icon"></vaadin-icon>
</side-menu-item>
`;
} else {
return html``;
}
}
stateChanged(state) {
this.config = state.config;
this.urls = state.app.registeredUrls;
this.addressInfo = state.app.accountInfo.addressInfo;
}
}
window.customElements.define('sidenav-menu', SidenavMenu);

View File

@ -187,7 +187,6 @@ class StartMinting extends connect(store)(LitElement) {
firstUpdated() {
this.getMintingAcccounts();
this.shadowRoot.querySelector('mdc-dialog--open').setAttribute('style', 'width: 100vw')
}
renderErrorMsg1() {
@ -229,9 +228,6 @@ class StartMinting extends connect(store)(LitElement) {
// Check to see if a sponsorship key on a newly-level 1 minter exists. If it does, remove it.
const findMintingAccountFromOtherUser = this.mintingAccountData.find((ma) => ma.recipientAccount === address && ma.mintingAccount !== address);
const removeMintingAccount = async (publicKey) => {
const url = `${nodeUrl}/admin/mintingaccounts?apiKey=${myNode.apiKey}`;
return await fetch(url, {
@ -495,8 +491,6 @@ class StartMinting extends connect(store)(LitElement) {
` : '' }
</div>
</div>
<!-- </mwc-dialog> -->
</div>
` : ""}

File diff suppressed because it is too large Load Diff

View File

@ -251,7 +251,7 @@ class SettingsPage extends connect(store)(LitElement) {
const domainInput = this.shadowRoot.getElementById('domainInput').value
const portInput = this.shadowRoot.getElementById('portInput').value
if (protocolList.length >= 4 && domainInput.length >= 3 && portInput.length >= 4) {
if (protocolList.length >= 4 && domainInput.length >= 3 && portInput.length >= 2) {
const nodeObject = {
name: nameInput,
protocol: protocolList,

View File

@ -7,6 +7,7 @@ $mdc-layout-grid-breakpoints: (
:root, html, body{
--layout-breakpoint-desktop: #{map-get($mdc-layout-grid-breakpoints, desktop)};
--layout-breakpoint-laptop: #{map-get($mdc-layout-grid-breakpoints, laptop)};
--layout-breakpoint-tablet: #{map-get($mdc-layout-grid-breakpoints, tablet)};
--layout-breakpoint-mobile: #{map-get($mdc-layout-grid-breakpoints, phone)};
}

View File

@ -0,0 +1,7 @@
import { routes } from './trade-bot-routes.js'
export const addTradeBotRoutes = epmlInstance => {
Object.entries(routes).forEach(([route, handler]) => {
epmlInstance.route(route, handler)
})
}

View File

@ -0,0 +1,276 @@
import { store } from '../store.js'
import * as api from 'qortal-ui-crypto'
import snackbar from '../functional-components/snackbar.js'
import copyTextMenu from '../functional-components/copy-text-menu.js';
import framePasteMenu from '../functional-components/frame-paste-menu.js';
const createTransaction = api.createTransaction
const processTransaction = api.processTransaction
const tradeBotCreateRequest = api.tradeBotCreateRequest
const tradeBotRespondRequest = api.tradeBotRespondRequest
const signTradeBotTxn = api.signTradeBotTxn
const deleteTradeOffer = api.deleteTradeOffer
const cancelAllOffers = api.cancelAllOffers
const sendBtc = api.sendBtc
const sendLtc = api.sendLtc
const sendDoge = api.sendDoge
const sendDgb = api.sendDgb
const sendRvn = api.sendRvn
const sendArrr = api.sendArrr
export const routes = {
apiCall: async (req) => {
const url = req.data.url
delete req.data.url
return api.request(url, req.data)
},
openCopyTextMenu: async (req) => {
const textMenuObject = {
selectedText: req.data.selectedText,
eventObject: req.data.eventObject,
isFrame: req.data.isFrame,
};
copyTextMenu.open(textMenuObject);
},
closeCopyTextMenu: async (req) => {
copyTextMenu.close();
},
openFramePasteMenu: async (req) => {
framePasteMenu.open(req.data);
},
closeFramePasteMenu: async (req) => {
framePasteMenu.close();
},
transaction: async (req) => {
let response
try {
const tx = createTransaction(
req.data.type,
store.getState().app.wallet._addresses[req.data.nonce].keyPair,
req.data.params
)
if (!req.disableModal && !req.data.disableModal) {
await requestTransactionDialog.requestTransaction(tx)
}
const res = await processTransaction(tx.signedBytes)
let extraData = {}
if(req.data.type === 38 && tx && tx._rewardShareKeyPair && tx._rewardShareKeyPair.secretKey){
extraData.rewardSharePrivateKey = Base58.encode(tx._rewardShareKeyPair.secretKey)
}
response = {
success: true,
data: res,
extraData
}
} catch (e) {
console.error(e)
console.error(e.message)
response = {
success: false,
message: e.message,
}
}
return response
},
standaloneTransaction: async (req) => {
const rebuildUint8Array = (obj) => {
let _array = new Uint8Array(Object.keys(obj).length)
for (let i = 0; i < _array.byteLength; ++i) {
_array.set([obj[i]], i)
}
return _array
}
let response
try {
let _keyPair = {}
for (let _keyName in req.data.keyPair) {
_keyPair[_keyName] = rebuildUint8Array(
req.data.keyPair[_keyName]
)
}
const tx = createTransaction(
req.data.type,
_keyPair,
req.data.params
)
const res = await processTransaction(tx.signedBytes)
response = {
success: true,
data: res,
}
} catch (e) {
console.error(e)
console.error(e.message)
response = {
success: false,
message: e.message,
}
}
return response
},
showSnackBar: async (req) => {
snackbar.add({
labelText: req.data,
dismiss: true,
})
},
tradeBotCreateRequest: async (req) => {
let response
try {
const unsignedTxn = await tradeBotCreateRequest(req.data)
const signedTxnBytes = await signTradeBotTxn(
unsignedTxn,
store.getState().app.selectedAddress.keyPair
)
const res = await processTransaction(signedTxnBytes)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
tradeBotRespondRequest: async (req) => {
let response
try {
const res = await tradeBotRespondRequest(req.data)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
deleteTradeOffer: async (req) => {
let response
try {
const unsignedTxn = await deleteTradeOffer(req.data)
const signedTxnBytes = await signTradeBotTxn(
unsignedTxn,
store.getState().app.selectedAddress.keyPair
)
const res = await processTransaction(signedTxnBytes)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
cancelAllOffers: async (req) => {
let response
try {
const res = await cancelAllOffers(
store.getState().app.selectedAddress
)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
sendBtc: async (req) => {
let response
try {
const res = await sendBtc(req.data)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
sendLtc: async (req) => {
let response
try {
const res = await sendLtc(req.data)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
sendDoge: async (req) => {
let response
try {
const res = await sendDoge(req.data)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
sendDgb: async (req) => {
let response
try {
const res = await sendDgb(req.data)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
sendRvn: async (req) => {
let response
try {
const res = await sendRvn(req.data)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
sendArrr: async (req) => {
let response
try {
const res = await sendArrr(req.data)
response = res
} catch (e) {
console.error(e)
console.error(e.message)
response = e.message
}
return response
},
}

View File

@ -5,7 +5,7 @@ const replace = require('@rollup/plugin-replace')
const globals = require('rollup-plugin-node-globals')
const commonjs = require('@rollup/plugin-commonjs')
const alias = require('@rollup/plugin-alias')
const { terser } = require('rollup-plugin-terser')
const terser = require('@rollup/plugin-terser');
const scss = require('rollup-plugin-scss')
const webWorkerLoader = require('rollup-plugin-web-worker-loader');

View File

@ -3,10 +3,11 @@ const { nodeResolve } = require('@rollup/plugin-node-resolve');
const replace = require('@rollup/plugin-replace');
const commonjs = require('@rollup/plugin-commonjs');
const progress = require('rollup-plugin-progress');
const { terser } = require("rollup-plugin-terser");
const path = require('path');
const terser = require('@rollup/plugin-terser');
const alias = require('@rollup/plugin-alias');
const webWorkerLoader = require('rollup-plugin-web-worker-loader');
const path = require('path');
const generateRollupConfig = (file, { outputDir, aliases }) => {

View File

@ -1,153 +1,51 @@
"use strict";
// This needs a total makeover.
// Qortal TX types
const TX_TYPES = {
1: "Genesis",
2: "Payment",
3: "Name registration",
4: "Name update",
5: "Sell name",
6: "Cancel sell name",
7: "Buy name",
8: "Create poll",
9: "Vote in poll",
10: "Arbitrary",
11: "Issue asset",
12: "Transfer asset",
13: "Create asset order",
14: "Cancel asset order",
15: "Multi-payment transaction",
16: "Deploy AT",
17: "Message",
18: "Chat",
19: "Publicize",
20: "Airdrop",
21: 'AT',
22: 'Create group',
23: 'Update group',
24: 'Add group admin',
25: 'Remove group admin',
26: 'Group ban',
27: 'Cancel group ban',
28: 'Group kick',
29: 'Group invite',
30: 'Cancel group invite',
31: 'Join group',
32: 'Leave group',
33: 'Group approval',
34: 'Set group',
35: 'Update asset',
36: 'Account flags',
37: 'Enable forging',
38: 'Reward share',
39: 'Account level',
21: "AT",
22: "Create group",
23: "Update group",
24: "Add group admin",
25: "Remove group admin",
26: "Group ban",
27: "Cancel group ban",
28: "Group kick",
29: "Group invite",
30: "Cancel group invite",
31: "Join group",
32: "Leave group",
33: "Group approval",
34: "Set group",
35: "Update asset",
36: "Account flags",
37: "Enable forging",
38: "Reward share",
39: "Account level",
40: "Transfer privs",
41: "Presence"
}
// Qortal errors
// OK(1),
// INVALID_ADDRESS(2),
// NEGATIVE_AMOUNT(3),
// NEGATIVE_FEE(4),
// NO_BALANCE(5),
// INVALID_REFERENCE(6),
// INVALID_NAME_LENGTH(7),
// INVALID_VALUE_LENGTH(8),
// NAME_ALREADY_REGISTERED(9),
// NAME_DOES_NOT_EXIST(10),
// INVALID_NAME_OWNER(11),
// NAME_ALREADY_FOR_SALE(12),
// NAME_NOT_FOR_SALE(13),
// BUYER_ALREADY_OWNER(14),
// INVALID_AMOUNT(15),
// INVALID_SELLER(16),
// NAME_NOT_LOWER_CASE(17),
// INVALID_DESCRIPTION_LENGTH(18),
// INVALID_OPTIONS_COUNT(19),
// INVALID_OPTION_LENGTH(20),
// DUPLICATE_OPTION(21),
// POLL_ALREADY_EXISTS(22),
// POLL_DOES_NOT_EXIST(24),
// POLL_OPTION_DOES_NOT_EXIST(25),
// ALREADY_VOTED_FOR_THAT_OPTION(26),
// INVALID_DATA_LENGTH(27),
// INVALID_QUANTITY(28),
// ASSET_DOES_NOT_EXIST(29),
// INVALID_RETURN(30),
// HAVE_EQUALS_WANT(31),
// ORDER_DOES_NOT_EXIST(32),
// INVALID_ORDER_CREATOR(33),
// INVALID_PAYMENTS_COUNT(34),
// NEGATIVE_PRICE(35),
// INVALID_CREATION_BYTES(36),
// INVALID_TAGS_LENGTH(37),
// INVALID_AT_TYPE_LENGTH(38),
// INVALID_AT_TRANSACTION(39),
// INSUFFICIENT_FEE(40),
// ASSET_DOES_NOT_MATCH_AT(41),
// ASSET_ALREADY_EXISTS(43),
// MISSING_CREATOR(44),
// TIMESTAMP_TOO_OLD(45),
// TIMESTAMP_TOO_NEW(46),
// TOO_MANY_UNCONFIRMED(47),
// GROUP_ALREADY_EXISTS(48),
// GROUP_DOES_NOT_EXIST(49),
// INVALID_GROUP_OWNER(50),
// ALREADY_GROUP_MEMBER(51),
// GROUP_OWNER_CANNOT_LEAVE(52),
// NOT_GROUP_MEMBER(53),
// ALREADY_GROUP_ADMIN(54),
// NOT_GROUP_ADMIN(55),
// INVALID_LIFETIME(56),
// INVITE_UNKNOWN(57),
// BAN_EXISTS(58),
// BAN_UNKNOWN(59),
// BANNED_FROM_GROUP(60),
// JOIN_REQUEST_EXISTS(61),
// INVALID_GROUP_APPROVAL_THRESHOLD(62),
// GROUP_ID_MISMATCH(63),
// INVALID_GROUP_ID(64),
// TRANSACTION_UNKNOWN(65),
// TRANSACTION_ALREADY_CONFIRMED(66),
// INVALID_TX_GROUP_ID(67),
// TX_GROUP_ID_MISMATCH(68),
// MULTIPLE_NAMES_FORBIDDEN(69),
// INVALID_ASSET_OWNER(70),
// AT_IS_FINISHED(71),
// NO_FLAG_PERMISSION(72),
// NOT_MINTING_ACCOUNT(73),
// INVALID_REWARD_SHARE_PERCENT(77),
// PUBLIC_KEY_UNKNOWN(78),
// INVALID_PUBLIC_KEY(79),
// AT_UNKNOWN(80),
// AT_ALREADY_EXISTS(81),
// GROUP_APPROVAL_NOT_REQUIRED(82),
// GROUP_APPROVAL_DECIDED(83),
// MAXIMUM_REWARD_SHARES(84),
// TRANSACTION_ALREADY_EXISTS(85),
// NO_BLOCKCHAIN_LOCK(86),
// ORDER_ALREADY_CLOSED(87),
// CLOCK_NOT_SYNCED(88),
// ASSET_NOT_SPENDABLE(89),
// ACCOUNT_CANNOT_REWARD_SHARE(90),
// NOT_YET_RELEASED(1000);
// Qortal error codes
const ERROR_CODES = {
1: "Valid OK",
2: "Invalid address",
@ -155,11 +53,9 @@ const ERROR_CODES = {
4: "Nagative fee",
5: "No balance",
6: "Invalid reference",
7: "Invalid time length",
8: "Invalid value length",
9: "Name already registered",
10: "Name does not exist",
11: "Invalid name owner",
12: "Name already for sale",
@ -167,9 +63,7 @@ const ERROR_CODES = {
14: "Name buyer already owner",
15: "Invalid amount",
16: "Invalid seller",
17: "Name not lowercase",
18: "Invalid description length",
19: "Invalid options length",
20: "Invalid option length",
@ -180,7 +74,6 @@ const ERROR_CODES = {
25: "Option does not exist",
26: "Already voted for that option",
27: "Invalid data length",
28: "Invalid quantity",
29: "Asset does not exist",
30: "Invalid return",
@ -192,105 +85,86 @@ const ERROR_CODES = {
36: "Invalid creation bytes",
37: "Invalid tags length",
38: "Invalid type length",
39: 'Invalid AT transaction',
39: "Invalid AT transaction",
40: "Insufficient fee",
41: "Asset does not match AT",
43: 'Asset already exists',
44: 'Missing creator',
45: 'Timestamp too old',
46: 'Timestamp too new',
47: 'Too many unconfirmed',
48: 'Group already exists',
49: 'Group does not exist',
50: 'Invalid group owner',
51: 'Already group memeber',
52: 'Group owner can not leave',
53: 'Not group member',
54: 'Already group admin',
55: 'Not group admin',
56: 'Invalid lifetime',
57: 'Invite unknown',
58: 'Ban exists', // total crap mistakes by the nigerian scammer
59: 'Ban unknown', // its fucking Ban not Ben
60: 'Banned from group',
61: 'Join request',
62: 'Invalid group approval threshold',
63: 'Group ID mismatch',
64: 'Invalid group ID',
65: 'Transaction unknown',
66: 'Transaction already confirmed',
67: 'Invalid TX group',
68: 'TX group ID mismatch',
69: 'Multiple names forbidden',
70: 'Invalid asset owner',
71: 'AT is finished',
72: 'No flag permission',
73: 'Not minting accout',
43: "Asset already exists",
44: "Missing creator",
45: "Timestamp too old",
46: "Timestamp too new",
47: "Too many unconfirmed",
48: "Group already exists",
49: "Group does not exist",
50: "Invalid group owner",
51: "Already group memeber",
52: "Group owner can not leave",
53: "Not group member",
54: "Already group admin",
55: "Not group admin",
56: "Invalid lifetime",
57: "Invite unknown",
58: "Ban exists",
59: "Ban unknown",
60: "Banned from group",
61: "Join request",
62: "Invalid group approval threshold",
63: "Group ID mismatch",
64: "Invalid group ID",
65: "Transaction unknown",
66: "Transaction already confirmed",
67: "Invalid TX group",
68: "TX group ID mismatch",
69: "Multiple names forbidden",
70: "Invalid asset owner",
71: "AT is finished",
72: "No flag permission",
73: "Not minting accout",
77: 'Invalid rewardshare percent',
78: 'Public key unknown',
79: 'Invalid public key',
80: 'AT unknown',
81: 'AT already exists',
82: 'Group approval not required',
83: 'Group approval decided',
84: 'Maximum reward shares',
85: 'Transaction already exists',
86: 'No blockchain lock',
87: 'Order already closed',
88: 'Clock not synced',
89: 'Asset not spendable',
90: 'Account can not reward share',
77: "Invalid rewardshare percent",
78: "Public key unknown",
79: "Invalid public key",
80: "AT unknown",
81: "AT already exists",
82: "Group approval not required",
83: "Group approval decided",
84: "Maximum reward shares",
85: "Transaction already exists",
86: "No blockchain lock",
87: "Order already closed",
88: "Clock not synced",
89: "Asset not spendable",
90: "Account can not reward share",
91: "Self share exists",
92: "Account already exists",
93: "Invalid group block delay",
94: "Incorrect nonce",
95: "Ivalid timestamp signature",
96: "Address blocked",
97: "Name Blocked",
98: "Group approval required",
99: "Account not transferable",
999: "Ivalid but ok",
1000: "Not yet released."
}
const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 0
// Qortal 8 decimals
const QORT_DECIMALS = 1e8
const PROXY_URL = "/proxy/" // Proxy for api calls
// Q for Qortal
const ADDRESS_VERSION = 58
const ADDRESS_VERSION = 58; // Q for Qora
// const ADDRESS_VERSION = 46; // K for Karma
// Proxy for api calls
const PROXY_URL = "/proxy/"
// Used as a salt for all qora addresses. Salts used for storing your private keys in local storage will be randomly generated
const STATIC_SALT = new Uint8Array([54, 190, 201, 206, 65, 29, 123, 129, 147, 231, 180, 166, 171, 45, 95, 165, 78, 200, 208, 194, 44, 207, 221, 146, 45, 238, 68, 68, 69, 102, 62, 6])
const BCRYPT_ROUNDS = 10 // Remember that the total work spent on key derivation is BCRYPT_ROUNDS * KDF_THREADS
const BCRYPT_VERSION = "2a"
const STATIC_BCRYPT_SALT = `$${BCRYPT_VERSION}$${BCRYPT_ROUNDS}$IxVE941tXVUD4cW0TNVm.O`
// const PBKDF2_ROUNDS = Math.pow(2,17) // Deprecated
const KDF_THREADS = 16 // 16 Threads seems like a good number :) . No you dumbass nigerian. Its not ! -_-
const KDF_THREADS = 16
export { TX_TYPES, ERROR_CODES, QORT_DECIMALS, PROXY_URL, STATIC_SALT, ADDRESS_VERSION, KDF_THREADS, STATIC_BCRYPT_SALT, CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP }
//const TX_TYPES = {
// GENESIS_TRANSACTION: 1,
// PAYMENT_TRANSACTION: 2,
//
// REGISTER_NAME_TRANSACTION: 3,
// UPDATE_NAME_TRANSACTION: 4,
// SELL_NAME_TRANSACTION: 5,
// CANCEL_SELL_NAME_TRANSACTION: 6,
// BUY_NAME_TRANSACTION: 7,
//
// CREATE_POLL_TRANSACTION: 8,
// VOTE_ON_POLL_TRANSACTION: 9,
//
// ARBITRARY_TRANSACTION: 10,
//
// ISSUE_ASSET_TRANSACTION: 11,
// TRANSFER_ASSET_TRANSACTION: 12,
// CREATE_ORDER_TRANSACTION: 13,
// CANCEL_ORDER_TRANSACTION: 14,
// MULTI_PAYMENT_TRANSACTION: 15,
//
// DEPLOY_AT_TRANSACTION: 16,
//
// MESSAGE_TRANSACTION: 17
//};

View File

@ -0,0 +1,42 @@
'use strict';
import TransactionBase from './TransactionBase.js'
import Base58 from '../deps/Base58.js'
import { store } from '../../api.js'
import { QORT_DECIMALS } from '../constants.js'
export default class TransferPrivsTransaction extends TransactionBase {
constructor() {
super()
this.type = 40
}
render(html) {
const conf = store.getState().config
return html`
Are you sure to transfer privileges to this account ?
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
On pressing confirm, the transfer privileges request will be sent!
`
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._recipient,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,53 @@
'use strict';
import TransactionBase from "../TransactionBase.js"
import { QORT_DECIMALS } from "../../constants.js"
export default class AddGroupAdminTransaction extends TransactionBase {
constructor() {
super()
this.type = 24
}
render(html) {
return html`
${this._addAdminDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
${this._addAdminDialog2}
`
}
set addAdminDialog1(addAdminDialog1) {
this._addAdminDialog1 = addAdminDialog1
}
set addAdminDialog2(addAdminDialog2) {
this._addAdminDialog2 = addAdminDialog2
}
set rGroupId(rGroupId) {
this._rGroupId = rGroupId;
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._rGroupIdBytes,
this._recipient,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,53 @@
'use strict';
import TransactionBase from "../TransactionBase.js"
import { QORT_DECIMALS } from "../../constants.js"
export default class CancelGroupBanTransaction extends TransactionBase {
constructor() {
super()
this.type = 27
}
render(html) {
return html`
${this._cancelBanMemberDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
${this._cancelBanMemberDialog2}
`
}
set cancelBanMemberDialog1(cancelBanMemberDialog1) {
this._cancelBanMemberDialog1= cancelBanMemberDialog1
}
set cancelBanMemberDialog2(cancelBanMemberDialog2) {
this._cancelBanMemberDialog2 = cancelBanMemberDialog2
}
set rGroupId(rGroupId) {
this._rGroupId = rGroupId
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._rGroupIdBytes,
this._recipient,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,60 @@
'use strict';
import TransactionBase from "../TransactionBase.js"
import { QORT_DECIMALS } from "../../constants.js"
export default class CancelGroupInviteTransaction extends TransactionBase {
constructor() {
super()
this.type = 30
}
render(html) {
return html`
${this._cancelInviteDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this._memberName}</span>
</div>
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
${this._cancelInviteDialog2}
`
}
set memberName(memberName) {
this._memberName = memberName
}
set cancelInviteDialog1(cancelInviteDialog1) {
this._cancelInviteDialog1 = cancelInviteDialog1
}
set cancelInviteDialog2(cancelInviteDialog2) {
this._cancelInviteDialog2 = cancelInviteDialog2
}
set rGroupId(rGroupId) {
this._rGroupId = rGroupId;
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._rGroupIdBytes,
this._recipient,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,67 @@
'use strict';
import TransactionBase from "../TransactionBase.js"
import { QORT_DECIMALS } from "../../constants.js"
export default class GroupBanTransaction extends TransactionBase {
constructor() {
super()
this.type = 26
}
render(html) {
return html`
${this._banMemberDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
${this._banMemberDialog2}
`
}
set banMemberDialog1(banMemberDialog1) {
this._banMemberDialog1= banMemberDialog1
}
set banMemberDialog2(banMemberDialog2) {
this._banMemberDialog2 = banMemberDialog2
}
set rGroupId(rGroupId) {
this._rGroupId = rGroupId;
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
}
set rBanReason(rBanReason) {
this._rBanReason = rBanReason
this._rBanReasonBytes = this.constructor.utils.stringtoUTF8Array(this._rBanReason.toLocaleLowerCase())
this._rBanReasonLength = this.constructor.utils.int32ToBytes(this._rBanReasonBytes.length)
}
set rBanTime(rBanTime) {
this._rBanTime = rBanTime
this._rBanTimeBytes = this.constructor.utils.int32ToBytes(this._rBanTime)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._rGroupIdBytes,
this._recipient,
this._rBanReasonLength,
this._rBanReasonBytes,
this._rBanTimeBytes,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,59 @@
'use strict';
import TransactionBase from "../TransactionBase.js"
import { QORT_DECIMALS } from "../../constants.js"
export default class GroupInviteTransaction extends TransactionBase {
constructor() {
super()
this.type = 29
}
render(html) {
return html`
${this._inviteMemberDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
${this._inviteMemberDialog2}
`
}
set inviteMemberDialog1(inviteMemberDialog1) {
this._inviteMemberDialog1= inviteMemberDialog1
}
set inviteMemberDialog2(inviteMemberDialog2) {
this._inviteMemberDialog2 = inviteMemberDialog2
}
set rGroupId(rGroupId) {
this._rGroupId = rGroupId;
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
}
set rInviteTime(rInviteTime) {
this._rInviteTime = rInviteTime
this._rInviteTimeBytes = this.constructor.utils.int32ToBytes(this._rInviteTime)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._rGroupIdBytes,
this._recipient,
this._rInviteTimeBytes,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,61 @@
'use strict';
import TransactionBase from "../TransactionBase.js"
import { QORT_DECIMALS } from "../../constants.js"
export default class GroupKickTransaction extends TransactionBase {
constructor() {
super()
this.type = 28
}
render(html) {
return html`
${this._kickMemberDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
${this._kickMemberDialog2}
`
}
set kickMemberDialog1(kickMemberDialog1) {
this._kickMemberDialog1= kickMemberDialog1
}
set kickMemberDialog2(kickMemberDialog2) {
this._kickMemberDialog2 = kickMemberDialog2
}
set rGroupId(rGroupId) {
this._rGroupId = rGroupId;
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
}
set rBanReason(rBanReason) {
this._rBanReason = rBanReason
this._rBanReasonBytes = this.constructor.utils.stringtoUTF8Array(this._rBanReason.toLocaleLowerCase())
this._rBanReasonLength = this.constructor.utils.int32ToBytes(this._rBanReasonBytes.length)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._rGroupIdBytes,
this._recipient,
this._rBanReasonLength,
this._rBanReasonBytes,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,53 @@
'use strict';
import TransactionBase from "../TransactionBase.js"
import { QORT_DECIMALS } from "../../constants.js"
export default class RemoveGroupAdminTransaction extends TransactionBase {
constructor() {
super()
this.type = 25
}
render(html) {
return html`
${this._kickAdminDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.theRecipient}</span>
</div>
${this._kickAdminDialog2}
`
}
set kickAdminDialog1(kickAdminDialog1) {
this._kickAdminDialog1 = kickAdminDialog1
}
set kickAdminDialog2(kickAdminDialog2) {
this._kickAdminDialog2 = kickAdminDialog2
}
set rGroupId(rGroupId) {
this._rGroupId = rGroupId;
this._rGroupIdBytes = this.constructor.utils.int32ToBytes(this._rGroupId)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
get params() {
const params = super.params
params.push(
this._rGroupIdBytes,
this._recipient,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,70 @@
'use strict';
import TransactionBase from '../TransactionBase.js'
import { QORT_DECIMALS } from '../../constants.js'
export default class BuyNameTransacion extends TransactionBase {
constructor() {
super()
this.type = 7
}
render(html) {
return html`
${this._buyNameDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.nameText}</span>
</div>
${this._buyNameDialog2}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.showSellPrice}</span>
</div>
${this._buyNameDialog3}
`
}
set buyNameDialog1(buyNameDialog1) {
this._buyNameDialog1 = buyNameDialog1
}
set buyNameDialog2(buyNameDialog2) {
this._buyNameDialog2 = buyNameDialog2
}
set buyNameDialog3(buyNameDialog3) {
this._buyNameDialog3 = buyNameDialog3
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
set name(name) {
this.nameText = name
this._nameBytes = this.constructor.utils.stringtoUTF8Array(name)
this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length)
}
set sellPrice(sellPrice) {
this.showSellPrice = sellPrice
this._sellPrice = sellPrice * QORT_DECIMALS
this._sellPriceBytes = this.constructor.utils.int64ToBytes(this._sellPrice)
}
set recipient(recipient) {
this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient)
this.theRecipient = recipient
}
get params() {
const params = super.params
params.push(
this._nameLength,
this._nameBytes,
this._sellPriceBytes,
this._recipient,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,49 @@
'use strict';
import TransactionBase from '../TransactionBase.js'
import { QORT_DECIMALS } from '../../constants.js'
export default class CancelSellNameTransacion extends TransactionBase {
constructor() {
super()
this.type = 6
}
render(html) {
return html`
${this._cancelSellNameDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.nameText}</span>
</div>
${this._cancelSellNameDialog2}
`
}
set cancelSellNameDialog1(cancelSellNameDialog1) {
this._cancelSellNameDialog1 = cancelSellNameDialog1
}
set cancelSellNameDialog2(cancelSellNameDialog2) {
this._cancelSellNameDialog2 = cancelSellNameDialog2
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
set name(name) {
this.nameText = name
this._nameBytes = this.constructor.utils.stringtoUTF8Array(name)
this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length)
}
get params() {
const params = super.params
params.push(
this._nameLength,
this._nameBytes,
this._feeBytes
)
return params
}
}

View File

@ -0,0 +1,64 @@
'use strict';
import TransactionBase from '../TransactionBase.js'
import { QORT_DECIMALS } from '../../constants.js'
export default class SellNameTransacion extends TransactionBase {
constructor() {
super()
this.type = 5
}
render(html) {
return html`
${this._sellNameDialog1}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.nameText}</span>
</div>
${this._sellNameDialog2}
<div style="background: #eee; padding: 8px; margin: 8px 0; border-radius: 5px;">
<span style="color: #000;">${this.showSellPrice}</span>
</div>
${this._sellNameDialog3}
`
}
set sellNameDialog1(sellNameDialog1) {
this._sellNameDialog1 = sellNameDialog1
}
set sellNameDialog2(sellNameDialog2) {
this._sellNameDialog2 = sellNameDialog2
}
set sellNameDialog3(sellNameDialog3) {
this._sellNameDialog3 = sellNameDialog3
}
set fee(fee) {
this._fee = fee * QORT_DECIMALS
this._feeBytes = this.constructor.utils.int64ToBytes(this._fee)
}
set name(name) {
this.nameText = name
this._nameBytes = this.constructor.utils.stringtoUTF8Array(name)
this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length)
}
set sellPrice(sellPrice) {
this.showSellPrice = sellPrice
this._sellPrice = sellPrice * QORT_DECIMALS
this._sellPriceBytes = this.constructor.utils.int64ToBytes(this._sellPrice)
}
get params() {
const params = super.params
params.push(
this._nameLength,
this._nameBytes,
this._sellPriceBytes,
this._feeBytes
)
return params
}
}

View File

@ -1,25 +1,47 @@
import PaymentTransaction from './PaymentTransaction.js'
import MessageTransaction from './MessageTransaction.js'
import RegisterNameTransaction from './names/RegisterNameTransaction.js'
import SellNameTransacion from './names/SellNameTransacion.js'
import CancelSellNameTransacion from './names/CancelSellNameTransacion.js'
import BuyNameTransacion from './names/BuyNameTransacion.js'
import MessageTransaction from './MessageTransaction.js'
import ChatTransaction from './chat/ChatTransaction.js'
import GroupChatTransaction from './chat/GroupChatTransaction.js';
import RewardShareTransaction from './reward-share/RewardShareTransaction.js'
import RemoveRewardShareTransaction from './reward-share/RemoveRewardShareTransaction.js'
import CreateGroupTransaction from './groups/CreateGroupTransaction.js';
import GroupChatTransaction from './chat/GroupChatTransaction.js'
import PublicizeTransaction from './PublicizeTransaction.js'
import CreateGroupTransaction from './groups/CreateGroupTransaction.js'
import AddGroupAdminTransaction from './groups/AddGroupAdminTransaction.js'
import RemoveGroupAdminTransaction from './groups/RemoveGroupAdminTransaction.js'
import GroupBanTransaction from './groups/GroupBanTransaction.js'
import CancelGroupBanTransaction from './groups/CancelGroupBanTransaction.js'
import GroupKickTransaction from './groups/GroupKickTransaction.js'
import GroupInviteTransaction from './groups/GroupInviteTransaction.js'
import CancelGroupInviteTransaction from './groups/CancelGroupInviteTransaction.js'
import JoinGroupTransaction from './groups/JoinGroupTransaction.js'
import LeaveGroupTransaction from './groups/LeaveGroupTransaction.js'
import PublicizeTransaction from './PublicizeTransaction.js'
import RewardShareTransaction from './reward-share/RewardShareTransaction.js'
import RemoveRewardShareTransaction from './reward-share/RemoveRewardShareTransaction.js'
import TransferPrivsTransaction from './TransferPrivsTransaction.js'
export const transactionTypes = {
2: PaymentTransaction,
3: RegisterNameTransaction,
5: SellNameTransacion,
6: CancelSellNameTransacion,
7: BuyNameTransacion,
17: MessageTransaction,
18: ChatTransaction,
181: GroupChatTransaction,
19: PublicizeTransaction,
22: CreateGroupTransaction,
24: AddGroupAdminTransaction,
25: RemoveGroupAdminTransaction,
26: GroupBanTransaction,
27: CancelGroupBanTransaction,
28: GroupKickTransaction,
29: GroupInviteTransaction,
30: CancelGroupInviteTransaction,
31: JoinGroupTransaction,
32: LeaveGroupTransaction,
38: RewardShareTransaction,
381: RemoveRewardShareTransaction
381: RemoveRewardShareTransaction,
40: TransferPrivsTransaction
}

View File

@ -1,7 +1,7 @@
{
"name": "qortal-ui-crypto",
"version": "2.2.3",
"description": "QORTAL-UI Crypto",
"version": "2.2.5",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
"QORTAL",
@ -19,10 +19,10 @@
"dependencies": {
"asmcrypto.js": "2.3.2",
"buffer": "6.0.3",
"jssha": "3.2.0",
"jssha": "3.3.0",
"lodash": "4.17.21"
},
"engines": {
"node": ">=16.15.0"
"node": ">=16.17.1"
}
}

View File

@ -6,7 +6,7 @@ const replace = require('@rollup/plugin-replace');
const globals = require('rollup-plugin-node-globals');
const commonjs = require('@rollup/plugin-commonjs');
const alias = require('@rollup/plugin-alias');
const { terser } = require('rollup-plugin-terser');
const terser = require('@rollup/plugin-terser');
const babel = require('@rollup/plugin-babel');
const webWorkerLoader = require('rollup-plugin-web-worker-loader');
@ -72,6 +72,10 @@ const generateForPlugins = () => {
in: 'plugins/core/trade-portal/trade-portal.src.js',
out: 'plugins/core/trade-portal/trade-portal.js',
},
{
in: 'plugins/core/trade-bot/trade-bot-portal.src.js',
out: 'plugins/core/trade-bot/trade-bot-portal.js',
},
{
in: 'plugins/core/wallet/wallet-app.src.js',
out: 'plugins/core/wallet/wallet-app.js',

View File

@ -1,7 +1,7 @@
{
"name": "qortal-ui-plugins",
"version": "2.2.3",
"description": "QORTAL-UI Plugins",
"version": "2.2.5",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
"QORTAL",
@ -26,7 +26,7 @@
"short-unique-id": "^4.4.4"
},
"devDependencies": {
"@babel/core": "7.19.3",
"@babel/core": "7.20.7",
"@github/time-elements": "3.1.2",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
@ -40,31 +40,36 @@
"@material/mwc-tab-bar": "0.27.0",
"@material/mwc-textfield": "0.27.0",
"@polymer/iron-icons": "3.0.1",
"@polymer/paper-dialog": "3.0.1",
"@polymer/paper-icon-button": "3.0.2",
"@polymer/paper-progress": "3.0.1",
"@polymer/paper-slider": "3.0.1",
"@polymer/paper-spinner": "3.0.2",
"@polymer/paper-tooltip": "3.0.1",
"@rollup/plugin-alias": "4.0.0",
"@rollup/plugin-babel": "6.0.0",
"@rollup/plugin-commonjs": "23.0.0",
"@rollup/plugin-node-resolve": "15.0.0",
"@rollup/plugin-replace": "5.0.0",
"@vaadin/button": "23.2.5",
"@vaadin/grid": "23.2.5",
"@vaadin/icons": "23.2.5",
"@rollup/plugin-alias": "4.0.2",
"@rollup/plugin-babel": "6.0.3",
"@rollup/plugin-commonjs": "24.0.0",
"@rollup/plugin-node-resolve": "15.0.1",
"@rollup/plugin-replace": "5.0.2",
"@rollup/plugin-terser": "0.2.1",
"@vaadin/avatar": "23.3.2",
"@vaadin/button": "23.3.2",
"@vaadin/grid": "23.3.2",
"@vaadin/icons": "23.3.2",
"@vaadin/tooltip": "23.3.2",
"epml": "0.3.3",
"file-saver": "2.0.5",
"highcharts": "10.3.2",
"html-escaper": "3.0.3",
"lit": "2.4.0",
"lit": "2.5.0",
"lit-translate": "2.0.1",
"rollup": "2.79.1",
"rollup": "3.9.0",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2",
"rollup-plugin-terser": "7.0.2",
"rollup-plugin-web-worker-loader": "^1.6.1"
},
"engines": {
"node": ">=16.15.0"
"node": ">=16.17.1"
}
}

View File

@ -1,4 +1,5 @@
import { LitElement, html, css } from 'lit'
import { render } from 'lit/html.js'
import { Epml } from '../../../epml.js'
import '@material/mwc-icon'

View File

@ -207,7 +207,7 @@ class ChatModals extends LitElement {
const hashAry = new Uint8Array(window.parent.memory.buffer, hashPtr, 32);
hashAry.set(chatBytesHash);
const difficulty = this.balance === 0 ? 12 : 8;
const difficulty = this.balance < 4 ? 18 : 8;
const workBufferLength = 8 * 1024 * 1024;
const workBufferPtr = window.parent.sbrk(workBufferLength, window.parent.heap);

View File

@ -27,6 +27,7 @@ import { publishData } from '../../utils/publish-image.js';
import { EmojiPicker } from 'emoji-picker-js';
import WebWorker from 'web-worker:./computePowWorker.js';
import WebWorkerImage from 'web-worker:./computePowWorkerImage.js';
import '@polymer/paper-dialog/paper-dialog.js'
// const messagesCache = localForage.createInstance({
// name: "messages-cache",
@ -77,7 +78,8 @@ class ChatPage extends LitElement {
userFound: { type: Array },
userFoundModalOpen: { type: Boolean },
webWorker: { type: Object },
webWorkerImage: { type: Object }
webWorkerImage: { type: Object },
myTrimmedMeassage: { type: String }
}
}
@ -850,6 +852,15 @@ class ChatPage extends LitElement {
</div>
</div>
</wrapper-modal>
<paper-dialog class="warning" id="confirmDialog" modal>
<h2 style="color: var(--black);">${translate("chatpage.cchange41")}</h2>
<hr>
<br>
<h3 style="color: var(--black);">${translate("chatpage.cchange42")}</h3>
<div class="buttons">
<mwc-button @click=${() => this.sendMessage(this.myTrimmedMeassage)} dialog-confirm>${translate("transpage.tchange3")}</mwc-button>
</div>
</paper-dialog>
<wrapper-modal
.onClickFunc=${() => {
this.openForwardOpen = false;
@ -2030,7 +2041,14 @@ class ChatPage extends LitElement {
version: 1
}
const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage);
if (this.balance < 4) {
this.myTrimmedMeassage = ''
this.myTrimmedMeassage = stringifyMessageObject
this.shadowRoot.getElementById('confirmDialog').open()
} else {
this.sendMessage(stringifyMessageObject, typeMessage);
}
}
}
@ -2185,8 +2203,7 @@ class ChatPage extends LitElement {
};
const _computePow = async (chatBytes, isForward) => {
const difficulty = this.balance === 0 ? 12 : 8;
const difficulty = this.balance < 4 ? 18 : 8;
const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full'
let worker;

View File

@ -442,7 +442,7 @@ class ChatWelcomePage extends LitElement {
const hashAry = new Uint8Array(window.parent.memory.buffer, hashPtr, 32);
hashAry.set(chatBytesHash);
const difficulty = this.balance === 0 ? 12 : 8;
const difficulty = this.balance < 4 ? 18 : 8;
const workBufferLength = 8 * 1024 * 1024;
const workBufferPtr = window.parent.sbrk(workBufferLength, window.parent.heap);

View File

@ -411,7 +411,7 @@ class NameMenu extends LitElement {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}`
const err3string = 'No regitered name'
const err3string = 'No registered name'
localStorage.removeItem("ChatBlockedAddresses")
@ -559,7 +559,7 @@ class NameMenu extends LitElement {
const hashAry = new Uint8Array(window.parent.memory.buffer, hashPtr, 32);
hashAry.set(chatBytesHash);
const difficulty = this.balance === 0 ? 12 : 8;
const difficulty = this.balance < 4 ? 18 : 8;
const workBufferLength = 8 * 1024 * 1024;
const workBufferPtr = window.parent.sbrk(workBufferLength, window.parent.heap);

View File

@ -52,6 +52,15 @@ parentEpml.ready().then(() => {
menus: [],
parent: false,
},
{
url: 'trade-bot-portal',
domain: 'core',
page: 'trade-bot/index.html',
title: 'Auto Buy',
icon: 'vaadin:calc-book',
menus: [],
parent: false,
},
{
url: 'reward-share',
domain: 'core',

View File

@ -112,7 +112,6 @@ class Chat extends LitElement {
</div>
</div>
</div>
<div class="chat">
<div id="newMessageBar" class="new-message-bar hide-new-message-bar clearfix" @click=${() => this.scrollToBottom()}>
<span style="flex: 1;">${translate("chatpage.cchange4")}</span>
@ -123,7 +122,6 @@ class Chat extends LitElement {
${window.parent.location.pathname !== "/app/q-chat" || this.activeChatHeadUrl ? html`${this.renderChatPage(this.chatId)}` : html`${this.renderChatWelcomePage()}`}
</div>
</div>
<!-- Start Chatting Dialog -->
<wrapper-modal
.onClickFunc=${() => {
@ -241,7 +239,14 @@ class Chat extends LitElement {
<br>
</div>
<vaadin-grid theme="compact" id="blockedGrid" ?hidden="${this.isEmptyArray(this.blockedUserList)}" aria-label="Blocked List" .items="${this.blockedUserList}" all-rows-visible>
<vaadin-grid-column auto-width header="${translate("chatpage.cchange11")}" path="name"></vaadin-grid-column>
<vaadin-grid-column auto-width header="${translate("chatpage.cchange11")}" .renderer=${(root, column, data) => {
if (data.item.name = 'No registered name') {
render(html`${translate("chatpage.cchange15")}`, root);
} else {
render(html`${data.item.name}`, root);
}
}}>
</vaadin-grid-column>
<vaadin-grid-column auto-width header="${translate("chatpage.cchange12")}" path="owner"></vaadin-grid-column>
<vaadin-grid-column width="10rem" flex-grow="0" header="${translate("chatpage.cchange13")}" .renderer=${(root, column, data) => {
render(html`${this.renderUnblockButton(data.item)}`, root);
@ -306,7 +311,6 @@ class Chat extends LitElement {
let splitedUrl = decodeURI(tempUrl).split('?')
let urlData = splitedUrl[1]
if (urlData !== undefined) {
this.chatId = urlData
}
}
@ -635,7 +639,7 @@ class Chat extends LitElement {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}`
const err1string = 'No regitered name'
const err1string = 'No registered name'
localStorage.removeItem("ChatBlockedAddresses")

View File

@ -24,7 +24,8 @@ class MintingInfo extends LitElement {
sampleBlock: { type: Array },
addressInfo: { type: Array },
addressLevel: { type: Array },
theme: { type: String, reflect: true }
theme: { type: String, reflect: true },
tier4Online: { type: Number }
}
}
@ -198,12 +199,13 @@ class MintingInfo extends LitElement {
constructor() {
super()
this.selectedAddress = window.parent.reduxStore.getState().app.selectedAddress.address
this.adminInfo = [];
this.nodeInfo = [];
this.sampleBlock = [];
this.addressInfo = [];
this.addressLevel = [];
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light';
this.adminInfo = []
this.nodeInfo = []
this.sampleBlock = []
this.addressInfo = []
this.addressLevel = []
this.tier4Online = 0
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
}
render() {
@ -343,12 +345,12 @@ class MintingInfo extends LitElement {
`}
}
firstUpdated() {
async firstUpdated() {
this.changeTheme()
this.changeLanguage()
this.levelsCount()
await this.getAddressLevel()
const getAdminInfo = () => {
parentEpml.request("apiCall", { url: `/admin/info` }).then((res) => {
@ -423,26 +425,14 @@ class MintingInfo extends LitElement {
parentEpml.imReady()
}
async levelsCount() {
await this.getAddressLevel()
this.countForTier4()
}
getAddressLevel = async () => {
async getAddressLevel() {
const callLevels = await parentEpml.request('apiCall', {
url: `/addresses/online/levels`
})
this.addressLevel = callLevels
this.tier4Online = parseFloat(this.addressLevel[7].count) + parseFloat(this.addressLevel[8].count)
}
countForTier4() {
const minterOnline = (this.addressLevel[7].count + this.addressLevel[8].count)
if (minterOnline < 30) {
return "false"
} else {
return "true"
}
}
changeTheme() {
const checkTheme = localStorage.getItem('qortalTheme')
if (checkTheme === 'dark') {
@ -616,25 +606,25 @@ class MintingInfo extends LitElement {
} else if (this.addressInfo.level === 4) {
return "13"
} else if (this.addressInfo.level === 5) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
return "45"
} else {
return "19"
}
} else if (this.addressInfo.level === 6) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
return "45"
} else {
return "19"
}
} else if (this.addressInfo.level === 7) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
return "45"
} else {
return "26"
}
} else if (this.addressInfo.level === 8) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
return "45"
} else {
return "26"
@ -693,7 +683,7 @@ class MintingInfo extends LitElement {
let countTier21 = (this.addressLevel[3].count + this.addressLevel[4].count).toString()
return "" + countTier21
} else if (this.addressInfo.level === 5) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countTier30 = (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count).toString()
return "" + countTier30
} else {
@ -701,7 +691,7 @@ class MintingInfo extends LitElement {
return "" + countTier30
}
} else if (this.addressInfo.level === 6) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countTier31 = (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count).toString()
return "" + countTier31
} else {
@ -709,7 +699,7 @@ class MintingInfo extends LitElement {
return "" + countTier31
}
} else if (this.addressInfo.level === 7) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countTier40 = (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count).toString()
return "" + countTier40
} else {
@ -717,7 +707,7 @@ class MintingInfo extends LitElement {
return "" + countTier40
}
} else if (this.addressInfo.level === 8) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countTier40 = (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count).toString()
return "" + countTier40
} else {
@ -753,7 +743,7 @@ class MintingInfo extends LitElement {
let countReward41 = (countReward40).toString();
return "" + countReward41;
} else if (this.addressInfo.level === 5) {
if (this.countForTier4() === "false") {
if (this.tier4Online< 30) {
let countReward50 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count)).toFixed(8)
let countReward51 = (countReward50).toString();
return "" + countReward51;
@ -763,7 +753,7 @@ class MintingInfo extends LitElement {
return "" + countReward51;
}
} else if (this.addressInfo.level === 6) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countReward60 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count)).toFixed(8)
let countReward61 = (countReward60).toString()
return "" + countReward61
@ -773,7 +763,7 @@ class MintingInfo extends LitElement {
return "" + countReward61
}
} else if (this.addressInfo.level === 7) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countReward70 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count)).toFixed(8)
let countReward71 = (countReward70).toString()
return "" + countReward71
@ -783,7 +773,7 @@ class MintingInfo extends LitElement {
return "" + countReward71
}
} else if (this.addressInfo.level === 8) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countReward80 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count)).toFixed(8)
let countReward81 = (countReward80).toString()
return "" + countReward81
@ -823,7 +813,7 @@ class MintingInfo extends LitElement {
let countRewardDay41 = (countRewardDay40).toString()
return "" + countRewardDay41
} else if (this.addressInfo.level === 5) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countRewardDay50 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count) * this._timeCalc()).toFixed(8)
let countRewardDay51 = (countRewardDay50).toString()
return "" + countRewardDay51
@ -833,7 +823,7 @@ class MintingInfo extends LitElement {
return "" + countRewardDay51
}
} else if (this.addressInfo.level === 6) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countRewardDay60 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count) * this._timeCalc()).toFixed(8)
let countRewardDay61 = (countRewardDay60).toString()
return "" + countRewardDay61
@ -843,7 +833,7 @@ class MintingInfo extends LitElement {
return "" + countRewardDay61
}
} else if (this.addressInfo.level === 7) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countRewardDay70 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count) * this._timeCalc()).toFixed(8)
let countRewardDay71 = (countRewardDay70).toString()
return "" + countRewardDay71
@ -853,7 +843,7 @@ class MintingInfo extends LitElement {
return "" + countRewardDay71
}
} else if (this.addressInfo.level === 8) {
if (this.countForTier4() === "false") {
if (this.tier4Online < 30) {
let countRewardDay80 = ((this._blockReward() / 100 * this._tierPercent()) / (this.addressLevel[5].count + this.addressLevel[6].count + this.addressLevel[7].count + this.addressLevel[8].count) * this._timeCalc()).toFixed(8)
let countRewardDay81 = (countRewardDay80).toString()
return "" + countRewardDay81

View File

@ -48,8 +48,8 @@
</head>
<body>
<trade-bot></trade-bot>
<script src="trade-bot.js"></script>
<trade-bot-portal></trade-bot-portal>
<script src="trade-bot-portal.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -65,6 +65,7 @@ class MultiWallet extends LitElement {
successMessage: { type: String },
sendMoneyLoading: { type: Boolean },
btnDisable: { type: Boolean },
qortWarning: { type: Boolean },
isValidAmount: { type: Boolean },
balance: { type: Number },
balanceString: { type: String },
@ -93,7 +94,8 @@ class MultiWallet extends LitElement {
dogeBookAddress: { type: String },
dgbBookAddress: { type: String },
rvnBookAddress: { type: String },
arrrBookAddress: { type: String }
arrrBookAddress: { type: String },
myElementId: { type: String }
}
}
@ -575,6 +577,19 @@ class MultiWallet extends LitElement {
cursor: pointer;
}
.warning-text {
animation: blinker 1.5s linear infinite;
text-align: center;
margin-top: 10px;
color: rgb(255, 89, 89);
}
@keyframes blinker {
50% {
opacity: 0;
}
}
@media (max-width: 764px) {
.wallet {
width: 100%;
@ -649,7 +664,6 @@ class MultiWallet extends LitElement {
this.dgbBookAddress = ''
this.rvnBookAddress = ''
this.arrrBookAddress = ''
this.recipient = ''
this.btcRecipient = ''
this.ltcRecipient = ''
@ -661,9 +675,11 @@ class MultiWallet extends LitElement {
this.arrrWalletAddress = ''
this.errorMessage = ''
this.successMessage = ''
this.myElementId = ''
this.sendMoneyLoading = false
this.isValidAmount = false
this.btnDisable = false
this.qortWarning = false
this.balance = 0
this.amount = 0
this.btcAmount = 0
@ -732,6 +748,14 @@ class MultiWallet extends LitElement {
this.isTextMenuOpen = false
}
})
parentEpml.subscribe('frame_paste_menu_switch', async res => {
res = JSON.parse(res)
if (res.isOpen === false && this.isPasteMenuOpen === true) {
this.pasteToTextBox(this.myElementId)
this.isPasteMenuOpen = false
}
})
})
}
@ -1196,7 +1220,7 @@ class MultiWallet extends LitElement {
<mwc-textfield
style="width: 100%;"
required
@input="${(e) => { this._checkAmount(e) }}"
@input="${(e) => { this.checkQortAmount(e) }}"
id="amountInput"
label="${translate("walletpage.wchange11")} (QORT)"
type="number"
@ -1228,6 +1252,7 @@ class MultiWallet extends LitElement {
<vaadin-icon icon="vaadin:arrow-forward" slot="prefix"></vaadin-icon>
${translate("walletpage.wchange17")} QORT
</vaadin-button>
<div style="display:${this.qortWarning ? 'inline' : 'none'}">${this.renderWarning()}</div>
</div>
</div>
</div>
@ -2498,7 +2523,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'amountInput')
this.myElementId = this.shadowRoot.getElementById('amountInput')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2521,7 +2548,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'recipient')
this.myElementId = this.shadowRoot.getElementById('recipient')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2544,7 +2573,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'btcAmountInput')
this.myElementId = this.shadowRoot.getElementById('btcAmountInput')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2567,7 +2598,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'btcRecipient')
this.myElementId = this.shadowRoot.getElementById('btcRecipient')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2590,7 +2623,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'ltcAmountInput')
this.myElementId = this.shadowRoot.getElementById('ltcAmountInput')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2613,7 +2648,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'ltcRecipient')
this.myElementId = this.shadowRoot.getElementById('ltcRecipient')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2636,7 +2673,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'dogeAmountInput')
this.myElementId = this.shadowRoot.getElementById('dogeAmountInput')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2659,7 +2698,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'dogeRecipient')
this.myElementId = this.shadowRoot.getElementById('dogeRecipient')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2682,7 +2723,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'dgbAmountInput')
this.myElementId = this.shadowRoot.getElementById('dgbAmountInput')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2705,7 +2748,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'dgbRecipient')
this.myElementId = this.shadowRoot.getElementById('dgbRecipient')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2728,7 +2773,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'rvnAmountInput')
this.myElementId = this.shadowRoot.getElementById('rvnAmountInput')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2751,7 +2798,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'rvnRecipient')
this.myElementId = this.shadowRoot.getElementById('rvnRecipient')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2774,7 +2823,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'arrrAmountInput')
this.myElementId = this.shadowRoot.getElementById('arrrAmountInput')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2797,7 +2848,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'arrrRecipient')
this.myElementId = this.shadowRoot.getElementById('arrrRecipient')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2820,7 +2873,9 @@ class MultiWallet extends LitElement {
let selectedText = getSelectedText()
if (selectedText && typeof selectedText === 'string') {
} else {
this.myElementId = ''
this.pasteMenu(event, 'arrrMemo')
this.myElementId = this.shadowRoot.getElementById('arrrMemo')
this.isPasteMenuOpen = true
event.preventDefault()
event.stopPropagation()
@ -2830,6 +2885,10 @@ class MultiWallet extends LitElement {
})
}
renderWarning() {
return html`<span class="warning-text">${translate("tradepage.tchange48")} QORT</span>`
}
renderClearSuccess() {
let strSuccessValue = this.successMessage
if (strSuccessValue === "") {
@ -3699,11 +3758,16 @@ class MultiWallet extends LitElement {
}
calculateQortAll() {
this.amount = 0
this.shadowRoot.getElementById('amountInput').value = this.amount
if (this.balance < 0.00110000) {
let not_enough_string = get("walletpage.wchange26")
parentEpml.request('showSnackBar', `${not_enough_string}`)
} else {
this.amount = (this.balance - 0.00100000).toFixed(8)
this.amount = (this.balance - 0.00110000).toFixed(8)
this.shadowRoot.getElementById('amountInput').value = this.amount
this.shadowRoot.getElementById('amountInput').blur()
this.shadowRoot.getElementById('amountInput').focus()
}
}
@ -3853,12 +3917,90 @@ class MultiWallet extends LitElement {
}
}
checkQortAmount(e) {
const targetAmount = e.target.value
const target = e.target
this.btnDisable = true
this.qortWarning = false
if (targetAmount.length === 0) {
this.isValidAmount = false
this.btnDisable = true
this.qortWarning = false
e.target.blur()
e.target.focus()
e.target.invalid = true
} else {
const checkQortAmountInput = this.shadowRoot.getElementById('amountInput').value
const checkQortAmount = this.round(parseFloat(checkQortAmountInput))
const myFunds = this.round(parseFloat(this.balance - 0.00110000))
if (Number(myFunds) >= Number(checkQortAmount)) {
this.shadowRoot.getElementById('amountInput').value = checkQortAmountInput
this.btnDisable = false
this.qortWarning = false
} else {
this.shadowRoot.getElementById('amountInput').value = checkQortAmountInput
this.btnDisable = true
this.qortWarning = true
}
}
e.target.blur()
e.target.focus()
e.target.validityTransform = (newValue, nativeValidity) => {
if (newValue.includes('-') === true) {
this.btnDisable = true
this.qortWarning = false
return {
valid: false,
}
} else if (!nativeValidity.valid) {
if (newValue.includes('.') === true) {
let myAmount = newValue.split('.')
if (myAmount[1].length > 8) {
this.btnDisable = true
this.qortWarning = false
} else {
const checkQortAmountInput = this.shadowRoot.getElementById('amountInput').value
const checkQortAmount = this.round(parseFloat(checkQortAmountInput))
const myFunds = this.round(parseFloat(this.balance - 0.00110000))
if (Number(myFunds) >= Number(checkQortAmount)) {
this.shadowRoot.getElementById('amountInput').value = checkQortAmountInput
this.btnDisable = false
this.qortWarning = false
} else {
this.shadowRoot.getElementById('amountInput').value = checkQortAmountInput
this.btnDisable = true
this.qortWarning = true
}
return {
valid: true,
}
}
}
} else {
const checkQortAmountInput = this.shadowRoot.getElementById('amountInput').value
const checkQortAmount = this.round(parseFloat(checkQortAmountInput))
const myFunds = this.round(parseFloat(this.balance - 0.00110000))
if (Number(myFunds) >= Number(checkQortAmount)) {
this.shadowRoot.getElementById('amountInput').value = checkQortAmountInput
this.btnDisable = false
this.qortWarning = false
} else {
this.shadowRoot.getElementById('amountInput').value = checkQortAmountInput
this.btnDisable = true
this.qortWarning = true
}
}
}
}
pasteToTextBox(elementId) {
window.focus()
navigator.clipboard.readText().then((clipboardText) => {
let element = this.shadowRoot.getElementById(elementId)
element.value += clipboardText
element.focus()
elementId.value += clipboardText
elementId.focus()
})
}
@ -5370,6 +5512,11 @@ class MultiWallet extends LitElement {
return num % 1 > 0 ? (num + '').split('.')[1] : '0'
}
round(number) {
let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8)
return result
}
subtract(num1, num2) {
return num1 - num2
}

View File

@ -21,6 +21,6 @@ if ! which curl; then sudo apt-get --yes install curl; fi
# Install apt repository source list if it does not exist
if ! grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep qortal.list; then
curl -sS https://update.qortal.online/repo/qortal.gpg | sudo apt-key add -
echo 'deb https://update.qortal.online/repo/ ./ ' > /etc/apt/sources.list.d/qortal.list
curl -fsSL https://update.qortal.online/repo/qortal.gpg | sudo tee /usr/share/keyrings/qortal.gpg
echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/qortal.gpg] https://update.qortal.online/repo/ ./ ' > /etc/apt/sources.list.d/qortal.list
fi

View File

@ -1,5 +1,5 @@
require('dotenv').config();
const { notarize } = require('electron-notarize');
const { notarize } = require('@electron/notarize');
exports.default = async function notarizing(context) {
const { electronPlatformName, appOutDir } = context;