diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 00000000..055fdedd
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,19 @@
+name: Build and Deploy
+on: [push]
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2.3.1
+
+ - name: Install and Build
+ run: |
+ npm install
+ npm run build.js
+
+ - name: Deploy
+ uses: JamesIves/github-pages-deploy-action@4.1.1
+ with:
+ branch: gh-pages # The branch the action should deploy to.
+ folder: . # The folder the action should deploy.
diff --git a/.gitignore b/.gitignore
index 34d52de6..8287e478 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,16 @@ src/**/*.js.map
!src/lib/*.js
!src/lib/**/*.js
src/lib/numbersLab/*.js
-debug/
\ No newline at end of file
+debug/
+
+src/*.js
+src/d/*.js
+src/lib/numberslab/*.js
+src/model/*.js
+src/model/blockchain/*.js
+src/pages/*.js
+src/providers/*.js
+src/utils/*.js
+src/workers/*.js
+
+package-lock.json
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..95236b8d
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "api"]
+ path = api
+ url = https://github.com/qwertycoin-org/mowallet-api.git
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..3e47c099
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,9 @@
+sudo: false
+language: node_js
+os:
+ - linux
+ - osx
+node_js:
+ - '6'
+ - '8'
+ - '10'
\ No newline at end of file
diff --git a/Deploy.md b/Deploy.md
deleted file mode 100644
index 9fe51237..00000000
--- a/Deploy.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# How to compile & Deploy
-The project is using Typescript as main language and not other dependencies on external libraries (everything is already included).
-
-# Compilation
-The first step will be to compile the typescript code into javascript code so browsers will be able to understand it.
-You also need to build some files that are dynamically generated like the manifest ...
-This task is doable with :
-```
-npm install
-nodejs ./node_modules/typescript/bin/tsc --project tsconfig.prod.json
-nodejs build.js
-```
-The first task install dependencies (typescript) and the text one compile the typescript code.
-We are using a custom tsconfig file which is optimized for production.
-
-# Change configuration
-You will have to edit the file src/config.js in order to change the API endpoint.
-The default value use the same domain appended by /api/
-
-That's all
-
-# Deploy
-All the content of the src directory needs to be exposed with a web-server.
-You will also need to expose the content of the src_api content to an endpoint which can interpret PHP.
-By default the configuration looks at domainname.com/api/
-
-
-# Permissions
-The API stores precomputed data for performances in a directory called cache/ in the same directory of the API code (PHP code).
-You will need to create this directory with the write permissions.
-
-# Cron task / Process
-Precomputed data are build by another process. This process will call the Masari daemon and compute blocks into chunks of blocks to reduce network latency.
-In order to do so, you will need to run the file blockchain.php with an environment variable "export=true".
-This file will shut down after 1h, and has a anti-concurrency mechanism built in.
-
-One way to handle this is by running a cron task each minute with something like:
-```
-* * * * * root cd /var/www/domain.com/api && export generate=true && php blockchain.php
-```
\ No newline at end of file
diff --git a/README.md b/README.md
index b37f7ce6..82b57c2f 100644
--- a/README.md
+++ b/README.md
@@ -1,46 +1,16 @@
-# Karbo fork of Masari Web Wallet - Fully client-side
-This web wallet is doing everything client-side to give the best privacy to users.
-The server is currently only used to optimize the communication with the daemon and compress the blockchain.
+![image](https://cdn.qwertycoin.org/images/press/other/qwc-github-3.png)
+#### Master Build Status
+[![Build Status](https://travis-ci.org/qwertycoin-org/webwallet-js.svg?branch=master)](https://travis-ci.org/qwertycoin-org/webwallet-js) [![Build status](https://ci.appveyor.com/api/projects/status/rvsgv9p8wbolxfkt/branch/master?svg=true)](https://ci.appveyor.com/project/Qwertycoin/webwallet-js-iiaw6/branch/master)
-Note: This requirement may be removed in the future once daemons evolve and return enough data.
+# Qwertycoin Web Wallet - Fully client-side
+This web wallet is doing everything client-side to give the best privacy to users.
+The API servers are currently only used to optimize the communication with the daemon and compress the blockchain.
# Security
**No keys, seeds, or sensitive data is sent to the server**
If you find a potential security issue, please contact me so we/I can patch it as soon as possible.
Encryption is done with a certified library, [Tweetnacl.Js.](https://github.com/dchest/tweetnacl-js)
-# Contributors and thanks
-Developers:
-- gnock (main)
-- cryptochangements
-- davehlong (initial adaptation of PHP Api for Bytecoin based coins)
-- aiwe (adapted for Bytecoin/CryptoNote from Monero codebase)
-
-Translations:
-- English: too many people
-- French: gnock
-- Serbian cyrillic: girugameshh
-- German: F0sching
-- Hungarian: Gelesztaa
-- Greek: GeraltOfTrivia
-- Russian, Ukrainian: Aiwe
-
-# Contributing
-- You can help Masari by translation the wallet in your native language, it's really easy!
-Read [the translations guide](TRANSLATIONS.md) to get instructions on how to do that
-- Report bugs & ideas to help us improve the web wallet by opening an issue
-- [Make a donation to Masari](https://www.masariwallet.com/#!donate)
-
-# Forks / Other Coins
-We have been receiving multiple coin developers help to fork it. As the time required to develop this project is heavy, please consider giving a mention to this project if you fork it.
-
-If you are a developer of a Cryptonote/Monero fork and would like to get a fork, please contact us (@gnock on the [official Discord](https://discord.gg/eSb9ZdM)).
-
-Depending on your coin specifics, I can provide support, maintenancem and development/updates for a payment in return - crypto only.
-If you are not willing to pay for this service, please do not contact us and make us lose time.
-
-The code is readable, it should be enough for you to use it.
-
# Features (non-exhaustive)
- Complete wallet sync without server side processing for security
- Receive/send history
@@ -52,3 +22,82 @@ The code is readable, it should be enough for you to use it.
- View only wallet
- Basic network stats
+# How to compile & Deploy
+The project is using Typescript as main language everything else (dependencies) is already included.
+
+## Compilation
+The first step will be to compile the typescript code into javascript code so browsers will be able to understand it.
+You also need to build some files that are dynamically generated like the manifest ...
+This task is doable with :
+```
+npm install
+nodejs ./node_modules/typescript/bin/tsc --project tsconfig.json
+nodejs build.js
+```
+The first task install dependencies (typescript) and the text one compile the typescript code.
+We are using a custom tsconfig file which is optimized for production.
+
+## Deploy
+All the content of the src directory needs to be exposed with a web-server.
+
+## Change configuration
+You will have to edit the file src/config.ts in order to change the API endpoint.
+
+That's all
+
+### Donate
+
+```
+QWC: QWC1K6XEhCC1WsZzT9RRVpc1MLXXdHVKt2BUGSrsmkkXAvqh52sVnNc1pYmoF2TEXsAvZnyPaZu8MW3S8EWHNfAh7X2xa63P7Y
+```
+```
+BTC: 1DkocMNiqFkbjhCmG4sg9zYQbi4YuguFWw
+```
+```
+ETH: 0xA660Fb28C06542258bd740973c17F2632dff2517
+```
+```
+BCH: qz975ndvcechzywtz59xpkt2hhdzkzt3vvt8762yk9
+```
+```
+XMR: 47gmN4GMQ17Veur5YEpru7eCQc5A65DaWUThZa9z9bP6jNMYXPKAyjDcAW4RzNYbRChEwnKu1H3qt9FPW9CnpwZgNscKawX
+```
+```
+ETN: etnkJXJFqiH9FCt6Gq2HWHPeY92YFsmvKX7qaysvnV11M796Xmovo2nSu6EUCMnniqRqAhKX9AQp31GbG3M2DiVM3qRDSQ5Vwq
+```
+
+### Contributors and thanks
+
+#### Developers:
+- gnock (main)
+- cryptochangements
+- davehlong (initial adaptation of PHP Api for Bytecoin based coins)
+- aiwe (adapted for Bytecoin/CryptoNote from Monero codebase)
+- nnian, ExploShot (adapted for Qwertycoin codebase)
+
+#### Translations:
+- Chinese: mainframer, [Alex Nnian - Qwertycoin](https://github.com/qwertycoin-org)
+- English: too many people
+- French: gnock
+- German: F0sching, [Alex Nnian - Qwertycoin](https://github.com/qwertycoin-org)
+- Greek: GeraltOfTrivia
+- Hungarian: Gelesztaa
+- Italian: unknown :(
+- Japanese: [Alex Nnian - Qwertycoin](https://github.com/qwertycoin-org)
+- Korean: [Xecute0101 - Qwertycoin](https://github.com/qwertycoin-org)
+- Persian: M4hdi1995
+- Russian: [Aiwe](https://github.com/aivve)
+- Serbian cyrillic: girugameshh
+- Spanish: [Guerreru](https://github.com/Guerreru)
+- Ukrainian: [Aiwe](https://github.com/aivve)
+
+#### Incomplete Translations:
+- [Arabic](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/ar.json)
+- [Hebrew](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/he.json)
+- [Hindi](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/hi.json)
+- [Polish](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/pl.json)
+- [Portuguese](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/pk.json)
+- [Romanian](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/ro.json)
+- [Turkish](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/tr.json)
+- [Urdu](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/pk.json)
+- [Vietnamese ](https://github.com/qwertycoin-org/webwallet-js/blob/master/src/translations/vn.json)
diff --git a/TRANSLATIONS.md b/TRANSLATIONS.md
deleted file mode 100644
index d3eb767f..00000000
--- a/TRANSLATIONS.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Translating the web wallet
-You can help Masari by translating the wallet into your native language, it's very easy!
-
-# Steps
-- Copy/paste the content of [the english translation](src/translations/en.json) in a text editor (Notepad, Word, etc.)
-- Translate the parts between quotes that are always after ":"
-For example, if you have this:
-```
-"disableSecurity":"Disable this security, I understand the risk",
-```
-- You need to translate:
-```
-Disable this security, I understand the risk
-```
-- If you need to use double quotes (") in your text, please put a \ before it.
-
-# Submitting translations
-- Send us your translation by opening an [issue](https://github.com/masari-project/masari-webwallet/issues) on Github or sending it to us directly on the [official Discord](https://discord.gg/eSb9ZdM)
-- You can also fork your own repo and make changes, then submit a Pull Request
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 00000000..1ba60c49
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,12 @@
+environment:
+ nodejs_version: "8"
+
+# Install scripts. (runs after repo cloning)
+install:
+ # Get the latest stable version of Node.js or io.js
+ - ps: Install-Product node $env:nodejs_version
+ # install modules
+ - npm install
+ - npm test
+
+build: off
diff --git a/debug-router.php b/debug-router.php
deleted file mode 100644
index f97863c1..00000000
--- a/debug-router.php
+++ /dev/null
@@ -1,30 +0,0 @@
-
\ No newline at end of file
diff --git a/src/pages/addContact.ts b/src/pages/addContact.ts
new file mode 100644
index 00000000..f5db707f
--- /dev/null
+++ b/src/pages/addContact.ts
@@ -0,0 +1,113 @@
+/**
+ * Copyright (c) 2019, ExploShot
+ * Copyright (c) 2019, The Qwertycoin Project
+ *
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * ==> Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * ==> Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * ==> Neither the name of Qwertycoin nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/**
+ * Contacts:
+ * "Contacts": [
+ * {"ExploShot": "QWC1Nsegh9NRyaSH7A1hch59VpvsjjwZwGRFvEUXFbs9QMj145gXJQDbdcR5r6rTQPX6hPy1ij5SCTr2SFkrnuNBAH1Gh2EshP"}
+ * ]
+*/
+
+import {DestructableView} from "../lib/numbersLab/DestructableView";
+import { VueVar } from "../lib/numbersLab/VueAnnotate";
+import {DependencyInjectorInstance} from "../lib/numbersLab/DependencyInjector";
+import {Wallet} from "../model/Wallet";
+import {Constants} from "../model/Constants";
+import { Storage } from './../model/Storage';
+
+let wallet : Wallet = DependencyInjectorInstance().getInstance(Wallet.name,'default', false);
+let blockchainExplorer = DependencyInjectorInstance().getInstance(Constants.BLOCKCHAIN_EXPLORER);
+
+class AddContactView extends DestructableView {
+ @VueVar('') contactName !: string;
+ @VueVar('') contactAddress !: string;
+
+ constructor(container : string) {
+ super(container);
+ }
+
+ static hasOneStored(): Promise {
+ return Storage.getItem('qwcContacts', null).then(function(contacts: any[]) {
+ return contacts !== null;
+ });
+ }
+
+ addContact() {
+ let contact = { Name: this.contactName, Address: this.contactAddress }
+ if(AddContactView.hasOneStored()) {
+ swal({
+ type:'success',
+ title: `We have Contacts`,
+ confirmButtonText:i18n.t('changeWalletPasswordPage.modalSuccess.confirmText'),
+ });
+ return Storage.getItem('qwcContacts', null).then((existingContacts) => {
+ if (existingContacts !== null) {
+ let tempContacts: any[] = JSON.parse(existingContacts);
+ tempContacts.push(contact);
+ return Storage.setItem('qwcContacts', JSON.stringify(tempContacts)).then((contacties: any) => {
+ swal({
+ type:'success',
+ title: `We have saved Contacts: ${JSON.parse(contacties).length}`,
+ confirmButtonText:i18n.t('changeWalletPasswordPage.modalSuccess.confirmText'),
+ });
+ return window.location.href = '#contactPage';
+ });
+ } else {
+ swal({
+ type:'error',
+ title: `Oh heavy shitload happened`,
+ confirmButtonText:i18n.t('changeWalletPasswordPage.modalSuccess.confirmText'),
+ });
+ let newContacts: any[] = [];
+ newContacts.push(contact);
+ return Storage.setItem('qwcContacts', JSON.stringify(newContacts)).then(() => {
+ return window.location.href = '#contactPage';
+ });
+ }
+ });
+ } else {
+ let newContacts: any[] = [];
+ swal({
+ type:'success',
+ title: `We have no Contacts`,
+ confirmButtonText:i18n.t('changeWalletPasswordPage.modalSuccess.confirmText'),
+ });
+ newContacts.push(contact);
+ return Storage.setItem('qwcContacts', JSON.stringify(newContacts)).then(() => {
+ return window.location.href = '#contactPage';
+ });
+ }
+ }
+
+}
+
+if(wallet !== null && blockchainExplorer !== null)
+ new AddContactView('#app');
+else
+ window.location.href = '#index';
\ No newline at end of file
diff --git a/src/pages/changeWalletPassword.ts b/src/pages/changeWalletPassword.ts
index e02f676e..2a6e3c0e 100644
--- a/src/pages/changeWalletPassword.ts
+++ b/src/pages/changeWalletPassword.ts
@@ -17,16 +17,17 @@ import {DestructableView} from "../lib/numbersLab/DestructableView";
import {VueVar, VueWatched} from "../lib/numbersLab/VueAnnotate";
import {TransactionsExplorer} from "../model/TransactionsExplorer";
import {WalletRepository} from "../model/WalletRepository";
-import {BlockchainExplorerRpc2, WalletWatchdog} from "../model/blockchain/BlockchainExplorerRpc2";
import {DependencyInjectorInstance} from "../lib/numbersLab/DependencyInjector";
import {Constants} from "../model/Constants";
import {Wallet} from "../model/Wallet";
import {AppState, WalletWorker} from "../model/AppState";
import {Password} from "../model/Password";
import {BlockchainExplorerProvider} from "../providers/BlockchainExplorerProvider";
+import {BlockchainExplorer} from "../model/blockchain/BlockchainExplorer";
+import {WalletWatchdog} from "../model/WalletWatchdog";
let wallet : Wallet = DependencyInjectorInstance().getInstance(Wallet.name, 'default', false);
-let blockchainExplorer : BlockchainExplorerRpc2 = BlockchainExplorerProvider.getInstance();
+let blockchainExplorer : BlockchainExplorer = BlockchainExplorerProvider.getInstance();
let walletWatchdog : WalletWatchdog = DependencyInjectorInstance().getInstance(WalletWatchdog.name,'default', false);
class ChangeWalletPasswordView extends DestructableView{
diff --git a/src/pages/contactPage.html b/src/pages/contactPage.html
new file mode 100644
index 00000000..8dcf9ae4
--- /dev/null
+++ b/src/pages/contactPage.html
@@ -0,0 +1,40 @@
+
\ No newline at end of file
diff --git a/src/pages/contactPage.ts b/src/pages/contactPage.ts
new file mode 100644
index 00000000..245b1608
--- /dev/null
+++ b/src/pages/contactPage.ts
@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2019, ExploShot
+ * Copyright (c) 2019, The Qwertycoin Project
+ *
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * ==> Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * ==> Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * ==> Neither the name of Qwertycoin nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * Contacts:
+ * "Contacts": [
+ * {"ExploShot": "QWC1Nsegh9NRyaSH7A1hch59VpvsjjwZwGRFvEUXFbs9QMj145gXJQDbdcR5r6rTQPX6hPy1ij5SCTr2SFkrnuNBAH1Gh2EshP"}
+ * ]
+ */
+
+
+import {
+ AppState
+} from "../model/AppState";
+import {
+ DestructableView
+} from "../lib/numbersLab/DestructableView";
+import {
+ DependencyInjectorInstance
+} from "../lib/numbersLab/DependencyInjector";
+import {
+ Wallet
+} from "../model/Wallet";
+import {
+ Constants
+} from "../model/Constants";
+import {
+ Storage
+} from './../model/Storage';
+import {
+ VueVar
+} from "../lib/numbersLab/VueAnnotate";
+
+let wallet: Wallet = DependencyInjectorInstance().getInstance(Wallet.name, 'default', false);
+let blockchainExplorer = DependencyInjectorInstance().getInstance(Constants.BLOCKCHAIN_EXPLORER);
+
+class ContactPageView extends DestructableView {
+ @VueVar([]) contacts!: any[];
+
+ contactName!: string;
+ contactAddress!: string;
+
+ constructor(container: string) {
+ super(container);
+ AppState.enableLeftMenu();
+ this.getContacts();
+ }
+
+ hasOneStored(): Promise < boolean > {
+ return Storage.getItem('qwcContacts').then((contacts: any) => {
+ return JSON.parse(contacts).length !== 0;
+ });
+ }
+
+ getContacts() {
+ if (this.hasOneStored()) {
+ return Storage.getItem('qwcContacts').then((contacts: any) => {
+ this.contacts = JSON.parse(contacts);
+ /*
+ swal({
+ type: 'success',
+ title: `loaded all ${this.contacts.length} contacts`,
+ confirmButtonText: i18n.t('changeWalletPasswordPage.modalSuccess.confirmText'),
+ });
+ */
+ });
+ } else {
+ this.contacts = [];
+ }
+ }
+
+ contactDetails(contact: any) {
+ swal({
+ title: i18n.t('contactPage.contactDetailsBlock.title'),
+ html: `
+
\ No newline at end of file
diff --git a/src/pages/index.ts b/src/pages/index.ts
index 2fe14eaa..a3acbbe0 100644
--- a/src/pages/index.ts
+++ b/src/pages/index.ts
@@ -54,7 +54,7 @@ let newIndexView = new IndexView('#app');
/*
function readFile(fileEnty:any){
- console.log(fileEnty);
+ //console.log(fileEnty);
}
function writeFile(fileEntry, dataObj) {
@@ -62,12 +62,12 @@ function writeFile(fileEntry, dataObj) {
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function() {
- console.log("Successful file write...");
+ //console.log("Successful file write...");
readFile(fileEntry);
};
fileWriter.onerror = function (e) {
- console.log("Failed file write: " + e.toString());
+ //console.log("Failed file write: " + e.toString());
};
// If data object is not passed in,
@@ -90,10 +90,10 @@ function onErrorLoadFs(error){
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs : any) {
- console.log('file system open: ' + fs.name);
+ //console.log('file system open: ' + fs.name);
fs.root.getFile(cordova.file.documentsDirectory+"newPersistentFile.txt", { create: true, exclusive: false }, function (fileEntry : any) {
- console.log("fileEntry is file?" + fileEntry.isFile.toString());
+ //console.log("fileEntry is file?" + fileEntry.isFile.toString());
// fileEntry.name == 'someFile.txt'
// fileEntry.fullPath == '/someFile.txt'
writeFile(fileEntry, null);
diff --git a/src/pages/messages.html b/src/pages/messages.html
new file mode 100644
index 00000000..e69de29b
diff --git a/src/pages/messages.ts b/src/pages/messages.ts
new file mode 100644
index 00000000..ef49d51d
--- /dev/null
+++ b/src/pages/messages.ts
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2019, ExploShot
+ * Copyright (c) 2019, The Qwertycoin Project
+ *
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * ==> Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * ==> Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * ==> Neither the name of Qwertycoin nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import {DestructableView} from "../lib/numbersLab/DestructableView";
+import {DependencyInjectorInstance} from "../lib/numbersLab/DependencyInjector";
+import {Wallet} from "../model/Wallet";
+import {Constants} from "../model/Constants";
+
+let wallet : Wallet = DependencyInjectorInstance().getInstance(Wallet.name,'default', false);
+let blockchainExplorer = DependencyInjectorInstance().getInstance(Constants.BLOCKCHAIN_EXPLORER);
+
+class MessagesView extends DestructableView {
+
+ constructor(container: string) {
+ super(container);
+ }
+}
+
+if (wallet !== null && blockchainExplorer !== null) {
+ new MessagesView('#app');
+} else {
+ window.location.href = '#index';
+}
\ No newline at end of file
diff --git a/src/pages/network.html b/src/pages/network.html
index 7dc0a5a7..39f076e6 100644
--- a/src/pages/network.html
+++ b/src/pages/network.html
@@ -11,11 +11,12 @@
This application does not require registration. No personal information is collected, retained, or requested. Location access is not sought.
- No person from the Publisher or those affiliated with the Masari Project will ever request your data, keys, donations, or information relating
+ No person from the Publisher or those affiliated with the Qwertycoin Project will ever request your data, keys, donations, or information relating
to your wallet’s security or usage.
@@ -63,14 +63,14 @@
5. Usage Statistics
6. Support Requests
As a volunteer driven project, there is no group responsible for providing support for the wallet. However, helpful community members will often assist
- others, on their own volition, in a dedicated channel within the Masari Discord. Anyone can join at https://discord.gg/Ype4Y5B
+ others, on their own volition, in a dedicated channel within the Qwertycoin Discord. Anyone can join at https://qwertycoin.org/discord
7. More Info
- This wallet is based on the client side masariwallet.com. Terms of use and further information can be found there. The mobile wallet Publisher is producing
- this application to the benefit of the Masari community. It is completely open source and can be replicated by any project. Licensing and developer
- documentation is available on GitHub at https://github.com/masari-project/masari-webwallet.
+ This wallet is based on the client side myqwertycoin.com. Terms of use and further information can be found there. The mobile wallet Publisher is producing
+ this application to the benefit of the Qwertycoin community. It is completely open source and can be replicated by any project. Licensing and developer
+ documentation is available on GitHub at https://github.com/qwertycoin-org/webwallet-js.
8. Terms of use
diff --git a/src/pages/receive.ts b/src/pages/receive.ts
index 5528157d..1a578fff 100644
--- a/src/pages/receive.ts
+++ b/src/pages/receive.ts
@@ -20,6 +20,7 @@ import {Constants} from "../model/Constants";
import {VueVar, VueWatched} from "../lib/numbersLab/VueAnnotate";
import {CoinUri} from "../model/CoinUri";
import {Nfc} from "../model/Nfc";
+import {Cn, CnUtils} from "../model/Cn";
let wallet : Wallet = DependencyInjectorInstance().getInstance(Wallet.name,'default', false);
@@ -90,8 +91,8 @@ class AccountView extends DestructableView{
paymentIdWatch(){
if(this.paymentId !== '' && this.paymentId.length <= 8) {
let paymentId8 = ('00000000'+this.stringToHex(this.paymentId)).slice(-16);
- console.log(paymentId8+'==>'+this.stringToHex(this.paymentId));
- this.address = cnUtil.get_account_integrated_address(wallet.getPublicAddress(), paymentId8);
+ //console.log(paymentId8+'==>'+this.stringToHex(this.paymentId));
+ this.address = Cn.get_account_integrated_address(wallet.getPublicAddress(), paymentId8);
}else
this.address = wallet.getPublicAddress();
}
@@ -197,4 +198,4 @@ class AccountView extends DestructableView{
if(wallet !== null)
new AccountView('#app');
else
- window.location.href = '#index';
\ No newline at end of file
+ window.location.href = '#index';
diff --git a/src/pages/selfxss.html b/src/pages/selfxss.html
new file mode 100644
index 00000000..7bb1802f
--- /dev/null
+++ b/src/pages/selfxss.html
@@ -0,0 +1,17 @@
+
+
+
+ What is a Self-XSS scam?
+
+
+
+
+
+
+ English version:
+ IA Self-XSS scam on myQwertycoin.com tricks you into compromising your wallet by claiming to provide a way to log into someone else's myQwertycoin.com wallet, or some other kind of reward, after pasting a special code or link into your web browser.
+
+
+
+
+
\ No newline at end of file
diff --git a/utils/mnemonic.php b/src/pages/selfxss.ts
similarity index 85%
rename from utils/mnemonic.php
rename to src/pages/selfxss.ts
index d7dd13db..c3deaa00 100644
--- a/utils/mnemonic.php
+++ b/src/pages/selfxss.ts
@@ -1,5 +1,4 @@
-{{ $t("sendPage.qrCodeScanning.explication") }}
diff --git a/src/pages/support.ts b/src/pages/support.ts
index 57fe8ec0..39b133fa 100644
--- a/src/pages/support.ts
+++ b/src/pages/support.ts
@@ -12,14 +12,7 @@
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import {VueVar, VueWatched} from "../lib/numbersLab/VueAnnotate";
import {DestructableView} from "../lib/numbersLab/DestructableView";
-import {KeysRepository} from "../model/KeysRepository";
-import {Wallet} from "../model/Wallet";
-import {Password} from "../model/Password";
-import {BlockchainExplorerRpc2} from "../model/blockchain/BlockchainExplorerRpc2";
-import {BlockchainExplorerProvider} from "../providers/BlockchainExplorerProvider";
-import {Mnemonic} from "../model/Mnemonic";
import {AppState} from "../model/AppState";
class SupportView extends DestructableView{
diff --git a/src/pages/termsOfUse.html b/src/pages/termsOfUse.html
index 86b57c90..c67f5012 100644
--- a/src/pages/termsOfUse.html
+++ b/src/pages/termsOfUse.html
@@ -12,14 +12,17 @@
English version:
- It is understood that interactions with masariwallet.com’s web wallet are entirely client-side.
- That masariwallet.com has no control or access to your wallet’s private keys, nor do they have the ability to recover your funds in any event of loss.
+ It is understood that interactions with myQWERTYCOIN.com’s web wallet are entirely client-side.
+ That myqwertycoin.com has no control or access to your wallet’s private keys, nor do they have the ability to recover your funds in any event of loss.
- In all circumstances, wallet.karbo.org, Karbo Core Team, Karbo promoters, or any entity affiliated with the Karbo project will not be liable for loss or misuse of funds held using the aforementioned wallet.
- Users also understand and agree that they are solely responsible for providing a secure environment to interact with a Karbowallet.com web wallet.
+ In all circumstances, myqwertycoin.com, Qwertycoin Core Team, Qwertycoin promoters, or any entity affiliated with the Qwertycoin project will not be liable for loss or misuse of funds held using the aforementioned wallet.
+ Users also understand and agree that they are solely responsible for providing a secure environment to interact with a Qwertycoin.org web wallet.
- Additionally, Karbowallet.com cannot, and will not, be held liable for use of funds originating from or arriving to a web wallet.
- By creating, importing, or interacting with a wallet on Karbowallet.com, you implicitly agree to these terms, and absolve the website owners and affiliates of any and all liability.
+ Additionally, myqwertycoin.com cannot, and will not, be held liable for use of funds originating from or arriving to a web wallet.
+ By creating, importing, or interacting with a wallet on myqwertycoin.com, you implicitly agree to these terms, and absolve the website owners and affiliates of any and all liability.
+
+ With the new Feature for running myqwertycoin.com with daemons we added a remoteNode Fee of 0.25% but max 10 QWC for each outgoing transaction.
+ The developer also receives a fee of 1 QWC per outgoing transaction.
Privacy policy (EN)
diff --git a/src/providers/BlockchainExplorerProvider.ts b/src/providers/BlockchainExplorerProvider.ts
index 8869c31c..c1c3e74e 100644
--- a/src/providers/BlockchainExplorerProvider.ts
+++ b/src/providers/BlockchainExplorerProvider.ts
@@ -15,14 +15,15 @@
import {Constants} from "../model/Constants";
import {DependencyInjectorInstance} from "../lib/numbersLab/DependencyInjector";
-import {BlockchainExplorerRpc2} from "../model/blockchain/BlockchainExplorerRpc2";
+import {BlockchainExplorer} from "../model/blockchain/BlockchainExplorer";
+import {BlockchainExplorerRpcDaemon} from "../model/blockchain/BlockchainExplorerRPCDaemon";
export class BlockchainExplorerProvider{
- static getInstance() : BlockchainExplorerRpc2{
- let blockchainExplorer : BlockchainExplorerRpc2 = DependencyInjectorInstance().getInstance(Constants.BLOCKCHAIN_EXPLORER);
+ static getInstance() : BlockchainExplorer{
+ let blockchainExplorer : BlockchainExplorer = DependencyInjectorInstance().getInstance(Constants.BLOCKCHAIN_EXPLORER);
if(blockchainExplorer === null) {
- blockchainExplorer = new BlockchainExplorerRpc2();
+ blockchainExplorer = new BlockchainExplorerRpcDaemon();
DependencyInjectorInstance().register(Constants.BLOCKCHAIN_EXPLORER, blockchainExplorer);
}
return blockchainExplorer;
diff --git a/src/translations/ar.json b/src/translations/ar.json
new file mode 100644
index 00000000..f6743f7b
--- /dev/null
+++ b/src/translations/ar.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "محفظة Qwertycoin | بسيطة وسلسة وآمنة. مرحبا بكم في المستقبل.",
+ "description": "المحفظة الرسمية عبر الإنترنت لعملة Qwertycoin - يتم التعامل معها بشكل كامل في متصفحك للحصول على أفضل حماية"
+ },
+ "messages": {
+ "menu": {
+ "home": "الصفحة الرئيسية",
+ "account": "الحساب",
+ "send": "إرسال",
+ "receive": "تسلم",
+ "export": "تصدير",
+ "donate": "تبرع",
+ "elections": "انتخابات",
+ "contacts": "جهات الاتصال",
+ "settings": "الإعدادات",
+ "disconnect": "قطع الاتصال",
+ "network": "احصائيات الشبكة",
+ "mining": "تعدين"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Contacts"
+ },
+ "electionsPage": {
+ "title": "انتخابات"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "متصل ماسترنود",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "العملة الوطنية"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/br.json b/src/translations/br.json
new file mode 100644
index 00000000..5b20dbe0
--- /dev/null
+++ b/src/translations/br.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin Carteira | Simples, sem costura, seguro. Bem vindo ao futuro.",
+ "description": "Carteira online oficial da moeda Qwertycoin - totalmente manuseada no seu navegador para uma segurança ideal"
+ },
+ "messages": {
+ "menu": {
+ "home": "Casa",
+ "account": "Conta",
+ "send": "Mandar",
+ "receive": "Receber",
+ "export": "Exportar",
+ "donate": "Doar",
+ "elections": "Eleições",
+ "contacts": "Contatos",
+ "settings": "Definições",
+ "disconnect": "desconectar",
+ "network": "Estatística de redes",
+ "mining": "Mineração"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Contatos"
+ },
+ "electionsPage": {
+ "title": "Eleições"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "National Currency"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/de.json b/src/translations/de.json
index bc52a6c1..679fb0e3 100644
--- a/src/translations/de.json
+++ b/src/translations/de.json
@@ -1,496 +1,539 @@
{
- "website":{
- "title":"Offizielle Karbo Web Wallet",
- "description":"Offizielle Online Wallet für Karbo currency, anonym, sicher und für optimale Sicherheit vollständig in deinem Browser verwaltet"
+ "website": {
+ "title": "Qwertycoin Web Wallet",
+ "description": "Offizielle Online Wallet für Qwertycoin Kryptowährung! Anonym, sicher und für optimale Sicherheit vollständig in deinem Browser verwaltet"
},
"messages": {
- "menu": {
- "home": "Home",
- "account": "Account",
- "send": "Senden",
- "receive": "Empfangen",
- "export": "Export",
- "donate": "Spenden",
- "settings": "Einstellungen",
- "disconnect": "Verbindung trennen",
- "network": "Netzwerkstatus",
- "mining": "Minen"
- },
- "global": {
- "loading": "wird geladen",
- "disableSecurity":"Sicherheit verringern, ich verstehe das Risiko",
- "passwordInvalidRequirements":"Das Passwort muss mindestens 8 Zeichen lang sein, einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl oder Sonderzeichen enthalten",
- "passwordConfirmationNotMatching":"Das Passwort entspricht nicht dem vorher eingegebenen",
- "download":"Download",
- "newVersionModal":{
- "title":"Eine neue Version ist verfügbar",
- "content":"Möchtest du neu laden um die neue Version zu erhalten?",
- "confirmText":"Ja",
- "cancelText":"Später"
- },
- "openWalletModal":{
- "title":"Wallet Passwort",
- "confirmText":"Öffnen",
- "cancelText":"Abbrechen"
- },
- "invalidPasswordModal":{
- "title":"Uups...",
- "content":"Dein Passwort scheint falsch zu sein",
- "confirmText":"OK"
- },
- "invalidMnemonicModal":{
- "title":"Uups...",
- "content":"Die Mnemonic Phrase ist falsch",
- "confirmText":"OK"
- },
- "passwordNotComplexEnoughModal":{
- "title":"Das Passwort ist nicht komplex genug",
- "confirmText":"OK"
- },
- "permissionRequiredForCameraModal":{
- "title":"Uups...",
- "content":"Das Recht zum benutzen der Kamera wird benötigt um den QR Code zu scannen",
- "confirmText":"OK"
- }
- },
- "bottom": {
- "termsOfUse": "Nutzungsbedingungen",
- "privacyPolicy": "Datenschutzrichtlinie",
- "support": "Support",
- "donate": "Spenden",
- "network": "Netzwerkstatus",
- "miningPool": "Mining Pool",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Gesicherte Karbo Wallet",
- "tagLine": "Der einfachste Weg Karbo jederzeit und überall zu nutzen",
- "actions": {
- "loadWallet": "Lade meine Wallet",
- "importWallet": "Importiere eine Wallet",
- "create": "Erstelle eine Wallet",
- "createWallet": "Erstelle eine Wallet"
- },
- "notes": {
- "secure": {
- "title": "Sicher",
- "description": "Keine Server, voll verschlüsselt!"
- },
- "fast": {
- "title": "Schnell",
- "description": "Sende jederzeit, von überall!"
- },
- "technology": {
- "title": "Einzigartige Technologie",
- "description": "Direkt mit der Karbo Blockchain verbunden!"
- },
- "openSource": {
- "title": "Komplett open-source",
- "description": "Vergügbar auf Github"
- }
- }
- },
- "accountPage": {
- "title": "Account",
- "subtitle": "Überblick über deinen Account und deine Transactionshistorie",
- "synchronizingBlock": {
- "text": "Synchronisiere "
- },
- "balanceBlock": {
- "title": "Dein Guthaben",
- "unlocked": "Entsperrt"
- },
- "historyBlock": {
- "title": "Transaktionshistorie",
- "pendingTxStatus": "Ausstehend",
- "emptyWallet": "Du hast zur Zeit kein Guthaben auf dieser Wallet",
- "waitSync": "Warte bis die Wallet upgedated ist",
- "beReallyPatient": "Die erste Einrichtung kann etwas dauern...",
- "getCoinAddress": "Hol die deine Adresse um KRB zu empfangen"
- },
- "txDetails":{
- "title":"Transaktionsdetails",
- "txHash":"Tx hash",
- "feesOnTx":"Gebühren der tx",
- "blockHeight":"Blockhöhe",
- "paymentId":"Payment ID",
- "txPrivKey":"Privater Schlüssel für die Transaktion"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Ändere dein Passwort",
- "oldPassword":{
- "label":"Altes Passwort",
- "invalid":"Das Passwort ist ungültig"
- },
- "newPassword":{
- "label":"Wähle ein neues Passwort um deine Daten zu schützen"
- },
- "newPasswordConfirm":{
- "label":"Bestätige das neue Passwort"
- },
- "confirm":"Ändere das Passwort",
- "modalSuccess":{
- "title":"Passwort geändert!",
- "confirmText":"OK"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Deine Wallet wird erstellt...",
- "subtitle":"Fast fertig",
- "waitingMessage":"Erstelle deine Wallet..."
- },
- "finalizationStep":{
- "title":"Das war einfach. Dein Account ist bereit!",
- "subtitle":"Benutze Karbo wie noch nie zuvor",
- "passwordSelectionBlock":{
- "label":"Schütze deine Daten mit einem Passwort"
- },
- "passwordConfirmBlock":{
- "label":"Bestätige das Passwort"
- },
- "validPassword":"Benutze diese Passwort",
- "backupBlock":{
- "title":"Bitte lade eine verschlüsselte Kopie deiner Zugangsdaten für zukünftige Verwendung herunter",
- "option1":"Option 1: ",
- "option2":"Option 2: ",
- "titlePdf":"Download einer PDF Kopie",
- "titleManualWrite":"Schreibe meine Schlüssel auf",
- "privateKeys":"Private key",
- "mnemonicPhrase":"Mnemonic phrase",
- "separatorManualMethodsSolution":" oder ",
- "confirmManuallyWritten":"Ich habe es aufgeschieben",
- "warningMessage":"**Auf keinen Fall verlieren!** Sie können nicht wiederhergestellt werden wenn du sie verlierst. **Nicht weitergeben!** Deine Karbo werden gestohlen werden wenn diese Datei auf einer bösartigen/Phishing Seite benutzt. **Mache ein Backup!** Sichere es so wie die Millionen Euro, die es eines Tages vielleicht wert sein wird. ",
- "finishButton":"Ich habe verstanden. Weiter"
- }
- },
- "disclaimerBlock":{
- "title":"Risiko beim benutzen der KarboWallet",
- "content":"KarboWallet ist ein web-basierendes Interface. Es hilft beim Nutzen von Karbo ohne einen vollen Node zu betreiben. Wir empfehlen KarboWallet sicherheitstechnisch wie eine richtige Wallet zu behandeln."
- }
- },
- "donatePage":{
- "title":"Spenden",
- "subtitle":"Hilf uns die Enwicklung zu finanzieren und die Rechnungen zu bezahlen",
- "webwalletBlock":{
- "title":"Webwallet",
- "content":"Diese Webwallet ist von Gnock in seiner Freizeit entwickelt. Bitte denk über eine Spende nach wenn dir die App gefällt und du bei der Bezahlung der Server und der Enwicklung helfen willst.:
"
- },
- "devFundBlock":{
- "title":"Karbo Entwicklerfonds",
- "content":"Spende an diese Adresse um Karbo zu helfen"
- }
- },
- "supportPage":{
- "title":"Support",
- "subtitle":"Du brauchst Hilfe, wir sind hier um zu helfen!",
- "getInTouchBlock":{
- "title":"Nehmen wir Kontakt auf!",
- "content":"Wenn du Ideen oder Feedback hast um die Wallet zu verbessern, kontaktiere uns!",
- "discord":"Karbo Discord Channel"
- }
- },
- "networkPage":{
- "title":"Netzwerkstatus",
- "subtitle":"Einblick ins Marsir Netzwerk",
- "statsBlock":{
- "hashrate":"Netzwerk Hashrate",
- "height":"Blockchainhöhe",
- "difficulty":"Netzwerkschwierigkeit",
- "lastTimeBlock":"Letzter gefundener Block",
- "lastReward":"Letzte Blockbelohnung"
- }
- },
- "sendPage":{
- "title":"Schicke KRB",
- "sendBlock":{
- "address":{
- "label":"Zieladresse",
- "placeholder":"Schreiben Sie die Adresse, wo Sie wollen Mittel schicken",
- "invalid":"Die Zieladresse ist ungültig",
- "fundsTo":"Das Guthaben wird an folgende Adresse gesendet werden",
- "receiver":"Empfänger",
- "description":"Beschreibung"
- },
- "amount":{
- "label":"Zu sendender Betrag",
- "invalid":"Der Betrag ist ungültig"
- },
- "paymentId":{
- "label":"Payment ID (optional)",
- "invalid":"Die payment ID ist ungültig. Sie muss aus 16 oder 64 Zeichen bestehen"
- },
- "sendButton":"Senden",
- "cancelButton":"Abbrechen"
- },
- "qrCodeScanning":{
- "explication":"Den QR code zeigen"
- },
- "notEnoughMoneyModal":{
- "title":"Uups...",
- "content":"Du hast nicht genügend Guthaben in deiner Wallet um den Transfer auszuführen",
- "confirmText":"OK"
- },
- "thankYouDonationModal":{
- "title":"Danke für deine Spende!",
- "content":"Deine Hilfe wird sehr geschätzt. Diese Spende wird helfen Karbo noch beser zu machen",
- "confirmText":"Schließen"
- },
- "transferSentModal":{
- "title":"Transfer erfolgreich versendet!",
- "confirmText":"Schließen"
- },
- "transferExceptionModal":{
- "title":"Uups...",
- "content":"Ein Fehler ist aufgetreten. Bitte melde uns diesen Fehler: {details}",
- "confirmText":"Schließen"
- },
- "invalidAmountModal":{
- "title":"Uups...",
- "content":"Üngültige Menge",
- "confirmText":"Schließen"
- },
- "creatingTransferModal":{
- "title":"Transfer wird erstellt ...",
- "content":"Bitte warten..."
- },
- "finalizingTransferModal":{
- "title":"Transfer wird fertiggestellt ...",
- "content":"Bitte warten..."
- },
- "confirmTransactionModal":{
- "title":"Transfer bestätigen ?",
- "content":"Amount: {amount} Fees: {fees} Total: {total}",
- "confirmText":"Bestätigen",
- "cancelText":"Abbrechen"
- },
- "waitingNfcModal":{
- "title":"Waiting Nfc",
- "content":"Bring closer to the other device"
- }
- },
- "receivePage":{
- "title":"Empfange KRB",
- "receiveBlock":{
- "address":{
- "title":"Deine Adresse um Guthaben zu empfangen",
- "label":"Stelle diese Adresse bereit um Guthaben zu empfangen"
- },
- "qrCode":{
- "title":"Oder personalisiere den QR code",
- "labelAmount":"Menge (optional)",
- "labelRecipient":"Empfängername (optional)",
- "labelDescription":"Transaktionsbeschreibung (optional)",
- "updateButton":"Update"
- }
- },
- "qrBlock":{
- "title":"Dein personlisierter QR code"
- },
- "waitingNfcToWriteModal":{
- "title":"Waiting Nfc",
- "titleSuccess":"Nfc Tag written",
- "content":"Bring closer the NFC tag to write"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Tag capacity insufficient"
- }
- },
- "miningPage":{
- "title":"Mine direkt in deinem Browser",
- "subtitle":"Unterstütze das Netzwerk für mehr Stabilität und werde mit KRB belohnt",
- "parameterBlock":{
- "title":"Parameter",
- "labelDestinationAddress":"Wallet für die gemined werden soll",
- "labelThreads":"Anzahl von Threads (mehr = höhere Hashrate)",
- "start":"Start",
- "stop":"Stop"
- },
- "statisticsBlocks":{
- "title":"Statistik",
- "validShares":"Gültige shares",
- "hashrate":"Hashrate",
- "maxHashrate":"Max Hashrate",
- "dedicatedHardware":"Mit spezieller Software könnetest du zwei- bis dreimal höhere Hashraten erreichen. Spezielle Software würde auch mithilfe einer Grafikkarte minen(wenn du einge Gaming GPU hast).",
- "miningHandledBy":"Minen erfolgt über den Mining Pool get.masaricoin.com"
- }
- },
- "settingsPage":{
- "title":"Einstellungen",
- "subtitle":"Hier änderst du deine Parameter",
- "versionBlock":{
- "versionNumber":"Version number: ",
- "versionCode":"Version code: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Geschwindigkeit des Walletupdates (braucht mehr Energie)",
- "fastest":"am schnellsten",
- "fast":"schnell",
- "medium":"mittel",
- "slow":"langsam"
- },
- "language":{
- "label":"Language"
- },
- "readMinerTx":{
- "label":"Miner Transaktionen lesen (nur für Leute die solo minen)"
- }
- },
- "changePasswordButton":"Ändere mein Wallet Passwort",
- "deleteWalletButton":"Lösche meine Wallet (lokale Kopie)",
- "walletSettings":{
- "creationHeight":{
- "label":"Erstellhöhe der Wallet"
- },
- "currentScanningHeight": {
- "label": "Aktuelle Scanhöhe"
- },
- "updateButton":"Update"
- },
- "deleteWalletModal":{
- "title":"Lösche meine Wallet (lokale Kopie)",
- "content":"Bist du SICHER das du deine Wallet löschen möchtest?",
- "confirmText":"Ja, ich bin sicher",
- "cancelText":"Abbrechen"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Parameter",
- "password":{
- "label":"Passwort zum Schutz deiner Wallet"
- },
- "passwordConfirm":{
- "label":"Bestätige das Passwort",
- "invalid":"Das Passwort stimmt nicht mit dem ersten überein"
- },
- "importHeight":{
- "label":"Höhe von der importiert werden soll"
- }
- }
- },
- "importFromQrPage":{
- "title":"Importiere Wallet von einem QR code",
- "subtitle":"Importiere Wallet von einem offline Backup",
- "qrCodeBlock":{
- "title":"QR code",
- "startScanButton":"Starte den Scan",
- "importButton":"Importiere"
- },
- "qrScanningBlock":{
- "title":"Präsentiere den QR code"
- }
- },
- "exportPage":{
- "title":"Sichere deine Daten",
- "publicAddressBlock":{
- "title":"Deine öffentliche Adresse"
- },
- "pdfBlock":{
- "title":"Pdf Backup",
- "downloadButton":"Download"
- },
- "warningBlock":{
- "title":"Warnung",
- "content":"Wenn du deinen privaten Schlüssel oder deine mnemonische Phrase speichern möchtest, speichere sie zu deiner eigenen Sicherheit NICHT in klarer und unverschlüsselter Form.. Die Datei ist eine alternative Lösung, bei der deine Schlüssel verschlüsselt sind und ein Backup all deiner Transaktionen enthält, um dir eine zukünftige Synchronisation zu ersparen.."
- },
- "exportBlock":{
- "title":"Exportiere deine RAW Zugangsdaten",
- "privateKeysButton":"Gib mir meine pirvaten Schlüssel",
- "mnemonicKeysButton":"Gib mir meine Mnemonic Phrase",
- "fileButton":"Exportiere in eine Datei"
- },
- "walletKeysModal":{
- "title":"Private Schlüssel",
- "confirmText":"OK",
- "content":"Diese Schlüssel bitte sorgfältig speichern. Der Besitz dieser bedeutetd den Besitz des zugeordneten Guthabens ! Spend key: {privSpendKey} Private view key: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Mnemonic Phrase",
- "confirmText":"OK",
- "content":"Diese Mnemonic Phrase bitte sorgfältig speichern. Der Besitz dieser Phrase bedeutetd den Besitz des zugeordneten Guthabens ! Die Phrase lautet: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"In welcher Sprache möchtest du deine Mnemonic Phrase ?",
- "confirmText":"Exportiere"
- }
- },
- "importPage":{
- "title":"Erstelle eine Wallet",
- "subtitle":"Von vorher erstellten Schlüsslen, einer Datei oder einer Mnemonic Phrase",
- "chooseMethod":"Wähle deine Import Methode",
- "fromKeys":"Von Schlüsseln",
- "fromFile":"Von einer Datei",
- "fromMnemonic":"Von einer Mnemonic Phrase",
- "fromQr":"Von einem QR code"
- },
- "termsOfUsePage":{
- "title":"Nutzungsbedingungen",
- "subtitle":"Bitte lies diese genau"
- },
- "privacyPolicyPage":{
- "title":"Privacy Policy",
- "subtitle":"Bitte lies diese genau"
- },
- "importFromFilePage":{
- "title":"Importieren einer Wallet aus einer Backup Datei",
- "subtitle":"Benutze die Backup Datei um eine Wallet zu erstellen",
- "walletBlock":{
- "title":"Wallet Datei",
- "label":"Datei auswählen",
- "importButton":"Importiere"
- }
- },
- "importFromMnemonicPage":{
- "title":"Importieren einer Wallet von einer Mnemonic Phrase",
- "subtitle":"Benutze die Phrase um eine Wallet zu erstellen",
- "mnemonicBlock":{
- "title":"Mnemonic Phrase",
- "mnemonic":{
- "label":"Mnemonic Phrase : 25 Wörter",
- "invalid":"Die Mnemonic Phrase ist ungültig",
- "language":"Sprache"
- },
- "importButton":"Importiere"
- }
- },
- "importFromKeysPage":{
- "title":"Importiere Wallet mithilfe von Schlüsseln",
- "subtitle":"Benutze die Schlüssel um eine Wallet zu erstellen",
- "parametersBlock":{
- "viewOnlyWallet":{
- "label":"Möchtest du eine View-Only Wallet?"
- }
- },
- "keysBlock":{
- "titleNotViewOnly":"Wallet Schlüssel",
- "titleViewOnly":"View-Only Wallet",
- "privateSpend":{
- "label":"Privater Spend Key"
- },
- "privateView":{
- "label":"Privater View Key",
- "optional":"(optional)"
- },
- "publicKey":{
- "label":"Öffentlicher Schlüssel"
- },
- "importButton":"Importiere"
- }
- }
+ "menu": {
+ "home": "Home",
+ "account": "Account",
+ "send": "Senden",
+ "receive": "Empfangen",
+ "export": "Export",
+ "donate": "Spenden",
+ "elections": "Abstimmungen",
+ "contacts": "Kontakte",
+ "settings": "Einstellungen",
+ "disconnect": "Ausloggen",
+ "network": "Netzwerkstatus",
+ "mining": "Minen"
+ },
+ "global": {
+ "loading": "wird geladen",
+ "disableSecurity": "Verwendung eines schwachen Passworts bestätigen!",
+ "passwordInvalidRequirements": "Das Passwort muss mindestens 8 Zeichen lang sein, einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl oder Sonderzeichen enthalten",
+ "passwordConfirmationNotMatching": "Das Passwort entspricht nicht dem vorher eingegebenen",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "Eine neue Version ist verfügbar!",
+ "content": "Möchtest du neuladen um die neue Version zu erhalten?",
+ "confirmText": "Ja",
+ "cancelText": "Später"
+ },
+ "openWalletModal": {
+ "title": "Wallet Passwort",
+ "confirmText": "Öffnen",
+ "cancelText": "Abbrechen"
+ },
+ "invalidPasswordModal": {
+ "title": "Uups...",
+ "content": "Dein Passwort scheint falsch zu sein",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Uups...",
+ "content": "Die Mnemonic Phrase ist falsch",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "Das Passwort ist nicht komplex genug",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Uups...",
+ "content": "Das Recht zum benutzen der Kamera wird benötigt um den QR Code zu scannen",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Nutzungsbedingungen",
+ "privacyPolicy": "Datenschutzrichtlinie",
+ "support": "Support",
+ "donate": "Spenden",
+ "network": "Netzwerkstatus",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "Überall zu jeder Zeit - QWC auf jedem Gerät.",
+ "tagLineTwo": "Der schnellste Weg, Qwertycoin zu verwenden.",
+ "actions": {
+ "loadWallet": "Lade meine Wallet",
+ "importWallet": "Importiere eine Wallet",
+ "create": "Erstelle eine neue Wallet",
+ "createWallet": "Erstelle eine neue Wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Überblick über deinen Account und deine Transaktionshistorie",
+ "synchronizingBlock": {
+ "text": "Synchronisiere "
+ },
+ "balanceBlock": {
+ "title": "Dein Guthaben",
+ "unlocked": "Entsperrt"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaktionshistorie",
+ "pendingTxStatus": "Ausstehend",
+ "emptyWallet": "Du hast zur Zeit kein Guthaben auf dieser Wallet",
+ "waitSync": "Warte bis die Wallet synchronisiert ist.",
+ "beReallyPatient": "Die erste Einrichtung kann etwas dauern...",
+ "getCoinAddress": "Hol dir deine Adresse um QWC zu empfangen"
+ },
+ "txDetails": {
+ "title": "Transaktionsdetails",
+ "txHash": "TX hash",
+ "feesOnTx": "Gebühren der TX",
+ "blockHeight": "Blockhöhe",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Bestätigungen",
+ "txPrivKey": "Privater Schlüssel für diese Transaktion"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Ändere dein Passwort",
+ "oldPassword": {
+ "label": "Altes Passwort",
+ "invalid": "Das Passwort ist ungültig"
+ },
+ "newPassword": {
+ "label": "Wähle ein neues Passwort um deine Daten zu schützen"
+ },
+ "newPasswordConfirm": {
+ "label": "Bestätige das neue Passwort"
+ },
+ "confirm": "Ändere das Passwort",
+ "modalSuccess": {
+ "title": "Passwort geändert!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Abbrechen",
+ "confirm": "Hinzufügen",
+ "contactAddress": "Adresse",
+ "contactName": "Name",
+ "getNewContacts": "Neuer Kontakt",
+ "newContact": "Neuer Kontakt",
+ "noContacts": "Du hast noch keine Kontakte",
+ "title": "Deine Kontakte"
+ },
+ "contactDetailsBlock": {
+ "address": "Adresse",
+ "sendTo": "Sende an ",
+ "title": "Kontaktdetails"
+ },
+ "subtitle": "Verbinde dich mit anderen QWC Nutzern und sende Ihnen QWC",
+ "title": "Kontakte"
+ },
+ "electionsPage": {
+ "title": "Abstimmungen"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Deine Wallet wird erstellt...",
+ "subtitle": "Fast fertig",
+ "waitingMessage": "Erstelle deine Wallet..."
+ },
+ "finalizationStep": {
+ "title": "Das war einfach. Dein Account ist bereit!",
+ "subtitle": "Benutze Qwertycoin wie noch nie zuvor",
+ "passwordSelectionBlock": {
+ "label": "Schütze deine Daten mit einem Passwort"
+ },
+ "passwordConfirmBlock": {
+ "label": "Bestätige das Passwort"
+ },
+ "validPassword": "Benutze diese Passwort",
+ "backupBlock": {
+ "title": "Bitte lade eine verschlüsselte Kopie deiner Zugangsdaten für zukünftige Verwendung herunter",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download einer PDF Kopie",
+ "titleManualWrite": "Schreibe meine Schlüssel auf",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " oder ",
+ "confirmManuallyWritten": "Ich habe es aufgeschieben",
+ "warningMessage": "**Auf keinen Fall verlieren!** Sie können nicht wiederhergestellt werden wenn du sie verlierst. **Nicht weitergeben!** Deine Qwertycoin werden gestohlen werden wenn diese Datei auf einer bösartigen/Phishing Seite benutzt. **Mache ein Backup!** Sichere es so wie die Millionen Euro, die es eines Tages vielleicht wert sein wird. ",
+ "finishButton": "Ich habe verstanden. Weiter"
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risiko beim benutzen der QwertycoinWallet",
+ "content": "QwertycoinWallet ist ein web-basierendes Interface. Es hilft beim Nutzen von Qwertycoin ohne einen vollen Node zu betreiben. Wir empfehlen QwertycoinWallet sicherheitstechnisch wie eine richtige Wallet zu behandeln."
+ }
+ },
+ "donatePage": {
+ "title": "Spenden",
+ "subtitle": "Hilf uns die Entwicklung zu finanzieren und die Rechnungen zu bezahlen",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "Bitte denke über eine Spende nach wenn dir die App gefällt und du bei der Bezahlung der Server und der Enwicklung helfen willst.:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Entwicklerfonds",
+ "content": "Spende an diese Adresse um Qwertycoin zu unterstützen"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "Du brauchst Hilfe? Wir helfen dir!",
+ "getInTouchBlock": {
+ "title": "So erreichst du uns!",
+ "content": "Wenn du Ideen oder Feedback hast um die Wallet zu verbessern, kontaktiere uns!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Netzwerkstatus",
+ "subtitle": "Einblicke ins Qwertycoin Netzwerk",
+ "statsBlock": {
+ "connectNode": "Verbundene Masternode",
+ "hashrate": "Netzwerk Hashrate",
+ "height": "Blockchainhöhe",
+ "difficulty": "Netzwerkschwierigkeit",
+ "lastTimeBlock": "Letzter gefundener Block",
+ "lastReward": "Letzte Blockbelohnung"
+ }
+ },
+ "sendPage": {
+ "title": "QWC Überweisung",
+ "sendBlock": {
+ "address": {
+ "label": "Zieladresse",
+ "placeholder": "Empfängeradresse (QWC....)",
+ "invalid": "Die Zieladresse ist ungültig",
+ "fundsTo": "Das Guthaben wird an folgende Adresse gesendet werden",
+ "receiver": "Empfänger",
+ "description": "Beschreibung"
+ },
+ "amount": {
+ "label": "Zu sendender Betrag",
+ "invalid": "Der Betrag ist ungültig"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "Die payment ID ist ungültig. Sie muss aus 64 Zeichen bestehen"
+ },
+ "sendButton": "Senden",
+ "cancelButton": "Abbrechen"
+ },
+ "qrCodeScanning": {
+ "explication": "Den QR code zeigen"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Uups...",
+ "content": "Du hast nicht genügend Guthaben in deiner Wallet um den Transfer auszuführen",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Danke für deine Spende!",
+ "content": "Deine Hilfe wird sehr geschätzt. Diese Spende wird helfen Qwertycoin noch beser zu machen",
+ "confirmText": "Schließen"
+ },
+ "transferSentModal": {
+ "title": "Transfer erfolgreich versendet!",
+ "confirmText": "Schließen"
+ },
+ "transferExceptionModal": {
+ "title": "Uups...",
+ "content": "Ein Fehler ist aufgetreten. Bitte melde uns diesen Fehler: {details}",
+ "confirmText": "Schließen"
+ },
+ "invalidAmountModal": {
+ "title": "Uups...",
+ "content": "Üngültige Menge",
+ "confirmText": "Schließen"
+ },
+ "creatingTransferModal": {
+ "title": "Transfer wird erstellt ...",
+ "content": "Bitte warten..."
+ },
+ "finalizingTransferModal": {
+ "title": "Transfer wird fertiggestellt ...",
+ "content": "Bitte warten..."
+ },
+ "confirmTransactionModal": {
+ "title": "Transfer bestätigen ?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Bestätigen",
+ "cancelText": "Abbrechen"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting NFC",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Empfange QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Deine Adresse um Qwertycoin zu empfangen",
+ "label": "Stelle diese Adresse bereit um QWC zu empfangen"
+ },
+ "qrCode": {
+ "title": "Oder erstelle einen eigenen QR-Code um Zahlungen zu erhalten",
+ "labelAmount": "Geünschte QWC (optional)",
+ "labelRecipient": "Empfängername (optional)",
+ "labelDescription": "Beschreibung wofür diese Transaktion ist (optional)",
+ "updateButton": "QR-Code generieren"
+ }
+ },
+ "qrBlock": {
+ "title": "Dein personalisierter QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "NFC Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine direkt in deinem Browser",
+ "subtitle": "Unterstütze das Netzwerk für mehr Stabilität und werde mit QWC belohnt",
+ "parameterBlock": {
+ "title": "Parameter",
+ "labelDestinationAddress": "Wallet für die gemined werden soll",
+ "labelThreads": "Anzahl von Threads (mehr = höhere Hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistik",
+ "validShares": "Gültige shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "Mit spezieller Software könnetest du zwei- bis dreimal höhere Hashraten erreichen. Spezielle Software würde auch mithilfe einer Grafikkarte minen(wenn du einge Gaming GPU hast).",
+ "miningHandledBy": "Minen erfolgt über den Mining Pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Einstellungen",
+ "subtitle": "Hier kannst du deine Einstellungen verwalten",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Mit welcher Geschwindigkeit soll die Wallet aktualisiert werden?",
+ "fastest": "am schnellsten",
+ "fast": "schnell",
+ "medium": "mittel",
+ "slow": "langsam"
+ },
+ "language": {
+ "label": "Systemsprache"
+ },
+ "currency": {
+ "label": "Landeswährung (Wird unter dem Kontostand angezeigt)"
+ },
+ "readMinerTx": {
+ "label": "Zeige etwaige Mining Transaktionen an (optional)"
+ },
+ "customNode": {
+ "label": "Favorisierten Server auswählen"
+ },
+ "nodeUrl": {
+ "label": "Server Auswahl"
+ },
+ "chooseNode": "Wähle deinen Server:"
+ },
+ "changePasswordButton": "Wallet Passwort ändern",
+ "deleteWalletButton": "Entferne meine Wallet von diesem Gerät (nur wenn du ein Backup hast)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Erstellhöhe deiner Wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Synchronisationshöhe"
+ },
+ "updateButton": "Speichern"
+ },
+ "deleteWalletModal": {
+ "title": "Lösche meine Wallet (lokale Kopie)",
+ "content": "Bist du SICHER, dass du deine Wallet löschen möchtest?",
+ "confirmText": "Ja, ich bin sicher",
+ "cancelText": "Abbrechen"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameter",
+ "password": {
+ "label": "Passwort zum Schutz deiner Wallet"
+ },
+ "passwordConfirm": {
+ "label": "Bestätige das Passwort",
+ "invalid": "Das Passwort stimmt nicht mit dem ersten überein"
+ },
+ "importHeight": {
+ "label": "Höhe von der importiert werden soll"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importiere Wallet von einem QR code",
+ "subtitle": "Importiere Wallet von einem offline Backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Starte den Scan",
+ "importButton": "Importiere"
+ },
+ "qrScanningBlock": {
+ "title": "Präsentiere den QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Export deiner PrivateKeys",
+ "publicAddressBlock": {
+ "title": "Deine öffentliche Adresse"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup zum ausdrucken",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Hinweis",
+ "content": "Wenn du deinen privaten Schlüssel oder deine mnemonische Phrase speichern möchtest, speichere sie zu deiner eigenen Sicherheit NICHT in klarer und unverschlüsselter Form. Diese Datei ist eine alternative Lösung, bei der deine Schlüssel verschlüsselt sind und ein Backup all deiner Transaktionen enthält, um dir eine zukünftige Synchronisation zu ersparen.."
+ },
+ "exportBlock": {
+ "title": "Exportiere deine Private-Keys (Zugangsdaten)",
+ "privateKeysButton": "Zeige meine privaten Schlüssel an",
+ "mnemonicKeysButton": "Zeige meine Mnemonic Phrase",
+ "fileButton": "Exportiere in eine Datei"
+ },
+ "walletKeysModal": {
+ "title": "Private Schlüssel",
+ "confirmText": "OK",
+ "content": "Diese Schlüssel bitte sorgfältig speichern. Der Besitz dieser bedeutetd den Besitz des zugeordneten Guthabens ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic Phrase",
+ "confirmText": "OK",
+ "content": "Diese Mnemonic Phrase bitte sorgfältig speichern. Der Besitz dieser Phrase bedeutetd den Besitz des zugeordneten Guthabens ! Die Phrase lautet: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In welcher Sprache möchtest du deine Mnemonic Phrase ?",
+ "confirmText": "Exportiere"
+ }
+ },
+ "importPage": {
+ "title": "Importieren einer vorhandenen Wallet",
+ "subtitle": "Du kannst eine Wallet über den Seed (mnemonische Phrase), den privaten Keys oder durch eine WebWallet Backup-Datei importieren.",
+ "chooseMethod": "Wähle deine Import Methode",
+ "fromKeys": "Von Schlüsseln",
+ "fromFile": "Von einer Backupdatei",
+ "fromMnemonic": "Von einer Mnemonic Phrase",
+ "fromQr": "Von einem QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Nutzungsbedingungen",
+ "subtitle": "Bitte lies diese genau"
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Bitte lies diese genau"
+ },
+ "importFromFilePage": {
+ "title": "Importieren einer Wallet aus einer Backup Datei",
+ "subtitle": "Benutze die Backup Datei um eine Wallet zu erstellen",
+ "walletBlock": {
+ "title": "Wallet Datei",
+ "label": "Datei auswählen",
+ "importButton": "Importiere"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importieren einer Wallet von einer Mnemonic Phrase",
+ "subtitle": "Benutze die Phrase um eine Wallet zu erstellen",
+ "mnemonicBlock": {
+ "title": "Mnemonic Phrase",
+ "mnemonic": {
+ "label": "Mnemonic Phrase : 25 Wörter",
+ "invalid": "Die Mnemonic Phrase ist ungültig",
+ "language": "Sprache"
+ },
+ "importButton": "Importiere"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importiere Wallet mithilfe von Schlüsseln",
+ "subtitle": "Benutze die Schlüssel um eine Wallet zu erstellen",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Möchtest du eine View-Only Wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet Schlüssel",
+ "titleViewOnly": "View-Only Wallet",
+ "privateSpend": {
+ "label": "Privater Spend Key"
+ },
+ "privateView": {
+ "label": "Privater View Key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Öffentlicher Schlüssel"
+ },
+ "importButton": "Importiere"
+ }
+ }
},
- "number":{
-
- },
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": false
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": false
+ }
}
}
diff --git a/src/translations/en.json b/src/translations/en.json
index af80583c..fc328c4a 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -1,495 +1,539 @@
{
- "website":{
- "title":"Client-side Karbo Web Wallet",
- "description":"Official online wallet for Karbo currency - fully handled in your browser for optimal security"
+ "website": {
+ "title": "Qwertycoin Wallet | Simple, seamless, safe. Welcome to the future.",
+ "description": "Official online wallet for Qwertycoin currency - fully handled in your browser for optimal security"
},
"messages": {
- "menu": {
- "home": "Home",
- "account": "Account",
- "send": "Send",
- "receive": "Receive",
- "export": "Export",
- "donate": "Donate",
- "settings": "Settings",
- "disconnect": "Disconnect",
- "network": "Network Stats",
- "mining": "Mining"
- },
- "global": {
- "loading": "Loading",
- "disableSecurity":"Disable this security, I understand the risk",
- "passwordInvalidRequirements":"The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
- "passwordConfirmationNotMatching":"The password does not match the first password you wrote",
- "download":"Download",
- "newVersionModal":{
- "title":"A new version is available",
- "content":"Do you want to reload to load the new version?",
- "confirmText":"Yes",
- "cancelText":"Back"
- },
- "openWalletModal":{
- "title":"Wallet Password",
- "confirmText":"Open",
- "cancelText":"Cancel"
- },
- "invalidPasswordModal":{
- "title":"Oops...",
- "content":"Your password seems invalid",
- "confirmText":"OK"
- },
- "invalidMnemonicModal":{
- "title":"Oops...",
- "content":"The mnemonic phrase is invalid",
- "confirmText":"OK"
- },
- "passwordNotComplexEnoughModal":{
- "title":"The password is not complex enough",
- "confirmText":"OK"
- },
- "permissionRequiredForCameraModal":{
- "title":"Oops...",
- "content":"The permission to access your camera is required to scan the QR code",
- "confirmText":"OK"
- }
- },
- "bottom": {
- "termsOfUse": "Terms of Use",
- "privacyPolicy": "Privacy Policy",
- "support": "Support",
- "donate": "Donate",
- "network": "Network Stats",
- "miningPool": "Mining Pool",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Secure Karbo Wallet",
- "tagLine": "The simplest way to use Karbo – anywhere and any time",
- "actions": {
- "loadWallet": "Load my wallet",
- "importWallet": "Import a wallet",
- "create": "Create",
- "createWallet": "Create a wallet"
- },
- "notes": {
- "secure": {
- "title": "Secure",
- "description": "No servers, fully encrypted!"
- },
- "fast": {
- "title": "Fast",
- "description": "Send Everywhere, Anytime!"
- },
- "technology": {
- "title": "Local",
- "description": "Keys on your device"
- },
- "openSource": {
- "title": "Open-source",
- "description": "Verify on Github!"
- }
- }
- },
- "accountPage": {
- "title": "Account",
- "subtitle": "Your account overview and transaction history",
- "synchronizingBlock": {
- "text": "Synchronizing..."
- },
- "balanceBlock": {
- "title": "Your balance",
- "unlocked": "Unlocked"
- },
- "historyBlock": {
- "title": "Transaction history",
- "pendingTxStatus": "Pending",
- "emptyWallet": "You currently have no funds in this wallet.",
- "waitSync": "Please wait until the wallet is updated",
- "beReallyPatient": "The initial setup can take some time...",
- "getCoinAddress": "Receive KRB"
- },
- "txDetails":{
- "title":"Transaction details",
- "txHash":"Tx hash",
- "feesOnTx":"Tx fees",
- "blockHeight":"Block height",
- "paymentId":"Payment ID",
- "txPrivKey":"Transaction Private Key"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Change your password",
- "oldPassword":{
- "label":"Old password",
- "invalid":"The password is invalid"
- },
- "newPassword":{
- "label":"Choose a new password to protect your wallet"
- },
- "newPasswordConfirm":{
- "label":"Confirm the new password"
- },
- "confirm":"Change the password",
- "modalSuccess":{
- "title":"Password changed!",
- "confirmText":"OK"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Your wallet is being generated...",
- "subtitle":"It's almost done",
- "waitingMessage":"Generating your wallet..."
- },
- "finalizationStep":{
- "title":"That was simple. Your account is ready!",
- "subtitle":"Be ready to use Karbo like you never have",
- "passwordSelectionBlock":{
- "label":"Protect your wallet"
- },
- "passwordConfirmBlock":{
- "label":"Confirm the password"
- },
- "validPassword":"Use this password",
- "backupBlock":{
- "title":"Save your private credentials for recovery.",
- "option1":"Option 1: ",
- "option2":"Option 2: ",
- "titlePdf":"Download a PDF copy",
- "titleManualWrite":"Write down my keys",
- "privateKeys":"Private key",
- "mnemonicPhrase":"Mnemonic phrase",
- "separatorManualMethodsSolution":" or ",
- "confirmManuallyWritten":"I wrote my seed phrase down",
- "warningMessage":"**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
- "finishButton":"I understand. Continue."
- }
- },
- "disclaimerBlock":{
- "title":"Risk of Using KarboWallet",
- "content":"KarboWallet is a web-based interface. It helps you use Karbo without running a full Karbo node. We recommend you treat KarboWallet like you will treat your actual wallet."
- }
- },
- "donatePage":{
- "title":"Donate",
- "subtitle":"Help to fund the development and pay the bills",
- "webwalletBlock":{
- "title":"Webwallet",
- "content":"If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
- },
- "devFundBlock":{
- "title":"Karbo Dev fund",
- "content":"To help Karbo, you can donate at these addresses"
- }
- },
- "supportPage":{
- "title":"Support",
- "subtitle":"We are here to help!",
- "getInTouchBlock":{
- "title":"Let's Get In Touch!",
- "content":"Do you have ideas or feedback that could help us improve the wallet? Contact us!",
- "discord":"Karbo Discord Channel"
- }
- },
- "networkPage":{
- "title":"Network stats",
- "subtitle":"Insights on the Karbo network",
- "statsBlock":{
- "hashrate":"Network hashrate",
- "height":"Blockchain height",
- "difficulty":"Network difficulty",
- "lastTimeBlock":"Last block found",
- "lastReward":"Last block reward"
- }
- },
- "sendPage":{
- "title":"Send KRB",
- "sendBlock":{
- "address":{
- "label":"Destination address",
- "placeholder":"Write the address where you want to send funds",
- "invalid":"The destination address is invalid",
- "fundsTo":"The funds will be sent to",
- "receiver":"Receiver",
- "description":"Description"
- },
- "amount":{
- "label":"Amount to send",
- "invalid":"The amount is invalid"
- },
- "paymentId":{
- "label":"Payment ID (optional)",
- "invalid":"The payment ID is invalid. The length must be 16 or 64 characters"
- },
- "sendButton":"Send",
- "cancelButton":"Cancel"
- },
- "qrCodeScanning":{
- "explication":"Present the QR code"
- },
- "notEnoughMoneyModal":{
- "title":"Oops...",
- "content":"You don't have enough funds in your wallet to execute this transfer",
- "confirmText":"OK"
- },
- "thankYouDonationModal":{
- "title":"Thank you for your donation!",
- "content":"Your help is appreciated. This donation will help make Karbo better",
- "confirmText":"OK"
- },
- "transferSentModal":{
- "title":"Transfer sent successfully!",
- "confirmText":"OK"
- },
- "transferExceptionModal":{
- "title":"Oops...",
- "content":"An error occurred. Please report this error: {details}",
- "confirmText":"OK"
- },
- "invalidAmountModal":{
- "title":"Oops...",
- "content":"Invalid amount",
- "confirmText":"OK"
- },
- "creatingTransferModal":{
- "title":"Creating transfer ...",
- "content":"Please wait..."
- },
- "finalizingTransferModal":{
- "title":"Finalizing transfer ...",
- "content":"Please wait..."
- },
- "confirmTransactionModal":{
- "title":"Confirm transfer?",
- "content":"Amount: {amount} Fees: {fees} Total: {total}",
- "confirmText":"Confirm",
- "cancelText":"Cancel"
- },
- "waitingNfcModal":{
- "title":"Waiting Nfc",
- "content":"Bring closer to the other device"
- }
- },
- "receivePage":{
- "title":"Receive KRB",
- "receiveBlock":{
- "address":{
- "title":"Your address to receive funds:",
- "label":"Give this address to receive funds"
- },
- "qrCode":{
- "title":"Or personalize the QR code:",
- "labelAmount":"Amount (optional)",
- "labelRecipient":"Recipient name (optional)",
- "labelDescription":"Transaction description (optional)",
- "updateButton":"Update"
- }
- },
- "qrBlock":{
- "title":"Your customized QR code"
- },
- "waitingNfcToWriteModal":{
- "title":"Waiting Nfc",
- "titleSuccess":"Nfc Tag written",
- "content":"Bring closer the NFC tag to write"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Tag capacity insufficient"
- }
- },
- "miningPage":{
- "title":"Mine directly in your browser",
- "subtitle":"Support the network by mining and be rewarded with KRB",
- "parameterBlock":{
- "title":"Parameters",
- "labelDestinationAddress":"Wallet to mine",
- "labelThreads":"Number of threads (more = higher hashrate)",
- "start":"Start",
- "stop":"Stop"
- },
- "statisticsBlocks":{
- "title":"Statistics",
- "validShares":"Valid shares",
- "hashrate":"Hashrate",
- "maxHashrate":"Max Hashrate",
- "dedicatedHardware":"With dedicating mining software and hardware, you could earn more and help decentralize the network.",
- "miningHandledBy":"This mining is handled by the mining pool get.masaricoin.com"
- }
- },
- "settingsPage":{
- "title":"Settings",
- "subtitle":"Change your parameters here",
- "versionBlock":{
- "versionNumber":"Version number: ",
- "versionCode":"Version code: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Speed to update the wallet (will consume more resources)",
- "fastest":"Fastest",
- "fast":"Fast",
- "medium":"Medium",
- "slow":"Slow"
- },
- "language":{
- "label":"Language"
- },
- "readMinerTx":{
- "label":"Read miner transactions (only for solo mining)"
- }
- },
- "changePasswordButton":"Change my wallet password",
- "deleteWalletButton":"Delete my wallet (local copy)",
- "walletSettings":{
- "creationHeight":{
- "label":"Creation height of the wallet"
- },
- "currentScanningHeight": {
- "label": "Current scanning height"
- },
- "updateButton":"Update"
- },
- "deleteWalletModal":{
- "title":"Delete My Wallet (local copy)",
- "content":"Are you sure you REALLY want to delete your wallet ?",
- "confirmText":"Yes I'm sure",
- "cancelText":"Cancel"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Parameters",
- "password":{
- "label":"Password to protect your wallet"
- },
- "passwordConfirm":{
- "label":"Confirm the password",
- "invalid":"The password does not match the first password you wrote"
- },
- "importHeight":{
- "label":"Height to import from:"
- }
- }
- },
- "importFromQrPage":{
- "title":"Importing wallet from a QR code",
- "subtitle":"Import a wallet from an offline backup",
- "qrCodeBlock":{
- "title":"QR code",
- "startScanButton":"Start the scan",
- "importButton":"Import"
- },
- "qrScanningBlock":{
- "title":"Present the QR code"
- }
- },
- "exportPage":{
- "title":"Backup your credentials",
- "publicAddressBlock":{
- "title":"Your public address"
- },
- "pdfBlock":{
- "title":"PDF Backup",
- "downloadButton":"Download"
- },
- "warningBlock":{
- "title":"Warning",
- "content":"If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
- },
- "exportBlock":{
- "title":"Export your RAW credentials",
- "privateKeysButton":"Get my private keys",
- "mnemonicKeysButton":"Get my mnemonic phrase",
- "fileButton":"Export to a file"
- },
- "walletKeysModal":{
- "title":"Private keys",
- "confirmText":"OK",
- "content":"Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Mnemonic phrase",
- "confirmText":"OK",
- "content":"Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"In which language do you want your mnemonic phrase?",
- "confirmText":"Export"
- }
- },
- "importPage":{
- "title":"Create a wallet",
- "subtitle":"From previously created keys, file, or mnemonic phrase",
- "chooseMethod":"Choose your import method:",
- "fromKeys":"From keys",
- "fromFile":"From a file",
- "fromMnemonic":"From a mnemonic phrase",
- "fromQr":"From a QR code"
- },
- "termsOfUsePage":{
- "title":"Terms of use",
- "subtitle":"Please read them carefully."
- },
- "privacyPolicyPage":{
- "title":"Privacy Policy",
- "subtitle":"Please read them carefully."
- },
- "importFromFilePage":{
- "title":"Importing wallet from a backup file",
- "subtitle":"Use your backup file to create a wallet",
- "walletBlock":{
- "title":"Wallet file",
- "label":"Select the file",
- "importButton":"Import"
- }
- },
- "importFromMnemonicPage":{
- "title":"Importing wallet from a mnemonic phrase",
- "subtitle":"Use your phrase to create a wallet",
- "mnemonicBlock":{
- "title":"Mnemonic phrase",
- "mnemonic":{
- "label":"Mnemonic phrase: 25 words",
- "invalid":"The mnemonic phrase is invalid",
- "language":"Language"
- },
- "importButton":"Import"
- }
- },
- "importFromKeysPage":{
- "title":"Importing wallet from keys",
- "subtitle":"Use your keys to create a wallet",
- "parametersBlock":{
- "viewOnlyWallet":{
- "label":"Do you want a view only wallet?"
- }
- },
- "keysBlock":{
- "titleNotViewOnly":"Wallet keys",
- "titleViewOnly":"View only wallet",
- "privateSpend":{
- "label":"Private spend key"
- },
- "privateView":{
- "label":"Private view key",
- "optional":"(optional)"
- },
- "publicKey":{
- "label":"Public key"
- },
- "importButton":"Import"
- }
- }
+ "menu": {
+ "home": "Home",
+ "account": "Account",
+ "send": "Send",
+ "receive": "Receive",
+ "export": "Export",
+ "donate": "Donate",
+ "elections": "Elections",
+ "contacts": "Contacts",
+ "settings": "Settings",
+ "disconnect": "Disconnect",
+ "network": "Network Stats",
+ "mining": "Mining"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Contacts"
+ },
+ "electionsPage": {
+ "title": "Elections"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting NFC",
+ "content": "Bring this device closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting NFC",
+ "titleSuccess": "NFC Tag written",
+ "content": "Bring the NFC tag closer to this device to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "currency": {
+ "label": "National Currency"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "speed": {
+ "fast": "Fast",
+ "fastest": "Fastest",
+ "label": "Speed to update the wallet (will consume more resources)",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
},
- "number":{
- },
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": true
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/translations/es.json b/src/translations/es.json
new file mode 100644
index 00000000..9db1bf27
--- /dev/null
+++ b/src/translations/es.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Billetera Qwertycoin | Sencilla, sin fisuras, segura. Bienvenido al futuro.",
+ "description": "Billetera oficial en línea para la moneda Qwertycoin: se maneja por completo en su navegador para una seguridad óptima"
+ },
+ "messages": {
+ "menu": {
+ "home": "Inicio",
+ "account": "Cuenta",
+ "send": "Enviar",
+ "receive": "Recibir",
+ "export": "Exportar",
+ "donate": "Donar",
+ "Eleições": "Eleições",
+ "Contatos": "Contatos",
+ "settings": "Ajustes",
+ "disconnect": "Desconectar",
+ "network": "Estadísticas de red",
+ "mining": "Minería"
+ },
+ "global": {
+ "loading": "Cargando",
+ "disableSecurity": "Desactivar esta seguridad, entiendo el riesgo.",
+ "passwordInvalidRequirements": "La contraseña necesita al menos 8 caracteres - 1 letra mayúscula, 1 letra minúscula, un número y un carácter especial",
+ "passwordConfirmationNotMatching": "La contraseña no coincide con la primera contraseña que escribió",
+ "download": "Descargar",
+ "newVersionModal": {
+ "title": "Una nueva versión esta disponible",
+ "content": "¿Quieres recargar para cargar la nueva versión?",
+ "confirmText": "Sí",
+ "cancelText": "Atrás"
+ },
+ "openWalletModal": {
+ "title": "Contraseña de Billetera",
+ "confirmText": "Abrir",
+ "cancelText": "Cancelar"
+ },
+ "invalidPasswordModal": {
+ "title": "Ups...",
+ "content": "Tu contraseña parece inválida",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Ups...",
+ "content": "La frase mnemotécnica no es válida.",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "La contraseña no es lo suficientemente compleja",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Ups...",
+ "content": "Se requiere permiso para acceder a su cámara para escanear el código QR",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Términos de Uso",
+ "privacyPolicy": "Política de privacidad",
+ "support": "Apoyo",
+ "donate": "Donar",
+ "network": "Estadísticas de red",
+ "miningPool": "Minería Junta",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Billetera Qwertycoin",
+ "tagLine": "en cualquier sitio. a cualquier momento. en cualquier lugar. en cualquier dispositivo.",
+ "tagLineTwo": "La forma más sencilla de usar Qwertycoin",
+ "actions": {
+ "loadWallet": "Cargar mi billetera",
+ "importWallet": "Importar una billetera",
+ "create": "Crear",
+ "createWallet": "Crear una billetera"
+ }
+ },
+ "accountPage": {
+ "title": "Cuenta",
+ "subtitle": "Resumen de cuenta e historial de transacciones",
+ "synchronizingBlock": {
+ "text": "Sincronizando..."
+ },
+ "balanceBlock": {
+ "title": "Su balance",
+ "unlocked": "Desbloqueado"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Historial de transacciones",
+ "pendingTxStatus": "Pendiente",
+ "emptyWallet": "Actualmente no tiene fondos en esta billetera.",
+ "waitSync": "Por favor, espere hasta que la billetera se actualice",
+ "beReallyPatient": "La configuración inicial puede tomar algún tiempo...",
+ "getCoinAddress": "Recibir QWC"
+ },
+ "txDetails": {
+ "title": "Detalles de la transacción",
+ "txHash": "Hachís de transacción",
+ "feesOnTx": "Tarifa de transacción",
+ "blockHeight": "Altura del bloque",
+ "paymentId": "ID de pago",
+ "unlockStatus": "Estado",
+ "unlockConfirm": "Confirmaciones",
+ "txPrivKey": "Clave privada de la transacción"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Cambie su contraseña",
+ "oldPassword": {
+ "label": "Contraseña anterior",
+ "invalid": "La contraseña no es valida"
+ },
+ "newPassword": {
+ "label": "Elija una nueva contraseña para proteger su billetera"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirme la nueva contraseña"
+ },
+ "confirm": "Cambiar la contraseña",
+ "modalSuccess": {
+ "title": "¡Contraseña cambiada!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Contatos"
+ },
+ "electionsPage": {
+ "title": "Eleições"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Tu billetera se está generando....",
+ "subtitle": "Esta casi terminada",
+ "waitingMessage": "Generando su billetera..."
+ },
+ "finalizationStep": {
+ "title": "Eso fue simple. ¡Tu cuenta está lista!",
+ "subtitle": "Prepárese para usar Qwertycoin como nunca lo ha hecho",
+ "passwordSelectionBlock": {
+ "label": "Proteja su billetera"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirme la contraseña"
+ },
+ "validPassword": "Use esta contraseña",
+ "backupBlock": {
+ "title": "Guarda tus credenciales privadas para la recuperación",
+ "option1": "Opción 1: ",
+ "option2": "Opción 2: ",
+ "titlePdf": "Descarga una copia en PDF",
+ "titleManualWrite": "Escribire mis llaves",
+ "privateKeys": "Llave privada",
+ "mnemonicPhrase": "Frase mnemotécnica",
+ "separatorManualMethodsSolution": " o ",
+ "confirmManuallyWritten": "Escribí mi frase semilla",
+ "warningMessage": "**¡No la pierdas!** No se puede recuperar si la pierdes. **No la compartas!** Sus fondos serán robados si usa este archivo o semilla en un sitio malicioso / de phishing. **Make a backup!** Asegúrala como los millones de dólares que un día puede valer. ",
+ "finishButton": "Lo entiendo. Continuar."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Riesgo de usar la Billetera Qwertycoin",
+ "content": "La Billetera Qwertycoin es una interfaz basado en web. Le ayuda a usar Qwertycoin sin ejecutar un nodo Qwertycoin completo. Le recomendamos que trate la Billetera Qwertycoin como tratará su billetera real."
+ }
+ },
+ "donatePage": {
+ "title": "Donar",
+ "subtitle": "Ayude a financiar el desarrollo y a pagar las cuentas.",
+ "webwalletBlock": {
+ "title": "BilleteraWeb",
+ "content": "Si desea ayudar a pagar por los servidores, a apoyar el desarrollo de nuevas funciones, y como a esta aplicación, considere una donación:
"
+ },
+ "devFundBlock": {
+ "title": "Fondo de desarrollo Qwertycoin",
+ "content": "Para ayudar a Qwertycoin, puede donar a estas direcciones"
+ }
+ },
+ "supportPage": {
+ "title": "Apoyo",
+ "subtitle": "¡Estamos aquí para ayudar!",
+ "getInTouchBlock": {
+ "title": "¡Pongámonos En Contacto!",
+ "content": "¿Tiene ideas o comentarios que podrían ayudarnos a mejorar la billetera? ¡Contáctenos!",
+ "discord": "Canal de Qwertycoin en Discord"
+ }
+ },
+ "networkPage": {
+ "title": "Estadísticas de red",
+ "subtitle": "Perspectivas sobre la red Qwertycoin",
+ "statsBlock": {
+ "connectNode": "Masternode conectado",
+ "hashrate": "Tasa de Hachís en red",
+ "height": "Altura de blockchain",
+ "difficulty": "Dificultad de red",
+ "lastTimeBlock": "Último bloque encontrado",
+ "lastReward": "Recompensa del último bloque"
+ }
+ },
+ "sendPage": {
+ "title": "Enviar QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Dirección de destino",
+ "placeholder": "Escriba la dirección a la que desea enviar los fondos.",
+ "invalid": "La dirección de destino no es válida",
+ "fundsTo": "Los fondos serán enviados a",
+ "receiver": "Destinatario",
+ "description": "Descripción"
+ },
+ "amount": {
+ "label": "Cantidad a enviar",
+ "invalid": "La cantidad es inválida"
+ },
+ "paymentId": {
+ "label": "Identificación de pago (opcional)",
+ "invalid": "El ID de pago no es válido. La longitud debe ser de 16 o 64 caracteres."
+ },
+ "sendButton": "Enviar",
+ "cancelButton": "Cancelar"
+ },
+ "qrCodeScanning": {
+ "explication": "Presentar el código QR"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Ups...",
+ "content": "No tiene fondos suficientes en su billetera para ejecutar esta transferencia.",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "¡Gracias por su donación!",
+ "content": "Su ayuda es apreciada. Esta donación ayudará a mejorar Qwertycoin",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transferencia enviada con éxito!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Ups...",
+ "content": "Ocurrió un error. Por favor reporte este error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Ups...",
+ "content": "Monto invalido",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creando transferencia ...",
+ "content": "Por favor espere..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizando la transferencia ...",
+ "content": "Por favor espere..."
+ },
+ "confirmTransactionModal": {
+ "title": "¿Confirmar transferencia?",
+ "content": "Cantidad: {amount} Tarifa: {fees} Total: {total}",
+ "confirmText": "Confirmar",
+ "cancelText": "Cancelar"
+ },
+ "waitingNfcModal": {
+ "title": "Esperando Nfc",
+ "content": "Acércate al otro dispositivo"
+ }
+ },
+ "receivePage": {
+ "title": "Recibir QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Su dirección para recibir fondos.:",
+ "label": "Da esta dirección para recibir fondos."
+ },
+ "qrCode": {
+ "title": "O personalizar el código QR:",
+ "labelAmount": "Cantidad (opcional)",
+ "labelRecipient": "Nombre del destinatario (opcional)",
+ "labelDescription": "Descripción de la transacción (opcional)",
+ "updateButton": "Actualizar"
+ }
+ },
+ "qrBlock": {
+ "title": "Su código QR personalizado"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Esperando Nfc",
+ "titleSuccess": "Etiqueta Nfc escrita",
+ "content": "Acercar la etiqueta NFC para escribir"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Capacidad de etiqueta insuficiente"
+ }
+ },
+ "miningPage": {
+ "title": "Minar directamente en tu navegador",
+ "subtitle": "Apoye la red minando y sea recompensado con QWC",
+ "parameterBlock": {
+ "title": "Parámetros",
+ "labelDestinationAddress": "Billetera a minar",
+ "labelThreads": "Número de procesos (más = mayor Tasa de Hachís)",
+ "start": "Comenzar",
+ "stop": "Detener"
+ },
+ "statisticsBlocks": {
+ "title": "Estadística",
+ "validShares": "Acciones validas",
+ "hashrate": "Tasa de Hachís",
+ "maxHashrate": "Tasa de Hachís Maxima",
+ "dedicatedHardware": "Al dedicar software y hardware de minería, podría ganar más y ayudar a descentralizar la red.",
+ "miningHandledBy": "Esta minería es manejada por la mineria junta pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Ajustes",
+ "subtitle": "Cambie sus parámetros aquí",
+ "versionBlock": {
+ "versionNumber": "Número de versión: ",
+ "versionCode": "Código de versión: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Velocidad para actualizar la billetera (consumirá más recursos)",
+ "fastest": "Lo más rápido",
+ "fast": "Rápido",
+ "medium": "Medio",
+ "slow": "Lento"
+ },
+ "language": {
+ "label": "Idioma"
+ },
+ "currency": {
+ "label": "Moneda nacional"
+ },
+ "readMinerTx": {
+ "label": "Leer transacciones mineras (solo para minería en solitario)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Cambiar mi contraseña de billetera",
+ "deleteWalletButton": "Eliminar mi billetera (copia local)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Altura de creación de la cartera."
+ },
+ "currentScanningHeight": {
+ "label": "Altura de escaneo actual"
+ },
+ "updateButton": "Actualizar"
+ },
+ "deleteWalletModal": {
+ "title": "Eliminar mi billetera (copia local)",
+ "content": "¿Está seguro de que REALMENTE desea eliminar su billetera?",
+ "confirmText": "Sí estoy seguro",
+ "cancelText": "Cancelar"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parámetros",
+ "password": {
+ "label": "Contraseña para proteger su billetera"
+ },
+ "passwordConfirm": {
+ "label": "Confirmar la contraseña",
+ "invalid": "La contraseña no coincide con la primera contraseña que escribió"
+ },
+ "importHeight": {
+ "label": "Importar desde la altura:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importar billetera desde un código QR",
+ "subtitle": "Importar una billetera desde una copia de seguridad sin conexión",
+ "qrCodeBlock": {
+ "title": "Código QR",
+ "startScanButton": "Iniciar el escaneo",
+ "importButton": "Importar"
+ },
+ "qrScanningBlock": {
+ "title": "Presentar el código QR"
+ }
+ },
+ "exportPage": {
+ "title": "Copia de seguridad de sus credenciales",
+ "publicAddressBlock": {
+ "title": "Tu direccion publica"
+ },
+ "pdfBlock": {
+ "title": "Copia de seguridad en PDF",
+ "downloadButton": "Descargar"
+ },
+ "warningBlock": {
+ "title": "Advertencia",
+ "content": "Si elige guardar sus claves privadas o su frase mnemotécnica, POR FAVOR, para su propia seguridad NO las almacene en texto sin cifrar. El archivo es una solución alternativa donde sus claves están encriptadas y contiene una copia de seguridad de todas sus transacciones, para ahorrarte una futura sincronización."
+ },
+ "exportBlock": {
+ "title": "Exportar sus credenciales en bruto(RAW)",
+ "privateKeysButton": "Obtener mis llaves privadas",
+ "mnemonicKeysButton": "Obtener mi frase mnemotécnica",
+ "fileButton": "Exportar a un archivo"
+ },
+ "walletKeysModal": {
+ "title": "Llaves privadas",
+ "confirmText": "OK",
+ "content": "Por favor, guarda cuidadosamente estas llaves. Poseerlas significa tener los fondos asociados ! Clave de gastos: {privSpendKey} Clave de vista privada: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Frase mnemotécnica",
+ "confirmText": "OK",
+ "content": "Por favor guarde cuidadosamente esta frase mnemotécnica. ¡ Poseerla significa poseer los fondos asociados ! La frase es: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "¿En qué idioma quieres tu frase mnemotécnica?",
+ "confirmText": "Exportar"
+ }
+ },
+ "importPage": {
+ "title": "Crear una billetera",
+ "subtitle": "A partir de claves, archivos o frases mnemónicas creadas previamente.",
+ "chooseMethod": "Elija su método de importación:",
+ "fromKeys": "De las llaves",
+ "fromFile": "De un archivo",
+ "fromMnemonic": "De una frase mnemotécnica.",
+ "fromQr": "De un código QR"
+ },
+ "termsOfUsePage": {
+ "title": "Términos de Uso",
+ "subtitle": "Por favor léalos cuidadosamente."
+ },
+ "privacyPolicyPage": {
+ "title": "Política de privacidad",
+ "subtitle": "Por favor léala cuidadosamente"
+ },
+ "importFromFilePage": {
+ "title": "Importando billetera desde un archivo de respaldo",
+ "subtitle": "Utilice su archivo de copia de seguridad(respaldo) para crear una cartera",
+ "walletBlock": {
+ "title": "Archivo de billetera",
+ "label": "Selecciona el archivo",
+ "importButton": "Importar"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importando billetera desde una frase mnemotécnica.",
+ "subtitle": "Use su frase para crear una billetera",
+ "mnemonicBlock": {
+ "title": "Frase mnemotécnica",
+ "mnemonic": {
+ "label": "Frase mnemotécnica: 25 palabras.",
+ "invalid": "La frase mnemotécnica no es válida.",
+ "language": "Idioma"
+ },
+ "importButton": "Importar"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importando billetera desde llaves",
+ "subtitle": "Use sus llaves para crear una billetera.",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "¿Quieres una billetera de solo ver?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Llaves de billetera",
+ "titleViewOnly": "Billetera de solo ver",
+ "privateSpend": {
+ "label": "Clave de gasto privado"
+ },
+ "privateView": {
+ "label": "Clave de vista privada",
+ "optional": "(opcional)"
+ },
+ "publicKey": {
+ "label": "Llave pública"
+ },
+ "importButton": "Importar"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/fa.json b/src/translations/fa.json
new file mode 100644
index 00000000..89fc36b4
--- /dev/null
+++ b/src/translations/fa.json
@@ -0,0 +1,522 @@
+{
+ "website": {
+ "title": "کیف پول Qwertycoin رسمی",
+ "description": "کیف پول Qwertycoin به طور کامل امن و کاربر است و تمام کربوهیدرات شما در دستگاه شما ذخیره می شود"
+ },
+ "messages": {
+ "menu": {
+ "home": "خانه",
+ "account": "حساب",
+ "send": "ارسال",
+ "receive": "دریافت",
+ "export": "پشتیبان گیری",
+ "donate": "ارسال کادو",
+ "elections": "انتخابات",
+ "contacts": "مخاطب",
+ "settings": "تنظیمات",
+ "disconnect": "خروج",
+ "network": "شبکه",
+ "mining": "استخراج"
+ },
+ "global": {
+ "loading": "در حال بارگیری",
+ "disableSecurity": "متوجه شدم",
+ "passwordInvalidRequirements": "یک رمز عبور قوی باید حداقل شامل هشت حرف با حروف بزرگ ، کوچک و سمبل باشد",
+ "passwordConfirmationNotMatching": "رمز عبور شما مطابقت ندارد",
+ "download": "دریافت",
+ "newVersionModal": {
+ "title": "نسخه ی جدیدی موجود است",
+ "content": "آیا مایل به بارگذاری مجدد صفحه و دریافت بروز رسانی میباشید ؟",
+ "confirmText": "بله",
+ "cancelText": "خیر"
+ },
+ "openWalletModal": {
+ "title": "'رمز عبور کیف پول'",
+ "confirmText": "تایید",
+ "cancelText": "لغو"
+ },
+ "invalidPasswordModal": {
+ "title": "متاسفیم",
+ "content": "رمز عبور اشتباه است",
+ "confirmText": "تایید"
+ },
+ "invalidMnemonicModal": {
+ "title": "متاسفیم",
+ "content": "کد سید پشتیبان شما اشتباه است",
+ "confirmText": "تایید"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "رمز عبور شما به میزان کافی قوی نیست",
+ "confirmText": "تایید"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "توجه",
+ "content": "برای دسترسی به دوربین شما نیاز به مجوز میباشد",
+ "confirmText": "تایید"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "شرایط استفاده",
+ "support": "پشتیبانی",
+ "donate": "ارسال کادو",
+ "network": "شبکه",
+ "miningPool": "استخر استخراج",
+ "github": "گیت هاب"
+ },
+ "homepage": {
+ "mainTitle": "کیف پول زیر وب",
+ "tagLine": "آسان ترین راه برای استفاده از کربو",
+ "tagLineTwo": "ساده ترین راه استفاده از Qwertycoin",
+ "actions": {
+ "loadWallet": "بارگیری کیف پول",
+ "importWallet": "درون ریزی کیف پول",
+ "create": "انجام بده",
+ "createWallet": "ایجاد کیف پول"
+ }
+ },
+ "accountPage": {
+ "title": "حساب کاربری",
+ "subtitle": "صفحه ی اصلی کیف پول کربو",
+ "synchronizingBlock": {
+ "text": "در حال همگام سازی با شبکه"
+ },
+ "balanceBlock": {
+ "title": "کل حساب",
+ "unlocked": "در دسترس"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "تاریخچه تراکنش ها",
+ "pendingTxStatus": "تایید نشده",
+ "emptyWallet": "کیف پول شما در حال حاضر خالی میباشد",
+ "waitSync": "لطفا برای بارگذاری مجدد کیف پول صبر کنید",
+ "beReallyPatient": "این پروسه ممکن است مقداری به طول بیانجامد",
+ "getCoinAddress": "آدرس کیف پول شما"
+ },
+ "txDetails": {
+ "title": "جزییات تراکنش ها",
+ "txHash": "هش تراکنش",
+ "feesOnTx": "کارمزد تراکنش",
+ "blockHeight": "شماره بلوک",
+ "paymentId": "شناسه پرداخت"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "تغییر رمز عبور",
+ "oldPassword": {
+ "label": "رمز عبور قدیم",
+ "invalid": "رمز عبور اشتباه است"
+ },
+ "newPassword": {
+ "label": "یک رمز عبور جدید انتخاب کنید",
+ "invalid": " یک رمز عبور قوی باید حداقل شامل هشت کاراکتر باشد ، بهمراه حروف بزرگ و کوچک و سمبل ها"
+ },
+ "newPasswordConfirm": {
+ "label": "رمز عبور جدید خود را تایید کنید"
+ },
+ "confirm": "تایید",
+ "modalSuccess": {
+ "title": "رمز عبور شما تغییر یافت",
+ "confirmText": "تایید"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "مخاطب"
+ },
+ "electionsPage": {
+ "title": "انتخابات"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "در حال ایجاد کیف پول",
+ "subtitle": "پروسه در حال اتمام است",
+ "waitingMessage": "در حال ایجاد"
+ },
+ "finalizationStep": {
+ "title": "تبریک کیف پول شما آماده است",
+ "subtitle": "برای استفاده از کربو آماده شوید",
+ "passwordSelectionBlock": {
+ "label": "از کیف پول خود محافظت کنید"
+ },
+ "passwordConfirmBlock": {
+ "label": "تایید رمز عبور"
+ },
+ "validPassword": "از این رمز عبور استفاده کن",
+ "backupBlock": {
+ "title": "یک کپی از اطلاعات رمزگذاری شده خود برای استفاده در آینده تهیه کنید ",
+ "option1": "گزینه اول ",
+ "option2": "گزینه دوم ",
+ "titlePdf": "دریافت فایل پی دی اف",
+ "titleManualWrite": "تهیه رو نوشت از کلید ها",
+ "privateKeys": "کلید شخصی",
+ "mnemonicPhrase": "کد سید",
+ "separatorManualMethodsSolution": " و یا ",
+ "confirmManuallyWritten": "رونوشت را تهیه کردم",
+ "warningMessage": "از این اطلاعات به خوبی نگهداری و محافظت کنید در صورت از دست دادن آن ها نمیتوانید کیف پول خود را بازگردانی کنید و یا امکان دارد کوین های شما به سرقت روند طوری از آن ها نگهداری کنید که انگار میلیون ها دلار ارزش دارند ",
+ "finishButton": "متوجه شدم ادامه بده"
+ }
+ },
+ "disclaimerBlock": {
+ "title": "ریسک استفاده از کیف پول کربو",
+ "content": "کیف پول آنلاین کربو برای استفاده آسان تر از کیف پول کربو طراحی شده و برای استفاده از آن نیازه به نگهداری از فایل های زنجیره بلوکی نمیباشد به شما توصیه میکنیم از کیف پول خود به خوبی محافظت کنید"
+ }
+ },
+ "donatePage": {
+ "title": "ارسال کادو",
+ "subtitle": "با ارسال کادو به توسعه کربو کمک کنید",
+ "webwalletBlock": {
+ "title": "ولت آنلاین",
+ "content": "ولت آنلاین توسط برنامه نویسان کربو توسعه داده میشود اگر به تداوم پروژه اهمیت میدهید لطفا مقداری کربو به عنوان کادو برای ما بفرستید
"
+ },
+ "masariFundBlock": {
+ "title": "کیف پول جهت ارسال کادو",
+ "content": "اگر مایل به ارسال کادو هستید آن را به آدرس کیف پول زیر ارسال نمایید"
+ }
+ },
+ "supportPage": {
+ "title": "پشتیبانی",
+ "subtitle": "اگر به کمک نیاز دارید ما میتوانیم به شما کمک کنیم",
+ "getInTouchBlock": {
+ "title": "با ما در تماس باشید",
+ "content": "اگر ایده یا پیشنهادی دارید که به ارتقای این کیف پول کمک میکنید با ما در تماس باشید",
+ "discord": "سرور دیسکورد کربو"
+ }
+ },
+ "networkPage": {
+ "title": "وضعیت شبکه",
+ "subtitle": "داخل شبکه ی کربو",
+ "statsBlock": {
+ "connectNode": "Masternode ارتباطی",
+ "hashrate": "هش ریت شبکه",
+ "height": "ارتفاع زنجیره بلوکی",
+ "difficulty": "سختی شبکه",
+ "lastTimeBlock": "آخرین بلاک پیدا شده",
+ "lastReward": "آخرین پاداش بلاک"
+ }
+ },
+ "sendPage": {
+ "title": "ارسال کربو",
+ "sendBlock": {
+ "address": {
+ "label": "ارسال به آدرس",
+ "invalid": "آدرس اشتباه است",
+ "fundsTo": "کربو ها به این آدرس ارسال میشوند",
+ "receiver": "دریافت کننده",
+ "description": "توضیحات"
+ },
+ "amount": {
+ "label": "مقدار جهت ارسال",
+ "invalid": "مقدار اشتباه"
+ },
+ "paymentId": {
+ "label": "شناسه واریز",
+ "invalid": "شناسه ی واریز اشتباه است مقداری را بین شانزده تا شصت و چهار کاراکتر وارد نمایید"
+ },
+ "sendButton": "ارسال",
+ "cancelButton": "لغو"
+ },
+ "qrCodeScanning": {
+ "explication": "اسکن کیو آر کد"
+ },
+ "notEnoughMoneyModal": {
+ "title": "متاسفیم",
+ "content": "شما به میزان کافی کربو برای ارسال ندارید",
+ "confirmText": "تایید"
+ },
+ "thankYouDonationModal": {
+ "title": "برای ارسال کادو از شما متشکریم",
+ "content": "کمک شما بسیار تاثیرگذار است کمک شما برای ادامه به کار پروژه کربو بسیار ضروری است",
+ "confirmText": "بستن"
+ },
+ "transferSentModal": {
+ "title": "ارسال با موفقیت انجام شد",
+ "confirmText": "بستن"
+ },
+ "transferExceptionModal": {
+ "title": "متاسفیم",
+ "content": "خطایی رخ داده است لطفا آن را گزارش دهید {details}",
+ "confirmText": "بستن"
+ },
+ "invalidAmountModal": {
+ "title": "متاسفیم",
+ "content": "مقدار اشتباه است",
+ "confirmText": "بستن"
+ },
+ "creatingTransferModal": {
+ "title": "در حال آماده سازی تراکنش",
+ "content": "لطفا اندکی صبر کنید"
+ },
+ "finalizingTransferModal": {
+ "title": "تراکنش در حال انجام است",
+ "content": "لطفا اندکی صبر کنید"
+ },
+ "confirmTransactionModal": {
+ "title": "آیا تراکنش را تایید میکنید",
+ "content": "'مقدار : {amount} کارمزد : {fees} مقدار کل : {total}",
+ "confirmText": "تایید",
+ "cancelText": "لغو"
+ },
+ "waitingNfcModal": {
+ "title": "در انتظار ان اف سی",
+ "content": "لطفا به دستگاه دیگر نزدیک شوید"
+ }
+ },
+ "receivePage": {
+ "title": "دریافت کربو",
+ "receiveBlock": {
+ "address": {
+ "title": "آدرس جهت دریافت کوین ها",
+ "label": "این آدرس را اضافه کنید اگر میخواهید کوین ها را دریافت کنید"
+ },
+ "qrCode": {
+ "title": "یا از کیو آر کد استفاده کنید",
+ "labelAmount": "مقدار",
+ "labelRecipient": "نام دریافت کننده دلبخواه است",
+ "labelDescription": "توضیحات تراکنش دلبخواه است",
+ "updateButton": "به روز رسانی"
+ }
+ },
+ "qrBlock": {
+ "title": "کد کیو آر شما"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "در انتظار ان اف سی",
+ "titleSuccess": "تگ ان اف سی در حال نوشتن",
+ "content": "لطفا به تگ ان اف سی دستگاه خود را نزدیک کنید"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "مقدار تگ نامناسب"
+ }
+ },
+ "miningPage": {
+ "title": "اطلاعات استخراج",
+ "subtitle": "با استخراج شبکه کربو را بهبود بخشیده و به عنوان جایزه کربو دریافت کنید",
+ "contentBlock": {
+ "title": "چگونه شروع به استخراج کنید",
+ "intro": "استخراج به شبکه کربو بسیار کمک میکند و برای شما به عنوان جایزه کربو ارسال میشود ، شما به تجهیزات خاصی جهت استخراج نیاز ندارید",
+ "linkText": "برای خواندن راهنما اینجا کلیک کنید"
+ }
+ },
+ "settingsPage": {
+ "title": "تنظیمات",
+ "subtitle": "تنظیمات را از اینجا تغییر دهید",
+ "versionBlock": {
+ "versionNumber": "شماره نسخه : ",
+ "versionCode": "کد نسخه : "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "به روز رسانی سرعت کیف پول که باعث استفاده منابع بیشتری میشود",
+ "fastest": "سریعترین",
+ "fast": "سریع",
+ "medium": "متوسط",
+ "slow": "آرام"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "پول ملی"
+ },
+ "readMinerTx": {
+ "label": "تراکنش های ماینینگ فقط بصورت تکی"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "تغییر رمز عبور کیف پول",
+ "deleteWalletButton": "حذف کیف پول از روی سیستم شما",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "ارتفاع زنجیره بلاکی هنگام ساخت کیف پول"
+ },
+ "currentScanningHeight": {
+ "label": "ارتفاع کنونی جهت اسکن"
+ },
+ "updateButton": "به روز رسانی"
+ },
+ "deleteWalletModal": {
+ "title": "حذف کیف پول نسخه محلی",
+ "content": "آیا مطمین هستید که میخواهید کیف پول خود را حذف نمایید؟",
+ "confirmText": "بله مطمینم",
+ "cancelButtonText": "لغو"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "پارامترها",
+ "password": {
+ "label": "رمز عبور جهت محافظت از کیف پول شما"
+ },
+ "passwordConfirm": {
+ "label": "تایید رمز عبور",
+ "invalid": "رمزعبور با رمز عبور وارد شده مطابقت ندارد"
+ },
+ "importHeight": {
+ "label": "ارتفاع زنجیره بلوکی برای شروع"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "کیف پول خود را به وسیله کد کیو آر درون ریزی کنید",
+ "subtitle": "کیف پول خود را به وسیله فایل درون ریزی کنید",
+ "qrCodeBlock": {
+ "title": "کد کیو آر",
+ "startScanButton": "شروع اسکن",
+ "importButton": "درون ریزی"
+ },
+ "qrScanningBlock": {
+ "title": "متصل کردن کد کیو آر"
+ }
+ },
+ "exportPage": {
+ "title": "اطلاعات خود را ذخیر کنید",
+ "publicAddressBlock": {
+ "title": "آدرس کیف پول شما"
+ },
+ "pdfBlock": {
+ "title": "فایل پی دی اف",
+ "downloadButton": "دریافت"
+ },
+ "warningBlock": {
+ "title": "اخطار",
+ "content": "لطفا اگر اطلاعات کیف پول خود را ذخیره کردید آن ها را با دیگران به اشتراک نگذارید این تمام اطلاعاتی است که برای درون ریزی کیف پول خود در آینده نیاز دارید"
+ },
+ "exportBlock": {
+ "title": "Извези СИРОВЕ податке",
+ "privateKeysButton": "Моји приватни кључеви",
+ "mnemonicKeysButton": "Моја мнемоничка фраза",
+ "fileButton": "Сачувај као фајл"
+ },
+ "walletKeysModal": {
+ "title": "کلید های شخصی",
+ "confirmText": "تایید",
+ "content": "لطفا این اطلاعات را در یک مکان ایمن نگهداری کنیددر دست داشتن این اطلاعات به معنی داشتن حق کیف پول شماست و با داشتن این اطلاعات دیگران میتوانند به کیف پول شما دسترسی پیدا کنند ! کلید شخصی ارسال : {privSpendKey} کلید شخصی مشاهده : {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "کلید های شخصی",
+ "confirmText": "تایید",
+ "content": "لطفا در مورد کد سید احتیاط کنید و آن را ایمن نگه داریدداشتن این کلید ها به شما اجازه دسترسی به این کیف پول در آینده را میدهد کد شما : {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "زبان مورد نظر برای کد سید خود را انتخاب کنید",
+ "confirmText": "تایید خروجی"
+ }
+ },
+ "importPage": {
+ "title": "درون ریزی کیف پول",
+ "subtitle": "از کلیدهای قبلی",
+ "chooseMethod": "یک متد انتخاب کنید",
+ "fromKeys": "با استفاده از کلید ها",
+ "fromFile": "با استفاده از فایل ",
+ "fromMnemonic": "با استفاده از کد سید",
+ "fromQr": "با استفاده از کد تصویری کیو آر"
+ },
+ "termsOfUsePage": {
+ "title": "شرایط استفاده",
+ "subtitle": "لطفا با دقت مطالعه نمایید"
+ },
+ "importFromFilePage": {
+ "title": "دزون ریزی کیف پول با استفاده از فایل",
+ "subtitle": "از فایل دانلود شده قبل در همین کیف پول استفاده کنید",
+ "walletBlock": {
+ "title": "فایل کیف پول",
+ "label": "انتخاب کنید",
+ "importButton": "درون ریزی"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "درون ریزی با استفاده از کد سید",
+ "subtitle": "استفاده از کد سید برای درون ریزی کیف پول",
+ "mnemonicBlock": {
+ "title": "کد سید",
+ "mnemonic": {
+ "label": "کد سید باید بیست و پنج کلمه باشد",
+ "invalid": "کد سید اشتباه است",
+ "language": "زبان"
+ },
+ "importButton": "درون ریزی"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "درون ریزی کیف پول با کلید ها",
+ "subtitle": "از کلید های شخصی برای درون ریزی کیف پول خود استفاده کنید",
+ "parametersBLock": {
+ "viewOnlyWallet": {
+ "label": "آیا تنها یک کیف پول صرفا قابل مشاهده میخواهید ؟",
+ "info": "لطفا توجه کنید که کیف پول های صرفا برای مشاهده تنها موجودی کیف پول شما را نشان میدهند و نمیتوانید کوین ارسال کنید"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "کلید های کیف پول",
+ "titleViewOnly": "کیف پول صرفا قابل مشاهده",
+ "privateSpend": {
+ "label": "کلید شخصی شما"
+ },
+ "privateView": {
+ "label": "کلید شخصی برای مشاهده",
+ "optional": "دلبخواه"
+ },
+ "publicKey": {
+ "label": "کلید عمومی"
+ },
+ "importButton": "درون ریزی"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": false
+ }
+ }
+}
diff --git a/src/translations/fr.json b/src/translations/fr.json
index 183f4b32..9293bf52 100644
--- a/src/translations/fr.json
+++ b/src/translations/fr.json
@@ -1,495 +1,539 @@
{
- "website":{
- "title":"Portefeuille officiel en ligne pour Karbo ",
- "description":"Portefeuille en ligne officiel pour la monnaie Karbo, anonyme, sécurisé et entièrement géré dans votre navigateur for une sécurité optimale"
+ "website": {
+ "title": "Portefeuille officiel en ligne pour Qwertycoin ",
+ "description": "Portefeuille en ligne officiel pour la monnaie Qwertycoin, anonyme, sécurisé et entièrement géré dans votre navigateur for une sécurité optimale"
},
"messages": {
- "menu": {
- "home": "Accueil",
- "account": "Compte",
- "send": "Envoyer",
- "receive": "Recevoir",
- "export": "Exporter",
- "donate": "Contribuer",
- "settings": "Paramètres",
- "disconnect": "Déconnection",
- "network": "Stats du réseau",
- "mining": "Minage"
- },
- "global": {
- "loading": "Chargement",
- "disableSecurity":"Désactiver cette sécurité. Je comprend les risques",
- "passwordInvalidRequirements":"Le mot de passe doit avoir au moins 8 caractères, 1 lettre majuscule, 1 mettre minuscule, un chiffre et un caractère spécial",
- "passwordConfirmationNotMatching":"Le mot de passe ne correspond pas au premier écrit",
- "download":"Télécharger",
- "newVersionModal":{
- "title":"Une nouvelle version est disponible",
- "content":"Voulez vous recharger pour passer passer sur la nouvelle version ?",
- "confirmText":"Oui",
- "cancelText":"Plus tard"
- },
- "openWalletModal":{
- "title":"Mot de passe",
- "confirmText":"Ouvrir",
- "cancelText":"Annuler"
- },
- "invalidPasswordModal":{
- "title":"Oups...",
- "content":"Votre mot de passe semble invalide",
- "confirmText":"OK"
- },
- "invalidMnemonicModal":{
- "title":"Oups...",
- "content":"La phrase mnémotechnique est invalide",
- "confirmText":"OK"
- },
- "passwordNotComplexEnoughModal":{
- "title":"Le mot de passe n'est pas assez complexe",
- "confirmText":"OK"
- },
- "permissionRequiredForCameraModal":{
- "title":"Oups...",
- "content":"Il est nécessaire de donner l'accès à la caméra afin de pouvoir scanner le QR Code",
- "confirmText":"OK"
- }
- },
- "bottom": {
- "termsOfUse": "Conditions générales d'utilisation",
- "privacyPolicy": "Politique de confidentialité",
- "support": "Support",
- "donate": "Contribuer",
- "network": "Stats du réseau",
- "miningPool": "Pool de minage",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Portefeuille sécurisé pour Karbo",
- "tagLine": "Le moyen le plus simple d'utiliser Karbo, n'importe où, n'importe quand",
- "actions": {
- "loadWallet": "Charger mon portefeuille",
- "importWallet": "Importer un portefeuille",
- "create": "Créer",
- "createWallet": "Créer un portefeuille"
- },
- "notes": {
- "secure": {
- "title": "Sécurisé",
- "description": "Aucun serveur, entièrement chiffré !"
- },
- "fast": {
- "title": "Rapide",
- "description": "Envoyer n'importe, n'importe ou"
- },
- "technology": {
- "title": "Technologie unique",
- "description": "Connectée directement à la Blockchain Karbo !"
- },
- "openSource": {
- "title": "Entièrement open-source",
- "description": "Disponible sur github"
- }
- }
- },
- "accountPage": {
- "title": "Mon compte",
- "subtitle": "Apperçu de votre compte et de l'historique des transactions",
- "synchronizingBlock": {
- "text": "Synchronisation en cours "
- },
- "balanceBlock": {
- "title": "Votre solde",
- "unlocked": "Disponible"
- },
- "historyBlock": {
- "title": "Historique des transactions",
- "pendingTxStatus": "En attente",
- "emptyWallet": "Vous n'avez aucun fond sur ce portefeuille",
- "waitSync": "Veuillez attendre la fin de la synchronisation",
- "beReallyPatient": "La première synchronisation peut prendre quelques minutes...",
- "getCoinAddress": "Obtenir mon adresse pour recevoir des KRB"
- },
- "txDetails":{
- "title":"Détails de la transaction",
- "txHash":"Tx hash",
- "feesOnTx":"Frais sur la tx",
- "blockHeight":"Hauteur sur la blockchain",
- "paymentId":"ID du paiement",
- "txPrivKey":"Clé privée de transaction"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Changer mon mot de passe",
- "oldPassword":{
- "label":"Ancien",
- "invalid":"Mot de passe invalid"
- },
- "newPassword":{
- "label":"Nouveau mot de passe pour sécuriser"
- },
- "newPasswordConfirm":{
- "label":"Confirmer mon nouveau mot de passe"
- },
- "confirm":"Changer",
- "modalSuccess":{
- "title":"Mot de passe changé !",
- "confirmText":"OK"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Votre portefeuille se génère ...",
- "subtitle":"Plus que quelques instants",
- "waitingMessage":"Génération du portefeuille ..."
- },
- "finalizationStep":{
- "title":"C'était simple. Votre portefeuille est prêt !",
- "subtitle":"Soyer près à utiliser Karbo le plus simplement possible",
- "passwordSelectionBlock":{
- "label":"Sécuriser mon portefeuille"
- },
- "passwordConfirmBlock":{
- "label":"Confirmer le mot de passe"
- },
- "validPassword":"Utiliser ce mot de passe",
- "backupBlock":{
- "title":"Télécharger une copie chiffrée de mes identifiants pour un futur usage",
- "option1": "Option 1: ",
- "option2": "Option 2: ",
- "titlePdf":"Télécharger une copie PDF",
- "titleManualWrite":"Ecrire mes cléfs d'accès",
- "privateKeys":"Cléfs privées",
- "mnemonicPhrase":"Phrase mnémotechnique",
- "separatorManualMethodsSolution":" ou ",
- "confirmManuallyWritten":"Je les ais écrites",
- "warningMessage":"**Ne les perdez pas!** Il est impossible des les récupérer si vous les perdez. **Ne les paratagez pas!** Vos fonds peuvent être volé si vous utilisez ces informations sur des sites-tiers (malicieux/phishing). **Faites une sauvegarde!** Sécutisez vos identifiants comme si si vous possédiez des millions de dollars. ",
- "finishButton":"Je comprend. Continuer"
- }
- },
- "disclaimerBlock":{
- "title":"Risques liés à l'utilisation de KarboWallet",
- "content":"KarboWallet est un service web. Il vous aide à utiliser Karbo facilement sans avoir un installer des logiciels. Nous vous conseillons de traiter ce site comme vous traiteriez votre portefeuille."
- }
- },
- "donatePage":{
- "title":"Contribuer",
- "subtitle":"Aidez à financer le développement et payer les factures de ce service",
- "webwalletBlock":{
- "title":"Portefeuille en ligne",
- "content":"Ce portefeuille est développé par Gnock sur son temps libre. Si vous voulez aider au développement, payer les serveur et que vous aimez ce service, considérez une petite donation:
"
- },
- "devFundBlock":{
- "title":"Fond de développement de Karbo",
- "content":"Pour aidez Karbo globalement, vous pouvez donner à cette adresse"
- }
- },
- "supportPage":{
- "title":"Support",
- "subtitle":"Vous avez besoins d'aide, nous somme la pour aider !",
- "getInTouchBlock":{
- "title":"Reston en contact !",
- "content":"Vous avez des idées, des retours pour aider à améliorer le service ? Contactez nous !",
- "discord":"Discord Officiel de Karbo"
- }
- },
- "networkPage":{
- "title":"Statistiques du réseau",
- "subtitle":"Détails sur le réseaux Karbo",
- "statsBlock":{
- "hashrate":"Hashrate du réseau",
- "height":"Hauteur de la Blockchain",
- "difficulty":"Difficulty du réseau",
- "lastTimeBlock":"Dernier block trouvé",
- "lastReward":"Dernière récompense"
- }
- },
- "sendPage":{
- "title":"Envoyer des KRB",
- "sendBlock":{
- "address":{
- "label":"Adresse de destination",
- "placeholder":"Écrivez l'adresse où vous voulez envoyer des fonds",
- "invalid":"L'adresse de destination est invalide",
- "fundsTo":"Les fonds seront envoyé à ",
- "receiver":"Destinataire",
- "description":"Description"
- },
- "amount":{
- "label":"Montant à envoyer",
- "invalid":"Le montant est invalide"
- },
- "paymentId":{
- "label":"Identifiant du payment (optionnel)",
- "invalid":"L'identifiant du paiement est invalid. La longeur doit être de 16 ou 64 caractères"
- },
- "sendButton":"Envoyer",
- "cancelButton":"Annuler"
- },
- "qrCodeScanning":{
- "explication":"Présentez le QR Code"
- },
- "notEnoughMoneyModal":{
- "title":"Oups...",
- "content":"Vous n'avez pas assez de fonds pour effectuer ce tranfert",
- "confirmText":"OK"
- },
- "thankYouDonationModal":{
- "title":"Merci pour votre donation !",
- "content":"Votre aide est apprécié. Cette donation contribuera à améliorer Karbo",
- "confirmText":"Fermer"
- },
- "transferSentModal":{
- "title":"Transfert envoyé avec succès!",
- "confirmText":"Fermer"
- },
- "transferExceptionModal":{
- "title":"Oups...",
- "content":"Une erreur est survenue. Merci de nous envoyer de rapport: {details}",
- "confirmText":"Fermer"
- },
- "invalidAmountModal":{
- "title":"Oups...",
- "content":"Montant invalide",
- "confirmText":"Fermer"
- },
- "creatingTransferModal":{
- "title":"Création du transfert ...",
- "content":"Veuillez patienter ..."
- },
- "finalizingTransferModal":{
- "title":"Finalisation du transfert ...",
- "content":"Veuillez patienter ..."
- },
- "confirmTransactionModal":{
- "title":"Confirmer le transfert ?",
- "content":"Montant: {amount} Frais: {fees} Total: {total}",
- "confirmText":"Confirmer",
- "cancelText":"Annuler"
- },
- "waitingNfcModal":{
- "title":"Attente du Nfc",
- "content":"Veuillez rapprocher votre téléphone de l'autre appareil"
- }
- },
- "receivePage":{
- "title":"Recevoir des KRB",
- "receiveBlock":{
- "address":{
- "title":"Votre adresse pour recevoir des fonds",
- "label":"Donner cette adresse pour recevoir des fonds"
- },
- "qrCode":{
- "title":"Ou personnalisez ce QR Code",
- "labelAmount":"Montant (optionnel)",
- "labelRecipient":"Nom du destinataire (optionnel)",
- "labelDescription":"Description (optionnel)",
- "updateButton":"Mettre à jour"
- }
- },
- "qrBlock":{
- "title":"Votre QR code customisé"
- },
- "waitingNfcToWriteModal":{
- "title":"Waiting Nfc",
- "titleSuccess":"Nfc Tag written",
- "content":"Bring closer the NFC tag to write"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Tag capacity insufficient"
- }
- },
- "miningPage":{
- "title":"Miner directement depuis votre navigateur",
- "subtitle":"Supportez lé réseau en minant et en améliorant la stabilité du réseau tout en étant réponsé en KRB",
- "parameterBlock":{
- "title":"Paramètres",
- "labelDestinationAddress":"Portefeuille de destination",
- "labelThreads":"Nombre de threads (plus = plus de hashrate)",
- "start":"Commençer",
- "stop":"Arrêter"
- },
- "statisticsBlocks":{
- "title":"Statistiques",
- "validShares":"Partages valides",
- "hashrate":"HashRate",
- "maxHashrate":"HashRate max",
- "dedicatedHardware":"Avec un logiciel spécifique pour le minage, vous pourriez obtenir entre 2 et 3 fois plus de hashrate. Cela vous permettrait également de miner avec votre carte graphique (si vous en avez une).",
- "miningHandledBy":"Le minage est géré par la pool get.masaricoin.com"
- }
- },
- "settingsPage":{
- "title":"Paramètres",
- "subtitle":"Changez vos paramètres ici",
- "versionBlock":{
- "versionNumber":"Numéro de version: ",
- "versionCode":"Code de la version: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Vitesse d'actualisation du portefeuille (will consume more energy)",
- "fastest":"Le plus vite",
- "fast":"Rapide",
- "medium":"Normal",
- "slow":"Lent"
- },
- "language":{
- "label":"Language"
- },
- "readMinerTx":{
- "label":"Lire les transactions de minage (uniquement pour les personnes faisant du solo-minage)"
- }
- },
- "changePasswordButton":"Changer le mot de passe de mon portefeuille",
- "deleteWalletButton":"Supprimer mon portefeuille (copie locale)",
- "walletSettings":{
- "creationHeight":{
- "label":"Hauteur à laquelle le portefeuille a été créé"
- },
- "currentScanningHeight": {
- "label": "Hauteur actuelle de scan de la blockchain"
- },
- "updateButton":"Mettre à jour"
- },
- "deleteWalletModal":{
- "title":"Supprimer mon portefeuille (copie locale)",
- "content":"Etes vous VRAIMENT sûr de vouloir supprimer votre portefeuille ?",
- "confirmText":"Oui je suis sûr",
- "cancelText":"Annuler"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Paramètres",
- "password":{
- "label":"Mot de passe pour protéger le portefeuille"
- },
- "passwordConfirm":{
- "label":"Confirmer le mot de passe",
- "invalid":"Le mot de passe ne correspond pas au premier entré"
- },
- "importHeight":{
- "label":"Hauteur de création du wallet"
- }
- }
- },
- "importFromQrPage":{
- "title":"Importer depuis un QR code",
- "subtitle":"Importation depuis une sauvegarder hors ligne",
- "qrCodeBlock":{
- "title":"QR code",
- "startScanButton":"Commençer le scan",
- "importButton":"Importer"
- },
- "qrScanningBlock":{
- "title":"Présentez le QR code"
- }
- },
- "exportPage":{
- "title":"Sauvegarder de vos identifiants",
- "publicAddressBlock":{
- "title":"Votre adresse publique"
- },
- "pdfBlock":{
- "title":"Sauvegarde en Pdf",
- "downloadButton":"Télécharger"
- },
- "warningBlock":{
- "title":"Attention",
- "content":"Si vous choisissez de sauvegarder vos cléfs privées ou la phrase mnémotechnique, NE LE ECRIVEZ PAS dans un endroit non sécurisé (chiffré) ceci pour votre propre sécurité. Le fichier est une solution alternative où les identifiants sont chiffrés et contient également une sauvegarde de l'historique de vos transactions"
- },
- "exportBlock":{
- "title":"Exporter vos identifiants (non chiffrés)",
- "privateKeysButton":"Obtenir mes cléfs privées",
- "mnemonicKeysButton":"Obtenir ma phrase mnémotechnique",
- "fileButton":"Exporter ver un fichier"
- },
- "walletKeysModal":{
- "title":"Cléfs privées",
- "confirmText":"OK",
- "content":"Merci de stocker soigneusement ces cléfs. Les posséder signifie posséder les fonds associé ! Clé privée de dépense: {privSpendKey} Clé privée de visualisation: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Clé privée",
- "confirmText":"OK",
- "content":"Merci de stocker soigneusement cette phrase mnémotechnique. La posséder signifie posséder les fonds associé ! La phrase est : {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"Dans quelle langue souhaitez vous exporter la phrase mnémotechnique ?",
- "confirmText":"Exporter"
- }
- },
- "importPage":{
- "title":"Créer un portefeuille",
- "subtitle":"Depuis des cléfs, une fichier ou une phrase mnémotechnique",
- "chooseMethod":"Choisissez votre méthode d'import",
- "fromKeys":"Depuis des cléfs privées",
- "fromFile":"Depuis un fichier",
- "fromMnemonic":"Depuis une phrase mnémotechnique",
- "fromQr":"Depuis un QR code"
- },
- "termsOfUsePage":{
- "title":"Conditions d'utilisations",
- "subtitle":"Merci de les lire et d'y préter attention"
- },
- "privacyPolicyPage":{
- "title":"Privacy Policy",
- "subtitle":"Merci de les lire et d'y préter attention"
- },
- "importFromFilePage":{
- "title":"Importer un portefeuille depuis un fichier",
- "subtitle":"Utilisez votre sauvegarder pour récréer le portefeuille",
- "walletBlock":{
- "title":"Fichier du portefeuille",
- "label":"Sélectionner",
- "importButton":"Importer"
- }
- },
- "importFromMnemonicPage":{
- "title":"Importer un portefeuille depuis une phrase mnémotechnique",
- "subtitle":"Utiliser la phrase pour créer un portefeuille",
- "mnemonicBlock":{
- "title":"Phrase mnémotechnique",
- "mnemonic":{
- "label":"Phrase mnémotechnique : 25 mots",
- "invalid":"la phrase mnémotechnique est invalide",
- "language":"Langue"
- },
- "importButton":"Importer"
- }
- },
- "importFromKeysPage":{
- "title":"Importer un portefeuille depuis des cléfs",
- "subtitle":"Utilisez vos cléfs pour créer un portefeuille",
- "parametersBlock":{
- "viewOnlyWallet":{
- "label":"Voulez vous faire un portefeuille uniquement pour visualiser les fonds"
- }
- },
- "keysBlock":{
- "titleNotViewOnly":"Cléfs privées",
- "titleViewOnly":"Cléfs de visualisation uniquement",
- "privateSpend":{
- "label":"Cléf privée de dépense"
- },
- "privateView":{
- "label":"Cléf privée de visualisation",
- "optional":"(optionnel)"
- },
- "publicKey":{
- "label":"Cléf publique"
- },
- "importButton":"Importer"
- }
- }
+ "menu": {
+ "home": "Accueil",
+ "account": "Compte",
+ "send": "Envoyer",
+ "receive": "Recevoir",
+ "export": "Exporter",
+ "donate": "Contribuer",
+ "elections": "Élections",
+ "contacts": "Contacts",
+ "settings": "Paramètres",
+ "disconnect": "Déconnection",
+ "network": "Stats du réseau",
+ "mining": "Minage"
+ },
+ "global": {
+ "loading": "Chargement",
+ "disableSecurity": "Désactiver cette sécurité. Je comprend les risques",
+ "passwordInvalidRequirements": "Le mot de passe doit avoir au moins 8 caractères, 1 lettre majuscule, 1 mettre minuscule, un chiffre et un caractère spécial",
+ "passwordConfirmationNotMatching": "Le mot de passe ne correspond pas au premier écrit",
+ "download": "Télécharger",
+ "newVersionModal": {
+ "title": "Une nouvelle version est disponible",
+ "content": "Voulez vous recharger pour passer passer sur la nouvelle version ?",
+ "confirmText": "Oui",
+ "cancelText": "Plus tard"
+ },
+ "openWalletModal": {
+ "title": "Mot de passe",
+ "confirmText": "Ouvrir",
+ "cancelText": "Annuler"
+ },
+ "invalidPasswordModal": {
+ "title": "Oups...",
+ "content": "Votre mot de passe semble invalide",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oups...",
+ "content": "La phrase mnémotechnique est invalide",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "Le mot de passe n'est pas assez complexe",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oups...",
+ "content": "Il est nécessaire de donner l'accès à la caméra afin de pouvoir scanner le QR Code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Conditions générales d'utilisation",
+ "privacyPolicy": "Politique de confidentialité",
+ "support": "Support",
+ "donate": "Contribuer",
+ "network": "Stats du réseau",
+ "miningPool": "Pool de minage",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Portefeuille sécurisé pour Qwertycoin",
+ "tagLine": "Le moyen le plus simple d'utiliser Qwertycoin, n'importe où, n'importe quand",
+ "tagLineTwo": "Le moyen le plus simple d'utiliser Qwertycoin",
+ "actions": {
+ "loadWallet": "Charger mon portefeuille",
+ "importWallet": "Importer un portefeuille",
+ "create": "Créer",
+ "createWallet": "Créer un portefeuille"
+ }
+ },
+ "accountPage": {
+ "title": "Mon compte",
+ "subtitle": "Apperçu de votre compte et de l'historique des transactions",
+ "synchronizingBlock": {
+ "text": "Synchronisation en cours "
+ },
+ "balanceBlock": {
+ "title": "Votre solde",
+ "unlocked": "Disponible"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Historique des transactions",
+ "pendingTxStatus": "En attente",
+ "emptyWallet": "Vous n'avez aucun fond sur ce portefeuille",
+ "waitSync": "Veuillez attendre la fin de la synchronisation",
+ "beReallyPatient": "La première synchronisation peut prendre quelques minutes...",
+ "getCoinAddress": "Obtenir mon adresse pour recevoir des QWC"
+ },
+ "txDetails": {
+ "title": "Détails de la transaction",
+ "txHash": "Tx hash",
+ "feesOnTx": "Frais sur la tx",
+ "blockHeight": "Hauteur sur la blockchain",
+ "paymentId": "ID du paiement",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Clé privée de transaction"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Changer mon mot de passe",
+ "oldPassword": {
+ "label": "Ancien",
+ "invalid": "Mot de passe invalid"
+ },
+ "newPassword": {
+ "label": "Nouveau mot de passe pour sécuriser"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirmer mon nouveau mot de passe"
+ },
+ "confirm": "Changer",
+ "modalSuccess": {
+ "title": "Mot de passe changé !",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Contacts"
+ },
+ "electionsPage": {
+ "title": "Élections"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Votre portefeuille se génère ...",
+ "subtitle": "Plus que quelques instants",
+ "waitingMessage": "Génération du portefeuille ..."
+ },
+ "finalizationStep": {
+ "title": "C'était simple. Votre portefeuille est prêt !",
+ "subtitle": "Soyer près à utiliser Qwertycoin le plus simplement possible",
+ "passwordSelectionBlock": {
+ "label": "Sécuriser mon portefeuille"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirmer le mot de passe"
+ },
+ "validPassword": "Utiliser ce mot de passe",
+ "backupBlock": {
+ "title": "Télécharger une copie chiffrée de mes identifiants pour un futur usage",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Télécharger une copie PDF",
+ "titleManualWrite": "Ecrire mes cléfs d'accès",
+ "privateKeys": "Cléfs privées",
+ "mnemonicPhrase": "Phrase mnémotechnique",
+ "separatorManualMethodsSolution": " ou ",
+ "confirmManuallyWritten": "Je les ais écrites",
+ "warningMessage": "**Ne les perdez pas!** Il est impossible des les récupérer si vous les perdez. **Ne les paratagez pas!** Vos fonds peuvent être volé si vous utilisez ces informations sur des sites-tiers (malicieux/phishing). **Faites une sauvegarde!** Sécutisez vos identifiants comme si si vous possédiez des millions de dollars. ",
+ "finishButton": "Je comprend. Continuer"
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risques liés à l'utilisation de QwertycoinWallet",
+ "content": "QwertycoinWallet est un service web. Il vous aide à utiliser Qwertycoin facilement sans avoir un installer des logiciels. Nous vous conseillons de traiter ce site comme vous traiteriez votre portefeuille."
+ }
+ },
+ "donatePage": {
+ "title": "Contribuer",
+ "subtitle": "Aidez à financer le développement et payer les factures de ce service",
+ "webwalletBlock": {
+ "title": "Portefeuille en ligne",
+ "content": "Ce portefeuille est développé par Gnock sur son temps libre. Si vous voulez aider au développement, payer les serveur et que vous aimez ce service, considérez une petite donation:
"
+ },
+ "devFundBlock": {
+ "title": "Fond de développement de Qwertycoin",
+ "content": "Pour aidez Qwertycoin globalement, vous pouvez donner à cette adresse"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "Vous avez besoins d'aide, nous somme la pour aider !",
+ "getInTouchBlock": {
+ "title": "Reston en contact !",
+ "content": "Vous avez des idées, des retours pour aider à améliorer le service ? Contactez nous !",
+ "discord": "Discord Officiel de Qwertycoin"
+ }
+ },
+ "networkPage": {
+ "title": "Statistiques du réseau",
+ "subtitle": "Détails sur le réseaux Qwertycoin",
+ "statsBlock": {
+ "connectNode": "Masternode connecté",
+ "hashrate": "Hashrate du réseau",
+ "height": "Hauteur de la Blockchain",
+ "difficulty": "Difficulty du réseau",
+ "lastTimeBlock": "Dernier block trouvé",
+ "lastReward": "Dernière récompense"
+ }
+ },
+ "sendPage": {
+ "title": "Envoyer des QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Adresse de destination",
+ "placeholder": "Écrivez l'adresse où vous voulez envoyer des fonds",
+ "invalid": "L'adresse de destination est invalide",
+ "fundsTo": "Les fonds seront envoyé à ",
+ "receiver": "Destinataire",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Montant à envoyer",
+ "invalid": "Le montant est invalide"
+ },
+ "paymentId": {
+ "label": "Identifiant du payment (optionnel)",
+ "invalid": "L'identifiant du paiement est invalid. La longeur doit être de 16 ou 64 caractères"
+ },
+ "sendButton": "Envoyer",
+ "cancelButton": "Annuler"
+ },
+ "qrCodeScanning": {
+ "explication": "Présentez le QR Code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oups...",
+ "content": "Vous n'avez pas assez de fonds pour effectuer ce tranfert",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Merci pour votre donation !",
+ "content": "Votre aide est apprécié. Cette donation contribuera à améliorer Qwertycoin",
+ "confirmText": "Fermer"
+ },
+ "transferSentModal": {
+ "title": "Transfert envoyé avec succès!",
+ "confirmText": "Fermer"
+ },
+ "transferExceptionModal": {
+ "title": "Oups...",
+ "content": "Une erreur est survenue. Merci de nous envoyer de rapport: {details}",
+ "confirmText": "Fermer"
+ },
+ "invalidAmountModal": {
+ "title": "Oups...",
+ "content": "Montant invalide",
+ "confirmText": "Fermer"
+ },
+ "creatingTransferModal": {
+ "title": "Création du transfert ...",
+ "content": "Veuillez patienter ..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalisation du transfert ...",
+ "content": "Veuillez patienter ..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirmer le transfert ?",
+ "content": "Montant: {amount} Frais: {fees} Total: {total}",
+ "confirmText": "Confirmer",
+ "cancelText": "Annuler"
+ },
+ "waitingNfcModal": {
+ "title": "Attente du Nfc",
+ "content": "Veuillez rapprocher votre téléphone de l'autre appareil"
+ }
+ },
+ "receivePage": {
+ "title": "Recevoir des QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Votre adresse pour recevoir des fonds",
+ "label": "Donner cette adresse pour recevoir des fonds"
+ },
+ "qrCode": {
+ "title": "Ou personnalisez ce QR Code",
+ "labelAmount": "Montant (optionnel)",
+ "labelRecipient": "Nom du destinataire (optionnel)",
+ "labelDescription": "Description (optionnel)",
+ "updateButton": "Mettre à jour"
+ }
+ },
+ "qrBlock": {
+ "title": "Votre QR code customisé"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Miner directement depuis votre navigateur",
+ "subtitle": "Supportez lé réseau en minant et en améliorant la stabilité du réseau tout en étant réponsé en QWC",
+ "parameterBlock": {
+ "title": "Paramètres",
+ "labelDestinationAddress": "Portefeuille de destination",
+ "labelThreads": "Nombre de threads (plus = plus de hashrate)",
+ "start": "Commençer",
+ "stop": "Arrêter"
+ },
+ "statisticsBlocks": {
+ "title": "Statistiques",
+ "validShares": "Partages valides",
+ "hashrate": "HashRate",
+ "maxHashrate": "HashRate max",
+ "dedicatedHardware": "Avec un logiciel spécifique pour le minage, vous pourriez obtenir entre 2 et 3 fois plus de hashrate. Cela vous permettrait également de miner avec votre carte graphique (si vous en avez une).",
+ "miningHandledBy": "Le minage est géré par la pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Paramètres",
+ "subtitle": "Changez vos paramètres ici",
+ "versionBlock": {
+ "versionNumber": "Numéro de version: ",
+ "versionCode": "Code de la version: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Vitesse d'actualisation du portefeuille (will consume more energy)",
+ "fastest": "Le plus vite",
+ "fast": "Rapide",
+ "medium": "Normal",
+ "slow": "Lent"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "monnaie nationale"
+ },
+ "readMinerTx": {
+ "label": "Lire les transactions de minage (uniquement pour les personnes faisant du solo-minage)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Changer le mot de passe de mon portefeuille",
+ "deleteWalletButton": "Supprimer mon portefeuille (copie locale)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Hauteur à laquelle le portefeuille a été créé"
+ },
+ "currentScanningHeight": {
+ "label": "Hauteur actuelle de scan de la blockchain"
+ },
+ "updateButton": "Mettre à jour"
+ },
+ "deleteWalletModal": {
+ "title": "Supprimer mon portefeuille (copie locale)",
+ "content": "Etes vous VRAIMENT sûr de vouloir supprimer votre portefeuille ?",
+ "confirmText": "Oui je suis sûr",
+ "cancelText": "Annuler"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Paramètres",
+ "password": {
+ "label": "Mot de passe pour protéger le portefeuille"
+ },
+ "passwordConfirm": {
+ "label": "Confirmer le mot de passe",
+ "invalid": "Le mot de passe ne correspond pas au premier entré"
+ },
+ "importHeight": {
+ "label": "Hauteur de création du wallet"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importer depuis un QR code",
+ "subtitle": "Importation depuis une sauvegarder hors ligne",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Commençer le scan",
+ "importButton": "Importer"
+ },
+ "qrScanningBlock": {
+ "title": "Présentez le QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Sauvegarder de vos identifiants",
+ "publicAddressBlock": {
+ "title": "Votre adresse publique"
+ },
+ "pdfBlock": {
+ "title": "Sauvegarde en Pdf",
+ "downloadButton": "Télécharger"
+ },
+ "warningBlock": {
+ "title": "Attention",
+ "content": "Si vous choisissez de sauvegarder vos cléfs privées ou la phrase mnémotechnique, NE LE ECRIVEZ PAS dans un endroit non sécurisé (chiffré) ceci pour votre propre sécurité. Le fichier est une solution alternative où les identifiants sont chiffrés et contient également une sauvegarde de l'historique de vos transactions"
+ },
+ "exportBlock": {
+ "title": "Exporter vos identifiants (non chiffrés)",
+ "privateKeysButton": "Obtenir mes cléfs privées",
+ "mnemonicKeysButton": "Obtenir ma phrase mnémotechnique",
+ "fileButton": "Exporter ver un fichier"
+ },
+ "walletKeysModal": {
+ "title": "Cléfs privées",
+ "confirmText": "OK",
+ "content": "Merci de stocker soigneusement ces cléfs. Les posséder signifie posséder les fonds associé ! Clé privée de dépense: {privSpendKey} Clé privée de visualisation: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Clé privée",
+ "confirmText": "OK",
+ "content": "Merci de stocker soigneusement cette phrase mnémotechnique. La posséder signifie posséder les fonds associé ! La phrase est : {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "Dans quelle langue souhaitez vous exporter la phrase mnémotechnique ?",
+ "confirmText": "Exporter"
+ }
+ },
+ "importPage": {
+ "title": "Créer un portefeuille",
+ "subtitle": "Depuis des cléfs, une fichier ou une phrase mnémotechnique",
+ "chooseMethod": "Choisissez votre méthode d'import",
+ "fromKeys": "Depuis des cléfs privées",
+ "fromFile": "Depuis un fichier",
+ "fromMnemonic": "Depuis une phrase mnémotechnique",
+ "fromQr": "Depuis un QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Conditions d'utilisations",
+ "subtitle": "Merci de les lire et d'y préter attention"
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Merci de les lire et d'y préter attention"
+ },
+ "importFromFilePage": {
+ "title": "Importer un portefeuille depuis un fichier",
+ "subtitle": "Utilisez votre sauvegarder pour récréer le portefeuille",
+ "walletBlock": {
+ "title": "Fichier du portefeuille",
+ "label": "Sélectionner",
+ "importButton": "Importer"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importer un portefeuille depuis une phrase mnémotechnique",
+ "subtitle": "Utiliser la phrase pour créer un portefeuille",
+ "mnemonicBlock": {
+ "title": "Phrase mnémotechnique",
+ "mnemonic": {
+ "label": "Phrase mnémotechnique : 25 mots",
+ "invalid": "la phrase mnémotechnique est invalide",
+ "language": "Langue"
+ },
+ "importButton": "Importer"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importer un portefeuille depuis des cléfs",
+ "subtitle": "Utilisez vos cléfs pour créer un portefeuille",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Voulez vous faire un portefeuille uniquement pour visualiser les fonds"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Cléfs privées",
+ "titleViewOnly": "Cléfs de visualisation uniquement",
+ "privateSpend": {
+ "label": "Cléf privée de dépense"
+ },
+ "privateView": {
+ "label": "Cléf privée de visualisation",
+ "optional": "(optionnel)"
+ },
+ "publicKey": {
+ "label": "Cléf publique"
+ },
+ "importButton": "Importer"
+ }
+ }
},
- "number":{
- },
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": false
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": false
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/translations/gr.json b/src/translations/gr.json
index 4cf33116..37700180 100644
--- a/src/translations/gr.json
+++ b/src/translations/gr.json
@@ -1,495 +1,539 @@
{
- "website":{
- "title":"Επίσημο πορτοφόλι ιστού Karbo",
- "description":"Επίσημο online πορτοφόλι για το νόμισμα Karbo - ανώνυμο, ασφαλές, και πλήρως διαχειριζόμενο από τον φυλλομετρητή σας για μέγιστη ασφάλεια"
+ "website": {
+ "title": "Επίσημο πορτοφόλι ιστού Qwertycoin",
+ "description": "Επίσημο online πορτοφόλι για το νόμισμα Qwertycoin - ανώνυμο, ασφαλές, και πλήρως διαχειριζόμενο από τον φυλλομετρητή σας για μέγιστη ασφάλεια"
},
"messages": {
- "menu": {
- "home": "Αρχική",
- "account": "Λογαριασμός",
- "send": "Αποστολή",
- "receive": "Λήψη",
- "export": "Εξαγωγή",
- "donate": "Δωρεά",
- "settings": "Ρυθμίσεις",
- "disconnect": "Αποσύνδεση",
- "network": "Στατιστικά Δικτύου",
- "mining": "Mining"
- },
- "global": {
- "loading": "Φόρτωση",
- "disableSecurity":"Κατάργησε την ασφάλεια, κατανοώ τον κίνδυνο",
- "passwordInvalidRequirements":"Ο κωδικός πρέπει να αποτελείται από τουλάχιστο 8 χαρακτήρες - 1 κεφαλαίο, 1 πεζό, 1 αριθμό και 1 σύμβολο",
- "passwordConfirmationNotMatching":"Οι κωδικοί δεν ταιριάζουν μεταξύ τους",
- "download":"Λήψη",
- "newVersionModal":{
- "title":"Μια νέα έκδοση είναι διαθέσιμη",
- "content":"Θέλετε να φορτώσετε τη νέα έκδοση;",
- "confirmText":"Ναι",
- "cancelText":"Πίσω"
- },
- "openWalletModal":{
- "title":"Κωδικός Πορτοφολιού",
- "confirmText":"Άνοιγμα",
- "cancelText":"Ακύρωση"
- },
- "invalidPasswordModal":{
- "title":"Ουπς...",
- "content":"Ο κωδικός σας είναι άκυρος.",
- "confirmText":"OK"
- },
- "invalidMnemonicModal":{
- "title":"Ουπς...",
- "content":"Η μνημονική φράση είναι άκυρη",
- "confirmText":"OK"
- },
- "passwordNotComplexEnoughModal":{
- "title":"Ο κωδικός δεν είναι αρκετά περίπλοκος",
- "confirmText":"OK"
- },
- "permissionRequiredForCameraModal":{
- "title":"Ουπς...",
- "content":"Η άδεια προσπέλασης της κάμεράς σας είναι απαραίτητη για τη σάρωση του QR code",
- "confirmText":"OK"
- }
- },
- "bottom": {
- "termsOfUse": "Όροι χρήσης",
- "privacyPolicy": "Πολιτική Απορρήτου",
- "support": "Υποστήριξη",
- "donate": "Δωρεά",
- "network": "Στατιστικά Δικτύου",
- "miningPool": "Mining Pool",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Ασφαλισμένο Πορτοφόλι Karbo",
- "tagLine": "Ο απλούστερος τρόπος χρήσης του Karbo - οπουδήποτε, οποτεδήποτε",
- "actions": {
- "loadWallet": "Φόρτωσε το πορτοφόλι μου",
- "importWallet": "Εισαγωγή πορτοφολιού",
- "create": "Δημιουργία",
- "createWallet": "Δημιουργία πορτοφολιού"
- },
- "notes": {
- "secure": {
- "title": "Ασφαλές",
- "description": "Χωρίς διακομιστές, πλήρως κρυπτογραφημένο!"
- },
- "fast": {
- "title": "Γρήγορο",
- "description": "Στείλε οπουδήποτε, οποτεδήποτε!"
- },
- "technology": {
- "title": "Μοναδική Τεχνολογία",
- "description": "Συνδεδεμένο κατευθείαν στο Karbo blockchain!"
- },
- "openSource": {
- "title": "100% ανοιχτού κώδικα",
- "description": "Διαθέσιμο στο Github!"
- }
- }
- },
- "accountPage": {
- "title": "Λογαριασμός",
- "subtitle": "Επισκόπηση του λογαριασμού σας και ιστορικό συναλλαγών",
- "synchronizingBlock": {
- "text": "Συγχρονισμός..."
- },
- "balanceBlock": {
- "title": "Το υπόλοιπό σας",
- "unlocked": "Ξεκλείδωτο"
- },
- "historyBlock": {
- "title": "Ιστορικό συναλλαγών",
- "pendingTxStatus": "Εκκρεμεί",
- "emptyWallet": "Αυτή τη στιγμή δεν έχετε χρήματα σε αυτό το πορτοφόλι.",
- "waitSync": "Παρακαλώ περιμένετε μέχρι να ανανεωθεί το πορτοφόλι",
- "beReallyPatient": "Η αρχική ρύθμιση μπορεί να διαρκέσει λίγη ώρα...",
- "getCoinAddress": "Λήψη MSR"
- },
- "txDetails":{
- "title":"Λεπτομέρειες συναλλαγής",
- "txHash":"Αναγνωριστικό συναλλαγής",
- "feesOnTx":"Τέλη συναλλαγής",
- "blockHeight":"Block height",
- "paymentId":"Payment ID",
- "txPrivKey":"Ιδιωτικό κλειδί συναλλαγής"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Αλλάγή κωδικού",
- "oldPassword":{
- "label":"Παλαιός κωδικός",
- "invalid":"Ο κωδικός είναι άκυρος"
- },
- "newPassword":{
- "label":"Διαλέξτε ένα νέα κωδικό για να προστατέψετε το πορτοφόλι σας"
- },
- "newPasswordConfirm":{
- "label":"Επιβεβαιώστε το νέο κωδικό"
- },
- "confirm":"Αλλαγή κωδικού",
- "modalSuccess":{
- "title":"Ο κωδικός άλλαξε!",
- "confirmText":"OK"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Το πορτοφόλι σας δημιουργείται...",
- "subtitle":"Σχεδόν τελείωσε",
- "waitingMessage":"Δημιουργία πορτοφολιού..."
- },
- "finalizationStep":{
- "title":"Αυτό ήταν απλό. Ο λογαριασμός σας είναι έτοιμος!",
- "subtitle":"Ετοιμαστείτε να χρησιμοποιήσετε το Karbo όπως δεν το έχετε ξανακάνει",
- "passwordSelectionBlock":{
- "label":"Προστατέψτε το πορτοφόλι σας με έναν κωδικό"
- },
- "passwordConfirmBlock":{
- "label":"Επιβεβαιώστε τον κωδικό"
- },
- "validPassword":"Χρησιμοποιήστε αυτόν τον κωδικό",
- "backupBlock":{
- "title":"Αποθηκεύστε τα ιδιωτικά σας αναγνωριστικά για επαναφορά.",
- "option1":"Επιλογή 1: ",
- "option2":"Επιλογή 2: ",
- "titlePdf":"Κατεβάστε ένα αντίγραφο PDF",
- "titleManualWrite":"Γράψε τα κλειδιά μου",
- "privateKeys":"Ιδιωτικό κλειδί",
- "mnemonicPhrase":"Μνημονική φράση",
- "separatorManualMethodsSolution":" ή ",
- "confirmManuallyWritten":"Έγραψα τη μνημονική μου φράση σε χαρτί",
- "warningMessage":"**Μην το χάσετε!** Δεν μπορεί να ανακτηθεί αν το χάσετε. **Μην το κοινοποιείτε!** Τα χρήματά σας θα κλαπούν εαν χρησιμοποιήσετε αυτό το αρχείο ή τη μνημονική φράση σε κακόβουλο ιστότοπο. **Δημιουργήστε αντίγραφο ασφαλείας!** Ασφαλείστε το σαν να ασφαλίζατε τα εκατομμύρια ευρώ που μπορεί κάποτε να αξίζει. ",
- "finishButton":"Καταλαβαίνω. Συνέχισε."
- }
- },
- "disclaimerBlock":{
- "title":"Κίνδυνος χρήσης του KarboWallet",
- "content":"Το KarboWallet είναι ένα πορτοφόλι βασισμένο στον ιστό. Σας επιτρέπει να χρησιμοποιήσετε το Karbo χωρίς να χρειάζετε να λειτουργείτε έναν δικό σας κόμβο Karbo. Σας συνιστούμε να θεωρείτε το KarboWallet ως ένα κανονικό πορτοφόλι"
- }
- },
- "donatePage":{
- "title":"Δωρεά",
- "subtitle":"Βοηθήστε στην ανάπτυξη και στα έξοδα",
- "webwalletBlock":{
- "title":"Webwallet",
- "content":"Αυτό το πορτοφόλι ιστού αναπτύχθηκε από τον Gnock στον ελεύθερό του χρόνο. Εαν θέλετε να βοηθήσετε στην ανάπτυξη, να συνεισφέρετε στα έξοδα των διακομιστών και σας αρέσει αυτή η εφαρμογή, παρακαλώ σκεφτείτε να κάνετε μια δωρεά:
"
- },
- "KarboFundBlock":{
- "title":"Karbo Dev fund",
- "content":"Για να βοηθήσετε το Karbo, μπορείτε να κάνετε δωρεά στις παρακάτω διευθύνσεις"
- }
- },
- "supportPage":{
- "title":"Υποστήριξη",
- "subtitle":"Είμαστε εδώ για να βοηθήσουμε!",
- "getInTouchBlock":{
- "title":"Ας έρθουμε σε επικοινωνία!",
- "content":"'Εχετε ιδέες που θα μπορούσαν να μας βοηθήσουν να βελτιώσουμε το πορτοφόλι; Επικοινωνήστε μαζί μας!",
- "discord":"Karbo Discord Channel"
- }
- },
- "networkPage":{
- "title":"Στατιστικά Δικτύου΄",
- "subtitle":"Επισκόπηση τπυ δικτύου Karbo",
- "statsBlock":{
- "hashrate":"Network hashrate",
- "height":"Blockchain height",
- "difficulty":"Network difficulty",
- "lastTimeBlock":"Τελευταίο block που βρέθηκε",
- "lastReward":"Τελευταία αμοιβή block"
- }
- },
- "sendPage":{
- "title":"Στείλτε MSR",
- "sendBlock":{
- "address":{
- "label":"Διεύθυνση παραλήπτη",
- "placeholder":"Γράψτε τη διεύθυνση όπου θέλετε να στείλετε χρήματα",
- "invalid":"Η διεύθυνση παραλήπτη είναι άκυρη",
- "fundsTo":"Τα χρήματά θα σταλούν στην ακόλουθη διεύθυνση",
- "receiver":"Παραλήπτης",
- "description":"Περιγραφή"
- },
- "amount":{
- "label":"Ποσό προς αποστολή",
- "invalid":"Το ποσό είναι άκυρο"
- },
- "paymentId":{
- "label":"Payment ID (προαιρετικό)",
- "invalid":"Το payment ID είναι άκυρο. Πρέπει να αποτελείται από 16 ή 64 χαρακτήρες"
- },
- "sendButton":"Αποστολή",
- "cancelButton":"Ακύρωση"
- },
- "qrCodeScanning":{
- "explication":"Δείξε το QR code"
- },
- "notEnoughMoneyModal":{
- "title":"Ουπς...",
- "content":"Δεν έχετε αρκετά χρήματα στο πορτοφόλι σας για να εκτελέσετε αυτή τη συναλλαγή",
- "confirmText":"OK"
- },
- "thankYouDonationModal":{
- "title":"Ευχαριστούμε για τη δωρεά σας!",
- "content":"Εκτιμούμε τη βοήθειά σας. Αυτή η δωρεά θα βοηθήσει στο να κάνουμε το Karbo καλύτερο",
- "confirmText":"OK"
- },
- "transferSentModal":{
- "title":"Η συναλλαγή έγινε επιτυχώς!",
- "confirmText":"OK"
- },
- "transferExceptionModal":{
- "title":"Ουπς...",
- "content":"Συνέβη ένα σφάλμα. Παρακαλώ αναφέρετε αυτό το σφάλμα: {details}",
- "confirmText":"OK"
- },
- "invalidAmountModal":{
- "title":"Ουπς...",
- "content":"Άκυρο ποσό",
- "confirmText":"OK"
- },
- "creatingTransferModal":{
- "title":"Δημιουργία συναλλαγής ...",
- "content":"Παρακαλώ περιμένετε..."
- },
- "finalizingTransferModal":{
- "title":"Οριστικοποίηση συναλλαγής ...",
- "content":"Παρακαλώ περιμένετε..."
- },
- "confirmTransactionModal":{
- "title":"Αποδοχή συναλλαγής;",
- "content":"Ποσό: {amount} Τέλη: {fees} Total: {total}",
- "confirmText":"Αποδοχή",
- "cancelText":"Ακύρωση"
- },
- "waitingNfcModal":{
- "title":"Αναμονή NFC",
- "content":"Πλησιάστε στην άλλη συσκευή"
- }
- },
- "receivePage":{
- "title":"Λήψη MSR",
- "receiveBlock":{
- "address":{
- "title":"Η διεύθυνσή σας για λήψη χρημάτων:",
- "label":"Δώστε αυτή τη διεύθυνση για να λάβετε χρήματα"
- },
- "qrCode":{
- "title":"Ή εξατομικεύστε το QR code:",
- "labelAmount":"Ποσό (προαιρετικό)",
- "labelRecipient":"Όνομα παραλήπτη (προαιρετικό)",
- "labelDescription":"Περιγραφή συναλλαγής (προαιρετικό)",
- "updateButton":"Ανανέωση"
- }
- },
- "qrBlock":{
- "title":"Το εξατομικευμένο QR code σας"
- },
- "waitingNfcToWriteModal":{
- "title":"Αναμονή NFC",
- "titleSuccess":"Έγινε εγγραφή του NFC Tag",
- "content":"Πλησιάστε το NFC tag για εγγραφή"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Ανεπαρκής χωρητικότητα Tag"
- }
- },
- "miningPage":{
- "title":"Κάντε mining μέσω του φυλλομετρητή σας",
- "subtitle":"Υποστηρίξτε το δίκτυο και αμοιφθείτε με MSR",
- "parameterBlock":{
- "title":"Παράμετροι",
- "labelDestinationAddress":"Πορτοφόλι για κατάθεση αμοιβών από mining",
- "labelThreads":"Αριθμός threads (περισσότερα = υψηλότερο hashrate)",
- "start":"Έναρξη",
- "stop":"Σταμάτημα"
- },
- "statisticsBlocks":{
- "title":"Στατιστικά",
- "validShares":"Έγκυρα shares",
- "hashrate":"Hashrate",
- "maxHashrate":"Μέγιστο Hashrate",
- "dedicatedHardware":"Με εξειδικευμένο λογισμικό και υλισμοκό για mining μπορείτε να αμοιφθείτε περισσότερα και να βοηθήσει στην αποκέντρωση του δικτύου.",
- "miningHandledBy":"Το mining σε αυτή τη σελίδα διαχειρίζεται από το pool get.Karbocoin.com"
- }
- },
- "settingsPage":{
- "title":"Ρυθμίσεις",
- "subtitle":"Αλλάξτε τις παραμέτρους εδώ",
- "versionBlock":{
- "versionNumber":"Version number: ",
- "versionCode":"Version code: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Ρυθμός ανανέωσης πορτοφολιού (καταναλώνει περισσότερους πόρους)",
- "fastest":"Ταχύτατο",
- "fast":"Γρήγορο",
- "medium":"Μεσαίο",
- "slow":"Αργό"
- },
- "language":{
- "label":"Γλώσσα"
- },
- "readMinerTx":{
- "label":"Ανάγνωση συναλλαγών miner (Μόνο για όσους κάνουν solo mining)"
- }
- },
- "changePasswordButton":"Άλλαξε τον κωδικό του πορτοφολιού μου",
- "deleteWalletButton":"Διέγραψε το πορτοφόλι μου (τοπικό αντίγραφο)",
- "walletSettings":{
- "creationHeight":{
- "label":"Ύψος δημιουργίας του πορτοφολιού"
- },
- "currentScanningHeight": {
- "label": "Τρέχον ύψος σάρωσης"
- },
- "updateButton":"Ανανέωση"
- },
- "deleteWalletModal":{
- "title":"Διέγραψε το πορτοφόλι μου (τοπικό αντίγραφο)",
- "content":"Είστε βέβαιοι ότι θέλετε ΠΡΑΓΜΑΤΙΚΑ να διαγράψετε το πορτοφόλι σας;",
- "confirmText":"Ναι είμαι βέβαιος",
- "cancelText":"Ακύρωση"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Παράμετροι",
- "password":{
- "label":"Κωδικός προστασίας του πορτοφολιού σας"
- },
- "passwordConfirm":{
- "label":"Επιβεβαιώστε τον κωδικό",
- "invalid":"Οι κωδικοί δεν ταιριάζουν μεταξύ τους"
- },
- "importHeight":{
- "label":"Ύψος από το οποίο θα γίνει η εισαγωγή:"
- }
- }
- },
- "importFromQrPage":{
- "title":"Εισαγωγή πορτοφολιού από QR code",
- "subtitle":"Εισαγωγή πορτοφολιού από εφεδρικό αντίγραφο εκτός σύνδεσης",
- "qrCodeBlock":{
- "title":"QR code",
- "startScanButton":"Έναρξη σάρωσης",
- "importButton":"Εισαγωγή"
- },
- "qrScanningBlock":{
- "title":"Δείξτε το QR code"
- }
- },
- "exportPage":{
- "title":"Backup your credentials",
- "publicAddressBlock":{
- "title":"Your public address"
- },
- "pdfBlock":{
- "title":"PDF Backup",
- "downloadButton":"Download"
- },
- "warningBlock":{
- "title":"Warning",
- "content":"If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
- },
- "exportBlock":{
- "title":"Export your RAW credentials",
- "privateKeysButton":"Get my private keys",
- "mnemonicKeysButton":"Get my mnemonic phrase",
- "fileButton":"Εξαγωγή σε αρχείο"
- },
- "walletKeysModal":{
- "title":"Ιδιωτικά κλειδιά",
- "confirmText":"OK",
- "content":"Παρακαλώ αποθηκεύστε προσεκτικά αυτά τα κλειδιά. Η κατοχή τους σημαίνει κατοχή των χρημάτων του πορτοφολιού αυτού ! Κλειδί πληρωμής: {privSpendKey} Ιδιωτικό κλειδί προβολής: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Μνημονική φράση",
- "confirmText":"OK",
- "content":"Παρακαλώ αποθηκεύστε προσεκτικά αυτή τη μνημονική φράση.Η κατοχή της σημαίνει κατοχή των χρημάτων του πορτοφολιού αυτού ! Η φράση είναι: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"Σε ποιά γλώσσα θέλετε τη μνημονική φράση σας;",
- "confirmText":"Εξαγωγή"
- }
- },
- "importPage":{
- "title":"Δημιουργία πορτοφολιού",
- "subtitle":"Από προηγουμένως δημιουργημένα κλειδιά, αρχείο ή μνημονική φράση",
- "chooseMethod":"Διαλέξτε την μέθοδο εισαγωγής:",
- "fromKeys":"Απο κλειδιά",
- "fromFile":"Από αρχείο",
- "fromMnemonic":"Από μνημονική φράση",
- "fromQr":"Από QR code"
- },
- "termsOfUsePage":{
- "title":"Όροι χρήσης",
- "subtitle":"Παρακαλώ διαβάστε τους προσεκτικά."
- },
- "privacyPolicyPage":{
- "title":"Privacy Policy",
- "subtitle":"Παρακαλώ διαβάστε τους προσεκτικά."
- },
- "importFromFilePage":{
- "title":"Εισαγωγή πορτοφολιού από αντίγραφο ασφαλείας",
- "subtitle":"Χρησιμοποιήστε το αντίγραφο ασφαλείας για να δημιουργήσετε ένα πορτοφόλι",
- "walletBlock":{
- "title":"Αρχείο πορτοφολιού",
- "label":"Επιλέξτε το αρχείο",
- "importButton":"Εισαγωγή"
- }
- },
- "importFromMnemonicPage":{
- "title":"Εισαγωγή πορτοφολιού από μνημονική φράση",
- "subtitle":"Χρησιμοποιήστε τη φράση σας για να δημιουργήσετε ένα πορτοφόλι",
- "mnemonicBlock":{
- "title":"Μνημονική φράση",
- "mnemonic":{
- "label":"Μνημονική φράση: 25 λέξεις",
- "invalid":"Η μνημονική φράση είναι άκυρη",
- "language":"Γλώσσα"
- },
- "importButton":"Εισαγωγή"
- }
- },
- "importFromKeysPage":{
- "title":"Εισαγωγή πορτοφολιού από κλειδιά",
- "subtitle":"Χρησιμοποιήστε τα κλειδιά σας για να δημιουργήσετε ένα πορτοφόλι",
- "parametersBlock":{
- "viewOnlyWallet":{
- "label":"Θέλετε ένα πορτοφόλι μόνο για προβολή;"
- }
- },
- "keysBlock":{
- "titleNotViewOnly":"Κλειδιά πορτοφολιού",
- "titleViewOnly":"Πορτοφόλι μόνο για προβολή",
- "privateSpend":{
- "label":"Ιδιωτικό κλειδί πληρωμής"
- },
- "privateView":{
- "label":"Ιδιωτικό κλειδί προβολής",
- "optional":"(προαιρετικό)"
- },
- "publicKey":{
- "label":"Δημόσιο Κλειδί"
- },
- "importButton":"Εισαγωγή"
- }
- }
+ "menu": {
+ "home": "Αρχική",
+ "account": "Λογαριασμός",
+ "send": "Αποστολή",
+ "receive": "Λήψη",
+ "export": "Εξαγωγή",
+ "donate": "Δωρεά",
+ "elections": "Αρχαιρεσίες",
+ "contacts": "Επαφές",
+ "settings": "Ρυθμίσεις",
+ "disconnect": "Αποσύνδεση",
+ "network": "Στατιστικά Δικτύου",
+ "mining": "Mining"
+ },
+ "global": {
+ "loading": "Φόρτωση",
+ "disableSecurity": "Κατάργησε την ασφάλεια, κατανοώ τον κίνδυνο",
+ "passwordInvalidRequirements": "Ο κωδικός πρέπει να αποτελείται από τουλάχιστο 8 χαρακτήρες - 1 κεφαλαίο, 1 πεζό, 1 αριθμό και 1 σύμβολο",
+ "passwordConfirmationNotMatching": "Οι κωδικοί δεν ταιριάζουν μεταξύ τους",
+ "download": "Λήψη",
+ "newVersionModal": {
+ "title": "Μια νέα έκδοση είναι διαθέσιμη",
+ "content": "Θέλετε να φορτώσετε τη νέα έκδοση;",
+ "confirmText": "Ναι",
+ "cancelText": "Πίσω"
+ },
+ "openWalletModal": {
+ "title": "Κωδικός Πορτοφολιού",
+ "confirmText": "Άνοιγμα",
+ "cancelText": "Ακύρωση"
+ },
+ "invalidPasswordModal": {
+ "title": "Ουπς...",
+ "content": "Ο κωδικός σας είναι άκυρος.",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Ουπς...",
+ "content": "Η μνημονική φράση είναι άκυρη",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "Ο κωδικός δεν είναι αρκετά περίπλοκος",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Ουπς...",
+ "content": "Η άδεια προσπέλασης της κάμεράς σας είναι απαραίτητη για τη σάρωση του QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Όροι χρήσης",
+ "privacyPolicy": "Πολιτική Απορρήτου",
+ "support": "Υποστήριξη",
+ "donate": "Δωρεά",
+ "network": "Στατιστικά Δικτύου",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Ασφαλισμένο Πορτοφόλι Qwertycoin",
+ "tagLine": "Ο απλούστερος τρόπος χρήσης του Qwertycoin - οπουδήποτε, οποτεδήποτε",
+ "tagLineTwo": "Ο απλούστερος τρόπος χρήσης του Qwertycoin",
+ "actions": {
+ "loadWallet": "Φόρτωσε το πορτοφόλι μου",
+ "importWallet": "Εισαγωγή πορτοφολιού",
+ "create": "Δημιουργία",
+ "createWallet": "Δημιουργία πορτοφολιού"
+ }
+ },
+ "accountPage": {
+ "title": "Λογαριασμός",
+ "subtitle": "Επισκόπηση του λογαριασμού σας και ιστορικό συναλλαγών",
+ "synchronizingBlock": {
+ "text": "Συγχρονισμός..."
+ },
+ "balanceBlock": {
+ "title": "Το υπόλοιπό σας",
+ "unlocked": "Ξεκλείδωτο"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Ιστορικό συναλλαγών",
+ "pendingTxStatus": "Εκκρεμεί",
+ "emptyWallet": "Αυτή τη στιγμή δεν έχετε χρήματα σε αυτό το πορτοφόλι.",
+ "waitSync": "Παρακαλώ περιμένετε μέχρι να ανανεωθεί το πορτοφόλι",
+ "beReallyPatient": "Η αρχική ρύθμιση μπορεί να διαρκέσει λίγη ώρα...",
+ "getCoinAddress": "Λήψη QWC"
+ },
+ "txDetails": {
+ "title": "Λεπτομέρειες συναλλαγής",
+ "txHash": "Αναγνωριστικό συναλλαγής",
+ "feesOnTx": "Τέλη συναλλαγής",
+ "blockHeight": "Block height",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "paymentId": "Payment ID",
+ "txPrivKey": "Ιδιωτικό κλειδί συναλλαγής"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Αλλάγή κωδικού",
+ "oldPassword": {
+ "label": "Παλαιός κωδικός",
+ "invalid": "Ο κωδικός είναι άκυρος"
+ },
+ "newPassword": {
+ "label": "Διαλέξτε ένα νέα κωδικό για να προστατέψετε το πορτοφόλι σας"
+ },
+ "newPasswordConfirm": {
+ "label": "Επιβεβαιώστε το νέο κωδικό"
+ },
+ "confirm": "Αλλαγή κωδικού",
+ "modalSuccess": {
+ "title": "Ο κωδικός άλλαξε!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Επαφές"
+ },
+ "electionsPage": {
+ "title": "Αρχαιρεσίες"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Το πορτοφόλι σας δημιουργείται...",
+ "subtitle": "Σχεδόν τελείωσε",
+ "waitingMessage": "Δημιουργία πορτοφολιού..."
+ },
+ "finalizationStep": {
+ "title": "Αυτό ήταν απλό. Ο λογαριασμός σας είναι έτοιμος!",
+ "subtitle": "Ετοιμαστείτε να χρησιμοποιήσετε το Qwertycoin όπως δεν το έχετε ξανακάνει",
+ "passwordSelectionBlock": {
+ "label": "Προστατέψτε το πορτοφόλι σας με έναν κωδικό"
+ },
+ "passwordConfirmBlock": {
+ "label": "Επιβεβαιώστε τον κωδικό"
+ },
+ "validPassword": "Χρησιμοποιήστε αυτόν τον κωδικό",
+ "backupBlock": {
+ "title": "Αποθηκεύστε τα ιδιωτικά σας αναγνωριστικά για επαναφορά.",
+ "option1": "Επιλογή 1: ",
+ "option2": "Επιλογή 2: ",
+ "titlePdf": "Κατεβάστε ένα αντίγραφο PDF",
+ "titleManualWrite": "Γράψε τα κλειδιά μου",
+ "privateKeys": "Ιδιωτικό κλειδί",
+ "mnemonicPhrase": "Μνημονική φράση",
+ "separatorManualMethodsSolution": " ή ",
+ "confirmManuallyWritten": "Έγραψα τη μνημονική μου φράση σε χαρτί",
+ "warningMessage": "**Μην το χάσετε!** Δεν μπορεί να ανακτηθεί αν το χάσετε. **Μην το κοινοποιείτε!** Τα χρήματά σας θα κλαπούν εαν χρησιμοποιήσετε αυτό το αρχείο ή τη μνημονική φράση σε κακόβουλο ιστότοπο. **Δημιουργήστε αντίγραφο ασφαλείας!** Ασφαλείστε το σαν να ασφαλίζατε τα εκατομμύρια ευρώ που μπορεί κάποτε να αξίζει. ",
+ "finishButton": "Καταλαβαίνω. Συνέχισε."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Κίνδυνος χρήσης του QwertycoinWallet",
+ "content": "Το QwertycoinWallet είναι ένα πορτοφόλι βασισμένο στον ιστό. Σας επιτρέπει να χρησιμοποιήσετε το Qwertycoin χωρίς να χρειάζετε να λειτουργείτε έναν δικό σας κόμβο Qwertycoin. Σας συνιστούμε να θεωρείτε το QwertycoinWallet ως ένα κανονικό πορτοφόλι"
+ }
+ },
+ "donatePage": {
+ "title": "Δωρεά",
+ "subtitle": "Βοηθήστε στην ανάπτυξη και στα έξοδα",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "Αυτό το πορτοφόλι ιστού αναπτύχθηκε από τον Gnock στον ελεύθερό του χρόνο. Εαν θέλετε να βοηθήσετε στην ανάπτυξη, να συνεισφέρετε στα έξοδα των διακομιστών και σας αρέσει αυτή η εφαρμογή, παρακαλώ σκεφτείτε να κάνετε μια δωρεά:
"
+ },
+ "QwertycoinFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "Για να βοηθήσετε το Qwertycoin, μπορείτε να κάνετε δωρεά στις παρακάτω διευθύνσεις"
+ }
+ },
+ "supportPage": {
+ "title": "Υποστήριξη",
+ "subtitle": "Είμαστε εδώ για να βοηθήσουμε!",
+ "getInTouchBlock": {
+ "title": "Ας έρθουμε σε επικοινωνία!",
+ "content": "'Εχετε ιδέες που θα μπορούσαν να μας βοηθήσουν να βελτιώσουμε το πορτοφόλι; Επικοινωνήστε μαζί μας!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Στατιστικά Δικτύου΄",
+ "subtitle": "Επισκόπηση τπυ δικτύου Qwertycoin",
+ "statsBlock": {
+ "connectNode": "Συνδεδεμένο Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Τελευταίο block που βρέθηκε",
+ "lastReward": "Τελευταία αμοιβή block"
+ }
+ },
+ "sendPage": {
+ "title": "Στείλτε QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Διεύθυνση παραλήπτη",
+ "placeholder": "Γράψτε τη διεύθυνση όπου θέλετε να στείλετε χρήματα",
+ "invalid": "Η διεύθυνση παραλήπτη είναι άκυρη",
+ "fundsTo": "Τα χρήματά θα σταλούν στην ακόλουθη διεύθυνση",
+ "receiver": "Παραλήπτης",
+ "description": "Περιγραφή"
+ },
+ "amount": {
+ "label": "Ποσό προς αποστολή",
+ "invalid": "Το ποσό είναι άκυρο"
+ },
+ "paymentId": {
+ "label": "Payment ID (προαιρετικό)",
+ "invalid": "Το payment ID είναι άκυρο. Πρέπει να αποτελείται από 16 ή 64 χαρακτήρες"
+ },
+ "sendButton": "Αποστολή",
+ "cancelButton": "Ακύρωση"
+ },
+ "qrCodeScanning": {
+ "explication": "Δείξε το QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Ουπς...",
+ "content": "Δεν έχετε αρκετά χρήματα στο πορτοφόλι σας για να εκτελέσετε αυτή τη συναλλαγή",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Ευχαριστούμε για τη δωρεά σας!",
+ "content": "Εκτιμούμε τη βοήθειά σας. Αυτή η δωρεά θα βοηθήσει στο να κάνουμε το Qwertycoin καλύτερο",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Η συναλλαγή έγινε επιτυχώς!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Ουπς...",
+ "content": "Συνέβη ένα σφάλμα. Παρακαλώ αναφέρετε αυτό το σφάλμα: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Ουπς...",
+ "content": "Άκυρο ποσό",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Δημιουργία συναλλαγής ...",
+ "content": "Παρακαλώ περιμένετε..."
+ },
+ "finalizingTransferModal": {
+ "title": "Οριστικοποίηση συναλλαγής ...",
+ "content": "Παρακαλώ περιμένετε..."
+ },
+ "confirmTransactionModal": {
+ "title": "Αποδοχή συναλλαγής;",
+ "content": "Ποσό: {amount} Τέλη: {fees} Total: {total}",
+ "confirmText": "Αποδοχή",
+ "cancelText": "Ακύρωση"
+ },
+ "waitingNfcModal": {
+ "title": "Αναμονή NFC",
+ "content": "Πλησιάστε στην άλλη συσκευή"
+ }
+ },
+ "receivePage": {
+ "title": "Λήψη QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Η διεύθυνσή σας για λήψη χρημάτων:",
+ "label": "Δώστε αυτή τη διεύθυνση για να λάβετε χρήματα"
+ },
+ "qrCode": {
+ "title": "Ή εξατομικεύστε το QR code:",
+ "labelAmount": "Ποσό (προαιρετικό)",
+ "labelRecipient": "Όνομα παραλήπτη (προαιρετικό)",
+ "labelDescription": "Περιγραφή συναλλαγής (προαιρετικό)",
+ "updateButton": "Ανανέωση"
+ }
+ },
+ "qrBlock": {
+ "title": "Το εξατομικευμένο QR code σας"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Αναμονή NFC",
+ "titleSuccess": "Έγινε εγγραφή του NFC Tag",
+ "content": "Πλησιάστε το NFC tag για εγγραφή"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Ανεπαρκής χωρητικότητα Tag"
+ }
+ },
+ "miningPage": {
+ "title": "Κάντε mining μέσω του φυλλομετρητή σας",
+ "subtitle": "Υποστηρίξτε το δίκτυο και αμοιφθείτε με QWC",
+ "parameterBlock": {
+ "title": "Παράμετροι",
+ "labelDestinationAddress": "Πορτοφόλι για κατάθεση αμοιβών από mining",
+ "labelThreads": "Αριθμός threads (περισσότερα = υψηλότερο hashrate)",
+ "start": "Έναρξη",
+ "stop": "Σταμάτημα"
+ },
+ "statisticsBlocks": {
+ "title": "Στατιστικά",
+ "validShares": "Έγκυρα shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Μέγιστο Hashrate",
+ "dedicatedHardware": "Με εξειδικευμένο λογισμικό και υλισμοκό για mining μπορείτε να αμοιφθείτε περισσότερα και να βοηθήσει στην αποκέντρωση του δικτύου.",
+ "miningHandledBy": "Το mining σε αυτή τη σελίδα διαχειρίζεται από το pool https://qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Ρυθμίσεις",
+ "subtitle": "Αλλάξτε τις παραμέτρους εδώ",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Ρυθμός ανανέωσης πορτοφολιού (καταναλώνει περισσότερους πόρους)",
+ "fastest": "Ταχύτατο",
+ "fast": "Γρήγορο",
+ "medium": "Μεσαίο",
+ "slow": "Αργό"
+ },
+ "language": {
+ "label": "Γλώσσα"
+ },
+ "currency": {
+ "label": "εθνικό νόμισμα"
+ },
+ "readMinerTx": {
+ "label": "Ανάγνωση συναλλαγών miner (Μόνο για όσους κάνουν solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Άλλαξε τον κωδικό του πορτοφολιού μου",
+ "deleteWalletButton": "Διέγραψε το πορτοφόλι μου (τοπικό αντίγραφο)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Ύψος δημιουργίας του πορτοφολιού"
+ },
+ "currentScanningHeight": {
+ "label": "Τρέχον ύψος σάρωσης"
+ },
+ "updateButton": "Ανανέωση"
+ },
+ "deleteWalletModal": {
+ "title": "Διέγραψε το πορτοφόλι μου (τοπικό αντίγραφο)",
+ "content": "Είστε βέβαιοι ότι θέλετε ΠΡΑΓΜΑΤΙΚΑ να διαγράψετε το πορτοφόλι σας;",
+ "confirmText": "Ναι είμαι βέβαιος",
+ "cancelText": "Ακύρωση"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Παράμετροι",
+ "password": {
+ "label": "Κωδικός προστασίας του πορτοφολιού σας"
+ },
+ "passwordConfirm": {
+ "label": "Επιβεβαιώστε τον κωδικό",
+ "invalid": "Οι κωδικοί δεν ταιριάζουν μεταξύ τους"
+ },
+ "importHeight": {
+ "label": "Ύψος από το οποίο θα γίνει η εισαγωγή:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Εισαγωγή πορτοφολιού από QR code",
+ "subtitle": "Εισαγωγή πορτοφολιού από εφεδρικό αντίγραφο εκτός σύνδεσης",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Έναρξη σάρωσης",
+ "importButton": "Εισαγωγή"
+ },
+ "qrScanningBlock": {
+ "title": "Δείξτε το QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Εξαγωγή σε αρχείο"
+ },
+ "walletKeysModal": {
+ "title": "Ιδιωτικά κλειδιά",
+ "confirmText": "OK",
+ "content": "Παρακαλώ αποθηκεύστε προσεκτικά αυτά τα κλειδιά. Η κατοχή τους σημαίνει κατοχή των χρημάτων του πορτοφολιού αυτού ! Κλειδί πληρωμής: {privSpendKey} Ιδιωτικό κλειδί προβολής: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Μνημονική φράση",
+ "confirmText": "OK",
+ "content": "Παρακαλώ αποθηκεύστε προσεκτικά αυτή τη μνημονική φράση.Η κατοχή της σημαίνει κατοχή των χρημάτων του πορτοφολιού αυτού ! Η φράση είναι: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "Σε ποιά γλώσσα θέλετε τη μνημονική φράση σας;",
+ "confirmText": "Εξαγωγή"
+ }
+ },
+ "importPage": {
+ "title": "Δημιουργία πορτοφολιού",
+ "subtitle": "Από προηγουμένως δημιουργημένα κλειδιά, αρχείο ή μνημονική φράση",
+ "chooseMethod": "Διαλέξτε την μέθοδο εισαγωγής:",
+ "fromKeys": "Απο κλειδιά",
+ "fromFile": "Από αρχείο",
+ "fromMnemonic": "Από μνημονική φράση",
+ "fromQr": "Από QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Όροι χρήσης",
+ "subtitle": "Παρακαλώ διαβάστε τους προσεκτικά."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Παρακαλώ διαβάστε τους προσεκτικά."
+ },
+ "importFromFilePage": {
+ "title": "Εισαγωγή πορτοφολιού από αντίγραφο ασφαλείας",
+ "subtitle": "Χρησιμοποιήστε το αντίγραφο ασφαλείας για να δημιουργήσετε ένα πορτοφόλι",
+ "walletBlock": {
+ "title": "Αρχείο πορτοφολιού",
+ "label": "Επιλέξτε το αρχείο",
+ "importButton": "Εισαγωγή"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Εισαγωγή πορτοφολιού από μνημονική φράση",
+ "subtitle": "Χρησιμοποιήστε τη φράση σας για να δημιουργήσετε ένα πορτοφόλι",
+ "mnemonicBlock": {
+ "title": "Μνημονική φράση",
+ "mnemonic": {
+ "label": "Μνημονική φράση: 25 λέξεις",
+ "invalid": "Η μνημονική φράση είναι άκυρη",
+ "language": "Γλώσσα"
+ },
+ "importButton": "Εισαγωγή"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Εισαγωγή πορτοφολιού από κλειδιά",
+ "subtitle": "Χρησιμοποιήστε τα κλειδιά σας για να δημιουργήσετε ένα πορτοφόλι",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Θέλετε ένα πορτοφόλι μόνο για προβολή;"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Κλειδιά πορτοφολιού",
+ "titleViewOnly": "Πορτοφόλι μόνο για προβολή",
+ "privateSpend": {
+ "label": "Ιδιωτικό κλειδί πληρωμής"
+ },
+ "privateView": {
+ "label": "Ιδιωτικό κλειδί προβολής",
+ "optional": "(προαιρετικό)"
+ },
+ "publicKey": {
+ "label": "Δημόσιο Κλειδί"
+ },
+ "importButton": "Εισαγωγή"
+ }
+ }
},
- "number":{
- },
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": true
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/translations/he.json b/src/translations/he.json
new file mode 100644
index 00000000..dd608c56
--- /dev/null
+++ b/src/translations/he.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin ארנק | פשוט, חלק, בטוח. ברוך הבא לעתיד.",
+ "description": "ארנק מקוון רשמי עבור מטבע Qwertycoin - מטופל באופן מלא בדפדפן שלך לאבטחה אופטימלית"
+ },
+ "messages": {
+ "menu": {
+ "home": "בית",
+ "account": "חשבון",
+ "send": "שלח",
+ "receive": "קבל",
+ "export": "יצא",
+ "donate": "לתרום",
+ "elections": "בחירות",
+ "contacts": "אנשי קשר",
+ "settings": "הגדרות",
+ "disconnect": "להתנתק",
+ "network": "סטטיסטיקת רשת",
+ "mining": "כרייה"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "בטל"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "אנשי קשר"
+ },
+ "electionsPage": {
+ "title": "בחירות"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "בטל"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "בטל"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting NFC",
+ "content": "Bring this device closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting NFC",
+ "titleSuccess": "NFC Tag written",
+ "content": "Bring the NFC tag closer to this device to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "National Currency"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "בטל"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/hi.json b/src/translations/hi.json
new file mode 100644
index 00000000..81d04c39
--- /dev/null
+++ b/src/translations/hi.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin वॉलेट | सरल, सहज, सुरक्षित। आने वाला कल आपका स्वागत करता है।",
+ "description": "Qwertycoin मुद्रा के लिए आधिकारिक ऑनलाइन वॉलेट - इष्टतम सुरक्षा के लिए पूरी तरह से आपके ब्राउज़र में संभाला जाता है"
+ },
+ "messages": {
+ "menu": {
+ "home": "होम",
+ "account": "लेखा",
+ "send": "भेजना",
+ "receive": "प्राप्त करना",
+ "export": "निर्यात",
+ "donate": "दान करना",
+ "elections": "चुनाव",
+ "contacts": "संपर्क",
+ "settings": "सेटिंग्स",
+ "disconnect": "डिस्कनेक्ट",
+ "network": "नेटवर्क आँकड़े",
+ "mining": "खनिज"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "संपर्क"
+ },
+ "electionsPage": {
+ "title": "चुनाव"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "कनेक्टेड मास्टर्नोड",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "राष्ट्रीय मुद्रा"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/hu.json b/src/translations/hu.json
index a8e9593e..c257fa1c 100644
--- a/src/translations/hu.json
+++ b/src/translations/hu.json
@@ -1,495 +1,539 @@
{
- "website":{
- "title":"Hivatalos Karbo webtárca",
- "description":"A Karbo hivatalos online tárcája - névtelen, biztonságos és teljes mértékben böngészőből kezelt az optimális biztonság érdekében"
+ "website": {
+ "title": "Hivatalos Qwertycoin webtárca",
+ "description": "A Qwertycoin hivatalos online tárcája - névtelen, biztonságos és teljes mértékben böngészőből kezelt az optimális biztonság érdekében"
},
"messages": {
- "menu": {
- "home": "Kezdőlap",
- "account": "Számla",
- "send": "Küldés",
- "receive": "Fogadás",
- "export": "Exportálás",
- "donate": "Adományozás",
- "settings": "Beállítások",
- "disconnect": "Szétkapcsolás",
- "network": "Hálózati statisztika",
- "mining": "Bányászás"
- },
- "global": {
- "loading": "Betöltés",
- "disableSecurity":"Biztonság kikapcsolása, megértettem a kockázatot",
- "passwordInvalidRequirements":"A jelszónak legalább 8 karakterből kell állnia és tartalmaznia kell egy nagybetűt, egy kisbetűt, egy számot és egy különleges karaktert",
- "passwordConfirmationNotMatching":"A megadott jelszavak nem egyeznek",
- "download":"Letöltés",
- "newVersionModal":{
- "title":"Elérhető egy új verzió",
- "content":"Szeretnéd újratölteni az oldalt az új verzió használatához?",
- "confirmText":"Igen",
- "cancelText":"Vissza"
- },
- "openWalletModal":{
- "title":"Tárca jelszava",
- "confirmText":"Megnyitás",
- "cancelText":"Mégsem"
- },
- "invalidPasswordModal":{
- "title":"Hupsz...",
- "content":"Érvénytelen jelszó",
- "confirmText":"OK"
- },
- "invalidMnemonicModal":{
- "title":"Hupsz...",
- "content":"Érvénytelen mnemonikus szósor",
- "confirmText":"OK"
- },
- "passwordNotComplexEnoughModal":{
- "title":"A jelszó nem elég összetett",
- "confirmText":"OK"
- },
- "permissionRequiredForCameraModal":{
- "title":"Hupsz...",
- "content":"A kamerához való hozzáférés szükséges a QR-kód beolvasásához",
- "confirmText":"OK"
- }
- },
- "bottom": {
- "termsOfUse": "Felhasználási feltételek",
- "privacyPolicy": "Adatvédelmi irányelvek",
- "support": "Ügyfélszolgálat",
- "donate": "Adományozás",
- "network": "Hálózati statisztika",
- "miningPool": "Bányász pool",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Biztonságos Karbo tárca",
- "tagLine": "A Karbo használatának legegyszerűbb módja - bárhol és bármikor",
- "actions": {
- "loadWallet": "Tárca betöltése",
- "importWallet": "Tárcaimportálás",
- "create": "Létrehozás",
- "createWallet": "Tárca létrehozása"
- },
- "notes": {
- "secure": {
- "title": "Biztonságos",
- "description": "Nincsenek szerverek, teljesen titkosított!"
- },
- "fast": {
- "title": "Gyors",
- "description": "Küldj bárhonnan, bármikor!"
- },
- "technology": {
- "title": "Egyedi technológia",
- "description": "Közvetlen kapcsolat a Karbo blokklánccal!"
- },
- "openSource": {
- "title": "Teljesen nyílt forrású",
- "description": "Elérhető a Githubon!"
- }
- }
- },
- "accountPage": {
- "title": "Számla",
- "subtitle": "Számlaáttekintés és tranzakciós előzmények",
- "synchronizingBlock": {
- "text": "Szinkronizálás..."
- },
- "balanceBlock": {
- "title": "Egyenleg",
- "unlocked": "Feloldva"
- },
- "historyBlock": {
- "title": "Tranzakciós előzmények",
- "pendingTxStatus": "Függőben",
- "emptyWallet": "Jelenleg nincsen egyenleged ebben a tárcában.",
- "waitSync": "Kérlek, várj, míg a tárca naprakész lesz",
- "beReallyPatient": "A kezdeti beállítás némi időbe telhet...",
- "getCoinAddress": "KRB fogadása"
- },
- "txDetails":{
- "title":"Tranzakciórészletek",
- "txHash":"Tranzakció hash",
- "feesOnTx":"Tranzakció díjai",
- "blockHeight":"Blokk",
- "paymentId":"Fizetési azonosító",
- "txPrivKey":"Tranzakció magánkulcs"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Jelszómódosítás",
- "oldPassword":{
- "label":"Régi jelszó",
- "invalid":"Érvénytelen jelszó"
- },
- "newPassword":{
- "label":"Válassz új jelszót"
- },
- "newPasswordConfirm":{
- "label":"Ismételd meg az új jelszót"
- },
- "confirm":"Jelszómódosítás",
- "modalSuccess":{
- "title":"Jelszó módosítva!",
- "confirmText":"OK"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"A tárcád létrehozása folyamatban...",
- "subtitle":"Majdnem kész",
- "waitingMessage":"Tárcád létrehozása..."
- },
- "finalizationStep":{
- "title":"Ez egyszerű volt. A számlád rendelkezésre áll!",
- "subtitle":"Állj készen a Karbo használatára",
- "passwordSelectionBlock":{
- "label":"Védd a tárcád"
- },
- "passwordConfirmBlock":{
- "label":"Erősítsd meg a jelszót"
- },
- "validPassword":"Megadott jelszó használata",
- "backupBlock":{
- "title":"Mentsd el a visszaállításra szolgáló privát adataidat.",
- "option1":"1. ",
- "option2":"2. ",
- "titlePdf":"lehetőség: másolat letöltése PDF-ben",
- "titleManualWrite":"lehetőség: kulcsok lejegyzése",
- "privateKeys":"Privát kulcs",
- "mnemonicPhrase":"Mnemonikus szósor",
- "separatorManualMethodsSolution":" vagy ",
- "confirmManuallyWritten":"Lejegyeztem",
- "warningMessage":"**Ne veszítsd el!** Ha elveszted, nem lehet visszaállítani. **Ne oszd meg!** Pénzedet ellophatják, ha ezt a fájlt megosztod mással, esetleg rosszindulatú, adathalász oldalon közzéteszed. **Készíts biztonsági másolatot!** Tartsd úgy biztonságban, mint a több millió dollárt, amit egyszer érhet. ",
- "finishButton":"Megértettem. Tovább."
- }
- },
- "disclaimerBlock":{
- "title":"A MasariWallet használatának kockázatai",
- "content":"A KarboWallet egy webes felület, mely lehetővé teszi a Karbo használatát teljes csomópont futtatása nélkül. Kezeld úgy a KarboWalletet, mintha az a valódi pénztárcád lenne."
- }
- },
- "donatePage":{
- "title":"Adományozás",
- "subtitle":"Segíts a fejlesztés finanszírozásában és a számlák kifizetésében",
- "webwalletBlock":{
- "title":"Webtárca",
- "content":"A webtárcát Gnock fejleszti szabadidejében. Ha szeretnéd segíteni a fejlesztést, a szerverek fizetését és tetszik az applikáció, úgy vedd fontolóra az adományozást:
"
- },
- "devFundBlock":{
- "title":"Karbo fejlesztési alap",
- "content":"Ha szeretnél segíteni a Karbonak, az alábbi címekre adományozhatsz"
- }
- },
- "supportPage":{
- "title":"Ügyfélszolgálat",
- "subtitle":"Itt vagyunk, hogy segítsünk!",
- "getInTouchBlock":{
- "title":"Lépjünk kapcsolatba!",
- "content":"Visszajelzésed vagy ötleted van a tárcával kapcsolatban? Keress fel bennünket!",
- "discord":"Karbo Discord-csatorna"
- }
- },
- "networkPage":{
- "title":"Hálózati statisztika",
- "subtitle":"Betekintés a Karbo hálózatába",
- "statsBlock":{
- "hashrate":"Hálózati hashrate",
- "height":"Blokklánc hossza",
- "difficulty":"Hálózati nehézség",
- "lastTimeBlock":"Utolsó blokk ideje",
- "lastReward":"Utolsó blokk jutalma"
- }
- },
- "sendPage":{
- "title":"KRB küldése",
- "sendBlock":{
- "address":{
- "label":"Kedvezményezett címe",
- "placeholder":"Írja be azt a címet, ahová pénzt szeretne küldeni",
- "invalid":"A kedvezményezett címe érvénytelen",
- "fundsTo":"A pénz ide kerül küldésre:",
- "receiver":"Fogadás",
- "description":"Leírás"
- },
- "amount":{
- "label":"Küldendő mennyiség",
- "invalid":"Érvénytelen mennyiség"
- },
- "paymentId":{
- "label":"Fizetési azonosító (opcionális)",
- "invalid":"Érvénytelen fizetési azonosító. Hosszának 16 vagy 64 karakternek kell lennie"
- },
- "sendButton":"Küldés",
- "cancelButton":"Mégsem"
- },
- "qrCodeScanning":{
- "explication":"Mutasd be a QR-kódot"
- },
- "notEnoughMoneyModal":{
- "title":"Hupsz...",
- "content":"Egyenleged nem elegendő a tranzakció végrehajtásához",
- "confirmText":"OK"
- },
- "thankYouDonationModal":{
- "title":"Köszönjük az adományt!",
- "content":"Értékeljük a segítséged. Ez az adomány is segít jobbá tenni a Karbot.",
- "confirmText":"OK"
- },
- "transferSentModal":{
- "title":"Sikeres tranzakció!",
- "confirmText":"OK"
- },
- "transferExceptionModal":{
- "title":"Hupsz...",
- "content":"Hiba történt. Kérlek, jelentsd az alábbi hibát: {details}",
- "confirmText":"OK"
- },
- "invalidAmountModal":{
- "title":"Hupsz...",
- "content":"Érvénytelen mennyiség",
- "confirmText":"OK"
- },
- "creatingTransferModal":{
- "title":"Tranzakció létrehozása...",
- "content":"Kérlek, várj..."
- },
- "finalizingTransferModal":{
- "title":"Tranzakció véglegesítése...",
- "content":"Kérlek, várj..."
- },
- "confirmTransactionModal":{
- "title":"Megerősíted a tranzakciót?",
- "content":"Mennyiség: {amount} Díj: {fees} Összesen: {total}",
- "confirmText":"Megerősítés",
- "cancelText":"Mégsem"
- },
- "waitingNfcModal":{
- "title":"Waiting Nfc",
- "content":"Bring closer to the other device"
- }
- },
- "receivePage":{
- "title":"KRB fogadása",
- "receiveBlock":{
- "address":{
- "title":"Pénz fogadására szolgáló cím:",
- "label":"Pénz fogadásához ezt a címet add meg"
- },
- "qrCode":{
- "title":"Vagy használj egyéni QR-kódot",
- "labelAmount":"Mennyiség (opcionális)",
- "labelRecipient":"Kedvezményezett neve (opcionális)",
- "labelDescription":"Tranzakció leírása (opcionális)",
- "updateButton":"Frissítés"
- }
- },
- "qrBlock":{
- "title":"Egyéni QR-kód"
- },
- "waitingNfcToWriteModal":{
- "title":"Waiting Nfc",
- "titleSuccess":"Nfc Tag written",
- "content":"Bring closer the NFC tag to write"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Tag capacity insufficient"
- }
- },
- "miningPage":{
- "title":"Bányássz közvetlenül böngészőből",
- "subtitle":"Támogasd a hálózatot a bányászással és szerezz érte jutalmat Karboban",
- "parameterBlock":{
- "title":"Paraméterek",
- "labelDestinationAddress":"Céltárca",
- "labelThreads":"Szálak száma (több = nagyobb hashrate)",
- "start":"Indítás",
- "stop":"Megállítás"
- },
- "statisticsBlocks":{
- "title":"Statisztika",
- "validShares":"Érvényes részesedés",
- "hashrate":"Hashrate",
- "maxHashrate":"Maximális hashrate",
- "dedicatedHardware":"Bányászásra dedikált szoftver és hardver használatával nagyobb bevételre tehetsz szert és segíthetsz a hálózat decentralizálásában.",
- "miningHandledBy":"Ezt a bányászást a get.masaricoin.com pool kezeli"
- }
- },
- "settingsPage":{
- "title":"Beállítások",
- "subtitle":"Módosítsd a beállításaidat",
- "versionBlock":{
- "versionNumber":"Version number: ",
- "versionCode":"Version code: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Tárcafrissítés sebessége (több erőforrást igényel)",
- "fastest":"Leggyorsabb",
- "fast":"Gyors",
- "medium":"Közepes",
- "slow":"Lassú"
- },
- "language":{
- "label":"Language"
- },
- "readMinerTx":{
- "label":"Bányászási tranzakciók beolvasása (csak egyedülálló bányászás esetén)"
- }
- },
- "changePasswordButton":"Jelszómódosítás",
- "deleteWalletButton":"Tárca törlése (helyi másolat)",
- "walletSettings":{
- "creationHeight":{
- "label":"Tárcalétrehozási blokklánchossz"
- },
- "currentScanningHeight": {
- "label": "Jelenlegi beolvasási hossz"
- },
- "updateButton":"Frissítés"
- },
- "deleteWalletModal":{
- "title":"Tárca törlése (helyi másolat)",
- "content":"Biztosan törölni szeretnéd a tárcádat?",
- "confirmText":"Igen, biztosan",
- "cancelText":"Mégsem"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Paraméterek",
- "password":{
- "label":"Tárcajelszó"
- },
- "passwordConfirm":{
- "label":"Jelszó megerősítése",
- "invalid":"A jelszavak nem egyeznek"
- },
- "importHeight":{
- "label":"Importálási blokklánchossz:"
- }
- }
- },
- "importFromQrPage":{
- "title":"Tárca importálása QR-kóddal",
- "subtitle":"Tárca importálása offline biztonsági mentésből",
- "qrCodeBlock":{
- "title":"QR-kód",
- "startScanButton":"Beolvasás",
- "importButton":"Importálás"
- },
- "qrScanningBlock":{
- "title":"Mutasd be a QR-kódot"
- }
- },
- "exportPage":{
- "title":"Készíts biztonsági mentést az adataidról",
- "publicAddressBlock":{
- "title":"Nyilvános tárcacím"
- },
- "pdfBlock":{
- "title":"Biztonsági mentés PDF-ben",
- "downloadButton":"Letöltés"
- },
- "warningBlock":{
- "title":"Figyelmeztetés",
- "content":"Ha a privát kulcsaid vagy a mnemonikus szósorod mentését választod, úgy saját biztonságod érdekében ne tárold azokat egyszerű szövegként. A fájl egy alternatív megoldásként szolgál, ez esetben a kulcsaid titkosítottak és tartalmazza a tranzakciód biztonsági mentését is, így megkímél egy jövőbeli szinkronizálástól."
- },
- "exportBlock":{
- "title":"Nyers adatok exportálása",
- "privateKeysButton":"Privát kulcsok beszerzése",
- "mnemonicKeysButton":"Mnemonikus szósor beszerzése",
- "fileButton":"Exportálás fájlba"
- },
- "walletKeysModal":{
- "title":"Privát kulcsok",
- "confirmText":"OK",
- "content":"Kérlek, gondosan tárold a kulcsokat. Birtoklása a hozzá tartozó pénzösszeg birtoklását is jelenti.! Privát költőkulcs: {privSpendKey} Privát figyelőkulcs: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Mnemonikus szósor",
- "confirmText":"OK",
- "content":"Kérlek, gondosan tárold a mnemonikus szósort. Birtoklása a hozzá tartozó pénzösszeg birtoklását is jelenti.! A szósor: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"Milyen nyelven kéred a mnemonikus szósorod?",
- "confirmText":"Exportálás"
- }
- },
- "importPage":{
- "title":"Tárca létrehozása",
- "subtitle":"Korábban létrehozott kulcsokkal, fájllal vagy mnemonikus szósorral",
- "chooseMethod":"Válassz importálási módszert:",
- "fromKeys":"Kulcsok",
- "fromFile":"Fájl",
- "fromMnemonic":"Mnemonikus szósor",
- "fromQr":"QR-kód"
- },
- "termsOfUsePage":{
- "title":"Felhasználási feltételek",
- "subtitle":"Kérlek, alaposan olvasd el."
- },
- "privacyPolicyPage":{
- "title":"Privacy Policy",
- "subtitle":"Kérlek, alaposan olvasd el."
- },
- "importFromFilePage":{
- "title":"Tárca importálása biztonsági mentési fájllal",
- "subtitle":"Használd a biztonsági mentési fájlod a tárca létrehozásához",
- "walletBlock":{
- "title":"Tárcafájl",
- "label":"Tallózás",
- "importButton":"Importálás"
- }
- },
- "importFromMnemonicPage":{
- "title":"Tárca importálása mnemonikus szósorral",
- "subtitle":"Használd a szósorodat a tárca létrehozásához",
- "mnemonicBlock":{
- "title":"Mnemonikus szósor",
- "mnemonic":{
- "label":"Mnemonikus szósor: 25 szó",
- "invalid":"Érvénytelen mnemonikus szósor",
- "language":"Nyelv"
- },
- "importButton":"Importálás"
- }
- },
- "importFromKeysPage":{
- "title":"Tárca importálása kulcsokkal",
- "subtitle":"Használd a kulcsaidat a tárca létrehozásához",
- "parametersBlock":{
- "viewOnlyWallet":{
- "label":"Csak megtekinthető (view only) tárcát szeretnél?"
- }
- },
- "keysBlock":{
- "titleNotViewOnly":"Tárcakulcsok",
- "titleViewOnly":"sak megtekinthető tárca",
- "privateSpend":{
- "label":"Privát költőkulcs"
- },
- "privateView":{
- "label":"Privát figyelőkulcs",
- "optional":"(opcionális)"
- },
- "publicKey":{
- "label":"Nyilvános kulcs"
- },
- "importButton":"Importálás"
- }
- }
+ "menu": {
+ "home": "Kezdőlap",
+ "account": "Számla",
+ "send": "Küldés",
+ "receive": "Fogadás",
+ "export": "Exportálás",
+ "donate": "Adományozás",
+ "elections": "Választások",
+ "contacts": "Kapcsolatok",
+ "settings": "Beállítások",
+ "disconnect": "Szétkapcsolás",
+ "network": "Hálózati statisztika",
+ "mining": "Bányászás"
+ },
+ "global": {
+ "loading": "Betöltés",
+ "disableSecurity": "Biztonság kikapcsolása, megértettem a kockázatot",
+ "passwordInvalidRequirements": "A jelszónak legalább 8 karakterből kell állnia és tartalmaznia kell egy nagybetűt, egy kisbetűt, egy számot és egy különleges karaktert",
+ "passwordConfirmationNotMatching": "A megadott jelszavak nem egyeznek",
+ "download": "Letöltés",
+ "newVersionModal": {
+ "title": "Elérhető egy új verzió",
+ "content": "Szeretnéd újratölteni az oldalt az új verzió használatához?",
+ "confirmText": "Igen",
+ "cancelText": "Vissza"
+ },
+ "openWalletModal": {
+ "title": "Tárca jelszava",
+ "confirmText": "Megnyitás",
+ "cancelText": "Mégsem"
+ },
+ "invalidPasswordModal": {
+ "title": "Hupsz...",
+ "content": "Érvénytelen jelszó",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Hupsz...",
+ "content": "Érvénytelen mnemonikus szósor",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "A jelszó nem elég összetett",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Hupsz...",
+ "content": "A kamerához való hozzáférés szükséges a QR-kód beolvasásához",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Felhasználási feltételek",
+ "privacyPolicy": "Adatvédelmi irányelvek",
+ "support": "Ügyfélszolgálat",
+ "donate": "Adományozás",
+ "network": "Hálózati statisztika",
+ "miningPool": "Bányász pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Biztonságos Qwertycoin tárca",
+ "tagLine": "A Qwertycoin használatának legegyszerűbb módja - bárhol és bármikor",
+ "tagLineTwo": "A legegyszerűbb módja a Qwertycoin használatának",
+ "actions": {
+ "loadWallet": "Tárca betöltése",
+ "importWallet": "Tárcaimportálás",
+ "create": "Létrehozás",
+ "createWallet": "Tárca létrehozása"
+ }
+ },
+ "accountPage": {
+ "title": "Számla",
+ "subtitle": "Számlaáttekintés és tranzakciós előzmények",
+ "synchronizingBlock": {
+ "text": "Szinkronizálás..."
+ },
+ "balanceBlock": {
+ "title": "Egyenleg",
+ "unlocked": "Feloldva"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Tranzakciós előzmények",
+ "pendingTxStatus": "Függőben",
+ "emptyWallet": "Jelenleg nincsen egyenleged ebben a tárcában.",
+ "waitSync": "Kérlek, várj, míg a tárca naprakész lesz",
+ "beReallyPatient": "A kezdeti beállítás némi időbe telhet...",
+ "getCoinAddress": "QWC fogadása"
+ },
+ "txDetails": {
+ "title": "Tranzakciórészletek",
+ "txHash": "Tranzakció hash",
+ "feesOnTx": "Tranzakció díjai",
+ "blockHeight": "Blokk",
+ "paymentId": "Fizetési azonosító",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Tranzakció magánkulcs"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Jelszómódosítás",
+ "oldPassword": {
+ "label": "Régi jelszó",
+ "invalid": "Érvénytelen jelszó"
+ },
+ "newPassword": {
+ "label": "Válassz új jelszót"
+ },
+ "newPasswordConfirm": {
+ "label": "Ismételd meg az új jelszót"
+ },
+ "confirm": "Jelszómódosítás",
+ "modalSuccess": {
+ "title": "Jelszó módosítva!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Kapcsolatok"
+ },
+ "electionsPage": {
+ "title": "Választások"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "A tárcád létrehozása folyamatban...",
+ "subtitle": "Majdnem kész",
+ "waitingMessage": "Tárcád létrehozása..."
+ },
+ "finalizationStep": {
+ "title": "Ez egyszerű volt. A számlád rendelkezésre áll!",
+ "subtitle": "Állj készen a Qwertycoin használatára",
+ "passwordSelectionBlock": {
+ "label": "Védd a tárcád"
+ },
+ "passwordConfirmBlock": {
+ "label": "Erősítsd meg a jelszót"
+ },
+ "validPassword": "Megadott jelszó használata",
+ "backupBlock": {
+ "title": "Mentsd el a visszaállításra szolgáló privát adataidat.",
+ "option1": "1. ",
+ "option2": "2. ",
+ "titlePdf": "lehetőség: másolat letöltése PDF-ben",
+ "titleManualWrite": "lehetőség: kulcsok lejegyzése",
+ "privateKeys": "Privát kulcs",
+ "mnemonicPhrase": "Mnemonikus szósor",
+ "separatorManualMethodsSolution": " vagy ",
+ "confirmManuallyWritten": "Lejegyeztem",
+ "warningMessage": "**Ne veszítsd el!** Ha elveszted, nem lehet visszaállítani. **Ne oszd meg!** Pénzedet ellophatják, ha ezt a fájlt megosztod mással, esetleg rosszindulatú, adathalász oldalon közzéteszed. **Készíts biztonsági másolatot!** Tartsd úgy biztonságban, mint a több millió dollárt, amit egyszer érhet. ",
+ "finishButton": "Megértettem. Tovább."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "A QwertycoinWallet használatának kockázatai",
+ "content": "A QwertycoinWallet egy webes felület, mely lehetővé teszi a Qwertycoin használatát teljes csomópont futtatása nélkül. Kezeld úgy a QwertycoinWalletet, mintha az a valódi pénztárcád lenne."
+ }
+ },
+ "donatePage": {
+ "title": "Adományozás",
+ "subtitle": "Segíts a fejlesztés finanszírozásában és a számlák kifizetésében",
+ "webwalletBlock": {
+ "title": "Webtárca",
+ "content": "A webtárcát Gnock fejleszti szabadidejében. Ha szeretnéd segíteni a fejlesztést, a szerverek fizetését és tetszik az applikáció, úgy vedd fontolóra az adományozást:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin fejlesztési alap",
+ "content": "Ha szeretnél segíteni a Qwertycoinnak, az alábbi címekre adományozhatsz"
+ }
+ },
+ "supportPage": {
+ "title": "Ügyfélszolgálat",
+ "subtitle": "Itt vagyunk, hogy segítsünk!",
+ "getInTouchBlock": {
+ "title": "Lépjünk kapcsolatba!",
+ "content": "Visszajelzésed vagy ötleted van a tárcával kapcsolatban? Keress fel bennünket!",
+ "discord": "Qwertycoin Discord-csatorna"
+ }
+ },
+ "networkPage": {
+ "title": "Hálózati statisztika",
+ "subtitle": "Betekintés a Qwertycoin hálózatába",
+ "statsBlock": {
+ "connectNode": "Csatlakoztatott Masternode",
+ "hashrate": "Hálózati hashrate",
+ "height": "Blokklánc hossza",
+ "difficulty": "Hálózati nehézség",
+ "lastTimeBlock": "Utolsó blokk ideje",
+ "lastReward": "Utolsó blokk jutalma"
+ }
+ },
+ "sendPage": {
+ "title": "QWC küldése",
+ "sendBlock": {
+ "address": {
+ "label": "Kedvezményezett címe",
+ "placeholder": "Írja be azt a címet, ahová pénzt szeretne küldeni",
+ "invalid": "A kedvezményezett címe érvénytelen",
+ "fundsTo": "A pénz ide kerül küldésre:",
+ "receiver": "Fogadás",
+ "description": "Leírás"
+ },
+ "amount": {
+ "label": "Küldendő mennyiség",
+ "invalid": "Érvénytelen mennyiség"
+ },
+ "paymentId": {
+ "label": "Fizetési azonosító (opcionális)",
+ "invalid": "Érvénytelen fizetési azonosító. Hosszának 16 vagy 64 karakternek kell lennie"
+ },
+ "sendButton": "Küldés",
+ "cancelButton": "Mégsem"
+ },
+ "qrCodeScanning": {
+ "explication": "Mutasd be a QR-kódot"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Hupsz...",
+ "content": "Egyenleged nem elegendő a tranzakció végrehajtásához",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Köszönjük az adományt!",
+ "content": "Értékeljük a segítséged. Ez az adomány is segít jobbá tenni a Qwertycoint.",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Sikeres tranzakció!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Hupsz...",
+ "content": "Hiba történt. Kérlek, jelentsd az alábbi hibát: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Hupsz...",
+ "content": "Érvénytelen mennyiség",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Tranzakció létrehozása...",
+ "content": "Kérlek, várj..."
+ },
+ "finalizingTransferModal": {
+ "title": "Tranzakció véglegesítése...",
+ "content": "Kérlek, várj..."
+ },
+ "confirmTransactionModal": {
+ "title": "Megerősíted a tranzakciót?",
+ "content": "Mennyiség: {amount} Díj: {fees} Összesen: {total}",
+ "confirmText": "Megerősítés",
+ "cancelText": "Mégsem"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "QWC fogadása",
+ "receiveBlock": {
+ "address": {
+ "title": "Pénz fogadására szolgáló cím:",
+ "label": "Pénz fogadásához ezt a címet add meg"
+ },
+ "qrCode": {
+ "title": "Vagy használj egyéni QR-kódot",
+ "labelAmount": "Mennyiség (opcionális)",
+ "labelRecipient": "Kedvezményezett neve (opcionális)",
+ "labelDescription": "Tranzakció leírása (opcionális)",
+ "updateButton": "Frissítés"
+ }
+ },
+ "qrBlock": {
+ "title": "Egyéni QR-kód"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Bányássz közvetlenül böngészőből",
+ "subtitle": "Támogasd a hálózatot a bányászással és szerezz érte jutalmat Qwertycoinban",
+ "parameterBlock": {
+ "title": "Paraméterek",
+ "labelDestinationAddress": "Céltárca",
+ "labelThreads": "Szálak száma (több = nagyobb hashrate)",
+ "start": "Indítás",
+ "stop": "Megállítás"
+ },
+ "statisticsBlocks": {
+ "title": "Statisztika",
+ "validShares": "Érvényes részesedés",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Maximális hashrate",
+ "dedicatedHardware": "Bányászásra dedikált szoftver és hardver használatával nagyobb bevételre tehetsz szert és segíthetsz a hálózat decentralizálásában.",
+ "miningHandledBy": "Ezt a bányászást a pool.qwertycoin.org pool kezeli"
+ }
+ },
+ "settingsPage": {
+ "title": "Beállítások",
+ "subtitle": "Módosítsd a beállításaidat",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Tárcafrissítés sebessége (több erőforrást igényel)",
+ "fastest": "Leggyorsabb",
+ "fast": "Gyors",
+ "medium": "Közepes",
+ "slow": "Lassú"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "nemzeti valuta"
+ },
+ "readMinerTx": {
+ "label": "Bányászási tranzakciók beolvasása (csak egyedülálló bányászás esetén)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Jelszómódosítás",
+ "deleteWalletButton": "Tárca törlése (helyi másolat)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Tárcalétrehozási blokklánchossz"
+ },
+ "currentScanningHeight": {
+ "label": "Jelenlegi beolvasási hossz"
+ },
+ "updateButton": "Frissítés"
+ },
+ "deleteWalletModal": {
+ "title": "Tárca törlése (helyi másolat)",
+ "content": "Biztosan törölni szeretnéd a tárcádat?",
+ "confirmText": "Igen, biztosan",
+ "cancelText": "Mégsem"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Paraméterek",
+ "password": {
+ "label": "Tárcajelszó"
+ },
+ "passwordConfirm": {
+ "label": "Jelszó megerősítése",
+ "invalid": "A jelszavak nem egyeznek"
+ },
+ "importHeight": {
+ "label": "Importálási blokklánchossz:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Tárca importálása QR-kóddal",
+ "subtitle": "Tárca importálása offline biztonsági mentésből",
+ "qrCodeBlock": {
+ "title": "QR-kód",
+ "startScanButton": "Beolvasás",
+ "importButton": "Importálás"
+ },
+ "qrScanningBlock": {
+ "title": "Mutasd be a QR-kódot"
+ }
+ },
+ "exportPage": {
+ "title": "Készíts biztonsági mentést az adataidról",
+ "publicAddressBlock": {
+ "title": "Nyilvános tárcacím"
+ },
+ "pdfBlock": {
+ "title": "Biztonsági mentés PDF-ben",
+ "downloadButton": "Letöltés"
+ },
+ "warningBlock": {
+ "title": "Figyelmeztetés",
+ "content": "Ha a privát kulcsaid vagy a mnemonikus szósorod mentését választod, úgy saját biztonságod érdekében ne tárold azokat egyszerű szövegként. A fájl egy alternatív megoldásként szolgál, ez esetben a kulcsaid titkosítottak és tartalmazza a tranzakciód biztonsági mentését is, így megkímél egy jövőbeli szinkronizálástól."
+ },
+ "exportBlock": {
+ "title": "Nyers adatok exportálása",
+ "privateKeysButton": "Privát kulcsok beszerzése",
+ "mnemonicKeysButton": "Mnemonikus szósor beszerzése",
+ "fileButton": "Exportálás fájlba"
+ },
+ "walletKeysModal": {
+ "title": "Privát kulcsok",
+ "confirmText": "OK",
+ "content": "Kérlek, gondosan tárold a kulcsokat. Birtoklása a hozzá tartozó pénzösszeg birtoklását is jelenti.! Privát költőkulcs: {privSpendKey} Privát figyelőkulcs: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonikus szósor",
+ "confirmText": "OK",
+ "content": "Kérlek, gondosan tárold a mnemonikus szósort. Birtoklása a hozzá tartozó pénzösszeg birtoklását is jelenti.! A szósor: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "Milyen nyelven kéred a mnemonikus szósorod?",
+ "confirmText": "Exportálás"
+ }
+ },
+ "importPage": {
+ "title": "Tárca létrehozása",
+ "subtitle": "Korábban létrehozott kulcsokkal, fájllal vagy mnemonikus szósorral",
+ "chooseMethod": "Válassz importálási módszert:",
+ "fromKeys": "Kulcsok",
+ "fromFile": "Fájl",
+ "fromMnemonic": "Mnemonikus szósor",
+ "fromQr": "QR-kód"
+ },
+ "termsOfUsePage": {
+ "title": "Felhasználási feltételek",
+ "subtitle": "Kérlek, alaposan olvasd el."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Kérlek, alaposan olvasd el."
+ },
+ "importFromFilePage": {
+ "title": "Tárca importálása biztonsági mentési fájllal",
+ "subtitle": "Használd a biztonsági mentési fájlod a tárca létrehozásához",
+ "walletBlock": {
+ "title": "Tárcafájl",
+ "label": "Tallózás",
+ "importButton": "Importálás"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Tárca importálása mnemonikus szósorral",
+ "subtitle": "Használd a szósorodat a tárca létrehozásához",
+ "mnemonicBlock": {
+ "title": "Mnemonikus szósor",
+ "mnemonic": {
+ "label": "Mnemonikus szósor: 25 szó",
+ "invalid": "Érvénytelen mnemonikus szósor",
+ "language": "Nyelv"
+ },
+ "importButton": "Importálás"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Tárca importálása kulcsokkal",
+ "subtitle": "Használd a kulcsaidat a tárca létrehozásához",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Csak megtekinthető (view only) tárcát szeretnél?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Tárcakulcsok",
+ "titleViewOnly": "sak megtekinthető tárca",
+ "privateSpend": {
+ "label": "Privát költőkulcs"
+ },
+ "privateView": {
+ "label": "Privát figyelőkulcs",
+ "optional": "(opcionális)"
+ },
+ "publicKey": {
+ "label": "Nyilvános kulcs"
+ },
+ "importButton": "Importálás"
+ }
+ }
},
- "number":{
- },
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": false
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": false
+ }
}
}
diff --git a/src/translations/it.json b/src/translations/it.json
index 2277d0d7..bffd38d0 100644
--- a/src/translations/it.json
+++ b/src/translations/it.json
@@ -1,495 +1,538 @@
{
- "website":{
- "title":"Portafoglio online ufficiale per Karbo",
- "description":"Portafoglio online ufficiale per Karbo currency - anonimo, sicuro e completamente gestito nel tuo browser per una sicurezza ottimale"
+ "website": {
+ "title": "Portafoglio online ufficiale per Qwertycoin",
+ "description": "Portafoglio online ufficiale per Qwertycoin currency - anonimo, sicuro e completamente gestito nel tuo browser per una sicurezza ottimale"
},
"messages": {
- "menu": {
- "home": "Home",
- "account": "Account",
- "send": "Invia",
- "receive": "Ricevi",
- "export": "Esporta",
- "donate": "Dona",
- "settings": "Impostazioni",
- "disconnect": "Disconnetti",
- "network": "Statistiche del network"
- },
- "global": {
- "loading": "Caricamento",
- "disableSecurity":"Disabilita questa sicurezza, comprendo i rischi",
- "passwordInvalidRequirements":"La password richiede almeno 8 caratteri: 1 lettera maiuscola, 1 lettera minuscola, un numero e un carattere speciale",
- "passwordConfirmationNotMatching":"La password non corrisponde a quella precedentemente inserita",
- "download":"Download",
- "newVersionModal":{
- "title":"È disponibile una nuova versione",
- "content":"Vuoi ricaricare la pagina per ottenere la nuova versione?",
- "confirmText":"Si",
- "cancelText":"Indietro"
- },
- "openWalletModal":{
- "title":"Password portafoglio",
- "confirmText":"Apri",
- "cancelText":"Annulla"
- },
- "invalidPasswordModal":{
- "title":"Oops...",
- "content":"La tua password sembra invalida",
- "confirmText":"Ok"
- },
- "invalidMnemonicModal":{
- "title":"Oops...",
- "content":"La frase mnemonica è invalida",
- "confirmText":"Ok"
- },
- "passwordNotComplexEnoughModal":{
- "title":"La password non è sufficientemente complessa",
- "confirmText":"Ok"
- },
- "permissionRequiredForCameraModal":{
- "title":"Oops...",
- "content":"È necessario consentire l'accesso alla videocamera per eseguire la scansione del codice QR",
- "confirmText":"Ok"
- }
- },
- "bottom": {
- "termsOfUse": "Termini di utilizzo",
- "privacyPolicy": "politica sulla riservatezza",
- "support": "Supporto",
- "donate": "Dona",
- "network": "Statistiche del network",
- "miningPool": "Mining Pool",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Portafoglio sicuro per Karbo",
- "tagLine": "Il modo più semplice per usare Karbo - ovunque e in qualsiasi momento",
- "actions": {
- "loadWallet": "Carica il mio portafoglio",
- "importWallet": "Importa un portafoglio",
- "create": "Crea",
- "createWallet": "Crea un portafoglio"
- },
- "notes": {
- "secure": {
- "title": "Sicuro",
- "description": "Nessun server, completamente crittografato!"
- },
- "fast": {
- "title": "Veloce",
- "description": "Invia ovunque e in qualsiasi momento!"
- },
- "technology": {
- "title": "Tecnologia unica",
- "description": "Collegato direttamente alla blockchain di Karbo!"
- },
- "openSource": {
- "title": "Completamente open-source",
- "description": "Disponibile su Github!"
- }
- }
- },
- "accountPage": {
- "title": "Account",
- "subtitle": "Panoramica del tuo account e cronologia delle transazioni",
- "synchronizingBlock": {
- "text": "Sincronizzazione... "
- },
- "balanceBlock": {
- "title": "Il tuo bilancio",
- "unlocked": "Sbloccato"
- },
- "historyBlock": {
- "title": "Cronologia delle transazioni",
- "pendingTxStatus": "In attesa",
- "emptyWallet": "Al momento non disponi di fondi su questo portafoglio",
- "waitSync": "Si prega di attendere la fine della sincronizzazione",
- "beReallyPatient": "La prima sincronizzazione potrebbe richiedere alcuni minuti ...",
- "getCoinAddress": "Ricevi MSR"
- },
- "txDetails":{
- "title":"Dettagli transazione",
- "txHash":"Tx hash",
- "feesOnTx":"Commissione sulla Tx",
- "blockHeight":"Altezza sulla blockchain",
- "paymentId":"Payment ID",
- "txPrivKey":"Chiave privata della transazione"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Cambia la tua password",
- "oldPassword":{
- "label":"Vecchia password",
- "invalid":"La password è invalida"
- },
- "newPassword":{
- "label":"Scegli una nuova password per proteggere il tuo portafoglio"
- },
- "newPasswordConfirm":{
- "label":"Conferma la nuova password"
- },
- "confirm":"Cambia la password",
- "modalSuccess":{
- "title":"Password cambiata!",
- "confirmText":"Ok"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Il tuo portafoglio sta per essere generato...",
- "subtitle":"Mancano pochi istanti",
- "waitingMessage":"Generazione del portafoglio..."
- },
- "finalizationStep":{
- "title":"È stato semplice. Il tuo portafoglio è pronto!",
- "subtitle":"Tenetevi pronti a usare Karbo come mai prima d'ora",
- "passwordSelectionBlock":{
- "label":"Proteggi il tuo portafoglio"
- },
- "passwordConfirmBlock":{
- "label":"Conferma la password"
- },
- "validPassword":"Usa questa password",
- "backupBlock":{
- "title":"Scarica una copia crittografata delle mie credenziali per uso futuro",
- "option1":"Opzione 1: ",
- "option2":"Opzione 2: ",
- "titlePdf":"Scarica una copia PDF",
- "titleManualWrite":"Scrivi le mie chiavi",
- "privateKeys":"Chiavi private",
- "mnemonicPhrase":"Frase mnemonica",
- "separatorManualMethodsSolution":" o ",
- "confirmManuallyWritten":"Li ho scritti",
- "warningMessage":"**Non perderli!** È impossibile recuperarli se li perdi. **Non condividerli!** I tuoi fondi potrebbero essere rubati se utilizzi queste informazioni su siti malevoli o di phishing. **Crea un backup!** Proteggilo le tue credenziali come i milioni di dollari che un giorno potrebbe valere. ",
- "finishButton":"Ho capito. Continua"
- }
- },
- "disclaimerBlock":{
- "title":"Rischi nell'usare KarboWallet",
- "content":"KarboWallet è una interfaccia web-based. Ti aiuta ad usare Karbo senza eseguire un full node. Vi consigliamo di trattare MaraiWallet come trattereste il vostro portafoglio attuale."
- }
- },
- "donatePage":{
- "title":"Dona",
- "subtitle":"Aiutaci a finanziare lo sviluppo e a pagare le bollette",
- "webwalletBlock":{
- "title":"Webwallet",
- "content":"Questo webwallet è sviluppato da Gnock nel suo tempo libero. Se vuoi aiutare lo sviluppo, aiutare a pagare server e ti piace questa applicazione, prendi in considerazione la possibilità di effettuare una piccola donazione.:
"
- },
- "KarboFundBlock":{
- "title":"Fondo per lo sviluppo di Karbo",
- "content":"Per aiutare Karbo puoi donare a questo indirizzo "
- }
- },
- "supportPage":{
- "title":"Support",
- "subtitle":"Bisogno di aiuto? siamo qui per aiutarti!",
- "getInTouchBlock":{
- "title":"Mettiamoci in contatto!",
- "content":"Se hai idee o feedback per migliorare il portafoglio, contattaci!",
- "discord":"Karbo Discord Channel"
- }
- },
- "networkPage":{
- "title":"Statistiche del network",
- "subtitle":"Dettagli sul network Karbo",
- "statsBlock":{
- "hashrate":"Network Hashrate",
- "height":"Altezza blockchain",
- "difficulty":"Difficoltà network",
- "lastTimeBlock":"Ultimo blocco trovato",
- "lastReward":"Ultima ricompensa"
- }
- },
- "sendPage":{
- "title":"Invia MSR",
- "sendBlock":{
- "address":{
- "label":"Indirizzo di destinazione",
- "placeholder":"Scrivi l'indirizzo nel quale vuoi inviare i fondi",
- "invalid":"L'indirizzo di destinazione è errato",
- "fundsTo":"I fondi verranno inviati a ",
- "receiver":"Destinatario",
- "description":"Descrizione"
- },
- "amount":{
- "label":"Importo da inviare",
- "invalid":"L'importo non è valido"
- },
- "paymentId":{
- "label":"Payment ID (opzionale)",
- "invalid":"Il Payment ID è invalido. La lunghezza deve essere di 16 o 64 caratteri"
- },
- "sendButton":"Invia",
- "cancelButton":"Annulla"
- },
- "qrCodeScanning":{
- "explication":"Mostra il codice QR"
- },
- "notEnoughMoneyModal":{
- "title":"Oops...",
- "content":"Non hai abbastanza fondi nel tuo portafoglio per completare il trasferimento",
- "confirmText":"Ok"
- },
- "thankYouDonationModal":{
- "title":"Grazie per la tua donazione!",
- "content":"Il tuo aiuto è molto apprezzato. Questa donazione contribuirà a rendere Karbo ancora migliore",
- "confirmText":"Ok"
- },
- "transferSentModal":{
- "title":"Trasferimento inviato con successo!",
- "confirmText":"Ok"
- },
- "transferExceptionModal":{
- "title":"Oops...",
- "content":"Si è verificato un errore. Si prega di segnalare questo errore: {details}",
- "confirmText":"Ok"
- },
- "invalidAmountModal":{
- "title":"Oops...",
- "content":"Importo invalido",
- "confirmText":"Ok"
- },
- "creatingTransferModal":{
- "title":"Creazione del trasferimento...",
- "content":"Per favore attendi..."
- },
- "finalizingTransferModal":{
- "title":"Finalizzazione del trasferimento...",
- "content":"Per favore attendi..."
- },
- "confirmTransactionModal":{
- "title":"Confermare transferimento?",
- "content":"Amount: {amount} Fees: {fees} Total: {total}",
- "confirmText":"Conferma",
- "cancelText":"Annulla"
- },
- "waitingNfcModal":{
- "title":"Waiting Nfc",
- "content":"Avvicinati di più all'altro device"
- }
- },
- "receivePage":{
- "title":"Ricevi MSR",
- "receiveBlock":{
- "address":{
- "title":"Il tuo indirizzo per ricevere i fondi",
- "label":"Dai questo indirizzo per ricevere fondi"
- },
- "qrCode":{
- "title":"O personalizza il codice QR",
- "labelAmount":"Importo (opzionale)",
- "labelRecipient":"Nome del destinatario (opzionale)",
- "labelDescription":"Descrizione della transazione (opzionale)",
- "updateButton":"Update"
- }
- },
- "qrBlock":{
- "title":"Il tuo codice QR personalizzato"
- },
- "waitingNfcToWriteModal":{
- "title":"Waiting Nfc",
- "titleSuccess":"Nfc Tag written",
- "content":"Avvicinati di più all'altro device"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Tag capacity insufficient"
- }
- },
- "miningPage":{
- "title":"Mina direttamente nel tuo browser",
- "subtitle":"Supporta il network minando e ricevi MSR come ricompensa",
- "parameterBlock":{
- "title":"Parametri",
- "labelDestinationAddress":"Portafoglio di destinazione",
- "labelThreads":"Numero di threads (più = Hashrate più elevato)",
- "start":"Start",
- "stop":"Stop"
- },
- "statisticsBlocks":{
- "title":"Statistiche",
- "validShares":"Valid shares",
- "hashrate":"Hashrate",
- "maxHashrate":"Max Hashrate",
- "dedicatedHardware":"Con software e hardware dedicato al mining potresti raggiungere un hashrate da due a tre volte più elevato.",
- "miningHandledBy":"Questo mining è gestito dalla pool get.Karbocoin.com"
- }
- },
- "settingsPage":{
- "title":"Impostazioni",
- "subtitle":"Cambia i tuoi parametri qui",
- "versionBlock":{
- "versionNumber":"Version number: ",
- "versionCode":"Version code: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Speed to update the wallet (consumerà più energia)",
- "fastest":"Più veloce",
- "fast":"Veloce",
- "medium":"Medio",
- "slow":"Lento"
- },
- "language":{
- "label":"Language"
- },
- "readMinerTx":{
- "label":"Leggi transazioni del miner(solo mining)"
- }
- },
- "changePasswordButton":"Cambia la password del mio portafoglio",
- "deleteWalletButton":"Elimina il mio portafoglio (copia locale)",
- "walletSettings":{
- "creationHeight":{
- "label":"Altezza a cui è stato creato il portafoglio"
- },
- "currentScanningHeight": {
- "label": "Altezza di scansione attuale della blockchain"
- },
- "updateButton":"Update"
- },
- "deleteWalletModal":{
- "title":"Elimina il mio wallet (copia locale)",
- "content":"Sei VERAMENTE sicuro di voler canecellare il tuo portafoglio?",
- "confirmText":"Si, sono sicuro",
- "cancelText":"Annulla"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Parameter",
- "password":{
- "label":"Password per proteggere il tuo portafoglio"
- },
- "passwordConfirm":{
- "label":"Conferma la password",
- "invalid":"La password non coincide con quella precedentemente scritta"
- },
- "importHeight":{
- "label":"Altezza di creazione del portafoglio"
- }
- }
- },
- "importFromQrPage":{
- "title":"Importa portafoglio da codice QR",
- "subtitle":"Importa un portafoglio da un backup offline",
- "qrCodeBlock":{
- "title":"QR code",
- "startScanButton":"Inizia la scansione",
- "importButton":"Importa"
- },
- "qrScanningBlock":{
- "title":"Presentare il codice QR"
- }
- },
- "exportPage":{
- "title":"Crea un backup delle tue credenziali",
- "publicAddressBlock":{
- "title":"Il tuo indirizzo pubblico"
- },
- "pdfBlock":{
- "title":"Backup in PDF",
- "downloadButton":"Download"
- },
- "warningBlock":{
- "title":"Attenzione",
- "content":"Se scegli di salvare le tue chiavi private o la frase mnemonica, NON salvarla in un luogo non protetto(crittografato) per la tua sicurezza. Il file è una soluzione alternativa dove le tue chiavi vengono crittografate e contiene un backup di tutte le tue transazioni per risparmiarti future sincronizzazioni."
- },
- "exportBlock":{
- "title":"Esporta il tuo RAW delle credenziali",
- "privateKeysButton":"Dammi la mia chiave privata",
- "mnemonicKeysButton":"Dammi la mia frase mnemonica",
- "fileButton":"Esporta in un file"
- },
- "walletKeysModal":{
- "title":"Chiavi private",
- "confirmText":"Ok",
- "content":"Si prega di conservare attentamente queste chiavi. Possederle significa possedere i fondi associati! Spend key: {privSpendKey} Private view key: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Frase mnemonica",
- "confirmText":"Ok",
- "content":"Si prega di conservare attentamente questa frase mnemonica. Possederla significa possedere i fondi associati! La frase è: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"In che lingua vuoi la tua frase mnemonica?",
- "confirmText":"Esporta"
- }
- },
- "importPage":{
- "title":"Creare un portafoglio",
- "subtitle":"Da chiavi, da file o da una frase mnemonica",
- "chooseMethod":"Scegli il tuo metodo di importazione:",
- "fromKeys":"Da chiavi",
- "fromFile":"Da un file",
- "fromMnemonic":"Da una frase mnemonica",
- "fromQr":"Da un codice QR"
- },
- "termsOfUsePage":{
- "title":"Termini di utilizzo",
- "subtitle":"Per favore leggere attentamente"
- },
- "privacyPolicyPage":{
- "title":"Privacy Policy",
- "subtitle":"Per favore leggere attentamente"
- },
- "importFromFilePage":{
- "title":"Importa un portafoglio da un file di backup",
- "subtitle":"Usa il tuo backup per creare un portafoglio",
- "walletBlock":{
- "title":"File del portafoglio",
- "label":"Seleziona il file",
- "importButton":"Importa"
- }
- },
- "importFromMnemonicPage":{
- "title":"Importa un portafoglio da una frase mnemonica",
- "subtitle":"Usa la tua frase per creare un portafoglio",
- "mnemonicBlock":{
- "title":"Frase mnemonica",
- "mnemonic":{
- "label":"Frase mnemonica : 25 parole",
- "invalid":"La frase mnemonica è invalida",
- "language":"Lingua"
- },
- "importButton":"Importa"
- }
- },
- "importFromKeysPage":{
- "title":"Importa un portafoglio da chiavi",
- "subtitle":"Usa le tue chiavi per creare un portafoglio",
- "parametersBlock":{
- "viewOnlyWallet":{
- "label":"Vuoi creare un portafoglio solo per vedere i fondi?"
- }
- },
- "keysBlock":{
- "titleNotViewOnly":"Wallet keys",
- "titleViewOnly":"View-Only Wallet",
- "privateSpend":{
- "label":"Private Spend Key"
- },
- "privateView":{
- "label":"Private View Key",
- "optional":"(optional)"
- },
- "publicKey":{
- "label":"Public key"
- },
- "importButton":"Importa"
- }
- }
+ "menu": {
+ "home": "Home",
+ "account": "Account",
+ "send": "Invia",
+ "receive": "Ricevi",
+ "export": "Esporta",
+ "donate": "Dona",
+ "elections": "Elezioni",
+ "contacts": "Contatti",
+ "settings": "Impostazioni",
+ "disconnect": "Disconnetti",
+ "network": "Statistiche del network"
+ },
+ "global": {
+ "loading": "Caricamento",
+ "disableSecurity": "Disabilita questa sicurezza, comprendo i rischi",
+ "passwordInvalidRequirements": "La password richiede almeno 8 caratteri: 1 lettera maiuscola, 1 lettera minuscola, un numero e un carattere speciale",
+ "passwordConfirmationNotMatching": "La password non corrisponde a quella precedentemente inserita",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "È disponibile una nuova versione",
+ "content": "Vuoi ricaricare la pagina per ottenere la nuova versione?",
+ "confirmText": "Si",
+ "cancelText": "Indietro"
+ },
+ "openWalletModal": {
+ "title": "Password portafoglio",
+ "confirmText": "Apri",
+ "cancelText": "Annulla"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "La tua password sembra invalida",
+ "confirmText": "Ok"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "La frase mnemonica è invalida",
+ "confirmText": "Ok"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "La password non è sufficientemente complessa",
+ "confirmText": "Ok"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "È necessario consentire l'accesso alla videocamera per eseguire la scansione del codice QR",
+ "confirmText": "Ok"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Termini di utilizzo",
+ "privacyPolicy": "politica sulla riservatezza",
+ "support": "Supporto",
+ "donate": "Dona",
+ "network": "Statistiche del network",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Portafoglio sicuro per Qwertycoin",
+ "tagLine": "Il modo più semplice per usare Qwertycoin - ovunque e in qualsiasi momento",
+ "tagLineTwo": "Il modo più semplice per usare Qwertycoin",
+ "actions": {
+ "loadWallet": "Carica il mio portafoglio",
+ "importWallet": "Importa un portafoglio",
+ "create": "Crea",
+ "createWallet": "Crea un portafoglio"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Panoramica del tuo account e cronologia delle transazioni",
+ "synchronizingBlock": {
+ "text": "Sincronizzazione... "
+ },
+ "balanceBlock": {
+ "title": "Il tuo bilancio",
+ "unlocked": "Sbloccato"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Cronologia delle transazioni",
+ "pendingTxStatus": "In attesa",
+ "emptyWallet": "Al momento non disponi di fondi su questo portafoglio",
+ "waitSync": "Si prega di attendere la fine della sincronizzazione",
+ "beReallyPatient": "La prima sincronizzazione potrebbe richiedere alcuni minuti ...",
+ "getCoinAddress": "Ricevi QWC"
+ },
+ "txDetails": {
+ "title": "Dettagli transazione",
+ "txHash": "Tx hash",
+ "feesOnTx": "Commissione sulla Tx",
+ "blockHeight": "Altezza sulla blockchain",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Chiave privata della transazione"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Cambia la tua password",
+ "oldPassword": {
+ "label": "Vecchia password",
+ "invalid": "La password è invalida"
+ },
+ "newPassword": {
+ "label": "Scegli una nuova password per proteggere il tuo portafoglio"
+ },
+ "newPasswordConfirm": {
+ "label": "Conferma la nuova password"
+ },
+ "confirm": "Cambia la password",
+ "modalSuccess": {
+ "title": "Password cambiata!",
+ "confirmText": "Ok"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Contatti"
+ },
+ "electionsPage": {
+ "title": "Elezioni"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Il tuo portafoglio sta per essere generato...",
+ "subtitle": "Mancano pochi istanti",
+ "waitingMessage": "Generazione del portafoglio..."
+ },
+ "finalizationStep": {
+ "title": "È stato semplice. Il tuo portafoglio è pronto!",
+ "subtitle": "Tenetevi pronti a usare Qwertycoin come mai prima d'ora",
+ "passwordSelectionBlock": {
+ "label": "Proteggi il tuo portafoglio"
+ },
+ "passwordConfirmBlock": {
+ "label": "Conferma la password"
+ },
+ "validPassword": "Usa questa password",
+ "backupBlock": {
+ "title": "Scarica una copia crittografata delle mie credenziali per uso futuro",
+ "option1": "Opzione 1: ",
+ "option2": "Opzione 2: ",
+ "titlePdf": "Scarica una copia PDF",
+ "titleManualWrite": "Scrivi le mie chiavi",
+ "privateKeys": "Chiavi private",
+ "mnemonicPhrase": "Frase mnemonica",
+ "separatorManualMethodsSolution": " o ",
+ "confirmManuallyWritten": "Li ho scritti",
+ "warningMessage": "**Non perderli!** È impossibile recuperarli se li perdi. **Non condividerli!** I tuoi fondi potrebbero essere rubati se utilizzi queste informazioni su siti malevoli o di phishing. **Crea un backup!** Proteggilo le tue credenziali come i milioni di dollari che un giorno potrebbe valere. ",
+ "finishButton": "Ho capito. Continua"
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Rischi nell'usare QwertycoinWallet",
+ "content": "QwertycoinWallet è una interfaccia web-based. Ti aiuta ad usare Qwertycoin senza eseguire un full node. Vi consigliamo di trattare MaraiWallet come trattereste il vostro portafoglio attuale."
+ }
+ },
+ "donatePage": {
+ "title": "Dona",
+ "subtitle": "Aiutaci a finanziare lo sviluppo e a pagare le bollette",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "Questo webwallet è sviluppato da Gnock nel suo tempo libero. Se vuoi aiutare lo sviluppo, aiutare a pagare server e ti piace questa applicazione, prendi in considerazione la possibilità di effettuare una piccola donazione.:
"
+ },
+ "QwertycoinFundBlock": {
+ "title": "Fondo per lo sviluppo di Qwertycoin",
+ "content": "Per aiutare Qwertycoin puoi donare a questo indirizzo "
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "Bisogno di aiuto? siamo qui per aiutarti!",
+ "getInTouchBlock": {
+ "title": "Mettiamoci in contatto!",
+ "content": "Se hai idee o feedback per migliorare il portafoglio, contattaci!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Statistiche del network",
+ "subtitle": "Dettagli sul network Qwertycoin",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network Hashrate",
+ "height": "Altezza blockchain",
+ "difficulty": "Difficoltà network",
+ "lastTimeBlock": "Ultimo blocco trovato",
+ "lastReward": "Ultima ricompensa"
+ }
+ },
+ "sendPage": {
+ "title": "Invia QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Indirizzo di destinazione",
+ "placeholder": "Scrivi l'indirizzo nel quale vuoi inviare i fondi",
+ "invalid": "L'indirizzo di destinazione è errato",
+ "fundsTo": "I fondi verranno inviati a ",
+ "receiver": "Destinatario",
+ "description": "Descrizione"
+ },
+ "amount": {
+ "label": "Importo da inviare",
+ "invalid": "L'importo non è valido"
+ },
+ "paymentId": {
+ "label": "Payment ID (opzionale)",
+ "invalid": "Il Payment ID è invalido. La lunghezza deve essere di 16 o 64 caratteri"
+ },
+ "sendButton": "Invia",
+ "cancelButton": "Annulla"
+ },
+ "qrCodeScanning": {
+ "explication": "Mostra il codice QR"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "Non hai abbastanza fondi nel tuo portafoglio per completare il trasferimento",
+ "confirmText": "Ok"
+ },
+ "thankYouDonationModal": {
+ "title": "Grazie per la tua donazione!",
+ "content": "Il tuo aiuto è molto apprezzato. Questa donazione contribuirà a rendere Qwertycoin ancora migliore",
+ "confirmText": "Ok"
+ },
+ "transferSentModal": {
+ "title": "Trasferimento inviato con successo!",
+ "confirmText": "Ok"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "Si è verificato un errore. Si prega di segnalare questo errore: {details}",
+ "confirmText": "Ok"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Importo invalido",
+ "confirmText": "Ok"
+ },
+ "creatingTransferModal": {
+ "title": "Creazione del trasferimento...",
+ "content": "Per favore attendi..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizzazione del trasferimento...",
+ "content": "Per favore attendi..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confermare transferimento?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Conferma",
+ "cancelText": "Annulla"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Avvicinati di più all'altro device"
+ }
+ },
+ "receivePage": {
+ "title": "Ricevi QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Il tuo indirizzo per ricevere i fondi",
+ "label": "Dai questo indirizzo per ricevere fondi"
+ },
+ "qrCode": {
+ "title": "O personalizza il codice QR",
+ "labelAmount": "Importo (opzionale)",
+ "labelRecipient": "Nome del destinatario (opzionale)",
+ "labelDescription": "Descrizione della transazione (opzionale)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Il tuo codice QR personalizzato"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Avvicinati di più all'altro device"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mina direttamente nel tuo browser",
+ "subtitle": "Supporta il network minando e ricevi QWC come ricompensa",
+ "parameterBlock": {
+ "title": "Parametri",
+ "labelDestinationAddress": "Portafoglio di destinazione",
+ "labelThreads": "Numero di threads (più = Hashrate più elevato)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistiche",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "Con software e hardware dedicato al mining potresti raggiungere un hashrate da due a tre volte più elevato.",
+ "miningHandledBy": "Questo mining è gestito dalla pool https://qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Impostazioni",
+ "subtitle": "Cambia i tuoi parametri qui",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (consumerà più energia)",
+ "fastest": "Più veloce",
+ "fast": "Veloce",
+ "medium": "Medio",
+ "slow": "Lento"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "valuta nazionale"
+ },
+ "readMinerTx": {
+ "label": "Leggi transazioni del miner(solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Cambia la password del mio portafoglio",
+ "deleteWalletButton": "Elimina il mio portafoglio (copia locale)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Altezza a cui è stato creato il portafoglio"
+ },
+ "currentScanningHeight": {
+ "label": "Altezza di scansione attuale della blockchain"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Elimina il mio wallet (copia locale)",
+ "content": "Sei VERAMENTE sicuro di voler canecellare il tuo portafoglio?",
+ "confirmText": "Si, sono sicuro",
+ "cancelText": "Annulla"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameter",
+ "password": {
+ "label": "Password per proteggere il tuo portafoglio"
+ },
+ "passwordConfirm": {
+ "label": "Conferma la password",
+ "invalid": "La password non coincide con quella precedentemente scritta"
+ },
+ "importHeight": {
+ "label": "Altezza di creazione del portafoglio"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importa portafoglio da codice QR",
+ "subtitle": "Importa un portafoglio da un backup offline",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Inizia la scansione",
+ "importButton": "Importa"
+ },
+ "qrScanningBlock": {
+ "title": "Presentare il codice QR"
+ }
+ },
+ "exportPage": {
+ "title": "Crea un backup delle tue credenziali",
+ "publicAddressBlock": {
+ "title": "Il tuo indirizzo pubblico"
+ },
+ "pdfBlock": {
+ "title": "Backup in PDF",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Attenzione",
+ "content": "Se scegli di salvare le tue chiavi private o la frase mnemonica, NON salvarla in un luogo non protetto(crittografato) per la tua sicurezza. Il file è una soluzione alternativa dove le tue chiavi vengono crittografate e contiene un backup di tutte le tue transazioni per risparmiarti future sincronizzazioni."
+ },
+ "exportBlock": {
+ "title": "Esporta il tuo RAW delle credenziali",
+ "privateKeysButton": "Dammi la mia chiave privata",
+ "mnemonicKeysButton": "Dammi la mia frase mnemonica",
+ "fileButton": "Esporta in un file"
+ },
+ "walletKeysModal": {
+ "title": "Chiavi private",
+ "confirmText": "Ok",
+ "content": "Si prega di conservare attentamente queste chiavi. Possederle significa possedere i fondi associati! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Frase mnemonica",
+ "confirmText": "Ok",
+ "content": "Si prega di conservare attentamente questa frase mnemonica. Possederla significa possedere i fondi associati! La frase è: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In che lingua vuoi la tua frase mnemonica?",
+ "confirmText": "Esporta"
+ }
+ },
+ "importPage": {
+ "title": "Creare un portafoglio",
+ "subtitle": "Da chiavi, da file o da una frase mnemonica",
+ "chooseMethod": "Scegli il tuo metodo di importazione:",
+ "fromKeys": "Da chiavi",
+ "fromFile": "Da un file",
+ "fromMnemonic": "Da una frase mnemonica",
+ "fromQr": "Da un codice QR"
+ },
+ "termsOfUsePage": {
+ "title": "Termini di utilizzo",
+ "subtitle": "Per favore leggere attentamente"
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Per favore leggere attentamente"
+ },
+ "importFromFilePage": {
+ "title": "Importa un portafoglio da un file di backup",
+ "subtitle": "Usa il tuo backup per creare un portafoglio",
+ "walletBlock": {
+ "title": "File del portafoglio",
+ "label": "Seleziona il file",
+ "importButton": "Importa"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importa un portafoglio da una frase mnemonica",
+ "subtitle": "Usa la tua frase per creare un portafoglio",
+ "mnemonicBlock": {
+ "title": "Frase mnemonica",
+ "mnemonic": {
+ "label": "Frase mnemonica : 25 parole",
+ "invalid": "La frase mnemonica è invalida",
+ "language": "Lingua"
+ },
+ "importButton": "Importa"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importa un portafoglio da chiavi",
+ "subtitle": "Usa le tue chiavi per creare un portafoglio",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Vuoi creare un portafoglio solo per vedere i fondi?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View-Only Wallet",
+ "privateSpend": {
+ "label": "Private Spend Key"
+ },
+ "privateView": {
+ "label": "Private View Key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Importa"
+ }
+ }
},
- "number":{
-
- },
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": false
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": false
+ }
}
}
diff --git a/src/translations/ja.json b/src/translations/ja.json
new file mode 100644
index 00000000..5e3ac017
--- /dev/null
+++ b/src/translations/ja.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin Wallet | シンプル、シームレス、安全 未来へようこそ。",
+ "description": "Official online wallet for Qwertycoin currency - fully handled in your browser for optimal security"
+ },
+ "messages": {
+ "menu": {
+ "home": "ホーム",
+ "account": "アカウント",
+ "send": "送る",
+ "receive": "受け取る",
+ "export": "輸出する",
+ "donate": "寄付する",
+ "elections": "選挙",
+ "contacts": "連絡先",
+ "settings": "設定",
+ "disconnect": "切断する",
+ "network": "ネットワーク統計",
+ "mining": "採鉱"
+ },
+ "global": {
+ "loading": "ロード中",
+ "disableSecurity": "このセキュリティを無効にしてください、私はリスクを理解しています",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "ダウンロード",
+ "newVersionModal": {
+ "title": "新しいバージョンが利用可能です",
+ "content": "新しいバージョンをロードするためにリロードしますか?",
+ "confirmText": "はい",
+ "cancelText": "バック"
+ },
+ "openWalletModal": {
+ "title": "ウォレットパスワード",
+ "confirmText": "開いた",
+ "cancelText": "キャンセル"
+ },
+ "invalidPasswordModal": {
+ "title": "おっとっと...",
+ "content": "Your password seems invalid",
+ "confirmText": "はい"
+ },
+ "invalidMnemonicModal": {
+ "title": "おっとっと...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "はい"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "はい"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "おっとっと...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "はい"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin 財布",
+ "tagLine": "どこでも。いつでも。どこでも。 任意のデバイス",
+ "tagLineTwo": "最も簡単な使い方 Qwertycoin",
+ "actions": {
+ "loadWallet": "私の財布をロード",
+ "importWallet": "財布をインポートする",
+ "create": "作ります",
+ "createWallet": "財布を作成する"
+ }
+ },
+ "accountPage": {
+ "title": "アカウント",
+ "subtitle": "アカウントの概要と取引履歴",
+ "synchronizingBlock": {
+ "text": "同期..."
+ },
+ "balanceBlock": {
+ "title": "あなたのバランス",
+ "unlocked": "ロック解除"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "取引履歴",
+ "pendingTxStatus": "未定",
+ "emptyWallet": "あなたは現在この財布に資金を持っていません。",
+ "waitSync": "財布が更新されるまでお待ちください",
+ "beReallyPatient": "初期設定にはしばらく時間がかかります...",
+ "getCoinAddress": "QWCを受け取る"
+ },
+ "txDetails": {
+ "title": "取引の詳細",
+ "txHash": "トランザクションハッシュ",
+ "feesOnTx": "取引料金",
+ "blockHeight": "ブロックの高さ",
+ "paymentId": "支払いID",
+ "unlockStatus": "ステータス",
+ "unlockConfirm": "確認",
+ "txPrivKey": "トランザクション秘密鍵"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "パスワードを変更してください",
+ "oldPassword": {
+ "label": "以前のパスワード",
+ "invalid": "パスワードが無効です"
+ },
+ "newPassword": {
+ "label": "あなたの財布を保護するために新しいパスワードを選択してください"
+ },
+ "newPasswordConfirm": {
+ "label": "新しいパスワードを確認してください"
+ },
+ "confirm": "パスワードを変更する",
+ "modalSuccess": {
+ "title": "パスワード変更済み!",
+ "confirmText": "はい"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "連絡先"
+ },
+ "electionsPage": {
+ "title": "選挙"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "あなたの財布は生成されています...",
+ "subtitle": "ほとんど終わった",
+ "waitingMessage": "財布を生成する..."
+ },
+ "finalizationStep": {
+ "title": "それは簡単でした。 あなたのアカウントは準備ができています!",
+ "subtitle": "あなたが持っていないようにQwertycoinを使用する準備ができている",
+ "passwordSelectionBlock": {
+ "label": "あなたの財布を守る"
+ },
+ "passwordConfirmBlock": {
+ "label": "パスワードを確認してください"
+ },
+ "validPassword": "このパスワードを使う",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "寄付する",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "サポート",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "ネットワーク統計",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "接続マスターノード",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "QWCを送る",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "おっとっと...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "はい"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "はい"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "はい"
+ },
+ "transferExceptionModal": {
+ "title": "おっとっと...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "はい"
+ },
+ "invalidAmountModal": {
+ "title": "おっとっと...",
+ "content": "Invalid amount",
+ "confirmText": "はい"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "国の通貨"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "インポート"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "秘密鍵",
+ "confirmText": "はい",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "ニーモニック句",
+ "confirmText": "はい",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "どの言語であなたのニーモニックフレーズが欲しいですか?",
+ "confirmText": "輸出する"
+ }
+ },
+ "importPage": {
+ "title": "財布を作成する",
+ "subtitle": "以前に作成されたキー、ファイル、またはニーモニック句から",
+ "chooseMethod": "インポート方法を選択してください。",
+ "fromKeys": "キーから",
+ "fromFile": "ファイルから",
+ "fromMnemonic": "ニーモニック句から",
+ "fromQr": "QRコードから"
+ },
+ "termsOfUsePage": {
+ "title": "利用規約",
+ "subtitle": "よく読んでください。"
+ },
+ "privacyPolicyPage": {
+ "title": "個人情報保護方針",
+ "subtitle": "よく読んでください。"
+ },
+ "importFromFilePage": {
+ "title": "バックアップファイルからのWalletのインポート",
+ "subtitle": "バックアップファイルを使用してウォレットを作成します",
+ "walletBlock": {
+ "title": "ウォレットファイル",
+ "label": "ファイルを選択",
+ "importButton": "インポート"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "ニーモニックフレーズからのWalletのインポート",
+ "subtitle": "あなたのフレーズを使って財布を作りましょう",
+ "mnemonicBlock": {
+ "title": "ニーモニック句",
+ "mnemonic": {
+ "label": "記憶語句:25ワード",
+ "invalid": "ニーモニック句が無効です",
+ "language": "言語"
+ },
+ "importButton": "インポート"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "鍵から財布をインポートする",
+ "subtitle": "鍵を使って財布を作る",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "ビュー専用財布がほしいですか。"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "ウォレットキー",
+ "titleViewOnly": "財布のみ表示",
+ "privateSpend": {
+ "label": "プライベート費用キー"
+ },
+ "privateView": {
+ "label": "プライベートビューキー",
+ "optional": "(オプション"
+ },
+ "publicKey": {
+ "label": "公開鍵"
+ },
+ "importButton": "インポート"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/ko.json b/src/translations/ko.json
new file mode 100644
index 00000000..9d00d3b4
--- /dev/null
+++ b/src/translations/ko.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin 지갑 | 간단하고 안전합니다. 미래에 오신 것을 환영합니다.",
+ "description": "Qwertycoin 통화를위한 공식 온라인 지갑 - 최적의 보안을 위해 브라우저에서 완벽하게 처리됩니다. 본인만 사용하는 기기에서 접속해 주세요."
+ },
+ "messages": {
+ "menu": {
+ "home": "홈",
+ "account": "계정",
+ "send": "보내기",
+ "receive": "받기",
+ "export": "내보내기",
+ "donate": "기부",
+ "elections": "선거",
+ "contacts": "콘택트 렌즈",
+ "settings": "설정",
+ "disconnect": "연결 끊기",
+ "network": "네트워크 통계",
+ "mining": "채굴"
+ },
+ "global": {
+ "loading": "로드중",
+ "disableSecurity": "보안을 해제하며, 사용자는 그에 따른 위험을 인지합니다.",
+ "passwordInvalidRequirements": "비밀번호는 최소 8자리 이상이여야 하며, 1개 이상의 대문자, 소문자, 숫자 및 특수 문자로 구성해 주세요.",
+ "passwordConfirmationNotMatching": "비밀번호가 일치하지 않습니다",
+ "download": "다운로드",
+ "newVersionModal": {
+ "title": "새 버전이 나왔습니다.",
+ "content": "새 버전으로 다시 로딩 하시겠습니까?",
+ "confirmText": "예",
+ "cancelText": "취소"
+ },
+ "openWalletModal": {
+ "title": "비밀번호",
+ "confirmText": "열기",
+ "cancelText": "취소"
+ },
+ "invalidPasswordModal": {
+ "title": "비밀번호",
+ "content": "입력하신 비밀번호가 정확하지 않습니다.",
+ "confirmText": "확인"
+ },
+ "invalidMnemonicModal": {
+ "title": "연상단어",
+ "content": "연상단어(Mneumonic Seed)의 입력이 잘못되었습니다.",
+ "confirmText": "확인"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "비밀번호의 구성이 보안요구사항을 준수하지 못합니다.",
+ "confirmText": "확인"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "카메라",
+ "content": "QR code 스캔을 위한 카메라의 접근 권한이 필요합니다.",
+ "confirmText": "확인"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "이용약관",
+ "privacyPolicy": "개인정보정책",
+ "support": "도움받기",
+ "donate": "기부",
+ "network": "네트워크 통계",
+ "miningPool": "채굴",
+ "github": "Github"
+ },
+ "homepage": {
+ "mainTitle": "쿼티코인 웹지갑",
+ "tagLine": "어디서든. 언제든. 모든 장치에서.",
+ "tagLineTwo": "쿼티코인을 사용하기 가장 간단한 방법",
+ "actions": {
+ "loadWallet": "지갑 불러오기",
+ "importWallet": "지갑 가져오기",
+ "create": "지갑 만들기",
+ "createWallet": "지갑 만들기"
+ }
+ },
+ "accountPage": {
+ "title": "계정",
+ "subtitle": "계정 정보 및 트랜젝션 기록",
+ "synchronizingBlock": {
+ "text": "동기화중..."
+ },
+ "balanceBlock": {
+ "title": "잔액",
+ "unlocked": "해제완료"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "트랜젝션 기록",
+ "pendingTxStatus": "처리중",
+ "emptyWallet": "현재 지갑에 잔액이 없습니다",
+ "waitSync": "지갑이 업데이트되고 있습니다. 잠시만 기다려주세요.",
+ "beReallyPatient": "초기 셋업중입니다. 잠시만 기다려주세요.",
+ "getCoinAddress": "쿼티코인 받기"
+ },
+ "txDetails": {
+ "title": "트랜젝션 세부내용",
+ "txHash": "트랜젝션 해시",
+ "feesOnTx": "트랜젝션 비용",
+ "blockHeight": "블록넘버",
+ "paymentId": "페이먼트 ID",
+ "unlockStatus": "현황",
+ "unlockConfirm": "확인",
+ "txPrivKey": "트랜젝션 비공개 키"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "비밀번호 변경",
+ "oldPassword": {
+ "label": "현재 비밀번호",
+ "invalid": "비밀번호가 일치하지 않습니다."
+ },
+ "newPassword": {
+ "label": "새로운 비밀번호를 입력하세요."
+ },
+ "newPasswordConfirm": {
+ "label": "새 비밀번호로 변경합니다."
+ },
+ "confirm": "변경완료",
+ "modalSuccess": {
+ "title": "비밀번호가 변경되었습니다.",
+ "confirmText": "확인"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "콘택트 렌즈"
+ },
+ "electionsPage": {
+ "title": "선거"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "지갑이 생성되고 있습니다",
+ "subtitle": "거의 완료되었습니다",
+ "waitingMessage": "잠시만 기다려주세요"
+ },
+ "finalizationStep": {
+ "title": "지갑 생성이 완료되었습니다",
+ "subtitle": "이전 방식과는 다르게 쿼티코인을 사용해보세요",
+ "passwordSelectionBlock": {
+ "label": "비밀번호 설정"
+ },
+ "passwordConfirmBlock": {
+ "label": "비밀번호 확인"
+ },
+ "validPassword": "이 비밀번호를 사용합니다.",
+ "backupBlock": {
+ "title": "비공개 키와 연상단어를 저장하여, 지갑을 복구할 수 있습니다.",
+ "option1": "옵션 1: ",
+ "option2": "옵션 2: ",
+ "titlePdf": "PDF로 다운받아 저장하기",
+ "titleManualWrite": "비공개 키 ",
+ "privateKeys": "비공개 키",
+ "mnemonicPhrase": "연상단어",
+ "separatorManualMethodsSolution": " 또는 ",
+ "confirmManuallyWritten": "연상단어를 적어두었습니다.",
+ "warningMessage": "**절대로 잃어버리면 안됩니다!** 잃어버릴 경우 찾을 수 없습니다. **타인에게 공유하면 안됩니다!** 타인이 해당 정보를 이용하여 쿼티코인을 빼갈 수 있습니다. 비슷한 주소의 피싱 사이트를 조심하셔야 합니다. **백업을 만드세요!** 언젠가는 큰 금액이 될지도 모르니까요. ",
+ "finishButton": "위 내용을 이해하며, 타인이 사용이 가능한 컴퓨터에서 접속할 경우, 해킹의 위험에 노출되며, 그에 따른 위험을 감수합니다."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "쿼티코인 웹지갑 서비스 사용 공지",
+ "content": "쿼티코인 웹지갑 서비스는 쿼티코인 노드없이도 사용할 수 있는 지갑입니다. 웹지갑과 관련되어 제공되는 정보(비밀번호, 비공개 키, 연상단어) 및 환경(컴퓨터 및 모바일 기기의 보안)을 일반 지갑에서와 같이 안전하게 보관하시길 권장합니다"
+ }
+ },
+ "donatePage": {
+ "title": "기부",
+ "subtitle": "기부를 통해 쿼티코인 개발 및 운영유지에 도움을 주세요.",
+ "webwalletBlock": {
+ "title": "웹지갑",
+ "content": "기부해 주신 쿼티코인은 서버운영 및 유지, 새로운 기능 추가를 위한 개발에 쓰입니다. 다음 주소로 기부해 주세요:
"
+ },
+ "devFundBlock": {
+ "title": "쿼티코인 개발자 모금",
+ "content": "다음 주소에도 기부하실 수 있습니다."
+ }
+ },
+ "supportPage": {
+ "title": "도움받기",
+ "subtitle": "어떻게 도와드릴까요?",
+ "getInTouchBlock": {
+ "title": "코어팀에게 연락하고 싶습니다.",
+ "content": "웹지갑 서비스의 개선에 관련된 새로운 아이디어나 피드백이 있으신가요? 그렇다면 연락주세요!",
+ "discord": "쿼티코인 디스코드 채널"
+ }
+ },
+ "networkPage": {
+ "title": "네트워크 통계",
+ "subtitle": "쿼티코인 네트워크 정보",
+ "statsBlock": {
+ "connectNode": "연결된 마스터 노드",
+ "hashrate": "네트워크 해시레이트",
+ "height": "블록 높이",
+ "difficulty": "네트워크 난이도",
+ "lastTimeBlock": "블록 발견 시간",
+ "lastReward": "블록 보상"
+ }
+ },
+ "sendPage": {
+ "title": "쿼티코인 보내기",
+ "sendBlock": {
+ "address": {
+ "label": "주소",
+ "placeholder": "위 주소로 송금이 됩니다.",
+ "invalid": "입력해 주신 주소가 올바르지 않습니다.",
+ "fundsTo": "적어주신 주소로 쿼티코인이 전송됩니다.",
+ "receiver": "받는 이",
+ "description": "설명"
+ },
+ "amount": {
+ "label": "보내는 금액",
+ "invalid": "입력하신 금액이 올바르지 않습니다."
+ },
+ "paymentId": {
+ "label": "페이먼트 ID (옵션)",
+ "invalid": "페이먼트 ID가 올바르지 않습니다. 올바른 ID의 문자길이는 16 또는 64 문자입니다."
+ },
+ "sendButton": "보내기",
+ "cancelButton": "취소"
+ },
+ "qrCodeScanning": {
+ "explication": "QR코드를 보여주세요."
+ },
+ "notEnoughMoneyModal": {
+ "title": "잔액부족",
+ "content": "지갑에 잔액이 부족합니다.",
+ "confirmText": "확인"
+ },
+ "thankYouDonationModal": {
+ "title": "기부해 주셔서 감사합니다!",
+ "content": "당신의 도움에 깊이 감사드립니다. 당신의 기부가 쿼티코인을 발전시킵니다.",
+ "confirmText": "확인"
+ },
+ "transferSentModal": {
+ "title": "송금이 성공적으로 완료되었습니다!",
+ "confirmText": "확인"
+ },
+ "transferExceptionModal": {
+ "title": "에러",
+ "content": "에러가 났습니다. 해당 에러를 보고해주세요: {details}",
+ "confirmText": "확인"
+ },
+ "invalidAmountModal": {
+ "title": "입력금액",
+ "content": "입력금액 오류",
+ "confirmText": "확인"
+ },
+ "creatingTransferModal": {
+ "title": "송금중",
+ "content": "잠시만 기다려주세요..."
+ },
+ "finalizingTransferModal": {
+ "title": "송금 완료중",
+ "content": "잠시만 기다려주세요..."
+ },
+ "confirmTransactionModal": {
+ "title": "다음과 같이 송금 하시겠습니까?",
+ "content": "금액: {amount} 비용: {fees} 총액: {total}",
+ "confirmText": "확인",
+ "cancelText": "취소"
+ },
+ "waitingNfcModal": {
+ "title": "NFC 통신 대기중",
+ "content": "기기에 더 가까이 가야합니다."
+ }
+ },
+ "receivePage": {
+ "title": "쿼티코인 받기",
+ "receiveBlock": {
+ "address": {
+ "title": "주소:",
+ "label": "이 주소로 송금을 받습니다."
+ },
+ "qrCode": {
+ "title": "QR코드 만들기:",
+ "labelAmount": "금액 (옵션)",
+ "labelRecipient": "받는사람 이름 (옵션)",
+ "labelDescription": "이체 관련 정보 (옵션)",
+ "updateButton": "업데이트"
+ }
+ },
+ "qrBlock": {
+ "title": "생선된 QR코드"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "NFC 통신 대기중",
+ "titleSuccess": "NFC 태그 작성",
+ "content": "NFC 태그에 더 가까이 가야합니다."
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "태그의 용량이 충분하지 않습니다."
+ }
+ },
+ "miningPage": {
+ "title": "브라우져에서 채굴하기",
+ "subtitle": "채굴을 통해 쿼티코인 네트워크에 도움을 주는 댓가로 쿼티코인을 받을 수 있습니다.",
+ "parameterBlock": {
+ "title": "기본정보",
+ "labelDestinationAddress": "코인을 받을 지갑주소",
+ "labelThreads": "CPU 쓰레드 갯수 (높을수록 채굴이 더 됩니다.)",
+ "start": "시작",
+ "stop": "멈춤"
+ },
+ "statisticsBlocks": {
+ "title": "통계",
+ "validShares": "유효한 쉐어",
+ "hashrate": "해시레이트",
+ "maxHashrate": "최고 해시레이트",
+ "dedicatedHardware": "채굴용 소프트웨어와 하드웨어를 사용하면, 더 많은 코인을 받을 수 있으며, 네트워크의 탈중앙화에 도움이 됩니다.",
+ "miningHandledBy": "이 채굴 작업은 pool.qwertycoin.org에서 처리됩니다."
+ }
+ },
+ "settingsPage": {
+ "title": "설정",
+ "subtitle": "여기서 바꿀 수 있습니다.",
+ "versionBlock": {
+ "versionNumber": "버전 넘버: ",
+ "versionCode": "버전 코드: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "지갑 업데이트 속도 (속도가 빠를수록 컴퓨팅 자원이 더 소모됩니다.)",
+ "fastest": "가장 빠르게",
+ "fast": "빠르게",
+ "medium": "보통",
+ "slow": "천천히"
+ },
+ "language": {
+ "label": "언어"
+ },
+ "currency": {
+ "label": "국가 통화"
+ },
+ "readMinerTx": {
+ "label": "채굴관련 송금 확인 (오직 단독 채굴에 적용됨)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "비밀번호 변경",
+ "deleteWalletButton": "웹지갑 지우기 (지금 사용하는 기기의 브라우저에 한정)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "지갑이 생성된 블록높이"
+ },
+ "currentScanningHeight": {
+ "label": "현재 스캐닝 중인 블록높이"
+ },
+ "updateButton": "업데이트"
+ },
+ "deleteWalletModal": {
+ "title": "웹지갑 지우기 (지금 사용하는 기기의 브라우저에 한정)",
+ "content": "정말로 웹지갑을 지금 사용하는 기기에서 삭제합니까? 같은 웹지갑을 다른 웹브라우져에서 사용하고 삭제하지 않은 경우, 다른 웹브라우져에서는 사용이 가능합니다.",
+ "confirmText": "네, 삭제합니다.",
+ "cancelText": "취소합니다."
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "설정 값",
+ "password": {
+ "label": "비밀번호 설정"
+ },
+ "passwordConfirm": {
+ "label": "비밀번호 확인",
+ "invalid": "패스워드가 일치하지 않습니다."
+ },
+ "importHeight": {
+ "label": "불러들일 블록 높이(지갑 생성 블록 높이):"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "QR 코드 사용하여 지갑 불러오기",
+ "subtitle": "오프라인 백업을 사용하여 지갑 불러오기",
+ "qrCodeBlock": {
+ "title": "QR 코드",
+ "startScanButton": "스캔시작",
+ "importButton": "불러오기"
+ },
+ "qrScanningBlock": {
+ "title": "QR 코드를 보여주세요."
+ }
+ },
+ "exportPage": {
+ "title": "지갑 정보를 백업해 두세요.",
+ "publicAddressBlock": {
+ "title": "지갑주소"
+ },
+ "pdfBlock": {
+ "title": "PDF 백업",
+ "downloadButton": "다운로드"
+ },
+ "warningBlock": {
+ "title": "경고",
+ "content": "비공개 키 또는 연상단어를 기록 및 저장할 경우, 보안을 위해 기기내에 글자 형식 파일로 보관하지 마세요. 이 파일은 지갑의 모든 키가 암호화되어 있으며 contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "지갑 정보 내보내기",
+ "privateKeysButton": "비공개 키 보기",
+ "mnemonicKeysButton": "연상단어 보기",
+ "fileButton": "파일로 내보내기"
+ },
+ "walletKeysModal": {
+ "title": "비공개 키",
+ "confirmText": "확인",
+ "content": "비공캐 키를 잘 보관하세요. 비공개 키로 지갑에 접근할 수 있습니다. ! 스펜드 키: {privSpendKey} 비공개 뷰 키: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "연상단어",
+ "confirmText": "확인",
+ "content": "연상단어를 잘 보관하세요. 연상단어로 지갑에 접근할 수 있습니다. ! 연상단어: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "연상단어의 언어를 선택해 주세요.",
+ "confirmText": "내보내기"
+ }
+ },
+ "importPage": {
+ "title": "지갑 만들기",
+ "subtitle": "키, 파일 또는 연상단어를 사용하여 가져오기",
+ "chooseMethod": "지갑을 가져올 방법을 선택해 주세요:",
+ "fromKeys": "키를 사용하여 가져오기",
+ "fromFile": "파일을 사용하여 가져오기",
+ "fromMnemonic": "연상단어 사용하여 가져오기",
+ "fromQr": "QR 코드 사용하여 가져오기"
+ },
+ "termsOfUsePage": {
+ "title": "이용약관",
+ "subtitle": "자세히 읽어주세요."
+ },
+ "privacyPolicyPage": {
+ "title": "개인 정보 정책",
+ "subtitle": "자세히 읽어주세요."
+ },
+ "importFromFilePage": {
+ "title": "백업 파일을 사용하여 지갑 가져오기",
+ "subtitle": "백업 파일을 사용하여 지갑을 가져오세요.",
+ "walletBlock": {
+ "title": "지갑 파일",
+ "label": "파일 선택하기",
+ "importButton": "가져오기"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "연상단어를 사용하여 지갑 가져오기",
+ "subtitle": "연상단어를 사용하여 지갑을 가져오세요.",
+ "mnemonicBlock": {
+ "title": "연상단어",
+ "mnemonic": {
+ "label": "연상단어: 25개의 단어",
+ "invalid": "연상단어가 일치하지 않습니다.",
+ "language": "언어"
+ },
+ "importButton": "불러오기"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "키를 사용하여 지갑 가져오기",
+ "subtitle": "키를 사용하여 지갑을 가져오세요.",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "보기 기능만 가능한 지갑을 만들고 싶으신가요?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "지갑 키",
+ "titleViewOnly": "보기용 지갑",
+ "privateSpend": {
+ "label": "비공개 스펜드 키"
+ },
+ "privateView": {
+ "label": "비공개 뷰 키",
+ "optional": "(옵션)"
+ },
+ "publicKey": {
+ "label": "공개 키"
+ },
+ "importButton": "불러오기"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/pk.json b/src/translations/pk.json
new file mode 100644
index 00000000..e27e0322
--- /dev/null
+++ b/src/translations/pk.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin والٹ | سادہ، ہموار، محفوظ. مستقبل میں خوش آمدید.",
+ "description": "Qwertycoin کرنسی کے لئے سرکاری آن لائن والٹ - آپ کے براؤزر میں مکمل طور پر سیکیورٹی کے لئے سنبھال لیا"
+ },
+ "messages": {
+ "menu": {
+ "home": "گھر",
+ "account": "اکاؤنٹ",
+ "send": "بھیجیں",
+ "receive": "وصول کرو",
+ "export": "برآمد کریں",
+ "donate": "عطیہ",
+ "elections": "انتخابات",
+ "contacts": "رابطے",
+ "settings": "ترتیبات",
+ "disconnect": "منسلک کریں",
+ "network": "نیٹ ورک کے اعدادوشمار",
+ "mining": "کان کنی"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "رابطے"
+ },
+ "electionsPage": {
+ "title": "انتخابات"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "National Currency"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/pl.json b/src/translations/pl.json
new file mode 100644
index 00000000..e20746de
--- /dev/null
+++ b/src/translations/pl.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin Wallet | Proste, bezproblemowe, bezpieczne. Witamy w przyszłości.",
+ "description": "Oficjalny portfel online dla waluty Qwertycoin - w pełni obsługiwany w przeglądarce dla optymalnego bezpieczeństwa"
+ },
+ "messages": {
+ "menu": {
+ "home": "Dom",
+ "account": "Konto",
+ "send": "Wysłać",
+ "receive": "Otrzymać",
+ "export": "Eksport",
+ "donate": "Podarować",
+ "elections": "Wybory",
+ "contacts": "Łączność",
+ "settings": "Ustawienia",
+ "disconnect": "Rozłączyć się",
+ "network": "Statystyki sieciowe",
+ "mining": "Górnictwo"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Łączność"
+ },
+ "electionsPage": {
+ "title": "Wybory"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting NFC",
+ "content": "Bring this device closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting NFC",
+ "titleSuccess": "NFC Tag written",
+ "content": "Bring the NFC tag closer to this device to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "National Currency"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/pt.json b/src/translations/pt.json
new file mode 100644
index 00000000..9c1012ec
--- /dev/null
+++ b/src/translations/pt.json
@@ -0,0 +1,509 @@
+{
+ "website":{
+ "title":"Carteira Qwertycoin | Simples, sem costura, seguro. Bem vindo ao futuro.",
+ "description":"Carteira online oficial da moeda Qwertycoin - totalmente manipulado em seu navegador para segurança ideal"
+ },
+ "messages": {
+ "menu": {
+ "home": "Origem",
+ "account": "Conta",
+ "send": "Enviar",
+ "receive": "Receber",
+ "export": "Exportar",
+ "donate": "Doar",
+ "settings": "Ajustamento",
+ "disconnect": "Desconectar",
+ "network": "Estatísticas da rede",
+ "mining": "Mineração"
+ },
+ "global": {
+ "loading": "Carregando",
+ "disableSecurity":"Desative essa segurança, eu entendo o risco",
+ "passwordInvalidRequirements":"A senha precisa de pelo menos 8 caracteres - 1 letra maiúscula, 1 letra minúscula, um número e um caractere especial.",
+ "passwordConfirmationNotMatching":"A senha não corresponde à primeira senha que você escreveu",
+ "download":"Baixar",
+ "newVersionModal":{
+ "title":"Uma nova versão está disponível",
+ "content":"Deseja recarregar para carregar a nova versão?",
+ "confirmText":"Sim",
+ "cancelText":"Atrás"
+ },
+ "openWalletModal":{
+ "title":"Senha da carteira",
+ "confirmText":"Abrir",
+ "cancelText":"Cancelar"
+ },
+ "invalidPasswordModal":{
+ "title":"Opa...",
+ "content":"Sua senha parece inválida",
+ "confirmText":"OK"
+ },
+ "invalidMnemonicModal":{
+ "title":"Opa...",
+ "content":"The mnemonic phrase is invalid",
+ "confirmText":"OK"
+ },
+ "passwordNotComplexEnoughModal":{
+ "title":"A senha não é complexa o suficiente",
+ "confirmText":"OK"
+ },
+ "permissionRequiredForCameraModal":{
+ "title":"Opa...",
+ "content":"A permissão para acessar sua câmera é necessária para digitalizar o código QR",
+ "confirmText":"OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Termos de uso",
+ "privacyPolicy": "Política de Privacidade",
+ "support": "Apoio",
+ "donate": "Doar",
+ "network": "Estatísticas da rede",
+ "miningPool": "Piscina de mineração",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Carteira Qwertycoin",
+ "tagLine": "qualquer lugar. a qualquer momento. qualquer dispositivo.",
+ "tagLineTwo": "A maneira mais simples de usar Qwertycoin",
+ "actions": {
+ "loadWallet": "Carregar minha carteira",
+ "importWallet": "Importar uma carteira",
+ "create": "Criar",
+ "createWallet": "Crie uma carteira"
+ }
+ },
+ "accountPage": {
+ "title": "Conta",
+ "subtitle": "Visão geral da sua conta e histórico de transações",
+ "synchronizingBlock": {
+ "text": "Sincronizando..."
+ },
+ "balanceBlock": {
+ "title": "Seu balanço",
+ "unlocked": "Desbloqueado"
+ },
+ "currencyBlock" : {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Histórico de transações",
+ "pendingTxStatus": "Pendente",
+ "emptyWallet": "No momento, você não tem fundos nesta carteira.",
+ "waitSync": "Aguarde até que a carteira seja atualizada",
+ "beReallyPatient": "A configuração inicial pode levar algum tempo...",
+ "getCoinAddress": "Receba QWC"
+ },
+ "txDetails":{
+ "title":"Detalhes da transação",
+ "txHash":"Hash de transação",
+ "feesOnTx":"Taxa de transação",
+ "blockHeight":"Altura do bloco",
+ "paymentId":"ID de pagamento",
+ "unlockStatus":"Estado",
+ "unlockConfirm":"Confirmações",
+ "txPrivKey":"Chave privada de transação"
+ }
+ },
+ "changeWalletPasswordPage":{
+ "title":"Mude sua senha",
+ "oldPassword":{
+ "label":"Senha Antiga",
+ "invalid":"A senha é inválida"
+ },
+ "newPassword":{
+ "label":"Escolha uma nova senha para proteger sua carteira"
+ },
+ "newPasswordConfirm":{
+ "label":"Confirme a nova senha"
+ },
+ "confirm":"Mude a senha",
+ "modalSuccess":{
+ "title":"Senha alterada!",
+ "confirmText":"OK"
+ }
+ },
+ "createWalletPage":{
+ "generatingStep":{
+ "title":"Sua carteira está sendo gerada...",
+ "subtitle":"Está quase pronto",
+ "waitingMessage":"Gerando sua carteira..."
+ },
+ "finalizationStep":{
+ "title":"Isso foi simples. Sua conta está pronta!",
+ "subtitle":"Esteja pronto para usar o Qwertycoin como você nunca viu",
+ "passwordSelectionBlock":{
+ "label":"Proteja sua carteira"
+ },
+ "passwordConfirmBlock":{
+ "label":"Confirme a senha"
+ },
+ "validPassword":"Use esta senha",
+ "backupBlock":{
+ "title":"Salve suas credenciais privadas para recuperação.",
+ "option1":"Opção 1: ",
+ "option2":"Opção 2: ",
+ "titlePdf":"Faça o download de uma cópia em PDF",
+ "titleManualWrite":"Anote minhas chaves",
+ "privateKeys":"Chave privada",
+ "mnemonicPhrase":"Frase mnemônica",
+ "separatorManualMethodsSolution":" ou ",
+ "confirmManuallyWritten":"Eu escrevi minha frase inicial",
+ "warningMessage":"**Não perca isso!** Não pode ser recuperado se você o perder.. **Não compartilhe!** Seus fundos serão roubados se você usar esse arquivo ou semente em um site malicioso / phishing. **Faça um backup!** Proteja-o como os milhões de dólares que um dia valerão a pena. ",
+ "finishButton":"Compreendo. Continuar."
+ }
+ },
+ "disclaimerBlock":{
+ "title":"Risco de usar Carteira Qwertycoin",
+ "content":"Carteira Qwertycoin é uma interface baseada na Web. Ajuda você a usar o Qwertycoin sem executar um nó completo do Qwertycoin. Recomendamos que você trate o QwertycoinWallet como tratará sua carteira real."
+ }
+ },
+ "donatePage":{
+ "title":"Doar",
+ "subtitle":"Ajude a financiar o desenvolvimento e pagar as contas",
+ "webwalletBlock":{
+ "title":"Carteira Web",
+ "content":"Se você quiser ajudar a pagar pelos servidores, apoiar o desenvolvimento de novos recursos e, como este aplicativo, considere uma doação:
"
+ },
+ "devFundBlock":{
+ "title":"Fundo Qwertycoin Dev",
+ "content":"Para ajudar o Qwertycoin, você pode doar nesses endereços"
+ }
+ },
+ "supportPage":{
+ "title":"Apoio",
+ "subtitle":"Estamos aqui para ajudar!",
+ "getInTouchBlock":{
+ "title":"Vamos entrar em contato!",
+ "content":"Você tem idéias ou comentários que podem nos ajudar a melhorar a carteira? Contate-Nos!",
+ "discord":"Canal Discord de Qwertycoin"
+ }
+ },
+ "networkPage":{
+ "title":"Estatísticas da rede",
+ "subtitle":"Informações sobre a rede Qwertycoin",
+ "statsBlock":{
+ "connectNode": "Masternode conectado",
+ "hashrate":"Hash de rede",
+ "height":"Altura da Blockchain",
+ "difficulty":"Dificuldade de rede",
+ "lastTimeBlock":"Último bloco encontrado",
+ "lastReward":"Recompensa do último bloco"
+ }
+ },
+ "sendPage":{
+ "title":"Enviar QWC",
+ "sendBlock":{
+ "address":{
+ "label":"Endereço de destino",
+ "placeholder":"Escreva o endereço para onde deseja enviar fundos",
+ "invalid":"O endereço de destino é inválido",
+ "fundsTo":"Os fundos serão enviados para",
+ "receiver":"Receptor",
+ "description":"Descrição"
+ },
+ "amount":{
+ "label":"Quantidade a enviar",
+ "invalid":"O valor é inválido"
+ },
+ "paymentId":{
+ "label":"ID de pagamento (opcional)",
+ "invalid":"O ID do pagamento é inválido. O comprimento deve ter 16 ou 64 caracteres"
+ },
+ "sendButton":"Enviar",
+ "cancelButton":"Cancelar"
+ },
+ "qrCodeScanning":{
+ "explication":"Apresente o código QR"
+ },
+ "notEnoughMoneyModal":{
+ "title":"Opa...",
+ "content":"Você não tem fundos suficientes na sua carteira para executar esta transferência",
+ "confirmText":"OK"
+ },
+ "thankYouDonationModal":{
+ "title":"Obrigado por sua doação!",
+ "content":"Sua ajuda é apreciada. Esta doação ajudará a melhorar o Qwertycoin",
+ "confirmText":"OK"
+ },
+ "transferSentModal":{
+ "title":"Transferência enviada com sucesso!",
+ "confirmText":"OK"
+ },
+ "transferExceptionModal":{
+ "title":"Opa...",
+ "content":"Um erro ocorreu. Por favor, reporte este erro: {details}",
+ "confirmText":"OK"
+ },
+ "invalidAmountModal":{
+ "title":"Opa...",
+ "content":"Montante inválido",
+ "confirmText":"OK"
+ },
+ "creatingTransferModal":{
+ "title":"Criando transferência ...",
+ "content":"Por favor, espere..."
+ },
+ "finalizingTransferModal":{
+ "title":"Finalizando a transferência ...",
+ "content":"Por favor, espere..."
+ },
+ "confirmTransactionModal":{
+ "title":"Confirmar transferência?",
+ "content":"Montante: {amount} Honorários: {fees} Total: {total}",
+ "confirmText":"Confirme",
+ "cancelText":"Cancelar"
+ },
+ "waitingNfcModal":{
+ "title":"Aguardando NFC",
+ "content":"Aproxime este dispositivo do outro dispositivo"
+ }
+ },
+ "receivePage":{
+ "title":"Receba QWC",
+ "receiveBlock":{
+ "address":{
+ "title":"Seu endereço para receber fundos:",
+ "label":"Dê este endereço para receber fundos"
+ },
+ "qrCode":{
+ "title":"Ou personalize o código QR:",
+ "labelAmount":"Montante (opcional)",
+ "labelRecipient":"Nome do destinatário (opcional)",
+ "labelDescription":"Descrição da transação (opcional)",
+ "updateButton":"Atualizar"
+ }
+ },
+ "qrBlock":{
+ "title":"Seu código QR personalizado"
+ },
+ "waitingNfcToWriteModal":{
+ "title":"Aguardando NFC",
+ "titleSuccess":"Etiqueta NFC escrita",
+ "content":"Aproxime a etiqueta NFC deste dispositivo para gravar"
+ },
+ "nfcErrorModal":{
+ "titleInsufficientCapacity":"Capacidade da etiqueta insuficiente"
+ }
+ },
+ "miningPage":{
+ "title":"Mine diretamente no seu navegador",
+ "subtitle":"Ofereça suporte à rede por mineração e seja recompensado com a QWC",
+ "parameterBlock":{
+ "title":"Parâmetros",
+ "labelDestinationAddress":"Carteira para a minha",
+ "labelThreads":"Número de threads (mais = hash maior)",
+ "start":"Começar",
+ "stop":"Pare"
+ },
+ "statisticsBlocks":{
+ "title":"Estatisticas",
+ "validShares":"Compartilhamentos válidos",
+ "hashrate":"Taxa de hash",
+ "maxHashrate":"Taxa máxima de hash",
+ "dedicatedHardware":"Com a dedicação de software e hardware de mineração, você pode ganhar mais e ajudar a descentralizar a rede.",
+ "miningHandledBy":"Esta mineração é tratado pela associação mineira pool.qwertycoin.org"
+ }
+ },
+ "settingsPage":{
+ "title":"Ajustamento",
+ "subtitle":"Mude seus parâmetros aqui",
+ "versionBlock":{
+ "versionNumber":"Número da versão: ",
+ "versionCode":"Código da versão: "
+ },
+ "settingsBlock":{
+ "speed":{
+ "label":"Velocidade para atualizar a carteira (consumirá mais recursos)",
+ "fastest":"O mais rápido",
+ "fast":"Rápido",
+ "medium":"Médio",
+ "slow":"Lento"
+ },
+ "language":{
+ "label":"Língua"
+ },
+ "currency":{
+ "label":"Moeda nacional"
+ },
+ "readMinerTx":{
+ "label":"Ler transações de mineração (apenas para mineração solo)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton":"Alterar minha senha da carteira",
+ "deleteWalletButton":"Excluir minha carteira (cópia local)",
+ "walletSettings":{
+ "creationHeight":{
+ "label":"Altura de criação da carteira"
+ },
+ "currentScanningHeight": {
+ "label": "Altura atual de digitalização"
+ },
+ "updateButton":"Atualizar"
+ },
+ "deleteWalletModal":{
+ "title":"Excluir minha carteira (cópia local)",
+ "content":"Tem certeza de que REALMENTE deseja excluir sua carteira?",
+ "confirmText":"Sim eu tenho certeza",
+ "cancelText":"Cancelar"
+ }
+ },
+ "importBasePage":{
+ "parametersBlock":{
+ "title":"Parâmetros",
+ "password":{
+ "label":"Senha para proteger sua carteira"
+ },
+ "passwordConfirm":{
+ "label":"Confirme a senha",
+ "invalid":"A senha não corresponde à primeira senha que você escreveu"
+ },
+ "importHeight":{
+ "label":"Altura para importar de:"
+ }
+ }
+ },
+ "importFromQrPage":{
+ "title":"Importando carteira de um código QR",
+ "subtitle":"Importar uma carteira de um backup offline",
+ "qrCodeBlock":{
+ "title":"Código QR",
+ "startScanButton":"Iniciar a verificação",
+ "importButton":"Importar"
+ },
+ "qrScanningBlock":{
+ "title":"Apresente o código QR"
+ }
+ },
+ "exportPage":{
+ "title":"Faça backup de suas credenciais",
+ "publicAddressBlock":{
+ "title":"Seu endereço público"
+ },
+ "pdfBlock":{
+ "title":"Backup de PDF",
+ "downloadButton":"Baixar"
+ },
+ "warningBlock":{
+ "title":"Atenção",
+ "content":"Se você optar por salvar suas chaves privadas ou sua frase mnemônica, NÃO as armazene em texto não criptografado para sua própria segurança. O arquivo é uma solução alternativa em que suas chaves são criptografadas e contêm um backup de todas as suas transações. para poupar uma futura sincronização."
+ },
+ "exportBlock":{
+ "title":"Exporte suas credenciais RAW",
+ "privateKeysButton":"Obter minhas chaves privadas",
+ "mnemonicKeysButton":"Pegue minha frase mnemônica",
+ "fileButton":"Exportar para um arquivo"
+ },
+ "walletKeysModal":{
+ "title":"Chaves privadas",
+ "confirmText":"OK",
+ "content":"Por favor, guarde essas chaves com cuidado. Possuí-los significa possuir os fundos associados ! Chave de gastos: {privSpendKey} Chave de visualização privada: {privViewKey}"
+ },
+ "mnemonicKeyModal":{
+ "title":"Frase mnemônica",
+ "confirmText":"OK",
+ "content":"Por favor, guarde cuidadosamente esta frase mnemônica. Possuir significa possuir os fundos associados ! A frase é: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal":{
+ "title":"Em qual idioma você quer sua frase mnemônica?",
+ "confirmText":"Exportação"
+ }
+ },
+ "importPage":{
+ "title":"Crie uma carteira",
+ "subtitle":"De chaves, arquivos ou frases mnemônicas criadas anteriormente",
+ "chooseMethod":"Escolha o seu método de importação:",
+ "fromKeys":"Das chaves",
+ "fromFile":"De um arquivo",
+ "fromMnemonic":"De uma frase mnemônica",
+ "fromQr":"De um código QR"
+ },
+ "termsOfUsePage":{
+ "title":"Termos de uso",
+ "subtitle":"Por favor, leia-os cuidadosamente."
+ },
+ "privacyPolicyPage":{
+ "title":"Política de Privacidade",
+ "subtitle":"Por favor, leia-os cuidadosamente."
+ },
+ "importFromFilePage":{
+ "title":"Importando carteira de um arquivo de backup",
+ "subtitle":"Use seu arquivo de backup para criar uma carteira",
+ "walletBlock":{
+ "title":"Arquivo da carteira",
+ "label":"Selecione o arquivo",
+ "importButton":"Importar"
+ }
+ },
+ "importFromMnemonicPage":{
+ "title":"Importando carteira de uma frase mnemônica",
+ "subtitle":"Use sua frase para criar uma carteira",
+ "mnemonicBlock":{
+ "title":"Frase mnemônica",
+ "mnemonic":{
+ "label":"Frase mnemônica: 25 palavras",
+ "invalid":"A frase mnemônica é inválida",
+ "language":"Língua"
+ },
+ "importButton":"Importar"
+ }
+ },
+ "importFromKeysPage":{
+ "title":"Importando carteira de chaves",
+ "subtitle":"Use suas chaves para criar uma carteira",
+ "parametersBlock":{
+ "viewOnlyWallet":{
+ "label":"Você quer ver apenas uma carteira?"
+ }
+ },
+ "keysBlock":{
+ "titleNotViewOnly":"Chaves da carteira",
+ "titleViewOnly":"Ver apenas carteira",
+ "privateSpend":{
+ "label":"Chave de gastos privados"
+ },
+ "privateView":{
+ "label":"Chave de visualização privada",
+ "optional":"(opcional)"
+ },
+ "publicKey":{
+ "label":"Chave pública"
+ },
+ "importButton":"Importar"
+ }
+ }
+ },
+ "number":{
+ },
+ "date":{
+ "short": {
+ "year": "numeric", "month": "short", "day": "numeric"
+ },
+ "long": {
+ "year": "numeric", "month": "short", "day": "numeric",
+ "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": true
+ }
+ }
+}
diff --git a/src/translations/ro.json b/src/translations/ro.json
new file mode 100644
index 00000000..2ffc1c79
--- /dev/null
+++ b/src/translations/ro.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Portofel Qwertycoin | Simplu, fără probleme, sigur. Bine ați venit în viitor.",
+ "description": "Portofel oficial online pentru moneda Qwertycoin - manipulată integral în browserul dvs. pentru o securitate optimă"
+ },
+ "messages": {
+ "menu": {
+ "home": "Acasă",
+ "account": "Cont",
+ "send": "Trimite",
+ "receive": "A primi",
+ "export": "Export",
+ "donate": "Dona",
+ "elections": "Alegeri",
+ "contacts": "Contacte",
+ "settings": "Setări",
+ "disconnect": "Deconecta",
+ "network": "Statistici de rețea",
+ "mining": "Minerit"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Contacte"
+ },
+ "electionsPage": {
+ "title": "Alegeri"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting NFC",
+ "content": "Bring this device closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting NFC",
+ "titleSuccess": "NFC Tag written",
+ "content": "Bring the NFC tag closer to this device to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "National Currency"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/ru.json b/src/translations/ru.json
index 5ebdcf3b..803eb8f3 100644
--- a/src/translations/ru.json
+++ b/src/translations/ru.json
@@ -1,492 +1,536 @@
{
- "website":{
- "title":"Веб-кошелек Карбо",
- "description":"Официальный онлайн кошелек криптовалюты Карбованец - анонимный, надежный, работающий полностью в вашем браузере для наилучшей безопасности"
+ "website": {
+ "title": "Веб-кошелек Qwertycoin",
+ "description": "Официальный онлайн кошелек криптовалюты Qwertycoin - анонимный, надежный, работающий полностью в вашем браузере для наилучшей безопасности"
},
"messages": {
- "menu": {
- "home": "Обзор",
- "account": "Аккаунт",
- "send": "Отправить",
- "receive": "Получить",
- "export": "Экспорт",
- "donate": "Пожертвовать",
- "settings": "Настройки",
- "disconnect": "Отключиться",
- "network": "Статистика сети",
- "mining": "Майнинг"
- },
- "global": {
- "loading": "Загрузка",
- "disableSecurity":"Отключить эту предосторожность, я понимаю риск",
- "passwordInvalidRequirements":"Пароль должен состоять по крайней мере из 8 символов - 1 большой буквы, 1 маленькой, одного числа, одного спецсимвола",
- "passwordConfirmationNotMatching":"Подтверждение пароля не совпадает с первым",
- "download":"Скачать",
- "newVersionModal":{
- "title":"Есть новая версия",
- "content":"Хотите перезагрузить чтобы обновить версию?",
- "confirmText":"Да",
- "cancelText":"Назад"
- },
- "openWalletModal":{
- "title":"Пароль кошелька",
- "confirmText":"Открыть",
- "cancelText":"Отмена"
- },
- "invalidPasswordModal":{
- "title":"Ой...",
- "content":"Кажется пароль неверный",
- "confirmText":"OK"
- },
- "invalidMnemonicModal":{
- "title":"Ой...",
- "content":"Фраза для восстановления неверная",
- "confirmText":"OK"
- },
- "passwordNotComplexEnoughModal":{
- "title":"Пароль недостаточно сложный",
- "confirmText":"OK"
- },
- "permissionRequiredForCameraModal":{
- "title":"Ой...",
- "content":"Требуется разрешение на доступ к камере для сканирования QR кода",
- "confirmText":"OK"
- }
- },
- "bottom": {
- "termsOfUse": "Условия использования",
- "privacyPolicy": "Политика конфиденциальности",
- "support": "Поддержка",
- "donate": "Пожертвовать",
- "network": "Статистика сети",
- "miningPool": "Майнинг",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Защищенный Кошелек Карбованца",
- "tagLine": "Самый простой способ использования карбованцев – в любое время, в любом месте",
- "actions": {
- "loadWallet": "Загрузить мой кошелек",
- "importWallet": "Импортировать кошелек",
- "create": "Создать",
- "createWallet": "Создать кошелек"
- },
- "notes": {
- "secure": {
- "title": "Безопасный",
- "description": "Без серверов, полностью зашифрован!"
- },
- "fast": {
- "title": "Быстрый",
- "description": "Доступен когда надо!"
- },
- "technology": {
- "title": "Локальный",
- "description": "Ключи в браузере"
- },
- "openSource": {
- "title": "Open-source",
- "description": "Не доверяй - проверяй!"
- }
- }
- },
- "accountPage": {
- "title": "Аккаунт",
- "subtitle": "Обзор вашей учетной записи и истории транзакций",
- "synchronizingBlock": {
- "text": "Синхронизация..."
- },
- "balanceBlock": {
- "title": "Ваш баланс",
- "unlocked": "Доступно"
- },
- "historyBlock": {
- "title": "История транзакций",
- "pendingTxStatus": "Ожидается",
- "emptyWallet": "В этом кошельке пока нет средств.",
- "waitSync": "Пожалуйста подождите пока кошелек обновляется",
- "beReallyPatient": "Начальная установка может занять некоторое время...",
- "getCoinAddress": "Получить KRB"
- },
- "txDetails":{
- "title":"Детали транзакции",
- "txHash":"Хеш",
- "feesOnTx":"Комиссия",
- "blockHeight":"Высота блока",
- "paymentId":"Идентификатор платежа",
- "txPrivKey":"Секретный ключ транзакции"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Изменить ваш пароль",
- "oldPassword":{
- "label":"Старый пароль",
- "invalid":"Пароль недействительный"
- },
- "newPassword":{
- "label":"Выберите новый пароль для зашиты вашего кошелька"
- },
- "newPasswordConfirm":{
- "label":"Подтвердите новый пароль"
- },
- "confirm":"Изменить пароль",
- "modalSuccess":{
- "title":"Пароль изменен!",
- "confirmText":"OK"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Создается кошелек...",
- "subtitle":"Почти готово",
- "waitingMessage":"Генерируется кошелек..."
- },
- "finalizationStep":{
- "title":"Все. Ваш кошелек готов!",
- "subtitle":"Приготовьтесь использовать Карбо как никогда до этого",
- "passwordSelectionBlock":{
- "label":"Защитите ваш кошелек"
- },
- "passwordConfirmBlock":{
- "label":"Подтвердите пароль"
- },
- "validPassword":"Использовать этот пароль",
- "backupBlock":{
- "title":"Сохраните ваши приватные данные чтобы иметь возможность восстановления.",
- "option1":"Опция 1: ",
- "option2":"Опция 2: ",
- "titlePdf":"Скачать PDF",
- "titleManualWrite":"Записать ключи",
- "privateKeys":"Приватный ключ",
- "mnemonicPhrase":"Мнемоническая фраза",
- "separatorManualMethodsSolution":" или ",
- "confirmManuallyWritten":"Я записал себе мнемоническую фразу",
- "warningMessage":"**Не потеряйте!** Она не может быть восстановлена если вы ее потеряете. **Никому не передавайте!** Ваши средства могут быть украдены если воспользуетесь этим файлом или фразой на вредоносном/фишинговом сайте. **Сделайте резервную копию!** Берегите как миллион долларов, которого оно может одного прекрасного дня стоить. ",
- "finishButton":"Я понял. Продолжить."
- }
- },
- "disclaimerBlock":{
- "title":"Риски использования KarboWallet",
- "content":"KarboWallet это веб-интерфейс. Он помогает вам использовать Карбо без необходимости держать полный узел сети Карбо. Мы рекомендуем относиться к KarboWallet со всей серьезностью, как к вашему бумажнику."
- }
- },
- "donatePage":{
- "title":"Пожертвовать",
- "subtitle":"Помогите профинансировать разработку и оплату счетов",
- "webwalletBlock":{
- "title":"Помошь Веб-кошельку",
- "content":"Если вы хотите поддержать разработку, помочь с оплатой хостинга, если вам нравится аппликация, пожалуйста сделайте пожертвование:
"
- },
- "devFundBlock":{
- "title":"Официальный фонд Карбо",
- "content":"Чтобы поддержать Карбованец, вы можете сделать пожертвование на эти адреса"
- }
- },
- "supportPage":{
- "title":"Поддержка",
- "subtitle":"Мы тут чтобы помочь!",
- "getInTouchBlock":{
- "title":"Свяжитесь с нами!",
- "content":"Есть идеи или пожелания по улучшению кошелька? Напишите нам!",
- "discord":"Канал Karbo в Discord"
- }
- },
- "networkPage":{
- "title":"Статистика сети",
- "subtitle":"Обзор сети Karbo",
- "statsBlock":{
- "hashrate":"Хешрейт",
- "height":"Высота блокчейна",
- "difficulty":"Сложность",
- "lastTimeBlock":"Время последнего блока",
- "lastReward":"Награда за последний блок"
- }
- },
- "sendPage":{
- "title":"Отправить KRB",
- "sendBlock":{
- "address":{
- "label":"Адрес получателя",
- "placeholder":"Укажите адрес, на который хотите отправить средства",
- "invalid":"Адрес получателя неверный",
- "fundsTo":"Средства будут отправлены на",
- "receiver":"Получатель",
- "description":"Описание"
- },
- "amount":{
- "label":"Сумма",
- "invalid":"Сумма неверная"
- },
- "paymentId":{
- "label":"Payment ID (необязательно)",
- "invalid":"Идентификатор платежа неверный. Длина должна быть 16 или 64 символа"
- },
- "sendButton":"Отправить",
- "cancelButton":"Отменить"
- },
- "qrCodeScanning":{
- "explication":"Показать QR код"
- },
- "notEnoughMoneyModal":{
- "title":"Ой...",
- "content":"В кошельке недостаточно средств для совершения этого перевода",
- "confirmText":"OK"
- },
- "thankYouDonationModal":{
- "title":"Спасибо за ваше пожертвование!",
- "content":"Мы ценим вашу поддержку. Это пожертвование поможет сделать Karbo лучше",
- "confirmText":"OK"
- },
- "transferSentModal":{
- "title":"Перевод успешно отправлен!",
- "confirmText":"OK"
- },
- "transferExceptionModal":{
- "title":"Ой...",
- "content":"Случилась ошибка. Пожалуйста сообщите о ней: {details}",
- "confirmText":"OK"
- },
- "invalidAmountModal":{
- "title":"Ой...",
- "content":"Неверная сумма",
- "confirmText":"OK"
- },
- "creatingTransferModal":{
- "title":"Создается перевод...",
- "content":"Пожалуйста подождите..."
- },
- "finalizingTransferModal":{
- "title":"Завершается перевод...",
- "content":"Пожалуйста подождите..."
- },
- "confirmTransactionModal":{
- "title":"Подтвердить перевод?",
- "content":"Сумма: {amount} Комиссии: {fees} Всего: {total}",
- "confirmText":"Подтвердить",
- "cancelText":"Отменить"
- },
- "waitingNfcModal":{
- "title":"Ожидание Nfc",
- "content":"Поднесите ближе к другому устройству"
- }
- },
- "receivePage":{
- "title":"Получить KRB",
- "receiveBlock":{
- "address":{
- "title":"Ваш адрес для получения:",
- "label":"Дайте этот адрес чтобы получить средства"
- },
- "qrCode":{
- "title":"Или персонализируйте QR код:",
- "labelAmount":"Сумма (необязательно)",
- "labelRecipient":"Название получателя (необязательно)",
- "labelDescription":"Описание транзакции (необязательно)",
- "updateButton":"Обновить"
- }
- },
- "qrBlock":{
- "title":"Ваш персональный QR код"
- },
- "waitingNfcToWriteModal":{
- "title":"Ожидание Nfc",
- "titleSuccess":"Nfc тег записан",
- "content":"Поднесите NFC тег ближе для записи"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Вместимость тега недостаточная"
- }
- },
- "miningPage":{
- "title":"Информация о майнинге",
- "subtitle":"Поддержите сеть майнингом и получите в награду KRB",
- "parameterBlock":{
- "title":"Параметры",
- "labelDestinationAddress":"Кошелек на который майнить",
- "labelThreads":"Число потоков (больше = выше скорость)",
- "start":"Старт",
- "stop":"Стоп"
- },
- "statisticsBlocks":{
- "title":"Статистика",
- "validShares":"Валидные доли",
- "hashrate":"Хешрейт",
- "maxHashrate":"Макс. Хешрейт",
- "dedicatedHardware":"Майнинг помогает в децентрализации сети и позволяет вам заработать Karbo.",
- "miningHandledBy":"Майнинг проходит на пуле pool.karbowanec.com"
- }
- },
- "settingsPage":{
- "title":"Настройки",
- "subtitle":"Тут вы можете изменить параметры",
- "versionBlock":{
- "versionNumber":"Номер версии: ",
- "versionCode":"Код версии: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Скорость обновления кошелька (будет потреблять больше ресурсов)",
- "fastest":"Скорая",
- "fast":"Быстрая",
- "medium":"Средняя",
- "slow":"Медленная"
- },
- "language":{
- "label":"Язык"
- },
- "readMinerTx":{
- "label":"Считывать транзакции майнинга (только для соло майнинга)"
- }
- },
- "changePasswordButton":"Изменть пароль моего кошелька",
- "deleteWalletButton":"Удалить мой кошелек (локальную копию)",
- "walletSettings":{
- "creationHeight":{
- "label":"Высота создания кошелька"
- },
- "currentScanningHeight": {
- "label": "Текущая высота сканирования"
- },
- "updateButton":"Обновить"
- },
- "deleteWalletModal":{
- "title":"Удалить мой кошелек (локальную копию)",
- "content":"Вы ДЕЙСТВИТЕЛЬНО уверены что хотите удалить свой кошелек?",
- "confirmText":"Да, я знаю что делаю",
- "cancelText":"Отменить"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Параметры",
- "password":{
- "label":"Пароль для защиты вашего кошелька"
- },
- "passwordConfirm":{
- "label":"Подтвердите пароль",
- "invalid":"Пароль не совпадает с первым введенным паролем"
- },
- "importHeight":{
- "label":"С какой высоты начать импорт:"
- }
- }
- },
- "importFromQrPage":{
- "title":"Импортировать кошелек из QR кода",
- "subtitle":"Импортировать кошелек из оффлайновой резервной копии",
- "qrCodeBlock":{
- "title":"QR код",
- "startScanButton":"Начать сканирование",
- "importButton":"Импортировать"
- },
- "qrScanningBlock":{
- "title":"Покажите QR код"
- }
- },
- "exportPage":{
- "title":"Сделать резервную копию ваших данных",
- "publicAddressBlock":{
- "title":"Ваш публичный адрес"
- },
- "pdfBlock":{
- "title":"Резервная копия PDF",
- "downloadButton":"Скачать"
- },
- "warningBlock":{
- "title":"Внимание",
- "content":"Если вы решите сохранить приватные ключи или мнемоническую фразу, кошелек НЕ СОХРАНИТ их в текстовом виде для вашей безопасности. Файл является альтернативным решением где ваши ключи зашифрованы и содержит резервную копию всех ваших транзакций для ускорения синхронизации при восстановлении."
- },
- "exportBlock":{
- "title":"Экспортировать сырые данные",
- "privateKeysButton":"Получить мои приватные ключи",
- "mnemonicKeysButton":"Получить мою мнемоническую фразу",
- "fileButton":"Экспортировать в файл"
- },
- "walletKeysModal":{
- "title":"Приватные ключи",
- "confirmText":"OK",
- "content":"Пожалуйста отнеситесь серьезно к сохранению этих ключей. Тот кто их имеет, владеет средствами на кошельке! Ключ расходования: {privSpendKey} Ключ слежения: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Мнемоническая фраза",
- "confirmText":"OK",
- "content":"Пожалуйста отнеситесь серьезно к сохранению этой мнемонической фразы. Тот кто ее имеет, владеет средствами на кошельке ! Фраза: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"Выберите язык мнемонической фразы",
- "confirmText":"Экспортировать"
- }
- },
- "importPage":{
- "title":"Создать кошелек",
- "subtitle":"Из ранее созданных ключей, файла или мнемонической фразы",
- "chooseMethod":"Выберите метод импорта:",
- "fromKeys":"Из ключей",
- "fromFile":"Из файла",
- "fromMnemonic":"Из мнемонической фразы",
- "fromQr":"Из QR кода"
- },
- "termsOfUsePage":{
- "title":"Условия использования",
- "subtitle":"Внимательно их прочитайте."
- },
- "importFromFilePage":{
- "title":"Импорт кошелька из резервного фала",
- "subtitle":"Использовать резервный файл для создания кошелька",
- "walletBlock":{
- "title":"Файл кошелька",
- "label":"Выберите файл",
- "importButton":"Импортировать"
- }
- },
- "importFromMnemonicPage":{
- "title":"Импорт кошелька из мнемонической фразы",
- "subtitle":"Использовать мнемоническую фразу для создания кошелька",
- "mnemonicBlock":{
- "title":"Мнемоническая фраза",
- "mnemonic":{
- "label":"Мнемоническая фраза: 25 слов",
- "invalid":"Мнемоническая фраза недействительная",
- "language":"Язык"
- },
- "importButton":"Импортировать"
- }
- },
- "importFromKeysPage":{
- "title":"Импорт кошелька из ключей",
- "subtitle":"Использовать приватные ключи для создания кошелька",
- "parametersBlock":{
- "viewOnlyWallet": {
- "label": "Хотите создать кошелек слежения?",
- "info": "Обратите внимание, кошелек слежения предназначен только для просмотра входящих платежей, так что баланс может отображаться неправильно!"
+ "menu": {
+ "home": "Обзор",
+ "account": "Аккаунт",
+ "send": "Отправить",
+ "receive": "Получить",
+ "export": "Экспорт",
+ "donate": "Пожертвовать",
+ "elections": "Выборы",
+ "contacts": "контакты",
+ "settings": "Настройки",
+ "disconnect": "Отключиться",
+ "network": "Статистика сети",
+ "mining": "Майнинг"
+ },
+ "global": {
+ "loading": "Загрузка",
+ "disableSecurity": "Отключить эту предосторожность, я понимаю риск",
+ "passwordInvalidRequirements": "Пароль должен состоять по крайней мере из 8 символов - 1 большой буквы, 1 маленькой, одного числа, одного спецсимвола",
+ "passwordConfirmationNotMatching": "Подтверждение пароля не совпадает с первым",
+ "download": "Скачать",
+ "newVersionModal": {
+ "title": "Есть новая версия",
+ "content": "Хотите перезагрузить чтобы обновить версию?",
+ "confirmText": "Да",
+ "cancelText": "Назад"
+ },
+ "openWalletModal": {
+ "title": "Пароль кошелька",
+ "confirmText": "Открыть",
+ "cancelText": "Отмена"
+ },
+ "invalidPasswordModal": {
+ "title": "Ой...",
+ "content": "Кажется пароль неверный",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Ой...",
+ "content": "Фраза для восстановления неверная",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "Пароль недостаточно сложный",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Ой...",
+ "content": "Требуется разрешение на доступ к камере для сканирования QR кода",
+ "confirmText": "OK"
}
- },
- "keysBlock":{
- "titleNotViewOnly":"Ключи кошелька",
- "titleViewOnly":"Кошелек просмотра",
- "privateSpend":{
- "label":"Приватный ключ расходования"
- },
- "privateView":{
- "label":"Приватный ключ слежения",
- "optional":"(необязательно)"
- },
- "publicKey":{
- "label":"Публичный ключ"
- },
- "importButton":"Импортировать"
- }
- }
- },
- "number":{
+ },
+ "bottom": {
+ "termsOfUse": "Условия использования",
+ "privacyPolicy": "Политика конфиденциальности",
+ "support": "Поддержка",
+ "donate": "Пожертвовать",
+ "network": "Статистика сети",
+ "miningPool": "Майнинг",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Защищенный Кошелек Qwertycoin",
+ "tagLine": "в любом месте. в любой момент. любое место. любое устройство.",
+ "tagLineTwo": "Самый простой способ использовать Qwertycoin",
+ "actions": {
+ "loadWallet": "Загрузить мой кошелек",
+ "importWallet": "Импортировать кошелек",
+ "create": "Создать",
+ "createWallet": "Создать кошелек"
+ }
+ },
+ "accountPage": {
+ "title": "Аккаунт",
+ "subtitle": "Обзор вашей учетной записи и истории транзакций",
+ "synchronizingBlock": {
+ "text": "Синхронизация..."
+ },
+ "balanceBlock": {
+ "title": "Ваш баланс",
+ "unlocked": "Доступно"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "История транзакций",
+ "pendingTxStatus": "Ожидается",
+ "emptyWallet": "В этом кошельке пока нет средств.",
+ "waitSync": "Пожалуйста подождите пока кошелек обновляется",
+ "beReallyPatient": "Начальная установка может занять некоторое время...",
+ "getCoinAddress": "Получить QWC"
+ },
+ "txDetails": {
+ "title": "Детали транзакции",
+ "txHash": "Хеш",
+ "feesOnTx": "Комиссия",
+ "blockHeight": "Высота блока",
+ "paymentId": "Идентификатор платежа",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Секретный ключ транзакции"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Изменить ваш пароль",
+ "oldPassword": {
+ "label": "Старый пароль",
+ "invalid": "Пароль недействительный"
+ },
+ "newPassword": {
+ "label": "Выберите новый пароль для зашиты вашего кошелька"
+ },
+ "newPasswordConfirm": {
+ "label": "Подтвердите новый пароль"
+ },
+ "confirm": "Изменить пароль",
+ "modalSuccess": {
+ "title": "Пароль изменен!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "контакты"
+ },
+ "electionsPage": {
+ "title": "Выборы"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Создается кошелек...",
+ "subtitle": "Почти готово",
+ "waitingMessage": "Генерируется кошелек..."
+ },
+ "finalizationStep": {
+ "title": "Все. Ваш кошелек готов!",
+ "subtitle": "Приготовьтесь использовать Qwertycoin как никогда до этого",
+ "passwordSelectionBlock": {
+ "label": "Защитите ваш кошелек"
+ },
+ "passwordConfirmBlock": {
+ "label": "Подтвердите пароль"
+ },
+ "validPassword": "Использовать этот пароль",
+ "backupBlock": {
+ "title": "Сохраните ваши приватные данные чтобы иметь возможность восстановления.",
+ "option1": "Опция 1: ",
+ "option2": "Опция 2: ",
+ "titlePdf": "Скачать PDF",
+ "titleManualWrite": "Записать ключи",
+ "privateKeys": "Приватный ключ",
+ "mnemonicPhrase": "Мнемоническая фраза",
+ "separatorManualMethodsSolution": " или ",
+ "confirmManuallyWritten": "Я записал себе мнемоническую фразу",
+ "warningMessage": "**Не потеряйте!** Она не может быть восстановлена если вы ее потеряете. **Никому не передавайте!** Ваши средства могут быть украдены если воспользуетесь этим файлом или фразой на вредоносном/фишинговом сайте. **Сделайте резервную копию!** Берегите как миллион долларов, которого оно может одного прекрасного дня стоить. ",
+ "finishButton": "Я понял. Продолжить."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Риски использования QwertycoinWallet",
+ "content": "QwertycoinWallet это веб-интерфейс. Он помогает вам использовать Qwertycoin без необходимости держать полный узел сети Qwertycoin. Мы рекомендуем относиться к QwertycoinWallet со всей серьезностью, как к вашему бумажнику."
+ }
+ },
+ "donatePage": {
+ "title": "Пожертвовать",
+ "subtitle": "Помогите профинансировать разработку и оплату счетов",
+ "webwalletBlock": {
+ "title": "Помошь Веб-кошельку",
+ "content": "Если вы хотите поддержать разработку, помочь с оплатой хостинга, если вам нравится аппликация, пожалуйста сделайте пожертвование:
"
+ },
+ "devFundBlock": {
+ "title": "Официальный фонд Qwertycoin",
+ "content": "Чтобы поддержать Qwertycoinванец, вы можете сделать пожертвование на эти адреса"
+ }
+ },
+ "supportPage": {
+ "title": "Поддержка",
+ "subtitle": "Мы тут чтобы помочь!",
+ "getInTouchBlock": {
+ "title": "Свяжитесь с нами!",
+ "content": "Есть идеи или пожелания по улучшению кошелька? Напишите нам!",
+ "discord": "Канал Qwertycoin в Discord"
+ }
+ },
+ "networkPage": {
+ "title": "Статистика сети",
+ "subtitle": "Обзор сети Qwertycoin",
+ "statsBlock": {
+ "connectNode": "Подключенный Мастернод",
+ "hashrate": "Хешрейт",
+ "height": "Высота блокчейна",
+ "difficulty": "Сложность",
+ "lastTimeBlock": "Время последнего блока",
+ "lastReward": "Награда за последний блок"
+ }
+ },
+ "sendPage": {
+ "title": "Отправить QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Адрес получателя",
+ "placeholder": "Укажите адрес, на который хотите отправить средства",
+ "invalid": "Адрес получателя неверный",
+ "fundsTo": "Средства будут отправлены на",
+ "receiver": "Получатель",
+ "description": "Описание"
+ },
+ "amount": {
+ "label": "Сумма",
+ "invalid": "Сумма неверная"
+ },
+ "paymentId": {
+ "label": "Payment ID (необязательно)",
+ "invalid": "Идентификатор платежа неверный. Длина должна быть 16 или 64 символа"
+ },
+ "sendButton": "Отправить",
+ "cancelButton": "Отменить"
+ },
+ "qrCodeScanning": {
+ "explication": "Показать QR код"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Ой...",
+ "content": "В кошельке недостаточно средств для совершения этого перевода",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Спасибо за ваше пожертвование!",
+ "content": "Мы ценим вашу поддержку. Это пожертвование поможет сделать Qwertycoin лучше",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Перевод успешно отправлен!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Ой...",
+ "content": "Случилась ошибка. Пожалуйста сообщите о ней: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Ой...",
+ "content": "Неверная сумма",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Создается перевод...",
+ "content": "Пожалуйста подождите..."
+ },
+ "finalizingTransferModal": {
+ "title": "Завершается перевод...",
+ "content": "Пожалуйста подождите..."
+ },
+ "confirmTransactionModal": {
+ "title": "Подтвердить перевод?",
+ "content": "Сумма: {amount} Комиссии: {fees} Всего: {total}",
+ "confirmText": "Подтвердить",
+ "cancelText": "Отменить"
+ },
+ "waitingNfcModal": {
+ "title": "Ожидание Nfc",
+ "content": "Поднесите ближе к другому устройству"
+ }
+ },
+ "receivePage": {
+ "title": "Получить QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Ваш адрес для получения:",
+ "label": "Дайте этот адрес чтобы получить средства"
+ },
+ "qrCode": {
+ "title": "Или персонализируйте QR код:",
+ "labelAmount": "Сумма (необязательно)",
+ "labelRecipient": "Название получателя (необязательно)",
+ "labelDescription": "Описание транзакции (необязательно)",
+ "updateButton": "Обновить"
+ }
+ },
+ "qrBlock": {
+ "title": "Ваш персональный QR код"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Ожидание Nfc",
+ "titleSuccess": "Nfc тег записан",
+ "content": "Поднесите NFC тег ближе для записи"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Вместимость тега недостаточная"
+ }
+ },
+ "miningPage": {
+ "title": "Информация о майнинге",
+ "subtitle": "Поддержите сеть майнингом и получите в награду QWC",
+ "parameterBlock": {
+ "title": "Параметры",
+ "labelDestinationAddress": "Кошелек на который майнить",
+ "labelThreads": "Число потоков (больше = выше скорость)",
+ "start": "Старт",
+ "stop": "Стоп"
+ },
+ "statisticsBlocks": {
+ "title": "Статистика",
+ "validShares": "Валидные доли",
+ "hashrate": "Хешрейт",
+ "maxHashrate": "Макс. Хешрейт",
+ "dedicatedHardware": "Майнинг помогает в децентрализации сети и позволяет вам заработать Qwertycoin.",
+ "miningHandledBy": "Майнинг проходит на пуле https://pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Настройки",
+ "subtitle": "Тут вы можете изменить параметры",
+ "versionBlock": {
+ "versionNumber": "Номер версии: ",
+ "versionCode": "Код версии: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Скорость обновления кошелька (будет потреблять больше ресурсов)",
+ "fastest": "Скорая",
+ "fast": "Быстрая",
+ "medium": "Средняя",
+ "slow": "Медленная"
+ },
+ "language": {
+ "label": "Язык"
+ },
+ "currency": {
+ "label": "национальная валюта"
+ },
+ "readMinerTx": {
+ "label": "Считывать транзакции майнинга (только для соло майнинга)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Изменть пароль моего кошелька",
+ "deleteWalletButton": "Удалить мой кошелек (локальную копию)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Высота создания кошелька"
+ },
+ "currentScanningHeight": {
+ "label": "Текущая высота сканирования"
+ },
+ "updateButton": "Обновить"
+ },
+ "deleteWalletModal": {
+ "title": "Удалить мой кошелек (локальную копию)",
+ "content": "Вы ДЕЙСТВИТЕЛЬНО уверены что хотите удалить свой кошелек?",
+ "confirmText": "Да, я знаю что делаю",
+ "cancelText": "Отменить"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Параметры",
+ "password": {
+ "label": "Пароль для защиты вашего кошелька"
+ },
+ "passwordConfirm": {
+ "label": "Подтвердите пароль",
+ "invalid": "Пароль не совпадает с первым введенным паролем"
+ },
+ "importHeight": {
+ "label": "С какой высоты начать импорт:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Импортировать кошелек из QR кода",
+ "subtitle": "Импортировать кошелек из оффлайновой резервной копии",
+ "qrCodeBlock": {
+ "title": "QR код",
+ "startScanButton": "Начать сканирование",
+ "importButton": "Импортировать"
+ },
+ "qrScanningBlock": {
+ "title": "Покажите QR код"
+ }
+ },
+ "exportPage": {
+ "title": "Сделать резервную копию ваших данных",
+ "publicAddressBlock": {
+ "title": "Ваш публичный адрес"
+ },
+ "pdfBlock": {
+ "title": "Резервная копия PDF",
+ "downloadButton": "Скачать"
+ },
+ "warningBlock": {
+ "title": "Внимание",
+ "content": "Если вы решите сохранить приватные ключи или мнемоническую фразу, кошелек НЕ СОХРАНИТ их в текстовом виде для вашей безопасности. Файл является альтернативным решением где ваши ключи зашифрованы и содержит резервную копию всех ваших транзакций для ускорения синхронизации при восстановлении."
+ },
+ "exportBlock": {
+ "title": "Экспортировать сырые данные",
+ "privateKeysButton": "Получить мои приватные ключи",
+ "mnemonicKeysButton": "Получить мою мнемоническую фразу",
+ "fileButton": "Экспортировать в файл"
+ },
+ "walletKeysModal": {
+ "title": "Приватные ключи",
+ "confirmText": "OK",
+ "content": "Пожалуйста отнеситесь серьезно к сохранению этих ключей. Тот кто их имеет, владеет средствами на кошельке! Ключ расходования: {privSpendKey} Ключ слежения: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Мнемоническая фраза",
+ "confirmText": "OK",
+ "content": "Пожалуйста отнеситесь серьезно к сохранению этой мнемонической фразы. Тот кто ее имеет, владеет средствами на кошельке ! Фраза: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "Выберите язык мнемонической фразы",
+ "confirmText": "Экспортировать"
+ }
+ },
+ "importPage": {
+ "title": "Создать кошелек",
+ "subtitle": "Из ранее созданных ключей, файла или мнемонической фразы",
+ "chooseMethod": "Выберите метод импорта:",
+ "fromKeys": "Из ключей",
+ "fromFile": "Из файла",
+ "fromMnemonic": "Из мнемонической фразы",
+ "fromQr": "Из QR кода"
+ },
+ "termsOfUsePage": {
+ "title": "Условия использования",
+ "subtitle": "Внимательно их прочитайте."
+ },
+ "importFromFilePage": {
+ "title": "Импорт кошелька из резервного фала",
+ "subtitle": "Использовать резервный файл для создания кошелька",
+ "walletBlock": {
+ "title": "Файл кошелька",
+ "label": "Выберите файл",
+ "importButton": "Импортировать"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Импорт кошелька из мнемонической фразы",
+ "subtitle": "Использовать мнемоническую фразу для создания кошелька",
+ "mnemonicBlock": {
+ "title": "Мнемоническая фраза",
+ "mnemonic": {
+ "label": "Мнемоническая фраза: 25 слов",
+ "invalid": "Мнемоническая фраза недействительная",
+ "language": "Язык"
+ },
+ "importButton": "Импортировать"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Импорт кошелька из ключей",
+ "subtitle": "Использовать приватные ключи для создания кошелька",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Хотите создать кошелек слежения?",
+ "info": "Обратите внимание, кошелек слежения предназначен только для просмотра входящих платежей, так что баланс может отображаться неправильно!"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Ключи кошелька",
+ "titleViewOnly": "Кошелек просмотра",
+ "privateSpend": {
+ "label": "Приватный ключ расходования"
+ },
+ "privateView": {
+ "label": "Приватный ключ слежения",
+ "optional": "(необязательно)"
+ },
+ "publicKey": {
+ "label": "Публичный ключ"
+ },
+ "importButton": "Импортировать"
+ }
+ }
},
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": true
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/translations/sr.json b/src/translations/sr.json
index 76ae64dc..005b3184 100644
--- a/src/translations/sr.json
+++ b/src/translations/sr.json
@@ -1,496 +1,540 @@
{
- "website":{
- "title":"Официјални Карбо Веб Новчаник",
- "description":"Официјални онлајн новчаник за Карбо валуту који је анониман, сигуран, и у потпуности се ослања на Ваш претраживач у циљу оптималне безбедности."
+ "website": {
+ "title": "Официјални Qwertycoin Веб Новчаник",
+ "description": "Официјални онлајн новчаник за Qwertycoin валуту који је анониман, сигуран, и у потпуности се ослања на Ваш претраживач у циљу оптималне безбедности."
},
"messages": {
- "menu": {
- "home": "Почетна",
- "account": "Налог",
- "send": "Пошаљи",
- "receive": "Прими",
- "export": "Извоз",
- "donate": "Донирај",
- "settings": "Подешавања",
- "disconnect": "Прекини везу",
- "network": "Статистика Мреже",
- "mining": "Рударење"
- },
- "global": {
- "loading": "Учитавам",
- "disableSecurity":"Искључи безбедност, разумем и прихватам ризик",
- "passwordInvalidRequirements":"Лозинка мора да се састоји из најмање 8 карактера, једног великог слова, једног малог слова, једног броја и једног симбола",
- "passwordConfirmationNotMatching":"Лозинке се не подударају",
- "download":"Преузми",
- "newVersionModal":{
- "title":"Нова верзија је доступна",
- "content":"Да ли желите да освежите страницу и учитате нову верзију ?",
- "confirmText":"Да",
- "cancelText":"Касније"
- },
- "openWalletModal":{
- "title":"'Лозинка новчаника'",
- "confirmText":"Отвори",
- "cancelText":"Откажи"
- },
- "invalidPasswordModal":{
- "title":"Упс...",
- "content":"Неисправна лозинка",
- "confirmText":"У реду"
- },
- "invalidMnemonicModal":{
- "title":"Упс...",
- "content":"Мнемоничка фраза није исправна",
- "confirmText":"У реду"
- },
- "passwordNotComplexEnoughModal":{
- "title":"Лозинка није довољно сложена",
- "confirmText":"У реду"
- },
- "permissionRequiredForCameraModal":{
- "title":"Упс...",
- "content":"Потребна дозвола за приступ камери у циљу скенирања QR кода",
- "confirmText":"У реду"
- }
- },
- "bottom": {
- "termsOfUse": "Правила коришћења",
- "privacyPolicy": "Правила о приватности",
- "support": "Подршка",
- "donate": "Донирај",
- "network": "Статистика Мреже",
- "miningPool": "Пул за рударење",
- "github": "Гитхаб"
- },
- "homepage": {
- "mainTitle": "Безбедан Карбо Новчаник",
- "tagLine": "Најједноставнији начин да користите Карбо, било када и било где!",
- "actions": {
- "loadWallet": "Учитај новчаник",
- "importWallet": "Увези новчаник",
- "create": "Направи",
- "createWallet": "Направи новчаник"
- },
- "notes": {
- "secure": {
- "title": "Сигурност",
- "description": "Без сервера, потпуна енкрипција!"
- },
- "fast": {
- "title": "Брзина",
- "description": "Шаљите било где, било када!"
- },
- "technology": {
- "title": "Јединствена технологија",
- "description": "Повезан директно са Карбо Блокчејном!"
- },
- "openSource": {
- "title": "Open-source",
- "description": "Доступно на ГитХаб"
- }
- }
- },
- "accountPage": {
- "title": "Налог",
- "subtitle": "Преглед налога и трансакција",
- "synchronizingBlock": {
- "text": "Синхронизација у току"
- },
- "balanceBlock": {
- "title": "Ваша средства",
- "unlocked": "Откључано"
- },
- "historyBlock": {
- "title": "Историја ваших трансакција",
- "pendingTxStatus": "На чекању",
- "emptyWallet": "Тренутно немате средстава у новчанику",
- "waitSync": "Сачекајте да се новчаник освежи",
- "beReallyPatient": "Овај поступак може да потраје...",
- "getCoinAddress": "Адреса за пријем новчића"
- },
- "txDetails":{
- "title":"Transaction details",
- "txHash":"Tx hash",
- "feesOnTx":"Fees on the tx",
- "blockHeight":"Block height",
- "paymentId":"Payment ID",
- "txPrivKey":"Transaction Private Key"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Промените лозинку",
- "oldPassword":{
- "label":"Стара лозинка",
- "invalid":"Погрешна лозинка"
- },
- "newPassword":{
- "label":"Изаберите нову лозинку",
- "invalid":" Лозинка мора да се састоји из најмање 8 карактера, једног великог слова, једног малог слова, једног броја и једног симбола"
- },
- "newPasswordConfirm":{
- "label":"Потврдите нову лозинку"
- },
- "confirm":"Промени лозинку",
- "modalSuccess":{
- "title":"Лозинка промењена !",
- "confirmText":"У реду"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Генерисање новчаника у току...",
- "subtitle":"Процес је при крају",
- "waitingMessage":"Генеришем новчаник..."
- },
- "finalizationStep":{
- "title":"Просто као пасуљ. Ваш налог је спреман!",
- "subtitle":"Спремите се да користите Карбо било где и било кад.",
- "passwordSelectionBlock":{
- "label":"Заштитите ваше податке"
- },
- "passwordConfirmBlock":{
- "label":"Потврдите лозинку"
- },
- "validPassword":"Користите ову лозинку",
- "backupBlock":{
- "title":"И преузмите шифровану копију ваших података за будућу употребу ",
- "option1":"Опција 1: ",
- "option2":"Опција 2: ",
- "titlePdf":"Преузмите PDF фајл",
- "titleManualWrite":"Запишите кључеве",
- "privateKeys":"Приватни кључ",
- "mnemonicPhrase":"Мнемоничка фраза",
- "separatorManualMethodsSolution":" или ",
- "confirmManuallyWritten":"Записао сам",
- "warningMessage":"**Чувајте ове податке!** У случају губитка, подаци не могу бити враћени. **Не делите податке ни са ким!** Ваша средства могу бити украдена уколико користите ове податке на другим сајтовима сумњивог садржаја. **Направите резерву (backup)!** Обезбедите податке као да вреде милион долара. ",
- "finishButton":"Разумем. Настави"
- }
- },
- "disclaimerBlock":{
- "title":"Ризици коришћења Карбо новчаника",
- "content":"Карбо новчаник је интерфејс на мрежи. Осмишљен је да помогне при употреби Карбо валуте без потребе за покретањем софтвера на личном рачунару. Предлажемо да се односите према Карбо новчанику као према свом личном који користите свакодневно."
- }
- },
- "donatePage":{
- "title":"Донирај",
- "subtitle":"Помозите при финансирању развоја и плаћања рачуна.",
- "webwalletBlock":{
- "title":"Веб новчаник",
- "content":"Овај сервис је дело контрибутора под именом Gnock. Уколико желите да помогнете при даљем развоју ове апликације, молимо вас да размислите о донацији.
"
- },
- "devFundBlock":{
- "title":"Карбо новчаник за донације",
- "content":"Уколико сте заинтересовани да помогнете, можете то учинити слањем средстава на следећу адресу"
- }
- },
- "supportPage":{
- "title":"Подршка",
- "subtitle":"Уколико вам је потребна подршка, ту смо да помогнемо!",
- "getInTouchBlock":{
- "title":"Контактирајте нас!",
- "content":"Ако имате идеје или предлоге који би могли да помогну при даљем развоју овог сервиса, контактирајте нас!",
- "discord":"Карбо Дискорд Сервер"
- }
- },
- "networkPage":{
- "title":"Статистика мреже",
- "subtitle":"Увид у Карбо мрежу",
- "statsBlock":{
- "hashrate":"Хешрејт мреже",
- "height":"Блокчејн висина",
- "difficulty":"Тешкоћа мреже",
- "lastTimeBlock":"Последњи пронађени блок",
- "lastReward":"Последња блок награда"
- }
- },
- "sendPage":{
- "title":"Шаљи МСР",
- "sendBlock":{
- "address":{
- "label":"Пошаљи на адресу",
- "placeholder":"Напишите адресу на коју желите да пошаљете средства",
- "invalid":"Адреса неисправна",
- "fundsTo":"Средства ће бити послата на",
- "receiver":"Прималац",
- "description":"Опис"
- },
- "amount":{
- "label":"Количина за слање",
- "invalid":"Количина неисправна"
- },
- "paymentId":{
- "label":"ID уплате(произвољан корак)",
- "invalid":"ID уплате неисправан. Дужина мора бити између 16 и 64 карактера"
- },
- "sendButton":"Пошаљи",
- "cancelButton":"Откажи"
- },
- "qrCodeScanning":{
- "explication":"Скенирање QR кода"
- },
- "notEnoughMoneyModal":{
- "title":"Упс...",
- "content":"Немате довољно средстава за овај трансфер",
- "confirmText":"У реду"
- },
- "thankYouDonationModal":{
- "title":"Хвала вам на донацији!",
- "content":"Ваша помоћ је добродошла. Ваша донација ће помоћи при даљем развитку Карбо-ја",
- "confirmText":"Затвори"
- },
- "transferSentModal":{
- "title":"Трансфер успешан!",
- "confirmText":"Затвори"
- },
- "transferExceptionModal":{
- "title":"Упс...",
- "content":"Дошло је до грешке. Молимо пријавите грешку: {details}",
- "confirmText":"Затвори"
- },
- "invalidAmountModal":{
- "title":"Упс...",
- "content":"Количина погрешна",
- "confirmText":"Затвори"
- },
- "creatingTransferModal":{
- "title":"Припремам трансфер...",
- "content":"Молимо сачекајте..."
- },
- "finalizingTransferModal":{
- "title":"Финализирам трансфер...",
- "content":"Молимо сачекајте..."
- },
- "confirmTransactionModal":{
- "title":"Потврди трансфер?",
- "content":"'Количина: {amount} Провизија: {fees} Укупно: {total}",
- "confirmText":"Потврди",
- "cancelText":"Откажи"
- },
- "waitingNfcModal":{
- "title":"Waiting Nfc",
- "content":"Bring closer to the other device"
- }
- },
- "receivePage":{
- "title":"Прими МСР",
- "receiveBlock":{
- "address":{
- "title":"Адреса за примање новчића",
- "label":"Приложите ову адресу уколико желите да примите новчиће"
- },
- "qrCode":{
- "title":"Или помоћу QR кода",
- "labelAmount":"Количина (произвољна опција)",
- "labelRecipient":"Име примаоца(произвољна опција)",
- "labelDescription":"Опис трансакције(произвољна опција)",
- "updateButton":"Ажурирај"
- }
- },
- "qrBlock":{
- "title":"Ваш QR код"
- },
- "waitingNfcToWriteModal":{
- "title":"Waiting Nfc",
- "titleSuccess":"Nfc Tag written",
- "content":"Bring closer the NFC tag to write"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Tag capacity insufficient"
- }
- },
- "miningPage":{
- "title":"Рударите директно из претраживача",
- "subtitle":"Подржите мрежу и повећајте стабилност исте, бићете награђени МСР новчићима",
- "parameterBlock":{
- "title":"Параметри",
- "labelDestinationAddress":"Новчаник за рударење",
- "labelThreads":"Број језгара(више = већи хешрејт)",
- "start":"Старт",
- "stop":"Стоп"
- },
- "statisticsBlocks":{
- "title":"Статистика",
- "validShares":"Валидних шерова",
- "hashrate":"Хешрејт",
- "maxHashrate":"Maксимални Хешрејт",
- "dedicatedHardware":"Са одговарајућим софтвером за рударење можете очекивати 2 до 3 пута већи хешрејт. Поред тога, софтвер за рударење вам омогућава да користите и графичку картицу.",
- "miningHandledBy":"Рударење је омогућено и контролисано од стране get.masaricoin.com пула"
- }
- },
- "settingsPage":{
- "title":"Подешавања",
- "subtitle":"Промените подешавања овде",
- "versionBlock":{
- "versionNumber":"Version number: ",
- "versionCode":"Version code: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Брзина ажурирања новчаника(утиче на потрошњу енергије)",
- "fastest":"Најбрже",
- "fast":"Брзо",
- "medium":"Средње",
- "slow":"Споро"
- },
- "language":{
- "label":"Language"
- },
- "readMinerTx":{
- "label":"Трансакције рудара(само за соло рударење)"
- }
- },
- "changePasswordButton":"Промени лозинку новчаника",
- "deleteWalletButton":"Обриши мој новчаник(локална копија)",
- "walletSettings":{
- "creationHeight":{
- "label":"Блок висина при креацији новчаника"
- },
- "currentScanningHeight": {
- "label": "Тренутна висина скенирања"
- },
- "updateButton":"Ажурирај"
- },
- "deleteWalletModal":{
- "title":"Обриши мој новчаник(локална копија)",
- "content":"Да ли сте СИГУРНИ да желите брисање новчаника ?",
- "confirmText":"Да, сигуран сам",
- "cancelText":"Откажи"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Параметри",
- "password":{
- "label":"Лозинка за заштиту новчаника"
- },
- "passwordConfirm":{
- "label":"Потврдите лозинку",
- "invalid":"Лозинка се не подудара са првим уносом"
- },
- "importHeight":{
- "label":"Блок висина за увоз"
- }
- }
- },
- "importFromQrPage":{
- "title":"Увоз новчаника преко QR кода",
- "subtitle":"Увези новчаник из офлајн датотеке",
- "qrCodeBlock":{
- "title":"QR код",
- "startScanButton":"Покрени скенирање",
- "importButton":"Увези"
- },
- "qrScanningBlock":{
- "title":"Приложите QR код"
- }
- },
- "exportPage":{
- "title":"Сачувајте ваше податке",
- "publicAddressBlock":{
- "title":"Ваша адреса"
- },
- "pdfBlock":{
- "title":"Pdf чување",
- "downloadButton":"Преузми"
- },
- "warningBlock":{
- "title":"Упозорење",
- "content":"Уколико се одлучите да сачувате податке вашег новчаника, МОЛИМО ВАС немојте их чувати на видном и лако доступном месту. Овај фајл је алтернативно решење које садржи комплетан сет шифрованих параметара потребних за будућу ресторацију и синхронизацију."
- },
- "exportBlock":{
- "title":"Извези СИРОВЕ податке",
- "privateKeysButton":"Моји приватни кључеви",
- "mnemonicKeysButton":"Моја мнемоничка фраза",
- "fileButton":"Сачувај као фајл"
- },
- "walletKeysModal":{
- "title":"Приватни кључеви",
- "confirmText":"У реду",
- "content":"Молимо бас да чувате ове податке на безбедном месту. Поседовање ових кључева значи поседовање свих средстава везаних за поменуте кључеве. ! Потрошачки кључ: {privSpendKey} Приватни кључ: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Приватни кључеви",
- "confirmText":"У реду",
- "content":"Молимо вас да пажљиво чувате мнемоничку фразу. Поседовање исте вам омогућава приступ средствима везаним за овај новчаник ! Ваша фраза је: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"Изаберите језик за мнемоничку фразу",
- "confirmText":"Извези"
- }
- },
- "importPage":{
- "title":"Увези новчаник",
- "subtitle":"Од претходно добијених кључева, фајла, или мнемоничке фразе",
- "chooseMethod":"Изабери метод",
- "fromKeys":"Помоћу кључева",
- "fromFile":"Помоћу фајла",
- "fromMnemonic":"Помоћу мнемоничке фразе",
- "fromQr":"Помоћу QR кода"
- },
- "termsOfUsePage":{
- "title":"Правила коришћења",
- "subtitle":"Молимо пажљиво прочитајте"
- },
- "privacyPolicyPage":{
- "title":"Privacy Policy",
- "subtitle":"Молимо пажљиво прочитајте"
- },
- "importFromFilePage":{
- "title":"Увоз новчаника помоћу фајла",
- "subtitle":"Искористите преузети бекап фајл за увоз новчаника",
- "walletBlock":{
- "title":"Фајл новчаника",
- "label":"Изаберите фајл",
- "importButton":"Увези"
- }
- },
- "importFromMnemonicPage":{
- "title":"Увоз новчаника помоћу мнемоничке фразе",
- "subtitle":"Искористите постојећу фразу за увоз новчаника",
- "mnemonicBlock":{
- "title":"Мнемоминчка фраза",
- "mnemonic":{
- "label":"Мнемоничка фраза: 25 речи",
- "invalid":"Неисправна мнемоничка фраза",
- "language":"Језик"
- },
- "importButton":"Увези"
- }
- },
- "importFromKeysPage":{
- "title":"Увоз новчаника помоћу кључева",
- "subtitle":"Искористите кључеве за увоз новчаника",
- "parametersBLock":{
- "viewOnlyWallet":{
- "label":"Да ли желите новчаник само за преглед (view-only) ?"
- }
- },
- "keysBlock":{
- "titleNotViewOnly":"Кључеви новчаника",
- "titleViewOnly":"View-only новчаник",
- "privateSpend":{
- "label":"Приватни потрошачки кључ"
- },
- "privateView":{
- "label":"Приватни кључ за преглед",
- "optional":"(произвољна опција)"
- },
- "publicKey":{
- "label":"Јавни кључ"
- },
- "importButton":"Увези"
- }
- }
+ "menu": {
+ "home": "Почетна",
+ "account": "Налог",
+ "send": "Пошаљи",
+ "receive": "Прими",
+ "export": "Извоз",
+ "donate": "Донирај",
+ "elections": "Избори",
+ "contacts": "Контакти",
+ "settings": "Подешавања",
+ "disconnect": "Прекини везу",
+ "network": "Статистика Мреже",
+ "mining": "Рударење"
+ },
+ "global": {
+ "loading": "Учитавам",
+ "disableSecurity": "Искључи безбедност, разумем и прихватам ризик",
+ "passwordInvalidRequirements": "Лозинка мора да се састоји из најмање 8 карактера, једног великог слова, једног малог слова, једног броја и једног симбола",
+ "passwordConfirmationNotMatching": "Лозинке се не подударају",
+ "download": "Преузми",
+ "newVersionModal": {
+ "title": "Нова верзија је доступна",
+ "content": "Да ли желите да освежите страницу и учитате нову верзију ?",
+ "confirmText": "Да",
+ "cancelText": "Касније"
+ },
+ "openWalletModal": {
+ "title": "'Лозинка новчаника'",
+ "confirmText": "Отвори",
+ "cancelText": "Откажи"
+ },
+ "invalidPasswordModal": {
+ "title": "Упс...",
+ "content": "Неисправна лозинка",
+ "confirmText": "У реду"
+ },
+ "invalidMnemonicModal": {
+ "title": "Упс...",
+ "content": "Мнемоничка фраза није исправна",
+ "confirmText": "У реду"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "Лозинка није довољно сложена",
+ "confirmText": "У реду"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Упс...",
+ "content": "Потребна дозвола за приступ камери у циљу скенирања QR кода",
+ "confirmText": "У реду"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Правила коришћења",
+ "privacyPolicy": "Правила о приватности",
+ "support": "Подршка",
+ "donate": "Донирај",
+ "network": "Статистика Мреже",
+ "miningPool": "Пул за рударење",
+ "github": "Гитхаб"
+ },
+ "homepage": {
+ "mainTitle": "Безбедан Qwertycoin Новчаник",
+ "tagLine": "Најједноставнији начин да користите Qwertycoin, било када и било где!",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Учитај новчаник",
+ "importWallet": "Увези новчаник",
+ "create": "Направи",
+ "createWallet": "Направи новчаник"
+ }
+ },
+ "accountPage": {
+ "title": "Налог",
+ "subtitle": "Преглед налога и трансакција",
+ "synchronizingBlock": {
+ "text": "Синхронизација у току"
+ },
+ "balanceBlock": {
+ "title": "Ваша средства",
+ "unlocked": "Откључано"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Историја ваших трансакција",
+ "pendingTxStatus": "На чекању",
+ "emptyWallet": "Тренутно немате средстава у новчанику",
+ "waitSync": "Сачекајте да се новчаник освежи",
+ "beReallyPatient": "Овај поступак може да потраје...",
+ "getCoinAddress": "Адреса за пријем новчића"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Tx hash",
+ "feesOnTx": "Fees on the tx",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Промените лозинку",
+ "oldPassword": {
+ "label": "Стара лозинка",
+ "invalid": "Погрешна лозинка"
+ },
+ "newPassword": {
+ "label": "Изаберите нову лозинку",
+ "invalid": " Лозинка мора да се састоји из најмање 8 карактера, једног великог слова, једног малог слова, једног броја и једног симбола"
+ },
+ "newPasswordConfirm": {
+ "label": "Потврдите нову лозинку"
+ },
+ "confirm": "Промени лозинку",
+ "modalSuccess": {
+ "title": "Лозинка промењена !",
+ "confirmText": "У реду"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Контакти"
+ },
+ "electionsPage": {
+ "title": "Избори"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Генерисање новчаника у току...",
+ "subtitle": "Процес је при крају",
+ "waitingMessage": "Генеришем новчаник..."
+ },
+ "finalizationStep": {
+ "title": "Просто као пасуљ. Ваш налог је спреман!",
+ "subtitle": "Спремите се да користите Qwertycoin било где и било кад.",
+ "passwordSelectionBlock": {
+ "label": "Заштитите ваше податке"
+ },
+ "passwordConfirmBlock": {
+ "label": "Потврдите лозинку"
+ },
+ "validPassword": "Користите ову лозинку",
+ "backupBlock": {
+ "title": "И преузмите шифровану копију ваших података за будућу употребу ",
+ "option1": "Опција 1: ",
+ "option2": "Опција 2: ",
+ "titlePdf": "Преузмите PDF фајл",
+ "titleManualWrite": "Запишите кључеве",
+ "privateKeys": "Приватни кључ",
+ "mnemonicPhrase": "Мнемоничка фраза",
+ "separatorManualMethodsSolution": " или ",
+ "confirmManuallyWritten": "Записао сам",
+ "warningMessage": "**Чувајте ове податке!** У случају губитка, подаци не могу бити враћени. **Не делите податке ни са ким!** Ваша средства могу бити украдена уколико користите ове податке на другим сајтовима сумњивог садржаја. **Направите резерву (backup)!** Обезбедите податке као да вреде милион долара. ",
+ "finishButton": "Разумем. Настави"
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Ризици коришћења Qwertycoin новчаника",
+ "content": "Qwertycoin новчаник је интерфејс на мрежи. Осмишљен је да помогне при употреби Qwertycoin валуте без потребе за покретањем софтвера на личном рачунару. Предлажемо да се односите према Qwertycoin новчанику као према свом личном који користите свакодневно."
+ }
+ },
+ "donatePage": {
+ "title": "Донирај",
+ "subtitle": "Помозите при финансирању развоја и плаћања рачуна.",
+ "webwalletBlock": {
+ "title": "Веб новчаник",
+ "content": "Овај сервис је дело контрибутора под именом Gnock. Уколико желите да помогнете при даљем развоју ове апликације, молимо вас да размислите о донацији.
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin новчаник за донације",
+ "content": "Уколико сте заинтересовани да помогнете, можете то учинити слањем средстава на следећу адресу"
+ }
+ },
+ "supportPage": {
+ "title": "Подршка",
+ "subtitle": "Уколико вам је потребна подршка, ту смо да помогнемо!",
+ "getInTouchBlock": {
+ "title": "Контактирајте нас!",
+ "content": "Ако имате идеје или предлоге који би могли да помогну при даљем развоју овог сервиса, контактирајте нас!",
+ "discord": "Qwertycoin Дискорд Сервер"
+ }
+ },
+ "networkPage": {
+ "title": "Статистика мреже",
+ "subtitle": "Увид у Qwertycoin мрежу",
+ "statsBlock": {
+ "connectNode": "Цоннецтед Мастерноде",
+ "hashrate": "Хешрејт мреже",
+ "height": "Блокчејн висина",
+ "difficulty": "Тешкоћа мреже",
+ "lastTimeBlock": "Последњи пронађени блок",
+ "lastReward": "Последња блок награда"
+ }
+ },
+ "sendPage": {
+ "title": "Шаљи МСР",
+ "sendBlock": {
+ "address": {
+ "label": "Пошаљи на адресу",
+ "placeholder": "Напишите адресу на коју желите да пошаљете средства",
+ "invalid": "Адреса неисправна",
+ "fundsTo": "Средства ће бити послата на",
+ "receiver": "Прималац",
+ "description": "Опис"
+ },
+ "amount": {
+ "label": "Количина за слање",
+ "invalid": "Количина неисправна"
+ },
+ "paymentId": {
+ "label": "ID уплате(произвољан корак)",
+ "invalid": "ID уплате неисправан. Дужина мора бити између 16 и 64 карактера"
+ },
+ "sendButton": "Пошаљи",
+ "cancelButton": "Откажи"
+ },
+ "qrCodeScanning": {
+ "explication": "Скенирање QR кода"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Упс...",
+ "content": "Немате довољно средстава за овај трансфер",
+ "confirmText": "У реду"
+ },
+ "thankYouDonationModal": {
+ "title": "Хвала вам на донацији!",
+ "content": "Ваша помоћ је добродошла. Ваша донација ће помоћи при даљем развитку Qwertycoin-ја",
+ "confirmText": "Затвори"
+ },
+ "transferSentModal": {
+ "title": "Трансфер успешан!",
+ "confirmText": "Затвори"
+ },
+ "transferExceptionModal": {
+ "title": "Упс...",
+ "content": "Дошло је до грешке. Молимо пријавите грешку: {details}",
+ "confirmText": "Затвори"
+ },
+ "invalidAmountModal": {
+ "title": "Упс...",
+ "content": "Количина погрешна",
+ "confirmText": "Затвори"
+ },
+ "creatingTransferModal": {
+ "title": "Припремам трансфер...",
+ "content": "Молимо сачекајте..."
+ },
+ "finalizingTransferModal": {
+ "title": "Финализирам трансфер...",
+ "content": "Молимо сачекајте..."
+ },
+ "confirmTransactionModal": {
+ "title": "Потврди трансфер?",
+ "content": "'Количина: {amount} Провизија: {fees} Укупно: {total}",
+ "confirmText": "Потврди",
+ "cancelText": "Откажи"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting Nfc",
+ "content": "Bring closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Прими МСР",
+ "receiveBlock": {
+ "address": {
+ "title": "Адреса за примање новчића",
+ "label": "Приложите ову адресу уколико желите да примите новчиће"
+ },
+ "qrCode": {
+ "title": "Или помоћу QR кода",
+ "labelAmount": "Количина (произвољна опција)",
+ "labelRecipient": "Име примаоца(произвољна опција)",
+ "labelDescription": "Опис трансакције(произвољна опција)",
+ "updateButton": "Ажурирај"
+ }
+ },
+ "qrBlock": {
+ "title": "Ваш QR код"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting Nfc",
+ "titleSuccess": "Nfc Tag written",
+ "content": "Bring closer the NFC tag to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Рударите директно из претраживача",
+ "subtitle": "Подржите мрежу и повећајте стабилност исте, бићете награђени МСР новчићима",
+ "parameterBlock": {
+ "title": "Параметри",
+ "labelDestinationAddress": "Новчаник за рударење",
+ "labelThreads": "Број језгара(више = већи хешрејт)",
+ "start": "Старт",
+ "stop": "Стоп"
+ },
+ "statisticsBlocks": {
+ "title": "Статистика",
+ "validShares": "Валидних шерова",
+ "hashrate": "Хешрејт",
+ "maxHashrate": "Maксимални Хешрејт",
+ "dedicatedHardware": "Са одговарајућим софтвером за рударење можете очекивати 2 до 3 пута већи хешрејт. Поред тога, софтвер за рударење вам омогућава да користите и графичку картицу.",
+ "miningHandledBy": "Рударење је омогућено и контролисано од стране pool.qwertycoin.org пула"
+ }
+ },
+ "settingsPage": {
+ "title": "Подешавања",
+ "subtitle": "Промените подешавања овде",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Брзина ажурирања новчаника(утиче на потрошњу енергије)",
+ "fastest": "Најбрже",
+ "fast": "Брзо",
+ "medium": "Средње",
+ "slow": "Споро"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "nacionalna валута"
+ },
+ "readMinerTx": {
+ "label": "Трансакције рудара(само за соло рударење)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Промени лозинку новчаника",
+ "deleteWalletButton": "Обриши мој новчаник(локална копија)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Блок висина при креацији новчаника"
+ },
+ "currentScanningHeight": {
+ "label": "Тренутна висина скенирања"
+ },
+ "updateButton": "Ажурирај"
+ },
+ "deleteWalletModal": {
+ "title": "Обриши мој новчаник(локална копија)",
+ "content": "Да ли сте СИГУРНИ да желите брисање новчаника ?",
+ "confirmText": "Да, сигуран сам",
+ "cancelText": "Откажи"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Параметри",
+ "password": {
+ "label": "Лозинка за заштиту новчаника"
+ },
+ "passwordConfirm": {
+ "label": "Потврдите лозинку",
+ "invalid": "Лозинка се не подудара са првим уносом"
+ },
+ "importHeight": {
+ "label": "Блок висина за увоз"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Увоз новчаника преко QR кода",
+ "subtitle": "Увези новчаник из офлајн датотеке",
+ "qrCodeBlock": {
+ "title": "QR код",
+ "startScanButton": "Покрени скенирање",
+ "importButton": "Увези"
+ },
+ "qrScanningBlock": {
+ "title": "Приложите QR код"
+ }
+ },
+ "exportPage": {
+ "title": "Сачувајте ваше податке",
+ "publicAddressBlock": {
+ "title": "Ваша адреса"
+ },
+ "pdfBlock": {
+ "title": "Pdf чување",
+ "downloadButton": "Преузми"
+ },
+ "warningBlock": {
+ "title": "Упозорење",
+ "content": "Уколико се одлучите да сачувате податке вашег новчаника, МОЛИМО ВАС немојте их чувати на видном и лако доступном месту. Овај фајл је алтернативно решење које садржи комплетан сет шифрованих параметара потребних за будућу ресторацију и синхронизацију."
+ },
+ "exportBlock": {
+ "title": "Извези СИРОВЕ податке",
+ "privateKeysButton": "Моји приватни кључеви",
+ "mnemonicKeysButton": "Моја мнемоничка фраза",
+ "fileButton": "Сачувај као фајл"
+ },
+ "walletKeysModal": {
+ "title": "Приватни кључеви",
+ "confirmText": "У реду",
+ "content": "Молимо бас да чувате ове податке на безбедном месту. Поседовање ових кључева значи поседовање свих средстава везаних за поменуте кључеве. ! Потрошачки кључ: {privSpendKey} Приватни кључ: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Приватни кључеви",
+ "confirmText": "У реду",
+ "content": "Молимо вас да пажљиво чувате мнемоничку фразу. Поседовање исте вам омогућава приступ средствима везаним за овај новчаник ! Ваша фраза је: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "Изаберите језик за мнемоничку фразу",
+ "confirmText": "Извези"
+ }
+ },
+ "importPage": {
+ "title": "Увези новчаник",
+ "subtitle": "Од претходно добијених кључева, фајла, или мнемоничке фразе",
+ "chooseMethod": "Изабери метод",
+ "fromKeys": "Помоћу кључева",
+ "fromFile": "Помоћу фајла",
+ "fromMnemonic": "Помоћу мнемоничке фразе",
+ "fromQr": "Помоћу QR кода"
+ },
+ "termsOfUsePage": {
+ "title": "Правила коришћења",
+ "subtitle": "Молимо пажљиво прочитајте"
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Молимо пажљиво прочитајте"
+ },
+ "importFromFilePage": {
+ "title": "Увоз новчаника помоћу фајла",
+ "subtitle": "Искористите преузети бекап фајл за увоз новчаника",
+ "walletBlock": {
+ "title": "Фајл новчаника",
+ "label": "Изаберите фајл",
+ "importButton": "Увези"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Увоз новчаника помоћу мнемоничке фразе",
+ "subtitle": "Искористите постојећу фразу за увоз новчаника",
+ "mnemonicBlock": {
+ "title": "Мнемоминчка фраза",
+ "mnemonic": {
+ "label": "Мнемоничка фраза: 25 речи",
+ "invalid": "Неисправна мнемоничка фраза",
+ "language": "Језик"
+ },
+ "importButton": "Увези"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Увоз новчаника помоћу кључева",
+ "subtitle": "Искористите кључеве за увоз новчаника",
+ "parametersBLock": {
+ "viewOnlyWallet": {
+ "label": "Да ли желите новчаник само за преглед (view-only) ?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Кључеви новчаника",
+ "titleViewOnly": "View-only новчаник",
+ "privateSpend": {
+ "label": "Приватни потрошачки кључ"
+ },
+ "privateView": {
+ "label": "Приватни кључ за преглед",
+ "optional": "(произвољна опција)"
+ },
+ "publicKey": {
+ "label": "Јавни кључ"
+ },
+ "importButton": "Увези"
+ }
+ }
},
- "number":{
- },
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": false
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": false
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/translations/tr.json b/src/translations/tr.json
new file mode 100644
index 00000000..1626dfe2
--- /dev/null
+++ b/src/translations/tr.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin Cüzdanı | Basit, kesintisiz, güvenli. Geleceğe Hoşgeldiniz.",
+ "description": "Qwertycoin para birimi için resmi çevrimiçi cüzdan - en iyi güvenlik için tarayıcınızda tamamen kullanılır"
+ },
+ "messages": {
+ "menu": {
+ "home": "Ev",
+ "account": "hesap",
+ "send": "göndermek",
+ "receive": "Teslim almak",
+ "export": "ihracat",
+ "donate": "bağışlamak",
+ "elections": "Seçimler",
+ "contacts": "İletişim",
+ "settings": "Ayarlar",
+ "disconnect": "Çıkış Yap",
+ "network": "Ağ İstatistikleri",
+ "mining": "madencilik"
+ },
+ "global": {
+ "loading": "Loading",
+ "disableSecurity": "Disable this security, I understand the risk",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Download",
+ "newVersionModal": {
+ "title": "A new version is available",
+ "content": "Do you want to reload to load the new version?",
+ "confirmText": "Yes",
+ "cancelText": "Back"
+ },
+ "openWalletModal": {
+ "title": "Wallet Password",
+ "confirmText": "Open",
+ "cancelText": "Cancel"
+ },
+ "invalidPasswordModal": {
+ "title": "Oops...",
+ "content": "Your password seems invalid",
+ "confirmText": "OK"
+ },
+ "invalidMnemonicModal": {
+ "title": "Oops...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "OK"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "OK"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Oops...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "OK"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Terms of Use",
+ "privacyPolicy": "Privacy Policy",
+ "support": "Support",
+ "donate": "Donate",
+ "network": "Network Stats",
+ "miningPool": "Mining Pool",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Wallet",
+ "tagLine": "anywhere. anytime. anyplace. any device.",
+ "tagLineTwo": "The simplest way to use Qwertycoin",
+ "actions": {
+ "loadWallet": "Load my wallet",
+ "importWallet": "Import a wallet",
+ "create": "Create",
+ "createWallet": "Create a wallet"
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "OK"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "İletişim"
+ },
+ "electionsPage": {
+ "title": "Seçimler"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Cancel"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Oops...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "OK"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "OK"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "OK"
+ },
+ "transferExceptionModal": {
+ "title": "Oops...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "OK"
+ },
+ "invalidAmountModal": {
+ "title": "Oops...",
+ "content": "Invalid amount",
+ "confirmText": "OK"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Cancel"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting NFC",
+ "content": "Bring this device closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting NFC",
+ "titleSuccess": "NFC Tag written",
+ "content": "Bring the NFC tag closer to this device to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "National Currency"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Cancel"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "OK",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "OK",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/uk.json b/src/translations/uk.json
index 7bd5b816..0e11b614 100644
--- a/src/translations/uk.json
+++ b/src/translations/uk.json
@@ -1,492 +1,536 @@
{
- "website":{
- "title":"Веб-гаманець Карбо",
- "description":"Офіційний онлайн гаманець криптовалюти Карбованець - анонімний, надійний, працює повністю у вашому браузері для найвищої безпеки"
+ "website": {
+ "title": "Веб-гаманець Qwertycoin",
+ "description": "Офіційний онлайн гаманець криптовалюти Qwertycoin - анонімний, надійний, працює повністю у вашому браузері для найвищої безпеки"
},
"messages": {
- "menu": {
- "home": "Огляд",
- "account": "Огляд",
- "send": "Надіслати",
- "receive": "Отримати",
- "export": "Експорт",
- "donate": "Пожертвувати",
- "settings": "Налаштування",
- "disconnect": "Відключитися",
- "network": "Статистика мережі",
- "mining": "Майнінг"
- },
- "global": {
- "loading": "Триває завантаження",
- "disableSecurity":"Відключити цю пересторогу, я розумію ризик",
- "passwordInvalidRequirements":"Пароль повинен складатися принаймні з 8 символів - 1 великої літери, 1 маленької, одного числа, одного спецсимвола",
- "passwordConfirmationNotMatching":"Підтвердження пароля не збігається з першим",
- "download":"Завантажити",
- "newVersionModal":{
- "title":"Є нова версія",
- "content":"Хочете перезавантажити щоб оновити версію?",
- "confirmText":"Так",
- "cancelText":"Назад"
- },
- "openWalletModal":{
- "title":"Пароль гаманця",
- "confirmText":"Відкрити",
- "cancelText":"Скасувати"
- },
- "invalidPasswordModal":{
- "title":"Ой...",
- "content":"Здається пароль невірний",
- "confirmText":"Гаразд"
- },
- "invalidMnemonicModal":{
- "title":"Ой...",
- "content":"Фраза для відновлення невірна",
- "confirmText":"Гаразд"
- },
- "passwordNotComplexEnoughModal":{
- "title":"Пароль недостатньо складний",
- "confirmText":"Гаразд"
- },
- "permissionRequiredForCameraModal":{
- "title":"Ой...",
- "content":"Потрібен дозвіл на доступ до камери для сканування QR коду",
- "confirmText":"Гаразд"
- }
- },
- "bottom": {
- "termsOfUse": "Умови використання",
- "privacyPolicy": "Політика конфіденційності",
- "support": "Допомога",
- "donate": "Пожертвувати",
- "network": "Мережа",
- "miningPool": "Майнінг",
- "github": "GitHub"
- },
- "homepage": {
- "mainTitle": "Безпечний Гаманець Карбованця",
- "tagLine": "Найпростіший спосіб використання карбованців – в будь-який час, в будь-якому місці",
- "actions": {
- "loadWallet": "Завантажити мій гаманець",
- "importWallet": "Імпортувати гаманець",
- "create": "Створити",
- "createWallet": "Створити гаманець"
- },
- "notes": {
- "secure": {
- "title": "Безпечний",
- "description": "Без серверів, повністю зашифрований!"
- },
- "fast": {
- "title": "Швидкий",
- "description": "Доступний коли треба!"
- },
- "technology": {
- "title": "Локальний",
- "description": "Ключі в браузері"
- },
- "openSource": {
- "title": "Open-source",
- "description": "Не довіряй - перевіряй!"
- }
- }
- },
- "accountPage": {
- "title": "Аккаунт",
- "subtitle": "Огляд вашого профілю та історії транзакцій",
- "synchronizingBlock": {
- "text": "Синхронізація..."
- },
- "balanceBlock": {
- "title": "Ваш баланс",
- "unlocked": "Доступно"
- },
- "historyBlock": {
- "title": "Історія транзакцій",
- "pendingTxStatus": "Очікується",
- "emptyWallet": "У цьому гаманці поки немає коштів.",
- "waitSync": "Будь ласка, зачекайте гаманець оновлює дані",
- "beReallyPatient": "Початкова установка може зайняти деякий час...",
- "getCoinAddress": "Отримати KRB"
- },
- "txDetails":{
- "title":"Деталі транзакції",
- "txHash":"Хеш",
- "feesOnTx":"Комісія",
- "blockHeight":"Висота блоку",
- "paymentId":"Ідентифікатор платежу",
- "txPrivKey":"Секретний ключ транзакції"
- }
- },
- "changeWalletPasswordPage":{
- "title":"Змінити ваш пароль",
- "oldPassword":{
- "label":"Старий пароль",
- "invalid":"Пароль недійсний"
- },
- "newPassword":{
- "label":"Виберіть новий пароль для захисту вашого гаманця"
- },
- "newPasswordConfirm":{
- "label":"Підтвердіть новий пароль"
- },
- "confirm":"Змінити пароль",
- "modalSuccess":{
- "title":"Пароль змінений!",
- "confirmText":"Гаразд"
- }
- },
- "createWalletPage":{
- "generatingStep":{
- "title":"Створюється гаманець...",
- "subtitle":"Майже готово",
- "waitingMessage":"Генерується гаманець..."
- },
- "finalizationStep":{
- "title":"Все. Ваш гаманець готовий!",
- "subtitle":"Приготуйтеся використовувати Карбо як ніколи до цього",
- "passwordSelectionBlock":{
- "label":"Захистіть ваш гаманець"
- },
- "passwordConfirmBlock":{
- "label":"Підтвердіть пароль"
- },
- "validPassword":"Використовувати цей пароль",
- "backupBlock":{
- "title":"Збережіть ваші приватні дані щоб мати можливість відновлення.",
- "option1":"Опція 1: ",
- "option2":"Опція 2: ",
- "titlePdf":"Завантажити PDF",
- "titleManualWrite":"Записати ключі",
- "privateKeys":"Приватний ключ",
- "mnemonicPhrase":"Мнемонічна фраза",
- "separatorManualMethodsSolution":" або ",
- "confirmManuallyWritten":"Я записав собі мнемонічну фразу",
- "warningMessage":"**Hе втратьте!** Вона не може бути відновлена якщо ви її втратите. **Нікому не передавайте!** Ваші кошти можуть бути вкрадені якщо скористаєтеся цим файлом або фразою на шкідливому / фішинговому сайті. **Зробіть резервну копію!** Бережіть як мільйон доларів, якого воно може одного прекрасного дня коштувати. ",
- "finishButton":"Я зрозумів. Продовжити."
- }
- },
- "disclaimerBlock":{
- "title":"Ризики використання KarboWallet",
- "content":"KarboWallet це веб-інтерфейс. Він допомагає вам використовувати Карбо без необхідності тримати повний вузол мережі Карбо. Ми рекомендуємо ставитися до KarboWallet з усією серйозністю, як до вашого гаманця."
- }
- },
- "donatePage":{
- "title":"Пожертвувати",
- "subtitle":"Допоможіть профінансувати розробку і оплату рахунків",
- "webwalletBlock":{
- "title":"Допомога Веб-гаманцю",
- "content":"Якщо ви хочете підтримати розробку, допомогти з оплатою хостингу, якщо вам подобається аплікація, будь ласка зробіть пожертву:
"
- },
- "devFundBlock":{
- "title":"Офіційний фонд Карбо",
- "content":"Щоб підтримати Карбованець, ви можете зробити пожертвування на ці адреси"
- }
- },
- "supportPage":{
- "title":"Підтримка",
- "subtitle":"Ми тут щоб допомогти!",
- "getInTouchBlock":{
- "title":"Зв'яжіться з нами!",
- "content":"Є ідеї або побажання щодо поліпшення гаманця? Напишіть нам!",
- "discord":"Канал Karbo в Discord"
- }
- },
- "networkPage":{
- "title":"Статистика мережі",
- "subtitle":"Огляд мережі Карбо",
- "statsBlock":{
- "hashrate":"Хешрейт",
- "height":"Висота блокчейну",
- "difficulty":"Складність",
- "lastTimeBlock":"Час останнього блоку",
- "lastReward":"Нагорода за останній блок"
- }
- },
- "sendPage":{
- "title":"Надіслати KRB",
- "sendBlock":{
- "address":{
- "label":"Адреса одержувача",
- "placeholder":"Вкажіть адресу, на яку хочете відправити кошти",
- "invalid":"Адреса одержувача неправильна",
- "fundsTo":"Кошти будуть відправлені на",
- "receiver":"Одержувач",
- "description":"Опис"
- },
- "amount":{
- "label":"Сума",
- "invalid":"Сума неправильна"
- },
- "paymentId":{
- "label":"Payment ID (не обов'язково)",
- "invalid":"Ідентифікатор платежу невірний. Довжина повинна бути 16 або 64 символи"
- },
- "sendButton":"Надіслати",
- "cancelButton":"Скасувати"
- },
- "qrCodeScanning":{
- "explication":"Показати QR код"
- },
- "notEnoughMoneyModal":{
- "title":"Ой...",
- "content":"У гаманці недостатньо коштів для здійснення цього перекладу",
- "confirmText":"Гаразд"
- },
- "thankYouDonationModal":{
- "title":"Спасибі за ваше пожертвування!",
- "content":"Ми цінуємо вашу підтримку. Це пожертвування допоможе зробити Карбо краще",
- "confirmText":"Гаразд"
- },
- "transferSentModal":{
- "title":"Переказ успішно відправлений!",
- "confirmText":"Гаразд"
- },
- "transferExceptionModal":{
- "title":"Ой...",
- "content":"Сталася помилка. Будь ласка повідомте про неї: {details}",
- "confirmText":"Гаразд"
- },
- "invalidAmountModal":{
- "title":"Ой...",
- "content":"Неправильна сума",
- "confirmText":"Гаразд"
- },
- "creatingTransferModal":{
- "title":"Створюється переказ...",
- "content":"Будь ласка зачекайте..."
- },
- "finalizingTransferModal":{
- "title":"Завершується переказ...",
- "content":"Будь ласка зачекайте..."
- },
- "confirmTransactionModal":{
- "title":"Підтвердити переказ?",
- "content":"Сума: {amount} Комісії: {fees} Всього: {total}",
- "confirmText":"Підтвердити",
- "cancelText":"Скасувати"
- },
- "waitingNfcModal":{
- "title":"Очікування Nfc",
- "content":"Піднесіть ближче до іншого пристрою"
- }
- },
- "receivePage":{
- "title":"Отримати KRB",
- "receiveBlock":{
- "address":{
- "title":"Ваша адреса для отримання:",
- "label":"Дайте цю адресу щоб отримати кошти"
- },
- "qrCode":{
- "title":"Або персоналізуйте QR код:",
- "labelAmount":"Сума (не обов'язково)",
- "labelRecipient":"Назва одержувача (не обов'язково)",
- "labelDescription":"Опис транзакції (не обов'язково)",
- "updateButton":"Оновити"
- }
- },
- "qrBlock":{
- "title":"Ваш персональний QR код"
- },
- "waitingNfcToWriteModal":{
- "title":"Очікування Nfc",
- "titleSuccess":"Nfc тег записано",
- "content":"Піднесіть NFC тег ближче для запису"
- },
- "nfcErrorModal":{
- "titleInsufficientCapacity":"Місткість тега недостатня"
- }
- },
- "miningPage":{
- "title":"Інформація про майнінг",
- "subtitle":"Підтримайте мережу майнінгом і отримайте в нагороду KRB",
- "parameterBlock":{
- "title":"Параметри",
- "labelDestinationAddress":"Гаманець на який майнити",
- "labelThreads":"Кількість потоків (більше = вище швидкість)",
- "start":"Старт",
- "stop":"Стоп"
- },
- "statisticsBlocks":{
- "title":"Статистика",
- "validShares":"Валідні частки",
- "hashrate":"Хешрейт",
- "maxHashrate":"Макс. Хешрейт",
- "dedicatedHardware":"Майнінг допомагає в децентралізації мережі і дозволяє вам заробити карбованці.",
- "miningHandledBy":"Майнінг проходить на пулі pool.karbowanec.com"
- }
- },
- "settingsPage":{
- "title":"Налаштування",
- "subtitle":"Тут ви можете змінити параметри",
- "versionBlock":{
- "versionNumber":"Номер версії: ",
- "versionCode":"Код версії: "
- },
- "settingsBlock":{
- "speed":{
- "label":"Швидкість оновлення гаманця (споживатиме більше ресурсів)",
- "fastest":"Найшвидша",
- "fast":"Швидка",
- "medium":"Середня",
- "slow":"Повільна"
- },
- "language":{
- "label":"Мова"
- },
- "readMinerTx":{
- "label":"Зчитувати транзакції майнінгу (тільки для соло майнінгу)"
- }
- },
- "changePasswordButton":"Змінити пароль мого гаманця",
- "deleteWalletButton":"Видалити мій гаманець (локальну копію)",
- "walletSettings":{
- "creationHeight":{
- "label":"Висота створення гаманця"
- },
- "currentScanningHeight": {
- "label": "Поточна висота сканування"
- },
- "updateButton":"Оновити"
- },
- "deleteWalletModal":{
- "title":"Видалити мій гаманець (локальну копію)",
- "content":"Ви ДІЙСНО впевнені що хочете видалити свій гаманець?",
- "confirmText":"Так, я знаю що роблю",
- "cancelText":"Скасувати"
- }
- },
- "importBasePage":{
- "parametersBlock":{
- "title":"Параметри",
- "password":{
- "label":"Пароль для захисту вашого гаманця"
- },
- "passwordConfirm":{
- "label":"Підтвердіть пароль",
- "invalid":"Пароль не збігається з першим введенням паролем"
- },
- "importHeight":{
- "label":"З якої висоти почати імпорт:"
- }
- }
- },
- "importFromQrPage":{
- "title":"Імпортувати гаманець з QR коду",
- "subtitle":"Імпортувати гаманець з офлайнової резервної копії",
- "qrCodeBlock":{
- "title":"QR код",
- "startScanButton":"Почати сканування",
- "importButton":"Імпортувати"
- },
- "qrScanningBlock":{
- "title":"Покажіть QR код"
- }
- },
- "exportPage":{
- "title":"Зробити резервну копію ваших даних",
- "publicAddressBlock":{
- "title":"Ваша публічна адреса"
- },
- "pdfBlock":{
- "title":"Резервна копія PDF",
- "downloadButton":"Завантажити"
- },
- "warningBlock":{
- "title":"Увага",
- "content":"Якщо ви вирішите зберегти приватні ключі або мнемонічну фразу, гаманець НЕ ЗБЕРЕЖЕ їх в текстовому вигляді для вашої безпеки. Файл є альтернативним рішенням де ваші ключі зашифровані і містить резервну копію всіх ваших транзакцій для прискорення синхронізації при відновленні."
- },
- "exportBlock":{
- "title":"Експортувати сирі дані",
- "privateKeysButton":"Отримати мої приватні ключі",
- "mnemonicKeysButton":"Отримати мою мнемонічну фразу",
- "fileButton":"Експортувати у файл"
- },
- "walletKeysModal":{
- "title":"Приватні ключі",
- "confirmText":"Гаразд",
- "content":"Будь ласка поставтеся серйозно до збереження цих ключів. Той хто їх має, володіє коштами на гаманці! Ключ витрачання: {privSpendKey} Ключ стеження: {privViewKey}"
- },
- "mnemonicKeyModal":{
- "title":"Мнемонічна фраза",
- "confirmText":"Гаразд",
- "content":"Будь ласка поставтеся серйозно до збереження цієї мнемонічною фрази. Той хто її має, володіє коштами на гаманці ! Фраза: {mnemonic}"
- },
- "mnemonicLangSelectionModal":{
- "title":"Виберіть мову мнемонічної фрази",
- "confirmText":"Експортувати"
- }
- },
- "importPage":{
- "title":"Створити гаманець",
- "subtitle":"З раніше створених ключів, файлу або мнемонічною фрази",
- "chooseMethod":"Виберіть метод імпорту:",
- "fromKeys":"З ключів",
- "fromFile":"З файлу",
- "fromMnemonic":"З мнемонічної фрази",
- "fromQr":"З QR коду"
- },
- "termsOfUsePage":{
- "title":"Умови використання",
- "subtitle":"Уважно їх прочитайте."
- },
- "importFromFilePage":{
- "title":"Імпорт гаманця з резервного фала",
- "subtitle":"Використати резервний файл для створення гаманця",
- "walletBlock":{
- "title":"Файл гаманця",
- "label":"Виберіть файл",
- "importButton":"Імпортувати"
- }
- },
- "importFromMnemonicPage":{
- "title":"Імпорт гаманця з мнемонічної фрази",
- "subtitle":"Використати мнемонічну фразу для створення гаманця",
- "mnemonicBlock":{
- "title":"Мнемонічна фраза",
- "mnemonic":{
- "label":"Мнемонічна фраза: 25 слів",
- "invalid":"Мнемонічна фраза неправильна",
- "language":"Мова"
- },
- "importButton":"Імпортувати"
- }
- },
- "importFromKeysPage":{
- "title":"Імпорт гаманця з ключів",
- "subtitle":"Використати приватні ключі для створення гаманця",
- "parametersBlock":{
- "viewOnlyWallet": {
- "label": "Хочете створити гаманець стеження?",
- "info": "Зверніть увагу, гаманець стеження призначений тільки для перегляду вхідних платежів, так що баланс може відображатися неправильно!"
+ "menu": {
+ "home": "Огляд",
+ "account": "Огляд",
+ "send": "Надіслати",
+ "receive": "Отримати",
+ "export": "Експорт",
+ "donate": "Пожертвувати",
+ "elections": "Вибори",
+ "contacts": "Контакти",
+ "settings": "Налаштування",
+ "disconnect": "Відключитися",
+ "network": "Статистика мережі",
+ "mining": "Майнінг"
+ },
+ "global": {
+ "loading": "Триває завантаження",
+ "disableSecurity": "Відключити цю пересторогу, я розумію ризик",
+ "passwordInvalidRequirements": "Пароль повинен складатися принаймні з 8 символів - 1 великої літери, 1 маленької, одного числа, одного спецсимвола",
+ "passwordConfirmationNotMatching": "Підтвердження пароля не збігається з першим",
+ "download": "Завантажити",
+ "newVersionModal": {
+ "title": "Є нова версія",
+ "content": "Хочете перезавантажити щоб оновити версію?",
+ "confirmText": "Так",
+ "cancelText": "Назад"
+ },
+ "openWalletModal": {
+ "title": "Пароль гаманця",
+ "confirmText": "Відкрити",
+ "cancelText": "Скасувати"
+ },
+ "invalidPasswordModal": {
+ "title": "Ой...",
+ "content": "Здається пароль невірний",
+ "confirmText": "Гаразд"
+ },
+ "invalidMnemonicModal": {
+ "title": "Ой...",
+ "content": "Фраза для відновлення невірна",
+ "confirmText": "Гаразд"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "Пароль недостатньо складний",
+ "confirmText": "Гаразд"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Ой...",
+ "content": "Потрібен дозвіл на доступ до камери для сканування QR коду",
+ "confirmText": "Гаразд"
}
- },
- "keysBlock":{
- "titleNotViewOnly":"Ключі гаманця",
- "titleViewOnly":"Гаманець стеження",
- "privateSpend":{
- "label":"Приватний ключ витрачання"
- },
- "privateView":{
- "label":"Приватний ключ стеження",
- "optional":"(не обов'язково)"
- },
- "publicKey":{
- "label":"Публічний ключ"
- },
- "importButton":"Імпортувати"
- }
- }
- },
- "number":{
+ },
+ "bottom": {
+ "termsOfUse": "Умови використання",
+ "privacyPolicy": "Політика конфіденційності",
+ "support": "Допомога",
+ "donate": "Пожертвувати",
+ "network": "Мережа",
+ "miningPool": "Майнінг",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Безпечний Гаманець Qwertycoinванця",
+ "tagLine": "де завгодно. в будь-який час. будь яке місце. будь-який пристрій.",
+ "tagLineTwo": "Найпростіший спосіб використання Qwertycoin",
+ "actions": {
+ "loadWallet": "Завантажити мій гаманець",
+ "importWallet": "Імпортувати гаманець",
+ "create": "Створити",
+ "createWallet": "Створити гаманець"
+ }
+ },
+ "accountPage": {
+ "title": "Аккаунт",
+ "subtitle": "Огляд вашого профілю та історії транзакцій",
+ "synchronizingBlock": {
+ "text": "Синхронізація..."
+ },
+ "balanceBlock": {
+ "title": "Ваш баланс",
+ "unlocked": "Доступно"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Історія транзакцій",
+ "pendingTxStatus": "Очікується",
+ "emptyWallet": "У цьому гаманці поки немає коштів.",
+ "waitSync": "Будь ласка, зачекайте гаманець оновлює дані",
+ "beReallyPatient": "Початкова установка може зайняти деякий час...",
+ "getCoinAddress": "Отримати QWC"
+ },
+ "txDetails": {
+ "title": "Деталі транзакції",
+ "txHash": "Хеш",
+ "feesOnTx": "Комісія",
+ "blockHeight": "Висота блоку",
+ "paymentId": "Ідентифікатор платежу",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Секретний ключ транзакції"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Змінити ваш пароль",
+ "oldPassword": {
+ "label": "Старий пароль",
+ "invalid": "Пароль недійсний"
+ },
+ "newPassword": {
+ "label": "Виберіть новий пароль для захисту вашого гаманця"
+ },
+ "newPasswordConfirm": {
+ "label": "Підтвердіть новий пароль"
+ },
+ "confirm": "Змінити пароль",
+ "modalSuccess": {
+ "title": "Пароль змінений!",
+ "confirmText": "Гаразд"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Контакти"
+ },
+ "electionsPage": {
+ "title": "Вибори"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Створюється гаманець...",
+ "subtitle": "Майже готово",
+ "waitingMessage": "Генерується гаманець..."
+ },
+ "finalizationStep": {
+ "title": "Все. Ваш гаманець готовий!",
+ "subtitle": "Приготуйтеся використовувати Qwertycoin як ніколи до цього",
+ "passwordSelectionBlock": {
+ "label": "Захистіть ваш гаманець"
+ },
+ "passwordConfirmBlock": {
+ "label": "Підтвердіть пароль"
+ },
+ "validPassword": "Використовувати цей пароль",
+ "backupBlock": {
+ "title": "Збережіть ваші приватні дані щоб мати можливість відновлення.",
+ "option1": "Опція 1: ",
+ "option2": "Опція 2: ",
+ "titlePdf": "Завантажити PDF",
+ "titleManualWrite": "Записати ключі",
+ "privateKeys": "Приватний ключ",
+ "mnemonicPhrase": "Мнемонічна фраза",
+ "separatorManualMethodsSolution": " або ",
+ "confirmManuallyWritten": "Я записав собі мнемонічну фразу",
+ "warningMessage": "**Hе втратьте!** Вона не може бути відновлена якщо ви її втратите. **Нікому не передавайте!** Ваші кошти можуть бути вкрадені якщо скористаєтеся цим файлом або фразою на шкідливому / фішинговому сайті. **Зробіть резервну копію!** Бережіть як мільйон доларів, якого воно може одного прекрасного дня коштувати. ",
+ "finishButton": "Я зрозумів. Продовжити."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Ризики використання QwertycoinWallet",
+ "content": "QwertycoinWallet це веб-інтерфейс. Він допомагає вам використовувати Qwertycoin без необхідності тримати повний вузол мережі Qwertycoin. Ми рекомендуємо ставитися до QwertycoinWallet з усією серйозністю, як до вашого гаманця."
+ }
+ },
+ "donatePage": {
+ "title": "Пожертвувати",
+ "subtitle": "Допоможіть профінансувати розробку і оплату рахунків",
+ "webwalletBlock": {
+ "title": "Допомога Веб-гаманцю",
+ "content": "Якщо ви хочете підтримати розробку, допомогти з оплатою хостингу, якщо вам подобається аплікація, будь ласка зробіть пожертву:
"
+ },
+ "devFundBlock": {
+ "title": "Офіційний фонд Qwertycoin",
+ "content": "Щоб підтримати Qwertycoinванець, ви можете зробити пожертвування на ці адреси"
+ }
+ },
+ "supportPage": {
+ "title": "Підтримка",
+ "subtitle": "Ми тут щоб допомогти!",
+ "getInTouchBlock": {
+ "title": "Зв'яжіться з нами!",
+ "content": "Є ідеї або побажання щодо поліпшення гаманця? Напишіть нам!",
+ "discord": "Канал Qwertycoin в Discord"
+ }
+ },
+ "networkPage": {
+ "title": "Статистика мережі",
+ "subtitle": "Огляд мережі Qwertycoin",
+ "statsBlock": {
+ "connectNode": "Підключено Masternode",
+ "hashrate": "Хешрейт",
+ "height": "Висота блокчейну",
+ "difficulty": "Складність",
+ "lastTimeBlock": "Час останнього блоку",
+ "lastReward": "Нагорода за останній блок"
+ }
+ },
+ "sendPage": {
+ "title": "Надіслати QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Адреса одержувача",
+ "placeholder": "Вкажіть адресу, на яку хочете відправити кошти",
+ "invalid": "Адреса одержувача неправильна",
+ "fundsTo": "Кошти будуть відправлені на",
+ "receiver": "Одержувач",
+ "description": "Опис"
+ },
+ "amount": {
+ "label": "Сума",
+ "invalid": "Сума неправильна"
+ },
+ "paymentId": {
+ "label": "Payment ID (не обов'язково)",
+ "invalid": "Ідентифікатор платежу невірний. Довжина повинна бути 16 або 64 символи"
+ },
+ "sendButton": "Надіслати",
+ "cancelButton": "Скасувати"
+ },
+ "qrCodeScanning": {
+ "explication": "Показати QR код"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Ой...",
+ "content": "У гаманці недостатньо коштів для здійснення цього перекладу",
+ "confirmText": "Гаразд"
+ },
+ "thankYouDonationModal": {
+ "title": "Спасибі за ваше пожертвування!",
+ "content": "Ми цінуємо вашу підтримку. Це пожертвування допоможе зробити Qwertycoin краще",
+ "confirmText": "Гаразд"
+ },
+ "transferSentModal": {
+ "title": "Переказ успішно відправлений!",
+ "confirmText": "Гаразд"
+ },
+ "transferExceptionModal": {
+ "title": "Ой...",
+ "content": "Сталася помилка. Будь ласка повідомте про неї: {details}",
+ "confirmText": "Гаразд"
+ },
+ "invalidAmountModal": {
+ "title": "Ой...",
+ "content": "Неправильна сума",
+ "confirmText": "Гаразд"
+ },
+ "creatingTransferModal": {
+ "title": "Створюється переказ...",
+ "content": "Будь ласка зачекайте..."
+ },
+ "finalizingTransferModal": {
+ "title": "Завершується переказ...",
+ "content": "Будь ласка зачекайте..."
+ },
+ "confirmTransactionModal": {
+ "title": "Підтвердити переказ?",
+ "content": "Сума: {amount} Комісії: {fees} Всього: {total}",
+ "confirmText": "Підтвердити",
+ "cancelText": "Скасувати"
+ },
+ "waitingNfcModal": {
+ "title": "Очікування Nfc",
+ "content": "Піднесіть ближче до іншого пристрою"
+ }
+ },
+ "receivePage": {
+ "title": "Отримати QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Ваша адреса для отримання:",
+ "label": "Дайте цю адресу щоб отримати кошти"
+ },
+ "qrCode": {
+ "title": "Або персоналізуйте QR код:",
+ "labelAmount": "Сума (не обов'язково)",
+ "labelRecipient": "Назва одержувача (не обов'язково)",
+ "labelDescription": "Опис транзакції (не обов'язково)",
+ "updateButton": "Оновити"
+ }
+ },
+ "qrBlock": {
+ "title": "Ваш персональний QR код"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Очікування Nfc",
+ "titleSuccess": "Nfc тег записано",
+ "content": "Піднесіть NFC тег ближче для запису"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Місткість тега недостатня"
+ }
+ },
+ "miningPage": {
+ "title": "Інформація про майнінг",
+ "subtitle": "Підтримайте мережу майнінгом і отримайте в нагороду QWC",
+ "parameterBlock": {
+ "title": "Параметри",
+ "labelDestinationAddress": "Гаманець на який майнити",
+ "labelThreads": "Кількість потоків (більше = вище швидкість)",
+ "start": "Старт",
+ "stop": "Стоп"
+ },
+ "statisticsBlocks": {
+ "title": "Статистика",
+ "validShares": "Валідні частки",
+ "hashrate": "Хешрейт",
+ "maxHashrate": "Макс. Хешрейт",
+ "dedicatedHardware": "Майнінг допомагає в децентралізації мережі і дозволяє вам заробити Qwertycoinванці.",
+ "miningHandledBy": "Майнінг проходить на пулі https://pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Налаштування",
+ "subtitle": "Тут ви можете змінити параметри",
+ "versionBlock": {
+ "versionNumber": "Номер версії: ",
+ "versionCode": "Код версії: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Швидкість оновлення гаманця (споживатиме більше ресурсів)",
+ "fastest": "Найшвидша",
+ "fast": "Швидка",
+ "medium": "Середня",
+ "slow": "Повільна"
+ },
+ "language": {
+ "label": "Мова"
+ },
+ "currency": {
+ "label": "національна валюта"
+ },
+ "readMinerTx": {
+ "label": "Зчитувати транзакції майнінгу (тільки для соло майнінгу)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Змінити пароль мого гаманця",
+ "deleteWalletButton": "Видалити мій гаманець (локальну копію)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Висота створення гаманця"
+ },
+ "currentScanningHeight": {
+ "label": "Поточна висота сканування"
+ },
+ "updateButton": "Оновити"
+ },
+ "deleteWalletModal": {
+ "title": "Видалити мій гаманець (локальну копію)",
+ "content": "Ви ДІЙСНО впевнені що хочете видалити свій гаманець?",
+ "confirmText": "Так, я знаю що роблю",
+ "cancelText": "Скасувати"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Параметри",
+ "password": {
+ "label": "Пароль для захисту вашого гаманця"
+ },
+ "passwordConfirm": {
+ "label": "Підтвердіть пароль",
+ "invalid": "Пароль не збігається з першим введенням паролем"
+ },
+ "importHeight": {
+ "label": "З якої висоти почати імпорт:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Імпортувати гаманець з QR коду",
+ "subtitle": "Імпортувати гаманець з офлайнової резервної копії",
+ "qrCodeBlock": {
+ "title": "QR код",
+ "startScanButton": "Почати сканування",
+ "importButton": "Імпортувати"
+ },
+ "qrScanningBlock": {
+ "title": "Покажіть QR код"
+ }
+ },
+ "exportPage": {
+ "title": "Зробити резервну копію ваших даних",
+ "publicAddressBlock": {
+ "title": "Ваша публічна адреса"
+ },
+ "pdfBlock": {
+ "title": "Резервна копія PDF",
+ "downloadButton": "Завантажити"
+ },
+ "warningBlock": {
+ "title": "Увага",
+ "content": "Якщо ви вирішите зберегти приватні ключі або мнемонічну фразу, гаманець НЕ ЗБЕРЕЖЕ їх в текстовому вигляді для вашої безпеки. Файл є альтернативним рішенням де ваші ключі зашифровані і містить резервну копію всіх ваших транзакцій для прискорення синхронізації при відновленні."
+ },
+ "exportBlock": {
+ "title": "Експортувати сирі дані",
+ "privateKeysButton": "Отримати мої приватні ключі",
+ "mnemonicKeysButton": "Отримати мою мнемонічну фразу",
+ "fileButton": "Експортувати у файл"
+ },
+ "walletKeysModal": {
+ "title": "Приватні ключі",
+ "confirmText": "Гаразд",
+ "content": "Будь ласка поставтеся серйозно до збереження цих ключів. Той хто їх має, володіє коштами на гаманці! Ключ витрачання: {privSpendKey} Ключ стеження: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Мнемонічна фраза",
+ "confirmText": "Гаразд",
+ "content": "Будь ласка поставтеся серйозно до збереження цієї мнемонічною фрази. Той хто її має, володіє коштами на гаманці ! Фраза: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "Виберіть мову мнемонічної фрази",
+ "confirmText": "Експортувати"
+ }
+ },
+ "importPage": {
+ "title": "Створити гаманець",
+ "subtitle": "З раніше створених ключів, файлу або мнемонічною фрази",
+ "chooseMethod": "Виберіть метод імпорту:",
+ "fromKeys": "З ключів",
+ "fromFile": "З файлу",
+ "fromMnemonic": "З мнемонічної фрази",
+ "fromQr": "З QR коду"
+ },
+ "termsOfUsePage": {
+ "title": "Умови використання",
+ "subtitle": "Уважно їх прочитайте."
+ },
+ "importFromFilePage": {
+ "title": "Імпорт гаманця з резервного фала",
+ "subtitle": "Використати резервний файл для створення гаманця",
+ "walletBlock": {
+ "title": "Файл гаманця",
+ "label": "Виберіть файл",
+ "importButton": "Імпортувати"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Імпорт гаманця з мнемонічної фрази",
+ "subtitle": "Використати мнемонічну фразу для створення гаманця",
+ "mnemonicBlock": {
+ "title": "Мнемонічна фраза",
+ "mnemonic": {
+ "label": "Мнемонічна фраза: 25 слів",
+ "invalid": "Мнемонічна фраза неправильна",
+ "language": "Мова"
+ },
+ "importButton": "Імпортувати"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Імпорт гаманця з ключів",
+ "subtitle": "Використати приватні ключі для створення гаманця",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Хочете створити гаманець стеження?",
+ "info": "Зверніть увагу, гаманець стеження призначений тільки для перегляду вхідних платежів, так що баланс може відображатися неправильно!"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Ключі гаманця",
+ "titleViewOnly": "Гаманець стеження",
+ "privateSpend": {
+ "label": "Приватний ключ витрачання"
+ },
+ "privateView": {
+ "label": "Приватний ключ стеження",
+ "optional": "(не обов'язково)"
+ },
+ "publicKey": {
+ "label": "Публічний ключ"
+ },
+ "importButton": "Імпортувати"
+ }
+ }
},
- "date":{
- "short": {
- "year": "numeric", "month": "short", "day": "numeric"
- },
- "long": {
- "year": "numeric", "month": "short", "day": "numeric",
- "weekday": "short", "hour": "numeric", "minute": "numeric", "hour12": true
- }
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/translations/vn.json b/src/translations/vn.json
new file mode 100644
index 00000000..4e6872b6
--- /dev/null
+++ b/src/translations/vn.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Ví Qwertycoin | Đơn giản, liền mạch, an toàn. Chào mừng đến với tương lai.",
+ "description": "Ví trực tuyến chính thức cho tiền Qwertycoin - được xử lý hoàn toàn trong trình duyệt của bạn để bảo mật tối ưu"
+ },
+ "messages": {
+ "menu": {
+ "home": "Nhà",
+ "account": "Tài khoản",
+ "send": "Gửi",
+ "receive": "Nhận được",
+ "export": "Xuất khẩu",
+ "donate": "Quyên góp",
+ "elections": "Bầu cử",
+ "contacts": "Liên hệ",
+ "settings": "Cài đặt",
+ "disconnect": "Ngắt kết nối",
+ "network": "Thống kê mạng",
+ "mining": "Khai thác mỏ"
+ },
+ "global": {
+ "loading": "Tải",
+ "disableSecurity": "Vô hiệu hóa bảo mật này, tôi hiểu rủi ro",
+ "passwordInvalidRequirements": "The password needs at least 8 characters - 1 upper case letter, 1 lower case letter, one number, and one special character",
+ "passwordConfirmationNotMatching": "The password does not match the first password you wrote",
+ "download": "Tải về",
+ "newVersionModal": {
+ "title": "Một phiên bản mới có sẵn",
+ "content": "Bạn có muốn tải lại để tải phiên bản mới?",
+ "confirmText": "Vâng",
+ "cancelText": "Trở lại"
+ },
+ "openWalletModal": {
+ "title": "Mật khẩu ví",
+ "confirmText": "Mở",
+ "cancelText": "Hủy bỏ"
+ },
+ "invalidPasswordModal": {
+ "title": "Rất tiếc ...",
+ "content": "Mật khẩu của bạn có vẻ không hợp lệ",
+ "confirmText": "được"
+ },
+ "invalidMnemonicModal": {
+ "title": "Rất tiếc ...",
+ "content": "The mnemonic phrase is invalid",
+ "confirmText": "được"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "The password is not complex enough",
+ "confirmText": "được"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "Rất tiếc ...",
+ "content": "The permission to access your camera is required to scan the QR code",
+ "confirmText": "được"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "Điều khoản sử dụng",
+ "privacyPolicy": "Chính sách bảo mật",
+ "support": "Ủng hộ",
+ "donate": "Quyên góp",
+ "network": "Thống kê mạng",
+ "miningPool": "Hồ bơi khai thác",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin Ví",
+ "tagLine": "bất cứ nơi nào Bất cứ lúc nào. bất cứ nơi nào. bất kỳ thiết bị.",
+ "tagLineTwo": "Cách đơn giản nhất để sử dụng Qwertycoin",
+ "actions": {
+ "loadWallet": "Nạp ví của tôi",
+ "importWallet": "Nhập ví",
+ "create": "Tạo nên",
+ "createWallet": "Tạo nên..."
+ }
+ },
+ "accountPage": {
+ "title": "Account",
+ "subtitle": "Your account overview and transaction history",
+ "synchronizingBlock": {
+ "text": "Synchronizing..."
+ },
+ "balanceBlock": {
+ "title": "Your balance",
+ "unlocked": "Unlocked"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "Transaction history",
+ "pendingTxStatus": "Pending",
+ "emptyWallet": "You currently have no funds in this wallet.",
+ "waitSync": "Please wait until the wallet is updated",
+ "beReallyPatient": "The initial setup can take some time...",
+ "getCoinAddress": "Receive QWC"
+ },
+ "txDetails": {
+ "title": "Transaction details",
+ "txHash": "Transaction Hash",
+ "feesOnTx": "Transaction fee",
+ "blockHeight": "Block height",
+ "paymentId": "Payment ID",
+ "unlockStatus": "Status",
+ "unlockConfirm": "Confirmations",
+ "txPrivKey": "Transaction Private Key"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "Change your password",
+ "oldPassword": {
+ "label": "Old password",
+ "invalid": "The password is invalid"
+ },
+ "newPassword": {
+ "label": "Choose a new password to protect your wallet"
+ },
+ "newPasswordConfirm": {
+ "label": "Confirm the new password"
+ },
+ "confirm": "Change the password",
+ "modalSuccess": {
+ "title": "Password changed!",
+ "confirmText": "được"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "Cancel",
+ "confirm": "Add",
+ "contactAddress": "Address",
+ "contactName": "Name",
+ "getNewContacts": "Add Contact",
+ "newContact": "New Contact",
+ "noContacts": "You don't have any contacts yet.",
+ "title": "Your Contacts"
+ },
+ "contactDetailsBlock": {
+ "address": "Address",
+ "sendTo": "Send to ",
+ "title": "Contactdetails"
+ },
+ "subtitle": "Get in touch with other people",
+ "title": "Liên hệ"
+ },
+ "electionsPage": {
+ "title": "Bầu cử"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "Your wallet is being generated...",
+ "subtitle": "It's almost done",
+ "waitingMessage": "Generating your wallet..."
+ },
+ "finalizationStep": {
+ "title": "That was simple. Your account is ready!",
+ "subtitle": "Be ready to use Qwertycoin like you never have",
+ "passwordSelectionBlock": {
+ "label": "Protect your wallet"
+ },
+ "passwordConfirmBlock": {
+ "label": "Confirm the password"
+ },
+ "validPassword": "Use this password",
+ "backupBlock": {
+ "title": "Save your private credentials for recovery.",
+ "option1": "Option 1: ",
+ "option2": "Option 2: ",
+ "titlePdf": "Download a PDF copy",
+ "titleManualWrite": "Write down my keys",
+ "privateKeys": "Private key",
+ "mnemonicPhrase": "Mnemonic phrase",
+ "separatorManualMethodsSolution": " or ",
+ "confirmManuallyWritten": "I wrote my seed phrase down",
+ "warningMessage": "**Do not lose it!** It cannot be recovered if you lose it. **Do not share it!** Your funds will be stolen if you use this file or seed on a malicious/phishing site. **Make a backup!** Secure it like the millions of dollars it may one day be worth. ",
+ "finishButton": "I understand. Continue."
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Risk of Using QwertycoinWallet",
+ "content": "QwertycoinWallet is a web-based interface. It helps you use Qwertycoin without running a full Qwertycoin node. We recommend you treat QwertycoinWallet like you will treat your actual wallet."
+ }
+ },
+ "donatePage": {
+ "title": "Donate",
+ "subtitle": "Help to fund the development and pay the bills",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "If you want to help to pay for the servers, to support new features development, and like this app, please consider a donation:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin Dev fund",
+ "content": "To help Qwertycoin, you can donate at these addresses"
+ }
+ },
+ "supportPage": {
+ "title": "Support",
+ "subtitle": "We are here to help!",
+ "getInTouchBlock": {
+ "title": "Let's Get In Touch!",
+ "content": "Do you have ideas or feedback that could help us improve the wallet? Contact us!",
+ "discord": "Qwertycoin Discord Channel"
+ }
+ },
+ "networkPage": {
+ "title": "Network stats",
+ "subtitle": "Insights on the Qwertycoin network",
+ "statsBlock": {
+ "connectNode": "Connected Masternode",
+ "hashrate": "Network hashrate",
+ "height": "Blockchain height",
+ "difficulty": "Network difficulty",
+ "lastTimeBlock": "Last block found",
+ "lastReward": "Last block reward"
+ }
+ },
+ "sendPage": {
+ "title": "Send QWC",
+ "sendBlock": {
+ "address": {
+ "label": "Destination address",
+ "placeholder": "Write the address where you want to send funds",
+ "invalid": "The destination address is invalid",
+ "fundsTo": "The funds will be sent to",
+ "receiver": "Receiver",
+ "description": "Description"
+ },
+ "amount": {
+ "label": "Amount to send",
+ "invalid": "The amount is invalid"
+ },
+ "paymentId": {
+ "label": "Payment ID (optional)",
+ "invalid": "The payment ID is invalid. The length must be 16 or 64 characters"
+ },
+ "sendButton": "Send",
+ "cancelButton": "Hủy bỏ"
+ },
+ "qrCodeScanning": {
+ "explication": "Present the QR code"
+ },
+ "notEnoughMoneyModal": {
+ "title": "Rất tiếc ...",
+ "content": "You don't have enough funds in your wallet to execute this transfer",
+ "confirmText": "được"
+ },
+ "thankYouDonationModal": {
+ "title": "Thank you for your donation!",
+ "content": "Your help is appreciated. This donation will help make Qwertycoin better",
+ "confirmText": "được"
+ },
+ "transferSentModal": {
+ "title": "Transfer sent successfully!",
+ "confirmText": "được"
+ },
+ "transferExceptionModal": {
+ "title": "Rất tiếc ...",
+ "content": "An error occurred. Please report this error: {details}",
+ "confirmText": "được"
+ },
+ "invalidAmountModal": {
+ "title": "Rất tiếc ...",
+ "content": "Invalid amount",
+ "confirmText": "được"
+ },
+ "creatingTransferModal": {
+ "title": "Creating transfer ...",
+ "content": "Please wait..."
+ },
+ "finalizingTransferModal": {
+ "title": "Finalizing transfer ...",
+ "content": "Please wait..."
+ },
+ "confirmTransactionModal": {
+ "title": "Confirm transfer?",
+ "content": "Amount: {amount} Fees: {fees} Total: {total}",
+ "confirmText": "Confirm",
+ "cancelText": "Hủy bỏ"
+ },
+ "waitingNfcModal": {
+ "title": "Waiting NFC",
+ "content": "Bring this device closer to the other device"
+ }
+ },
+ "receivePage": {
+ "title": "Receive QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "Your address to receive funds:",
+ "label": "Give this address to receive funds"
+ },
+ "qrCode": {
+ "title": "Or personalize the QR code:",
+ "labelAmount": "Amount (optional)",
+ "labelRecipient": "Recipient name (optional)",
+ "labelDescription": "Transaction description (optional)",
+ "updateButton": "Update"
+ }
+ },
+ "qrBlock": {
+ "title": "Your customized QR code"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "Waiting NFC",
+ "titleSuccess": "NFC Tag written",
+ "content": "Bring the NFC tag closer to this device to write"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "Tag capacity insufficient"
+ }
+ },
+ "miningPage": {
+ "title": "Mine directly in your browser",
+ "subtitle": "Support the network by mining and be rewarded with QWC",
+ "parameterBlock": {
+ "title": "Parameters",
+ "labelDestinationAddress": "Wallet to mine",
+ "labelThreads": "Number of threads (more = higher hashrate)",
+ "start": "Start",
+ "stop": "Stop"
+ },
+ "statisticsBlocks": {
+ "title": "Statistics",
+ "validShares": "Valid shares",
+ "hashrate": "Hashrate",
+ "maxHashrate": "Max Hashrate",
+ "dedicatedHardware": "With dedicating mining software and hardware, you could earn more and help decentralize the network.",
+ "miningHandledBy": "This mining is handled by the mining pool pool.qwertycoin.org"
+ }
+ },
+ "settingsPage": {
+ "title": "Settings",
+ "subtitle": "Change your parameters here",
+ "versionBlock": {
+ "versionNumber": "Version number: ",
+ "versionCode": "Version code: "
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "Speed to update the wallet (will consume more resources)",
+ "fastest": "Fastest",
+ "fast": "Fast",
+ "medium": "Medium",
+ "slow": "Slow"
+ },
+ "language": {
+ "label": "Language"
+ },
+ "currency": {
+ "label": "National Currency"
+ },
+ "readMinerTx": {
+ "label": "Read miner transactions (only for solo mining)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "Change my wallet password",
+ "deleteWalletButton": "Delete my wallet (local copy)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "Creation height of the wallet"
+ },
+ "currentScanningHeight": {
+ "label": "Current scanning height"
+ },
+ "updateButton": "Update"
+ },
+ "deleteWalletModal": {
+ "title": "Delete My Wallet (local copy)",
+ "content": "Are you sure you REALLY want to delete your wallet ?",
+ "confirmText": "Yes I'm sure",
+ "cancelText": "Hủy bỏ"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "Parameters",
+ "password": {
+ "label": "Password to protect your wallet"
+ },
+ "passwordConfirm": {
+ "label": "Confirm the password",
+ "invalid": "The password does not match the first password you wrote"
+ },
+ "importHeight": {
+ "label": "Height to import from:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "Importing wallet from a QR code",
+ "subtitle": "Import a wallet from an offline backup",
+ "qrCodeBlock": {
+ "title": "QR code",
+ "startScanButton": "Start the scan",
+ "importButton": "Import"
+ },
+ "qrScanningBlock": {
+ "title": "Present the QR code"
+ }
+ },
+ "exportPage": {
+ "title": "Backup your credentials",
+ "publicAddressBlock": {
+ "title": "Your public address"
+ },
+ "pdfBlock": {
+ "title": "PDF Backup",
+ "downloadButton": "Download"
+ },
+ "warningBlock": {
+ "title": "Warning",
+ "content": "If you choose to save your private keys or your mnemonic phrase, PLEASE DO NOT store them in clear-text for your own safety. The file is an alternate solution where your keys are encrypted and contains a backup of all your transactions to spare you a future synchronisation."
+ },
+ "exportBlock": {
+ "title": "Export your RAW credentials",
+ "privateKeysButton": "Get my private keys",
+ "mnemonicKeysButton": "Get my mnemonic phrase",
+ "fileButton": "Export to a file"
+ },
+ "walletKeysModal": {
+ "title": "Private keys",
+ "confirmText": "được",
+ "content": "Please carefully store these keys. Possessing them means possessing the funds associated ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "Mnemonic phrase",
+ "confirmText": "được",
+ "content": "Please store carefully this mnemonic phrase. Possessing it means possessing the funds associated ! The phrase is: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "In which language do you want your mnemonic phrase?",
+ "confirmText": "Export"
+ }
+ },
+ "importPage": {
+ "title": "Create a wallet",
+ "subtitle": "From previously created keys, file, or mnemonic phrase",
+ "chooseMethod": "Choose your import method:",
+ "fromKeys": "From keys",
+ "fromFile": "From a file",
+ "fromMnemonic": "From a mnemonic phrase",
+ "fromQr": "From a QR code"
+ },
+ "termsOfUsePage": {
+ "title": "Terms of use",
+ "subtitle": "Please read them carefully."
+ },
+ "privacyPolicyPage": {
+ "title": "Privacy Policy",
+ "subtitle": "Please read them carefully."
+ },
+ "importFromFilePage": {
+ "title": "Importing wallet from a backup file",
+ "subtitle": "Use your backup file to create a wallet",
+ "walletBlock": {
+ "title": "Wallet file",
+ "label": "Select the file",
+ "importButton": "Import"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "Importing wallet from a mnemonic phrase",
+ "subtitle": "Use your phrase to create a wallet",
+ "mnemonicBlock": {
+ "title": "Mnemonic phrase",
+ "mnemonic": {
+ "label": "Mnemonic phrase: 25 words",
+ "invalid": "The mnemonic phrase is invalid",
+ "language": "Language"
+ },
+ "importButton": "Import"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "Importing wallet from keys",
+ "subtitle": "Use your keys to create a wallet",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "Do you want a view only wallet?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "Wallet keys",
+ "titleViewOnly": "View only wallet",
+ "privateSpend": {
+ "label": "Private spend key"
+ },
+ "privateView": {
+ "label": "Private view key",
+ "optional": "(optional)"
+ },
+ "publicKey": {
+ "label": "Public key"
+ },
+ "importButton": "Import"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/translations/zh.json b/src/translations/zh.json
new file mode 100644
index 00000000..7294d79c
--- /dev/null
+++ b/src/translations/zh.json
@@ -0,0 +1,539 @@
+{
+ "website": {
+ "title": "Qwertycoin钱包| 简单,无缝,安全。 欢迎来到未来。",
+ "description": "Qwertycoin币的官方在线钱包 - 完全在浏览器端处理,兼顾最优化的安全性。"
+ },
+ "messages": {
+ "menu": {
+ "home": "主页",
+ "account": "帐户",
+ "send": "发送",
+ "receive": "接收",
+ "export": "导出",
+ "donate": "捐助",
+ "elections": "选举",
+ "contacts": "往来",
+ "settings": "设置",
+ "disconnect": "断开",
+ "network": "网络",
+ "mining": "挖矿"
+ },
+ "global": {
+ "loading": "载入中",
+ "disableSecurity": "禁用此安全性,我已完全了解风险",
+ "passwordInvalidRequirements": "密码长度需要大于8位 - 至少包含1个大写字母,1个小写字母,1个数字,以及1个特殊字符。",
+ "passwordConfirmationNotMatching": "两次输入的密码不匹配",
+ "download": "下载",
+ "newVersionModal": {
+ "title": "有新版本可以更新",
+ "content": "要重新加载新版本吗?",
+ "confirmText": "是",
+ "cancelText": "返回"
+ },
+ "openWalletModal": {
+ "title": "钱包密码",
+ "confirmText": "打开",
+ "cancelText": "取消"
+ },
+ "invalidPasswordModal": {
+ "title": "糟糕!",
+ "content": "您的密码似乎无效",
+ "confirmText": "确认"
+ },
+ "invalidMnemonicModal": {
+ "title": "糟糕!",
+ "content": "助记词无效",
+ "confirmText": "确认"
+ },
+ "passwordNotComplexEnoughModal": {
+ "title": "密码太简单",
+ "confirmText": "确认"
+ },
+ "permissionRequiredForCameraModal": {
+ "title": "糟糕!",
+ "content": "扫描二维码需要访问您相机的权限",
+ "confirmText": "确认"
+ }
+ },
+ "bottom": {
+ "termsOfUse": "使用条款",
+ "privacyPolicy": "隐私政策",
+ "support": "支持",
+ "donate": "捐助",
+ "network": "网络统计",
+ "miningPool": "矿池",
+ "github": "GitHub"
+ },
+ "homepage": {
+ "mainTitle": "Qwertycoin钱包",
+ "tagLine": "无论何时、何地、何种设备。",
+ "tagLineTwo": "使用Qwertycoin最简单的方法",
+ "actions": {
+ "loadWallet": "加载我的钱包",
+ "importWallet": "导入钱包",
+ "create": "创建",
+ "createWallet": "创建一个钱包"
+ }
+ },
+ "accountPage": {
+ "title": "帐户",
+ "subtitle": "您的帐户概览和交易记录",
+ "synchronizingBlock": {
+ "text": "同步中..."
+ },
+ "balanceBlock": {
+ "title": "您的余额",
+ "unlocked": "解锁"
+ },
+ "currencyBlock": {
+ "btc": "BTC",
+ "eth": "ETH",
+ "ltc": "LTC",
+ "usd": "USD",
+ "eur": "EUR",
+ "aud": "AUD",
+ "cad": "CAD",
+ "chf": "CHF",
+ "cny": "CNY",
+ "gbp": "GBP",
+ "jpy": "JPY",
+ "kwd": "KWD",
+ "krw": "KRW",
+ "rub": "RUB",
+ "try": "TRY",
+ "vnd": "VND"
+ },
+ "historyBlock": {
+ "title": "交易记录",
+ "pendingTxStatus": "等待中",
+ "emptyWallet": "您的钱包目前没有资金。",
+ "waitSync": "请等待钱包更新完毕",
+ "beReallyPatient": "初始化设置可能比较耗时......",
+ "getCoinAddress": "收到QWC"
+ },
+ "txDetails": {
+ "title": "交易明细",
+ "txHash": "交易哈希",
+ "feesOnTx": "手续费",
+ "blockHeight": "区块高度",
+ "paymentId": "付款ID",
+ "unlockStatus": "状态",
+ "unlockConfirm": "确认数",
+ "txPrivKey": "交易私钥"
+ }
+ },
+ "changeWalletPasswordPage": {
+ "title": "更改您的密码",
+ "oldPassword": {
+ "label": "旧密码",
+ "invalid": "密码无效"
+ },
+ "newPassword": {
+ "label": "选择一个新密码来保护您的钱包"
+ },
+ "newPasswordConfirm": {
+ "label": "确认新密码"
+ },
+ "confirm": "更改密码",
+ "modalSuccess": {
+ "title": "密码已更改!",
+ "confirmText": "确认"
+ }
+ },
+ "contactPage": {
+ "contactBlock": {
+ "cancel": "取消",
+ "confirm": "新增",
+ "contactAddress": "地址",
+ "contactName": "名字",
+ "getNewContacts": "添加联系人",
+ "newContact": "新建联系人",
+ "noContacts": "您当前有0个联系人。",
+ "title": "您的联系人"
+ },
+ "contactDetailsBlock": {
+ "address": "地址",
+ "sendTo": "发送到 ",
+ "title": "联系人详情"
+ },
+ "subtitle": "多和其他人联系",
+ "title": "往来"
+ },
+ "electionsPage": {
+ "title": "选举"
+ },
+ "createWalletPage": {
+ "generatingStep": {
+ "title": "您的钱包正在生成......",
+ "subtitle": "差不多快好了",
+ "waitingMessage": "正在生成您的钱包......"
+ },
+ "finalizationStep": {
+ "title": "这很简单,您的帐户已准备就绪!",
+ "subtitle": "准备迎接Qwertycoin钱包的全新体验吧!",
+ "passwordSelectionBlock": {
+ "label": "保护您的钱包"
+ },
+ "passwordConfirmBlock": {
+ "label": "确认密码"
+ },
+ "validPassword": "使用此密码",
+ "backupBlock": {
+ "title": "保存您的私人凭据以便后期用于恢复钱包。",
+ "option1": "选项1:",
+ "option2": "选项2:",
+ "titlePdf": "下载PDF副本",
+ "titleManualWrite": "在纸上写下我的私钥",
+ "privateKeys": "私钥",
+ "mnemonicPhrase": "助记词",
+ "separatorManualMethodsSolution": " 或者 ",
+ "confirmManuallyWritten": "我已经将我的助记词写下来了",
+ "warningMessage": "**千万别弄丢了!** 如果您弄丢了将无法恢复您的钱包I。 **不要跟任何人分享!** 如果您在可疑电脑或者钓鱼网站上使用这个文件或者助记词,那么您钱包里的资产将很可能会被盗走。 **做好备份!** 将它看做未来的某一天将会价值百万那样备份好,保护好。 ",
+ "finishButton": "我确认知悉,点击继续。"
+ }
+ },
+ "disclaimerBlock": {
+ "title": "Qwertycoin钱包安全风险须知",
+ "content": "Qwertycoin钱包是一个基于Web的界面. 它能帮助你在无须运行一个完整的QwertyCoin节点就可以使用QwertyCoin。 我们建议像对待您真实的钱包那样对待Qwertycoin钱包。"
+ }
+ },
+ "donatePage": {
+ "title": "捐助",
+ "subtitle": "帮助资助开发并支付账单",
+ "webwalletBlock": {
+ "title": "Webwallet",
+ "content": "如果您愿意帮助支付服务器费用,用来支持开发新的功能,或者您喜欢这个应用,那么可以考虑捐助我们:
"
+ },
+ "devFundBlock": {
+ "title": "Qwertycoin开发者基金",
+ "content": "想捐助Qwertycoin, 您可以捐助到如下这些地址"
+ }
+ },
+ "supportPage": {
+ "title": "支持",
+ "subtitle": "我们在这里提供帮助!",
+ "getInTouchBlock": {
+ "title": "让我们联系吧!",
+ "content": "您若有能帮助我们改善钱包哦的建议或者想法,欢迎联系我们!",
+ "discord": "Qwertycoin Discord频道"
+ }
+ },
+ "networkPage": {
+ "title": "网络统计",
+ "subtitle": "Qwertycoin网络详情",
+ "statsBlock": {
+ "connectNode": "连接的Masternode",
+ "hashrate": "网络哈希值",
+ "height": "区块高度",
+ "difficulty": "网络难度",
+ "lastTimeBlock": "最新出块",
+ "lastReward": "最新出块奖励"
+ }
+ },
+ "sendPage": {
+ "title": "发送QWC",
+ "sendBlock": {
+ "address": {
+ "label": "目标地址",
+ "placeholder": "写下您要汇款目标地址",
+ "invalid": "非法的目标地址",
+ "fundsTo": "资金将被发送到",
+ "receiver": "接收者",
+ "description": "描述"
+ },
+ "amount": {
+ "label": "发送金额",
+ "invalid": "金额无效"
+ },
+ "paymentId": {
+ "label": "付款ID(可选)",
+ "invalid": "非法的付款ID. 长度必须是64位。"
+ },
+ "sendButton": "发送",
+ "cancelButton": "取消"
+ },
+ "qrCodeScanning": {
+ "explication": "展示二维码"
+ },
+ "notEnoughMoneyModal": {
+ "title": "糟糕!",
+ "content": "您没有足够的资金,转账无法完成。",
+ "confirmText": "确认"
+ },
+ "thankYouDonationModal": {
+ "title": "感谢您的捐赠!",
+ "content": "感谢您的帮助。您的捐助将会使Qwertycoin变得更好。",
+ "confirmText": "确认"
+ },
+ "transferSentModal": {
+ "title": "转移成功!",
+ "confirmText": "确认"
+ },
+ "transferExceptionModal": {
+ "title": "糟糕!",
+ "content": "发生错误,请上报此错误: {details}",
+ "confirmText": "确认"
+ },
+ "invalidAmountModal": {
+ "title": "糟糕!",
+ "content": "不合法的数量",
+ "confirmText": "确认"
+ },
+ "creatingTransferModal": {
+ "title": "转账创建中......",
+ "content": "请耐心等待..."
+ },
+ "finalizingTransferModal": {
+ "title": "转账完成......",
+ "content": "请耐心等待..."
+ },
+ "confirmTransactionModal": {
+ "title": "确认转账?",
+ "content": "数量: {amount} 交易费: {fees} 总额: {total}",
+ "confirmText": "确认",
+ "cancelText": "取消"
+ },
+ "waitingNfcModal": {
+ "title": "等待Nfc",
+ "content": "靠近其他设备一些"
+ }
+ },
+ "receivePage": {
+ "title": "收到QWC",
+ "receiveBlock": {
+ "address": {
+ "title": "您收到资金的地址:",
+ "label": "给这个地址接收资金"
+ },
+ "qrCode": {
+ "title": "或者个性化二维码:",
+ "labelAmount": "金额(可选)",
+ "labelRecipient": "收据名称 (可选)",
+ "labelDescription": "交易描述 (可选)",
+ "updateButton": "更新"
+ }
+ },
+ "qrBlock": {
+ "title": "您的自定义二维码"
+ },
+ "waitingNfcToWriteModal": {
+ "title": "等待 Nfc",
+ "titleSuccess": "Nfc标签识别成功",
+ "content": "请靠近NFC标签来识别"
+ },
+ "nfcErrorModal": {
+ "titleInsufficientCapacity": "标签剩余不足"
+ }
+ },
+ "miningPage": {
+ "title": "直接在浏览器中挖矿",
+ "subtitle": "通过挖矿为网络做贡献,并得到QWC奖励",
+ "parameterBlock": {
+ "title": "参数",
+ "labelDestinationAddress": "挖矿的钱包",
+ "labelThreads": "线程数 (more=更高的算力)",
+ "start": "开始",
+ "stop": "停止"
+ },
+ "statisticsBlocks": {
+ "title": "统计数据",
+ "validShares": "有效份额",
+ "hashrate": "算力",
+ "maxHashrate": "最大算力",
+ "dedicatedHardware": "使用算力贡献的挖矿硬件和挖矿软件,你可以获得更多奖励,帮助去中心化的网络。",
+ "miningHandledBy": "本次挖矿由矿池pool.qwertycoin.org处理"
+ }
+ },
+ "settingsPage": {
+ "title": "设置",
+ "subtitle": "在这里更改您的参数",
+ "versionBlock": {
+ "versionNumber": "版本号:",
+ "versionCode": "版本代码:"
+ },
+ "settingsBlock": {
+ "speed": {
+ "label": "更新钱包的速度(将会消耗更多资源)",
+ "fastest": "最快",
+ "fast": "快",
+ "medium": "中等",
+ "slow": "慢"
+ },
+ "language": {
+ "label": "语言"
+ },
+ "currency": {
+ "label": "本国货币"
+ },
+ "readMinerTx": {
+ "label": "读取挖矿交易信息(仅适用于Solo挖矿)"
+ },
+ "customNode": {
+ "label": "Use custom node"
+ },
+ "nodeUrl": {
+ "label": "Node URL"
+ },
+ "chooseNode": "Choose your node:"
+ },
+ "changePasswordButton": "更改我的钱包密码",
+ "deleteWalletButton": "删除我的钱包(本地副本)",
+ "walletSettings": {
+ "creationHeight": {
+ "label": "钱包创建的区块高度"
+ },
+ "currentScanningHeight": {
+ "label": "当前扫描高度"
+ },
+ "updateButton": "更新"
+ },
+ "deleteWalletModal": {
+ "title": "删除我的钱包(本地副本)",
+ "content": "确定要删除您的钱包吗?",
+ "confirmText": "是的,我确定",
+ "cancelText": "取消"
+ }
+ },
+ "importBasePage": {
+ "parametersBlock": {
+ "title": "参数",
+ "password": {
+ "label": "保护您的钱包的密码"
+ },
+ "passwordConfirm": {
+ "label": "确认密码",
+ "invalid": "2次密码不匹配"
+ },
+ "importHeight": {
+ "label": "从该区块高度开始导入:"
+ }
+ }
+ },
+ "importFromQrPage": {
+ "title": "从二维码导入钱包",
+ "subtitle": "从线下备份导入钱包",
+ "qrCodeBlock": {
+ "title": "二维码",
+ "startScanButton": "开始扫描",
+ "importButton": "导入"
+ },
+ "qrScanningBlock": {
+ "title": "展示二维码"
+ }
+ },
+ "exportPage": {
+ "title": "备份您的证书",
+ "publicAddressBlock": {
+ "title": "您的公开地址"
+ },
+ "pdfBlock": {
+ "title": "PDF备份",
+ "downloadButton": "下载"
+ },
+ "warningBlock": {
+ "title": "警告",
+ "content": "如果您选择保存您的私钥和助记词,为了您的资金安全,请务必不要将它们明文存储在任何地方。 这些文件是您的私钥,包含您的之后用来钱包同步所需的所有交易信息内容。The file is an alternate solution where your keys are encrypted。"
+ },
+ "exportBlock": {
+ "title": "导出证书",
+ "privateKeysButton": "获取我的私钥",
+ "mnemonicKeysButton": "获取我的助记词",
+ "fileButton": "导出到一个文件"
+ },
+ "walletKeysModal": {
+ "title": "私钥",
+ "confirmText": "确认",
+ "content": "请妥善保存好您的私钥。保存好私钥就等于保存好了它所关联的账户资金 ! Spend key: {privSpendKey} Private view key: {privViewKey}"
+ },
+ "mnemonicKeyModal": {
+ "title": "助记词",
+ "confirmText": "确认",
+ "content": "请妥善保存好您的助记词。保存好助记词就等于保存好了它所关联的账户资金 ! 您的助记词是: {mnemonic}"
+ },
+ "mnemonicLangSelectionModal": {
+ "title": "你想用哪种语言写你的助记词?",
+ "confirmText": "导出"
+ }
+ },
+ "importPage": {
+ "title": "创建一个钱包",
+ "subtitle": "从以前创建过的密钥,文件或助记词",
+ "chooseMethod": "选择导入方法:",
+ "fromKeys": "从秘钥",
+ "fromFile": "从文件",
+ "fromMnemonic": "从助记词",
+ "fromQr": "从二维码"
+ },
+ "termsOfUsePage": {
+ "title": "使用条款",
+ "subtitle": "请仔细阅读。"
+ },
+ "privacyPolicyPage": {
+ "title": "隐私政策",
+ "subtitle": "请仔细阅读。"
+ },
+ "importFromFilePage": {
+ "title": "从备份文件导入钱包",
+ "subtitle": "使用备份文件创建钱包",
+ "walletBlock": {
+ "title": "钱包文件",
+ "label": "选择文件",
+ "importButton": "导入"
+ }
+ },
+ "importFromMnemonicPage": {
+ "title": "从助记词导入钱包",
+ "subtitle": "使用您的助记词来创建钱包",
+ "mnemonicBlock": {
+ "title": "助记词",
+ "mnemonic": {
+ "label": "助记词:25个字",
+ "invalid": "助记词无效",
+ "language": "语言"
+ },
+ "importButton": "导入"
+ }
+ },
+ "importFromKeysPage": {
+ "title": "从秘钥导入钱包",
+ "subtitle": "使用您的密钥创建钱包",
+ "parametersBlock": {
+ "viewOnlyWallet": {
+ "label": "你想要一个只允许查看的钱包吗?"
+ }
+ },
+ "keysBlock": {
+ "titleNotViewOnly": "钱包钥匙",
+ "titleViewOnly": "仅查看钱包",
+ "privateSpend": {
+ "label": "私人消费钥匙"
+ },
+ "privateView": {
+ "label": "私人视图密钥",
+ "optional": "(可选的)"
+ },
+ "publicKey": {
+ "label": "公钥"
+ },
+ "importButton": "导入"
+ }
+ }
+ },
+ "number": {},
+ "date": {
+ "short": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric"
+ },
+ "long": {
+ "year": "numeric",
+ "month": "short",
+ "day": "numeric",
+ "weekday": "short",
+ "hour": "numeric",
+ "minute": "numeric",
+ "hour12": true
+ }
+ }
+}
diff --git a/src/workers/TransferProcessing.ts b/src/workers/TransferProcessing.ts
index dc90f8f2..e4fb24a8 100644
--- a/src/workers/TransferProcessing.ts
+++ b/src/workers/TransferProcessing.ts
@@ -2,53 +2,77 @@ import {TransactionsExplorer} from "../model/TransactionsExplorer";
import {Wallet, WalletOptions} from "../model/Wallet";
import {Mnemonic} from "../model/Mnemonic";
import {Transaction} from "../model/Transaction";
+import {Constants} from "../model/Constants";
+import {RawDaemon_Transaction} from "../model/blockchain/BlockchainExplorer";
//bridge for cnUtil with the new mnemonic class
(self).mn_random = Mnemonic.mn_random;
(self).mn_decode = Mnemonic.mn_decode;
(self).mn_encode = Mnemonic.mn_encode;
-let currentWallet : Wallet|null = null;
+let currentWallet: Wallet | null = null;
-onmessage = function(data : MessageEvent){
+onmessage = function (data: MessageEvent) {
// if(data.isTrusted){
- let event : any = data.data;
- if(event.type === 'initWallet'){
+ let event: any = data.data;
+ if (event.type === 'initWallet') {
+ currentWallet = Wallet.loadFromRaw(event.wallet);
+ postMessage('readyWallet');
+ } else if (event.type === 'process') {
+ if (typeof event.wallet !== 'undefined') {
currentWallet = Wallet.loadFromRaw(event.wallet);
- postMessage('readyWallet');
- }else if (event.type === 'process'){
- if(typeof event.wallet !== 'undefined'){
- currentWallet = Wallet.loadFromRaw(event.wallet);
- }
+ }
+
+ if (currentWallet === null) {
+ postMessage('missing_wallet');
+ return;
+ }
+
+ let readMinersTx = typeof currentWallet.options.checkMinerTx !== 'undefined' && currentWallet.options.checkMinerTx;
+
+ let rawTransactions: RawDaemon_Transaction[] = event.transactions;
+ let transactions: any[] = [];
- if(currentWallet === null){
- postMessage('missing_wallet');
- return;
+ for (let rawTransaction of rawTransactions) {
+ if (!readMinersTx && TransactionsExplorer.isMinerTx(rawTransaction)) {
+ continue;
}
- let rawTransactions : RawDaemonTransaction[] = event.transactions;
- let transactions: any[] = [];
-
- for(let rawTransaction of rawTransactions){
- let transaction = TransactionsExplorer.parse(rawTransaction, currentWallet);
- if(transaction !== null){
- currentWallet.addNew(transaction);
- //if (transaction.getAmount() !== 0) //fusion
- //{
- transactions.push(transaction.export());
- //}
+ let transaction = TransactionsExplorer.parse(rawTransaction, currentWallet);
+ if (Constants.DEBUG_STATE) {
+ if (transaction !== null) {
+ console.log(`parsed tx ${transaction['hash']} from rawTransaction`);
}
}
+ if (transaction !== null) {
+ currentWallet.addNew(transaction);
+ if (Constants.DEBUG_STATE) {
+ console.log(`Added tx ${transaction.hash} to currentWallet`);
+ }
- postMessage({
- type:'processed',
- transactions:transactions
- });
+ transactions.push(transaction.export());
+ if (Constants.DEBUG_STATE) {
+ console.log(`pushed tx ${transaction.hash} to transactions[]`);
+ }
+ }
}
- // let transaction = TransactionsExplorer.parse(rawTransaction, height, this.wallet);
+ postMessage({
+ type: 'processed',
+ transactions: transactions
+ });
+ }
+ // let transaction = TransactionsExplorer.parse(rawTransaction, height, this.wallet);
// }else {
// console.warn('Non trusted data', data.data, JSON.stringify(data.data));
// }
+
+ if (Constants.DEBUG_STATE) {
+ // @ts-ignore
+ let tempAll = currentWallet.getAll()
+ if (tempAll.length > 0) {
+ console.log(tempAll);
+ }
+ }
};
-postMessage('ready');
\ No newline at end of file
+postMessage('ready');
diff --git a/src/workers/TransferProcessingEntrypoint.ts b/src/workers/TransferProcessingEntrypoint.ts
index 83ac1a30..02e4810e 100644
--- a/src/workers/TransferProcessingEntrypoint.ts
+++ b/src/workers/TransferProcessingEntrypoint.ts
@@ -7,9 +7,7 @@ importScripts('../lib/require.js');
importScripts('../lib/biginteger.js');
importScripts('../config.js');
importScripts('../lib/base58.js');
-importScripts('../lib/cn_utils.js');
importScripts('../lib/crypto.js');
-// importScripts('../lib/mnemonic.js');
importScripts('../lib/nacl-fast.js');
importScripts('../lib/nacl-util.min.js');
importScripts('../lib/sha3.js');
diff --git a/src_api/blockchain.php b/src_api/blockchain.php
deleted file mode 100644
index 3b3b898e..00000000
--- a/src_api/blockchain.php
+++ /dev/null
@@ -1,364 +0,0 @@
-$txHashes,
- 'decode_as_json'=>true
- ));
- curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/gettransactions', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
-
- $resp = curl_exec($curl);
- curl_close($curl);
- $array = json_decode($resp, true);
-
- return $array;
-}
-
-function getBlockchainHeight(){
- global $rpcPort;
- global $daemonAddress;
- $curl = curl_init();
-
- curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/getheight', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => ''));
-
- $resp = curl_exec($curl);
- curl_close($curl);
- $array = json_decode($resp, true);
- return $array['height'];
-}
-
-
-$outCount = 0;//to start at 0
-
-function createOptimizedBock($startHeight, $endHeight){
- global $outCount;
- global $rpcPort;
- global $daemonAddress;
- $txHashesPerBlock = array();
- $txHashes = array();
- $txHashesMap = array();
- $txOutCountMap = array();
-
- $finalTransactions = array();
- $curl = curl_init();
-
- $minerTxs = [];
-
- $blockTimes = array();
-
- for($height = $startHeight; $height <= $endHeight; ++$height){
- //get the block hash
- $body = json_encode(array("jsonrpc" => "2.0", "id" => "0", "method" => "on_getblockhash", "params" => array($height)));
- curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/json_rpc', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
- $resp = curl_exec($curl);
- $array = json_decode($resp, true);
- $hash = $array["result"];
- //get the block details
- $body = json_encode(array("jsonrpc" => "2.0", "id" => "0", "method" => "f_block_json", "params" => array("hash" => $hash)));
- curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/json_rpc', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
- $resp = curl_exec($curl);
- $array = json_decode($resp, true);
- $blockJson = $array["result"]["block"];
-
- // var_dump($array);
- //$blockJson = json_decode($array['result']['json'], true);
- /*
- $minerTx = $blockJson['transactions'][0];
- $minerTx['height'] = $height;
- $minerTx['vin'] = [];
- $minerTxs[] = $minerTx;
- */
- $blockTxHashes = array();
- $blockTimes[$height] = $blockJson['timestamp'];
- $txs = $blockJson['transactions'];
- foreach($txs as $tx){
- $blockTxHashes[] = $tx["hash"];
- //$tx["block_timestamp"] = $blockJson['timestamp'];
- }
- $txHashesPerBlock[$height] = $blockTxHashes;
-
- foreach($blockTxHashes as $txHash){
- $txHashesMap[$txHash] = $height;
- $txHashes[] = $txHash;
- $txOutCountMap[$txHash] = $outCount;
- }
-
- }
-
-
- for($height = $startHeight; $height <= $endHeight; ++$height){
- /*foreach($minerTxs as $minerTx){
- if($minerTx['height'] === $height){
- $minerTx['global_index_start'] = $outCount;
- $minerTx['ts'] = $blockTimes[$height];
- $finalTransactions[] = $minerTx;
- ++$outCount;
- break;
- }
- }
- */
- $body = json_encode(array(
- 'transactionHashes'=>$txHashesPerBlock[$height]
- ));
-
- curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/get_transaction_details_by_hashes', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
-
- $resp = curl_exec($curl);
-
- $decodedJson = json_decode($resp, true);
-
- if(!isset($decodedJson['transactions'])){
- $rawTransactions = [];
- }else{
- $rawTransactions = $decodedJson['transactions'];
- }
-
-// var_dump($decodedJson['txs']);
-// var_dump($rawTransactions);
-
- for($iTransaction = 0; $iTransaction < count($rawTransactions); ++$iTransaction){
- //$rawTransactionJson = $rawTransactionsJson[$iTransaction];
- $rawTransaction = $rawTransactions[$iTransaction];
- // var_dump($txHashesMap[$txHashes[$iTransaction]].'<=>'.$height.'=>'.count($rawTransactions));
-// if($txHashesMap[$txHashes[$iTransaction]] === $height){
- // ++$outCount;
- $finalTransaction = $rawTransaction;
- unset($finalTransaction['signatures']);
- unset($finalTransaction['ts']);
- unset($finalTransaction['unlockTime']);
- unset($finalTransaction['signaturesSize']);
- $finalTransaction['global_index_start'] = $outCount;
- $finalTransaction['ts'] = $blockJson['timestamp']; //$rawTransaction['block_timestamp'];
- $finalTransaction['height'] = $height;
- $finalTransaction['hash'] = $rawTransaction['hash'];
- // var_dump('-->'.$txHashesMap[$txHashes[$iTransaction]]);
- $finalTransactions[] = $finalTransaction;
-
-
- $voutCount = count($finalTransaction['outputs']);
- //var_dump('vout of ' . $voutCount . ' at height ' . $finalTransaction["height"]);
- $outCount += $voutCount;
-// }
- }
- // var_dump($outCount);
- }
-
- curl_close($curl);
-
- // return array_merge($finalTransactions,$minerTxs);
- return $finalTransactions;
-}
-
-/*
-function createOptimizedBock2($startHeight, $endHeight){
- global $rpcPort;
- global $outCount;
- $txHashesPerBlock = array();
- $txHashes = array();
- $txHashesMap = array();
-
- $finalTransactions = array();
-
- for($height = $startHeight; $height < $endHeight; ++$height){
- $body = json_encode(array("jsonrpc" => "2.0", "id" => "0", "method" => "getblock", "params" => array("height" => $height)));
-
- $curl = curl_init();
-
- curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/json_rpc', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
-
- $resp = curl_exec($curl);
- curl_close($curl);
- $array = json_decode($resp, true);
-
- // var_dump($array);
- $blockJson = json_decode($array['result']['json'], true);
- $blockTxHashes = ($blockJson['tx_hashes']);
-
- $txHashesPerBlock[$height] = $blockTxHashes;
- foreach($blockTxHashes as $txHash){
- $txHashesMap[$txHash] = $height;
- $txHashes[] = $txHash;
- }
-
- ++$outCount;//minx tx
-
- if(count($txHashesPerBlock[$height]) > 0){
- $rawTransactions = getTxWithHashes($txHashesPerBlock[$height])['txs_as_json'];
- $iTransaction = 0;
- foreach($rawTransactions as $rawTransaction){
- ++$outCount;
- $finalTransaction = json_decode($rawTransaction, true);
- unset($finalTransaction['rctsig_prunable']);
- $finalTransaction['height'] = $txHashesPerBlock[$height];
- $finalTransaction['global_index_start'] = $outCount;
- $finalTransactions[] = $finalTransaction;
- ++$iTransaction;
- $outCount+=count($finalTransaction['vout'])-1;
- }
- }
- }
-
- return $finalTransactions;
-}
-*/
-
-function retrieveCache($startHeight, $endHeight, $decoded=true){
- global $cacheLocation;
- $content = @file_get_contents($cacheLocation.'/'.$startHeight.'-'.$endHeight);
- if($content === false)
- return null;
- if($decoded)
- $content = json_decode($content, true);
- return $content;
-}
-
-function saveCache($startHeight, $endHeight, $content){
- global $cacheLocation;
- file_put_contents($cacheLocation.'/'.$startHeight.'-'.$endHeight, json_encode($content));
-}
-
-if(getenv('generate') !== 'true'){
- if(!is_int($_GET['height']+0)){
- http_response_code(400);
- exit;
- }
- $startHeight = (int)$_GET['height'];
- $realStartHeight = $startHeight;
- $startHeight = floor($startHeight/100)*100;
- $endHeight = $startHeight + 100;
- if($startHeight < 0) $startHeight = 0;
-
- $blockchainHeight = getBlockchainHeight();
- if($blockchainHeight === null) $blockchainHeight = $endHeight+100;
- if($endHeight > $blockchainHeight){
- $endHeight = $blockchainHeight;
- }
-
- // var_dump($startHeight, $endHeight);
- // exit;
- $cacheContent = retrieveCache($startHeight, $endHeight, false);
- if($cacheContent === null){
- http_response_code(400);
- }else{
- $cacheContent = json_decode($cacheContent, true);
- $txForUser = [];
- foreach($cacheContent as $tx){
- if($tx['height'] >= $realStartHeight){
- $txForUser[] = $tx;
- }
- }
-
- header('Content-Type: application/json');
- echo json_encode($txForUser);
- }
-}else{
- $lastRunStored = @file_get_contents('./lastRun.txt');
- if($lastRunStored===false)
- $lastRunStored = 0;
- else
- $lastRunStored = (int)$lastRunStored;
-
- if($lastRunStored+1/**60*/ >= time())//concurrent run, 1min lock
- exit;
- file_put_contents('./lastRun.txt', time());
-
- $lastScanHeight = 0;
- $timeStart = time();
- $lastOutCount = 0;
- while(time() - $timeStart < 59*60){
- $blockchainHeight = getBlockchainHeight();
- $lastBlockCacheContent = null;
- for($startHeight = $lastScanHeight; $startHeight <= $blockchainHeight; $startHeight += 100){
-
- $endHeight = $startHeight + 100;
- $realStartHeight = $startHeight;
- // if($realStartHeight < 1) $realStartHeight = 1;
- if($endHeight > $blockchainHeight){
- $endHeight = $blockchainHeight;
- }
-
- echo 'scanning ' . $startHeight . ' to ' . $endHeight . " ";
-
- $cacheContent = retrieveCache($realStartHeight, $endHeight, false);
- // var_dump('==>',$lastBlockCacheContent,$cacheContent);
- if($cacheContent === null){
- if($realStartHeight > 1){
- $lastBlockCacheContent = retrieveCache($realStartHeight-100, $realStartHeight, false);
- $decodedContent = json_decode($lastBlockCacheContent, true);
- if(count($decodedContent) > 0){
- $lastTr = $decodedContent[count($decodedContent) - 1];
- $outCount = $lastTr['global_index_start'] + count($lastTr['outputs']);
- //var_dump('out count='.$outCount.' '.$lastTr['global_index_start'].' '.count($lastTr['outputs']));
- }else{
- var_dump('Missing compacted block file. Weird case');
- exit;
- }
- $lastBlockCacheContent = null;
- }
-
- //var_dump("generating...");
- $cacheContent = createOptimizedBock($realStartHeight, $endHeight);
- saveCache($realStartHeight, $endHeight, $cacheContent);
- $cacheContent = json_encode($cacheContent);
- }else{
-// if($cacheContent !== '[]' && $cacheContent !== null){
-// $lastBlockCacheContent = $cacheContent;
-// }
- }
-
- var_dump($outCount);
- }
-
- $lastOutCount = $outCount;
-
- //var_dump('cleaning ...');
-
- $allBlocksFiles = scandir($cacheLocation);
- foreach($allBlocksFiles as $filename){
- if($filename !== '.' && $filename !== '..'){
- $blocksNumbers = explode('-', $filename);
- if(count($blocksNumbers) === 2 && $blocksNumbers[1] % 100 !== 0){
- if($blocksNumbers[1]+1 < $blockchainHeight){//to be sure if other client are using the last one
- unlink($cacheLocation . '/' . $filename);
- }
- }
- }
- }
-
- $lastScanHeight = floor($blockchainHeight/100)*100;
-
- file_put_contents('./lastRun.txt', time());
- sleep(10);
- }
-}
-
-//$finalTransactions = createOptimizedBock($startHeight, $endHeight);
-//ini_set('zlib.output_compression_level', 1);
-//if (extension_loaded('zlib') && !ini_get('zlib.output_compression')){
-// header('Content-Encoding: gzip');
-// ob_start('ob_gzhandler');
-//}
-//ob_start("ob_gzhandler");
-//$data = gzcompress($cacheContent,9);
-
-//ob_end_clean();
-//echo strlen($data);
-//echo '|';
-//echo strlen($cacheContent);
-//ob_end_flush();
\ No newline at end of file
diff --git a/src_api/config.php b/src_api/config.php
deleted file mode 100644
index b4435786..00000000
--- a/src_api/config.php
+++ /dev/null
@@ -1,7 +0,0 @@
- "2.0", "id" => "0", "method" => "f_on_transactions_pool_json", "params" => ''));
-curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/json_rpc', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
-$resp = curl_exec($curl);
-
-//now get the Tx details
-$jsonMempool = json_decode($resp, true);
-$rawTransactions = $jsonMempool["result"]["transactions"];
-$txHashes = array();
-for($iTransaction = 0; $iTransaction < count($rawTransactions); ++$iTransaction){
- $txHashes[] = $rawTransactions[$iTransaction]["hash"];
-}
-
-$body = json_encode(array(
- 'transactionHashes'=>$txHashes
-));
-curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/get_transaction_details_by_hashes', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
-$resp = curl_exec($curl);
-$decodedJson = json_decode($resp, true);
-curl_close($curl);
-
-/*
-$blobString1 = '"tx_blob": "';
-$blobString2 = '"tx_blob":"';
-$posTxBlob = 0;
-$searchTxBlock1 = 0;
-$searchTxBlock2 = 0;
-while(($searchTxBlock1 = strpos($resp,$blobString1)) !== false || ($searchTxBlock2 = strpos($resp,$blobString2)) !== false ){
-// var_dump($searchTxBlock1.' '.$searchTxBlock2);
- if($searchTxBlock1 !== false){
- $posTxBlob = $searchTxBlock1;
- $posEndTxBlock = $posTxBlob + strlen($blobString1);
- }
- else if($searchTxBlock2 !== false){
- $posTxBlob = $searchTxBlock2;
- $posEndTxBlock = $posTxBlob + strlen($blobString2);
- }
-
- $i = 0;
- do{
- ++$posEndTxBlock;
- $posEndTxBlock = strpos($resp, '"', $posEndTxBlock);
- ++$i;
- }while($posEndTxBlock !== false && $resp[$posEndTxBlock-1] === '\\');
-
- $resp = substr($resp, 0, $posTxBlob).substr($resp, $posEndTxBlock+2);
-}
-
-$jsonMempool = json_decode($resp, true);
-if(isset($jsonMempool["result"]['transactions'])){
-// var_dump('isset');
- foreach($jsonMempool['transactions'] as $key=>$tx){
- unset($tx['tx_blob']);
- $tx['tx_json'] = json_decode($tx['tx_json']);
- $jsonMempool['transactions'][$key] = $tx;
- }
-}
-*/
-$jsonMempool = json_decode($resp, true);
-header('Content-Type: application/json');
-echo json_encode($jsonMempool['transactions']);
-
diff --git a/src_api/getheight.php b/src_api/getheight.php
deleted file mode 100644
index d344fd31..00000000
--- a/src_api/getheight.php
+++ /dev/null
@@ -1,31 +0,0 @@
- 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/getheight'));
-$resp = curl_exec($curl);
-curl_close($curl);
-//var_dump($resp);
-$array = json_decode($resp, true);
-//var_dump($array);
-if($array === null)
- http_response_code(400);
-else
- echo $array['height'];
\ No newline at end of file
diff --git a/src_api/network.php b/src_api/network.php
deleted file mode 100644
index a7eb5ed9..00000000
--- a/src_api/network.php
+++ /dev/null
@@ -1,46 +0,0 @@
- "2.0", "id" => "0", "method" => "getlastblockheader"));
-curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/json_rpc', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
-
-$resp = curl_exec($curl);
-curl_close($curl);
-//var_dump($resp);
-$array = json_decode($resp, true);
-//var_dump($array);
-if($array === null)
- http_response_code(400);
-else{
- $blockHeader = $array['result']['block_header'];
- header('Content-Type: application/json');
- echo json_encode(array(
- 'major_version'=>$blockHeader['major_version'],
- 'hash'=>$blockHeader['hash'],
- 'reward'=>$blockHeader['reward'],
- 'height'=>$blockHeader['height'],
- 'timestamp'=>$blockHeader['timestamp'],
- 'difficulty'=>$blockHeader['difficulty'],
- 'hashrate'=>$blockHeader['difficulty']*60*2,
- ));
-}
-
-
-
diff --git a/src_api/openAlias.php b/src_api/openAlias.php
deleted file mode 100644
index bf9a831b..00000000
--- a/src_api/openAlias.php
+++ /dev/null
@@ -1,60 +0,0 @@
-= 1){
- if(trim($subparts[0]) === 'recipient_address'){
- $recipient_address = trim($subparts[1]);
- }else if(trim($subparts[0]) === 'recipient_name'){
- $recipient_name = trim($subparts[1]);
- }
- }
- }
- }
- }
- }
-
-}
-if($recipient_address !== null){
- header('Content-Type: application/json');
- echo json_encode(array(
- 'address'=>$recipient_address,
- 'name'=>$recipient_name,
- ));
-}else{
- http_response_code(404);
-}
\ No newline at end of file
diff --git a/src_api/sendrawtransaction.php b/src_api/sendrawtransaction.php
deleted file mode 100644
index 4cdaa1fd..00000000
--- a/src_api/sendrawtransaction.php
+++ /dev/null
@@ -1,29 +0,0 @@
- 1, CURLOPT_URL => 'http://'.$daemonAddress.':'.$rpcPort.'/sendrawtransaction', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $body));
-
-$resp = curl_exec($curl);
-curl_close($curl);
-
-header('Content-Type: application/json');
-echo $resp;
\ No newline at end of file
diff --git a/src_client_api/api.js b/src_client_api/api.js
deleted file mode 100644
index 24883352..00000000
--- a/src_client_api/api.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2018, Gnock
- * Copyright (c) 2018, The Masari Project
- *
- * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-var MasariApi = new function(){
-
- this.ready = false;
- this.apiDomain = 'http://localhost:38090';
- this.timeoutErrorTime = 10000;
- this.timeoutError = 10000;
-
- var self = this;
-
- this.promisesResolves = {};
- this.promisesReject = {};
-
- this.iframe = null;
- this.popupParameters = undefined;
- // this.popupParameters = "menubar=no, status=no, scrollbars=no, menubar=no, width=200, height=100";
-
- this.registerPromise = function(eventName, resolve, reject){
- this.promisesReject[eventName] = reject;
- this.promisesResolves[eventName] = resolve;
- };
-
- this.unregisterPromise = function(eventName){
- if(typeof this.promisesReject[eventName] !== 'undefined') delete this.promisesReject[eventName];
- if(typeof this.promisesResolves[eventName] !== 'undefined') delete this.promisesResolves[eventName];
- };
-
- this.init = function(){
- window.addEventListener('message', function(e){
- if(e.origin === self.apiDomain){
- console.log(e);
- var eventType = e.data.type;
- var eventData = e.data.payload;
- console.log('event type:',eventType);
- // if(eventType === 'ready'){
- self.promisesResolves[eventType](eventData);
- self.unregisterPromise(eventType);
- // }
- }
- });
-
- return new Promise(function(resolve, reject){
- self.registerPromise('ready', resolve, reject);
- var ifrm = document.createElement("iframe");
- ifrm.setAttribute("src", self.apiDomain+"/api.html");
- ifrm.style.width = "0";
- ifrm.style.height = "0";
- ifrm.style.display = 'none';
-
- self.timeoutError = setTimeout(function(){
- self.promisesReject['ready'](eventData);
- self.unregisterPromise('ready');
- },self.timeoutErrorTime);
-
- ifrm.addEventListener('load', function(){
- clearTimeout(self.timeoutError);
- self.timeoutError = 0;
- });
-
- self.iframe = ifrm;
- document.body.appendChild(ifrm);
- });
- };
-
- this.hasWallet = function(){
- return new Promise(function(resolve, reject){
- self.registerPromise('hasWallet', resolve, reject);
- self.iframe.contentWindow.postMessage('hasWallet', '*');
- });
- };
-
- this.makeTransfer = function(options){
- var url = this.apiDomain+'/#!send?';
- if(typeof options.amount !== 'undefined')url += 'amount='+options.amount+'&';
- if(typeof options.address !== 'undefined')url += 'address='+options.address+'&';
- if(typeof options.description !== 'undefined')url += 'txDesc='+options.description+'&';
- if(typeof options.destName !== 'undefined')url += 'destName='+options.destName+'&';
-
- window.open(url,"Masari",this.popupParameters);
-
- return Promise.resolve();
- };
-
-};
\ No newline at end of file
diff --git a/src_client_api/index.html b/src_client_api/index.html
deleted file mode 100644
index b5e28744..00000000
--- a/src_client_api/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
- Title
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src_native/Makefile b/src_native/Makefile
deleted file mode 100644
index 53850723..00000000
--- a/src_native/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-TARGET = prog
-LIBS = -lm
-CC = em++ -O3 -s SINGLE_FILE=1 -s NO_FILESYSTEM=1 -s 'EXTRA_EXPORTED_RUNTIME_METHODS=["ccall", "cwrap"]' --llvm-lto 1 -s TOTAL_MEMORY=67108864 -s WASM=1 -s "BINARYEN_TRAP_MODE='allow'" -s EXPORTED_FUNCTIONS="['_generate_key_derivation', '_derive_public_key']" -s ASSERTIONS=1 --shell-file html_template/shell_minimal.html
-CFLAGS = -Wall -msse2
-
-
-# SINGLE_FILE=1
-
-# -s ASSERTIONS=1
-# -s SINGLE_FILE=1
-.PHONY: default all clean
-
-default: $(TARGET)
-all: default
-
-OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
-HEADERS = $(wildcard *.h)
-
-%.o: %.c $(HEADERS) $(CC) $(CFLAGS) -c $< -o $@
-
-.PRECIOUS: $(TARGET) $(OBJECTS)
-
-$(TARGET): $(OBJECTS)
- $(CC) $(OBJECTS) -Wall $(LIBS) -o cn.html
-
-clean:
- -rm -f *.o
- -rm -f $(TARGET)
diff --git a/src_native/base64.h b/src_native/base64.h
deleted file mode 100644
index e1362bde..00000000
--- a/src_native/base64.h
+++ /dev/null
@@ -1,258 +0,0 @@
-// https://github.com/tkislan/base64
-
-#ifndef BASE64_H
-#define BASE64_H
-
-#include
-
-const char kBase64Alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789+/";
-
-class Base64 {
- public:
- static bool Encode(const std::string &in, std::string *out) {
- int i = 0, j = 0;
- size_t enc_len = 0;
- unsigned char a3[3];
- unsigned char a4[4];
-
- out->resize(EncodedLength(in));
-
- int input_len = in.size();
- std::string::const_iterator input = in.begin();
-
- while (input_len--) {
- a3[i++] = *(input++);
- if (i == 3) {
- a3_to_a4(a4, a3);
-
- for (i = 0; i < 4; i++) {
- (*out)[enc_len++] = kBase64Alphabet[a4[i]];
- }
-
- i = 0;
- }
- }
-
- if (i) {
- for (j = i; j < 3; j++) {
- a3[j] = '\0';
- }
-
- a3_to_a4(a4, a3);
-
- for (j = 0; j < i + 1; j++) {
- (*out)[enc_len++] = kBase64Alphabet[a4[j]];
- }
-
- while ((i++ < 3)) {
- (*out)[enc_len++] = '=';
- }
- }
-
- return (enc_len == out->size());
- }
-
- static bool Encode(const char *input, size_t input_length, char *out, size_t out_length) {
- int i = 0, j = 0;
- char *out_begin = out;
- unsigned char a3[3];
- unsigned char a4[4];
-
- size_t encoded_length = EncodedLength(input_length);
-
- if (out_length < encoded_length) return false;
-
- while (input_length--) {
- a3[i++] = *input++;
- if (i == 3) {
- a3_to_a4(a4, a3);
-
- for (i = 0; i < 4; i++) {
- *out++ = kBase64Alphabet[a4[i]];
- }
-
- i = 0;
- }
- }
-
- if (i) {
- for (j = i; j < 3; j++) {
- a3[j] = '\0';
- }
-
- a3_to_a4(a4, a3);
-
- for (j = 0; j < i + 1; j++) {
- *out++ = kBase64Alphabet[a4[j]];
- }
-
- while ((i++ < 3)) {
- *out++ = '=';
- }
- }
-
- return (out == (out_begin + encoded_length));
- }
-
- static bool Decode(const std::string &in, std::string *out) {
- int i = 0, j = 0;
- size_t dec_len = 0;
- unsigned char a3[3];
- unsigned char a4[4];
-
- int input_len = in.size();
- std::string::const_iterator input = in.begin();
-
- out->resize(DecodedLength(in));
-
- while (input_len--) {
- if (*input == '=') {
- break;
- }
-
- a4[i++] = *(input++);
- if (i == 4) {
- for (i = 0; i <4; i++) {
- a4[i] = b64_lookup(a4[i]);
- }
-
- a4_to_a3(a3,a4);
-
- for (i = 0; i < 3; i++) {
- (*out)[dec_len++] = a3[i];
- }
-
- i = 0;
- }
- }
-
- if (i) {
- for (j = i; j < 4; j++) {
- a4[j] = '\0';
- }
-
- for (j = 0; j < 4; j++) {
- a4[j] = b64_lookup(a4[j]);
- }
-
- a4_to_a3(a3,a4);
-
- for (j = 0; j < i - 1; j++) {
- (*out)[dec_len++] = a3[j];
- }
- }
-
- return (dec_len == out->size());
- }
-
- static bool Decode(const char *input, size_t input_length, char *out, size_t out_length) {
- int i = 0, j = 0;
- char *out_begin = out;
- unsigned char a3[3];
- unsigned char a4[4];
-
- size_t decoded_length = DecodedLength(input, input_length);
-
- if (out_length < decoded_length) return false;
-
- while (input_length--) {
- if (*input == '=') {
- break;
- }
-
- a4[i++] = *(input++);
- if (i == 4) {
- for (i = 0; i <4; i++) {
- a4[i] = b64_lookup(a4[i]);
- }
-
- a4_to_a3(a3,a4);
-
- for (i = 0; i < 3; i++) {
- *out++ = a3[i];
- }
-
- i = 0;
- }
- }
-
- if (i) {
- for (j = i; j < 4; j++) {
- a4[j] = '\0';
- }
-
- for (j = 0; j < 4; j++) {
- a4[j] = b64_lookup(a4[j]);
- }
-
- a4_to_a3(a3,a4);
-
- for (j = 0; j < i - 1; j++) {
- *out++ = a3[j];
- }
- }
-
- return (out == (out_begin + decoded_length));
- }
-
- static int DecodedLength(const char *in, size_t in_length) {
- int numEq = 0;
-
- const char *in_end = in + in_length;
- while (*--in_end == '=') ++numEq;
-
- return ((6 * in_length) / 8) - numEq;
- }
-
- static int DecodedLength(const std::string &in) {
- int numEq = 0;
- int n = in.size();
-
- for (std::string::const_reverse_iterator it = in.rbegin(); *it == '='; ++it) {
- ++numEq;
- }
-
- return ((6 * n) / 8) - numEq;
- }
-
- inline static int EncodedLength(size_t length) {
- return (length + 2 - ((length + 2) % 3)) / 3 * 4;
- }
-
- inline static int EncodedLength(const std::string &in) {
- return EncodedLength(in.length());
- }
-
- inline static void StripPadding(std::string *in) {
- while (!in->empty() && *(in->rbegin()) == '=') in->resize(in->size() - 1);
- }
-
- private:
- static inline void a3_to_a4(unsigned char * a4, unsigned char * a3) {
- a4[0] = (a3[0] & 0xfc) >> 2;
- a4[1] = ((a3[0] & 0x03) << 4) + ((a3[1] & 0xf0) >> 4);
- a4[2] = ((a3[1] & 0x0f) << 2) + ((a3[2] & 0xc0) >> 6);
- a4[3] = (a3[2] & 0x3f);
- }
-
- static inline void a4_to_a3(unsigned char * a3, unsigned char * a4) {
- a3[0] = (a4[0] << 2) + ((a4[1] & 0x30) >> 4);
- a3[1] = ((a4[1] & 0xf) << 4) + ((a4[2] & 0x3c) >> 2);
- a3[2] = ((a4[2] & 0x3) << 6) + a4[3];
- }
-
- static inline unsigned char b64_lookup(unsigned char c) {
- if(c >='A' && c <='Z') return c - 'A';
- if(c >='a' && c <='z') return c - 71;
- if(c >='0' && c <='9') return c + 4;
- if(c == '+') return 62;
- if(c == '/') return 63;
- return 255;
- }
-};
-
-
-
-#endif // BASE64_H
diff --git a/src_native/blake.c b/src_native/blake.c
deleted file mode 100644
index 464a0dee..00000000
--- a/src_native/blake.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * The blake256_* and blake224_* functions are largely copied from
- * blake256_light.c and blake224_light.c from the BLAKE website:
- *
- * http://131002.net/blake/
- *
- * The hmac_* functions implement HMAC-BLAKE-256 and HMAC-BLAKE-224.
- * HMAC is specified by RFC 2104.
- */
-
-#include
-#include
-
-typedef struct {
- uint32_t h[8], s[4], t[2];
- int buflen, nullt;
- uint8_t buf[64];
-} state;
-
-typedef struct {
- state inner;
- state outer;
-} hmac_state;
-
-
-#define U8TO32(p) \
- (((uint32_t)((p)[0]) << 24) | ((uint32_t)((p)[1]) << 16) | \
- ((uint32_t)((p)[2]) << 8) | ((uint32_t)((p)[3]) ))
-#define U32TO8(p, v) \
- (p)[0] = (uint8_t)((v) >> 24); (p)[1] = (uint8_t)((v) >> 16); \
- (p)[2] = (uint8_t)((v) >> 8); (p)[3] = (uint8_t)((v) );
-
-const uint8_t sigma[][16] = {
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15},
- {14,10, 4, 8, 9,15,13, 6, 1,12, 0, 2,11, 7, 5, 3},
- {11, 8,12, 0, 5, 2,15,13,10,14, 3, 6, 7, 1, 9, 4},
- { 7, 9, 3, 1,13,12,11,14, 2, 6, 5,10, 4, 0,15, 8},
- { 9, 0, 5, 7, 2, 4,10,15,14, 1,11,12, 6, 8, 3,13},
- { 2,12, 6,10, 0,11, 8, 3, 4,13, 7, 5,15,14, 1, 9},
- {12, 5, 1,15,14,13, 4,10, 0, 7, 6, 3, 9, 2, 8,11},
- {13,11, 7,14,12, 1, 3, 9, 5, 0,15, 4, 8, 6, 2,10},
- { 6,15,14, 9,11, 3, 0, 8,12, 2,13, 7, 1, 4,10, 5},
- {10, 2, 8, 4, 7, 6, 1, 5,15,11, 9,14, 3,12,13, 0},
- { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15},
- {14,10, 4, 8, 9,15,13, 6, 1,12, 0, 2,11, 7, 5, 3},
- {11, 8,12, 0, 5, 2,15,13,10,14, 3, 6, 7, 1, 9, 4},
- { 7, 9, 3, 1,13,12,11,14, 2, 6, 5,10, 4, 0,15, 8}
-};
-
-const uint32_t cst[16] = {
- 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
- 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
- 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
- 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917
-};
-
-static const uint8_t padding[] = {
- 0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-};
-
-
-void blake256_compress(state *S, const uint8_t *block) {
- uint32_t v[16], m[16], i;
-
-#define ROT(x,n) (((x)<<(32-n))|((x)>>(n)))
-#define G(a,b,c,d,e) \
- v[a] += (m[sigma[i][e]] ^ cst[sigma[i][e+1]]) + v[b]; \
- v[d] = ROT(v[d] ^ v[a],16); \
- v[c] += v[d]; \
- v[b] = ROT(v[b] ^ v[c],12); \
- v[a] += (m[sigma[i][e+1]] ^ cst[sigma[i][e]])+v[b]; \
- v[d] = ROT(v[d] ^ v[a], 8); \
- v[c] += v[d]; \
- v[b] = ROT(v[b] ^ v[c], 7);
-
- for (i = 0; i < 16; ++i) m[i] = U8TO32(block + i * 4);
- for (i = 0; i < 8; ++i) v[i] = S->h[i];
- v[ 8] = S->s[0] ^ 0x243F6A88;
- v[ 9] = S->s[1] ^ 0x85A308D3;
- v[10] = S->s[2] ^ 0x13198A2E;
- v[11] = S->s[3] ^ 0x03707344;
- v[12] = 0xA4093822;
- v[13] = 0x299F31D0;
- v[14] = 0x082EFA98;
- v[15] = 0xEC4E6C89;
-
- if (S->nullt == 0) {
- v[12] ^= S->t[0];
- v[13] ^= S->t[0];
- v[14] ^= S->t[1];
- v[15] ^= S->t[1];
- }
-
- for (i = 0; i < 14; ++i) {
- G(0, 4, 8, 12, 0);
- G(1, 5, 9, 13, 2);
- G(2, 6, 10, 14, 4);
- G(3, 7, 11, 15, 6);
- G(3, 4, 9, 14, 14);
- G(2, 7, 8, 13, 12);
- G(0, 5, 10, 15, 8);
- G(1, 6, 11, 12, 10);
- }
-
- for (i = 0; i < 16; ++i) S->h[i % 8] ^= v[i];
- for (i = 0; i < 8; ++i) S->h[i] ^= S->s[i % 4];
-}
-
-void blake256_init(state *S) {
- S->h[0] = 0x6A09E667;
- S->h[1] = 0xBB67AE85;
- S->h[2] = 0x3C6EF372;
- S->h[3] = 0xA54FF53A;
- S->h[4] = 0x510E527F;
- S->h[5] = 0x9B05688C;
- S->h[6] = 0x1F83D9AB;
- S->h[7] = 0x5BE0CD19;
- S->t[0] = S->t[1] = S->buflen = S->nullt = 0;
- S->s[0] = S->s[1] = S->s[2] = S->s[3] = 0;
-}
-
-void blake224_init(state *S) {
- S->h[0] = 0xC1059ED8;
- S->h[1] = 0x367CD507;
- S->h[2] = 0x3070DD17;
- S->h[3] = 0xF70E5939;
- S->h[4] = 0xFFC00B31;
- S->h[5] = 0x68581511;
- S->h[6] = 0x64F98FA7;
- S->h[7] = 0xBEFA4FA4;
- S->t[0] = S->t[1] = S->buflen = S->nullt = 0;
- S->s[0] = S->s[1] = S->s[2] = S->s[3] = 0;
-}
-
-// datalen = number of bits
-void blake256_update(state *S, const uint8_t *data, uint64_t datalen) {
- int left = S->buflen >> 3;
- int fill = 64 - left;
-
- if (left && (((datalen >> 3) & 0x3F) >= (unsigned) fill)) {
- memcpy((void *) (S->buf + left), (void *) data, fill);
- S->t[0] += 512;
- if (S->t[0] == 0) S->t[1]++;
- blake256_compress(S, S->buf);
- data += fill;
- datalen -= (fill << 3);
- left = 0;
- }
-
- while (datalen >= 512) {
- S->t[0] += 512;
- if (S->t[0] == 0) S->t[1]++;
- blake256_compress(S, data);
- data += 64;
- datalen -= 512;
- }
-
- if (datalen > 0) {
- memcpy((void *) (S->buf + left), (void *) data, datalen >> 3);
- S->buflen = (left << 3) + datalen;
- } else {
- S->buflen = 0;
- }
-}
-
-// datalen = number of bits
-void blake224_update(state *S, const uint8_t *data, uint64_t datalen) {
- blake256_update(S, data, datalen);
-}
-
-void blake256_final_h(state *S, uint8_t *digest, uint8_t pa, uint8_t pb) {
- uint8_t msglen[8];
- uint32_t lo = S->t[0] + S->buflen, hi = S->t[1];
- if (lo < (unsigned) S->buflen) hi++;
- U32TO8(msglen + 0, hi);
- U32TO8(msglen + 4, lo);
-
- if (S->buflen == 440) { /* one padding byte */
- S->t[0] -= 8;
- blake256_update(S, &pa, 8);
- } else {
- if (S->buflen < 440) { /* enough space to fill the block */
- if (S->buflen == 0) S->nullt = 1;
- S->t[0] -= 440 - S->buflen;
- blake256_update(S, padding, 440 - S->buflen);
- } else { /* need 2 compressions */
- S->t[0] -= 512 - S->buflen;
- blake256_update(S, padding, 512 - S->buflen);
- S->t[0] -= 440;
- blake256_update(S, padding + 1, 440);
- S->nullt = 1;
- }
- blake256_update(S, &pb, 8);
- S->t[0] -= 8;
- }
- S->t[0] -= 64;
- blake256_update(S, msglen, 64);
-
- U32TO8(digest + 0, S->h[0]);
- U32TO8(digest + 4, S->h[1]);
- U32TO8(digest + 8, S->h[2]);
- U32TO8(digest + 12, S->h[3]);
- U32TO8(digest + 16, S->h[4]);
- U32TO8(digest + 20, S->h[5]);
- U32TO8(digest + 24, S->h[6]);
- U32TO8(digest + 28, S->h[7]);
-}
-
-void blake256_final(state *S, uint8_t *digest) {
- blake256_final_h(S, digest, 0x81, 0x01);
-}
-
-void blake224_final(state *S, uint8_t *digest) {
- blake256_final_h(S, digest, 0x80, 0x00);
-}
-
-// inlen = number of bytes
-void blake256_hash(uint8_t *out, const uint8_t *in, uint64_t inlen) {
- state S;
- blake256_init(&S);
- blake256_update(&S, in, inlen * 8);
- blake256_final(&S, out);
-}
-
-void blake(const uint8_t *input, uint64_t len, uint8_t *output)
-{
- blake256_hash(output, input, len);
-}
-
-// inlen = number of bytes
-void blake224_hash(uint8_t *out, const uint8_t *in, uint64_t inlen) {
- state S;
- blake224_init(&S);
- blake224_update(&S, in, inlen * 8);
- blake224_final(&S, out);
-}
-
-// keylen = number of bytes
-void hmac_blake256_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) {
- const uint8_t *key = _key;
- uint8_t keyhash[32];
- uint8_t pad[64];
- uint64_t i;
-
- if (keylen > 64) {
- blake256_hash(keyhash, key, keylen);
- key = keyhash;
- keylen = 32;
- }
-
- blake256_init(&S->inner);
- memset(pad, 0x36, 64);
- for (i = 0; i < keylen; ++i) {
- pad[i] ^= key[i];
- }
- blake256_update(&S->inner, pad, 512);
-
- blake256_init(&S->outer);
- memset(pad, 0x5c, 64);
- for (i = 0; i < keylen; ++i) {
- pad[i] ^= key[i];
- }
- blake256_update(&S->outer, pad, 512);
-
- memset(keyhash, 0, 32);
-}
-
-// keylen = number of bytes
-void hmac_blake224_init(hmac_state *S, const uint8_t *_key, uint64_t keylen) {
- const uint8_t *key = _key;
- uint8_t keyhash[32];
- uint8_t pad[64];
- uint64_t i;
-
- if (keylen > 64) {
- blake256_hash(keyhash, key, keylen);
- key = keyhash;
- keylen = 28;
- }
-
- blake224_init(&S->inner);
- memset(pad, 0x36, 64);
- for (i = 0; i < keylen; ++i) {
- pad[i] ^= key[i];
- }
- blake224_update(&S->inner, pad, 512);
-
- blake224_init(&S->outer);
- memset(pad, 0x5c, 64);
- for (i = 0; i < keylen; ++i) {
- pad[i] ^= key[i];
- }
- blake224_update(&S->outer, pad, 512);
-
- memset(keyhash, 0, 32);
-}
-
-// datalen = number of bits
-void hmac_blake256_update(hmac_state *S, const uint8_t *data, uint64_t datalen) {
- // update the inner state
- blake256_update(&S->inner, data, datalen);
-}
-
-// datalen = number of bits
-void hmac_blake224_update(hmac_state *S, const uint8_t *data, uint64_t datalen) {
- // update the inner state
- blake224_update(&S->inner, data, datalen);
-}
-
-void hmac_blake256_final(hmac_state *S, uint8_t *digest) {
- uint8_t ihash[32];
- blake256_final(&S->inner, ihash);
- blake256_update(&S->outer, ihash, 256);
- blake256_final(&S->outer, digest);
- memset(ihash, 0, 32);
-}
-
-void hmac_blake224_final(hmac_state *S, uint8_t *digest) {
- uint8_t ihash[32];
- blake224_final(&S->inner, ihash);
- blake224_update(&S->outer, ihash, 224);
- blake224_final(&S->outer, digest);
- memset(ihash, 0, 32);
-}
-
-// keylen = number of bytes; inlen = number of bytes
-void hmac_blake256_hash(uint8_t *out, const uint8_t *key, uint64_t keylen, const uint8_t *in, uint64_t inlen) {
- hmac_state S;
- hmac_blake256_init(&S, key, keylen);
- hmac_blake256_update(&S, in, inlen * 8);
- hmac_blake256_final(&S, out);
-}
-
-// keylen = number of bytes; inlen = number of bytes
-void hmac_blake224_hash(uint8_t *out, const uint8_t *key, uint64_t keylen, const uint8_t *in, uint64_t inlen) {
- hmac_state S;
- hmac_blake224_init(&S, key, keylen);
- hmac_blake224_update(&S, in, inlen * 8);
- hmac_blake224_final(&S, out);
-}
diff --git a/src_native/blake.h b/src_native/blake.h
deleted file mode 100644
index 8fa43f3b..00000000
--- a/src_native/blake.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef BLAKE_H
-#define BLAKE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void blake(const uint8_t *input, uint64_t len, uint8_t *output);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/src_native/blake.o b/src_native/blake.o
deleted file mode 100644
index 3081b64a..00000000
Binary files a/src_native/blake.o and /dev/null differ
diff --git a/src_native/cn.html b/src_native/cn.html
deleted file mode 100644
index 400e23bc..00000000
--- a/src_native/cn.html
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/src_native/common/CMakeLists.txt b/src_native/common/CMakeLists.txt
deleted file mode 100644
index 66fd8d7a..00000000
--- a/src_native/common/CMakeLists.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright (c) 2014-2018, The Monero Project
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification, are
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice, this list of
-# conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice, this list
-# of conditions and the following disclaimer in the documentation and/or other
-# materials provided with the distribution.
-#
-# 3. Neither the name of the copyright holder nor the names of its contributors may be
-# used to endorse or promote products derived from this software without specific
-# prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR})
-
-set(common_sources
- base58.cpp
- command_line.cpp
- dns_utils.cpp
- download.cpp
- util.cpp
- i18n.cpp
- password.cpp
- perf_timer.cpp
- threadpool.cpp
- updates.cpp)
-
-if (STACK_TRACE)
- list(APPEND common_sources stack_trace.cpp)
-endif()
-
-set(common_headers)
-
-set(common_private_headers
- apply_permutation.h
- base58.h
- boost_serialization_helper.h
- command_line.h
- common_fwd.h
- dns_utils.h
- download.h
- http_connection.h
- int-util.h
- pod-class.h
- rpc_client.h
- scoped_message_writer.h
- unordered_containers_boost_serialization.h
- util.h
- varint.h
- i18n.h
- password.h
- perf_timer.h
- stack_trace.h
- threadpool.h
- updates.h)
-
-monero_private_headers(common
- ${common_private_headers})
-monero_add_library(common
- ${common_sources}
- ${common_headers}
- ${common_private_headers}
- DEPENDS generate_translations_header)
-target_link_libraries(common
- PUBLIC
- epee
- cncrypto
- ${UNBOUND_LIBRARY}
- ${LIBUNWIND_LIBRARIES}
- ${Boost_DATE_TIME_LIBRARY}
- ${Boost_FILESYSTEM_LIBRARY}
- ${Boost_SYSTEM_LIBRARY}
- ${Boost_THREAD_LIBRARY}
- ${Boost_REGEX_LIBRARY}
- PRIVATE
- ${OPENSSL_LIBRARIES}
- ${EXTRA_LIBRARIES})
-
-#monero_install_headers(common
-# ${common_headers})
diff --git a/src_native/common/apply_permutation.h b/src_native/common/apply_permutation.h
deleted file mode 100644
index ff346bab..00000000
--- a/src_native/common/apply_permutation.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) 2017-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Most of this file is originally copyright (c) 2017 Raymond Chen, Microsoft
-// This algorithm is adapted from Raymond Chen's code:
-// https://blogs.msdn.microsoft.com/oldnewthing/20170109-00/?p=95145
-
-#pragma once
-
-#include
-#include
-#include "misc_log_ex.h"
-
-namespace tools
-{
-
-template
-void apply_permutation(std::vector permutation, const F &swap)
-{
- //sanity check
- for (size_t n = 0; n < permutation.size(); ++n)
- CHECK_AND_ASSERT_THROW_MES(std::find(permutation.begin(), permutation.end(), n) != permutation.end(), "Bad permutation");
-
- for (size_t i = 0; i < permutation.size(); ++i)
- {
- size_t current = i;
- while (i != permutation[current])
- {
- size_t next = permutation[current];
- swap(current, next);
- permutation[current] = current;
- current = next;
- }
- permutation[current] = current;
- }
-}
-
-template
-void apply_permutation(const std::vector &permutation, std::vector &v)
-{
- CHECK_AND_ASSERT_THROW_MES(permutation.size() == v.size(), "Mismatched vector sizes");
- apply_permutation(permutation, [&v](size_t i0, size_t i1){ std::swap(v[i0], v[i1]); });
-}
-
-}
diff --git a/src_native/common/base58.cpp b/src_native/common/base58.cpp
deleted file mode 100644
index 75556cad..00000000
--- a/src_native/common/base58.cpp
+++ /dev/null
@@ -1,272 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
-
-#include "base58.h"
-
-#include
-#include
-#include
-
-#include "crypto/hash.h"
-#include "int-util.h"
-#include "util.h"
-#include "varint.h"
-
-namespace tools
-{
- namespace base58
- {
- namespace
- {
- const char alphabet[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
- const size_t alphabet_size = sizeof(alphabet) - 1;
- const size_t encoded_block_sizes[] = {0, 2, 3, 5, 6, 7, 9, 10, 11};
- const size_t full_block_size = sizeof(encoded_block_sizes) / sizeof(encoded_block_sizes[0]) - 1;
- const size_t full_encoded_block_size = encoded_block_sizes[full_block_size];
- const size_t addr_checksum_size = 4;
-
- struct reverse_alphabet
- {
- reverse_alphabet()
- {
- m_data.resize(alphabet[alphabet_size - 1] - alphabet[0] + 1, -1);
-
- for (size_t i = 0; i < alphabet_size; ++i)
- {
- size_t idx = static_cast(alphabet[i] - alphabet[0]);
- m_data[idx] = static_cast(i);
- }
- }
-
- int operator()(char letter) const
- {
- size_t idx = static_cast(letter - alphabet[0]);
- return idx < m_data.size() ? m_data[idx] : -1;
- }
-
- static reverse_alphabet instance;
-
- private:
- std::vector m_data;
- };
-
- reverse_alphabet reverse_alphabet::instance;
-
- struct decoded_block_sizes
- {
- decoded_block_sizes()
- {
- m_data.resize(encoded_block_sizes[full_block_size] + 1, -1);
- for (size_t i = 0; i <= full_block_size; ++i)
- {
- m_data[encoded_block_sizes[i]] = static_cast(i);
- }
- }
-
- int operator()(size_t encoded_block_size) const
- {
- assert(encoded_block_size <= full_encoded_block_size);
- return m_data[encoded_block_size];
- }
-
- static decoded_block_sizes instance;
-
- private:
- std::vector m_data;
- };
-
- decoded_block_sizes decoded_block_sizes::instance;
-
- uint64_t uint_8be_to_64(const uint8_t* data, size_t size)
- {
- assert(1 <= size && size <= sizeof(uint64_t));
-
- uint64_t res = 0;
- switch (9 - size)
- {
- case 1: res |= *data++; /* FALLTHRU */
- case 2: res <<= 8; res |= *data++; /* FALLTHRU */
- case 3: res <<= 8; res |= *data++; /* FALLTHRU */
- case 4: res <<= 8; res |= *data++; /* FALLTHRU */
- case 5: res <<= 8; res |= *data++; /* FALLTHRU */
- case 6: res <<= 8; res |= *data++; /* FALLTHRU */
- case 7: res <<= 8; res |= *data++; /* FALLTHRU */
- case 8: res <<= 8; res |= *data; break;
- default: assert(false);
- }
-
- return res;
- }
-
- void uint_64_to_8be(uint64_t num, size_t size, uint8_t* data)
- {
- assert(1 <= size && size <= sizeof(uint64_t));
-
- uint64_t num_be = SWAP64BE(num);
- memcpy(data, reinterpret_cast(&num_be) + sizeof(uint64_t) - size, size);
- }
-
- void encode_block(const char* block, size_t size, char* res)
- {
- assert(1 <= size && size <= full_block_size);
-
- uint64_t num = uint_8be_to_64(reinterpret_cast(block), size);
- int i = static_cast(encoded_block_sizes[size]) - 1;
- while (0 < num)
- {
- uint64_t remainder = num % alphabet_size;
- num /= alphabet_size;
- res[i] = alphabet[remainder];
- --i;
- }
- }
-
- bool decode_block(const char* block, size_t size, char* res)
- {
- assert(1 <= size && size <= full_encoded_block_size);
-
- int res_size = decoded_block_sizes::instance(size);
- if (res_size <= 0)
- return false; // Invalid block size
-
- uint64_t res_num = 0;
- uint64_t order = 1;
- for (size_t i = size - 1; i < size; --i)
- {
- int digit = reverse_alphabet::instance(block[i]);
- if (digit < 0)
- return false; // Invalid symbol
-
- uint64_t product_hi;
- uint64_t tmp = res_num + mul128(order, digit, &product_hi);
- if (tmp < res_num || 0 != product_hi)
- return false; // Overflow
-
- res_num = tmp;
- order *= alphabet_size; // Never overflows, 58^10 < 2^64
- }
-
- if (static_cast(res_size) < full_block_size && (UINT64_C(1) << (8 * res_size)) <= res_num)
- return false; // Overflow
-
- uint_64_to_8be(res_num, res_size, reinterpret_cast(res));
-
- return true;
- }
- }
-
- std::string encode(const std::string& data)
- {
- if (data.empty())
- return std::string();
-
- size_t full_block_count = data.size() / full_block_size;
- size_t last_block_size = data.size() % full_block_size;
- size_t res_size = full_block_count * full_encoded_block_size + encoded_block_sizes[last_block_size];
-
- std::string res(res_size, alphabet[0]);
- for (size_t i = 0; i < full_block_count; ++i)
- {
- encode_block(data.data() + i * full_block_size, full_block_size, &res[i * full_encoded_block_size]);
- }
-
- if (0 < last_block_size)
- {
- encode_block(data.data() + full_block_count * full_block_size, last_block_size, &res[full_block_count * full_encoded_block_size]);
- }
-
- return res;
- }
-
- bool decode(const std::string& enc, std::string& data)
- {
- if (enc.empty())
- {
- data.clear();
- return true;
- }
-
- size_t full_block_count = enc.size() / full_encoded_block_size;
- size_t last_block_size = enc.size() % full_encoded_block_size;
- int last_block_decoded_size = decoded_block_sizes::instance(last_block_size);
- if (last_block_decoded_size < 0)
- return false; // Invalid enc length
- size_t data_size = full_block_count * full_block_size + last_block_decoded_size;
-
- data.resize(data_size, 0);
- for (size_t i = 0; i < full_block_count; ++i)
- {
- if (!decode_block(enc.data() + i * full_encoded_block_size, full_encoded_block_size, &data[i * full_block_size]))
- return false;
- }
-
- if (0 < last_block_size)
- {
- if (!decode_block(enc.data() + full_block_count * full_encoded_block_size, last_block_size,
- &data[full_block_count * full_block_size]))
- return false;
- }
-
- return true;
- }
-
- std::string encode_addr(uint64_t tag, const std::string& data)
- {
- std::string buf = get_varint_data(tag);
- buf += data;
- crypto::hash hash = crypto::cn_fast_hash(buf.data(), buf.size());
- const char* hash_data = reinterpret_cast(&hash);
- buf.append(hash_data, addr_checksum_size);
- return encode(buf);
- }
-
- bool decode_addr(std::string addr, uint64_t& tag, std::string& data)
- {
- std::string addr_data;
- bool r = decode(addr, addr_data);
- if (!r) return false;
- if (addr_data.size() <= addr_checksum_size) return false;
-
- std::string checksum(addr_checksum_size, '\0');
- checksum = addr_data.substr(addr_data.size() - addr_checksum_size);
-
- addr_data.resize(addr_data.size() - addr_checksum_size);
- crypto::hash hash = crypto::cn_fast_hash(addr_data.data(), addr_data.size());
- std::string expected_checksum(reinterpret_cast(&hash), addr_checksum_size);
- if (expected_checksum != checksum) return false;
-
- int read = tools::read_varint(addr_data.begin(), addr_data.end(), tag);
- if (read <= 0) return false;
-
- data = addr_data.substr(read);
- return true;
- }
- }
-}
diff --git a/src_native/common/base58.h b/src_native/common/base58.h
deleted file mode 100644
index 02ca9695..00000000
--- a/src_native/common/base58.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
-
-#pragma once
-
-#include
-#include
-
-namespace tools
-{
- namespace base58
- {
- std::string encode(const std::string& data);
- bool decode(const std::string& enc, std::string& data);
-
- std::string encode_addr(uint64_t tag, const std::string& data);
- bool decode_addr(std::string addr, uint64_t& tag, std::string& data);
- }
-}
diff --git a/src_native/common/boost_serialization_helper.h b/src_native/common/boost_serialization_helper.h
deleted file mode 100644
index 3f5c623f..00000000
--- a/src_native/common/boost_serialization_helper.h
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
-
-#pragma once
-
-#include
-#include
-#include
-#include
-
-
-namespace tools
-{
- template
- bool serialize_obj_to_file(t_object& obj, const std::string& file_path)
- {
- TRY_ENTRY();
-#if defined(_MSC_VER)
- // Need to know HANDLE of file to call FlushFileBuffers
- HANDLE data_file_handle = ::CreateFile(file_path.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- if (INVALID_HANDLE_VALUE == data_file_handle)
- return false;
-
- int data_file_descriptor = _open_osfhandle((intptr_t)data_file_handle, 0);
- if (-1 == data_file_descriptor)
- {
- ::CloseHandle(data_file_handle);
- return false;
- }
-
- const std::unique_ptr data_file_file{_fdopen(data_file_descriptor, "wb")};
- if (nullptr == data_file_file)
- {
- // Call CloseHandle is not necessary
- _close(data_file_descriptor);
- return false;
- }
-
- // HACK: undocumented constructor, this code may not compile
- std::ofstream data_file(data_file_file.get());
- if (data_file.fail())
- {
- // Call CloseHandle and _close are not necessary
- return false;
- }
-#else
- std::ofstream data_file;
- data_file.open(file_path , std::ios_base::binary | std::ios_base::out| std::ios::trunc);
- if (data_file.fail())
- return false;
-#endif
-
- boost::archive::portable_binary_oarchive a(data_file);
- a << obj;
- if (data_file.fail())
- return false;
-
- data_file.flush();
-#if defined(_MSC_VER)
- // To make sure the file is fully stored on disk
- ::FlushFileBuffers(data_file_handle);
-#endif
-
- return true;
- CATCH_ENTRY_L0("serialize_obj_to_file", false);
- }
-
- template
- bool unserialize_obj_from_file(t_object& obj, const std::string& file_path)
- {
- TRY_ENTRY();
-
- std::ifstream data_file;
- data_file.open( file_path, std::ios_base::binary | std::ios_base::in);
- if(data_file.fail())
- return false;
- try
- {
- // first try reading in portable mode
- boost::archive::portable_binary_iarchive a(data_file);
- a >> obj;
- }
- catch(...)
- {
- // if failed, try reading in unportable mode
- boost::filesystem::copy_file(file_path, file_path + ".unportable", boost::filesystem::copy_option::overwrite_if_exists);
- data_file.close();
- data_file.open( file_path, std::ios_base::binary | std::ios_base::in);
- if(data_file.fail())
- return false;
- boost::archive::binary_iarchive a(data_file);
- a >> obj;
- }
- return !data_file.fail();
- CATCH_ENTRY_L0("unserialize_obj_from_file", false);
- }
-}
diff --git a/src_native/common/command_line.cpp b/src_native/common/command_line.cpp
deleted file mode 100644
index 7980b381..00000000
--- a/src_native/common/command_line.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
-
-#include "command_line.h"
-#include
-#include
-#include
-#include "common/i18n.h"
-#include "cryptonote_config.h"
-#include "string_tools.h"
-
-namespace command_line
-{
- namespace
- {
- const char* tr(const char* str)
- {
- return i18n_translate(str, "command_line");
- }
- }
-
- bool is_yes(const std::string& str)
- {
- if (str == "y" || str == "Y")
- return true;
-
- boost::algorithm::is_iequal ignore_case{};
- if (boost::algorithm::equals("yes", str, ignore_case))
- return true;
- if (boost::algorithm::equals(command_line::tr("yes"), str, ignore_case))
- return true;
-
- return false;
- }
-
- bool is_no(const std::string& str)
- {
- if (str == "n" || str == "N")
- return true;
-
- boost::algorithm::is_iequal ignore_case{};
- if (boost::algorithm::equals("no", str, ignore_case))
- return true;
- if (boost::algorithm::equals(command_line::tr("no"), str, ignore_case))
- return true;
-
- return false;
- }
-
- const arg_descriptor arg_help = {"help", "Produce help message"};
- const arg_descriptor arg_version = {"version", "Output version information"};
-}
diff --git a/src_native/common/command_line.h b/src_native/common/command_line.h
deleted file mode 100644
index 3a869bb2..00000000
--- a/src_native/common/command_line.h
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
-
-#pragma once
-
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include "include_base_utils.h"
-
-namespace command_line
-{
-
- //! \return True if `str` is `is_iequal("y" || "yes" || `tr("yes"))`.
- bool is_yes(const std::string& str);
- //! \return True if `str` is `is_iequal("n" || "no" || `tr("no"))`.
- bool is_no(const std::string& str);
-
- template
- struct arg_descriptor;
-
- template
- struct arg_descriptor
- {
- typedef T value_type;
-
- const char* name;
- const char* description;
- T default_value;
- bool not_use_default;
- };
-
- template
- struct arg_descriptor, false>
- {
- typedef std::vector value_type;
-
- const char* name;
- const char* description;
- };
-
- template
- struct arg_descriptor
- {
- static_assert(!std::is_same::value, "Boolean switch can't be required");
-
- typedef T value_type;
-
- const char* name;
- const char* description;
- };
-
- template
- struct arg_descriptor
- {
- typedef T value_type;
-
- const char* name;
- const char* description;
-
- T default_value;
-
- const arg_descriptor& ref;
- std::function depf;
-
- bool not_use_default;
- };
-
- template
- struct arg_descriptor
- {
- typedef T value_type;
-
- const char* name;
- const char* description;
-
- T default_value;
-
- std::array *, NUM_DEPS> ref;
- std::function, bool, T)> depf;
-
- bool not_use_default;
- };
-
- template
- boost::program_options::typed_value* make_semantic(const arg_descriptor& /*arg*/)
- {
- return boost::program_options::value()->required();
- }
-
- template
- boost::program_options::typed_value* make_semantic(const arg_descriptor& arg)
- {
- auto semantic = boost::program_options::value();
- if (!arg.not_use_default)
- semantic->default_value(arg.default_value);
- return semantic;
- }
-
- template
- boost::program_options::typed_value* make_semantic(const arg_descriptor& arg)
- {
- auto semantic = boost::program_options::value();
- if (!arg.not_use_default) {
- std::ostringstream format;
- format << arg.depf(false, true, arg.default_value) << ", "
- << arg.depf(true, true, arg.default_value) << " if '"
- << arg.ref.name << "'";
- semantic->default_value(arg.depf(arg.ref.default_value, true, arg.default_value), format.str());
- }
- return semantic;
- }
-
- template
- boost::program_options::typed_value* make_semantic(const arg_descriptor& arg)
- {
- auto semantic = boost::program_options::value();
- if (!arg.not_use_default) {
- std::array depval;
- depval.fill(false);
- std::ostringstream format;
- format << arg.depf(depval, true, arg.default_value);
- for (size_t i = 0; i < depval.size(); ++i)
- {
- depval.fill(false);
- depval[i] = true;
- format << ", " << arg.depf(depval, true, arg.default_value) << " if '" << arg.ref[i]->name << "'";
- }
- for (size_t i = 0; i < depval.size(); ++i)
- depval[i] = arg.ref[i]->default_value;
- semantic->default_value(arg.depf(depval, true, arg.default_value), format.str());
- }
- return semantic;
- }
-
- template
- boost::program_options::typed_value* make_semantic(const arg_descriptor& arg, const T& def)
- {
- auto semantic = boost::program_options::value();
- if (!arg.not_use_default)
- semantic->default_value(def);
- return semantic;
- }
-
- template
- boost::program_options::typed_value, char>* make_semantic(const arg_descriptor, false>& /*arg*/)
- {
- auto semantic = boost::program_options::value< std::vector >();
- semantic->default_value(std::vector(), "");
- return semantic;
- }
-
- template
- void add_arg(boost::program_options::options_description& description, const arg_descriptor& arg, bool unique = true)
- {
- if (0 != description.find_nothrow(arg.name, false))
- {
- CHECK_AND_ASSERT_MES(!unique, void(), "Argument already exists: " << arg.name);
- return;
- }
-
- description.add_options()(arg.name, make_semantic(arg), arg.description);
- }
-
- template
- void add_arg(boost::program_options::options_description& description, const arg_descriptor& arg, const T& def, bool unique = true)
- {
- if (0 != description.find_nothrow(arg.name, false))
- {
- CHECK_AND_ASSERT_MES(!unique, void(), "Argument already exists: " << arg.name);
- return;
- }
-
- description.add_options()(arg.name, make_semantic(arg, def), arg.description);
- }
-
- template<>
- inline void add_arg(boost::program_options::options_description& description, const arg_descriptor& arg, bool unique)
- {
- if (0 != description.find_nothrow(arg.name, false))
- {
- CHECK_AND_ASSERT_MES(!unique, void(), "Argument already exists: " << arg.name);
- return;
- }
-
- description.add_options()(arg.name, boost::program_options::bool_switch(), arg.description);
- }
-
- template
- boost::program_options::basic_parsed_options parse_command_line(int argc, const charT* const argv[],
- const boost::program_options::options_description& desc, bool allow_unregistered = false)
- {
- auto parser = boost::program_options::command_line_parser(argc, argv);
- parser.options(desc);
- if (allow_unregistered)
- {
- parser.allow_unregistered();
- }
- return parser.run();
- }
-
- template
- bool handle_error_helper(const boost::program_options::options_description& desc, F parser)
- {
- try
- {
- return parser();
- }
- catch (const std::exception& e)
- {
- std::cerr << "Failed to parse arguments: " << e.what() << std::endl;
- std::cerr << desc << std::endl;
- return false;
- }
- catch (...)
- {
- std::cerr << "Failed to parse arguments: unknown exception" << std::endl;
- std::cerr << desc << std::endl;
- return false;
- }
- }
-
- template
- typename std::enable_if::value, bool>::type has_arg(const boost::program_options::variables_map& vm, const arg_descriptor& arg)
- {
- auto value = vm[arg.name];
- return !value.empty();
- }
-
- template
- bool is_arg_defaulted(const boost::program_options::variables_map& vm, const arg_descriptor& arg)
- {
- return vm[arg.name].defaulted();
- }
-
- template
- T get_arg(const boost::program_options::variables_map& vm, const arg_descriptor& arg)
- {
- return arg.depf(get_arg(vm, arg.ref), is_arg_defaulted(vm, arg), vm[arg.name].template as());
- }
-
- template
- T get_arg(const boost::program_options::variables_map& vm, const arg_descriptor& arg)
- {
- std::array depval;
- for (size_t i = 0; i < depval.size(); ++i)
- depval[i] = get_arg(vm, *arg.ref[i]);
- return arg.depf(depval, is_arg_defaulted(vm, arg), vm[arg.name].template as());
- }
-
- template
- T get_arg(const boost::program_options::variables_map& vm, const arg_descriptor& arg)
- {
- return vm[arg.name].template as();
- }
-
- template
- inline bool has_arg(const boost::program_options::variables_map& vm, const arg_descriptor& arg)
- {
- return get_arg(vm, arg);
- }
-
-
- extern const arg_descriptor arg_help;
- extern const arg_descriptor arg_version;
-}
diff --git a/src_native/common/common_fwd.h b/src_native/common/common_fwd.h
deleted file mode 100644
index 2924d9cb..00000000
--- a/src_native/common/common_fwd.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
-
-#pragma once
-
-namespace tools
-{
- class DNSResolver;
- struct login;
- class password_container;
- class t_http_connection;
- class threadpool;
-}
diff --git a/src_native/common/dns_utils.cpp b/src_native/common/dns_utils.cpp
deleted file mode 100644
index ea287a01..00000000
--- a/src_native/common/dns_utils.cpp
+++ /dev/null
@@ -1,570 +0,0 @@
-// Copyright (c) 2017-2018, The Masari Project
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include "common/dns_utils.h"
-// check local first (in the event of static or in-source compilation of libunbound)
-#include "unbound.h"
-
-#include
-#include "include_base_utils.h"
-#include
-#include
-#include
-#include
-#include
-using namespace epee;
-namespace bf = boost::filesystem;
-
-#undef MONERO_DEFAULT_LOG_CATEGORY
-#define MONERO_DEFAULT_LOG_CATEGORY "net.dns"
-
-static const char *DEFAULT_DNS_PUBLIC_ADDR[] =
-{
- "194.150.168.168", // CCC (Germany)
- "81.3.27.54", // Lightning Wire Labs (Germany)
- "31.3.135.232", // OpenNIC (Switzerland)
- "80.67.169.40", // FDN (France)
- "209.58.179.186", // Cyberghost (Singapore)
-};
-
-static boost::mutex instance_lock;
-
-namespace
-{
-
-/*
- * The following two functions were taken from unbound-anchor.c, from
- * the unbound library packaged with this source. The license and source
- * can be found in $PROJECT_ROOT/external/unbound
- */
-
-/* Cert builtin commented out until it's used, as the compiler complains
-
-// return the built in root update certificate
-static const char*
-get_builtin_cert(void)
-{
- return
-// The ICANN CA fetched at 24 Sep 2010. Valid to 2028
-"-----BEGIN CERTIFICATE-----\n"
-"MIIDdzCCAl+gAwIBAgIBATANBgkqhkiG9w0BAQsFADBdMQ4wDAYDVQQKEwVJQ0FO\n"
-"TjEmMCQGA1UECxMdSUNBTk4gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFjAUBgNV\n"
-"BAMTDUlDQU5OIFJvb3QgQ0ExCzAJBgNVBAYTAlVTMB4XDTA5MTIyMzA0MTkxMloX\n"
-"DTI5MTIxODA0MTkxMlowXTEOMAwGA1UEChMFSUNBTk4xJjAkBgNVBAsTHUlDQU5O\n"
-"IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1JQ0FOTiBSb290IENB\n"
-"MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKDb\n"
-"cLhPNNqc1NB+u+oVvOnJESofYS9qub0/PXagmgr37pNublVThIzyLPGCJ8gPms9S\n"
-"G1TaKNIsMI7d+5IgMy3WyPEOECGIcfqEIktdR1YWfJufXcMReZwU4v/AdKzdOdfg\n"
-"ONiwc6r70duEr1IiqPbVm5T05l1e6D+HkAvHGnf1LtOPGs4CHQdpIUcy2kauAEy2\n"
-"paKcOcHASvbTHK7TbbvHGPB+7faAztABLoneErruEcumetcNfPMIjXKdv1V1E3C7\n"
-"MSJKy+jAqqQJqjZoQGB0necZgUMiUv7JK1IPQRM2CXJllcyJrm9WFxY0c1KjBO29\n"
-"iIKK69fcglKcBuFShUECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B\n"
-"Af8EBAMCAf4wHQYDVR0OBBYEFLpS6UmDJIZSL8eZzfyNa2kITcBQMA0GCSqGSIb3\n"
-"DQEBCwUAA4IBAQAP8emCogqHny2UYFqywEuhLys7R9UKmYY4suzGO4nkbgfPFMfH\n"
-"6M+Zj6owwxlwueZt1j/IaCayoKU3QsrYYoDRolpILh+FPwx7wseUEV8ZKpWsoDoD\n"
-"2JFbLg2cfB8u/OlE4RYmcxxFSmXBg0yQ8/IoQt/bxOcEEhhiQ168H2yE5rxJMt9h\n"
-"15nu5JBSewrCkYqYYmaxyOC3WrVGfHZxVI7MpIFcGdvSb2a1uyuua8l0BKgk3ujF\n"
-"0/wsHNeP22qNyVO+XVBzrM8fk8BSUFuiT/6tZTYXRtEt5aKQZgXbKU5dUF3jT9qg\n"
-"j/Br5BZw3X/zd325TvnswzMC1+ljLzHnQGGk\n"
-"-----END CERTIFICATE-----\n"
- ;
-}
-*/
-
-/** return the built in root DS trust anchor */
-static const char*
-get_builtin_ds(void)
-{
- return
-". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5\n";
-}
-
-/************************************************************
- ************************************************************
- ***********************************************************/
-
-} // anonymous namespace
-
-namespace tools
-{
-
-// fuck it, I'm tired of dealing with getnameinfo()/inet_ntop/etc
-std::string ipv4_to_string(const char* src, size_t len)
-{
- assert(len >= 4);
-
- std::stringstream ss;
- unsigned int bytes[4];
- for (int i = 0; i < 4; i++)
- {
- unsigned char a = src[i];
- bytes[i] = a;
- }
- ss << bytes[0] << "."
- << bytes[1] << "."
- << bytes[2] << "."
- << bytes[3];
- return ss.str();
-}
-
-// this obviously will need to change, but is here to reflect the above
-// stop-gap measure and to make the tests pass at least...
-std::string ipv6_to_string(const char* src, size_t len)
-{
- assert(len >= 8);
-
- std::stringstream ss;
- unsigned int bytes[8];
- for (int i = 0; i < 8; i++)
- {
- unsigned char a = src[i];
- bytes[i] = a;
- }
- ss << bytes[0] << ":"
- << bytes[1] << ":"
- << bytes[2] << ":"
- << bytes[3] << ":"
- << bytes[4] << ":"
- << bytes[5] << ":"
- << bytes[6] << ":"
- << bytes[7];
- return ss.str();
-}
-
-std::string txt_to_string(const char* src, size_t len)
-{
- return std::string(src+1, len-1);
-}
-
-// custom smart pointer.
-// TODO: see if std::auto_ptr and the like support custom destructors
-template
-class scoped_ptr
-{
-public:
- scoped_ptr():
- ptr(nullptr)
- {
- }
- scoped_ptr(type *p):
- ptr(p)
- {
- }
- ~scoped_ptr()
- {
- freefunc(ptr);
- }
- operator type *() { return ptr; }
- type **operator &() { return &ptr; }
- type *operator->() { return ptr; }
- operator const type*() const { return &ptr; }
-
-private:
- type* ptr;
-};
-
-typedef class scoped_ptr ub_result_ptr;
-
-struct DNSResolverData
-{
- ub_ctx* m_ub_context;
-};
-
-// work around for bug https://www.nlnetlabs.nl/bugs-script/show_bug.cgi?id=515 needed for it to compile on e.g. Debian 7
-class string_copy {
-public:
- string_copy(const char *s): str(strdup(s)) {}
- ~string_copy() { free(str); }
- operator char*() { return str; }
-
-public:
- char *str;
-};
-
-DNSResolver::DNSResolver() : m_data(new DNSResolverData())
-{
- int use_dns_public = 0;
- std::vector dns_public_addr;
- if (auto res = getenv("DNS_PUBLIC"))
- {
- dns_public_addr = tools::dns_utils::parse_dns_public(res);
- if (!dns_public_addr.empty())
- {
- MGINFO("Using public DNS server(s): " << boost::join(dns_public_addr, ", ") << " (TCP)");
- use_dns_public = 1;
- }
- else
- {
- MERROR("Failed to parse DNS_PUBLIC");
- }
- }
-
- // init libunbound context
- m_data->m_ub_context = ub_ctx_create();
-
- if (use_dns_public)
- {
- for (const auto &ip: dns_public_addr)
- ub_ctx_set_fwd(m_data->m_ub_context, ip.c_str());
- ub_ctx_set_option(m_data->m_ub_context, string_copy("do-udp:"), string_copy("no"));
- ub_ctx_set_option(m_data->m_ub_context, string_copy("do-tcp:"), string_copy("yes"));
- }
- else {
- // look for "/etc/resolv.conf" and "/etc/hosts" or platform equivalent
- ub_ctx_resolvconf(m_data->m_ub_context, NULL);
- ub_ctx_hosts(m_data->m_ub_context, NULL);
- }
-
- ub_ctx_add_ta(m_data->m_ub_context, string_copy(::get_builtin_ds()));
-}
-
-DNSResolver::~DNSResolver()
-{
- if (m_data)
- {
- if (m_data->m_ub_context != NULL)
- {
- ub_ctx_delete(m_data->m_ub_context);
- }
- delete m_data;
- }
-}
-
-std::vector DNSResolver::get_record(const std::string& url, int record_type, std::string (*reader)(const char *,size_t), bool& dnssec_available, bool& dnssec_valid)
-{
- std::vector addresses;
- dnssec_available = false;
- dnssec_valid = false;
-
- if (!check_address_syntax(url.c_str()))
- {
- return addresses;
- }
-
- // destructor takes care of cleanup
- ub_result_ptr result;
-
- // call DNS resolver, blocking. if return value not zero, something went wrong
- if (!ub_resolve(m_data->m_ub_context, string_copy(url.c_str()), record_type, DNS_CLASS_IN, &result))
- {
- dnssec_available = (result->secure || (!result->secure && result->bogus));
- dnssec_valid = result->secure && !result->bogus;
- if (result->havedata)
- {
- for (size_t i=0; result->data[i] != NULL; i++)
- {
- addresses.push_back((*reader)(result->data[i], result->len[i]));
- }
- }
- }
-
- return addresses;
-}
-
-std::vector DNSResolver::get_ipv4(const std::string& url, bool& dnssec_available, bool& dnssec_valid)
-{
- return get_record(url, DNS_TYPE_A, ipv4_to_string, dnssec_available, dnssec_valid);
-}
-
-std::vector DNSResolver::get_ipv6(const std::string& url, bool& dnssec_available, bool& dnssec_valid)
-{
- return get_record(url, DNS_TYPE_AAAA, ipv6_to_string, dnssec_available, dnssec_valid);
-}
-
-std::vector DNSResolver::get_txt_record(const std::string& url, bool& dnssec_available, bool& dnssec_valid)
-{
- return get_record(url, DNS_TYPE_TXT, txt_to_string, dnssec_available, dnssec_valid);
-}
-
-std::string DNSResolver::get_dns_format_from_oa_address(const std::string& oa_addr)
-{
- std::string addr(oa_addr);
- auto first_at = addr.find("@");
- if (first_at == std::string::npos)
- return addr;
-
- // convert name@domain.tld to name.domain.tld
- addr.replace(first_at, 1, ".");
-
- return addr;
-}
-
-DNSResolver& DNSResolver::instance()
-{
- boost::lock_guard lock(instance_lock);
-
- static DNSResolver staticInstance;
- return staticInstance;
-}
-
-DNSResolver DNSResolver::create()
-{
- return DNSResolver();
-}
-
-bool DNSResolver::check_address_syntax(const char *addr) const
-{
- // if string doesn't contain a dot, we won't consider it a url for now.
- if (strchr(addr,'.') == NULL)
- {
- return false;
- }
- return true;
-}
-
-namespace dns_utils
-{
-
-//-----------------------------------------------------------------------
-// TODO: parse the string in a less stupid way, probably with regex
-std::string address_from_txt_record(const std::string& s)
-{
- // make sure the txt record has "oa1:msr" and find it
- auto pos = s.find("oa1:msr");
- if (pos == std::string::npos)
- return {};
- // search from there to find "recipient_address="
- pos = s.find("recipient_address=", pos);
- if (pos == std::string::npos)
- return {};
- pos += 18; // move past "recipient_address="
- // find the next semicolon
- auto pos2 = s.find(";", pos);
- if (pos2 != std::string::npos)
- {
- // length of address == 95, we can at least validate that much here
- if (pos2 - pos == 95)
- {
- return s.substr(pos, 95);
- }
- else if (pos2 - pos == 106) // length of address == 106 --> integrated address
- {
- return s.substr(pos, 106);
- }
- }
- return {};
-}
-/**
- * @brief gets a monero address from the TXT record of a DNS entry
- *
- * gets the monero address from the TXT record of the DNS entry associated
- * with . If this lookup fails, or the TXT record does not contain an
- * XMR address in the correct format, returns an empty string.
- * will be set true or false according to whether or not the DNS query passes
- * DNSSEC validation.
- *
- * @param url the url to look up
- * @param dnssec_valid return-by-reference for DNSSEC status of query
- *
- * @return a monero address (as a string) or an empty string
- */
-std::vector addresses_from_url(const std::string& url, bool& dnssec_valid)
-{
- std::vector addresses;
- // get txt records
- bool dnssec_available, dnssec_isvalid;
- std::string oa_addr = DNSResolver::instance().get_dns_format_from_oa_address(url);
- auto records = DNSResolver::instance().get_txt_record(oa_addr, dnssec_available, dnssec_isvalid);
-
- // TODO: update this to allow for conveying that dnssec was not available
- if (dnssec_available && dnssec_isvalid)
- {
- dnssec_valid = true;
- }
- else dnssec_valid = false;
-
- // for each txt record, try to find a monero address in it.
- for (auto& rec : records)
- {
- std::string addr = address_from_txt_record(rec);
- if (addr.size())
- {
- addresses.push_back(addr);
- }
- }
- return addresses;
-}
-
-std::string get_account_address_as_str_from_url(const std::string& url, bool& dnssec_valid, std::function&, bool)> dns_confirm)
-{
- // attempt to get address from dns query
- auto addresses = addresses_from_url(url, dnssec_valid);
- if (addresses.empty())
- {
- LOG_ERROR("wrong address: " << url);
- return {};
- }
- return dns_confirm(url, addresses, dnssec_valid);
-}
-
-namespace
-{
- bool dns_records_match(const std::vector& a, const std::vector& b)
- {
- if (a.size() != b.size()) return false;
-
- for (const auto& record_in_a : a)
- {
- bool ok = false;
- for (const auto& record_in_b : b)
- {
- if (record_in_a == record_in_b)
- {
- ok = true;
- break;
- }
- }
- if (!ok) return false;
- }
-
- return true;
- }
-}
-
-bool load_txt_records_from_dns(std::vector &good_records, const std::vector &dns_urls)
-{
- // Prevent infinite recursion when distributing
- if (dns_urls.empty()) return false;
-
- std::vector > records;
- records.resize(dns_urls.size());
-
- std::random_device rd;
- std::mt19937 gen(rd());
- std::uniform_int_distribution dis(0, dns_urls.size() - 1);
- size_t first_index = dis(gen);
-
- // send all requests in parallel
- std::vector threads(dns_urls.size());
- std::deque avail(dns_urls.size(), false), valid(dns_urls.size(), false);
- for (size_t n = 0; n < dns_urls.size(); ++n)
- {
- threads[n] = boost::thread([n, dns_urls, &records, &avail, &valid](){
- records[n] = tools::DNSResolver::instance().get_txt_record(dns_urls[n], avail[n], valid[n]);
- });
- }
- for (size_t n = 0; n < dns_urls.size(); ++n)
- threads[n].join();
-
- size_t cur_index = first_index;
- do
- {
- const std::string &url = dns_urls[cur_index];
- if (!avail[cur_index])
- {
- records[cur_index].clear();
- LOG_PRINT_L2("DNSSEC not available for checkpoint update at URL: " << url << ", skipping.");
- }
- if (!valid[cur_index])
- {
- records[cur_index].clear();
- LOG_PRINT_L2("DNSSEC validation failed for checkpoint update at URL: " << url << ", skipping.");
- }
-
- cur_index++;
- if (cur_index == dns_urls.size())
- {
- cur_index = 0;
- }
- } while (cur_index != first_index);
-
- size_t num_valid_records = 0;
-
- for( const auto& record_set : records)
- {
- if (record_set.size() != 0)
- {
- num_valid_records++;
- }
- }
-
- if (num_valid_records < 2)
- {
- LOG_PRINT_L2("WARNING: no two valid MasariPulse DNS checkpoint records were received");
- return false;
- }
-
- int good_records_index = -1;
- for (size_t i = 0; i < records.size() - 1; ++i)
- {
- if (records[i].size() == 0) continue;
-
- for (size_t j = i + 1; j < records.size(); ++j)
- {
- if (dns_records_match(records[i], records[j]))
- {
- good_records_index = i;
- break;
- }
- }
- if (good_records_index >= 0) break;
- }
-
- if (good_records_index < 0)
- {
- LOG_PRINT_L2("WARNING: no two MasariPulse DNS checkpoint records matched");
- return false;
- }
-
- good_records = records[good_records_index];
- return true;
-}
-
-std::vector parse_dns_public(const char *s)
-{
- unsigned ip0, ip1, ip2, ip3;
- char c;
- std::vector dns_public_addr;
- if (!strcmp(s, "tcp"))
- {
- for (size_t i = 0; i < sizeof(DEFAULT_DNS_PUBLIC_ADDR) / sizeof(DEFAULT_DNS_PUBLIC_ADDR[0]); ++i)
- dns_public_addr.push_back(DEFAULT_DNS_PUBLIC_ADDR[i]);
- LOG_PRINT_L0("Using default public DNS server(s): " << boost::join(dns_public_addr, ", ") << " (TCP)");
- }
- else if (sscanf(s, "tcp://%u.%u.%u.%u%c", &ip0, &ip1, &ip2, &ip3, &c) == 4)
- {
- if (ip0 > 255 || ip1 > 255 || ip2 > 255 || ip3 > 255)
- {
- MERROR("Invalid IP: " << s << ", using default");
- }
- else
- {
- dns_public_addr.push_back(std::string(s + strlen("tcp://")));
- }
- }
- else
- {
- MERROR("Invalid DNS_PUBLIC contents, ignored");
- }
- return dns_public_addr;
-}
-
-} // namespace tools::dns_utils
-
-} // namespace tools
diff --git a/src_native/common/dns_utils.h b/src_native/common/dns_utils.h
deleted file mode 100644
index f46bca3d..00000000
--- a/src_native/common/dns_utils.h
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#pragma once
-
-#include
-#include
-#include
-
-namespace tools
-{
-
-// RFC defines for record types and classes for DNS, gleaned from ldns source
-const static int DNS_CLASS_IN = 1;
-const static int DNS_TYPE_A = 1;
-const static int DNS_TYPE_TXT = 16;
-const static int DNS_TYPE_AAAA = 8;
-
-struct DNSResolverData;
-
-/**
- * @brief Provides high-level access to DNS resolution
- *
- * This class is designed to provide a high-level abstraction to DNS resolution
- * functionality, including access to TXT records and such. It will also
- * handle DNSSEC validation of the results.
- */
-class DNSResolver
-{
-private:
-
- /**
- * @brief Constructs an instance of DNSResolver
- *
- * Constructs a class instance and does setup stuff for the backend resolver.
- */
- DNSResolver();
-
-public:
-
- /**
- * @brief takes care of freeing C pointers and such
- */
- ~DNSResolver();
-
- /**
- * @brief gets ipv4 addresses from DNS query of a URL
- *
- * returns a vector of all IPv4 "A" records for given URL.
- * If no "A" records found, returns an empty vector.
- *
- * @param url A string containing a URL to query for
- *
- * @param dnssec_available
- *
- * @return vector of strings containing ipv4 addresses
- */
- std::vector get_ipv4(const std::string& url, bool& dnssec_available, bool& dnssec_valid);
-
- /**
- * @brief gets ipv6 addresses from DNS query
- *
- * returns a vector of all IPv6 "A" records for given URL.
- * If no "A" records found, returns an empty vector.
- *
- * @param url A string containing a URL to query for
- *
- * @return vector of strings containing ipv6 addresses
- */
- std::vector get_ipv6(const std::string& url, bool& dnssec_available, bool& dnssec_valid);
-
- /**
- * @brief gets all TXT records from a DNS query for the supplied URL;
- * if no TXT record present returns an empty vector.
- *
- * @param url A string containing a URL to query for
- *
- * @return A vector of strings containing a TXT record; or an empty vector
- */
- // TODO: modify this to accommodate DNSSEC
- std::vector get_txt_record(const std::string& url, bool& dnssec_available, bool& dnssec_valid);
-
- /**
- * @brief Gets a DNS address from OpenAlias format
- *
- * If the address looks good, but contains one @ symbol, replace that with a .
- * e.g. donate@getmonero.org becomes donate.getmonero.org
- *
- * @param oa_addr OpenAlias address
- *
- * @return dns_addr DNS address
- */
- std::string get_dns_format_from_oa_address(const std::string& oa_addr);
-
- /**
- * @brief Gets the singleton instance of DNSResolver
- *
- * @return returns a pointer to the singleton
- */
- static DNSResolver& instance();
-
- /**
- * @brief Gets a new instance of DNSResolver
- *
- * @return returns a pointer to the new object
- */
- static DNSResolver create();
-
-private:
-
- /**
- * @brief gets all records of a given type from a DNS query for the supplied URL;
- * if no such record is present returns an empty vector.
- *
- * @param url A string containing a URL to query for
- * @param record_type the record type to retrieve (DNS_TYPE_A, etc)
- * @param reader a function that converts a record data to a string
- *
- * @return A vector of strings containing the requested record; or an empty vector
- */
- // TODO: modify this to accommodate DNSSEC
- std::vector get_record(const std::string& url, int record_type, std::string (*reader)(const char *,size_t), bool& dnssec_available, bool& dnssec_valid);
-
- /**
- * @brief Checks a string to see if it looks like a URL
- *
- * @param addr the string to be checked
- *
- * @return true if it looks enough like a URL, false if not
- */
- bool check_address_syntax(const char *addr) const;
-
- DNSResolverData *m_data;
-}; // class DNSResolver
-
-namespace dns_utils
-{
-
-std::string address_from_txt_record(const std::string& s);
-std::vector addresses_from_url(const std::string& url, bool& dnssec_valid);
-
-std::string get_account_address_as_str_from_url(const std::string& url, bool& dnssec_valid, std::function&, bool)> confirm_dns);
-
-bool load_txt_records_from_dns(std::vector &records, const std::vector &dns_urls);
-
-std::vector parse_dns_public(const char *s);
-
-} // namespace tools::dns_utils
-
-} // namespace tools
diff --git a/src_native/common/download.cpp b/src_native/common/download.cpp
deleted file mode 100644
index 6698a5ab..00000000
--- a/src_native/common/download.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-// Copyright (c) 2017-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include
-#include
-#include
-#include
-#include
-#include "cryptonote_config.h"
-#include "include_base_utils.h"
-#include "file_io_utils.h"
-#include "net/http_client.h"
-#include "download.h"
-
-#undef MONERO_DEFAULT_LOG_CATEGORY
-#define MONERO_DEFAULT_LOG_CATEGORY "net.dl"
-
-namespace tools
-{
- struct download_thread_control
- {
- const std::string path;
- const std::string uri;
- std::function result_cb;
- std::function progress_cb;
- bool stop;
- bool stopped;
- bool success;
- boost::thread thread;
- boost::mutex mutex;
-
- download_thread_control(const std::string &path, const std::string &uri, std::function result_cb, std::function progress_cb):
- path(path), uri(uri), result_cb(result_cb), progress_cb(progress_cb), stop(false), stopped(false), success(false) {}
- ~download_thread_control() { if (thread.joinable()) thread.detach(); }
- };
-
- static void download_thread(download_async_handle control)
- {
- static std::atomic thread_id(0);
-
- MLOG_SET_THREAD_NAME("DL" + std::to_string(thread_id++));
-
- struct stopped_setter
- {
- stopped_setter(const download_async_handle &control): control(control) {}
- ~stopped_setter() { control->stopped = true; }
- download_async_handle control;
- } stopped_setter(control);
-
- try
- {
- boost::unique_lock lock(control->mutex);
- std::ios_base::openmode mode = std::ios_base::out | std::ios_base::binary;
- uint64_t existing_size = 0;
- if (epee::file_io_utils::get_file_size(control->path, existing_size) && existing_size > 0)
- {
- MINFO("Resuming downloading " << control->uri << " to " << control->path << " from " << existing_size);
- mode |= std::ios_base::app;
- }
- else
- {
- MINFO("Downloading " << control->uri << " to " << control->path);
- mode |= std::ios_base::trunc;
- }
- std::ofstream f;
- f.open(control->path, mode);
- if (!f.good()) {
- MERROR("Failed to open file " << control->path);
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- class download_client: public epee::net_utils::http::http_simple_client
- {
- public:
- download_client(download_async_handle control, std::ofstream &f, uint64_t offset = 0):
- control(control), f(f), content_length(-1), total(0), offset(offset) {}
- virtual ~download_client() { f.close(); }
- virtual bool on_header(const epee::net_utils::http::http_response_info &headers)
- {
- for (const auto &kv: headers.m_header_info.m_etc_fields)
- MDEBUG("Header: " << kv.first << ": " << kv.second);
- ssize_t length;
- if (epee::string_tools::get_xtype_from_string(length, headers.m_header_info.m_content_length) && length >= 0)
- {
- MINFO("Content-Length: " << length);
- content_length = length;
- boost::filesystem::path path(control->path);
- boost::filesystem::space_info si = boost::filesystem::space(path);
- if (si.available < (size_t)content_length)
- {
- const uint64_t avail = (si.available + 1023) / 1024, needed = (content_length + 1023) / 1024;
- MERROR("Not enough space to download " << needed << " kB to " << path << " (" << avail << " kB available)");
- return false;
- }
- }
- if (offset > 0)
- {
- // we requested a range, so check if we're getting it, otherwise truncate
- bool got_range = false;
- const std::string prefix = "bytes=" + std::to_string(offset) + "-";
- for (const auto &kv: headers.m_header_info.m_etc_fields)
- {
- if (kv.first == "Content-Range" && strncmp(kv.second.c_str(), prefix.c_str(), prefix.size()))
- {
- got_range = true;
- break;
- }
- }
- if (!got_range)
- {
- MWARNING("We did not get the requested range, downloading from start");
- f.close();
- f.open(control->path, std::ios_base::out | std::ios_base::binary | std::ios_base::trunc);
- }
- }
- return true;
- }
- virtual bool handle_target_data(std::string &piece_of_transfer)
- {
- try
- {
- boost::lock_guard lock(control->mutex);
- if (control->stop)
- return false;
- f << piece_of_transfer;
- total += piece_of_transfer.size();
- if (control->progress_cb && !control->progress_cb(control->path, control->uri, total, content_length))
- return false;
- return f.good();
- }
- catch (const std::exception &e)
- {
- MERROR("Error writing data: " << e.what());
- return false;
- }
- }
- private:
- download_async_handle control;
- std::ofstream &f;
- ssize_t content_length;
- size_t total;
- uint64_t offset;
- } client(control, f, existing_size);
- epee::net_utils::http::url_content u_c;
- if (!epee::net_utils::parse_url(control->uri, u_c))
- {
- MERROR("Failed to parse URL " << control->uri);
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- if (u_c.host.empty())
- {
- MERROR("Failed to determine address from URL " << control->uri);
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
-
- lock.unlock();
-
- bool ssl = u_c.schema == "https";
- uint16_t port = u_c.port ? u_c.port : ssl ? 443 : 80;
- MDEBUG("Connecting to " << u_c.host << ":" << port);
- client.set_server(u_c.host, std::to_string(port), boost::none, ssl);
- if (!client.connect(std::chrono::seconds(30)))
- {
- boost::lock_guard lock(control->mutex);
- MERROR("Failed to connect to " << control->uri);
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- MDEBUG("GETting " << u_c.uri);
- const epee::net_utils::http::http_response_info *info = NULL;
- epee::net_utils::http::fields_list fields;
- if (existing_size > 0)
- {
- const std::string range = "bytes=" + std::to_string(existing_size) + "-";
- MDEBUG("Asking for range: " << range);
- fields.push_back(std::make_pair("Range", range));
- }
- if (!client.invoke_get(u_c.uri, std::chrono::seconds(30), "", &info, fields))
- {
- boost::lock_guard lock(control->mutex);
- MERROR("Failed to connect to " << control->uri);
- client.disconnect();
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- if (control->stop)
- {
- boost::lock_guard lock(control->mutex);
- MDEBUG("Download cancelled");
- client.disconnect();
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- if (!info)
- {
- boost::lock_guard lock(control->mutex);
- MERROR("Failed invoking GET command to " << control->uri << ", no status info returned");
- client.disconnect();
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- MDEBUG("response code: " << info->m_response_code);
- MDEBUG("response length: " << info->m_header_info.m_content_length);
- MDEBUG("response comment: " << info->m_response_comment);
- MDEBUG("response body: " << info->m_body);
- for (const auto &f: info->m_additional_fields)
- MDEBUG("additional field: " << f.first << ": " << f.second);
- if (info->m_response_code != 200 && info->m_response_code != 206)
- {
- boost::lock_guard lock(control->mutex);
- MERROR("Status code " << info->m_response_code);
- client.disconnect();
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- client.disconnect();
- f.close();
- MDEBUG("Download complete");
- lock.lock();
- control->success = true;
- control->result_cb(control->path, control->uri, control->success);
- return;
- }
- catch (const std::exception &e)
- {
- MERROR("Exception in download thread: " << e.what());
- // fall through and call result_cb not from the catch block to avoid another exception
- }
- boost::lock_guard lock(control->mutex);
- control->result_cb(control->path, control->uri, control->success);
- }
-
- bool download(const std::string &path, const std::string &url, std::function cb)
- {
- bool success = false;
- download_async_handle handle = download_async(path, url, [&success](const std::string&, const std::string&, bool result) {success = result;}, cb);
- download_wait(handle);
- return success;
- }
-
- download_async_handle download_async(const std::string &path, const std::string &url, std::function result, std::function progress)
- {
- download_async_handle control = std::make_shared(path, url, result, progress);
- control->thread = boost::thread([control](){ download_thread(control); });
- return control;
- }
-
- bool download_finished(const download_async_handle &control)
- {
- CHECK_AND_ASSERT_MES(control != 0, false, "NULL async download handle");
- boost::lock_guard lock(control->mutex);
- return control->stopped;
- }
-
- bool download_error(const download_async_handle &control)
- {
- CHECK_AND_ASSERT_MES(control != 0, false, "NULL async download handle");
- boost::lock_guard lock(control->mutex);
- return !control->success;
- }
-
- bool download_wait(const download_async_handle &control)
- {
- CHECK_AND_ASSERT_MES(control != 0, false, "NULL async download handle");
- {
- boost::lock_guard lock(control->mutex);
- if (control->stopped)
- return true;
- }
- control->thread.join();
- return true;
- }
-
- bool download_cancel(const download_async_handle &control)
- {
- CHECK_AND_ASSERT_MES(control != 0, false, "NULL async download handle");
- {
- boost::lock_guard lock(control->mutex);
- if (control->stopped)
- return true;
- control->stop = true;
- }
- control->thread.join();
- return true;
- }
-}
diff --git a/src_native/common/download.h b/src_native/common/download.h
deleted file mode 100644
index 3097394b..00000000
--- a/src_native/common/download.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2017-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#pragma once
-
-#include
-
-namespace tools
-{
- struct download_thread_control;
- typedef std::shared_ptr download_async_handle;
-
- bool download(const std::string &path, const std::string &url, std::function progress = NULL);
- download_async_handle download_async(const std::string &path, const std::string &url, std::function result, std::function progress = NULL);
- bool download_error(const download_async_handle &h);
- bool download_finished(const download_async_handle &h);
- bool download_wait(const download_async_handle &h);
- bool download_cancel(const download_async_handle &h);
-}
diff --git a/src_native/common/http_connection.h b/src_native/common/http_connection.h
deleted file mode 100644
index 9fc6be26..00000000
--- a/src_native/common/http_connection.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#pragma once
-
-#include
-#include "string_tools.h"
-#include "net/http_client.h"
-
-namespace tools {
-
-class t_http_connection {
-private:
- epee::net_utils::http::http_simple_client * mp_http_client;
- bool m_ok;
-public:
- static constexpr std::chrono::seconds TIMEOUT()
- {
- return std::chrono::minutes(3) + std::chrono::seconds(30);
- }
-
- t_http_connection(epee::net_utils::http::http_simple_client* p_http_client)
- : mp_http_client(p_http_client)
- , m_ok(false)
- {
- m_ok = mp_http_client->connect(TIMEOUT());
- }
-
- ~t_http_connection()
- {
- if (m_ok)
- {
- mp_http_client->disconnect();
- }
- }
-
- bool is_open() const
- {
- return m_ok;
- }
-}; // class t_http_connection
-
-} // namespace tools
diff --git a/src_native/common/i18n.cpp b/src_native/common/i18n.cpp
deleted file mode 100644
index 4a89876f..00000000
--- a/src_native/common/i18n.cpp
+++ /dev/null
@@ -1,318 +0,0 @@
-// Copyright (c) 2014-2018, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder nor the names of its contributors may be
-// used to endorse or promote products derived from this software without specific
-// prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include
-#include
-#include
-#include
-#include