From 082cf5feb8e39a872d7bf21d1d76f3c6e79da93b Mon Sep 17 00:00:00 2001 From: zano build machine Date: Wed, 9 Dec 2020 23:43:55 +0300 Subject: [PATCH 01/12] === build number: 112 -> 113 === --- src/version.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h.in b/src/version.h.in index 6565a645..6cdbc210 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -8,6 +8,6 @@ #define PROJECT_REVISION "7" #define PROJECT_VERSION PROJECT_MAJOR_VERSION "." PROJECT_MINOR_VERSION "." PROJECT_REVISION -#define PROJECT_VERSION_BUILD_NO 112 +#define PROJECT_VERSION_BUILD_NO 113 #define PROJECT_VERSION_BUILD_NO_STR STRINGIFY_EXPAND(PROJECT_VERSION_BUILD_NO) #define PROJECT_VERSION_LONG PROJECT_VERSION "." PROJECT_VERSION_BUILD_NO_STR "[" BUILD_COMMIT_ID "]" From 86b0b354eebf9ba7d1447accdc57d4156e0cbc10 Mon Sep 17 00:00:00 2001 From: zano build machine Date: Wed, 16 Dec 2020 00:55:27 +0300 Subject: [PATCH 02/12] === build number: 113 -> 114 === --- src/version.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h.in b/src/version.h.in index 6cdbc210..f85ea776 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -8,6 +8,6 @@ #define PROJECT_REVISION "7" #define PROJECT_VERSION PROJECT_MAJOR_VERSION "." PROJECT_MINOR_VERSION "." PROJECT_REVISION -#define PROJECT_VERSION_BUILD_NO 113 +#define PROJECT_VERSION_BUILD_NO 114 #define PROJECT_VERSION_BUILD_NO_STR STRINGIFY_EXPAND(PROJECT_VERSION_BUILD_NO) #define PROJECT_VERSION_LONG PROJECT_VERSION "." PROJECT_VERSION_BUILD_NO_STR "[" BUILD_COMMIT_ID "]" From 5843f6964c32bf1d9b76add57c77b07ca88db183 Mon Sep 17 00:00:00 2001 From: sowle Date: Tue, 26 Jan 2021 23:14:46 +0300 Subject: [PATCH 03/12] crypto: fe_isnonzero made public, point_t::is_zero() added --- src/crypto/crypto-ops.c | 2 +- src/crypto/crypto-ops.h | 1 + tests/functional_tests/crypto_tests.cpp | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/crypto/crypto-ops.c b/src/crypto/crypto-ops.c index dad60907..7553a1cb 100644 --- a/src/crypto/crypto-ops.c +++ b/src/crypto/crypto-ops.c @@ -332,7 +332,7 @@ static int fe_isnegative(const fe f) { /* From fe_isnonzero.c, modified */ -static int fe_isnonzero(const fe f) { +int fe_isnonzero(const fe f) { unsigned char s[32]; fe_tobytes(s, f); return (((int) (s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7] | s[8] | diff --git a/src/crypto/crypto-ops.h b/src/crypto/crypto-ops.h index 07122772..e01735dd 100644 --- a/src/crypto/crypto-ops.h +++ b/src/crypto/crypto-ops.h @@ -128,6 +128,7 @@ 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); 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); diff --git a/tests/functional_tests/crypto_tests.cpp b/tests/functional_tests/crypto_tests.cpp index 4ba6717d..3b7aec3e 100644 --- a/tests/functional_tests/crypto_tests.cpp +++ b/tests/functional_tests/crypto_tests.cpp @@ -418,6 +418,12 @@ struct point_t 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(&pk)) == 0; From dd095f205c402e3260ceea394471e26732528800 Mon Sep 17 00:00:00 2001 From: sowle Date: Tue, 26 Jan 2021 23:19:26 +0300 Subject: [PATCH 04/12] experimental crypto: ml2s_lnk_sig_verif implemented completely --- tests/functional_tests/L2S.h | 135 +++++++++++++++++++++++++++++++---- 1 file changed, 122 insertions(+), 13 deletions(-) diff --git a/tests/functional_tests/L2S.h b/tests/functional_tests/L2S.h index e60e139f..e9071fcc 100644 --- a/tests/functional_tests/L2S.h +++ b/tests/functional_tests/L2S.h @@ -40,8 +40,8 @@ struct ml2s_signature_element point_t T0; scalar_t t0; point_t Z; - std::vector r_array; - std::vector H_array; + std::vector r_array; // size = n + std::vector H_array; // size = n point_t T; scalar_t t; }; @@ -49,11 +49,38 @@ struct ml2s_signature_element struct ml2s_signature { scalar_t z; - std::vector elements; + std::vector elements; // size = L }; -// reference: mL2SLnkSig_Verif() -bool ml2s_lnk_sig_verif(const scalar_t& m, const std::vector& B_array, const ml2s_signature& signature, uint8_t* p_err = nullptr) +size_t log2sz(size_t x) +{ + size_t r = 0; + while (x > 1) + x >>= 1, ++r; + return r; +} + +template +T invert_last_bit(T v) +{ + return v ^ 1; +} + +template +bool is_power_of_2(T v) +{ + while (v > 1) + { + if (v & 1) + return false; + v <<= 1; + } + return true; +} + + +bool ml2s_lnk_sig_verif(const scalar_t& m, const std::vector& B_array, const ml2s_signature& signature, uint8_t* p_err = nullptr, + std::vector* p_I_array = nullptr) { #define CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(cond, err_code) \ if (!(cond)) { LOG_PRINT_RED("ml2s_lnk_sig_verif: \"" << #cond << "\" is false at " << LOCATION_SS << ENDL << "error code = " << err_code, LOG_LEVEL_3); \ @@ -68,25 +95,25 @@ bool ml2s_lnk_sig_verif(const scalar_t& m, const std::vector& B_array, size_t N = (size_t)1 << n; CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(B_array.size() == N / 2, 5); - std::vector I_array(L); + std::vector local_I_array; + if (p_I_array == nullptr) + p_I_array = &local_I_array; + p_I_array->resize(L); std::vector A_array(L); for (size_t i = 0; i < L; ++i) { - I_array[i] = (signature.elements[i].Z0 - c_point_G) / signature.z; + (*p_I_array)[i] = (signature.elements[i].Z0 - c_point_G) / signature.z; A_array[i] = signature.elements[i].Z0; CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(signature.elements[i].r_array.size() == n, 1); CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(signature.elements[i].H_array.size() == n, 2); } - scalar_t z_ = hash_helper_t::hs(m, B_array, I_array); + scalar_t z_ = hash_helper_t::hs(m, B_array, *p_I_array); CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(z_ == signature.z, 3); scalar_t e = hash_helper_t::hs(signature.z); - // ref: mL2SHPoM_Verif() - - // ref: X = mL2SHPoM_GetDecoySet(N, A, hash_point_cb, preimage_set_gen_cb) std::vector P_array(B_array.size()); for (size_t i = 0; i < B_array.size(); ++i) P_array[i] = hash_point_lambda(B_array[i]); @@ -95,7 +122,7 @@ bool ml2s_lnk_sig_verif(const scalar_t& m, const std::vector& B_array, CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(P_array.size() * 2 == N, 6); std::vector X_array(N); - // X_array = { P_array[0], Q_array[0], P_array[1], Q_array[1], etc. + // X_array = { P_array[0], Q_array[0], P_array[1], Q_array[1], etc. } for (size_t i = 0; i < N; ++i) { if (i % 2 == 0) @@ -104,7 +131,89 @@ bool ml2s_lnk_sig_verif(const scalar_t& m, const std::vector& B_array, X_array[i] = hash_point_lambda(Q_shift + B_array[i / 2]); } + // challenge c0 + hash_helper_t::hs_t hs_calculator; + hs_calculator.reserve(1 + N + 3 * L); + hs_calculator.add_scalar(e); + hs_calculator.add_points_array(X_array); + for (size_t i = 0; i < L; ++i) + { + auto& sel = signature.elements[i]; + hs_calculator.add_point(sel.Z0); + hs_calculator.add_point(sel.T0); + hs_calculator.add_point(sel.Z); + } + e = hs_calculator.calc_hash(); + scalar_t c0 = e; - return false; + // check t0 * Z0 + c0 * Z == T0 + for (size_t i = 0; i < L; ++i) + { + auto& sel = signature.elements[i]; + CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(sel.t0 * sel.Z0 + c0 * sel.Z == sel.T0, 7); + } + + // challenges c11, c13 + std::vector c1_array; // counting from 0, so c11 is c1_array[0], will have n elements + std::vector c3_array; // the same, will have n - 1 elements + + hs_calculator.add_scalar(e); + for (size_t i = 0; i < L; ++i) + { + auto& sel = signature.elements[i]; + hs_calculator.add_scalar(sel.t0); + hs_calculator.add_point(sel.H_array[0]); + } + e = hs_calculator.calc_hash(); + c1_array.emplace_back(e); + c3_array.emplace_back(hash_helper_t::hs(e)); + + // ci1, ci3 for i in [2; n] -- corresponds c1_array for i in [1; n - 1], c3_array for i in [1; n - 2] + for (size_t i = 1; i < n; ++i) + { + hs_calculator.add_scalar(e); + for (size_t j = 0; j < L; ++j) + { + auto& sel = signature.elements[j]; + hs_calculator.add_scalar(sel.r_array[i - 1]); + hs_calculator.add_point(sel.H_array[i]); + } + e = hs_calculator.calc_hash(); + c1_array.emplace_back(e); + if (i != n - 1) + c3_array.emplace_back(hash_helper_t::hs(e)); + } + + // challenge c + hs_calculator.add_scalar(e); + for (size_t i = 0; i < L; ++i) + { + auto& sel = signature.elements[i]; + hs_calculator.add_scalar(sel.r_array[n - 1]); + hs_calculator.add_point(sel.T); + } + scalar_t c = hs_calculator.calc_hash(); + + // Rsum + point_t R = c_point_G; + CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(ml2s_rsum(n, X_array, c1_array, c3_array, R), 8); + + // final checks + for (size_t i = 0; i < L; ++i) + { + auto& sel = signature.elements[i]; + point_t S = sel.Z; + for (size_t j = 0; j < n; ++j) + { + S = S + sel.r_array[j] * sel.H_array[j]; + CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(!S.is_zero(), 9); + CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(sel.r_array[j] != 0, 10); + CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(!sel.H_array[j].is_zero(), 11); + } + + CHECK_AND_FAIL_WITH_ERROR_IF_FALSE(sel.t * S + c * R == sel.T, 12); + } + + return true; #undef CHECK_AND_FAIL_WITH_ERROR_IF_FALSE } From dd679a11176b31ebf7a674548ac42430a09962b8 Mon Sep 17 00:00:00 2001 From: sowle Date: Tue, 26 Jan 2021 23:21:44 +0300 Subject: [PATCH 05/12] experimental crypto: Hp and Hs calculator impelemented --- tests/functional_tests/crypto_tests.cpp | 82 +++++++++++++++++++++---- 1 file changed, 70 insertions(+), 12 deletions(-) diff --git a/tests/functional_tests/crypto_tests.cpp b/tests/functional_tests/crypto_tests.cpp index 3b7aec3e..ab60725f 100644 --- a/tests/functional_tests/crypto_tests.cpp +++ b/tests/functional_tests/crypto_tests.cpp @@ -537,6 +537,7 @@ struct point_g_t : public point_t static const point_g_t c_point_G; +static const scalar_t c_scalar_1 = { 1 }; static const scalar_t c_scalar_L = { 0x5812631a5cf5d3ed, 0x14def9dea2f79cd6, 0x0, 0x1000000000000000 }; static const scalar_t c_scalar_Lm1 = { 0x5812631a5cf5d3ec, 0x14def9dea2f79cd6, 0x0, 0x1000000000000000 }; static const scalar_t c_scalar_P = { 0xffffffffffffffed, 0xffffffffffffffff, 0xffffffffffffffff, 0x7fffffffffffffff }; @@ -549,35 +550,92 @@ struct hash_helper_t { static scalar_t hs(const scalar_t& s) { - scalar_t result = 0; - - crypto::cn_fast_hash(s.data(), sizeof s, (char*)result.data()); - - return result; + crypto::hash hash; + crypto::cn_fast_hash(s.data(), sizeof s, hash); + return scalar_t(hash); // will reduce mod L } - static scalar_t hs(const scalar_t& s, const std::vector& ss, const std::vector& ps) + 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 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()); + } + + void add_points_array(const std::vector& points_array) + { + for (size_t i = 0, size = points_array.size(); i < size; ++i) + m_elements.emplace_back(points_array[i].to_public_key()); + } + + 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(const crypto::public_key& pk) : pk(pk) {} + item_t(const scalar_t& scalar) : scalar(scalar) {} + scalar_t scalar; + crypto::public_key pk; + }; + + std::vector m_elements; + }; + + /*static scalar_t hs(const scalar_t& s, const std::vector& ss, const std::vector& ps) { scalar_t result = 0; return result; - } + }*/ static scalar_t hs(const scalar_t& s, const std::vector& ps0, const std::vector& ps1) { - scalar_t result = 0; - return result; + 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 std::vector& ps0, const std::vector& ps1) { - scalar_t result = 0; - return result; + 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; + crypto::public_key pk = p.to_public_key(); ge_bytes_hash_to_ec(&result.m_p3, (const unsigned char*)&pk); From 8a03f8e4b3c4964136f8f80b3bc28e6e5b1136ee Mon Sep 17 00:00:00 2001 From: sowle Date: Thu, 28 Jan 2021 14:53:04 +0300 Subject: [PATCH 06/12] gcc compilation fixed --- src/common/int-util.h | 1 - src/crypto/crypto-ops.c | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/common/int-util.h b/src/common/int-util.h index dde4e01f..ddf06dfe 100644 --- a/src/common/int-util.h +++ b/src/common/int-util.h @@ -10,7 +10,6 @@ #include #include #include -#include #if defined(_MSC_VER) #include diff --git a/src/crypto/crypto-ops.c b/src/crypto/crypto-ops.c index 7553a1cb..7b4e50dd 100644 --- a/src/crypto/crypto-ops.c +++ b/src/crypto/crypto-ops.c @@ -3754,9 +3754,9 @@ void ge_bytes_hash_to_ec(ge_p3 *res, const unsigned char *ge_bytes) ge_p2 point; ge_p1p1 point2; - cn_fast_hash(ge_bytes, 32, h); + cn_fast_hash(ge_bytes, 32, (char*)h); ge_fromfe_frombytes_vartime(&point, &h[0]); - /*ge_p2_to_p3(res, &point); /* -- can be used to avoid multiplication by 8 for debugging */ + /*ge_p2_to_p3(res, &point); -- can be used to avoid multiplication by 8 for debugging */ ge_mul8(&point2, &point); ge_p1p1_to_p3(res, &point2); } From 02fb693905b95dc28d432e4fcc14e7fa5b2cdb15 Mon Sep 17 00:00:00 2001 From: sowle Date: Thu, 28 Jan 2021 14:59:14 +0300 Subject: [PATCH 07/12] checkpoint added: at 900000 for mainnet and at 700000 for testnet --- src/currency_core/checkpoints_create.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/currency_core/checkpoints_create.h b/src/currency_core/checkpoints_create.h index d1a16a32..fcd6cf3c 100644 --- a/src/currency_core/checkpoints_create.h +++ b/src/currency_core/checkpoints_create.h @@ -21,11 +21,13 @@ namespace currency ADD_CHECKPOINT(100000, "6b8b54356a9d44f6c1ebdacb8593d8f5ab2e2e2ca4493e7ae7baf4b3755c5e16"); ADD_CHECKPOINT(350000, "885841f079e5a38f1921f4a5319f0d52fdbab64bb2026ca3cabad1c032d22db7"); ADD_CHECKPOINT(450000, "e8b789b909d59ed8a2a1e3eceb6d0b19accfe0d45cc31621b1929de80adfa702"); + ADD_CHECKPOINT(700000, "b650754d8fef77643520f4c0de3d7c4047232ab7ce6ba8c3a47c3e45ffa3dd9f"); #else // MAINNET ADD_CHECKPOINT(425000, "46a6c36d5dec2d484d5e4845a8525ca322aafc06915ed9c8da2a241b51b7d1e8"); ADD_CHECKPOINT(525000, "8c1ac57e67448130207a224b2d6e33ccdc64d6dd1c59dbcf9ad2361dc0d07d51"); ADD_CHECKPOINT(600000, "d9fe316086e1aaea07d94082973ec764eff5fc5a05ed6e1eca273cee59daeeb4"); + ADD_CHECKPOINT(900000, "2205b73cd79d4937b087b02a8b001171b73c34464bc4a952834eaf7c2bd63e86"); #endif return true; From 9d02a05c7172d43f8ada5f6e9c3f9d16ca0db352 Mon Sep 17 00:00:00 2001 From: sowle Date: Thu, 28 Jan 2021 14:59:14 +0300 Subject: [PATCH 08/12] checkpoint added: at 900000 for mainnet and at 700000 for testnet --- src/currency_core/checkpoints_create.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/currency_core/checkpoints_create.h b/src/currency_core/checkpoints_create.h index d1a16a32..fcd6cf3c 100644 --- a/src/currency_core/checkpoints_create.h +++ b/src/currency_core/checkpoints_create.h @@ -21,11 +21,13 @@ namespace currency ADD_CHECKPOINT(100000, "6b8b54356a9d44f6c1ebdacb8593d8f5ab2e2e2ca4493e7ae7baf4b3755c5e16"); ADD_CHECKPOINT(350000, "885841f079e5a38f1921f4a5319f0d52fdbab64bb2026ca3cabad1c032d22db7"); ADD_CHECKPOINT(450000, "e8b789b909d59ed8a2a1e3eceb6d0b19accfe0d45cc31621b1929de80adfa702"); + ADD_CHECKPOINT(700000, "b650754d8fef77643520f4c0de3d7c4047232ab7ce6ba8c3a47c3e45ffa3dd9f"); #else // MAINNET ADD_CHECKPOINT(425000, "46a6c36d5dec2d484d5e4845a8525ca322aafc06915ed9c8da2a241b51b7d1e8"); ADD_CHECKPOINT(525000, "8c1ac57e67448130207a224b2d6e33ccdc64d6dd1c59dbcf9ad2361dc0d07d51"); ADD_CHECKPOINT(600000, "d9fe316086e1aaea07d94082973ec764eff5fc5a05ed6e1eca273cee59daeeb4"); + ADD_CHECKPOINT(900000, "2205b73cd79d4937b087b02a8b001171b73c34464bc4a952834eaf7c2bd63e86"); #endif return true; From 1a2e4ea4caf71bf2b33754c79a32d764455d8f67 Mon Sep 17 00:00:00 2001 From: sowle Date: Fri, 29 Jan 2021 05:32:30 +0300 Subject: [PATCH 09/12] predownload links updated --- src/common/pre_download.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/pre_download.h b/src/common/pre_download.h index e90fb2e7..cc2a5412 100644 --- a/src/common/pre_download.h +++ b/src/common/pre_download.h @@ -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_900000.pak", "1c748d0f90fb1ed0af0ffe59d4b8f6046b2d0f92a8b8fe21932208829733f053", 1097493715, 2147450880 }; + static constexpr pre_download_entry c_pre_download_lmdb = { "http://95.217.43.225/pre-download/zano_lmdb_95_900000.pak", "f2d498ed7abf641824eca4ce584c756d6138d670980c1abdddcdf07343f10bfc", 1406827811, 2079617024 }; #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 = { "http://95.217.43.225/pre-download/zano_testnet_mdbx_97_700000.pak", "499b4294bbfedccea98bebd369c1fb7c676de0226e9f52657daab45dac908050", 491920310, 1073725440 }; + static constexpr pre_download_entry c_pre_download_lmdb = { "http://95.217.43.225/pre-download/zano_testnet_lmdb_97_700000.pak", "a8d5fc57a69576fdd9d538f37af7f1abe3a33c721a597d4a86aa198dcc1d1e0e", 669535639, 1020039168 }; #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 From 9e99d10db3d3594c950a3c6f996dea29d134e98c Mon Sep 17 00:00:00 2001 From: sowle Date: Fri, 29 Jan 2021 19:54:08 +0300 Subject: [PATCH 10/12] gui: Indonesian language added --- src/gui/qt-daemon/html/assets/i18n/en.json | 1 + src/gui/qt-daemon/html/assets/i18n/id.json | 587 ++++++++++++++++++ src/gui/qt-daemon/html/main.js | 4 + .../src/app/settings/settings.component.ts | 4 + .../html_source/src/assets/i18n/en.json | 1 + .../html_source/src/assets/i18n/id.json | 587 ++++++++++++++++++ 6 files changed, 1184 insertions(+) create mode 100644 src/gui/qt-daemon/html/assets/i18n/id.json create mode 100644 src/gui/qt-daemon/html_source/src/assets/i18n/id.json diff --git a/src/gui/qt-daemon/html/assets/i18n/en.json b/src/gui/qt-daemon/html/assets/i18n/en.json index aebe7138..394f046c 100644 --- a/src/gui/qt-daemon/html/assets/i18n/en.json +++ b/src/gui/qt-daemon/html/assets/i18n/en.json @@ -166,6 +166,7 @@ "EN": "English", "FR": "French", "DE": "Deutsch", + "ID": "Indonesian", "IT": "Italian", "PT": "Portuguese" }, diff --git a/src/gui/qt-daemon/html/assets/i18n/id.json b/src/gui/qt-daemon/html/assets/i18n/id.json new file mode 100644 index 00000000..4b4c95a5 --- /dev/null +++ b/src/gui/qt-daemon/html/assets/i18n/id.json @@ -0,0 +1,587 @@ +{ + "LOGIN": { + "SETUP_MASTER_PASS": "Atur Kata Sandi Utama", + "SETUP_CONFIRM_PASS": "Konfirmasi kata sandi", + "MASTER_PASS": "Kata Sandi Utama", + "BUTTON_NEXT": "Selanjutnya", + "BUTTON_SKIP": "Lewati", + "BUTTON_RESET": "Atur Ulang", + "INCORRECT_PASSWORD": "Kata sandi salah", + "FORM_ERRORS": { + "PASS_REQUIRED": "Kata sandi dibutuhkan\n", + "CONFIRM_REQUIRED": "Diperlukan konfirmasi", + "MISMATCH": "Tidak cocok" + } + }, + "COMMON": { + "BACK": "Kembali" + }, + "BREADCRUMBS": { + "ADD_WALLET": "Tambahkan dompet", + "CREATE_WALLET": "Buat dompet baru", + "SAVE_PHRASE": "Simpan kalimat/kata kata anda", + "OPEN_WALLET": "Buka dompet yang telah ada", + "RESTORE_WALLET": "Mengembalikan dari cadangan", + "WALLET_DETAILS": "Detail Dompet", + "ASSIGN_ALIAS": "Tetapkan nama alias", + "EDIT_ALIAS": "Edit nama alias", + "TRANSFER_ALIAS": "Pindahkan nama alias", + "CONTRACTS": "Kontrak", + "NEW_PURCHASE": "Pembelian Baru", + "OLD_PURCHASE": "Pembelian" + }, + "SIDEBAR": { + "TITLE": "Dompet", + "ADD_NEW": "+ Tambahkan", + "ACCOUNT": { + "STAKING": "Staking", + "MESSAGES": "Pesan baru/tawaran", + "SYNCING": "Sinkronisasi dompet" + }, + "CONTACTS": "Kontak", + "SETTINGS": "Pengaturan", + "LOG_OUT": "Keluar", + "SYNCHRONIZATION": { + "OFFLINE": "Offline", + "ONLINE": "Online", + "ERROR": "Sistem error", + "COMPLETE": "Penyelesaian", + "SYNCING": "Sinkronisasi blockchain", + "LOADING": "Memuat data blockchain" + }, + "UPDATE": { + "STANDARD": "Pembaruan tersedia", + "STANDARD_TOOLTIP": "Dapatkan pembaruan baru.
Pembaruan direkomendasikan!", + "IMPORTANT": "Pembaruan tersedia", + "IMPORTANT_HINT": "Pembaruang penting!", + "IMPORTANT_TOOLTIP": "Dapatkan pembaruan terbaru.
Pembaruan penting!", + "CRITICAL": "Pembaruan tersedia", + "CRITICAL_HINT": "Pembaruan penting!", + "CRITICAL_TOOLTIP": "Tersedia pembaruan penting.Direkomendasikan untuk segera di update!", + "TIME": "Waktu sistem berbeda dengan jaringan", + "TIME_TOOLTIP": "Waktu sistem salah!
Mohon dicek dan perbaiki sistem waktunya." + } + }, + "MAIN": { + "TITLE": "Buat atau buka dompet untuk mulai menggunakan Zano", + "BUTTON_NEW_WALLET": "Buat dompet baru", + "BUTTON_OPEN_WALLET": "Buka dompet yang telah dibuat", + "BUTTON_RESTORE_BACKUP": "Pulihkan dari cadangan", + "HELP": "Bagaimana cara membuat dompet?", + "CHOOSE_PATH": "Pilih path untuk menyimpan" + }, + "CREATE_WALLET": { + "NAME": "Nama Dompet", + "PASS": "Buat kata sandi dompet", + "CONFIRM": "Konfirmasi kata sandi dompet", + "BUTTON_SELECT": "Pilih lokasi dompet", + "BUTTON_CREATE": "Buat Dompet\n", + "TITLE_SAVE": "Simpan file dompet", + "ERROR_CANNOT_SAVE_TOP": "Dompet yang telah ada tidak bisa di tulis ulang atau di ganti", + "ERROR_CANNOT_SAVE_SYSTEM": "File dompet tidak dapat di simpan di partisi OS", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama di butuhkan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai", + "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama" + } + }, + "OPEN_WALLET": { + "NAME": "Nama dompet", + "PASS": "Katasandi dompet", + "BUTTON": "Buka dompet", + "WITH_ADDRESS_ALREADY_OPEN": "Dompet dengan alamat ini sudah terbuka", + "FILE_NOT_FOUND1": "File Dompet tidak ditemukan", + "FILE_NOT_FOUND2": "

Kemungkinan sudah di ganti atau dipindahkan
Untuk Membuka, gunakan tombol \"Buka Dompet\".\n", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai" + }, + "MODAL": { + "TITLE": "Tulis kata sandi dompet", + "LABEL": "Katasandi untuk dompet ini", + "OPEN": "Buka dompet", + "SKIP": "Lewati", + "NOT_FOUND": "Tidak ditemukan" + } + }, + "RESTORE_WALLET": { + "LABEL_NAME": "Nama dompet", + "LABEL_PHRASE_KEY": "Seed phrase/ kunci pribadi", + "PASS": "Katasandi dompet", + "CONFIRM": "Konfirmasi kata sandi dompet", + "BUTTON_SELECT": "Pilih lokasi dompet", + "BUTTON_CREATE": "Buat Dompet\n", + "NOT_CORRECT_FILE_OR_PASSWORD": "File dompet tidak valid atau kata sandi tidak sama", + "CHOOSE_PATH": "Pilih path untuk menyimpan", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai", + "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama", + "KEY_REQUIRED": "Kunci di butuhkan", + "KEY_NOT_VALID": "Kunci tidak valid" + } + }, + "SEED_PHRASE": { + "TITLE": "Pastikan untuk menyimpan seed phrase di tempat yang aman. Jika kamu lupa seed phrasenya, kamu tidak bisa menggunakanya untuk memulihkan/recover dompetmu.", + "BUTTON_CREATE_ACCOUNT": "Buat Dompet\n", + "BUTTON_COPY": "Salin" + }, + "PROGRESS": { + "ADD_WALLET": "Tambahkan dompet", + "SELECT_LOCATION": "Pilih lokasi dompet", + "CREATE_WALLET": "Buat dompet baru", + "RESTORE_WALLET": "Pulihkan dari cadangan" + }, + "SETTINGS": { + "TITLE": "Pengaturan", + "DARK_THEME": "Tema Gelap", + "WHITE_THEME": "Tema Biasa/Putih", + "GRAY_THEME": "Tema Abu-abu", + "APP_LOCK": { + "TITLE": "Kunci aplikasi setelah:", + "TIME1": "5 Menit", + "TIME2": "15 Menit", + "TIME3": "1 Jam", + "TIME4": "Tidak pernah" + }, + "MASTER_PASSWORD": { + "TITLE": "Atur Kata Sandi Utama", + "OLD": "Katasandi lama", + "NEW": "Katasandi baru", + "CONFIRM": "Konfirmasi katasandi baru", + "BUTTON": "Simpan" + }, + "FORM_ERRORS": { + "PASS_REQUIRED": "Kata sandi dibutuhkan\n", + "PASS_NOT_MATCH": "Katasandi lama tidak sama", + "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama" + }, + "LAST_BUILD": "Versi sekarang: {{value}}", + "APP_LOG_TITLE": "Tingkat log:" + }, + "WALLET": { + "REGISTER_ALIAS": "Daftarkan alias", + "DETAILS": "Detail", + "LOCK": "Kunci", + "AVAILABLE_BALANCE": "Tersedia {{available}} {{currency}}", + "LOCKED_BALANCE": "Terkunci {{locked}} {{currency}}", + "LOCKED_BALANCE_LINK": "Apa yang dimaksudkan?\n", + "TABS": { + "SEND": "Kirim", + "RECEIVE": "Terima", + "HISTORY": "Riwayat", + "CONTRACTS": "Kontrak", + "MESSAGES": "Pesan", + "STAKING": "Staking" + } + }, + "WALLET_DETAILS": { + "LABEL_NAME": "Nama dompet", + "LABEL_FILE_LOCATION": "Lokasi file dompet", + "LABEL_SEED_PHRASE": "Seed Phrase", + "SEED_PHRASE_HINT": "Klik untuk membuka frasa kunci", + "BUTTON_SAVE": "Simpan", + "BUTTON_REMOVE": "Tutup dompet", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai" + } + }, + "ASSIGN_ALIAS": { + "NAME": { + "LABEL": "Alias", + "PLACEHOLDER": "@ Masukan alias", + "TOOLTIP": "Alias adalah formulir singkat atau akun Anda. Alias hanya dapat menyertakan huruf Latin, angka, dan karakter “.” dan \"-\". Itu harus dimulai dengan \"@\"." + }, + "COMMENT": { + "LABEL": "Komentar", + "PLACEHOLDER": "", + "TOOLTIP": "Komentar akan terlihat oleh siapa saja yang ingin melakukan pembayaran ke alias Anda. Anda dapat memberikan detail tentang bisnis Anda, kontak, atau memasukkan teks apa pun. Komentar dapat diedit nanti." + }, + "COST": "Biaya Alias {{value}} {{currency}}", + "BUTTON_ASSIGN": "Menetapkan", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama di butuhkan", + "NAME_WRONG": "Alias memiliki nama yang salah", + "NAME_LENGTH": "Alias harus 6-25 karakter", + "NAME_EXISTS": "Nama alias sudah ada", + "NO_MONEY": "Anda tidak memiliki cukup dana untuk menetapkan alias ini", + "MAX_LENGTH": "Maksimum panjang komentar tecapai" + }, + "ONE_ALIAS": "Anda hanya dapat membuat satu alias per dompet", + "REQUEST_ADD_REG": "Alias akan di pindahkan dalam 10 menit" + }, + "EDIT_ALIAS": { + "NAME": { + "LABEL": "Alias", + "PLACEHOLDER": "@ Masukan alias" + }, + "COMMENT": { + "LABEL": "Komentar", + "PLACEHOLDER": "" + }, + "FORM_ERRORS": { + "NO_MONEY": "Anda tidak memiliki cukup dana untuk mengganti alias ini", + "MAX_LENGTH": "Maksimum panjang komentar tecapai" + }, + "COST": "Biaya Alias {{value}} {{currency}}", + "BUTTON_EDIT": "Edit/ubah" + }, + "TRANSFER_ALIAS": { + "NAME": { + "LABEL": "Alias", + "PLACEHOLDER": "@ Masukan alias" + }, + "COMMENT": { + "LABEL": "Komentar", + "PLACEHOLDER": "" + }, + "ADDRESS": { + "LABEL": "Pindahkan ke", + "PLACEHOLDER": "" + }, + "FORM_ERRORS": { + "WRONG_ADDRESS": "Tidak ada domet di akun ini", + "ALIAS_EXISTS": "Akun ini sudah memiliki alias", + "NO_MONEY": "Anda tidak memiliki cukup dana untuk memindahkan alias ini" + }, + "COST": "Biaya Alias {{value}} {{currency}}", + "BUTTON_TRANSFER": "Pindahkan", + "BUTTON_CANCEL": "Batal", + "REQUEST_SEND_REG": "Alias akan di pindahkan dalam 10 menit" + }, + "SEND": { + "ADDRESS": "Alamat", + "AMOUNT": "Jumlah", + "COMMENT": "Komentar", + "DETAILS": "Detail tambahan\n", + "MIXIN": "Mixin", + "FEE": "Biaya", + "HIDE": "Sembunyikan alamat dompet kamu dari penerima", + "BUTTON": "Kirim", + "SUCCESS_SENT": "Transaksi dikirim", + "FORM_ERRORS": { + "ADDRESS_REQUIRED": "Alamat di perlukan", + "ADDRESS_NOT_VALID": "Alamat tidak valid", + "ALIAS_NOT_VALID": "Alias tidak valid", + "AMOUNT_REQUIRED": "Jumlah di perlukan", + "AMOUNT_ZERO": "Jumlah 0", + "FEE_REQUIRED": "Biaya dibutuhkan", + "FEE_MINIMUM": "Biaya minimal : {{fee}}", + "MAX_LENGTH": "Maksimum panjang komentar tecapai" + } + }, + "HISTORY": { + "STATUS": "Status", + "STATUS_TOOLTIP": "Konfirmasi {{current}}/{{total}}", + "LOCK_TOOLTIP": "Dikunci sampai {{date}}", + "SEND": "Dikirim", + "RECEIVED": "Diterima", + "DATE": "Tanggal", + "AMOUNT": "Jumlah", + "FEE": "Biaya", + "ADDRESS": "Alamat", + "DETAILS": { + "PAYMENT_ID": "ID Pembayaran", + "ID": "ID Transaksi", + "SIZE": "Ukuran transaksi", + "SIZE_VALUE": "{{value}} bytes", + "HEIGHT": "Tinggi", + "CONFIRMATION": "Konfirmasi", + "INPUTS": "Input", + "OUTPUTS": "Output/Keluaran", + "COMMENT": "Komentar" + }, + "TYPE_MESSAGES": { + "HIDDEN": "tersembunyi", + "UNDEFINED": "Tidak terdefinisi", + "COMPLETE_BUYER": "Kontrak selesai", + "COMPLETE_SELLER": "Kontrak selesai", + "CREATE_ALIAS": "Biaya untuk menetapkan alias", + "UPDATE_ALIAS": "Biaya untuk mengubah alias", + "POW_REWARD": "Hadiah POW", + "POS_REWARD": "Hadiah POS", + "CREATE_CONTRACT": "Proposal Kontrak", + "PLEDGE_CONTRACT": "Kontrak Deposit", + "NULLIFY_CONTRACT": "Setoran yang dibakar/hangus", + "PROPOSAL_CANCEL_CONTRACT": "Permintaan pembatalan", + "CANCEL_CONTRACT": "Batalkan dan kembalikan setoran/deposit" + } + }, + "CONTRACTS": { + "EMPTY": "Tidak ada kontrak yang aktif", + "CONTRACTS": "Kontrak", + "PURCHASE": "Pembelian", + "SELL": "Jual", + "DATE": "Tanggal", + "AMOUNT": "Jumlah", + "STATUS": "Status", + "COMMENTS": "Komentar", + "PURCHASE_BUTTON": "Pembelian Baru", + "LISTING_BUTTON": "Buat daftar", + "TIME_LEFT": { + "REMAINING_LESS_ONE": "Kurang dari satu jam untuk merespon", + "REMAINING_ONE": "kurang {{time}} jam", + "REMAINING_MANY": "kurang {{time}} jam", + "REMAINING_MANY_ALT": "kurang {{time}} jam", + "REMAINING_ONE_RESPONSE": "kurang {{time}} jam", + "REMAINING_MANY_RESPONSE": "kurang {{time}} jam", + "REMAINING_MANY_ALT_RESPONSE": "kurang {{time}} jam", + "REMAINING_ONE_WAITING": "Menunggu dari {{time}} jam", + "REMAINING_MANY_WAITING": "Menunggu dari {{time}} jam", + "REMAINING_MANY_ALT_WAITING": "Menunggu dari {{time}} jam" + }, + "STATUS_MESSAGES": { + "SELLER": { + "NEW_CONTRACT": "Proposal kontrak baru", + "IGNORED": "Kamu mengabaikan kontrak proposal", + "ACCEPTED": "Kontrak dimulai", + "WAIT": "Menunggu konfirmasi kontrak\n", + "WAITING_BUYER": "menunggu untuk dikirim", + "COMPLETED": "Kontrak selesai", + "NOT_RECEIVED": "Pengiriman gagal", + "NULLIFIED": "Semua deposit/setoran hangus", + "PROPOSAL_CANCEL": "Proposal baru untuk membatalkan kontrak dan mengembalikan deposit", + "BEING_CANCELLED": "Pembatalan dalam proses", + "CANCELLED": "Kontrak dibatalkan", + "IGNORED_CANCEL": "Kamu mengabaikan kontrak proposal", + "EXPIRED": "Kontrak proposal telah kadaluarsa" + }, + "BUYER": { + "WAITING": "Menunggu untuk respon", + "IGNORED": "Penjual mengabaikan kontrak proposal", + "ACCEPTED": "Penjual menerima kontrak proposal kamu", + "WAIT": "Menunggu konfirmasi deposit", + "WAITING_SELLER": "menunggu untuk dikirim", + "COMPLETED": "Kontrak selesai", + "NOT_RECEIVED": "Pengiriman gagal", + "NULLIFIED": "Semua deposit/setoran hangus", + "WAITING_CANCEL": "Menunggu pembatalan kontrak", + "BEING_CANCELLED": "Pembatalan dalam proses", + "CANCELLED": "Kontrak dibatalkan", + "IGNORED_CANCEL": "Penjual mengabaikan proposal anda untuk pembatalan kontrak", + "EXPIRED": "Kontrak proposal telah kadaluwarsa" + } + } + }, + "PURCHASE": { + "DESCRIPTION": "Deskripsi", + "SELLER": "Penjual", + "AMOUNT": "Jumlah", + "YOUR_DEPOSIT": "Setoran/deposit kamu", + "SELLER_DEPOSIT": "Setoran/Depost Penjual", + "BUYER_DEPOSIT": "Setoran pembeli", + "SAME_AMOUNT": "Jumlah yang sama", + "COMMENT": "Komentar", + "DETAILS": "Detail tambahan\n", + "SEND_BUTTON": "Kirim", + "FORM_ERRORS": { + "DESC_REQUIRED": "Deskripsi dibutuhkan", + "DESC_MAXIMUM": "Maksimum panjang bidang tecapai", + "SELLER_REQUIRED": "Alamat di perlukan", + "SELLER_NOT_VALID": "alamat tidak valid", + "ALIAS_NOT_VALID": "alias tidak valid", + "AMOUNT_REQUIRED": "Jumlah di perlukan", + "AMOUNT_ZERO": "Jumlah tidak bisa 0", + "YOUR_DEPOSIT_REQUIRED": "Deposit/setoran dibutuhkan", + "SELLER_DEPOSIT_REQUIRED": "Setoran penjual dibuthkan", + "SELLER_SAME": "Gunakan akun terpisah", + "COMMENT_MAXIMUM": "Maksimum panjang bidang tecapai" + }, + "PROGRESS_NEW": "Pembelian Baru", + "PROGRESS_WAIT": "Menunggu balasan", + "PROGRESS_RECEIVE": "Balasan diterima", + "PROGRESS_COMPLETE": "Selesai", + "FEE": "Biaya", + "PAYMENT": "ID Pembayaran", + "STATUS_MESSAGES": { + "NEW_PURCHASE": "Pembelian Baru", + "WAITING_SELLER": "Menunggu untuk respon", + "WAITING_BUYER": "Kontrak proposal telah diterima", + "WAITING_CONFIRMATION": "Menunggu konfirmasi deposit", + "WAITING_DELIVERY": "menunggu untuk dikirim", + "COMPLETED": "Kontrak selesai", + "IGNORED_BUYER": "Kontrak proposal diabaikan", + "IGNORED_SELLER": "Penjual mengabaikan kontrak proposal", + "PROPOSAL_CANCEL_SELLER": "Permintaan pembatalan dikirimkan", + "PROPOSAL_CANCEL_BUYER": "Permintaan pembatalan diterima", + "BEING_CANCELLED": "Pembatalan dalam proses", + "IGNORED_CANCEL_SELLER": "Penjual mengabaikan proposal anda untuk pembatalan kontrak", + "IGNORED_CANCEL_BUYER": "Proposal pembatalan kontrak diabaikan", + "CANCELLED": "Kontrak dibatalkan", + "EXPIRED": "Kontrak proposal telah kadaluarsa", + "NOT_RECEIVED": "Pengiriman gagal", + "NULLIFIED": "Semua deposit/setoran hangus" + }, + "ACCEPT_STATE_WAIT_BIG": "Kontrak dimulai", + "IGNORED_ACCEPT": "Kontrak proposal diabaikan", + "BURN_PROPOSAL": "Semua deposit/setoran hangus", + "SUCCESS_FINISH_PROPOSAL": "Kontrak selesai", + "SEND_CANCEL_PROPOSAL": "Permintaan pembatalan dikirimkan", + "IGNORED_CANCEL": "Proposal pembatalan kontrak diabaikan", + "DEALS_CANCELED_WAIT": "Pembatalan dalam proses", + "WAITING_TIME": "Waktu Respon", + "NEED_MONEY": "Dana tidak cukup", + "BUTTON_MAKE_PLEDGE": "Terima dan buat deposit", + "BUTTON_IGNORE": "Abaikan dan sembunyikan penawaran", + "BUTTON_NULLIFY": "Matikan dan bakar setoran ", + "BUTTON_RECEIVED": "Selesai dan lepaskan setoran/deposit", + "BUTTON_CANCEL_BUYER": "Batalkan dan kembalikan setoran/deposit", + "BUTTON_NOT_CANCEL": "Abaikan permintaan ", + "BUTTON_CANCEL_SELLER": "Konfirmasi dan kembalikan deposit", + "HOUR": "Jam", + "HOURS": "Jam", + "CANCEL": "Batal", + "NULLIFY_QUESTION": "Apakah kamu yakin untuk membakar/menghanguskan kedua deposit/setoran?", + "BUTTON_NULLIFY_SHORT": "Hangus", + "WAITING_TIME_QUESTION": "Apakah kamu yakin untuk membatalkan kontrak?" + }, + "MESSAGES": { + "ADDRESS": "Alamat", + "MESSAGE": "Pesan", + "SEND_PLACEHOLDER": "Ketik sebuah pesan...", + "SEND_BUTTON": "Kirim" + }, + "MODALS": { + "ERROR": "Error", + "SUCCESS": "Berhasil", + "INFO": "Informasi", + "OK": "Ok" + }, + "CONFIRM": { + "BUTTON_CONFIRM": "Kirim", + "BUTTON_CANCEL": "Batal", + "TITLE": "Konfirmasi transaksi", + "MESSAGE": { + "SEND": "Kirim", + "FROM": "Dari\n", + "TO": "Untuk", + "COMMENT": "Komentar" + } + }, + "STAKING": { + "TITLE": "Staking", + "TITLE_PENDING": "Tertunda", + "TITLE_TOTAL": "Total", + "TITLE_PERIOD": "Periode waktu:", + "PERIOD": { + "WEEK1": "1 minggu", + "WEEK2": "2 minggu", + "MONTH1": "1 bulan", + "MONTH3": "3 bulan", + "MONTH6": "6 bulan", + "YEAR": "1 tahun", + "ALL": "Semua" + }, + "TITLE_GROUP": "Kelompok:", + "GROUP": { + "DAY": "hari", + "WEEK": "minggu", + "MONTH": "bulan" + }, + "SWITCH": { + "ON": "On", + "OFF": "Off" + } + }, + "CONTACTS": { + "TITLE": "Daftar kontak", + "IMPORT_EXPORT": "Import atau ekspor kontak", + "IMPORT": "Import", + "EXPORT": "Ekspor", + "ADD": "Tambahkan/edit kontak", + "SEND": "Kirim", + "SEND_FROM": "Kirim dari", + "SEND_TO": "Untuk", + "OPEN_ADD_WALLET": "Buka/tambahkan dompet", + "COPY": "- Salin", + "TABLE": { + "NAME": "Nama", + "ALIAS": "Alias", + "ADDRESS": "Alamat", + "NOTES": "Catatan", + "EMPTY": "Daftar kontrak masih kosong" + }, + "FORM": { + "NAME": "Nama", + "ADDRESS": "Alamat", + "NOTES": "Catatan" + }, + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUBLICATED": "Nama sama/duplikat", + "ADDRESS_REQUIRED": "Alamat di perlukan", + "ADDRESS_NOT_VALID": "Alamat tidak valid", + "SET_MASTER_PASSWORD": "Atur Kata Sandi Utama", + "ADDRESS_DUBLICATED": "Alamat sama/duplikat", + "MAX_LENGTH": "Maksimum panjang catatan tecapai", + "NAME_LENGTH": "Nama harus 4-25 karakter" + }, + "BUTTON": { + "SEND": "Kirim", + "EDIT": "Edit/ubah", + "DELETE": "Hapus", + "ADD": "Tambahkan kontak", + "ADD_EDIT": "Tambahkan/Simpan", + "GO_TO_WALLET": "Pergi ke dompet", + "IMPORT_EXPORT": "Impor/Ekspor" + }, + "SUCCESS_SENT": "Kontak ditambahkan", + "SUCCESS_SAVE": "Kontak telah di ubah", + "SUCCESS_IMPORT": "Kontak telah di impor", + "SUCCESS_EXPORT": "Kontak telah di ekspor", + "ERROR_IMPORT": "Kesalahan terjadi ketika membaca file!", + "ERROR_TYPE_FILE": "Tolong mengimpor file .csv yang valid", + "ERROR_EXPORT": "Tipe file tidak valid. Simpan file dalam .csv", + "ERROR_EMPTY_LIST": "Daftar kontak masih kosong", + "ERROR_IMPORT_EMPTY": "File masih kosong " + }, + "ERRORS": { + "NO_MONEY": "Tidak cukup uang", + "NOT_ENOUGH_MONEY": "Dana di akun tidak cukup", + "CORE_BUSY": "Kesalahan intenal: inti sedang sibuk", + "DAEMON_BUSY": "Kesalahan intenal: daemon sedang sibuk", + "NO_MONEY_REMOVE_OFFER": "Tidak ada biaya untuk menghapus penawaran, tetapi untuk melindungi jaringan terhadap transaksi banjir/banyak, Anda harus memiliki setidaknya {{fee}} {{currency}} di dompet Anda", + "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mixin terlalu besar untuk keadaan blockchain saat ini. Tidak ada cukup keluaran yang tidak terpakai untuk digabungkan", + "TRANSACTION_IS_TO_BIG": "Transaksi melebihi batas jaringan, mengirim jumlah yang diperlukan dengan banyak transaksi", + "TRANSFER_ATTEMPT": "Tidak ada koneksi ke jaringan Zano", + "ACCESS_DENIED": "Akses ditolak", + "TRANSACTION_ERROR": "Kesalahan. Transaksi tidak selesai.", + "BAD_ARG": "Argumen tidak valid", + "WALLET_WRONG_ID": "ID dompet tidak valid", + "WRONG_PASSWORD": "Katasandi tidak valid", + "FILE_RESTORED": "File dompet rusak. Kami telah memulihkan kunci dan dompet dari blockchain", + "FILE_NOT_FOUND": "File tidak ditemukan", + "FILE_EXIST": "Sebuah file dengan nama tersebut sudah ada. Coba menggunakan nama lain untuk menyimpannya", + "FILE_NOT_SAVED": "Anda tidak dapat menyimpan file dompet di folder ini. Tolong pilih folder yang lain.", + "TX_TYPE_NORMAL": "Error. Pembayaran dari dompet", + "TX_TYPE_NORMAL_TO": "untuk", + "TX_TYPE_NORMAL_END": "tidak selesai", + "TX_TYPE_NEW_ALIAS": "Error. Gagal untuk mendaftarkan alias ", + "TX_TYPE_NEW_ALIAS_END": "Silakan coba lagi", + "TX_TYPE_UPDATE_ALIAS": "Error. Gagal mengubah komentar menjadi alias dengan aman", + "TX_TYPE_COIN_BASE": "Error. Pembayaran tidak selesai." + }, + "CONTEXT_MENU": { + "COPY": "Salin", + "PASTE": "tempel/paste", + "SELECT": "pilih semua" + }, + "BACKEND_LOCALIZATION": { + "QUIT": "Keluar", + "IS_RECEIVED": "", + "IS_CONFIRMED": "", + "INCOME_TRANSFER_UNCONFIRMED": "Pembayaran masuk (belum terkonfirmasi)", + "INCOME_TRANSFER_CONFIRMED": "Pembayaran diterima", + "MINED": "Ditambang", + "LOCKED": "Diblokir", + "IS_MINIMIZE": "Aplikasi Zano di minimalkan ke dalam sistem tray.", + "RESTORE": "Kamu dapat mengembalikannya dengan cara mengklik ke dalam menu konteks.", + "TRAY_MENU_SHOW": "Ubah ukuran", + "TRAY_MENU_MINIMIZE": "Minimalkan" + } +} diff --git a/src/gui/qt-daemon/html/main.js b/src/gui/qt-daemon/html/main.js index 5c4c4918..2defe0dd 100644 --- a/src/gui/qt-daemon/html/main.js +++ b/src/gui/qt-daemon/html/main.js @@ -7927,6 +7927,10 @@ var SettingsComponent = /** @class */ (function () { name: 'de', language: 'SETTINGS.LANGUAGE.DE' }, + { + name: 'id', + language: 'SETTINGS.LANGUAGE.ID' + }, { name: 'it', language: 'SETTINGS.LANGUAGE.IT' diff --git a/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts b/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts index f45bf75d..ed265518 100644 --- a/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts +++ b/src/gui/qt-daemon/html_source/src/app/settings/settings.component.ts @@ -30,6 +30,10 @@ export class SettingsComponent implements OnInit { name: 'de', language: 'SETTINGS.LANGUAGE.DE' }, + { + name: 'id', + language: 'SETTINGS.LANGUAGE.ID' + }, { name: 'it', language: 'SETTINGS.LANGUAGE.IT' diff --git a/src/gui/qt-daemon/html_source/src/assets/i18n/en.json b/src/gui/qt-daemon/html_source/src/assets/i18n/en.json index aebe7138..394f046c 100644 --- a/src/gui/qt-daemon/html_source/src/assets/i18n/en.json +++ b/src/gui/qt-daemon/html_source/src/assets/i18n/en.json @@ -166,6 +166,7 @@ "EN": "English", "FR": "French", "DE": "Deutsch", + "ID": "Indonesian", "IT": "Italian", "PT": "Portuguese" }, diff --git a/src/gui/qt-daemon/html_source/src/assets/i18n/id.json b/src/gui/qt-daemon/html_source/src/assets/i18n/id.json new file mode 100644 index 00000000..4b4c95a5 --- /dev/null +++ b/src/gui/qt-daemon/html_source/src/assets/i18n/id.json @@ -0,0 +1,587 @@ +{ + "LOGIN": { + "SETUP_MASTER_PASS": "Atur Kata Sandi Utama", + "SETUP_CONFIRM_PASS": "Konfirmasi kata sandi", + "MASTER_PASS": "Kata Sandi Utama", + "BUTTON_NEXT": "Selanjutnya", + "BUTTON_SKIP": "Lewati", + "BUTTON_RESET": "Atur Ulang", + "INCORRECT_PASSWORD": "Kata sandi salah", + "FORM_ERRORS": { + "PASS_REQUIRED": "Kata sandi dibutuhkan\n", + "CONFIRM_REQUIRED": "Diperlukan konfirmasi", + "MISMATCH": "Tidak cocok" + } + }, + "COMMON": { + "BACK": "Kembali" + }, + "BREADCRUMBS": { + "ADD_WALLET": "Tambahkan dompet", + "CREATE_WALLET": "Buat dompet baru", + "SAVE_PHRASE": "Simpan kalimat/kata kata anda", + "OPEN_WALLET": "Buka dompet yang telah ada", + "RESTORE_WALLET": "Mengembalikan dari cadangan", + "WALLET_DETAILS": "Detail Dompet", + "ASSIGN_ALIAS": "Tetapkan nama alias", + "EDIT_ALIAS": "Edit nama alias", + "TRANSFER_ALIAS": "Pindahkan nama alias", + "CONTRACTS": "Kontrak", + "NEW_PURCHASE": "Pembelian Baru", + "OLD_PURCHASE": "Pembelian" + }, + "SIDEBAR": { + "TITLE": "Dompet", + "ADD_NEW": "+ Tambahkan", + "ACCOUNT": { + "STAKING": "Staking", + "MESSAGES": "Pesan baru/tawaran", + "SYNCING": "Sinkronisasi dompet" + }, + "CONTACTS": "Kontak", + "SETTINGS": "Pengaturan", + "LOG_OUT": "Keluar", + "SYNCHRONIZATION": { + "OFFLINE": "Offline", + "ONLINE": "Online", + "ERROR": "Sistem error", + "COMPLETE": "Penyelesaian", + "SYNCING": "Sinkronisasi blockchain", + "LOADING": "Memuat data blockchain" + }, + "UPDATE": { + "STANDARD": "Pembaruan tersedia", + "STANDARD_TOOLTIP": "Dapatkan pembaruan baru.
Pembaruan direkomendasikan!", + "IMPORTANT": "Pembaruan tersedia", + "IMPORTANT_HINT": "Pembaruang penting!", + "IMPORTANT_TOOLTIP": "Dapatkan pembaruan terbaru.
Pembaruan penting!", + "CRITICAL": "Pembaruan tersedia", + "CRITICAL_HINT": "Pembaruan penting!", + "CRITICAL_TOOLTIP": "Tersedia pembaruan penting.Direkomendasikan untuk segera di update!", + "TIME": "Waktu sistem berbeda dengan jaringan", + "TIME_TOOLTIP": "Waktu sistem salah!
Mohon dicek dan perbaiki sistem waktunya." + } + }, + "MAIN": { + "TITLE": "Buat atau buka dompet untuk mulai menggunakan Zano", + "BUTTON_NEW_WALLET": "Buat dompet baru", + "BUTTON_OPEN_WALLET": "Buka dompet yang telah dibuat", + "BUTTON_RESTORE_BACKUP": "Pulihkan dari cadangan", + "HELP": "Bagaimana cara membuat dompet?", + "CHOOSE_PATH": "Pilih path untuk menyimpan" + }, + "CREATE_WALLET": { + "NAME": "Nama Dompet", + "PASS": "Buat kata sandi dompet", + "CONFIRM": "Konfirmasi kata sandi dompet", + "BUTTON_SELECT": "Pilih lokasi dompet", + "BUTTON_CREATE": "Buat Dompet\n", + "TITLE_SAVE": "Simpan file dompet", + "ERROR_CANNOT_SAVE_TOP": "Dompet yang telah ada tidak bisa di tulis ulang atau di ganti", + "ERROR_CANNOT_SAVE_SYSTEM": "File dompet tidak dapat di simpan di partisi OS", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama di butuhkan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai", + "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama" + } + }, + "OPEN_WALLET": { + "NAME": "Nama dompet", + "PASS": "Katasandi dompet", + "BUTTON": "Buka dompet", + "WITH_ADDRESS_ALREADY_OPEN": "Dompet dengan alamat ini sudah terbuka", + "FILE_NOT_FOUND1": "File Dompet tidak ditemukan", + "FILE_NOT_FOUND2": "

Kemungkinan sudah di ganti atau dipindahkan
Untuk Membuka, gunakan tombol \"Buka Dompet\".\n", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai" + }, + "MODAL": { + "TITLE": "Tulis kata sandi dompet", + "LABEL": "Katasandi untuk dompet ini", + "OPEN": "Buka dompet", + "SKIP": "Lewati", + "NOT_FOUND": "Tidak ditemukan" + } + }, + "RESTORE_WALLET": { + "LABEL_NAME": "Nama dompet", + "LABEL_PHRASE_KEY": "Seed phrase/ kunci pribadi", + "PASS": "Katasandi dompet", + "CONFIRM": "Konfirmasi kata sandi dompet", + "BUTTON_SELECT": "Pilih lokasi dompet", + "BUTTON_CREATE": "Buat Dompet\n", + "NOT_CORRECT_FILE_OR_PASSWORD": "File dompet tidak valid atau kata sandi tidak sama", + "CHOOSE_PATH": "Pilih path untuk menyimpan", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai", + "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama", + "KEY_REQUIRED": "Kunci di butuhkan", + "KEY_NOT_VALID": "Kunci tidak valid" + } + }, + "SEED_PHRASE": { + "TITLE": "Pastikan untuk menyimpan seed phrase di tempat yang aman. Jika kamu lupa seed phrasenya, kamu tidak bisa menggunakanya untuk memulihkan/recover dompetmu.", + "BUTTON_CREATE_ACCOUNT": "Buat Dompet\n", + "BUTTON_COPY": "Salin" + }, + "PROGRESS": { + "ADD_WALLET": "Tambahkan dompet", + "SELECT_LOCATION": "Pilih lokasi dompet", + "CREATE_WALLET": "Buat dompet baru", + "RESTORE_WALLET": "Pulihkan dari cadangan" + }, + "SETTINGS": { + "TITLE": "Pengaturan", + "DARK_THEME": "Tema Gelap", + "WHITE_THEME": "Tema Biasa/Putih", + "GRAY_THEME": "Tema Abu-abu", + "APP_LOCK": { + "TITLE": "Kunci aplikasi setelah:", + "TIME1": "5 Menit", + "TIME2": "15 Menit", + "TIME3": "1 Jam", + "TIME4": "Tidak pernah" + }, + "MASTER_PASSWORD": { + "TITLE": "Atur Kata Sandi Utama", + "OLD": "Katasandi lama", + "NEW": "Katasandi baru", + "CONFIRM": "Konfirmasi katasandi baru", + "BUTTON": "Simpan" + }, + "FORM_ERRORS": { + "PASS_REQUIRED": "Kata sandi dibutuhkan\n", + "PASS_NOT_MATCH": "Katasandi lama tidak sama", + "CONFIRM_NOT_MATCH": "Konfirmasi katasandi tidak sama" + }, + "LAST_BUILD": "Versi sekarang: {{value}}", + "APP_LOG_TITLE": "Tingkat log:" + }, + "WALLET": { + "REGISTER_ALIAS": "Daftarkan alias", + "DETAILS": "Detail", + "LOCK": "Kunci", + "AVAILABLE_BALANCE": "Tersedia {{available}} {{currency}}", + "LOCKED_BALANCE": "Terkunci {{locked}} {{currency}}", + "LOCKED_BALANCE_LINK": "Apa yang dimaksudkan?\n", + "TABS": { + "SEND": "Kirim", + "RECEIVE": "Terima", + "HISTORY": "Riwayat", + "CONTRACTS": "Kontrak", + "MESSAGES": "Pesan", + "STAKING": "Staking" + } + }, + "WALLET_DETAILS": { + "LABEL_NAME": "Nama dompet", + "LABEL_FILE_LOCATION": "Lokasi file dompet", + "LABEL_SEED_PHRASE": "Seed Phrase", + "SEED_PHRASE_HINT": "Klik untuk membuka frasa kunci", + "BUTTON_SAVE": "Simpan", + "BUTTON_REMOVE": "Tutup dompet", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUPLICATE": "Nama sama/duplikat", + "MAX_LENGTH": "Maksimum panjang nama tecapai" + } + }, + "ASSIGN_ALIAS": { + "NAME": { + "LABEL": "Alias", + "PLACEHOLDER": "@ Masukan alias", + "TOOLTIP": "Alias adalah formulir singkat atau akun Anda. Alias hanya dapat menyertakan huruf Latin, angka, dan karakter “.” dan \"-\". Itu harus dimulai dengan \"@\"." + }, + "COMMENT": { + "LABEL": "Komentar", + "PLACEHOLDER": "", + "TOOLTIP": "Komentar akan terlihat oleh siapa saja yang ingin melakukan pembayaran ke alias Anda. Anda dapat memberikan detail tentang bisnis Anda, kontak, atau memasukkan teks apa pun. Komentar dapat diedit nanti." + }, + "COST": "Biaya Alias {{value}} {{currency}}", + "BUTTON_ASSIGN": "Menetapkan", + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama di butuhkan", + "NAME_WRONG": "Alias memiliki nama yang salah", + "NAME_LENGTH": "Alias harus 6-25 karakter", + "NAME_EXISTS": "Nama alias sudah ada", + "NO_MONEY": "Anda tidak memiliki cukup dana untuk menetapkan alias ini", + "MAX_LENGTH": "Maksimum panjang komentar tecapai" + }, + "ONE_ALIAS": "Anda hanya dapat membuat satu alias per dompet", + "REQUEST_ADD_REG": "Alias akan di pindahkan dalam 10 menit" + }, + "EDIT_ALIAS": { + "NAME": { + "LABEL": "Alias", + "PLACEHOLDER": "@ Masukan alias" + }, + "COMMENT": { + "LABEL": "Komentar", + "PLACEHOLDER": "" + }, + "FORM_ERRORS": { + "NO_MONEY": "Anda tidak memiliki cukup dana untuk mengganti alias ini", + "MAX_LENGTH": "Maksimum panjang komentar tecapai" + }, + "COST": "Biaya Alias {{value}} {{currency}}", + "BUTTON_EDIT": "Edit/ubah" + }, + "TRANSFER_ALIAS": { + "NAME": { + "LABEL": "Alias", + "PLACEHOLDER": "@ Masukan alias" + }, + "COMMENT": { + "LABEL": "Komentar", + "PLACEHOLDER": "" + }, + "ADDRESS": { + "LABEL": "Pindahkan ke", + "PLACEHOLDER": "" + }, + "FORM_ERRORS": { + "WRONG_ADDRESS": "Tidak ada domet di akun ini", + "ALIAS_EXISTS": "Akun ini sudah memiliki alias", + "NO_MONEY": "Anda tidak memiliki cukup dana untuk memindahkan alias ini" + }, + "COST": "Biaya Alias {{value}} {{currency}}", + "BUTTON_TRANSFER": "Pindahkan", + "BUTTON_CANCEL": "Batal", + "REQUEST_SEND_REG": "Alias akan di pindahkan dalam 10 menit" + }, + "SEND": { + "ADDRESS": "Alamat", + "AMOUNT": "Jumlah", + "COMMENT": "Komentar", + "DETAILS": "Detail tambahan\n", + "MIXIN": "Mixin", + "FEE": "Biaya", + "HIDE": "Sembunyikan alamat dompet kamu dari penerima", + "BUTTON": "Kirim", + "SUCCESS_SENT": "Transaksi dikirim", + "FORM_ERRORS": { + "ADDRESS_REQUIRED": "Alamat di perlukan", + "ADDRESS_NOT_VALID": "Alamat tidak valid", + "ALIAS_NOT_VALID": "Alias tidak valid", + "AMOUNT_REQUIRED": "Jumlah di perlukan", + "AMOUNT_ZERO": "Jumlah 0", + "FEE_REQUIRED": "Biaya dibutuhkan", + "FEE_MINIMUM": "Biaya minimal : {{fee}}", + "MAX_LENGTH": "Maksimum panjang komentar tecapai" + } + }, + "HISTORY": { + "STATUS": "Status", + "STATUS_TOOLTIP": "Konfirmasi {{current}}/{{total}}", + "LOCK_TOOLTIP": "Dikunci sampai {{date}}", + "SEND": "Dikirim", + "RECEIVED": "Diterima", + "DATE": "Tanggal", + "AMOUNT": "Jumlah", + "FEE": "Biaya", + "ADDRESS": "Alamat", + "DETAILS": { + "PAYMENT_ID": "ID Pembayaran", + "ID": "ID Transaksi", + "SIZE": "Ukuran transaksi", + "SIZE_VALUE": "{{value}} bytes", + "HEIGHT": "Tinggi", + "CONFIRMATION": "Konfirmasi", + "INPUTS": "Input", + "OUTPUTS": "Output/Keluaran", + "COMMENT": "Komentar" + }, + "TYPE_MESSAGES": { + "HIDDEN": "tersembunyi", + "UNDEFINED": "Tidak terdefinisi", + "COMPLETE_BUYER": "Kontrak selesai", + "COMPLETE_SELLER": "Kontrak selesai", + "CREATE_ALIAS": "Biaya untuk menetapkan alias", + "UPDATE_ALIAS": "Biaya untuk mengubah alias", + "POW_REWARD": "Hadiah POW", + "POS_REWARD": "Hadiah POS", + "CREATE_CONTRACT": "Proposal Kontrak", + "PLEDGE_CONTRACT": "Kontrak Deposit", + "NULLIFY_CONTRACT": "Setoran yang dibakar/hangus", + "PROPOSAL_CANCEL_CONTRACT": "Permintaan pembatalan", + "CANCEL_CONTRACT": "Batalkan dan kembalikan setoran/deposit" + } + }, + "CONTRACTS": { + "EMPTY": "Tidak ada kontrak yang aktif", + "CONTRACTS": "Kontrak", + "PURCHASE": "Pembelian", + "SELL": "Jual", + "DATE": "Tanggal", + "AMOUNT": "Jumlah", + "STATUS": "Status", + "COMMENTS": "Komentar", + "PURCHASE_BUTTON": "Pembelian Baru", + "LISTING_BUTTON": "Buat daftar", + "TIME_LEFT": { + "REMAINING_LESS_ONE": "Kurang dari satu jam untuk merespon", + "REMAINING_ONE": "kurang {{time}} jam", + "REMAINING_MANY": "kurang {{time}} jam", + "REMAINING_MANY_ALT": "kurang {{time}} jam", + "REMAINING_ONE_RESPONSE": "kurang {{time}} jam", + "REMAINING_MANY_RESPONSE": "kurang {{time}} jam", + "REMAINING_MANY_ALT_RESPONSE": "kurang {{time}} jam", + "REMAINING_ONE_WAITING": "Menunggu dari {{time}} jam", + "REMAINING_MANY_WAITING": "Menunggu dari {{time}} jam", + "REMAINING_MANY_ALT_WAITING": "Menunggu dari {{time}} jam" + }, + "STATUS_MESSAGES": { + "SELLER": { + "NEW_CONTRACT": "Proposal kontrak baru", + "IGNORED": "Kamu mengabaikan kontrak proposal", + "ACCEPTED": "Kontrak dimulai", + "WAIT": "Menunggu konfirmasi kontrak\n", + "WAITING_BUYER": "menunggu untuk dikirim", + "COMPLETED": "Kontrak selesai", + "NOT_RECEIVED": "Pengiriman gagal", + "NULLIFIED": "Semua deposit/setoran hangus", + "PROPOSAL_CANCEL": "Proposal baru untuk membatalkan kontrak dan mengembalikan deposit", + "BEING_CANCELLED": "Pembatalan dalam proses", + "CANCELLED": "Kontrak dibatalkan", + "IGNORED_CANCEL": "Kamu mengabaikan kontrak proposal", + "EXPIRED": "Kontrak proposal telah kadaluarsa" + }, + "BUYER": { + "WAITING": "Menunggu untuk respon", + "IGNORED": "Penjual mengabaikan kontrak proposal", + "ACCEPTED": "Penjual menerima kontrak proposal kamu", + "WAIT": "Menunggu konfirmasi deposit", + "WAITING_SELLER": "menunggu untuk dikirim", + "COMPLETED": "Kontrak selesai", + "NOT_RECEIVED": "Pengiriman gagal", + "NULLIFIED": "Semua deposit/setoran hangus", + "WAITING_CANCEL": "Menunggu pembatalan kontrak", + "BEING_CANCELLED": "Pembatalan dalam proses", + "CANCELLED": "Kontrak dibatalkan", + "IGNORED_CANCEL": "Penjual mengabaikan proposal anda untuk pembatalan kontrak", + "EXPIRED": "Kontrak proposal telah kadaluwarsa" + } + } + }, + "PURCHASE": { + "DESCRIPTION": "Deskripsi", + "SELLER": "Penjual", + "AMOUNT": "Jumlah", + "YOUR_DEPOSIT": "Setoran/deposit kamu", + "SELLER_DEPOSIT": "Setoran/Depost Penjual", + "BUYER_DEPOSIT": "Setoran pembeli", + "SAME_AMOUNT": "Jumlah yang sama", + "COMMENT": "Komentar", + "DETAILS": "Detail tambahan\n", + "SEND_BUTTON": "Kirim", + "FORM_ERRORS": { + "DESC_REQUIRED": "Deskripsi dibutuhkan", + "DESC_MAXIMUM": "Maksimum panjang bidang tecapai", + "SELLER_REQUIRED": "Alamat di perlukan", + "SELLER_NOT_VALID": "alamat tidak valid", + "ALIAS_NOT_VALID": "alias tidak valid", + "AMOUNT_REQUIRED": "Jumlah di perlukan", + "AMOUNT_ZERO": "Jumlah tidak bisa 0", + "YOUR_DEPOSIT_REQUIRED": "Deposit/setoran dibutuhkan", + "SELLER_DEPOSIT_REQUIRED": "Setoran penjual dibuthkan", + "SELLER_SAME": "Gunakan akun terpisah", + "COMMENT_MAXIMUM": "Maksimum panjang bidang tecapai" + }, + "PROGRESS_NEW": "Pembelian Baru", + "PROGRESS_WAIT": "Menunggu balasan", + "PROGRESS_RECEIVE": "Balasan diterima", + "PROGRESS_COMPLETE": "Selesai", + "FEE": "Biaya", + "PAYMENT": "ID Pembayaran", + "STATUS_MESSAGES": { + "NEW_PURCHASE": "Pembelian Baru", + "WAITING_SELLER": "Menunggu untuk respon", + "WAITING_BUYER": "Kontrak proposal telah diterima", + "WAITING_CONFIRMATION": "Menunggu konfirmasi deposit", + "WAITING_DELIVERY": "menunggu untuk dikirim", + "COMPLETED": "Kontrak selesai", + "IGNORED_BUYER": "Kontrak proposal diabaikan", + "IGNORED_SELLER": "Penjual mengabaikan kontrak proposal", + "PROPOSAL_CANCEL_SELLER": "Permintaan pembatalan dikirimkan", + "PROPOSAL_CANCEL_BUYER": "Permintaan pembatalan diterima", + "BEING_CANCELLED": "Pembatalan dalam proses", + "IGNORED_CANCEL_SELLER": "Penjual mengabaikan proposal anda untuk pembatalan kontrak", + "IGNORED_CANCEL_BUYER": "Proposal pembatalan kontrak diabaikan", + "CANCELLED": "Kontrak dibatalkan", + "EXPIRED": "Kontrak proposal telah kadaluarsa", + "NOT_RECEIVED": "Pengiriman gagal", + "NULLIFIED": "Semua deposit/setoran hangus" + }, + "ACCEPT_STATE_WAIT_BIG": "Kontrak dimulai", + "IGNORED_ACCEPT": "Kontrak proposal diabaikan", + "BURN_PROPOSAL": "Semua deposit/setoran hangus", + "SUCCESS_FINISH_PROPOSAL": "Kontrak selesai", + "SEND_CANCEL_PROPOSAL": "Permintaan pembatalan dikirimkan", + "IGNORED_CANCEL": "Proposal pembatalan kontrak diabaikan", + "DEALS_CANCELED_WAIT": "Pembatalan dalam proses", + "WAITING_TIME": "Waktu Respon", + "NEED_MONEY": "Dana tidak cukup", + "BUTTON_MAKE_PLEDGE": "Terima dan buat deposit", + "BUTTON_IGNORE": "Abaikan dan sembunyikan penawaran", + "BUTTON_NULLIFY": "Matikan dan bakar setoran ", + "BUTTON_RECEIVED": "Selesai dan lepaskan setoran/deposit", + "BUTTON_CANCEL_BUYER": "Batalkan dan kembalikan setoran/deposit", + "BUTTON_NOT_CANCEL": "Abaikan permintaan ", + "BUTTON_CANCEL_SELLER": "Konfirmasi dan kembalikan deposit", + "HOUR": "Jam", + "HOURS": "Jam", + "CANCEL": "Batal", + "NULLIFY_QUESTION": "Apakah kamu yakin untuk membakar/menghanguskan kedua deposit/setoran?", + "BUTTON_NULLIFY_SHORT": "Hangus", + "WAITING_TIME_QUESTION": "Apakah kamu yakin untuk membatalkan kontrak?" + }, + "MESSAGES": { + "ADDRESS": "Alamat", + "MESSAGE": "Pesan", + "SEND_PLACEHOLDER": "Ketik sebuah pesan...", + "SEND_BUTTON": "Kirim" + }, + "MODALS": { + "ERROR": "Error", + "SUCCESS": "Berhasil", + "INFO": "Informasi", + "OK": "Ok" + }, + "CONFIRM": { + "BUTTON_CONFIRM": "Kirim", + "BUTTON_CANCEL": "Batal", + "TITLE": "Konfirmasi transaksi", + "MESSAGE": { + "SEND": "Kirim", + "FROM": "Dari\n", + "TO": "Untuk", + "COMMENT": "Komentar" + } + }, + "STAKING": { + "TITLE": "Staking", + "TITLE_PENDING": "Tertunda", + "TITLE_TOTAL": "Total", + "TITLE_PERIOD": "Periode waktu:", + "PERIOD": { + "WEEK1": "1 minggu", + "WEEK2": "2 minggu", + "MONTH1": "1 bulan", + "MONTH3": "3 bulan", + "MONTH6": "6 bulan", + "YEAR": "1 tahun", + "ALL": "Semua" + }, + "TITLE_GROUP": "Kelompok:", + "GROUP": { + "DAY": "hari", + "WEEK": "minggu", + "MONTH": "bulan" + }, + "SWITCH": { + "ON": "On", + "OFF": "Off" + } + }, + "CONTACTS": { + "TITLE": "Daftar kontak", + "IMPORT_EXPORT": "Import atau ekspor kontak", + "IMPORT": "Import", + "EXPORT": "Ekspor", + "ADD": "Tambahkan/edit kontak", + "SEND": "Kirim", + "SEND_FROM": "Kirim dari", + "SEND_TO": "Untuk", + "OPEN_ADD_WALLET": "Buka/tambahkan dompet", + "COPY": "- Salin", + "TABLE": { + "NAME": "Nama", + "ALIAS": "Alias", + "ADDRESS": "Alamat", + "NOTES": "Catatan", + "EMPTY": "Daftar kontrak masih kosong" + }, + "FORM": { + "NAME": "Nama", + "ADDRESS": "Alamat", + "NOTES": "Catatan" + }, + "FORM_ERRORS": { + "NAME_REQUIRED": "Nama diperlukan", + "NAME_DUBLICATED": "Nama sama/duplikat", + "ADDRESS_REQUIRED": "Alamat di perlukan", + "ADDRESS_NOT_VALID": "Alamat tidak valid", + "SET_MASTER_PASSWORD": "Atur Kata Sandi Utama", + "ADDRESS_DUBLICATED": "Alamat sama/duplikat", + "MAX_LENGTH": "Maksimum panjang catatan tecapai", + "NAME_LENGTH": "Nama harus 4-25 karakter" + }, + "BUTTON": { + "SEND": "Kirim", + "EDIT": "Edit/ubah", + "DELETE": "Hapus", + "ADD": "Tambahkan kontak", + "ADD_EDIT": "Tambahkan/Simpan", + "GO_TO_WALLET": "Pergi ke dompet", + "IMPORT_EXPORT": "Impor/Ekspor" + }, + "SUCCESS_SENT": "Kontak ditambahkan", + "SUCCESS_SAVE": "Kontak telah di ubah", + "SUCCESS_IMPORT": "Kontak telah di impor", + "SUCCESS_EXPORT": "Kontak telah di ekspor", + "ERROR_IMPORT": "Kesalahan terjadi ketika membaca file!", + "ERROR_TYPE_FILE": "Tolong mengimpor file .csv yang valid", + "ERROR_EXPORT": "Tipe file tidak valid. Simpan file dalam .csv", + "ERROR_EMPTY_LIST": "Daftar kontak masih kosong", + "ERROR_IMPORT_EMPTY": "File masih kosong " + }, + "ERRORS": { + "NO_MONEY": "Tidak cukup uang", + "NOT_ENOUGH_MONEY": "Dana di akun tidak cukup", + "CORE_BUSY": "Kesalahan intenal: inti sedang sibuk", + "DAEMON_BUSY": "Kesalahan intenal: daemon sedang sibuk", + "NO_MONEY_REMOVE_OFFER": "Tidak ada biaya untuk menghapus penawaran, tetapi untuk melindungi jaringan terhadap transaksi banjir/banyak, Anda harus memiliki setidaknya {{fee}} {{currency}} di dompet Anda", + "NOT_ENOUGH_OUTPUTS_TO_MIX": "Mixin terlalu besar untuk keadaan blockchain saat ini. Tidak ada cukup keluaran yang tidak terpakai untuk digabungkan", + "TRANSACTION_IS_TO_BIG": "Transaksi melebihi batas jaringan, mengirim jumlah yang diperlukan dengan banyak transaksi", + "TRANSFER_ATTEMPT": "Tidak ada koneksi ke jaringan Zano", + "ACCESS_DENIED": "Akses ditolak", + "TRANSACTION_ERROR": "Kesalahan. Transaksi tidak selesai.", + "BAD_ARG": "Argumen tidak valid", + "WALLET_WRONG_ID": "ID dompet tidak valid", + "WRONG_PASSWORD": "Katasandi tidak valid", + "FILE_RESTORED": "File dompet rusak. Kami telah memulihkan kunci dan dompet dari blockchain", + "FILE_NOT_FOUND": "File tidak ditemukan", + "FILE_EXIST": "Sebuah file dengan nama tersebut sudah ada. Coba menggunakan nama lain untuk menyimpannya", + "FILE_NOT_SAVED": "Anda tidak dapat menyimpan file dompet di folder ini. Tolong pilih folder yang lain.", + "TX_TYPE_NORMAL": "Error. Pembayaran dari dompet", + "TX_TYPE_NORMAL_TO": "untuk", + "TX_TYPE_NORMAL_END": "tidak selesai", + "TX_TYPE_NEW_ALIAS": "Error. Gagal untuk mendaftarkan alias ", + "TX_TYPE_NEW_ALIAS_END": "Silakan coba lagi", + "TX_TYPE_UPDATE_ALIAS": "Error. Gagal mengubah komentar menjadi alias dengan aman", + "TX_TYPE_COIN_BASE": "Error. Pembayaran tidak selesai." + }, + "CONTEXT_MENU": { + "COPY": "Salin", + "PASTE": "tempel/paste", + "SELECT": "pilih semua" + }, + "BACKEND_LOCALIZATION": { + "QUIT": "Keluar", + "IS_RECEIVED": "", + "IS_CONFIRMED": "", + "INCOME_TRANSFER_UNCONFIRMED": "Pembayaran masuk (belum terkonfirmasi)", + "INCOME_TRANSFER_CONFIRMED": "Pembayaran diterima", + "MINED": "Ditambang", + "LOCKED": "Diblokir", + "IS_MINIMIZE": "Aplikasi Zano di minimalkan ke dalam sistem tray.", + "RESTORE": "Kamu dapat mengembalikannya dengan cara mengklik ke dalam menu konteks.", + "TRAY_MENU_SHOW": "Ubah ukuran", + "TRAY_MENU_MINIMIZE": "Minimalkan" + } +} From f0ae13cf60f0700b4d5ddf943bc99703957b9db9 Mon Sep 17 00:00:00 2001 From: sowle Date: Fri, 29 Jan 2021 19:55:37 +0300 Subject: [PATCH 11/12] === version bump: 1.1.7 -> 1.1.8 === --- src/version.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h.in b/src/version.h.in index f85ea776..53d779ef 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -5,7 +5,7 @@ #define PROJECT_MAJOR_VERSION "1" #define PROJECT_MINOR_VERSION "1" -#define PROJECT_REVISION "7" +#define PROJECT_REVISION "8" #define PROJECT_VERSION PROJECT_MAJOR_VERSION "." PROJECT_MINOR_VERSION "." PROJECT_REVISION #define PROJECT_VERSION_BUILD_NO 114 From 7138dd3ec38cb7be6d784d8ba55dfcec61dd4e2c Mon Sep 17 00:00:00 2001 From: zano build machine Date: Fri, 29 Jan 2021 19:57:15 +0300 Subject: [PATCH 12/12] === build number: 114 -> 115 === --- src/version.h.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h.in b/src/version.h.in index 53d779ef..28684408 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -8,6 +8,6 @@ #define PROJECT_REVISION "8" #define PROJECT_VERSION PROJECT_MAJOR_VERSION "." PROJECT_MINOR_VERSION "." PROJECT_REVISION -#define PROJECT_VERSION_BUILD_NO 114 +#define PROJECT_VERSION_BUILD_NO 115 #define PROJECT_VERSION_BUILD_NO_STR STRINGIFY_EXPAND(PROJECT_VERSION_BUILD_NO) #define PROJECT_VERSION_LONG PROJECT_VERSION "." PROJECT_VERSION_BUILD_NO_STR "[" BUILD_COMMIT_ID "]"