aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--app/_locales/en/messages.json3
-rw-r--r--app/_locales/es/messages.json14
-rw-r--r--app/_locales/it/messages.json485
-rw-r--r--app/_locales/ko/messages.json92
-rw-r--r--app/scripts/controllers/transactions/index.js35
-rw-r--r--app/scripts/controllers/transactions/tx-state-manager.js5
-rw-r--r--ui/app/components/transaction-activity-log/transaction-activity-log.util.js6
-rw-r--r--ui/app/components/transaction-breakdown/transaction-breakdown.component.js20
-rw-r--r--ui/app/components/transaction-list-item/transaction-list-item.component.js3
-rw-r--r--ui/app/components/transaction-status/index.scss7
-rw-r--r--ui/app/helpers/tests/transactions.util.test.js35
-rw-r--r--ui/app/helpers/transactions.util.js18
13 files changed, 699 insertions, 25 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9cb8197d4..94265257f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
- Update transaction statuses when switching networks.
- [#5470](https://github.com/MetaMask/metamask-extension/pull/5470) 100% coverage in French locale, fixed the procedure to verify proposed locale.
- Added rudimentary support for the subscription API to support web3 1.0 and Truffle's Drizzle.
+- [#5502](https://github.com/MetaMask/metamask-extension/pull/5502) Update Italian translation.
## 4.12.0 Thursday September 27 2018
diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json
index d8467e9eb..13b0da230 100644
--- a/app/_locales/en/messages.json
+++ b/app/_locales/en/messages.json
@@ -424,6 +424,9 @@
"gasLimitTooLow": {
"message": "Gas limit must be at least 21000"
},
+ "gasUsed": {
+ "message": "Gas Used"
+ },
"generatingSeed": {
"message": "Generating Seed..."
},
diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json
index 3e43a7b43..be2a29ab5 100644
--- a/app/_locales/es/messages.json
+++ b/app/_locales/es/messages.json
@@ -156,7 +156,7 @@
"message": " Copiar "
},
"copyPrivateKey": {
- "message": "Ésta es tu llave privada (haz click para copiar)"
+ "message": "Ésta es tu clave privada (haz click para copiar)"
},
"copyToClipboard": {
"message": "Copiar al portapapeles"
@@ -278,10 +278,10 @@
"message": "Tipo de cambio"
},
"exportPrivateKey": {
- "message": "Exportar llave privada"
+ "message": "Exportar clave privada"
},
"exportPrivateKeyWarning": {
- "message": "Exportar llaves privadas bajo TU PROPIO riesgo"
+ "message": "Exportar claves privadas bajo TU PROPIO riesgo"
},
"failed": {
"message": "Fallo"
@@ -579,8 +579,8 @@
"description": "En el proceso de creación de contraseña, esta no es lo suficientemente larga para ser segura"
},
"pastePrivateKey": {
- "message": "Pega tu llave privada aqui",
- "description": "Para importar una cuenta desde una llave privada"
+ "message": "Pega tu clave privada aqui",
+ "description": "Para importar una cuenta desde una clave privada"
},
"pasteSeed": {
"message": "¡Pega tu frase semilla aquí!"
@@ -595,7 +595,7 @@
"message": "Política de privacidad"
},
"privateKey": {
- "message": "Llave privada",
+ "message": "Clave privada",
"description": "Selecciona este tupo de archivo para importar una cuenta"
},
"privateKeyWarning": {
@@ -712,7 +712,7 @@
"message": "Comprar con ShapeShift"
},
"showPrivateKeys": {
- "message": "Mostrar llaves privadas"
+ "message": "Mostrar claves privadas"
},
"showQRCode": {
"message": "Mostrar codigo QR"
diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json
index 492bcc3de..06e3dc855 100644
--- a/app/_locales/it/messages.json
+++ b/app/_locales/it/messages.json
@@ -2,6 +2,9 @@
"accept": {
"message": "Accetta"
},
+ "accessingYourCamera": {
+ "message": "Accesso alla fotocamera..."
+ },
"account": {
"message": "Account"
},
@@ -11,6 +14,15 @@
"accountName": {
"message": "Nome Account"
},
+ "accountOptions": {
+ "message": "Account Options"
+ },
+ "accountSelectionRequired": {
+ "message": "Devi selezionare un account!"
+ },
+ "activityLog": {
+ "message": "log attività"
+ },
"address": {
"message": "Indirizzo"
},
@@ -23,6 +35,12 @@
"addTokens": {
"message": "Aggiungi più token"
},
+ "addSuggestedTokens": {
+ "message": "Aggiungi Token Suggeriti"
+ },
+ "addAcquiredTokens": {
+ "message": "Aggiungi i token che hai acquistato usando MetaMask"
+ },
"amount": {
"message": "Importo"
},
@@ -37,9 +55,21 @@
"message": "MetaMask",
"description": "Il nome dell'applicazione"
},
+ "approve": {
+ "message": "Approva"
+ },
+ "approved": {
+ "message": "Approvato"
+ },
"attemptingConnect": {
"message": "Tentativo di connessione alla blockchain."
},
+ "attemptToCancel": {
+ "message": "Tentativo di Annullamento?"
+ },
+ "attemptToCancelDescription": {
+ "message": "Tentare di annullare non garantisce che la transazione verrà annullata. Se annullata, è comunque richiesto pagare alla rete la commissione sulla transazione."
+ },
"attributions": {
"message": "Attribuzioni"
},
@@ -71,8 +101,11 @@
"borrowDharma": {
"message": "Prendi in presisito con Dharma (Beta)"
},
+ "browserNotSupported": {
+ "message": "Il tuo Browser non è supportato..."
+ },
"builtInCalifornia": {
- "message": "MetaMask è progettato e costruito in California."
+ "message": "MetaMask è progettato e realizzato in California."
},
"buy": {
"message": "Compra"
@@ -83,8 +116,23 @@
"buyCoinbaseExplainer": {
"message": "Coinbase è il servizio più popolare al mondo per comprare e vendere Bitcoin, Ethereum e Litecoin."
},
+ "bytes": {
+ "message": "Bytes"
+ },
+ "ok": {
+ "message": "Ok"
+ },
"cancel": {
- "message": "Cancella"
+ "message": "Annulla"
+ },
+ "cancelAttempt": {
+ "message": "Tentativo di Annullamento"
+ },
+ "cancellationGasFee": {
+ "message": "Commissione di Annullamento in Gas"
+ },
+ "cancelN": {
+ "message": "Cancel all $1 transactions"
},
"classicInterface": {
"message": "Usa l'interfaccia classica"
@@ -92,9 +140,18 @@
"clickCopy": {
"message": "Clicca per Copiare"
},
+ "close": {
+ "message": "Chiudi"
+ },
+ "chromeRequiredForHardwareWallets": {
+ "message": "Devi usare MetaMask con Google Chrome per connettere il tuo Portafoglio Hardware"
+ },
"confirm": {
"message": "Conferma"
},
+ "confirmed": {
+ "message": "Confermata"
+ },
"confirmContract": {
"message": "Conferma Contratto"
},
@@ -104,6 +161,36 @@
"confirmTransaction": {
"message": "Conferma Transazione"
},
+ "connectHardwareWallet": {
+ "message": "Connetti Portafoglio Hardware"
+ },
+ "connect": {
+ "message": "Connetti"
+ },
+ "connecting": {
+ "message": "Connessione..."
+ },
+ "connectingToKovan": {
+ "message": "Connessione alla Rete di test Kovan"
+ },
+ "connectingToMainnet": {
+ "message": "Connessione alla Rete Ethereum Principale"
+ },
+ "connectingToRopsten": {
+ "message": "Connessione alla Rete di test Ropsten"
+ },
+ "connectingToRinkeby": {
+ "message": "Connessione alla Rete di test Rinkeby"
+ },
+ "connectingToUnknown": {
+ "message": "Connessione ad una Rete Sconosciuta"
+ },
+ "connectToLedger": {
+ "message": "Connettersi al Ledger"
+ },
+ "connectToTrezor": {
+ "message": "Connettersi al Trezor"
+ },
"continue": {
"message": "Continua"
},
@@ -131,6 +218,9 @@
"copy": {
"message": "Copia"
},
+ "copyAddress": {
+ "message": "Copia l'indirizzo"
+ },
"copyToClipboard": {
"message": "Copia negli appunti"
},
@@ -156,12 +246,21 @@
"currentConversion": {
"message": "Cambio Corrente"
},
+ "currentLanguage": {
+ "message": "Lingua Corrente"
+ },
"currentNetwork": {
"message": "Rete Corrente"
},
+ "currentRpc": {
+ "message": "RPC Corrente"
+ },
"customGas": {
"message": "Personalizza Gas"
},
+ "customToken": {
+ "message": "Token Personalizzato"
+ },
"customize": {
"message": "Personalizza"
},
@@ -223,33 +322,54 @@
"done": {
"message": "Finito"
},
+ "downloadGoogleChrome": {
+ "message": "Scarica Google Chrome"
+ },
"downloadStateLogs": {
"message": "Scarica i log di Stato"
},
+ "dontHaveAHardwareWallet": {
+ "message": "Non hai un portafoglio hardware?"
+ },
+ "dropped": {
+ "message": "Abbandonata"
+ },
"edit": {
"message": "Modifica"
},
"editAccountName": {
"message": "Modifica Nome Account"
},
+ "editingTransaction": {
+ "message": "Modifica la transazione"
+ },
"emailUs": {
"message": "Mandaci una mail!"
},
"encryptNewDen": {
"message": "Cripta il tuo nuovo DEN"
},
+ "ensNameNotFound": {
+ "message": "Nome ENS non trovato"
+ },
"enterPassword": {
"message": "Inserisci password"
},
"enterPasswordConfirm": {
"message": "Inserisci la tua password per confermare"
},
+ "enterPasswordContinue": {
+ "message": "Inserisci la tua password per continuare"
+ },
"etherscanView": {
"message": "Vedi account su Etherscan"
},
"exchangeRate": {
"message": "Tasso di cambio"
},
+ "expandView": {
+ "message": "Expand View"
+ },
"exportPrivateKey": {
"message": "Esporta Chiave Privata"
},
@@ -257,7 +377,7 @@
"message": "Esporta chiave privata a tuo rischio."
},
"failed": {
- "message": "Fallito"
+ "message": "Fallita"
},
"fiat": {
"message": "FIAT",
@@ -270,6 +390,9 @@
"followTwitter": {
"message": "Seguici su Twitter"
},
+ "forgetDevice": {
+ "message": "Dimentica questo dispositivo"
+ },
"from": {
"message": "Da"
},
@@ -279,6 +402,9 @@
"fromShapeShift": {
"message": "Da ShapeShift"
},
+ "functionType": {
+ "message": "Tipo della Funzione"
+ },
"gas": {
"message": "Gas",
"description": "Piccola indicazione del costo del gas"
@@ -310,6 +436,9 @@
"gasPriceRequired": {
"message": "Prezzo Gas Richiesto"
},
+ "generatingTransaction": {
+ "message": "Generando la transazione"
+ },
"getEther": {
"message": "Ottieni Ether"
},
@@ -317,10 +446,28 @@
"message": "Ottieni Get Ether da un faucet per $1",
"description": "Visualizza il nome della rete per il faucet Ether"
},
+ "getHelp": {
+ "message": "Aiuto."
+ },
"greaterThanMin": {
"message": "deve essere maggiore o uguale a $1.",
"description": "aiuto per inserire un input esadecimale come decimale"
},
+ "hardware": {
+ "message": "hardware"
+ },
+ "hardwareWalletConnected": {
+ "message": "Portafoglio hardware connesso"
+ },
+ "hardwareWallets": {
+ "message": "Connetti portafoglio hardware"
+ },
+ "hardwareWalletsMsg": {
+ "message": "Selezione un portafoglio hardware che vuoi utilizzare con MetaMask"
+ },
+ "havingTroubleConnecting": {
+ "message": "Problemi di connessione?"
+ },
"here": {
"message": "qui",
"description": "per intendere -clicca qui- per maggiori informazioni (va con troubleTokenBalances)"
@@ -328,6 +475,9 @@
"hereList": {
"message": "Questa è una lista!!!!"
},
+ "hexData": {
+ "message": "Dati Hex"
+ },
"hide": {
"message": "Nascondi"
},
@@ -337,6 +487,9 @@
"hideTokenPrompt": {
"message": "Nascondi Token?"
},
+ "history": {
+ "message": "Storico"
+ },
"howToDeposit": {
"message": "Come vuoi depositare Ether?"
},
@@ -363,9 +516,18 @@
"message": "Importato",
"description": "stato che conferma che un account è stato totalmente caricato nel portachiavi"
},
+ "importUsingSeed": {
+ "message": "Importa account con frase seed"
+ },
+ "info": {
+ "message": "Informazioni"
+ },
"infoHelp": {
"message": "Informazioni & Aiuto"
},
+ "initialTransactionConfirmed": {
+ "message": "La transazione iniziale è stata confermata dalla rete. Clicca OK per tornare indietro."
+ },
"insufficientFunds": {
"message": "Fondi non sufficienti."
},
@@ -390,6 +552,9 @@
"invalidRPC": {
"message": "URI RPC invalido"
},
+ "invalidSeedPhrase": {
+ "message": "Frase seed non valida"
+ },
"jsonFail": {
"message": "Qualcosa è andato storto. Assicurati che il file JSON sia formattato correttamente."
},
@@ -397,12 +562,24 @@
"message": "File JSON",
"description": "formato per importare un account"
},
+ "keepTrackTokens": {
+ "message": "Tieni traccia dei tokens che hai acquistato con il tuo account MetaMask."
+ },
"kovan": {
"message": "Rete di test Kovan"
},
"knowledgeDataBase": {
"message": "Visita la nostra Knowledge Base"
},
+ "max": {
+ "message": "Massimo"
+ },
+ "learnMore": {
+ "message": "Scopri di più"
+ },
+ "ledgerAccountRestriction": {
+ "message": "E' necessario utilizzare l'ultimo account prima di poterne aggiungere uno nuovo."
+ },
"lessThanMax": {
"message": "deve essere minore o uguale a $1.",
"description": "aiuto per inserire un input esadecimale come decimale"
@@ -410,6 +587,9 @@
"likeToAddTokens": {
"message": "Vorresti aggiungere questi token?"
},
+ "links": {
+ "message": "Collegamenti"
+ },
"limit": {
"message": "Limite"
},
@@ -437,17 +617,26 @@
"mainnet": {
"message": "Rete Ethereum Principale"
},
+ "menu": {
+ "message": "Menu"
+ },
"message": {
"message": "Messaggio"
},
"metamaskDescription": {
"message": "MetaMask è una cassaforte sicura per identità su Ethereum."
},
+ "metamaskSeedWords": {
+ "message": "Parole Seed di MetaMask"
+ },
+ "metamaskVersion": {
+ "message": "versione di MetaMask"
+ },
"min": {
"message": "Minimo"
},
"myAccounts": {
- "message": "Account Miei"
+ "message": "Miei Account"
},
"mustSelectOne": {
"message": "Devi selezionare almeno un token."
@@ -469,6 +658,9 @@
"networks": {
"message": "Reti"
},
+ "nevermind": {
+ "message": "Non importa"
+ },
"newAccount": {
"message": "Nuovo Account"
},
@@ -482,6 +674,9 @@
"newPassword": {
"message": "Nuova Password (minimo 8 caratteri)"
},
+ "newPassword8Chars": {
+ "message": "Nuova Password (minimo 8 caratteri)"
+ },
"newRecipient": {
"message": "Nuovo Destinatario"
},
@@ -489,7 +684,7 @@
"message": "Nuovo URL RPC"
},
"next": {
- "message": "Prossimo"
+ "message": "Avanti"
},
"noAddressForName": {
"message": "Nessun indirizzo è stato impostato per questo nome."
@@ -497,32 +692,75 @@
"noDeposits": {
"message": "Nessun deposito ricevuto"
},
+ "noConversionRateAvailable": {
+ "message": "Tasso di Conversione non Disponibile"
+ },
"noTransactionHistory": {
"message": "Nessuna cronologia delle transazioni."
},
"noTransactions": {
"message": "Nessuna Transazione"
},
+ "notFound": {
+ "message": "Non Trovata"
+ },
"notStarted": {
"message": "Non Iniziato"
},
+ "noWebcamFoundTitle": {
+ "message": "Webcam non trovata"
+ },
+ "noWebcamFound": {
+ "message": "La webcam del tuo computer non è stata trovata. Per favore riprovaci."
+ },
"oldUI": {
"message": "Vecchia interfaccia"
},
"oldUIMessage": {
"message": "Sei ritornato alla vecchia interfaccia. Puoi ritornare alla nuova interfaccia tramite l'opzione nel menu a discesa in alto a destra."
},
+ "onlySendToEtherAddress": {
+ "message": "Invia ETH solamente ad un account Ethereum."
+ },
+ "onlySendTokensToAccountAddress": {
+ "message": "Invia solamente $1 ad un account Ethereum.",
+ "description": "mostra il simbolo del token"
+ },
+ "openInTab": {
+ "message": "Apri in una scheda"
+ },
"or": {
"message": "o",
"description": "scelta tra creare o importare un nuovo account"
},
+ "orderOneHere": {
+ "message": "Compra un Trezor o un Ledger e tieni i tuoi soldi al sicuro"
+ },
+ "origin": {
+ "message": "Origine"
+ },
+ "outgoing": {
+ "message": "In Uscita"
+ },
+ "parameters": {
+ "message": "Parametri"
+ },
+ "password": {
+ "message": "Password"
+ },
"passwordCorrect": {
"message": "Assicurati che la password sia corretta."
},
+ "passwordsDontMatch": {
+ "message": "Le Password Non Corrispondonos"
+ },
"passwordMismatch": {
"message": "le password non corrispondono",
"description": "nella creazione della password, le due password all'interno dei campi non corrispondono"
},
+ "passwordNotLongEnough": {
+ "message": "Password non abbastanza lunga"
+ },
"passwordShort": {
"message": "password non sufficientemente lunga",
"description": "nella creazione della password, la password non è lunga abbastanza"
@@ -534,12 +772,21 @@
"pasteSeed": {
"message": "Incolla la tua frase seed qui!"
},
+ "pending": {
+ "message": "in corso"
+ },
"personalAddressDetected": {
"message": "Rilevato indirizzo personale. Inserisci l'indirizzo del contratto del token."
},
"pleaseReviewTransaction": {
"message": "Ricontrolla la tua transazione."
},
+ "popularTokens": {
+ "message": "Tokens Popolari"
+ },
+ "prev": {
+ "message": "Precedente"
+ },
"privacyMsg": {
"message": "Politica sulla Privacy"
},
@@ -556,6 +803,9 @@
"qrCode": {
"message": "Mostra Codice QR"
},
+ "queue": {
+ "message": "Coda"
+ },
"readdToken": {
"message": "Puoi aggiungere nuovamente questo token in futuro andando in “Aggiungi token” nel menu delle opzioni del tuo account."
},
@@ -574,36 +824,87 @@
"refundAddress": {
"message": "Indirizzo di Rimborso"
},
+ "reject": {
+ "message": "Reject"
+ },
+ "rejectAll": {
+ "message": "Reject All"
+ },
+ "rejectTxsN": {
+ "message": "Reject $1 transactions"
+ },
+ "rejectTxsDescription": {
+ "message": "You are about to batch reject $1 transactions."
+ },
"rejected": {
"message": "Respinta"
},
+ "reset": {
+ "message": "Reset"
+ },
"resetAccount": {
"message": "Resetta Account"
},
+ "resetAccountDescription": {
+ "message": "Resettare il tuo account cancellerà lo storico delle transazioni."
+ },
"restoreFromSeed": {
"message": "Ripristina da una frase seed"
},
+ "restoreVault": {
+ "message": "Ripristina Cassaforte"
+ },
+ "restoreAccountWithSeed": {
+ "message": "Ripristina Account con la Frase Seed"
+ },
"required": {
"message": "Richiesto"
},
"retryWithMoreGas": {
"message": "Riprova con un prezzo del Gas maggiore qui"
},
+ "restore": {
+ "message": "Ripristina"
+ },
"revealSeedWords": {
"message": "Rivela Frase Seed"
},
+ "revealSeedWordsTitle": {
+ "message": "Frase Seed"
+ },
+ "revealSeedWordsDescription": {
+ "message": "Se cambierai browser o computer, ti servirà questa frase seed per accedere ai tuoi account. Salvala in un posto sicuro e segreto."
+ },
+ "revealSeedWordsWarningTitle": {
+ "message": "NON CONDIVIDERE questa frase con nessuno!"
+ },
"revealSeedWordsWarning": {
"message": "Non ripristinare la tua frase seed in pubblico!. Queste parole possono essere usate per rubare il tuo account."
},
"revert": {
"message": "Annulla"
},
+ "remove": {
+ "message": "rimuovi"
+ },
+ "removeAccount": {
+ "message": "Rimuovi account"
+ },
+ "removeAccountDescription": {
+ "message": "Questo account sarà rimosso dal tuo portafoglio. Per favore assicurati che hai la frase seed originale o la chiave privata per questo account importato prima di continuare. Puoi nuovamente importare o creare un account dal menù a tendina. "
+ },
+ "readyToConnect": {
+ "message": "Pronto a Connetterti?"
+ },
"rinkeby": {
"message": "Rete di test Rinkeby"
},
"ropsten": {
"message": "Rete di test Ropsten"
},
+ "rpc": {
+ "message": "RPC Personalizzata"
+ },
"sampleAccountName": {
"message": "Es: Il mio nuovo account",
"description": "Aiuta l'utente a capire il concetto di aggiungere un nome leggibile al loro account"
@@ -611,6 +912,9 @@
"save": {
"message": "Salva"
},
+ "saveAsCsvFile": {
+ "message": "Salva Come File CSV"
+ },
"saveAsFile": {
"message": "Salva come File",
"description": "Processo per esportare un account"
@@ -618,9 +922,18 @@
"saveSeedAsFile": {
"message": "Salva la Frase Seed come File"
},
+ "scanInstructions": {
+ "message": "Posizione il codice QR davanti alla fotocamera"
+ },
+ "scanQrCode": {
+ "message": "Scansiona Codice QR"
+ },
"search": {
"message": "Cerca"
},
+ "searchResults": {
+ "message": "Risultati Ricerca"
+ },
"secretPhrase": {
"message": "Inserisci la tua frase segreta di dodici parole per ripristinare la cassaforte."
},
@@ -633,6 +946,9 @@
"selectCurrency": {
"message": "Seleziona Moneta"
},
+ "selectLocale": {
+ "message": "Selezione Lingua"
+ },
"selectService": {
"message": "Seleziona Servizio"
},
@@ -648,6 +964,33 @@
"sendTokens": {
"message": "Invia Tokens"
},
+ "sentEther": {
+ "message": "ether inviati"
+ },
+ "sentTokens": {
+ "message": "tokens inviati"
+ },
+ "separateEachWord": {
+ "message": "Separa ogni parola con un solo spazio"
+ },
+ "searchTokens": {
+ "message": "Cerca Tokens"
+ },
+ "selectAnAddress": {
+ "message": "Seleziona un Indirizzo"
+ },
+ "selectAnAccount": {
+ "message": "Seleziona un Account"
+ },
+ "selectAnAccountHelp": {
+ "message": "Selezione l'account da visualizzare in MetaMask"
+ },
+ "selectHdPath": {
+ "message": "Seleziona Percorso HD"
+ },
+ "selectPathHelp": {
+ "message": "Se non vedi il tuo account Ledger esistente di seguito, prova a cambiare il percorso in \"Legacy (MEW / MyCrypto)\""
+ },
"sendTokensAnywhere": {
"message": "Invia Tokens a chiunque abbia un account Ethereum"
},
@@ -663,9 +1006,21 @@
"showQRCode": {
"message": "Mostra Codie QR"
},
+ "showHexData": {
+ "message": "Mostra Dati Hex"
+ },
+ "showHexDataDescription": {
+ "message": "Seleziona per mostrare il campo dei dati hex nella schermata di invio"
+ },
"sign": {
"message": "Firma"
},
+ "signatureRequest": {
+ "message": "Firma Richiesta"
+ },
+ "signed": {
+ "message": "Firmata"
+ },
"signMessage": {
"message": "Firma Messaggio"
},
@@ -681,6 +1036,15 @@
"spaceBetween": {
"message": "ci può essere solo uno spazio tra le parole"
},
+ "speedUp": {
+ "message": "velocizza"
+ },
+ "speedUpTitle": {
+ "message": "Velocizza Transazione"
+ },
+ "speedUpSubtitle": {
+ "message": "Aumenta il prezzo del gas per tentare di sovrascrivere e velocizzare la transazione"
+ },
"status": {
"message": "Stato"
},
@@ -690,9 +1054,33 @@
"stateLogsDescription": {
"message": "I log di stato contengono i tuoi indirizzi pubblici e le transazioni effettuate."
},
+ "stateLogError": {
+ "message": "Errore nel recupero dei log di stato."
+ },
+ "step1HardwareWallet": {
+ "message": "1. Connetti Portafoglio Hardware"
+ },
+ "step1HardwareWalletMsg": {
+ "message": "Connetti il tuo portafoglio hardware al tuo computer."
+ },
+ "step2HardwareWallet": {
+ "message": "2. Seleziona un Account"
+ },
+ "step2HardwareWalletMsg": {
+ "message": "Selezione l'account che vuoi vedere. Puoi selezionarne solo uno alla volta."
+ },
+ "step3HardwareWallet": {
+ "message": "3. Inizia a usare dApps e molto altro ancora!"
+ },
+ "step3HardwareWalletMsg": {
+ "message": "Usa il tuo account hardware come utilizzeresti qualsiasi account Ethereum. Accedi alle dApps, invia Eth, compra e conserva token ERC20 e token non fungibili come CryptoKitties"
+ },
"submit": {
"message": "Invia"
},
+ "submitted": {
+ "message": "Inviata"
+ },
"supportCenter": {
"message": "Visita il nostro Centro di Supporto"
},
@@ -715,6 +1103,9 @@
"message": "$1 a ETH via ShapeShift",
"description": "il sistema riempirà il tipo di deposito all'inizio del messaggio"
},
+ "token": {
+ "message": "Token"
+ },
"tokenAddress": {
"message": "Indirizzo Token"
},
@@ -736,22 +1127,61 @@
"total": {
"message": "Totale"
},
+ "transaction": {
+ "message": "transazione"
+ },
+ "transactionConfirmed": {
+ "message": "Transazione confermata il $2."
+ },
+ "transactionCreated": {
+ "message": "Transazione di valore $1 creata il $2."
+ },
+ "transactionWithNonce": {
+ "message": "Transazione $1"
+ },
+ "transactionDropped": {
+ "message": "Transazione abbandonata il $2."
+ },
+ "transactionSubmitted": {
+ "message": "Transazione inviata il $2."
+ },
+ "transactionUpdated": {
+ "message": "Transazione aggiornata il $2."
+ },
+ "transactionUpdatedGas": {
+ "message": "Transazione aggiornata con un prezzo del gas di $1 il $2."
+ },
"transactions": {
"message": "transazioni"
},
+ "transactionError": {
+ "message": "Errore Transazione. Eccceziona generata nel codice del contratto."
+ },
"transactionMemo": {
"message": "Promemoria Transazione (opzionale)"
},
"transactionNumber": {
"message": "Numero Transazione"
},
+ "transfer": {
+ "message": "Trasferisci"
+ },
+ "transferFrom": {
+ "message": "Transfer From"
+ },
"transfers": {
"message": "Trasferimenti"
},
+ "trezorHardwareWallet": {
+ "message": "TREZOR Portafoglio Hardware"
+ },
"troubleTokenBalances": {
"message": "Abbiamo avuto un problema a caricare il bilancio dei tuoi token. Puoi vederlo ",
"description": "Seguito da un link (qui) per vedere il bilancio dei token"
},
+ "tryAgain": {
+ "message": "Prova di nuovo"
+ },
"twelveWords": {
"message": "Queste 12 parole sono l'unico modo per ripristinare i tuoi account MetaMask. \nSalvale in un posto sicuro e segreto."
},
@@ -764,18 +1194,45 @@
"uiWelcomeMessage": {
"message": "Stai utilizzanto la nuova interfaccia di MetaMask. Guarda in giro, prova nuove funzionalità come inviare token, e facci sapere se hai dei problemi."
},
+ "unapproved": {
+ "message": "Non approvata"
+ },
"unavailable": {
"message": "Non Disponibile"
},
+ "units": {
+ "message": "unità"
+ },
"unknown": {
"message": "Sconosciuto"
},
+ "unknownFunction": {
+ "message": "Funzione Sconosciuta"
+ },
"unknownNetwork": {
"message": "Rete Privata Sconosciuta"
},
"unknownNetworkId": {
"message": "ID rete sconosciuto"
},
+ "unknownQrCode": {
+ "message": "Errore: Non siamo riusciti a identificare il codice QR"
+ },
+ "unknownCameraErrorTitle": {
+ "message": "Ooops! Qualcosa è andato storto...."
+ },
+ "unknownCameraError": {
+ "message": "C'è stato un errore nel tentativo di accedere alla fotocamera. Per favore prova di nuovo..."
+ },
+ "unlock": {
+ "message": "Sblocca"
+ },
+ "unlockMessage": {
+ "message": "Il web decentralizzato ti attende"
+ },
+ "updatedWithDate": {
+ "message": "Aggiornata $1"
+ },
"uriErrorMsg": {
"message": "Gli URI richiedono un prefisso HTTP/HTTPS."
},
@@ -798,22 +1255,40 @@
"viewAccount": {
"message": "Vedi Account"
},
+ "viewOnEtherscan": {
+ "message": "Vedi su Etherscan"
+ },
"visitWebSite": {
"message": "Visita il nostro sito web"
},
+ "walletSeed": {
+ "message": "Seed del Portafoglio"
+ },
"warning": {
"message": "Attenzione"
},
+ "welcomeBack": {
+ "message": "Bentornato!"
+ },
"welcomeBeta": {
"message": "Benvenuto nella Beta di MetaMask"
},
"whatsThis": {
"message": "Cos'è questo?"
},
+ "yesLetsTry": {
+ "message": "Si, proviamo"
+ },
+ "youNeedToAllowCameraAccess": {
+ "message": "Devi consentire l'accesso alla fotocamera per usare questa funzionalità."
+ },
"yourSigRequested": {
"message": "E' richiesta la tua firma"
},
"youSign": {
"message": "Ti stai connettendo"
+ },
+ "yourPrivateSeedPhrase": {
+ "message": "La tua frase seed privata"
}
}
diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json
index 55549bb87..c8d470188 100644
--- a/app/_locales/ko/messages.json
+++ b/app/_locales/ko/messages.json
@@ -14,9 +14,15 @@
"accountName": {
"message": "계정 이름"
},
+ "accountOptions": {
+ "message": "계정 옵션"
+ },
"accountSelectionRequired": {
"message": "계정을 선택하셔야 합니다!"
},
+ "activityLog": {
+ "message": "활동 로그"
+ },
"address": {
"message": "주소"
},
@@ -29,6 +35,9 @@
"addTokens": {
"message": "토큰 추가"
},
+ "addSuggestedTokens": {
+ "message": "제안된 토큰 추가"
+ },
"addAcquiredTokens": {
"message": "메타마스크를 통해 획득한 토큰 추가"
},
@@ -55,6 +64,9 @@
"attemptingConnect": {
"message": "블록체인에 접속을 시도하는 중입니다."
},
+ "attemptToCancel": {
+ "message": "취소 하시겠습니까?"
+ },
"attributions": {
"message": "속성"
},
@@ -110,6 +122,15 @@
"cancel": {
"message": "취소"
},
+ "cancelAttempt": {
+ "message": "취소 시도"
+ },
+ "cancellationGasFee": {
+ "message": "취소 가스 수수료"
+ },
+ "cancelN": {
+ "message": "모든 $1 트랜잭션 취소"
+ },
"classicInterface": {
"message": "예전 인터페이스"
},
@@ -220,7 +241,10 @@
"description": "거래 유형 (암호화폐)"
},
"currentConversion": {
- "message": "선택된 단위"
+ "message": "현재 통화"
+ },
+ "currentLanguage": {
+ "message": "현재 언어"
},
"currentNetwork": {
"message": "현재 네트워크"
@@ -340,6 +364,9 @@
"exchangeRate": {
"message": "환율"
},
+ "expandView": {
+ "message": "큰 화면으로 보기"
+ },
"exportPrivateKey": {
"message": "개인키 내보내기"
},
@@ -457,6 +484,9 @@
"hideTokenPrompt": {
"message": "토큰 숨기기?"
},
+ "history": {
+ "message": "히스토리"
+ },
"howToDeposit": {
"message": "어떤 방법으로 이더를 입금하시겠습니까?"
},
@@ -486,6 +516,9 @@
"importUsingSeed": {
"message": "계정 시드 구문으로 가져오기"
},
+ "info": {
+ "message": "정보"
+ },
"infoHelp": {
"message": "정보 및 도움말"
},
@@ -539,7 +572,7 @@
"message": "최대"
},
"learnMore": {
- "message": "더 배우기."
+ "message": "더 알아보기."
},
"ledgerAccountRestriction": {
"message": "새 계정을 추가하려면 최소 마지막 계정을 사용해야 합니다."
@@ -590,6 +623,9 @@
"metamaskDescription": {
"message": "메타마스크는 이더리움을 위한 안전한 신분 저장소입니다."
},
+ "metamaskVersion": {
+ "message": "메타마스크 버전"
+ },
"metamaskSeedWords": {
"message": "메타마스크 시드 단어"
},
@@ -610,7 +646,7 @@
"description": "사용자는 계정을 가져오기 위해서 파일을 추가후 계속 진행해야 합니다"
},
"needImportPassword": {
- "message": "선택 된 파일에 대한 비밀번호를 입력해주세요.",
+ "message": "선택된 파일에 대한 비밀번호를 입력해주세요.",
"description": "계정을 가져오기 위해서 비밀번호와 파일이 필요합니다."
},
"negativeETH": {
@@ -727,6 +763,9 @@
"pasteSeed": {
"message": "시드 구문을 이곳에 붙여넣어 주세요!"
},
+ "pending": {
+ "message": "펜딩 중"
+ },
"personalAddressDetected": {
"message": "개인 주소가 탐지됨. 토큰 컨트랙트 주소를 입력하세요."
},
@@ -755,6 +794,9 @@
"qrCode": {
"message": "QR 코드 보기"
},
+ "queue": {
+ "message": "큐"
+ },
"readdToken": {
"message": "옵션 메뉴에서 “토큰 추가”를 눌러서 추후에 다시 이 토큰을 추가하실 수 있습니다."
},
@@ -773,6 +815,18 @@
"refundAddress": {
"message": "환불받을 주소"
},
+ "reject": {
+ "message": "거부"
+ },
+ "rejectAll": {
+ "message": "모두 거부"
+ },
+ "rejectTxsN": {
+ "message": "$1 트랜잭션 거부"
+ },
+ "rejectTxsDescription": {
+ "message": "$1 트랜잭션을 거부합니다."
+ },
"rejected": {
"message": "거부됨"
},
@@ -892,6 +946,9 @@
"selectCurrency": {
"message": "통화 선택"
},
+ "selectLocale": {
+ "message": "언어 선택"
+ },
"selectService": {
"message": "서비스 선택"
},
@@ -907,6 +964,12 @@
"sendTokens": {
"message": "토큰 전송"
},
+ "sentEther": {
+ "message": "전송된 이더"
+ },
+ "sentTokens": {
+ "message": "전송된 토큰"
+ },
"separateEachWord": {
"message": "각 단어는 공백 한칸으로 분리합니다"
},
@@ -934,9 +997,6 @@
"settings": {
"message": "설정"
},
- "info": {
- "message": "정보"
- },
"shapeshiftBuy": {
"message": "Shapeshift를 통해서 구매하기"
},
@@ -946,12 +1006,21 @@
"showQRCode": {
"message": "QR 코드 보기"
},
+ "showHexData": {
+ "message": "Hex 데이터 보기"
+ },
+ "showHexDataDescription": {
+ "message": "선택하면 전송화면의 hex 데이터 필드 값을 보여줍니다."
+ },
"sign": {
"message": "서명"
},
"signed": {
"message": "서명됨"
},
+ "signatureRequest": {
+ "message": "서명 요청"
+ },
"signMessage": {
"message": "메시지 서명"
},
@@ -1049,6 +1118,9 @@
"total": {
"message": "합계"
},
+ "transaction": {
+ "message": "트랜잭션"
+ },
"transactions": {
"message": "트랜잭션"
},
@@ -1095,6 +1167,9 @@
"unavailable": {
"message": "이용할 수 없음"
},
+ "units": {
+ "message": "단위"
+ },
"unknown": {
"message": "알 수 없음"
},
@@ -1165,11 +1240,14 @@
"whatsThis": {
"message": "이것은 무엇인가요?"
},
+ "yesLetsTry": {
+ "message": "네, 시도해보겠습니다."
+ },
"yourSigRequested": {
"message": "서명을 요청 중입니다."
},
"youSign": {
- "message": "서명 중입니다"
+ "message": "서명합니다"
},
"yourPrivateSeedPhrase": {
"message": "개인 시드 구문"
diff --git a/app/scripts/controllers/transactions/index.js b/app/scripts/controllers/transactions/index.js
index a57c85f50..9f2290924 100644
--- a/app/scripts/controllers/transactions/index.js
+++ b/app/scripts/controllers/transactions/index.js
@@ -366,7 +366,40 @@ class TransactionController extends EventEmitter {
this.txStateManager.setTxStatusSubmitted(txId)
}
- confirmTransaction (txId) {
+ /**
+ * Sets the status of the transaction to confirmed and sets the status of nonce duplicates as
+ * dropped if the txParams have data it will fetch the txReceipt
+ * @param {number} txId - The tx's ID
+ * @returns {Promise<void>}
+ */
+ async confirmTransaction (txId) {
+ // get the txReceipt before marking the transaction confirmed
+ // to ensure the receipt is gotten before the ui revives the tx
+ const txMeta = this.txStateManager.getTx(txId)
+
+ if (!txMeta) {
+ return
+ }
+
+ try {
+ const txReceipt = await this.query.getTransactionReceipt(txMeta.hash)
+
+ // It seems that sometimes the numerical values being returned from
+ // this.query.getTransactionReceipt are BN instances and not strings.
+ const gasUsed = typeof txReceipt.gasUsed !== 'string'
+ ? txReceipt.gasUsed.toString(16)
+ : txReceipt.gasUsed
+
+ txMeta.txReceipt = {
+ ...txReceipt,
+ gasUsed,
+ }
+
+ this.txStateManager.updateTx(txMeta, 'transactions#confirmTransaction - add txReceipt')
+ } catch (err) {
+ log.error(err)
+ }
+
this.txStateManager.setTxStatusConfirmed(txId)
this._markNonceDuplicatesDropped(txId)
}
diff --git a/app/scripts/controllers/transactions/tx-state-manager.js b/app/scripts/controllers/transactions/tx-state-manager.js
index daa6cc388..58c48e34e 100644
--- a/app/scripts/controllers/transactions/tx-state-manager.js
+++ b/app/scripts/controllers/transactions/tx-state-manager.js
@@ -400,6 +400,11 @@ class TransactionStateManager extends EventEmitter {
*/
_setTxStatus (txId, status) {
const txMeta = this.getTx(txId)
+
+ if (!txMeta) {
+ return
+ }
+
txMeta.status = status
setTimeout(() => {
try {
diff --git a/ui/app/components/transaction-activity-log/transaction-activity-log.util.js b/ui/app/components/transaction-activity-log/transaction-activity-log.util.js
index 32834ff47..97aa9a8f1 100644
--- a/ui/app/components/transaction-activity-log/transaction-activity-log.util.js
+++ b/ui/app/components/transaction-activity-log/transaction-activity-log.util.js
@@ -46,11 +46,15 @@ export function getActivities (transaction) {
if (!Array.isArray(base) && base.status === UNAPPROVED_STATUS && base.txParams) {
const { time, txParams: { value } = {} } = base
return acc.concat(eventCreator(TRANSACTION_CREATED_EVENT, time, value))
+ // An entry in the history may be an array of more sub-entries.
} else if (Array.isArray(base)) {
const events = []
base.forEach(entry => {
- const { op, path, value, timestamp } = entry
+ const { op, path, value, timestamp: entryTimestamp } = entry
+ // Not all sub-entries in a history entry have a timestamp. If the sub-entry does not have a
+ // timestamp, the first sub-entry in a history entry should.
+ const timestamp = entryTimestamp || base[0] && base[0].timestamp
if (path in eventPathsHash && op === REPLACE_OP) {
switch (path) {
diff --git a/ui/app/components/transaction-breakdown/transaction-breakdown.component.js b/ui/app/components/transaction-breakdown/transaction-breakdown.component.js
index bb6075e9f..5a2b4a481 100644
--- a/ui/app/components/transaction-breakdown/transaction-breakdown.component.js
+++ b/ui/app/components/transaction-breakdown/transaction-breakdown.component.js
@@ -26,8 +26,11 @@ export default class TransactionBreakdown extends PureComponent {
render () {
const { t } = this.context
const { transaction, className } = this.props
- const { txParams: { gas, gasPrice, value } = {} } = transaction
- const hexGasTotal = getHexGasTotal({ gasLimit: gas, gasPrice })
+ const { txParams: { gas, gasPrice, value } = {}, txReceipt: { gasUsed } = {} } = transaction
+
+ const gasLimit = typeof gasUsed === 'string' ? gasUsed : gas
+
+ const hexGasTotal = getHexGasTotal({ gasLimit, gasPrice })
const totalInHex = sumHexes(hexGasTotal, value)
return (
@@ -52,6 +55,19 @@ export default class TransactionBreakdown extends PureComponent {
value={gas}
/>
</TransactionBreakdownRow>
+ {
+ typeof gasUsed === 'string' && (
+ <TransactionBreakdownRow
+ title={`${t('gasUsed')} (${t('units')})`}
+ className="transaction-breakdown__row-title"
+ >
+ <HexToDecimal
+ className="transaction-breakdown__value"
+ value={gasUsed}
+ />
+ </TransactionBreakdownRow>
+ )
+ }
<TransactionBreakdownRow title={t('gasPrice')}>
<CurrencyDisplay
className="transaction-breakdown__value"
diff --git a/ui/app/components/transaction-list-item/transaction-list-item.component.js b/ui/app/components/transaction-list-item/transaction-list-item.component.js
index c1c69f59b..40eef5e15 100644
--- a/ui/app/components/transaction-list-item/transaction-list-item.component.js
+++ b/ui/app/components/transaction-list-item/transaction-list-item.component.js
@@ -11,6 +11,7 @@ import { CONFIRM_TRANSACTION_ROUTE } from '../../routes'
import { UNAPPROVED_STATUS, TOKEN_METHOD_TRANSFER } from '../../constants/transactions'
import { ETH } from '../../constants/common'
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../app/scripts/lib/enums'
+import { getStatusKey } from '../../helpers/transactions.util'
export default class TransactionListItem extends PureComponent {
static propTypes = {
@@ -167,7 +168,7 @@ export default class TransactionListItem extends PureComponent {
</div>
<TransactionStatus
className="transaction-list-item__status"
- statusKey={transaction.status}
+ statusKey={getStatusKey(transaction)}
title={(
(transaction.err && transaction.err.rpc)
? transaction.err.rpc.message
diff --git a/ui/app/components/transaction-status/index.scss b/ui/app/components/transaction-status/index.scss
index 35be550f7..26a1f5d38 100644
--- a/ui/app/components/transaction-status/index.scss
+++ b/ui/app/components/transaction-status/index.scss
@@ -25,4 +25,9 @@
background-color: #FFF2DB;
color: #CA810A;
}
-} \ No newline at end of file
+
+ &--failed {
+ background: lighten($monzo, 56%);
+ color: $monzo;
+ }
+}
diff --git a/ui/app/helpers/tests/transactions.util.test.js b/ui/app/helpers/tests/transactions.util.test.js
index 103a84a8c..838522e35 100644
--- a/ui/app/helpers/tests/transactions.util.test.js
+++ b/ui/app/helpers/tests/transactions.util.test.js
@@ -19,4 +19,39 @@ describe('Transactions utils', () => {
assert.doesNotThrow(() => utils.getTokenData())
})
})
+
+ describe('getStatusKey', () => {
+ it('should return the correct status', () => {
+ const tests = [
+ {
+ transaction: {
+ status: 'confirmed',
+ txReceipt: {
+ status: '0x0',
+ },
+ },
+ expected: 'failed',
+ },
+ {
+ transaction: {
+ status: 'confirmed',
+ txReceipt: {
+ status: '0x1',
+ },
+ },
+ expected: 'confirmed',
+ },
+ {
+ transaction: {
+ status: 'pending',
+ },
+ expected: 'pending',
+ },
+ ]
+
+ tests.forEach(({ transaction, expected }) => {
+ assert.equal(utils.getStatusKey(transaction), expected)
+ })
+ })
+ })
})
diff --git a/ui/app/helpers/transactions.util.js b/ui/app/helpers/transactions.util.js
index f7d249e63..e50196196 100644
--- a/ui/app/helpers/transactions.util.js
+++ b/ui/app/helpers/transactions.util.js
@@ -126,3 +126,21 @@ export function sumHexes (...args) {
return ethUtil.addHexPrefix(total)
}
+
+/**
+ * Returns a status key for a transaction. Requires parsing the txMeta.txReceipt on top of
+ * txMeta.status because txMeta.status does not reflect on-chain errors.
+ * @param {Object} transaction - The txMeta object of a transaction.
+ * @param {Object} transaction.txReceipt - The transaction receipt.
+ * @returns {string}
+ */
+export function getStatusKey (transaction) {
+ const { txReceipt: { status } = {} } = transaction
+
+ // There was an on-chain failure
+ if (status === '0x0') {
+ return 'failed'
+ }
+
+ return transaction.status
+}