merge from develop

This commit is contained in:
cryptozoidberg 2021-05-25 16:47:54 +02:00
commit 65ebdbb6e8
No known key found for this signature in database
GPG key ID: 22DEB97A54C6FDEC
566 changed files with 11607 additions and 209236 deletions

3
.gitmodules vendored
View file

@ -4,3 +4,6 @@
[submodule "contrib/db/libmdbx"]
path = contrib/db/libmdbx
url = https://github.com/leo-yuriev/libmdbx.git
[submodule "src/gui/qt-daemon/layout"]
path = src/gui/qt-daemon/layout
url = https://github.com/hyle-team/zano_ui.git

View file

@ -109,6 +109,20 @@ public: \
template<typename t_uint>
struct uint_mask_selector
{
template<t_uint mask>
inline static bool get_value_of_flag_by_mask(const t_uint& given_flags)
{
return given_flags&mask == 0 ? false : true;
}
};
#define KV_SERIALIZE_EPHEMERAL_BOOL_FROM_FLAG_N(var, mask, val_name) \
KV_SERIALIZE_EPHEMERAL_N(bool, uint_mask_selector<decltype(var)>::get_value_of_flag_by_mask<mask>, val_name)

View file

@ -55,7 +55,7 @@ ENDMACRO(ENABLE_SHARED_PCH_EXECUTABLE)
file(GLOB_RECURSE PCH pch/*)
file(GLOB_RECURSE COMMON common/*)
file(GLOB CRYPTO crypto/*.*)
file(GLOB_RECURSE CRYPTO crypto/*)
file(GLOB_RECURSE CURRENCY_CORE currency_core/*)
file(GLOB_RECURSE CURRENCY_PROTOCOL currency_protocol/*)
file(GLOB_RECURSE DAEMON daemon/*)
@ -108,6 +108,13 @@ if(NOT MSVC AND NOT APPLE AND NOT CLANG) # TODO(unassigned): do we really need
target_compile_options(common PRIVATE -fno-var-tracking-assignments)
endif()
# disable specific warning in order not to touch original code by D. J. Bernstein
if(MSVC)
set_source_files_properties("crypto/chacha8_stream.c" PROPERTIES COMPILE_FLAGS "/wd4018")
else()
set_source_files_properties("crypto/chacha8_stream.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-compare -Wno-strict-prototypes")
endif()
add_library(crypto ${CRYPTO})
add_library(currency_core ${CURRENCY_CORE})
@ -200,7 +207,7 @@ if(BUILD_GUI)
set_property(TARGET Zano PROPERTY FOLDER "prog")
set_target_properties(Zano PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/gui/qt-daemon/Info.plist.in)
set(HTML_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gui/qt-daemon/html)
set(HTML_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gui/qt-daemon/layout/html)
set_target_properties(Zano PROPERTIES VS_DEBUGGER_COMMAND_ARGUMENTS "--html-path=${HTML_DIR}")
set(CMAKE_AUTOMOC OFF)

View file

@ -8,15 +8,17 @@
#include "include_base_utils.h"
#include "crypto/crypto.h"
#include "crypto/hash.h"
#include "crypto/RIPEMD160_helper.h"
bool parse_hash256(const std::string str_hash, crypto::hash& hash);
template <class T>
std::ostream &print256(std::ostream &o, const T &v)
std::ostream &print_t(std::ostream &o, const T &v)
{
return o << "<" << epee::string_tools::pod_to_hex(v) << ">";
}
template <class T>
std::ostream &print16(std::ostream &o, const T &v)
{
@ -32,10 +34,11 @@ std::string print16(const T &v)
namespace crypto
{
inline std::ostream &operator <<(std::ostream &o, const crypto::public_key &v) { return print256(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::secret_key &v) { return print256(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::key_derivation &v) { return print256(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::key_image &v) { return print256(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::signature &v) { return print256(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::hash &v) { return print256(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::public_key &v) { return print_t(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::secret_key &v) { return print_t(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::key_derivation &v) { return print_t(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::key_image &v) { return print_t(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::signature &v) { return print_t(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::hash &v) { return print_t(o, v); }
inline std::ostream &operator <<(std::ostream &o, const crypto::hash160 &v) { return print_t(o, v); }
} // namespace crypto

View file

@ -39,3 +39,4 @@
#define API_RETURN_CODE_UNINITIALIZED "UNINITIALIZED"
#define API_RETURN_CODE_TX_IS_TOO_BIG "TX_IS_TOO_BIG"
#define API_RETURN_CODE_TX_REJECTED "TX_REJECTED"
#define API_RETURN_CODE_HTLC_ORIGIN_HASH_MISSMATCHED "HTLC_ORIGIN_HASH_MISSMATCHED"

View file

@ -10,7 +10,6 @@
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include <sys/param.h>
#if defined(_MSC_VER)
#include <intrin.h>

View file

@ -21,11 +21,11 @@ namespace tools
};
#ifndef TESTNET
static constexpr pre_download_entry c_pre_download_lmdb = { "http://95.217.43.225/pre-download/zano_lmdb_94_599999.pak", "6ab4f17cb9252f5cb576e8b212b5b95ad4b3e801a9612de574d7d01204777830", 1023060357, 1491427328 };
static constexpr pre_download_entry c_pre_download_mdbx = { "http://95.217.43.225/pre-download/zano_mdbx_94_599999.pak", "7cf41d2881fa4002a159974d988a0c605ccb801888b18f0352c9a94586c9f935", 795428926, 1610588160 };
static constexpr pre_download_entry c_pre_download_mdbx = { "http://95.217.43.225/pre-download/zano_mdbx_95_1000000.pak", "6b0bbba85bc420eaae5ec68373e528f70bffaa17fb111c796e951d06ad71e4fe", 1104150892, 2147450880 };
static constexpr pre_download_entry c_pre_download_lmdb = { "http://95.217.43.225/pre-download/zano_lmdb_95_1000000.pak", "b4d45c727dbf1b92671f9fd1a9624e79019e890bd3d33cb71e011ab4bcb0d21e", 1450748151, 2114449408 };
#else
static constexpr pre_download_entry c_pre_download_lmdb = { "http://95.217.43.225/pre-download/zano_testnet_lmdb_97_449999.pak", "923b5c59359807b7e375e34cdf9327216c34ab71550669f9535a552c441b285a", 427062309, 641089536 };
static constexpr pre_download_entry c_pre_download_mdbx = { "http://95.217.43.225/pre-download/zano_testnet_mdbx_97_449999.pak", "ab8b9e9fdedbf47dcbc01c7816191951f3b154b1eb7e5dd0da3df0872e0cd80a", 308152196, 805294080 };
static constexpr pre_download_entry c_pre_download_mdbx = { "", "", 0, 0 };
static constexpr pre_download_entry c_pre_download_lmdb = { "", "", 0, 0 };
#endif
static constexpr uint64_t pre_download_min_size_difference = 512 * 1024 * 1024; // minimum difference in size between local DB and the downloadable one to start downloading
@ -50,7 +50,7 @@ namespace tools
boost::system::error_code ec;
uint64_t sz = boost::filesystem::file_size(db_main_file_path, ec);
if (!(ec || (pre_download.unpacked_size > sz && pre_download.unpacked_size - sz > pre_download_min_size_difference) || command_line::has_arg(vm, command_line::arg_force_predownload)) )
if (pre_download.unpacked_size == 0 || !(ec || (pre_download.unpacked_size > sz && pre_download.unpacked_size - sz > pre_download_min_size_difference) || command_line::has_arg(vm, command_line::arg_force_predownload)) )
{
LOG_PRINT_MAGENTA("Pre-downloading not needed (db file size = " << sz << ")", LOG_LEVEL_0);
return true;
@ -58,6 +58,7 @@ namespace tools
// okay, let's download
std::string downloading_file_path = db_main_file_path + ".download";
LOG_PRINT_MAGENTA("Trying to download blockchain database from " << url << " ...", LOG_LEVEL_0);

287
src/crypto/RIPEMD160.c Normal file
View file

@ -0,0 +1,287 @@
/********************************************************************\
*
* FILE: rmd160.c
*
* CONTENTS: A sample C-implementation of the RIPEMD-160
* hash-function.
* TARGET: any computer with an ANSI C compiler
*
* AUTHOR: Antoon Bosselaers, ESAT-COSIC
* DATE: 1 March 1996
* VERSION: 1.0
*
* Copyright (c) 1996 Katholieke Universiteit Leuven
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
\********************************************************************/
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "RIPEMD160.h"
/********************************************************************/
void MDinit(dword *MDbuf)
{
MDbuf[0] = 0x67452301UL;
MDbuf[1] = 0xefcdab89UL;
MDbuf[2] = 0x98badcfeUL;
MDbuf[3] = 0x10325476UL;
MDbuf[4] = 0xc3d2e1f0UL;
return;
}
/********************************************************************/
void compress(dword *MDbuf, dword *X)
{
dword aa = MDbuf[0], bb = MDbuf[1], cc = MDbuf[2],
dd = MDbuf[3], ee = MDbuf[4];
dword aaa = MDbuf[0], bbb = MDbuf[1], ccc = MDbuf[2],
ddd = MDbuf[3], eee = MDbuf[4];
/* round 1 */
FF(aa, bb, cc, dd, ee, X[0], 11);
FF(ee, aa, bb, cc, dd, X[1], 14);
FF(dd, ee, aa, bb, cc, X[2], 15);
FF(cc, dd, ee, aa, bb, X[3], 12);
FF(bb, cc, dd, ee, aa, X[4], 5);
FF(aa, bb, cc, dd, ee, X[5], 8);
FF(ee, aa, bb, cc, dd, X[6], 7);
FF(dd, ee, aa, bb, cc, X[7], 9);
FF(cc, dd, ee, aa, bb, X[8], 11);
FF(bb, cc, dd, ee, aa, X[9], 13);
FF(aa, bb, cc, dd, ee, X[10], 14);
FF(ee, aa, bb, cc, dd, X[11], 15);
FF(dd, ee, aa, bb, cc, X[12], 6);
FF(cc, dd, ee, aa, bb, X[13], 7);
FF(bb, cc, dd, ee, aa, X[14], 9);
FF(aa, bb, cc, dd, ee, X[15], 8);
/* round 2 */
GG(ee, aa, bb, cc, dd, X[7], 7);
GG(dd, ee, aa, bb, cc, X[4], 6);
GG(cc, dd, ee, aa, bb, X[13], 8);
GG(bb, cc, dd, ee, aa, X[1], 13);
GG(aa, bb, cc, dd, ee, X[10], 11);
GG(ee, aa, bb, cc, dd, X[6], 9);
GG(dd, ee, aa, bb, cc, X[15], 7);
GG(cc, dd, ee, aa, bb, X[3], 15);
GG(bb, cc, dd, ee, aa, X[12], 7);
GG(aa, bb, cc, dd, ee, X[0], 12);
GG(ee, aa, bb, cc, dd, X[9], 15);
GG(dd, ee, aa, bb, cc, X[5], 9);
GG(cc, dd, ee, aa, bb, X[2], 11);
GG(bb, cc, dd, ee, aa, X[14], 7);
GG(aa, bb, cc, dd, ee, X[11], 13);
GG(ee, aa, bb, cc, dd, X[8], 12);
/* round 3 */
HH(dd, ee, aa, bb, cc, X[3], 11);
HH(cc, dd, ee, aa, bb, X[10], 13);
HH(bb, cc, dd, ee, aa, X[14], 6);
HH(aa, bb, cc, dd, ee, X[4], 7);
HH(ee, aa, bb, cc, dd, X[9], 14);
HH(dd, ee, aa, bb, cc, X[15], 9);
HH(cc, dd, ee, aa, bb, X[8], 13);
HH(bb, cc, dd, ee, aa, X[1], 15);
HH(aa, bb, cc, dd, ee, X[2], 14);
HH(ee, aa, bb, cc, dd, X[7], 8);
HH(dd, ee, aa, bb, cc, X[0], 13);
HH(cc, dd, ee, aa, bb, X[6], 6);
HH(bb, cc, dd, ee, aa, X[13], 5);
HH(aa, bb, cc, dd, ee, X[11], 12);
HH(ee, aa, bb, cc, dd, X[5], 7);
HH(dd, ee, aa, bb, cc, X[12], 5);
/* round 4 */
II(cc, dd, ee, aa, bb, X[1], 11);
II(bb, cc, dd, ee, aa, X[9], 12);
II(aa, bb, cc, dd, ee, X[11], 14);
II(ee, aa, bb, cc, dd, X[10], 15);
II(dd, ee, aa, bb, cc, X[0], 14);
II(cc, dd, ee, aa, bb, X[8], 15);
II(bb, cc, dd, ee, aa, X[12], 9);
II(aa, bb, cc, dd, ee, X[4], 8);
II(ee, aa, bb, cc, dd, X[13], 9);
II(dd, ee, aa, bb, cc, X[3], 14);
II(cc, dd, ee, aa, bb, X[7], 5);
II(bb, cc, dd, ee, aa, X[15], 6);
II(aa, bb, cc, dd, ee, X[14], 8);
II(ee, aa, bb, cc, dd, X[5], 6);
II(dd, ee, aa, bb, cc, X[6], 5);
II(cc, dd, ee, aa, bb, X[2], 12);
/* round 5 */
JJ(bb, cc, dd, ee, aa, X[4], 9);
JJ(aa, bb, cc, dd, ee, X[0], 15);
JJ(ee, aa, bb, cc, dd, X[5], 5);
JJ(dd, ee, aa, bb, cc, X[9], 11);
JJ(cc, dd, ee, aa, bb, X[7], 6);
JJ(bb, cc, dd, ee, aa, X[12], 8);
JJ(aa, bb, cc, dd, ee, X[2], 13);
JJ(ee, aa, bb, cc, dd, X[10], 12);
JJ(dd, ee, aa, bb, cc, X[14], 5);
JJ(cc, dd, ee, aa, bb, X[1], 12);
JJ(bb, cc, dd, ee, aa, X[3], 13);
JJ(aa, bb, cc, dd, ee, X[8], 14);
JJ(ee, aa, bb, cc, dd, X[11], 11);
JJ(dd, ee, aa, bb, cc, X[6], 8);
JJ(cc, dd, ee, aa, bb, X[15], 5);
JJ(bb, cc, dd, ee, aa, X[13], 6);
/* parallel round 1 */
JJJ(aaa, bbb, ccc, ddd, eee, X[5], 8);
JJJ(eee, aaa, bbb, ccc, ddd, X[14], 9);
JJJ(ddd, eee, aaa, bbb, ccc, X[7], 9);
JJJ(ccc, ddd, eee, aaa, bbb, X[0], 11);
JJJ(bbb, ccc, ddd, eee, aaa, X[9], 13);
JJJ(aaa, bbb, ccc, ddd, eee, X[2], 15);
JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15);
JJJ(ddd, eee, aaa, bbb, ccc, X[4], 5);
JJJ(ccc, ddd, eee, aaa, bbb, X[13], 7);
JJJ(bbb, ccc, ddd, eee, aaa, X[6], 7);
JJJ(aaa, bbb, ccc, ddd, eee, X[15], 8);
JJJ(eee, aaa, bbb, ccc, ddd, X[8], 11);
JJJ(ddd, eee, aaa, bbb, ccc, X[1], 14);
JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14);
JJJ(bbb, ccc, ddd, eee, aaa, X[3], 12);
JJJ(aaa, bbb, ccc, ddd, eee, X[12], 6);
/* parallel round 2 */
III(eee, aaa, bbb, ccc, ddd, X[6], 9);
III(ddd, eee, aaa, bbb, ccc, X[11], 13);
III(ccc, ddd, eee, aaa, bbb, X[3], 15);
III(bbb, ccc, ddd, eee, aaa, X[7], 7);
III(aaa, bbb, ccc, ddd, eee, X[0], 12);
III(eee, aaa, bbb, ccc, ddd, X[13], 8);
III(ddd, eee, aaa, bbb, ccc, X[5], 9);
III(ccc, ddd, eee, aaa, bbb, X[10], 11);
III(bbb, ccc, ddd, eee, aaa, X[14], 7);
III(aaa, bbb, ccc, ddd, eee, X[15], 7);
III(eee, aaa, bbb, ccc, ddd, X[8], 12);
III(ddd, eee, aaa, bbb, ccc, X[12], 7);
III(ccc, ddd, eee, aaa, bbb, X[4], 6);
III(bbb, ccc, ddd, eee, aaa, X[9], 15);
III(aaa, bbb, ccc, ddd, eee, X[1], 13);
III(eee, aaa, bbb, ccc, ddd, X[2], 11);
/* parallel round 3 */
HHH(ddd, eee, aaa, bbb, ccc, X[15], 9);
HHH(ccc, ddd, eee, aaa, bbb, X[5], 7);
HHH(bbb, ccc, ddd, eee, aaa, X[1], 15);
HHH(aaa, bbb, ccc, ddd, eee, X[3], 11);
HHH(eee, aaa, bbb, ccc, ddd, X[7], 8);
HHH(ddd, eee, aaa, bbb, ccc, X[14], 6);
HHH(ccc, ddd, eee, aaa, bbb, X[6], 6);
HHH(bbb, ccc, ddd, eee, aaa, X[9], 14);
HHH(aaa, bbb, ccc, ddd, eee, X[11], 12);
HHH(eee, aaa, bbb, ccc, ddd, X[8], 13);
HHH(ddd, eee, aaa, bbb, ccc, X[12], 5);
HHH(ccc, ddd, eee, aaa, bbb, X[2], 14);
HHH(bbb, ccc, ddd, eee, aaa, X[10], 13);
HHH(aaa, bbb, ccc, ddd, eee, X[0], 13);
HHH(eee, aaa, bbb, ccc, ddd, X[4], 7);
HHH(ddd, eee, aaa, bbb, ccc, X[13], 5);
/* parallel round 4 */
GGG(ccc, ddd, eee, aaa, bbb, X[8], 15);
GGG(bbb, ccc, ddd, eee, aaa, X[6], 5);
GGG(aaa, bbb, ccc, ddd, eee, X[4], 8);
GGG(eee, aaa, bbb, ccc, ddd, X[1], 11);
GGG(ddd, eee, aaa, bbb, ccc, X[3], 14);
GGG(ccc, ddd, eee, aaa, bbb, X[11], 14);
GGG(bbb, ccc, ddd, eee, aaa, X[15], 6);
GGG(aaa, bbb, ccc, ddd, eee, X[0], 14);
GGG(eee, aaa, bbb, ccc, ddd, X[5], 6);
GGG(ddd, eee, aaa, bbb, ccc, X[12], 9);
GGG(ccc, ddd, eee, aaa, bbb, X[2], 12);
GGG(bbb, ccc, ddd, eee, aaa, X[13], 9);
GGG(aaa, bbb, ccc, ddd, eee, X[9], 12);
GGG(eee, aaa, bbb, ccc, ddd, X[7], 5);
GGG(ddd, eee, aaa, bbb, ccc, X[10], 15);
GGG(ccc, ddd, eee, aaa, bbb, X[14], 8);
/* parallel round 5 */
FFF(bbb, ccc, ddd, eee, aaa, X[12], 8);
FFF(aaa, bbb, ccc, ddd, eee, X[15], 5);
FFF(eee, aaa, bbb, ccc, ddd, X[10], 12);
FFF(ddd, eee, aaa, bbb, ccc, X[4], 9);
FFF(ccc, ddd, eee, aaa, bbb, X[1], 12);
FFF(bbb, ccc, ddd, eee, aaa, X[5], 5);
FFF(aaa, bbb, ccc, ddd, eee, X[8], 14);
FFF(eee, aaa, bbb, ccc, ddd, X[7], 6);
FFF(ddd, eee, aaa, bbb, ccc, X[6], 8);
FFF(ccc, ddd, eee, aaa, bbb, X[2], 13);
FFF(bbb, ccc, ddd, eee, aaa, X[13], 6);
FFF(aaa, bbb, ccc, ddd, eee, X[14], 5);
FFF(eee, aaa, bbb, ccc, ddd, X[0], 15);
FFF(ddd, eee, aaa, bbb, ccc, X[3], 13);
FFF(ccc, ddd, eee, aaa, bbb, X[9], 11);
FFF(bbb, ccc, ddd, eee, aaa, X[11], 11);
/* combine results */
ddd += cc + MDbuf[1]; /* final result for MDbuf[0] */
MDbuf[1] = MDbuf[2] + dd + eee;
MDbuf[2] = MDbuf[3] + ee + aaa;
MDbuf[3] = MDbuf[4] + aa + bbb;
MDbuf[4] = MDbuf[0] + bb + ccc;
MDbuf[0] = ddd;
return;
}
/********************************************************************/
void MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen)
{
unsigned int i; /* counter */
dword X[16]; /* message words */
memset(X, 0, 16 * sizeof(dword));
/* put bytes from strptr into X */
for (i = 0; i<(lswlen & 63); i++) {
/* byte i goes into word X[i div 4] at pos. 8*(i mod 4) */
X[i >> 2] ^= (dword)*strptr++ << (8 * (i & 3));
}
/* append the bit m_n == 1 */
X[(lswlen >> 2) & 15] ^= (dword)1 << (8 * (lswlen & 3) + 7);
if ((lswlen & 63) > 55) {
/* length goes to next block */
compress(MDbuf, X);
memset(X, 0, 16 * sizeof(dword));
}
/* append length in bits*/
X[14] = lswlen << 3;
X[15] = (lswlen >> 29) | (mswlen << 3);
compress(MDbuf, X);
return;
}
/************************ end of file rmd160.c **********************/

150
src/crypto/RIPEMD160.h Normal file
View file

@ -0,0 +1,150 @@
/********************************************************************\
*
* FILE: rmd160.h
*
* CONTENTS: Header file for a sample C-implementation of the
* RIPEMD-160 hash-function.
* TARGET: any computer with an ANSI C compiler
*
* AUTHOR: Antoon Bosselaers, ESAT-COSIC
* DATE: 1 March 1996
* VERSION: 1.0
*
* Copyright (c) 1996 Katholieke Universiteit Leuven
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
\********************************************************************/
#ifndef RMD160H /* make sure this file is read only once */
#define RMD160H
/********************************************************************/
#include <stdint.h>
/* typedef 8 and 32 bit types, resp. */
/* adapt these, if necessary,
for your operating system and compiler */
typedef unsigned char byte;
typedef uint32_t dword;
/* if this line causes a compiler error,
adapt the defintion of dword above */
typedef int the_correct_size_was_chosen[sizeof(dword) == 4 ? 1 : -1];
/********************************************************************/
/* macro definitions */
/* collect four bytes into one word: */
#define BYTES_TO_DWORD(strptr) \
(((dword) *((strptr)+3) << 24) | \
((dword) *((strptr)+2) << 16) | \
((dword) *((strptr)+1) << 8) | \
((dword) *(strptr)))
/* ROL(x, n) cyclically rotates x over n bits to the left */
/* x must be of an unsigned 32 bits type and 0 <= n < 32. */
#define ROL(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* the five basic functions F(), G() and H() */
#define F(x, y, z) ((x) ^ (y) ^ (z))
#define G(x, y, z) (((x) & (y)) | (~(x) & (z)))
#define H(x, y, z) (((x) | ~(y)) ^ (z))
#define I(x, y, z) (((x) & (z)) | ((y) & ~(z)))
#define J(x, y, z) ((x) ^ ((y) | ~(z)))
/* the ten basic operations FF() through III() */
#define FF(a, b, c, d, e, x, s) {\
(a) += F((b), (c), (d)) + (x);\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define GG(a, b, c, d, e, x, s) {\
(a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define HH(a, b, c, d, e, x, s) {\
(a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define II(a, b, c, d, e, x, s) {\
(a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define JJ(a, b, c, d, e, x, s) {\
(a) += J((b), (c), (d)) + (x) + 0xa953fd4eUL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define FFF(a, b, c, d, e, x, s) {\
(a) += F((b), (c), (d)) + (x);\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define GGG(a, b, c, d, e, x, s) {\
(a) += G((b), (c), (d)) + (x) + 0x7a6d76e9UL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define HHH(a, b, c, d, e, x, s) {\
(a) += H((b), (c), (d)) + (x) + 0x6d703ef3UL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define III(a, b, c, d, e, x, s) {\
(a) += I((b), (c), (d)) + (x) + 0x5c4dd124UL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
#define JJJ(a, b, c, d, e, x, s) {\
(a) += J((b), (c), (d)) + (x) + 0x50a28be6UL;\
(a) = ROL((a), (s)) + (e);\
(c) = ROL((c), 10);\
}
/********************************************************************/
/* function prototypes */
void MDinit(dword *MDbuf);
/*
* initializes MDbuffer to "magic constants"
*/
void compress(dword *MDbuf, dword *X);
/*
* the compression function.
* transforms MDbuf using message bytes X[0] through X[15]
*/
void MDfinish(dword *MDbuf, byte *strptr, dword lswlen, dword mswlen);
/*
* puts bytes from strptr into X and pad out; appends length
* and finally, compresses the last block(s)
* note: length in bits == 8 * (lswlen + 2^32 mswlen).
* note: there are (lswlen mod 64) bytes left in strptr.
*/
#endif /* RMD160H */
/*********************** end of file rmd160.h ***********************/

View file

@ -0,0 +1,67 @@
// Copyright (c) 2020 The Zano developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#pragma once
#include "RIPEMD160_helper.h"
#include "auto_val_init.h"
extern "C" {
#include "RIPEMD160.h"
}
#define RMDsize 160
namespace crypto {
void RIPEMD160_hash(const void *data, size_t length_size_t, hash160 &h)
{
dword MDbuf[RMDsize / 32] = {0}; /* contains (A, B, C, D(, E)) */
byte* hashcode = (byte*)&h; /* hashcode[RMDsize / 8]; /* for final hash-value */
dword X[16] = {0}; /* current 16-word chunk */
unsigned int i = 0; /* counter */
dword length = static_cast<dword>(length_size_t); /* length in bytes of message */
dword nbytes = 0; /* # of bytes not yet processed */
byte* message = (byte*)data;
/* initialize */
MDinit(MDbuf);
//length = (dword)strlen((char *)message);
/* process message in 16-word chunks */
for (nbytes = length; nbytes > 63; nbytes -= 64) {
for (i = 0; i < 16; i++) {
X[i] = BYTES_TO_DWORD(message);
message += 4;
}
compress(MDbuf, X);
}/* length mod 64 bytes left */
/* finish: */
MDfinish(MDbuf, message, length, 0);
for (i = 0; i < RMDsize / 8; i += 4) {
hashcode[i] = (byte)MDbuf[i >> 2]; /* implicit cast to byte */
hashcode[i + 1] = (byte)(MDbuf[i >> 2] >> 8); /* extracts the 8 least */
hashcode[i + 2] = (byte)(MDbuf[i >> 2] >> 16); /* significant bits. */
hashcode[i + 3] = (byte)(MDbuf[i >> 2] >> 24);
}
}
hash160 RIPEMD160_hash(const void *data, size_t length)
{
hash160 h = AUTO_VAL_INIT(h);
RIPEMD160_hash(data, length, h);
return h;
}
hash RIPEMD160_hash_256(const void *data, size_t length)
{
hash160 h = RIPEMD160_hash(data, length);
hash h256 = AUTO_VAL_INIT(h256);
memcpy(&h256, &h, sizeof(h));
return h256;
}
}

View file

@ -0,0 +1,27 @@
// Copyright (c) 2020 The Zano developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#pragma once
#include "hash.h"
namespace crypto {
#pragma pack(push, 1)
POD_CLASS hash160{
char data[20];
};
#pragma pack(pop)
void RIPEMD160_hash(const void *data, size_t length, hash160 &h);
hash160 RIPEMD160_hash(const void *data, size_t length);
hash RIPEMD160_hash_256(const void *data, size_t length);
}
POD_MAKE_HASHABLE(crypto, hash160)

View file

@ -0,0 +1,59 @@
// Copyright (c) 2014-2019 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_COMPAT_BYTESWAP_H
#define BITCOIN_COMPAT_BYTESWAP_H
#if defined(HAVE_CONFIG_H)
#include <config/bitcoin-config.h>
#endif
#include <stdint.h>
#if defined(HAVE_BYTESWAP_H)
#include <byteswap.h>
#endif
#if defined(MAC_OSX)
#include <libkern/OSByteOrder.h>
#define bswap_16(x) OSSwapInt16(x)
#define bswap_32(x) OSSwapInt32(x)
#define bswap_64(x) OSSwapInt64(x)
#else
// Non-MacOS / non-Darwin
#if HAVE_DECL_BSWAP_16 == 0
inline uint16_t bswap_16(uint16_t x)
{
return (x >> 8) | (x << 8);
}
#endif // HAVE_DECL_BSWAP16 == 0
#if HAVE_DECL_BSWAP_32 == 0
inline uint32_t bswap_32(uint32_t x)
{
return (((x & 0xff000000U) >> 24) | ((x & 0x00ff0000U) >> 8) |
((x & 0x0000ff00U) << 8) | ((x & 0x000000ffU) << 24));
}
#endif // HAVE_DECL_BSWAP32 == 0
#if HAVE_DECL_BSWAP_64 == 0
inline uint64_t bswap_64(uint64_t x)
{
return (((x & 0xff00000000000000ull) >> 56)
| ((x & 0x00ff000000000000ull) >> 40)
| ((x & 0x0000ff0000000000ull) >> 24)
| ((x & 0x000000ff00000000ull) >> 8)
| ((x & 0x00000000ff000000ull) << 8)
| ((x & 0x0000000000ff0000ull) << 24)
| ((x & 0x000000000000ff00ull) << 40)
| ((x & 0x00000000000000ffull) << 56));
}
#endif // HAVE_DECL_BSWAP64 == 0
#endif // defined(MAC_OSX)
#endif // BITCOIN_COMPAT_BYTESWAP_H

110
src/crypto/bitcoin/common.h Normal file
View file

@ -0,0 +1,110 @@
// Copyright (c) 2014-2018 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_CRYPTO_COMMON_H
#define BITCOIN_CRYPTO_COMMON_H
#if defined(HAVE_CONFIG_H)
#include <config/bitcoin-config.h>
#endif
#include <stdint.h>
#include <string.h>
#include "endian.h"
uint16_t static inline ReadLE16(const unsigned char* ptr)
{
uint16_t x;
memcpy((char*)&x, ptr, 2);
return le16toh(x);
}
uint32_t static inline ReadLE32(const unsigned char* ptr)
{
uint32_t x;
memcpy((char*)&x, ptr, 4);
return le32toh(x);
}
uint64_t static inline ReadLE64(const unsigned char* ptr)
{
uint64_t x;
memcpy((char*)&x, ptr, 8);
return le64toh(x);
}
void static inline WriteLE16(unsigned char* ptr, uint16_t x)
{
uint16_t v = htole16(x);
memcpy(ptr, (char*)&v, 2);
}
void static inline WriteLE32(unsigned char* ptr, uint32_t x)
{
uint32_t v = htole32(x);
memcpy(ptr, (char*)&v, 4);
}
void static inline WriteLE64(unsigned char* ptr, uint64_t x)
{
uint64_t v = htole64(x);
memcpy(ptr, (char*)&v, 8);
}
uint16_t static inline ReadBE16(const unsigned char* ptr)
{
uint16_t x;
memcpy((char*)&x, ptr, 2);
return be16toh(x);
}
uint32_t static inline ReadBE32(const unsigned char* ptr)
{
uint32_t x;
memcpy((char*)&x, ptr, 4);
return be32toh(x);
}
uint64_t static inline ReadBE64(const unsigned char* ptr)
{
uint64_t x;
memcpy((char*)&x, ptr, 8);
return be64toh(x);
}
void static inline WriteBE32(unsigned char* ptr, uint32_t x)
{
uint32_t v = htobe32(x);
memcpy(ptr, (char*)&v, 4);
}
void static inline WriteBE64(unsigned char* ptr, uint64_t x)
{
uint64_t v = htobe64(x);
memcpy(ptr, (char*)&v, 8);
}
/** Return the smallest number n such that (x >> n) == 0 (or 64 if the highest bit in x is set. */
uint64_t static inline CountBits(uint64_t x)
{
#if HAVE_BUILTIN_CLZL
if (sizeof(unsigned long) >= sizeof(uint64_t)) {
return x ? 8 * sizeof(unsigned long) - __builtin_clzl(x) : 0;
}
#endif
#if HAVE_BUILTIN_CLZLL
if (sizeof(unsigned long long) >= sizeof(uint64_t)) {
return x ? 8 * sizeof(unsigned long long) - __builtin_clzll(x) : 0;
}
#endif
int ret = 0;
while (x) {
x >>= 1;
++ret;
}
return ret;
}
#endif // BITCOIN_CRYPTO_COMMON_H

View file

@ -0,0 +1,24 @@
// Copyright (c) 2017-2019 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_COMPAT_CPUID_H
#define BITCOIN_COMPAT_CPUID_H
#if defined(__x86_64__) || defined(__amd64__) || defined(__i386__)
#define HAVE_GETCPUID
#include <cpuid.h>
// We can't use cpuid.h's __get_cpuid as it does not support subleafs.
void static inline GetCPUID(uint32_t leaf, uint32_t subleaf, uint32_t& a, uint32_t& b, uint32_t& c, uint32_t& d)
{
#ifdef __GNUC__
__cpuid_count(leaf, subleaf, a, b, c, d);
#else
__asm__ ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "0"(leaf), "2"(subleaf));
#endif
}
#endif // defined(__x86_64__) || defined(__amd64__) || defined(__i386__)
#endif // BITCOIN_COMPAT_CPUID_H

241
src/crypto/bitcoin/endian.h Normal file
View file

@ -0,0 +1,241 @@
// Copyright (c) 2014-2018 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_COMPAT_ENDIAN_H
#define BITCOIN_COMPAT_ENDIAN_H
#if defined(HAVE_CONFIG_H)
#include <config/bitcoin-config.h>
#endif
#include "byteswap.h"
#include <stdint.h>
#if defined(HAVE_ENDIAN_H)
#include <endian.h>
#elif defined(HAVE_SYS_ENDIAN_H)
#include <sys/endian.h>
#endif
#ifndef HAVE_CONFIG_H
// While not technically a supported configuration, defaulting to defining these
// DECLs when we were compiled without autotools makes it easier for other build
// systems to build things like libbitcoinconsensus for strange targets.
#ifdef htobe16
#define HAVE_DECL_HTOBE16 1
#endif
#ifdef htole16
#define HAVE_DECL_HTOLE16 1
#endif
#ifdef be16toh
#define HAVE_DECL_BE16TOH 1
#endif
#ifdef le16toh
#define HAVE_DECL_LE16TOH 1
#endif
#ifdef htobe32
#define HAVE_DECL_HTOBE32 1
#endif
#ifdef htole32
#define HAVE_DECL_HTOLE32 1
#endif
#ifdef be32toh
#define HAVE_DECL_BE32TOH 1
#endif
#ifdef le32toh
#define HAVE_DECL_LE32TOH 1
#endif
#ifdef htobe64
#define HAVE_DECL_HTOBE64 1
#endif
#ifdef htole64
#define HAVE_DECL_HTOLE64 1
#endif
#ifdef be64toh
#define HAVE_DECL_BE64TOH 1
#endif
#ifdef le64toh
#define HAVE_DECL_LE64TOH 1
#endif
#endif // HAVE_CONFIG_H
#if defined(WORDS_BIGENDIAN)
#if HAVE_DECL_HTOBE16 == 0
inline uint16_t htobe16(uint16_t host_16bits)
{
return host_16bits;
}
#endif // HAVE_DECL_HTOBE16
#if HAVE_DECL_HTOLE16 == 0
inline uint16_t htole16(uint16_t host_16bits)
{
return bswap_16(host_16bits);
}
#endif // HAVE_DECL_HTOLE16
#if HAVE_DECL_BE16TOH == 0
inline uint16_t be16toh(uint16_t big_endian_16bits)
{
return big_endian_16bits;
}
#endif // HAVE_DECL_BE16TOH
#if HAVE_DECL_LE16TOH == 0
inline uint16_t le16toh(uint16_t little_endian_16bits)
{
return bswap_16(little_endian_16bits);
}
#endif // HAVE_DECL_LE16TOH
#if HAVE_DECL_HTOBE32 == 0
inline uint32_t htobe32(uint32_t host_32bits)
{
return host_32bits;
}
#endif // HAVE_DECL_HTOBE32
#if HAVE_DECL_HTOLE32 == 0
inline uint32_t htole32(uint32_t host_32bits)
{
return bswap_32(host_32bits);
}
#endif // HAVE_DECL_HTOLE32
#if HAVE_DECL_BE32TOH == 0
inline uint32_t be32toh(uint32_t big_endian_32bits)
{
return big_endian_32bits;
}
#endif // HAVE_DECL_BE32TOH
#if HAVE_DECL_LE32TOH == 0
inline uint32_t le32toh(uint32_t little_endian_32bits)
{
return bswap_32(little_endian_32bits);
}
#endif // HAVE_DECL_LE32TOH
#if HAVE_DECL_HTOBE64 == 0
inline uint64_t htobe64(uint64_t host_64bits)
{
return host_64bits;
}
#endif // HAVE_DECL_HTOBE64
#if HAVE_DECL_HTOLE64 == 0
inline uint64_t htole64(uint64_t host_64bits)
{
return bswap_64(host_64bits);
}
#endif // HAVE_DECL_HTOLE64
#if HAVE_DECL_BE64TOH == 0
inline uint64_t be64toh(uint64_t big_endian_64bits)
{
return big_endian_64bits;
}
#endif // HAVE_DECL_BE64TOH
#if HAVE_DECL_LE64TOH == 0
inline uint64_t le64toh(uint64_t little_endian_64bits)
{
return bswap_64(little_endian_64bits);
}
#endif // HAVE_DECL_LE64TOH
#else // WORDS_BIGENDIAN
#if HAVE_DECL_HTOBE16 == 0
inline uint16_t htobe16(uint16_t host_16bits)
{
return bswap_16(host_16bits);
}
#endif // HAVE_DECL_HTOBE16
#if HAVE_DECL_HTOLE16 == 0
inline uint16_t htole16(uint16_t host_16bits)
{
return host_16bits;
}
#endif // HAVE_DECL_HTOLE16
#if HAVE_DECL_BE16TOH == 0
inline uint16_t be16toh(uint16_t big_endian_16bits)
{
return bswap_16(big_endian_16bits);
}
#endif // HAVE_DECL_BE16TOH
#if HAVE_DECL_LE16TOH == 0
inline uint16_t le16toh(uint16_t little_endian_16bits)
{
return little_endian_16bits;
}
#endif // HAVE_DECL_LE16TOH
#if HAVE_DECL_HTOBE32 == 0
inline uint32_t htobe32(uint32_t host_32bits)
{
return bswap_32(host_32bits);
}
#endif // HAVE_DECL_HTOBE32
#if HAVE_DECL_HTOLE32 == 0
inline uint32_t htole32(uint32_t host_32bits)
{
return host_32bits;
}
#endif // HAVE_DECL_HTOLE32
#if HAVE_DECL_BE32TOH == 0
inline uint32_t be32toh(uint32_t big_endian_32bits)
{
return bswap_32(big_endian_32bits);
}
#endif // HAVE_DECL_BE32TOH
#if HAVE_DECL_LE32TOH == 0
inline uint32_t le32toh(uint32_t little_endian_32bits)
{
return little_endian_32bits;
}
#endif // HAVE_DECL_LE32TOH
#if HAVE_DECL_HTOBE64 == 0
inline uint64_t htobe64(uint64_t host_64bits)
{
return bswap_64(host_64bits);
}
#endif // HAVE_DECL_HTOBE64
#if HAVE_DECL_HTOLE64 == 0
inline uint64_t htole64(uint64_t host_64bits)
{
return host_64bits;
}
#endif // HAVE_DECL_HTOLE64
#if HAVE_DECL_BE64TOH == 0
inline uint64_t be64toh(uint64_t big_endian_64bits)
{
return bswap_64(big_endian_64bits);
}
#endif // HAVE_DECL_BE64TOH
#if HAVE_DECL_LE64TOH == 0
inline uint64_t le64toh(uint64_t little_endian_64bits)
{
return little_endian_64bits;
}
#endif // HAVE_DECL_LE64TOH
#endif // WORDS_BIGENDIAN
#endif // BITCOIN_COMPAT_ENDIAN_H

View file

@ -0,0 +1,719 @@
// Copyright (c) 2014-2019 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "sha256.h"
#include "common.h"
#include <assert.h>
#include <string.h>
//#include <compat/cpuid.h>
#if defined(__x86_64__) || defined(__amd64__) || defined(__i386__)
#if defined(USE_ASM)
namespace sha256_sse4
{
void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks);
}
#endif
#endif
namespace sha256d64_sse41
{
void Transform_4way(unsigned char* out, const unsigned char* in);
}
namespace sha256d64_avx2
{
void Transform_8way(unsigned char* out, const unsigned char* in);
}
namespace sha256d64_shani
{
void Transform_2way(unsigned char* out, const unsigned char* in);
}
namespace sha256_shani
{
void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks);
}
// Internal implementation code.
namespace
{
/// Internal SHA-256 implementation.
namespace sha256
{
uint32_t inline Ch(uint32_t x, uint32_t y, uint32_t z) { return z ^ (x & (y ^ z)); }
uint32_t inline Maj(uint32_t x, uint32_t y, uint32_t z) { return (x & y) | (z & (x | y)); }
uint32_t inline Sigma0(uint32_t x) { return (x >> 2 | x << 30) ^ (x >> 13 | x << 19) ^ (x >> 22 | x << 10); }
uint32_t inline Sigma1(uint32_t x) { return (x >> 6 | x << 26) ^ (x >> 11 | x << 21) ^ (x >> 25 | x << 7); }
uint32_t inline sigma0(uint32_t x) { return (x >> 7 | x << 25) ^ (x >> 18 | x << 14) ^ (x >> 3); }
uint32_t inline sigma1(uint32_t x) { return (x >> 17 | x << 15) ^ (x >> 19 | x << 13) ^ (x >> 10); }
/** One round of SHA-256. */
void inline Round(uint32_t a, uint32_t b, uint32_t c, uint32_t& d, uint32_t e, uint32_t f, uint32_t g, uint32_t& h, uint32_t k)
{
uint32_t t1 = h + Sigma1(e) + Ch(e, f, g) + k;
uint32_t t2 = Sigma0(a) + Maj(a, b, c);
d += t1;
h = t1 + t2;
}
/** Initialize SHA-256 state. */
void inline Initialize(uint32_t* s)
{
s[0] = 0x6a09e667ul;
s[1] = 0xbb67ae85ul;
s[2] = 0x3c6ef372ul;
s[3] = 0xa54ff53aul;
s[4] = 0x510e527ful;
s[5] = 0x9b05688cul;
s[6] = 0x1f83d9abul;
s[7] = 0x5be0cd19ul;
}
/** Perform a number of SHA-256 transformations, processing 64-byte chunks. */
void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks)
{
while (blocks--) {
uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7];
uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
Round(a, b, c, d, e, f, g, h, 0x428a2f98 + (w0 = ReadBE32(chunk + 0)));
Round(h, a, b, c, d, e, f, g, 0x71374491 + (w1 = ReadBE32(chunk + 4)));
Round(g, h, a, b, c, d, e, f, 0xb5c0fbcf + (w2 = ReadBE32(chunk + 8)));
Round(f, g, h, a, b, c, d, e, 0xe9b5dba5 + (w3 = ReadBE32(chunk + 12)));
Round(e, f, g, h, a, b, c, d, 0x3956c25b + (w4 = ReadBE32(chunk + 16)));
Round(d, e, f, g, h, a, b, c, 0x59f111f1 + (w5 = ReadBE32(chunk + 20)));
Round(c, d, e, f, g, h, a, b, 0x923f82a4 + (w6 = ReadBE32(chunk + 24)));
Round(b, c, d, e, f, g, h, a, 0xab1c5ed5 + (w7 = ReadBE32(chunk + 28)));
Round(a, b, c, d, e, f, g, h, 0xd807aa98 + (w8 = ReadBE32(chunk + 32)));
Round(h, a, b, c, d, e, f, g, 0x12835b01 + (w9 = ReadBE32(chunk + 36)));
Round(g, h, a, b, c, d, e, f, 0x243185be + (w10 = ReadBE32(chunk + 40)));
Round(f, g, h, a, b, c, d, e, 0x550c7dc3 + (w11 = ReadBE32(chunk + 44)));
Round(e, f, g, h, a, b, c, d, 0x72be5d74 + (w12 = ReadBE32(chunk + 48)));
Round(d, e, f, g, h, a, b, c, 0x80deb1fe + (w13 = ReadBE32(chunk + 52)));
Round(c, d, e, f, g, h, a, b, 0x9bdc06a7 + (w14 = ReadBE32(chunk + 56)));
Round(b, c, d, e, f, g, h, a, 0xc19bf174 + (w15 = ReadBE32(chunk + 60)));
Round(a, b, c, d, e, f, g, h, 0xe49b69c1 + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0xefbe4786 + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x0fc19dc6 + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x240ca1cc + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x2de92c6f + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x4a7484aa + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x5cb0a9dc + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x76f988da + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0x983e5152 + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0xa831c66d + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0xb00327c8 + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0xbf597fc7 + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0xc6e00bf3 + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xd5a79147 + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0x06ca6351 + (w14 += sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0x14292967 + (w15 += sigma1(w13) + w8 + sigma0(w0)));
Round(a, b, c, d, e, f, g, h, 0x27b70a85 + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0x2e1b2138 + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x4d2c6dfc + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x53380d13 + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x650a7354 + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x766a0abb + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x81c2c92e + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x92722c85 + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1 + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0xa81a664b + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0xc24b8b70 + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0xc76c51a3 + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0xd192e819 + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xd6990624 + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0xf40e3585 + (w14 += sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0x106aa070 + (w15 += sigma1(w13) + w8 + sigma0(w0)));
Round(a, b, c, d, e, f, g, h, 0x19a4c116 + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0x1e376c08 + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x2748774c + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x34b0bcb5 + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x391c0cb3 + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x4ed8aa4a + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x5b9cca4f + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x682e6ff3 + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0x748f82ee + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0x78a5636f + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0x84c87814 + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0x8cc70208 + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0x90befffa + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xa4506ceb + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0xbef9a3f7 + (w14 + sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0xc67178f2 + (w15 + sigma1(w13) + w8 + sigma0(w0)));
s[0] += a;
s[1] += b;
s[2] += c;
s[3] += d;
s[4] += e;
s[5] += f;
s[6] += g;
s[7] += h;
chunk += 64;
}
}
void TransformD64(unsigned char* out, const unsigned char* in)
{
// Transform 1
uint32_t a = 0x6a09e667ul;
uint32_t b = 0xbb67ae85ul;
uint32_t c = 0x3c6ef372ul;
uint32_t d = 0xa54ff53aul;
uint32_t e = 0x510e527ful;
uint32_t f = 0x9b05688cul;
uint32_t g = 0x1f83d9abul;
uint32_t h = 0x5be0cd19ul;
uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
Round(a, b, c, d, e, f, g, h, 0x428a2f98ul + (w0 = ReadBE32(in + 0)));
Round(h, a, b, c, d, e, f, g, 0x71374491ul + (w1 = ReadBE32(in + 4)));
Round(g, h, a, b, c, d, e, f, 0xb5c0fbcful + (w2 = ReadBE32(in + 8)));
Round(f, g, h, a, b, c, d, e, 0xe9b5dba5ul + (w3 = ReadBE32(in + 12)));
Round(e, f, g, h, a, b, c, d, 0x3956c25bul + (w4 = ReadBE32(in + 16)));
Round(d, e, f, g, h, a, b, c, 0x59f111f1ul + (w5 = ReadBE32(in + 20)));
Round(c, d, e, f, g, h, a, b, 0x923f82a4ul + (w6 = ReadBE32(in + 24)));
Round(b, c, d, e, f, g, h, a, 0xab1c5ed5ul + (w7 = ReadBE32(in + 28)));
Round(a, b, c, d, e, f, g, h, 0xd807aa98ul + (w8 = ReadBE32(in + 32)));
Round(h, a, b, c, d, e, f, g, 0x12835b01ul + (w9 = ReadBE32(in + 36)));
Round(g, h, a, b, c, d, e, f, 0x243185beul + (w10 = ReadBE32(in + 40)));
Round(f, g, h, a, b, c, d, e, 0x550c7dc3ul + (w11 = ReadBE32(in + 44)));
Round(e, f, g, h, a, b, c, d, 0x72be5d74ul + (w12 = ReadBE32(in + 48)));
Round(d, e, f, g, h, a, b, c, 0x80deb1feul + (w13 = ReadBE32(in + 52)));
Round(c, d, e, f, g, h, a, b, 0x9bdc06a7ul + (w14 = ReadBE32(in + 56)));
Round(b, c, d, e, f, g, h, a, 0xc19bf174ul + (w15 = ReadBE32(in + 60)));
Round(a, b, c, d, e, f, g, h, 0xe49b69c1ul + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0xefbe4786ul + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x0fc19dc6ul + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x240ca1ccul + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x2de92c6ful + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x4a7484aaul + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x5cb0a9dcul + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x76f988daul + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0x983e5152ul + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0xa831c66dul + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0xb00327c8ul + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0xbf597fc7ul + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0xc6e00bf3ul + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xd5a79147ul + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0x06ca6351ul + (w14 += sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0x14292967ul + (w15 += sigma1(w13) + w8 + sigma0(w0)));
Round(a, b, c, d, e, f, g, h, 0x27b70a85ul + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0x2e1b2138ul + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x4d2c6dfcul + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x53380d13ul + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x650a7354ul + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x766a0abbul + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x81c2c92eul + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x92722c85ul + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1ul + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0xa81a664bul + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0xc24b8b70ul + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0xc76c51a3ul + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0xd192e819ul + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xd6990624ul + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0xf40e3585ul + (w14 += sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0x106aa070ul + (w15 += sigma1(w13) + w8 + sigma0(w0)));
Round(a, b, c, d, e, f, g, h, 0x19a4c116ul + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0x1e376c08ul + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x2748774cul + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x34b0bcb5ul + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x391c0cb3ul + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x4ed8aa4aul + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x5b9cca4ful + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x682e6ff3ul + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0x748f82eeul + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0x78a5636ful + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0x84c87814ul + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0x8cc70208ul + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0x90befffaul + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xa4506cebul + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0xbef9a3f7ul + (w14 + sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0xc67178f2ul + (w15 + sigma1(w13) + w8 + sigma0(w0)));
a += 0x6a09e667ul;
b += 0xbb67ae85ul;
c += 0x3c6ef372ul;
d += 0xa54ff53aul;
e += 0x510e527ful;
f += 0x9b05688cul;
g += 0x1f83d9abul;
h += 0x5be0cd19ul;
uint32_t t0 = a, t1 = b, t2 = c, t3 = d, t4 = e, t5 = f, t6 = g, t7 = h;
// Transform 2
Round(a, b, c, d, e, f, g, h, 0xc28a2f98ul);
Round(h, a, b, c, d, e, f, g, 0x71374491ul);
Round(g, h, a, b, c, d, e, f, 0xb5c0fbcful);
Round(f, g, h, a, b, c, d, e, 0xe9b5dba5ul);
Round(e, f, g, h, a, b, c, d, 0x3956c25bul);
Round(d, e, f, g, h, a, b, c, 0x59f111f1ul);
Round(c, d, e, f, g, h, a, b, 0x923f82a4ul);
Round(b, c, d, e, f, g, h, a, 0xab1c5ed5ul);
Round(a, b, c, d, e, f, g, h, 0xd807aa98ul);
Round(h, a, b, c, d, e, f, g, 0x12835b01ul);
Round(g, h, a, b, c, d, e, f, 0x243185beul);
Round(f, g, h, a, b, c, d, e, 0x550c7dc3ul);
Round(e, f, g, h, a, b, c, d, 0x72be5d74ul);
Round(d, e, f, g, h, a, b, c, 0x80deb1feul);
Round(c, d, e, f, g, h, a, b, 0x9bdc06a7ul);
Round(b, c, d, e, f, g, h, a, 0xc19bf374ul);
Round(a, b, c, d, e, f, g, h, 0x649b69c1ul);
Round(h, a, b, c, d, e, f, g, 0xf0fe4786ul);
Round(g, h, a, b, c, d, e, f, 0x0fe1edc6ul);
Round(f, g, h, a, b, c, d, e, 0x240cf254ul);
Round(e, f, g, h, a, b, c, d, 0x4fe9346ful);
Round(d, e, f, g, h, a, b, c, 0x6cc984beul);
Round(c, d, e, f, g, h, a, b, 0x61b9411eul);
Round(b, c, d, e, f, g, h, a, 0x16f988faul);
Round(a, b, c, d, e, f, g, h, 0xf2c65152ul);
Round(h, a, b, c, d, e, f, g, 0xa88e5a6dul);
Round(g, h, a, b, c, d, e, f, 0xb019fc65ul);
Round(f, g, h, a, b, c, d, e, 0xb9d99ec7ul);
Round(e, f, g, h, a, b, c, d, 0x9a1231c3ul);
Round(d, e, f, g, h, a, b, c, 0xe70eeaa0ul);
Round(c, d, e, f, g, h, a, b, 0xfdb1232bul);
Round(b, c, d, e, f, g, h, a, 0xc7353eb0ul);
Round(a, b, c, d, e, f, g, h, 0x3069bad5ul);
Round(h, a, b, c, d, e, f, g, 0xcb976d5ful);
Round(g, h, a, b, c, d, e, f, 0x5a0f118ful);
Round(f, g, h, a, b, c, d, e, 0xdc1eeefdul);
Round(e, f, g, h, a, b, c, d, 0x0a35b689ul);
Round(d, e, f, g, h, a, b, c, 0xde0b7a04ul);
Round(c, d, e, f, g, h, a, b, 0x58f4ca9dul);
Round(b, c, d, e, f, g, h, a, 0xe15d5b16ul);
Round(a, b, c, d, e, f, g, h, 0x007f3e86ul);
Round(h, a, b, c, d, e, f, g, 0x37088980ul);
Round(g, h, a, b, c, d, e, f, 0xa507ea32ul);
Round(f, g, h, a, b, c, d, e, 0x6fab9537ul);
Round(e, f, g, h, a, b, c, d, 0x17406110ul);
Round(d, e, f, g, h, a, b, c, 0x0d8cd6f1ul);
Round(c, d, e, f, g, h, a, b, 0xcdaa3b6dul);
Round(b, c, d, e, f, g, h, a, 0xc0bbbe37ul);
Round(a, b, c, d, e, f, g, h, 0x83613bdaul);
Round(h, a, b, c, d, e, f, g, 0xdb48a363ul);
Round(g, h, a, b, c, d, e, f, 0x0b02e931ul);
Round(f, g, h, a, b, c, d, e, 0x6fd15ca7ul);
Round(e, f, g, h, a, b, c, d, 0x521afacaul);
Round(d, e, f, g, h, a, b, c, 0x31338431ul);
Round(c, d, e, f, g, h, a, b, 0x6ed41a95ul);
Round(b, c, d, e, f, g, h, a, 0x6d437890ul);
Round(a, b, c, d, e, f, g, h, 0xc39c91f2ul);
Round(h, a, b, c, d, e, f, g, 0x9eccabbdul);
Round(g, h, a, b, c, d, e, f, 0xb5c9a0e6ul);
Round(f, g, h, a, b, c, d, e, 0x532fb63cul);
Round(e, f, g, h, a, b, c, d, 0xd2c741c6ul);
Round(d, e, f, g, h, a, b, c, 0x07237ea3ul);
Round(c, d, e, f, g, h, a, b, 0xa4954b68ul);
Round(b, c, d, e, f, g, h, a, 0x4c191d76ul);
w0 = t0 + a;
w1 = t1 + b;
w2 = t2 + c;
w3 = t3 + d;
w4 = t4 + e;
w5 = t5 + f;
w6 = t6 + g;
w7 = t7 + h;
// Transform 3
a = 0x6a09e667ul;
b = 0xbb67ae85ul;
c = 0x3c6ef372ul;
d = 0xa54ff53aul;
e = 0x510e527ful;
f = 0x9b05688cul;
g = 0x1f83d9abul;
h = 0x5be0cd19ul;
Round(a, b, c, d, e, f, g, h, 0x428a2f98ul + w0);
Round(h, a, b, c, d, e, f, g, 0x71374491ul + w1);
Round(g, h, a, b, c, d, e, f, 0xb5c0fbcful + w2);
Round(f, g, h, a, b, c, d, e, 0xe9b5dba5ul + w3);
Round(e, f, g, h, a, b, c, d, 0x3956c25bul + w4);
Round(d, e, f, g, h, a, b, c, 0x59f111f1ul + w5);
Round(c, d, e, f, g, h, a, b, 0x923f82a4ul + w6);
Round(b, c, d, e, f, g, h, a, 0xab1c5ed5ul + w7);
Round(a, b, c, d, e, f, g, h, 0x5807aa98ul);
Round(h, a, b, c, d, e, f, g, 0x12835b01ul);
Round(g, h, a, b, c, d, e, f, 0x243185beul);
Round(f, g, h, a, b, c, d, e, 0x550c7dc3ul);
Round(e, f, g, h, a, b, c, d, 0x72be5d74ul);
Round(d, e, f, g, h, a, b, c, 0x80deb1feul);
Round(c, d, e, f, g, h, a, b, 0x9bdc06a7ul);
Round(b, c, d, e, f, g, h, a, 0xc19bf274ul);
Round(a, b, c, d, e, f, g, h, 0xe49b69c1ul + (w0 += sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0xefbe4786ul + (w1 += 0xa00000ul + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x0fc19dc6ul + (w2 += sigma1(w0) + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x240ca1ccul + (w3 += sigma1(w1) + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x2de92c6ful + (w4 += sigma1(w2) + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x4a7484aaul + (w5 += sigma1(w3) + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x5cb0a9dcul + (w6 += sigma1(w4) + 0x100ul + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x76f988daul + (w7 += sigma1(w5) + w0 + 0x11002000ul));
Round(a, b, c, d, e, f, g, h, 0x983e5152ul + (w8 = 0x80000000ul + sigma1(w6) + w1));
Round(h, a, b, c, d, e, f, g, 0xa831c66dul + (w9 = sigma1(w7) + w2));
Round(g, h, a, b, c, d, e, f, 0xb00327c8ul + (w10 = sigma1(w8) + w3));
Round(f, g, h, a, b, c, d, e, 0xbf597fc7ul + (w11 = sigma1(w9) + w4));
Round(e, f, g, h, a, b, c, d, 0xc6e00bf3ul + (w12 = sigma1(w10) + w5));
Round(d, e, f, g, h, a, b, c, 0xd5a79147ul + (w13 = sigma1(w11) + w6));
Round(c, d, e, f, g, h, a, b, 0x06ca6351ul + (w14 = sigma1(w12) + w7 + 0x400022ul));
Round(b, c, d, e, f, g, h, a, 0x14292967ul + (w15 = 0x100ul + sigma1(w13) + w8 + sigma0(w0)));
Round(a, b, c, d, e, f, g, h, 0x27b70a85ul + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0x2e1b2138ul + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x4d2c6dfcul + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x53380d13ul + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x650a7354ul + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x766a0abbul + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x81c2c92eul + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x92722c85ul + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0xa2bfe8a1ul + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0xa81a664bul + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0xc24b8b70ul + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0xc76c51a3ul + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0xd192e819ul + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xd6990624ul + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0xf40e3585ul + (w14 += sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0x106aa070ul + (w15 += sigma1(w13) + w8 + sigma0(w0)));
Round(a, b, c, d, e, f, g, h, 0x19a4c116ul + (w0 += sigma1(w14) + w9 + sigma0(w1)));
Round(h, a, b, c, d, e, f, g, 0x1e376c08ul + (w1 += sigma1(w15) + w10 + sigma0(w2)));
Round(g, h, a, b, c, d, e, f, 0x2748774cul + (w2 += sigma1(w0) + w11 + sigma0(w3)));
Round(f, g, h, a, b, c, d, e, 0x34b0bcb5ul + (w3 += sigma1(w1) + w12 + sigma0(w4)));
Round(e, f, g, h, a, b, c, d, 0x391c0cb3ul + (w4 += sigma1(w2) + w13 + sigma0(w5)));
Round(d, e, f, g, h, a, b, c, 0x4ed8aa4aul + (w5 += sigma1(w3) + w14 + sigma0(w6)));
Round(c, d, e, f, g, h, a, b, 0x5b9cca4ful + (w6 += sigma1(w4) + w15 + sigma0(w7)));
Round(b, c, d, e, f, g, h, a, 0x682e6ff3ul + (w7 += sigma1(w5) + w0 + sigma0(w8)));
Round(a, b, c, d, e, f, g, h, 0x748f82eeul + (w8 += sigma1(w6) + w1 + sigma0(w9)));
Round(h, a, b, c, d, e, f, g, 0x78a5636ful + (w9 += sigma1(w7) + w2 + sigma0(w10)));
Round(g, h, a, b, c, d, e, f, 0x84c87814ul + (w10 += sigma1(w8) + w3 + sigma0(w11)));
Round(f, g, h, a, b, c, d, e, 0x8cc70208ul + (w11 += sigma1(w9) + w4 + sigma0(w12)));
Round(e, f, g, h, a, b, c, d, 0x90befffaul + (w12 += sigma1(w10) + w5 + sigma0(w13)));
Round(d, e, f, g, h, a, b, c, 0xa4506cebul + (w13 += sigma1(w11) + w6 + sigma0(w14)));
Round(c, d, e, f, g, h, a, b, 0xbef9a3f7ul + (w14 + sigma1(w12) + w7 + sigma0(w15)));
Round(b, c, d, e, f, g, h, a, 0xc67178f2ul + (w15 + sigma1(w13) + w8 + sigma0(w0)));
// Output
WriteBE32(out + 0, a + 0x6a09e667ul);
WriteBE32(out + 4, b + 0xbb67ae85ul);
WriteBE32(out + 8, c + 0x3c6ef372ul);
WriteBE32(out + 12, d + 0xa54ff53aul);
WriteBE32(out + 16, e + 0x510e527ful);
WriteBE32(out + 20, f + 0x9b05688cul);
WriteBE32(out + 24, g + 0x1f83d9abul);
WriteBE32(out + 28, h + 0x5be0cd19ul);
}
} // namespace sha256
typedef void(*TransformType)(uint32_t*, const unsigned char*, size_t);
typedef void(*TransformD64Type)(unsigned char*, const unsigned char*);
template<TransformType tr>
void TransformD64Wrapper(unsigned char* out, const unsigned char* in)
{
uint32_t s[8];
static const unsigned char padding1[64] = {
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, 2, 0
};
unsigned char buffer2[64] = {
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,
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, 1, 0
};
sha256::Initialize(s);
tr(s, in, 1);
tr(s, padding1, 1);
WriteBE32(buffer2 + 0, s[0]);
WriteBE32(buffer2 + 4, s[1]);
WriteBE32(buffer2 + 8, s[2]);
WriteBE32(buffer2 + 12, s[3]);
WriteBE32(buffer2 + 16, s[4]);
WriteBE32(buffer2 + 20, s[5]);
WriteBE32(buffer2 + 24, s[6]);
WriteBE32(buffer2 + 28, s[7]);
sha256::Initialize(s);
tr(s, buffer2, 1);
WriteBE32(out + 0, s[0]);
WriteBE32(out + 4, s[1]);
WriteBE32(out + 8, s[2]);
WriteBE32(out + 12, s[3]);
WriteBE32(out + 16, s[4]);
WriteBE32(out + 20, s[5]);
WriteBE32(out + 24, s[6]);
WriteBE32(out + 28, s[7]);
}
TransformType Transform = sha256::Transform;
TransformD64Type TransformD64 = sha256::TransformD64;
TransformD64Type TransformD64_2way = nullptr;
TransformD64Type TransformD64_4way = nullptr;
TransformD64Type TransformD64_8way = nullptr;
bool SelfTest() {
// Input state (equal to the initial SHA256 state)
static const uint32_t init[8] = {
0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul
};
// Some random input data to test with
static const unsigned char data[641] = "-" // Intentionally not aligned
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do "
"eiusmod tempor incididunt ut labore et dolore magna aliqua. Et m"
"olestie ac feugiat sed lectus vestibulum mattis ullamcorper. Mor"
"bi blandit cursus risus at ultrices mi tempus imperdiet nulla. N"
"unc congue nisi vita suscipit tellus mauris. Imperdiet proin fer"
"mentum leo vel orci. Massa tempor nec feugiat nisl pretium fusce"
" id velit. Telus in metus vulputate eu scelerisque felis. Mi tem"
"pus imperdiet nulla malesuada pellentesque. Tristique magna sit.";
// Expected output state for hashing the i*64 first input bytes above (excluding SHA256 padding).
static const uint32_t result[9][8] = {
{ 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul },
{ 0x91f8ec6bul, 0x4da10fe3ul, 0x1c9c292cul, 0x45e18185ul, 0x435cc111ul, 0x3ca26f09ul, 0xeb954caeul, 0x402a7069ul },
{ 0xcabea5acul, 0x374fb97cul, 0x182ad996ul, 0x7bd69cbful, 0x450ff900ul, 0xc1d2be8aul, 0x6a41d505ul, 0xe6212dc3ul },
{ 0xbcff09d6ul, 0x3e76f36eul, 0x3ecb2501ul, 0x78866e97ul, 0xe1c1e2fdul, 0x32f4eafful, 0x8aa6c4e5ul, 0xdfc024bcul },
{ 0xa08c5d94ul, 0x0a862f93ul, 0x6b7f2f40ul, 0x8f9fae76ul, 0x6d40439ful, 0x79dcee0cul, 0x3e39ff3aul, 0xdc3bdbb1ul },
{ 0x216a0895ul, 0x9f1a3662ul, 0xe99946f9ul, 0x87ba4364ul, 0x0fb5db2cul, 0x12bed3d3ul, 0x6689c0c7ul, 0x292f1b04ul },
{ 0xca3067f8ul, 0xbc8c2656ul, 0x37cb7e0dul, 0x9b6b8b0ful, 0x46dc380bul, 0xf1287f57ul, 0xc42e4b23ul, 0x3fefe94dul },
{ 0x3e4c4039ul, 0xbb6fca8cul, 0x6f27d2f7ul, 0x301e44a4ul, 0x8352ba14ul, 0x5769ce37ul, 0x48a1155ful, 0xc0e1c4c6ul },
{ 0xfe2fa9ddul, 0x69d0862bul, 0x1ae0db23ul, 0x471f9244ul, 0xf55c0145ul, 0xc30f9c3bul, 0x40a84ea0ul, 0x5b8a266cul },
};
// Expected output for each of the individual 8 64-byte messages under full double SHA256 (including padding).
static const unsigned char result_d64[256] = {
0x09, 0x3a, 0xc4, 0xd0, 0x0f, 0xf7, 0x57, 0xe1, 0x72, 0x85, 0x79, 0x42, 0xfe, 0xe7, 0xe0, 0xa0,
0xfc, 0x52, 0xd7, 0xdb, 0x07, 0x63, 0x45, 0xfb, 0x53, 0x14, 0x7d, 0x17, 0x22, 0x86, 0xf0, 0x52,
0x48, 0xb6, 0x11, 0x9e, 0x6e, 0x48, 0x81, 0x6d, 0xcc, 0x57, 0x1f, 0xb2, 0x97, 0xa8, 0xd5, 0x25,
0x9b, 0x82, 0xaa, 0x89, 0xe2, 0xfd, 0x2d, 0x56, 0xe8, 0x28, 0x83, 0x0b, 0xe2, 0xfa, 0x53, 0xb7,
0xd6, 0x6b, 0x07, 0x85, 0x83, 0xb0, 0x10, 0xa2, 0xf5, 0x51, 0x3c, 0xf9, 0x60, 0x03, 0xab, 0x45,
0x6c, 0x15, 0x6e, 0xef, 0xb5, 0xac, 0x3e, 0x6c, 0xdf, 0xb4, 0x92, 0x22, 0x2d, 0xce, 0xbf, 0x3e,
0xe9, 0xe5, 0xf6, 0x29, 0x0e, 0x01, 0x4f, 0xd2, 0xd4, 0x45, 0x65, 0xb3, 0xbb, 0xf2, 0x4c, 0x16,
0x37, 0x50, 0x3c, 0x6e, 0x49, 0x8c, 0x5a, 0x89, 0x2b, 0x1b, 0xab, 0xc4, 0x37, 0xd1, 0x46, 0xe9,
0x3d, 0x0e, 0x85, 0xa2, 0x50, 0x73, 0xa1, 0x5e, 0x54, 0x37, 0xd7, 0x94, 0x17, 0x56, 0xc2, 0xd8,
0xe5, 0x9f, 0xed, 0x4e, 0xae, 0x15, 0x42, 0x06, 0x0d, 0x74, 0x74, 0x5e, 0x24, 0x30, 0xce, 0xd1,
0x9e, 0x50, 0xa3, 0x9a, 0xb8, 0xf0, 0x4a, 0x57, 0x69, 0x78, 0x67, 0x12, 0x84, 0x58, 0xbe, 0xc7,
0x36, 0xaa, 0xee, 0x7c, 0x64, 0xa3, 0x76, 0xec, 0xff, 0x55, 0x41, 0x00, 0x2a, 0x44, 0x68, 0x4d,
0xb6, 0x53, 0x9e, 0x1c, 0x95, 0xb7, 0xca, 0xdc, 0x7f, 0x7d, 0x74, 0x27, 0x5c, 0x8e, 0xa6, 0x84,
0xb5, 0xac, 0x87, 0xa9, 0xf3, 0xff, 0x75, 0xf2, 0x34, 0xcd, 0x1a, 0x3b, 0x82, 0x2c, 0x2b, 0x4e,
0x6a, 0x46, 0x30, 0xa6, 0x89, 0x86, 0x23, 0xac, 0xf8, 0xa5, 0x15, 0xe9, 0x0a, 0xaa, 0x1e, 0x9a,
0xd7, 0x93, 0x6b, 0x28, 0xe4, 0x3b, 0xfd, 0x59, 0xc6, 0xed, 0x7c, 0x5f, 0xa5, 0x41, 0xcb, 0x51
};
// Test Transform() for 0 through 8 transformations.
for (size_t i = 0; i <= 8; ++i) {
uint32_t state[8];
std::copy(init, init + 8, state);
Transform(state, data + 1, i);
if (!std::equal(state, state + 8, result[i])) return false;
}
// Test TransformD64
unsigned char out[32];
TransformD64(out, data + 1);
if (!std::equal(out, out + 32, result_d64)) return false;
// Test TransformD64_2way, if available.
if (TransformD64_2way) {
unsigned char out[64];
TransformD64_2way(out, data + 1);
if (!std::equal(out, out + 64, result_d64)) return false;
}
// Test TransformD64_4way, if available.
if (TransformD64_4way) {
unsigned char out[128];
TransformD64_4way(out, data + 1);
if (!std::equal(out, out + 128, result_d64)) return false;
}
// Test TransformD64_8way, if available.
if (TransformD64_8way) {
unsigned char out[256];
TransformD64_8way(out, data + 1);
if (!std::equal(out, out + 256, result_d64)) return false;
}
return true;
}
#if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__))
/** Check whether the OS has enabled AVX registers. */
bool AVXEnabled()
{
uint32_t a, d;
__asm__("xgetbv" : "=a"(a), "=d"(d) : "c"(0));
return (a & 6) == 6;
}
#endif
} // namespace
std::string SHA256AutoDetect()
{
std::string ret = "standard";
#if defined(USE_ASM) && defined(HAVE_GETCPUID)
bool have_sse4 = false;
bool have_xsave = false;
bool have_avx = false;
bool have_avx2 = false;
bool have_shani = false;
bool enabled_avx = false;
(void)AVXEnabled;
(void)have_sse4;
(void)have_avx;
(void)have_xsave;
(void)have_avx2;
(void)have_shani;
(void)enabled_avx;
uint32_t eax, ebx, ecx, edx;
GetCPUID(1, 0, eax, ebx, ecx, edx);
have_sse4 = (ecx >> 19) & 1;
have_xsave = (ecx >> 27) & 1;
have_avx = (ecx >> 28) & 1;
if (have_xsave && have_avx) {
enabled_avx = AVXEnabled();
}
if (have_sse4) {
GetCPUID(7, 0, eax, ebx, ecx, edx);
have_avx2 = (ebx >> 5) & 1;
have_shani = (ebx >> 29) & 1;
}
#if defined(ENABLE_SHANI) && !defined(BUILD_BITCOIN_INTERNAL)
if (have_shani) {
Transform = sha256_shani::Transform;
TransformD64 = TransformD64Wrapper<sha256_shani::Transform>;
TransformD64_2way = sha256d64_shani::Transform_2way;
ret = "shani(1way,2way)";
have_sse4 = false; // Disable SSE4/AVX2;
have_avx2 = false;
}
#endif
if (have_sse4) {
#if defined(__x86_64__) || defined(__amd64__)
Transform = sha256_sse4::Transform;
TransformD64 = TransformD64Wrapper<sha256_sse4::Transform>;
ret = "sse4(1way)";
#endif
#if defined(ENABLE_SSE41) && !defined(BUILD_BITCOIN_INTERNAL)
TransformD64_4way = sha256d64_sse41::Transform_4way;
ret += ",sse41(4way)";
#endif
}
#if defined(ENABLE_AVX2) && !defined(BUILD_BITCOIN_INTERNAL)
if (have_avx2 && have_avx && enabled_avx) {
TransformD64_8way = sha256d64_avx2::Transform_8way;
ret += ",avx2(8way)";
}
#endif
#endif
assert(SelfTest());
return ret;
}
////// SHA-256
CSHA256::CSHA256() : bytes(0)
{
sha256::Initialize(s);
}
CSHA256& CSHA256::Write(const unsigned char* data, size_t len)
{
const unsigned char* end = data + len;
size_t bufsize = bytes % 64;
if (bufsize && bufsize + len >= 64) {
// Fill the buffer, and process it.
memcpy(buf + bufsize, data, 64 - bufsize);
bytes += 64 - bufsize;
data += 64 - bufsize;
Transform(s, buf, 1);
bufsize = 0;
}
if (end - data >= 64) {
size_t blocks = (end - data) / 64;
Transform(s, data, blocks);
data += 64 * blocks;
bytes += 64 * blocks;
}
if (end > data) {
// Fill the buffer with what remains.
memcpy(buf + bufsize, data, end - data);
bytes += end - data;
}
return *this;
}
void CSHA256::Finalize(unsigned char hash[OUTPUT_SIZE])
{
static const unsigned char pad[64] = { 0x80 };
unsigned char sizedesc[8];
WriteBE64(sizedesc, bytes << 3);
Write(pad, 1 + ((119 - (bytes % 64)) % 64));
Write(sizedesc, 8);
WriteBE32(hash, s[0]);
WriteBE32(hash + 4, s[1]);
WriteBE32(hash + 8, s[2]);
WriteBE32(hash + 12, s[3]);
WriteBE32(hash + 16, s[4]);
WriteBE32(hash + 20, s[5]);
WriteBE32(hash + 24, s[6]);
WriteBE32(hash + 28, s[7]);
}
CSHA256& CSHA256::Reset()
{
bytes = 0;
sha256::Initialize(s);
return *this;
}
void SHA256D64(unsigned char* out, const unsigned char* in, size_t blocks)
{
if (TransformD64_8way) {
while (blocks >= 8) {
TransformD64_8way(out, in);
out += 256;
in += 512;
blocks -= 8;
}
}
if (TransformD64_4way) {
while (blocks >= 4) {
TransformD64_4way(out, in);
out += 128;
in += 256;
blocks -= 4;
}
}
if (TransformD64_2way) {
while (blocks >= 2) {
TransformD64_2way(out, in);
out += 64;
in += 128;
blocks -= 2;
}
}
while (blocks) {
TransformD64(out, in);
out += 32;
in += 64;
--blocks;
}
}

View file

@ -0,0 +1,41 @@
// Copyright (c) 2014-2018 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_CRYPTO_SHA256_H
#define BITCOIN_CRYPTO_SHA256_H
#include <stdint.h>
#include <stdlib.h>
#include <string>
/** A hasher class for SHA-256. */
class CSHA256
{
private:
uint32_t s[8];
unsigned char buf[64];
uint64_t bytes;
public:
static const size_t OUTPUT_SIZE = 32;
CSHA256();
CSHA256& Write(const unsigned char* data, size_t len);
void Finalize(unsigned char hash[OUTPUT_SIZE]);
CSHA256& Reset();
};
/** Autodetect the best available SHA256 implementation.
* Returns the name of the implementation.
*/
std::string SHA256AutoDetect();
/** Compute multiple double-SHA256's of 64-byte blobs.
* output: pointer to a blocks*32 byte output buffer
* input: pointer to a blocks*64 byte input buffer
* blocks: the number of hashes to compute.
*/
void SHA256D64(unsigned char* output, const unsigned char* input, size_t blocks);
#endif // BITCOIN_CRYPTO_SHA256_H

View file

@ -0,0 +1,27 @@
// Copyright (c) 2020 The Zano developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#pragma once
#include "crypto/hash.h"
#include "sha256.h"
namespace crypto {
inline void sha256_hash(const void *data, std::size_t length, hash &h)
{
CSHA256 sh;
sh.Write((const unsigned char*)data, length);
sh.Finalize((unsigned char* )&h);
}
inline hash sha256_hash(const void *data, std::size_t length)
{
hash h;
sha256_hash(data, length, h);
return h;
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,10 @@
// Copyright (c) 2018-2021 Zano Project
// Copyright (c) 2012-2013 The Cryptonote developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#pragma once
#include <stddef.h> // size_t
/* From fe.h */
@ -104,17 +106,40 @@ void ge_scalarmult(ge_p2 *, const unsigned char *, const ge_p3 *);
void ge_scalarmult_p3(ge_p3 *, const unsigned char *, const ge_p3 *);
void ge_double_scalarmult_precomp_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *, const ge_dsmp);
void ge_mul8(ge_p1p1 *, const ge_p2 *);
void ge_mul8_p3(ge_p3 *, const ge_p3 *);
void ge_fromfe_frombytes_vartime(ge_p2 *, const unsigned char *);
void ge_p2_to_p3(ge_p3 *r, const ge_p2 *t);
void ge_bytes_hash_to_ec(ge_p3 *, const void *, size_t);
void ge_bytes_hash_to_ec_32(ge_p3 *, const unsigned char *);
void ge_p3_0(ge_p3 *h);
void ge_sub(ge_p1p1 *, const ge_p3 *, const ge_cached *);
void ge_double_scalarmult_base_vartime_p3(ge_p3 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b);
void ge_scalarmult_vartime_p3(ge_p3 *r, const unsigned char *a, const ge_p3 *A);
void ge_scalarmult_vartime_p3_v2(ge_p3 *r, const unsigned char *a, const ge_p3 *A);
extern const fe fe_ma2;
extern const fe fe_ma;
extern const fe fe_fffb1;
extern const fe fe_fffb2;
extern const fe fe_fffb3;
extern const fe fe_fffb4;
void ge_fromfe_frombytes_vartime(ge_p2 *, const unsigned char *);
void sc_0(unsigned char *);
void sc_reduce32(unsigned char *);
void sc_add(unsigned char *, const unsigned char *, const unsigned char *);
void sc_sub(unsigned char *, const unsigned char *, const unsigned char *);
void sc_mulsub(unsigned char *, const unsigned char *, const unsigned char *, const unsigned char *);
void sc_mul(unsigned char *, const unsigned char *, const unsigned char *);
void sc_muladd(unsigned char* s, const unsigned char* a, const unsigned char* b, const unsigned char* c);
int sc_check(const unsigned char *);
int sc_isnonzero(const unsigned char *); /* Doesn't normalize */
void sc_invert(unsigned char*, const unsigned char*);
void fe_sq(fe h, const fe f);
int fe_isnonzero(const fe f);
int fe_cmp(const fe a, const fe b);
void fe_mul(fe, const fe, const fe);
void fe_frombytes(fe h, const unsigned char *s);
void fe_invert(fe out, const fe z);
void fe_tobytes(unsigned char *s, const fe h);

View file

@ -0,0 +1,26 @@
// Copyright (c) 2020-2021 Zano Project
// Copyright (c) 2020-2021 sowle (val@zano.org, crypto.sowle@gmail.com)
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
//
// Note: This file originates from tests/functional_tests/crypto_tests.cpp
#include "crypto-sugar.h"
namespace crypto
{
const point_g_t c_point_G;
const scalar_t c_scalar_1 = { 1 };
const scalar_t c_scalar_L = { 0x5812631a5cf5d3ed, 0x14def9dea2f79cd6, 0x0, 0x1000000000000000 };
const scalar_t c_scalar_Lm1 = { 0x5812631a5cf5d3ec, 0x14def9dea2f79cd6, 0x0, 0x1000000000000000 };
const scalar_t c_scalar_P = { 0xffffffffffffffed, 0xffffffffffffffff, 0xffffffffffffffff, 0x7fffffffffffffff };
const scalar_t c_scalar_Pm1 = { 0xffffffffffffffec, 0xffffffffffffffff, 0xffffffffffffffff, 0x7fffffffffffffff };
const scalar_t c_scalar_256m1 = { 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff };
const scalar_t c_scalar_1div8 = { 0x6106e529e2dc2f79, 0x07d39db37d1cdad0, 0x0, 0x0600000000000000 };
const point_t c_point_H = { 0x05087c1f5b9b32d6, 0x00547595f445c3b5, 0x764df64578552f2a, 0x8a49a651e0e0da45 }; // == Hp(G), this is being checked in bpp_basics
const point_t c_point_0 = point_t(point_t::tag_zero());
} // namespace crypto

889
src/crypto/crypto-sugar.h Normal file
View file

@ -0,0 +1,889 @@
// Copyright (c) 2020-2021 Zano Project
// Copyright (c) 2020-2021 sowle (val@zano.org, crypto.sowle@gmail.com)
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
//
// Note: This file originates from tests/functional_tests/crypto_tests.cpp
#pragma once
#include <string>
#include <boost/multiprecision/cpp_int.hpp>
#include "crypto.h"
namespace crypto
{
extern "C"
{
#include "crypto/crypto-ops.h"
} // extern "C"
//
// Helpers
//
template<class pod_t>
std::string pod_to_hex_reversed(const pod_t &h)
{
constexpr char hexmap[] = "0123456789abcdef";
const unsigned char* data = reinterpret_cast<const unsigned char*>(&h);
size_t len = sizeof h;
std::string s(len * 2, ' ');
for (size_t i = 0; i < len; ++i) {
s[2 * i] = hexmap[data[len - 1 - i] >> 4];
s[2 * i + 1] = hexmap[data[len - 1 - i] & 0x0F];
}
return s;
}
template<class pod_t>
std::string pod_to_hex(const pod_t &h)
{
constexpr char hexmap[] = "0123456789abcdef";
const unsigned char* data = reinterpret_cast<const unsigned char*>(&h);
size_t len = sizeof h;
std::string s(len * 2, ' ');
for (size_t i = 0; i < len; ++i) {
s[2 * i] = hexmap[data[i] >> 4];
s[2 * i + 1] = hexmap[data[i] & 0x0F];
}
return s;
}
template<class pod_t>
std::string pod_to_hex_comma_separated_bytes(const pod_t &h)
{
std::stringstream ss;
ss << std::hex << std::setfill('0');
size_t len = sizeof h;
const unsigned char* p = (const unsigned char*)&h;
for (size_t i = 0; i < len; ++i)
{
ss << "0x" << std::setw(2) << static_cast<unsigned int>(p[i]);
if (i + 1 != len)
ss << ", ";
}
return ss.str();
}
template<class pod_t>
std::string pod_to_hex_comma_separated_uint64(const pod_t &h)
{
static_assert((sizeof h) % 8 == 0, "size of h should be a multiple of 64 bit");
size_t len = (sizeof h) / 8;
std::stringstream ss;
ss << std::hex << std::setfill('0');
const uint64_t* p = (const uint64_t*)&h;
for (size_t i = 0; i < len; ++i)
{
ss << "0x" << std::setw(16) << static_cast<uint64_t>(p[i]);
if (i + 1 != len)
ss << ", ";
}
return ss.str();
}
template<typename t_pod_type>
bool parse_tpod_from_hex_string(const std::string& hex_str, t_pod_type& t_pod)
{
static const int16_t char_map[256] = { // 0-9, a-f, A-F is only allowed
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x00 - 0x1F
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, // 0x20 - 0x3F
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x40 - 0x5F
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x60 - 0x7F
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x80 - 0x9F
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0xA0 - 0xBF
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0xC0 - 0xDF
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; // 0xE0 - 0xFF
size_t pod_size = sizeof t_pod;
uint8_t *p = reinterpret_cast<uint8_t*>(&t_pod);
if (hex_str.size() != 2 * pod_size)
return false;
for (size_t i = 0; i < pod_size; ++i)
{
int16_t hi = char_map[static_cast<uint8_t>(hex_str[2 * i])];
int16_t lo = char_map[static_cast<uint8_t>(hex_str[2 * i + 1])];
if (hi < 0 || lo < 0)
{
// invalid characters in hex_str
memset(p, 0, pod_size);
return false;
}
p[i] = static_cast<uint8_t>(hi * 16 + lo); // write byte to pod
}
return true;
}
template<typename t_pod_type>
t_pod_type parse_tpod_from_hex_string(const std::string& hex_str)
{
t_pod_type t_pod = AUTO_VAL_INIT(t_pod);
parse_tpod_from_hex_string(hex_str, t_pod);
return t_pod;
}
//
// scalar_t - holds a 256-bit scalar, normally in [0..L-1]
//
struct alignas(32) scalar_t
{
union
{
uint64_t m_u64[4];
unsigned char m_s[32];
};
scalar_t()
{}
// won't check scalar range validity (< L)
scalar_t(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3)
{
m_u64[0] = a0;
m_u64[1] = a1;
m_u64[2] = a2;
m_u64[3] = a3;
}
// won't check scalar range validity (< L)
scalar_t(const unsigned char(&v)[32])
{
memcpy(m_s, v, 32);
}
// won't check secret key validity (sk < L)
scalar_t(const crypto::secret_key& sk)
{
from_secret_key(sk);
}
// copy data and reduce
scalar_t(const crypto::hash& hash)
{
m_u64[0] = ((uint64_t*)&hash)[0];
m_u64[1] = ((uint64_t*)&hash)[1];
m_u64[2] = ((uint64_t*)&hash)[2];
m_u64[3] = ((uint64_t*)&hash)[3];
sc_reduce32(&m_s[0]);
}
scalar_t(uint64_t v)
{
zero();
m_u64[0] = v;
// do not need to call reduce as 2^64 < L
}
// copy at most 256 bits (32 bytes) and reduce
template<typename T>
explicit scalar_t(const boost::multiprecision::number<T>& bigint)
{
zero();
unsigned int bytes_to_copy = bigint.backend().size() * bigint.backend().limb_bits / 8;
if (bytes_to_copy > sizeof *this)
bytes_to_copy = sizeof *this;
memcpy(&m_s[0], bigint.backend().limbs(), bytes_to_copy);
sc_reduce32(&m_s[0]);
}
unsigned char* data()
{
return &m_s[0];
}
const unsigned char* data() const
{
return &m_s[0];
}
crypto::secret_key &as_secret_key()
{
return *(crypto::secret_key*)&m_s[0];
}
const crypto::secret_key& as_secret_key() const
{
return *(const crypto::secret_key*)&m_s[0];
}
operator crypto::secret_key() const
{
crypto::secret_key result;
memcpy(result.data, &m_s, sizeof result.data);
return result;
}
void from_secret_key(const crypto::secret_key& sk)
{
uint64_t *p_sk64 = (uint64_t*)&sk;
m_u64[0] = p_sk64[0];
m_u64[1] = p_sk64[1];
m_u64[2] = p_sk64[2];
m_u64[3] = p_sk64[3];
// assuming secret key is correct (< L), so we don't need to call reduce here
}
void zero()
{
m_u64[0] = 0;
m_u64[1] = 0;
m_u64[2] = 0;
m_u64[3] = 0;
}
// genrate 0 <= x < L
static scalar_t random()
{
scalar_t result;
result.make_random();
return result;
}
// genrate 0 <= x < L
void make_random()
{
unsigned char tmp[64];
crypto::generate_random_bytes(64, tmp);
sc_reduce(tmp);
memcpy(&m_s, tmp, sizeof m_s);
/* // for tests
int x[8] = { rand() };
crypto::cn_fast_hash(&x, sizeof x, *(crypto::hash*)this);
sc_reduce32(m_s);
*/
}
bool is_zero() const
{
return sc_isnonzero(&m_s[0]) == 0;
}
bool is_reduced() const
{
return sc_check(&m_s[0]) == 0;
}
scalar_t operator+(const scalar_t& v) const
{
scalar_t result;
sc_add(&result.m_s[0], &m_s[0], &v.m_s[0]);
return result;
}
scalar_t& operator+=(const scalar_t& v)
{
sc_add(&m_s[0], &m_s[0], &v.m_s[0]);
return *this;
}
scalar_t operator-(const scalar_t& v) const
{
scalar_t result;
sc_sub(&result.m_s[0], &m_s[0], &v.m_s[0]);
return result;
}
scalar_t& operator-=(const scalar_t& v)
{
sc_sub(&m_s[0], &m_s[0], &v.m_s[0]);
return *this;
}
scalar_t operator*(const scalar_t& v) const
{
scalar_t result;
sc_mul(result.m_s, m_s, v.m_s);
return result;
}
scalar_t& operator*=(const scalar_t& v)
{
sc_mul(m_s, m_s, v.m_s);
return *this;
}
/*
I think it has bad symantic (operator-like), consider rename/reimplement -- sowle
*/
// returns this * b + c
scalar_t muladd(const scalar_t& b, const scalar_t& c) const
{
scalar_t result;
sc_muladd(result.m_s, m_s, b.m_s, c.m_s);
return result;
}
// returns this = a * b + c
scalar_t& assign_muladd(const scalar_t& a, const scalar_t& b, const scalar_t& c)
{
sc_muladd(m_s, a.m_s, b.m_s, c.m_s);
return *this;
}
scalar_t reciprocal() const
{
scalar_t result;
sc_invert(result.m_s, m_s);
return result;
}
scalar_t operator/(const scalar_t& v) const
{
return operator*(v.reciprocal());
}
scalar_t& operator/=(const scalar_t& v)
{
scalar_t reciprocal;
sc_invert(&reciprocal.m_s[0], &v.m_s[0]);
sc_mul(&m_s[0], &m_s[0], &reciprocal.m_s[0]);
return *this;
}
bool operator==(const scalar_t& rhs) const
{
return
m_u64[0] == rhs.m_u64[0] &&
m_u64[1] == rhs.m_u64[1] &&
m_u64[2] == rhs.m_u64[2] &&
m_u64[3] == rhs.m_u64[3];
}
bool operator!=(const scalar_t& rhs) const
{
return
m_u64[0] != rhs.m_u64[0] ||
m_u64[1] != rhs.m_u64[1] ||
m_u64[2] != rhs.m_u64[2] ||
m_u64[3] != rhs.m_u64[3];
}
bool operator<(const scalar_t& rhs) const
{
if (m_u64[3] < rhs.m_u64[3]) return true;
if (m_u64[3] > rhs.m_u64[3]) return false;
if (m_u64[2] < rhs.m_u64[2]) return true;
if (m_u64[2] > rhs.m_u64[2]) return false;
if (m_u64[1] < rhs.m_u64[1]) return true;
if (m_u64[1] > rhs.m_u64[1]) return false;
if (m_u64[0] < rhs.m_u64[0]) return true;
if (m_u64[0] > rhs.m_u64[0]) return false;
return false;
}
bool operator>(const scalar_t& rhs) const
{
if (m_u64[3] < rhs.m_u64[3]) return false;
if (m_u64[3] > rhs.m_u64[3]) return true;
if (m_u64[2] < rhs.m_u64[2]) return false;
if (m_u64[2] > rhs.m_u64[2]) return true;
if (m_u64[1] < rhs.m_u64[1]) return false;
if (m_u64[1] > rhs.m_u64[1]) return true;
if (m_u64[0] < rhs.m_u64[0]) return false;
if (m_u64[0] > rhs.m_u64[0]) return true;
return false;
}
friend std::ostream& operator<<(std::ostream& ss, const scalar_t &v)
{
return ss << pod_to_hex(v);
}
std::string to_string_as_hex_number() const
{
return pod_to_hex_reversed(*this);
}
std::string to_string_as_secret_key() const
{
return pod_to_hex(*this);
}
template<typename MP_type>
MP_type as_boost_mp_type() const
{
MP_type result = 0;
static_assert(sizeof result >= sizeof *this, "size missmatch"); // to avoid using types less than uint256_t
unsigned int sz = sizeof *this / sizeof(boost::multiprecision::limb_type);
result.backend().resize(sz, sz);
memcpy(result.backend().limbs(), &m_s[0], sizeof *this);
result.backend().normalize();
return result;
}
}; // struct scalar_t
//
//
//
struct point_t
{
struct tag_zero {};
// A point(x, y) is represented in extended homogeneous coordinates (X, Y, Z, T)
// with x = X / Z, y = Y / Z, x * y = T / Z.
ge_p3 m_p3;
point_t()
{
}
explicit point_t(const crypto::public_key& pk)
{
if (!from_public_key(pk))
zero();
}
point_t(const unsigned char(&v)[32])
{
static_assert(sizeof(crypto::public_key) == sizeof v, "size missmatch");
if (!from_public_key(*(const crypto::public_key*)v))
zero();
}
point_t(const uint64_t(&v)[4])
{
static_assert(sizeof(crypto::public_key) == sizeof v, "size missmatch");
if (!from_public_key(*(const crypto::public_key*)v))
zero();
}
point_t(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3)
{
crypto::public_key pk;
((uint64_t*)&pk)[0] = a0;
((uint64_t*)&pk)[1] = a1;
((uint64_t*)&pk)[2] = a2;
((uint64_t*)&pk)[3] = a3;
if (!from_public_key(pk))
zero();
}
explicit point_t(tag_zero&&)
{
zero();
}
void zero()
{
ge_p3_0(&m_p3);
}
bool is_zero() const
{
// (0, 1) ~ (0, z, z, 0)
return fe_isnonzero(m_p3.X) * fe_cmp(m_p3.Y, m_p3.Z) == 0;
}
bool from_public_key(const crypto::public_key& pk)
{
return ge_frombytes_vartime(&m_p3, reinterpret_cast<const unsigned char*>(&pk)) == 0;
}
bool from_key_image(const crypto::key_image& ki)
{
return ge_frombytes_vartime(&m_p3, reinterpret_cast<const unsigned char*>(&ki)) == 0;
}
bool from_string(const std::string& str)
{
crypto::public_key pk;
if (!parse_tpod_from_hex_string(str, pk))
return false;
return from_public_key(pk);
}
crypto::public_key to_public_key() const
{
crypto::public_key result;
ge_p3_tobytes((unsigned char*)&result, &m_p3);
return result;
}
void to_public_key(crypto::public_key& result) const
{
ge_p3_tobytes((unsigned char*)&result, &m_p3);
}
crypto::key_image to_key_image() const
{
crypto::key_image result;
ge_p3_tobytes((unsigned char*)&result, &m_p3);
return result;
}
point_t operator+(const point_t& rhs) const
{
point_t result;
ge_cached rhs_c;
ge_p1p1 t;
ge_p3_to_cached(&rhs_c, &rhs.m_p3);
ge_add(&t, &m_p3, &rhs_c);
ge_p1p1_to_p3(&result.m_p3, &t);
return result;
}
point_t& operator+=(const point_t& rhs)
{
ge_cached rhs_c;
ge_p1p1 t;
ge_p3_to_cached(&rhs_c, &rhs.m_p3);
ge_add(&t, &m_p3, &rhs_c);
ge_p1p1_to_p3(&m_p3, &t);
return *this;
}
point_t operator-(const point_t& rhs) const
{
point_t result;
ge_cached rhs_c;
ge_p1p1 t;
ge_p3_to_cached(&rhs_c, &rhs.m_p3);
ge_sub(&t, &m_p3, &rhs_c);
ge_p1p1_to_p3(&result.m_p3, &t);
return result;
}
point_t& operator-=(const point_t& rhs)
{
ge_cached rhs_c;
ge_p1p1 t;
ge_p3_to_cached(&rhs_c, &rhs.m_p3);
ge_sub(&t, &m_p3, &rhs_c);
ge_p1p1_to_p3(&m_p3, &t);
return *this;
}
friend point_t operator*(const scalar_t& lhs, const point_t& rhs)
{
point_t result;
ge_scalarmult_p3(&result.m_p3, lhs.m_s, &rhs.m_p3);
return result;
}
point_t& operator*=(const scalar_t& rhs)
{
// TODO: ge_scalarmult_vartime_p3
ge_scalarmult_p3(&m_p3, rhs.m_s, &m_p3);
return *this;
}
friend point_t operator/(const point_t& lhs, const scalar_t& rhs)
{
point_t result;
scalar_t reciprocal;
sc_invert(&reciprocal.m_s[0], &rhs.m_s[0]);
ge_scalarmult_p3(&result.m_p3, &reciprocal.m_s[0], &lhs.m_p3);
return result;
}
point_t& modify_mul8()
{
ge_mul8_p3(&m_p3, &m_p3);
return *this;
}
// returns a * this + G
point_t mul_plus_G(const scalar_t& a) const
{
static const unsigned char one[32] = { 1 };
static_assert(sizeof one == sizeof(crypto::ec_scalar), "size missmatch");
point_t result;
ge_double_scalarmult_base_vartime_p3(&result.m_p3, &a.m_s[0], &m_p3, &one[0]);
return result;
}
// returns a * this + b * G
point_t mul_plus_G(const scalar_t& a, const scalar_t& b) const
{
point_t result;
ge_double_scalarmult_base_vartime_p3(&result.m_p3, &a.m_s[0], &m_p3, &b.m_s[0]);
return result;
}
// *this = a * A + b * G
void assign_mul_plus_G(const scalar_t& a, const point_t& A, const scalar_t& b)
{
ge_double_scalarmult_base_vartime_p3(&m_p3, &a.m_s[0], &A.m_p3, &b.m_s[0]);
}
friend bool operator==(const point_t& lhs, const point_t& rhs)
{
// convert to xy form, then compare components (because (x, y, z, t) representation is not unique)
fe lrecip, lx, ly;
fe rrecip, rx, ry;
fe_invert(lrecip, lhs.m_p3.Z);
fe_invert(rrecip, rhs.m_p3.Z);
fe_mul(lx, lhs.m_p3.X, lrecip);
fe_mul(rx, rhs.m_p3.X, rrecip);
if (memcmp(&lx, &rx, sizeof lx) != 0)
return false;
fe_mul(ly, lhs.m_p3.Y, lrecip);
fe_mul(ry, rhs.m_p3.Y, rrecip);
if (memcmp(&ly, &ry, sizeof ly) != 0)
return false;
return true;
};
friend std::ostream& operator<<(std::ostream& ss, const point_t &v)
{
crypto::public_key pk = v.to_public_key();
return ss << pod_to_hex(pk);
}
operator std::string() const
{
crypto::public_key pk = to_public_key();
return pod_to_hex(pk);
}
std::string to_string() const
{
crypto::public_key pk = to_public_key();
return pod_to_hex(pk);
}
std::string to_hex_comma_separated_bytes_str() const
{
crypto::public_key pk = to_public_key();
return pod_to_hex_comma_separated_bytes(pk);
}
std::string to_hex_comma_separated_uint64_str() const
{
crypto::public_key pk = to_public_key();
return pod_to_hex_comma_separated_uint64(pk);
}
}; // struct point_t
//
// point_g_t -- special type for curve's base point
//
struct point_g_t : public point_t
{
point_g_t()
{
scalar_t one(1);
ge_scalarmult_base(&m_p3, &one.m_s[0]);
}
friend point_t operator*(const scalar_t& lhs, const point_g_t&)
{
point_t result;
ge_scalarmult_base(&result.m_p3, &lhs.m_s[0]);
return result;
}
friend point_t operator/(const point_g_t&, const scalar_t& rhs)
{
point_t result;
scalar_t reciprocal;
sc_invert(&reciprocal.m_s[0], &rhs.m_s[0]);
ge_scalarmult_base(&result.m_p3, &reciprocal.m_s[0]);
return result;
}
static_assert(sizeof(crypto::public_key) == 32, "size error");
}; // struct point_g_t
//
// Global constants
//
extern const point_g_t c_point_G;
extern const scalar_t c_scalar_1;
extern const scalar_t c_scalar_L;
extern const scalar_t c_scalar_Lm1;
extern const scalar_t c_scalar_P;
extern const scalar_t c_scalar_Pm1;
extern const scalar_t c_scalar_256m1;
extern const scalar_t c_scalar_1div8;
extern const point_t c_point_H;
extern const point_t c_point_0;
//
// hash functions' helper
//
struct hash_helper_t
{
static scalar_t hs(const scalar_t& s)
{
return scalar_t(crypto::cn_fast_hash(s.data(), sizeof s)); // will reduce mod L
}
static scalar_t hs(const void* data, size_t size)
{
return scalar_t(crypto::cn_fast_hash(data, size)); // will reduce mod L
}
static scalar_t hs(const std::string& str)
{
return scalar_t(crypto::cn_fast_hash(str.c_str(), str.size())); // will reduce mod L
}
struct hs_t
{
hs_t()
{
static_assert(sizeof(scalar_t) == sizeof(crypto::public_key), "unexpected size of data");
}
void reserve(size_t elements_count)
{
m_elements.reserve(elements_count);
}
void resize(size_t elements_count)
{
m_elements.resize(elements_count);
}
void clear()
{
m_elements.clear();
}
void add_scalar(const scalar_t& scalar)
{
m_elements.emplace_back(scalar);
}
void add_point(const point_t& point)
{
m_elements.emplace_back(point.to_public_key());
// faster?
/* static_assert(sizeof point.m_p3 == 5 * sizeof(item_t), "size missmatch");
const item_t *p = (item_t*)&point.m_p3;
m_elements.emplace_back(p[0]);
m_elements.emplace_back(p[1]);
m_elements.emplace_back(p[2]);
m_elements.emplace_back(p[3]);
m_elements.emplace_back(p[4]); */
}
void add_pub_key(const crypto::public_key& pk)
{
m_elements.emplace_back(pk);
}
scalar_t& access_scalar(size_t index)
{
return m_elements[index].scalar;
}
public_key& access_public_key(size_t index)
{
return m_elements[index].pk;
}
void add_points_array(const std::vector<point_t>& points_array)
{
for (size_t i = 0, size = points_array.size(); i < size; ++i)
add_point(points_array[i]);
}
void add_pub_keys_array(const std::vector<crypto::public_key>& pub_keys_array)
{
for (size_t i = 0, size = pub_keys_array.size(); i < size; ++i)
m_elements.emplace_back(pub_keys_array[i]);
}
void add_key_images_array(const std::vector<crypto::key_image>& key_image_array)
{
for (size_t i = 0, size = key_image_array.size(); i < size; ++i)
m_elements.emplace_back(key_image_array[i]);
}
scalar_t calc_hash(bool clear = true)
{
size_t data_size_bytes = m_elements.size() * sizeof(item_t);
crypto::hash hash;
crypto::cn_fast_hash(m_elements.data(), data_size_bytes, hash);
if (clear)
this->clear();
return scalar_t(hash); // this will reduce to L
}
union item_t
{
item_t() {}
item_t(const scalar_t& scalar) : scalar(scalar) {}
item_t(const crypto::public_key& pk) : pk(pk) {}
item_t(const crypto::key_image& ki) : ki(ki) {}
scalar_t scalar;
crypto::public_key pk;
crypto::key_image ki;
};
std::vector<item_t> m_elements;
};
static scalar_t hs(const scalar_t& s, const std::vector<point_t>& ps0, const std::vector<point_t>& ps1)
{
hs_t hs_calculator;
hs_calculator.add_scalar(s);
hs_calculator.add_points_array(ps0);
hs_calculator.add_points_array(ps1);
return hs_calculator.calc_hash();
}
static scalar_t hs(const crypto::hash& s, const std::vector<crypto::public_key>& ps0, const std::vector<crypto::key_image>& ps1)
{
static_assert(sizeof(crypto::hash) == sizeof(scalar_t), "size missmatch");
hs_t hs_calculator;
hs_calculator.add_scalar(*reinterpret_cast<const scalar_t*>(&s));
hs_calculator.add_pub_keys_array(ps0);
hs_calculator.add_key_images_array(ps1);
return hs_calculator.calc_hash();
}
static scalar_t hs(const std::vector<point_t>& ps0, const std::vector<point_t>& ps1)
{
hs_t hs_calculator;
hs_calculator.add_points_array(ps0);
hs_calculator.add_points_array(ps1);
return hs_calculator.calc_hash();
}
static point_t hp(const point_t& p)
{
point_t result;
crypto::public_key pk = p.to_public_key();
ge_bytes_hash_to_ec_32(&result.m_p3, (const unsigned char*)&pk);
return result;
}
static point_t hp(const crypto::public_key& p)
{
point_t result;
ge_bytes_hash_to_ec_32(&result.m_p3, (const unsigned char*)&p);
return result;
}
}; // hash_helper_t struct
} // namespace crypto

View file

@ -303,11 +303,13 @@ namespace crypto {
PUSH_VS_WARNINGS
DISABLE_VS_WARNINGS(4200)
struct rs_comm_entry
{
ec_point a, b;
};
struct rs_comm {
struct rs_comm_entry
{
ec_point a, b;
};
struct rs_comm
{
hash h;
struct rs_comm_entry ab[];
};
@ -411,10 +413,10 @@ POP_VS_WARNINGS
if (ge_frombytes_vartime(&tmp3, &*pubs[i]) != 0) {
return false;
}
ge_double_scalarmult_base_vartime(&tmp2, &sig[i].c, &tmp3, &sig[i].r);
ge_double_scalarmult_base_vartime(&tmp2, &sig[i].c, &tmp3, &sig[i].r); // L_i = r_i * G + c_i * P_i
ge_tobytes(&buf->ab[i].a, &tmp2);
hash_to_ec(*pubs[i], tmp3);
ge_double_scalarmult_precomp_vartime(&tmp2, &sig[i].r, &tmp3, &sig[i].c, image_pre);
ge_double_scalarmult_precomp_vartime(&tmp2, &sig[i].r, &tmp3, &sig[i].c, image_pre); // R_i = r_i * Hp(P_i) + c_i * I
ge_tobytes(&buf->ab[i].b, &tmp2);
sc_add(&sum, &sum, &sig[i].c);
}
@ -422,4 +424,5 @@ POP_VS_WARNINGS
sc_sub(&h, &h, &sum);
return sc_isnonzero(&h) == 0;
}
}
} // namespace crypto

View file

@ -288,7 +288,7 @@ namespace crypto {
uint8_t* const m_p_data;
size_t m_data_used;
bool m_ready;
};
}; // class stream_cn_hash
} // namespace crypto

View file

@ -52,8 +52,8 @@ void hash_process(union hash_state *state, const uint8_t *buf, size_t count);
#define HASH_DATA_AREA 136
void cn_fast_hash_old(const void *data, size_t length, char *hash);
void cn_fast_hash(const void *data, size_t length, char *hash);
//void cn_slow_hash(const void *data, size_t length, char *hash);
void hash_extra_blake(const void *data, size_t length, char *hash);
void hash_extra_groestl(const void *data, size_t length, char *hash);

View file

@ -1,3 +1,4 @@
// Copyright (c) 2020-2021 Zano project
// Copyright (c) 2012-2013 The Cryptonote developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
@ -17,8 +18,14 @@ void hash_process(union hash_state *state, const uint8_t *buf, size_t count) {
keccak1600(buf, (int)count, (uint8_t*)state);
}
void cn_fast_hash(const void *data, size_t length, char *hash) {
void cn_fast_hash_old(const void *data, size_t length, char *hash)
{
union hash_state state;
hash_process(&state, data, length);
memcpy(hash, &state, HASH_SIZE);
}
void cn_fast_hash(const void *data, size_t length, char *hash)
{
keccak(data, (int)length, (uint8_t*)hash, HASH_SIZE);
}

View file

@ -226,6 +226,11 @@ namespace currency
return true;
}
//-----------------------------------------------------------------
bool account_base::is_seed_tracking(const std::string& seed_phrase)
{
return seed_phrase.find(':') != std::string::npos;
}
//-----------------------------------------------------------------
bool account_base::is_seed_password_protected(const std::string& seed_phrase, bool& is_password_protected)
{
//cut the last timestamp word from restore_dats
@ -305,7 +310,7 @@ namespace currency
account_public_address ad = AUTO_VAL_INIT(ad);
if (!get_account_address_from_str(ad, str))
{
LOG_ERROR("cannot parse address from string: " << str);
CHECK_AND_ASSERT_THROW_MES(false, "cannot parse address from string: " << str);
}
return ad;
}

View file

@ -79,6 +79,7 @@ namespace currency
static std::string vector_of_chars_to_string(const std::vector<unsigned char>& v) { return std::string(v.begin(), v.end()); }
static std::vector<unsigned char> string_to_vector_of_chars(const std::string& v) { return std::vector<unsigned char>(v.begin(), v.end()); }
static bool is_seed_password_protected(const std::string& seed_phrase, bool& is_password_protected);
static bool is_seed_tracking(const std::string& seed_phrase);
BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(m_keys)

File diff suppressed because it is too large Load diff

View file

@ -133,6 +133,12 @@ namespace currency
}
};
struct scan_for_keys_context
{
bool htlc_is_expired;
std::list<txout_htlc> htlc_outs;
};
// == Output indexes local lookup table conception ==
// Main chain gindex table (outputs_container) contains data which is valid only for the most recent block.
// Thus it can't be used to get output's global index for any arbitrary height because there's no height data.
@ -144,7 +150,9 @@ namespace currency
// retrieve gindex from local_gindex_lookup_table # there are outputs having given amount after the given height
// else:
// retrieve gindex from main chain gindex table # not outputs having given amount are present after the given height
//
//
typedef boost::variant<crypto::public_key, txout_htlc> output_key_or_htlc_v;
struct alt_block_extended_info: public block_extended_info
{
@ -152,7 +160,7 @@ namespace currency
std::map<uint64_t, uint64_t> gindex_lookup_table;
// {amount -> pub_keys} map of outputs' pub_keys appeared in this alt block ( index_in_vector == output_gindex - gindex_lookup_table[output_amount] )
std::map<uint64_t, std::vector<crypto::public_key> > outputs_pub_keys;
std::map<uint64_t, std::vector<output_key_or_htlc_v> > outputs_pub_keys;
//date added to alt chain storage
uint64_t timestamp;
@ -161,8 +169,7 @@ namespace currency
transactions_map onboard_transactions;
};
typedef std::unordered_map<crypto::hash, alt_block_extended_info> alt_chain_container;
//typedef std::list<alt_chain_container::iterator> alt_chain_type;
typedef std::vector<alt_chain_container::iterator> alt_chain_type;
typedef std::vector<alt_chain_container::iterator> alt_chain_type; // alternative subchain, front -> mainchain(split point), back -> alternative head
typedef std::unordered_map<crypto::hash, block_extended_info> blocks_ext_by_hash;
@ -230,9 +237,15 @@ namespace currency
template<class visitor_t>
bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis) { uint64_t stub = 0; return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key, vis, stub); }
bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis)
{
scan_for_keys_context cntx_stub = AUTO_VAL_INIT(cntx_stub);
uint64_t stub = 0;
return scan_outputkeys_for_indexes(validated_tx, tx_in_to_key, vis, stub, cntx_stub);
}
template<class visitor_t>
bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis, uint64_t& max_related_block_height) const ;
bool scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& /*scan_context*/) const;
uint64_t get_current_blockchain_size() const;
uint64_t get_top_block_height() const;
@ -273,13 +286,25 @@ namespace currency
bool validate_tx_service_attachmens_in_services(const tx_service_attachment& a, size_t i, const transaction& tx)const;
bool check_tx_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector<crypto::signature>& sig, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase)const;
bool check_tx_input(const transaction& tx, size_t in_index, const txin_multisig& txin, const crypto::hash& tx_prefix_hash, const std::vector<crypto::signature>& sig, uint64_t& max_related_block_height)const;
bool check_tx_input(const transaction& tx, size_t in_index, const txin_htlc& txin, const crypto::hash& tx_prefix_hash, const std::vector<crypto::signature>& sig, uint64_t& max_related_block_height)const;
bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height)const;
bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash) const;
bool check_tx_inputs(const transaction& tx, const crypto::hash& tx_prefix_hash, uint64_t& max_used_block_height, crypto::hash& max_used_block_id)const;
bool check_ms_input(const transaction& tx, size_t in_index, const txin_multisig& txin, const crypto::hash& tx_prefix_hash, const std::vector<crypto::signature>& sig, const transaction& source_tx, size_t out_n) const;
bool validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id, uint64_t block_height) const;
bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_to_key& txin, std::vector<crypto::public_key>& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const;
bool check_tokey_input(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector<crypto::signature>& sig, const std::vector<const crypto::public_key*>& output_keys_ptrs) const;
bool validate_tx_for_hardfork_specific_terms(const transaction& tx, const crypto::hash& tx_id) const;
bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verified_input, std::vector<crypto::public_key>& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase, scan_for_keys_context& scan_context) const;
bool get_output_keys_for_input_with_checks(const transaction& tx, const txin_v& verified_input, std::vector<crypto::public_key>& output_keys, uint64_t& max_related_block_height, uint64_t& source_max_unlock_time_for_pos_coinbase) const;
bool check_input_signature(const transaction& tx, size_t in_index, const txin_to_key& txin, const crypto::hash& tx_prefix_hash, const std::vector<crypto::signature>& sig, const std::vector<const crypto::public_key*>& output_keys_ptrs) const;
bool check_input_signature(const transaction& tx,
size_t in_index,
uint64_t in_amount,
const crypto::key_image& k_image,
const std::vector<txin_etc_details_v>& in_etc_details,
const crypto::hash& tx_prefix_hash,
const std::vector<crypto::signature>& sig,
const std::vector<const crypto::public_key*>& output_keys_ptrs) const;
uint64_t get_current_comulative_blocksize_limit()const;
uint64_t get_current_hashrate(size_t aprox_count)const;
uint64_t get_seconds_between_last_n_block(size_t n)const;
@ -445,6 +470,7 @@ namespace currency
bool validate_all_aliases_for_new_median_mode();
bool print_tx_outputs_lookup(const crypto::hash& tx_id) const;
uint64_t get_last_x_block_height(bool pos)const;
bool is_tx_spendtime_unlocked(uint64_t unlock_time)const;
private:
//-------------- DB containers --------------
@ -460,6 +486,8 @@ namespace currency
typedef tools::db::basic_key_value_accessor<uint32_t, block_gindex_increments, true> per_block_gindex_increments_container; // height => [(amount, gindex_increment), ...]
//-----------------------------------------
typedef std::unordered_map<crypto::hash, std::pair<const transaction&, uint64_t> > txs_by_id_and_height_altchain;
tx_memory_pool& m_tx_pool;
mutable bc_attachment_services_manager m_services_mgr;
@ -560,10 +588,21 @@ namespace currency
wide_difficulty_type get_x_difficulty_after_height(uint64_t height, bool is_pos);
bool purge_keyimage_from_big_heap(const crypto::key_image& ki, const crypto::hash& id);
bool purge_altblock_keyimages_from_big_heap(const block& b, const crypto::hash& id);
bool append_altblock_keyimages_to_big_heap(const crypto::hash& block_id, const std::set<crypto::key_image>& alt_block_keyimages);
bool validate_alt_block_input(const transaction& input_tx, std::set<crypto::key_image>& collected_keyimages, const crypto::hash& bl_id, const crypto::hash& input_tx_hash, size_t input_index, const std::vector<crypto::signature>& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain, const std::set<crypto::hash>& alt_chain_block_ids, uint64_t& ki_lookuptime, uint64_t* p_max_related_block_height = nullptr) const;
bool append_altblock_keyimages_to_big_heap(const crypto::hash& block_id, const std::unordered_set<crypto::key_image>& alt_block_keyimages);
bool validate_alt_block_input(const transaction& input_tx,
std::unordered_set<crypto::key_image>& collected_keyimages,
const txs_by_id_and_height_altchain& alt_chain_tx_ids,
const crypto::hash& bl_id,
const crypto::hash& input_tx_hash,
size_t input_index,
const std::vector<crypto::signature>& input_sigs,
uint64_t split_height,
const alt_chain_type& alt_chain,
const std::unordered_set<crypto::hash>& alt_chain_block_ids,
uint64_t& ki_lookuptime,
uint64_t* p_max_related_block_height = nullptr) const;
bool validate_alt_block_ms_input(const transaction& input_tx, const crypto::hash& input_tx_hash, size_t input_index, const std::vector<crypto::signature>& input_sigs, uint64_t split_height, const alt_chain_type& alt_chain) const;
bool validate_alt_block_txs(const block& b, const crypto::hash& id, std::set<crypto::key_image>& collected_keyimages, alt_block_extended_info& abei, const alt_chain_type& alt_chain, uint64_t split_height, uint64_t& ki_lookup_time_total) const;
bool validate_alt_block_txs(const block& b, const crypto::hash& id, std::unordered_set<crypto::key_image>& collected_keyimages, alt_block_extended_info& abei, const alt_chain_type& alt_chain, uint64_t split_height, uint64_t& ki_lookup_time_total) const;
bool update_alt_out_indexes_for_tx_in_block(const transaction& tx, alt_block_extended_info& abei)const;
bool get_transaction_from_pool_or_db(const crypto::hash& tx_id, std::shared_ptr<transaction>& tx_ptr, uint64_t min_allowed_block_height = 0) const;
void get_last_n_x_blocks(uint64_t n, bool pos_blocks, std::list<std::shared_ptr<const block_extended_info>>& blocks) const;
@ -573,7 +612,6 @@ namespace currency
bool push_transaction_to_global_outs_index(const transaction& tx, const crypto::hash& tx_id, std::vector<uint64_t>& global_indexes);
bool pop_transaction_from_global_index(const transaction& tx, const crypto::hash& tx_id);
bool add_out_to_get_random_outs(COMMAND_RPC_GET_RANDOM_OUTPUTS_FOR_AMOUNTS::outs_for_amount& result_outs, uint64_t amount, size_t i, uint64_t mix_count, bool use_only_forced_to_mix = false) const;
bool is_tx_spendtime_unlocked(uint64_t unlock_time)const;
bool add_block_as_invalid(const block& bl, const crypto::hash& h);
bool add_block_as_invalid(const block_extended_info& bei, const crypto::hash& h);
size_t find_end_of_allowed_index(uint64_t amount)const;
@ -607,7 +645,7 @@ namespace currency
// bool build_stake_modifier_for_alt(const alt_chain_type& alt_chain, stake_modifier_type& sm);
template<class visitor_t>
bool enum_blockchain(visitor_t& v, const alt_chain_type& alt_chain = alt_chain_type(), uint64_t split_height = 0) const;
bool update_spent_tx_flags_for_input(uint64_t amount, const txout_v& o, bool spent);
bool update_spent_tx_flags_for_input(uint64_t amount, const txout_ref_v& o, bool spent);
bool update_spent_tx_flags_for_input(uint64_t amount, uint64_t global_index, bool spent);
bool update_spent_tx_flags_for_input(const crypto::hash& multisig_id, uint64_t spent_height);
bool update_spent_tx_flags_for_input(const crypto::hash& tx_id, size_t n, bool spent);
@ -617,6 +655,16 @@ namespace currency
void calculate_local_gindex_lookup_table_for_height(uint64_t split_height, std::map<uint64_t, uint64_t>& increments) const;
void do_erase_altblock(alt_chain_container::iterator it);
uint64_t get_blockchain_launch_timestamp()const;
bool is_output_allowed_for_input(const txout_target_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const;
bool is_output_allowed_for_input(const output_key_or_htlc_v& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const;
bool is_output_allowed_for_input(const txout_to_key& out_v, const txin_v& in_v)const;
bool is_output_allowed_for_input(const txout_htlc& out_v, const txin_v& in_v, uint64_t top_minus_source_height)const;
bool is_after_hardfork_1_zone()const;
bool is_after_hardfork_1_zone(uint64_t height)const;
bool is_after_hardfork_2_zone()const;
bool is_after_hardfork_2_zone(uint64_t height)const;
bool is_after_hardfork_3_zone()const;
bool is_after_hardfork_3_zone(uint64_t height)const;
@ -660,25 +708,28 @@ namespace currency
return !keep_going;
}
//------------------------------------------------------------------
//------------------------------------------------------------------
template<class visitor_t>
bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_to_key& tx_in_to_key, visitor_t& vis, uint64_t& max_related_block_height) const
bool blockchain_storage::scan_outputkeys_for_indexes(const transaction &validated_tx, const txin_v& verified_input, visitor_t& vis, uint64_t& max_related_block_height, scan_for_keys_context& scan_context) const
{
const txin_to_key& input_to_key = get_to_key_input_from_txin_v(verified_input);
uint64_t amount = input_to_key.amount;
const std::vector<txout_ref_v>& key_offsets = input_to_key.key_offsets;
CRITICAL_REGION_LOCAL(m_read_lock);
TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_get_item_size);
uint64_t outs_count_for_amount = m_db_outputs.get_item_size(tx_in_to_key.amount);
uint64_t outs_count_for_amount = m_db_outputs.get_item_size(amount);
TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_get_item_size);
if (!outs_count_for_amount)
return false;
TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_relative_to_absolute);
std::vector<txout_v> absolute_offsets = relative_output_offsets_to_absolute(tx_in_to_key.key_offsets);
std::vector<txout_ref_v> absolute_offsets = relative_output_offsets_to_absolute(key_offsets);
TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_relative_to_absolute);
TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_loop);
size_t output_index = 0;
for(const txout_v& o : absolute_offsets)
for(const txout_ref_v& o : absolute_offsets)
{
crypto::hash tx_id = null_hash;
size_t n = 0;
@ -696,7 +747,7 @@ namespace currency
LOG_ERROR("Wrong index in transaction inputs: " << i << ", expected maximum " << outs_count_for_amount - 1);
return false;
}
auto out_ptr = m_db_outputs.get_subitem(tx_in_to_key.amount, i);
auto out_ptr = m_db_outputs.get_subitem(amount, i);
tx_id = out_ptr->tx_id;
n = out_ptr->out_no;
TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_loop_get_subitem);
@ -709,15 +760,54 @@ namespace currency
//check mix_attr
TIME_MEASURE_FINISH_PD(tx_check_inputs_loop_scan_outputkeys_loop_find_tx);
CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false);
//explanation of this code will be provided later with public announce
patch_out_if_needed(const_cast<txout_to_key&>(outtk), tx_id, n);
//CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false);
CHECK_AND_ASSERT_MES(key_offsets.size() >= 1, false, "internal error: tx input has empty key_offsets"); // should never happen as input correctness must be handled by the caller
/*
TxOutput | TxInput | Allowed
----------------------------
HTLC | HTLC | ONLY IF HTLC NOT EXPIRED
HTLC | TO_KEY | ONLY IF HTLC IS EXPIRED
TO_KEY | HTLC | NOT
TO_KEY | TO_KEY | YES
*/
bool r = is_output_allowed_for_input(tx_ptr->tx.vout[n].target, verified_input, get_current_blockchain_size() - tx_ptr->m_keeper_block_height);
CHECK_AND_ASSERT_MES(r, false, "Input and output incompatible type");
if (tx_ptr->tx.vout[n].target.type() == typeid(txout_to_key))
{
CHECKED_GET_SPECIFIC_VARIANT(tx_ptr->tx.vout[n].target, const txout_to_key, outtk, false);
//fix for burned money
patch_out_if_needed(const_cast<txout_to_key&>(outtk), tx_id, n);
bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(outtk.mix_attr, key_offsets.size() - 1);
CHECK_AND_ASSERT_MES(mixattr_ok, false, "tx output #" << output_index << " violates mixin restrictions: mix_attr = " << static_cast<uint32_t>(outtk.mix_attr) << ", key_offsets.size = " << key_offsets.size());
}
else if (tx_ptr->tx.vout[n].target.type() == typeid(txout_htlc))
{
//check for spend flags
CHECK_AND_ASSERT_MES(tx_ptr->m_spent_flags.size() > n, false,
"Internal error: tx_ptr->m_spent_flags.size(){" << tx_ptr->m_spent_flags.size() << "} > n{" << n << "}");
CHECK_AND_ASSERT_MES(tx_ptr->m_spent_flags[n] == false, false, "HTLC out already spent, double spent attempt detected");
const txout_htlc& htlc_out = boost::get<txout_htlc>(tx_ptr->tx.vout[n].target);
if (htlc_out.expiration > get_current_blockchain_size() - tx_ptr->m_keeper_block_height)
{
//HTLC IS NOT expired, can be used ONLY by pkey_before_expiration and ONLY by HTLC input
scan_context.htlc_is_expired = false;
}
else
{
//HTLC IS expired, can be used ONLY by pkey_after_expiration and ONLY by to_key input
scan_context.htlc_is_expired = true;
}
}else
{
LOG_ERROR("[scan_outputkeys_for_indexes]: Wrong output type in : " << tx_ptr->tx.vout[n].target.type().name());
return false;
}
CHECK_AND_ASSERT_MES(tx_in_to_key.key_offsets.size() >= 1, false, "internal error: tx input has empty key_offsets"); // should never happen as input correctness must be handled by the caller
bool mixattr_ok = is_mixattr_applicable_for_fake_outs_counter(outtk.mix_attr, tx_in_to_key.key_offsets.size() - 1);
CHECK_AND_ASSERT_MES(mixattr_ok, false, "tx output #" << output_index << " violates mixin restrictions: mix_attr = " << static_cast<uint32_t>(outtk.mix_attr) << ", key_offsets.size = " << tx_in_to_key.key_offsets.size());
TIME_MEASURE_START_PD(tx_check_inputs_loop_scan_outputkeys_loop_handle_output);
if (!vis.handle_output(tx_ptr->tx, validated_tx, tx_ptr->tx.vout[n], n))

View file

@ -154,4 +154,6 @@ namespace currency
transactions_map onboard_transactions;
};
}

View file

@ -17,18 +17,16 @@ namespace currency
inline bool create_checkpoints(currency::checkpoints& checkpoints)
{
#ifdef TESTNET
ADD_CHECKPOINT(50000, "cb05a7bdc7f78c5cdb6ef1048f85b27c569f44879233903ce5f5a4e5bd590a3d");
ADD_CHECKPOINT(100000, "6b8b54356a9d44f6c1ebdacb8593d8f5ab2e2e2ca4493e7ae7baf4b3755c5e16");
ADD_CHECKPOINT(350000, "885841f079e5a38f1921f4a5319f0d52fdbab64bb2026ca3cabad1c032d22db7");
ADD_CHECKPOINT(450000, "e8b789b909d59ed8a2a1e3eceb6d0b19accfe0d45cc31621b1929de80adfa702");
//ADD_CHECKPOINT(50000, "492ef71f5d722a8a182d65eb0ff731b740e023a2d64881f43db9af7b39ba7988");
#else
// MAINNET
ADD_CHECKPOINT(425000, "46a6c36d5dec2d484d5e4845a8525ca322aafc06915ed9c8da2a241b51b7d1e8");
ADD_CHECKPOINT(525000, "8c1ac57e67448130207a224b2d6e33ccdc64d6dd1c59dbcf9ad2361dc0d07d51");
ADD_CHECKPOINT(600000, "d9fe316086e1aaea07d94082973ec764eff5fc5a05ed6e1eca273cee59daeeb4");
ADD_CHECKPOINT(900000, "2205b73cd79d4937b087b02a8b001171b73c34464bc4a952834eaf7c2bd63e86");
#endif
return true;
}
} // namespace currency
} // namespace currency

View file

@ -24,6 +24,19 @@ namespace currency
uint64_t hard_fork_01_starts_after_height;
uint64_t hard_fork_02_starts_after_height;
uint64_t hard_fork_03_starts_after_height;
bool is_hardfork_active_for_height(size_t hardfork_id, uint64_t height) const
{
switch (hardfork_id)
{
case 0: return true;
case 1: return height > hard_fork_01_starts_after_height;
case 2: return height > hard_fork_02_starts_after_height;
case 3: return height > hard_fork_03_starts_after_height;
default: return false;
}
}
static uint64_t _default_core_time_function()
{
@ -42,6 +55,7 @@ namespace currency
pc.hard_fork_01_starts_after_height = ZANO_HARDFORK_01_AFTER_HEIGHT;
pc.hard_fork_02_starts_after_height = ZANO_HARDFORK_02_AFTER_HEIGHT;
pc.hard_fork_03_starts_after_height = ZANO_HARDFORK_03_AFTER_HEIGHT;
pc.get_core_time = &core_runtime_config::_default_core_time_function;
bool r = epee::string_tools::hex_to_pod(ALIAS_SHORT_NAMES_VALIDATION_PUB_KEY, pc.alias_validation_pubkey);

View file

@ -191,7 +191,7 @@ namespace currency
END_SERIALIZE()
};
typedef boost::variant<uint64_t, ref_by_id> txout_v;
typedef boost::variant<uint64_t, ref_by_id> txout_ref_v;
struct signed_parts
@ -211,7 +211,7 @@ namespace currency
struct txin_to_key
{
uint64_t amount;
std::vector<txout_v> key_offsets;
std::vector<txout_ref_v> key_offsets;
crypto::key_image k_image; // double spending protection
std::vector<txin_etc_details_v> etc_details; //this flag used when TX_FLAG_SIGNATURE_MODE_SEPARATE flag is set, point to which amount of outputs(starting from zero) used in signature
@ -223,6 +223,15 @@ namespace currency
END_SERIALIZE()
};
struct txin_htlc: public txin_to_key
{
std::string hltc_origin;
BEGIN_SERIALIZE_OBJECT()
FIELD(hltc_origin)
FIELDS(*static_cast<txin_to_key*>(this))
END_SERIALIZE()
};
struct txin_multisig
{
uint64_t amount;
@ -249,9 +258,28 @@ namespace currency
END_SERIALIZE()
};
typedef boost::variant<txin_gen, txin_to_key, txin_multisig> txin_v;
#define CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK 0x01 // 0 - SHA256, 1 - RIPEMD160
typedef boost::variant<txout_to_key, txout_multisig> txout_target_v;
struct txout_htlc
{
crypto::hash htlc_hash;
uint8_t flags; //select type of the hash, may be some extra info in future
uint64_t expiration;
crypto::public_key pkey_redeem; //works before expiration
crypto::public_key pkey_refund; //works after expiration
BEGIN_SERIALIZE_OBJECT()
FIELD(htlc_hash)
FIELD(flags)
VARINT_FIELD(expiration)
FIELD(pkey_redeem)
FIELD(pkey_refund)
END_SERIALIZE()
};
typedef boost::variant<txin_gen, txin_to_key, txin_multisig, txin_htlc> txin_v;
typedef boost::variant<txout_to_key, txout_multisig, txout_htlc> txout_target_v;
//typedef std::pair<uint64_t, txout> out_t;
struct tx_out
@ -531,7 +559,7 @@ namespace currency
{
public:
// tx version information
size_t version{};
uint64_t version{};
//extra
std::vector<extra_v> extra;
std::vector<txin_v> vin;
@ -767,6 +795,10 @@ SET_VARIANT_TAGS(currency::tx_receiver, 32, "receiver2");
// @#@ TODO @#@
SET_VARIANT_TAGS(currency::extra_alias_entry, 33, "alias_entry2");
//htlc
SET_VARIANT_TAGS(currency::txin_htlc, 34, "txin_htlc");
SET_VARIANT_TAGS(currency::txout_htlc, 35, "txout_htlc");
#undef SET_VARIANT_TAGS

View file

@ -56,6 +56,16 @@ namespace boost
a & x.keys;
}
template <class Archive>
inline void serialize(Archive &a, currency::txout_htlc &x, const boost::serialization::version_type ver)
{
a & x.expiration;
a & x.flags;
a & x.htlc_hash;
a & x.pkey_redeem;
a & x.pkey_refund;
}
template <class Archive>
inline void serialize(Archive &a, currency::txin_gen &x, const boost::serialization::version_type ver)
{
@ -83,6 +93,16 @@ namespace boost
a & x.etc_details;
}
template <class Archive>
inline void serialize(Archive &a, currency::txin_htlc &x, const boost::serialization::version_type ver)
{
a & x.amount;
a & x.etc_details;
a & x.hltc_origin;
a & x.k_image;
a & x.key_offsets;
}
template <class Archive>
inline void serialize(Archive &a, currency::tx_out &x, const boost::serialization::version_type ver)
{

View file

@ -10,7 +10,7 @@
#ifndef TESTNET
#define CURRENCY_FORMATION_VERSION 84
#else
#define CURRENCY_FORMATION_VERSION 86
#define CURRENCY_FORMATION_VERSION 88
#endif
#define CURRENCY_GENESIS_NONCE (CURRENCY_FORMATION_VERSION + 101011010121) //bender's nightmare
@ -27,7 +27,9 @@
#define CURRENCY_PUBLIC_AUDITABLE_INTEG_ADDRESS_BASE58_PREFIX 0x8a49 // auditable integrated addresses start with 'aiZX'
#define CURRENCY_MINED_MONEY_UNLOCK_WINDOW 10
#define CURRENT_TRANSACTION_VERSION 1
#define CURRENT_BLOCK_MAJOR_VERSION 1
#define HF1_BLOCK_MAJOR_VERSION 1
#define CURRENT_BLOCK_MAJOR_VERSION 2
#define CURRENT_BLOCK_MINOR_VERSION 0
#define CURRENCY_BLOCK_FUTURE_TIME_LIMIT 60*60*2
#define CURRENCY_POS_BLOCK_FUTURE_TIME_LIMIT 60*20
@ -222,7 +224,7 @@
#define BC_OFFERS_CURRENCY_MARKET_FILENAME "market.bin"
#define WALLET_FILE_SERIALIZATION_VERSION (CURRENCY_FORMATION_VERSION+68)
#define WALLET_FILE_SERIALIZATION_VERSION (CURRENCY_FORMATION_VERSION+69)
#define CURRENT_MEMPOOL_ARCHIVE_VER (CURRENCY_FORMATION_VERSION+31)
@ -230,13 +232,15 @@
//hard forks section
#define BLOCK_MAJOR_VERSION_GENESIS 1
#define BLOCK_MINOR_VERSION_GENESIS 0
#define BLOCK_MAJOR_VERSION_INITAL 0
#define BLOCK_MAJOR_VERSION_INITIAL 0
#ifndef TESTNET
#define ZANO_HARDFORK_01_AFTER_HEIGHT 194624
#define ZANO_HARDFORK_02_AFTER_HEIGHT 999999
#define ZANO_HARDFORK_03_AFTER_HEIGHT 1082577
#else
#define ZANO_HARDFORK_01_AFTER_HEIGHT 1440
#define ZANO_HARDFORK_02_AFTER_HEIGHT 999999
#define ZANO_HARDFORK_02_AFTER_HEIGHT 1800
#define ZANO_HARDFORK_03_AFTER_HEIGHT 1801
#endif

View file

@ -29,6 +29,7 @@ using namespace epee;
#include "genesis.h"
#include "genesis_acc.h"
#include "common/mnemonic-encoding.h"
#include "crypto/bitcoin/sha256_helper.h"
namespace currency
{
@ -205,7 +206,7 @@ namespace currency
std::set<uint16_t> deriv_cache;
for (auto& d : destinations)
{
bool r = construct_tx_out(d, txkey.sec, no, tx, deriv_cache);
bool r = construct_tx_out(d, txkey.sec, no, tx, deriv_cache, account_keys());
CHECK_AND_ASSERT_MES(r, false, "Failed to contruct miner tx out");
no++;
}
@ -590,7 +591,25 @@ namespace currency
// return true;
// }
//---------------------------------------------------------------
bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set<uint16_t>& deriv_cache, uint8_t tx_outs_attr)
std::string generate_origin_for_htlc(const txout_htlc& htlc, const account_keys& acc_keys)
{
std::string blob;
string_tools::apped_pod_to_strbuff(blob, htlc.pkey_redeem);
string_tools::apped_pod_to_strbuff(blob, htlc.pkey_refund);
string_tools::apped_pod_to_strbuff(blob, acc_keys.spend_secret_key);
crypto::hash origin_hs = crypto::cn_fast_hash(blob.data(), blob.size());
std::string origin_blob;
string_tools::apped_pod_to_strbuff(origin_blob, origin_hs);
return origin_blob;
}
//---------------------------------------------------------------
bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set<uint16_t>& deriv_cache, const account_keys& self, uint8_t tx_outs_attr)
{
finalized_tx result = AUTO_VAL_INIT(result);
return construct_tx_out(de, tx_sec_key, output_index, tx, deriv_cache, self, result, tx_outs_attr);
}
//---------------------------------------------------------------
bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set<uint16_t>& deriv_cache, const account_keys& self, finalized_tx& result, uint8_t tx_outs_attr)
{
CHECK_AND_ASSERT_MES(de.addr.size() == 1 || (de.addr.size() > 1 && de.minimum_sigs <= de.addr.size()), false, "Invalid destination entry: amount: " << de.amount << " minimum_sigs: " << de.minimum_sigs << " addr.size(): " << de.addr.size());
@ -622,10 +641,58 @@ namespace currency
tx_out out;
out.amount = de.amount;
if (target_keys.size() == 1)
if (de.htlc_options.expiration != 0)
{
const destination_option_htlc_out& htlc_dest = de.htlc_options;
//out htlc
CHECK_AND_ASSERT_MES(target_keys.size() == 1, false, "Unexpected htl keys count = " << target_keys.size() << ", expected ==1");
txout_htlc htlc = AUTO_VAL_INIT(htlc);
htlc.expiration = htlc_dest.expiration;
htlc.flags = 0; //0 - SHA256, 1 - RIPEMD160, by default leave SHA256
//receiver key
htlc.pkey_redeem = *target_keys.begin();
//generate refund key
crypto::key_derivation derivation = AUTO_VAL_INIT(derivation);
crypto::public_key out_eph_public_key = AUTO_VAL_INIT(out_eph_public_key);
bool r = derive_public_key_from_target_address(self.account_address, tx_sec_key, output_index, out_eph_public_key, derivation);
CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address");
htlc.pkey_refund = out_eph_public_key;
//add derivation hint for refund address
uint16_t hint = get_derivation_hint(derivation);
if (deriv_cache.count(hint) == 0)
{
tx.extra.push_back(make_tx_derivation_hint_from_uint16(hint));
deriv_cache.insert(hint);
}
if (htlc_dest.htlc_hash == null_hash)
{
//we use deterministic origin, to make possible access origin on different wallets copies
result.htlc_origin = generate_origin_for_htlc(htlc, self);
//calculate hash
if (!htlc.flags&CURRENCY_TXOUT_HTLC_FLAGS_HASH_TYPE_MASK)
{
htlc.htlc_hash = crypto::sha256_hash(result.htlc_origin.data(), result.htlc_origin.size());
}
else
{
crypto::hash160 h160 = crypto::RIPEMD160_hash(result.htlc_origin.data(), result.htlc_origin.size());
std::memcpy(&htlc.htlc_hash, &h160, sizeof(h160));
}
}
else
{
htlc.htlc_hash = htlc_dest.htlc_hash;
}
out.target = htlc;
}
else if (target_keys.size() == 1)
{
//out to key
txout_to_key tk;
txout_to_key tk = AUTO_VAL_INIT(tk);
tk.key = target_keys.back();
if (de.addr.front().is_auditable()) // check only the first address because there's only one in this branch
@ -927,7 +994,29 @@ namespace currency
}
}
//---------------------------------------------------------------
uint64_t get_tx_type(const transaction& tx)
void load_wallet_transfer_info_flags(tools::wallet_public::wallet_transfer_info& x)
{
x.is_service = currency::is_service_tx(x.tx);
x.is_mixing = currency::does_tx_have_only_mixin_inputs(x.tx);
x.is_mining = currency::is_coinbase(x.tx);
if (!x.is_mining)
x.fee = currency::get_tx_fee(x.tx);
else
x.fee = 0;
x.show_sender = currency::is_showing_sender_addres(x.tx);
tx_out htlc_out = AUTO_VAL_INIT(htlc_out);
txin_htlc htlc_in = AUTO_VAL_INIT(htlc_in);
x.tx_type = get_tx_type_ex(x.tx, htlc_out, htlc_in);
if(x.tx_type == GUI_TX_TYPE_HTLC_DEPOSIT && x.is_income == true)
{
//need to override amount
x.amount = htlc_out.amount;
}
}
//---------------------------------------------------------------
uint64_t get_tx_type_ex(const transaction& tx, tx_out& htlc_out, txin_htlc& htlc_in)
{
if (is_coinbase(tx))
return GUI_TX_TYPE_COIN_BASE;
@ -942,7 +1031,7 @@ namespace currency
else
return GUI_TX_TYPE_NEW_ALIAS;
}
// offers
tx_service_attachment a = AUTO_VAL_INIT(a);
if (get_type_in_variant_container(tx.attachment, a))
@ -957,7 +1046,7 @@ namespace currency
return GUI_TX_TYPE_CANCEL_OFFER;
}
}
// escrow
tx_service_attachment tsa = AUTO_VAL_INIT(tsa);
if (bc_services::get_first_service_attachment_by_id(tx, BC_ESCROW_SERVICE_ID, BC_ESCROW_SERVICE_INSTRUCTION_RELEASE_TEMPLATES, tsa))
@ -973,9 +1062,31 @@ namespace currency
if (bc_services::get_first_service_attachment_by_id(tx, BC_ESCROW_SERVICE_ID, BC_ESCROW_SERVICE_INSTRUCTION_CANCEL_PROPOSAL, tsa))
return GUI_TX_TYPE_ESCROW_CANCEL_PROPOSAL;
for (auto o : tx.vout)
{
if (o.target.type() == typeid(txout_htlc))
{
htlc_out = o;
return GUI_TX_TYPE_HTLC_DEPOSIT;
}
}
if (get_type_in_variant_container(tx.vin, htlc_in))
{
return GUI_TX_TYPE_HTLC_REDEEM;
}
return GUI_TX_TYPE_NORMAL;
}
//---------------------------------------------------------------
uint64_t get_tx_type(const transaction& tx)
{
tx_out htlc_out = AUTO_VAL_INIT(htlc_out);
txin_htlc htlc_in = AUTO_VAL_INIT(htlc_in);
return get_tx_type_ex(tx, htlc_out, htlc_in);
}
//---------------------------------------------------------------
size_t get_multisig_out_index(const std::vector<tx_out>& outs)
{
size_t n = 0;
@ -1024,7 +1135,7 @@ namespace currency
shuffle,
flags);
}
//---------------------------------------------------------------
bool construct_tx(const account_keys& sender_account_keys, const std::vector<tx_source_entry>& sources,
const std::vector<tx_destination_entry>& destinations,
const std::vector<extra_v>& extra,
@ -1038,6 +1149,45 @@ namespace currency
bool shuffle,
uint64_t flags)
{
//extra copy operation, but creating transaction is not sensitive to this
finalize_tx_param ftp = AUTO_VAL_INIT(ftp);
ftp.sources = sources;
ftp.prepared_destinations = destinations;
ftp.extra = extra;
ftp.attachments = attachments;
ftp.unlock_time = unlock_time;
ftp.crypt_address = crypt_destination_addr;
ftp.expiration_time = expiration_time;
ftp.tx_outs_attr = tx_outs_attr;
ftp.shuffle = shuffle;
ftp.flags = flags;
finalized_tx ft = AUTO_VAL_INIT(ft);
ft.tx = tx;
ft.one_time_key = one_time_secret_key;
bool r = construct_tx(sender_account_keys, ftp, ft);
tx = ft.tx;
one_time_secret_key = ft.one_time_key;
return r;
}
//---------------------------------------------------------------
bool construct_tx(const account_keys& sender_account_keys, const finalize_tx_param& ftp, finalized_tx& result)
{
const std::vector<tx_source_entry>& sources = ftp.sources;
const std::vector<tx_destination_entry>& destinations = ftp.prepared_destinations;
const std::vector<extra_v>& extra = ftp.extra;
const std::vector<attachment_v>& attachments = ftp.attachments;
const uint64_t& unlock_time = ftp.unlock_time;
const account_public_address& crypt_destination_addr = ftp.crypt_address;
const uint64_t& expiration_time = ftp.expiration_time;
const uint8_t& tx_outs_attr = ftp.tx_outs_attr;
const bool& shuffle = ftp.shuffle;
const uint64_t& flags = ftp.flags;
transaction& tx = result.tx;
crypto::secret_key& one_time_secret_key = result.one_time_key;
result.ftp = ftp;
CHECK_AND_ASSERT_MES(destinations.size() <= CURRENCY_TX_MAX_ALLOWED_OUTS, false, "Too many outs (" << destinations.size() << ")! Tx can't be constructed.");
bool watch_only_mode = sender_account_keys.spend_secret_key == null_skey;
@ -1119,8 +1269,56 @@ namespace currency
for (const tx_source_entry& src_entr : sources)
{
in_contexts.push_back(input_generation_context_data());
if (!src_entr.is_multisig())
if(src_entr.is_multisig())
{//multisig input
txin_multisig input_multisig = AUTO_VAL_INIT(input_multisig);
summary_inputs_money += input_multisig.amount = src_entr.amount;
input_multisig.multisig_out_id = src_entr.multisig_id;
input_multisig.sigs_count = src_entr.ms_sigs_count;
tx.vin.push_back(input_multisig);
}
else if (src_entr.htlc_origin.size())
{
//htlc redeem
keypair& in_ephemeral = in_contexts.back().in_ephemeral;
//txin_to_key
if(src_entr.outputs.size() != 1)
{
LOG_ERROR("htlc in: wrong output src_entr.outputs.size() = " << src_entr.outputs.size());
return false;
}
summary_inputs_money += src_entr.amount;
//key_derivation recv_derivation;
crypto::key_image img;
if (!generate_key_image_helper(sender_account_keys, src_entr.real_out_tx_key, src_entr.real_output_in_tx_index, in_ephemeral, img))
return false;
//check that derivated key is equal with real output key
if (!(in_ephemeral.pub == src_entr.outputs[src_entr.real_output].second))
{
LOG_ERROR("derived public key missmatch with output public key! " << ENDL << "derived_key:"
<< string_tools::pod_to_hex(in_ephemeral.pub) << ENDL << "real output_public_key:"
<< string_tools::pod_to_hex(src_entr.outputs[src_entr.real_output].second));
return false;
}
//put key image into tx input
txin_htlc input_to_key;
input_to_key.amount = src_entr.amount;
input_to_key.k_image = img;
input_to_key.hltc_origin = src_entr.htlc_origin;
//fill outputs array and use relative offsets
BOOST_FOREACH(const tx_source_entry::output_entry& out_entry, src_entr.outputs)
input_to_key.key_offsets.push_back(out_entry.first);
input_to_key.key_offsets = absolute_output_offsets_to_relative(input_to_key.key_offsets);
tx.vin.push_back(input_to_key);
}
else
{
//regular to key out
keypair& in_ephemeral = in_contexts.back().in_ephemeral;
//txin_to_key
if (src_entr.real_output >= src_entr.outputs.size())
@ -1145,7 +1343,26 @@ namespace currency
}
//put key image into tx input
txin_to_key input_to_key;
txin_v in_v;
txin_to_key* ptokey = nullptr;
if (src_entr.htlc_origin.size())
{
//add txin_htlc
txin_htlc in_htlc = AUTO_VAL_INIT(in_htlc);
in_htlc.hltc_origin = src_entr.htlc_origin;
in_v = in_htlc;
txin_htlc& in_v_ref = boost::get<txin_htlc>(in_v);
ptokey = static_cast<txin_to_key*>(&in_v_ref);
}
else
{
in_v = txin_to_key();
txin_to_key& in_v_ref = boost::get<txin_to_key>(in_v);
ptokey = &in_v_ref;
}
txin_to_key& input_to_key = *ptokey;
input_to_key.amount = src_entr.amount;
input_to_key.k_image = img;
@ -1154,16 +1371,9 @@ namespace currency
input_to_key.key_offsets.push_back(out_entry.first);
input_to_key.key_offsets = absolute_output_offsets_to_relative(input_to_key.key_offsets);
tx.vin.push_back(input_to_key);
}
else
{//multisig input
txin_multisig input_multisig = AUTO_VAL_INIT(input_multisig);
summary_inputs_money += input_multisig.amount = src_entr.amount;
input_multisig.multisig_out_id = src_entr.multisig_id;
input_multisig.sigs_count = src_entr.ms_sigs_count;
tx.vin.push_back(input_multisig);
tx.vin.push_back(in_v);
}
}
// "Shuffle" outs
@ -1178,7 +1388,7 @@ namespace currency
for(const tx_destination_entry& dst_entr : shuffled_dsts)
{
CHECK_AND_ASSERT_MES(dst_entr.amount > 0, false, "Destination with wrong amount: " << dst_entr.amount);
bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, tx_outs_attr);
bool r = construct_tx_out(dst_entr, txkey.sec, output_index, tx, deriv_cache, sender_account_keys, result, tx_outs_attr);
CHECK_AND_ASSERT_MES(r, false, "Failed to construc tx out");
output_index++;
summary_outs_money += dst_entr.amount;
@ -1250,9 +1460,14 @@ namespace currency
tx.signatures.push_back(std::vector<crypto::signature>());
std::vector<crypto::signature>& sigs = tx.signatures.back();
if (!src_entr.is_multisig())
if(src_entr.is_multisig())
{
// txin_to_key
// txin_multisig -- don't sign anything here (see also sign_multisig_input_in_tx())
sigs.resize(src_entr.ms_keys_count, null_sig); // just reserve keys.size() null signatures (NOTE: not minimum_sigs!)
}
else
{
// regular txin_to_key or htlc
ss_ring_s << "input #" << input_index << ", pub_keys:" << ENDL;
std::vector<const crypto::public_key*> keys_ptrs;
BOOST_FOREACH(const tx_source_entry::output_entry& o, src_entr.outputs)
@ -1263,17 +1478,12 @@ namespace currency
sigs.resize(src_entr.outputs.size());
if (!watch_only_mode)
crypto::generate_ring_signature(tx_hash_for_signature, boost::get<txin_to_key>(tx.vin[input_index]).k_image, keys_ptrs, in_contexts[in_context_index].in_ephemeral.sec, src_entr.real_output, sigs.data());
crypto::generate_ring_signature(tx_hash_for_signature, get_to_key_input_from_txin_v(tx.vin[input_index]).k_image, keys_ptrs, in_contexts[in_context_index].in_ephemeral.sec, src_entr.real_output, sigs.data());
ss_ring_s << "signatures:" << ENDL;
std::for_each(sigs.begin(), sigs.end(), [&ss_ring_s](const crypto::signature& s) { ss_ring_s << s << ENDL; });
ss_ring_s << "prefix_hash: " << tx_prefix_hash << ENDL << "in_ephemeral_key: " << in_contexts[in_context_index].in_ephemeral.sec << ENDL << "real_output: " << src_entr.real_output << ENDL;
}
else
{
// txin_multisig -- don't sign anything here (see also sign_multisig_input_in_tx())
sigs.resize(src_entr.ms_keys_count, null_sig); // just reserve keys.size() null signatures (NOTE: not minimum_sigs!)
}
if (src_entr.separately_signed_tx_complete)
{
// if separately signed tx is complete, put one more signature to the last bunch using tx secret key, which confirms that transaction has been generated by authorized subject
@ -1449,10 +1659,9 @@ namespace currency
{
for(const auto& in : tx.vin)
{
CHECK_AND_ASSERT_MES(in.type() == typeid(txin_to_key) || in.type() == typeid(txin_multisig), false, "wrong variant type: "
<< in.type().name() << ", expected " << typeid(txin_to_key).name()
CHECK_AND_ASSERT_MES(in.type() == typeid(txin_to_key) || in.type() == typeid(txin_multisig) || in.type() == typeid(txin_htlc), false, "wrong variant type: "
<< in.type().name()
<< ", in transaction id=" << get_transaction_hash(tx));
}
return true;
}
@ -1523,6 +1732,14 @@ namespace currency
if (!check_key(boost::get<txout_to_key>(out.target).key))
return false;
}
else if (out.target.type() == typeid(txout_htlc))
{
const txout_htlc& htlc = boost::get<txout_htlc>(out.target);
if (!check_key(htlc.pkey_redeem))
return false;
if (!check_key(htlc.pkey_refund))
return false;
}
else if (out.target.type() == typeid(txout_multisig))
{
const txout_multisig& ms = boost::get<txout_multisig>(out.target);
@ -1559,8 +1776,13 @@ namespace currency
}
else if (in.type() == typeid(txin_multisig))
{
CHECKED_GET_SPECIFIC_VARIANT(in, const txin_multisig, tokey_in, false);
this_amount = tokey_in.amount;
CHECKED_GET_SPECIFIC_VARIANT(in, const txin_multisig, ms_in, false);
this_amount = ms_in.amount;
}
else if (in.type() == typeid(txin_htlc))
{
CHECKED_GET_SPECIFIC_VARIANT(in, const txin_htlc, htlc_in, false);
this_amount = htlc_in.amount;
}
else
{
@ -1674,6 +1896,12 @@ namespace currency
}
//---------------------------------------------------------------
bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector<size_t>& outs, uint64_t& money_transfered, crypto::key_derivation& derivation)
{
std::list<htlc_info> htlc_info_list;
return lookup_acc_outs(acc, tx, tx_pub_key, outs, money_transfered, derivation, htlc_info_list);
}
//---------------------------------------------------------------
bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector<size_t>& outs, uint64_t& money_transfered, crypto::key_derivation& derivation, std::list<htlc_info>& htlc_info_list)
{
money_transfered = 0;
bool r = generate_key_derivation(tx_pub_key, acc.view_secret_key, derivation);
@ -1685,7 +1913,6 @@ namespace currency
return lookup_acc_outs_genesis(acc, tx, tx_pub_key, outs, money_transfered, derivation);
}
if (!check_tx_derivation_hint(tx, derivation))
return true;
@ -1708,6 +1935,23 @@ namespace currency
//don't count this money
}
}
else if (o.target.type() == typeid(txout_htlc))
{
htlc_info hi = AUTO_VAL_INIT(hi);
const txout_htlc& htlc = boost::get<txout_htlc>(o.target);
if (is_out_to_acc(acc, htlc.pkey_redeem, derivation, i))
{
hi.hltc_our_out_is_before_expiration = true;
htlc_info_list.push_back(hi);
outs.push_back(i);
}
else if (is_out_to_acc(acc, htlc.pkey_refund, derivation, i))
{
hi.hltc_our_out_is_before_expiration = false;
htlc_info_list.push_back(hi);
outs.push_back(i);
}
}
else
{
LOG_ERROR("Wrong type at lookup_acc_outs, unexpected type is: " << o.target.type().name());
@ -2049,11 +2293,11 @@ namespace currency
return genesis_id;
}
//---------------------------------------------------------------
std::vector<txout_v> relative_output_offsets_to_absolute(const std::vector<txout_v>& off)
std::vector<txout_ref_v> relative_output_offsets_to_absolute(const std::vector<txout_ref_v>& off)
{
//if array has both types of outs, then global index (uint64_t) should be first, and then the rest could be out_by_id
std::vector<txout_v> res = off;
std::vector<txout_ref_v> res = off;
for (size_t i = 1; i < res.size(); i++)
{
if (res[i].type() == typeid(ref_by_id))
@ -2064,13 +2308,13 @@ namespace currency
return res;
}
//---------------------------------------------------------------
std::vector<txout_v> absolute_output_offsets_to_relative(const std::vector<txout_v>& off)
std::vector<txout_ref_v> absolute_output_offsets_to_relative(const std::vector<txout_ref_v>& off)
{
std::vector<txout_v> res = off;
std::vector<txout_ref_v> res = off;
if (off.size() < 2)
return res;
std::sort(res.begin(), res.end(), [](const txout_v& lft, const txout_v& rght)
std::sort(res.begin(), res.end(), [](const txout_ref_v& lft, const txout_ref_v& rght)
{
if (lft.type() == typeid(uint64_t))
{
@ -2128,11 +2372,11 @@ namespace currency
return have_type_in_variant_container<tx_payer>(tx.attachment) || have_type_in_variant_container<tx_payer_old>(tx.attachment);
}
//---------------------------------------------------------------
bool is_mixin_tx(const transaction& tx)
bool does_tx_have_only_mixin_inputs(const transaction& tx)
{
for (const auto& e : tx.vin)
{
if (e.type() != typeid(txin_to_key))
if (e.type() != typeid(txin_to_key) || e.type() != typeid(txin_multisig) || e.type() != typeid(txin_htlc))
return false;
if (boost::get<txin_to_key>(e).key_offsets.size() < 2)
return false;
@ -2408,6 +2652,12 @@ namespace currency
}
tei.outs.back().minimum_sigs = otm.minimum_sigs;
}
else if (out.target.type() == typeid(txout_htlc))
{
const txout_htlc& otk = boost::get<txout_htlc>(out.target);
tei.outs.back().pub_keys.push_back(epee::string_tools::pod_to_hex(otk.pkey_redeem) + "(htlc_pkey_redeem)");
tei.outs.back().pub_keys.push_back(epee::string_tools::pod_to_hex(otk.pkey_refund) + "(htlc_pkey_refund)");
}
++i;
}
@ -2424,12 +2674,13 @@ namespace currency
{
tei.ins.back().amount = 0;
}
else if (in.type() == typeid(txin_to_key))
else if (in.type() == typeid(txin_to_key) || in.type() == typeid(txin_htlc))
{
txin_to_key& tk = boost::get<txin_to_key>(in);
//TODO: add htlc info
const txin_to_key& tk = get_to_key_input_from_txin_v(in);
tei.ins.back().amount = tk.amount;
tei.ins.back().kimage_or_ms_id = epee::string_tools::pod_to_hex(tk.k_image);
std::vector<txout_v> absolute_offsets = relative_output_offsets_to_absolute(tk.key_offsets);
std::vector<txout_ref_v> absolute_offsets = relative_output_offsets_to_absolute(tk.key_offsets);
for (auto& ao : absolute_offsets)
{
tei.ins.back().global_indexes.push_back(0);
@ -2443,6 +2694,10 @@ namespace currency
tei.ins.back().global_indexes.back() = std::numeric_limits<uint64_t>::max();
}
}
if (in.type() == typeid(txin_htlc))
{
tei.ins.back().htlc_origin = epee::string_tools::buff_to_hex_nodelimer(boost::get<txin_htlc>(in).hltc_origin);
}
//tk.etc_details -> visualize it may be later
}
else if (in.type() == typeid(txin_multisig))
@ -2511,7 +2766,7 @@ namespace currency
{
for (size_t n = 0; n < tx.vout.size(); ++n)
{
if (tx.vout[n].target.type() == typeid(txout_to_key))
if (tx.vout[n].target.type() == typeid(txout_to_key) || tx.vout[n].target.type() == typeid(txout_htlc))
{
uint64_t amount = tx.vout[n].amount;
gindices[amount] += 1;

View file

@ -28,6 +28,7 @@
#include "currency_format_utils_blocks.h"
#include "currency_format_utils_transactions.h"
#include "core_runtime_config.h"
#include "wallet/wallet_public_structs_defs.h"
// ------ get_tx_type_definition -------------
@ -44,6 +45,8 @@
#define GUI_TX_TYPE_ESCROW_RELEASE_BURN 10
#define GUI_TX_TYPE_ESCROW_CANCEL_PROPOSAL 11
#define GUI_TX_TYPE_ESCROW_RELEASE_CANCEL 12
#define GUI_TX_TYPE_HTLC_DEPOSIT 13
#define GUI_TX_TYPE_HTLC_REDEEM 14
@ -132,6 +135,62 @@ namespace currency
END_KV_SERIALIZE_MAP()
};
struct htlc_info
{
bool hltc_our_out_is_before_expiration;
};
struct finalize_tx_param
{
uint64_t unlock_time;
std::vector<currency::extra_v> extra;
std::vector<currency::attachment_v> attachments;
currency::account_public_address crypt_address;
uint8_t tx_outs_attr;
bool shuffle;
uint8_t flags;
crypto::hash multisig_id;
std::vector<currency::tx_source_entry> sources;
std::vector<uint64_t> selected_transfers;
std::vector<currency::tx_destination_entry> prepared_destinations;
uint64_t expiration_time;
crypto::public_key spend_pub_key; // only for validations
BEGIN_SERIALIZE_OBJECT()
FIELD(unlock_time)
FIELD(extra)
FIELD(attachments)
FIELD(crypt_address)
FIELD(tx_outs_attr)
FIELD(shuffle)
FIELD(flags)
FIELD(multisig_id)
FIELD(sources)
FIELD(selected_transfers)
FIELD(prepared_destinations)
FIELD(expiration_time)
FIELD(spend_pub_key)
END_SERIALIZE()
};
struct finalized_tx
{
currency::transaction tx;
crypto::secret_key one_time_key;
finalize_tx_param ftp;
std::string htlc_origin;
std::vector<serializable_pair<uint64_t, crypto::key_image>> outs_key_images; // pairs (out_index, key_image) for each change output
BEGIN_SERIALIZE_OBJECT()
FIELD(tx)
FIELD(one_time_key)
FIELD(ftp)
FIELD(htlc_origin)
FIELD(outs_key_images)
END_SERIALIZE()
};
//---------------------------------------------------------------
bool construct_miner_tx(size_t height, size_t median_size, const boost::multiprecision::uint128_t& already_generated_coins,
@ -158,7 +217,8 @@ namespace currency
//---------------------------------------------------------------
uint64_t get_string_uint64_hash(const std::string& str);
bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set<uint16_t>& deriv_cache, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED);
bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set<uint16_t>& deriv_cache, const account_keys& self, finalized_tx& result, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED);
bool construct_tx_out(const tx_destination_entry& de, const crypto::secret_key& tx_sec_key, size_t output_index, transaction& tx, std::set<uint16_t>& deriv_cache, const account_keys& self, uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED);
bool validate_alias_name(const std::string& al);
bool validate_password(const std::string& password);
void get_attachment_extra_info_details(const std::vector<attachment_v>& attachment, extra_attachment_info& eai);
@ -181,6 +241,7 @@ namespace currency
uint8_t tx_outs_attr = CURRENCY_TO_KEY_OUT_RELAXED,
bool shuffle = true,
uint64_t flags = 0);
bool construct_tx(const account_keys& sender_account_keys,
const std::vector<tx_source_entry>& sources,
const std::vector<tx_destination_entry>& destinations,
@ -195,6 +256,9 @@ namespace currency
bool shuffle = true,
uint64_t flags = 0);
bool construct_tx(const account_keys& sender_account_keys, const finalize_tx_param& param, finalized_tx& result);
bool sign_multisig_input_in_tx(currency::transaction& tx, size_t ms_input_index, const currency::account_keys& keys, const currency::transaction& source_tx, bool *p_is_input_fully_signed = nullptr);
bool sign_extra_alias_entry(extra_alias_entry& ai, const crypto::public_key& pkey, const crypto::secret_key& skey);
@ -210,6 +274,7 @@ namespace currency
bool is_out_to_acc(const account_keys& acc, const txout_to_key& out_key, const crypto::key_derivation& derivation, size_t output_index);
bool is_out_to_acc(const account_keys& acc, const txout_multisig& out_multisig, const crypto::key_derivation& derivation, size_t output_index);
bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector<size_t>& outs, uint64_t& money_transfered, crypto::key_derivation& derivation);
bool lookup_acc_outs(const account_keys& acc, const transaction& tx, const crypto::public_key& tx_pub_key, std::vector<size_t>& outs, uint64_t& money_transfered, crypto::key_derivation& derivation, std::list<htlc_info>& htlc_info_list);
bool lookup_acc_outs(const account_keys& acc, const transaction& tx, std::vector<size_t>& outs, uint64_t& money_transfered, crypto::key_derivation& derivation);
bool get_tx_fee(const transaction& tx, uint64_t & fee);
uint64_t get_tx_fee(const transaction& tx);
@ -220,10 +285,13 @@ namespace currency
std::string short_hash_str(const crypto::hash& h);
bool is_mixattr_applicable_for_fake_outs_counter(uint8_t mix_attr, uint64_t fake_attr_count);
bool is_tx_spendtime_unlocked(uint64_t unlock_time, uint64_t current_blockchain_size, uint64_t current_time);
crypto::key_derivation get_encryption_key_derivation(bool is_income, const transaction& tx, const account_keys& acc_keys);
bool decrypt_payload_items(bool is_income, const transaction& tx, const account_keys& acc_keys, std::vector<payload_items_v>& decrypted_items);
void encrypt_attachments(transaction& tx, const account_keys& sender_keys, const account_public_address& destination_addr, const keypair& tx_random_key);
bool is_derivation_used_to_encrypt(const transaction& tx, const crypto::key_derivation& derivation);
void load_wallet_transfer_info_flags(tools::wallet_public::wallet_transfer_info& x);
uint64_t get_tx_type(const transaction& tx);
uint64_t get_tx_type_ex(const transaction& tx, tx_out& htlc_out, txin_htlc& htlc_in);
size_t get_multisig_out_index(const std::vector<tx_out>& outs);
size_t get_multisig_in_index(const std::vector<txin_v>& inputs);
@ -255,8 +323,8 @@ namespace currency
bool check_inputs_overflow(const transaction& tx);
uint64_t get_block_height(const transaction& coinbase);
uint64_t get_block_height(const block& b);
std::vector<txout_v> relative_output_offsets_to_absolute(const std::vector<txout_v>& off);
std::vector<txout_v> absolute_output_offsets_to_relative(const std::vector<txout_v>& off);
std::vector<txout_ref_v> relative_output_offsets_to_absolute(const std::vector<txout_ref_v>& off);
std::vector<txout_ref_v> absolute_output_offsets_to_relative(const std::vector<txout_ref_v>& off);
// prints amount in format "3.14", "0.0"
std::string print_money_brief(uint64_t amount);
@ -267,7 +335,7 @@ namespace currency
bool set_payment_id_to_tx(std::vector<attachment_v>& att, const std::string& payment_id);
bool add_padding_to_tx(transaction& tx, size_t count);
bool is_service_tx(const transaction& tx);
bool is_mixin_tx(const transaction& tx);
bool does_tx_have_only_mixin_inputs(const transaction& tx);
bool is_showing_sender_addres(const transaction& tx);
uint64_t get_amount_for_zero_pubkeys(const transaction& tx);
//std::string get_comment_from_tx(const transaction& tx);
@ -293,7 +361,7 @@ namespace currency
void append_per_block_increments_for_tx(const transaction& tx, std::unordered_map<uint64_t, uint32_t>& gindices);
std::string get_word_from_timstamp(uint64_t timestamp, bool use_password);
uint64_t get_timstamp_from_word(std::string word, bool& password_used);
std::string generate_origin_for_htlc(const txout_htlc& htlc, const account_keys& acc_keys);
template<class t_txin_v>
typename std::conditional<std::is_const<t_txin_v>::value, const std::vector<txin_etc_details_v>, std::vector<txin_etc_details_v> >::type& get_txin_etc_options(t_txin_v& in)
{
@ -304,6 +372,8 @@ namespace currency
if (in.type() == typeid(txin_to_key))
return boost::get<txin_to_key>(in).etc_details;
else if (in.type() == typeid(txin_htlc))
return boost::get<txin_htlc>(in).etc_details;
else if (in.type() == typeid(txin_multisig))
return boost::get<txin_multisig>(in).etc_details;
else
@ -434,16 +504,29 @@ namespace currency
return true;
}
//---------------------------------------------------------------
template<class add_type_t, class container_type>
add_type_t& get_or_add_field_to_variant_vector(container_type& container)
{
for (auto& ev : container)
{
if (ev.type() == typeid(add_type_t))
return boost::get<add_type_t>(ev);
}
container.push_back(add_type_t());
return boost::get<add_type_t>(container.back());
}
//---------------------------------------------------------------
template<class extra_t>
extra_t& get_or_add_field_to_extra(std::vector<extra_v>& extra)
{
for (auto& ev : extra)
{
if (ev.type() == typeid(extra_t))
return boost::get<extra_t>(ev);
}
extra.push_back(extra_t());
return boost::get<extra_t>(extra.back());
// for (auto& ev : extra)
// {
// if (ev.type() == typeid(extra_t))
// return boost::get<extra_t>(ev);
// }
// extra.push_back(extra_t());
// return boost::get<extra_t>(extra.back());
return get_or_add_field_to_variant_vector<extra_t>(extra);
}
//---------------------------------------------------------------
template<class variant_t, class variant_type_t>
@ -570,6 +653,7 @@ namespace currency
size_t operator()(const txin_gen& /*txin*/) const { return 0; }
size_t operator()(const txin_to_key& txin) const { return txin.key_offsets.size(); }
size_t operator()(const txin_multisig& txin) const { return txin.sigs_count; }
size_t operator()(const txin_htlc& txin) const { return 1; }
};
return boost::apply_visitor(txin_signature_size_visitor(), tx_in);
@ -579,6 +663,8 @@ namespace currency
{
if (in.type().hash_code() == typeid(txin_to_key).hash_code())
return &boost::get<txin_to_key>(in).etc_details;
if (in.type().hash_code() == typeid(txin_htlc).hash_code())
return &boost::get<txin_htlc>(in).etc_details;
if (in.type().hash_code() == typeid(txin_multisig).hash_code())
return &boost::get<txin_multisig>(in).etc_details;
return nullptr;
@ -588,6 +674,8 @@ namespace currency
{
if (in.type().hash_code() == typeid(txin_to_key).hash_code())
return &boost::get<txin_to_key>(in).etc_details;
if (in.type().hash_code() == typeid(txin_htlc).hash_code())
return &boost::get<txin_htlc>(in).etc_details;
if (in.type().hash_code() == typeid(txin_multisig).hash_code())
return &boost::get<txin_multisig>(in).etc_details;
return nullptr;

View file

@ -129,6 +129,22 @@ namespace currency
}
return found;
}
inline
const txin_to_key& get_to_key_input_from_txin_v(const txin_v& in_v)
{
if (in_v.type() == typeid(txin_to_key))
{
return boost::get<txin_to_key>(in_v);
}
else if (in_v.type() == typeid(txin_htlc))
{
const txin_htlc& in = boost::get<txin_htlc>(in_v);
return static_cast<const txin_to_key&>(in);
}
else {
ASSERT_MES_AND_THROW("[get_to_key_input_from_txin_v] Wrong type " << in_v.type().name());
}
}
//---------------------------------------------------------------
template<typename variant_container_t>
bool check_allowed_types_in_variant_container(const variant_container_t& container, const std::unordered_set<std::type_index>& allowed_types, bool elements_must_be_unique = true)

View file

@ -262,10 +262,10 @@ namespace currency
std::unordered_set<crypto::key_image> ki;
BOOST_FOREACH(const auto& in, tx.vin)
{
if (in.type() == typeid(txin_to_key))
if (in.type() == typeid(txin_to_key) || in.type() == typeid(txin_htlc))
{
CHECKED_GET_SPECIFIC_VARIANT(in, const txin_to_key, tokey_in, false);
if (!ki.insert(tokey_in.k_image).second)
if (!ki.insert(get_to_key_input_from_txin_v(in).k_image).second)
return false;
}
}

View file

@ -16,7 +16,7 @@ namespace currency
{
struct tx_source_entry
{
typedef serializable_pair<txout_v, crypto::public_key> output_entry; // txout_v is either global output index or ref_by_id; public_key - is output ephemeral pub key
typedef serializable_pair<txout_ref_v, crypto::public_key> output_entry; // txout_v is either global output index or ref_by_id; public_key - is output ephemeral pub key
std::vector<output_entry> outputs; //index + key
uint64_t real_output; //index in outputs vector of real output_entry
@ -28,6 +28,7 @@ namespace currency
size_t ms_sigs_count; //if txin_multisig: must be equal to output's minimum_sigs
size_t ms_keys_count; //if txin_multisig: must be equal to size of output's keys container
bool separately_signed_tx_complete; //for separately signed tx only: denotes the last source entry in complete tx to explicitly mark the final step of tx creation
std::string htlc_origin; //for htlc, specify origin
bool is_multisig() const { return ms_sigs_count > 0; }
@ -42,21 +43,38 @@ namespace currency
FIELD(ms_sigs_count)
FIELD(ms_keys_count)
FIELD(separately_signed_tx_complete)
END_SERIALIZE()
FIELD(htlc_origin)
END_SERIALIZE()
};
//if this struct is present, then creating htlc out, expiration -> number of blocks that htlc proposal is active
struct destination_option_htlc_out
{
uint64_t expiration;
crypto::hash htlc_hash;
BEGIN_SERIALIZE_OBJECT()
FIELD(expiration)
FIELD(htlc_hash)
END_SERIALIZE()
};
struct tx_destination_entry
{
uint64_t amount; //money
std::list<account_public_address> addr; //destination address, in case of 1 address - txout_to_key, in case of more - txout_multisig
size_t minimum_sigs; // if txout_multisig: minimum signatures that are required to spend this output (minimum_sigs <= addr.size()) IF txout_to_key - not used
uint64_t amount_to_provide; //amount money that provided by initial creator of tx, used with partially created transactions
uint64_t amount; //money
std::list<account_public_address> addr; //destination address, in case of 1 address - txout_to_key, in case of more - txout_multisig
size_t minimum_sigs; //if txout_multisig: minimum signatures that are required to spend this output (minimum_sigs <= addr.size()) IF txout_to_key - not used
uint64_t amount_to_provide; //amount money that provided by initial creator of tx, used with partially created transactions
uint64_t unlock_time;
tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0){}
tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0){}
tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut) {}
tx_destination_entry(uint64_t a, const std::list<account_public_address>& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0){}
destination_option_htlc_out htlc_options; //htlc options
tx_destination_entry() : amount(0), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc_options(destination_option_htlc_out()){}
tx_destination_entry(uint64_t a, const account_public_address& ad) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(0), htlc_options(destination_option_htlc_out()) {}
tx_destination_entry(uint64_t a, const account_public_address& ad, uint64_t ut) : amount(a), addr(1, ad), minimum_sigs(0), amount_to_provide(0), unlock_time(ut), htlc_options(destination_option_htlc_out()) {}
tx_destination_entry(uint64_t a, const std::list<account_public_address>& addr) : amount(a), addr(addr), minimum_sigs(addr.size()), amount_to_provide(0), unlock_time(0), htlc_options(destination_option_htlc_out()) {}
BEGIN_SERIALIZE_OBJECT()
FIELD(amount)
@ -64,6 +82,7 @@ namespace currency
FIELD(minimum_sigs)
FIELD(amount_to_provide)
FIELD(unlock_time)
FIELD(htlc_options)
END_SERIALIZE()
};

View file

@ -102,6 +102,14 @@ namespace currency
return false;
}
if (!m_blockchain.validate_tx_for_hardfork_specific_terms(tx, id))
{
//
LOG_ERROR("Transaction " << id <<" doesn't fit current hardfork");
tvc.m_verification_failed = true;
return false;
}
TIME_MEASURE_START_PD(tx_processing_time);
TIME_MEASURE_START_PD(check_inputs_types_supported_time);
if(!check_inputs_types_supported(tx))

View file

@ -192,25 +192,6 @@ namespace currency
key_image_cache m_key_images;
mutable epee::critical_section m_remove_stuck_txs_lock;
/************************************************************************/
/* */
/************************************************************************/
class amount_visitor: public boost::static_visitor<uint64_t>
{
public:
uint64_t operator()(const txin_to_key& tx) const
{
return tx.amount;
}
uint64_t operator()(const txin_gen& /*tx*/) const
{
CHECK_AND_ASSERT_MES(false, 0, "coinbase transaction in memory pool");
return 0;
}
uint64_t operator()(const txin_multisig& in) const { return in.amount; }
};
};
}

View file

@ -30,6 +30,12 @@ namespace currency
if (!ki.insert(tokey_in.k_image).second)
return false;
}
else if (in.type() == typeid(txin_htlc))
{
CHECKED_GET_SPECIFIC_VARIANT(in, const txin_htlc, htlc_in, false);
if (!ki.insert(htlc_in.k_image).second)
return false;
}
}
return true;
}

View file

@ -42,6 +42,7 @@ public:
m_cmd_binder.set_handler("print_bc_outs_stats", boost::bind(&daemon_commands_handler::print_bc_outs_stats, this, _1));
m_cmd_binder.set_handler("print_block", boost::bind(&daemon_commands_handler::print_block, this, _1), "Print block, print_block <block_hash> | <block_height>");
m_cmd_binder.set_handler("print_block_info", boost::bind(&daemon_commands_handler::print_block_info, this, _1), "Print block info, print_block <block_hash> | <block_height>");
m_cmd_binder.set_handler("print_tx_prun_info", boost::bind(&daemon_commands_handler::print_tx_prun_info, this, _1), "Print tx prunning info");
m_cmd_binder.set_handler("print_tx", boost::bind(&daemon_commands_handler::print_tx, this, _1), "Print transaction, print_tx <transaction_hash>");
m_cmd_binder.set_handler("start_mining", boost::bind(&daemon_commands_handler::start_mining, this, _1), "Start mining for specified address, start_mining <addr> [threads=1]");
m_cmd_binder.set_handler("stop_mining", boost::bind(&daemon_commands_handler::stop_mining, this, _1), "Stop mining");
@ -630,6 +631,56 @@ private:
return true;
}
//--------------------------------------------------------------------------------
bool print_tx_prun_info(const std::vector<std::string>& arg)
{
currency::blockchain_storage& bcs = m_srv.get_payload_object().get_core().get_blockchain_storage();
size_t txs = 0;
size_t pruned_txs = 0;
size_t signatures = 0;
size_t attachments = 0;
size_t blocks = 0;
uint64_t last_block_height = bcs.get_top_block_height();
LOG_PRINT_MAGENTA("start getting stats from 0 to " << last_block_height << " block, please wait ...", LOG_LEVEL_0);
for (uint64_t height = 0; height <= last_block_height; height++, blocks++)
{
currency::block_extended_info bei = AUTO_VAL_INIT(bei);
bool r = bcs.get_block_extended_info_by_height(height, bei);
if (!r)
{
LOG_PRINT_RED("Failed to get block #" << height, LOG_LEVEL_0);
break;
}
for (const auto& h : bei.bl.tx_hashes)
{
auto ptx = bcs.get_tx(h);
CHECK_AND_ASSERT_MES(ptx != nullptr, false, "failed to find transaction " << h << " in blockchain index, in block on height = " << height);
if (ptx->signatures.size() == 0)
pruned_txs += 1;
txs += 1;
signatures += ptx->signatures.size();
attachments += ptx->attachment.size();
}
}
LOG_PRINT_MAGENTA(ENDL << "blockchain pruning stats:" << ENDL <<
" last block height: " << last_block_height << ENDL <<
" blocks processed: " << blocks << ENDL <<
" total txs: " << txs << ENDL <<
" pruned txs: " << pruned_txs << ENDL <<
" total signatures: " << signatures << ENDL <<
" total attachments: " << attachments << ENDL <<
(pruned_txs == 0 ? "*** The database seems to be unpruned!" : "The database contains pruned transactions."), LOG_LEVEL_0);
return true;
}
//--------------------------------------------------------------------------------
bool print_tx(const std::vector<std::string>& args)
{
if (args.empty())

View file

@ -1 +1 @@
*.user
*.user

View file

@ -4,9 +4,7 @@
<dict>
<key>LSEnvironment</key>
<dict>
<key>QTWEBENGINE_REMOTE_DEBUGGING</key>
<string>11113</string>
</dict>
</dict>
<key>BuildMachineOSBuild</key>
<string>14E46</string>
<key>CFBundleDevelopmentRegion</key>

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="icons" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 384 384" style="enable-background:new 0 0 384 384;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path id="account" class="st0" d="M192,0C86,0,0,86,0,192s86,192,192,192s192-86,192-192S298,0,192,0z M86,86
c28.3-28.3,66-43.9,106-43.9S269.7,57.7,298,86c28.3,28.3,43.9,66,43.9,106c0,26.4-6.8,51.7-19.4,74c-12.7-12.8-28.6-23.3-46.7-31
c8.4-15.6,13.2-33.7,13.2-53c0-32.3-9.8-59.2-28.3-78.1c-17.2-17.5-41.6-27.2-68.7-27.2s-51.5,9.7-68.7,27.2
C104.8,122.8,95,149.7,95,182c0,19.2,4.8,37.3,13.1,52.8C90,242.5,74,252.9,61.3,265.7c-12.6-22.2-19.3-47.4-19.3-73.7
C42.1,151.9,57.7,114.3,86,86z M137,182c0-40.2,20.1-63.3,55-63.3s55,23.1,55,63.3c0,34.9-24.7,63.3-55,63.3S137,216.9,137,182z
M87.3,299.3c1.4-1.6,3-3.3,4.9-5.1c11.7-11.3,26.9-19.8,45.1-25.4c15.6,11.6,34.4,18.4,54.7,18.4c20.2,0,39-6.8,54.6-18.3
c26.4,8.1,41.7,21.2,49.9,30.6c-28.1,27.4-65.1,42.4-104.5,42.4C152.6,341.9,115.5,326.8,87.3,299.3z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z M18,25h-4v-4h4V25z M18,18h-4V7h4V18z"/>
</svg>

Before

Width:  |  Height:  |  Size: 529 B

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<polygon class="st0" points="0,8 32,8 16,24"/>
</svg>

Before

Width:  |  Height:  |  Size: 453 B

View file

@ -1,9 +0,0 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="451.846px" height="451.847px" viewBox="0 0 451.846 451.847" style="enable-background:new 0 0 451.846 451.847;"
xml:space="preserve">
<g>
<path d="M345.441,248.292L151.154,442.573c-12.359,12.365-32.397,12.365-44.75,0c-12.354-12.354-12.354-32.391,0-44.744
L278.318,225.92L106.409,54.017c-12.354-12.359-12.354-32.394,0-44.748c12.354-12.359,32.391-12.359,44.75,0l194.287,194.284
c6.177,6.18,9.262,14.271,9.262,22.366C354.708,234.018,351.617,242.115,345.441,248.292z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 606 B

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<polygon class="st0" points="0,24 32,24 16,8"/>
</svg>

Before

Width:  |  Height:  |  Size: 454 B

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Nastavit hlavní heslo",
"SETUP_CONFIRM_PASS": "Potvrdit heslo",
"MASTER_PASS": "Hlavní heslo",
"BUTTON_NEXT": "Další",
"BUTTON_SKIP": "Přeskočit",
"BUTTON_RESET": "Resetovat",
"INCORRECT_PASSWORD": "Neplatné heslo",
"FORM_ERRORS": {
"PASS_REQUIRED": "Je vyžadováno heslo",
"CONFIRM_REQUIRED": "Je požadováno potvrzení",
"MISMATCH": "Neodpovídající"
}
},
"COMMON": {
"BACK": "Jít zpět"
},
"BREADCRUMBS": {
"ADD_WALLET": "Přidat peněženku",
"CREATE_WALLET": "Vytvořit novou peněženku",
"SAVE_PHRASE": "Uložit svoji seed frázi",
"OPEN_WALLET": "Otevřít existující peněženku",
"RESTORE_WALLET": "Obnovení z zálohy",
"WALLET_DETAILS": "Podrobnosti o peněžence",
"ASSIGN_ALIAS": "Přidělit přezdívku",
"EDIT_ALIAS": "Upravit přezdívku",
"TRANSFER_ALIAS": "Převést přezdívku",
"CONTRACTS": "Kontrakty",
"NEW_PURCHASE": "Nový nákup",
"OLD_PURCHASE": "Nákup"
},
"SIDEBAR": {
"TITLE": "Peněženky",
"ADD_NEW": "+ Přidat",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "Nové nabídky/zprávy",
"SYNCING": "Synchronizace pěněženky"
},
"CONTACTS": "Contacts",
"SETTINGS": "Nastavení",
"LOG_OUT": "Odhlásit se",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "Chyba systému",
"COMPLETE": "Dokončení",
"SYNCING": "Sychronizace blockchainu",
"LOADING": "Nahrávání blockchainových dat"
},
"UPDATE": {
"STANDARD": "Aktualizace k dispozici",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Získejte novou aktualizaci.</span><br><span>Doporučená aktualizace!</span>",
"IMPORTANT": "Aktualizace k dispozici",
"IMPORTANT_HINT": "Důležitá aktualizace!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Získejte novou aktualizaci.</span><br><span>Důležitá aktualizace!</span>",
"CRITICAL": "Aktualizace k dispozici",
"CRITICAL_HINT": "Kritická aktualizace!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Kritická aktualizace k dispozici.</span><i class=\"icon\"></i><span>Aktualizaci důrazně doporučujeme!</span>",
"TIME": "Systémový čas se liší od sítového",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Špatný systémový čas!</span><br><span>Zkontrolujte a nastavte systémový čas.</span>"
}
},
"MAIN": {
"TITLE": "Chcete-li začít používat Zano, vytvořte nebo otevřete peněženku",
"BUTTON_NEW_WALLET": "Vytvořit novou peněženku",
"BUTTON_OPEN_WALLET": "Otevřít existující peněženku",
"BUTTON_RESTORE_BACKUP": "Obnovení ze zálohy",
"HELP": "Jak vytvořit peněženku?",
"CHOOSE_PATH": "Zvolte prosím cestu"
},
"CREATE_WALLET": {
"NAME": "Název peněženky",
"PASS": "Nastavit heslo peněženky",
"CONFIRM": "Potvrdit heslo k peněžence",
"BUTTON_SELECT": "Vyberte cestu k pěněžence",
"BUTTON_CREATE": "Vytvořit peněženku",
"TITLE_SAVE": "Uložte soubor peněženky.",
"ERROR_CANNOT_SAVE_TOP": "Stávající soubory peněženky nelze nahradit nebo přepsat",
"ERROR_CANNOT_SAVE_SYSTEM": "Soubory peněženky nelze uložit na diskový oddíl s operačním systémem",
"FORM_ERRORS": {
"NAME_REQUIRED": "Název je povinný",
"NAME_DUPLICATE": "Název je duplicitní",
"MAX_LENGTH": "Dosáhli jste maximální délky názvu",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Master-Passwort einrichten",
"SETUP_CONFIRM_PASS": "Passwort bestätigen",
"MASTER_PASS": "Master-Passwort",
"BUTTON_NEXT": "Weiter",
"BUTTON_SKIP": "Überspringen",
"BUTTON_RESET": "Zurücksetzen",
"INCORRECT_PASSWORD": "Ungültiges Passwort",
"FORM_ERRORS": {
"PASS_REQUIRED": "Passwort ist erforderlich",
"CONFIRM_REQUIRED": "Bestätigung ist erforderlich",
"MISMATCH": "Fehlanpassung"
}
},
"COMMON": {
"BACK": "Zurück"
},
"BREADCRUMBS": {
"ADD_WALLET": "Wallet hinzufügen",
"CREATE_WALLET": "Neue Wallet erstellen",
"SAVE_PHRASE": "Speichere deinen Seed-Satz",
"OPEN_WALLET": "Vorhandene Wallet öffnen",
"RESTORE_WALLET": "Aus Backup wiederherstellen",
"WALLET_DETAILS": "Wallet-Details",
"ASSIGN_ALIAS": "Alias zuweisen",
"EDIT_ALIAS": "Alias bearbeiten",
"TRANSFER_ALIAS": "Alias übertragen",
"CONTRACTS": "Verträge",
"NEW_PURCHASE": "Neuer Kauf",
"OLD_PURCHASE": "Kauf"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Hinzufügen",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "Neue Angebote/Nachrichten",
"SYNCING": "Wallet synchronisieren"
},
"CONTACTS": "Kontakte",
"SETTINGS": "Einstellungen",
"LOG_OUT": "Abmelden",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "Systemfehler",
"COMPLETE": "Abschluss",
"SYNCING": "Syncing block",
"LOADING": "Lade Blockchain-Daten"
},
"UPDATE": {
"STANDARD": "Update verfügbar",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Neues Update ausführen.</span><br><span>Update wird empfohlen!</span>",
"IMPORTANT": "Update verfügbar",
"IMPORTANT_HINT": "Wichtiges Update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Neues Update ausführen.</span><br><span>Wichtiges Update!</span>",
"CRITICAL": "Update verfügbar",
"CRITICAL_HINT": "Kritisches Update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Kritisches Update verfügbar.</span><i class=\"icon\"></i><span>Update dringend empfohlen!</span>",
"TIME": "Systemzeit unterscheidet sich vom Netzwerk",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Falsche Systemzeit!</span><br><span>Prüfen und korrigieren Sie Ihre Systemzeit.</span>"
}
},
"MAIN": {
"TITLE": "Erstellen oder öffnen Sie die Wallet, um Zano zu verwenden",
"BUTTON_NEW_WALLET": "Neue Wallet erstellen",
"BUTTON_OPEN_WALLET": "Vorhandene Wallet öffnen",
"BUTTON_RESTORE_BACKUP": "Aus Backup wiederherstellen",
"HELP": "Wie Wallet erstellen?",
"CHOOSE_PATH": "Bitte wählen Sie einen Pfad"
},
"CREATE_WALLET": {
"NAME": "Wallet-Name",
"PASS": "Wallet-Passwort festlegen",
"CONFIRM": "Wallet-Passwort bestätigen",
"BUTTON_SELECT": "Wallet-Verzeichnis auswählen",
"BUTTON_CREATE": "Wallet erstellen",
"TITLE_SAVE": "Wallet-Datei speichern.",
"ERROR_CANNOT_SAVE_TOP": "Bestehende Wallet-Dateien können nicht ersetzt oder überschrieben werden",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet-Dateien können nicht auf der OS-Partition gespeichert werden",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name ist erforderlich",
"NAME_DUPLICATE": "Name existiert bereits",
"MAX_LENGTH": "Maximale Namenslänge erreicht",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet-Name",
"PASS": "Wallet-Passwort",
"BUTTON": "Wallet öffnen",
"WITH_ADDRESS_ALREADY_OPEN": "Eine Wallet mit dieser Adresse ist bereits geöffnet",
"FILE_NOT_FOUND1": "Wallet-Datei nicht gefunden",
"FILE_NOT_FOUND2": "<br/><br/> Es wurde umbenannt oder verschoben. <br/> Um es zu öffnen, verwenden Sie den \"Wallet öffnen\"-Knopf.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name ist erforderlich",
"NAME_DUPLICATE": "Name existiert bereits",
"MAX_LENGTH": "Maximale Namenslänge erreicht"
},
"MODAL": {
"TITLE": "Wallet-Passwort eingeben",
"LABEL": "Passwort für diese Wallet",
"OPEN": "Wallet öffnen",
"SKIP": "Überspringen",
"NOT_FOUND": "Nicht gefunden"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet-Name",
"LABEL_PHRASE_KEY": "Seed-Satz / Private-Key",
"PASS": "Wallet-Passwort",
"CONFIRM": "Wallet-Passwort bestätigen",
"BUTTON_SELECT": "Wallet-Verzeichnis auswählen",
"BUTTON_CREATE": "Wallet erstellen",
"NOT_CORRECT_FILE_OR_PASSWORD": "Ungültige Wallet-Datei oder Passwort stimmt nicht überein",
"CHOOSE_PATH": "Bitte wählen Sie einen Pfad",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name ist erforderlich",
"NAME_DUPLICATE": "Name existiert bereits",
"MAX_LENGTH": "Maximale Namenslänge erreicht",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Schlüssel ist erforderlich",
"KEY_NOT_VALID": "Schlüssel ungültig"
}
},
"SEED_PHRASE": {
"TITLE": "Stellen Sie sicher, dass Ihr Seed-Satz an einem sicheren Ort bleibt. Wenn Sie Ihren Seed-Satz vergessen, können Sie Ihre Wallet nicht wiederherstellen.",
"BUTTON_CREATE_ACCOUNT": "Wallet erstellen",
"BUTTON_COPY": "Kopieren"
},
"PROGRESS": {
"ADD_WALLET": "Wallet hinzufügen",
"SELECT_LOCATION": "Wallet-Verzeichnis auswählen",
"CREATE_WALLET": "Neue Wallet erstellen",
"RESTORE_WALLET": "Aus Backup wiederherstellen"
},
"SETTINGS": {
"TITLE": "Einstellungen",
"DARK_THEME": "Nachtmodus",
"WHITE_THEME": "Tagmodus",
"GRAY_THEME": "Graumodus",
"APP_LOCK": {
"TITLE": "Programm sperren nach:",
"TIME1": "5 Minuten",
"TIME2": "15 Minuten",
"TIME3": "1 Stunde",
"TIME4": "Nie"
},
"SCALE": {
"75": "75% Rahmen",
"100": "100% Rahmen",
"125": "125% Rahmen",
"150": "150% Rahmen"
},
"MASTER_PASSWORD": {
"TITLE": "Master-Passwort aktualisieren",
"OLD": "Altes Passwort",
"NEW": "Neues Passwort",
"CONFIRM": "New password confirmation",
"BUTTON": "Speichern"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Passwort ist erforderlich",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Aktueller Build: {{value}}",
"APP_LOG_TITLE": "Log-Level:"
},
"WALLET": {
"REGISTER_ALIAS": "Alias registrieren",
"DETAILS": "Details",
"LOCK": "Verschlüsseln",
"AVAILABLE_BALANCE": "Verfügbar <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Gesperrt <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "Was bedeutet das?",
"TABS": {
"SEND": "Senden",
"RECEIVE": "Empfangen",
"HISTORY": "Verlauf",
"CONTRACTS": "Verträge",
"MESSAGES": "Nachrichten",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet-Name",
"LABEL_FILE_LOCATION": "Wallet-Datei-Verzeichnis",
"LABEL_SEED_PHRASE": "Seed-Satz",
"SEED_PHRASE_HINT": "Klicken, um den Seed-Satz anzuzeigen",
"BUTTON_SAVE": "Speichern",
"BUTTON_REMOVE": "Wallet schließen",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name ist erforderlich",
"NAME_DUPLICATE": "Name existiert bereits",
"MAX_LENGTH": "Maximale Namenslänge erreicht"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Alias eingeben",
"TOOLTIP": "Ein Alias ist eine verkürzte Form Ihres Kontos. Ein Alias kann nur lateinische Buchstaben, Zahlen und die Zeichen „.“ und “-” enthalten. Es muss mit “@” beginnen."
},
"COMMENT": {
"LABEL": "Kommentar",
"PLACEHOLDER": "",
"TOOLTIP": "Der Kommentar wird für jeden sichtbar sein, der eine Zahlung an Ihren Alias vornehmen möchte. Sie können Details über Ihre Geschäfte, Kontakte oder Text angeben. Kommentare können später bearbeitet werden."
},
"COST": "Alias-Gebühr {{value}} {{currency}}",
"BUTTON_ASSIGN": "Zuweisen",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name ist erforderlich",
"NAME_WRONG": "Ungültiger Name: zulässige Symbole \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "Der Alias muss 6-25 Zeichen lang sein",
"NAME_EXISTS": "Alias-Name existiert bereits",
"NO_MONEY": "Du hast nicht genug Geldmittel, um diesen Alias zuzuweisen",
"MAX_LENGTH": "Maximale Kommentarlänge erreicht"
},
"ONE_ALIAS": "Sie können nur einen Alias pro Wallet erstellen",
"REQUEST_ADD_REG": "Der Alias wird innerhalb von 10 Minuten zugewiesen"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Alias eingeben"
},
"COMMENT": {
"LABEL": "Kommentar",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "Sie haben nicht genügend Geldmittel, um den Kommentar zu diesem Alias zu ändern",
"MAX_LENGTH": "Maximale Kommentarlänge erreicht"
},
"COST": "Gebühr {{value}} {{currency}}",
"BUTTON_EDIT": "Bearbeiten"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Alias eingeben"
},
"COMMENT": {
"LABEL": "Kommentar",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "transferieren zu",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "Keine Wallet mit diesem Konto existiert",
"ALIAS_EXISTS": "Dieses Konto hat bereits einen Alias",
"NO_MONEY": "Du hast nicht genug Geldmittel, um diesen Alias zu transferieren"
},
"COST": "Überweisungsgebühr {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Abbrechen",
"REQUEST_SEND_REG": "Der Alias wird innerhalb von 10 Minuten übertragen"
},
"SEND": {
"ADDRESS": "Adresse",
"AMOUNT": "Betrag",
"COMMENT": "Kommentar",
"DETAILS": "Zusätzliche Informationen",
"MIXIN": "Mixin",
"FEE": "Gebühr",
"HIDE": "Verstecke deine Wallet-Adresse vom Empfänger",
"BUTTON": "Senden",
"SUCCESS_SENT": "Transaktion gesendet",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Adresse benötigt",
"ADDRESS_NOT_VALID": "Adresse ungültig",
"ALIAS_NOT_VALID": "Alias ungültig",
"AMOUNT_REQUIRED": "Betrag ist erforderlich",
"AMOUNT_ZERO": "Betrag ist Null",
"FEE_REQUIRED": "Gebühr ist erforderlich",
"FEE_MINIMUM": "Mindestgebühr: {{fee}}",
"MAX_LENGTH": "Maximale Kommentarlänge erreicht"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Bestätigungen {{current}}/{{total}}",
"LOCK_TOOLTIP": "Gesperrt bis {{date}}",
"SEND": "Gesendet",
"RECEIVED": "Empfangen",
"DATE": "Datum",
"AMOUNT": "Betrag",
"FEE": "Gebühr",
"ADDRESS": "Adresse",
"DETAILS": {
"PAYMENT_ID": "Zahlungs-ID",
"ID": "Transaktions-ID",
"SIZE": "Transaktionsgröße",
"SIZE_VALUE": "{{value}} Bytes",
"HEIGHT": "Höhe",
"CONFIRMATION": "Bestätigung",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Kommentar"
},
"TYPE_MESSAGES": {
"HIDDEN": "versteckt",
"UNDEFINED": "Unbedefiniert",
"COMPLETE_BUYER": "Vertrag abgeschlossen",
"COMPLETE_SELLER": "Vertrag abgeschlossen",
"CREATE_ALIAS": "Gebühr für die Zuordnung eines Alias",
"UPDATE_ALIAS": "Gebühr für die Bearbeitung eines Alias",
"POW_REWARD": "POW-Belohnung",
"POS_REWARD": "POS-Belohnung",
"CREATE_CONTRACT": "Vertragsvorschlag",
"PLEDGE_CONTRACT": "Vertrag-Einzahlung",
"NULLIFY_CONTRACT": "Einzahlungen verbrennen",
"PROPOSAL_CANCEL_CONTRACT": "Stornierungsanfrage",
"CANCEL_CONTRACT": "Abbrechen und Einzahlungen zurückzahlen"
}
},
"CONTRACTS": {
"EMPTY": "Keine aktiven Verträge",
"CONTRACTS": "Verträge",
"PURCHASE": "Kauf",
"SELL": "Verkaufen",
"DATE": "Datum",
"AMOUNT": "Betrag",
"STATUS": "Status",
"COMMENTS": "Kommentare",
"PURCHASE_BUTTON": "Neuer Kauf",
"LISTING_BUTTON": "Auflistung erstellen",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Weniger als eine Stunde, um zu antworten",
"REMAINING_ONE": "{{time}} verbleibende Stunde",
"REMAINING_MANY": "{{time}} verbleibende Stunden",
"REMAINING_MANY_ALT": "{{time}} verbleibende Stunden",
"REMAINING_ONE_RESPONSE": "{{time}} verbleibende Stunde",
"REMAINING_MANY_RESPONSE": "{{time}} verbleibende Stunde",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} verbleibende Stunden",
"REMAINING_ONE_WAITING": "Warte für {{time}} Stunde",
"REMAINING_MANY_WAITING": "Warte für {{time}} Stunden",
"REMAINING_MANY_ALT_WAITING": "Warte für {{Zeit}} Stunden"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "Neuer Vertragsvorschlag",
"IGNORED": "Sie haben den Vertragsvorschlag ignoriert",
"ACCEPTED": "Vertrag gestartet",
"WAIT": "Warten auf Bestätitung des Vertrages",
"WAITING_BUYER": "Warte auf Sendung",
"COMPLETED": "Vertrag abgeschlossen",
"NOT_RECEIVED": "Senden fehlgeschlagen",
"NULLIFIED": "Alle Einzahlungen verbrannt",
"PROPOSAL_CANCEL": "Neuer Vorschlag, Vertrag zu kündigen und Einzahlungen zurückzugeben",
"BEING_CANCELLED": "Abbruch wird durchgeführt",
"CANCELLED": "Vertrag abgebrochen",
"IGNORED_CANCEL": "Sie haben den Stornierungsvorschlag ignoriert",
"EXPIRED": "Vertragsvorschlag ist abgelaufen"
},
"BUYER": {
"WAITING": "Warte auf Antwort",
"IGNORED": "Verkäufer ignorierte Ihren Vertragsvorschlag",
"ACCEPTED": "Verkäufer hat Ihren Vertragsvorschlag akzeptiert",
"WAIT": "Warten auf die Bestätigung der Einzahlungen",
"WAITING_SELLER": "Warte auf Sendung",
"COMPLETED": "Vertrag abgeschlossen",
"NOT_RECEIVED": "Senden fehlgeschlagen",
"NULLIFIED": "Alle Einzahlungen verbrannt",
"WAITING_CANCEL": "Warten auf Stornierung des Vertrages",
"BEING_CANCELLED": "Abbruch wird durchgeführt",
"CANCELLED": "Vertrag abgebrochen",
"IGNORED_CANCEL": "Der Verkäufer hat Ihren Vorschlag zur Stornierung des Vertrages ignoriert",
"EXPIRED": "Der Vertragsvorschlag ist abgelaufen"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Beschreibung",
"SELLER": "Verkäufer",
"AMOUNT": "Betrag",
"YOUR_DEPOSIT": "Ihre Einzahlung",
"SELLER_DEPOSIT": "Einzahlung Verkäufer",
"BUYER_DEPOSIT": "Einzahlung Käufer",
"SAME_AMOUNT": "Gleicher Betrag",
"COMMENT": "Kommentar",
"DETAILS": "Zusätzliche Informationen",
"SEND_BUTTON": "Senden",
"FORM_ERRORS": {
"DESC_REQUIRED": "Beschreibung erforderlich",
"DESC_MAXIMUM": "Maximale Feldlänge erreicht",
"SELLER_REQUIRED": "Adresse benötigt",
"SELLER_NOT_VALID": "Ungültige Adresse",
"ALIAS_NOT_VALID": "Ungültiger Alias",
"AMOUNT_REQUIRED": "Betrag ist erforderlich",
"AMOUNT_ZERO": "Betrag darf nicht Null sein",
"YOUR_DEPOSIT_REQUIRED": "Einzahlung erforderlich",
"SELLER_DEPOSIT_REQUIRED": "Verkäufer-Einzahlung erforderlich",
"SELLER_SAME": "Anderes Konto verwenden",
"COMMENT_MAXIMUM": "Maximale Feldlänge erreicht"
},
"PROGRESS_NEW": "Neuer Kauf",
"PROGRESS_WAIT": "Warte auf Antwort",
"PROGRESS_RECEIVE": "Antwort erhalten",
"PROGRESS_COMPLETE": "Abgeschlossen",
"FEE": "Gebühr",
"PAYMENT": "Zahlungs-ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "Neuer Kauf",
"WAITING_SELLER": "Warte auf Antwort",
"WAITING_BUYER": "Vertragsvorschlag erhalten",
"WAITING_CONFIRMATION": "Warten auf die Bestätigung der Einzahlungen",
"WAITING_DELIVERY": "Warte auf Sendung",
"COMPLETED": "Vertrag abgeschlossen",
"IGNORED_BUYER": "Vertragsvorschlag ignoriert",
"IGNORED_SELLER": "Der Verkäufer ignorierte Ihren Vertragsvorschlag",
"PROPOSAL_CANCEL_SELLER": "Stornierungsanfrage gesendet",
"PROPOSAL_CANCEL_BUYER": "Stornierungsanfrage erhalten",
"BEING_CANCELLED": "Abbruch wird durchgeführt",
"IGNORED_CANCEL_SELLER": "Der Verkäufer hat Ihren Vorschlag zur Stornierung des Vertrages ignoriert",
"IGNORED_CANCEL_BUYER": "Vertragsstornierungsanfrage ignoriert",
"CANCELLED": "Vertrag abgebrochen",
"EXPIRED": "Vertragsvorschlag abgelaufen",
"NOT_RECEIVED": "Senden fehlgeschlagen",
"NULLIFIED": "Alle Einzahlungen verbrannt"
},
"ACCEPT_STATE_WAIT_BIG": "Vertrag gestartet",
"IGNORED_ACCEPT": "Vertragsvorschlag ignoriert",
"BURN_PROPOSAL": "Einzahlungen verbrannt",
"SUCCESS_FINISH_PROPOSAL": "Vertrag abgeschlossen",
"SEND_CANCEL_PROPOSAL": "Stornierungsanfrage gesendet",
"IGNORED_CANCEL": "Vertragsstornierungsanfrage ignoriert",
"DEALS_CANCELED_WAIT": "Abbruch wird durchgeführt",
"WAITING_TIME": "Antwortzeit",
"NEED_MONEY": "Unzureichendes Guthaben",
"BUTTON_MAKE_PLEDGE": "Akzeptieren und Einzahlung tätigen",
"BUTTON_IGNORE": "Angebot ignorieren und ausblenden",
"BUTTON_NULLIFY": "Beenden und Einzahlungen verbrennen",
"BUTTON_RECEIVED": "Einzahlungen abschließen und freigeben",
"BUTTON_CANCEL_BUYER": "Einzahlungen abbrechen und zurückzahlen",
"BUTTON_NOT_CANCEL": "Anfrage ignorieren",
"BUTTON_CANCEL_SELLER": "Einzahlungen bestätigen und zurückzahlen",
"HOUR": "Stunde",
"HOURS": "Stunden",
"CANCEL": "Abbrechen",
"NULLIFY_QUESTION": "Sind Sie sicher, dass Sie beide Einzahlungen verbrennen möchten?",
"BUTTON_NULLIFY_SHORT": "Verbrennen",
"WAITING_TIME_QUESTION": "Sind Sie sicher, dass Sie den Vertrag kündigen möchten?"
},
"MESSAGES": {
"ADDRESS": "Adresse",
"MESSAGE": "Nachricht",
"SEND_PLACEHOLDER": "Nachricht eingeben...",
"SEND_BUTTON": "Senden"
},
"MODALS": {
"ERROR": "Fehler",
"SUCCESS": "Erfolg",
"INFO": "Informationen",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Senden",
"BUTTON_CANCEL": "Abbrechen",
"TITLE": "Transaktion bestätigen",
"MESSAGE": {
"SEND": "Senden",
"FROM": "Von",
"TO": "Zu",
"COMMENT": "Kommentar"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Ausstehend",
"TITLE_TOTAL": "Gesamt",
"TITLE_PERIOD": "Zeitspanne:",
"PERIOD": {
"WEEK1": "1 Woche",
"WEEK2": "2 Wochen",
"MONTH1": "1 Monat",
"MONTH3": "3 Monate",
"MONTH6": "6 Monate",
"YEAR": "1 Jahr",
"ALL": "Alle"
},
"TITLE_GROUP": "Gruppe:",
"GROUP": {
"DAY": "Tag",
"WEEK": "Woche",
"MONTH": "Monat"
},
"SWITCH": {
"ON": "AN",
"OFF": "AUS"
}
},
"CONTACTS": {
"TITLE": "Kontaktliste",
"IMPORT_EXPORT": "Kontakte importieren oder exportieren",
"IMPORT": "Importieren",
"EXPORT": "Exportieren",
"ADD": "Kontakt hinzufügen/bearbeiten",
"SEND": "Senden",
"SEND_FROM": "Senden von",
"SEND_TO": "Zu",
"OPEN_ADD_WALLET": "Wallet öffnen/hinzufügen",
"COPY": "- Kopieren",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Adresse",
"NOTES": "Notizen",
"EMPTY": "Kontaktliste ist leer"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Adresse",
"NOTES": "Notizen"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name ist erforderlich",
"NAME_DUBLICATED": "Name existiert bereits",
"ADDRESS_REQUIRED": "Adresse benötigt",
"ADDRESS_NOT_VALID": "Adresse ungültig",
"SET_MASTER_PASSWORD": "Master-Passwort festlegen",
"ADDRESS_DUBLICATED": "Adresse existiert bereits",
"MAX_LENGTH": "Maximale Länge der Notiz erreicht",
"NAME_LENGTH": "Der Name muss 4-25 Zeichen lang sein"
},
"BUTTON": {
"SEND": "Senden",
"EDIT": "Bearbeiten",
"DELETE": "Löschen",
"ADD": "Kontakt hinzufügen",
"ADD_EDIT": "Hinzufügen/Speichern",
"GO_TO_WALLET": "Zu Wallet gehen",
"IMPORT_EXPORT": "importieren/exportieren"
},
"SUCCESS_SENT": "Kontakt hinzugefügt",
"SUCCESS_SAVE": "Kontakt wurde bearbeitet",
"SUCCESS_IMPORT": "Kontakte wurden importiert",
"SUCCESS_EXPORT": "Kontakte wurden exportiert",
"ERROR_IMPORT": "Fehler beim Lesen der Datei!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Ungültiger Dateityp. Datei als .csv speichern",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Nicht genügend Geld",
"NOT_ENOUGH_MONEY": "Unzureichendes Guthaben im Konto",
"CORE_BUSY": "Interner Fehler: Kern ist beschäftigt",
"DAEMON_BUSY": "Interner Fehler: Daemon ist beschäftigt",
"NO_MONEY_REMOVE_OFFER": "Es gibt keine Gebühr für das Löschen eines Angebots, aber um das Netzwerk vor Spam-Transaktionen zu schützen, müssen Sie mindestens {{fee}} {{currency}} in Ihrer Wallet haben",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in-Nummer ist zu groß für den aktuellen Blockchain-Status. Nicht genügend unverbrauchte outputs zum Mischen",
"TRANSACTION_IS_TO_BIG": "Transaktion überschreitet das Netzwerk-Limit. Sendet benötigten Betrag mit mehreren Transaktionen.",
"TRANSFER_ATTEMPT": "Keine Verbindung zum Zano-Netzwerk",
"ACCESS_DENIED": "Zugriff verweigert",
"TRANSACTION_ERROR": "Fehler. Transaktion nicht abgeschlossen.",
"BAD_ARG": "Ungültiges Argument",
"WALLET_WRONG_ID": "Ungültige Wallet-ID",
"WRONG_PASSWORD": "Ungültiges Passwort",
"FILE_RESTORED": "Die Wallet-Datei wurde beschädigt. Wir haben die Schlüssel und die Wallet von der Blockchain wiederhergestellt",
"FILE_NOT_FOUND": "Datei nicht gefunden",
"FILE_EXIST": "Eine Datei mit diesem Namen existiert bereits. Geben Sie einen anderen Namen ein, um die Datei zu speichern",
"FILE_NOT_SAVED": "Sie können keine Wallet-Datei in diesem Ordner speichern. Bitte wählen Sie einen anderen Ordner.",
"TX_TYPE_NORMAL": "Fehler. Die Zahlung von der Wallet",
"TX_TYPE_NORMAL_TO": "zu",
"TX_TYPE_NORMAL_END": "wurde nicht abgeschlossen.",
"TX_TYPE_NEW_ALIAS": "Fehler. Fehler beim Registrieren des Alias zum Speichern",
"TX_TYPE_NEW_ALIAS_END": "Bitte nochmals versuchen.",
"TX_TYPE_UPDATE_ALIAS": "Fehler. Fehlgeschlagen Kommentar von gespeichertem Alias zu ändern",
"TX_TYPE_COIN_BASE": "Fehler. Die Zahlung wurde nicht abgeschlossen."
},
"CONTEXT_MENU": {
"COPY": "kopieren",
"PASTE": "einfügen",
"SELECT": "alle auswählen"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Beenden",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Eingehende Zahlung (nicht bestätigt)",
"INCOME_TRANSFER_CONFIRMED": "Zahlung erhalten",
"MINED": "Mined",
"LOCKED": "Blockiert",
"IS_MINIMIZE": "Zano-Anwendung wird auf die Systemleiste minimiert",
"RESTORE": "Sie können es wiederherstellen, indem Sie auf das Kontextmenü benutzen oder anklicken ",
"TRAY_MENU_SHOW": "Größe ändern",
"TRAY_MENU_MINIMIZE": "Minimieren"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Alias has wrong name",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,632 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"CONTACTS_TOOLTIP": "Contacts option available only with Master Password enabled",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"LOG_OUT_TOOLTIP": "Logout option available only with Master Password enabled",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing block",
"LOADING": "Loading blockchain data",
"DOWNLOADING": "Downloading",
"SLASH": "/",
"MB": "MB"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"SEED_PASSWORD": "Seed password",
"OK": "OK",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid",
"INCORRECT_PASSWORD": "Incorrect password"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"LANGUAGE": {
"TITLE": "Language",
"EN": "English",
"FR": "French",
"DE": "Deutsch",
"IT": "Italian",
"PT": "Portuguese"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Current password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Incorrect password",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"CONFIRM": {
"TITLE": "Remove wallet from the list?",
"MESSAGE": "To access it youll have to add it again"
},
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
},
"TOOLTIPS": {
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"SETTINGS": "Settings",
"CLOSE": "Close wallet"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"CREATE_PASSWORD_SECURE": "Create a password to secure your seed",
"INFO": "info",
"SEED_IS_UNSECURED": "Seed is unsecured",
"SEED_IS_SECURED": "Seed is secured",
"REMEMBER_YOU_WILL_REQUIRE": "Remember, you will require the password to restore it.",
"FORM": {
"CONFIRM_PASSWORD": "Confirm password",
"GENERATE_SECURE_SEED": "Generate Secure Seed",
"SECURED_SEED_WILL_REQUIRE": "Secured seed will require this password to restore."
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"PASSWORDS_DONT_MATCH": "Passwords don't match"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK",
"CANCEL": "Cancel"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy"
, "TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WALLET_WATCH_ONLY_NOT_SUPPORTED": "Watch-only wallets can only be opened by simplewallet",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Nombre no válido: símbolos permitidos \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Configurer le mot de passe principal",
"SETUP_CONFIRM_PASS": "Confirmer le mot de passe",
"MASTER_PASS": "Mot de passe principal",
"BUTTON_NEXT": "Suivant",
"BUTTON_SKIP": "Sauter",
"BUTTON_RESET": "Réinitialiser",
"INCORRECT_PASSWORD": "Mot de passe invalide",
"FORM_ERRORS": {
"PASS_REQUIRED": "Mot de passe requis",
"CONFIRM_REQUIRED": "Confirmation requise",
"MISMATCH": "Non-concordant"
}
},
"COMMON": {
"BACK": "Retour"
},
"BREADCRUMBS": {
"ADD_WALLET": "Ajouter un portefeuille",
"CREATE_WALLET": "Créer un nouveau portefeuille",
"SAVE_PHRASE": "Enregistrer votre phrase de sécurité",
"OPEN_WALLET": "Ouvrir un portefeuille existant",
"RESTORE_WALLET": "Restaurer depuis une sauvegarde",
"WALLET_DETAILS": "Détails du portefeuille",
"ASSIGN_ALIAS": "Assigner un alias",
"EDIT_ALIAS": "Modifier l'alias",
"TRANSFER_ALIAS": "Transférer l'alias",
"CONTRACTS": "Contrats",
"NEW_PURCHASE": "Nouvel achat",
"OLD_PURCHASE": "Achat"
},
"SIDEBAR": {
"TITLE": "Portefeuilles",
"ADD_NEW": "+ Ajouter",
"ACCOUNT": {
"STAKING": "Mise",
"MESSAGES": "Nouvelles offres/Messages",
"SYNCING": "Synchronisation du portefeuille"
},
"CONTACTS": "Contacts",
"SETTINGS": "Paramètres",
"LOG_OUT": "Déconnexion",
"SYNCHRONIZATION": {
"OFFLINE": "Hors ligne",
"ONLINE": "En ligne",
"ERROR": "Erreur de système",
"COMPLETE": "Fermeture",
"SYNCING": "Syncing block",
"LOADING": "Chargement des données de la blockchain"
},
"UPDATE": {
"STANDARD": "Mise à jour disponible",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Mise à jour.</span><br><span>La mise à jour est recommandée.</span>",
"IMPORTANT": "Mise à jour disponible",
"IMPORTANT_HINT": "Mise à jour importante !",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Mise à jour.</span><br><span>La mise à jour est recommandée.</span>",
"CRITICAL": "Mise à jour disponible",
"CRITICAL_HINT": "Mise à jour critique !",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Mise à jour critique disponible.</span><i class=\"icon\"></i><span>Mise à jour fortement recommandée.</span>",
"TIME": "Le temps du système diffère de celui du réseau",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Mauvais temps de système</span><br><span>Vérifier et corriger votre temps de système.</span>"
}
},
"MAIN": {
"TITLE": "Créer ou ouvrir le portefeuille pour commencer à utiliser Zano",
"BUTTON_NEW_WALLET": "Créer un nouveau portefeuille",
"BUTTON_OPEN_WALLET": "Ouvrir un portefeuille existant",
"BUTTON_RESTORE_BACKUP": "Restaurer depuis une sauvegarde",
"HELP": "Comment créer un portefeuille ?",
"CHOOSE_PATH": "Veuillez choisir un chemin"
},
"CREATE_WALLET": {
"NAME": "Nom du portefeuille",
"PASS": "Définir le mot de passe du portefeuille",
"CONFIRM": "Confirmer le mot de passe du portefeuille",
"BUTTON_SELECT": "Sélectionner l'emplacement du portefeuille",
"BUTTON_CREATE": "Créer un portefeuille",
"TITLE_SAVE": "Enregistrer le fichier du portefeuille.",
"ERROR_CANNOT_SAVE_TOP": "Les fichiers de portefeuille existants ne peuvent pas être remplacés ou écrasés",
"ERROR_CANNOT_SAVE_SYSTEM": "Les fichiers de portefeuille ne peuvent pas être sauvegardés sur la partition du OS",
"FORM_ERRORS": {
"NAME_REQUIRED": "Le nom est requis",
"NAME_DUPLICATE": "Nom déjà utilisé",
"MAX_LENGTH": "Longueur maximale du nom atteinte",
"CONFIRM_NOT_MATCH": "La confirmation du mot de passe ne correspond pas"
}
},
"OPEN_WALLET": {
"NAME": "Nom du portefeuille",
"PASS": "Mot de passe du portefeuille",
"BUTTON": "Ouvrir un portefeuille",
"WITH_ADDRESS_ALREADY_OPEN": "Un portefeuille avec cette adresse est déjà ouvert",
"FILE_NOT_FOUND1": "Fichier de portefeuille introuvable",
"FILE_NOT_FOUND2": "<br/><br/> Il aurait peut-être été renommé ou déplacé. <br/> Pour l'ouvrir, utilisez le bouton \"Ouvrir le portefeuille\".",
"FORM_ERRORS": {
"NAME_REQUIRED": "Le nom est requis",
"NAME_DUPLICATE": "Nom déjà utilisé",
"MAX_LENGTH": "Longueur maximale du nom atteinte"
},
"MODAL": {
"TITLE": "Entrer le mot de passe du portefeuille",
"LABEL": "Mot de passe de ce portefeuille",
"OPEN": "Ouvrir un portefeuille",
"SKIP": "Sauter",
"NOT_FOUND": "Introuvable"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Nom du portefeuille",
"LABEL_PHRASE_KEY": "Phrase de sécurité / clé privée",
"PASS": "Mot de passe du portefeuille",
"CONFIRM": "Confirmer le mot de passe du portefeuille",
"BUTTON_SELECT": "Sélectionner l'emplacement du portefeuille",
"BUTTON_CREATE": "Créer un portefeuille",
"NOT_CORRECT_FILE_OR_PASSWORD": "Le fichier est invalide ou mot de passe du portefeuille ne correspond pas",
"CHOOSE_PATH": "Veuillez choisir un chemin",
"FORM_ERRORS": {
"NAME_REQUIRED": "Le nom est requis",
"NAME_DUPLICATE": "Nom déjà utilisé",
"MAX_LENGTH": "Longueur maximale atteinte",
"CONFIRM_NOT_MATCH": "La confirmation du mot de passe ne correspond pas",
"KEY_REQUIRED": "Clé requise",
"KEY_NOT_VALID": "Clé invalide"
}
},
"SEED_PHRASE": {
"TITLE": "Assurez-vous de garder votre phrase de sécurité dans un endroit sûr. Si vous oubliez votre phrase de sécurité, vous ne pourrez pas récupérer votre portefeuille.",
"BUTTON_CREATE_ACCOUNT": "Créer un portefeuille",
"BUTTON_COPY": "Copier"
},
"PROGRESS": {
"ADD_WALLET": "Ajouter un portefeuille",
"SELECT_LOCATION": "Sélectionner l'emplacement du portefeuille",
"CREATE_WALLET": "Créer un nouveau portefeuille",
"RESTORE_WALLET": "Restaurer depuis une sauvegarde"
},
"SETTINGS": {
"TITLE": "Paramètres",
"DARK_THEME": "Thème sombre",
"WHITE_THEME": "Thème blanc",
"GRAY_THEME": "Thème gris",
"APP_LOCK": {
"TITLE": "Verrouiller l'application après :",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 heure",
"TIME4": "Jamais"
},
"SCALE": {
"75": "75% échelle",
"100": "100% échelle",
"125": "125% échelle",
"150": "150% échelle"
},
"MASTER_PASSWORD": {
"TITLE": "Mettre à jour le mot de passe principal",
"OLD": "Ancien mot de passe",
"NEW": "Nouveau mot de passe",
"CONFIRM": "Confirmer le mot de passe",
"BUTTON": "Enregistrer"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Mot de passe requis",
"PASS_NOT_MATCH": "Ancien mot de passe non correspondant",
"CONFIRM_NOT_MATCH": "La confirmation du mot de passe ne correspond pas"
},
"LAST_BUILD": "Version actuelle : {{value}}",
"APP_LOG_TITLE": "Niveau de log :"
},
"WALLET": {
"REGISTER_ALIAS": "Enregistrer un alias",
"DETAILS": "Détails",
"LOCK": "Verrouillage",
"AVAILABLE_BALANCE": "Disponible <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Vérouillé<b>{{locked}}{{currency}}<b/>",
"LOCKED_BALANCE_LINK": "Que signifie cela?",
"TABS": {
"SEND": "Envoyer",
"RECEIVE": "Recevoir",
"HISTORY": "Historique",
"CONTRACTS": "Contrats",
"MESSAGES": "Messages",
"STAKING": "Mise"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Nom du portefeuille",
"LABEL_FILE_LOCATION": "Emplacement du fichier de portefeuille",
"LABEL_SEED_PHRASE": "Phrase de sécurité",
"SEED_PHRASE_HINT": "Cliquez pour révéler la phrase de sécurité",
"BUTTON_SAVE": "Enregistrer",
"BUTTON_REMOVE": "Fermer le portefeuille",
"FORM_ERRORS": {
"NAME_REQUIRED": "Le nom est requis",
"NAME_DUPLICATE": "Nom déjà utilisé",
"MAX_LENGTH": "Longueur maximale atteinte"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Entrer l'alias",
"TOOLTIP": "Un alias est une forme abréviée pour votre compte. Un alias ne peut inclure que des lettres, des chiffres et des caractères latins « » et « - ». Il doit commencer par « @ »."
},
"COMMENT": {
"LABEL": "Commentaire",
"PLACEHOLDER": "",
"TOOLTIP": "Le commentaire sera visible à quiconque souhaite effectuer un paiement à votre alias. Vous pouvez fournir des détails sur votre entreprise, vos informations de contact ou inclure tout texte. Les commentaires peuvent être modifiés plus tard."
},
"COST": "Frais d'alias {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assigner",
"FORM_ERRORS": {
"NAME_REQUIRED": "Le nom est requis",
"NAME_WRONG": "Nom invalide: symboles autorisés \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "L'alias doit contenir 6-25 caractères",
"NAME_EXISTS": "Alias déjà existant",
"NO_MONEY": "Vous n'avez pas assez de fonds pour assigner cet alias",
"MAX_LENGTH": "Longueur maximale du commentaire atteinte"
},
"ONE_ALIAS": "Vous pouvez créer un seul alias par portefeuille",
"REQUEST_ADD_REG": "L'alias sera assigné dans les 10 prochaines minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Entrer l'alias"
},
"COMMENT": {
"LABEL": "Commentaire",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "Vous n'avez pas assez de fonds pour changer le commentaire de cet alias",
"MAX_LENGTH": "Longueur maximale du commentaire atteinte"
},
"COST": "Frais {{value}} {{currency}}",
"BUTTON_EDIT": "Modifier"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Entrer l'alias"
},
"COMMENT": {
"LABEL": "Commentaire",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transférer à",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "Aucun portefeuille avec ce compte n'existe",
"ALIAS_EXISTS": "Ce compte a déjà un alias",
"NO_MONEY": "Vous n'avez pas assez de fonds pour transférer cet alias"
},
"COST": "Frais de transfert {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transférer",
"BUTTON_CANCEL": "Annuler",
"REQUEST_SEND_REG": "L'alias sera transféré dans les 10 prochaines minutes"
},
"SEND": {
"ADDRESS": "Adresse",
"AMOUNT": "Montant",
"COMMENT": "Commentaire",
"DETAILS": "Détails supplémentaires",
"MIXIN": "Mélange",
"FEE": "Frais",
"HIDE": "Masquer votre adresse de portefeuille au destinataire",
"BUTTON": "Envoyer",
"SUCCESS_SENT": "Transaction envoyée",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Adresse requise",
"ADDRESS_NOT_VALID": "Addresse invalide",
"ALIAS_NOT_VALID": "Alias non valide",
"AMOUNT_REQUIRED": "Le Montant est requis",
"AMOUNT_ZERO": "Le montant est zéro",
"FEE_REQUIRED": "Les frais sont requis",
"FEE_MINIMUM": "Frais minimum : {{fee}}",
"MAX_LENGTH": "Longueur maximale du commentaire atteinte"
}
},
"HISTORY": {
"STATUS": "Statut",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Verrouillé jusqu'à {{date}}",
"SEND": "Envoyé",
"RECEIVED": "Reçu",
"DATE": "Date",
"AMOUNT": "Montant",
"FEE": "Frais",
"ADDRESS": "Adresse",
"DETAILS": {
"PAYMENT_ID": "ID de paiement",
"ID": "ID de transaction",
"SIZE": "Taille de la transaction",
"SIZE_VALUE": "{{value}} octets",
"HEIGHT": "Hauteur",
"CONFIRMATION": "Confirmation",
"INPUTS": "Entrées",
"OUTPUTS": "Sorties",
"COMMENT": "Commentaire"
},
"TYPE_MESSAGES": {
"HIDDEN": "caché",
"UNDEFINED": "Non défini",
"COMPLETE_BUYER": "Contrat complété",
"COMPLETE_SELLER": "Contrat complété",
"CREATE_ALIAS": "Frais pour assigner l'alias",
"UPDATE_ALIAS": "Frais pour modifier l'alias",
"POW_REWARD": "Récompense POW",
"POS_REWARD": "Récompense POS",
"CREATE_CONTRACT": "Proposition de contrat",
"PLEDGE_CONTRACT": "Dépôt de contrat",
"NULLIFY_CONTRACT": "Brûler les dépôts",
"PROPOSAL_CANCEL_CONTRACT": "Demande d'annulation",
"CANCEL_CONTRACT": "Annuler et retourner les dépôts"
}
},
"CONTRACTS": {
"EMPTY": "Aucun contrat actif",
"CONTRACTS": "Contrats",
"PURCHASE": "Achat",
"SELL": "Vendre",
"DATE": "Date",
"AMOUNT": "Montant",
"STATUS": "Statut",
"COMMENTS": "Commentaires",
"PURCHASE_BUTTON": "Nouvel achat",
"LISTING_BUTTON": "Créer une offre",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Moins d'une heure pour répondre",
"REMAINING_ONE": "{{time}} heure restante",
"REMAINING_MANY": "{{time}} heures restantes",
"REMAINING_MANY_ALT": "{{time}} heures restantes",
"REMAINING_ONE_RESPONSE": "{{time}} heure restante",
"REMAINING_MANY_RESPONSE": "{{time}} heures restantes",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} heures restantes",
"REMAINING_ONE_WAITING": "En attente de {{time}}  heure",
"REMAINING_MANY_WAITING": "En attente de {{time}} heures",
"REMAINING_MANY_ALT_WAITING": "En attente de {{time}} heures"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "Nouvelle proposition de contrat",
"IGNORED": "Vous avez ignoré la proposition de contrat",
"ACCEPTED": "Contrat démarré",
"WAIT": "En attente de confirmation du contrat",
"WAITING_BUYER": "En attente de livraison",
"COMPLETED": "Contrat terminé",
"NOT_RECEIVED": "Échec de la livraison",
"NULLIFIED": "Tous les dépôts ont été brûlés",
"PROPOSAL_CANCEL": "Nouvelle proposition d'annulation de contrat et retour des dépôts",
"BEING_CANCELLED": "Annulation en cours",
"CANCELLED": "Contrat annulé",
"IGNORED_CANCEL": "Vous avez ignoré la proposition d'annulation",
"EXPIRED": "La proposition de contrat a expiré"
},
"BUYER": {
"WAITING": "En attente d'une réponse",
"IGNORED": "Le vendeur a ignoré votre proposition de contrat",
"ACCEPTED": "Le vendeur a accepté votre proposition de contrat",
"WAIT": "En attente de confirmation des dépôts",
"WAITING_SELLER": "En attente de livraison",
"COMPLETED": "Contrat complété",
"NOT_RECEIVED": "Échec de la livraison",
"NULLIFIED": "Tous les dépôts ont été brûlés",
"WAITING_CANCEL": "En attente d'annulation du contrat",
"BEING_CANCELLED": "Annulation en cours",
"CANCELLED": "Contrat annulé",
"IGNORED_CANCEL": "Le vendeur a ignoré votre proposition d'annuler le contrat",
"EXPIRED": "La proposition de contrat a expiré"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Vendeur",
"AMOUNT": "Montant",
"YOUR_DEPOSIT": "Votre dépôt",
"SELLER_DEPOSIT": "Dépôt du vendeur",
"BUYER_DEPOSIT": "Dépôt d'acheteur",
"SAME_AMOUNT": "Montant identique",
"COMMENT": "Commentaire",
"DETAILS": "Détails supplémentaires",
"SEND_BUTTON": "Envoyer",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description requise",
"DESC_MAXIMUM": "Longueur maximale du champ atteinte",
"SELLER_REQUIRED": "Adresse requise",
"SELLER_NOT_VALID": "Adresse invalide",
"ALIAS_NOT_VALID": "Alias invalide",
"AMOUNT_REQUIRED": "Montant requis",
"AMOUNT_ZERO": "Le montant ne peut pas être nul",
"YOUR_DEPOSIT_REQUIRED": "Dépôt requis",
"SELLER_DEPOSIT_REQUIRED": "Dépôt de vendeur requis",
"SELLER_SAME": "Utiliser un compte séparé",
"COMMENT_MAXIMUM": "Longueur maximale du champ atteinte"
},
"PROGRESS_NEW": "Nouvel achat",
"PROGRESS_WAIT": "En attente d'une réponse",
"PROGRESS_RECEIVE": "Réponse reçue",
"PROGRESS_COMPLETE": "Complété",
"FEE": "Frais",
"PAYMENT": "ID de paiement",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "Nouvel achat",
"WAITING_SELLER": "En attente d'une réponse",
"WAITING_BUYER": "Proposition de contrat reçue",
"WAITING_CONFIRMATION": "En attente de confirmation des dépôts",
"WAITING_DELIVERY": "En attente de livraison",
"COMPLETED": "Contrat complété",
"IGNORED_BUYER": "Proposition de contrat ignorée",
"IGNORED_SELLER": "Le vendeur a ignoré votre proposition de contrat",
"PROPOSAL_CANCEL_SELLER": "Demande d'annulation envoyée",
"PROPOSAL_CANCEL_BUYER": "Demande d'annulation reçue",
"BEING_CANCELLED": "Annulation en cours",
"IGNORED_CANCEL_SELLER": "Le vendeur a ignoré votre proposition d'annuler le contrat",
"IGNORED_CANCEL_BUYER": "Proposition d'annulation du contrat ignorée",
"CANCELLED": "Contrat annulé",
"EXPIRED": "Proposition de contrat expirée",
"NOT_RECEIVED": "Échec de la livraison",
"NULLIFIED": "Tous les dépôts ont été brûlés"
},
"ACCEPT_STATE_WAIT_BIG": "Contrat débuté",
"IGNORED_ACCEPT": "Proposition de contrat ignorée",
"BURN_PROPOSAL": "Dépositions brûlées",
"SUCCESS_FINISH_PROPOSAL": "Contrat complété",
"SEND_CANCEL_PROPOSAL": "Demande d'annulation envoyée",
"IGNORED_CANCEL": "Proposition d'annulation du contrat ignorée",
"DEALS_CANCELED_WAIT": "Annulation en cours",
"WAITING_TIME": "Heure de réponse",
"NEED_MONEY": "Fonds insuffisants",
"BUTTON_MAKE_PLEDGE": "Accepter et effectuer un dépôt",
"BUTTON_IGNORE": "Ignorer et cacher l'offre",
"BUTTON_NULLIFY": "Terminer et brûler les dépôts",
"BUTTON_RECEIVED": "Compléter et libérer les dépôts",
"BUTTON_CANCEL_BUYER": "Annuler et retourner les dépôts",
"BUTTON_NOT_CANCEL": "Ignorer la requête",
"BUTTON_CANCEL_SELLER": "Confirmer et retourner les dépôts",
"HOUR": "heure",
"HOURS": "heures",
"CANCEL": "Annuler",
"NULLIFY_QUESTION": "Êtes-vous sûr de vouloir brûler les deux dépôts ?",
"BUTTON_NULLIFY_SHORT": "Brûler",
"WAITING_TIME_QUESTION": "Êtes-vous sûr de vouloir annuler le contrat ?"
},
"MESSAGES": {
"ADDRESS": "Adresse",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Tapez un message...",
"SEND_BUTTON": "Envoyer"
},
"MODALS": {
"ERROR": "Erreur",
"SUCCESS": "Succès",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Envoyer",
"BUTTON_CANCEL": "Annuler",
"TITLE": "Confirmer la transaction",
"MESSAGE": {
"SEND": "Envoyer",
"FROM": "De",
"TO": "À",
"COMMENT": "Commentaire"
}
},
"STAKING": {
"TITLE": "Mise",
"TITLE_PENDING": "En attente",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Période de temps:",
"PERIOD": {
"WEEK1": "1 semaine",
"WEEK2": "2 semaines",
"MONTH1": "1 mois",
"MONTH3": "3 mois",
"MONTH6": "6 mois",
"YEAR": "1 an",
"ALL": "Tout"
},
"TITLE_GROUP": "Groupe :",
"GROUP": {
"DAY": "jour",
"WEEK": "semaine",
"MONTH": "mois"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Liste de contacts",
"IMPORT_EXPORT": "Importer ou exporter des contacts",
"IMPORT": "Importer",
"EXPORT": "Exporter",
"ADD": "Ajouter/modifier un contact",
"SEND": "Envoyer",
"SEND_FROM": "Envoyer de",
"SEND_TO": "À",
"OPEN_ADD_WALLET": "Ouvrir/Ajouter un portefeuille",
"COPY": "- Copier",
"TABLE": {
"NAME": "Nom",
"ALIAS": "Alias",
"ADDRESS": "Adresse",
"NOTES": "Notes",
"EMPTY": "La liste de contacts est vide"
},
"FORM": {
"NAME": "Nom",
"ADDRESS": "Adresse",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Le nom est requis",
"NAME_DUBLICATED": "Nom déjà utilisé",
"ADDRESS_REQUIRED": "Adresse requise",
"ADDRESS_NOT_VALID": "Addresse invalide",
"SET_MASTER_PASSWORD": "Définir le mot de passe maître",
"ADDRESS_DUBLICATED": "L'addresse est dupliquée",
"MAX_LENGTH": "Longueur maximale des notes atteinte",
"NAME_LENGTH": "Le nom doit contenir 4-25 caractères"
},
"BUTTON": {
"SEND": "Envoyer",
"EDIT": "Modifier",
"DELETE": "Supprimer",
"ADD": "Ajouter un contact",
"ADD_EDIT": "Ajouter/Enregistrer",
"GO_TO_WALLET": "Aller au portefeuille",
"IMPORT_EXPORT": "Importer/exporter"
},
"SUCCESS_SENT": "Contact ajouté",
"SUCCESS_SAVE": "Contact modifié",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Erreur lors de la lecture du fichier !",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Pas assez de fonds",
"NOT_ENOUGH_MONEY": "Fonds insuffisants dans le compte",
"CORE_BUSY": "Erreur interne : le noyau est occupé",
"DAEMON_BUSY": "Erreur interne : le daemon est occupé",
"NO_MONEY_REMOVE_OFFER": "Il n'y a pas de frais pour supprimer une offre, mais pour protéger le réseau contre les transactions de spam, vous devez avoir au moins {{fee}} {{currency}} dans votre portefeuille",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Le nombre de mixage est trop grand pour l'état actuel de la blockchain. Il n'y a pas assez de sorties non utilisées pour mélanger avec",
"TRANSACTION_IS_TO_BIG": "La transaction dépasse la limite réseau, envoyez le montant requis avec plusieurs transactions",
"TRANSFER_ATTEMPT": "Il n'y a pas de connexion au réseau Zano",
"ACCESS_DENIED": "Accès refusé",
"TRANSACTION_ERROR": "Erreur. Transaction non complétée.",
"BAD_ARG": "Argument invalide",
"WALLET_WRONG_ID": "ID de portefeuille invalide",
"WRONG_PASSWORD": "Mot de passe invalide",
"FILE_RESTORED": "Le fichier de portefeuille a été corrompu. Nous avons récupéré les clés et le portefeuille de la blockchain",
"FILE_NOT_FOUND": "Fichier introuvable",
"FILE_EXIST": "Un fichier avec ce nom existe déjà. Entrez un autre nom pour enregistrer le fichier sous",
"FILE_NOT_SAVED": "Vous ne pouvez pas enregistrer un fichier de portefeuille dans ce dossier. Veuillez choisir un autre dossier.",
"TX_TYPE_NORMAL": "Erreur. paiement du portefeuille",
"TX_TYPE_NORMAL_TO": "à",
"TX_TYPE_NORMAL_END": "n'a pas été complété.",
"TX_TYPE_NEW_ALIAS": "Erreur. Impossible d'enregistrer l'alias dans la blockchain",
"TX_TYPE_NEW_ALIAS_END": "Veuillez réessayer.",
"TX_TYPE_UPDATE_ALIAS": "Erreur. Impossible de changer le commentaire de l'alias actuel",
"TX_TYPE_COIN_BASE": "Erreur. Le paiement n'a pas été complété."
},
"CONTEXT_MENU": {
"COPY": "copier",
"PASTE": "coller",
"SELECT": "tout sélectionner"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quitter",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Paiement entrant (non confirmé)",
"INCOME_TRANSFER_CONFIRMED": "Paiement reçu",
"MINED": "Miné",
"LOCKED": "Bloqué",
"IS_MINIMIZE": "L'application Zano est minimisée dans la barre d'état",
"RESTORE": "Vous pouvez le récupérer en cliquant ou en utilisant le menu contextuel",
"TRAY_MENU_SHOW": "Redimensionner",
"TRAY_MENU_MINIMIZE": "Réduire"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Imposta password principale",
"SETUP_CONFIRM_PASS": "Conferma la password",
"MASTER_PASS": "Password principale",
"BUTTON_NEXT": "Prossimo",
"BUTTON_SKIP": "Salta",
"BUTTON_RESET": "Azzera",
"INCORRECT_PASSWORD": "Password non valida",
"FORM_ERRORS": {
"PASS_REQUIRED": "La password è necessaria",
"CONFIRM_REQUIRED": "La conferma è necessaria",
"MISMATCH": "Non corrisponde"
}
},
"COMMON": {
"BACK": "Torna indietro"
},
"BREADCRUMBS": {
"ADD_WALLET": "Aggiungi portafoglio",
"CREATE_WALLET": "Crea un nuovo portafoglio",
"SAVE_PHRASE": "Salva la tua frase segreta",
"OPEN_WALLET": "Apri portafoglio esistente",
"RESTORE_WALLET": "Ripristina da backup",
"WALLET_DETAILS": "Dettagli portafoglio",
"ASSIGN_ALIAS": "Assegna alias",
"EDIT_ALIAS": "Modifica alias",
"TRANSFER_ALIAS": "Trasferisci alias",
"CONTRACTS": "Contratti",
"NEW_PURCHASE": "Nuovo acquisto",
"OLD_PURCHASE": "Acquisto"
},
"SIDEBAR": {
"TITLE": "Portafogli",
"ADD_NEW": "+ Aggiungi",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "Nuove offerte/messaggi",
"SYNCING": "Sincronizzazione portafoglio"
},
"CONTACTS": "Contatti",
"SETTINGS": "Impostazioni",
"LOG_OUT": "Esci",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "Errore di sistema",
"COMPLETE": "Completata",
"SYNCING": "Syncing block",
"LOADING": "Caricamento dati blockchain"
},
"UPDATE": {
"STANDARD": "Aggiornamento disponibile",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Ottieni un nuovo aggiornamento.</span><br><span>L'aggiornamento è consigliato!</span>",
"IMPORTANT": "Aggiornamento disponibile",
"IMPORTANT_HINT": "Aggiornamento importante!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Ottieni un nuovo aggiornamento.</span><br><span>Aggiornamento importante!</span>",
"CRITICAL": "Aggiornamento disponibile",
"CRITICAL_HINT": "Aggiornamento critico!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Aggiornamento critico disponibile.</span><i class=\"icon\"></i><span>Aggiornamento fortemente consigliato!</span>",
"TIME": "L'orario di sistema differisce dalla rete",
"TIME_TOOLTIP": "<span class=\"wrong-time\">L'orario di sistema è sbagliato!</span><br><span>Controlla e sistema l'orario di sistema.</span>"
}
},
"MAIN": {
"TITLE": "Crea o apri il portafoglio per iniziare a usare Zano",
"BUTTON_NEW_WALLET": "Crea un nuovo portafoglio",
"BUTTON_OPEN_WALLET": "Apri portafoglio esistente",
"BUTTON_RESTORE_BACKUP": "Ripristina da backup",
"HELP": "Come creare il portafoglio?",
"CHOOSE_PATH": "Scegli un percorso"
},
"CREATE_WALLET": {
"NAME": "Nome del portafoglio",
"PASS": "Imposta password portafoglio",
"CONFIRM": "Conferma password portafoglio",
"BUTTON_SELECT": "Seleziona posizione portafoglio",
"BUTTON_CREATE": "Crea portafoglio",
"TITLE_SAVE": "Salva il file del portafoglio.",
"ERROR_CANNOT_SAVE_TOP": "I file del portafoglio esistenti non possono essere sostituiti o sovrascritti",
"ERROR_CANNOT_SAVE_SYSTEM": "I file del portafoglio non possono essere salvati nella partizione di sistema",
"FORM_ERRORS": {
"NAME_REQUIRED": "Il nome è richiesto",
"NAME_DUPLICATE": "Il nome è duplicato",
"MAX_LENGTH": "Lunghezza massima del nome raggiunta",
"CONFIRM_NOT_MATCH": "La password di conferma non corrisponde"
}
},
"OPEN_WALLET": {
"NAME": "Nome del portafoglio",
"PASS": "Password portafoglio",
"BUTTON": "Apri portafoglio",
"WITH_ADDRESS_ALREADY_OPEN": "Un portafoglio con questo indirizzo è già aperto",
"FILE_NOT_FOUND1": "File del portafoglio non trovato",
"FILE_NOT_FOUND2": "<br/><br/> Potrebbe essere stato rinominato o spostato. <br/> Per aprirlo, usa il pulsante \"Apri portafoglio\".",
"FORM_ERRORS": {
"NAME_REQUIRED": "Il nome è richiesto",
"NAME_DUPLICATE": "Il nome è un duplicato",
"MAX_LENGTH": "Lunghezza massima del nome raggiunta"
},
"MODAL": {
"TITLE": "Imposta password portafoglio",
"LABEL": "Password per questo portafoglio",
"OPEN": "Apri portafoglio",
"SKIP": "Salta",
"NOT_FOUND": "Non trovato"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Nome del portafoglio",
"LABEL_PHRASE_KEY": "Frase segreta / chiave privata",
"PASS": "Password portafoglio",
"CONFIRM": "Conferma password portafoglio",
"BUTTON_SELECT": "Seleziona posizione portafoglio",
"BUTTON_CREATE": "Crea portafoglio",
"NOT_CORRECT_FILE_OR_PASSWORD": "File del portafoglio non valido o password non corrispondente",
"CHOOSE_PATH": "Scegli un percorso",
"FORM_ERRORS": {
"NAME_REQUIRED": "Il nome è richiesto",
"NAME_DUPLICATE": "Il nome è un duplicato",
"MAX_LENGTH": "Lunghezza massima del nome raggiunta",
"CONFIRM_NOT_MATCH": "La password di conferma non corrisponde",
"KEY_REQUIRED": "Chiave richiesta",
"KEY_NOT_VALID": "Chiave non valida"
}
},
"SEED_PHRASE": {
"TITLE": "Assicurati di mantenere la tua frase segreta in un posto sicuro. Se dimentichi la tua frase segreta non sarai in grado di recuperare il tuo portafoglio.",
"BUTTON_CREATE_ACCOUNT": "Crea portafoglio",
"BUTTON_COPY": "Copia"
},
"PROGRESS": {
"ADD_WALLET": "Aggiungi portafoglio",
"SELECT_LOCATION": "Seleziona posizione portafoglio",
"CREATE_WALLET": "Crea un nuovo portafoglio",
"RESTORE_WALLET": "Ripristina da backup"
},
"SETTINGS": {
"TITLE": "Impostazioni",
"DARK_THEME": "Tema scuro",
"WHITE_THEME": "Tema bianco",
"GRAY_THEME": "Tema grigio",
"APP_LOCK": {
"TITLE": "Blocca app dopo:",
"TIME1": "5 minuti",
"TIME2": "15 minuti",
"TIME3": "1 ora",
"TIME4": "Mai"
},
"SCALE": {
"75": "75% scala",
"100": "100% scala",
"125": "125% scala",
"150": "150% scala"
},
"MASTER_PASSWORD": {
"TITLE": "Aggiorna password principale",
"OLD": "Vecchia password",
"NEW": "Nuova password",
"CONFIRM": "Conferma nuova password",
"BUTTON": "Salva"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "La password è necessaria",
"PASS_NOT_MATCH": "La vecchia password non corrisponde",
"CONFIRM_NOT_MATCH": "La password di conferma non corrisponde"
},
"LAST_BUILD": "Build attuale: {{value}}",
"APP_LOG_TITLE": "Livello di log:"
},
"WALLET": {
"REGISTER_ALIAS": "Registra un alias",
"DETAILS": "Dettagli",
"LOCK": "Blocca",
"AVAILABLE_BALANCE": "Disponibile <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Bloccato <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "Che cosa significa?",
"TABS": {
"SEND": "Invia",
"RECEIVE": "Ricevi",
"HISTORY": "Storico",
"CONTRACTS": "Contratti",
"MESSAGES": "Messaggi",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Nome portafoglio",
"LABEL_FILE_LOCATION": "Posizione file portafoglio",
"LABEL_SEED_PHRASE": "Frase segreta",
"SEED_PHRASE_HINT": "Clicca per rivelare la frase segreta",
"BUTTON_SAVE": "Salva",
"BUTTON_REMOVE": "Chiudi portafoglio",
"FORM_ERRORS": {
"NAME_REQUIRED": "Il nome è richiesto",
"NAME_DUPLICATE": "Il nome è un duplicato",
"MAX_LENGTH": "Lunghezza massima del nome raggiunta"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Inserisci alias",
"TOOLTIP": "Un alias è un modulo abbreviato o il tuo account. Un alias può solo includere lettere latine, numeri e caratteri “.” e “-”. Deve iniziare con “@”."
},
"COMMENT": {
"LABEL": "Commento",
"PLACEHOLDER": "",
"TOOLTIP": "Il commento sarà visibile a chiunque desideri effettuare un pagamento al tuo alias. Puoi fornire dettagli sul tuo business, contatti o includere qualsiasi testo. I commenti possono essere modificati più tardi."
},
"COST": "Quota alias {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assegna",
"FORM_ERRORS": {
"NAME_REQUIRED": "Il nome è richiesto",
"NAME_WRONG": "Nome Ungültiger: zulässige Symbole \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "L'alias deve essere lungo 6-25 caratteri",
"NAME_EXISTS": "Il nome dell'alias esiste già",
"NO_MONEY": "Non hai fondi sufficienti per assegnare questo alias",
"MAX_LENGTH": "Lunghezza massima del nome raggiunta"
},
"ONE_ALIAS": "Puoi creare solo un alias per portafoglio",
"REQUEST_ADD_REG": "L'alias sarà assegnato entro 10 minuti"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Inserisci alias"
},
"COMMENT": {
"LABEL": "Commento",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "Non hai fondi sufficienti per modificare il commento a questo alias",
"MAX_LENGTH": "Lunghezza massima del commento raggiunta"
},
"COST": "Tassa {{value}} {{currency}}",
"BUTTON_EDIT": "Modifica"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Inserisci alias"
},
"COMMENT": {
"LABEL": "Commento",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Trasferisci a",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "Non esiste alcun portafoglio con questo account",
"ALIAS_EXISTS": "Questo account ha già un alias",
"NO_MONEY": "Non hai fondi sufficienti per trasferire questo alias"
},
"COST": "Trasferimento commissione {{value}} {{currency}}",
"BUTTON_TRANSFER": "Trasferisci",
"BUTTON_CANCEL": "Cancella",
"REQUEST_SEND_REG": "L'alias verrà trasferito entro 10 minuti"
},
"SEND": {
"ADDRESS": "Indirizzo",
"AMOUNT": "Importo",
"COMMENT": "Commento",
"DETAILS": "Dettagli aggiuntivi",
"MIXIN": "Mixin",
"FEE": "Commissione",
"HIDE": "Nascondi l'indirizzo del tuo portafoglio dal destinatario",
"BUTTON": "Invia",
"SUCCESS_SENT": "Transazione inviata",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Indirizzo richiesto",
"ADDRESS_NOT_VALID": "Indirizzo non valido",
"ALIAS_NOT_VALID": "Alias non valido",
"AMOUNT_REQUIRED": "Importo richiesto",
"AMOUNT_ZERO": "Importo è zero",
"FEE_REQUIRED": "La commissione è richiesta",
"FEE_MINIMUM": "Costo minimo: {{fee}}",
"MAX_LENGTH": "Lunghezza massima del commento raggiunta"
}
},
"HISTORY": {
"STATUS": "Stato",
"STATUS_TOOLTIP": "Conferme {{current}}/{{total}}",
"LOCK_TOOLTIP": "Bloccato fino a {{date}}",
"SEND": "Inviato",
"RECEIVED": "Ricevuto",
"DATE": "Data",
"AMOUNT": "Importo",
"FEE": "Commissione",
"ADDRESS": "Indirizzo",
"DETAILS": {
"PAYMENT_ID": "ID pagamento",
"ID": "ID transazione",
"SIZE": "Dimensione transazione",
"SIZE_VALUE": "{{value}} byte",
"HEIGHT": "Altezza",
"CONFIRMATION": "Conferme",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Commenti"
},
"TYPE_MESSAGES": {
"HIDDEN": "nascosto",
"UNDEFINED": "Non definito",
"COMPLETE_BUYER": "Contratto completato",
"COMPLETE_SELLER": "Contratto completato",
"CREATE_ALIAS": "Tassa per l'assegnazione dell'alias",
"UPDATE_ALIAS": "Tassa per modificare alias",
"POW_REWARD": "Ricompensa POW",
"POS_REWARD": "Ricompensa POS",
"CREATE_CONTRACT": "Proposta contratto",
"PLEDGE_CONTRACT": "Deposito contratto",
"NULLIFY_CONTRACT": "Burn deposit",
"PROPOSAL_CANCEL_CONTRACT": "Richiesta di cancellazione",
"CANCEL_CONTRACT": "Annulla e restituisce depositi"
}
},
"CONTRACTS": {
"EMPTY": "Nessun contratto attivo",
"CONTRACTS": "Contratti",
"PURCHASE": "Acquisti",
"SELL": "Vendite",
"DATE": "Data",
"AMOUNT": "Importo",
"STATUS": "Stato",
"COMMENTS": "Commenti",
"PURCHASE_BUTTON": "Nuovo acquisto",
"LISTING_BUTTON": "Crea elenco",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Meno di un'ora per rispondere",
"REMAINING_ONE": "{{time}} ora rimasta",
"REMAINING_MANY": "{{time}} ore rimaste",
"REMAINING_MANY_ALT": "{{time}} ore rimaste",
"REMAINING_ONE_RESPONSE": "{{time}} ora rimasta",
"REMAINING_MANY_RESPONSE": "{{time}} ore rimaste",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} ore rimaste",
"REMAINING_ONE_WAITING": "Attendi {{time}} ora",
"REMAINING_MANY_WAITING": "Attendi {{time}} ore",
"REMAINING_MANY_ALT_WAITING": "Attendi {{time}} ore"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "Nuova proposta di contratto",
"IGNORED": "Hai ignorato la proposta di contratto",
"ACCEPTED": "Contratto iniziato",
"WAIT": "In attesa di conferma del contratto",
"WAITING_BUYER": "In attesa di consegna",
"COMPLETED": "Contratto completato",
"NOT_RECEIVED": "Consegna fallita",
"NULLIFIED": "Tutti i depositi bruciati",
"PROPOSAL_CANCEL": "Nuova proposta di cancellare il contratto e restituire i depositi",
"BEING_CANCELLED": "Cancellazione in corso",
"CANCELLED": "Contratto cancellato",
"IGNORED_CANCEL": "Hai ignorato la proposta di cancellazione",
"EXPIRED": "La proposta del contratto è scaduta"
},
"BUYER": {
"WAITING": "In attesa di risposta",
"IGNORED": "Il venditore ha ignorato la tua proposta di contratto",
"ACCEPTED": "Il venditore ha accettato la tua proposta di contratto",
"WAIT": "In attesa della conferma dei depositi",
"WAITING_SELLER": "In attesa di consegna",
"COMPLETED": "Contratto completato",
"NOT_RECEIVED": "Consegna fallita",
"NULLIFIED": "Tutti i depositi bruciati",
"WAITING_CANCEL": "In attesa della cancellazione del contratto",
"BEING_CANCELLED": "Cancellazione in corso",
"CANCELLED": "Contratto cancellato",
"IGNORED_CANCEL": "Il venditore ha ignorato la tua proposta di annullare il contratto",
"EXPIRED": "La proposta di contratto è scaduta"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Descrizione",
"SELLER": "Venditore",
"AMOUNT": "Importo",
"YOUR_DEPOSIT": "Il tuo deposito",
"SELLER_DEPOSIT": "Deposito venditore",
"BUYER_DEPOSIT": "Deposito acquirente",
"SAME_AMOUNT": "Stesso importo",
"COMMENT": "Commento",
"DETAILS": "Dettagli aggiuntivi",
"SEND_BUTTON": "Invia",
"FORM_ERRORS": {
"DESC_REQUIRED": "Descrizione richiesta",
"DESC_MAXIMUM": "Lunghezza massima del campo raggiunta",
"SELLER_REQUIRED": "Indirizzo richiesto",
"SELLER_NOT_VALID": "Indirizzo non valido",
"ALIAS_NOT_VALID": "Alias non valido",
"AMOUNT_REQUIRED": "Importo richiesto",
"AMOUNT_ZERO": "L'importo non può essere zero",
"YOUR_DEPOSIT_REQUIRED": "Deposito richiesto",
"SELLER_DEPOSIT_REQUIRED": "Deposito venditore richiesto",
"SELLER_SAME": "Usa account separato",
"COMMENT_MAXIMUM": "Lunghezza massima del campo raggiunta"
},
"PROGRESS_NEW": "Nuovo acquisto",
"PROGRESS_WAIT": "In attesa di risposta",
"PROGRESS_RECEIVE": "Risposta ricevuta",
"PROGRESS_COMPLETE": "Completato",
"FEE": "Commissione",
"PAYMENT": "ID pagamento",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "Nuovo acquisto",
"WAITING_SELLER": "In attesa di risposta",
"WAITING_BUYER": "Proposta contratto ricevuta",
"WAITING_CONFIRMATION": "In attesa della conferma dei depositi",
"WAITING_DELIVERY": "In attesa di consegna",
"COMPLETED": "Contratto completato",
"IGNORED_BUYER": "Proposta del contratto ignorata",
"IGNORED_SELLER": "Il venditore ha ignorato la tua proposta di contratto",
"PROPOSAL_CANCEL_SELLER": "Richiesta di cancellazione inviata",
"PROPOSAL_CANCEL_BUYER": "Richiesta di cancellazione ricevuta",
"BEING_CANCELLED": "Cancellazione in corso",
"IGNORED_CANCEL_SELLER": "Il venditore ha ignorato la tua proposta di cancellare il contratto",
"IGNORED_CANCEL_BUYER": "Proposta di cancellazione del contratto ignorata",
"CANCELLED": "Contratto cancellato",
"EXPIRED": "Proposta contratto scaduta",
"NOT_RECEIVED": "Consegna fallita",
"NULLIFIED": "Tutti i depositi bruciati"
},
"ACCEPT_STATE_WAIT_BIG": "Contratto iniziato",
"IGNORED_ACCEPT": "Proposta del contratto ignorata",
"BURN_PROPOSAL": "Depositi bruciati",
"SUCCESS_FINISH_PROPOSAL": "Contratto completato",
"SEND_CANCEL_PROPOSAL": "Richiesta di cancellazione inviata",
"IGNORED_CANCEL": "Proposta di cancellazione del contratto ignorata",
"DEALS_CANCELED_WAIT": "Cancellazione in corso",
"WAITING_TIME": "Tempo di risposta",
"NEED_MONEY": "Fondi insufficienti",
"BUTTON_MAKE_PLEDGE": "Accetta e effettua il deposito",
"BUTTON_IGNORE": "Ignora e nascondi l'offerta",
"BUTTON_NULLIFY": "Termina e brucia i depositi",
"BUTTON_RECEIVED": "Completa e rilascia i depositi",
"BUTTON_CANCEL_BUYER": "Cancella e restituisce i depositi",
"BUTTON_NOT_CANCEL": "Ignora richiesta",
"BUTTON_CANCEL_SELLER": "Conferma e restituisce depositi",
"HOUR": "ora",
"HOURS": "ore",
"CANCEL": "Cancella",
"NULLIFY_QUESTION": "Sei sicuro di voler bruciare entrambi i depositi?",
"BUTTON_NULLIFY_SHORT": "Bruciare",
"WAITING_TIME_QUESTION": "Sei sicuro di voler cancellare il contratto?"
},
"MESSAGES": {
"ADDRESS": "Indirizzo",
"MESSAGE": "Messaggio",
"SEND_PLACEHOLDER": "Digita un messaggio...",
"SEND_BUTTON": "Invia"
},
"MODALS": {
"ERROR": "Errore",
"SUCCESS": "Successo",
"INFO": "Informazioni",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Invia",
"BUTTON_CANCEL": "Cancella",
"TITLE": "Conferma la transazione",
"MESSAGE": {
"SEND": "Invia",
"FROM": "Da",
"TO": "A",
"COMMENT": "Commento"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "In sospeso",
"TITLE_TOTAL": "Totale",
"TITLE_PERIOD": "Periodo di tempo:",
"PERIOD": {
"WEEK1": "1 settimana",
"WEEK2": "2 settimane",
"MONTH1": "1 mese",
"MONTH3": "3 mesi",
"MONTH6": "6 mesi",
"YEAR": "1 anno",
"ALL": "Tutti"
},
"TITLE_GROUP": "Gruppo:",
"GROUP": {
"DAY": "giorno",
"WEEK": "settimana",
"MONTH": "mese"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Lista contatti",
"IMPORT_EXPORT": "Importa o esporta contatti",
"IMPORT": "Importa",
"EXPORT": "Esporta",
"ADD": "Aggiungi/modifica contatto",
"SEND": "Invia",
"SEND_FROM": "Invia da",
"SEND_TO": "A",
"OPEN_ADD_WALLET": "Apri/Aggiungi portafoglio",
"COPY": "- Copia",
"TABLE": {
"NAME": "Nome",
"ALIAS": "Alias",
"ADDRESS": "Indirizzo",
"NOTES": "Note",
"EMPTY": "La lista dei contatti è vuota"
},
"FORM": {
"NAME": "Nome",
"ADDRESS": "Indirizzo",
"NOTES": "Note"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Il nome è richiesto",
"NAME_DUBLICATED": "Il nome è un duplicato",
"ADDRESS_REQUIRED": "Indirizzo è richiesto",
"ADDRESS_NOT_VALID": "Indirizzo non valido",
"SET_MASTER_PASSWORD": "Imposta password principale",
"ADDRESS_DUBLICATED": "Indirizzo è un duplicato",
"MAX_LENGTH": "Lunghezza massima delle note raggiunta",
"NAME_LENGTH": "Il nome deve essere lungo da 4 a 25 caratteri"
},
"BUTTON": {
"SEND": "Invia",
"EDIT": "Modifica",
"DELETE": "Elimina",
"ADD": "Aggiungi contatto",
"ADD_EDIT": "Aggiungi/Salva",
"GO_TO_WALLET": "Vai al portafoglio",
"IMPORT_EXPORT": "Importa/esporta"
},
"SUCCESS_SENT": "Contatto aggiunto",
"SUCCESS_SAVE": "Contatto modificato",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Si è verificato un errore durante la lettura del file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Non abbastanza denaro",
"NOT_ENOUGH_MONEY": "Fondi insufficienti nell'account",
"CORE_BUSY": "Errore interno: il core è occupato",
"DAEMON_BUSY": "Errore interno: daemon è occupato",
"NO_MONEY_REMOVE_OFFER": "Non c'è alcun costo per eliminare un'offerta ma, per proteggere la rete dalle molte transazioni, devi avere almeno {{fee}} {{currency}} nel tuo portafoglio",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Il numero di Mix-in è troppo grande per lo stato corrente della blockchain. Non ci sono abbastanza output non spesi per mescolare con",
"TRANSACTION_IS_TO_BIG": "La transazione supera il limite di rete, invia l'importo richiesto con transazioni multiple",
"TRANSFER_ATTEMPT": "Non c'è connessione alla rete Zano",
"ACCESS_DENIED": "Accesso negato",
"TRANSACTION_ERROR": "Errore. Transazione non completata.",
"BAD_ARG": "Argomento non valido",
"WALLET_WRONG_ID": "ID portafoglio non valido",
"WRONG_PASSWORD": "Password non valida",
"FILE_RESTORED": "Il file del portafoglio è stato danneggiato. Abbiamo recuperato le chiavi e il portafoglio dalla blockchain",
"FILE_NOT_FOUND": "File non trovato",
"FILE_EXIST": "Esiste già un file con questo nome. Inserisci un altro nome per salvare il file",
"FILE_NOT_SAVED": "Non puoi salvare un file di portafoglio in questa cartella. Scegli un'altra cartella.",
"TX_TYPE_NORMAL": "Errore. Il pagamento dal portafoglio",
"TX_TYPE_NORMAL_TO": "a",
"TX_TYPE_NORMAL_END": "non è stato completato.",
"TX_TYPE_NEW_ALIAS": "Errore. Impossibile registrare l'alias in sicurezza",
"TX_TYPE_NEW_ALIAS_END": "Per favore riprova.",
"TX_TYPE_UPDATE_ALIAS": "Errore. Impossibile cambiare il commento all'alias in sicurezza",
"TX_TYPE_COIN_BASE": "Errore. Il pagamento non è stato completato."
},
"CONTEXT_MENU": {
"COPY": "copia",
"PASTE": "incolla",
"SELECT": "seleziona tutto"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Esci",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Pagamento in arrivo (non confermato)",
"INCOME_TRANSFER_CONFIRMED": "Pagamento ricevuto",
"MINED": "Minato",
"LOCKED": "Bloccato",
"IS_MINIMIZE": "L'applicazione Zano è minimizzata nella barra di sistema",
"RESTORE": "Puoi recuperarlo cliccando o utilizzando il menu contestuale",
"TRAY_MENU_SHOW": "Ridimensiona",
"TRAY_MENU_MINIMIZE": "Minimizza"
}
}

View file

@ -1,588 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Configurar password mestra",
"SETUP_CONFIRM_PASS": "Confirmar a password",
"MASTER_PASS": "Password mestra",
"BUTTON_NEXT": "Próximo",
"BUTTON_SKIP": "Saltar",
"BUTTON_RESET": "Redefinir",
"INCORRECT_PASSWORD": "Password inválida",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password é obrigatória",
"CONFIRM_REQUIRED": "Confirmação é obrigatória",
"MISMATCH": "Não correspondem"
}
},
"COMMON": {
"BACK": "Voltar"
},
"BREADCRUMBS": {
"ADD_WALLET": "Adicionar carteira",
"CREATE_WALLET": "Criar nova carteira",
"SAVE_PHRASE": "Guardar a sua frase semente",
"OPEN_WALLET": "Abrir carteira existente",
"RESTORE_WALLET": "Restaurar de cópia",
"WALLET_DETAILS": "Detalhes da carteira",
"ASSIGN_ALIAS": "Atribuir alias",
"EDIT_ALIAS": "Editar alias",
"TRANSFER_ALIAS": "Transferir alias",
"CONTRACTS": "Contratos",
"NEW_PURCHASE": "Nova compra",
"OLD_PURCHASE": "Compra"
},
"SIDEBAR": {
"TITLE": "Carteiras",
"ADD_NEW": "+ Adicionar",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "Novas ofertas/Mensagens",
"SYNCING": "A sincronizar carteira"
},
"CONTACTS": "Contactos",
"SETTINGS": "Definições",
"LOG_OUT": "Terminar sessão",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "Erro de sistema",
"COMPLETE": "Conclusão",
"SYNCING": "Syncing block",
"LOADING": "A carregar informação da blockchain"
},
"UPDATE": {
"STANDARD": "Atualização disponível",
"STANDARD_TOOLTIP": "Obter nova atualização. É recomendado atualizar!",
"IMPORTANT": "Atualização disponível",
"IMPORTANT_HINT": "Atualização importante!",
"IMPORTANT_TOOLTIP": "Obter nova atualização. É recomendado atualizar!",
"CRITICAL": "Atualização disponível",
"CRITICAL_HINT": "Atualização crítica!",
"CRITICAL_TOOLTIP": "Atualização crítica disponível. É fortemente recomendado atualizar!",
"TIME": "Tempo de sistema difere da rede",
"TIME_TOOLTIP": "Tempo de sistema errado! Verifique e repare o seu tempo de sistema."
}
},
"MAIN": {
"TITLE": "Crie ou abra a carteira para começar a usar Zano",
"BUTTON_NEW_WALLET": "Criar nova carteira",
"BUTTON_OPEN_WALLET": "Abrir carteira existente",
"BUTTON_RESTORE_BACKUP": "Restaurar de cópia",
"HELP": "Como criar carteira?",
"CHOOSE_PATH": "Por favor escolha um caminho"
},
"CREATE_WALLET": {
"NAME": "Nome da carteira",
"PASS": "Definir password da carteira",
"CONFIRM": "Confirmar password da carteira",
"BUTTON_SELECT": "Escolher localização da carteira",
"BUTTON_CREATE": "Criar carteira",
"TITLE_SAVE": "Gravar o ficheiro de carteira.",
"ERROR_CANNOT_SAVE_TOP": "Ficheiros de carteira existentes não podem ser substituídos ou sobrescritos",
"ERROR_CANNOT_SAVE_SYSTEM": "Ficheiros da carteira não podem ser guardados na partição do sistema operativo",
"FORM_ERRORS": {
"NAME_REQUIRED": "Nome é necessário",
"NAME_DUPLICATE": "Nome é duplicado",
"MAX_LENGTH": "Atingido comprimento máximo do nome",
"CONFIRM_NOT_MATCH": "Password de confirmação não corresponde"
}
},
"OPEN_WALLET": {
"NAME": "Nome da carteira",
"PASS": "Password da carteira",
"BUTTON": "Abrir carteira",
"WITH_ADDRESS_ALREADY_OPEN": "Uma carteira com este endereço já está aberta",
"FILE_NOT_FOUND1": "Ficheiro de carteira não encontrado",
"FILE_NOT_FOUND2": "<br/> <br/> Pode ter sido renomeado ou movido. <br/> Para abri-lo, use o botão \"Abrir carteira\".",
"FORM_ERRORS": {
"NAME_REQUIRED": "Nome é necessário",
"NAME_DUPLICATE": "Nome é duplicado",
"MAX_LENGTH": "Atingido comprimento máximo do nome"
},
"MODAL": {
"TITLE": "Escrever password da carteira",
"LABEL": "Password para esta carteira",
"OPEN": "Abrir carteira",
"SKIP": "Saltar",
"NOT_FOUND": "Não encontrado"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Nome da carteira",
"LABEL_PHRASE_KEY": "Frase semente / chave privada",
"PASS": "Password da carteira",
"CONFIRM": "Confirmar password da carteira",
"BUTTON_SELECT": "Escolher localização da carteira",
"BUTTON_CREATE": "Criar carteira",
"NOT_CORRECT_FILE_OR_PASSWORD": "Ficheiro de carteira inválido ou senha não corresponde",
"CHOOSE_PATH": "Por favor escolha um caminho",
"FORM_ERRORS": {
"NAME_REQUIRED": "Nome é necessário",
"NAME_DUPLICATE": "Nome é duplicado",
"MAX_LENGTH": "Atingido comprimento máximo do nome",
"CONFIRM_NOT_MATCH": "Password de confirmação não corresponde",
"KEY_REQUIRED": "Chave é necessária",
"KEY_NOT_VALID": "Chave inválida"
}
},
"SEED_PHRASE": {
"TITLE": "Certifique-se de manter sua frase-semente num lugar seguro. Se see esquecer da sua frase-semente, não poderá recuperar a sua carteira.",
"BUTTON_CREATE_ACCOUNT": "Criar carteira",
"BUTTON_COPY": "Copiar"
},
"PROGRESS": {
"ADD_WALLET": "Adicionar carteira",
"SELECT_LOCATION": "Escolher localização da carteira",
"CREATE_WALLET": "Criar nova carteira",
"RESTORE_WALLET": "Restaurar de cópia"
},
"SETTINGS": {
"TITLE": "Definições",
"DARK_THEME": "Tema escuro",
"WHITE_THEME": "Tema branco",
"GRAY_THEME": "Tema cinzento",
"APP_LOCK": {
"TITLE": "Bloquear aplicação após:",
"TIME1": "5 minutos",
"TIME2": "15 minutos",
"TIME3": "1 hora",
"TIME4": "Nunca"
},
"SCALE": {
"75": "75% escala",
"100": "100% escala",
"125": "125% escala",
"150": "150% escala"
},
"MASTER_PASSWORD": {
"TITLE": "Atualizar password mestra",
"OLD": "Antiga password",
"NEW": "Nova password",
"CONFIRM": "Confirmação de nova password",
"BUTTON": "Guardar"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password é necessária",
"PASS_NOT_MATCH": "Antiga password não corresponde",
"CONFIRM_NOT_MATCH": "Password de confirmação não corresponde"
},
"LAST_BUILD": "Versão atual: {{value}}",
"APP_LOG_TITLE": "Nível de registro:"
},
"WALLET": {
"REGISTER_ALIAS": "Registar um alias",
"DETAILS": "Detalhes",
"LOCK": "Bloquear",
"AVAILABLE_BALANCE": "Disponível <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Bloqueado <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "O que isso quer dizer?",
"TABS": {
"SEND": "Enviar",
"RECEIVE": "Receber",
"HISTORY": "Histórico",
"CONTRACTS": "Contratos",
"MESSAGES": "Mensagens",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Nome da carteira",
"LABEL_FILE_LOCATION": "Localização do ficheiro de carteira",
"LABEL_SEED_PHRASE": "Frase semente",
"SEED_PHRASE_HINT": "Clique para revelar a frase semente",
"BUTTON_SAVE": "Guardar",
"BUTTON_REMOVE": "Fechar carteira",
"FORM_ERRORS": {
"NAME_REQUIRED": "Nome é necessário",
"NAME_DUPLICATE": "Nome é duplicado",
"MAX_LENGTH": "Atingido comprimento máximo do nome"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Introduzir alias",
"TOOLTIP": "Um alias é uma forma abreviada da sua conta. Um alias só pode incluir letras, números e caracteres latinos “.” e “-”. Deve começar com “@”."
},
"COMMENT": {
"LABEL": "Comentar",
"PLACEHOLDER": "",
"TOOLTIP": "O comentário ficará visível para quem quiser efetuar um pagamento para o seu alias. Pode fornecer detalhes sobre sua empresa, contatos ou incluir qualquer texto. Os comentários podem ser editados posteriormente."
},
"COST": "Taxa de Alias {{value}} {{currency}}",
"BUTTON_ASSIGN": "Atribuir",
"FORM_ERRORS": {
"NAME_REQUIRED": "Nome é necessário",
"NAME_WRONG": "Nome inválido: símbolos permitidos \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "O alias deve ter entre 6 e 25 caracteres",
"NAME_EXISTS": "Nome de alias já existe",
"NO_MONEY": "Não tem fundos suficientes para atribuir esse alias",
"MAX_LENGTH": "Atingido comprimento máximo do comentário"
},
"ONE_ALIAS": "Pode criar apenas um alias por carteira",
"REQUEST_ADD_REG": "O alias será atribuído em 10 minutos"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Introduzir alias"
},
"COMMENT": {
"LABEL": "Comentário",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "Não tem fundos suficientes para comentar esse alias",
"MAX_LENGTH": "Atingido comprimento máximo do comentário"
},
"COST": "Taxa {{value}} {{currency}}",
"BUTTON_EDIT": "Editar"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Introduzir alias"
},
"COMMENT": {
"LABEL": "Comentar",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transferir para",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "Não existe nenhuma carteira com esta conta",
"ALIAS_EXISTS": "Esta conta já tem um alias",
"NO_MONEY": "Não tem fundos suficientes para transferir esse alias"
},
"COST": "Taxa de Transferência {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transferir",
"BUTTON_CANCEL": "Cancelar",
"REQUEST_SEND_REG": "O alias será transferido em 10 minutos"
},
"SEND": {
"ADDRESS": "Endereço",
"AMOUNT": "Montante",
"COMMENT": "Comentar",
"DETAILS": "Detalhes adicionais",
"MIXIN": "Mixagem",
"FEE": "Taxa",
"HIDE": "Ocultar o seu endereço de carteira do recipiente",
"BUTTON": "Enviar",
"SUCCESS_SENT": "Transação enviada",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Endereço é necessário",
"ADDRESS_NOT_VALID": "Endereço inválido",
"ALIAS_NOT_VALID": "Alias inválido",
"AMOUNT_REQUIRED": "Montante é necessário",
"AMOUNT_ZERO": "Montante é zero",
"FEE_REQUIRED": "Taxa é necessária",
"FEE_MINIMUM": "Taxa mínima: {{fee}}",
"MAX_LENGTH": "Atingido comprimento máximo do comentário"
}
},
"HISTORY": {
"STATUS": "Estado",
"STATUS_TOOLTIP": "Confirmações {{current}}/{{total}}",
"LOCK_TOOLTIP": "Bloqueado até {{date}}",
"SEND": "Enviado",
"RECEIVED": "Recebido",
"DATE": "Data",
"AMOUNT": "Montante",
"FEE": "Taxa",
"ADDRESS": "Endereço",
"DETAILS": {
"PAYMENT_ID": "ID de Pagamento",
"ID": "ID da transação",
"SIZE": "Tamanho da transação",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Altura",
"CONFIRMATION": "Confirmação",
"INPUTS": "Entradas",
"OUTPUTS": "Saídas",
"COMMENT": "Comentário"
},
"TYPE_MESSAGES": {
"HIDDEN": "escondido",
"UNDEFINED": "Indefinido",
"COMPLETE_BUYER": "Contrato completado",
"COMPLETE_SELLER": "Contrato completado",
"CREATE_ALIAS": "Taxa para atribuição de alias",
"UPDATE_ALIAS": "Taxa para edição de alias",
"POW_REWARD": "Recompensa de POW",
"POS_REWARD": "Recompensa de POS",
"CREATE_CONTRACT": "Proposta de contrato",
"PLEDGE_CONTRACT": "Depósito de contrato",
"NULLIFY_CONTRACT": "Queimar depósitos",
"PROPOSAL_CANCEL_CONTRACT": "Cancelar pedido",
"CANCEL_CONTRACT": "Cancelar e retornar depósitos"
}
},
"CONTRACTS": {
"EMPTY": "Sem contratos ativos",
"CONTRACTS": "Contratos",
"PURCHASE": "Compra",
"SELL": "Venda",
"DATE": "Data",
"AMOUNT": "Montante",
"STATUS": "Estado",
"COMMENTS": "Comentários",
"PURCHASE_BUTTON": "Nova Compra",
"LISTING_BUTTON": "Criar lista",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Menos de uma hora para responder",
"REMAINING_ONE": "Falta {{time}} hora\n",
"REMAINING_MANY": "Falta {{time}} horas\n",
"REMAINING_MANY_ALT": "Faltam {{time}} horas",
"REMAINING_ONE_RESPONSE": "Falta {{time}} hora",
"REMAINING_MANY_RESPONSE": "Faltam {{time}} horas\n",
"REMAINING_MANY_ALT_RESPONSE": "Faltam {{time}} horas\n",
"REMAINING_ONE_WAITING": "À espera à {{time}} hora",
"REMAINING_MANY_WAITING": "À espera à {{time}} horas",
"REMAINING_MANY_ALT_WAITING": "À espera à {{time}} horas"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "Nova proposta de contrato",
"IGNORED": "Ignorou uma proposta de contrato",
"ACCEPTED": "Contrato iniciado",
"WAIT": "À espera de confirmação de contrato",
"WAITING_BUYER": "À espera de entrega",
"COMPLETED": "Contrato completado",
"NOT_RECEIVED": "Entrega falhada",
"NULLIFIED": "Todos os depósitos queimados",
"PROPOSAL_CANCEL": "Nova proposta para cancelar contrato e retornar depósitos",
"BEING_CANCELLED": "Cancelamento em progresso",
"CANCELLED": "Contrato cancelado",
"IGNORED_CANCEL": "Ignorou uma proposta de cancelamento",
"EXPIRED": "Proposta de contrato expirou"
},
"BUYER": {
"WAITING": "À espera de resposta",
"IGNORED": "O Vendedor ignorou a sua proposta de contrato",
"ACCEPTED": "O Vendedor aceitou a sua proposta de contrato",
"WAIT": "À espera de confirmação de depósitos",
"WAITING_SELLER": "À espera de entrega",
"COMPLETED": "Contrato completado",
"NOT_RECEIVED": "Entrega falhada",
"NULLIFIED": "Todos os depósitos queimados",
"WAITING_CANCEL": "À espera de cancelamento de contrato",
"BEING_CANCELLED": "Cancelamento em progresso",
"CANCELLED": "Contrato cancelado",
"IGNORED_CANCEL": "O vendedor ignorou a sua proposta para cancelar o contrato",
"EXPIRED": "A proposta de contrato expirou"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Descrição",
"SELLER": "Vendedor",
"AMOUNT": "Montante",
"YOUR_DEPOSIT": "O seu depósito",
"SELLER_DEPOSIT": "Depósito do vendedor",
"BUYER_DEPOSIT": "Depósito do comprador",
"SAME_AMOUNT": "Mesmo montante",
"COMMENT": "Comentário",
"DETAILS": "Detalhes adicionais",
"SEND_BUTTON": "Enviar",
"FORM_ERRORS": {
"DESC_REQUIRED": "Descrição necessária",
"DESC_MAXIMUM": "Atingido comprimento máximo do campo",
"SELLER_REQUIRED": "Endereço necessário",
"SELLER_NOT_VALID": "Endereço inválido",
"ALIAS_NOT_VALID": "Alias inválido",
"AMOUNT_REQUIRED": "Montante necessário",
"AMOUNT_ZERO": "Montante não pode ser zero",
"YOUR_DEPOSIT_REQUIRED": "Depósito necessário",
"SELLER_DEPOSIT_REQUIRED": "Necessário depósito de vendedor",
"SELLER_SAME": "Usar conta separada",
"COMMENT_MAXIMUM": "Atingido comprimento máximo do campo"
},
"PROGRESS_NEW": "Nova compra",
"PROGRESS_WAIT": "À espera de resposta",
"PROGRESS_RECEIVE": "Resposta recebida",
"PROGRESS_COMPLETE": "Completado",
"FEE": "Taxa",
"PAYMENT": "ID de Pagamento",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "Nova compra",
"WAITING_SELLER": "À espera de resposta",
"WAITING_BUYER": "Proposta de contrato recebida",
"WAITING_CONFIRMATION": "À espera de confirmação de depósitos",
"WAITING_DELIVERY": "À espera de entrega",
"COMPLETED": "Contrato completado",
"IGNORED_BUYER": "Proposta de contrato ignorada",
"IGNORED_SELLER": "O vendedor ignorou a sua proposta de contrato",
"PROPOSAL_CANCEL_SELLER": "Pedido de cancelamento enviado",
"PROPOSAL_CANCEL_BUYER": "Pedido de cancelamento recebido",
"BEING_CANCELLED": "Cancelamento em progresso",
"IGNORED_CANCEL_SELLER": "O vendedor ignorou a sua proposta para cancelar o contrato",
"IGNORED_CANCEL_BUYER": "Proposta de cancelamento de contrato ignorada",
"CANCELLED": "Contrato cancelado",
"EXPIRED": "Proposta de contrato expirada",
"NOT_RECEIVED": "Entrega falhada",
"NULLIFIED": "Todos os depósitos queimados"
},
"ACCEPT_STATE_WAIT_BIG": "Contrato iniciado",
"IGNORED_ACCEPT": "Proposta de contrato ignorada",
"BURN_PROPOSAL": "Depósitos queimados",
"SUCCESS_FINISH_PROPOSAL": "Contrato completado",
"SEND_CANCEL_PROPOSAL": "Pedido de cancelamento enviado",
"IGNORED_CANCEL": "Proposta de cancelamento de contrato ignorada",
"DEALS_CANCELED_WAIT": "Cancelamento em progresso",
"WAITING_TIME": "Tempo de resposta",
"NEED_MONEY": "Fundos insuficientes",
"BUTTON_MAKE_PLEDGE": "Aceitar e fazer depósito",
"BUTTON_IGNORE": "Ignorar e ocultar oferta",
"BUTTON_NULLIFY": "Terminar e queimar depósitos",
"BUTTON_RECEIVED": "Completar e libertar depósitos",
"BUTTON_CANCEL_BUYER": "Cancelar e retornar depósitos",
"BUTTON_NOT_CANCEL": "Ignorar pedido",
"BUTTON_CANCEL_SELLER": "Confirmar e retornar depósitos",
"HOUR": "hora",
"HOURS": "horas",
"CANCEL": "Cancelar",
"NULLIFY_QUESTION": "Tem a certeza que quer queimar ambos os depósitos?",
"BUTTON_NULLIFY_SHORT": "Queimar",
"WAITING_TIME_QUESTION": "Tem a certeza que quer cancelar o contrato?"
},
"MESSAGES": {
"ADDRESS": "Endereço",
"MESSAGE": "Mensagem",
"SEND_PLACEHOLDER": "Escreva uma mensagem...",
"SEND_BUTTON": "Enviar"
},
"MODALS": {
"ERROR": "Erro",
"SUCCESS": "Sucesso",
"INFO": "Informação",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Enviar",
"BUTTON_CANCEL": "Cancelar",
"TITLE": "Confirmar transação",
"MESSAGE": {
"SEND": "Enviar",
"FROM": "De",
"TO": "Para",
"COMMENT": "Comentário"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pendente",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Período de tempo:",
"PERIOD": {
"WEEK1": "1 semana",
"WEEK2": "2 semanas",
"MONTH1": "1 mês",
"MONTH3": "3 meses",
"MONTH6": "6 meses",
"YEAR": "1 ano",
"ALL": "Todo"
},
"TITLE_GROUP": "Grupo:",
"GROUP": {
"DAY": "dia",
"WEEK": "semana",
"MONTH": "mês"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Lista de Contactos",
"IMPORT_EXPORT": "Importar ou exportar contactos",
"IMPORT": "Importar",
"EXPORT": "Exportar",
"ADD": "Adicionar/editar contacto",
"SEND": "Enviar",
"SEND_FROM": "Enviar de",
"SEND_TO": "Para",
"OPEN_ADD_WALLET": "Abrir/Adicionar carteira",
"COPY": "- Copiar",
"TABLE": {
"NAME": "Nome",
"ALIAS": "Alias",
"ADDRESS": "Endereço",
"NOTES": "Notas",
"EMPTY": "Lista de contactos está vazia"
},
"FORM": {
"NAME": "Nome",
"ADDRESS": "Endereço",
"NOTES": "Notas"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Nome é necessário",
"NAME_DUBLICATED": "Nome está duplicado",
"ADDRESS_REQUIRED": "Endereço é necessário",
"ADDRESS_NOT_VALID": "Endereço inválido",
"SET_MASTER_PASSWORD": "Definir password mestra",
"ADDRESS_DUBLICATED": "Endereço está duplicado",
"MAX_LENGTH": "Atingido comprimento máximo das Notas",
"NAME_LENGTH": "O alias deve ter entre 4 e 25 caracteres"
},
"BUTTON": {
"SEND": "Enviar",
"EDIT": "Editar",
"DELETE": "Eliminar",
"ADD": "Adicionar contacto",
"ADD_EDIT": "Adicionar/Guardar",
"GO_TO_WALLET": "Ir para carteira",
"IMPORT_EXPORT": "Importar/exportar"
},
"SUCCESS_SENT": "Contacto adicionado",
"SUCCESS_SAVE": "Contacto editado",
"SUCCESS_IMPORT": "Contactos importados",
"SUCCESS_EXPORT": "Contactos exportados",
"ERROR_IMPORT": "Erro ocorrido na leitura de ficheiro!",
"ERROR_TYPE_FILE": "Por favor importe um ficheiro .csv válido",
"ERROR_EXPORT": "Tipo de ficheiro inválido. Guarde ficheiro como .csv",
"ERROR_EMPTY_LIST": "Lista de contactos está vazia",
"ERROR_IMPORT_EMPTY": "Ficheiro está vazio"
},
"ERRORS": {
"NO_MONEY": "Sem dinheiro suficiente",
"NOT_ENOUGH_MONEY": "Fundos insuficientes na conta",
"CORE_BUSY": "Erro interno: core está ocupado",
"DAEMON_BUSY": "Erro interno: daemon está ocupado",
"NO_MONEY_REMOVE_OFFER": "Não há taxa para excluir uma oferta, mas para proteger a rede contra transações de inundação, é preciso ter pelo menos {{fee}} {{currency}} na sua carteira",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "O número de mixagem é muito grande para o estado atual da blockchain. Não há saídas não gastas suficientes para misturar",
"TRANSACTION_IS_TO_BIG": "Transação excede o limite de rede, envie quantidade necessária com várias transações",
"TRANSFER_ATTEMPT": "Sem conexão à rede Zano",
"ACCESS_DENIED": "Acesso negado",
"TRANSACTION_ERROR": "Erro. Transação não completada.",
"BAD_ARG": "Argumento inválido",
"WALLET_WRONG_ID": "ID de carteira inválido",
"WRONG_PASSWORD": "Password inválida",
"FILE_RESTORED": "O ficheiro de carteira estava corrompido. Recuperámos as chaves e a carteira a partir da blockchain",
"FILE_NOT_FOUND": "Ficheiro não encontrado",
"FILE_EXIST": "Já existe um ficheiro com esse nome. Insira outro nome para gravar o ficheiro sob",
"FILE_NOT_SAVED": "Não pode gravar um ficheiro de carteira nesta pasta. Por favor escolha outra pasta.",
"TX_TYPE_NORMAL": "Erro. O pagamento da carteira",
"TX_TYPE_NORMAL_TO": "para",
"TX_TYPE_NORMAL_END": "não foi completado.",
"TX_TYPE_NEW_ALIAS": "Erro. Falha ao registar alias para seguro",
"TX_TYPE_NEW_ALIAS_END": "Por favor tente novamente.",
"TX_TYPE_UPDATE_ALIAS": "Erro. Falha ao mudar comentário a um alias seguro",
"TX_TYPE_COIN_BASE": "Erro. Pagamento não foi completado."
},
"CONTEXT_MENU": {
"COPY": "copiar",
"PASTE": "colar",
"SELECT": "selecionar tudo"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Sair",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Pagamento recebido (não confirmado)",
"INCOME_TRANSFER_CONFIRMED": "Pagamento recebido",
"MINED": "Minerado",
"LOCKED": "Bloqueado",
"IS_MINIMIZE": "Aplicação Zano foi minimizada na bandeja do sistema",
"RESTORE": "Pode recuperá-lo ao clicar ou usar o menu de contexto",
"TRAY_MENU_SHOW": "Redimensionar",
"TRAY_MENU_MINIMIZE": "Minimizar"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,593 +0,0 @@
{
"LOGIN": {
"SETUP_MASTER_PASS": "Setup master password",
"SETUP_CONFIRM_PASS": "Confirm the password",
"MASTER_PASS": "Master password",
"BUTTON_NEXT": "Next",
"BUTTON_SKIP": "Skip",
"BUTTON_RESET": "Reset",
"INCORRECT_PASSWORD": "Invalid password",
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"CONFIRM_REQUIRED": "Confirmation is required",
"MISMATCH": "Mismatch"
}
},
"COMMON": {
"BACK": "Go back"
},
"BREADCRUMBS": {
"ADD_WALLET": "Add wallet",
"CREATE_WALLET": "Create new wallet",
"SAVE_PHRASE": "Save your seed phrase",
"OPEN_WALLET": "Open existing wallet",
"RESTORE_WALLET": "Restore from backup",
"WALLET_DETAILS": "Wallet details",
"ASSIGN_ALIAS": "Assign alias",
"EDIT_ALIAS": "Edit alias",
"TRANSFER_ALIAS": "Transfer alias",
"CONTRACTS": "Contracts",
"NEW_PURCHASE": "New purchase",
"OLD_PURCHASE": "Purchase"
},
"SIDEBAR": {
"TITLE": "Wallets",
"ADD_NEW": "+ Add",
"ACCOUNT": {
"STAKING": "Staking",
"MESSAGES": "New offers/Messages",
"SYNCING": "Syncing wallet"
},
"CONTACTS": "Contacts",
"SETTINGS": "Settings",
"LOG_OUT": "Log out",
"SYNCHRONIZATION": {
"OFFLINE": "Offline",
"ONLINE": "Online",
"ERROR": "System error",
"COMPLETE": "Completion",
"SYNCING": "Syncing blockchain",
"LOADING": "Loading blockchain data"
},
"UPDATE": {
"STANDARD": "Update available",
"STANDARD_TOOLTIP": "<span class=\"standard-update\">Get new update.</span><br><span>Update is recommended!</span>",
"IMPORTANT": "Update available",
"IMPORTANT_HINT": "Important update!",
"IMPORTANT_TOOLTIP": "<span class=\"important-update\">Get new update.</span><br><span>Important update!</span>",
"CRITICAL": "Update available",
"CRITICAL_HINT": "Critical update!",
"CRITICAL_TOOLTIP": "<span class=\"critical-update\">Critical update available.</span><i class=\"icon\"></i><span>Update strongly recommended!</span>",
"TIME": "System time differs from network",
"TIME_TOOLTIP": "<span class=\"wrong-time\">Wrong system time!</span><br><span>Check and repair your system time.</span>"
}
},
"MAIN": {
"TITLE": "Create or open the wallet to start using Zano",
"BUTTON_NEW_WALLET": "Create new wallet",
"BUTTON_OPEN_WALLET": "Open existing wallet",
"BUTTON_RESTORE_BACKUP": "Restore from backup",
"HELP": "How to create wallet?",
"CHOOSE_PATH": "Please choose a path"
},
"CREATE_WALLET": {
"NAME": "Wallet name",
"PASS": "Set wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"TITLE_SAVE": "Save the wallet file.",
"ERROR_CANNOT_SAVE_TOP": "Existing wallet files cannot be replaced or overwritten",
"ERROR_CANNOT_SAVE_SYSTEM": "Wallet files cannot be saved to the OS partition",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match"
}
},
"OPEN_WALLET": {
"NAME": "Wallet name",
"PASS": "Wallet password",
"BUTTON": "Open wallet",
"WITH_ADDRESS_ALREADY_OPEN": "A wallet with this address is already open",
"FILE_NOT_FOUND1": "Wallet file not found",
"FILE_NOT_FOUND2": "<br/><br/> It might have been renamed or moved. <br/> To open it, use the \"Open wallet\" button.",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
},
"MODAL": {
"TITLE": "Type wallet password",
"LABEL": "Password to this wallet",
"OPEN": "Open wallet",
"SKIP": "Skip",
"NOT_FOUND": "Not found"
}
},
"RESTORE_WALLET": {
"LABEL_NAME": "Wallet name",
"LABEL_PHRASE_KEY": "Seed phrase / tracking seed",
"PASS": "Wallet password",
"CONFIRM": "Confirm wallet password",
"BUTTON_SELECT": "Select wallet location",
"BUTTON_CREATE": "Create wallet",
"NOT_CORRECT_FILE_OR_PASSWORD": "Invalid wallet file or password does not match",
"CHOOSE_PATH": "Please choose a path",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached",
"CONFIRM_NOT_MATCH": "Confirm password not match",
"KEY_REQUIRED": "Key is required",
"KEY_NOT_VALID": "Key not valid"
}
},
"SEED_PHRASE": {
"TITLE": "Make sure to keep your seed phrase in a safe place. If you forget your seed phrase you will not be able to recover your wallet.",
"BUTTON_CREATE_ACCOUNT": "Create wallet",
"BUTTON_COPY": "Copy"
},
"PROGRESS": {
"ADD_WALLET": "Add wallet",
"SELECT_LOCATION": "Select wallet location",
"CREATE_WALLET": "Create new wallet",
"RESTORE_WALLET": "Restore from backup"
},
"SETTINGS": {
"TITLE": "Settings",
"DARK_THEME": "Dark theme",
"WHITE_THEME": "White theme",
"GRAY_THEME": "Grey theme",
"APP_LOCK": {
"TITLE": "Lock app after:",
"TIME1": "5 min",
"TIME2": "15 min",
"TIME3": "1 hour",
"TIME4": "Never"
},
"SCALE": {
"75": "75% scale",
"100": "100% scale",
"125": "125% scale",
"150": "150% scale"
},
"MASTER_PASSWORD": {
"TITLE": "Update master password",
"OLD": "Old password",
"NEW": "New password",
"CONFIRM": "New password confirmation",
"BUTTON": "Save"
},
"FORM_ERRORS": {
"PASS_REQUIRED": "Password is required",
"PASS_NOT_MATCH": "Old password not match",
"CONFIRM_NOT_MATCH": "Confirm password not match"
},
"LAST_BUILD": "Current build: {{value}}",
"APP_LOG_TITLE": "Log level:"
},
"WALLET": {
"REGISTER_ALIAS": "Register an alias",
"DETAILS": "Details",
"LOCK": "Lock",
"AVAILABLE_BALANCE": "Available <b>{{available}} {{currency}}<b/>",
"LOCKED_BALANCE": "Locked <b>{{locked}} {{currency}}<b/>",
"LOCKED_BALANCE_LINK": "What does that mean?",
"TABS": {
"SEND": "Send",
"RECEIVE": "Receive",
"HISTORY": "History",
"CONTRACTS": "Contracts",
"MESSAGES": "Messages",
"STAKING": "Staking"
}
},
"WALLET_DETAILS": {
"LABEL_NAME": "Wallet name",
"LABEL_FILE_LOCATION": "Wallet file location",
"LABEL_SEED_PHRASE": "Seed phrase",
"SEED_PHRASE_HINT": "Click to reveal the seed phrase",
"BUTTON_SAVE": "Save",
"BUTTON_REMOVE": "Close wallet",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUPLICATE": "Name is duplicate",
"MAX_LENGTH": "Maximum name length reached"
}
},
"ASSIGN_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": " Enter alias",
"TOOLTIP": "An alias is a shortened form or your account. An alias can only include Latin letters, numbers and characters “.” and “-”. It must start with “@”."
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": "",
"TOOLTIP": "The comment will be visible to anyone who wants to make a payment to your alias. You can provide details about your business, contacts, or include any text. Comments can be edited later."
},
"COST": "Alias fee {{value}} {{currency}}",
"BUTTON_ASSIGN": "Assign",
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_WRONG": "Invalid name: allowed symbols \"0-9\", \"a-z\", \"-\", \".\"",
"NAME_LENGTH": "The alias must be 6-25 characters long",
"NAME_EXISTS": "Alias name already exists",
"NO_MONEY": "You do not have enough funds to assign this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"ONE_ALIAS": "You can create only one alias per wallet",
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
},
"EDIT_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"NO_MONEY": "You do not have enough funds to change the comment to this alias",
"MAX_LENGTH": "Maximum comment length reached"
},
"COST": "Fee {{value}} {{currency}}",
"BUTTON_EDIT": "Edit"
},
"TRANSFER_ALIAS": {
"NAME": {
"LABEL": "Alias",
"PLACEHOLDER": "@ Enter alias"
},
"COMMENT": {
"LABEL": "Comment",
"PLACEHOLDER": ""
},
"ADDRESS": {
"LABEL": "Transfer to",
"PLACEHOLDER": ""
},
"FORM_ERRORS": {
"WRONG_ADDRESS": "No wallet with this account exists",
"ALIAS_EXISTS": "This account already has an alias",
"NO_MONEY": "You do not have enough funds to transfer this alias"
},
"COST": "Transfer fee {{value}} {{currency}}",
"BUTTON_TRANSFER": "Transfer",
"BUTTON_CANCEL": "Cancel",
"REQUEST_SEND_REG": "The alias will be transferred within 10 minutes"
},
"SEND": {
"ADDRESS": "Address",
"AMOUNT": "Amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"MIXIN": "Mixin",
"FEE": "Fee",
"HIDE": "Hide your wallet address from recipient",
"BUTTON": "Send",
"SUCCESS_SENT": "Transaction sent",
"FORM_ERRORS": {
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"ALIAS_NOT_VALID": "Alias not valid",
"AMOUNT_REQUIRED": "Amount is required",
"AMOUNT_ZERO": "Amount is zero",
"FEE_REQUIRED": "Fee is required",
"FEE_MINIMUM": "Minimum fee: {{fee}}",
"MAX_LENGTH": "Maximum comment length reached"
}
},
"HISTORY": {
"STATUS": "Status",
"STATUS_TOOLTIP": "Confirmations {{current}}/{{total}}",
"LOCK_TOOLTIP": "Locked till {{date}}",
"SEND": "Sent",
"RECEIVED": "Received",
"DATE": "Date",
"AMOUNT": "Amount",
"FEE": "Fee",
"ADDRESS": "Address",
"DETAILS": {
"PAYMENT_ID": "Payment ID",
"ID": "Transaction ID",
"SIZE": "Transaction size",
"SIZE_VALUE": "{{value}} bytes",
"HEIGHT": "Height",
"CONFIRMATION": "Confirmation",
"INPUTS": "Inputs",
"OUTPUTS": "Outputs",
"COMMENT": "Comment"
},
"TYPE_MESSAGES": {
"HIDDEN": "hidden",
"UNDEFINED": "Undefined",
"COMPLETE_BUYER": "Contract completed",
"COMPLETE_SELLER": "Contract completed",
"CREATE_ALIAS": "Fee for assigning alias",
"UPDATE_ALIAS": "Fee for editing alias",
"POW_REWARD": "POW reward",
"POS_REWARD": "POS reward",
"CREATE_CONTRACT": "Contract proposal",
"PLEDGE_CONTRACT": "Contract deposit",
"NULLIFY_CONTRACT": "Burn deposits",
"PROPOSAL_CANCEL_CONTRACT": "Cancellation request",
"CANCEL_CONTRACT": "Cancel and return deposits"
}
},
"CONTRACTS": {
"EMPTY": "No active contracts",
"CONTRACTS": "Contracts",
"PURCHASE": "Purchase",
"SELL": "Sell",
"DATE": "Date",
"AMOUNT": "Amount",
"STATUS": "Status",
"COMMENTS": "Comments",
"PURCHASE_BUTTON": "New Purchase",
"LISTING_BUTTON": "Create listing",
"TIME_LEFT": {
"REMAINING_LESS_ONE": "Less than an hour to respond",
"REMAINING_ONE": "{{time}} hour remains",
"REMAINING_MANY": "{{time}} hours remain",
"REMAINING_MANY_ALT": "{{time}} hours remain",
"REMAINING_ONE_RESPONSE": "{{time}} hour remains",
"REMAINING_MANY_RESPONSE": "{{time}} hours remain",
"REMAINING_MANY_ALT_RESPONSE": "{{time}} hours remain",
"REMAINING_ONE_WAITING": "Waiting for {{time}} hour",
"REMAINING_MANY_WAITING": "Waiting for {{time}} hours",
"REMAINING_MANY_ALT_WAITING": "Waiting for {{time}} hours"
},
"STATUS_MESSAGES": {
"SELLER": {
"NEW_CONTRACT": "New contract proposal",
"IGNORED": "You ignored contract proposal",
"ACCEPTED": "Contract started",
"WAIT": "Waiting for contract confirmation",
"WAITING_BUYER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"PROPOSAL_CANCEL": "New proposal to cancel contract and return deposits",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "You ignored cancellation proposal",
"EXPIRED": "Contract proposal has expired"
},
"BUYER": {
"WAITING": "Waiting for response",
"IGNORED": "Seller ignored your contract proposal",
"ACCEPTED": "Seller accepted your contract proposal",
"WAIT": "Waiting for deposits confirmation",
"WAITING_SELLER": "Waiting for delivery",
"COMPLETED": "Contract completed",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned",
"WAITING_CANCEL": "Waiting for contract cancellation",
"BEING_CANCELLED": "Cancellation in progress",
"CANCELLED": "Contract canceled",
"IGNORED_CANCEL": "The seller ignored your proposal to cancel the contract",
"EXPIRED": "The contract proposal has expired"
}
}
},
"PURCHASE": {
"DESCRIPTION": "Description",
"SELLER": "Seller",
"AMOUNT": "Amount",
"YOUR_DEPOSIT": "Your deposit",
"SELLER_DEPOSIT": "Seller deposit",
"BUYER_DEPOSIT": "Buyer deposit",
"SAME_AMOUNT": "Same amount",
"COMMENT": "Comment",
"DETAILS": "Additional details",
"SEND_BUTTON": "Send",
"FORM_ERRORS": {
"DESC_REQUIRED": "Description required",
"DESC_MAXIMUM": "Maximum field length reached",
"SELLER_REQUIRED": "Address required",
"SELLER_NOT_VALID": "Invalid address",
"ALIAS_NOT_VALID": "Invalid alias",
"AMOUNT_REQUIRED": "Amount required",
"AMOUNT_ZERO": "Amount cannot be zero",
"YOUR_DEPOSIT_REQUIRED": "Deposit required",
"SELLER_DEPOSIT_REQUIRED": "Seller deposit required",
"SELLER_SAME": "Use separate account",
"COMMENT_MAXIMUM": "Maximum field length reached"
},
"PROGRESS_NEW": "New purchase",
"PROGRESS_WAIT": "Awaiting reply",
"PROGRESS_RECEIVE": "Reply received",
"PROGRESS_COMPLETE": "Completed",
"FEE": "Fee",
"PAYMENT": "Payment ID",
"STATUS_MESSAGES": {
"NEW_PURCHASE": "New purchase",
"WAITING_SELLER": "Waiting for response",
"WAITING_BUYER": "Contract proposal received",
"WAITING_CONFIRMATION": "Waiting for deposits confirmation",
"WAITING_DELIVERY": "Waiting for delivery",
"COMPLETED": "Contract completed",
"IGNORED_BUYER": "Contract proposal ignored",
"IGNORED_SELLER": "The seller ignored your contract proposal",
"PROPOSAL_CANCEL_SELLER": "Cancellation request sent",
"PROPOSAL_CANCEL_BUYER": "Cancellation request received",
"BEING_CANCELLED": "Cancellation in progress",
"IGNORED_CANCEL_SELLER": "The seller ignored your proposal to cancel the contract",
"IGNORED_CANCEL_BUYER": "Contract cancellation proposal ignored",
"CANCELLED": "Contract canceled",
"EXPIRED": "Contract proposal expired",
"NOT_RECEIVED": "Delivery failed",
"NULLIFIED": "All deposits burned"
},
"ACCEPT_STATE_WAIT_BIG": "Contract started",
"IGNORED_ACCEPT": "Contract proposal ignored",
"BURN_PROPOSAL": "Deposits burned",
"SUCCESS_FINISH_PROPOSAL": "Contract completed",
"SEND_CANCEL_PROPOSAL": "Cancellation request sent",
"IGNORED_CANCEL": "Contract cancellation proposal ignored",
"DEALS_CANCELED_WAIT": "Cancellation in progress",
"WAITING_TIME": "Response time",
"NEED_MONEY": "Insufficient funds",
"BUTTON_MAKE_PLEDGE": "Accept and make deposit",
"BUTTON_IGNORE": "Ignore and hide offer",
"BUTTON_NULLIFY": "Terminate and burn deposits",
"BUTTON_RECEIVED": "Complete and release deposits",
"BUTTON_CANCEL_BUYER": "Cancel and return deposits",
"BUTTON_NOT_CANCEL": "Ignore request",
"BUTTON_CANCEL_SELLER": "Confirm and return deposits",
"HOUR": "hour",
"HOURS": "hours",
"CANCEL": "Cancel",
"NULLIFY_QUESTION": "Are you sure you want to burn both deposits?",
"BUTTON_NULLIFY_SHORT": "Burn",
"WAITING_TIME_QUESTION": "Are you sure you want to cancel the contract?"
},
"MESSAGES": {
"ADDRESS": "Address",
"MESSAGE": "Message",
"SEND_PLACEHOLDER": "Type a message...",
"SEND_BUTTON": "Send"
},
"MODALS": {
"ERROR": "Error",
"SUCCESS": "Success",
"INFO": "Information",
"OK": "OK"
},
"CONFIRM": {
"BUTTON_CONFIRM": "Send",
"BUTTON_CANCEL": "Cancel",
"TITLE": "Confirm transaction",
"MESSAGE": {
"SEND": "Send",
"FROM": "From",
"TO": "To",
"COMMENT": "Comment"
}
},
"STAKING": {
"TITLE": "Staking",
"TITLE_PENDING": "Pending",
"TITLE_TOTAL": "Total",
"TITLE_PERIOD": "Time period:",
"PERIOD": {
"WEEK1": "1 week",
"WEEK2": "2 week",
"MONTH1": "1 month",
"MONTH3": "3 month",
"MONTH6": "6 month",
"YEAR": "1 year",
"ALL": "All"
},
"TITLE_GROUP": "Group:",
"GROUP": {
"DAY": "day",
"WEEK": "week",
"MONTH": "month"
},
"SWITCH": {
"ON": "ON",
"OFF": "OFF"
}
},
"CONTACTS": {
"TITLE": "Contact list",
"IMPORT_EXPORT": "Import or export contacts",
"IMPORT": "Import",
"EXPORT": "Export",
"ADD": "Add/edit contact",
"SEND": "Send",
"SEND_FROM": "Send from",
"SEND_TO": "To",
"OPEN_ADD_WALLET": "Open/Add wallet",
"COPY": "- Copy",
"TABLE": {
"NAME": "Name",
"ALIAS": "Alias",
"ADDRESS": "Address",
"NOTES": "Notes",
"EMPTY": "Contact list is empty"
},
"FORM": {
"NAME": "Name",
"ADDRESS": "Address",
"NOTES": "Notes"
},
"FORM_ERRORS": {
"NAME_REQUIRED": "Name is required",
"NAME_DUBLICATED": "Name is dublicated",
"ADDRESS_REQUIRED": "Address is required",
"ADDRESS_NOT_VALID": "Address not valid",
"SET_MASTER_PASSWORD": "Set master password",
"ADDRESS_DUBLICATED": "Address is dublicated",
"MAX_LENGTH": "Maximum notes length reached",
"NAME_LENGTH": "The name must be 4-25 characters long"
},
"BUTTON": {
"SEND": "Send",
"EDIT": "Edit",
"DELETE": "Delete",
"ADD": "Add contact",
"ADD_EDIT": "Add/Save",
"GO_TO_WALLET": "Go to wallet",
"IMPORT_EXPORT": "Import/export"
},
"SUCCESS_SENT": "Contact added",
"SUCCESS_SAVE": "Contact is edited",
"SUCCESS_IMPORT": "Contacts are imported",
"SUCCESS_EXPORT": "Contacts are exported",
"ERROR_IMPORT": "Error is occured while reading file!",
"ERROR_TYPE_FILE": "Please import valid .csv file",
"ERROR_EXPORT": "Invalid file type. Save file as .csv",
"ERROR_EMPTY_LIST": "Contact list is empty",
"ERROR_IMPORT_EMPTY": "File is empty"
},
"ERRORS": {
"NO_MONEY": "Not enough money",
"NOT_ENOUGH_MONEY": "Insufficient funds in account",
"CORE_BUSY": "Internal error: core is busy",
"DAEMON_BUSY": "Internal error: daemon is busy",
"NO_MONEY_REMOVE_OFFER": "There is no fee for deleting an offer, but in order to protect the network against flood transactions you need to have at least {{fee}} {{currency}} in your wallet",
"NOT_ENOUGH_OUTPUTS_TO_MIX": "Mix-in number is too big for current blockchain state. There are not enough unspent outputs to mix with",
"TRANSACTION_IS_TO_BIG": "Transaction exceeds network limit, send required amount with multiple transactions",
"TRANSFER_ATTEMPT": "There is no connection to Zano network",
"ACCESS_DENIED": "Access denied",
"TRANSACTION_ERROR": "Error. Transaction not completed.",
"BAD_ARG": "Invalid argument",
"WALLET_WRONG_ID": "Invalid wallet ID",
"WRONG_PASSWORD": "Invalid password",
"FILE_RESTORED": "The wallet file was corrupted. We have recovered the keys and the wallet from the blockchain",
"FILE_NOT_FOUND": "File not found",
"FILE_EXIST": "A file with that name already exists. Enter another name to save the file under",
"FILE_NOT_SAVED": "You cannot save a wallet file in this folder. Please choose another folder.",
"TX_TYPE_NORMAL": "Error. The payment from the wallet",
"TX_TYPE_NORMAL_TO": "to",
"TX_TYPE_NORMAL_END": "was not completed.",
"TX_TYPE_NEW_ALIAS": "Error. Failed to register alias to safe",
"TX_TYPE_NEW_ALIAS_END": "Please try again.",
"TX_TYPE_UPDATE_ALIAS": "Error. Failed to change comment to alias in safe",
"TX_TYPE_COIN_BASE": "Error. The payment was not completed."
},
"CONTEXT_MENU": {
"COPY": "copy",
"PASTE": "paste",
"SELECT": "select all"
},
"BACKEND_LOCALIZATION": {
"QUIT": "Quit",
"IS_RECEIVED": "",
"IS_CONFIRMED": "",
"INCOME_TRANSFER_UNCONFIRMED": "Incoming payment (not confirmed)",
"INCOME_TRANSFER_CONFIRMED": "Payment received",
"MINED": "Mined",
"LOCKED": "Blocked",
"IS_MINIMIZE": "Zano application is minimized to the system tray",
"RESTORE": "You can recover it by clicking or using the context menu",
"TRAY_MENU_SHOW": "Resize",
"TRAY_MENU_MINIMIZE": "Minimize"
}
}

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="icons" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 384 384" style="enable-background:new 0 0 384 384;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path id="account" class="st0" d="M192,0C86,0,0,86,0,192s86,192,192,192s192-86,192-192S298,0,192,0z M86,86
c28.3-28.3,66-43.9,106-43.9S269.7,57.7,298,86c28.3,28.3,43.9,66,43.9,106c0,26.4-6.8,51.7-19.4,74c-12.7-12.8-28.6-23.3-46.7-31
c8.4-15.6,13.2-33.7,13.2-53c0-32.3-9.8-59.2-28.3-78.1c-17.2-17.5-41.6-27.2-68.7-27.2s-51.5,9.7-68.7,27.2
C104.8,122.8,95,149.7,95,182c0,19.2,4.8,37.3,13.1,52.8C90,242.5,74,252.9,61.3,265.7c-12.6-22.2-19.3-47.4-19.3-73.7
C42.1,151.9,57.7,114.3,86,86z M137,182c0-40.2,20.1-63.3,55-63.3s55,23.1,55,63.3c0,34.9-24.7,63.3-55,63.3S137,216.9,137,182z
M87.3,299.3c1.4-1.6,3-3.3,4.9-5.1c11.7-11.3,26.9-19.8,45.1-25.4c15.6,11.6,34.4,18.4,54.7,18.4c20.2,0,39-6.8,54.6-18.3
c26.4,8.1,41.7,21.2,49.9,30.6c-28.1,27.4-65.1,42.4-104.5,42.4C152.6,341.9,115.5,326.8,87.3,299.3z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 18 18" style="enable-background:new 0 0 18 18;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<polygon class="st0" points="18,7 11,7 11,0 7,0 7,7 0,7 0,11 7,11 7,18 11,18 11,11 18,11 "/>
</svg>

Before

Width:  |  Height:  |  Size: 499 B

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z M18,25h-4v-4h4V25z M18,18h-4V7h4V18z"/>
</svg>

Before

Width:  |  Height:  |  Size: 529 B

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<polygon class="st0" points="0,8 32,8 16,24"/>
</svg>

Before

Width:  |  Height:  |  Size: 453 B

View file

@ -1,9 +0,0 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="451.846px" height="451.847px" viewBox="0 0 451.846 451.847" style="enable-background:new 0 0 451.846 451.847;"
xml:space="preserve">
<g>
<path d="M345.441,248.292L151.154,442.573c-12.359,12.365-32.397,12.365-44.75,0c-12.354-12.354-12.354-32.391,0-44.744
L278.318,225.92L106.409,54.017c-12.354-12.359-12.354-32.394,0-44.748c12.354-12.359,32.391-12.359,44.75,0l194.287,194.284
c6.177,6.18,9.262,14.271,9.262,22.366C354.708,234.018,351.617,242.115,345.441,248.292z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 606 B

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<polygon class="st0" points="0,24 32,24 16,8"/>
</svg>

Before

Width:  |  Height:  |  Size: 454 B

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 240.823 240.823" style="enable-background:new 0 0 240.823 240.823;" xml:space="preserve">
<g>
<path id="Chevron_Right" d="M57.633,129.007L165.93,237.268c4.752,4.74,12.451,4.74,17.215,0c4.752-4.74,4.752-12.439,0-17.179
l-99.707-99.671l99.695-99.671c4.752-4.74,4.752-12.439,0-17.191c-4.752-4.74-12.463-4.74-17.215,0L57.621,111.816
C52.942,116.507,52.942,124.327,57.633,129.007z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 675 B

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 34 34" style="enable-background:new 0 0 34 34;" xml:space="preserve">
<style type="text/css">
.st0{fill:#4db1ff;}
</style>
<polygon class="st0" points="31.9,4.9 29.1,2.1 17,14.2 4.9,2.1 2.1,4.9 14.2,17 2.1,29.1 4.9,31.9 17,19.8 29.1,31.9 31.9,29.1
19.8,17 "/>
</svg>

Before

Width:  |  Height:  |  Size: 549 B

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 34 34" style="enable-background:new 0 0 34 34;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<polygon class="st0" points="31.9,4.9 29.1,2.1 17,14.2 4.9,2.1 2.1,4.9 14.2,17 2.1,29.1 4.9,31.9 17,19.8 29.1,31.9 31.9,29.1
19.8,17 "/>
</svg>

Before

Width:  |  Height:  |  Size: 545 B

View file

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 384 384" style="enable-background:new 0 0 384 384;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g id="Layer_1">
</g>
<g id="Layer_1_copy">
</g>
<g id="Layer_4">
<polygon class="st0" points="300,105.1 278.9,84 192,170.9 105.1,84 84,105.1 170.9,192 84,278.9 105.1,300 192,213.1 278.9,300
300,278.9 213.1,192 "/>
</g>
<g id="Layer_2">
</g>
</svg>

Before

Width:  |  Height:  |  Size: 644 B

Some files were not shown because too many files have changed in this diff Show more