diff --git a/src/main/java/org/qortal/api/resource/GroupsResource.java b/src/main/java/org/qortal/api/resource/GroupsResource.java index 4ffd7549..187687a9 100644 --- a/src/main/java/org/qortal/api/resource/GroupsResource.java +++ b/src/main/java/org/qortal/api/resource/GroupsResource.java @@ -98,7 +98,15 @@ public class GroupsResource { ref = "reverse" ) @QueryParam("reverse") Boolean reverse) { try (final Repository repository = RepositoryManager.getRepository()) { - return repository.getGroupRepository().getAllGroups(limit, offset, reverse); + List allGroupData = repository.getGroupRepository().getAllGroups(limit, offset, reverse); + allGroupData.forEach(groupData -> { + try { + groupData.memberCount = repository.getGroupRepository().countGroupMembers(groupData.getGroupId()); + } catch (DataException e) { + // Exclude memberCount for this group + } + }); + return allGroupData; } catch (DataException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); } @@ -150,7 +158,15 @@ public class GroupsResource { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_ADDRESS); try (final Repository repository = RepositoryManager.getRepository()) { - return repository.getGroupRepository().getGroupsWithMember(member); + List allGroupData = repository.getGroupRepository().getGroupsWithMember(member); + allGroupData.forEach(groupData -> { + try { + groupData.memberCount = repository.getGroupRepository().countGroupMembers(groupData.getGroupId()); + } catch (DataException e) { + // Exclude memberCount for this group + } + }); + return allGroupData; } catch (DataException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); } @@ -177,6 +193,7 @@ public class GroupsResource { if (groupData == null) throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.GROUP_UNKNOWN); + groupData.memberCount = repository.getGroupRepository().countGroupMembers(groupId); return groupData; } catch (DataException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); @@ -922,4 +939,4 @@ public class GroupsResource { } } -} \ No newline at end of file +} diff --git a/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java b/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java index 3e0f0ab6..b974298b 100644 --- a/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java +++ b/src/main/java/org/qortal/arbitrary/ArbitraryDataFile.java @@ -478,6 +478,14 @@ public class ArbitraryDataFile { // Read the metadata List chunks = metadata.getChunks(); + + // If the chunks array is empty, then this resource has no chunks, + // so we must return false to avoid confusing the caller. + if (chunks.isEmpty()) { + return false; + } + + // Otherwise, we need to check each chunk individually for (byte[] chunkHash : chunks) { ArbitraryDataFileChunk chunk = ArbitraryDataFileChunk.fromHash(chunkHash, this.signature); if (!chunk.exists()) { diff --git a/src/main/java/org/qortal/block/BlockChain.java b/src/main/java/org/qortal/block/BlockChain.java index b19b5e57..f6b6500d 100644 --- a/src/main/java/org/qortal/block/BlockChain.java +++ b/src/main/java/org/qortal/block/BlockChain.java @@ -73,9 +73,13 @@ public class BlockChain { } // Custom transaction fees - @XmlJavaTypeAdapter(value = org.qortal.api.AmountTypeAdapter.class) - private long nameRegistrationUnitFee; - private long nameRegistrationUnitFeeTimestamp; + /** Unit fees by transaction timestamp */ + public static class UnitFeesByTimestamp { + public long timestamp; + @XmlJavaTypeAdapter(value = org.qortal.api.AmountTypeAdapter.class) + public long fee; + } + private List nameRegistrationUnitFees; /** Map of which blockchain features are enabled when (height/timestamp) */ @XmlJavaTypeAdapter(StringLongMapXmlAdapter.class) @@ -314,16 +318,6 @@ public class BlockChain { return this.maxBlockSize; } - // Custom transaction fees - public long getNameRegistrationUnitFee() { - return this.nameRegistrationUnitFee; - } - - public long getNameRegistrationUnitFeeTimestamp() { - // FUTURE: we could use a separate structure to indicate fee adjustments for different transaction types - return this.nameRegistrationUnitFeeTimestamp; - } - // Online accounts public long getOnlineAccountsModulusV2Timestamp() { return this.onlineAccountsModulusV2Timestamp; @@ -447,6 +441,16 @@ public class BlockChain { throw new IllegalStateException(String.format("No block timing info available for height %d", ourHeight)); } + public long getNameRegistrationUnitFeeAtTimestamp(long ourTimestamp) { + // Scan through for reward at our height + for (int i = 0; i < nameRegistrationUnitFees.size(); ++i) + if (ourTimestamp >= nameRegistrationUnitFees.get(i).timestamp) + return nameRegistrationUnitFees.get(i).fee; + + // Default to system-wide unit fee + return this.getUnitFee(); + } + /** Validate blockchain config read from JSON */ private void validateConfig() { if (this.genesisInfo == null) diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 144439b2..939181e8 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -655,6 +655,29 @@ public class Controller extends Thread { return lastMisbehaved != null && lastMisbehaved > NTP.getTime() - MISBEHAVIOUR_COOLOFF; }; + /** True if peer has unknown height, lower height or same height and same block signature (unless we don't have their block signature). */ + public static Predicate hasShorterBlockchain = peer -> { + BlockData highestBlockData = getInstance().getChainTip(); + int ourHeight = highestBlockData.getHeight(); + final PeerChainTipData peerChainTipData = peer.getChainTipData(); + + // Ensure we have chain tip data for this peer + if (peerChainTipData == null) + return true; + + // Remove if peer is at a lower height than us + Integer peerHeight = peerChainTipData.getLastHeight(); + if (peerHeight == null || peerHeight < ourHeight) + return true; + + // Don't remove if peer is on a greater height chain than us, or if we don't have their block signature + if (peerHeight > ourHeight || peerChainTipData.getLastBlockSignature() == null) + return false; + + // Remove if signatures match + return Arrays.equals(peerChainTipData.getLastBlockSignature(), highestBlockData.getSignature()); + }; + public static final Predicate hasNoRecentBlock = peer -> { final Long minLatestBlockTimestamp = getMinimumLatestBlockTimestamp(); final PeerChainTipData peerChainTipData = peer.getChainTipData(); @@ -675,7 +698,7 @@ public class Controller extends Thread { public static final Predicate hasInferiorChainTip = peer -> { final PeerChainTipData peerChainTipData = peer.getChainTipData(); final List inferiorChainTips = Synchronizer.getInstance().inferiorChainSignatures; - return peerChainTipData == null || peerChainTipData.getLastBlockSignature() == null || inferiorChainTips.contains(new ByteArray(peerChainTipData.getLastBlockSignature())); + return peerChainTipData == null || peerChainTipData.getLastBlockSignature() == null || inferiorChainTips.contains(ByteArray.wrap(peerChainTipData.getLastBlockSignature())); }; public static final Predicate hasOldVersion = peer -> { @@ -1203,7 +1226,7 @@ public class Controller extends Thread { byte[] signature = getBlockMessage.getSignature(); this.stats.getBlockMessageStats.requests.incrementAndGet(); - ByteArray signatureAsByteArray = new ByteArray(signature); + ByteArray signatureAsByteArray = ByteArray.wrap(signature); CachedBlockMessage cachedBlockMessage = this.blockMessageCache.get(signatureAsByteArray); int blockCacheSize = Settings.getInstance().getBlockCacheSize(); @@ -1283,7 +1306,7 @@ public class Controller extends Thread { if (getChainHeight() - blockData.getHeight() <= blockCacheSize) { this.stats.getBlockMessageStats.cacheFills.incrementAndGet(); - this.blockMessageCache.put(new ByteArray(blockData.getSignature()), blockMessage); + this.blockMessageCache.put(ByteArray.wrap(blockData.getSignature()), blockMessage); } } catch (DataException e) { LOGGER.error(String.format("Repository issue while send block %s to peer %s", Base58.encode(signature), peer), e); diff --git a/src/main/java/org/qortal/controller/Synchronizer.java b/src/main/java/org/qortal/controller/Synchronizer.java index c6e730fd..d574ef87 100644 --- a/src/main/java/org/qortal/controller/Synchronizer.java +++ b/src/main/java/org/qortal/controller/Synchronizer.java @@ -235,6 +235,9 @@ public class Synchronizer extends Thread { // Disregard peers that are on the same block as last sync attempt and we didn't like their chain peers.removeIf(Controller.hasInferiorChainTip); + // Remove peers with unknown height, lower height or same height and same block signature (unless we don't have their block signature) + peers.removeIf(Controller.hasShorterBlockchain); + final int peersBeforeComparison = peers.size(); // Request recent block summaries from the remaining peers, and locate our common block with each @@ -314,7 +317,7 @@ public class Synchronizer extends Thread { case INFERIOR_CHAIN: { // Update our list of inferior chain tips - ByteArray inferiorChainSignature = new ByteArray(peer.getChainTipData().getLastBlockSignature()); + ByteArray inferiorChainSignature = ByteArray.wrap(peer.getChainTipData().getLastBlockSignature()); if (!inferiorChainSignatures.contains(inferiorChainSignature)) inferiorChainSignatures.add(inferiorChainSignature); @@ -343,7 +346,7 @@ public class Synchronizer extends Thread { // fall-through... case NOTHING_TO_DO: { // Update our list of inferior chain tips - ByteArray inferiorChainSignature = new ByteArray(peer.getChainTipData().getLastBlockSignature()); + ByteArray inferiorChainSignature = ByteArray.wrap(peer.getChainTipData().getLastBlockSignature()); if (!inferiorChainSignatures.contains(inferiorChainSignature)) inferiorChainSignatures.add(inferiorChainSignature); @@ -419,7 +422,7 @@ public class Synchronizer extends Thread { public void addInferiorChainSignature(byte[] inferiorSignature) { // Update our list of inferior chain tips - ByteArray inferiorChainSignature = new ByteArray(inferiorSignature); + ByteArray inferiorChainSignature = ByteArray.wrap(inferiorSignature); if (!inferiorChainSignatures.contains(inferiorChainSignature)) inferiorChainSignatures.add(inferiorChainSignature); } diff --git a/src/main/java/org/qortal/controller/tradebot/TradeBot.java b/src/main/java/org/qortal/controller/tradebot/TradeBot.java index 4a44eaa9..6d7ac942 100644 --- a/src/main/java/org/qortal/controller/tradebot/TradeBot.java +++ b/src/main/java/org/qortal/controller/tradebot/TradeBot.java @@ -402,7 +402,7 @@ public class TradeBot implements Listener { long now = NTP.getTime(); long newExpiry = generateExpiry(now); - ByteArray pubkeyByteArray = ByteArray.of(tradeNativeAccount.getPublicKey()); + ByteArray pubkeyByteArray = ByteArray.wrap(tradeNativeAccount.getPublicKey()); // If map entry's timestamp is missing, or within early renewal period, use the new expiry - otherwise use existing timestamp. synchronized (this.ourTradePresenceTimestampsByPubkey) { @@ -489,7 +489,7 @@ public class TradeBot implements Listener { int knownCount = entriesUnknownToPeer.size(); for (TradePresenceData peersTradePresence : peersTradePresences) { - ByteArray pubkeyByteArray = ByteArray.of(peersTradePresence.getPublicKey()); + ByteArray pubkeyByteArray = ByteArray.wrap(peersTradePresence.getPublicKey()); TradePresenceData ourEntry = entriesUnknownToPeer.get(pubkeyByteArray); @@ -546,7 +546,7 @@ public class TradeBot implements Listener { continue; } - ByteArray pubkeyByteArray = ByteArray.of(peersTradePresence.getPublicKey()); + ByteArray pubkeyByteArray = ByteArray.wrap(peersTradePresence.getPublicKey()); // Ignore if we've previously verified this timestamp+publickey combo or sent timestamp is older TradePresenceData existingTradeData = this.safeAllTradePresencesByPubkey.get(pubkeyByteArray); @@ -589,7 +589,7 @@ public class TradeBot implements Listener { continue; } - ByteArray atCodeHash = new ByteArray(atData.getCodeHash()); + ByteArray atCodeHash = ByteArray.wrap(atData.getCodeHash()); Supplier acctSupplier = acctSuppliersByCodeHash.get(atCodeHash); if (acctSupplier == null) { LOGGER.trace("Ignoring trade presence {} from peer {} as AT isn't a known ACCT?", @@ -642,7 +642,7 @@ public class TradeBot implements Listener { public void bridgePresence(long timestamp, byte[] publicKey, byte[] signature, String atAddress) { long expiry = generateExpiry(timestamp); - ByteArray pubkeyByteArray = ByteArray.of(publicKey); + ByteArray pubkeyByteArray = ByteArray.wrap(publicKey); TradePresenceData fakeTradePresenceData = new TradePresenceData(expiry, publicKey, signature, atAddress); diff --git a/src/main/java/org/qortal/crosschain/Litecoin.java b/src/main/java/org/qortal/crosschain/Litecoin.java index 1d5fddb9..02dd466f 100644 --- a/src/main/java/org/qortal/crosschain/Litecoin.java +++ b/src/main/java/org/qortal/crosschain/Litecoin.java @@ -47,9 +47,9 @@ public class Litecoin extends Bitcoiny { // Status verified at https://1209k.com/bitcoin-eye/ele.php?chain=ltc //CLOSED new Server("electrum-ltc.petrkr.net", Server.ConnectionType.SSL, 60002), //CLOSED new Server("electrum-ltc.someguy123.net", Server.ConnectionType.SSL, 50002), + //PHISHY new Server("electrum-ltc.bysh.me", Server.ConnectionType.SSL, 50002), new Server("backup.electrum-ltc.org", Server.ConnectionType.SSL, 443), new Server("electrum.ltc.xurious.com", Server.ConnectionType.SSL, 50002), - new Server("electrum-ltc.bysh.me", Server.ConnectionType.SSL, 50002), new Server("electrum1.cipig.net", Server.ConnectionType.SSL, 20063), new Server("electrum2.cipig.net", Server.ConnectionType.SSL, 20063), new Server("electrum3.cipig.net", Server.ConnectionType.SSL, 20063), diff --git a/src/main/java/org/qortal/crosschain/SupportedBlockchain.java b/src/main/java/org/qortal/crosschain/SupportedBlockchain.java index 5bff7ac9..a26e0e01 100644 --- a/src/main/java/org/qortal/crosschain/SupportedBlockchain.java +++ b/src/main/java/org/qortal/crosschain/SupportedBlockchain.java @@ -62,7 +62,7 @@ public enum SupportedBlockchain { private static final Map> supportedAcctsByCodeHash = Arrays.stream(SupportedBlockchain.values()) .map(supportedBlockchain -> supportedBlockchain.supportedAccts) .flatMap(List::stream) - .collect(Collectors.toUnmodifiableMap(triple -> new ByteArray(triple.getB()), Triple::getC)); + .collect(Collectors.toUnmodifiableMap(triple -> ByteArray.wrap(triple.getB()), Triple::getC)); private static final Map> supportedAcctsByName = Arrays.stream(SupportedBlockchain.values()) .map(supportedBlockchain -> supportedBlockchain.supportedAccts) @@ -94,7 +94,7 @@ public enum SupportedBlockchain { return getAcctMap(); return blockchain.supportedAccts.stream() - .collect(Collectors.toUnmodifiableMap(triple -> new ByteArray(triple.getB()), Triple::getC)); + .collect(Collectors.toUnmodifiableMap(triple -> ByteArray.wrap(triple.getB()), Triple::getC)); } public static Map> getFilteredAcctMap(String specificBlockchain) { @@ -109,7 +109,7 @@ public enum SupportedBlockchain { } public static ACCT getAcctByCodeHash(byte[] codeHash) { - ByteArray wrappedCodeHash = new ByteArray(codeHash); + ByteArray wrappedCodeHash = ByteArray.wrap(codeHash); Supplier acctInstanceSupplier = supportedAcctsByCodeHash.get(wrappedCodeHash); diff --git a/src/main/java/org/qortal/data/group/GroupData.java b/src/main/java/org/qortal/data/group/GroupData.java index c97f5438..ae9a0388 100644 --- a/src/main/java/org/qortal/data/group/GroupData.java +++ b/src/main/java/org/qortal/data/group/GroupData.java @@ -23,6 +23,7 @@ public class GroupData { private ApprovalThreshold approvalThreshold; private int minimumBlockDelay; private int maximumBlockDelay; + public int memberCount; /** Reference to CREATE_GROUP or UPDATE_GROUP transaction, used to rebuild group during orphaning. */ // No need to ever expose this via API diff --git a/src/main/java/org/qortal/transaction/ChatTransaction.java b/src/main/java/org/qortal/transaction/ChatTransaction.java index a486d408..2671c209 100644 --- a/src/main/java/org/qortal/transaction/ChatTransaction.java +++ b/src/main/java/org/qortal/transaction/ChatTransaction.java @@ -29,7 +29,7 @@ public class ChatTransaction extends Transaction { public static final int MAX_DATA_SIZE = 256; public static final int POW_BUFFER_SIZE = 8 * 1024 * 1024; // bytes public static final int POW_DIFFICULTY_WITH_QORT = 8; // leading zero bits - public static final int POW_DIFFICULTY_NO_QORT = 14; // leading zero bits + public static final int POW_DIFFICULTY_NO_QORT = 12; // leading zero bits // Constructors diff --git a/src/main/java/org/qortal/transaction/PresenceTransaction.java b/src/main/java/org/qortal/transaction/PresenceTransaction.java index 8f40f2ac..8076997c 100644 --- a/src/main/java/org/qortal/transaction/PresenceTransaction.java +++ b/src/main/java/org/qortal/transaction/PresenceTransaction.java @@ -184,7 +184,7 @@ public class PresenceTransaction extends Transaction { String signerAddress = Crypto.toAddress(this.transactionData.getCreatorPublicKey()); for (ATData atData : atsData) { - ByteArray atCodeHash = new ByteArray(atData.getCodeHash()); + ByteArray atCodeHash = ByteArray.wrap(atData.getCodeHash()); Supplier acctSupplier = acctSuppliersByCodeHash.get(atCodeHash); if (acctSupplier == null) continue; diff --git a/src/main/java/org/qortal/transaction/RegisterNameTransaction.java b/src/main/java/org/qortal/transaction/RegisterNameTransaction.java index 1ababa88..19f1da5a 100644 --- a/src/main/java/org/qortal/transaction/RegisterNameTransaction.java +++ b/src/main/java/org/qortal/transaction/RegisterNameTransaction.java @@ -39,11 +39,7 @@ public class RegisterNameTransaction extends Transaction { @Override public long getUnitFee(Long timestamp) { - // Use a higher unit fee after the fee increase timestamp - if (timestamp > BlockChain.getInstance().getNameRegistrationUnitFeeTimestamp()) { - return BlockChain.getInstance().getNameRegistrationUnitFee(); - } - return BlockChain.getInstance().getUnitFee(); + return BlockChain.getInstance().getNameRegistrationUnitFeeAtTimestamp(timestamp); } // Navigation diff --git a/src/main/java/org/qortal/utils/ByteArray.java b/src/main/java/org/qortal/utils/ByteArray.java index d3464c9f..30eec3e9 100644 --- a/src/main/java/org/qortal/utils/ByteArray.java +++ b/src/main/java/org/qortal/utils/ByteArray.java @@ -8,12 +8,16 @@ public class ByteArray implements Comparable { private int hash; public final byte[] value; - public ByteArray(byte[] value) { - this.value = Objects.requireNonNull(value); + private ByteArray(byte[] value) { + this.value = value; } - public static ByteArray of(byte[] value) { - return new ByteArray(value); + public static ByteArray wrap(byte[] value) { + return new ByteArray(Objects.requireNonNull(value)); + } + + public static ByteArray copyOf(byte[] value) { + return new ByteArray(Arrays.copyOf(value, value.length)); } @Override @@ -36,12 +40,7 @@ public class ByteArray implements Comparable { byte[] val = this.value; if (h == 0 && val.length > 0) { - h = 1; - - for (int i = 0; i < val.length; ++i) - h = 31 * h + val[i]; - - this.hash = h; + this.hash = h = Arrays.hashCode(val); } return h; } @@ -53,24 +52,7 @@ public class ByteArray implements Comparable { } public int compareToPrimitive(byte[] otherValue) { - byte[] val = this.value; - - if (val.length < otherValue.length) - return -1; - - if (val.length > otherValue.length) - return 1; - - for (int i = 0; i < val.length; ++i) { - int a = val[i] & 0xFF; - int b = otherValue[i] & 0xFF; - if (a < b) - return -1; - if (a > b) - return 1; - } - - return 0; + return Arrays.compareUnsigned(this.value, otherValue); } public String toString() { diff --git a/src/main/resources/blockchain.json b/src/main/resources/blockchain.json index b5999352..e9d6a6f1 100644 --- a/src/main/resources/blockchain.json +++ b/src/main/resources/blockchain.json @@ -4,8 +4,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.001", - "nameRegistrationUnitFee": "5", - "nameRegistrationUnitFeeTimestamp": 1645372800000, + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "useBrokenMD160ForAddresses": false, "requireGroupForApproval": false, "defaultGroupId": 0, diff --git a/src/main/resources/i18n/ApiError_de.properties b/src/main/resources/i18n/ApiError_de.properties index 9ec2cd6d..7a81e07a 100644 --- a/src/main/resources/i18n/ApiError_de.properties +++ b/src/main/resources/i18n/ApiError_de.properties @@ -81,4 +81,3 @@ ORDER_SIZE_TOO_SMALL = order amount too low FILE_NOT_FOUND = Datei nicht gefunden NO_REPLY = peer did not reply with data - diff --git a/src/main/resources/i18n/ApiError_en.properties b/src/main/resources/i18n/ApiError_en.properties index 977b2646..a9ab51c2 100644 --- a/src/main/resources/i18n/ApiError_en.properties +++ b/src/main/resources/i18n/ApiError_en.properties @@ -80,8 +80,4 @@ ORDER_SIZE_TOO_SMALL = order amount too low ### Data ### FILE_NOT_FOUND = file not found -ORDER_SIZE_TOO_SMALL = order size too small - -FILE_NOT_FOUND = file not found - NO_REPLY = peer didn't reply within the allowed time diff --git a/src/main/resources/i18n/ApiError_es.properties b/src/main/resources/i18n/ApiError_es.properties index 36d3ff3a..473a8810 100644 --- a/src/main/resources/i18n/ApiError_es.properties +++ b/src/main/resources/i18n/ApiError_es.properties @@ -1,121 +1,83 @@ -# Keys are from api.ApiError enum -# "localeLang": "es", - -### Common ### +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# Keys are from api.ApiError enum + +# "localeLang": "es", + +### Common ### JSON = no se pudo analizar el mensaje JSON -#failed to parse JSON message - + INSUFFICIENT_BALANCE = saldo insuficiente -#insufficient balance - + UNAUTHORIZED = Llamada API no autorizada -#API call unauthorized - + REPOSITORY_ISSUE = error de repositorio -#repository error - + NON_PRODUCTION = esta llamada API no está permitida para sistemas de producción -#this API call is not permitted for production systems - + BLOCKCHAIN_NEEDS_SYNC = blockchain necesita sincronizarse primero -#blockchain needs to synchronize first - + NO_TIME_SYNC = aún no hay sincronización de reloj -#no clock synchronization yet - -### Validation ### + +### Validation ### INVALID_SIGNATURE = firma no válida -#invalid signature - + INVALID_ADDRESS = dirección no válida -#invalid address - + INVALID_PUBLIC_KEY = clave pública no válida -#invalid public key - + INVALID_DATA = datos no válidos -#invalid data - + INVALID_NETWORK_ADDRESS = dirección de red no válida -#invalid network address - + ADDRESS_UNKNOWN = dirección de cuenta desconocida -#account address unknown - + INVALID_CRITERIA = criterio de búsqueda no válido -#invalid search criteria - + INVALID_REFERENCE = referencia no válida -#invalid reference - + TRANSFORMATION_ERROR = no se pudo transformar JSON en transacción -#could not transform JSON into transaction - + INVALID_PRIVATE_KEY = clave privada no válida -#invalid private key - + INVALID_HEIGHT = altura de bloque no válida -#invalid block height - + CANNOT_MINT = la cuenta no puede acuñar -#account cannot mint - -### Blocks ### + +### Blocks ### BLOCK_UNKNOWN = bloque desconocido -#block unknown - -### Transactions ### + +### Transactions ### TRANSACTION_UNKNOWN = transacción desconocida -#transaction unknown - + PUBLIC_KEY_NOT_FOUND = clave pública no encontrada -#public key not found - -# this one is special in that caller expected to pass two additional strings, hence the two %s + +# this one is special in that caller expected to pass two additional strings, hence the two %s TRANSACTION_INVALID = transacción no válida: %s (%s) -#transaction invalid: %s (%s) - -### Naming ### + +### Naming ### NAME_UNKNOWN = nombre desconocido -#name unknown - -### Asset ### + +### Asset ### INVALID_ASSET_ID = ID de recurso no válido -#invalid asset ID - + INVALID_ORDER_ID = ID de pedido de activo no válido -#invalid asset order ID - + ORDER_UNKNOWN = ID de pedido de activo desconocido -#unknown asset order ID - -### Groups ### + +### Groups ### GROUP_UNKNOWN = grupo desconocido -#group unknown - -### Foreign Blockchain ### + +### Foreign Blockchain ### FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = problema de cadena de bloques extranjera o red ElectrumX -#foreign blockchain or ElectrumX network issue - + FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = saldo insuficiente en blockchain extranjera -#insufficient balance on foreign blockchain - + FOREIGN_BLOCKCHAIN_TOO_SOON = demasiado pronto para transmitir transacciones de blockchain extranjeras (LockTime/mediana de tiempo de bloqueo) -#too soon to broadcast foreign blockchain transaction (LockTime/median block time) - -### Trade Portal ### + +### Trade Portal ### ORDER_SIZE_TOO_SMALL = importe del pedido demasiado bajo -#order amount too low - -### Data ### + +### Data ### FILE_NOT_FOUND = archivo no encontrado -#file not found - -ORDER_SIZE_TOO_SMALL = tamaño del pedido demasiado pequeño -#order size too small - -FILE_NOT_FOUND = archivo no encontrado -#file not found - + NO_REPLY = el compañero no respondió dentro del tiempo permitido -#peer didn't reply within the allowed time \ No newline at end of file diff --git a/src/main/resources/i18n/ApiError_fi.properties b/src/main/resources/i18n/ApiError_fi.properties index f9518700..af5e890e 100644 --- a/src/main/resources/i18n/ApiError_fi.properties +++ b/src/main/resources/i18n/ApiError_fi.properties @@ -1,10 +1,7 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # Keys are from api.ApiError enum -# Kielen muuttaminen suomeksi tapahtuu settings.json-tiedostossa -# # "localeLang": "fi", -# muista pilkku lopussa jos komento ei ole viimeisellä rivillä ### Common ### JSON = JSON-viestin jaottelu epäonnistui @@ -83,4 +80,4 @@ ORDER_SIZE_TOO_SMALL = order amount too low ### Data ### FILE_NOT_FOUND = file not found -NO_REPLY = peer did not reply with data \ No newline at end of file +NO_REPLY = peer did not reply with data diff --git a/src/main/resources/i18n/ApiError_fr.properties b/src/main/resources/i18n/ApiError_fr.properties index 122b6d03..f278e6a1 100644 --- a/src/main/resources/i18n/ApiError_fr.properties +++ b/src/main/resources/i18n/ApiError_fr.properties @@ -1,24 +1,46 @@ -### Commun ### +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# Keys are from api.ApiError enum + +# "localeLang": "fr", + +### Commun ### JSON = échec de l'analyse du message JSON + INSUFFICIENT_BALANCE = balance insuffisante + UNAUTHORIZED = appel de l’API non autorisé + REPOSITORY_ISSUE = erreur de dépôt + NON_PRODUCTION = cet appel API n'est pas autorisé pour les systèmes en production + BLOCKCHAIN_NEEDS_SYNC = la blockchain doit d'abord être synchronisée + NO_TIME_SYNC = heure pas encore synchronisée ### Validation ### INVALID_SIGNATURE = signature invalide + INVALID_ADDRESS = adresse invalide + INVALID_PUBLIC_KEY = clé publique invalide + INVALID_DATA = données invalides + INVALID_NETWORK_ADDRESS = adresse réseau invalide + ADDRESS_UNKNOWN = adresse de compte inconnue + INVALID_CRITERIA = critère de recherche invalide + INVALID_REFERENCE = référence invalide + TRANSFORMATION_ERROR = ne peut pas transformer JSON en transaction + INVALID_PRIVATE_KEY = clé privée invalide + INVALID_HEIGHT = hauteur de bloc invalide + CANNOT_MINT = le compte ne peut pas mint ### Blocks ### @@ -26,6 +48,7 @@ BLOCK_UNKNOWN = bloc inconnu ### Transactions ### TRANSACTION_UNKNOWN = opération inconnue + PUBLIC_KEY_NOT_FOUND = clé publique introuvable # celui-ci est spécial dans le sens où l'appelant doit passer deux chaînes supplémentaires, d'où les deux %s @@ -36,7 +59,9 @@ NAME_UNKNOWN = nom inconnu ### Asset ### INVALID_ASSET_ID = identifiant d'actif invalide + INVALID_ORDER_ID = identifiant de commande d'actif non valide + ORDER_UNKNOWN = identifiant d'ordre d'actif inconnu ### Groupes ### @@ -44,7 +69,9 @@ GROUP_UNKNOWN = groupe inconnu ### Blockchain étrangère ### FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = Problème blokchain étrangère ou de réseau ElectrumX + FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = solde insuffisant sur la blockchain étrangère + FOREIGN_BLOCKCHAIN_TOO_SOON = trop tôt pour diffuser la transaction sur la blockchain étrangère (temps de verrouillage/temps de bloc médian) ### Portail de trading ### @@ -52,4 +79,5 @@ ORDER_SIZE_TOO_SMALL = montant de commande trop bas ### Données ### FILE_NOT_FOUND = fichier introuvable -NO_REPLY = le pair n'a pas renvoyé de données \ No newline at end of file + +NO_REPLY = le pair n'a pas renvoyé de données diff --git a/src/main/resources/i18n/ApiError_hu.properties b/src/main/resources/i18n/ApiError_hu.properties index 8aa783da..c86837e5 100644 --- a/src/main/resources/i18n/ApiError_hu.properties +++ b/src/main/resources/i18n/ApiError_hu.properties @@ -1,8 +1,5 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) -# Keys are from api.ApiError enum - -# Magyar myelvre forditotta: Szkíta (Scythian). 2021 Augusztus 7. -# Az alkalmazás nyelvének magyarra való változtatása a settings.json oldalon történik. +# Keys are from api.ApiError enum # Magyar nyelvre forditotta: Szkíta (Scythian). 2021 Augusztus 7. # "localeLang": "hu", @@ -15,7 +12,7 @@ UNAUTHORIZED = nem engedélyezett API-hívás REPOSITORY_ISSUE = adattári hiba -NON_PRODUCTION = ez az API-hívás nem engedélyezett korlátozott rendszereken +NON_PRODUCTION = ez az API-hívás nem engedélyezett éles rendszereken BLOCKCHAIN_NEEDS_SYNC = a blokkláncnak még szinkronizálnia kell @@ -24,15 +21,15 @@ NO_TIME_SYNC = az óraszinkronizálás még nem történt meg ### Validation ### INVALID_SIGNATURE = érvénytelen aláírás -INVALID_ADDRESS = érvénytelen fiók cím +INVALID_ADDRESS = érvénytelen fiókcím INVALID_PUBLIC_KEY = érvénytelen nyilvános kulcs INVALID_DATA = érvénytelen adat -INVALID_NETWORK_ADDRESS = érvénytelen hálózat cím +INVALID_NETWORK_ADDRESS = érvénytelen hálózatcím -ADDRESS_UNKNOWN = ismeretlen fiók cím +ADDRESS_UNKNOWN = ismeretlen fiókcím INVALID_CRITERIA = érvénytelen keresési feltétel @@ -83,4 +80,4 @@ ORDER_SIZE_TOO_SMALL = rendelési összeg túl alacsony ### Data ### FILE_NOT_FOUND = fájl nem található -NO_REPLY = a másik csomópont nem válaszolt \ No newline at end of file +NO_REPLY = a másik csomópont nem válaszolt diff --git a/src/main/resources/i18n/ApiError_it.properties b/src/main/resources/i18n/ApiError_it.properties index 33993200..8c0f3da2 100644 --- a/src/main/resources/i18n/ApiError_it.properties +++ b/src/main/resources/i18n/ApiError_it.properties @@ -1,26 +1,22 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) -# Keys are from api.ApiError enum -# Italian translation by Pabs 2021 +# Keys are from api.ApiError enum # Italian translation by Pabs 2021 -# La modifica della lingua dell'UI è fatta nel file Settings.json -# # "localeLang": "it", -# Si prega ricordare la virgola alla fine, se questo comando non è sull'ultima riga ### Common ### JSON = Impossibile analizzare il messaggio JSON -INSUFFICIENT_BALANCE = insufficient balance +INSUFFICIENT_BALANCE = bilancio insufficiente UNAUTHORIZED = Chiamata API non autorizzata -REPOSITORY_ISSUE = errore del repositorio +REPOSITORY_ISSUE = errore del repository NON_PRODUCTION = questa chiamata API non è consentita per i sistemi di produzione -BLOCKCHAIN_NEEDS_SYNC = blockchain deve prima sincronizzarsi +BLOCKCHAIN_NEEDS_SYNC = la blockchain deve sincronizzarsi -NO_TIME_SYNC = nessuna sincronizzazione dell'orologio ancora +NO_TIME_SYNC = nessuna sincronizzazione ### Validation ### INVALID_SIGNATURE = firma non valida @@ -39,7 +35,7 @@ INVALID_CRITERIA = criteri di ricerca non validi INVALID_REFERENCE = riferimento non valido -TRANSFORMATION_ERROR = non è stato possibile trasformare JSON in transazione +TRANSFORMATION_ERROR = non è stato possibile trasformare il JSON INVALID_PRIVATE_KEY = chiave privata non valida @@ -62,26 +58,26 @@ TRANSACTION_INVALID = transazione non valida: %s (%s) NAME_UNKNOWN = nome sconosciuto ### Asset ### -INVALID_ASSET_ID = identificazione risorsa non valida +INVALID_ASSET_ID = risorsa non valida -INVALID_ORDER_ID = identificazione di ordine di risorsa non valida +INVALID_ORDER_ID = ordine di risorsa non valida -ORDER_UNKNOWN = identificazione di ordine di risorsa sconosciuta +ORDER_UNKNOWN = ordine di risorsa sconosciuta ### Groups ### GROUP_UNKNOWN = gruppo sconosciuto ### Foreign Blockchain ### -FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = foreign blokchain or ElectrumX network issue +FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = problema nella blockchain esterna o nella rete ElectrumX -FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = insufficient balance on foreign blockchain +FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = bilancio insufficiente nella blockchain esterna -FOREIGN_BLOCKCHAIN_TOO_SOON = too soon to broadcast foreign blockchain transaction (LockTime/median block time) +FOREIGN_BLOCKCHAIN_TOO_SOON = troppo presto per distribuire la transazione (sospensione LockTime/median) ### Trade Portal ### -ORDER_SIZE_TOO_SMALL = order amount too low +ORDER_SIZE_TOO_SMALL = quantità d'ordine troppo bassa ### Data ### FILE_NOT_FOUND = file not found -NO_REPLY = peer did not reply with data \ No newline at end of file +NO_REPLY = il peer non ha fornito dati diff --git a/src/main/resources/i18n/ApiError_nl.properties b/src/main/resources/i18n/ApiError_nl.properties index 5c54cf64..0501fe9a 100644 --- a/src/main/resources/i18n/ApiError_nl.properties +++ b/src/main/resources/i18n/ApiError_nl.properties @@ -41,7 +41,7 @@ INVALID_PRIVATE_KEY = ongeldige private key INVALID_HEIGHT = ongeldige blokhoogte -CANNOT_MINT = account kan niet munten +CANNOT_MINT = account kan niet minten ### Blocks ### BLOCK_UNKNOWN = blok onbekend @@ -68,16 +68,16 @@ ORDER_UNKNOWN = onbekende asset order ID GROUP_UNKNOWN = onbekende groep ### Foreign Blockchain ### -FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = foreign blokchain or ElectrumX network issue +FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = blockchain of ElectrumX network probleem -FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = insufficient balance on foreign blockchain +FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = onvoldoende saldo blockchain -FOREIGN_BLOCKCHAIN_TOO_SOON = too soon to broadcast foreign blockchain transaction (LockTime/median block time) +FOREIGN_BLOCKCHAIN_TOO_SOON = nog niet gereed om de blockchain transactie uittevoeren (LockTime/median block time) ### Trade Portal ### -ORDER_SIZE_TOO_SMALL = order amount too low +ORDER_SIZE_TOO_SMALL = order bedrag te laag ### Data ### -FILE_NOT_FOUND = file not found +FILE_NOT_FOUND = file niet gevonden -NO_REPLY = peer did not reply with data \ No newline at end of file +NO_REPLY = peer reageerd niet met data diff --git a/src/main/resources/i18n/ApiError_ru.properties b/src/main/resources/i18n/ApiError_ru.properties index 61948a2a..52580ac8 100644 --- a/src/main/resources/i18n/ApiError_ru.properties +++ b/src/main/resources/i18n/ApiError_ru.properties @@ -1,83 +1,83 @@ -#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) -# Keys are from api.ApiError enum - -# "localeLang": "ru", - -### Common ### -JSON = не удалось разобрать сообщение json - -INSUFFICIENT_BALANCE = insufficient balance - -UNAUTHORIZED = вызов API не авторизован - -REPOSITORY_ISSUE = ошибка репозитория - -NON_PRODUCTION = этот вызов API не разрешен для производственных систем - -BLOCKCHAIN_NEEDS_SYNC = блокчейн должен сначала синхронизироваться - -NO_TIME_SYNC = no clock synchronization yet - -### Validation ### -INVALID_SIGNATURE = недействительная подпись - -INVALID_ADDRESS = неизвестный адрес - -INVALID_PUBLIC_KEY = недействительный открытый ключ - -INVALID_DATA = неверные данные - -INVALID_NETWORK_ADDRESS = неверный сетевой адрес - -ADDRESS_UNKNOWN = неизвестная учетная запись - -INVALID_CRITERIA = неверные критерии поиска - -INVALID_REFERENCE = неверная ссылка - -TRANSFORMATION_ERROR = не удалось преобразовать JSON в транзакцию - -INVALID_PRIVATE_KEY = неверный приватный ключ - -INVALID_HEIGHT = недопустимая высота блока - -CANNOT_MINT = аккаунт не может чеканить - -### Blocks ### -BLOCK_UNKNOWN = неизвестный блок - -### Transactions ### -TRANSACTION_UNKNOWN = транзакция неизвестна - -PUBLIC_KEY_NOT_FOUND = открытый ключ не найден - -# this one is special in that caller expected to pass two additional strings, hence the two %s -TRANSACTION_INVALID = транзакция недействительна: %s (%s) - -### Naming ### -NAME_UNKNOWN = имя неизвестно - -### Asset ### -INVALID_ASSET_ID = неверный идентификатор актива - -INVALID_ORDER_ID = неверный идентификатор заказа актива - -ORDER_UNKNOWN = неизвестный идентификатор заказа актива - -### Groups ### -GROUP_UNKNOWN = неизвестная группа - -### Foreign Blockchain ### -FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = foreign blokchain or ElectrumX network issue - -FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = insufficient balance on foreign blockchain - -FOREIGN_BLOCKCHAIN_TOO_SOON = too soon to broadcast foreign blockchain transaction (LockTime/median block time) - -### Trade Portal ### -ORDER_SIZE_TOO_SMALL = order amount too low - -### Data ### -FILE_NOT_FOUND = file not found - -NO_REPLY = peer did not reply with data \ No newline at end of file +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# Keys are from api.ApiError enum + +# "localeLang": "ru", + +### Common ### +JSON = не удалось разобрать сообщение json + +INSUFFICIENT_BALANCE = недостаточный баланс + +UNAUTHORIZED = вызов API не авторизован + +REPOSITORY_ISSUE = ошибка репозитория + +NON_PRODUCTION = этот вызов API не разрешен для производственных систем + +BLOCKCHAIN_NEEDS_SYNC = блокчейн должен сначала синхронизироваться + +NO_TIME_SYNC = пока нет синхронизации часов + +### Validation ### +INVALID_SIGNATURE = недействительная подпись + +INVALID_ADDRESS = неизвестный адрес + +INVALID_PUBLIC_KEY = недействительный открытый ключ + +INVALID_DATA = неверные данные + +INVALID_NETWORK_ADDRESS = неверный адрес сети + +ADDRESS_UNKNOWN = неизвестная учетная запись + +INVALID_CRITERIA = неверные критерии поиска + +INVALID_REFERENCE = неверная ссылка + +TRANSFORMATION_ERROR = не удалось преобразовать JSON в транзакцию + +INVALID_PRIVATE_KEY = неверный приватный ключ + +INVALID_HEIGHT = недопустимая высота блока + +CANNOT_MINT = аккаунт не может чеканить + +### Blocks ### +BLOCK_UNKNOWN = неизвестный блок + +### Transactions ### +TRANSACTION_UNKNOWN = транзакция неизвестна + +PUBLIC_KEY_NOT_FOUND = открытый ключ не найден + +# this one is special in that caller expected to pass two additional strings, hence the two %s +TRANSACTION_INVALID = транзакция недействительна: %s (%s) + +### Naming ### +NAME_UNKNOWN = имя неизвестно + +### Asset ### +INVALID_ASSET_ID = неверный идентификатор актива + +INVALID_ORDER_ID = неверный идентификатор заказа актива + +ORDER_UNKNOWN = неизвестный идентификатор заказа актива + +### Groups ### +GROUP_UNKNOWN = неизвестная группа + +### Foreign Blockchain ### +FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = проблема с внешним блокчейном или сетью ElectrumX + +FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = недостаточный баланс на внешнем блокчейне + +FOREIGN_BLOCKCHAIN_TOO_SOON = слишком рано для трансляции транзакции во внений блокчей (время блокировки/среднее время блока) + +### Trade Portal ### +ORDER_SIZE_TOO_SMALL = слишком маленькая сумма ордера + +### Data ### +FILE_NOT_FOUND = файл не найден + +NO_REPLY = узел не ответил данными diff --git a/src/main/resources/i18n/ApiError_sv.properties b/src/main/resources/i18n/ApiError_sv.properties new file mode 100644 index 00000000..6a895425 --- /dev/null +++ b/src/main/resources/i18n/ApiError_sv.properties @@ -0,0 +1,83 @@ +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# Keys are from api.ApiError enum + +# "localeLang": "sv", + +### Common ### +JSON = misslyckades att tolka JSON meddelande + +INSUFFICIENT_BALANCE = otillräcklig balans + +UNAUTHORIZED = API obehörigt anrop + +REPOSITORY_ISSUE = fel i lagret + +NON_PRODUCTION = detta API-anrop är inte tillåtet för produktionssystem + +BLOCKCHAIN_NEEDS_SYNC = blockchain måste synkroniseras först + +NO_TIME_SYNC = ingen klocksynkronisering ännu + +### Validation ### +INVALID_SIGNATURE = ogiltig signatur + +INVALID_ADDRESS = ogiltig adress + +INVALID_PUBLIC_KEY = ogiltig offentlig nyckel + +INVALID_DATA = ogiltig data + +INVALID_NETWORK_ADDRESS = ogiltig nätverksadress + +ADDRESS_UNKNOWN = okänd kontoadress + +INVALID_CRITERIA = ogiltiga sökkriterier + +INVALID_REFERENCE = ogiltig referens + +TRANSFORMATION_ERROR = kunde inte omvandla JSON till en transaktion + +INVALID_PRIVATE_KEY = ogiltig privat nyckel + +INVALID_HEIGHT = ogiltig blockhöjd + +CANNOT_MINT = konto kan inte prägla QORT + +### Blocks ### +BLOCK_UNKNOWN = okänt block + +### Transactions ### +TRANSACTION_UNKNOWN = okänd transaktion + +PUBLIC_KEY_NOT_FOUND = hittade inte en offentlig nyckel + +# this one is special in that caller expected to pass two additional strings, hence the two %s +TRANSACTION_INVALID = ogiltig transaktion: %s (%s) + +### Naming ### +NAME_UNKNOWN = okänt namn + +### Asset ### +INVALID_ASSET_ID = ogiltigt tillgångs-ID + +INVALID_ORDER_ID = ogiltigt tillgångsbeställnings-ID + +ORDER_UNKNOWN = okänt tillgångsbeställnings-ID + +### Groups ### +GROUP_UNKNOWN = okänd grupp + +### Foreign Blockchain ### +FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = utländsk blockchain eller ElectrumX nätverksproblem + +FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = otillräcklig balans på utländsk blockchain + +FOREIGN_BLOCKCHAIN_TOO_SOON = för tidigt för att sända utländsk blockkedjetransaktion (LockTime/medianblocktid) + +### Trade Portal ### +ORDER_SIZE_TOO_SMALL = beställningssumman för låg + +### Data ### +FILE_NOT_FOUND = filen hittades inte + +NO_REPLY = noden svarade inte inom den tillåtna tiden diff --git a/src/main/resources/i18n/ApiError_zh_CN.properties b/src/main/resources/i18n/ApiError_zh_CN.properties new file mode 100644 index 00000000..e2955506 --- /dev/null +++ b/src/main/resources/i18n/ApiError_zh_CN.properties @@ -0,0 +1,83 @@ +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# Keys are from api.ApiError enum + +# "localeLang": "zh_CN", + +### Common ### +JSON = 无法解析JSON文件信息 + +INSUFFICIENT_BALANCE = 钱包余额不足 + +UNAUTHORIZED = 未授权的API指令 + +REPOSITORY_ISSUE = 数据库错误 + +NON_PRODUCTION = 此API指令已被节点禁止 + +BLOCKCHAIN_NEEDS_SYNC = 请先同步区块链 + +NO_TIME_SYNC = 同步时间失败 + +### Validation ### +INVALID_SIGNATURE = 无效的签名 + +INVALID_ADDRESS = 无效的钱包地址 + +INVALID_PUBLIC_KEY = 无效的公共密钥 + +INVALID_DATA = 无效的数据 + +INVALID_NETWORK_ADDRESS = 无效的网络地址 + +ADDRESS_UNKNOWN = 未知的钱包地址 + +INVALID_CRITERIA = 无效的搜寻关键词 + +INVALID_REFERENCE = 无效的参考资料 + +TRANSFORMATION_ERROR = 未能将JSON文件转换成交易 + +INVALID_PRIVATE_KEY = 无效的私人密钥 + +INVALID_HEIGHT = 无效的区块链高度 + +CANNOT_MINT = 账号不能铸币 + +### Blocks ### +BLOCK_UNKNOWN = 未知的区块 + +### Transactions ### +TRANSACTION_UNKNOWN = 未知的交易 + +PUBLIC_KEY_NOT_FOUND = 找不到有效的公共密钥 + +# this one is special in that caller expected to pass two additional strings, hence the two %s +TRANSACTION_INVALID = 无效的交易: %s (%s) + +### Naming ### +NAME_UNKNOWN = 未知的名称 + +### Asset ### +INVALID_ASSET_ID = 无效的资产ID + +INVALID_ORDER_ID = 无效的资产交易ID + +ORDER_UNKNOWN = 未知的资产交易ID + +### Groups ### +GROUP_UNKNOWN = 未知的群组 + +### Foreign Blockchain ### +FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = 其他区块链网络出现异常 + +FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = 请确保钱包余额足够(包含支付网络手续费) + +FOREIGN_BLOCKCHAIN_TOO_SOON = 执行动作太快了 (LockTime/median block time) + +### Trade Portal ### +ORDER_SIZE_TOO_SMALL = 交易数量太少 + +### Data ### +FILE_NOT_FOUND = 档案不存在 + +NO_REPLY = 其他节点在指定时间内没有回应 diff --git a/src/main/resources/i18n/ApiError_zh_TW.properties b/src/main/resources/i18n/ApiError_zh_TW.properties new file mode 100644 index 00000000..d2ddf540 --- /dev/null +++ b/src/main/resources/i18n/ApiError_zh_TW.properties @@ -0,0 +1,83 @@ +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# Keys are from api.ApiError enum + +# "localeLang": "zh_TW", + +### Common ### +JSON = 無法解析JSON文件信息 + +INSUFFICIENT_BALANCE = 錢包餘額不足 + +UNAUTHORIZED = 未授權的API指令 + +REPOSITORY_ISSUE = 數據庫錯誤 + +NON_PRODUCTION = 此API指令已被節點禁止 + +BLOCKCHAIN_NEEDS_SYNC = 請先同步區塊鏈 + +NO_TIME_SYNC = 同步時間失敗 + +### Validation ### +INVALID_SIGNATURE = 無效的簽名 + +INVALID_ADDRESS = 無效的錢包地址 + +INVALID_PUBLIC_KEY = 無效的公共密鑰 + +INVALID_DATA = 無效的數據 + +INVALID_NETWORK_ADDRESS = 無效的網絡地址 + +ADDRESS_UNKNOWN = 未知的錢包地址 + +INVALID_CRITERIA = 無效的搜尋關鍵詞 + +INVALID_REFERENCE = 無效的參考資料 + +TRANSFORMATION_ERROR = 未能將JSON文件轉換成交易 + +INVALID_PRIVATE_KEY = 無效的私人密鑰 + +INVALID_HEIGHT = 無效的區塊鏈高度 + +CANNOT_MINT = 賬號不能鑄幣 + +### Blocks ### +BLOCK_UNKNOWN = 未知的區塊 + +### Transactions ### +TRANSACTION_UNKNOWN = 未知的交易 + +PUBLIC_KEY_NOT_FOUND = 找不到有效的公共密鑰 + +# this one is special in that caller expected to pass two additional strings, hence the two %s +TRANSACTION_INVALID = 無效的交易: %s (%s) + +### Naming ### +NAME_UNKNOWN = 未知的名稱 + +### Asset ### +INVALID_ASSET_ID = 無效的資產ID + +INVALID_ORDER_ID = 無效的資產交易ID + +ORDER_UNKNOWN = 未知的資產交易ID + +### Groups ### +GROUP_UNKNOWN = 未知的群組 + +### Foreign Blockchain ### +FOREIGN_BLOCKCHAIN_NETWORK_ISSUE = 其他區塊鏈網絡出現異常 + +FOREIGN_BLOCKCHAIN_BALANCE_ISSUE = 請確保錢包餘額足夠(包含支付網絡手續費) + +FOREIGN_BLOCKCHAIN_TOO_SOON = 執行動作太快 (LockTime/median block time) + +### Trade Portal ### +ORDER_SIZE_TOO_SMALL = 交易數量太少 + +### Data ### +FILE_NOT_FOUND = 檔案不存在 + +NO_REPLY = 其他節點在指定時間内沒有回應 diff --git a/src/main/resources/i18n/SysTray_de.properties b/src/main/resources/i18n/SysTray_de.properties index 0f2a93dc..1880aa27 100644 --- a/src/main/resources/i18n/SysTray_de.properties +++ b/src/main/resources/i18n/SysTray_de.properties @@ -1,10 +1,10 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # SysTray pop-up menu -AUTO_UPDATE = Automatisches Update - APPLYING_UPDATE_AND_RESTARTING = Automatisches Update anwenden und neu starten … +AUTO_UPDATE = Automatisches Update + BLOCK_HEIGHT = height BUILD_VERSION = Build-Version @@ -23,6 +23,8 @@ DB_BACKUP = Datenbank Backup DB_CHECKPOINT = Datenbank Kontrollpunkt +DB_MAINTENANCE = Datenbank Instandhaltung + EXIT = Verlassen MINTING_DISABLED = NOT minting @@ -33,6 +35,8 @@ OPEN_UI = Öffne UI PERFORMING_DB_CHECKPOINT = Speichern nicht übergebener Datenbank Änderungen … +PERFORMING_DB_MAINTENANCE = Planmäßige Wartung durchführen... + SYNCHRONIZE_CLOCK = Synchronisiere Uhr SYNCHRONIZING_BLOCKCHAIN = Synchronisierung diff --git a/src/main/resources/i18n/SysTray_en.properties b/src/main/resources/i18n/SysTray_en.properties index 07541339..296f9760 100644 --- a/src/main/resources/i18n/SysTray_en.properties +++ b/src/main/resources/i18n/SysTray_en.properties @@ -1,10 +1,10 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # SysTray pop-up menu -AUTO_UPDATE = Auto Update - APPLYING_UPDATE_AND_RESTARTING = Applying automatic update and restarting... +AUTO_UPDATE = Auto Update + BLOCK_HEIGHT = height BUILD_VERSION = Build version @@ -21,10 +21,10 @@ CREATING_BACKUP_OF_DB_FILES = Creating backup of database files... DB_BACKUP = Database Backup -DB_MAINTENANCE = Database Maintenance - DB_CHECKPOINT = Database Checkpoint +DB_MAINTENANCE = Database Maintenance + EXIT = Exit MINTING_DISABLED = NOT minting diff --git a/src/main/resources/i18n/SysTray_es.properties b/src/main/resources/i18n/SysTray_es.properties index 0e5a3ba8..d4b931d4 100644 --- a/src/main/resources/i18n/SysTray_es.properties +++ b/src/main/resources/i18n/SysTray_es.properties @@ -1,64 +1,44 @@ -# SysTray pop-up menu - -AUTO_UPDATE = Actualización automática -#Auto Update - +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# SysTray pop-up menu + APPLYING_UPDATE_AND_RESTARTING = Aplicando actualización automática y reiniciando... -#Applying automatic update and restarting... - + +AUTO_UPDATE = Actualización automática + BLOCK_HEIGHT = altura -#height - + BUILD_VERSION = Versión de compilación -#Build version - + CHECK_TIME_ACCURACY = Comprobar la precisión del tiempo -#Check time accuracy - + CONNECTING = Conectando -#Connecting - + CONNECTION = conexión -#connection - + CONNECTIONS = conexiones -#connections - + CREATING_BACKUP_OF_DB_FILES = Creando una copia de seguridad de los archivos de la base de datos... -#Creating backup of database files... - + DB_BACKUP = Copia de seguridad de la base de datos -#Database Backup - -DB_MAINTENANCE = Mantenimiento de la base de datos -#Database Maintenance - + DB_CHECKPOINT = Punto de control de la base de datos -#Database Checkpoint - + +DB_MAINTENANCE = Mantenimiento de la base de datos + EXIT = Salir -#Exit - -MINTING_DISABLED = NO acuñar -#NOT minting - -MINTING_ENABLED = \u2714 Acuñación -#\u2714 Minting - + +MINTING_DISABLED = Acuñación NO habilitada + +MINTING_ENABLED = \u2714 Acuñación habilitada + OPEN_UI = IU abierta -#Open UI - + PERFORMING_DB_CHECKPOINT = Guardando cambios de base de datos no confirmados... -#Saving uncommitted database changes... - + PERFORMING_DB_MAINTENANCE = Realizando mantenimiento programado... -#Performing scheduled maintenance... - + SYNCHRONIZE_CLOCK = Sincronizar reloj -#Synchronize clock - + SYNCHRONIZING_BLOCKCHAIN = Sincronizando -#Synchronizing - + SYNCHRONIZING_CLOCK = Sincronizando reloj -#Synchronizing clock \ No newline at end of file diff --git a/src/main/resources/i18n/SysTray_fi.properties b/src/main/resources/i18n/SysTray_fi.properties index edd062bc..07289551 100644 --- a/src/main/resources/i18n/SysTray_fi.properties +++ b/src/main/resources/i18n/SysTray_fi.properties @@ -1,10 +1,10 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # SysTray pop-up menu -AUTO_UPDATE = Automaattinen päivitys - APPLYING_UPDATE_AND_RESTARTING = Automaattinen päivitys käynnissä, uudelleenkäynnistys seuraa... +AUTO_UPDATE = Automaattinen päivitys + BLOCK_HEIGHT = korkeus BUILD_VERSION = Versio @@ -21,10 +21,10 @@ CREATING_BACKUP_OF_DB_FILES = Luodaan varmuuskopio tietokannan tiedostoista... DB_BACKUP = Tietokannan varmuuskopio -DB_MAINTENANCE = Database Maintenance - DB_CHECKPOINT = Tietokannan varmistuspiste +DB_MAINTENANCE = Tietokannan ylläpito + EXIT = Pois MINTING_DISABLED = EI lyö rahaa @@ -35,7 +35,7 @@ OPEN_UI = Avaa UI PERFORMING_DB_CHECKPOINT = Tallentaa kommittoidut tietokantamuutokset... -PERFORMING_DB_MAINTENANCE = Performing scheduled maintenance... +PERFORMING_DB_MAINTENANCE = Suoritetaan määräaikaishuoltoa... SYNCHRONIZE_CLOCK = Synkronisoi kello diff --git a/src/main/resources/i18n/SysTray_fr.properties b/src/main/resources/i18n/SysTray_fr.properties index b8aac433..61e8002a 100644 --- a/src/main/resources/i18n/SysTray_fr.properties +++ b/src/main/resources/i18n/SysTray_fr.properties @@ -1,41 +1,44 @@ -AUTO_UPDATE = Mise à jour automatique - -APPLYING_UPDATE_AND_RESTARTING = Application de la mise à jour automatique et redémarrage... - -BLOCK_HEIGHT = hauteur - -BUILD_VERSION = Numéro de version - -CHECK_TIME_ACCURACY = Vérifier l'heure - -CONNECTING = Connexion en cours - -CONNECTION = connexion - -CONNECTIONS = connexions - -CREATING_BACKUP_OF_DB_FILES = Création d'une sauvegarde des fichiers de la base de données... - -DB_BACKUP = Sauvegarde de la base de données - -DB_MAINTENANCE = Maintenance de la base de données - -DB_CHECKPOINT = Point de contrôle de la base de données - -EXIT = Quitter - -MINTING_DISABLED = NE mint PAS - -MINTING_ENABLED = \u2714 Minting - -OPEN_UI = Ouvrir l'interface - -PERFORMING_DB_CHECKPOINT = Enregistrement des modifications de base de données non validées... - -PERFORMING_DB_MAINTENANCE = Entrain d'effectuer la maintenance programmée... - -SYNCHRONIZE_CLOCK = Mettre l'heure à jour - -SYNCHRONIZING_BLOCKCHAIN = Synchronisation - -SYNCHRONIZING_CLOCK = Synchronisation de l'heure +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# SysTray pop-up menu + +APPLYING_UPDATE_AND_RESTARTING = Application de la mise à jour automatique et redémarrage... + +AUTO_UPDATE = Mise à jour automatique + +BLOCK_HEIGHT = hauteur + +BUILD_VERSION = Numéro de version + +CHECK_TIME_ACCURACY = Vérifier l'heure + +CONNECTING = Connexion en cours + +CONNECTION = connexion + +CONNECTIONS = connexions + +CREATING_BACKUP_OF_DB_FILES = Création d'une sauvegarde des fichiers de la base de données... + +DB_BACKUP = Sauvegarde de la base de données + +DB_CHECKPOINT = Point de contrôle de la base de données + +DB_MAINTENANCE = Maintenance de la base de données + +EXIT = Quitter + +MINTING_DISABLED = NE mint PAS + +MINTING_ENABLED = \u2714 Minting + +OPEN_UI = Ouvrir l'interface + +PERFORMING_DB_CHECKPOINT = Enregistrement des modifications de base de données non validées... + +PERFORMING_DB_MAINTENANCE = Entrain d'effectuer la maintenance programmée... + +SYNCHRONIZE_CLOCK = Mettre l'heure à jour + +SYNCHRONIZING_BLOCKCHAIN = Synchronisation + +SYNCHRONIZING_CLOCK = Synchronisation de l'heure diff --git a/src/main/resources/i18n/SysTray_hu.properties b/src/main/resources/i18n/SysTray_hu.properties index be4bef25..5a082b6d 100644 --- a/src/main/resources/i18n/SysTray_hu.properties +++ b/src/main/resources/i18n/SysTray_hu.properties @@ -1,17 +1,15 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) -# SysTray pop-up menu +# SysTray pop-up menu # Magyar myelvre forditotta: Szkíta (Scythian). 2021 Augusztus 7. -# Magyar myelvre forditotta: Szkíta (Scythian). 2021 Augusztus 7. +APPLYING_UPDATE_AND_RESTARTING = Automatikus frissítés alkalmazása és újraindítás... AUTO_UPDATE = Automatikus Frissítés -APPLYING_UPDATE_AND_RESTARTING = Automatikus frissítés és újraindítás alkalmazása... - BLOCK_HEIGHT = blokkmagasság BUILD_VERSION = Verzió -CHECK_TIME_ACCURACY = Idő pontosság ellenőrzése +CHECK_TIME_ACCURACY = Óra pontosságának ellenőrzése CONNECTING = Kapcsolódás @@ -23,24 +21,24 @@ CREATING_BACKUP_OF_DB_FILES = Adatbázis fájlok biztonsági mentésének létre DB_BACKUP = Adatbázis biztonsági mentése -DB_MAINTENANCE = Database Maintenance - DB_CHECKPOINT = Adatbázis-ellenőrzőpont +DB_MAINTENANCE = Adatbázis karbantartás + EXIT = Kilépés MINTING_DISABLED = QORT-érmeverés jelenleg nincs folyamatban MINTING_ENABLED = \u2714 QORT-érmeverés folyamatban -OPEN_UI = Felhasználói eszköz megnyitása +OPEN_UI = Felhasználói felület megnyitása PERFORMING_DB_CHECKPOINT = Mentetlen adatbázis-módosítások mentése... -PERFORMING_DB_MAINTENANCE = Performing scheduled maintenance... +PERFORMING_DB_MAINTENANCE = Ütemezett karbantartás... SYNCHRONIZE_CLOCK = Óra-szinkronizálás megkezdése SYNCHRONIZING_BLOCKCHAIN = Szinkronizálás -SYNCHRONIZING_CLOCK = Óra-szinkronizálás folyamatban +SYNCHRONIZING_CLOCK = Óraszinkronizálás folyamatban diff --git a/src/main/resources/i18n/SysTray_it.properties b/src/main/resources/i18n/SysTray_it.properties index 326c71c2..dd02aefa 100644 --- a/src/main/resources/i18n/SysTray_it.properties +++ b/src/main/resources/i18n/SysTray_it.properties @@ -1,8 +1,7 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) -# SysTray pop-up menu -# Italian translation by Pabs 2021 +# SysTray pop-up menu # Italian translation by Pabs 2021 -APPLYING_UPDATE_AND_RESTARTING = Applicando aggiornamento automatico e riavviando... +APPLYING_UPDATE_AND_RESTARTING = Aggiornamento automatico e riavvio... AUTO_UPDATE = Aggiornamento automatico @@ -12,34 +11,34 @@ BUILD_VERSION = Versione CHECK_TIME_ACCURACY = Controlla la precisione dell'ora -CONNECTING = Collegando +CONNECTING = Collegamento CONNECTION = connessione CONNECTIONS = connessioni -CREATING_BACKUP_OF_DB_FILES = Creazione di backup dei file di database... +CREATING_BACKUP_OF_DB_FILES = Creazione del backup dei file di database... DB_BACKUP = Backup del database -DB_MAINTENANCE = Database Maintenance +DB_CHECKPOINT = Fase di controllo del database -DB_CHECKPOINT = Punto di controllo del database +DB_MAINTENANCE = Manutenzione del database EXIT = Uscita -MINTING_DISABLED = NON coniando +MINTING_DISABLED = Conio disabilitato -MINTING_ENABLED = \u2714 Coniando +MINTING_ENABLED = \u2714 Conio abilitato OPEN_UI = Apri UI -PERFORMING_DB_CHECKPOINT = Salvataggio delle modifiche al database non salvate... +PERFORMING_DB_CHECKPOINT = Salvataggio delle modifiche del database non salvate... -PERFORMING_DB_MAINTENANCE = Performing scheduled maintenance... +PERFORMING_DB_MAINTENANCE = Manutenzione programmata dell'efficienza... -SYNCHRONIZE_CLOCK = Sincronizza orologio +SYNCHRONIZE_CLOCK = Sincronizzare l'orologio -SYNCHRONIZING_BLOCKCHAIN = Sincronizzando +SYNCHRONIZING_BLOCKCHAIN = Sincronizzazione della blockchain -SYNCHRONIZING_CLOCK = Sincronizzando orologio +SYNCHRONIZING_CLOCK = Sincronizzazione orologio diff --git a/src/main/resources/i18n/SysTray_nl.properties b/src/main/resources/i18n/SysTray_nl.properties index ddf1527f..996c946f 100644 --- a/src/main/resources/i18n/SysTray_nl.properties +++ b/src/main/resources/i18n/SysTray_nl.properties @@ -1,13 +1,13 @@ -Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # SysTray pop-up menu APPLYING_UPDATE_AND_RESTARTING = Automatische update en herstart worden uitgevoerd... AUTO_UPDATE = Automatische Update -BLOCK_HEIGHT = hoogte +BLOCK_HEIGHT = Block hoogte -BUILD_VERSION = Versie +BUILD_VERSION = Versie nummer CHECK_TIME_ACCURACY = Controleer accuraatheid van de tijd @@ -23,17 +23,19 @@ DB_BACKUP = Database Backup DB_CHECKPOINT = Database Controlepunt +DB_MAINTENANCE = Database Onderhoud + EXIT = Verlaten -MINTING_DISABLED = NIET muntend +MINTING_DISABLED = Minten is uitgeschakeld -MINTING_ENABLED = \u2714 Muntend +MINTING_ENABLED = \u2714 Minten is ingeschakeld OPEN_UI = Open UI -PERFORMING_DB_CHECKPOINT = Nieuwe veranderingen aan database worden opgeslagen... +PERFORMING_DB_CHECKPOINT = De database wordt gecontroleerd... -PERFORMING_DB_MAINTENANCE = Performing scheduled maintenance... +PERFORMING_DB_MAINTENANCE = Uitvoeren van gepland onderhoud... SYNCHRONIZE_CLOCK = Synchronizeer klok diff --git a/src/main/resources/i18n/SysTray_ru.properties b/src/main/resources/i18n/SysTray_ru.properties index c124b500..efcc723c 100644 --- a/src/main/resources/i18n/SysTray_ru.properties +++ b/src/main/resources/i18n/SysTray_ru.properties @@ -1,42 +1,44 @@ -#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) -# SysTray pop-up menu - -APPLYING_UPDATE_AND_RESTARTING = Применение автоматического обновления и перезапуска... - -AUTO_UPDATE = Автоматическое обновление - -BLOCK_HEIGHT = Высота блока - -BUILD_VERSION = Build version - -CHECK_TIME_ACCURACY = Проверка точного времени - -CONNECTING = Подключение - -CONNECTION = Соединение - -CONNECTIONS = Соединений - -CREATING_BACKUP_OF_DB_FILES = Создание резервной копии файлов базы данных... - -DB_BACKUP = Резервное копирование базы данных - -DB_MAINTENANCE = Database Maintenance - -EXIT = Выход - -MINTING_DISABLED = Чеканка отключена - -MINTING_ENABLED = Чеканка активна - -OPEN_UI = Открыть пользовательский интерфейс - -PERFORMING_DB_CHECKPOINT = Saving uncommitted database changes... - -PERFORMING_DB_MAINTENANCE = Performing scheduled maintenance... - -SYNCHRONIZE_CLOCK = Синхронизировать время - -SYNCHRONIZING_BLOCKCHAIN = Синхронизация цепи - -SYNCHRONIZING_CLOCK = Проверка времени +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# SysTray pop-up menu + +APPLYING_UPDATE_AND_RESTARTING = Применение автоматического обновления и перезапуска... + +AUTO_UPDATE = Автоматическое обновление + +BLOCK_HEIGHT = Высота блока + +BUILD_VERSION = Версия сборки + +CHECK_TIME_ACCURACY = Проверка точного времени + +CONNECTING = Подключение + +CONNECTION = Соединение + +CONNECTIONS = Соединения + +CREATING_BACKUP_OF_DB_FILES = Создание резервной копии файлов базы данных... + +DB_BACKUP = Резервное копирование базы данных + +DB_CHECKPOINT = Контрольная точка базы данных + +DB_MAINTENANCE = Обслуживание базы данных + +EXIT = Выход + +MINTING_DISABLED = Чеканка отключена + +MINTING_ENABLED = \u2714 Чеканка активна + +OPEN_UI = Открыть пользовательский интерфейс + +PERFORMING_DB_CHECKPOINT = Сохранение незафиксированных изменений базы данных... + +PERFORMING_DB_MAINTENANCE = Выполнение планового технического обслуживания... + +SYNCHRONIZE_CLOCK = Синхронизировать время + +SYNCHRONIZING_BLOCKCHAIN = Синхронизация цепи + +SYNCHRONIZING_CLOCK = Проверка времени diff --git a/src/main/resources/i18n/SysTray_sv.properties b/src/main/resources/i18n/SysTray_sv.properties new file mode 100644 index 00000000..9aec8e9b --- /dev/null +++ b/src/main/resources/i18n/SysTray_sv.properties @@ -0,0 +1,44 @@ +#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) +# SysTray pop-up menu + +APPLYING_UPDATE_AND_RESTARTING = Tillämpar automatisk uppdatering och startar om... + +AUTO_UPDATE = Automatisk uppdatering + +BLOCK_HEIGHT = höjd + +BUILD_VERSION = Byggversion + +CHECK_TIME_ACCURACY = Kontrollera tidens noggrannhet + +CONNECTING = Ansluter + +CONNECTION = anslutning + +CONNECTIONS = anslutningar + +CREATING_BACKUP_OF_DB_FILES = Skapar säkerhetskopia av databasfiler... + +DB_BACKUP = Databas backup + +DB_CHECKPOINT = Databaskontrollpunkt + +DB_MAINTENANCE = Databasunderhåll + +EXIT = Utgång + +MINTING_DISABLED = Präglar INTE + +MINTING_ENABLED = \u2714 Präglar + +OPEN_UI = Öppna UI + +PERFORMING_DB_CHECKPOINT = Sparar oengagerade databasändringar... + +PERFORMING_DB_MAINTENANCE = Utför schemalagt underhåll... + +SYNCHRONIZE_CLOCK = Synkronisera klockan + +SYNCHRONIZING_BLOCKCHAIN = Synkroniserar + +SYNCHRONIZING_CLOCK = Synkroniserar klockan diff --git a/src/main/resources/i18n/SysTray_zh_CN.properties b/src/main/resources/i18n/SysTray_zh_CN.properties index 6d8318e2..1216368b 100644 --- a/src/main/resources/i18n/SysTray_zh_CN.properties +++ b/src/main/resources/i18n/SysTray_zh_CN.properties @@ -1,39 +1,41 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # SysTray pop-up menu -AUTO_UPDATE = Auto Update +APPLYING_UPDATE_AND_RESTARTING = 正在自动更新并重新启动核心... -APPLYING_UPDATE_AND_RESTARTING = Applying automatic update and restarting... +AUTO_UPDATE = 自动更新 BLOCK_HEIGHT = 区块高度 -BUILD_VERSION = Build version +BUILD_VERSION = 版本 CHECK_TIME_ACCURACY = 检查时间准确性 -CONNECTING = Connecting +CONNECTING = 连线中 CONNECTION = 个链接 CONNECTIONS = 个链接 -CREATING_BACKUP_OF_DB_FILES = Creating backup of database files... +CREATING_BACKUP_OF_DB_FILES = 正在创建数据库备份资料... -DB_BACKUP = Database Backup +DB_BACKUP = 数据库备份 -DB_CHECKPOINT = Database Checkpoint +DB_CHECKPOINT = 数据库检查点 + +DB_MAINTENANCE = 数据库维护 EXIT = 退出核心 MINTING_DISABLED = 没有铸币 -MINTING_ENABLED = ✔ 铸币 +MINTING_ENABLED = \u2714 铸币 OPEN_UI = 开启Qortal界面 -PERFORMING_DB_CHECKPOINT = Saving uncommitted database changes... +PERFORMING_DB_CHECKPOINT = 正在保存未提交的数据库修订... -PERFORMING_DB_MAINTENANCE = Performing scheduled maintenance... +PERFORMING_DB_MAINTENANCE = 正在执行定期数据库维护... SYNCHRONIZE_CLOCK = 同步时钟 diff --git a/src/main/resources/i18n/SysTray_zh_TW.properties b/src/main/resources/i18n/SysTray_zh_TW.properties index 3af0c84c..1b2d0d90 100644 --- a/src/main/resources/i18n/SysTray_zh_TW.properties +++ b/src/main/resources/i18n/SysTray_zh_TW.properties @@ -1,40 +1,44 @@ #Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/) # SysTray pop-up menu -AUTO_UPDATE = Auto Update +APPLYING_UPDATE_AND_RESTARTING = 正在自動更新並重新啓動核心... -APPLYING_UPDATE_AND_RESTARTING = Applying automatic update and restarting... +AUTO_UPDATE = 自動更新 BLOCK_HEIGHT = 區塊高度 -BUILD_VERSION = Build version +BUILD_VERSION = 版本 CHECK_TIME_ACCURACY = 檢查時間準確性 -CONNECTING = Connecting +CONNECTING = 連線中 CONNECTION = 個鏈接 CONNECTIONS = 個鏈接 -CREATING_BACKUP_OF_DB_FILES = Creating backup of database files... +CREATING_BACKUP_OF_DB_FILES = 正在創建數據庫備份資料... -DB_BACKUP = Database Backup +DB_BACKUP = 數據庫備份 -DB_CHECKPOINT = Database Checkpoint +DB_CHECKPOINT = 數據庫檢查點 + +DB_MAINTENANCE = 數據庫維護 EXIT = 退出核心 MINTING_DISABLED = 沒有鑄幣 -MINTING_ENABLED = ✔ 鑄幣 +MINTING_ENABLED = \u2714 鑄幣 OPEN_UI = 開啓Qortal界面 -PERFORMING_DB_CHECKPOINT = Saving uncommitted database changes... +PERFORMING_DB_CHECKPOINT = 正在保存未提交的數據庫修訂... + +PERFORMING_DB_MAINTENANCE = 正在執行數據庫定期維護... SYNCHRONIZE_CLOCK = 同步時鐘 SYNCHRONIZING_BLOCKCHAIN = 正在同步區塊鏈 -SYNCHRONIZING_CLOCK = 正在同步時鐘 \ No newline at end of file +SYNCHRONIZING_CLOCK = 正在同步時鐘 diff --git a/src/main/resources/i18n/TransactionValidity_en.properties b/src/main/resources/i18n/TransactionValidity_en.properties index 7c4d18a1..3f33771d 100644 --- a/src/main/resources/i18n/TransactionValidity_en.properties +++ b/src/main/resources/i18n/TransactionValidity_en.properties @@ -1,112 +1,32 @@ -OK = OK +# -INVALID_ADDRESS = invalid address +ACCOUNT_ALREADY_EXISTS = account already exists -NEGATIVE_AMOUNT = invalid/negative amount +ACCOUNT_CANNOT_REWARD_SHARE = account cannot reward-share -NEGATIVE_FEE = invalid/negative fee +ADDRESS_ABOVE_RATE_LIMIT = address reached specified rate limit -NO_BALANCE = insufficient balance - -INVALID_REFERENCE = invalid reference - -INVALID_NAME_LENGTH = invalid name length - -INVALID_VALUE_LENGTH = invalid 'value' length - -NAME_ALREADY_REGISTERED = name already registered - -NAME_DOES_NOT_EXIST = name does not exist - -INVALID_NAME_OWNER = invalid name owner - -NAME_ALREADY_FOR_SALE = name already for sale - -NAME_NOT_FOR_SALE = name is not for sale - -BUYER_ALREADY_OWNER = buyer is already owner - -INVALID_AMOUNT = invalid amount - -INVALID_SELLER = invalid seller - -NAME_NOT_NORMALIZED = name not in Unicode 'normalized' form - -INVALID_DESCRIPTION_LENGTH = invalid description length - -INVALID_OPTIONS_COUNT = invalid options count - -INVALID_OPTION_LENGTH = invalid options length - -DUPLICATE_OPTION = duplicate option - -POLL_ALREADY_EXISTS = poll already exists - -POLL_DOES_NOT_EXIST = poll does not exist - -POLL_OPTION_DOES_NOT_EXIST = poll option does not exist - -ALREADY_VOTED_FOR_THAT_OPTION = already voted for that option - -INVALID_DATA_LENGTH = invalid data length - -INVALID_QUANTITY = invalid quantity - -ASSET_DOES_NOT_EXIST = asset does not exist - -INVALID_RETURN = invalid return - -HAVE_EQUALS_WANT = have-asset is the same as want-asset - -ORDER_DOES_NOT_EXIST = asset trade order does not exist - -INVALID_ORDER_CREATOR = invalid order creator - -INVALID_PAYMENTS_COUNT = invalid payments count - -NEGATIVE_PRICE = invalid/negative price - -INVALID_CREATION_BYTES = invalid creation bytes - -INVALID_TAGS_LENGTH = invalid 'tags' length - -INVALID_AT_TYPE_LENGTH = invalid AT 'type' length - -INVALID_AT_TRANSACTION = invalid AT transaction - -INSUFFICIENT_FEE = insufficient fee - -ASSET_DOES_NOT_MATCH_AT = asset does not match AT's asset - -ASSET_ALREADY_EXISTS = asset already exists - -MISSING_CREATOR = missing creator - -TIMESTAMP_TOO_OLD = timestamp too old - -TIMESTAMP_TOO_NEW = timestamp too new - -TOO_MANY_UNCONFIRMED = account has too many unconfirmed transactions pending - -GROUP_ALREADY_EXISTS = group already exists - -GROUP_DOES_NOT_EXIST = group does not exist - -INVALID_GROUP_OWNER = invalid group owner - -ALREADY_GROUP_MEMBER = already group member - -GROUP_OWNER_CANNOT_LEAVE = group owner cannot leave group - -NOT_GROUP_MEMBER = account is not a group member +ADDRESS_BLOCKED = this address is blocked ALREADY_GROUP_ADMIN = already group admin -NOT_GROUP_ADMIN = account is not a group admin +ALREADY_GROUP_MEMBER = already group member -INVALID_LIFETIME = invalid lifetime +ALREADY_VOTED_FOR_THAT_OPTION = already voted for that option -INVITE_UNKNOWN = group invite unknown +ASSET_ALREADY_EXISTS = asset already exists + +ASSET_DOES_NOT_EXIST = asset does not exist + +ASSET_DOES_NOT_MATCH_AT = asset does not match AT's asset + +ASSET_NOT_SPENDABLE = asset is not spendable + +AT_ALREADY_EXISTS = AT already exists + +AT_IS_FINISHED = AT has finished + +AT_UNKNOWN = AT unknown BAN_EXISTS = ban already exists @@ -114,80 +34,162 @@ BAN_UNKNOWN = ban unknown BANNED_FROM_GROUP = banned from group -JOIN_REQUEST_EXISTS = group join request already exists - -INVALID_GROUP_APPROVAL_THRESHOLD = invalid group-approval threshold - -GROUP_ID_MISMATCH = group ID mismatch - -INVALID_GROUP_ID = invalid group ID - -TRANSACTION_UNKNOWN = transaction unknown - -TRANSACTION_ALREADY_CONFIRMED = transaction has already confirmed - -INVALID_TX_GROUP_ID = invalid transaction group ID - -TX_GROUP_ID_MISMATCH = transaction's group ID does not match - -MULTIPLE_NAMES_FORBIDDEN = multiple registered names per account is forbidden - -INVALID_ASSET_OWNER = invalid asset owner - -AT_IS_FINISHED = AT has finished - -NO_FLAG_PERMISSION = account does not have that permission - -NOT_MINTING_ACCOUNT = account cannot mint - -REWARD_SHARE_UNKNOWN = reward-share unknown - -INVALID_REWARD_SHARE_PERCENT = invalid reward-share percent - -PUBLIC_KEY_UNKNOWN = public key unknown - -INVALID_PUBLIC_KEY = invalid public key - -AT_UNKNOWN = AT unknown - -AT_ALREADY_EXISTS = AT already exists - -GROUP_APPROVAL_NOT_REQUIRED = group-approval not required - -GROUP_APPROVAL_DECIDED = group-approval already decided - -MAXIMUM_REWARD_SHARES = already at maximum number of reward-shares for this account - -TRANSACTION_ALREADY_EXISTS = transaction already exists - -NO_BLOCKCHAIN_LOCK = node's blockchain currently busy - -ORDER_ALREADY_CLOSED = asset trade order is already closed +BUYER_ALREADY_OWNER = buyer is already owner CLOCK_NOT_SYNCED = clock not synchronized -ASSET_NOT_SPENDABLE = asset is not spendable +DUPLICATE_MESSAGE = address sent duplicate message -ACCOUNT_CANNOT_REWARD_SHARE = account cannot reward-share +DUPLICATE_OPTION = duplicate option -SELF_SHARE_EXISTS = self-share (reward-share) already exists +GROUP_ALREADY_EXISTS = group already exists -ACCOUNT_ALREADY_EXISTS = account already exists +GROUP_APPROVAL_DECIDED = group-approval already decided -INVALID_GROUP_BLOCK_DELAY = invalid group-approval block delay +GROUP_APPROVAL_NOT_REQUIRED = group-approval not required + +GROUP_DOES_NOT_EXIST = group does not exist + +GROUP_ID_MISMATCH = group ID mismatch + +GROUP_OWNER_CANNOT_LEAVE = group owner cannot leave group + +HAVE_EQUALS_WANT = have-asset is the same as want-asset INCORRECT_NONCE = incorrect PoW nonce -INVALID_TIMESTAMP_SIGNATURE = invalid timestamp signature +INSUFFICIENT_FEE = insufficient fee -ADDRESS_BLOCKED = this address is blocked +INVALID_ADDRESS = invalid address -NAME_BLOCKED = this name is blocked +INVALID_AMOUNT = invalid amount -ADDRESS_ABOVE_RATE_LIMIT = address reached specified rate limit +INVALID_ASSET_OWNER = invalid asset owner -DUPLICATE_MESSAGE = address sent duplicate message +INVALID_AT_TRANSACTION = invalid AT transaction + +INVALID_AT_TYPE_LENGTH = invalid AT 'type' length INVALID_BUT_OK = invalid but OK +INVALID_CREATION_BYTES = invalid creation bytes + +INVALID_DATA_LENGTH = invalid data length + +INVALID_DESCRIPTION_LENGTH = invalid description length + +INVALID_GROUP_APPROVAL_THRESHOLD = invalid group-approval threshold + +INVALID_GROUP_BLOCK_DELAY = invalid group-approval block delay + +INVALID_GROUP_ID = invalid group ID + +INVALID_GROUP_OWNER = invalid group owner + +INVALID_LIFETIME = invalid lifetime + +INVALID_NAME_LENGTH = invalid name length + +INVALID_NAME_OWNER = invalid name owner + +INVALID_OPTION_LENGTH = invalid options length + +INVALID_OPTIONS_COUNT = invalid options count + +INVALID_ORDER_CREATOR = invalid order creator + +INVALID_PAYMENTS_COUNT = invalid payments count + +INVALID_PUBLIC_KEY = invalid public key + +INVALID_QUANTITY = invalid quantity + +INVALID_REFERENCE = invalid reference + +INVALID_RETURN = invalid return + +INVALID_REWARD_SHARE_PERCENT = invalid reward-share percent + +INVALID_SELLER = invalid seller + +INVALID_TAGS_LENGTH = invalid 'tags' length + +INVALID_TIMESTAMP_SIGNATURE = invalid timestamp signature + +INVALID_TX_GROUP_ID = invalid transaction group ID + +INVALID_VALUE_LENGTH = invalid 'value' length + +INVITE_UNKNOWN = group invite unknown + +JOIN_REQUEST_EXISTS = group join request already exists + +MAXIMUM_REWARD_SHARES = already at maximum number of reward-shares for this account + +MISSING_CREATOR = missing creator + +MULTIPLE_NAMES_FORBIDDEN = multiple registered names per account is forbidden + +NAME_ALREADY_FOR_SALE = name already for sale + +NAME_ALREADY_REGISTERED = name already registered + +NAME_BLOCKED = this name is blocked + +NAME_DOES_NOT_EXIST = name does not exist + +NAME_NOT_FOR_SALE = name is not for sale + +NAME_NOT_NORMALIZED = name not in Unicode 'normalized' form + +NEGATIVE_AMOUNT = invalid/negative amount + +NEGATIVE_FEE = invalid/negative fee + +NEGATIVE_PRICE = invalid/negative price + +NO_BALANCE = insufficient balance + +NO_BLOCKCHAIN_LOCK = node's blockchain currently busy + +NO_FLAG_PERMISSION = account does not have that permission + +NOT_GROUP_ADMIN = account is not a group admin + +NOT_GROUP_MEMBER = account is not a group member + +NOT_MINTING_ACCOUNT = account cannot mint + NOT_YET_RELEASED = feature not yet released + +OK = OK + +ORDER_ALREADY_CLOSED = asset trade order is already closed + +ORDER_DOES_NOT_EXIST = asset trade order does not exist + +POLL_ALREADY_EXISTS = poll already exists + +POLL_DOES_NOT_EXIST = poll does not exist + +POLL_OPTION_DOES_NOT_EXIST = poll option does not exist + +PUBLIC_KEY_UNKNOWN = public key unknown + +REWARD_SHARE_UNKNOWN = reward-share unknown + +SELF_SHARE_EXISTS = self-share (reward-share) already exists + +TIMESTAMP_TOO_NEW = timestamp too new + +TIMESTAMP_TOO_OLD = timestamp too old + +TOO_MANY_UNCONFIRMED = account has too many unconfirmed transactions pending + +TRANSACTION_ALREADY_CONFIRMED = transaction has already confirmed + +TRANSACTION_ALREADY_EXISTS = transaction already exists + +TRANSACTION_UNKNOWN = transaction unknown + +TX_GROUP_ID_MISMATCH = transaction's group ID does not match diff --git a/src/main/resources/i18n/TransactionValidity_es.properties b/src/main/resources/i18n/TransactionValidity_es.properties index 91b8605e..7c357009 100644 --- a/src/main/resources/i18n/TransactionValidity_es.properties +++ b/src/main/resources/i18n/TransactionValidity_es.properties @@ -1,290 +1,195 @@ -OK = Aceptar -#OK - -INVALID_ADDRESS = dirección no válida -#invalid address - -NEGATIVE_AMOUNT = importe no válido/negativo -#invalid/negative amount - -NEGATIVE_FEE = tarifa no válida/negativa -#invalid/negative fee - -NO_BALANCE = saldo insuficiente -#insufficient balance - -INVALID_REFERENCE = referencia no válida -#invalid reference - -INVALID_NAME_LENGTH = longitud de nombre no válida -#invalid name length - -INVALID_VALUE_LENGTH = longitud de 'valor' no válida -#invalid 'value' length - -NAME_ALREADY_REGISTERED = nombre ya registrado -#name already registered - -NAME_DOES_NOT_EXIST = el nombre no existe -#name does not exist - -INVALID_NAME_OWNER = propietario de nombre no válido -#invalid name owner - -NAME_ALREADY_FOR_SALE = nombre ya a la venta -#name already for sale - -NAME_NOT_FOR_SALE = el nombre no está a la venta -#name is not for sale - -BUYER_ALREADY_OWNER = el comprador ya es propietario -#buyer is already owner - -INVALID_AMOUNT = monto no válido -#invalid amount - -INVALID_SELLER = vendedor no válido -#invalid seller - -NAME_NOT_NORMALIZED = nombre no en formato Unicode 'normalizado' -#name not in Unicode 'normalized' form - -INVALID_DESCRIPTION_LENGTH = longitud de descripción no válida -#invalid description length - -INVALID_OPTIONS_COUNT = recuento de opciones no válidas -#invalid options count - -INVALID_OPTION_LENGTH = longitud de opciones no válida -#invalid options length - -DUPLICATE_OPTION = opción duplicada -#duplicate option - -POLL_ALREADY_EXISTS = la encuesta ya existe -#poll already exists - -POLL_DOES_NOT_EXIST = la encuesta no existe -#poll does not exist - -POLL_OPTION_DOES_NOT_EXIST = la opción de encuesta no existe -#poll option does not exist - -ALREADY_VOTED_FOR_THAT_OPTION = ya voté por esa opción -#already voted for that option - -INVALID_DATA_LENGTH = longitud de datos no válida -#invalid data length - -INVALID_QUANTITY = cantidad no válida -#invalid quantity - -ASSET_DOES_NOT_EXIST = el activo no existe -#asset does not exist - -INVALID_RETURN = devolución no válida -#invalid return - -HAVE_EQUALS_WANT = tener-activo es lo mismo que querer-activo -#have-asset is the same as want-asset - -ORDER_DOES_NOT_EXIST = la orden comercial de activos no existe -#asset trade order does not exist - -INVALID_ORDER_CREATOR = creador de pedido no válido -#invalid order creator - -INVALID_PAYMENTS_COUNT = recuento de pagos no válidos -#invalid payments count - -NEGATIVE_PRICE = precio no válido/negativo -#invalid/negative price - -INVALID_CREATION_BYTES = bytes de creación no válidos -#invalid creation bytes - -INVALID_TAGS_LENGTH = longitud de 'etiquetas' no válida -#invalid 'tags' length - -INVALID_AT_TYPE_LENGTH = longitud de 'tipo' de AT no válida -#invalid AT 'type' length - -INVALID_AT_TRANSACTION = transacción AT no válida -#invalid AT transaction - -INSUFFICIENT_FEE = tarifa insuficiente -#insufficient fee - -ASSET_DOES_NOT_MATCH_AT = el activo no coincide con el activo de AT -#asset does not match AT's asset - -ASSET_ALREADY_EXISTS = el activo ya existe -#asset already exists - -MISSING_CREATOR = creador faltante -#missing creator - -TIMESTAMP_TOO_OLD = marca de tiempo demasiado antigua -#timestamp too old - -TIMESTAMP_TOO_NEW = marca de tiempo demasiado nueva -#timestamp too new - -TOO_MANY_UNCONFIRMED = la cuenta tiene demasiadas transacciones pendientes sin confirmar -#account has too many unconfirmed transactions pending - -GROUP_ALREADY_EXISTS = el grupo ya existe -#group already exists - -GROUP_DOES_NOT_EXIST = el grupo no existe -#group does not exist - -INVALID_GROUP_OWNER = propietario del grupo no válido -#invalid group owner - -ALREADY_GROUP_MEMBER = ya es miembro del grupo -#already group member - -GROUP_OWNER_CANNOT_LEAVE = el propietario del grupo no puede abandonar el grupo -#group owner cannot leave group - -NOT_GROUP_MEMBER = la cuenta no es miembro del grupo -#account is not a group member - -ALREADY_GROUP_ADMIN = ya es administrador del grupo -#already group admin - -NOT_GROUP_ADMIN = la cuenta no es un administrador de grupo -#account is not a group admin - -INVALID_LIFETIME = tiempo de vida no válido -#invalid lifetime - -INVITE_UNKNOWN = invitación de grupo desconocida -#group invite unknown - -BAN_EXISTS = la prohibición ya existe -#ban already exists - -BAN_UNKNOWN = bloqueo desconocido -#ban unknown - -BANNED_FROM_GROUP = prohibido del grupo -#banned from group - -JOIN_REQUEST_EXISTS = la solicitud para unirse al grupo ya existe -#group join request already exists - -INVALID_GROUP_APPROVAL_THRESHOLD = umbral de aprobación de grupo no válido -#invalid group-approval threshold - -GROUP_ID_MISMATCH = discrepancia de ID de grupo -#group ID mismatch - -INVALID_GROUP_ID = ID de grupo no válido -#invalid group ID - -TRANSACTION_UNKNOWN = transacción desconocida -#transaction unknown - -TRANSACTION_ALREADY_CONFIRMED = la transacción ya ha sido confirmada -#transaction has already confirmed - -INVALID_TX_GROUP_ID = ID de grupo de transacciones no válido -#invalid transaction group ID - -TX_GROUP_ID_MISMATCH = el ID de grupo de la transacción no coincide -#transaction's group ID does not match - -MULTIPLE_NAMES_FORBIDDEN = múltiples nombres registrados por cuenta están prohibidos -#multiple registered names per account is forbidden - -INVALID_ASSET_OWNER = propietario de activo no válido -#invalid asset owner - -AT_IS_FINISHED = AT ha terminado -#AT has finished - -NO_FLAG_PERMISSION = la cuenta no tiene ese permiso -#account does not have that permission - -NOT_MINTING_ACCOUNT = la cuenta no puede acuñar -#account cannot mint - -REWARD_SHARE_UNKNOWN = Recompensa compartida desconocida -#reward-share unknown - -INVALID_REWARD_SHARE_PERCENT = porcentaje de recompensa compartida no válido -#invalid reward-share percent - -PUBLIC_KEY_UNKNOWN = clave pública desconocida -#public key unknown - -INVALID_PUBLIC_KEY = clave pública no válida -#invalid public key - -AT_UNKNOWN = AT desconocido -#AT unknown - -AT_ALREADY_EXISTS = AT ya existe -#AT already exists - -GROUP_APPROVAL_NOT_REQUIRED = no se requiere aprobación de grupo -#group-approval not required - -GROUP_APPROVAL_DECIDED = aprobación del grupo ya decidida -#group-approval already decided - -MAXIMUM_REWARD_SHARES = ya en el número máximo de acciones de recompensa para esta cuenta -#already at maximum number of reward-shares for this account - -TRANSACTION_ALREADY_EXISTS = la transacción ya existe -#transaction already exists - -NO_BLOCKCHAIN_LOCK = la cadena de bloques del nodo está actualmente ocupada -#node's blockchain currently busy - -ORDER_ALREADY_CLOSED = la orden comercial de activos ya está cerrada -#asset trade order is already closed - -CLOCK_NOT_SYNCED = reloj no sincronizado -#clock not synchronized - -ASSET_NOT_SPENDABLE = el activo no se puede gastar -#asset is not spendable - -ACCOUNT_CANNOT_REWARD_SHARE = la cuenta no puede compartir recompensas -#account cannot reward-share - -SELF_SHARE_EXISTS = autocompartir (recompensa compartida) ya existe -#self-share (reward-share) already exists - +# + ACCOUNT_ALREADY_EXISTS = la cuenta ya existe -#account already exists - -INVALID_GROUP_BLOCK_DELAY = retraso de bloqueo de aprobación de grupo no válido -#invalid group-approval block delay - -INCORRECT_NONCE = PoW nonce incorrecto -#incorrect PoW nonce - -INVALID_TIMESTAMP_SIGNATURE = firma de marca de tiempo no válida -#invalid timestamp signature - -ADDRESS_BLOCKED = esta dirección está bloqueada -#this address is blocked - -NAME_BLOCKED = este nombre está bloqueado -#this name is blocked - + +ACCOUNT_CANNOT_REWARD_SHARE = la cuenta no puede compartir recompensas + ADDRESS_ABOVE_RATE_LIMIT = la dirección alcanzó el límite de velocidad especificado -#address reached specified rate limit - + +ADDRESS_BLOCKED = esta dirección está bloqueada + +ALREADY_GROUP_ADMIN = ya es administrador del grupo + +ALREADY_GROUP_MEMBER = ya es miembro del grupo + +ALREADY_VOTED_FOR_THAT_OPTION = ya voté por esa opción + +ASSET_ALREADY_EXISTS = el activo ya existe + +ASSET_DOES_NOT_EXIST = el activo no existe + +ASSET_DOES_NOT_MATCH_AT = el activo no coincide con el activo de AT + +ASSET_NOT_SPENDABLE = el activo no se puede gastar + +AT_ALREADY_EXISTS = AT ya existe + +AT_IS_FINISHED = AT ha terminado + +AT_UNKNOWN = AT desconocido + +BAN_EXISTS = la prohibición ya existe + +BAN_UNKNOWN = bloqueo desconocido + +BANNED_FROM_GROUP = prohibido del grupo + +BUYER_ALREADY_OWNER = el comprador ya es propietario + +CLOCK_NOT_SYNCED = reloj no sincronizado + DUPLICATE_MESSAGE = dirección enviada mensaje duplicado -#address sent duplicate message - + +DUPLICATE_OPTION = opción duplicada + +GROUP_ALREADY_EXISTS = el grupo ya existe + +GROUP_APPROVAL_DECIDED = aprobación del grupo ya decidida + +GROUP_APPROVAL_NOT_REQUIRED = no se requiere aprobación de grupo + +GROUP_DOES_NOT_EXIST = el grupo no existe + +GROUP_ID_MISMATCH = discrepancia de ID de grupo + +GROUP_OWNER_CANNOT_LEAVE = el propietario del grupo no puede abandonar el grupo + +HAVE_EQUALS_WANT = tener-activo es lo mismo que querer-activo + +INCORRECT_NONCE = PoW nonce incorrecto + +INSUFFICIENT_FEE = tarifa insuficiente + +INVALID_ADDRESS = dirección no válida + +INVALID_AMOUNT = monto no válido + +INVALID_ASSET_OWNER = propietario de activo no válido + +INVALID_AT_TRANSACTION = transacción AT no válida + +INVALID_AT_TYPE_LENGTH = longitud de 'tipo' de AT no válida + INVALID_BUT_OK = inválido pero correcto -#invalid but OK - + +INVALID_CREATION_BYTES = bytes de creación no válidos + +INVALID_DATA_LENGTH = longitud de datos no válida + +INVALID_DESCRIPTION_LENGTH = longitud de descripción no válida + +INVALID_GROUP_APPROVAL_THRESHOLD = umbral de aprobación de grupo no válido + +INVALID_GROUP_BLOCK_DELAY = retraso de bloqueo de aprobación de grupo no válido + +INVALID_GROUP_ID = ID de grupo no válido + +INVALID_GROUP_OWNER = propietario del grupo no válido + +INVALID_LIFETIME = tiempo de vida no válido + +INVALID_NAME_LENGTH = longitud de nombre no válida + +INVALID_NAME_OWNER = propietario de nombre no válido + +INVALID_OPTION_LENGTH = longitud de opciones no válida + +INVALID_OPTIONS_COUNT = recuento de opciones no válidas + +INVALID_ORDER_CREATOR = creador de pedido no válido + +INVALID_PAYMENTS_COUNT = recuento de pagos no válidos + +INVALID_PUBLIC_KEY = clave pública no válida + +INVALID_QUANTITY = cantidad no válida + +INVALID_REFERENCE = referencia no válida + +INVALID_RETURN = devolución no válida + +INVALID_REWARD_SHARE_PERCENT = porcentaje de recompensa compartida no válido + +INVALID_SELLER = vendedor no válido + +INVALID_TAGS_LENGTH = longitud de 'etiquetas' no válida + +INVALID_TIMESTAMP_SIGNATURE = firma de marca de tiempo no válida + +INVALID_TX_GROUP_ID = ID de grupo de transacciones no válido + +INVALID_VALUE_LENGTH = longitud de 'valor' no válida + +INVITE_UNKNOWN = invitación de grupo desconocida + +JOIN_REQUEST_EXISTS = la solicitud para unirse al grupo ya existe + +MAXIMUM_REWARD_SHARES = ya en el número máximo de acciones de recompensa para esta cuenta + +MISSING_CREATOR = creador faltante + +MULTIPLE_NAMES_FORBIDDEN = múltiples nombres registrados por cuenta están prohibidos + +NAME_ALREADY_FOR_SALE = nombre ya a la venta + +NAME_ALREADY_REGISTERED = nombre ya registrado + +NAME_BLOCKED = este nombre está bloqueado + +NAME_DOES_NOT_EXIST = el nombre no existe + +NAME_NOT_FOR_SALE = el nombre no está a la venta + +NAME_NOT_NORMALIZED = nombre no en formato Unicode 'normalizado' + +NEGATIVE_AMOUNT = importe no válido/negativo + +NEGATIVE_FEE = tarifa no válida/negativa + +NEGATIVE_PRICE = precio no válido/negativo + +NO_BALANCE = saldo insuficiente + +NO_BLOCKCHAIN_LOCK = la cadena de bloques del nodo está actualmente ocupada + +NO_FLAG_PERMISSION = la cuenta no tiene ese permiso + +NOT_GROUP_ADMIN = la cuenta no es un administrador de grupo + +NOT_GROUP_MEMBER = la cuenta no es miembro del grupo + +NOT_MINTING_ACCOUNT = la cuenta no puede acuñar + NOT_YET_RELEASED = función aún no lanzada -#feature not yet released \ No newline at end of file + +OK = Aceptar + +ORDER_ALREADY_CLOSED = la orden comercial de activos ya está cerrada + +ORDER_DOES_NOT_EXIST = la orden comercial de activos no existe + +POLL_ALREADY_EXISTS = la encuesta ya existe + +POLL_DOES_NOT_EXIST = la encuesta no existe + +POLL_OPTION_DOES_NOT_EXIST = la opción de encuesta no existe + +PUBLIC_KEY_UNKNOWN = clave pública desconocida + +REWARD_SHARE_UNKNOWN = Recompensa compartida desconocida + +SELF_SHARE_EXISTS = autocompartir (recompensa compartida) ya existe + +TIMESTAMP_TOO_NEW = marca de tiempo demasiado nueva + +TIMESTAMP_TOO_OLD = marca de tiempo demasiado antigua + +TOO_MANY_UNCONFIRMED = la cuenta tiene demasiadas transacciones pendientes sin confirmar + +TRANSACTION_ALREADY_CONFIRMED = la transacción ya ha sido confirmada + +TRANSACTION_ALREADY_EXISTS = la transacción ya existe + +TRANSACTION_UNKNOWN = transacción desconocida + +TX_GROUP_ID_MISMATCH = el ID de grupo de la transacción no coincide diff --git a/src/main/resources/i18n/TransactionValidity_fi.properties b/src/main/resources/i18n/TransactionValidity_fi.properties index 002ad560..ec658bc1 100644 --- a/src/main/resources/i18n/TransactionValidity_fi.properties +++ b/src/main/resources/i18n/TransactionValidity_fi.properties @@ -1,7 +1,13 @@ +# + ACCOUNT_ALREADY_EXISTS = tili on jo olemassa ACCOUNT_CANNOT_REWARD_SHARE = tili ei voi palkinto-jakaa +ADDRESS_ABOVE_RATE_LIMIT = address reached specified rate limit + +ADDRESS_BLOCKED = this address is blocked + ALREADY_GROUP_ADMIN = on jo ryhmän admin ALREADY_GROUP_MEMBER = on jo ryhmän jäsen @@ -10,7 +16,7 @@ ALREADY_VOTED_FOR_THAT_OPTION = on jo äänestänyt vaihtoehtoa ASSET_ALREADY_EXISTS = resurssi on jo olemassa -ASSET_DOES_NOT_EXIST = resurssia ei ole olemassa +ASSET_DOES_NOT_EXIST = resurssia ei ole olemassa ASSET_DOES_NOT_MATCH_AT = resurssi ei vastaa AT:n resurssia @@ -22,16 +28,18 @@ AT_IS_FINISHED = AT on päättynyt AT_UNKNOWN = AT on tuntematon -BANNED_FROM_GROUP = on evätty ryhmän jäsenyydestä - BAN_EXISTS = eväys on jo olemassa BAN_UNKNOWN = tuntematon eväys +BANNED_FROM_GROUP = on evätty ryhmän jäsenyydestä + BUYER_ALREADY_OWNER = ostaja on jo omistaja CLOCK_NOT_SYNCED = kello on synkronisoimatta +DUPLICATE_MESSAGE = address sent duplicate message + DUPLICATE_OPTION = kahdennettu valinta GROUP_ALREADY_EXISTS = ryhmä on jo olemassa @@ -62,6 +70,8 @@ INVALID_AT_TRANSACTION = kelvoton AT-transaktio INVALID_AT_TYPE_LENGTH = kelvoton AT 'tyypin' pituus +INVALID_BUT_OK = Invalid but OK + INVALID_CREATION_BYTES = kelvoton luodun tavumäärä INVALID_DATA_LENGTH = kelvoton datan pituus @@ -82,10 +92,10 @@ INVALID_NAME_LENGTH = kelvoton nimen pituus INVALID_NAME_OWNER = kelvoton nimen omistaja -INVALID_OPTIONS_COUNT = kelvoton valintojen lkm - INVALID_OPTION_LENGTH = kelvoton valintojen pituus +INVALID_OPTIONS_COUNT = kelvoton valintojen lkm + INVALID_ORDER_CREATOR = kelvoton tilauksen luoja INVALID_PAYMENTS_COUNT = kelvoton maksujen lkm @@ -104,6 +114,8 @@ INVALID_SELLER = kelvoton myyjä INVALID_TAGS_LENGTH = kelvoton 'tagin' pituus +INVALID_TIMESTAMP_SIGNATURE = Invalid timestamp signature + INVALID_TX_GROUP_ID = kelvoton transaktion ryhmä-ID INVALID_VALUE_LENGTH = kelvoton 'arvon' pituus @@ -122,6 +134,8 @@ NAME_ALREADY_FOR_SALE = nimi on jo myynnissä NAME_ALREADY_REGISTERED = nimi on jo rekisteröity +NAME_BLOCKED = this name is blocked + NAME_DOES_NOT_EXIST = nimeä ei ole NAME_NOT_FOR_SALE = nimi ei ole kaupan @@ -134,6 +148,12 @@ NEGATIVE_FEE = kelvoton/negatiivinen kulu NEGATIVE_PRICE = kelvoton/negatiivinen hinta +NO_BALANCE = riittämätön saldo + +NO_BLOCKCHAIN_LOCK = solmun lohkoketju on juuri nyt varattuna + +NO_FLAG_PERMISSION = tilillä ei ole lupaa tuohon + NOT_GROUP_ADMIN = tili ei ole ryhmän admin NOT_GROUP_MEMBER = tili ei ole ryhmän jäsen @@ -142,12 +162,6 @@ NOT_MINTING_ACCOUNT = tili ei voi lyödä rahaa NOT_YET_RELEASED = ominaisuutta ei ole vielä julkistettu -NO_BALANCE = riittämätön saldo - -NO_BLOCKCHAIN_LOCK = solmun lohkoketju on juuri nyt varattuna - -NO_FLAG_PERMISSION = tilillä ei ole lupaa tuohon - OK = OK ORDER_ALREADY_CLOSED = resurssin määräys kauppaan on jo suljettu @@ -179,15 +193,3 @@ TRANSACTION_ALREADY_EXISTS = transaktio on jo olemassa TRANSACTION_UNKNOWN = tuntematon transaktio TX_GROUP_ID_MISMATCH = transaktion ryhmä-ID:n vastaavuusvirhe - -ADDRESS_BLOCKED = this address is blocked - -NAME_BLOCKED = this name is blocked - -ADDRESS_ABOVE_RATE_LIMIT = address reached specified rate limit - -DUPLICATE_MESSAGE = address sent duplicate message - -INVALID_TIMESTAMP_SIGNATURE = Invalid timestamp signature - -INVALID_BUT_OK = Invalid but OK diff --git a/src/main/resources/i18n/TransactionValidity_fr.properties b/src/main/resources/i18n/TransactionValidity_fr.properties index 6b43d457..e030bc0d 100644 --- a/src/main/resources/i18n/TransactionValidity_fr.properties +++ b/src/main/resources/i18n/TransactionValidity_fr.properties @@ -1,151 +1,195 @@ -OK = OK - -INVALID_ADDRESS = adresse invalide - -NEGATIVE_AMOUNT = montant invalide/négatif - -NEGATIVE_FEE = frais invalides/négatifs - -NO_BALANCE = solde insuffisant - -INVALID_REFERENCE = référence invalide - -INVALID_NAME_LENGTH = longueur de nom invalide - -INVALID_VALUE_LENGTH = longueur de 'valeur' invalide - -NAME_ALREADY_REGISTERED = le nom est déjà enregistré - -NAME_DOES_NOT_EXIST = le nom n'existe pas - -INVALID_NAME_OWNER = le nom du propriétaire est invalide - -NAME_ALREADY_FOR_SALE = le nom est déjà en vente - -NAME_NOT_FOR_SALE = le nom n'est pas à vendre - -BUYER_ALREADY_OWNER = l'acheteur est déjà le propriétaire - -INVALID_AMOUNT = montant invalide - -INVALID_SELLER = vendeur invalide - -NAME_NOT_NORMALIZED = le nom n'est pas sous la forme 'normalisée' Unicode - -INVALID_DESCRIPTION_LENGTH = longueur de description invalide - -INVALID_OPTIONS_COUNT = nombre d'options invalides - -INVALID_OPTION_LENGTH = longueur des options invalide - -DUPLICATE_OPTION = option dupliquée - -POLL_ALREADY_EXISTS = le scrutin existe déjà - -POLL_DOES_NOT_EXIST = le scrutin n'existe pas - -POLL_OPTION_DOES_NOT_EXIST = Ce choix de scrutin n'existe pas - -ALREADY_VOTED_FOR_THAT_OPTION = Vous avez déjà voté pour ce choix - -INVALID_DATA_LENGTH = longueur de données invalide - -INVALID_QUANTITY = quantité invalide - -ASSET_DOES_NOT_EXIST = l'actif n'existe pas - -INVALID_RETURN = retour invalide - -HAVE_EQUALS_WANT = l'actif désiré est le même que l'actif possédé - -ORDER_DOES_NOT_EXIST = l'ordre d'échange d'actifs n'existe pas - -INVALID_ORDER_CREATOR = créateur d'ordre invalide - -INVALID_PAYMENTS_COUNT = nombre de paiements invalides - -NEGATIVE_PRICE = prix invalide/négatif - -INVALID_CREATION_BYTES = octets de création invalides - -INVALID_TAGS_LENGTH = longueur de 'tags' invalide - -INVALID_AT_TYPE_LENGTH = longueur 'type' AT invalide - -INVALID_AT_TRANSACTION = transaction AT invalide - -INSUFFICIENT_FEE = frais insuffisant - -ASSET_DOES_NOT_MATCH_AT = l'actif ne correspond pas à l'actif d'AT -ASSET_ALREADY_EXISTS = l'actif existe déjà -MISSING_CREATOR = créateur manquant -TIMESTAMP_TOO_OLD = horodatage trop ancien -TIMESTAMP_TOO_NEW = horodatage trop récent -TOO_MANY_UNCONFIRMED = le compte a trop de transactions non confirmées en attente -GROUP_ALREADY_EXISTS = le groupe existe déjà -GROUP_DOES_NOT_EXIST = le groupe n'existe pas -INVALID_GROUP_OWNER = propriétaire de groupe invalide -ALREADY_GROUP_MEMBER = vous êtes déjà un(e) membre du groupe -GROUP_OWNER_CANNOT_LEAVE = le propriétaire du groupe ne peut pas quitter le groupe -NOT_GROUP_MEMBER = le compte n'est pas membre du groupe -ALREADY_GROUP_ADMIN = vous êtes déjà l'administrateur(trice) du groupe -NOT_GROUP_ADMIN = le compte n'est pas un administrateur du groupe -INVALID_LIFETIME = durée de vie invalide -INVITE_UNKNOWN = invitation de groupe inconnue -BAN_EXISTS = déjà banni -BAN_UNKNOWN = bannissement inconnu -BANNED_FROM_GROUP = banned from group -JOIN_REQUEST_EXISTS = la demande d'adhésion au groupe existe déjà -INVALID_GROUP_APPROVAL_THRESHOLD = seuil d'approbation de groupe non valide -GROUP_ID_MISMATCH = identifiant de groupe non-concorde -INVALID_GROUP_ID = identifiant de groupe invalide -TRANSACTION_UNKNOWN = transaction inconnue -TRANSACTION_ALREADY_CONFIRMED = la transaction a déjà été confirmée -INVALID_TX_GROUP_ID = identifiant du groupe de transactions invalide -TX_GROUP_ID_MISMATCH = l'identifiant du groupe de transaction ne correspond pas - -MULTIPLE_NAMES_FORBIDDEN = l'enregistrement de plusieurs noms par compte est interdit - -INVALID_ASSET_OWNER = propriétaire de l'actif invalide - -AT_IS_FINISHED = l'AT est fini - -NO_FLAG_PERMISSION = le compte n'a pas cette autorisation - -NOT_MINTING_ACCOUNT = le compte ne peut pas mint - -REWARD_SHARE_UNKNOWN = partage de récompense inconnu - -INVALID_REWARD_SHARE_PERCENT = pourcentage du partage de récompense invalide - -PUBLIC_KEY_UNKNOWN = clé publique inconnue - -INVALID_PUBLIC_KEY = clé publique invalide - -AT_UNKNOWN = AT inconnu - -AT_ALREADY_EXISTS = AT déjà existante - -GROUP_APPROVAL_NOT_REQUIRED = approbation de groupe non requise - -GROUP_APPROVAL_DECIDED = approbation de groupe déjà décidée - -MAXIMUM_REWARD_SHARES = déjà au nombre maximum de récompense pour ce compte - -TRANSACTION_ALREADY_EXISTS = la transaction existe déjà - -NO_BLOCKCHAIN_LOCK = nœud de la blockchain actuellement occupé -ORDER_ALREADY_CLOSED = l'ordre d'échange d'actifs est déjà fermé -CLOCK_NOT_SYNCED = horloge non synchronisée -ASSET_NOT_SPENDABLE = l'actif n'est pas dépensable -ACCOUNT_CANNOT_REWARD_SHARE = le compte ne peut pas récompenser -SELF_SHARE_EXISTS = l'auto-partage (récompense) existe déjà -ACCOUNT_ALREADY_EXISTS = Le compte existe déjà -INVALID_GROUP_BLOCK_DELAY = délai de blocage d'approbation de groupe invalide -INCORRECT_NONCE = PoW nonce incorrect -INVALID_TIMESTAMP_SIGNATURE = signature d'horodatage invalide -ADDRESS_IN_BLACKLIST = cette adresse est dans votre liste noire -ADDRESS_ABOVE_RATE_LIMIT = l'adresse a atteint la limite de débit spécifiée -DUPLICATE_MESSAGE = l'adresse a envoyé un message en double -INVALID_BUT_OK = invalide mais OK -NOT_YET_RELEASED = fonctionnalité pas encore publiée +# + +ACCOUNT_ALREADY_EXISTS = Le compte existe déjà + +ACCOUNT_CANNOT_REWARD_SHARE = le compte ne peut pas récompenser + +ADDRESS_ABOVE_RATE_LIMIT = l'adresse a atteint la limite de débit spécifiée + +ADDRESS_BLOCKED = cette adresse est bloquée + +ALREADY_GROUP_ADMIN = vous êtes déjà l'administrateur(trice) du groupe + +ALREADY_GROUP_MEMBER = vous êtes déjà un(e) membre du groupe + +ALREADY_VOTED_FOR_THAT_OPTION = Vous avez déjà voté pour ce choix + +ASSET_ALREADY_EXISTS = l'actif existe déjà + +ASSET_DOES_NOT_EXIST = l'actif n'existe pas + +ASSET_DOES_NOT_MATCH_AT = l'actif ne correspond pas à l'actif d'AT + +ASSET_NOT_SPENDABLE = l'actif n'est pas dépensable + +AT_ALREADY_EXISTS = AT déjà existante + +AT_IS_FINISHED = l'AT est fini + +AT_UNKNOWN = AT inconnu + +BAN_EXISTS = déjà banni + +BAN_UNKNOWN = bannissement inconnu + +BANNED_FROM_GROUP = banned from group + +BUYER_ALREADY_OWNER = l'acheteur est déjà le propriétaire + +CLOCK_NOT_SYNCED = horloge non synchronisée + +DUPLICATE_MESSAGE = l'adresse a envoyé un message en double + +DUPLICATE_OPTION = option dupliquée + +GROUP_ALREADY_EXISTS = le groupe existe déjà + +GROUP_APPROVAL_DECIDED = approbation de groupe déjà décidée + +GROUP_APPROVAL_NOT_REQUIRED = approbation de groupe non requise + +GROUP_DOES_NOT_EXIST = le groupe n'existe pas + +GROUP_ID_MISMATCH = identifiant de groupe non-concorde + +GROUP_OWNER_CANNOT_LEAVE = le propriétaire du groupe ne peut pas quitter le groupe + +HAVE_EQUALS_WANT = l'actif désiré est le même que l'actif possédé + +INCORRECT_NONCE = PoW nonce incorrect + +INSUFFICIENT_FEE = frais insuffisant + +INVALID_ADDRESS = adresse invalide + +INVALID_AMOUNT = montant invalide + +INVALID_ASSET_OWNER = propriétaire de l'actif invalide + +INVALID_AT_TRANSACTION = transaction AT invalide + +INVALID_AT_TYPE_LENGTH = longueur 'type' AT invalide + +INVALID_BUT_OK = invalide mais OK + +INVALID_CREATION_BYTES = octets de création invalides + +INVALID_DATA_LENGTH = longueur de données invalide + +INVALID_DESCRIPTION_LENGTH = longueur de description invalide + +INVALID_GROUP_APPROVAL_THRESHOLD = seuil d'approbation de groupe non valide + +INVALID_GROUP_BLOCK_DELAY = délai de blocage d'approbation de groupe invalide + +INVALID_GROUP_ID = identifiant de groupe invalide + +INVALID_GROUP_OWNER = propriétaire de groupe invalide + +INVALID_LIFETIME = durée de vie invalide + +INVALID_NAME_LENGTH = longueur de nom invalide + +INVALID_NAME_OWNER = le nom du propriétaire est invalide + +INVALID_OPTION_LENGTH = longueur des options invalide + +INVALID_OPTIONS_COUNT = nombre d'options invalides + +INVALID_ORDER_CREATOR = créateur d'ordre invalide + +INVALID_PAYMENTS_COUNT = nombre de paiements invalides + +INVALID_PUBLIC_KEY = clé publique invalide + +INVALID_QUANTITY = quantité invalide + +INVALID_REFERENCE = référence invalide + +INVALID_RETURN = retour invalide + +INVALID_REWARD_SHARE_PERCENT = pourcentage du partage de récompense invalide + +INVALID_SELLER = vendeur invalide + +INVALID_TAGS_LENGTH = longueur de 'tags' invalide + +INVALID_TIMESTAMP_SIGNATURE = signature d'horodatage invalide + +INVALID_TX_GROUP_ID = identifiant du groupe de transactions invalide + +INVALID_VALUE_LENGTH = longueur de 'valeur' invalide + +INVITE_UNKNOWN = invitation de groupe inconnue + +JOIN_REQUEST_EXISTS = la demande d'adhésion au groupe existe déjà + +MAXIMUM_REWARD_SHARES = déjà au nombre maximum de récompense pour ce compte + +MISSING_CREATOR = créateur manquant + +MULTIPLE_NAMES_FORBIDDEN = l'enregistrement de plusieurs noms par compte est interdit + +NAME_ALREADY_FOR_SALE = le nom est déjà en vente + +NAME_ALREADY_REGISTERED = le nom est déjà enregistré + +NAME_BLOCKED = ce nom est bloqué + +NAME_DOES_NOT_EXIST = le nom n'existe pas + +NAME_NOT_FOR_SALE = le nom n'est pas à vendre + +NAME_NOT_NORMALIZED = le nom n'est pas sous la forme 'normalisée' Unicode + +NEGATIVE_AMOUNT = montant invalide/négatif + +NEGATIVE_FEE = frais invalides/négatifs + +NEGATIVE_PRICE = prix invalide/négatif + +NO_BALANCE = solde insuffisant + +NO_BLOCKCHAIN_LOCK = nœud de la blockchain actuellement occupé + +NO_FLAG_PERMISSION = le compte n'a pas cette autorisation + +NOT_GROUP_ADMIN = le compte n'est pas un administrateur du groupe + +NOT_GROUP_MEMBER = le compte n'est pas membre du groupe + +NOT_MINTING_ACCOUNT = le compte ne peut pas mint + +NOT_YET_RELEASED = fonctionnalité pas encore publiée + +OK = OK + +ORDER_ALREADY_CLOSED = l'ordre d'échange d'actifs est déjà fermé + +ORDER_DOES_NOT_EXIST = l'ordre d'échange d'actifs n'existe pas + +POLL_ALREADY_EXISTS = le scrutin existe déjà + +POLL_DOES_NOT_EXIST = le scrutin n'existe pas + +POLL_OPTION_DOES_NOT_EXIST = Ce choix de scrutin n'existe pas + +PUBLIC_KEY_UNKNOWN = clé publique inconnue + +REWARD_SHARE_UNKNOWN = partage de récompense inconnu + +SELF_SHARE_EXISTS = l'auto-partage (récompense) existe déjà + +TIMESTAMP_TOO_NEW = horodatage trop récent + +TIMESTAMP_TOO_OLD = horodatage trop ancien + +TOO_MANY_UNCONFIRMED = le compte a trop de transactions non confirmées en attente + +TRANSACTION_ALREADY_CONFIRMED = la transaction a déjà été confirmée + +TRANSACTION_ALREADY_EXISTS = la transaction existe déjà + +TRANSACTION_UNKNOWN = transaction inconnue + +TX_GROUP_ID_MISMATCH = l'identifiant du groupe de transaction ne correspond pas diff --git a/src/main/resources/i18n/TransactionValidity_hu.properties b/src/main/resources/i18n/TransactionValidity_hu.properties index bb43e18f..1b2558bb 100644 --- a/src/main/resources/i18n/TransactionValidity_hu.properties +++ b/src/main/resources/i18n/TransactionValidity_hu.properties @@ -1,114 +1,32 @@ # Magyar myelvre forditotta: Szkíta (Scythian). 2021 Augusztus 7. -OK = OK +ACCOUNT_ALREADY_EXISTS = ez a fiók már létezik -INVALID_ADDRESS = érvénytelen név vagy cím +ACCOUNT_CANNOT_REWARD_SHARE = ez a fiók nem vehet részt jutalék-megosztásban -NEGATIVE_AMOUNT = negatív összeg +ADDRESS_ABOVE_RATE_LIMIT = ez a cím elérte a megengedett mérték korlátot -NEGATIVE_FEE = érvénytelen/negatív tranzakciós díj - -NO_BALANCE = elégtelen egyenleg - -INVALID_REFERENCE = érvénytelen hivatkozás - -INVALID_NAME_LENGTH = érvénytelen névhossz - -INVALID_VALUE_LENGTH = érvénytelen értékhossz - -NAME_ALREADY_REGISTERED = ez a név már regisztrált - -NAME_DOES_NOT_EXIST = ez a név nem létezik - -INVALID_NAME_OWNER = érvénytelen név tulajdonos - -NAME_ALREADY_FOR_SALE = ez a név már eladó - -NAME_NOT_FOR_SALE = ez a név nem eladó - -BUYER_ALREADY_OWNER = ez a vevő már a tulajdonos - -INVALID_AMOUNT = érvénytelen összeg - -INVALID_SELLER = érvénytelen eladó - -NAME_NOT_NORMALIZED = ez a név nincs "normalizált" Unicode formátumban - -INVALID_DESCRIPTION_LENGTH = érvénytelen leíráshossz - -INVALID_OPTIONS_COUNT = invalid options count - -INVALID_OPTION_LENGTH = érvénytelen opciókszám - -DUPLICATE_OPTION = ez a lehetőség már létezik - -POLL_ALREADY_EXISTS = ez a szavazás már létezik - -POLL_DOES_NOT_EXIST = ez a szavazás nem létezik - -POLL_OPTION_DOES_NOT_EXIST = ez a szavazási lehetőség nem létezik - -ALREADY_VOTED_FOR_THAT_OPTION = erre a lehetőségre már szavaztál - -INVALID_DATA_LENGTH = érvénytelen adathossz - -INVALID_QUANTITY = érvénytelen mennyiség - -ASSET_DOES_NOT_EXIST = tőke nem létezik - -INVALID_RETURN = érvénytelen csere tőke - -HAVE_EQUALS_WANT = saját tőke egyenlő a csere tőkével - -ORDER_DOES_NOT_EXIST = tőke rendelés nem létezik - -INVALID_ORDER_CREATOR = érvénytelen rendelés létrehozó - -INVALID_PAYMENTS_COUNT = a kifizetések száma érvénytelen - -NEGATIVE_PRICE = érvénytelen/negatív ár - -INVALID_CREATION_BYTES = érvénytelen létrehozási bájtok - -INVALID_TAGS_LENGTH = érvénytelen cimkehossz - -INVALID_AT_TYPE_LENGTH = érvénytelen AT "típus" hossz - -INVALID_AT_TRANSACTION = érvénytelen AT tranzakció - -INSUFFICIENT_FEE = elégtelen díj - -ASSET_DOES_NOT_MATCH_AT = a tőke nem egyezik az AT tőkéjével - -ASSET_ALREADY_EXISTS = ez a tőke már létezik - -MISSING_CREATOR = hiányzó létrehozó - -TIMESTAMP_TOO_OLD = időbélyeg túl régi - -TIMESTAMP_TOO_NEW = időbélyeg túl korai - -TOO_MANY_UNCONFIRMED = ennek a fióknak túl sok meg nem erősített tranzakciója van folyamatban - -GROUP_ALREADY_EXISTS = ez a csoport már létezik - -GROUP_DOES_NOT_EXIST = ez a csoport nem létezik - -INVALID_GROUP_OWNER = érvénytelen csoport tulajdonos - -ALREADY_GROUP_MEMBER = már csoporttag - -GROUP_OWNER_CANNOT_LEAVE = a csoport tulajdonos nem tudja elhagyni a csoportot - -NOT_GROUP_MEMBER = ez a tag nem csoporttag +ADDRESS_BLOCKED = ez a cím le van tiltva ALREADY_GROUP_ADMIN = már csoport adminisztrátor -NOT_GROUP_ADMIN = ez a tag nem csoport adminisztrátor +ALREADY_GROUP_MEMBER = már csoporttag -INVALID_LIFETIME = érvénytelen élettartam +ALREADY_VOTED_FOR_THAT_OPTION = erre a lehetőségre már szavaztál -INVITE_UNKNOWN = ismeretlen csoport meghívás +ASSET_ALREADY_EXISTS = ez a tőke már létezik + +ASSET_DOES_NOT_EXIST = tőke nem létezik + +ASSET_DOES_NOT_MATCH_AT = a tőke nem egyezik az AT tőkéjével + +ASSET_NOT_SPENDABLE = ez a tőke nem értékesíthető + +AT_ALREADY_EXISTS = az AT már létezik + +AT_IS_FINISHED = az AT végzett + +AT_UNKNOWN = az AT ismeretlen BAN_EXISTS = már ki van tiltva @@ -116,80 +34,162 @@ BAN_UNKNOWN = kitiltás nem létezik BANNED_FROM_GROUP = ki van tiltva a csoportból -JOIN_REQUEST_EXISTS = a csoporthoz való csatlakozási kérelem már megtöretént - -INVALID_GROUP_APPROVAL_THRESHOLD = érvénytelen jóváhagyási küszöbérték - -GROUP_ID_MISMATCH = csoportazonosító nem egyezik - -INVALID_GROUP_ID = csoportazonosító érvénytelen - -TRANSACTION_UNKNOWN = ismeretlen tranzakció - -TRANSACTION_ALREADY_CONFIRMED = ez a tranzakció már meg van erősítve - -INVALID_TX_GROUP_ID = a tranzakció csoportazonosítója érvénytelen - -TX_GROUP_ID_MISMATCH = a tranzakció csoportazonosítója nem egyezik - -MULTIPLE_NAMES_FORBIDDEN = fiókonként több név regisztrálása tilos - -INVALID_ASSET_OWNER = érvénytelen tőke tulajdonos - -AT_IS_FINISHED = az AT végzett - -NO_FLAG_PERMISSION = ez a fiók nem rendelkezik ezzel az engedéllyel - -NOT_MINTING_ACCOUNT = ez a fiók nem tud QORT-ot verni - -REWARD_SHARE_UNKNOWN = ez a jutalék-megosztás ismeretlen - -INVALID_REWARD_SHARE_PERCENT = ez a jutalék-megosztási arány érvénytelen - -PUBLIC_KEY_UNKNOWN = ismeretlen nyilvános kulcs - -INVALID_PUBLIC_KEY = érvénytelen nyilvános kulcs - -AT_UNKNOWN = az AT ismeretlen - -AT_ALREADY_EXISTS = az AT már létezik - -GROUP_APPROVAL_NOT_REQUIRED = csoport általi jóváhagyás nem szükséges - -GROUP_APPROVAL_DECIDED = csoport általi jóváhagyás el van döntve - -MAXIMUM_REWARD_SHARES = ez a fiókcím már elérte a maximális lehetséges jutalék-megosztási részesedést - -TRANSACTION_ALREADY_EXISTS = ez a tranzakció már létezik - -NO_BLOCKCHAIN_LOCK = csomópont blokklánca jelenleg elfoglalt - -ORDER_ALREADY_CLOSED = ez a tőke értékesítés már befejeződött +BUYER_ALREADY_OWNER = ez a vevő már a tulajdonos CLOCK_NOT_SYNCED = az óra nincs szinkronizálva -ASSET_NOT_SPENDABLE = ez a tőke nem értékesíthető +DUPLICATE_MESSAGE = ez a cím duplikált üzenetet küldött -ACCOUNT_CANNOT_REWARD_SHARE = ez a fiók nem vehet részt jutalék-megosztásban +DUPLICATE_OPTION = ez a lehetőség már létezik -SELF_SHARE_EXISTS = önrészes jutalék-megosztás már létezik +GROUP_ALREADY_EXISTS = ez a csoport már létezik -ACCOUNT_ALREADY_EXISTS = ez a fiók már létezik +GROUP_APPROVAL_DECIDED = csoport általi jóváhagyás el van döntve -INVALID_GROUP_BLOCK_DELAY = invalid group-approval block delay +GROUP_APPROVAL_NOT_REQUIRED = csoport általi jóváhagyás nem szükséges + +GROUP_DOES_NOT_EXIST = ez a csoport nem létezik + +GROUP_ID_MISMATCH = csoportazonosító nem egyezik + +GROUP_OWNER_CANNOT_LEAVE = a csoport tulajdonosa nem tudja elhagyni a csoportot + +HAVE_EQUALS_WANT = saját tőke egyenlő a csere tőkével INCORRECT_NONCE = helytelen Proof-of-Work Nonce -INVALID_TIMESTAMP_SIGNATURE = érvénytelen időbélyeg aláírás +INSUFFICIENT_FEE = elégtelen díj -ADDRESS_BLOCKED = this address is blocked +INVALID_ADDRESS = érvénytelen név vagy cím -NAME_BLOCKED = this name is blocked +INVALID_AMOUNT = érvénytelen összeg -ADDRESS_ABOVE_RATE_LIMIT = ez a cím elérte a megengedett mérték korlátot +INVALID_ASSET_OWNER = érvénytelen tőke tulajdonos -DUPLICATE_MESSAGE = ez a cím duplikált üzenetet küldött +INVALID_AT_TRANSACTION = érvénytelen AT tranzakció + +INVALID_AT_TYPE_LENGTH = érvénytelen AT típushossz INVALID_BUT_OK = érvénytelen de elfogadva +INVALID_CREATION_BYTES = érvénytelen létrehozási bájtok + +INVALID_DATA_LENGTH = érvénytelen adathossz + +INVALID_DESCRIPTION_LENGTH = érvénytelen leíráshossz + +INVALID_GROUP_APPROVAL_THRESHOLD = érvénytelen jóváhagyási küszöbérték + +INVALID_GROUP_BLOCK_DELAY = invalid group-approval block delay + +INVALID_GROUP_ID = csoportazonosító érvénytelen + +INVALID_GROUP_OWNER = érvénytelen csoporttulajdonos + +INVALID_LIFETIME = érvénytelen élettartam + +INVALID_NAME_LENGTH = érvénytelen névhossz + +INVALID_NAME_OWNER = érvénytelen névtulajdonos + +INVALID_OPTION_LENGTH = érvénytelen opciószám + +INVALID_OPTIONS_COUNT = invalid options count + +INVALID_ORDER_CREATOR = érvénytelen a rendelés létrehozója + +INVALID_PAYMENTS_COUNT = a kifizetések száma érvénytelen + +INVALID_PUBLIC_KEY = érvénytelen nyilvános kulcs + +INVALID_QUANTITY = érvénytelen mennyiség + +INVALID_REFERENCE = érvénytelen hivatkozás + +INVALID_RETURN = érvénytelen csere tőke + +INVALID_REWARD_SHARE_PERCENT = ez a jutalék-megosztási arány érvénytelen + +INVALID_SELLER = érvénytelen eladó + +INVALID_TAGS_LENGTH = érvénytelen cimkehossz + +INVALID_TIMESTAMP_SIGNATURE = érvénytelen időbélyeg-aláírás + +INVALID_TX_GROUP_ID = a tranzakció csoportazonosítója érvénytelen + +INVALID_VALUE_LENGTH = érvénytelen értékhossz + +INVITE_UNKNOWN = ismeretlen csoport meghívás + +JOIN_REQUEST_EXISTS = a csoporthoz való csatlakozási kérelem már létezik + +MAXIMUM_REWARD_SHARES = ez a fiókcím már elérte a maximális lehetséges jutalék-megosztási részesedést + +MISSING_CREATOR = hiányzó létrehozó + +MULTIPLE_NAMES_FORBIDDEN = fiókonként több név regisztrálása tilos + +NAME_ALREADY_FOR_SALE = ez a név már eladó + +NAME_ALREADY_REGISTERED = ez a név már regisztrált + +NAME_BLOCKED = ez a név tiltva van + +NAME_DOES_NOT_EXIST = ez a név nem létezik + +NAME_NOT_FOR_SALE = ez a név nem eladó + +NAME_NOT_NORMALIZED = ez a név nincs "normalizált" Unicode formátumban + +NEGATIVE_AMOUNT = érvénytelen/negatív összeg + +NEGATIVE_FEE = érvénytelen/negatív tranzakciós díj + +NEGATIVE_PRICE = érvénytelen/negatív ár + +NO_BALANCE = elégtelen egyenleg + +NO_BLOCKCHAIN_LOCK = csomópont blokklánca jelenleg foglalt + +NO_FLAG_PERMISSION = ez a fiók nem rendelkezik ezzel az engedéllyel + +NOT_GROUP_ADMIN = ez a tag nem csoportadminisztrátor + +NOT_GROUP_MEMBER = ez a tag nem csoporttag + +NOT_MINTING_ACCOUNT = ez a fiók nem tud QORT-ot verni + NOT_YET_RELEASED = ez a funkció még nem került kiadásra + +OK = OK + +ORDER_ALREADY_CLOSED = ez a tőkeértékesítés már befejeződött + +ORDER_DOES_NOT_EXIST = tőkerendelés nem létezik + +POLL_ALREADY_EXISTS = ez a szavazás már létezik + +POLL_DOES_NOT_EXIST = ez a szavazás nem létezik + +POLL_OPTION_DOES_NOT_EXIST = ez a válaszlehetőség nem létezik + +PUBLIC_KEY_UNKNOWN = ismeretlen nyilvános kulcs + +REWARD_SHARE_UNKNOWN = ez a jutalék-megosztás ismeretlen + +SELF_SHARE_EXISTS = önrészes jutalék-megosztás már létezik + +TIMESTAMP_TOO_NEW = időbélyeg túl friss + +TIMESTAMP_TOO_OLD = időbélyeg túl régi + +TOO_MANY_UNCONFIRMED = ennek a fióknak túl sok meg nem erősített tranzakciója van folyamatban + +TRANSACTION_ALREADY_CONFIRMED = ez a tranzakció már meg van erősítve + +TRANSACTION_ALREADY_EXISTS = ez a tranzakció már létezik + +TRANSACTION_UNKNOWN = ismeretlen tranzakció + +TX_GROUP_ID_MISMATCH = a tranzakció csoportazonosítója nem egyezik diff --git a/src/main/resources/i18n/TransactionValidity_it.properties b/src/main/resources/i18n/TransactionValidity_it.properties index 762f0865..390f914a 100644 --- a/src/main/resources/i18n/TransactionValidity_it.properties +++ b/src/main/resources/i18n/TransactionValidity_it.properties @@ -1,12 +1,16 @@ # Italian translation by Pabs 2021 -ACCOUNT_ALREADY_EXISTS = l'account gia esiste +ACCOUNT_ALREADY_EXISTS = l'account esiste già -ACCOUNT_CANNOT_REWARD_SHARE = l'account non può fare la condivisione di ricompensa +ACCOUNT_CANNOT_REWARD_SHARE = l'account non può ricevere ricompense -ALREADY_GROUP_ADMIN = è già amministratore del gruppo +ADDRESS_ABOVE_RATE_LIMIT = l'indirizzo ha raggiunto il limite stabilito -ALREADY_GROUP_MEMBER = è già membro del gruppo +ADDRESS_BLOCKED = questo indirizzo è bloccato + +ALREADY_GROUP_ADMIN = già amministratore del gruppo + +ALREADY_GROUP_MEMBER = già membro del gruppo ALREADY_VOTED_FOR_THAT_OPTION = già votato per questa opzione @@ -24,31 +28,33 @@ AT_IS_FINISHED = AT ha finito AT_UNKNOWN = AT sconosciuto -BANNED_FROM_GROUP = divietato dal gruppo - BAN_EXISTS = il divieto esiste già BAN_UNKNOWN = divieto sconosciuto +BANNED_FROM_GROUP = vietato dal gruppo + BUYER_ALREADY_OWNER = l'acquirente è già proprietario CLOCK_NOT_SYNCED = orologio non sincronizzato +DUPLICATE_MESSAGE = l'indirizzo ha inviato un messaggio duplicato + DUPLICATE_OPTION = opzione duplicata GROUP_ALREADY_EXISTS = gruppo già esistente GROUP_APPROVAL_DECIDED = approvazione di gruppo già decisa -GROUP_APPROVAL_NOT_REQUIRED = approvazione di gruppo non richiesto +GROUP_APPROVAL_NOT_REQUIRED = approvazione di gruppo non richiesta -GROUP_DOES_NOT_EXIST = gruppo non esiste +GROUP_DOES_NOT_EXIST = il gruppo non esiste GROUP_ID_MISMATCH = identificazione di gruppo non corrispondente GROUP_OWNER_CANNOT_LEAVE = il proprietario del gruppo non può lasciare il gruppo -HAVE_EQUALS_WANT = la risorsa avere è uguale a la risorsa volere +HAVE_EQUALS_WANT = la richiesta è uguale a ciò che è già posseduto INCORRECT_NONCE = PoW nonce sbagliato @@ -64,9 +70,11 @@ INVALID_AT_TRANSACTION = transazione AT non valida INVALID_AT_TYPE_LENGTH = lunghezza di "tipo" AT non valida -INVALID_CREATION_BYTES = byte di creazione non validi +INVALID_BUT_OK = non valido ma accettato -INVALID_DATA_LENGTH = lunghezza di dati non valida +INVALID_CREATION_BYTES = creazione di byte non validi + +INVALID_DATA_LENGTH = lunghezza dati non valida INVALID_DESCRIPTION_LENGTH = lunghezza della descrizione non valida @@ -78,16 +86,16 @@ INVALID_GROUP_ID = identificazione di gruppo non valida INVALID_GROUP_OWNER = proprietario di gruppo non valido -INVALID_LIFETIME = durata della vita non valida +INVALID_LIFETIME = durata non valida INVALID_NAME_LENGTH = lunghezza del nome non valida INVALID_NAME_OWNER = proprietario del nome non valido -INVALID_OPTIONS_COUNT = conteggio di opzioni non validi - INVALID_OPTION_LENGTH = lunghezza di opzioni non valida +INVALID_OPTIONS_COUNT = conteggio di opzioni non validi + INVALID_ORDER_CREATOR = creatore dell'ordine non valido INVALID_PAYMENTS_COUNT = conteggio pagamenti non validi @@ -98,7 +106,7 @@ INVALID_QUANTITY = quantità non valida INVALID_REFERENCE = riferimento non valido -INVALID_RETURN = ritorno non valido +INVALID_RETURN = risposta non valida INVALID_REWARD_SHARE_PERCENT = percentuale condivisione di ricompensa non valida @@ -106,6 +114,8 @@ INVALID_SELLER = venditore non valido INVALID_TAGS_LENGTH = lunghezza dei "tag" non valida +INVALID_TIMESTAMP_SIGNATURE = firma timestamp non valida + INVALID_TX_GROUP_ID = identificazione di gruppo di transazioni non valida INVALID_VALUE_LENGTH = lunghezza "valore" non valida @@ -114,16 +124,18 @@ INVITE_UNKNOWN = invito di gruppo sconosciuto JOIN_REQUEST_EXISTS = la richiesta di iscrizione al gruppo già esiste -MAXIMUM_REWARD_SHARES = numero massimo di condivisione di ricompensa raggiunto per l'account +MAXIMUM_REWARD_SHARES = numero massimo di condivisione di ricompensa raggiunto per l'account MISSING_CREATOR = creatore mancante -MULTIPLE_NAMES_FORBIDDEN = è vietata la registrazione di multipli nomi per account +MULTIPLE_NAMES_FORBIDDEN = è vietata la registrazione di nomi multipli per singolo account NAME_ALREADY_FOR_SALE = nome già in vendita NAME_ALREADY_REGISTERED = nome già registrato +NAME_BLOCKED = questo nome è bloccato + NAME_DOES_NOT_EXIST = il nome non esiste NAME_NOT_FOR_SALE = il nome non è in vendita @@ -136,6 +148,12 @@ NEGATIVE_FEE = tariffa non valida / negativa NEGATIVE_PRICE = prezzo non valido / negativo +NO_BALANCE = bilancio insufficiente + +NO_BLOCKCHAIN_LOCK = nodo di blockchain attualmente occupato + +NO_FLAG_PERMISSION = l'account non dispone di questa autorizzazione + NOT_GROUP_ADMIN = l'account non è un amministratore di gruppo NOT_GROUP_MEMBER = l'account non è un membro del gruppo @@ -144,17 +162,11 @@ NOT_MINTING_ACCOUNT = l'account non può coniare NOT_YET_RELEASED = funzione non ancora rilasciata -NO_BALANCE = equilibrio insufficiente - -NO_BLOCKCHAIN_LOCK = nodo di blockchain attualmente occupato - -NO_FLAG_PERMISSION = l'account non dispone di questa autorizzazione - OK = OK ORDER_ALREADY_CLOSED = l'ordine di scambio di risorsa è già chiuso -ORDER_DOES_NOT_EXIST = l'ordine di scambio di risorsa non esiste +ORDER_DOES_NOT_EXIST = l'ordine di scambio di risorsa non esiste POLL_ALREADY_EXISTS = il sondaggio già esiste @@ -166,7 +178,7 @@ PUBLIC_KEY_UNKNOWN = chiave pubblica sconosciuta REWARD_SHARE_UNKNOWN = condivisione di ricompensa sconosciuta -SELF_SHARE_EXISTS = condivisione di sé (condivisione di ricompensa) già esiste +SELF_SHARE_EXISTS = condivisione di ricompensa già esiste TIMESTAMP_TOO_NEW = timestamp troppo nuovo @@ -181,15 +193,3 @@ TRANSACTION_ALREADY_EXISTS = la transazione già esiste TRANSACTION_UNKNOWN = transazione sconosciuta TX_GROUP_ID_MISMATCH = identificazione di gruppo della transazione non corrisponde - -ADDRESS_BLOCKED = this address is blocked - -NAME_BLOCKED = this name is blocked - -ADDRESS_ABOVE_RATE_LIMIT = address reached specified rate limit - -DUPLICATE_MESSAGE = address sent duplicate message - -INVALID_TIMESTAMP_SIGNATURE = Invalid timestamp signature - -INVALID_BUT_OK = Invalid but OK diff --git a/src/main/resources/i18n/TransactionValidity_nl.properties b/src/main/resources/i18n/TransactionValidity_nl.properties index 726af0a9..36b0fec9 100644 --- a/src/main/resources/i18n/TransactionValidity_nl.properties +++ b/src/main/resources/i18n/TransactionValidity_nl.properties @@ -1,10 +1,16 @@ +# + ACCOUNT_ALREADY_EXISTS = account bestaat al ACCOUNT_CANNOT_REWARD_SHARE = account kan geen beloningen delen -ALREADY_GROUP_ADMIN = reeds groepsadministrator +ADDRESS_ABOVE_RATE_LIMIT = adres heeft een waarde limiet bereikt -ALREADY_GROUP_MEMBER = reeds groepslid +ADDRESS_BLOCKED = adres is geblokkeerd + +ALREADY_GROUP_ADMIN = groeps administrator bestaat al + +ALREADY_GROUP_MEMBER = groeps lid bestaat al ALREADY_VOTED_FOR_THAT_OPTION = reeds gestemd voor die optie @@ -12,9 +18,9 @@ ASSET_ALREADY_EXISTS = asset bestaat al ASSET_DOES_NOT_EXIST = asset bestaat niet -ASSET_DOES_NOT_MATCH_AT = asset matcht niet met de asset van de AT +ASSET_DOES_NOT_MATCH_AT = asset komt niet overeen met de asset van de AT -ASSET_NOT_SPENDABLE = asset is niet uitgeefbaar +ASSET_NOT_SPENDABLE = asset is niet toerijkend AT_ALREADY_EXISTS = AT bestaat al @@ -22,31 +28,33 @@ AT_IS_FINISHED = AT is afgelopen AT_UNKNOWN = AT onbekend -BANNED_FROM_GROUP = verbannen uit groep +BAN_EXISTS = hiervoor bestaat een verbod -BAN_EXISTS = ban bestaat al +BAN_UNKNOWN = onbekend verbod -BAN_UNKNOWN = ban onbekend +BANNED_FROM_GROUP = verbod om deel te nemen aan de groep -BUYER_ALREADY_OWNER = koper is al eigenaar +BUYER_ALREADY_OWNER = koper is al de eigenaar CLOCK_NOT_SYNCED = klok is niet gesynchronizeerd +DUPLICATE_MESSAGE = dubbel adres bericht + DUPLICATE_OPTION = dubbele optie GROUP_ALREADY_EXISTS = groep bestaat reeds -GROUP_APPROVAL_DECIDED = groepsgoedkeuring reeds afgewezen +GROUP_APPROVAL_DECIDED = groeps goedkeuring afgewezen -GROUP_APPROVAL_NOT_REQUIRED = groepsgoedkeuring niet vereist +GROUP_APPROVAL_NOT_REQUIRED = groeps goedkeuring niet vereist GROUP_DOES_NOT_EXIST = groep bestaat niet -GROUP_ID_MISMATCH = ongeldige match met groep-ID +GROUP_ID_MISMATCH = groeps ID komt niet overeen -GROUP_OWNER_CANNOT_LEAVE = groepseigenaar kan de groep niet verlaten +GROUP_OWNER_CANNOT_LEAVE = groep eigenaar kan de groep niet verlaten -HAVE_EQUALS_WANT = have-asset is gelijk aan want-asset +HAVE_EQUALS_WANT = asset is gelijk aan Want-asset INCORRECT_NONCE = incorrecte PoW nonce @@ -60,21 +68,23 @@ INVALID_ASSET_OWNER = ongeldige asset-eigenaar INVALID_AT_TRANSACTION = ongeldige AT-transactie -INVALID_AT_TYPE_LENGTH = ongeldige lengte voor AT 'type' +INVALID_AT_TYPE_LENGTH = ongeldige lengte voor AT type -INVALID_CREATION_BYTES = ongeldige creation bytes +INVALID_BUT_OK = ongeldig maar is in orde -INVALID_DATA_LENGTH = ongeldige lengte voor data +INVALID_CREATION_BYTES = ongeldige gecreerde bytes -INVALID_DESCRIPTION_LENGTH = ongeldige lengte voor beschrijving +INVALID_DATA_LENGTH = ongeldige data lengte + +INVALID_DESCRIPTION_LENGTH = ongeldige lengte voor de beschrijving INVALID_GROUP_APPROVAL_THRESHOLD = ongeldige drempelwaarde voor groepsgoedkeuring -INVALID_GROUP_BLOCK_DELAY = ongeldige groepsgoedkeuring voor blokvertraging +INVALID_GROUP_BLOCK_DELAY = ongeldige groep blok vertraging INVALID_GROUP_ID = ongeldige groep-ID -INVALID_GROUP_OWNER = ongeldige groepseigenaar +INVALID_GROUP_OWNER = ongeldige groep eigenaar INVALID_LIFETIME = ongeldige levensduur @@ -82,13 +92,13 @@ INVALID_NAME_LENGTH = ongeldige lengte voor naam INVALID_NAME_OWNER = ongeldige naam voor eigenaar -INVALID_OPTIONS_COUNT = ongeldige hoeveelheid opties - INVALID_OPTION_LENGTH = ongeldige lengte voor opties -INVALID_ORDER_CREATOR = ongeldige aanmaker voor order +INVALID_OPTIONS_COUNT = ongeldige hoeveelheid opties -INVALID_PAYMENTS_COUNT = ongeldige hoeveelheid betalingen +INVALID_ORDER_CREATOR = ongeldige gebruiker voor deze order + +INVALID_PAYMENTS_COUNT = ongeldige betalings waarde INVALID_PUBLIC_KEY = ongeldige public key @@ -98,21 +108,23 @@ INVALID_REFERENCE = ongeldige verwijzing INVALID_RETURN = ongeldige return -INVALID_REWARD_SHARE_PERCENT = ongeldig percentage voor beloningsdeling +INVALID_REWARD_SHARE_PERCENT = ongeldig belonings percentage INVALID_SELLER = ongeldige verkoper INVALID_TAGS_LENGTH = ongeldige lengte voor 'tags' +INVALID_TIMESTAMP_SIGNATURE = ongeldig tijd aanduiding + INVALID_TX_GROUP_ID = ongeldige transactiegroep-ID -INVALID_VALUE_LENGTH = ongeldige lengte voor 'waarde' +INVALID_VALUE_LENGTH = ongeldige lengte voor de waarde INVITE_UNKNOWN = onbekende groepsuitnodiging JOIN_REQUEST_EXISTS = aanvraag om lid van groep te worden bestaat al -MAXIMUM_REWARD_SHARES = limiet aan beloningsdelingen voor dit account is bereikt +MAXIMUM_REWARD_SHARES = limiet aan belonen voor dit account bereikt MISSING_CREATOR = ontbrekende aanmaker @@ -122,33 +134,35 @@ NAME_ALREADY_FOR_SALE = naam reeds te koop NAME_ALREADY_REGISTERED = naam reeds geregistreerd +NAME_BLOCKED = deze naam is geblokkeerd + NAME_DOES_NOT_EXIST = naam bestaat niet NAME_NOT_FOR_SALE = naam is niet te koop -NAME_NOT_NORMALIZED = naam is niet in 'genormalizeerde' Unicode-vorm +NAME_NOT_NORMALIZED = naam voldoet niet aan Unicode-vorm -NEGATIVE_AMOUNT = ongeldige/negatieve hoeveelheid +NEGATIVE_AMOUNT = negatieve hoeveelheid -NEGATIVE_FEE = ongeldige/negatieve vergoeding +NEGATIVE_FEE = negatieve vergoeding -NEGATIVE_PRICE = ongeldige/negatieve prijs +NEGATIVE_PRICE = negatieve prijs + +NO_BALANCE = onvoldoende balans + +NO_BLOCKCHAIN_LOCK = geen blockchain slot + +NO_FLAG_PERMISSION = account heeft hier geen toestemming voor NOT_GROUP_ADMIN = account is geen groepsadministrator NOT_GROUP_MEMBER = account is geen groepslid -NOT_MINTING_ACCOUNT = account kan niet munten +NOT_MINTING_ACCOUNT = account kan niet minten NOT_YET_RELEASED = functie nog niet uitgebracht -NO_BALANCE = onvoldoende balans - -NO_BLOCKCHAIN_LOCK = blockchain van node is momenteel bezig - -NO_FLAG_PERMISSION = account heeft hier geen toestemming voor - -OK = Oke +OK = Ok ORDER_ALREADY_CLOSED = asset handelsorder is al gesloten @@ -162,9 +176,9 @@ POLL_OPTION_DOES_NOT_EXIST = peilingsoptie bestaat niet PUBLIC_KEY_UNKNOWN = public key onbekend -REWARD_SHARE_UNKNOWN = beloningsdeling onbekend +REWARD_SHARE_UNKNOWN = beloning vergoeding onbekend -SELF_SHARE_EXISTS = zelfdeling (beloningsdeling) bestaat reeds +SELF_SHARE_EXISTS = zelf vergoeding bestaat reeds TIMESTAMP_TOO_NEW = tijdstempel te nieuw @@ -178,16 +192,4 @@ TRANSACTION_ALREADY_EXISTS = transactie bestaat al TRANSACTION_UNKNOWN = transactie onbekend -TX_GROUP_ID_MISMATCH = groep-ID van transactie matcht niet - -ADDRESS_BLOCKED = this address is blocked - -NAME_BLOCKED = this name is blocked - -ADDRESS_ABOVE_RATE_LIMIT = address reached specified rate limit - -DUPLICATE_MESSAGE = address sent duplicate message - -INVALID_TIMESTAMP_SIGNATURE = Invalid timestamp signature - -INVALID_BUT_OK = Invalid but OK +TX_GROUP_ID_MISMATCH = groep ID komt niet overeen diff --git a/src/main/resources/i18n/TransactionValidity_ru.properties b/src/main/resources/i18n/TransactionValidity_ru.properties index 86e9d37a..2818374a 100644 --- a/src/main/resources/i18n/TransactionValidity_ru.properties +++ b/src/main/resources/i18n/TransactionValidity_ru.properties @@ -1,187 +1,195 @@ -ACCOUNT_ALREADY_EXISTS = аккаунт уже существует - -ACCOUNT_CANNOT_REWARD_SHARE = аккаунт не может делиться вознаграждением - -ALREADY_GROUP_ADMIN = уже администратор группы - -ALREADY_GROUP_MEMBER = уже член группы - -ALREADY_VOTED_FOR_THAT_OPTION = уже проголосовали за этот вариант - -ASSET_ALREADY_EXISTS = актив уже существует - -ASSET_DOES_NOT_EXIST = Актив не существует - -ASSET_DOES_NOT_MATCH_AT = актив не совпадает с АТ - -ASSET_NOT_SPENDABLE = актив не подлежит расходованию - -AT_ALREADY_EXISTS = AT уже существует - -AT_IS_FINISHED = AT в завершении - -AT_UNKNOWN = не известный АТ - -BANNED_FROM_GROUP = исключен из группы - -BAN_EXISTS = Бан - -BAN_UNKNOWN = не известный бан - -BUYER_ALREADY_OWNER = покупатель уже собственник - -CLOCK_NOT_SYNCED = часы не синхронизированы - -DUPLICATE_OPTION = дублировать вариант - -GROUP_ALREADY_EXISTS = группа уже существует - -GROUP_APPROVAL_DECIDED = гуппа одобрена - -GROUP_APPROVAL_NOT_REQUIRED = гупповое одобрение не требуется - -GROUP_DOES_NOT_EXIST = группа не существует - -GROUP_ID_MISMATCH = не соответствие идентификатора группы - -GROUP_OWNER_CANNOT_LEAVE = владелец группы не может уйти - -HAVE_EQUALS_WANT = иммеются равные желания - -INSUFFICIENT_FEE = недостаточная плата - -INVALID_ADDRESS = недействительный адрес - -INVALID_AMOUNT = недопустимая сумма - -INVALID_ASSET_OWNER = недействительный владелец актива - -INVALID_AT_TRANSACTION = недействительная АТ транзакция - -INVALID_AT_TYPE_LENGTH = недействительно для типа длины AT - -INVALID_CREATION_BYTES = недопустимые байты создания - -INVALID_DATA_LENGTH = недопустимая длина данных - -INVALID_DESCRIPTION_LENGTH = недопустимая длина описания - -INVALID_GROUP_APPROVAL_THRESHOLD = недопустимый порог утверждения группы - -INVALID_GROUP_ID = недопустимый идентификатор группы - -INVALID_GROUP_OWNER = недопу владелец группы - -INVALID_LIFETIME = недопу срок службы - -INVALID_NAME_LENGTH = недопустимая длина группы - -INVALID_NAME_OWNER = недопустимое имя владельца - -INVALID_OPTIONS_COUNT = неверное количество опций - -INVALID_OPTION_LENGTH = недопустимая длина опции - -INVALID_ORDER_CREATOR = недопустимый создатель заказа - -INVALID_PAYMENTS_COUNT = неверный подсчет платежей - -INVALID_PUBLIC_KEY = недействительный открытый ключ - -INVALID_QUANTITY = недопустимое количество - -INVALID_REFERENCE = неверная ссылка - -INVALID_RETURN = недопустимый возврат - -INVALID_REWARD_SHARE_PERCENT = недействительный процент награждения - -INVALID_SELLER = недействительный продавец - -INVALID_TAGS_LENGTH = недействительная длина тэгов - -INVALID_TX_GROUP_ID = недействительный идентификатор группы передачи - -INVALID_VALUE_LENGTH = недопустимое значение длины - -INVITE_UNKNOWN = приглашать неизветсных - -JOIN_REQUEST_EXISTS = запрос на присоединение существует - -MAXIMUM_REWARD_SHARES = максимальное вознаграждение - -MISSING_CREATOR = отсутствующий создатель - -MULTIPLE_NAMES_FORBIDDEN = несколько имен запрещено - -NAME_ALREADY_FOR_SALE = имя уже в продаже - -NAME_ALREADY_REGISTERED = имя уже зарегистрировано - -NAME_DOES_NOT_EXIST = имя не существует - -NAME_NOT_FOR_SALE = имя не продается - -NAME_NOT_LOWER_CASE = иммя не должно содержать строчный регистр - -NEGATIVE_AMOUNT = недостаточная сумма - -NEGATIVE_FEE = недостаточная комиссия - -NEGATIVE_PRICE = недостаточная стоимость - -NOT_GROUP_ADMIN = не администратор группы - -NOT_GROUP_MEMBER = не член группы - -NOT_MINTING_ACCOUNT = счет не чеканит - -NOT_YET_RELEASED = еще не выпущено - -NO_BALANCE = нет баланса - -NO_BLOCKCHAIN_LOCK = блокчейн узла в настоящее время занят - -NO_FLAG_PERMISSION = нет разрешения на флаг - -OK = OK - -ORDER_ALREADY_CLOSED = заказ закрыт - -ORDER_DOES_NOT_EXIST = заказа не существует - -POLL_ALREADY_EXISTS = опрос уже существует - -POLL_DOES_NOT_EXIST = опроса не существует - -POLL_OPTION_DOES_NOT_EXIST = вариантов ответа не существует - -PUBLIC_KEY_UNKNOWN = открытый ключ неизвестен - -SELF_SHARE_EXISTS = поделиться долей - -TIMESTAMP_TOO_NEW = новая метка времени - -TIMESTAMP_TOO_OLD = старая метка времени - -TOO_MANY_UNCONFIRMED = много не подтвержденных - -TRANSACTION_ALREADY_CONFIRMED = транзакция уже подтверждена - -TRANSACTION_ALREADY_EXISTS = транзакция существует - -TRANSACTION_UNKNOWN = неизвестная транзакция - -TX_GROUP_ID_MISMATCH = не соответствие идентификатора группы c хэш транзации - -ADDRESS_BLOCKED = this address is blocked - -NAME_BLOCKED = this name is blocked - -ADDRESS_ABOVE_RATE_LIMIT = address reached specified rate limit - -DUPLICATE_MESSAGE = address sent duplicate message - -INVALID_TIMESTAMP_SIGNATURE = Invalid timestamp signature - -INVALID_BUT_OK = Invalid but OK +# + +ACCOUNT_ALREADY_EXISTS = аккаунт уже существует + +ACCOUNT_CANNOT_REWARD_SHARE = аккаунт не может делиться вознаграждением + +ADDRESS_ABOVE_RATE_LIMIT = адрес достиг указанного предела скорости + +ADDRESS_BLOCKED = этот адрес заблокирован + +ALREADY_GROUP_ADMIN = уже администратор группы + +ALREADY_GROUP_MEMBER = уже член группы + +ALREADY_VOTED_FOR_THAT_OPTION = уже проголосовали за этот вариант + +ASSET_ALREADY_EXISTS = актив уже существует + +ASSET_DOES_NOT_EXIST = Актив не существует + +ASSET_DOES_NOT_MATCH_AT = актив не совпадает с АТ + +ASSET_NOT_SPENDABLE = актив не подлежит расходованию + +AT_ALREADY_EXISTS = AT уже существует + +AT_IS_FINISHED = AT в завершении + +AT_UNKNOWN = неизвестный АТ + +BAN_EXISTS = Бан + +BAN_UNKNOWN = неизвестный бан + +BANNED_FROM_GROUP = исключен из группы + +BUYER_ALREADY_OWNER = покупатель уже собственник + +CLOCK_NOT_SYNCED = часы не синхронизированы + +DUPLICATE_MESSAGE = адрес отправил дубликат сообщения + +DUPLICATE_OPTION = дублировать вариант + +GROUP_ALREADY_EXISTS = группа уже существует + +GROUP_APPROVAL_DECIDED = группа одобрена + +GROUP_APPROVAL_NOT_REQUIRED = групповое одобрение не требуется + +GROUP_DOES_NOT_EXIST = группа не существует + +GROUP_ID_MISMATCH = несоответствие идентификатора группы + +GROUP_OWNER_CANNOT_LEAVE = владелец группы не может уйти + +HAVE_EQUALS_WANT = имеются равные желания + +INCORRECT_NONCE = неправильный одноразовый номер PoW + +INSUFFICIENT_FEE = недостаточная плата + +INVALID_ADDRESS = недействительный адрес + +INVALID_AMOUNT = недопустимая сумма + +INVALID_ASSET_OWNER = недействительный владелец актива + +INVALID_AT_TRANSACTION = недействительная АТ транзакция + +INVALID_AT_TYPE_LENGTH = недействительно для типа длины AT + +INVALID_BUT_OK = Недействительно, но ОК + +INVALID_CREATION_BYTES = недопустимые байты создания + +INVALID_DATA_LENGTH = недопустимая длина данных + +INVALID_DESCRIPTION_LENGTH = недопустимая длина описания + +INVALID_GROUP_APPROVAL_THRESHOLD = недопустимый порог утверждения группы + +INVALID_GROUP_BLOCK_DELAY = недопустимая задержка блокировки группового утверждения + +INVALID_GROUP_ID = недопустимый идентификатор группы + +INVALID_GROUP_OWNER = недопустимый владелец группы + +INVALID_LIFETIME = недопустимый срок службы + +INVALID_NAME_LENGTH = недопустимая длина группы + +INVALID_NAME_OWNER = недопустимое имя владельца + +INVALID_OPTION_LENGTH = недопустимая длина опции + +INVALID_OPTIONS_COUNT = неверное количество опций + +INVALID_ORDER_CREATOR = недопустимый создатель заказа + +INVALID_PAYMENTS_COUNT = неверный подсчет платежей + +INVALID_PUBLIC_KEY = недействительный открытый ключ + +INVALID_QUANTITY = недопустимое количество + +INVALID_REFERENCE = неверная ссылка + +INVALID_RETURN = недопустимый возврат + +INVALID_REWARD_SHARE_PERCENT = недопустимый процент доли вознаграждения + +INVALID_SELLER = недействительный продавец + +INVALID_TAGS_LENGTH = недействительная длина тэгов + +INVALID_TIMESTAMP_SIGNATURE = неверная подпись временной метки + +INVALID_TX_GROUP_ID = недействительный идентификатор группы передачи + +INVALID_VALUE_LENGTH = недопустимое значение длины + +INVITE_UNKNOWN = приглашать неизветсных + +JOIN_REQUEST_EXISTS = запрос на присоединение существует + +MAXIMUM_REWARD_SHARES = максимальное вознаграждение + +MISSING_CREATOR = отсутствующий создатель + +MULTIPLE_NAMES_FORBIDDEN = несколько имен запрещено + +NAME_ALREADY_FOR_SALE = имя уже в продаже + +NAME_ALREADY_REGISTERED = имя уже зарегистрировано + +NAME_BLOCKED = это имя заблокировано + +NAME_DOES_NOT_EXIST = имя не существует + +NAME_NOT_FOR_SALE = имя не продается + +NAME_NOT_LOWER_CASE = имя не должно содержать строчный регистр + +NEGATIVE_AMOUNT = недостаточная сумма + +NEGATIVE_FEE = недостаточная комиссия + +NEGATIVE_PRICE = недостаточная стоимость + +NO_BALANCE = нет баланса + +NO_BLOCKCHAIN_LOCK = блокчейн узла в настоящее время занят + +NO_FLAG_PERMISSION = нет разрешения на флаг + +NOT_GROUP_ADMIN = не администратор группы + +NOT_GROUP_MEMBER = не член группы + +NOT_MINTING_ACCOUNT = счет не чеканит + +NOT_YET_RELEASED = еще не выпущено + +OK = OK + +ORDER_ALREADY_CLOSED = заказ закрыт + +ORDER_DOES_NOT_EXIST = заказа не существует + +POLL_ALREADY_EXISTS = опрос уже существует + +POLL_DOES_NOT_EXIST = опроса не существует + +POLL_OPTION_DOES_NOT_EXIST = вариантов ответа не существует + +PUBLIC_KEY_UNKNOWN = открытый ключ неизвестен + +REWARD_SHARE_UNKNOWN = доля награды неизвестна + +SELF_SHARE_EXISTS = поделиться долей + +TIMESTAMP_TOO_NEW = новая метка времени + +TIMESTAMP_TOO_OLD = старая метка времени + +TOO_MANY_UNCONFIRMED = много не подтвержденных + +TRANSACTION_ALREADY_CONFIRMED = транзакция уже подтверждена + +TRANSACTION_ALREADY_EXISTS = транзакция существует + +TRANSACTION_UNKNOWN = неизвестная транзакция + +TX_GROUP_ID_MISMATCH = не соответствие идентификатора группы в хэш транзации diff --git a/src/main/resources/i18n/TransactionValidity_sv.properties b/src/main/resources/i18n/TransactionValidity_sv.properties new file mode 100644 index 00000000..a3fec831 --- /dev/null +++ b/src/main/resources/i18n/TransactionValidity_sv.properties @@ -0,0 +1,195 @@ +# + +ACCOUNT_ALREADY_EXISTS = kontot finns redan + +ACCOUNT_CANNOT_REWARD_SHARE = kontot kan inte dela ut en belöning + +ADDRESS_ABOVE_RATE_LIMIT = adressen nådde angiven gräns + +ADDRESS_BLOCKED = denna adress är blockerad + +ALREADY_GROUP_ADMIN = redan gruppadministratör + +ALREADY_GROUP_MEMBER = redan gruppmedlem + +ALREADY_VOTED_FOR_THAT_OPTION = redan röstat för det alternativet + +ASSET_ALREADY_EXISTS = tillgången finns redan + +ASSET_DOES_NOT_EXIST = tillgången finns inte + +ASSET_DOES_NOT_MATCH_AT = tillgången matchar inte AT:s tillgång + +ASSET_NOT_SPENDABLE = tillgången är inte förbrukbar + +AT_ALREADY_EXISTS = AT finns redan + +AT_IS_FINISHED = AT har avslutats + +AT_UNKNOWN = okänd AT + +BAN_EXISTS = förbud finns redan + +BAN_UNKNOWN = okänt förbud + +BANNED_FROM_GROUP = avstängd från gruppen + +BUYER_ALREADY_OWNER = köparen är redan ägare + +CLOCK_NOT_SYNCED = klockan inte synkroniserad + +DUPLICATE_MESSAGE = adress skickade dubblettmeddelande + +DUPLICATE_OPTION = dubblettalternativ + +GROUP_ALREADY_EXISTS = grupp finns redan + +GROUP_APPROVAL_DECIDED = gruppgodkännande redan beslutat + +GROUP_APPROVAL_NOT_REQUIRED = gruppgodkännande krävs inte + +GROUP_DOES_NOT_EXIST = grupp finns inte + +GROUP_ID_MISMATCH = grupp-ID överensstämmer inte + +GROUP_OWNER_CANNOT_LEAVE = gruppägare kan inte lämna gruppen + +HAVE_EQUALS_WANT = ha-tillgång är detsamma som vill-tillgång + +INCORRECT_NONCE = felaktig PoW nonce + +INSUFFICIENT_FEE = otillräcklig avgift + +INVALID_ADDRESS = ogiltig adress + +INVALID_AMOUNT = ogiltigt belopp + +INVALID_ASSET_OWNER = ogiltig tillgångsägare + +INVALID_AT_TRANSACTION = ogiltig AT-transaktion + +INVALID_AT_TYPE_LENGTH = ogiltig AT-typlängd + +INVALID_BUT_OK = ogiltig men OK + +INVALID_CREATION_BYTES = ogiltiga skapande bytes + +INVALID_DATA_LENGTH = ogiltig datalängd + +INVALID_DESCRIPTION_LENGTH = ogiltig beskrivningslängd + +INVALID_GROUP_APPROVAL_THRESHOLD = ogiltig tröskel för gruppgodkännande + +INVALID_GROUP_BLOCK_DELAY = ogiltig grupp-godkännande fördröjning + +INVALID_GROUP_ID = ogiltigt grupp-ID + +INVALID_GROUP_OWNER = ogiltig gruppägare + +INVALID_LIFETIME = ogiltig livstid + +INVALID_NAME_LENGTH = ogiltig namnlängd + +INVALID_NAME_OWNER = ogiltig namnägare + +INVALID_OPTION_LENGTH = ogiltig alternativlängd + +INVALID_OPTIONS_COUNT = ogiltigt antal alternativ + +INVALID_ORDER_CREATOR = ogiltig orderskapare + +INVALID_PAYMENTS_COUNT = ogiltiga antal betalningar + +INVALID_PUBLIC_KEY = ogiltig offentlig nyckel + +INVALID_QUANTITY = ogiltig kvantitet + +INVALID_REFERENCE = ogiltig referens + +INVALID_RETURN = ogiltig retur + +INVALID_REWARD_SHARE_PERCENT = ogiltig belöningsandelsprocent + +INVALID_SELLER = ogiltig säljare + +INVALID_TAGS_LENGTH = ogiltig 'tagg'-längd + +INVALID_TIMESTAMP_SIGNATURE = ogiltig tidsstämpelsignatur + +INVALID_TX_GROUP_ID = ogiltigt transaktionsgrupp-ID + +INVALID_VALUE_LENGTH = ogiltig 'värdes'-längd + +INVITE_UNKNOWN = okänd gruppinbjudan + +JOIN_REQUEST_EXISTS = gruppanslutning finns redan + +MAXIMUM_REWARD_SHARES = redan vid maximalt antal belöningsandelar för detta konto + +MISSING_CREATOR = saknad skapare + +MULTIPLE_NAMES_FORBIDDEN = flera registrerade namn per konto är förbjudet + +NAME_ALREADY_FOR_SALE = namn redan till salu + +NAME_ALREADY_REGISTERED = namn redan registrerat + +NAME_BLOCKED = detta namn är blockerat + +NAME_DOES_NOT_EXIST = namnet finns inte + +NAME_NOT_FOR_SALE = namnet är inte till salu + +NAME_NOT_NORMALIZED = namn inte i Unicode 'normaliserad' form + +NEGATIVE_AMOUNT = ogiltigt/negativt belopp + +NEGATIVE_FEE = ogiltig/negativ avgift + +NEGATIVE_PRICE = ogiltigt/negativt pris + +NO_BALANCE = otillräcklig balans + +NO_BLOCKCHAIN_LOCK = nodens blockchain för närvarande upptagen + +NO_FLAG_PERMISSION = kontot har inte den behörigheten + +NOT_GROUP_ADMIN = kontot är inte en gruppadministratör + +NOT_GROUP_MEMBER = kontot är inte en gruppmedlem + +NOT_MINTING_ACCOUNT = konto kan inte präglas + +NOT_YET_RELEASED = funktionen ännu inte släppt + +OK = OK + +ORDER_ALREADY_CLOSED = handelsorder för tillgångar är redan stängd + +ORDER_DOES_NOT_EXIST = handelsorder för tillgångar finns inte + +POLL_ALREADY_EXISTS = omröstning finns redan + +POLL_DOES_NOT_EXIST = omröstning finns inte + +POLL_OPTION_DOES_NOT_EXIST = omröstningsalternativet finns inte + +PUBLIC_KEY_UNKNOWN = offentlig nyckel okänd + +REWARD_SHARE_UNKNOWN = okänd belöningsandel + +SELF_SHARE_EXISTS = egenandel (belöningsandel) finns redan + +TIMESTAMP_TOO_NEW = tidsstämpeln är för ny + +TIMESTAMP_TOO_OLD = tidsstämpeln är för gammal + +TOO_MANY_UNCONFIRMED = kontot har för många obekräftade transaktioner som väntar + +TRANSACTION_ALREADY_CONFIRMED = transaktionen har redan bekräftats + +TRANSACTION_ALREADY_EXISTS = transaktionen finns redan + +TRANSACTION_UNKNOWN = okänd transaktion + +TX_GROUP_ID_MISMATCH = transaktionens grupp-ID matchar inte diff --git a/src/main/resources/i18n/TransactionValidity_zh_CN.properties b/src/main/resources/i18n/TransactionValidity_zh_CN.properties new file mode 100644 index 00000000..d2a2ec7c --- /dev/null +++ b/src/main/resources/i18n/TransactionValidity_zh_CN.properties @@ -0,0 +1,195 @@ +# + +ACCOUNT_ALREADY_EXISTS = 账号已存在 + +ACCOUNT_CANNOT_REWARD_SHARE = 账户不能创建奖励分享 + +ADDRESS_ABOVE_RATE_LIMIT = 账号已达到指定限制 + +ADDRESS_BLOCKED = 此账号已被封锁 + +ALREADY_GROUP_ADMIN = 你已是群组管理员 + +ALREADY_GROUP_MEMBER = 你已是群组的成员 + +ALREADY_VOTED_FOR_THAT_OPTION = 你已投票该选项 + +ASSET_ALREADY_EXISTS = 资产已存在 + +ASSET_DOES_NOT_EXIST = 资产不存在 + +ASSET_DOES_NOT_MATCH_AT = 选择的资产与AT资产不吻合 + +ASSET_NOT_SPENDABLE = 资产不能使用 + +AT_ALREADY_EXISTS = AT已存在 + +AT_IS_FINISHED = AT已完成 + +AT_UNKNOWN = 未知的AT + +BAN_EXISTS = 禁止功能已存在 + +BAN_UNKNOWN = 未知的禁止动作 + +BANNED_FROM_GROUP = 已被群组禁止进入 + +BUYER_ALREADY_OWNER = 购买者已是名称拥有者 + +CLOCK_NOT_SYNCED = 节点时间未同步 + +DUPLICATE_MESSAGE = 账号传送重复信息 + +DUPLICATE_OPTION = 重复的选项 + +GROUP_ALREADY_EXISTS = 群组已存在 + +GROUP_APPROVAL_DECIDED = 已审批 + +GROUP_APPROVAL_NOT_REQUIRED = 不需审批 + +GROUP_DOES_NOT_EXIST = 群组不存在 + +GROUP_ID_MISMATCH = 群组ID不吻合 + +GROUP_OWNER_CANNOT_LEAVE = 群组拥有者不能离开群组 + +HAVE_EQUALS_WANT = 已存在相同的资产名称 + +INCORRECT_NONCE = 错误的PoW数值 + +INSUFFICIENT_FEE = 手续费不足 + +INVALID_ADDRESS = 无效的钱包地址 + +INVALID_AMOUNT = 无效的数量 + +INVALID_ASSET_OWNER = 无效的资产拥有者 + +INVALID_AT_TRANSACTION = 无效的AT交易 + +INVALID_AT_TYPE_LENGTH = 无效的AT种类长度 + +INVALID_BUT_OK = 无效但不影响 + +INVALID_CREATION_BYTES = 无效的创建字节 + +INVALID_DATA_LENGTH = 无效的数据长度 + +INVALID_DESCRIPTION_LENGTH = 无效的描述长度 + +INVALID_GROUP_APPROVAL_THRESHOLD = 无效的群组审批门槛 + +INVALID_GROUP_BLOCK_DELAY = 无效的群组审批延迟值 + +INVALID_GROUP_ID = 无效的群组ID + +INVALID_GROUP_OWNER = 无效的群组创建者 + +INVALID_LIFETIME = 无效的周期 + +INVALID_NAME_LENGTH = 无效的名称长度 + +INVALID_NAME_OWNER = 无效的名称拥有者 + +INVALID_OPTION_LENGTH = 无效的选项长度 + +INVALID_OPTIONS_COUNT = 无效的选项 + +INVALID_ORDER_CREATOR = 无效的交易创建者 + +INVALID_PAYMENTS_COUNT = 无效的付款 + +INVALID_PUBLIC_KEY = 无效的公共密钥 + +INVALID_QUANTITY = 无效的数量 + +INVALID_REFERENCE = 无效的参考资料 + +INVALID_RETURN = 无效的回应 + +INVALID_REWARD_SHARE_PERCENT = 无效的奖励分享百分比 + +INVALID_SELLER = 无效的卖家 + +INVALID_TAGS_LENGTH = 无效的“标记”长度 + +INVALID_TIMESTAMP_SIGNATURE = 无效的时间戳签名 + +INVALID_TX_GROUP_ID = 无效的群组ID交易 + +INVALID_VALUE_LENGTH = 无效的数值长度 + +INVITE_UNKNOWN = 未知的群组邀请 + +JOIN_REQUEST_EXISTS = 加入群组的请求已存在 + +MAXIMUM_REWARD_SHARES = 奖励分享次数已达到上限 + +MISSING_CREATOR = 请填写创建者 + +MULTIPLE_NAMES_FORBIDDEN = 禁止注册多个名称 + +NAME_ALREADY_FOR_SALE = 名称可被购买 + +NAME_ALREADY_REGISTERED = 名称已被注册 + +NAME_BLOCKED = 此名称已被封锁 + +NAME_DOES_NOT_EXIST = 名称不存在 + +NAME_NOT_FOR_SALE = 名称为非卖品 + +NAME_NOT_NORMALIZED = 名称必须使用Unicode标准格式 + +NEGATIVE_AMOUNT = 无效数量或负数 + +NEGATIVE_FEE = 无效或负数的手续费 + +NEGATIVE_PRICE = 无效/负数标价 + +NO_BALANCE = 余额不足 + +NO_BLOCKCHAIN_LOCK = 节点现时忙碌 + +NO_FLAG_PERMISSION = 此账号没有该权限 + +NOT_GROUP_ADMIN = 此地址不是群组管理员 + +NOT_GROUP_MEMBER = 此地址不是群组成员 + +NOT_MINTING_ACCOUNT = 账号不能铸币 + +NOT_YET_RELEASED = 功能未启用 + +OK = 确定 + +ORDER_ALREADY_CLOSED = 资产交易已关闭 + +ORDER_DOES_NOT_EXIST = 资产交易不存在 + +POLL_ALREADY_EXISTS = 投票已存在 + +POLL_DOES_NOT_EXIST = 投票不存在 + +POLL_OPTION_DOES_NOT_EXIST = 投票选项不存在 + +PUBLIC_KEY_UNKNOWN = 未知的公共密钥 + +REWARD_SHARE_UNKNOWN = 未知的奖励分享 + +SELF_SHARE_EXISTS = 奖励分享已存在 + +TIMESTAMP_TOO_NEW = 时间戳太新 + +TIMESTAMP_TOO_OLD = 时间戳太久 + +TOO_MANY_UNCONFIRMED = 钱包有太多未确认的交易等待进行 + +TRANSACTION_ALREADY_CONFIRMED = 此交易已确认 + +TRANSACTION_ALREADY_EXISTS = 此交易已存在 + +TRANSACTION_UNKNOWN = 未知的交易 + +TX_GROUP_ID_MISMATCH = 群组ID交易不吻合 diff --git a/src/main/resources/i18n/TransactionValidity_zh_TW.properties b/src/main/resources/i18n/TransactionValidity_zh_TW.properties new file mode 100644 index 00000000..e88addb9 --- /dev/null +++ b/src/main/resources/i18n/TransactionValidity_zh_TW.properties @@ -0,0 +1,195 @@ +# + +ACCOUNT_ALREADY_EXISTS = 賬號已存在 + +ACCOUNT_CANNOT_REWARD_SHARE = 賬戶不能創建獎勵分享 + +ADDRESS_ABOVE_RATE_LIMIT = 賬號已達到指定限制 + +ADDRESS_BLOCKED = 此賬號已被封鎖 + +ALREADY_GROUP_ADMIN = 你已是群組管理員 + +ALREADY_GROUP_MEMBER = 你已是群組的成員 + +ALREADY_VOTED_FOR_THAT_OPTION = 你已投票該選項 + +ASSET_ALREADY_EXISTS = 資產已存在 + +ASSET_DOES_NOT_EXIST = 資產不存在 + +ASSET_DOES_NOT_MATCH_AT = 選擇的資產與AT資產不吻合 + +ASSET_NOT_SPENDABLE = 資產不能使用 + +AT_ALREADY_EXISTS = AT已存在 + +AT_IS_FINISHED = AT已完成 + +AT_UNKNOWN = 未知的AT + +BAN_EXISTS = 禁止功能已存在 + +BAN_UNKNOWN = 未知的禁止動作 + +BANNED_FROM_GROUP = 已被群組禁止進入 + +BUYER_ALREADY_OWNER = 購買者已是名稱擁有者 + +CLOCK_NOT_SYNCED = 節點時間未同步 + +DUPLICATE_MESSAGE = 賬號傳送重複信息 + +DUPLICATE_OPTION = 重複的選項 + +GROUP_ALREADY_EXISTS = 群組已存在 + +GROUP_APPROVAL_DECIDED = 已審批 + +GROUP_APPROVAL_NOT_REQUIRED = 不需審批 + +GROUP_DOES_NOT_EXIST = 群組不存在 + +GROUP_ID_MISMATCH = 群組ID不吻合 + +GROUP_OWNER_CANNOT_LEAVE = 群組擁有者不能離開群組 + +HAVE_EQUALS_WANT = 已存在相同的資產名稱 + +INCORRECT_NONCE = 錯誤的PoW數值 + +INSUFFICIENT_FEE = 手續費不足 + +INVALID_ADDRESS = 無效的錢包地址 + +INVALID_AMOUNT = 無效的數量 + +INVALID_ASSET_OWNER = 無效的資產擁有者 + +INVALID_AT_TRANSACTION = 無效的AT交易 + +INVALID_AT_TYPE_LENGTH = 無效的AT種類長度 + +INVALID_BUT_OK = 無效但不影響 + +INVALID_CREATION_BYTES = 無效的創建字節 + +INVALID_DATA_LENGTH = 無效的數據長度 + +INVALID_DESCRIPTION_LENGTH = 無效的描述長度 + +INVALID_GROUP_APPROVAL_THRESHOLD = 無效的群組審批門檻 + +INVALID_GROUP_BLOCK_DELAY = 無效的群組審批延遲值 + +INVALID_GROUP_ID = 無效的群組ID + +INVALID_GROUP_OWNER = 無效的群組創建者 + +INVALID_LIFETIME = 無效的周期 + +INVALID_NAME_LENGTH = 無效的名稱長度 + +INVALID_NAME_OWNER = 無效的名稱擁有者 + +INVALID_OPTION_LENGTH = 無效的選項長度 + +INVALID_OPTIONS_COUNT = 無效的選項 + +INVALID_ORDER_CREATOR = 無效的交易創建者 + +INVALID_PAYMENTS_COUNT = 無效的付款 + +INVALID_PUBLIC_KEY = 無效的公共密鑰 + +INVALID_QUANTITY = 無效的數量 + +INVALID_REFERENCE = 無效的參考資料 + +INVALID_RETURN = 無效的回應 + +INVALID_REWARD_SHARE_PERCENT = 無效的獎勵分享百分比 + +INVALID_SELLER = 無效的賣家 + +INVALID_TAGS_LENGTH = 無效的“標記”長度 + +INVALID_TIMESTAMP_SIGNATURE = 無效的時間戳簽名 + +INVALID_TX_GROUP_ID = 無效的群組ID交易 + +INVALID_VALUE_LENGTH = 無效的數值長度 + +INVITE_UNKNOWN = 未知的群組邀請 + +JOIN_REQUEST_EXISTS = 加入群組的請求已存在 + +MAXIMUM_REWARD_SHARES = 獎勵分享次數已達到上限 + +MISSING_CREATOR = 請填寫創建者 + +MULTIPLE_NAMES_FORBIDDEN = 禁止註冊多個名稱 + +NAME_ALREADY_FOR_SALE = 名稱可被購買 + +NAME_ALREADY_REGISTERED = 名稱已被註冊 + +NAME_BLOCKED = 此名稱已被封鎖 + +NAME_DOES_NOT_EXIST = 名稱不存在 + +NAME_NOT_FOR_SALE = 名稱為非賣品 + +NAME_NOT_NORMALIZED = 名稱必須使用Unicode標準格式 + +NEGATIVE_AMOUNT = 無效數量或負數 + +NEGATIVE_FEE = 無效或負數的手續費 + +NEGATIVE_PRICE = 無效/負數標價 + +NO_BALANCE = 餘額不足 + +NO_BLOCKCHAIN_LOCK = 節點現時忙碌 + +NO_FLAG_PERMISSION = 此賬號沒有該權限 + +NOT_GROUP_ADMIN = 此地址不是群組管理員 + +NOT_GROUP_MEMBER = 此地址不是群組成員 + +NOT_MINTING_ACCOUNT = 賬號不能鑄幣 + +NOT_YET_RELEASED = 功能未啓用 + +OK = 確定 + +ORDER_ALREADY_CLOSED = 資產交易已關閉 + +ORDER_DOES_NOT_EXIST = 資產交易不存在 + +POLL_ALREADY_EXISTS = 投票已存在 + +POLL_DOES_NOT_EXIST = 投票不存在 + +POLL_OPTION_DOES_NOT_EXIST = 投票選項不存在 + +PUBLIC_KEY_UNKNOWN = 未知的公共密鑰 + +REWARD_SHARE_UNKNOWN = 未知的獎勵分享 + +SELF_SHARE_EXISTS = 獎勵分享已存在 + +TIMESTAMP_TOO_NEW = 時間戳太新 + +TIMESTAMP_TOO_OLD = 時間戳太久 + +TOO_MANY_UNCONFIRMED = 錢包有太多未確認的交易等待進行 + +TRANSACTION_ALREADY_CONFIRMED = 此交易已確認 + +TRANSACTION_ALREADY_EXISTS = 此交易已存在 + +TRANSACTION_UNKNOWN = 未知的交易 + +TX_GROUP_ID_MISMATCH = 群組ID交易不吻合 diff --git a/src/test/java/org/qortal/test/ByteArrayTests.java b/src/test/java/org/qortal/test/ByteArrayTests.java index 8fb6f1cf..f954a367 100644 --- a/src/test/java/org/qortal/test/ByteArrayTests.java +++ b/src/test/java/org/qortal/test/ByteArrayTests.java @@ -32,19 +32,40 @@ public class ByteArrayTests { private static void fillMap(Map map) { for (byte[] testValue : testValues) - map.put(new ByteArray(testValue), String.valueOf(map.size())); + map.put(ByteArray.wrap(testValue), String.valueOf(map.size())); } private static byte[] dup(byte[] value) { return Arrays.copyOf(value, value.length); } + @Test + @SuppressWarnings("unlikely-arg-type") + public void testOriginatingIssue() { + Map testMap = new HashMap<>(); + + byte[] someValue = testValues.get(3); + testMap.put(someValue, "someValue"); + + byte[] copiedValue = dup(someValue); + + // Show that a byte[] with same values is not found + System.out.printf("byte[] hashCode: 0x%08x%n", someValue.hashCode()); + System.out.printf("duplicated byte[] hashCode: 0x%08x%n", copiedValue.hashCode()); + + /* + * Unfortunately this doesn't work because HashMap::containsKey compares hashCodes first, + * followed by object references, and copiedValue.hashCode() will never match someValue.hashCode(). + */ + assertFalse("byte[] with same values, but difference reference, not found", testMap.containsKey(copiedValue)); + } + @Test public void testSameContentReference() { - // Create two objects, which will have different references, but same content. + // Create two objects, which will have different references, but same content references. byte[] testValue = testValues.get(0); - ByteArray ba1 = new ByteArray(testValue); - ByteArray ba2 = new ByteArray(testValue); + ByteArray ba1 = ByteArray.wrap(testValue); + ByteArray ba2 = ByteArray.wrap(testValue); // Confirm JVM-assigned references are different assertNotSame(ba1, ba2); @@ -58,13 +79,31 @@ public class ByteArrayTests { } @Test - public void testSameContentValue() { - // Create two objects, which will have different references, but same content. + public void testSameWrappedContentValue() { + // Create two objects, which will have different references, and different content references, but same content values. byte[] testValue = testValues.get(0); - ByteArray ba1 = new ByteArray(testValue); + ByteArray ba1 = ByteArray.wrap(testValue); byte[] copiedValue = dup(testValue); - ByteArray ba2 = new ByteArray(copiedValue); + ByteArray ba2 = ByteArray.wrap(copiedValue); + + // Confirm JVM-assigned references are different + assertNotSame(ba1, ba2); + + // Confirm "equals" works as intended + assertTrue("equals did not return true", ba1.equals(ba2)); + assertEquals("ba1 not equal to ba2", ba1, ba2); + + // Confirm "hashCode" results match + assertEquals("hashCodes do not match", ba1.hashCode(), ba2.hashCode()); + } + + @Test + public void testSameCopiedContentValue() { + // Create two objects, which will have different references, and different content references, but same content values. + byte[] testValue = testValues.get(0); + ByteArray ba1 = ByteArray.wrap(testValue); + ByteArray ba2 = ByteArray.copyOf(testValue); // Confirm JVM-assigned references are different assertNotSame(ba1, ba2); @@ -81,13 +120,17 @@ public class ByteArrayTests { @SuppressWarnings("unlikely-arg-type") public void testCompareBoxedWithPrimitive() { byte[] testValue = testValues.get(0); - ByteArray ba1 = new ByteArray(testValue); + ByteArray wrappedByteArray = ByteArray.wrap(testValue); byte[] copiedValue = dup(testValue); + ByteArray copiedByteArray = ByteArray.copyOf(copiedValue); // Confirm "equals" works as intended - assertTrue("equals did not return true", ba1.equals(copiedValue)); - assertEquals("boxed not equal to primitive", ba1, copiedValue); + assertTrue("equals did not return true", wrappedByteArray.equals(copiedValue)); + assertEquals("boxed not equal to primitive", wrappedByteArray, copiedValue); + + assertTrue("equals did not return true", copiedByteArray.equals(testValue)); + assertEquals("boxed not equal to primitive", copiedByteArray, testValue); } @Test @@ -98,7 +141,7 @@ public class ByteArrayTests { // Create new ByteArray object with an existing value. byte[] copiedValue = dup(testValues.get(3)); - ByteArray ba = new ByteArray(copiedValue); + ByteArray ba = ByteArray.wrap(copiedValue); // Confirm object can be found in map assertTrue("ByteArray not found in map", testMap.containsKey(ba)); @@ -120,7 +163,7 @@ public class ByteArrayTests { // Create new ByteArray object with an existing value. byte[] copiedValue = dup(testValues.get(3)); - ByteArray ba = new ByteArray(copiedValue); + ByteArray ba = ByteArray.wrap(copiedValue); // Confirm object can be found in map assertTrue("ByteArray not found in map", testMap.containsKey(ba)); @@ -128,7 +171,7 @@ public class ByteArrayTests { assertTrue("boxed not equal to primitive", ba.equals(copiedValue)); /* - * Unfortunately this doesn't work because TreeMap::containsKey(x) wants to cast x to + * Unfortunately this doesn't work because TreeMap::containsKey(byte[]) wants to cast byte[] to * Comparable and byte[] does not fit * so this throws a ClassCastException. */ @@ -145,7 +188,7 @@ public class ByteArrayTests { public void testArrayListContains() { // Create new ByteArray object with an existing value. byte[] copiedValue = dup(testValues.get(3)); - ByteArray ba = new ByteArray(copiedValue); + ByteArray ba = ByteArray.wrap(copiedValue); // Confirm object can be found in list assertTrue("ByteArray not found in map", testValues.contains(ba)); @@ -154,7 +197,7 @@ public class ByteArrayTests { /* * Unfortunately this doesn't work because ArrayList::contains performs - * copiedValue.equals(x) for each x in testValues, and byte[].equals() + * copiedValue.equals(byte[]) for each byte[] in testValues, and byte[].equals() * simply compares object references, so will never match any ByteArray. */ assertFalse("Primitive shouldn't be found in ArrayList", testValues.contains(copiedValue)); @@ -163,23 +206,25 @@ public class ByteArrayTests { @Test public void debugBoxedVersusPrimitive() { byte[] testValue = testValues.get(0); - ByteArray ba1 = new ByteArray(testValue); + ByteArray ba1 = ByteArray.wrap(testValue); byte[] copiedValue = dup(testValue); - System.out.println(String.format("Primitive hashCode: 0x%08x", testValue.hashCode())); - System.out.println(String.format("Boxed hashCode: 0x%08x", ba1.hashCode())); - System.out.println(String.format("Duplicated primitive hashCode: 0x%08x", copiedValue.hashCode())); + System.out.printf("Primitive hashCode: 0x%08x%n", testValue.hashCode()); + System.out.printf("Boxed hashCode: 0x%08x%n", ba1.hashCode()); + System.out.printf("Duplicated primitive hashCode: 0x%08x%n", copiedValue.hashCode()); } @Test public void testCompareTo() { - ByteArray testValue0 = new ByteArray(new byte[] { 0x00 }); - ByteArray testValue1 = new ByteArray(new byte[] { 0x01 }); + ByteArray testValue0 = ByteArray.wrap(new byte[] { 0x00 }); + ByteArray testValue1 = ByteArray.wrap(new byte[] { 0x01 }); + ByteArray testValueFf = ByteArray.wrap(new byte[] {(byte) 0xFF}); - assertEquals("0 should be the same as 0", 0, testValue0.compareTo(testValue0)); - assertEquals("0 should be before 1", -1, testValue0.compareTo(testValue1)); - assertEquals("1 should be after 0", 1, testValue1.compareTo(testValue0)); + assertTrue("0 should be the same as 0", testValue0.compareTo(testValue0) == 0); + assertTrue("0 should be before 1", testValue0.compareTo(testValue1) < 0); + assertTrue("1 should be after 0", testValue1.compareTo(testValue0) > 0); + assertTrue("FF should be after 0", testValueFf.compareTo(testValue0) > 0); } } diff --git a/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java b/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java index 77cb22b0..357046fe 100644 --- a/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java +++ b/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java @@ -78,6 +78,118 @@ public class ArbitraryTransactionMetadataTests extends Common { } } + @Test + public void testSingleChunkWithMetadata() throws DataException, IOException, MissingDataException { + try (final Repository repository = RepositoryManager.getRepository()) { + PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); + String publicKey58 = Base58.encode(alice.getPublicKey()); + String name = "TEST"; // Can be anything for this test + String identifier = null; // Not used for this test + Service service = Service.ARBITRARY_DATA; + int chunkSize = 1000; + int dataLength = 10; // Actual data length will be longer due to encryption + + String title = "Test title"; + String description = "Test description"; + List tags = Arrays.asList("Test", "tag", "another tag"); + Category category = Category.QORTAL; + + // Register the name to Alice + RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, ""); + transactionData.setFee(new RegisterNameTransaction(null, null).getUnitFee(transactionData.getTimestamp())); + TransactionUtils.signAndMint(repository, transactionData, alice); + + // Create PUT transaction + Path path1 = ArbitraryUtils.generateRandomDataPath(dataLength); + ArbitraryDataFile arbitraryDataFile = ArbitraryUtils.createAndMintTxn(repository, publicKey58, path1, name, + identifier, ArbitraryTransactionData.Method.PUT, service, alice, chunkSize, + title, description, tags, category); + + // Check the chunk count is correct + assertEquals(0, arbitraryDataFile.chunkCount()); + + // Check the metadata is correct + assertEquals(title, arbitraryDataFile.getMetadata().getTitle()); + assertEquals(description, arbitraryDataFile.getMetadata().getDescription()); + assertEquals(tags, arbitraryDataFile.getMetadata().getTags()); + assertEquals(category, arbitraryDataFile.getMetadata().getCategory()); + + // Now build the latest data state for this name + ArbitraryDataReader arbitraryDataReader = new ArbitraryDataReader(name, ResourceIdType.NAME, service, identifier); + arbitraryDataReader.loadSynchronously(true); + Path initialLayerPath = arbitraryDataReader.getFilePath(); + ArbitraryDataDigest initialLayerDigest = new ArbitraryDataDigest(initialLayerPath); + initialLayerDigest.compute(); + + // Its directory hash should match the original directory hash + ArbitraryDataDigest path1Digest = new ArbitraryDataDigest(path1); + path1Digest.compute(); + assertEquals(path1Digest.getHash58(), initialLayerDigest.getHash58()); + } + } + + @Test + public void testSingleNonLocalChunkWithMetadata() throws DataException, IOException, MissingDataException { + try (final Repository repository = RepositoryManager.getRepository()) { + PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); + String publicKey58 = Base58.encode(alice.getPublicKey()); + String name = "TEST"; // Can be anything for this test + String identifier = null; // Not used for this test + Service service = Service.ARBITRARY_DATA; + int chunkSize = 1000; + int dataLength = 10; // Actual data length will be longer due to encryption + + String title = "Test title"; + String description = "Test description"; + List tags = Arrays.asList("Test", "tag", "another tag"); + Category category = Category.QORTAL; + + // Register the name to Alice + RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, ""); + transactionData.setFee(new RegisterNameTransaction(null, null).getUnitFee(transactionData.getTimestamp())); + TransactionUtils.signAndMint(repository, transactionData, alice); + + // Create PUT transaction + Path path1 = ArbitraryUtils.generateRandomDataPath(dataLength); + ArbitraryDataFile arbitraryDataFile = ArbitraryUtils.createAndMintTxn(repository, publicKey58, path1, name, + identifier, ArbitraryTransactionData.Method.PUT, service, alice, chunkSize, + title, description, tags, category); + + // Check the chunk count is correct + assertEquals(0, arbitraryDataFile.chunkCount()); + + // Check the metadata is correct + assertEquals(title, arbitraryDataFile.getMetadata().getTitle()); + assertEquals(description, arbitraryDataFile.getMetadata().getDescription()); + assertEquals(tags, arbitraryDataFile.getMetadata().getTags()); + assertEquals(category, arbitraryDataFile.getMetadata().getCategory()); + + // Delete the file, to simulate that it hasn't been fetched from the network yet + arbitraryDataFile.delete(); + + boolean missingDataExceptionCaught = false; + boolean ioExceptionCaught = false; + + // Now build the latest data state for this name + ArbitraryDataReader arbitraryDataReader = new ArbitraryDataReader(name, ResourceIdType.NAME, service, identifier); + try { + arbitraryDataReader.loadSynchronously(true); + } + catch (MissingDataException e) { + missingDataExceptionCaught = true; + } + catch (IOException e) { + ioExceptionCaught = true; + } + + // We expect a MissingDataException, not an IOException. + // This is because MissingDataException means that the core has correctly identified a file is missing, + // whereas an IOException would be due to trying to build without first having everything that is needed. + assertTrue(missingDataExceptionCaught); + assertFalse(ioExceptionCaught); + } + } + @Test public void testDescriptiveMetadata() throws DataException, IOException, MissingDataException { try (final Repository repository = RepositoryManager.getRepository()) { diff --git a/src/test/java/org/qortal/test/crosschain/TradeBotPresenceTests.java b/src/test/java/org/qortal/test/crosschain/TradeBotPresenceTests.java index c60a046b..0dd049d5 100644 --- a/src/test/java/org/qortal/test/crosschain/TradeBotPresenceTests.java +++ b/src/test/java/org/qortal/test/crosschain/TradeBotPresenceTests.java @@ -55,7 +55,7 @@ public class TradeBotPresenceTests { @Test public void testEnforceLatestTimestamp() { - ByteArray pubkeyByteArray = ByteArray.of("publickey".getBytes(StandardCharsets.UTF_8)); + ByteArray pubkeyByteArray = ByteArray.wrap("publickey".getBytes(StandardCharsets.UTF_8)); Map timestampsByPublicKey = new HashMap<>(); diff --git a/src/test/java/org/qortal/test/naming/MiscTests.java b/src/test/java/org/qortal/test/naming/MiscTests.java index da77446e..8252453c 100644 --- a/src/test/java/org/qortal/test/naming/MiscTests.java +++ b/src/test/java/org/qortal/test/naming/MiscTests.java @@ -2,21 +2,22 @@ package org.qortal.test.naming; import static org.junit.Assert.*; +import java.util.Arrays; import java.util.List; -import java.util.Optional; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.Before; import org.junit.Test; import org.qortal.account.PrivateKeyAccount; +import org.qortal.api.AmountTypeAdapter; import org.qortal.block.BlockChain; +import org.qortal.block.BlockChain.*; import org.qortal.controller.BlockMinter; import org.qortal.data.transaction.*; import org.qortal.naming.Name; import org.qortal.repository.DataException; import org.qortal.repository.Repository; import org.qortal.repository.RepositoryManager; -import org.qortal.settings.Settings; import org.qortal.test.common.*; import org.qortal.test.common.transaction.TestTransaction; import org.qortal.transaction.RegisterNameTransaction; @@ -325,17 +326,20 @@ public class MiscTests extends Common { // test name registration fee increase @Test - public void testRegisterNameFeeIncrease() throws DataException, IllegalAccessException { + public void testRegisterNameFeeIncrease() throws Exception { try (final Repository repository = RepositoryManager.getRepository()) { // Set nameRegistrationUnitFeeTimestamp to a time far in the future - long futureTimestamp = 9999999999999L; // 20 Nov 2286 - FieldUtils.writeField(BlockChain.getInstance(), "nameRegistrationUnitFeeTimestamp", futureTimestamp, true); - assertEquals(futureTimestamp, BlockChain.getInstance().getNameRegistrationUnitFeeTimestamp()); + UnitFeesByTimestamp futureFeeIncrease = new UnitFeesByTimestamp(); + futureFeeIncrease.timestamp = 9999999999999L; // 20 Nov 2286 + futureFeeIncrease.fee = new AmountTypeAdapter().unmarshal("5"); + FieldUtils.writeField(BlockChain.getInstance(), "nameRegistrationUnitFees", Arrays.asList(futureFeeIncrease), true); + assertEquals(futureFeeIncrease.fee, BlockChain.getInstance().getNameRegistrationUnitFeeAtTimestamp(futureFeeIncrease.timestamp)); // Validate unit fees pre and post timestamp assertEquals(10000000, BlockChain.getInstance().getUnitFee()); // 0.1 QORT - assertEquals(500000000, BlockChain.getInstance().getNameRegistrationUnitFee()); // 5 QORT + assertEquals(10000000, BlockChain.getInstance().getNameRegistrationUnitFeeAtTimestamp(futureFeeIncrease.timestamp - 1)); // 0.1 QORT + assertEquals(500000000, BlockChain.getInstance().getNameRegistrationUnitFeeAtTimestamp(futureFeeIncrease.timestamp)); // 5 QORT // Register-name PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); @@ -349,8 +353,11 @@ public class MiscTests extends Common { // Set nameRegistrationUnitFeeTimestamp to a time in the past Long now = NTP.getTime(); - FieldUtils.writeField(BlockChain.getInstance(), "nameRegistrationUnitFeeTimestamp", now - 1000L, true); - assertEquals(now - 1000L, BlockChain.getInstance().getNameRegistrationUnitFeeTimestamp()); + UnitFeesByTimestamp pastFeeIncrease = new UnitFeesByTimestamp(); + pastFeeIncrease.timestamp = now - 1000L; // 1 second ago + pastFeeIncrease.fee = new AmountTypeAdapter().unmarshal("3"); + FieldUtils.writeField(BlockChain.getInstance(), "nameRegistrationUnitFees", Arrays.asList(pastFeeIncrease), true); + assertEquals(pastFeeIncrease.fee, BlockChain.getInstance().getNameRegistrationUnitFeeAtTimestamp(pastFeeIncrease.timestamp)); // Register a different name // First try with the default unit fee @@ -365,7 +372,7 @@ public class MiscTests extends Common { // Now try using correct fee (this is specified by the UI, via the /transaction/unitfee API endpoint) transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name2, data); transactionData.setFee(new RegisterNameTransaction(null, null).getUnitFee(transactionData.getTimestamp())); - assertEquals(500000000L, transactionData.getFee().longValue()); + assertEquals(300000000L, transactionData.getFee().longValue()); transaction = Transaction.fromData(repository, transactionData); transaction.sign(alice); result = transaction.importAsUnconfirmed(); diff --git a/src/test/resources/test-chain-v2-founder-rewards.json b/src/test/resources/test-chain-v2-founder-rewards.json index d58d12a4..f0c00f49 100644 --- a/src/test/resources/test-chain-v2-founder-rewards.json +++ b/src/test/resources/test-chain-v2-founder-rewards.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20, diff --git a/src/test/resources/test-chain-v2-leftover-reward.json b/src/test/resources/test-chain-v2-leftover-reward.json index 7a12831e..5e045477 100644 --- a/src/test/resources/test-chain-v2-leftover-reward.json +++ b/src/test/resources/test-chain-v2-leftover-reward.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20, diff --git a/src/test/resources/test-chain-v2-minting.json b/src/test/resources/test-chain-v2-minting.json index fac40d49..2c5eb5e9 100644 --- a/src/test/resources/test-chain-v2-minting.json +++ b/src/test/resources/test-chain-v2-minting.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20, diff --git a/src/test/resources/test-chain-v2-qora-holder-extremes.json b/src/test/resources/test-chain-v2-qora-holder-extremes.json index 8545dae2..b26e6167 100644 --- a/src/test/resources/test-chain-v2-qora-holder-extremes.json +++ b/src/test/resources/test-chain-v2-qora-holder-extremes.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20, diff --git a/src/test/resources/test-chain-v2-qora-holder.json b/src/test/resources/test-chain-v2-qora-holder.json index 6635d8da..bf53a603 100644 --- a/src/test/resources/test-chain-v2-qora-holder.json +++ b/src/test/resources/test-chain-v2-qora-holder.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20, diff --git a/src/test/resources/test-chain-v2-reward-levels.json b/src/test/resources/test-chain-v2-reward-levels.json index 887c9c21..4547e538 100644 --- a/src/test/resources/test-chain-v2-reward-levels.json +++ b/src/test/resources/test-chain-v2-reward-levels.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20, diff --git a/src/test/resources/test-chain-v2-reward-scaling.json b/src/test/resources/test-chain-v2-reward-scaling.json index fed9ad4d..ec216b8b 100644 --- a/src/test/resources/test-chain-v2-reward-scaling.json +++ b/src/test/resources/test-chain-v2-reward-scaling.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20, diff --git a/src/test/resources/test-chain-v2.json b/src/test/resources/test-chain-v2.json index 7dd05e8d..5f835d9b 100644 --- a/src/test/resources/test-chain-v2.json +++ b/src/test/resources/test-chain-v2.json @@ -5,7 +5,9 @@ "maxBlockSize": 2097152, "maxBytesPerUnitFee": 1024, "unitFee": "0.1", - "nameRegistrationUnitFee": "5", + "nameRegistrationUnitFees": [ + { "timestamp": 1645372800000, "fee": "5" } + ], "requireGroupForApproval": false, "minAccountLevelToRewardShare": 5, "maxRewardSharesPerMintingAccount": 20,