From a76324f6d397c3e746ba501cfd858c4869cb0af7 Mon Sep 17 00:00:00 2001 From: Ellie Day Date: Sat, 23 Dec 2017 08:23:34 -0600 Subject: Add ExtensionStore and add basic store instance syncing to main controller --- app/scripts/background.js | 12 ++++++++++++ app/scripts/lib/extension-store.js | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 app/scripts/lib/extension-store.js (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index da022c490..45da2f6d0 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -4,6 +4,7 @@ const pump = require('pump') const log = require('loglevel') const extension = require('extensionizer') const LocalStorageStore = require('obs-store/lib/localStorage') +const ExtensionStore = require('./lib/extension-store') const storeTransform = require('obs-store/lib/transform') const asStream = require('obs-store/lib/asStream') const ExtensionPlatform = require('./platforms/extension') @@ -28,6 +29,7 @@ let popupIsOpen = false // state persistence const diskStore = new LocalStorageStore({ storageKey: STORAGE_KEY }) +const extensionStore = new ExtensionStore() // initialization flow initialize().catch(log.error) @@ -45,8 +47,12 @@ async function initialize () { async function loadStateFromPersistence () { // migrations const migrator = new Migrator({ migrations }) + // fetch from extension store + const extensionData = await extensionStore.fetch() // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) // read from disk let versionedData = diskStore.getState() || migrator.generateInitialState(firstTimeState) + // merge extension and versioned data + versionedData = { ...versionedData, ...extensionData } // migrate data versionedData = await migrator.migrateData(versionedData) // write to disk @@ -76,6 +82,7 @@ function setupController (initState) { pump( asStream(controller.store), storeTransform(versionifyData), + storeTransform(syncDataWithExtension), asStream(diskStore) ) @@ -85,6 +92,11 @@ function setupController (initState) { return versionedData } + function syncDataWithExtension(state) { + extensionStore.sync(state) // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) + return state + } + // // connect to other contexts // diff --git a/app/scripts/lib/extension-store.js b/app/scripts/lib/extension-store.js new file mode 100644 index 000000000..a8b730a65 --- /dev/null +++ b/app/scripts/lib/extension-store.js @@ -0,0 +1,20 @@ +const extension = require('extensionizer') + +const KEYS_TO_SYNC = ['KeyringController', 'PreferencesController'] + +module.exports = class ExtensionStore { + async fetch() { + return new Promise((resolve) => { + extension.storage.sync.get(KEYS_TO_SYNC, data => resolve(data)) + }) + } + async sync(state) { + const dataToSync = KEYS_TO_SYNC.reduce((result, key) => { + result[key] = state.data[key] + return result + }, {}) + return new Promise((resolve) => { + extension.storage.sync.set(dataToSync, () => resolve()) + }) + } +} -- cgit From 7184db7632ef79d4bde0e643fdc1a4ee910c77fb Mon Sep 17 00:00:00 2001 From: Ellie Day Date: Tue, 2 Jan 2018 21:31:17 -0800 Subject: handle situation where storage.sync is disabled in certain versions of firefox --- app/scripts/background.js | 5 ++--- app/scripts/lib/extension-store.js | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 45da2f6d0..732f47590 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -47,11 +47,10 @@ async function initialize () { async function loadStateFromPersistence () { // migrations const migrator = new Migrator({ migrations }) - // fetch from extension store - const extensionData = await extensionStore.fetch() // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) // read from disk let versionedData = diskStore.getState() || migrator.generateInitialState(firstTimeState) - // merge extension and versioned data + // fetch from extension store and merge in data + const extensionData = await extensionStore.fetch() // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) versionedData = { ...versionedData, ...extensionData } // migrate data versionedData = await migrator.migrateData(versionedData) diff --git a/app/scripts/lib/extension-store.js b/app/scripts/lib/extension-store.js index a8b730a65..dd0f82f36 100644 --- a/app/scripts/lib/extension-store.js +++ b/app/scripts/lib/extension-store.js @@ -1,11 +1,24 @@ const extension = require('extensionizer') const KEYS_TO_SYNC = ['KeyringController', 'PreferencesController'] +const FIREFOX_SYNC_DISABLED_MESSAGE = 'Please set webextensions.storage.sync.enabled to true in about:config' + +const handleDisabledSyncAndResolve = (resolve, toResolve) => { + // Firefox 52 has sync available on extension.storage, but it is disabled by default + const lastError = extension.runtime.lastError + if (lastError && lastError.message.includes(FIREFOX_SYNC_DISABLED_MESSAGE)) { + resolve({}) + } else { + resolve(toResolve) + } +} module.exports = class ExtensionStore { async fetch() { return new Promise((resolve) => { - extension.storage.sync.get(KEYS_TO_SYNC, data => resolve(data)) + extension.storage.sync.get(KEYS_TO_SYNC, (data) => { + handleDisabledSyncAndResolve(resolve, data) + }) }) } async sync(state) { @@ -14,7 +27,9 @@ module.exports = class ExtensionStore { return result }, {}) return new Promise((resolve) => { - extension.storage.sync.set(dataToSync, () => resolve()) + extension.storage.sync.set(dataToSync, () => { + handleDisabledSyncAndResolve(resolve) + }) }) } } -- cgit From 3c6a5b16ad37c83f548028d5b6fa3d0f75293ca5 Mon Sep 17 00:00:00 2001 From: Ellie Day Date: Tue, 2 Jan 2018 21:53:11 -0800 Subject: conditionally use extension store if supported or enabled --- app/scripts/background.js | 12 +++++++++--- app/scripts/lib/extension-store.js | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 732f47590..d9a2b0a6e 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -50,8 +50,12 @@ async function loadStateFromPersistence () { // read from disk let versionedData = diskStore.getState() || migrator.generateInitialState(firstTimeState) // fetch from extension store and merge in data - const extensionData = await extensionStore.fetch() // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) - versionedData = { ...versionedData, ...extensionData } + + if (extensionStore.isSupported && extensionStore.isEnabled) { + const extensionData = await extensionStore.fetch() // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) + versionedData = { ...versionedData, ...extensionData } + } + // migrate data versionedData = await migrator.migrateData(versionedData) // write to disk @@ -92,7 +96,9 @@ function setupController (initState) { } function syncDataWithExtension(state) { - extensionStore.sync(state) // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) + if (extensionStore.isSupported && extensionStore.isEnabled) { + extensionStore.sync(state) // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) + } return state } diff --git a/app/scripts/lib/extension-store.js b/app/scripts/lib/extension-store.js index dd0f82f36..67ee71f16 100644 --- a/app/scripts/lib/extension-store.js +++ b/app/scripts/lib/extension-store.js @@ -14,6 +14,10 @@ const handleDisabledSyncAndResolve = (resolve, toResolve) => { } module.exports = class ExtensionStore { + constructor() { + this.isSupported = !!(extension.storage.sync) + this.isEnabled = true // TODO: get value from user settings + } async fetch() { return new Promise((resolve) => { extension.storage.sync.get(KEYS_TO_SYNC, (data) => { -- cgit From bad70eb1b328aa911a2523ccab642d7607161b4b Mon Sep 17 00:00:00 2001 From: Nick Doiron Date: Mon, 22 Jan 2018 23:48:03 -1000 Subject: first steps to i18n --- app/_locales/en/messages.json | 167 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 166 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 8c28f1c43..6967a44d2 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -6,5 +6,170 @@ "appDescription": { "message": "Ethereum Identity Management", "description": "The description of the application" - } + }, + "encryptNewDen": { + "message": "Encrypt your new DEN" + }, + "denExplainer": { + "message": "Your DEN is your password-encrypted storage within MetaMask." + }, + "importDen": { + "message": "Import Existing DEN" + }, + "createDen": { + "message": "Create" + }, + "newPassword": { + "message": "New Password (min 8 chars)" + }, + "confirmPassword": { + "message": "Confirm Password" + }, + "passwordMismatch": { + "message": "passwords don't match" + }, + "passwordShort": { + "message": "password not long enough" + }, + "myAccounts": { + "message": "My Accounts" + }, + "logout": { + "message": "Log out" + }, + "createAccount": { + "message": "Create Account" + }, + "importAccount": { + "message": "Import Account" + }, + "account": { + "message": "Account:" + }, + "infoHelp": { + "message": "Info & Help" + }, + "settings": { + "message": "Settings" + }, + "importedCaps": { + "message": "IMPORTED" + }, + "saveButton": { + "message": "SAVE" + }, + "cancelButton": { + "message": "CANCEL" + }, + "signButton": { + "message": "SIGN" + }, + "revert": { + "message": "Revert" + }, + "gasLimit": { + "message": "Gas Limit" + }, + "gasLimitCalculation": { + "message": "We calculate the suggested gas limit based on network success rates." + }, + "gasPrice": { + "message": "Gas Price (GWEI)" + }, + "gasPriceCalculation": { + "message": "We calculate the suggested gas prices based on network success rates." + }, + "customGas": { + "message": "Customize Gas" + }, + "balanceIsInsufficientGas": { + "message": "Insufficient balance for current gas total" + }, + "gasLimitTooLow": { + "message": "Gas limit must be at least 21000" + }, + "editButton": { + "message": "Edit" + }, + "looseCaps": { + "message": "LOOSE" + }, + "addToken": "Add Token", + "exportPrivateKey": "Export Private Key", + "copyAddress": "Copy Address to clipboard", + "etherscanView": "View account on Etherscan", + "qrCode": "Show QR Code", + "accDetails": "Account Details", + "networks": "Networks", + "defaultNetwork": "The default network for Ether transactions is Main Net.", + "mainnet": "Main Ethereum Network", + "unknownNetwork": "Unknown Private Network", + "rinkeby": "Rinkeby Test Network", + "kovan": "Kovan Test Network", + "ropsten": "Ropsten Test Network", + "localhost": "Localhost 8545", + "customRPC": "Custom RPC", + "hideToken": "Hide Token", + "copiedClipboard": "Copied to Clipboard", + "detailsCaps": "DETAILS", + "sendButton": "SEND", + "depositButton": "DEPOSIT", + "notStarted": "Not Started", + "noTransactions": "No Transactions", + "contractPublished": "Contract Published", + "noTransactionHistory": "No transaction history.", + "warning": "Warning", + "failed": "Failed", + "rejected": "Rejected", + "sigRequested": "Signature Requested", + "yourSigRequested": "Your signature is being requested", + "balance": "Balance:", + "retryWithMoreGas": "Retry with a higher gas price here", + "takesTooLong": "Taking too long?", + "transactionNumber": "Transaction Number", + "loadingTokens": "Loading Tokens...", + "troubleTokenBalances": "We had trouble loading your token balances. You can view them ", + "here": "here", + "message": "Message", + "signNotice": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. ", + "youSign": "You are signing:", + "conversionProgress": "Conversion in progress", + "noDeposits": "No deposits received", + "fromShapeShift": "From ShapeShift", + "invalidRequest": "Invalid Request", + "status": "Status", + "limit": "Limit", + "exchangeRate": "Exchange Rate", + "min": "Minimum", + "available": "Available", + "unavailable": "Unavailable", + "depositBTC": "Deposit your BTC to the address below:", + "deposit": "Deposit", + "receive": "Receive", + "refundAddress": "Your Refund Address", + "buyButton": "Buy", + "signMessage": "Sign Message", + "youSignCaps": "YOU ARE SIGNING", + "messageCaps": "MESSAGE", + "readMore": "Read more here.", + "cancel": "Cancel", + "sign": "Sign", + "accept": "Accept", + "attemptingConnect": "Attempting to connect to blockchain.", + "privateNetwork": "Private Network", + "invalidInput": "Invalid input.", + "noAddressForName": "No address has been set for this name.", + "clickCopy": "Click to Copy", + "copyButton": " Copy ", + "copiedButton": "Copied", + "copy": "Copy", + "copiedExclamation": "Copied!", + "continueToCoinbase": "Continue to Coinbase", + "depositEth": "Deposit Eth", + "selectService": "Select Service", + "unknownNetworkId": "Unknown network ID", + "borrowDharma": "Borrow With Dharma (Beta)", + "exportPrivateKeyWarning": "Export private keys at your own risk.", + "confirmPasswordSmall": "confirm password", + "submit": "Submit", } -- cgit From 03c64ba8a646cbc5a62f2b2a8c5881bb4a4bda60 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Tue, 23 Jan 2018 15:45:33 -0800 Subject: Add unlimitedStorage option to manifest --- app/manifest.json | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index d795a225a..13ba074e7 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -60,6 +60,7 @@ "http://localhost:8545/", "https://*.infura.io/" ], + "unlimitedStorage": true, "web_accessible_resources": [ "scripts/inpage.js" ], -- cgit From 456dfdb9fdc0b7b0637d50808beb85ae33602f5b Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Tue, 23 Jan 2018 16:26:50 -0800 Subject: Modify @heyellieday's work to use storage.local to replace main storage --- app/scripts/background.js | 15 ++++++++------- app/scripts/lib/local-store.js | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 app/scripts/lib/local-store.js (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index d9a2b0a6e..9790129aa 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -4,7 +4,7 @@ const pump = require('pump') const log = require('loglevel') const extension = require('extensionizer') const LocalStorageStore = require('obs-store/lib/localStorage') -const ExtensionStore = require('./lib/extension-store') +const LocalStore = require('./lib/local-store') const storeTransform = require('obs-store/lib/transform') const asStream = require('obs-store/lib/asStream') const ExtensionPlatform = require('./platforms/extension') @@ -29,7 +29,7 @@ let popupIsOpen = false // state persistence const diskStore = new LocalStorageStore({ storageKey: STORAGE_KEY }) -const extensionStore = new ExtensionStore() +const localStore = new LocalStore() // initialization flow initialize().catch(log.error) @@ -51,9 +51,10 @@ async function loadStateFromPersistence () { let versionedData = diskStore.getState() || migrator.generateInitialState(firstTimeState) // fetch from extension store and merge in data - if (extensionStore.isSupported && extensionStore.isEnabled) { - const extensionData = await extensionStore.fetch() // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) - versionedData = { ...versionedData, ...extensionData } + if (localStore.isSupported) { + const localData = await localStore.get() + // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) + versionedData = localData || versionedData } // migrate data @@ -96,8 +97,8 @@ function setupController (initState) { } function syncDataWithExtension(state) { - if (extensionStore.isSupported && extensionStore.isEnabled) { - extensionStore.sync(state) // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) + if (localStore.isSupported) { + localStore.set(state) // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) } return state } diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js new file mode 100644 index 000000000..32faac96b --- /dev/null +++ b/app/scripts/lib/local-store.js @@ -0,0 +1,25 @@ +// We should not rely on local storage in an extension! +// We should use this instead! +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/local + +const extension = require('extensionizer') +const STORAGE_KEY = 'metamask-config' + +module.exports = class ExtensionStore { + constructor() { + this.isSupported = !!(extension.storage.local) + if (!this.isSupported) { + log.error('Storage local API not available.') + } + } + async get() { + return new Promise((resolve) => { + extension.storage.local.get(STORAGE_KEY, resolve) + }) + } + async set(state) { + return new Promise((resolve) => { + extension.storage.local.set(state, resolve) + }) + } +} -- cgit From 99898ac77594d8fe6d4d2aa5bc3e3ba6492f4a10 Mon Sep 17 00:00:00 2001 From: Nick Doiron Date: Tue, 23 Jan 2018 22:14:47 -1000 Subject: better organization of locale file; i18n in more view files --- app/_locales/en/messages.json | 631 +++++++++++++++++++++++++++++++++--------- 1 file changed, 506 insertions(+), 125 deletions(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 6967a44d2..54f266318 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -1,71 +1,224 @@ { - "appName": { - "message": "MetaMask", - "description": "The name of the application" + "accept": { + "message": "Accept" + }, + "account": { + "message": "Account:" + }, + "accDetails": { + "message": "Account Details" + }, + "accountName": { + "message": "Account Name" + }, + "address": { + "message": "Address" + }, + "addToken": { + "message": "Add Token" + }, + "amountPlusGas": { + "message": "Amount + Gas" }, "appDescription": { "message": "Ethereum Identity Management", "description": "The description of the application" }, - "encryptNewDen": { - "message": "Encrypt your new DEN" + "appName": { + "message": "MetaMask", + "description": "The name of the application" }, - "denExplainer": { - "message": "Your DEN is your password-encrypted storage within MetaMask." + "attemptingConnect": { + "message": "Attempting to connect to blockchain." }, - "importDen": { - "message": "Import Existing DEN" + "available": { + "message": "Available" }, - "createDen": { - "message": "Create" + "back": { + "message": "Back" }, - "newPassword": { - "message": "New Password (min 8 chars)" + "balance": { + "message": "Balance:" + }, + "balanceIsInsufficientGas": { + "message": "Insufficient balance for current gas total" + }, + "borrowDharma": { + "message": "Borrow With Dharma (Beta)" + }, + "buyButton": { + "message": "Buy" + }, + "buyCoinbase": { + "message": "Buy on Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase is the world’s most popular way to buy and sell bitcoin, ethereum, and litecoin." + }, + "cancel": { + "message": "Cancel" + }, + "cancelCaps": { + "message": "CANCEL" + }, + "clickCopy": { + "message": "Click to Copy" + }, + "confirm": { + "message": "Confirm" + }, + "confirmCaps": { + "message": "CONFIRM" + }, + "confirmContract": { + "message": "Confirm Contract" }, "confirmPassword": { "message": "Confirm Password" }, - "passwordMismatch": { - "message": "passwords don't match" + "confirmPasswordSmall": { + "message": "confirm password" }, - "passwordShort": { - "message": "password not long enough" + "continueToCoinbase": { + "message": "Continue to Coinbase" }, - "myAccounts": { - "message": "My Accounts" + "contractPublished": { + "message": "Contract Published" }, - "logout": { - "message": "Log out" + "conversionProgress": { + "message": "Conversion in progress" + }, + "copiedButton": { + "message": "Copied" + }, + "copiedClipboard": { + "message": "Copied to Clipboard" + }, + "copiedExclamation": { + "message": "Copied!" + }, + "copy": { + "message": "Copy" + }, + "copyAddress": { + "message": "Copy Address to clipboard" + }, + "copyButton": { + "message": " Copy " + }, + "copyPrivateKey": { + "message": "This is your private key (click to copy)" }, "createAccount": { "message": "Create Account" }, - "importAccount": { - "message": "Import Account" + "createCaps": { + "message": "CREATE" }, - "account": { - "message": "Account:" + "createDen": { + "message": "Create" }, - "infoHelp": { - "message": "Info & Help" + "customGas": { + "message": "Customize Gas" }, - "settings": { - "message": "Settings" + "customize": { + "message": "Customize" }, - "importedCaps": { - "message": "IMPORTED" + "customRPC": { + "message": "Custom RPC" }, - "saveButton": { - "message": "SAVE" + "defaultNetwork": { + "message": "The default network for Ether transactions is Main Net." }, - "cancelButton": { - "message": "CANCEL" + "denExplainer": { + "message": "Your DEN is your password-encrypted storage within MetaMask." }, - "signButton": { - "message": "SIGN" + "deposit": { + "message": "Deposit" }, - "revert": { - "message": "Revert" + "depositBTC": { + "message": "Deposit your BTC to the address below:" + }, + "depositButton": { + "message": "DEPOSIT" + }, + "depositEth": { + "message": "Deposit Eth" + }, + "depositEther": { + "message": "Deposit Ether" + }, + "depositFiat": { + "message": "Deposit with Fiat" + }, + "depositFromAccount": { + "message": "Deposit from another account" + }, + "depositShapeShift": { + "message": "Deposit with ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed." + }, + "detailsCaps": { + "message": "DETAILS" + }, + "directDeposit": { + "message": "Direct Deposit" + }, + "directDepositEther": { + "message": "Directly Deposit Ether" + }, + "directDepositEtherExplainer": { + "message": "If you already have some Ether, the quickest way to get Ether in your new wallet by direct deposit." + }, + "done": { + "message": "Done" + }, + "editAccountName": { + "message": "Edit Account Name" + }, + "editCaps": { + "message": "EDIT" + }, + "encryptNewDen": { + "message": "Encrypt your new DEN" + }, + "enterPassword": { + "message": "Enter password" + }, + "etherscanView": { + "message": "View account on Etherscan" + }, + "exchangeRate": { + "message": "Exchange Rate" + }, + "exportPrivateKey": { + "message": "Export Private Key" + }, + "exportPrivateKeyLower": { + "message": "Export private key" + }, + "exportPrivateKeyWarning": { + "message": "Export private keys at your own risk." + }, + "failed": { + "message": "Failed" + }, + "fileImportFail": { + "message": "File import not working? Click here!" + }, + "from": { + "message": "From" + }, + "fromShapeShift": { + "message": "From ShapeShift" + }, + "gasFee": { + "message": "Gas Fee" + }, + "gasFeeSpecific": { + "message": "Gas fee:" }, "gasLimit": { "message": "Gas Limit" @@ -73,103 +226,331 @@ "gasLimitCalculation": { "message": "We calculate the suggested gas limit based on network success rates." }, + "gasLimitRequired": { + "message": "Gas Limit Required" + }, + "gasLimitTooLow": { + "message": "Gas limit must be at least 21000" + }, "gasPrice": { "message": "Gas Price (GWEI)" }, "gasPriceCalculation": { "message": "We calculate the suggested gas prices based on network success rates." }, - "customGas": { - "message": "Customize Gas" + "gasPriceRequired": { + "message": "Gas Price Required" }, - "balanceIsInsufficientGas": { - "message": "Insufficient balance for current gas total" + "getEther": { + "message": "Get Ether" }, - "gasLimitTooLow": { - "message": "Gas limit must be at least 21000" + "here": { + "message": "here" + }, + "hideCaps": { + "message": "HIDE" + }, + "hideToken": { + "message": "Hide Token" + }, + "hideTokenPrompt": { + "message": "Hide Token?" + }, + "howToDeposit": { + "message": "How would you like to deposit Ether?" + }, + "import": { + "message": "Import" }, - "editButton": { - "message": "Edit" + "importAccount": { + "message": "Import Account" + }, + "importAnAccount": { + "message": "Import an account" + }, + "importCaps": { + "message": "IMPORT" + }, + "importDen": { + "message": "Import Existing DEN" + }, + "importedCaps": { + "message": "IMPORTED" + }, + "infoHelp": { + "message": "Info & Help" + }, + "invalidAddress": { + "message": "Invalid address" + }, + "invalidGasParams": { + "message": "Invalid Gas Parameters" + }, + "invalidInput": { + "message": "Invalid input." + }, + "invalidRequest": { + "message": "Invalid Request" + }, + "kovan": { + "message": "Kovan Test Network" + }, + "limit": { + "message": "Limit" + }, + "loading": { + "message": "Loading..." + }, + "loadingTokens": { + "message": "Loading Tokens..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "Log out" }, "looseCaps": { "message": "LOOSE" }, - "addToken": "Add Token", - "exportPrivateKey": "Export Private Key", - "copyAddress": "Copy Address to clipboard", - "etherscanView": "View account on Etherscan", - "qrCode": "Show QR Code", - "accDetails": "Account Details", - "networks": "Networks", - "defaultNetwork": "The default network for Ether transactions is Main Net.", - "mainnet": "Main Ethereum Network", - "unknownNetwork": "Unknown Private Network", - "rinkeby": "Rinkeby Test Network", - "kovan": "Kovan Test Network", - "ropsten": "Ropsten Test Network", - "localhost": "Localhost 8545", - "customRPC": "Custom RPC", - "hideToken": "Hide Token", - "copiedClipboard": "Copied to Clipboard", - "detailsCaps": "DETAILS", - "sendButton": "SEND", - "depositButton": "DEPOSIT", - "notStarted": "Not Started", - "noTransactions": "No Transactions", - "contractPublished": "Contract Published", - "noTransactionHistory": "No transaction history.", - "warning": "Warning", - "failed": "Failed", - "rejected": "Rejected", - "sigRequested": "Signature Requested", - "yourSigRequested": "Your signature is being requested", - "balance": "Balance:", - "retryWithMoreGas": "Retry with a higher gas price here", - "takesTooLong": "Taking too long?", - "transactionNumber": "Transaction Number", - "loadingTokens": "Loading Tokens...", - "troubleTokenBalances": "We had trouble loading your token balances. You can view them ", - "here": "here", - "message": "Message", - "signNotice": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. ", - "youSign": "You are signing:", - "conversionProgress": "Conversion in progress", - "noDeposits": "No deposits received", - "fromShapeShift": "From ShapeShift", - "invalidRequest": "Invalid Request", - "status": "Status", - "limit": "Limit", - "exchangeRate": "Exchange Rate", - "min": "Minimum", - "available": "Available", - "unavailable": "Unavailable", - "depositBTC": "Deposit your BTC to the address below:", - "deposit": "Deposit", - "receive": "Receive", - "refundAddress": "Your Refund Address", - "buyButton": "Buy", - "signMessage": "Sign Message", - "youSignCaps": "YOU ARE SIGNING", - "messageCaps": "MESSAGE", - "readMore": "Read more here.", - "cancel": "Cancel", - "sign": "Sign", - "accept": "Accept", - "attemptingConnect": "Attempting to connect to blockchain.", - "privateNetwork": "Private Network", - "invalidInput": "Invalid input.", - "noAddressForName": "No address has been set for this name.", - "clickCopy": "Click to Copy", - "copyButton": " Copy ", - "copiedButton": "Copied", - "copy": "Copy", - "copiedExclamation": "Copied!", - "continueToCoinbase": "Continue to Coinbase", - "depositEth": "Deposit Eth", - "selectService": "Select Service", - "unknownNetworkId": "Unknown network ID", - "borrowDharma": "Borrow With Dharma (Beta)", - "exportPrivateKeyWarning": "Export private keys at your own risk.", - "confirmPasswordSmall": "confirm password", - "submit": "Submit", + "mainnet": { + "message": "Main Ethereum Network" + }, + "message": { + "message": "Message" + }, + "messageCaps": { + "message": "MESSAGE" + }, + "min": { + "message": "Minimum" + }, + "myAccounts": { + "message": "My Accounts" + }, + "needEtherInWallet": { + "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." + }, + "needImportFile": { + "message": "You must select a file to import." + }, + "needImportPassword": { + "message": "You must enter a password for the selected file." + }, + "networks": { + "message": "Networks" + }, + "newAccount": { + "message": "New Account" + }, + "newContract": { + "message": "New Contract" + }, + "newPassword": { + "message": "New Password (min 8 chars)" + }, + "newRecipient": { + "message": "New Recipient" + }, + "next": { + "message": "Next" + }, + "noAddressForName": { + "message": "No address has been set for this name." + }, + "noDeposits": { + "message": "No deposits received" + }, + "noTransactionHistory": { + "message": "No transaction history." + }, + "noTransactions": { + "message": "No Transactions" + }, + "notStarted": { + "message": "Not Started" + }, + "oldUI": { + "message": "Old UI" + }, + "oldUIMessage": { + "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." + }, + "or": { + "message": "or" + }, + "passwordMismatch": { + "message": "passwords don't match" + }, + "passwordShort": { + "message": "password not long enough" + }, + "pastePrivateKey": { + "message": "Paste your private key string here:" + }, + "pasteSeed": { + "message": "Paste your seed phrase here!" + }, + "privateKeyWarning": { + "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." + }, + "privateNetwork": { + "message": "Private Network" + }, + "qrCode": { + "message": "Show QR Code" + }, + "readdToken": { + "message": "You can add this token back in the future by going go to “Add token” in your accounts options menu." + }, + "readMore": { + "message": "Read more here." + }, + "receive": { + "message": "Receive" + }, + "recipientAddress": { + "message": "Recipient Address" + }, + "refundAddress": { + "message": "Your Refund Address" + }, + "rejected": { + "message": "Rejected" + }, + "required": { + "message": "Required" + }, + "retryWithMoreGas": { + "message": "Retry with a higher gas price here" + }, + "revert": { + "message": "Revert" + }, + "rinkeby": { + "message": "Rinkeby Test Network" + }, + "ropsten": { + "message": "Ropsten Test Network" + }, + "sampleAccountName": { + "message": "E.g. My new account" + }, + "saveCaps": { + "message": "SAVE" + }, + "selectService": { + "message": "Select Service" + }, + "sendButton": { + "message": "SEND" + }, + "sendTokens": { + "message": "Send Tokens" + }, + "sendTokensAnywhere": { + "message": "Send Tokens to anyone with an Ethereum account" + }, + "settings": { + "message": "Settings" + }, + "shapeshiftBuy": { + "message": "Buy with Shapeshift" + }, + "showPrivateKeys": { + "message": "Show Private Keys" + }, + "sign": { + "message": "Sign" + }, + "signCaps": { + "message": "SIGN" + }, + "signMessage": { + "message": "Sign Message" + }, + "signNotice": { + "message": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. " + }, + "sigRequested": { + "message": "Signature Requested" + }, + "status": { + "message": "Status" + }, + "submit": { + "message": "Submit" + }, + "takesTooLong": { + "message": "Taking too long?" + }, + "testFaucet": { + "message": "Test Faucet" + }, + "to": { + "message": "To" + }, + "tokenBalance": { + "message": "Your Token Balance is:" + }, + "toSpecific": { + "message": "To:" + }, + "total": { + "message": "Total" + }, + "transactionMemo": { + "message": "Transaction memo (optional)" + }, + "transactionNumber": { + "message": "Transaction Number" + }, + "transfers": { + "message": "Transfers" + }, + "troubleTokenBalances": { + "message": "We had trouble loading your token balances. You can view them " + }, + "typePassword": { + "message": "Type Your Password" + }, + "uiWelcome": { + "message": "Welcome to the New UI (Beta)" + }, + "uiWelcomeMessage": { + "message": "You are now using the new Metamask UI. Take a look around, try out new features like sending tokens, and let us know if you have any issues." + }, + "unavailable": { + "message": "Unavailable" + }, + "unknown": { + "message": "Unknown" + }, + "unknownNetwork": { + "message": "Unknown Private Network" + }, + "unknownNetworkId": { + "message": "Unknown network ID" + }, + "usedByClients": { + "message": "Used by a variety of different clients" + }, + "viewAccount": { + "message": "View Account" + }, + "warning": { + "message": "Warning" + }, + "whatsThis": { + "message": "What's this?" + }, + "yourSigRequested": { + "message": "Your signature is being requested" + }, + "youSign": { + "message": "You are signing:" + }, + "youSignCaps": { + "message": "YOU ARE SIGNING" + } } -- cgit From 0164030e56b1db8117a1a0bdff91987321b2cd1a Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 24 Jan 2018 09:41:32 -0330 Subject: Handle errors when getting and setting to localStore. --- app/scripts/background.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 280c28d70..88600bf1e 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -57,7 +57,13 @@ async function loadStateFromPersistence () { // fetch from extension store and merge in data if (localStore.isSupported) { - const localData = await localStore.get() + let localData + try { + localData = await localStore.get() + } catch (err) { + log.error('error fetching state from local store:', err) + } + // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) versionedData = Object.keys(localData).length > 0 ? localData : versionedData } @@ -113,7 +119,11 @@ function setupController (initState) { function syncDataWithExtension(state) { if (localStore.isSupported) { - localStore.set(state) // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) + try { + localStore.set(state) + } catch (err) { + log.error('error setting state in local store:', err) + } } return state } -- cgit From b7ae77f57a0e2bc68e9548364baa120805a1420c Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 24 Jan 2018 09:43:20 -0330 Subject: Check that extension.storage exists before attempting to call methods on it. --- app/scripts/lib/extension-store.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/extension-store.js b/app/scripts/lib/extension-store.js index 67ee71f16..4a970321c 100644 --- a/app/scripts/lib/extension-store.js +++ b/app/scripts/lib/extension-store.js @@ -15,12 +15,12 @@ const handleDisabledSyncAndResolve = (resolve, toResolve) => { module.exports = class ExtensionStore { constructor() { - this.isSupported = !!(extension.storage.sync) + this.isSupported = !!(extension.storage && extension.storage.sync) this.isEnabled = true // TODO: get value from user settings } async fetch() { return new Promise((resolve) => { - extension.storage.sync.get(KEYS_TO_SYNC, (data) => { + extension.storage && extension.storage.sync.get(KEYS_TO_SYNC, (data) => { handleDisabledSyncAndResolve(resolve, data) }) }) @@ -31,7 +31,7 @@ module.exports = class ExtensionStore { return result }, {}) return new Promise((resolve) => { - extension.storage.sync.set(dataToSync, () => { + extension.storage && extension.storage.sync.set(dataToSync, () => { handleDisabledSyncAndResolve(resolve) }) }) -- cgit From dd80bd48babc1bfebf91ac2350491b06971b1fc1 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 24 Jan 2018 11:36:15 -0800 Subject: Corrected unlimitedStorage permission --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index 13ba074e7..114586d0f 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -56,11 +56,11 @@ ], "permissions": [ "storage", + "unlimitedStorage", "clipboardWrite", "http://localhost:8545/", "https://*.infura.io/" ], - "unlimitedStorage": true, "web_accessible_resources": [ "scripts/inpage.js" ], -- cgit From f09d72fa2aa88f0def76d228cb7d8eab29e3b092 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 24 Jan 2018 11:36:42 -0800 Subject: Remove extension-store since we aren't using it yet --- app/scripts/lib/extension-store.js | 39 -------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 app/scripts/lib/extension-store.js (limited to 'app') diff --git a/app/scripts/lib/extension-store.js b/app/scripts/lib/extension-store.js deleted file mode 100644 index 4a970321c..000000000 --- a/app/scripts/lib/extension-store.js +++ /dev/null @@ -1,39 +0,0 @@ -const extension = require('extensionizer') - -const KEYS_TO_SYNC = ['KeyringController', 'PreferencesController'] -const FIREFOX_SYNC_DISABLED_MESSAGE = 'Please set webextensions.storage.sync.enabled to true in about:config' - -const handleDisabledSyncAndResolve = (resolve, toResolve) => { - // Firefox 52 has sync available on extension.storage, but it is disabled by default - const lastError = extension.runtime.lastError - if (lastError && lastError.message.includes(FIREFOX_SYNC_DISABLED_MESSAGE)) { - resolve({}) - } else { - resolve(toResolve) - } -} - -module.exports = class ExtensionStore { - constructor() { - this.isSupported = !!(extension.storage && extension.storage.sync) - this.isEnabled = true // TODO: get value from user settings - } - async fetch() { - return new Promise((resolve) => { - extension.storage && extension.storage.sync.get(KEYS_TO_SYNC, (data) => { - handleDisabledSyncAndResolve(resolve, data) - }) - }) - } - async sync(state) { - const dataToSync = KEYS_TO_SYNC.reduce((result, key) => { - result[key] = state.data[key] - return result - }, {}) - return new Promise((resolve) => { - extension.storage && extension.storage.sync.set(dataToSync, () => { - handleDisabledSyncAndResolve(resolve) - }) - }) - } -} -- cgit From b281a5275983c4e2d924ba696c4885fd779d2c44 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 24 Jan 2018 16:49:12 -0330 Subject: Remove already handled TODO comment. --- app/scripts/background.js | 1 - 1 file changed, 1 deletion(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 88600bf1e..3e04a31b3 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -64,7 +64,6 @@ async function loadStateFromPersistence () { log.error('error fetching state from local store:', err) } - // TODO: handle possible exceptions (https://developer.chrome.com/apps/runtime#property-lastError) versionedData = Object.keys(localData).length > 0 ? localData : versionedData } -- cgit From cd5eaa4393a122247295c7627a3fad3e678bea30 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 24 Jan 2018 13:05:13 -0800 Subject: Remove redundant async modifiers --- app/scripts/lib/local-store.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 32faac96b..9114364b6 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -12,12 +12,12 @@ module.exports = class ExtensionStore { log.error('Storage local API not available.') } } - async get() { + get() { return new Promise((resolve) => { extension.storage.local.get(STORAGE_KEY, resolve) }) } - async set(state) { + set(state) { return new Promise((resolve) => { extension.storage.local.set(state, resolve) }) -- cgit From 76521cf7399c1e694a7202dcb9725ed5e1e2a0d7 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 24 Jan 2018 15:03:16 -0800 Subject: Fix retrieval of object --- app/scripts/lib/local-store.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 9114364b6..9e8d8db37 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -3,7 +3,6 @@ // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/local const extension = require('extensionizer') -const STORAGE_KEY = 'metamask-config' module.exports = class ExtensionStore { constructor() { @@ -14,7 +13,7 @@ module.exports = class ExtensionStore { } get() { return new Promise((resolve) => { - extension.storage.local.get(STORAGE_KEY, resolve) + extension.storage.local.get(null, resolve) }) } set(state) { -- cgit From 2f13790653cb20d9d967700133df6cf31ff02d14 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 24 Jan 2018 15:28:15 -0800 Subject: Remove local storage writes, add log --- app/scripts/background.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 3e04a31b3..a77763c41 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -35,6 +35,7 @@ let popupIsOpen = false // state persistence const diskStore = new LocalStorageStore({ storageKey: STORAGE_KEY }) const localStore = new LocalStore() +let versionedData // initialization flow initialize().catch(log.error) @@ -53,7 +54,7 @@ async function loadStateFromPersistence () { // migrations const migrator = new Migrator({ migrations }) // read from disk - let versionedData = diskStore.getState() || migrator.generateInitialState(firstTimeState) + versionedData = diskStore.getState() || migrator.generateInitialState(firstTimeState) // fetch from extension store and merge in data if (localStore.isSupported) { @@ -64,13 +65,24 @@ async function loadStateFromPersistence () { log.error('error fetching state from local store:', err) } - versionedData = Object.keys(localData).length > 0 ? localData : versionedData + console.log('Comparing localdata and versionedData') + console.dir({ localData }) + + if (Object.keys(localData).length > 0) { + console.log('using the local store data') + versionedData = localData + } } // migrate data versionedData = await migrator.migrateData(versionedData) + // write to disk - diskStore.putState(versionedData) + localStore.set(versionedData) + .catch((reason) => { + log.error('Problem saving migrated data', versionedData) + }) + // return just the data return versionedData.data } @@ -107,11 +119,9 @@ function setupController (initState) { asStream(controller.store), storeTransform(versionifyData), storeTransform(syncDataWithExtension), - asStream(diskStore) ) function versionifyData (state) { - const versionedData = diskStore.getState() versionedData.data = state return versionedData } @@ -119,6 +129,7 @@ function setupController (initState) { function syncDataWithExtension(state) { if (localStore.isSupported) { try { + console.log('persisting state', state) localStore.set(state) } catch (err) { log.error('error setting state in local store:', err) -- cgit From ceebc6caa4f3eab1cf6c9ec8f47dc8bd450ca4a9 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Thu, 25 Jan 2018 13:01:03 -0800 Subject: Debounce storage to avoid crashing pump --- app/scripts/background.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index a77763c41..2a8efd844 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -1,6 +1,7 @@ const urlUtil = require('url') const endOfStream = require('end-of-stream') const pump = require('pump') +const debounce = require('debounce-stream') const log = require('loglevel') const extension = require('extensionizer') const LocalStorageStore = require('obs-store/lib/localStorage') @@ -65,11 +66,7 @@ async function loadStateFromPersistence () { log.error('error fetching state from local store:', err) } - console.log('Comparing localdata and versionedData') - console.dir({ localData }) - if (Object.keys(localData).length > 0) { - console.log('using the local store data') versionedData = localData } } @@ -117,8 +114,12 @@ function setupController (initState) { // setup state persistence pump( asStream(controller.store), + debounce(200), storeTransform(versionifyData), storeTransform(syncDataWithExtension), + (error) => { + log.error('pump hit error', error) + } ) function versionifyData (state) { @@ -126,15 +127,14 @@ function setupController (initState) { return versionedData } - function syncDataWithExtension(state) { + async function syncDataWithExtension(state) { if (localStore.isSupported) { try { - console.log('persisting state', state) - localStore.set(state) + await localStore.set(state) } catch (err) { log.error('error setting state in local store:', err) } - } + } else { log.error('local store not supported') } return state } -- cgit From 8ba64c657ff801425c06db166e2c9a06289047de Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Thu, 25 Jan 2018 15:38:43 -0800 Subject: Increase storage debounce value --- app/scripts/background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 2a8efd844..07a260a4f 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -114,7 +114,7 @@ function setupController (initState) { // setup state persistence pump( asStream(controller.store), - debounce(200), + debounce(1000), storeTransform(versionifyData), storeTransform(syncDataWithExtension), (error) => { -- cgit From abfa74f09a0119345165a32090d88a1d95df6c80 Mon Sep 17 00:00:00 2001 From: Nick Doiron Date: Mon, 29 Jan 2018 15:29:01 -0500 Subject: complete i18n across new UI --- app/_locales/en/messages.json | 168 +++++++++++++++++++++++++----------------- app/manifest.json | 6 +- 2 files changed, 105 insertions(+), 69 deletions(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 54f266318..a0c9088cb 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -3,9 +3,9 @@ "message": "Accept" }, "account": { - "message": "Account:" + "message": "Account" }, - "accDetails": { + "accountDetails": { "message": "Account Details" }, "accountName": { @@ -17,11 +17,14 @@ "addToken": { "message": "Add Token" }, + "amount": { + "message": "Amount" + }, "amountPlusGas": { "message": "Amount + Gas" }, "appDescription": { - "message": "Ethereum Identity Management", + "message": "Ethereum Browser Extension", "description": "The description of the application" }, "appName": { @@ -43,10 +46,14 @@ "balanceIsInsufficientGas": { "message": "Insufficient balance for current gas total" }, + "betweenMinAndMax": { + "message": "must be greater than or equal to $1 and less than or equal to $2.", + "description": "helper for inputting hex as decimal input" + }, "borrowDharma": { "message": "Borrow With Dharma (Beta)" }, - "buyButton": { + "buy": { "message": "Buy" }, "buyCoinbase": { @@ -58,26 +65,20 @@ "cancel": { "message": "Cancel" }, - "cancelCaps": { - "message": "CANCEL" - }, "clickCopy": { "message": "Click to Copy" }, "confirm": { "message": "Confirm" }, - "confirmCaps": { - "message": "CONFIRM" - }, "confirmContract": { "message": "Confirm Contract" }, "confirmPassword": { "message": "Confirm Password" }, - "confirmPasswordSmall": { - "message": "confirm password" + "confirmTransaction": { + "message": "Confirm Transaction" }, "continueToCoinbase": { "message": "Continue to Coinbase" @@ -109,15 +110,19 @@ "copyPrivateKey": { "message": "This is your private key (click to copy)" }, + "create": { + "message": "Create" + }, "createAccount": { "message": "Create Account" }, - "createCaps": { - "message": "CREATE" - }, "createDen": { "message": "Create" }, + "crypto": { + "message": "Crypto", + "description": "Exchange type (cryptocurrencies)" + }, "customGas": { "message": "Customize Gas" }, @@ -139,9 +144,6 @@ "depositBTC": { "message": "Deposit your BTC to the address below:" }, - "depositButton": { - "message": "DEPOSIT" - }, "depositEth": { "message": "Deposit Eth" }, @@ -160,8 +162,8 @@ "depositShapeShiftExplainer": { "message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed." }, - "detailsCaps": { - "message": "DETAILS" + "details": { + "message": "Details" }, "directDeposit": { "message": "Direct Deposit" @@ -175,12 +177,12 @@ "done": { "message": "Done" }, + "edit": { + "message": "Edit" + }, "editAccountName": { "message": "Edit Account Name" }, - "editCaps": { - "message": "EDIT" - }, "encryptNewDen": { "message": "Encrypt your new DEN" }, @@ -196,17 +198,19 @@ "exportPrivateKey": { "message": "Export Private Key" }, - "exportPrivateKeyLower": { - "message": "Export private key" - }, "exportPrivateKeyWarning": { "message": "Export private keys at your own risk." }, "failed": { "message": "Failed" }, + "fiat": { + "message": "FIAT", + "description": "Exchange type" + }, "fileImportFail": { - "message": "File import not working? Click here!" + "message": "File import not working? Click here!", + "description": "Helps user import their account from a JSON file" }, "from": { "message": "From" @@ -214,12 +218,13 @@ "fromShapeShift": { "message": "From ShapeShift" }, + "gas": { + "message": "Gas", + "description": "Short indication of gas cost" + }, "gasFee": { "message": "Gas Fee" }, - "gasFeeSpecific": { - "message": "Gas fee:" - }, "gasLimit": { "message": "Gas Limit" }, @@ -244,11 +249,20 @@ "getEther": { "message": "Get Ether" }, + "getEtherFromFaucet": { + "message": "Get Ether from a faucet for the $1", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": "must be greater than or equal to $1.", + "description": "helper for inputting hex as decimal input" + }, "here": { - "message": "here" + "message": "here", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" }, - "hideCaps": { - "message": "HIDE" + "hide": { + "message": "Hide" }, "hideToken": { "message": "Hide Token" @@ -260,7 +274,8 @@ "message": "How would you like to deposit Ether?" }, "import": { - "message": "Import" + "message": "Import", + "description": "Button to import an account from a selected file" }, "importAccount": { "message": "Import Account" @@ -268,14 +283,12 @@ "importAnAccount": { "message": "Import an account" }, - "importCaps": { - "message": "IMPORT" - }, "importDen": { "message": "Import Existing DEN" }, - "importedCaps": { - "message": "IMPORTED" + "imported": { + "message": "Imported", + "description": "status showing that an account has been fully loaded into the keyring" }, "infoHelp": { "message": "Info & Help" @@ -292,9 +305,17 @@ "invalidRequest": { "message": "Invalid Request" }, + "jsonFile": { + "message": "JSON File", + "description": "format for importing an account" + }, "kovan": { "message": "Kovan Test Network" }, + "lessThanMax": { + "message": "must be less than or equal to $1.", + "description": "helper for inputting hex as decimal input" + }, "limit": { "message": "Limit" }, @@ -310,8 +331,8 @@ "logout": { "message": "Log out" }, - "looseCaps": { - "message": "LOOSE" + "loose": { + "message": "Loose" }, "mainnet": { "message": "Main Ethereum Network" @@ -319,9 +340,6 @@ "message": { "message": "Message" }, - "messageCaps": { - "message": "MESSAGE" - }, "min": { "message": "Minimum" }, @@ -332,10 +350,12 @@ "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." }, "needImportFile": { - "message": "You must select a file to import." + "message": "You must select a file to import.", + "description": "User is important an account and needs to add a file to continue" }, "needImportPassword": { - "message": "You must enter a password for the selected file." + "message": "You must enter a password for the selected file.", + "description": "Password and file needed to import an account" }, "networks": { "message": "Networks" @@ -377,20 +397,28 @@ "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." }, "or": { - "message": "or" + "message": "or", + "description": "choice between creating or importing a new account" }, "passwordMismatch": { - "message": "passwords don't match" + "message": "passwords don't match", + "description": "in password creation process, the two new password fields did not match" }, "passwordShort": { - "message": "password not long enough" + "message": "password not long enough", + "description": "in password creation process, the password is not long enough to be secure" }, "pastePrivateKey": { - "message": "Paste your private key string here:" + "message": "Paste your private key string here:", + "description": "For importing an account from a private key" }, "pasteSeed": { "message": "Paste your seed phrase here!" }, + "privateKey": { + "message": "Private Key", + "description": "select this type of file to use to import an account" + }, "privateKeyWarning": { "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." }, @@ -434,16 +462,21 @@ "message": "Ropsten Test Network" }, "sampleAccountName": { - "message": "E.g. My new account" + "message": "E.g. My new account", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "Save" }, - "saveCaps": { - "message": "SAVE" + "saveAsFile": { + "message": "Save as File", + "description": "Account export process" }, "selectService": { "message": "Select Service" }, - "sendButton": { - "message": "SEND" + "send": { + "message": "Send" }, "sendTokens": { "message": "Send Tokens" @@ -460,12 +493,12 @@ "showPrivateKeys": { "message": "Show Private Keys" }, + "showQRCode": { + "message": "Show QR Code" + }, "sign": { "message": "Sign" }, - "signCaps": { - "message": "SIGN" - }, "signMessage": { "message": "Sign Message" }, @@ -490,12 +523,13 @@ "to": { "message": "To" }, + "toETHviaShapeShift": { + "message": "$1 to ETH via ShapeShift", + "description": "system will fill in deposit type in start of message" + }, "tokenBalance": { "message": "Your Token Balance is:" }, - "toSpecific": { - "message": "To:" - }, "total": { "message": "Total" }, @@ -509,7 +543,8 @@ "message": "Transfers" }, "troubleTokenBalances": { - "message": "We had trouble loading your token balances. You can view them " + "message": "We had trouble loading your token balances. You can view them ", + "description": "Followed by a link (here) to view token balances" }, "typePassword": { "message": "Type Your Password" @@ -532,6 +567,10 @@ "unknownNetworkId": { "message": "Unknown network ID" }, + "usaOnly": { + "message": "USA only", + "description": "Using this exchange is limited to people inside the USA" + }, "usedByClients": { "message": "Used by a variety of different clients" }, @@ -548,9 +587,6 @@ "message": "Your signature is being requested" }, "youSign": { - "message": "You are signing:" - }, - "youSignCaps": { - "message": "YOU ARE SIGNING" + "message": "You are signing" } } diff --git a/app/manifest.json b/app/manifest.json index d906382e9..b52d3245d 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,10 +1,10 @@ { - "name": "MetaMask", - "short_name": "Metamask", + "name": "__MSG_appName__", + "short_name": "__MSG_appName__", "version": "4.0.10", "manifest_version": 2, "author": "https://metamask.io", - "description": "Ethereum Browser Extension", + "description": "__MSG_appDescription__", "commands": { "_execute_browser_action": { "suggested_key": { -- cgit From 94cd5b9df480a0c2e2897495c9edddd13461f23a Mon Sep 17 00:00:00 2001 From: kumavis Date: Sat, 10 Feb 2018 19:33:33 +0000 Subject: metamask mesh - inject mesh testing container --- app/scripts/background.js | 4 ++++ app/scripts/lib/setupMetamaskMeshMetrics.js | 9 +++++++++ 2 files changed, 13 insertions(+) create mode 100644 app/scripts/lib/setupMetamaskMeshMetrics.js (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 0471cee3b..6bf7707e8 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -14,6 +14,7 @@ const NotificationManager = require('./lib/notification-manager.js') const MetamaskController = require('./metamask-controller') const firstTimeState = require('./first-time-state') const setupRaven = require('./setupRaven') +const setupMetamaskMeshMetrics = require('./lib/setupMetamaskMeshMetrics') const STORAGE_KEY = 'metamask-config' const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' @@ -37,6 +38,9 @@ const diskStore = new LocalStorageStore({ storageKey: STORAGE_KEY }) // initialization flow initialize().catch(log.error) +// setup metamask mesh testing container +setupMetamaskMeshMetrics() + async function initialize () { const initState = await loadStateFromPersistence() await setupController(initState) diff --git a/app/scripts/lib/setupMetamaskMeshMetrics.js b/app/scripts/lib/setupMetamaskMeshMetrics.js new file mode 100644 index 000000000..40343f017 --- /dev/null +++ b/app/scripts/lib/setupMetamaskMeshMetrics.js @@ -0,0 +1,9 @@ + +module.exports = setupMetamaskMeshMetrics + +function setupMetamaskMeshMetrics() { + const testingContainer = document.createElement('iframe') + testingContainer.src = 'https://metamask.github.io/mesh-testing/' + console.log('Injecting MetaMask Mesh testing client') + document.head.appendChild(testingContainer) +} -- cgit From 58a554b1684fd78775b449b8f2b5d9635d30b69b Mon Sep 17 00:00:00 2001 From: Lazaridis Date: Sun, 11 Feb 2018 05:09:27 +0200 Subject: use the providers initial _blocktracker. fixes #2393 --- app/scripts/metamask-controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 63815ab65..428c78e2c 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -444,7 +444,7 @@ module.exports = class MetamaskController extends EventEmitter { // create filter polyfill middleware const filterMiddleware = createFilterMiddleware({ provider: this.provider, - blockTracker: this.blockTracker, + blockTracker: this.provider._blockTracker, }) engine.push(createOriginMiddleware({ origin })) -- cgit From dc3f3e79ca7319b97255456a5225a266d38a4d6f Mon Sep 17 00:00:00 2001 From: frankiebee Date: Wed, 14 Feb 2018 14:37:02 -0800 Subject: fix - hex prefix estimatedGas on txMeta --- app/scripts/lib/tx-gas-utils.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/tx-gas-utils.js b/app/scripts/lib/tx-gas-utils.js index f68f3a9e2..6f6ff7852 100644 --- a/app/scripts/lib/tx-gas-utils.js +++ b/app/scripts/lib/tx-gas-utils.js @@ -4,6 +4,7 @@ const { BnMultiplyByFraction, bnToHex, } = require('./util') +const addHexPrefix = require('ethereumjs-util').addHexPrefix const SIMPLE_GAS_COST = '0x5208' // Hex for 21000, cost of a simple send. /* @@ -13,7 +14,7 @@ and used to do things like calculate gas of a tx. */ module.exports = class TxGasUtil { - + constructor (provider) { this.query = new EthQuery(provider) } @@ -68,7 +69,7 @@ module.exports = class TxGasUtil { } setTxGas (txMeta, blockGasLimitHex, estimatedGasHex) { - txMeta.estimatedGas = estimatedGasHex + txMeta.estimatedGas = addHexPrefix(estimatedGasHex) const txParams = txMeta.txParams // if gasLimit was specified and doesnt OOG, -- cgit From ed33f3160a35e2e765012a4726ff90f9b3608998 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Thu, 15 Feb 2018 12:36:26 -0800 Subject: Make oldui compatible with newUI style changes --- app/popup.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/popup.html b/app/popup.html index c4e5188e5..bf09b97ca 100644 --- a/app/popup.html +++ b/app/popup.html @@ -1,11 +1,11 @@ - + MetaMask Plugin - +
-- cgit From 71be537f1cdfe7df41e350f6720c12f5a7bb9b2d Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Thu, 15 Feb 2018 14:23:22 -0800 Subject: Version 3.14.2 --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index a0bb5acf6..3a80cc4fc 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "3.14.1", + "version": "3.14.2", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", -- cgit From 73e5ae6e29d04481cc3ffdd32d5d096e6a10b3b3 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Thu, 15 Feb 2018 15:32:48 -0800 Subject: Fix incorrect promise instantiation --- app/scripts/lib/nonce-tracker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/nonce-tracker.js b/app/scripts/lib/nonce-tracker.js index 0029ac953..ed9dd3f11 100644 --- a/app/scripts/lib/nonce-tracker.js +++ b/app/scripts/lib/nonce-tracker.js @@ -56,7 +56,7 @@ class NonceTracker { const blockTracker = this._getBlockTracker() const currentBlock = blockTracker.getCurrentBlock() if (currentBlock) return currentBlock - return await Promise((reject, resolve) => { + return await new Promise((reject, resolve) => { blockTracker.once('latest', resolve) }) } -- cgit From 06838774fa0bfb0ddea4db049211f92781841ff5 Mon Sep 17 00:00:00 2001 From: kumavis Date: Fri, 16 Feb 2018 10:21:06 -0800 Subject: sentry - report failed tx with more specific message --- app/scripts/background.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 6bf7707e8..3e1178457 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -85,7 +85,8 @@ function setupController (initState) { controller.txController.on(`tx:status-update`, (txId, status) => { if (status !== 'failed') return const txMeta = controller.txController.txStateManager.getTx(txId) - raven.captureMessage('Transaction Failed', { + const errorMessage = `Transaction Failed: ${txMeta.err.message}` + raven.captureMessage(errorMessage, { // "extra" key is required by Sentry extra: txMeta, }) -- cgit From 7169cb1eb83ae9a378dad3240527989e6df0f158 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 16 Feb 2018 19:36:17 -0330 Subject: Bump uat version to 4.0.12 --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index a0bb5acf6..c4e134053 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "3.14.1", + "version": "4.0.12", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", -- cgit From 98d3fba3efaedb65ee0cf60b4cc3f954a1fd9740 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Tue, 20 Feb 2018 15:45:48 -0800 Subject: Fix promise construction --- app/scripts/lib/nonce-tracker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/nonce-tracker.js b/app/scripts/lib/nonce-tracker.js index 0029ac953..ed9dd3f11 100644 --- a/app/scripts/lib/nonce-tracker.js +++ b/app/scripts/lib/nonce-tracker.js @@ -56,7 +56,7 @@ class NonceTracker { const blockTracker = this._getBlockTracker() const currentBlock = blockTracker.getCurrentBlock() if (currentBlock) return currentBlock - return await Promise((reject, resolve) => { + return await new Promise((reject, resolve) => { blockTracker.once('latest', resolve) }) } -- cgit From a4ed6af2ad9469a29e100f9246e8960b078cff46 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 21 Feb 2018 14:54:00 -0330 Subject: Prevents new transaction from generating popup when metamask is open in an active tab. --- app/scripts/background.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 0471cee3b..816c655a1 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -30,6 +30,7 @@ const release = platform.getVersion() const raven = setupRaven({ release }) let popupIsOpen = false +let openMetamaskTabsIDs = {} // state persistence const diskStore = new LocalStorageStore({ storageKey: STORAGE_KEY }) @@ -113,9 +114,15 @@ function setupController (initState) { popupIsOpen = popupIsOpen || (remotePort.name === 'popup') controller.setupTrustedCommunication(portStream, 'MetaMask') // record popup as closed + if (remotePort.sender.url.match(/home.html$/)) { + openMetamaskTabsIDs[remotePort.sender.tab.id] = true + } if (remotePort.name === 'popup') { endOfStream(portStream, () => { popupIsOpen = false + if (remotePort.sender.url.match(/home.html$/)) { + openMetamaskTabsIDs[remotePort.sender.tab.id] = false + } }) } } else { @@ -158,7 +165,10 @@ function setupController (initState) { // popup trigger function triggerUi () { - if (!popupIsOpen) notificationManager.showPopup() + extension.tabs.query({ active: true }, (tabs) => { + const currentlyActiveMetamaskTab = tabs.find(tab => openMetamaskTabsIDs[tab.id]) + if (!popupIsOpen && !currentlyActiveMetamaskTab) notificationManager.showPopup() + }) } // On first install, open a window to MetaMask website to how-it-works. -- cgit From 5ec311ba3e01bd9b0a9ff447fd7639d22a7b3d9c Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Thu, 22 Feb 2018 14:39:32 +0100 Subject: add edge support --- app/scripts/background.js | 8 +++++ app/scripts/edge-encryptor.js | 69 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 app/scripts/edge-encryptor.js (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 6bf7707e8..7bececba1 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -15,6 +15,7 @@ const MetamaskController = require('./metamask-controller') const firstTimeState = require('./first-time-state') const setupRaven = require('./setupRaven') const setupMetamaskMeshMetrics = require('./lib/setupMetamaskMeshMetrics') +const EdgeEncryptor = require('./edge-encryptor') const STORAGE_KEY = 'metamask-config' const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' @@ -30,6 +31,12 @@ global.METAMASK_NOTIFIER = notificationManager const release = platform.getVersion() const raven = setupRaven({ release }) +// browser check if it is Edge - https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser +// Internet Explorer 6-11 +const isIE = !!document.documentMode +// Edge 20+ +const isEdge = !isIE && !!window.StyleMedia + let popupIsOpen = false // state persistence @@ -78,6 +85,7 @@ function setupController (initState) { initState, // platform specific api platform, + encryptor: isEdge ? new EdgeEncryptor() : undefined, }) global.metamaskController = controller diff --git a/app/scripts/edge-encryptor.js b/app/scripts/edge-encryptor.js new file mode 100644 index 000000000..9d6ac37b3 --- /dev/null +++ b/app/scripts/edge-encryptor.js @@ -0,0 +1,69 @@ +const asmcrypto = require('asmcrypto.js') +const Unibabel = require('browserify-unibabel') + +class EdgeEncryptor { + + encrypt (password, dataObject) { + + var salt = this._generateSalt() + return this.keyFromPassword(password, salt) + .then(function (key) { + + var data = JSON.stringify(dataObject) + var dataBuffer = Unibabel.utf8ToBuffer(data) + var vector = global.crypto.getRandomValues(new Uint8Array(16)) + var resultbuffer = asmcrypto.AES_GCM.encrypt(dataBuffer, key, vector) + + var buffer = new Uint8Array(resultbuffer) + var vectorStr = Unibabel.bufferToBase64(vector) + var vaultStr = Unibabel.bufferToBase64(buffer) + return JSON.stringify({ + data: vaultStr, + iv: vectorStr, + salt: salt, + }) + }) + } + + decrypt (password, text) { + + const payload = JSON.parse(text) + const salt = payload.salt + return this.keyFromPassword(password, salt) + .then(function (key) { + const encryptedData = Unibabel.base64ToBuffer(payload.data) + const vector = Unibabel.base64ToBuffer(payload.iv) + return new Promise((resolve, reject) => { + var result + try { + result = asmcrypto.AES_GCM.decrypt(encryptedData, key, vector) + } catch (err) { + return reject(new Error('Incorrect password')) + } + const decryptedData = new Uint8Array(result) + const decryptedStr = Unibabel.bufferToUtf8(decryptedData) + const decryptedObj = JSON.parse(decryptedStr) + resolve(decryptedObj) + }) + }) + } + + keyFromPassword (password, salt) { + + var passBuffer = Unibabel.utf8ToBuffer(password) + var saltBuffer = Unibabel.base64ToBuffer(salt) + return new Promise((resolve) => { + var key = asmcrypto.PBKDF2_HMAC_SHA256.bytes(passBuffer, saltBuffer, 10000) + resolve(key) + }) + } + + _generateSalt (byteCount = 32) { + var view = new Uint8Array(byteCount) + global.crypto.getRandomValues(view) + var b64encoded = btoa(String.fromCharCode.apply(null, view)) + return b64encoded + } +} + +module.exports = EdgeEncryptor -- cgit From b45295499e0df87c20e1411b43d6e6ba88e9aeed Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 22 Feb 2018 14:57:24 -0800 Subject: Version 4.0.0 --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index c4e134053..2abe673db 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "4.0.12", + "version": "4.0.0", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", -- cgit From 73d9bfc52cfb4b63f0960d80a7b68f2bf6f7d88c Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Fri, 23 Feb 2018 10:09:16 +0100 Subject: make keyFromPassword private --- app/scripts/edge-encryptor.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/edge-encryptor.js b/app/scripts/edge-encryptor.js index 9d6ac37b3..24c0c93a8 100644 --- a/app/scripts/edge-encryptor.js +++ b/app/scripts/edge-encryptor.js @@ -6,7 +6,7 @@ class EdgeEncryptor { encrypt (password, dataObject) { var salt = this._generateSalt() - return this.keyFromPassword(password, salt) + return this._keyFromPassword(password, salt) .then(function (key) { var data = JSON.stringify(dataObject) @@ -29,7 +29,7 @@ class EdgeEncryptor { const payload = JSON.parse(text) const salt = payload.salt - return this.keyFromPassword(password, salt) + return this._keyFromPassword(password, salt) .then(function (key) { const encryptedData = Unibabel.base64ToBuffer(payload.data) const vector = Unibabel.base64ToBuffer(payload.iv) @@ -48,7 +48,7 @@ class EdgeEncryptor { }) } - keyFromPassword (password, salt) { + _keyFromPassword (password, salt) { var passBuffer = Unibabel.utf8ToBuffer(password) var saltBuffer = Unibabel.base64ToBuffer(salt) -- cgit From d9486a3ce535636f890bee76a635571f2be0ec7c Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 27 Feb 2018 10:35:43 -0800 Subject: Bump Version --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index 2abe673db..eab6c7063 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "4.0.0", + "version": "4.1.0", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", -- cgit From fca2cbc8ef8e0d8434fd8c437497a7a0792e2caf Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 28 Feb 2018 10:37:53 -0800 Subject: sentry - clean - move setupRaven to lib --- app/scripts/background.js | 2 +- app/scripts/lib/setupRaven.js | 26 ++++++++++++++++++++++++++ app/scripts/popup.js | 2 +- app/scripts/setupRaven.js | 26 -------------------------- 4 files changed, 28 insertions(+), 28 deletions(-) create mode 100644 app/scripts/lib/setupRaven.js delete mode 100644 app/scripts/setupRaven.js (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 476d073d1..0da079eb6 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -13,7 +13,7 @@ const PortStream = require('./lib/port-stream.js') const NotificationManager = require('./lib/notification-manager.js') const MetamaskController = require('./metamask-controller') const firstTimeState = require('./first-time-state') -const setupRaven = require('./setupRaven') +const setupRaven = require('./lib/setupRaven') const setupMetamaskMeshMetrics = require('./lib/setupMetamaskMeshMetrics') const STORAGE_KEY = 'metamask-config' diff --git a/app/scripts/lib/setupRaven.js b/app/scripts/lib/setupRaven.js new file mode 100644 index 000000000..42e48cb90 --- /dev/null +++ b/app/scripts/lib/setupRaven.js @@ -0,0 +1,26 @@ +const Raven = require('../vendor/raven.min.js') +const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' +const PROD = 'https://3567c198f8a8412082d32655da2961d0@sentry.io/273505' +const DEV = 'https://f59f3dd640d2429d9d0e2445a87ea8e1@sentry.io/273496' + +module.exports = setupRaven + +// Setup raven / sentry remote error reporting +function setupRaven(opts) { + const { release } = opts + let ravenTarget + + if (METAMASK_DEBUG) { + console.log('Setting up Sentry Remote Error Reporting: DEV') + ravenTarget = DEV + } else { + console.log('Setting up Sentry Remote Error Reporting: PROD') + ravenTarget = PROD + } + + Raven.config(ravenTarget, { + release, + }).install() + + return Raven +} diff --git a/app/scripts/popup.js b/app/scripts/popup.js index 53ab00e00..11d50ee87 100644 --- a/app/scripts/popup.js +++ b/app/scripts/popup.js @@ -8,7 +8,7 @@ const extension = require('extensionizer') const ExtensionPlatform = require('./platforms/extension') const NotificationManager = require('./lib/notification-manager') const notificationManager = new NotificationManager() -const setupRaven = require('./setupRaven') +const setupRaven = require('./lib/setupRaven') // create platform global global.platform = new ExtensionPlatform() diff --git a/app/scripts/setupRaven.js b/app/scripts/setupRaven.js deleted file mode 100644 index 7beffeff9..000000000 --- a/app/scripts/setupRaven.js +++ /dev/null @@ -1,26 +0,0 @@ -const Raven = require('./vendor/raven.min.js') -const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' -const PROD = 'https://3567c198f8a8412082d32655da2961d0@sentry.io/273505' -const DEV = 'https://f59f3dd640d2429d9d0e2445a87ea8e1@sentry.io/273496' - -module.exports = setupRaven - -// Setup raven / sentry remote error reporting -function setupRaven(opts) { - const { release } = opts - let ravenTarget - - if (METAMASK_DEBUG) { - console.log('Setting up Sentry Remote Error Reporting: DEV') - ravenTarget = DEV - } else { - console.log('Setting up Sentry Remote Error Reporting: PROD') - ravenTarget = PROD - } - - Raven.config(ravenTarget, { - release, - }).install() - - return Raven -} -- cgit From 8e5bcf89359edb70b5d6847a4848c222aa283066 Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 28 Feb 2018 10:53:54 -0800 Subject: sentry - failed tx - improve ethjs-rpc error formating --- app/scripts/background.js | 8 +++---- app/scripts/lib/reportFailedTxToSentry.js | 38 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 app/scripts/lib/reportFailedTxToSentry.js (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 0da079eb6..4487ff318 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -14,8 +14,10 @@ const NotificationManager = require('./lib/notification-manager.js') const MetamaskController = require('./metamask-controller') const firstTimeState = require('./first-time-state') const setupRaven = require('./lib/setupRaven') +const reportFailedTxToSentry = require('./lib/reportFailedTxToSentry') const setupMetamaskMeshMetrics = require('./lib/setupMetamaskMeshMetrics') + const STORAGE_KEY = 'metamask-config' const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' @@ -86,11 +88,7 @@ function setupController (initState) { controller.txController.on(`tx:status-update`, (txId, status) => { if (status !== 'failed') return const txMeta = controller.txController.txStateManager.getTx(txId) - const errorMessage = `Transaction Failed: ${txMeta.err.message}` - raven.captureMessage(errorMessage, { - // "extra" key is required by Sentry - extra: txMeta, - }) + reportFailedTxToSentry({ raven, txMeta }) }) // setup state persistence diff --git a/app/scripts/lib/reportFailedTxToSentry.js b/app/scripts/lib/reportFailedTxToSentry.js new file mode 100644 index 000000000..67b0acf43 --- /dev/null +++ b/app/scripts/lib/reportFailedTxToSentry.js @@ -0,0 +1,38 @@ +const ethJsRpcSlug = 'Error: [ethjs-rpc] rpc error with payload ' +const errorLabelPrefix = 'Error: ' + +module.exports = reportFailedTxToSentry + +// +// utility for formatting failed transaction messages +// for sending to sentry +// + +function reportFailedTxToSentry({ raven, txMeta }) { + const errorMessage = extractErrorMessage(txMeta.err.message) + raven.captureMessage(errorMessage, { + // "extra" key is required by Sentry + extra: txMeta, + }) +} + +// +// ethjs-rpc provides overly verbose error messages +// if we detect this type of message, we extract the important part +// Below is an example input and output +// +// Error: [ethjs-rpc] rpc error with payload {"id":3947817945380,"jsonrpc":"2.0","params":["0xf8eb8208708477359400830398539406012c8cf97bead5deae237070f9587f8e7a266d80b8843d7d3f5a0000000000000000000000000000000000000000000000000000000000081d1a000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000003f48025a04c32a9b630e0d9e7ff361562d850c86b7a884908135956a7e4a336fa0300d19ca06830776423f25218e8d19b267161db526e66895567147015b1f3fc47aef9a3c7"],"method":"eth_sendRawTransaction"} Error: replacement transaction underpriced +// +// "Transaction Failed: replacement transaction underpriced" +// + +function extractErrorMessage(errorMessage) { + const isEthjsRpcError = errorMessage.includes(ethJsRpcSlug) + if (isEthjsRpcError) { + const payloadAndError = errorMessage.slice(ethJsRpcSlug.length) + const originalError = payloadAndError.slice(payloadAndError.indexOf(errorLabelPrefix) + errorLabelPrefix.length) + return `Transaction Failed: ${originalError}` + } else { + return `Transaction Failed: ${errorMessage}` + } +} -- cgit From c3bd27c9657d5e0236e2960dedd108ca5e2bb0ec Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 28 Feb 2018 10:57:54 -0800 Subject: sentry - extractErrorMessage - fix comment formatting --- app/scripts/lib/reportFailedTxToSentry.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/reportFailedTxToSentry.js b/app/scripts/lib/reportFailedTxToSentry.js index 67b0acf43..ee73f6845 100644 --- a/app/scripts/lib/reportFailedTxToSentry.js +++ b/app/scripts/lib/reportFailedTxToSentry.js @@ -23,7 +23,7 @@ function reportFailedTxToSentry({ raven, txMeta }) { // // Error: [ethjs-rpc] rpc error with payload {"id":3947817945380,"jsonrpc":"2.0","params":["0xf8eb8208708477359400830398539406012c8cf97bead5deae237070f9587f8e7a266d80b8843d7d3f5a0000000000000000000000000000000000000000000000000000000000081d1a000000000000000000000000000000000000000000000000001ff973cafa800000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000003f48025a04c32a9b630e0d9e7ff361562d850c86b7a884908135956a7e4a336fa0300d19ca06830776423f25218e8d19b267161db526e66895567147015b1f3fc47aef9a3c7"],"method":"eth_sendRawTransaction"} Error: replacement transaction underpriced // -// "Transaction Failed: replacement transaction underpriced" +// Transaction Failed: replacement transaction underpriced // function extractErrorMessage(errorMessage) { -- cgit From d45116824c289a12ba43fcff257d282ef7f38902 Mon Sep 17 00:00:00 2001 From: Kevin Serrano Date: Wed, 28 Feb 2018 13:03:46 -0800 Subject: Check in all font files locally. --- app/fonts/Font_Awesome/font-awesome.min.css | 4 + app/fonts/fonts/FontAwesome.otf | Bin 0 -> 106260 bytes app/fonts/fonts/fontawesome-webfont.eot | Bin 0 -> 68875 bytes app/fonts/fonts/fontawesome-webfont.svg | 640 ++++++++++++++++++++++++++++ app/fonts/fonts/fontawesome-webfont.ttf | Bin 0 -> 138204 bytes app/fonts/fonts/fontawesome-webfont.woff | Bin 0 -> 81284 bytes app/fonts/fonts/fontawesome-webfont.woff2 | Bin 0 -> 64464 bytes 7 files changed, 644 insertions(+) create mode 100644 app/fonts/Font_Awesome/font-awesome.min.css create mode 100644 app/fonts/fonts/FontAwesome.otf create mode 100644 app/fonts/fonts/fontawesome-webfont.eot create mode 100644 app/fonts/fonts/fontawesome-webfont.svg create mode 100644 app/fonts/fonts/fontawesome-webfont.ttf create mode 100644 app/fonts/fonts/fontawesome-webfont.woff create mode 100644 app/fonts/fonts/fontawesome-webfont.woff2 (limited to 'app') diff --git a/app/fonts/Font_Awesome/font-awesome.min.css b/app/fonts/Font_Awesome/font-awesome.min.css new file mode 100644 index 000000000..ee4e9782b --- /dev/null +++ b/app/fonts/Font_Awesome/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} diff --git a/app/fonts/fonts/FontAwesome.otf b/app/fonts/fonts/FontAwesome.otf new file mode 100644 index 000000000..681bdd4d4 Binary files /dev/null and b/app/fonts/fonts/FontAwesome.otf differ diff --git a/app/fonts/fonts/fontawesome-webfont.eot b/app/fonts/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..a30335d74 Binary files /dev/null and b/app/fonts/fonts/fontawesome-webfont.eot differ diff --git a/app/fonts/fonts/fontawesome-webfont.svg b/app/fonts/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..6fd19abcb --- /dev/null +++ b/app/fonts/fonts/fontawesome-webfont.svg @@ -0,0 +1,640 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/fonts/fonts/fontawesome-webfont.ttf b/app/fonts/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..d7994e130 Binary files /dev/null and b/app/fonts/fonts/fontawesome-webfont.ttf differ diff --git a/app/fonts/fonts/fontawesome-webfont.woff b/app/fonts/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..6fd4ede0f Binary files /dev/null and b/app/fonts/fonts/fontawesome-webfont.woff differ diff --git a/app/fonts/fonts/fontawesome-webfont.woff2 b/app/fonts/fonts/fontawesome-webfont.woff2 new file mode 100644 index 000000000..5560193cc Binary files /dev/null and b/app/fonts/fonts/fontawesome-webfont.woff2 differ -- cgit From 190389a068b9005b52e9012bce48b93397007e26 Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 28 Feb 2018 14:26:14 -0800 Subject: v4.1.1 --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index eab6c7063..80be01759 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "4.1.0", + "version": "4.1.1", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", -- cgit From 00cd5a340d81da7f3cd6098ca6b16b4400c71efa Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 28 Feb 2018 16:11:58 -0800 Subject: 4.1.2 --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index 80be01759..1c9c420f9 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "4.1.1", + "version": "4.1.2", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", -- cgit From 452c5d0513a14419b71ffd92d253fef661b74300 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Fri, 2 Mar 2018 12:47:40 -0800 Subject: Version 4.1.3 --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index 1c9c420f9..2b3acf1b5 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "4.1.2", + "version": "4.1.3", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", -- cgit From 92453f8715b78c0e6e2cdb9b2e1cfe48c0b013ad Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Sat, 3 Mar 2018 00:32:57 +0100 Subject: seed phrase verifier --- app/scripts/lib/seed-phrase-verifier.js | 43 +++++++++++++++++++++++++++++++++ app/scripts/metamask-controller.js | 20 +++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 app/scripts/lib/seed-phrase-verifier.js (limited to 'app') diff --git a/app/scripts/lib/seed-phrase-verifier.js b/app/scripts/lib/seed-phrase-verifier.js new file mode 100644 index 000000000..9bea2910e --- /dev/null +++ b/app/scripts/lib/seed-phrase-verifier.js @@ -0,0 +1,43 @@ +const KeyringController = require('eth-keyring-controller') + +const seedPhraseVerifier = { + + verifyAccounts(createdAccounts, seedWords) { + + return new Promise((resolve, reject) => { + + if (!createdAccounts || createdAccounts.length < 1) { + return reject(new Error('No created accounts defined.')) + } + + let keyringController = new KeyringController({}) + let Keyring = keyringController.getKeyringClassForType('HD Key Tree') + let opts = { + mnemonic: seedWords, + numberOfAccounts: createdAccounts.length, + } + + let keyring = new Keyring(opts) + keyring.getAccounts() + .then((restoredAccounts) => { + + log.debug('Created accounts: ' + JSON.stringify(createdAccounts)) + log.debug('Restored accounts: ' + JSON.stringify(restoredAccounts)) + + if (restoredAccounts.length != createdAccounts.length) { + // this should not happen... + return reject(new Error("Wrong number of accounts")) + } + + for (let i = 0; i < restoredAccounts.length; i++) { + if (restoredAccounts[i] !== createdAccounts[i]) { + return reject(new Error('Not identical accounts! Original: ' + createdAccounts[i] + ', Restored: ' + restoredAccounts[i])) + } + } + return resolve() + }) + }) + } +} + +module.exports = seedPhraseVerifier \ No newline at end of file diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index ad4e71792..89bcbd51b 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -37,6 +37,7 @@ const version = require('../manifest.json').version const BN = require('ethereumjs-util').BN const GWEI_BN = new BN('1000000000') const percentile = require('percentile') +const seedPhraseVerifier = require('./lib/seed-phrase-verifier') module.exports = class MetamaskController extends EventEmitter { @@ -592,8 +593,23 @@ module.exports = class MetamaskController extends EventEmitter { primaryKeyring.serialize() .then((serialized) => { const seedWords = serialized.mnemonic - this.configManager.setSeedWords(seedWords) - cb(null, seedWords) + + primaryKeyring.getAccounts() + .then((accounts) => { + if (accounts.length < 1) { + return cb(new Error('MetamaskController - No accounts found')) + } + + seedPhraseVerifier.verifyAccounts(accounts, seedWords) + .then(() => { + this.configManager.setSeedWords(seedWords) + cb(null, seedWords) + }) + .catch((err) => { + log.error(err) + cb(err) + }) + }) }) } -- cgit From 4bd7f1a37abcd09dc8816fc5b28ad41bc86b1aea Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Sat, 3 Mar 2018 00:40:40 +0100 Subject: fix lint issues --- app/scripts/lib/seed-phrase-verifier.js | 18 +++++++++--------- app/scripts/metamask-controller.js | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/seed-phrase-verifier.js b/app/scripts/lib/seed-phrase-verifier.js index 9bea2910e..97a433fd8 100644 --- a/app/scripts/lib/seed-phrase-verifier.js +++ b/app/scripts/lib/seed-phrase-verifier.js @@ -2,7 +2,7 @@ const KeyringController = require('eth-keyring-controller') const seedPhraseVerifier = { - verifyAccounts(createdAccounts, seedWords) { + verifyAccounts (createdAccounts, seedWords) { return new Promise((resolve, reject) => { @@ -10,23 +10,23 @@ const seedPhraseVerifier = { return reject(new Error('No created accounts defined.')) } - let keyringController = new KeyringController({}) - let Keyring = keyringController.getKeyringClassForType('HD Key Tree') - let opts = { + const keyringController = new KeyringController({}) + const Keyring = keyringController.getKeyringClassForType('HD Key Tree') + const opts = { mnemonic: seedWords, numberOfAccounts: createdAccounts.length, } - let keyring = new Keyring(opts) + const keyring = new Keyring(opts) keyring.getAccounts() .then((restoredAccounts) => { log.debug('Created accounts: ' + JSON.stringify(createdAccounts)) log.debug('Restored accounts: ' + JSON.stringify(restoredAccounts)) - if (restoredAccounts.length != createdAccounts.length) { + if (restoredAccounts.length !== createdAccounts.length) { // this should not happen... - return reject(new Error("Wrong number of accounts")) + return reject(new Error('Wrong number of accounts')) } for (let i = 0; i < restoredAccounts.length; i++) { @@ -37,7 +37,7 @@ const seedPhraseVerifier = { return resolve() }) }) - } + }, } -module.exports = seedPhraseVerifier \ No newline at end of file +module.exports = seedPhraseVerifier diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 89bcbd51b..b9231aa3d 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -599,9 +599,9 @@ module.exports = class MetamaskController extends EventEmitter { if (accounts.length < 1) { return cb(new Error('MetamaskController - No accounts found')) } - + seedPhraseVerifier.verifyAccounts(accounts, seedWords) - .then(() => { + .then(() => { this.configManager.setSeedWords(seedWords) cb(null, seedWords) }) -- cgit From 3e05b693dbf55ea7ecb791e8f31b7599a6b89ffd Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Sat, 3 Mar 2018 14:11:02 +0100 Subject: verify addresses regardless case --- app/scripts/lib/seed-phrase-verifier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/seed-phrase-verifier.js b/app/scripts/lib/seed-phrase-verifier.js index 97a433fd8..1f35c2c67 100644 --- a/app/scripts/lib/seed-phrase-verifier.js +++ b/app/scripts/lib/seed-phrase-verifier.js @@ -30,7 +30,7 @@ const seedPhraseVerifier = { } for (let i = 0; i < restoredAccounts.length; i++) { - if (restoredAccounts[i] !== createdAccounts[i]) { + if (restoredAccounts[i].toLowerCase() !== createdAccounts[i].toLowerCase()) { return reject(new Error('Not identical accounts! Original: ' + createdAccounts[i] + ', Restored: ' + restoredAccounts[i])) } } -- cgit From 2b86d65d0c3266e8ddfe814abe1d1755fbf23fda Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Sat, 3 Mar 2018 22:08:10 +0100 Subject: verify seedwords on log in --- app/scripts/metamask-controller.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index b9231aa3d..df9adc248 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -345,6 +345,7 @@ module.exports = class MetamaskController extends EventEmitter { // primary HD keyring management addNewAccount: nodeify(this.addNewAccount, this), placeSeedWords: this.placeSeedWords.bind(this), + verifySeedPhrase: this.verifySeedPhrase.bind(this), clearSeedWordCache: this.clearSeedWordCache.bind(this), resetAccount: this.resetAccount.bind(this), importAccountWithStrategy: this.importAccountWithStrategy.bind(this), @@ -588,6 +589,19 @@ module.exports = class MetamaskController extends EventEmitter { // Used when creating a first vault, to allow confirmation. // Also used when revealing the seed words in the confirmation view. placeSeedWords (cb) { + + this.verifySeedPhrase((err, seedWords) => { + + if (err) { + return cb(err) + } + this.configManager.setSeedWords(seedWords) + return cb(null, seedWords) + }) + } + + verifySeedPhrase (cb) { + const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] if (!primaryKeyring) return cb(new Error('MetamaskController - No HD Key Tree found')) primaryKeyring.serialize() @@ -602,12 +616,11 @@ module.exports = class MetamaskController extends EventEmitter { seedPhraseVerifier.verifyAccounts(accounts, seedWords) .then(() => { - this.configManager.setSeedWords(seedWords) - cb(null, seedWords) + return cb(null, seedWords) }) .catch((err) => { log.error(err) - cb(err) + return cb(err) }) }) }) -- cgit From f7d4a1080df6d1c8ea5f68f88b01caea065b5e92 Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Sun, 4 Mar 2018 08:47:46 +0100 Subject: add documentation --- app/scripts/lib/seed-phrase-verifier.js | 5 +++++ app/scripts/metamask-controller.js | 4 ++++ 2 files changed, 9 insertions(+) (limited to 'app') diff --git a/app/scripts/lib/seed-phrase-verifier.js b/app/scripts/lib/seed-phrase-verifier.js index 1f35c2c67..9cea22029 100644 --- a/app/scripts/lib/seed-phrase-verifier.js +++ b/app/scripts/lib/seed-phrase-verifier.js @@ -2,6 +2,11 @@ const KeyringController = require('eth-keyring-controller') const seedPhraseVerifier = { + // Verifies if the seed words can restore the accounts. + // + // The seed words can recreate the primary keyring and the accounts belonging to it. + // The created accounts in the primary keyring are always the same. + // The keyring always creates the accounts in the same sequence. verifyAccounts (createdAccounts, seedWords) { return new Promise((resolve, reject) => { diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index df9adc248..f523e3919 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -600,6 +600,10 @@ module.exports = class MetamaskController extends EventEmitter { }) } + // Verifies the current vault's seed words if they can restore the + // accounts belonging to the current vault. + // + // Called when the first account is created and on unlocking the vault. verifySeedPhrase (cb) { const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] -- cgit From 59007a6c36055f9197ad83ccb1741fa186b85f53 Mon Sep 17 00:00:00 2001 From: Csaba Solya Date: Tue, 6 Mar 2018 15:56:27 +0100 Subject: modify verifySeedPhrase to async and call it from addNewAccount also --- app/scripts/metamask-controller.js | 66 ++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 32 deletions(-) (limited to 'app') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index f523e3919..0a5c1d36f 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -345,7 +345,7 @@ module.exports = class MetamaskController extends EventEmitter { // primary HD keyring management addNewAccount: nodeify(this.addNewAccount, this), placeSeedWords: this.placeSeedWords.bind(this), - verifySeedPhrase: this.verifySeedPhrase.bind(this), + verifySeedPhrase: nodeify(this.verifySeedPhrase, this), clearSeedWordCache: this.clearSeedWordCache.bind(this), resetAccount: this.resetAccount.bind(this), importAccountWithStrategy: this.importAccountWithStrategy.bind(this), @@ -567,14 +567,18 @@ module.exports = class MetamaskController extends EventEmitter { // Opinionated Keyring Management // - async addNewAccount (cb) { + async addNewAccount () { const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] - if (!primaryKeyring) return cb(new Error('MetamaskController - No HD Key Tree found')) + if (!primaryKeyring) { + throw new Error('MetamaskController - No HD Key Tree found') + } const keyringController = this.keyringController const oldAccounts = await keyringController.getAccounts() const keyState = await keyringController.addNewAccount(primaryKeyring) const newAccounts = await keyringController.getAccounts() + await this.verifySeedPhrase() + newAccounts.forEach((address) => { if (!oldAccounts.includes(address)) { this.preferencesController.setSelectedAddress(address) @@ -590,44 +594,42 @@ module.exports = class MetamaskController extends EventEmitter { // Also used when revealing the seed words in the confirmation view. placeSeedWords (cb) { - this.verifySeedPhrase((err, seedWords) => { - - if (err) { + this.verifySeedPhrase() + .then((seedWords) => { + this.configManager.setSeedWords(seedWords) + return cb(null, seedWords) + }) + .catch((err) => { return cb(err) - } - this.configManager.setSeedWords(seedWords) - return cb(null, seedWords) - }) + }) } // Verifies the current vault's seed words if they can restore the // accounts belonging to the current vault. // // Called when the first account is created and on unlocking the vault. - verifySeedPhrase (cb) { + async verifySeedPhrase () { const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] - if (!primaryKeyring) return cb(new Error('MetamaskController - No HD Key Tree found')) - primaryKeyring.serialize() - .then((serialized) => { - const seedWords = serialized.mnemonic - - primaryKeyring.getAccounts() - .then((accounts) => { - if (accounts.length < 1) { - return cb(new Error('MetamaskController - No accounts found')) - } - - seedPhraseVerifier.verifyAccounts(accounts, seedWords) - .then(() => { - return cb(null, seedWords) - }) - .catch((err) => { - log.error(err) - return cb(err) - }) - }) - }) + if (!primaryKeyring) { + throw new Error('MetamaskController - No HD Key Tree found') + } + + const serialized = await primaryKeyring.serialize() + const seedWords = serialized.mnemonic + + const accounts = await primaryKeyring.getAccounts() + if (accounts.length < 1) { + throw new Error('MetamaskController - No accounts found') + } + + try { + await seedPhraseVerifier.verifyAccounts(accounts, seedWords) + return seedWords + } catch (err) { + log.error(err.message) + throw err + } } // ClearSeedWordCache -- cgit From 7c2257e09c2583a4ac24a78e1b3c58a750cb798f Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 6 Mar 2018 21:25:30 -0330 Subject: Missing comma in messages.json --- app/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 2884392e8..f4a8fe943 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -373,7 +373,7 @@ "newAccountNumberName": { "message": "Account $1", "description": "Default name of next account to be created on create account screen" - } + }, "newContract": { "message": "New Contract" }, -- cgit From e91a521b1b0cc9262ca31290f3df5778dd1a6919 Mon Sep 17 00:00:00 2001 From: kumavis Date: Tue, 6 Mar 2018 17:30:12 -0800 Subject: Version 4.2.0 --- app/manifest.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index 2b3acf1b5..0c89c2b3e 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "4.1.3", + "version": "4.2.0", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", @@ -59,7 +59,7 @@ "clipboardWrite", "http://localhost:8545/", "https://*.infura.io/" - ], + ], "web_accessible_resources": [ "scripts/inpage.js" ], @@ -68,4 +68,4 @@ "https://metamask.io/*" ] } -} +} \ No newline at end of file -- cgit From 57dc5a6e9b8ecc4414fe72397205d21cec13c5e1 Mon Sep 17 00:00:00 2001 From: Jeffrey Tong Date: Tue, 6 Mar 2018 20:37:26 -0800 Subject: fix typo in transaction.js --- app/scripts/controllers/transactions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index ef5578d5a..9c2ca0dc8 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -3,7 +3,7 @@ const ObservableStore = require('obs-store') const ethUtil = require('ethereumjs-util') const Transaction = require('ethereumjs-tx') const EthQuery = require('ethjs-query') -const TransactionStateManger = require('../lib/tx-state-manager') +const TransactionStateManager = require('../lib/tx-state-manager') const TxGasUtil = require('../lib/tx-gas-utils') const PendingTransactionTracker = require('../lib/pending-tx-tracker') const createId = require('../lib/random-id') @@ -38,7 +38,7 @@ module.exports = class TransactionController extends EventEmitter { this.query = new EthQuery(this.provider) this.txGasUtil = new TxGasUtil(this.provider) - this.txStateManager = new TransactionStateManger({ + this.txStateManager = new TransactionStateManager({ initState: opts.initState, txHistoryLimit: opts.txHistoryLimit, getNetwork: this.getNetwork.bind(this), -- cgit From cad5f5f0009713a1101194d964af7a1620ea158c Mon Sep 17 00:00:00 2001 From: Jeffrey Tong Date: Wed, 7 Mar 2018 10:24:36 -0800 Subject: fix typo in tests and tx-state-manager --- app/scripts/lib/tx-state-manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/tx-state-manager.js b/app/scripts/lib/tx-state-manager.js index 051efd247..2eb006380 100644 --- a/app/scripts/lib/tx-state-manager.js +++ b/app/scripts/lib/tx-state-manager.js @@ -4,7 +4,7 @@ const ObservableStore = require('obs-store') const ethUtil = require('ethereumjs-util') const txStateHistoryHelper = require('./tx-state-history-helper') -module.exports = class TransactionStateManger extends EventEmitter { +module.exports = class TransactionStateManager extends EventEmitter { constructor ({ initState, txHistoryLimit, getNetwork }) { super() -- cgit From ab55c184c7e40e6e46bc4da5d8438a18999a266e Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 7 Mar 2018 13:50:22 -0800 Subject: Increase storage debounce to 2s --- app/scripts/background.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 464330708..cb6810173 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -126,7 +126,7 @@ function setupController (initState) { // setup state persistence pump( asStream(controller.store), - debounce(1000), + debounce(2000), storeTransform(versionifyData), storeTransform(syncDataWithExtension), (error) => { -- cgit From 40b1688c67bfb820aca437751dda87df98e9513a Mon Sep 17 00:00:00 2001 From: Jeffrey Tong Date: Wed, 7 Mar 2018 14:19:27 -0800 Subject: removed check for width & height on multiple popup windows --- app/scripts/lib/notification-manager.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/notification-manager.js b/app/scripts/lib/notification-manager.js index adaf60c65..1283933e1 100644 --- a/app/scripts/lib/notification-manager.js +++ b/app/scripts/lib/notification-manager.js @@ -60,9 +60,7 @@ class NotificationManager { _getPopupIn (windows) { return windows ? windows.find((win) => { - return (win && win.type === 'popup' && - win.height === height && - win.width === width) + return (win && win.type === 'popup') }) : null } -- cgit From d58e47edec80180c7dd99effc229e116c63b4f57 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 7 Mar 2018 14:23:31 -0800 Subject: Some fixes for new storage strategy - Don't persist undefined data - Write to new storage strategy without waiting for completion. - Continue writing to localStorage as fallback. --- app/scripts/background.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index cb6810173..b5f7002dc 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -93,6 +93,9 @@ async function loadStateFromPersistence () { .catch((reason) => { log.error('Problem saving migrated data', versionedData) }) + if (versionedData) { + diskStore.putState(versionedData) + } // return just the data return versionedData.data @@ -129,6 +132,7 @@ function setupController (initState) { debounce(2000), storeTransform(versionifyData), storeTransform(syncDataWithExtension), + asStream(diskStore), (error) => { log.error('pump hit error', error) } @@ -139,14 +143,14 @@ function setupController (initState) { return versionedData } - async function syncDataWithExtension(state) { + function syncDataWithExtension(state) { if (localStore.isSupported) { - try { - await localStore.set(state) - } catch (err) { + localStore.set(state) + .catch((err) => { log.error('error setting state in local store:', err) - } + }) } else { log.error('local store not supported') } + return state } -- cgit From b97ac5106fd8479a81dc5c32ede99090427ee1b8 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 7 Mar 2018 14:38:26 -0800 Subject: Add clarifying comment --- app/scripts/background.js | 1 + 1 file changed, 1 insertion(+) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index b5f7002dc..55eeed83f 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -80,6 +80,7 @@ async function loadStateFromPersistence () { log.error('error fetching state from local store:', err) } + // If localStore is supported but has not been written to yet, ignore: if (Object.keys(localData).length > 0) { versionedData = localData } -- cgit From 64fcd271028ff57c34dd930b76ce23081eff814a Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Wed, 7 Mar 2018 14:42:59 -0800 Subject: Tighten up data loading code --- app/scripts/background.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 55eeed83f..e8a7594ac 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -68,10 +68,10 @@ async function initialize () { async function loadStateFromPersistence () { // migrations const migrator = new Migrator({ migrations }) - // read from disk - versionedData = diskStore.getState() || migrator.generateInitialState(firstTimeState) - // fetch from extension store and merge in data + // read from disk + // first from preferred, async API: + let localStoreData if (localStore.isSupported) { let localData try { @@ -82,10 +82,14 @@ async function loadStateFromPersistence () { // If localStore is supported but has not been written to yet, ignore: if (Object.keys(localData).length > 0) { - versionedData = localData + localStoreData = localData } } + versionedData = localStoreData || + diskStore.getState() || + migrator.generateInitialState(firstTimeState) + // migrate data versionedData = await migrator.migrateData(versionedData) -- cgit From 62febac87659ddf78a34dd0dac1ee8a38d8c8e77 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Tue, 27 Feb 2018 15:14:18 -0800 Subject: refactor retrytx with higher gas price: - create a new tx instead of overwriting the tx hash - add a new state 'dropped' to the txStateManager - mark duplicate txs as dropped when one gets confirmed in a block --- app/scripts/controllers/transactions.js | 43 +++++++++++++++++++++------------ app/scripts/lib/tx-state-manager.js | 38 +++++++++++++++++++++-------- 2 files changed, 55 insertions(+), 26 deletions(-) (limited to 'app') diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index ef5578d5a..aad3f9952 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -6,7 +6,6 @@ const EthQuery = require('ethjs-query') const TransactionStateManger = require('../lib/tx-state-manager') const TxGasUtil = require('../lib/tx-gas-utils') const PendingTransactionTracker = require('../lib/pending-tx-tracker') -const createId = require('../lib/random-id') const NonceTracker = require('../lib/nonce-tracker') /* @@ -92,8 +91,22 @@ module.exports = class TransactionController extends EventEmitter { this.pendingTxTracker.on('tx:warning', (txMeta) => { this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:warning') }) + this.pendingTxTracker.on('tx:confirmed', (txId) => { + this.txStateManager.setTxStatusConfirmed(txId) + // get the confirmed transactions nonce and from address + const txMeta = this.txStateManager.getTx(txId) + const { nonce, from } = txMeta.txParams + const sameNonceTxs = this.txStateManager.getFilteredTxList({nonce, from}) + if (!sameNonceTxs.length) return + // mark all same nonce transactions as dropped and give i a replacedBy hash + sameNonceTxs.forEach((otherTxMeta) => { + if (otherTxMeta === txId) return + otherTxMeta.replacedBy = txMeta.hash + this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce') + this.txStateManager.setTxStatusDropped(otherTxMeta.id) + }) + }) this.pendingTxTracker.on('tx:failed', this.txStateManager.setTxStatusFailed.bind(this.txStateManager)) - this.pendingTxTracker.on('tx:confirmed', this.txStateManager.setTxStatusConfirmed.bind(this.txStateManager)) this.pendingTxTracker.on('tx:block-update', (txMeta, latestBlockNumber) => { if (!txMeta.firstRetryBlockNumber) { txMeta.firstRetryBlockNumber = latestBlockNumber @@ -186,14 +199,7 @@ module.exports = class TransactionController extends EventEmitter { // validate await this.txGasUtil.validateTxParams(txParams) // construct txMeta - const txMeta = { - id: createId(), - time: (new Date()).getTime(), - status: 'unapproved', - metamaskNetworkId: this.getNetwork(), - txParams: txParams, - loadingDefaults: true, - } + const txMeta = this.txStateManager.generateTxMeta({txParams}) this.addTx(txMeta) this.emit('newUnapprovedTx', txMeta) // add default tx params @@ -215,7 +221,6 @@ module.exports = class TransactionController extends EventEmitter { const txParams = txMeta.txParams // ensure value txMeta.gasPriceSpecified = Boolean(txParams.gasPrice) - txMeta.nonceSpecified = Boolean(txParams.nonce) let gasPrice = txParams.gasPrice if (!gasPrice) { gasPrice = this.getGasPrice ? this.getGasPrice() : await this.query.gasPrice() @@ -226,11 +231,17 @@ module.exports = class TransactionController extends EventEmitter { return await this.txGasUtil.analyzeGasUsage(txMeta) } - async retryTransaction (txId) { - this.txStateManager.setTxStatusUnapproved(txId) - const txMeta = this.txStateManager.getTx(txId) - txMeta.lastGasPrice = txMeta.txParams.gasPrice - this.txStateManager.updateTx(txMeta, 'retryTransaction: manual retry') + async retryTransaction (originalTxId) { + const originalTxMeta = this.txStateManager.getTx(originalTxId) + const lastGasPrice = originalTxMeta.txParams.gasPrice + const txMeta = this.txStateManager.generateTxMeta({ + txParams: originalTxMeta.txParams, + lastGasPrice, + loadingDefaults: false, + nonceSpecified: true, + }) + this.addTx(txMeta) + this.emit('newUnapprovedTx', txMeta) } async updateTransaction (txMeta) { diff --git a/app/scripts/lib/tx-state-manager.js b/app/scripts/lib/tx-state-manager.js index 051efd247..25442ce47 100644 --- a/app/scripts/lib/tx-state-manager.js +++ b/app/scripts/lib/tx-state-manager.js @@ -1,9 +1,21 @@ const extend = require('xtend') const EventEmitter = require('events') const ObservableStore = require('obs-store') +const createId = require('./random-id') const ethUtil = require('ethereumjs-util') const txStateHistoryHelper = require('./tx-state-history-helper') +// STATUS METHODS + // statuses: + // - `'unapproved'` the user has not responded + // - `'rejected'` the user has responded no! + // - `'approved'` the user has approved the tx + // - `'signed'` the tx is signed + // - `'submitted'` the tx is sent to a server + // - `'confirmed'` the tx has been included in a block. + // - `'failed'` the tx failed for some reason, included on tx data. + // - `'dropped'` the tx nonce was already used + module.exports = class TransactionStateManger extends EventEmitter { constructor ({ initState, txHistoryLimit, getNetwork }) { super() @@ -16,6 +28,16 @@ module.exports = class TransactionStateManger extends EventEmitter { this.getNetwork = getNetwork } + generateTxMeta (opts) { + return extend({ + id: createId(), + time: (new Date()).getTime(), + status: 'unapproved', + metamaskNetworkId: this.getNetwork(), + loadingDefaults: true, + }, opts) + } + // Returns the number of txs for the current network. getTxCount () { return this.getTxList().length @@ -164,16 +186,6 @@ module.exports = class TransactionStateManger extends EventEmitter { }) } - // STATUS METHODS - // statuses: - // - `'unapproved'` the user has not responded - // - `'rejected'` the user has responded no! - // - `'approved'` the user has approved the tx - // - `'signed'` the tx is signed - // - `'submitted'` the tx is sent to a server - // - `'confirmed'` the tx has been included in a block. - // - `'failed'` the tx failed for some reason, included on tx data. - // get::set status // should return the status of the tx. @@ -211,6 +223,12 @@ module.exports = class TransactionStateManger extends EventEmitter { this._setTxStatus(txId, 'confirmed') } + // should update the status dropped + setTxStatusDropped (txId) { + this._setTxStatus(txId, 'dropped') + } + + setTxStatusFailed (txId, err) { const txMeta = this.getTx(txId) txMeta.err = { -- cgit From aaef2aeefde39ce11ef07603fd1cb5d2cbb1e294 Mon Sep 17 00:00:00 2001 From: Jeffrey Tong Date: Wed, 7 Mar 2018 20:09:40 -0800 Subject: fixed multiple notification windows when executing batch --- app/scripts/background.js | 11 ++++++++++- app/scripts/lib/notification-manager.js | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 601ae0372..6cb80244f 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -40,6 +40,7 @@ const isIE = !!document.documentMode const isEdge = !isIE && !!window.StyleMedia let popupIsOpen = false +let notifcationIsOpen = false; let openMetamaskTabsIDs = {} // state persistence @@ -136,6 +137,11 @@ function setupController (initState) { } }) } + if (remotePort.name === 'notification') { + endOfStream(portStream, () => { + notifcationIsOpen = false + }); + } } else { // communication with page const originDomain = urlUtil.parse(remotePort.sender.url).hostname @@ -178,7 +184,10 @@ function setupController (initState) { function triggerUi () { extension.tabs.query({ active: true }, (tabs) => { const currentlyActiveMetamaskTab = tabs.find(tab => openMetamaskTabsIDs[tab.id]) - if (!popupIsOpen && !currentlyActiveMetamaskTab) notificationManager.showPopup() + if (!popupIsOpen && !currentlyActiveMetamaskTab) notificationManager.showPopup((notification) => { + notifcationIsOpen = notification; + }); + notifcationIsOpen = true; }) } diff --git a/app/scripts/lib/notification-manager.js b/app/scripts/lib/notification-manager.js index 1283933e1..351f82694 100644 --- a/app/scripts/lib/notification-manager.js +++ b/app/scripts/lib/notification-manager.js @@ -9,7 +9,7 @@ class NotificationManager { // Public // - showPopup () { + showPopup (cb) { this._getPopup((err, popup) => { if (err) throw err @@ -23,6 +23,9 @@ class NotificationManager { type: 'popup', width, height, + }, (win) => { + // naming of popup window and a popup in chrome extension sense is confusing + cb((win.type == 'popup')); }) } }) -- cgit From 4a3288fec9ae7bd717b539d9bfcb8d5ba5b1ef8c Mon Sep 17 00:00:00 2001 From: frankiebee Date: Wed, 7 Mar 2018 22:01:14 -0800 Subject: transactions - make _markNonceDuplicatesDropped --- app/scripts/controllers/transactions.js | 41 ++++++++++++++++----------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'app') diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index aad3f9952..e903c73e8 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -91,21 +91,7 @@ module.exports = class TransactionController extends EventEmitter { this.pendingTxTracker.on('tx:warning', (txMeta) => { this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:warning') }) - this.pendingTxTracker.on('tx:confirmed', (txId) => { - this.txStateManager.setTxStatusConfirmed(txId) - // get the confirmed transactions nonce and from address - const txMeta = this.txStateManager.getTx(txId) - const { nonce, from } = txMeta.txParams - const sameNonceTxs = this.txStateManager.getFilteredTxList({nonce, from}) - if (!sameNonceTxs.length) return - // mark all same nonce transactions as dropped and give i a replacedBy hash - sameNonceTxs.forEach((otherTxMeta) => { - if (otherTxMeta === txId) return - otherTxMeta.replacedBy = txMeta.hash - this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce') - this.txStateManager.setTxStatusDropped(otherTxMeta.id) - }) - }) + this.pendingTxTracker.on('tx:confirmed', (txId) => this._markNonceDuplicatesDropped(txId)) this.pendingTxTracker.on('tx:failed', this.txStateManager.setTxStatusFailed.bind(this.txStateManager)) this.pendingTxTracker.on('tx:block-update', (txMeta, latestBlockNumber) => { if (!txMeta.firstRetryBlockNumber) { @@ -238,7 +224,6 @@ module.exports = class TransactionController extends EventEmitter { txParams: originalTxMeta.txParams, lastGasPrice, loadingDefaults: false, - nonceSpecified: true, }) this.addTx(txMeta) this.emit('newUnapprovedTx', txMeta) @@ -264,11 +249,9 @@ module.exports = class TransactionController extends EventEmitter { // wait for a nonce nonceLock = await this.nonceTracker.getNonceLock(fromAddress) // add nonce to txParams - const nonce = txMeta.nonceSpecified ? txMeta.txParams.nonce : nonceLock.nextNonce - if (nonce > nonceLock.nextNonce) { - const message = `Specified nonce may not be larger than account's next valid nonce.` - throw new Error(message) - } + // if txMeta has lastGasPrice then it is a retry at same nonce with higher + // gas price transaction and their for the nonce should not be calculated + const nonce = txMeta.lastGasPrice ? txMeta.txParams.nonce : nonceLock.nextNonce txMeta.txParams.nonce = ethUtil.addHexPrefix(nonce.toString(16)) // add nonce debugging information to txMeta txMeta.nonceDetails = nonceLock.nonceDetails @@ -325,6 +308,22 @@ module.exports = class TransactionController extends EventEmitter { // PRIVATE METHODS // + _markNonceDuplicatesDropped (txId) { + this.txStateManager.setTxStatusConfirmed(txId) + // get the confirmed transactions nonce and from address + const txMeta = this.txStateManager.getTx(txId) + const { nonce, from } = txMeta.txParams + const sameNonceTxs = this.txStateManager.getFilteredTxList({nonce, from}) + if (!sameNonceTxs.length) return + // mark all same nonce transactions as dropped and give i a replacedBy hash + sameNonceTxs.forEach((otherTxMeta) => { + if (otherTxMeta === txId) return + otherTxMeta.replacedBy = txMeta.hash + this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce') + this.txStateManager.setTxStatusDropped(otherTxMeta.id) + }) + } + _updateMemstore () { const unapprovedTxs = this.txStateManager.getUnapprovedTxList() const selectedAddressTxList = this.txStateManager.getFilteredTxList({ -- cgit From 5572345b781ce68178dd4e72d4e56b2dec26a454 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Thu, 8 Mar 2018 10:36:31 -0800 Subject: fix marking of confirmed transaction as dropped --- app/scripts/controllers/transactions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index e903c73e8..3dbd424ca 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -317,7 +317,7 @@ module.exports = class TransactionController extends EventEmitter { if (!sameNonceTxs.length) return // mark all same nonce transactions as dropped and give i a replacedBy hash sameNonceTxs.forEach((otherTxMeta) => { - if (otherTxMeta === txId) return + if (otherTxMeta.id === txId) return otherTxMeta.replacedBy = txMeta.hash this.txStateManager.updateTx(txMeta, 'transactions/pending-tx-tracker#event: tx:confirmed reference to confirmed txHash with same nonce') this.txStateManager.setTxStatusDropped(otherTxMeta.id) -- cgit From 98efca0a9798db205ef8068c038a225a79c575cd Mon Sep 17 00:00:00 2001 From: kumavis Date: Thu, 8 Mar 2018 14:10:28 -0800 Subject: background - storage - cleanup storage wiring --- app/scripts/background.js | 34 ++++++++-------------------------- app/scripts/lib/local-store.js | 30 ++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 34 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index e8a7594ac..ef5513ec7 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -71,36 +71,19 @@ async function loadStateFromPersistence () { // read from disk // first from preferred, async API: - let localStoreData - if (localStore.isSupported) { - let localData - try { - localData = await localStore.get() - } catch (err) { - log.error('error fetching state from local store:', err) - } - - // If localStore is supported but has not been written to yet, ignore: - if (Object.keys(localData).length > 0) { - localStoreData = localData - } - } - - versionedData = localStoreData || + versionedData = (await localStore.get()) || diskStore.getState() || migrator.generateInitialState(firstTimeState) // migrate data versionedData = await migrator.migrateData(versionedData) + if (!versionedData) { + throw new Error('MetaMask - migrator returned undefined') + } // write to disk - localStore.set(versionedData) - .catch((reason) => { - log.error('Problem saving migrated data', versionedData) - }) - if (versionedData) { - diskStore.putState(versionedData) - } + if (localStore.isSupported) localStore.set(versionedData) + diskStore.putState(versionedData) // return just the data return versionedData.data @@ -134,7 +117,7 @@ function setupController (initState) { // setup state persistence pump( asStream(controller.store), - debounce(2000), + debounce(1000), storeTransform(versionifyData), storeTransform(syncDataWithExtension), asStream(diskStore), @@ -154,8 +137,7 @@ function setupController (initState) { .catch((err) => { log.error('error setting state in local store:', err) }) - } else { log.error('local store not supported') } - + } return state } diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 9e8d8db37..73482a636 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -3,6 +3,7 @@ // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/local const extension = require('extensionizer') +const { promisify } = require('util').promisify module.exports = class ExtensionStore { constructor() { @@ -10,15 +11,28 @@ module.exports = class ExtensionStore { if (!this.isSupported) { log.error('Storage local API not available.') } + const local = extension.storage.local + this._get = promisify(local.get).bind(local) + this._set = promisify(local.set).bind(local) } - get() { - return new Promise((resolve) => { - extension.storage.local.get(null, resolve) - }) + + async get() { + if (!this.isSupported) return undefined + const result = await this._get() + // extension.storage.local always returns an obj + // if the object is empty, treat it as undefined + if (isEmpty(result)) { + return undefined + } else { + return result + } } - set(state) { - return new Promise((resolve) => { - extension.storage.local.set(state, resolve) - }) + + async set(state) { + return this._set(state) } } + +function isEmpty(obj) { + return 0 === Object.keys(obj).length +} -- cgit From a88e436b7d45d9a7f9f4d4a4be58aff5e58e9074 Mon Sep 17 00:00:00 2001 From: kumavis Date: Thu, 8 Mar 2018 14:55:35 -0800 Subject: lint fix --- app/scripts/lib/local-store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 73482a636..781aea17e 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -34,5 +34,5 @@ module.exports = class ExtensionStore { } function isEmpty(obj) { - return 0 === Object.keys(obj).length + return Object.keys(obj).length === 0 } -- cgit From bda493dc9dc7436e5169a3344d8a72eb3c8d48d8 Mon Sep 17 00:00:00 2001 From: Jeffrey Tong Date: Sun, 11 Mar 2018 10:17:08 -0700 Subject: add comments that need clarification on naming convention --- app/scripts/background.js | 4 +--- app/scripts/lib/notification-manager.js | 14 ++++++++------ app/scripts/popup.js | 1 + 3 files changed, 10 insertions(+), 9 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 6cb80244f..679c2a4e2 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -184,9 +184,7 @@ function setupController (initState) { function triggerUi () { extension.tabs.query({ active: true }, (tabs) => { const currentlyActiveMetamaskTab = tabs.find(tab => openMetamaskTabsIDs[tab.id]) - if (!popupIsOpen && !currentlyActiveMetamaskTab) notificationManager.showPopup((notification) => { - notifcationIsOpen = notification; - }); + if (!popupIsOpen && !currentlyActiveMetamaskTab) notificationManager.showPopup(); notifcationIsOpen = true; }) } diff --git a/app/scripts/lib/notification-manager.js b/app/scripts/lib/notification-manager.js index 351f82694..0087a1dbb 100644 --- a/app/scripts/lib/notification-manager.js +++ b/app/scripts/lib/notification-manager.js @@ -9,29 +9,28 @@ class NotificationManager { // Public // - showPopup (cb) { + showPopup () { this._getPopup((err, popup) => { if (err) throw err + // Bring focus to chrome popup if (popup) { - // bring focus to existing popup + // bring focus to existing chrome popup extension.windows.update(popup.id, { focused: true }) } else { - // create new popup + // create new notification popup extension.windows.create({ url: 'notification.html', type: 'popup', width, height, - }, (win) => { - // naming of popup window and a popup in chrome extension sense is confusing - cb((win.type == 'popup')); }) } }) } closePopup () { + // closes notification popup this._getPopup((err, popup) => { if (err) throw err if (!popup) return @@ -46,6 +45,7 @@ class NotificationManager { _getPopup (cb) { this._getWindows((err, windows) => { if (err) throw err + console.log(windows); cb(null, this._getPopupIn(windows)) }) } @@ -63,6 +63,8 @@ class NotificationManager { _getPopupIn (windows) { return windows ? windows.find((win) => { + // Returns notification popup + console.log(win); return (win && win.type === 'popup') }) : null } diff --git a/app/scripts/popup.js b/app/scripts/popup.js index 11d50ee87..e78981f06 100644 --- a/app/scripts/popup.js +++ b/app/scripts/popup.js @@ -65,6 +65,7 @@ startPopup({ container, connectionStream }, (err, store) => { function closePopupIfOpen (windowType) { if (windowType !== 'notification') { + // should close only chrome popup notificationManager.closePopup() } } -- cgit From 4f853bbd3c374df7c2991d5fdf91112f6f319bb3 Mon Sep 17 00:00:00 2001 From: Jeffrey Tong Date: Sun, 11 Mar 2018 10:18:55 -0700 Subject: remove console log --- app/scripts/lib/notification-manager.js | 2 -- 1 file changed, 2 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/notification-manager.js b/app/scripts/lib/notification-manager.js index 0087a1dbb..1fcb7cf69 100644 --- a/app/scripts/lib/notification-manager.js +++ b/app/scripts/lib/notification-manager.js @@ -45,7 +45,6 @@ class NotificationManager { _getPopup (cb) { this._getWindows((err, windows) => { if (err) throw err - console.log(windows); cb(null, this._getPopupIn(windows)) }) } @@ -64,7 +63,6 @@ class NotificationManager { _getPopupIn (windows) { return windows ? windows.find((win) => { // Returns notification popup - console.log(win); return (win && win.type === 'popup') }) : null } -- cgit From f7138d81e38661ef9262c6a31b66d962238b5c9c Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 12 Mar 2018 11:41:26 -0700 Subject: Add sigRequest for Signature Request --- app/_locales/en/messages.json | 3 +++ 1 file changed, 3 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index f4a8fe943..1ca31427d 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -519,6 +519,9 @@ "signNotice": { "message": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. " }, + "sigRequest": { + "message": "Signature Request" + }, "sigRequested": { "message": "Signature Requested" }, -- cgit From 9fd349d7407d7c33deb317942f7e2835585767c9 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Tue, 13 Mar 2018 09:51:37 -0700 Subject: transactions:state - add a submittedTime stamp so the ui has a better grasp of the time of submission --- app/scripts/lib/tx-state-manager.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app') diff --git a/app/scripts/lib/tx-state-manager.js b/app/scripts/lib/tx-state-manager.js index e75f733aa..ad07c813f 100644 --- a/app/scripts/lib/tx-state-manager.js +++ b/app/scripts/lib/tx-state-manager.js @@ -214,7 +214,11 @@ module.exports = class TransactionStateManager extends EventEmitter { } // should update the status of the tx to 'submitted'. + // and add a time stamp for when it was called setTxStatusSubmitted (txId) { + const txMeta = this.getTx(txId) + txMeta.submittedTime = (new Date()).getTime() + this.updateTx(txMeta, 'txStateManager - add submitted time stamp') this._setTxStatus(txId, 'submitted') } -- cgit From c33eeb0d3e3e6a8179066b6feaed6788e7392930 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 14 Mar 2018 03:21:31 +0800 Subject: update update --- app/_locales/zh_CN/messages.json | 605 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 602 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index fc87384e5..03981bc37 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -1,10 +1,609 @@ { + "accept": { + "message": "接收" + }, + "account": { + "message": "账户" + }, + "accountDetails": { + "message": "账户详情" + }, + "accountName": { + "message": "账户名称" + }, + "address": { + "message": "地址" + }, + "addToken": { + "message": "添加代币" + }, + "amount": { + "message": "数量" + }, + "amountPlusGas": { + "message": "数量 + Gas" + }, + "appDescription": { + "message": "以太坊浏览器插件", + "description": "The description of the application" + }, "appName": { "message": "MetaMask", "description": "The name of the application" }, - "appDescription": { - "message": "以太坊身份管理", - "description": "The description of the application" + "attemptingConnect": { + "message": "正在尝试连接区块链." + }, + "available": { + "message": "可用" + }, + "back": { + "message": "返回" + }, + "balance": { + "message": "余额:" + }, + "balanceIsInsufficientGas": { + "message": "当前余额不足支付Gas" + }, + "beta": { + "message": "测试版" + }, + "betweenMinAndMax": { + "message": "必须大于等于1美元并且小于等于2美元。", + "description": "helper for inputting hex as decimal input" + }, + "borrowDharma": { + "message": "Borrow With Dharma (Beta)" + }, + "buy": { + "message": "购买" + }, + "buyCoinbase": { + "message": "在Coinbase上购买" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase是世界上最流行的买卖比特币,以太币和litecoin的方式。" + }, + "cancel": { + "message": "取消" + }, + "clickCopy": { + "message": "点击复制" + }, + "confirm": { + "message": "确认" + }, + "confirmContract": { + "message": "确认合约" + }, + "confirmPassword": { + "message": "确认密码" + }, + "confirmTransaction": { + "message": "确认交易" + }, + "continueToCoinbase": { + "message": "继续访问Coinbase" + }, + "contractDeployment": { + "message": "合约部署" + }, + "conversionProgress": { + "message": "正在进行转换" + }, + "copiedButton": { + "message": "已复制" + }, + "copiedClipboard": { + "message": "已复制到粘贴板" + }, + "copiedExclamation": { + "message": "已复制!" + }, + "copy": { + "message": "复制" + }, + "copyToClipboard": { + "message": "复制到粘贴板" + }, + "copyButton": { + "message": " 复制 " + }, + "copyPrivateKey": { + "message": "这是你的私钥 (点击复制)" + }, + "create": { + "message": "创建" + }, + "createAccount": { + "message": "创建账户" + }, + "createDen": { + "message": "创建" + }, + "crypto": { + "message": "加密", + "description": "Exchange type (cryptocurrencies)" + }, + "customGas": { + "message": "自定义 Gas" + }, + "customize": { + "message": "自定义" + }, + "customRPC": { + "message": "自定义 RPC" + }, + "defaultNetwork": { + "message": "默认ETH转账网络为 Main Net." + }, + "denExplainer": { + "message": "Your DEN is your password-encrypted storage within MetaMask." + }, + "deposit": { + "message": "存款" + }, + "depositBTC": { + "message": "Deposit your BTC to the address below:" + }, + "depositCoin": { + "message": "Deposit your $1 to the address below", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "存入 Eth" + }, + "depositEther": { + "message": "存入 Ether" + }, + "depositFiat": { + "message": "Deposit with Fiat" + }, + "depositFromAccount": { + "message": "从其他账户存入" + }, + "depositShapeShift": { + "message": "从ShapeShift存入" + }, + "depositShapeShiftExplainer": { + "message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed." + }, + "details": { + "message": "详情" + }, + "directDeposit": { + "message": "直接存入" + }, + "directDepositEther": { + "message": "直接存入 Ether" + }, + "directDepositEtherExplainer": { + "message": "If you already have some Ether, the quickest way to get Ether in your new wallet by direct deposit." + }, + "done": { + "message": "完成" + }, + "edit": { + "message": "编辑" + }, + "editAccountName": { + "message": "编辑账户名称" + }, + "encryptNewDen": { + "message": "Encrypt your new DEN" + }, + "enterPassword": { + "message": "请输入密码" + }, + "etherscanView": { + "message": "View account on Etherscan" + }, + "exchangeRate": { + "message": "Exchange Rate" + }, + "exportPrivateKey": { + "message": "导出私钥" + }, + "exportPrivateKeyWarning": { + "message": "导出私钥需要您自担风险" + }, + "failed": { + "message": "失败" + }, + "fiat": { + "message": "FIAT", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "文件导入失败? 点击这里!", + "description": "Helps user import their account from a JSON file" + }, + "from": { + "message": "来自" + }, + "fromShapeShift": { + "message": "来自 ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "Gas Fee" + }, + "gasLimit": { + "message": "Gas Limit" + }, + "gasLimitCalculation": { + "message": "We calculate the suggested gas limit based on network success rates." + }, + "gasLimitRequired": { + "message": "Gas Limit Required" + }, + "gasLimitTooLow": { + "message": "Gas limit must be at least 21000" + }, + "gasPrice": { + "message": "Gas Price (GWEI)" + }, + "gasPriceCalculation": { + "message": "We calculate the suggested gas prices based on network success rates." + }, + "gasPriceRequired": { + "message": "Gas Price Required" + }, + "getEther": { + "message": "获取 Ether" + }, + "getEtherFromFaucet": { + "message": "Get Ether from a faucet for the $1", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": "must be greater than or equal to $1.", + "description": "helper for inputting hex as decimal input" + }, + "here": { + "message": "这里", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hide": { + "message": "隐藏" + }, + "hideToken": { + "message": "Hide Token" + }, + "hideTokenPrompt": { + "message": "Hide Token?" + }, + "howToDeposit": { + "message": "How would you like to deposit Ether?" + }, + "import": { + "message": "Import", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "Import Account" + }, + "importAnAccount": { + "message": "Import an account" + }, + "importDen": { + "message": "Import Existing DEN" + }, + "imported": { + "message": "Imported", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "infoHelp": { + "message": "Info & Help" + }, + "invalidAddress": { + "message": "Invalid address" + }, + "invalidGasParams": { + "message": "Invalid Gas Parameters" + }, + "invalidInput": { + "message": "Invalid input." + }, + "invalidRequest": { + "message": "Invalid Request" + }, + "jsonFile": { + "message": "JSON File", + "description": "format for importing an account" + }, + "kovan": { + "message": "Kovan Test Network" + }, + "lessThanMax": { + "message": "must be less than or equal to $1.", + "description": "helper for inputting hex as decimal input" + }, + "limit": { + "message": "Limit" + }, + "loading": { + "message": "Loading..." + }, + "loadingTokens": { + "message": "Loading Tokens..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "登出" + }, + "loose": { + "message": "Loose" + }, + "mainnet": { + "message": "以太坊正式网络" + }, + "message": { + "message": "信息" + }, + "min": { + "message": "Minimum" + }, + "myAccounts": { + "message": "My Accounts" + }, + "needEtherInWallet": { + "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." + }, + "needImportFile": { + "message": "You must select a file to import.", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "You must enter a password for the selected file.", + "description": "Password and file needed to import an account" + }, + "networks": { + "message": "Networks" + }, + "newAccount": { + "message": "New Account" + }, + "newAccountNumberName": { + "message": "Account $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "New Contract" + }, + "newPassword": { + "message": "New Password (min 8 chars)" + }, + "newRecipient": { + "message": "New Recipient" + }, + "next": { + "message": "Next" + }, + "noAddressForName": { + "message": "No address has been set for this name." + }, + "noDeposits": { + "message": "No deposits received" + }, + "noTransactionHistory": { + "message": "No transaction history." + }, + "noTransactions": { + "message": "No Transactions" + }, + "notStarted": { + "message": "Not Started" + }, + "oldUI": { + "message": "Old UI" + }, + "oldUIMessage": { + "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." + }, + "or": { + "message": "or", + "description": "choice between creating or importing a new account" + }, + "passwordMismatch": { + "message": "passwords don't match", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordShort": { + "message": "密码不够长", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "请粘贴您的私钥:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "请粘贴您的助记词!" + }, + "pleaseReviewTransaction": { + "message": "Please review your transaction." + }, + "privateKey": { + "message": "Private Key", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." + }, + "privateNetwork": { + "message": "Private Network" + }, + "qrCode": { + "message": "Show QR Code" + }, + "readdToken": { + "message": "You can add this token back in the future by going go to “Add token” in your accounts options menu." + }, + "readMore": { + "message": "Read more here." + }, + "receive": { + "message": "Receive" + }, + "recipientAddress": { + "message": "Recipient Address" + }, + "refundAddress": { + "message": "Your Refund Address" + }, + "rejected": { + "message": "Rejected" + }, + "required": { + "message": "Required" + }, + "retryWithMoreGas": { + "message": "Retry with a higher gas price here" + }, + "revert": { + "message": "Revert" + }, + "rinkeby": { + "message": "Rinkeby 测试网络" + }, + "ropsten": { + "message": "Ropsten 测试网络" + }, + "sampleAccountName": { + "message": "例如. 我的账户", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "Save" + }, + "saveAsFile": { + "message": "Save as File", + "description": "Account export process" + }, + "selectService": { + "message": "Select Service" + }, + "send": { + "message": "Send" + }, + "sendTokens": { + "message": "Send Tokens" + }, + "sendTokensAnywhere": { + "message": "Send Tokens to anyone with an Ethereum account" + }, + "settings": { + "message": "Settings" + }, + "shapeshiftBuy": { + "message": "Buy with Shapeshift" + }, + "showPrivateKeys": { + "message": "Show Private Keys" + }, + "showQRCode": { + "message": "Show QR Code" + }, + "sign": { + "message": "Sign" + }, + "signMessage": { + "message": "Sign Message" + }, + "signNotice": { + "message": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. " + }, + "sigRequest": { + "message": "Signature Request" + }, + "sigRequested": { + "message": "Signature Requested" + }, + "status": { + "message": "状态" + }, + "submit": { + "message": "提交" + }, + "takesTooLong": { + "message": "花费太长时间?" + }, + "testFaucet": { + "message": "Test Faucet" + }, + "to": { + "message": "To" + }, + "toETHviaShapeShift": { + "message": "$1 to ETH via ShapeShift", + "description": "system will fill in deposit type in start of message" + }, + "tokenBalance": { + "message": "Your Token Balance is:" + }, + "total": { + "message": "总量" + }, + "transactionMemo": { + "message": "Transaction memo (optional)" + }, + "transactionNumber": { + "message": "Transaction Number" + }, + "transfers": { + "message": "Transfers" + }, + "troubleTokenBalances": { + "message": "We had trouble loading your token balances. You can view them ", + "description": "Followed by a link (here) to view token balances" + }, + "typePassword": { + "message": "请输入密码" + }, + "uiWelcome": { + "message": "Welcome to the New UI (Beta)" + }, + "uiWelcomeMessage": { + "message": "You are now using the new Metamask UI. Take a look around, try out new features like sending tokens, and let us know if you have any issues." + }, + "unavailable": { + "message": "Unavailable" + }, + "unknown": { + "message": "未知" + }, + "unknownNetwork": { + "message": "未知私有网络" + }, + "unknownNetworkId": { + "message": "未知网络ID" + }, + "usaOnly": { + "message": "USA only", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "Used by a variety of different clients" + }, + "viewAccount": { + "message": "View Account" + }, + "warning": { + "message": "警告" + }, + "whatsThis": { + "message": "这是什么?" + }, + "yourSigRequested": { + "message": "Your signature is being requested" + }, + "youSign": { + "message": "You are signing" } } -- cgit From c15d3e0e237f6b264aab1a7e38fede641d964328 Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Tue, 13 Mar 2018 22:04:13 +0100 Subject: Add French translation --- app/_locales/fr/messages.json | 609 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 609 insertions(+) create mode 100644 app/_locales/fr/messages.json (limited to 'app') diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json new file mode 100644 index 000000000..6674fb1db --- /dev/null +++ b/app/_locales/fr/messages.json @@ -0,0 +1,609 @@ +{ + "accept": { + "message": "Accepter" + }, + "account": { + "message": "Compte" + }, + "accountDetails": { + "message": "Détails du compte" + }, + "accountName": { + "message": "Nom du compte" + }, + "address": { + "message": "Adresse" + }, + "addToken": { + "message": "Ajouter un jeton" + }, + "amount": { + "message": "Montant" + }, + "amountPlusGas": { + "message": "Montant + Gaz" + }, + "appDescription": { + "message": "Ethereum navigateur extension", + "description": "La description de l'application" + }, + "appName": { + "message": "MetaMask", + "description": "Le nom de l'application" + }, + "attemptingConnect": { + "message": "Tentative de connexion à blockchain." + }, + "available": { + "message": "Disponible" + }, + "back": { + "message": "Retour" + }, + "balance": { + "message": "Balance:" + }, + "balanceIsInsufficientGas": { + "message": "Solde insuffisant pour le total actuel de gaz" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "doit être supérieur ou égal à 1 $ et inférieur ou égal à 2 $", + "description": "helper pour la saisie hexadécimale en entrée décimale" + }, + "borrowDharma": { + "message": "Emprunter avec Dharma (Bêta)" + }, + "buy": { + "message": "Acheter" + }, + "buyCoinbase": { + "message": "Acheter sur Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase est le moyen le plus populaire au monde d'acheter et de vendre du bitcoin, de l'ethereum et du litecoin." + }, + "cancel": { + "message": "Annuler" + }, + "clickCopy": { + "message": "Cliquer pour copier" + }, + "confirm": { + "message": "Confirmer" + }, + "confirmContract": { + "message": "Confirmer le contrat" + }, + "confirmPassword": { + "message": "Confirmer le mot de passe" + }, + "confirmTransaction": { + "message": "Confirmer la transaction" + }, + "continueToCoinbase": { + "message": "Continuer vers Coinbase" + }, + "contractDeployment": { + "message": "Déploiement de contrat" + }, + "conversionProgress": { + "message": "Conversion en cours" + }, + "copiedButton": { + "message": "Copié" + }, + "copiedClipboard": { + "message": "Copié dans le Presse-papiers" + }, + "copiedExclamation": { + "message": "Copié!" + }, + "copy": { + "message": "Copier" + }, + "copyToClipboard": { + "message": "Copier dans le presse-papier" + }, + "copyButton": { + "message": " Copier " + }, + "copyPrivateKey": { + "message": "Ceci est votre clé privée (cliquez pour copier)" + }, + "create": { + "message": "Créer" + }, + "createAccount": { + "message": "Créer un compte" + }, + "createDen": { + "message": "Créer" + }, + "crypto": { + "message": "Crypto", + "description": "Type d'échange (cryptocurrencies)" + }, + "customGas": { + "message": "Personnaliser le Gaz" + }, + "customize": { + "message": "Personnaliser" + }, + "customRPC": { + "message": "RPC personnalisé" + }, + "defaultNetwork": { + "message": "Le réseau par défaut pour les transactions Ether est Main Net." + }, + "denExplainer": { + "message": "Votre DEN est votre stockage crypté par mot de passe dans MetaMask." + }, + "deposit": { + "message": "Dépôt" + }, + "depositBTC": { + "message": "Déposez votre BTC à l'adresse ci-dessous:" + }, + "depositCoin": { + "message": "Déposez votre $1 à l'adresse ci-dessous", + "description": "Indique à l'utilisateur quelle pièce ils ont choisi de déposer avec shapeshift" + }, + "depositEth": { + "message": "Dépôt Eth" + }, + "depositEther": { + "message": "Dépôt Ether" + }, + "depositFiat": { + "message": "Dépôt avec Fiat" + }, + "depositFromAccount": { + "message": "Dépôt d'un autre compte" + }, + "depositShapeShift": { + "message": "Déposez avec ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Si vous possédez d'autres crypto-monnaies, vous pouvez échanger et déposer Ether directement dans votre portefeuille MetaMask. Aucun compte requis." + }, + "details": { + "message": "Détails du message" + }, + "directDeposit": { + "message": "Dépôt direct" + }, + "directDepositEther": { + "message": "Dépôt direct d'Ether" + }, + "directDepositEtherExplainer": { + "message": "Si vous avez déjà de l'Ether, le moyen le plus rapide d'obtenir des Ether dans votre nouveau portefeuille par dépôt direct." + }, + "done": { + "message": "Fait" + }, + "edit": { + "message": "Modifier" + }, + "editAccountName": { + "message": "Modifier le nom du compte" + }, + "encryptNewDen": { + "message": "Chiffrer votre nouveau DEN" + }, + "enterPassword": { + "message": "Entrer le mot de passe" + }, + "etherscanView": { + "message": "Afficher le compte sur Etherscan" + }, + "exchangeRate": { + "message": "Taux de change" + }, + "exportPrivateKey": { + "message": "Exporter la clé privée" + }, + "exportPrivateKeyWarning": { + "message": "Exporter les clés privées à vos risques et périls." + }, + "failed": { + "message": "Échec" + }, + "fiat": { + "message": "FIAT", + "description": "Type d'échange" + }, + "fileImportFail": { + "message": "L'importation de fichier ne fonctionne pas? Cliquez ici!", + "description": "Aide l'utilisateur à importer son compte à partir d'un fichier JSON" + }, + "from": { + "message": "message de" + }, + "fromShapeShift": { + "message": "ShapeShift de" + }, + "gas": { + "message": "Gas", + "description": "Indication courte du coût du gaz" + }, + "gasFee": { + "message": "Frais de gaz" + }, + "gasLimit": { + "message": "Limite de gaz" + }, + "gasLimitCalculation": { + "message": "Nous calculons la limite de gaz suggérée en fonction des taux de réussite du réseau." + }, + "gasLimitRequired": { + "message": "Limite de gaz requise" + }, + "gasLimitTooLow": { + "message": "La limite de gaz doit être d'au moins 21000" + }, + "gasPrice": { + "message": "Prix du gaz (GWEI)" + }, + "gasPriceCalculation": { + "message": "Nous calculons les prix du gaz proposés en fonction des taux de réussite du réseau." + }, + "gasPriceRequired": { + "message": "Prix du gaz requis" + }, + "getEther": { + "message": "Obtenir des Ether" + }, + "getEtherFromFaucet": { + "message": "Obtenir de l'Ether d'une faucet pour $1", + "description": "Affiche le nom du réseau pour la faucet d'Ether" + }, + "greaterThanMin": { + "message": "doit être supérieur ou égal à $1.", + "description": "helper pour la saisie hexadécimale en entrée décimale" + }, + "here": { + "message": "ici", + "description": "comme dans -cliquer ici- pour plus d'informations (en rapport avec troubleTokenBalances)" + }, + "hide": { + "message": "Cacher" + }, + "hideToken": { + "message": "Masquer le jeton" + }, + "hideTokenPrompt": { + "message": "Masquer le jeton?" + }, + "howToDeposit": { + "message": "Comment voulez-vous déposer de l'Ether?" + }, + "import": { + "message": "Importer", + "description": "Bouton pour importer un compte à partir d'un fichier sélectionné" + }, + "importAccount": { + "message": "Importer compte" + }, + "importAnAccount": { + "message": "Importer un compte" + }, + "importDen": { + "message": "Importer DEN existant" + }, + "imported": { + "message": "Importé", + "description": "statut indiquant qu'un compte a été entièrement chargé dans le trousseau de clés" + }, + "infoHelp": { + "message": "Info & Aide" + }, + "invalidAddress": { + "message": "Adresse invalide" + }, + "invalidGasParams": { + "message": "Paramètres de gaz invalides" + }, + "invalidInput": { + "message": "Entrée non valide." + }, + "invalidRequest": { + "message": "Requête invalide" + }, + "jsonFile": { + "message": "Fichier JSON", + "description": "format d'importation d'un compte" + }, + "kovan": { + "message": "Réseau de test Kovan" + }, + "lessThanMax": { + "message": "doit être inférieur ou égal à $1.", + "description": "helper pour la saisie hexadécimale en entrée décimale" + }, + "limit": { + "message": "Limite" + }, + "loading": { + "message": "Chargement..." + }, + "loadingTokens": { + "message": "Chargement des jetons..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "Déconnexion" + }, + "loose": { + "message": "Vacant" + }, + "mainnet": { + "message": "Réseau principal Ethereum" + }, + "message": { + "message": "Message" + }, + "min": { + "message": "Minimum" + }, + "myAccounts": { + "message": "Mes comptes" + }, + "needEtherInWallet": { + "message": "Pour interagir avec des applications décentralisées à l'aide de MetaMask, vous aurez besoin d'Ether dans votre portefeuille." + }, + "needImportFile": { + "message": "Vous devez sélectionner un fichier à importer.", + "description": "L'utilisateur doit ajouter un fichier pour continuer" + }, + "needImportPassword": { + "message": "Vous devez entrer un mot de passe pour le fichier sélectionné.", + "description": "Mot de passe et fichier requis pour importer un compte" + }, + "networks": { + "message": "Réseaux" + }, + "newAccount": { + "message": "Nouveau compte" + }, + "newAccountNumberName": { + "message": "Compte $1", + "description": "Nom par défaut du compte suivant à créer sur l'écran de création de compte" + }, + "newContract": { + "message": "Nouveau contrat" + }, + "newPassword": { + "message": "Nouveau mot de passe (min 8 caractères)" + }, + "newRecipient": { + "message": "Nouveau destinataire" + }, + "next": { + "message": "Suivant" + }, + "noAddressForName": { + "message": "Aucune adresse n'a été définie pour ce nom." + }, + "noDeposits": { + "message": "Aucun dépôt reçu" + }, + "noTransactionHistory": { + "message": "Aucun historique de transaction." + }, + "noTransactions": { + "message": "Aucune transaction" + }, + "notStarted": { + "message": "Pas démarré" + }, + "oldUI": { + "message": "Ancienne interface utilisateur" + }, + "oldUIMessage": { + "message": "Vous êtes revenu à l'ancienne interface utilisateur.Vous pouvez revenir à la nouvelle interface via l'option dans le menu déroulant en haut à droite." + }, + "or": { + "message": "ou", + "description": "choix entre la création ou l'importation d'un nouveau compte" + }, + "passwordMismatch": { + "message": "les mots de passe ne correspondent pas", + "description": "dans le processus de création de mot de passe, les deux nouveaux champs de mot de passe ne correspondent pas" + }, + "passwordShort": { + "message": "mot de passe pas assez long", + "description": "dans le processus de création de mot de passe, le mot de passe n'est pas assez long pour être sécurisé" + }, + "pastePrivateKey": { + "message": "Collez votre seed phrase privée ici:", + "description": "Pour l'importation d'un compte à partir d'une clé privée" + }, + "pasteSeed": { + "message": "Collez votre seed phrase ici!" + }, + "pleaseReviewTransaction": { + "message": "Veuillez vérifier votre transaction." + }, + "privateKey": { + "message": "Clé privée", + "description": "sélectionnez ce type de fichier à utiliser pour importer un compte" + }, + "privateKeyWarning": { + "message": "Avertissement: Ne divulguez jamais cette clé, quiconque avec vos clés privées peut voler tous les actifs de votre compte." + }, + "privateNetwork": { + "message": "Réseau privé" + }, + "qrCode": { + "message": "Afficher le QR Code" + }, + "readdToken": { + "message": "Vous pouvez ajouter ce jeton dans le futur en allant sur “Ajouter un jeton” dans le menu des options de votre compte." + }, + "readMore": { + "message": "En savoir plus ici." + }, + "receive": { + "message": "Recevoir" + }, + "recipientAddress": { + "message": "Adresse du destinataire" + }, + "refundAddress": { + "message": "Votre adresse de remboursement" + }, + "rejected": { + "message": "Rejeté" + }, + "required": { + "message": "Obligatoire" + }, + "retryWithMoreGas": { + "message": "Réessayez avec un prix plus élevé du gaz ici" + }, + "revert": { + "message": "Rétablir" + }, + "rinkeby": { + "message": "Réseau de test Rinkeby" + }, + "ropsten": { + "message": "Réseau de test Ropsten" + }, + "sampleAccountName": { + "message": "Par exemple mon nouveau compte", + "description": "Aidez l'utilisateur à comprendre le concept d'ajout d'un nom lisible par un humain à son compte" + }, + "save": { + "message": "Enregistrer" + }, + "saveAsFile": { + "message": "Enregistrer dans un fichier", + "description": "Processus d'exportation de compte" + }, + "selectService": { + "message": "Sélectionner un service" + }, + "send": { + "message": "Envoyé" + }, + "sendTokens": { + "message": "Envoyer des jetons" + }, + "sendTokensAnywhere": { + "message": "Envoyer des jetons à toute personne possédant un compte Ethereum" + }, + "settings": { + "message": "Paramètres" + }, + "shapeshiftBuy": { + "message": "Acheter avec Shapeshift" + }, + "showPrivateKeys": { + "message": "Afficher les clés privées" + }, + "showQRCode": { + "message": "Afficher le QR Code" + }, + "sign": { + "message": "Signer" + }, + "signMessage": { + "message": "Signer le message" + }, + "signNotice": { + "message": "La signature de ce message peut avoir des effets secondaires \ndangereux. Signer uniquement les messages de \nsites auxquels vous faites entièrement confiance avec votre compte.\n Cette méthode dangereuse sera supprimée dans une future version." + }, + "sigRequest": { + "message": "Demande de signature" + }, + "sigRequested": { + "message": "Signature demandée" + }, + "status": { + "message": "Statut" + }, + "submit": { + "message": "Soumettre" + }, + "takesTooLong": { + "message": "Prend trop de temps?" + }, + "testFaucet": { + "message": "Test Faucet" + }, + "to": { + "message": "Destinataire" + }, + "toETHviaShapeShift": { + "message": "$1 à ETH via ShapeShift", + "description": "le système remplira le type de dépôt au début du message" + }, + "tokenBalance": { + "message": "Votre solde de jeton est:" + }, + "total": { + "message": "Total" + }, + "transactionMemo": { + "message": "Mémo de transaction (optionnel)" + }, + "transactionNumber": { + "message": "Numéro de transaction" + }, + "transfers": { + "message": "Transferts" + }, + "troubleTokenBalances": { + "message": "Nous avons eu du mal à charger votre balance de jetons, vous pouvez la consulter ", + "description": "Suivi par un lien (ici) pour voir les soldes des jetons" + }, + "typePassword": { + "message": "Entrez votre mot de passe" + }, + "uiWelcome": { + "message": "Bienvenue dans la nouvelle interface utilisateur (Beta)" + }, + "uiWelcomeMessage": { + "message": "Vous utilisez maintenant la nouvelle interface utilisateur Metamask Jetez un coup d'oeil, essayez de nouvelles fonctionnalités comme l'envoi de jetons, et faites-nous savoir si vous avez des problèmes." + }, + "unavailable": { + "message": "Indisponible" + }, + "unknown": { + "message": "Inconnu" + }, + "unknownNetwork": { + "message": "Réseau privé inconnu" + }, + "unknownNetworkId": { + "message": "ID réseau inconnu" + }, + "usaOnly": { + "message": "Etats-Unis seulement", + "description": "Utiliser cet échange est limité aux personnes à l'intérieur des Etats-Unis" + }, + "usedByClients": { + "message": "Utilisé par une variété de clients différents" + }, + "viewAccount": { + "message": "Afficher le compte" + }, + "warning": { + "message": "Avertissement" + }, + "whatsThis": { + "message": "Qu'est-ce que c'est?" + }, + "yourSigRequested": { + "message": "Votre signature est demandée" + }, + "youSign": { + "message": "Vous signez" + } +} \ No newline at end of file -- cgit From 9d7640996aa9b63fb6c9271d7e0698e7acdc559e Mon Sep 17 00:00:00 2001 From: frankiebee Date: Tue, 13 Mar 2018 14:42:26 -0700 Subject: transactions - return the txMeta in retryTransaction --- app/scripts/controllers/transactions.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index a3f731b6e..ab07dde62 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -3,7 +3,7 @@ const ObservableStore = require('obs-store') const ethUtil = require('ethereumjs-util') const Transaction = require('ethereumjs-tx') const EthQuery = require('ethjs-query') -const TransactionStateManager = require('../lib/tx-state-manager') +const TransactionStateManger = require('../lib/tx-state-manager') const TxGasUtil = require('../lib/tx-gas-utils') const PendingTransactionTracker = require('../lib/pending-tx-tracker') const NonceTracker = require('../lib/nonce-tracker') @@ -37,7 +37,7 @@ module.exports = class TransactionController extends EventEmitter { this.query = new EthQuery(this.provider) this.txGasUtil = new TxGasUtil(this.provider) - this.txStateManager = new TransactionStateManager({ + this.txStateManager = new TransactionStateManger({ initState: opts.initState, txHistoryLimit: opts.txHistoryLimit, getNetwork: this.getNetwork.bind(this), @@ -227,6 +227,7 @@ module.exports = class TransactionController extends EventEmitter { }) this.addTx(txMeta) this.emit('newUnapprovedTx', txMeta) + return txMeta } async updateTransaction (txMeta) { -- cgit From d195cfab50b42d26f3cf9436845838e075e959de Mon Sep 17 00:00:00 2001 From: frankiebee Date: Tue, 13 Mar 2018 15:13:05 -0700 Subject: transactions - insure if a to field in tx params has a truthy valu that it is a valid addres and if it is falsy that it is not null to fix issue #3509 --- app/scripts/lib/tx-gas-utils.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/tx-gas-utils.js b/app/scripts/lib/tx-gas-utils.js index 6f6ff7852..e61db3332 100644 --- a/app/scripts/lib/tx-gas-utils.js +++ b/app/scripts/lib/tx-gas-utils.js @@ -4,7 +4,7 @@ const { BnMultiplyByFraction, bnToHex, } = require('./util') -const addHexPrefix = require('ethereumjs-util').addHexPrefix +const {addHexPrefix, isValidAddress} = require('ethereumjs-util') const SIMPLE_GAS_COST = '0x5208' // Hex for 21000, cost of a simple send. /* @@ -101,6 +101,12 @@ module.exports = class TxGasUtil { async validateTxParams (txParams) { this.validateRecipient(txParams) + if ('to' in txParams) { + if ( txParams.to === null ) delete txParams.to + else if ( txParams.to !== undefined && !isValidAddress(txParams.to) ) { + throw new Error(`Invalid transaction value of ${txParams.to} not a valid to address.`) + } + } if ('value' in txParams) { const value = txParams.value.toString() if (value.includes('-')) { -- cgit From c465d510b100fdf9926413751df04cbd59de68eb Mon Sep 17 00:00:00 2001 From: frankiebee Date: Tue, 13 Mar 2018 15:26:45 -0700 Subject: fix error message --- app/scripts/lib/tx-gas-utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/tx-gas-utils.js b/app/scripts/lib/tx-gas-utils.js index e61db3332..3b0494e04 100644 --- a/app/scripts/lib/tx-gas-utils.js +++ b/app/scripts/lib/tx-gas-utils.js @@ -104,7 +104,7 @@ module.exports = class TxGasUtil { if ('to' in txParams) { if ( txParams.to === null ) delete txParams.to else if ( txParams.to !== undefined && !isValidAddress(txParams.to) ) { - throw new Error(`Invalid transaction value of ${txParams.to} not a valid to address.`) + throw new Error(`Invalid recipient address`) } } if ('value' in txParams) { -- cgit From e5a83d3f1a3ebe9115c07e162ee4bca0f157b8b1 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Tue, 13 Mar 2018 15:32:03 -0700 Subject: transactions move validation of the to field to validateRecipient --- app/scripts/lib/tx-gas-utils.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/tx-gas-utils.js b/app/scripts/lib/tx-gas-utils.js index 3b0494e04..a8f473a88 100644 --- a/app/scripts/lib/tx-gas-utils.js +++ b/app/scripts/lib/tx-gas-utils.js @@ -101,12 +101,6 @@ module.exports = class TxGasUtil { async validateTxParams (txParams) { this.validateRecipient(txParams) - if ('to' in txParams) { - if ( txParams.to === null ) delete txParams.to - else if ( txParams.to !== undefined && !isValidAddress(txParams.to) ) { - throw new Error(`Invalid recipient address`) - } - } if ('value' in txParams) { const value = txParams.value.toString() if (value.includes('-')) { @@ -119,12 +113,14 @@ module.exports = class TxGasUtil { } } validateRecipient (txParams) { - if (txParams.to === '0x') { + if (txParams.to === '0x' || txParams.to === null ) { if (txParams.data) { delete txParams.to } else { throw new Error('Invalid recipient address') } + } else if ( txParams.to !== undefined && !isValidAddress(txParams.to) ) { + throw new Error('Invalid recipient address') } return txParams } -- cgit From 22cd7882038d05e51c5b76f2f4c76c15b2fd89f6 Mon Sep 17 00:00:00 2001 From: kumavis Date: Tue, 13 Mar 2018 15:39:33 -0700 Subject: tx-gas-utils - fix code style --- app/scripts/lib/tx-gas-utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/tx-gas-utils.js b/app/scripts/lib/tx-gas-utils.js index a8f473a88..0fa9dd8d4 100644 --- a/app/scripts/lib/tx-gas-utils.js +++ b/app/scripts/lib/tx-gas-utils.js @@ -4,7 +4,7 @@ const { BnMultiplyByFraction, bnToHex, } = require('./util') -const {addHexPrefix, isValidAddress} = require('ethereumjs-util') +const { addHexPrefix, isValidAddress } = require('ethereumjs-util') const SIMPLE_GAS_COST = '0x5208' // Hex for 21000, cost of a simple send. /* -- cgit From 5fa8e83b3cf204e154507adf594a4bbb1fa7eee3 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 14 Mar 2018 11:13:52 +0800 Subject: fix fix --- app/_locales/zh_CN/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index 03981bc37..1d72f0e0f 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -50,7 +50,7 @@ "message": "测试版" }, "betweenMinAndMax": { - "message": "必须大于等于1美元并且小于等于2美元。", + "message": "必须大于等于 $1 并且小于等于 $2 。", "description": "helper for inputting hex as decimal input" }, "borrowDharma": { -- cgit From 8299ab438a3f2ea1106c21b37dbc5c561b62e023 Mon Sep 17 00:00:00 2001 From: Mami Mordovets Date: Wed, 14 Mar 2018 14:33:26 +0900 Subject: Translation to Japanese --- app/_locales/ja/messages.json | 605 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 602 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json index f15d06ff4..bab8d3b95 100644 --- a/app/_locales/ja/messages.json +++ b/app/_locales/ja/messages.json @@ -1,10 +1,609 @@ { + "accept": { + "message": "承認" + }, + "account": { + "message": "アカウント" + }, + "accountDetails": { + "message": "アカウント詳細" + }, + "accountName": { + "message": "アカウント名" + }, + "address": { + "message": "アドレス" + }, + "addToken": { + "message": "トークンを追加" + }, + "amount": { + "message": "金額" + }, + "amountPlusGas": { + "message": "金額 + ガス" + }, + "appDescription": { + "message": "Ethereumのブラウザ・エクステンション", + "description": "The description of the application" + }, "appName": { "message": "MetaMask", "description": "The name of the application" }, - "appDescription": { - "message": "EthereumのID管理", - "description": "The description of the application" + "attemptingConnect": { + "message": "ブロックチェーンに接続中" + }, + "available": { + "message": "有効" + }, + "back": { + "message": "戻る" + }, + "balance": { + "message": "残高:" + }, + "balanceIsInsufficientGas": { + "message": "現在のガス総量に対して残高が不足しています" + }, + "beta": { + "message": "ベータ版" + }, + "betweenMinAndMax": { + "message": " $1以上 $2以下にして下さい。", + "description": "helper for inputting hex as decimal input" + }, + "borrowDharma": { + "message": "Dharmaで借りる(ベータ版)" + }, + "buy": { + "message": "購入" + }, + "buyCoinbase": { + "message": "Coinbaseで購入" + }, + "buyCoinbaseExplainer": { + "message": "Coinbaseは、世界で最もポピュラーなBitcoin、Ethereum、そしてLitecoinの取引所です。" + }, + "cancel": { + "message": "キャンセル" + }, + "clickCopy": { + "message": "クリックしてコピー" + }, + "confirm": { + "message": "確認" + }, + "confirmContract": { + "message": "コントラクトの確認" + }, + "confirmPassword": { + "message": "パスワードの確認" + }, + "confirmTransaction": { + "message": "トランザクションの確認" + }, + "continueToCoinbase": { + "message": "Coinbaseで続行" + }, + "contractDeployment": { + "message": "コントラクトのデプロイ" + }, + "conversionProgress": { + "message": "変換中" + }, + "copiedButton": { + "message": "コピー完了" + }, + "copiedClipboard": { + "message": "クリップボードへコピー済み" + }, + "copiedExclamation": { + "message": "コピー完了!" + }, + "copy": { + "message": "コピー" + }, + "copyToClipboard": { + "message": "クリップボードへコピー" + }, + "copyButton": { + "message": " コピー " + }, + "copyPrivateKey": { + "message": "これはあなたの秘密鍵です(クリックでコピー)" + }, + "create": { + "message": "作成" + }, + "createAccount": { + "message": "アカウント作成" + }, + "createDen": { + "message": "作成" + }, + "crypto": { + "message": "暗号通貨", + "description": "Exchange type (cryptocurrencies)" + }, + "customGas": { + "message": "ガスのカスタマイズ" + }, + "customize": { + "message": "カスタマイズ" + }, + "customRPC": { + "message": "カスタムRPC" + }, + "defaultNetwork": { + "message": "Etherトランザクションのデフォルトのネットワークはメインネットです。" + }, + "denExplainer": { + "message": "DENとは、あなたのパスワードが暗号化されたMetaMask内のストレージです。" + }, + "deposit": { + "message": "デポジット" + }, + "depositBTC": { + "message": "あなたのBTCを次のアドレスへデポジット:" + }, + "depositCoin": { + "message": "あなたの $1を次のアドレスへデポジット", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "ETHをデポジット" + }, + "depositEther": { + "message": "Etherをデポジット" + }, + "depositFiat": { + "message": "法定通貨でデポジット" + }, + "depositFromAccount": { + "message": "別のアカウントからデポジット" + }, + "depositShapeShift": { + "message": "ShapeShiftでデポジット" + }, + "depositShapeShiftExplainer": { + "message": "あなたが他の暗号通貨を持っているなら、Etherにトレードしてダイレクトにメタマスクウォレットへのデポジットが可能です。アカウント作成は不要。" + }, + "details": { + "message": "詳細" + }, + "directDeposit": { + "message": "ダイレクトデポジット" + }, + "directDepositEther": { + "message": "Etherをダイレクトデポジット" + }, + "directDepositEtherExplainer": { + "message": "あなたがEtherをすでにお持ちなら、ダイレクトデポジットは新しいウォレットにEtherを入手する最も迅速な方法です。" + }, + "done": { + "message": "完了" + }, + "edit": { + "message": "編集" + }, + "editAccountName": { + "message": "アカウント名を編集" + }, + "encryptNewDen": { + "message": "新しいDENを暗号化する" + }, + "enterPassword": { + "message": "パスワードを入力" + }, + "etherscanView": { + "message": "Etherscanでアカウントを見る" + }, + "exchangeRate": { + "message": "交換レート" + }, + "exportPrivateKey": { + "message": "秘密鍵のエクスポート" + }, + "exportPrivateKeyWarning": { + "message": "あなた自身の責任で秘密鍵をエクスポート" + }, + "failed": { + "message": "失敗" + }, + "fiat": { + "message": "法定通貨", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "ファイルがインポートされなければ、ここをクリック!", + "description": "Helps user import their account from a JSON file" + }, + "from": { + "message": "送信元" + }, + "fromShapeShift": { + "message": "ShapeShiftから" + }, + "gas": { + "message": "ガス", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "ガス料金" + }, + "gasLimit": { + "message": "ガスリミット" + }, + "gasLimitCalculation": { + "message": "ネットワークの成功率を基にして、ガスリミットを提案しています。" + }, + "gasLimitRequired": { + "message": "必要ガスリミット" + }, + "gasLimitTooLow": { + "message": "ガスリミットは最低21000です。" + }, + "gasPrice": { + "message": "ガスプライス (GWEI)" + }, + "gasPriceCalculation": { + "message": "ネットワークの成功率を基にして、ガスプライスを提案しています。" + }, + "gasPriceRequired": { + "message": "必要ガスプライス" + }, + "getEther": { + "message": "Etherをゲット" + }, + "getEtherFromFaucet": { + "message": "フォーセットで $1のEtherをゲット", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": " $1以上にして下さい。", + "description": "helper for inputting hex as decimal input" + }, + "here": { + "message": "ここ", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hide": { + "message": "隠す" + }, + "hideToken": { + "message": "トークンを隠す" + }, + "hideTokenPrompt": { + "message": "トークンを隠しますか??" + }, + "howToDeposit": { + "message": "どのようにEtherをデポジットしますか?" + }, + "import": { + "message": "インポート", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "アカウントのインポート" + }, + "importAnAccount": { + "message": "アカウントをインポート" + }, + "importDen": { + "message": "既存のDENをインポート" + }, + "imported": { + "message": "インポート完了", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "infoHelp": { + "message": "インフォメーションとヘルプ" + }, + "invalidAddress": { + "message": "アドレスが無効です。" + }, + "invalidGasParams": { + "message": "ガスのパラメーターが無効です。" + }, + "invalidInput": { + "message": "インプットが無効です。" + }, + "invalidRequest": { + "message": "リクエストが無効です。" + }, + "jsonFile": { + "message": "JSONファイル", + "description": "format for importing an account" + }, + "kovan": { + "message": "Kovanテストネットワーク" + }, + "lessThanMax": { + "message": " $1以下にして下さい。", + "description": "helper for inputting hex as decimal input" + }, + "limit": { + "message": "リミット" + }, + "loading": { + "message": "ロード中..." + }, + "loadingTokens": { + "message": "トークンをロード中..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "ログアウト" + }, + "loose": { + "message": "外部秘密鍵" + }, + "mainnet": { + "message": "Ethereumメインネットワーク" + }, + "message": { + "message": "メッセージ" + }, + "min": { + "message": "ミニマム" + }, + "myAccounts": { + "message": "マイアカウント" + }, + "needEtherInWallet": { + "message": "MetaMaskを使って分散型アプリケーションと対話するためには、あなたのウォレットにEtherが必要になります。" + }, + "needImportFile": { + "message": "インポートするファイルを選択してください。", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "選択したファイルのパスワードを入力してください。", + "description": "Password and file needed to import an account" + }, + "networks": { + "message": "ネットワーク" + }, + "newAccount": { + "message": "新規アカウント" + }, + "newAccountNumberName": { + "message": "アカウント $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "新規コントラクト" + }, + "newPassword": { + "message": "新規パスワード(最低8文字)" + }, + "newRecipient": { + "message": "新規受取人" + }, + "next": { + "message": "次へ" + }, + "noAddressForName": { + "message": "この名前にはアドレスが設定されていません。" + }, + "noDeposits": { + "message": "デポジットがありません。" + }, + "noTransactionHistory": { + "message": "トランザクション履歴がありません。" + }, + "noTransactions": { + "message": "トランザクションがありません。" + }, + "notStarted": { + "message": "スタートしていません。" + }, + "oldUI": { + "message": "旧UI" + }, + "oldUIMessage": { + "message": "旧UIを表示しています。右上のドロップダウンメニューのオプションより、新UIへ切り替えが可能です。" + }, + "or": { + "message": "または", + "description": "choice between creating or importing a new account" + }, + "passwordMismatch": { + "message": "パスワードが一致しません。", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordShort": { + "message": "パスワードが短すぎます。", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "秘密鍵をここにペーストして下さい:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "シードをここにペーストして下さい!" + }, + "pleaseReviewTransaction": { + "message": "トランザクションをレビューして下さい。" + }, + "privateKey": { + "message": "秘密鍵", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "警告: この鍵は絶対に公開しないで下さい。公開すると、誰でもあなたのアカウント内の資産を盗むことができてしまいます。" + }, + "privateNetwork": { + "message": "プライベート・ネットワーク" + }, + "qrCode": { + "message": "QRコードを表示" + }, + "readdToken": { + "message": "アカウントのオプションメニューから「トークンを追加」すれば、将来このトークンを追加し直すことができます。" + }, + "readMore": { + "message": "もっと読む" + }, + "receive": { + "message": "受け取る" + }, + "recipientAddress": { + "message": "受取人アドレス" + }, + "refundAddress": { + "message": "あなたの返金先アドレス" + }, + "rejected": { + "message": "拒否されました" + }, + "required": { + "message": "必要です。" + }, + "retryWithMoreGas": { + "message": "より高いガスプライスで再度試して下さい。" + }, + "revert": { + "message": "元に戻す" + }, + "rinkeby": { + "message": "Rinkebyテストネットワーク" + }, + "ropsten": { + "message": "Ropstenテストネットワーク" + }, + "sampleAccountName": { + "message": "例.新しいマイアカウント", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "保存" + }, + "saveAsFile": { + "message": "ファイルとして保存", + "description": "Account export process" + }, + "selectService": { + "message": "サービスを選択" + }, + "send": { + "message": "送信" + }, + "sendTokens": { + "message": "トークンを送る" + }, + "sendTokensAnywhere": { + "message": "イーサリアムのアカウントを持っている人にトークンを送る" + }, + "settings": { + "message": "設定" + }, + "shapeshiftBuy": { + "message": "Shapeshiftで買う" + }, + "showPrivateKeys": { + "message": "秘密鍵を表示" + }, + "showQRCode": { + "message": "QRコードを表示" + }, + "sign": { + "message": "署名" + }, + "signMessage": { + "message": "メッセージに署名" + }, + "signNotice": { + "message": "このメッセージへの署名は危険となる可能性があります。\n完全に信頼するサイトからのメッセージのみ、\nあなたのアカウントで署名して下さい。今後のバージョンでは、\nこの危険なメソッドは削除される予定です。" + }, + "sigRequest": { + "message": "署名リクエスト" + }, + "sigRequested": { + "message": "署名がリクエストされました" + }, + "status": { + "message": "ステータス" + }, + "submit": { + "message": "送信" + }, + "takesTooLong": { + "message": "長くかかりすぎていますか?" + }, + "testFaucet": { + "message": "Faucetをテスト" + }, + "to": { + "message": "宛先" + }, + "toETHviaShapeShift": { + "message": "ShapeShiftで $1をETHにする", + "description": "system will fill in deposit type in start of message" + }, + "tokenBalance": { + "message": "あなたのトークン残高:" + }, + "total": { + "message": "合計" + }, + "transactionMemo": { + "message": "トランザクションメモ (オプション)" + }, + "transactionNumber": { + "message": "トランザクション番号" + }, + "transfers": { + "message": "トランスファー" + }, + "troubleTokenBalances": { + "message": "トークン残高を取得できません。こちらでご確認ください。", + "description": "Followed by a link (here) to view token balances" + }, + "typePassword": { + "message": "パスワードタイプ" + }, + "uiWelcome": { + "message": "新UIへようこそ!(ベータ版)" + }, + "uiWelcomeMessage": { + "message": "現在Metamaskの新しいUIをお使いになっています。トークン送信など、新たな機能を試してみましょう!何か問題があればご報告ください。" + }, + "unavailable": { + "message": "有効ではありません。" + }, + "unknown": { + "message": "不明" + }, + "unknownNetwork": { + "message": "不明なプライベートネットワーク" + }, + "unknownNetworkId": { + "message": "不明なネットワークID" + }, + "usaOnly": { + "message": "米国居住者のみ", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "様々なクライアントによって使用されています。" + }, + "viewAccount": { + "message": "アカウントを見る" + }, + "warning": { + "message": "警告" + }, + "whatsThis": { + "message": "これは何でしょう?" + }, + "yourSigRequested": { + "message": "あなたの署名がリクエストされています。" + }, + "youSign": { + "message": "署名しています。" } } -- cgit From fd5bdb3241c7dde53b8ab541316ed1c5bfff3667 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 14 Mar 2018 15:15:56 +0800 Subject: fix fix --- app/_locales/zh_CN/messages.json | 60 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'app') diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index 1d72f0e0f..e8a7ba19a 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -281,11 +281,11 @@ "message": "How would you like to deposit Ether?" }, "import": { - "message": "Import", + "message": "导入", "description": "Button to import an account from a selected file" }, "importAccount": { - "message": "Import Account" + "message": "导入账户" }, "importAnAccount": { "message": "Import an account" @@ -301,7 +301,7 @@ "message": "Info & Help" }, "invalidAddress": { - "message": "Invalid address" + "message": "错误地址" }, "invalidGasParams": { "message": "Invalid Gas Parameters" @@ -313,24 +313,24 @@ "message": "Invalid Request" }, "jsonFile": { - "message": "JSON File", + "message": "JSON 文件", "description": "format for importing an account" }, "kovan": { - "message": "Kovan Test Network" + "message": "Kovan 测试网络" }, "lessThanMax": { - "message": "must be less than or equal to $1.", + "message": "必须小于等于 $1.", "description": "helper for inputting hex as decimal input" }, "limit": { "message": "Limit" }, "loading": { - "message": "Loading..." + "message": "加载..." }, "loadingTokens": { - "message": "Loading Tokens..." + "message": "加载代币..." }, "localhost": { "message": "Localhost 8545" @@ -348,16 +348,16 @@ "message": "信息" }, "min": { - "message": "Minimum" + "message": "最小" }, "myAccounts": { - "message": "My Accounts" + "message": "我的账户" }, "needEtherInWallet": { "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." }, "needImportFile": { - "message": "You must select a file to import.", + "message": "你必须选择导入一个文件.", "description": "User is important an account and needs to add a file to continue" }, "needImportPassword": { @@ -365,20 +365,20 @@ "description": "Password and file needed to import an account" }, "networks": { - "message": "Networks" + "message": "网络" }, "newAccount": { - "message": "New Account" + "message": "新账户" }, "newAccountNumberName": { - "message": "Account $1", + "message": "账户 $1", "description": "Default name of next account to be created on create account screen" }, "newContract": { - "message": "New Contract" + "message": "新合约" }, "newPassword": { - "message": "New Password (min 8 chars)" + "message": "新密码(至少8个字符)" }, "newRecipient": { "message": "New Recipient" @@ -402,17 +402,17 @@ "message": "Not Started" }, "oldUI": { - "message": "Old UI" + "message": "旧 UI" }, "oldUIMessage": { "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." }, "or": { - "message": "or", + "message": "或", "description": "choice between creating or importing a new account" }, "passwordMismatch": { - "message": "passwords don't match", + "message": "密码不匹配", "description": "in password creation process, the two new password fields did not match" }, "passwordShort": { @@ -430,17 +430,17 @@ "message": "Please review your transaction." }, "privateKey": { - "message": "Private Key", + "message": "私钥", "description": "select this type of file to use to import an account" }, "privateKeyWarning": { "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." }, "privateNetwork": { - "message": "Private Network" + "message": "私有网络" }, "qrCode": { - "message": "Show QR Code" + "message": "显示二维码" }, "readdToken": { "message": "You can add this token back in the future by going go to “Add token” in your accounts options menu." @@ -449,7 +449,7 @@ "message": "Read more here." }, "receive": { - "message": "Receive" + "message": "接收" }, "recipientAddress": { "message": "Recipient Address" @@ -458,7 +458,7 @@ "message": "Your Refund Address" }, "rejected": { - "message": "Rejected" + "message": "拒绝" }, "required": { "message": "Required" @@ -480,20 +480,20 @@ "description": "Help user understand concept of adding a human-readable name to their account" }, "save": { - "message": "Save" + "message": "保存" }, "saveAsFile": { - "message": "Save as File", + "message": "保存文件", "description": "Account export process" }, "selectService": { "message": "Select Service" }, "send": { - "message": "Send" + "message": "发送" }, "sendTokens": { - "message": "Send Tokens" + "message": "发送 Tokens" }, "sendTokensAnywhere": { "message": "Send Tokens to anyone with an Ethereum account" @@ -505,10 +505,10 @@ "message": "Buy with Shapeshift" }, "showPrivateKeys": { - "message": "Show Private Keys" + "message": "显示私钥" }, "showQRCode": { - "message": "Show QR Code" + "message": "显示二维码" }, "sign": { "message": "Sign" -- cgit From 2d3763d70927dd1aefbc19f9ab6d463a713f2576 Mon Sep 17 00:00:00 2001 From: Lazaridis Date: Sat, 10 Mar 2018 04:56:39 +0200 Subject: add READMEs to folders, re #3427 --- app/scripts/README.md | 14 ++++++++++++++ app/scripts/controllers/README.md | 4 ++++ app/scripts/migrations/README.md | 5 +++++ 3 files changed, 23 insertions(+) create mode 100644 app/scripts/README.md create mode 100644 app/scripts/controllers/README.md create mode 100644 app/scripts/migrations/README.md (limited to 'app') diff --git a/app/scripts/README.md b/app/scripts/README.md new file mode 100644 index 000000000..f5a907244 --- /dev/null +++ b/app/scripts/README.md @@ -0,0 +1,14 @@ +# Main MetaMask Code + +This folder contains the core-code. + +Currently, it is organized mostly based on file category, like: + +controllers, migrations, lib + +## Ongoing Task + +Refactor code-structure, thus the subsystems are reflected on the filesystem. + +### Examples + diff --git a/app/scripts/controllers/README.md b/app/scripts/controllers/README.md new file mode 100644 index 000000000..392c0457d --- /dev/null +++ b/app/scripts/controllers/README.md @@ -0,0 +1,4 @@ +# Controllers + +Different controllers (in the sense of *VC *View-Controller). + diff --git a/app/scripts/migrations/README.md b/app/scripts/migrations/README.md new file mode 100644 index 000000000..3a67b08e1 --- /dev/null +++ b/app/scripts/migrations/README.md @@ -0,0 +1,5 @@ +# Migrations + +Data (user data, config files etc.) is migrated from one version to another. + +Migrations are called by {} from {} during {}. \ No newline at end of file -- cgit From 106ce091a9ef9fbd37b90c49bc76f12bd796ebb5 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 14 Mar 2018 11:45:04 -0230 Subject: Fix TransactionStateManager spelling. --- app/scripts/controllers/transactions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index ab07dde62..3e3909361 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -3,7 +3,7 @@ const ObservableStore = require('obs-store') const ethUtil = require('ethereumjs-util') const Transaction = require('ethereumjs-tx') const EthQuery = require('ethjs-query') -const TransactionStateManger = require('../lib/tx-state-manager') +const TransactionStateManager = require('../lib/tx-state-manager') const TxGasUtil = require('../lib/tx-gas-utils') const PendingTransactionTracker = require('../lib/pending-tx-tracker') const NonceTracker = require('../lib/nonce-tracker') @@ -37,7 +37,7 @@ module.exports = class TransactionController extends EventEmitter { this.query = new EthQuery(this.provider) this.txGasUtil = new TxGasUtil(this.provider) - this.txStateManager = new TransactionStateManger({ + this.txStateManager = new TransactionStateManager({ initState: opts.initState, txHistoryLimit: opts.txHistoryLimit, getNetwork: this.getNetwork.bind(this), -- cgit From f595e8f424028830d44195683b87b2de23e2a2dc Mon Sep 17 00:00:00 2001 From: yuanchao Date: Wed, 14 Mar 2018 22:37:28 +0800 Subject: yuanaichi --- app/_locales/zh_CN/messages.json | 204 +++++++++++++++++++-------------------- 1 file changed, 102 insertions(+), 102 deletions(-) (limited to 'app') diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index e8a7ba19a..d1ff7b744 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -32,7 +32,7 @@ "description": "The name of the application" }, "attemptingConnect": { - "message": "正在尝试连接区块链." + "message": "正在尝试连接区块链。" }, "available": { "message": "可用" @@ -41,13 +41,13 @@ "message": "返回" }, "balance": { - "message": "余额:" + "message": "余额:" }, "balanceIsInsufficientGas": { - "message": "当前余额不足支付Gas" + "message": "当前余额不足以支付 Gas" }, "beta": { - "message": "测试版" + "message": "BETA" }, "betweenMinAndMax": { "message": "必须大于等于 $1 并且小于等于 $2 。", @@ -60,10 +60,10 @@ "message": "购买" }, "buyCoinbase": { - "message": "在Coinbase上购买" + "message": "在 Coinbase 上购买" }, "buyCoinbaseExplainer": { - "message": "Coinbase是世界上最流行的买卖比特币,以太币和litecoin的方式。" + "message": "Coinbase 是世界上最流行的买卖比特币,以太币和莱特币的交易所。" }, "cancel": { "message": "取消" @@ -84,7 +84,7 @@ "message": "确认交易" }, "continueToCoinbase": { - "message": "继续访问Coinbase" + "message": "继续访问 Coinbase" }, "contractDeployment": { "message": "合约部署" @@ -96,22 +96,22 @@ "message": "已复制" }, "copiedClipboard": { - "message": "已复制到粘贴板" + "message": "已复制到剪贴板" }, "copiedExclamation": { - "message": "已复制!" + "message": "已复制!" }, "copy": { "message": "复制" }, "copyToClipboard": { - "message": "复制到粘贴板" + "message": "复制到剪贴板" }, "copyButton": { "message": " 复制 " }, "copyPrivateKey": { - "message": "这是你的私钥 (点击复制)" + "message": "这是你的私钥(点击复制)" }, "create": { "message": "创建" @@ -136,19 +136,19 @@ "message": "自定义 RPC" }, "defaultNetwork": { - "message": "默认ETH转账网络为 Main Net." + "message": "默认以太坊交易网络为主网。" }, "denExplainer": { - "message": "Your DEN is your password-encrypted storage within MetaMask." + "message": "你的 DEN 是存储在 MetaMask 中的已加密密码。" }, "deposit": { - "message": "存款" + "message": "存入" }, "depositBTC": { - "message": "Deposit your BTC to the address below:" + "message": "将你的 BTC 存入到下面的地址:" }, "depositCoin": { - "message": "Deposit your $1 to the address below", + "message": "将你的 $1 存入到下面的地址", "description": "Tells the user what coin they have selected to deposit with shapeshift" }, "depositEth": { @@ -158,16 +158,16 @@ "message": "存入 Ether" }, "depositFiat": { - "message": "Deposit with Fiat" + "message": "从 Fiat 存入" }, "depositFromAccount": { "message": "从其他账户存入" }, "depositShapeShift": { - "message": "从ShapeShift存入" + "message": "从 ShapeShift 存入" }, "depositShapeShiftExplainer": { - "message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed." + "message": "如果你拥有其他加密货币,你可以直接交易并存入 Ether 到你的 MetaMask 钱包。 不需要帐户。" }, "details": { "message": "详情" @@ -179,7 +179,7 @@ "message": "直接存入 Ether" }, "directDepositEtherExplainer": { - "message": "If you already have some Ether, the quickest way to get Ether in your new wallet by direct deposit." + "message": "如果你已经有了一些 Ether,通过直接转入是你的新钱包获取 Ether 的最快捷方式。" }, "done": { "message": "完成" @@ -191,22 +191,22 @@ "message": "编辑账户名称" }, "encryptNewDen": { - "message": "Encrypt your new DEN" + "message": "加密你的新 DEN" }, "enterPassword": { "message": "请输入密码" }, "etherscanView": { - "message": "View account on Etherscan" + "message": "在 Etherscan 上查看账户" }, "exchangeRate": { - "message": "Exchange Rate" + "message": "兑换比率" }, "exportPrivateKey": { "message": "导出私钥" }, "exportPrivateKeyWarning": { - "message": "导出私钥需要您自担风险" + "message": "导出私钥需要你自担风险" }, "failed": { "message": "失败" @@ -216,7 +216,7 @@ "description": "Exchange type" }, "fileImportFail": { - "message": "文件导入失败? 点击这里!", + "message": "文件导入失败? 点击这里!", "description": "Helps user import their account from a JSON file" }, "from": { @@ -230,38 +230,38 @@ "description": "Short indication of gas cost" }, "gasFee": { - "message": "Gas Fee" + "message": "Gas 费用" }, "gasLimit": { "message": "Gas Limit" }, "gasLimitCalculation": { - "message": "We calculate the suggested gas limit based on network success rates." + "message": "我们根据网络成功率计算建议的 Gas Limit。" }, "gasLimitRequired": { - "message": "Gas Limit Required" + "message": "Gas Limit 必填" }, "gasLimitTooLow": { - "message": "Gas limit must be at least 21000" + "message": "Gas Limit 至少要 21000" }, "gasPrice": { "message": "Gas Price (GWEI)" }, "gasPriceCalculation": { - "message": "We calculate the suggested gas prices based on network success rates." + "message": "我们根据网络成功率计算建议的 Gas Price" }, "gasPriceRequired": { - "message": "Gas Price Required" + "message": "Gas Price 必填" }, "getEther": { "message": "获取 Ether" }, "getEtherFromFaucet": { - "message": "Get Ether from a faucet for the $1", + "message": "从水管获取$1网络的 Ether", "description": "Displays network name for Ether faucet" }, "greaterThanMin": { - "message": "must be greater than or equal to $1.", + "message": "必须要大于等于 $1。", "description": "helper for inputting hex as decimal input" }, "here": { @@ -272,13 +272,13 @@ "message": "隐藏" }, "hideToken": { - "message": "Hide Token" + "message": "隐藏代币" }, "hideTokenPrompt": { - "message": "Hide Token?" + "message": "隐藏代币?" }, "howToDeposit": { - "message": "How would you like to deposit Ether?" + "message": "你想怎样转入 Ether?" }, "import": { "message": "导入", @@ -288,29 +288,29 @@ "message": "导入账户" }, "importAnAccount": { - "message": "Import an account" + "message": "导入一个账户" }, "importDen": { - "message": "Import Existing DEN" + "message": "导入存在的 DEN" }, "imported": { - "message": "Imported", + "message": "已导入", "description": "status showing that an account has been fully loaded into the keyring" }, "infoHelp": { - "message": "Info & Help" + "message": "信息 & 帮助" }, "invalidAddress": { - "message": "错误地址" + "message": "错误的地址" }, "invalidGasParams": { - "message": "Invalid Gas Parameters" + "message": "错误的 Gas 参数" }, "invalidInput": { - "message": "Invalid input." + "message": "错误的输入。" }, "invalidRequest": { - "message": "Invalid Request" + "message": "无效请求" }, "jsonFile": { "message": "JSON 文件", @@ -324,7 +324,7 @@ "description": "helper for inputting hex as decimal input" }, "limit": { - "message": "Limit" + "message": "限定" }, "loading": { "message": "加载..." @@ -333,19 +333,19 @@ "message": "加载代币..." }, "localhost": { - "message": "Localhost 8545" + "message": "本地主机 8545" }, "logout": { "message": "登出" }, "loose": { - "message": "Loose" + "message": "丢失" }, "mainnet": { - "message": "以太坊正式网络" + "message": "以太坊主网络" }, "message": { - "message": "信息" + "message": "消息" }, "min": { "message": "最小" @@ -354,14 +354,14 @@ "message": "我的账户" }, "needEtherInWallet": { - "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." + "message": "使用 MetaMask 与 DAPP 交互,需要你的钱包里有 Ether。" }, "needImportFile": { - "message": "你必须选择导入一个文件.", + "message": "必须选择导入一个文件。", "description": "User is important an account and needs to add a file to continue" }, "needImportPassword": { - "message": "You must enter a password for the selected file.", + "message": "必须为已选择的文件输入密码。", "description": "Password and file needed to import an account" }, "networks": { @@ -378,34 +378,34 @@ "message": "新合约" }, "newPassword": { - "message": "新密码(至少8个字符)" + "message": "新密码(至少 8 个字符)" }, "newRecipient": { - "message": "New Recipient" + "message": "新收款人" }, "next": { - "message": "Next" + "message": "下一个" }, "noAddressForName": { - "message": "No address has been set for this name." + "message": "此 ENS 名字还没有指定地址。" }, "noDeposits": { - "message": "No deposits received" + "message": "没有已收的存款" }, "noTransactionHistory": { - "message": "No transaction history." + "message": "没有交易历史。" }, "noTransactions": { - "message": "No Transactions" + "message": "没有交易" }, "notStarted": { - "message": "Not Started" + "message": "未开始" }, "oldUI": { - "message": "旧 UI" + "message": "旧版界面" }, "oldUIMessage": { - "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." + "message": "你已经切换到旧版界面。 你可以通过右上方下拉菜单中的选项切换回新的用户界面。" }, "or": { "message": "或", @@ -420,21 +420,21 @@ "description": "in password creation process, the password is not long enough to be secure" }, "pastePrivateKey": { - "message": "请粘贴您的私钥:", + "message": "请粘贴你的私钥:", "description": "For importing an account from a private key" }, "pasteSeed": { - "message": "请粘贴您的助记词!" + "message": "请粘贴你的助记词!" }, "pleaseReviewTransaction": { - "message": "Please review your transaction." + "message": "请检查你的交易。" }, "privateKey": { "message": "私钥", "description": "select this type of file to use to import an account" }, "privateKeyWarning": { - "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." + "message": "注意:永远不要公开这个私钥。任何拥有你的私钥的人都可以窃取你帐户中的任何资产。" }, "privateNetwork": { "message": "私有网络" @@ -443,31 +443,31 @@ "message": "显示二维码" }, "readdToken": { - "message": "You can add this token back in the future by going go to “Add token” in your accounts options menu." + "message": "之后你还可以通过帐户选项菜单中的“添加代币”来添加此代币。" }, "readMore": { - "message": "Read more here." + "message": "了解更多。" }, "receive": { "message": "接收" }, "recipientAddress": { - "message": "Recipient Address" + "message": "接收地址" }, "refundAddress": { - "message": "Your Refund Address" + "message": "你的退款地址" }, "rejected": { "message": "拒绝" }, "required": { - "message": "Required" + "message": "必填" }, "retryWithMoreGas": { - "message": "Retry with a higher gas price here" + "message": "使用更高的 Gas Price 重试" }, "revert": { - "message": "Revert" + "message": "还原" }, "rinkeby": { "message": "Rinkeby 测试网络" @@ -476,7 +476,7 @@ "message": "Ropsten 测试网络" }, "sampleAccountName": { - "message": "例如. 我的账户", + "message": "例如:我的账户", "description": "Help user understand concept of adding a human-readable name to their account" }, "save": { @@ -487,22 +487,22 @@ "description": "Account export process" }, "selectService": { - "message": "Select Service" + "message": "选择服务" }, "send": { "message": "发送" }, "sendTokens": { - "message": "发送 Tokens" + "message": "发送代币" }, "sendTokensAnywhere": { - "message": "Send Tokens to anyone with an Ethereum account" + "message": "发送代币给拥有以太坊账户的任何人" }, "settings": { - "message": "Settings" + "message": "设置" }, "shapeshiftBuy": { - "message": "Buy with Shapeshift" + "message": "使用 Shapeshift 购买" }, "showPrivateKeys": { "message": "显示私钥" @@ -511,19 +511,19 @@ "message": "显示二维码" }, "sign": { - "message": "Sign" + "message": "签名" }, "signMessage": { - "message": "Sign Message" + "message": "签署消息" }, "signNotice": { - "message": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. " + "message": "签署此消息可能会产生危险的副作用。 \n只从你完全信任的网站上签名。 这种危险的方法将在未来的版本中被移除。" }, "sigRequest": { - "message": "Signature Request" + "message": "请求签名" }, "sigRequested": { - "message": "Signature Requested" + "message": "签名已请求" }, "status": { "message": "状态" @@ -532,48 +532,48 @@ "message": "提交" }, "takesTooLong": { - "message": "花费太长时间?" + "message": "花费太长时间?" }, "testFaucet": { - "message": "Test Faucet" + "message": "测试水管" }, "to": { - "message": "To" + "message": "至" }, "toETHviaShapeShift": { - "message": "$1 to ETH via ShapeShift", + "message": "$1 ETH 通过 ShapeShift", "description": "system will fill in deposit type in start of message" }, "tokenBalance": { - "message": "Your Token Balance is:" + "message": "代币余额:" }, "total": { "message": "总量" }, "transactionMemo": { - "message": "Transaction memo (optional)" + "message": "交易备注 (可选)" }, "transactionNumber": { - "message": "Transaction Number" + "message": "交易号" }, "transfers": { "message": "Transfers" }, "troubleTokenBalances": { - "message": "We had trouble loading your token balances. You can view them ", + "message": "无法加载代币余额。你可以再这里查看 ", "description": "Followed by a link (here) to view token balances" }, "typePassword": { "message": "请输入密码" }, "uiWelcome": { - "message": "Welcome to the New UI (Beta)" + "message": "欢迎使用新版界面 (Beta)" }, "uiWelcomeMessage": { - "message": "You are now using the new Metamask UI. Take a look around, try out new features like sending tokens, and let us know if you have any issues." + "message": "你现在正在使用新的 Metamask 界面。 尝试发送代币等新功能,有任何问题请告知我们。" }, "unavailable": { - "message": "Unavailable" + "message": "不可用" }, "unknown": { "message": "未知" @@ -582,28 +582,28 @@ "message": "未知私有网络" }, "unknownNetworkId": { - "message": "未知网络ID" + "message": "未知网络 ID" }, "usaOnly": { - "message": "USA only", + "message": "只限于美国", "description": "Using this exchange is limited to people inside the USA" }, "usedByClients": { - "message": "Used by a variety of different clients" + "message": "可用于各种不同的客户端" }, "viewAccount": { - "message": "View Account" + "message": "查看账户" }, "warning": { "message": "警告" }, "whatsThis": { - "message": "这是什么?" + "message": "这是什么?" }, "yourSigRequested": { - "message": "Your signature is being requested" + "message": "正在请求你的签名" }, "youSign": { - "message": "You are signing" + "message": "正在签名" } } -- cgit From d2fb1c2b823a0a1b56792d3d6549c579c532b47a Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 14 Mar 2018 23:19:08 +0800 Subject: fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix 接收 to 接受 --- app/_locales/zh_CN/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index d1ff7b744..d4c0ba225 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -1,6 +1,6 @@ { "accept": { - "message": "接收" + "message": "接受" }, "account": { "message": "账户" -- cgit From bc987a1129194c0c79cde9d73557a98a22aa4e40 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Wed, 14 Mar 2018 08:20:54 -0700 Subject: fix destructuring of variables --- app/scripts/lib/local-store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 781aea17e..1cf00dd30 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -3,7 +3,7 @@ // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/local const extension = require('extensionizer') -const { promisify } = require('util').promisify +const { promisify } = require('util') module.exports = class ExtensionStore { constructor() { -- cgit From b60992412546b6151d9c992ae2d34bb9e1ebe496 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Wed, 14 Mar 2018 08:21:50 -0700 Subject: fix destructuring of variables --- app/scripts/lib/local-store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 781aea17e..1cf00dd30 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -3,7 +3,7 @@ // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/local const extension = require('extensionizer') -const { promisify } = require('util').promisify +const { promisify } = require('util') module.exports = class ExtensionStore { constructor() { -- cgit From 9963bf6429871e85719e06c096ad81bd5d9eda64 Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Wed, 14 Mar 2018 18:08:14 +0100 Subject: Update messages.json thx to @Senshii --- app/_locales/fr/messages.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'app') diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json index 6674fb1db..7edbd41ab 100644 --- a/app/_locales/fr/messages.json +++ b/app/_locales/fr/messages.json @@ -24,7 +24,7 @@ "message": "Montant + Gaz" }, "appDescription": { - "message": "Ethereum navigateur extension", + "message": "Extension Ethereum pour navigateur", "description": "La description de l'application" }, "appName": { @@ -50,7 +50,7 @@ "message": "BETA" }, "betweenMinAndMax": { - "message": "doit être supérieur ou égal à 1 $ et inférieur ou égal à 2 $", + "message": "doit être supérieur ou égal à $1 et inférieur ou égal à $2", "description": "helper pour la saisie hexadécimale en entrée décimale" }, "borrowDharma": { @@ -145,11 +145,11 @@ "message": "Dépôt" }, "depositBTC": { - "message": "Déposez votre BTC à l'adresse ci-dessous:" + "message": "Déposez vos BTC à l'adresse ci-dessous:" }, "depositCoin": { "message": "Déposez votre $1 à l'adresse ci-dessous", - "description": "Indique à l'utilisateur quelle pièce ils ont choisi de déposer avec shapeshift" + "description": "Indique à l'utilisateur quelle monnaie ils a choisi de déposer avec shapeshift" }, "depositEth": { "message": "Dépôt Eth" @@ -158,7 +158,7 @@ "message": "Dépôt Ether" }, "depositFiat": { - "message": "Dépôt avec Fiat" + "message": "Dépôt de monnaie-fiat" }, "depositFromAccount": { "message": "Dépôt d'un autre compte" @@ -167,10 +167,10 @@ "message": "Déposez avec ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Si vous possédez d'autres crypto-monnaies, vous pouvez échanger et déposer Ether directement dans votre portefeuille MetaMask. Aucun compte requis." + "message": "Si vous possédez d'autres crypto-monnaies, vous pouvez échanger et déposer de l'Ether directement dans votre portefeuille MetaMask. Aucun compte n'est requis." }, "details": { - "message": "Détails du message" + "message": "Détails" }, "directDeposit": { "message": "Dépôt direct" @@ -179,7 +179,7 @@ "message": "Dépôt direct d'Ether" }, "directDepositEtherExplainer": { - "message": "Si vous avez déjà de l'Ether, le moyen le plus rapide d'obtenir des Ether dans votre nouveau portefeuille par dépôt direct." + "message": "Si vous avez déjà de l'Ether, le moyen le plus rapide d'obtenir des Ether dans votre nouveau portefeuille est par dépôt direct." }, "done": { "message": "Fait" @@ -220,7 +220,7 @@ "description": "Aide l'utilisateur à importer son compte à partir d'un fichier JSON" }, "from": { - "message": "message de" + "message": "de" }, "fromShapeShift": { "message": "ShapeShift de" @@ -420,7 +420,7 @@ "description": "dans le processus de création de mot de passe, le mot de passe n'est pas assez long pour être sécurisé" }, "pastePrivateKey": { - "message": "Collez votre seed phrase privée ici:", + "message": "Collez votre clé privée ici:", "description": "Pour l'importation d'un compte à partir d'une clé privée" }, "pasteSeed": { @@ -570,7 +570,7 @@ "message": "Bienvenue dans la nouvelle interface utilisateur (Beta)" }, "uiWelcomeMessage": { - "message": "Vous utilisez maintenant la nouvelle interface utilisateur Metamask Jetez un coup d'oeil, essayez de nouvelles fonctionnalités comme l'envoi de jetons, et faites-nous savoir si vous avez des problèmes." + "message": "Vous utilisez maintenant la nouvelle interface utilisateur Metamask. Jetez un coup d'oeil, essayez de nouvelles fonctionnalités comme l'envoi de jetons, et faites-nous savoir si vous avez des problèmes." }, "unavailable": { "message": "Indisponible" @@ -606,4 +606,4 @@ "youSign": { "message": "Vous signez" } -} \ No newline at end of file +} -- cgit From 70ae807618b15430e50c0bd3baf7bb9a5ea02ef9 Mon Sep 17 00:00:00 2001 From: nujabes403 Date: Thu, 15 Mar 2018 02:25:01 +0900 Subject: Update kr translation to messages.json --- app/_locales/ko/messages.json | 609 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 604 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index c58af4b80..72fe0cce4 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -1,10 +1,609 @@ { - "appName": { - "message": "MetaMask", - "description": "The name of the application" + "accept": { + "message": "허용" + }, + "account": { + "message": "계좌" + }, + "accountDetails": { + "message": "계좌 상세보기" + }, + "accountName": { + "message": "계좌 이름" + }, + "address": { + "message": "주소" + }, + "addToken": { + "message": "토큰 추가" + }, + "amount": { + "message": "양" + }, + "amountPlusGas": { + "message": "양 + 가스" }, "appDescription": { - "message": "이더리움 계좌 관리", - "description": "The description of the application" + "message": "이더리움 브라우저 확장 프로그램", + "description": "어플리케이션 내용" + }, + "appName": { + "message": "메타마스크", + "description": "어플리케이션 이름" + }, + "attemptingConnect": { + "message": "블록체인에 접속 시도 중입니다." + }, + "available": { + "message": "Available" + }, + "back": { + "message": "뒤로" + }, + "balance": { + "message": "잔액:" + }, + "balanceIsInsufficientGas": { + "message": "가스가 충분하지 않습니다." + }, + "beta": { + "message": "베타" + }, + "betweenMinAndMax": { + "message": "1 달러 이상 2 달러 이하여야 합니다.", + "description": "helper for inputting hex as decimal input" + }, + "borrowDharma": { + "message": "Borrow With Dharma (Beta)" + }, + "buy": { + "message": "구매" + }, + "buyCoinbase": { + "message": "코인베이스에서 구매" + }, + "buyCoinbaseExplainer": { + "message": "코인베이스에서 비트코인, 이더리움, 라이트코인을 구매하실 수 있습니다." + }, + "cancel": { + "message": "취소" + }, + "clickCopy": { + "message": "클릭하여 복사" + }, + "confirm": { + "message": "승인" + }, + "confirmContract": { + "message": "컨트랙트 승인" + }, + "confirmPassword": { + "message": "패스워드 승인" + }, + "confirmTransaction": { + "message": "트랜잭션 승인" + }, + "continueToCoinbase": { + "message": "코인베이스로 계속하기" + }, + "contractDeployment": { + "message": "컨트랙트 배포" + }, + "conversionProgress": { + "message": "Conversion in progress" + }, + "copiedButton": { + "message": "복사되었습니다." + }, + "copiedClipboard": { + "message": "클립보드에 복사되었습니다." + }, + "copiedExclamation": { + "message": "복사되었습니다." + }, + "copy": { + "message": "복사하기" + }, + "copyToClipboard": { + "message": "클립보드에 복사" + }, + "copyButton": { + "message": " 복사 " + }, + "copyPrivateKey": { + "message": "비밀 키 (클릭하여 복사)" + }, + "create": { + "message": "생성" + }, + "createAccount": { + "message": "계좌 생성" + }, + "createDen": { + "message": "생성" + }, + "crypto": { + "message": "Crypto", + "description": "Exchange type (cryptocurrencies)" + }, + "customGas": { + "message": "가스 설정" + }, + "customize": { + "message": "커스터마이즈" + }, + "customRPC": { + "message": "Custom RPC" + }, + "defaultNetwork": { + "message": "The default network for Ether transactions is Main Net." + }, + "denExplainer": { + "message": "Your DEN is your password-encrypted storage within MetaMask." + }, + "deposit": { + "message": "입금" + }, + "depositBTC": { + "message": "아래 주소로 BTC를 입급해주세요." + }, + "depositCoin": { + "message": "아래 주소로 1달러를 입금해주세요.", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "이더리움 입금" + }, + "depositEther": { + "message": "이더리움 입금" + }, + "depositFiat": { + "message": "현금으로 입금하기" + }, + "depositFromAccount": { + "message": "다른 주소에서 입금하기" + }, + "depositShapeShift": { + "message": "ShapeShift를 통해 입금하기" + }, + "depositShapeShiftExplainer": { + "message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed." + }, + "details": { + "message": "상세" + }, + "directDeposit": { + "message": "즉시 입금" + }, + "directDepositEther": { + "message": "이더리움 즉시 입금" + }, + "directDepositEtherExplainer": { + "message": "If you already have some Ether, the quickest way to get Ether in your new wallet by direct deposit." + }, + "done": { + "message": "완료" + }, + "edit": { + "message": "수정" + }, + "editAccountName": { + "message": "계좌명 수정" + }, + "encryptNewDen": { + "message": "Encrypt your new DEN" + }, + "enterPassword": { + "message": "패스워드를 입력해주세요." + }, + "etherscanView": { + "message": "이더스캔에서 계좌보기" + }, + "exchangeRate": { + "message": "Exchange Rate" + }, + "exportPrivateKey": { + "message": "Export Private Key" + }, + "exportPrivateKeyWarning": { + "message": "Export private keys at your own risk." + }, + "failed": { + "message": "실패" + }, + "fiat": { + "message": "FIAT", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "File import not working? Click here!", + "description": "Helps user import their account from a JSON file" + }, + "from": { + "message": "From" + }, + "fromShapeShift": { + "message": "From ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "가스 수수료" + }, + "gasLimit": { + "message": "Gas Limit" + }, + "gasLimitCalculation": { + "message": "We calculate the suggested gas limit based on network success rates." + }, + "gasLimitRequired": { + "message": "Gas Limit Required" + }, + "gasLimitTooLow": { + "message": "Gas limit must be at least 21000" + }, + "gasPrice": { + "message": "Gas Price (GWEI)" + }, + "gasPriceCalculation": { + "message": "We calculate the suggested gas prices based on network success rates." + }, + "gasPriceRequired": { + "message": "Gas Price Required" + }, + "getEther": { + "message": "이더리움 얻기" + }, + "getEtherFromFaucet": { + "message": "Get Ether from a faucet for the $1", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": "must be greater than or equal to $1.", + "description": "helper for inputting hex as decimal input" + }, + "here": { + "message": "here", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hide": { + "message": "숨기기" + }, + "hideToken": { + "message": "토큰 숨기기" + }, + "hideTokenPrompt": { + "message": "Hide Token?" + }, + "howToDeposit": { + "message": "How would you like to deposit Ether?" + }, + "import": { + "message": "Import", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "Import Account" + }, + "importAnAccount": { + "message": "Import an account" + }, + "importDen": { + "message": "Import Existing DEN" + }, + "imported": { + "message": "Imported", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "infoHelp": { + "message": "Info & Help" + }, + "invalidAddress": { + "message": "Invalid address" + }, + "invalidGasParams": { + "message": "Invalid Gas Parameters" + }, + "invalidInput": { + "message": "Invalid input." + }, + "invalidRequest": { + "message": "Invalid Request" + }, + "jsonFile": { + "message": "JSON File", + "description": "format for importing an account" + }, + "kovan": { + "message": "Kovan 테스트넷" + }, + "lessThanMax": { + "message": "must be less than or equal to $1.", + "description": "helper for inputting hex as decimal input" + }, + "limit": { + "message": "Limit" + }, + "loading": { + "message": "로딩중..." + }, + "loadingTokens": { + "message": "토큰 로딩중..." + }, + "localhost": { + "message": "로컬호스트 8545" + }, + "logout": { + "message": "로그아웃" + }, + "loose": { + "message": "Loose" + }, + "mainnet": { + "message": "이더리움 메인넷" + }, + "message": { + "message": "메시지" + }, + "min": { + "message": "최소" + }, + "myAccounts": { + "message": "내 계좌" + }, + "needEtherInWallet": { + "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." + }, + "needImportFile": { + "message": "You must select a file to import.", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "You must enter a password for the selected file.", + "description": "Password and file needed to import an account" + }, + "networks": { + "message": "Networks" + }, + "newAccount": { + "message": "New Account" + }, + "newAccountNumberName": { + "message": "Account $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "새 컨트랙트" + }, + "newPassword": { + "message": "새 패스워드 (최소 8자 이상)" + }, + "newRecipient": { + "message": "New Recipient" + }, + "next": { + "message": "다음" + }, + "noAddressForName": { + "message": "No address has been set for this name." + }, + "noDeposits": { + "message": "No deposits received" + }, + "noTransactionHistory": { + "message": "트랜잭션 기록이 없습니다." + }, + "noTransactions": { + "message": "트랜잭션이 없습니다." + }, + "notStarted": { + "message": "Not Started" + }, + "oldUI": { + "message": "Old UI" + }, + "oldUIMessage": { + "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." + }, + "or": { + "message": "or", + "description": "choice between creating or importing a new account" + }, + "passwordMismatch": { + "message": "passwords don't match", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordShort": { + "message": "password not long enough", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "Paste your private key string here:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "Paste your seed phrase here!" + }, + "pleaseReviewTransaction": { + "message": "Please review your transaction." + }, + "privateKey": { + "message": "Private Key", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." + }, + "privateNetwork": { + "message": "Private Network" + }, + "qrCode": { + "message": "QR 코드 보기" + }, + "readdToken": { + "message": "You can add this token back in the future by going go to “Add token” in your accounts options menu." + }, + "readMore": { + "message": "더 읽기." + }, + "receive": { + "message": "Receive" + }, + "recipientAddress": { + "message": "Recipient Address" + }, + "refundAddress": { + "message": "Your Refund Address" + }, + "rejected": { + "message": "Rejected" + }, + "required": { + "message": "Required" + }, + "retryWithMoreGas": { + "message": "Retry with a higher gas price here" + }, + "revert": { + "message": "Revert" + }, + "rinkeby": { + "message": "Rinkeby 테스트넷" + }, + "ropsten": { + "message": "Ropsten 테스트넷" + }, + "sampleAccountName": { + "message": "E.g. My new account", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "Save" + }, + "saveAsFile": { + "message": "Save as File", + "description": "Account export process" + }, + "selectService": { + "message": "Select Service" + }, + "send": { + "message": "전송" + }, + "sendTokens": { + "message": "토큰 전송" + }, + "sendTokensAnywhere": { + "message": "Send Tokens to anyone with an Ethereum account" + }, + "settings": { + "message": "설정" + }, + "shapeshiftBuy": { + "message": "Buy with Shapeshift" + }, + "showPrivateKeys": { + "message": "Show Private Keys" + }, + "showQRCode": { + "message": "QR코드 보기" + }, + "sign": { + "message": "Sign" + }, + "signMessage": { + "message": "Sign Message" + }, + "signNotice": { + "message": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. " + }, + "sigRequest": { + "message": "Signature Request" + }, + "sigRequested": { + "message": "Signature Requested" + }, + "status": { + "message": "Status" + }, + "submit": { + "message": "Submit" + }, + "takesTooLong": { + "message": "Taking too long?" + }, + "testFaucet": { + "message": "Test Faucet" + }, + "to": { + "message": "To" + }, + "toETHviaShapeShift": { + "message": "$1 to ETH via ShapeShift", + "description": "system will fill in deposit type in start of message" + }, + "tokenBalance": { + "message": "Your Token Balance is:" + }, + "total": { + "message": "Total" + }, + "transactionMemo": { + "message": "Transaction memo (optional)" + }, + "transactionNumber": { + "message": "Transaction Number" + }, + "transfers": { + "message": "Transfers" + }, + "troubleTokenBalances": { + "message": "We had trouble loading your token balances. You can view them ", + "description": "Followed by a link (here) to view token balances" + }, + "typePassword": { + "message": "Type Your Password" + }, + "uiWelcome": { + "message": "Welcome to the New UI (Beta)" + }, + "uiWelcomeMessage": { + "message": "You are now using the new Metamask UI. Take a look around, try out new features like sending tokens, and let us know if you have any issues." + }, + "unavailable": { + "message": "Unavailable" + }, + "unknown": { + "message": "Unknown" + }, + "unknownNetwork": { + "message": "Unknown Private Network" + }, + "unknownNetworkId": { + "message": "Unknown network ID" + }, + "usaOnly": { + "message": "USA only", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "Used by a variety of different clients" + }, + "viewAccount": { + "message": "View Account" + }, + "warning": { + "message": "Warning" + }, + "whatsThis": { + "message": "What's this?" + }, + "yourSigRequested": { + "message": "Your signature is being requested" + }, + "youSign": { + "message": "You are signing" } } -- cgit From 481983aae873d1fb7cceef2cb42ec4fb0580368a Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 14 Mar 2018 10:31:25 -0700 Subject: local-store - fix promisification of methods --- app/scripts/lib/local-store.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 1cf00dd30..2d6155dbf 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -3,7 +3,6 @@ // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/local const extension = require('extensionizer') -const { promisify } = require('util') module.exports = class ExtensionStore { constructor() { @@ -12,8 +11,8 @@ module.exports = class ExtensionStore { log.error('Storage local API not available.') } const local = extension.storage.local - this._get = promisify(local.get).bind(local) - this._set = promisify(local.set).bind(local) + this._get = function() { return new Promise((resolve) => local.get(resolve)) } + this._set = function(state) { return new Promise((resolve) => local.set(state, resolve)) } } async get() { -- cgit From c4e90c9359de3b4c54622bde3f396bc753c9cffb Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 14 Mar 2018 10:49:54 -0700 Subject: local-store - check for error from extension.runtime --- app/scripts/lib/local-store.js | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 2d6155dbf..175126d86 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -10,9 +10,6 @@ module.exports = class ExtensionStore { if (!this.isSupported) { log.error('Storage local API not available.') } - const local = extension.storage.local - this._get = function() { return new Promise((resolve) => local.get(resolve)) } - this._set = function(state) { return new Promise((resolve) => local.set(state, resolve)) } } async get() { @@ -30,6 +27,34 @@ module.exports = class ExtensionStore { async set(state) { return this._set(state) } + + function _get() { + const local = extension.storage.local + return new Promise((resolve, reject) => { + local.get(null, (result) => { + const err = extension.runtime.lastError + if (err) { + reject(err) + } else { + resolve(result) + } + }) + }) + } + + function _set(obj) { + const local = extension.storage.local + return new Promise((resolve, reject) => { + local.set(obj, () => { + const err = extension.runtime.lastError + if (err) { + reject(err) + } else { + resolve() + } + }) + }) + } } function isEmpty(obj) { -- cgit From 6aef2ed0b26861b3402e13d4e2a7e401ac3e99c8 Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 14 Mar 2018 10:59:47 -0700 Subject: local-store - fix class syntax --- app/scripts/lib/local-store.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/local-store.js b/app/scripts/lib/local-store.js index 175126d86..5b47985f6 100644 --- a/app/scripts/lib/local-store.js +++ b/app/scripts/lib/local-store.js @@ -28,7 +28,7 @@ module.exports = class ExtensionStore { return this._set(state) } - function _get() { + _get() { const local = extension.storage.local return new Promise((resolve, reject) => { local.get(null, (result) => { @@ -42,7 +42,7 @@ module.exports = class ExtensionStore { }) } - function _set(obj) { + _set(obj) { const local = extension.storage.local return new Promise((resolve, reject) => { local.set(obj, () => { -- cgit From d79ef5bf15b12f40009c6c8cd0efb901f5717e04 Mon Sep 17 00:00:00 2001 From: Orange Date: Thu, 15 Mar 2018 09:27:31 +0800 Subject: fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit change loose => 疏松; change imported => 已导入私钥 --- app/_locales/zh_CN/messages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index d4c0ba225..203ab1923 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -294,7 +294,7 @@ "message": "导入存在的 DEN" }, "imported": { - "message": "已导入", + "message": "已导入私钥", "description": "status showing that an account has been fully loaded into the keyring" }, "infoHelp": { @@ -339,7 +339,7 @@ "message": "登出" }, "loose": { - "message": "丢失" + "message": "疏松" }, "mainnet": { "message": "以太坊主网络" -- cgit From 9cd9b166895d7b43402e760e71fc752846f1f5dd Mon Sep 17 00:00:00 2001 From: nujabes403 Date: Thu, 15 Mar 2018 12:14:00 +0900 Subject: Translated whole message in KR --- app/_locales/ko/messages.json | 218 +++++++++++++++++++++--------------------- 1 file changed, 109 insertions(+), 109 deletions(-) (limited to 'app') diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index 72fe0cce4..a0290c119 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -35,7 +35,7 @@ "message": "블록체인에 접속 시도 중입니다." }, "available": { - "message": "Available" + "message": "유효" }, "back": { "message": "뒤로" @@ -54,7 +54,7 @@ "description": "helper for inputting hex as decimal input" }, "borrowDharma": { - "message": "Borrow With Dharma (Beta)" + "message": "Dharma에서 빌리기(베타)" }, "buy": { "message": "구매" @@ -90,7 +90,7 @@ "message": "컨트랙트 배포" }, "conversionProgress": { - "message": "Conversion in progress" + "message": "변환중.." }, "copiedButton": { "message": "복사되었습니다." @@ -123,7 +123,7 @@ "message": "생성" }, "crypto": { - "message": "Crypto", + "message": "암호화폐", "description": "Exchange type (cryptocurrencies)" }, "customGas": { @@ -133,13 +133,13 @@ "message": "커스터마이즈" }, "customRPC": { - "message": "Custom RPC" + "message": "커스텀 RPC" }, "defaultNetwork": { - "message": "The default network for Ether transactions is Main Net." + "message": "이더리움 트랜잭션의 기본 네트워크는 메인넷입니다." }, "denExplainer": { - "message": "Your DEN is your password-encrypted storage within MetaMask." + "message": "DEN은 비밀번호가 암호화 된 MetaMask의 스토리지입니다." }, "deposit": { "message": "입금" @@ -167,7 +167,7 @@ "message": "ShapeShift를 통해 입금하기" }, "depositShapeShiftExplainer": { - "message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed." + "message": "다른 암호화폐를 가지고 있으면, 계좌 생성 필요없이, 거래를 하거나 메타마스크 지갑을 통해 이더리움을 입금할 수 있습니다." }, "details": { "message": "상세" @@ -179,7 +179,7 @@ "message": "이더리움 즉시 입금" }, "directDepositEtherExplainer": { - "message": "If you already have some Ether, the quickest way to get Ether in your new wallet by direct deposit." + "message": "이더리움을 이미 보유하고 있다면, 직접 입금을 통해 이더리움을 즉시 입금하실 수 있습니다." }, "done": { "message": "완료" @@ -191,7 +191,7 @@ "message": "계좌명 수정" }, "encryptNewDen": { - "message": "Encrypt your new DEN" + "message": "새 DEN 암호화" }, "enterPassword": { "message": "패스워드를 입력해주세요." @@ -200,10 +200,10 @@ "message": "이더스캔에서 계좌보기" }, "exchangeRate": { - "message": "Exchange Rate" + "message": "교환비율" }, "exportPrivateKey": { - "message": "Export Private Key" + "message": "비밀키 내보내기" }, "exportPrivateKeyWarning": { "message": "Export private keys at your own risk." @@ -216,56 +216,56 @@ "description": "Exchange type" }, "fileImportFail": { - "message": "File import not working? Click here!", + "message": "파일을 가져올 수 없나요? 여기를 클릭해주세요!", "description": "Helps user import their account from a JSON file" }, "from": { - "message": "From" + "message": "보내는 사람" }, "fromShapeShift": { - "message": "From ShapeShift" + "message": "ShapeShift로 부터" }, "gas": { - "message": "Gas", + "message": "가스", "description": "Short indication of gas cost" }, "gasFee": { "message": "가스 수수료" }, "gasLimit": { - "message": "Gas Limit" + "message": "가스 리밋" }, "gasLimitCalculation": { - "message": "We calculate the suggested gas limit based on network success rates." + "message": "네트워크 성공률을 기반으로 적합한 가스 리밋을 계산합니다." }, "gasLimitRequired": { - "message": "Gas Limit Required" + "message": "가스 리밋이 필요합니다." }, "gasLimitTooLow": { - "message": "Gas limit must be at least 21000" + "message": "가스 리밋은 21000 이상이여야 합니다." }, "gasPrice": { - "message": "Gas Price (GWEI)" + "message": "가스 가격 (GWEI)" }, "gasPriceCalculation": { - "message": "We calculate the suggested gas prices based on network success rates." + "message": "네트워크 성공률을 기반으로 적합한 가스 가격을 계산합니다." }, "gasPriceRequired": { - "message": "Gas Price Required" + "message": "가스 가격이 필요합니다." }, "getEther": { "message": "이더리움 얻기" }, "getEtherFromFaucet": { - "message": "Get Ether from a faucet for the $1", + "message": "faucet에서 1달러에 달하는 이더리움을 얻으세요.", "description": "Displays network name for Ether faucet" }, "greaterThanMin": { - "message": "must be greater than or equal to $1.", + "message": "1 달러 이상이어야 합니다.", "description": "helper for inputting hex as decimal input" }, "here": { - "message": "here", + "message": "여기", "description": "as in -click here- for more information (goes with troubleTokenBalances)" }, "hide": { @@ -275,56 +275,56 @@ "message": "토큰 숨기기" }, "hideTokenPrompt": { - "message": "Hide Token?" + "message": "토큰 숨기기?" }, "howToDeposit": { - "message": "How would you like to deposit Ether?" + "message": "어떤 방법으로 이더리움을 입금하시겠습니까?" }, "import": { - "message": "Import", + "message": "파일에서 가져오기", "description": "Button to import an account from a selected file" }, "importAccount": { - "message": "Import Account" + "message": "계좌 가져오기" }, "importAnAccount": { - "message": "Import an account" + "message": "계좌 가져오기" }, "importDen": { - "message": "Import Existing DEN" + "message": "기존 DEN 가져오기" }, "imported": { - "message": "Imported", + "message": "가져오기 완료", "description": "status showing that an account has been fully loaded into the keyring" }, "infoHelp": { - "message": "Info & Help" + "message": "정보 및 도움말" }, "invalidAddress": { - "message": "Invalid address" + "message": "유효하지 않은 주소" }, "invalidGasParams": { - "message": "Invalid Gas Parameters" + "message": "유효하지 않은 가스 입력값" }, "invalidInput": { - "message": "Invalid input." + "message": "유효하지 않은 입력값" }, "invalidRequest": { - "message": "Invalid Request" + "message": "유효하지 않은 요청" }, "jsonFile": { - "message": "JSON File", + "message": "JSON 파일", "description": "format for importing an account" }, "kovan": { "message": "Kovan 테스트넷" }, "lessThanMax": { - "message": "must be less than or equal to $1.", + "message": "1달러 이하여야합니다.", "description": "helper for inputting hex as decimal input" }, "limit": { - "message": "Limit" + "message": "리밋" }, "loading": { "message": "로딩중..." @@ -339,7 +339,7 @@ "message": "로그아웃" }, "loose": { - "message": "Loose" + "message": "외부 비밀키" }, "mainnet": { "message": "이더리움 메인넷" @@ -354,24 +354,24 @@ "message": "내 계좌" }, "needEtherInWallet": { - "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." + "message": "dApp을 이용하기 위해서는 지갑에 이더리움이 있어야 합니다." }, "needImportFile": { - "message": "You must select a file to import.", + "message": "가져올 파일을 선택해주세요.", "description": "User is important an account and needs to add a file to continue" }, "needImportPassword": { - "message": "You must enter a password for the selected file.", + "message": "선택 된 파일에 패스워드를 입력해주세요.", "description": "Password and file needed to import an account" }, "networks": { - "message": "Networks" + "message": "네트워크" }, "newAccount": { - "message": "New Account" + "message": "새 계좌" }, "newAccountNumberName": { - "message": "Account $1", + "message": "새 계좌 $1", "description": "Default name of next account to be created on create account screen" }, "newContract": { @@ -381,16 +381,16 @@ "message": "새 패스워드 (최소 8자 이상)" }, "newRecipient": { - "message": "New Recipient" + "message": "받는 사람" }, "next": { "message": "다음" }, "noAddressForName": { - "message": "No address has been set for this name." + "message": "이 이름에는 주소가 설정되어 있지 않습니다." }, "noDeposits": { - "message": "No deposits received" + "message": "입금이 없습니다." }, "noTransactionHistory": { "message": "트랜잭션 기록이 없습니다." @@ -399,75 +399,75 @@ "message": "트랜잭션이 없습니다." }, "notStarted": { - "message": "Not Started" + "message": "시작되지 않음." }, "oldUI": { - "message": "Old UI" + "message": "구버전의 UI" }, "oldUIMessage": { - "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." + "message": "구버전 UI로 변경하셨습니다. 우 상단 드랍다운 메뉴에서 새 UI로 변경하실 수 있습니다." }, "or": { - "message": "or", + "message": "또는", "description": "choice between creating or importing a new account" }, "passwordMismatch": { - "message": "passwords don't match", + "message": "패스워드가 일치하지 않습니다.", "description": "in password creation process, the two new password fields did not match" }, "passwordShort": { - "message": "password not long enough", + "message": "패스워드가 너무 짧습니다.", "description": "in password creation process, the password is not long enough to be secure" }, "pastePrivateKey": { - "message": "Paste your private key string here:", + "message": "비밀키 스트링을 붙여넣어주세요.", "description": "For importing an account from a private key" }, "pasteSeed": { - "message": "Paste your seed phrase here!" + "message": "시드 문장들을 붙여넣어주세요." }, "pleaseReviewTransaction": { - "message": "Please review your transaction." + "message": "트랜잭션을 검토해주세요." }, "privateKey": { - "message": "Private Key", + "message": "비밀키", "description": "select this type of file to use to import an account" }, "privateKeyWarning": { - "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." + "message": " 절대 이 키를 노출하지 마십시오. 비밀키가 노출되면 누구나 당신의 계좌에서 자산을 빼갈 수 있습니다." }, "privateNetwork": { - "message": "Private Network" + "message": "프라이빗 네트워크" }, "qrCode": { "message": "QR 코드 보기" }, "readdToken": { - "message": "You can add this token back in the future by going go to “Add token” in your accounts options menu." + "message": "옵션 메뉴에서 “토큰 추가”를 눌러서 추후에 다시 이 토큰을 추가하실 수 있습니다." }, "readMore": { "message": "더 읽기." }, "receive": { - "message": "Receive" + "message": "받기" }, "recipientAddress": { - "message": "Recipient Address" + "message": "받는 사람 주소" }, "refundAddress": { - "message": "Your Refund Address" + "message": "환불받을 주소" }, "rejected": { - "message": "Rejected" + "message": "거부되었음." }, "required": { - "message": "Required" + "message": "필요함." }, "retryWithMoreGas": { - "message": "Retry with a higher gas price here" + "message": "더 높은 가스 가격으로 다시 시도해주세요." }, "revert": { - "message": "Revert" + "message": "취소" }, "rinkeby": { "message": "Rinkeby 테스트넷" @@ -476,18 +476,18 @@ "message": "Ropsten 테스트넷" }, "sampleAccountName": { - "message": "E.g. My new account", + "message": "예) 나의 새 계좌", "description": "Help user understand concept of adding a human-readable name to their account" }, "save": { - "message": "Save" + "message": "저장" }, "saveAsFile": { - "message": "Save as File", + "message": "파일로 저장", "description": "Account export process" }, "selectService": { - "message": "Select Service" + "message": "서비스 선택" }, "send": { "message": "전송" @@ -496,114 +496,114 @@ "message": "토큰 전송" }, "sendTokensAnywhere": { - "message": "Send Tokens to anyone with an Ethereum account" + "message": "이더리움 계좌로 토큰 전송" }, "settings": { "message": "설정" }, "shapeshiftBuy": { - "message": "Buy with Shapeshift" + "message": "Shapeshift를 통해서 구매하기" }, "showPrivateKeys": { - "message": "Show Private Keys" + "message": "비밀키 보기" }, "showQRCode": { "message": "QR코드 보기" }, "sign": { - "message": "Sign" + "message": "서명" }, "signMessage": { - "message": "Sign Message" + "message": "서명 메시지" }, "signNotice": { - "message": "Signing this message can have \ndangerous side effects. Only sign messages from \nsites you fully trust with your entire account.\n This dangerous method will be removed in a future version. " + "message": "이 메시지에 대한 서명은 위험할 수 있습니다.\n 완전히 신뢰할 수 있는 사이트에서만 서명해주세요.\n 안전을 위해 추후의 버전에서는 삭제될 기능입니다. " }, "sigRequest": { - "message": "Signature Request" + "message": "서명 요청" }, "sigRequested": { - "message": "Signature Requested" + "message": "서명이 요청되었습니다." }, "status": { - "message": "Status" + "message": "상태" }, "submit": { - "message": "Submit" + "message": "제출" }, "takesTooLong": { - "message": "Taking too long?" + "message": "너무 오래걸리나요?" }, "testFaucet": { - "message": "Test Faucet" + "message": "Faucet 테스트" }, "to": { - "message": "To" + "message": "대상" }, "toETHviaShapeShift": { - "message": "$1 to ETH via ShapeShift", + "message": "ShapeShift를 통해 1 달러를 ETH로 바꾸기", "description": "system will fill in deposit type in start of message" }, "tokenBalance": { - "message": "Your Token Balance is:" + "message": "현재 토큰 잔액: " }, "total": { - "message": "Total" + "message": "합계" }, "transactionMemo": { - "message": "Transaction memo (optional)" + "message": "트랜잭션 메모 (선택사항)" }, "transactionNumber": { - "message": "Transaction Number" + "message": "트랜잭션 번호" }, "transfers": { - "message": "Transfers" + "message": "전송" }, "troubleTokenBalances": { - "message": "We had trouble loading your token balances. You can view them ", + "message": "토큰 잔액을 가져오는데에 문제가 생겼습니다. (여기)서 상세내용을 볼 수 있습니다.", "description": "Followed by a link (here) to view token balances" }, "typePassword": { - "message": "Type Your Password" + "message": "패스워드를 입력하세요." }, "uiWelcome": { - "message": "Welcome to the New UI (Beta)" + "message": "새 UI에 오신 것을 환영합니다. (베타)" }, "uiWelcomeMessage": { - "message": "You are now using the new Metamask UI. Take a look around, try out new features like sending tokens, and let us know if you have any issues." + "message": "새 메타마스크 UI를 사용하고 계십니다. 토큰 전송과 같은 새 기능들을 사용해보시면서 문제가 있다면 알려주세요." }, "unavailable": { - "message": "Unavailable" + "message": "유효하지 않은" }, "unknown": { - "message": "Unknown" + "message": "알려지지 않은" }, "unknownNetwork": { - "message": "Unknown Private Network" + "message": "알려지지 않은 프라이빗 네트워크" }, "unknownNetworkId": { - "message": "Unknown network ID" + "message": "알려지지 않은 네트워크 ID" }, "usaOnly": { - "message": "USA only", + "message": "USA 거주자 한정", "description": "Using this exchange is limited to people inside the USA" }, "usedByClients": { - "message": "Used by a variety of different clients" + "message": "다양한 클라이언트에서 사용되고 있습니다." }, "viewAccount": { - "message": "View Account" + "message": "계좌 보기" }, "warning": { - "message": "Warning" + "message": "경고" }, "whatsThis": { - "message": "What's this?" + "message": "이것은 무엇인가요?" }, "yourSigRequested": { - "message": "Your signature is being requested" + "message": "서명이 요청되고 있습니다." }, "youSign": { - "message": "You are signing" + "message": "서명 중입니다." } } -- cgit From d2d0e2324bc94907d4c2dc5265294ffb42e3c48e Mon Sep 17 00:00:00 2001 From: Marvin Vista Date: Thu, 15 Mar 2018 14:58:26 +0800 Subject: Translate to Tagalog #3535 --- app/_locales/ph/messages.json | 609 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 609 insertions(+) create mode 100644 app/_locales/ph/messages.json (limited to 'app') diff --git a/app/_locales/ph/messages.json b/app/_locales/ph/messages.json new file mode 100644 index 000000000..f91c6373e --- /dev/null +++ b/app/_locales/ph/messages.json @@ -0,0 +1,609 @@ +{ + "accept": { + "message": "Tanggapin" + }, + "account": { + "message": "Account" + }, + "accountDetails": { + "message": "Detalye ng Account" + }, + "accountName": { + "message": "Pangalan ng Account" + }, + "address": { + "message": "Address" + }, + "addToken": { + "message": "Magdagdag ng Token" + }, + "amount": { + "message": "Halaga" + }, + "amountPlusGas": { + "message": "Halaga + Gas" + }, + "appDescription": { + "message": "Ethereum Browser Extension", + "description": "Ang deskripsyon ng application" + }, + "appName": { + "message": "MetaMask", + "description": "Ang pangalan ng application" + }, + "attemptingConnect": { + "message": "Sinusubukang kumonekta sa blockchain." + }, + "available": { + "message": "Magagamit" + }, + "back": { + "message": "Bumalik" + }, + "balance": { + "message": "Balanse:" + }, + "balanceIsInsufficientGas": { + "message": "Kulang ang balanse para sa kasalukuyang gas total" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "dapat mas malaki o katumbas ng $1 at mas mababa o katumbas ng $2.", + "description": "helper para sa pag-input ng hex bilang decimal input" + }, + "borrowDharma": { + "message": "Humiram sa Dharma (Beta)" + }, + "buy": { + "message": "Bumili" + }, + "buyCoinbase": { + "message": "Bumili sa Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Ang Coinbase ang pinakasikat na paraan upang bumili at magbenta ng bitcoin, ethereum, at litecoin sa buong mundo." + }, + "cancel": { + "message": "Kanselahin" + }, + "clickCopy": { + "message": "I-click upang Makopya" + }, + "confirm": { + "message": "Tiyakin" + }, + "confirmContract": { + "message": "Tiyakin ang Contract" + }, + "confirmPassword": { + "message": "Tiyakin ang Password" + }, + "confirmTransaction": { + "message": "Tiyakin ang Transaksyon" + }, + "continueToCoinbase": { + "message": "Magpatuloy sa Coinbase" + }, + "contractDeployment": { + "message": "Pag-deploy ng Contract" + }, + "conversionProgress": { + "message": "Isinasagawa ang conversion" + }, + "copiedButton": { + "message": "Kinopya" + }, + "copiedClipboard": { + "message": "Kinopya sa Clipboard" + }, + "copiedExclamation": { + "message": "Kinopya!" + }, + "copy": { + "message": "Kinopya" + }, + "copyToClipboard": { + "message": "Kinopya sa clipboard" + }, + "copyButton": { + "message": " Kinopya " + }, + "copyPrivateKey": { + "message": "Ito ang iyong private key (i-click upang makopya)" + }, + "create": { + "message": "Gumawa" + }, + "createAccount": { + "message": "Gumawa ng Account" + }, + "createDen": { + "message": "Gumawa" + }, + "crypto": { + "message": "Crypto", + "description": "Type ng exchange (cryptocurrencies)" + }, + "customGas": { + "message": "I-customize ang Gas" + }, + "customize": { + "message": "I-customize" + }, + "customRPC": { + "message": "Custom RPC" + }, + "defaultNetwork": { + "message": "Ang default network para sa Ether transactions ay ang Main Net." + }, + "denExplainer": { + "message": "Ang iyong DEN ang nagsisilbing password-encrypted storage mo sa loob ng MetaMask." + }, + "deposit": { + "message": "Deposito" + }, + "depositBTC": { + "message": "I-deposito ang iyong BTC sa address na ito:" + }, + "depositCoin": { + "message": "I-deposito ang iyong $1 sa address na ito", + "description": "Sinasabihan ang user kung ano ang coin na kanilang pinili para I-deposito gamit ang shapeshift" + }, + "depositEth": { + "message": "I-deposito ang Eth" + }, + "depositEther": { + "message": "I-deposito ang Ether" + }, + "depositFiat": { + "message": "I-deposito ang Fiat" + }, + "depositFromAccount": { + "message": "I-deposito mula sa ibang account" + }, + "depositShapeShift": { + "message": "I-deposito gamit ang ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Kung ikaw ay nagmamay-ari ng iba pang cryptocurrencies, pwede kang mag-trade at mag-deposito ng Ether diretso sa iyong MetaMask wallet. Hindi mo na kailangan ng account." + }, + "details": { + "message": "Detalye" + }, + "directDeposit": { + "message": "Direktang Deposito" + }, + "directDepositEther": { + "message": "Direktang I-deposito ang Ether" + }, + "directDepositEtherExplainer": { + "message": "Kung ika ay mayroon nang Ether, ang pinakamabilis na paraan upang makuha ang Ether sa iyong bagong wallet ay sa pamamagitan ng direktang deposito." + }, + "done": { + "message": "Tapos na" + }, + "edit": { + "message": "I-edit" + }, + "editAccountName": { + "message": "I-edit ang Pangalang ng Account" + }, + "encryptNewDen": { + "message": "I-encrypt ang iyong bagong DEN" + }, + "enterPassword": { + "message": "I-enter ang password" + }, + "etherscanView": { + "message": "Tingnan ang account sa Etherscan" + }, + "exchangeRate": { + "message": "Exchange Rate" + }, + "exportPrivateKey": { + "message": "I-export ang Private Key" + }, + "exportPrivateKeyWarning": { + "message": "I-export ang private keys at intindihin ang panganib na kasama nito." + }, + "failed": { + "message": "Nabigo" + }, + "fiat": { + "message": "FIAT", + "description": "Type ng exchange" + }, + "fileImportFail": { + "message": "Hindi gumagana ang file import? I-click ito!", + "description": "Tinutulungan ang user na i-import ang kanilang account mula sa JSON file" + }, + "from": { + "message": "Mula sa" + }, + "fromShapeShift": { + "message": "Mula sa ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Maikling indikasyon ng gas cost" + }, + "gasFee": { + "message": "Gas Fee" + }, + "gasLimit": { + "message": "Gas Limit" + }, + "gasLimitCalculation": { + "message": "Kinalkula namin ang iminungkahing gas limit base sa network success rates." + }, + "gasLimitRequired": { + "message": "Kailangan ang Gas Limit" + }, + "gasLimitTooLow": { + "message": "Ang gas limit ay hindi dabat bababa sa 21000" + }, + "gasPrice": { + "message": "Gas Price (GWEI)" + }, + "gasPriceCalculation": { + "message": "Kinalkula namin ang iminungkahing gas prices base sa network success rates." + }, + "gasPriceRequired": { + "message": "Kailangan ang Gas Price" + }, + "getEther": { + "message": "Kumuha ng Ether" + }, + "getEtherFromFaucet": { + "message": "Kumuha ng Ether mula sa faucet para sa $1", + "description": "Ipinapakita ang pangalan ng network para sa Ether faucet" + }, + "greaterThanMin": { + "message": "dapat mas malaki o katumbas ng $1.", + "description": "helper para sa pag-input ng hex bilang decimal input" + }, + "here": { + "message": "i-click ito", + "description": "tulad ng -i-click dito- para sa mas maraming impormasyon (kasama ng troubleTokenBalances)" + }, + "hide": { + "message": "Itago" + }, + "hideToken": { + "message": "Itago ang Token" + }, + "hideTokenPrompt": { + "message": "Itago ang Token?" + }, + "howToDeposit": { + "message": "Paano mo gustong mag-deposito ng Ether?" + }, + "import": { + "message": "I-import", + "description": "Button para i-import ang account mula sa napiling file" + }, + "importAccount": { + "message": "I-import ang Account" + }, + "importAnAccount": { + "message": "I-import ang account" + }, + "importDen": { + "message": "I-import ang Existing DEN" + }, + "imported": { + "message": "Na-import na", + "description": "status na nagpapakita na ang account ay lubos na na-load sa keyring" + }, + "infoHelp": { + "message": "Impormasyon at Tulong" + }, + "invalidAddress": { + "message": "Invalid ang address" + }, + "invalidGasParams": { + "message": "Invalid ang Gas Parameters" + }, + "invalidInput": { + "message": "Invalid ang input." + }, + "invalidRequest": { + "message": "Invalid ang Request" + }, + "jsonFile": { + "message": "JSON File", + "description": "format para sa pag-import ng account" + }, + "kovan": { + "message": "Kovan Test Network" + }, + "lessThanMax": { + "message": "dapat mas mababa o katumbas ng $1.", + "description": "helper para sa pag-input ng hex bilang decimal input" + }, + "limit": { + "message": "Limitasyon" + }, + "loading": { + "message": "Naglo-load..." + }, + "loadingTokens": { + "message": "Naglo-load ang Tokens..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "Log out" + }, + "loose": { + "message": "Loose" + }, + "mainnet": { + "message": "Main Ethereum Network" + }, + "message": { + "message": "Mensahe" + }, + "min": { + "message": "Minimum" + }, + "myAccounts": { + "message": "Aking mga Account" + }, + "needEtherInWallet": { + "message": "Upang makipag-ugnayan sa decentralized applications gamit ang MetaMask, kakailanganin mo ng Ether sa iyong wallet." + }, + "needImportFile": { + "message": "Dapat kang pumili ng file para i-import.", + "description": "Ang user ay nag-iimport ng account at kailangan magdagdag ng file upang tumuloy" + }, + "needImportPassword": { + "message": "Dapat mong i-enter ang password para sa napiling file.", + "description": "Password at file na kailangan upang ma-import ang account" + }, + "networks": { + "message": "Networks" + }, + "newAccount": { + "message": "Bagong Account" + }, + "newAccountNumberName": { + "message": "Account $1", + "description": "Ang default na pangalan ng susunod na account na gagawin sa create account screen" + }, + "newContract": { + "message": "Bagong Contract" + }, + "newPassword": { + "message": "Bagong Password (min 8 chars)" + }, + "newRecipient": { + "message": "Bagong Recipient" + }, + "next": { + "message": "Sunod" + }, + "noAddressForName": { + "message": "Walang naka-set na address para sa pangalang ito." + }, + "noDeposits": { + "message": "Walang natanggap na mga deposito" + }, + "noTransactionHistory": { + "message": "Walang kasaysayan ng transaksyon." + }, + "noTransactions": { + "message": "Walang mga Transaksyon" + }, + "notStarted": { + "message": "Hindi Sinimulan" + }, + "oldUI": { + "message": "Lumang UI" + }, + "oldUIMessage": { + "message": "Ikaw ay bumalik sa lumang UI. Maaari kang bumalik sa bagong UI mula sa isang opsyon sa dropdown menu na matatagpuan sa bandang taas at kanan." + }, + "or": { + "message": "o", + "description": "Pagpili sa pagitan ng paggawa of pag-import ng bagong account" + }, + "passwordMismatch": { + "message": "hindi nagtugma ang mga password", + "description": "Sa proseso ng paggawa ng password, ang dalawang password fields ay hindi nagtugma" + }, + "passwordShort": { + "message": "hindi sapat ang haba ng password", + "description": "Sa proseso ng paggawa ng password, ang password ay hindi in password creation process, hind sapat ang haba ng password upang maging ligtas" + }, + "pastePrivateKey": { + "message": "I-paste dito ang iyong private key string:", + "description": "Para sa pag-import ng account mula sa private key" + }, + "pasteSeed": { + "message": "I-paste dito ang iyong seed phrase!" + }, + "pleaseReviewTransaction": { + "message": "Mangyaring suriin ang iyong transaksyon." + }, + "privateKey": { + "message": "Private Key", + "description": "Piliin ang ganitong type ng file upang gamitin sa pag-import ng account" + }, + "privateKeyWarning": { + "message": "Babala: Huwag sabihin sa kahit na sino ang key na ito. Maaring makuha at manakaw ng sinumang nakakaalam ng iyong private key ang mga assets sa iyong account." + }, + "privateNetwork": { + "message": "Pribadong Network" + }, + "qrCode": { + "message": "Ipakita ang QR Code" + }, + "readdToken": { + "message": "Upang muling idagdag ang token na ito, pumunta sa "Magdagdag ng Token" sa options menu ng iyong account." + }, + "readMore": { + "message": "Alamin ang iba pang impormasyon dito." + }, + "receive": { + "message": "Tanggapin" + }, + "recipientAddress": { + "message": "Address ng Tatanggap" + }, + "refundAddress": { + "message": "Ang Iyong Refund Address" + }, + "rejected": { + "message": "Tinanggihan" + }, + "required": { + "message": "Kailangan" + }, + "retryWithMoreGas": { + "message": "Muling subukan ng may mas mataas na gas price dito" + }, + "revert": { + "message": "Ibalik" + }, + "rinkeby": { + "message": "Rinkeby Test Network" + }, + "ropsten": { + "message": "Ropsten Test Network" + }, + "sampleAccountName": { + "message": "Halimbawa: Ang aking bagong account", + "description": "Tulungan ang user na intindihin ang konsepto ng pagdagdag ng human-readable name sa kanilang account" + }, + "save": { + "message": "I-save" + }, + "saveAsFile": { + "message": "I-save bilang File", + "description": "Proseso sa pag-export ng Account" + }, + "selectService": { + "message": "Piliin ang Service" + }, + "send": { + "message": "Magpadala" + }, + "sendTokens": { + "message": "Magpadala ng Tokens" + }, + "sendTokensAnywhere": { + "message": "Magpadala ng Tokens sa sinumang may Ethereum account" + }, + "settings": { + "message": "Mga Setting" + }, + "shapeshiftBuy": { + "message": "Bumili gamit ang Shapeshift" + }, + "showPrivateKeys": { + "message": "Ipakita ang Private Keys" + }, + "showQRCode": { + "message": "Ipakita ang QR Code" + }, + "sign": { + "message": "I-sign" + }, + "signMessage": { + "message": "I-sign ang mensahe" + }, + "signNotice": { + "message": "Ang pag-sign ng mensaheng ito ay maaring magdulot ng mapanganib na epekto. I-sign lamang ang mga mensahe mula sa mga site na pinagkakatiwalaan mo ng iyong account. Ang mapanganib na paraang ito ay aalisin sa isa sa mga susunod na bersyon. " + }, + "sigRequest": { + "message": "Hiling na Signature" + }, + "sigRequested": { + "message": "Hiniling ang Signature" + }, + "status": { + "message": "Istado" + }, + "submit": { + "message": "I-submit" + }, + "takesTooLong": { + "message": "Masyadong matagal?" + }, + "testFaucet": { + "message": "Test Faucet" + }, + "to": { + "message": "To" + }, + "toETHviaShapeShift": { + "message": "$1 sa ETH sa pamamagitan ng ShapeShift", + "description": "Pupunan ng system ang deposit type sa simula ng mensahe" + }, + "tokenBalance": { + "message": "Ang iyong Token Balance ay:" + }, + "total": { + "message": "Kabuuan" + }, + "transactionMemo": { + "message": "Memo ng transaksyon (opsyonal)" + }, + "transactionNumber": { + "message": "Numero ng Transaksyon" + }, + "transfers": { + "message": "Mga Inilipat" + }, + "troubleTokenBalances": { + "message": "Nagkaroon kami ng problema sa paglo-load ng iyong mga balanseng token. Tingnan ito dito ", + "description": "Susundan ng link (dito) para tingnan ang token balances" + }, + "typePassword": { + "message": "I-type ang iyong Password" + }, + "uiWelcome": { + "message": "Maligayang pagdating sa Bagong UI (Beta)" + }, + "uiWelcomeMessage": { + "message": "Ginagamit mo na ngayon ang bagong MetaMask UI. I-explore at subukan ang mga bagong features tulad ng pagpapadala ng mga token, at ipaalam sa amin kung mayroon kang anumang mga isyu." + }, + "unavailable": { + "message": "Hindi Magagamit" + }, + "unknown": { + "message": "Hindi Alam" + }, + "unknownNetwork": { + "message": "Hindi Alam ang Pribadong Network" + }, + "unknownNetworkId": { + "message": "Hindi alam ang network ID" + }, + "usaOnly": { + "message": "USA lamang", + "description": "Ang paggamit ng exchange na ito ay limitado sa mga tao sa loob ng Estados Unidos" + }, + "usedByClients": { + "message": "Ginagamit ng iba't ibang mga clients" + }, + "viewAccount": { + "message": "Tingnan ang Account" + }, + "warning": { + "message": "Babala" + }, + "whatsThis": { + "message": "Ano ito?" + }, + "yourSigRequested": { + "message": "Hinihiling ang iyong signature" + }, + "youSign": { + "message": "Ikaw ay nagsa-sign" + } +} -- cgit From dff09cf95df3f817f6a8bcdc9611f8249a34d16d Mon Sep 17 00:00:00 2001 From: Marvin Vista Date: Thu, 15 Mar 2018 15:02:36 +0800 Subject: Translate to Tagalog #3535 Changed some special characters --- app/_locales/ph/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/ph/messages.json b/app/_locales/ph/messages.json index f91c6373e..29d63be02 100644 --- a/app/_locales/ph/messages.json +++ b/app/_locales/ph/messages.json @@ -443,7 +443,7 @@ "message": "Ipakita ang QR Code" }, "readdToken": { - "message": "Upang muling idagdag ang token na ito, pumunta sa "Magdagdag ng Token" sa options menu ng iyong account." + "message": "Upang muling idagdag ang token na ito, pumunta sa “Magdagdag ng Token” sa options menu ng iyong account." }, "readMore": { "message": "Alamin ang iba pang impormasyon dito." -- cgit From 09fe5ed9bae755c6d28f7ad5422bce9f9810ecd6 Mon Sep 17 00:00:00 2001 From: simon fourdinier Date: Thu, 15 Mar 2018 09:37:00 +0100 Subject: fix plural in french translation --- app/_locales/fr/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json index 7edbd41ab..da2cfe4f8 100644 --- a/app/_locales/fr/messages.json +++ b/app/_locales/fr/messages.json @@ -149,7 +149,7 @@ }, "depositCoin": { "message": "Déposez votre $1 à l'adresse ci-dessous", - "description": "Indique à l'utilisateur quelle monnaie ils a choisi de déposer avec shapeshift" + "description": "Indique à l'utilisateur quelle monnaie il a choisi de déposer avec shapeshift" }, "depositEth": { "message": "Dépôt Eth" -- cgit From 66193c823cdbb9474cbc3ed9e1c4ab7a28b9b230 Mon Sep 17 00:00:00 2001 From: Alexander Tseung Date: Thu, 15 Mar 2018 09:20:22 -0700 Subject: Update Deposit Eth icon (#3569) --- app/images/deposit-eth.svg | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 app/images/deposit-eth.svg (limited to 'app') diff --git a/app/images/deposit-eth.svg b/app/images/deposit-eth.svg new file mode 100644 index 000000000..a2c69242e --- /dev/null +++ b/app/images/deposit-eth.svg @@ -0,0 +1,32 @@ + + + + deposit-eth + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit From 8b065443f2ae825ab912674579b1d5894b7e3bd5 Mon Sep 17 00:00:00 2001 From: matteopey Date: Thu, 15 Mar 2018 18:45:49 +0100 Subject: Add italian translation --- app/_locales/it/messages.json | 609 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 609 insertions(+) create mode 100644 app/_locales/it/messages.json (limited to 'app') diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json new file mode 100644 index 000000000..f6042ade7 --- /dev/null +++ b/app/_locales/it/messages.json @@ -0,0 +1,609 @@ +{ + "accept": { + "message": "Accetta" + }, + "account": { + "message": "Account" + }, + "accountDetails": { + "message": "Dettagli Account" + }, + "accountName": { + "message": "Nome Account" + }, + "address": { + "message": "Indirizzo" + }, + "addToken": { + "message": "Aggiungi Token" + }, + "amount": { + "message": "Importo" + }, + "amountPlusGas": { + "message": "Importo + Gas" + }, + "appDescription": { + "message": "Ethereum Browser Extension", + "description": "La descrizione dell'applicazione" + }, + "appName": { + "message": "MetaMask", + "description": "Il nome dell'applicazione" + }, + "attemptingConnect": { + "message": "Tentativo di connessione alla blockchain." + }, + "available": { + "message": "Disponibile" + }, + "back": { + "message": "Indietro" + }, + "balance": { + "message": "Bilancio:" + }, + "balanceIsInsufficientGas": { + "message": "Bilancio insufficiente per il gas totale corrente" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "deve essere maggiore o uguale a $1 e minore o uguale a $2.", + "description": "aiuto per inserire un input esadecimale come decimale" + }, + "borrowDharma": { + "message": "Prendi in presisito con Dharma (Beta)" + }, + "buy": { + "message": "Compra" + }, + "buyCoinbase": { + "message": "Compra su Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase è il servizio più popolare al mondo per comprare e vendere bitcoin, ethereum e litecoin." + }, + "cancel": { + "message": "Cancella" + }, + "clickCopy": { + "message": "Clicca per Copiare" + }, + "confirm": { + "message": "Conferma" + }, + "confirmContract": { + "message": "Conferma Contratto" + }, + "confirmPassword": { + "message": "Conferma Password" + }, + "confirmTransaction": { + "message": "Conferma Transazione" + }, + "continueToCoinbase": { + "message": "Continua su Coinbase" + }, + "contractDeployment": { + "message": "Distribuzione Contratto" + }, + "conversionProgress": { + "message": "Conversione in corso" + }, + "copiedButton": { + "message": "Copiato" + }, + "copiedClipboard": { + "message": "Copiato negli Appunti" + }, + "copiedExclamation": { + "message": "Copiato!" + }, + "copy": { + "message": "Copia" + }, + "copyToClipboard": { + "message": "Copia negli appunti" + }, + "copyButton": { + "message": " Copia " + }, + "copyPrivateKey": { + "message": "Questa è la tua chiave privata (clicca per copiare)" + }, + "create": { + "message": "Crea" + }, + "createAccount": { + "message": "Crea Account" + }, + "createDen": { + "message": "Crea" + }, + "crypto": { + "message": "Crypto", + "description": "Tipo di exchange (cryptomonete)" + }, + "customGas": { + "message": "Personalizza Gas" + }, + "customize": { + "message": "Personalizza" + }, + "customRPC": { + "message": "RPC Personalizzata" + }, + "defaultNetwork": { + "message": "La rete predefinita per transazioni in Ether è la Rete Ethereum Principale." + }, + "denExplainer": { + "message": "Il DEN è il tuo archivio crittato con password dentro Metamask." + }, + "deposit": { + "message": "Deposita" + }, + "depositBTC": { + "message": "Deposita i tuoi BTC all'indirizzo sotto:" + }, + "depositCoin": { + "message": "Deposita $1 all'indirizzo sotto", + "description": "Dice all'utente quale moneta ha selezionato per depositare con Shapeshift" + }, + "depositEth": { + "message": "Deposita Eth" + }, + "depositEther": { + "message": "Deposita Ether" + }, + "depositFiat": { + "message": "Deposita con moneta Fiat" + }, + "depositFromAccount": { + "message": "Deposita da un altro account" + }, + "depositShapeShift": { + "message": "Deposita con ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Se possiedi altre criptomonete, puoi scambiare e depositare Ether direttamente nel tuo portafoglio MetaMask. Nessun account richiesto." + }, + "details": { + "message": "Dettagli" + }, + "directDeposit": { + "message": "Deposito Diretto" + }, + "directDepositEther": { + "message": "Deposita Direttamente Ether" + }, + "directDepositEtherExplainer": { + "message": "Se possiedi già degli Ether, questa è la via più veloce per aggiungere Ether al tuo portafoglio con un deposito diretto." + }, + "done": { + "message": "Finito" + }, + "edit": { + "message": "Modifica" + }, + "editAccountName": { + "message": "Modifica Nome Account" + }, + "encryptNewDen": { + "message": "Cripta il tuo nuovo DEN" + }, + "enterPassword": { + "message": "Inserisci password" + }, + "etherscanView": { + "message": "Vedi account su Etherscan" + }, + "exchangeRate": { + "message": "Tasso di cambio" + }, + "exportPrivateKey": { + "message": "Esporta Chiave Privata" + }, + "exportPrivateKeyWarning": { + "message": "Esporta chiave privata a tuo rischio." + }, + "failed": { + "message": "Fallito" + }, + "fiat": { + "message": "FIAT", + "description": "Tipo di scambio" + }, + "fileImportFail": { + "message": "Importazione file non funziona? Clicca qui!", + "description": "Aiuta gli utenti a importare il loro account da un file JSON" + }, + "from": { + "message": "Da" + }, + "fromShapeShift": { + "message": "Da ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Piccola indicazione del costo del gas" + }, + "gasFee": { + "message": "Costo Gas" + }, + "gasLimit": { + "message": "Gas Limite" + }, + "gasLimitCalculation": { + "message": "Calcoliamo il gas limite suggerito in base al successo delle transazioni in rete." + }, + "gasLimitRequired": { + "message": "Gas Limite Richiesto" + }, + "gasLimitTooLow": { + "message": "Il Gas Limite deve essere almeno 21000" + }, + "gasPrice": { + "message": "Prezzo del Gas (GWEI)" + }, + "gasPriceCalculation": { + "message": "Calcoliamo il gas limite suggerito in base al successo delle transazioni in rete." + }, + "gasPriceRequired": { + "message": "Prezzo Gas Richiesto" + }, + "getEther": { + "message": "Ottieni Ether" + }, + "getEtherFromFaucet": { + "message": "Ottieni Get Ether da un faucet per $1", + "description": "Visualizza il nome della rete per il faucet Ether" + }, + "greaterThanMin": { + "message": "deve essere maggiore o uguale a $1.", + "description": "aiuto per inserire un input esadecimale come decimale" + }, + "here": { + "message": "qui", + "description": "per intendere -clicca qui- per maggiori informazioni (va con troubleTokenBalances)" + }, + "hide": { + "message": "Nascondi" + }, + "hideToken": { + "message": "Nascondi Token" + }, + "hideTokenPrompt": { + "message": "Nascondi Token?" + }, + "howToDeposit": { + "message": "Come vuoi depositare Ether?" + }, + "import": { + "message": "Importa", + "description": "Tasto per importare un account da un file selezionato" + }, + "importAccount": { + "message": "Importa Account" + }, + "importAnAccount": { + "message": "Importa un account" + }, + "importDen": { + "message": "Importa un DEN Esistente" + }, + "imported": { + "message": "Importato", + "description": "stato che conferma che un account è stato totalmente caricato nel portachiavi" + }, + "infoHelp": { + "message": "Informazioni & Aiuto" + }, + "invalidAddress": { + "message": "Indirizzo non valido" + }, + "invalidGasParams": { + "message": "Parametri del Gas non validi" + }, + "invalidInput": { + "message": "Input non valido." + }, + "invalidRequest": { + "message": "Richiesta non Valida" + }, + "jsonFile": { + "message": "File JSON", + "description": "formato per importare un account" + }, + "kovan": { + "message": "Rete di test Kovan" + }, + "lessThanMax": { + "message": "deve essere minore o uguale a $1.", + "description": "aiuto per inserire un input esadecimale come decimale" + }, + "limit": { + "message": "Limite" + }, + "loading": { + "message": "Caricamento..." + }, + "loadingTokens": { + "message": "Caricamento Tokens..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "Disconnetti" + }, + "loose": { + "message": "Libero" + }, + "mainnet": { + "message": "Rete Ethereum Principale" + }, + "message": { + "message": "Messaggio" + }, + "min": { + "message": "Minimo" + }, + "myAccounts": { + "message": "Account Miei" + }, + "needEtherInWallet": { + "message": "Per interagire con applicazioni decentralizzate con MetaMask, devi possedere Ether nel tuo portafoglio." + }, + "needImportFile": { + "message": "Devi selezionare un file da importare.", + "description": "L'utente sta importando un account e deve aggiungere un file per continuare" + }, + "needImportPassword": { + "message": "Dei inserire una password per il file selezionato.", + "description": "Password e file necessari per importare un account" + }, + "networks": { + "message": "Reti" + }, + "newAccount": { + "message": "Nuovo Account" + }, + "newAccountNumberName": { + "message": "Account $1", + "description": "Nome predefinito per il prossimo account da creare nella schermata di creazione account" + }, + "newContract": { + "message": "Nuovo Contratto" + }, + "newPassword": { + "message": "Nuova Password (minimo 8 caratteri)" + }, + "newRecipient": { + "message": "Nuovo Destinatario" + }, + "next": { + "message": "Prossimo" + }, + "noAddressForName": { + "message": "Nessun indirizzo è stato impostato per questo nome." + }, + "noDeposits": { + "message": "Nessun deposito ricevuto" + }, + "noTransactionHistory": { + "message": "Nessuna cronologia delle transazioni." + }, + "noTransactions": { + "message": "Nessuna Transazione" + }, + "notStarted": { + "message": "Non Iniziato" + }, + "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." + }, + "or": { + "message": "o", + "description": "scelta tra creare o importare un nuovo account" + }, + "passwordMismatch": { + "message": "le password non corrispondono", + "description": "nella creazione della password, le due password all'interno dei campi non corrispondono" + }, + "passwordShort": { + "message": "password non sufficientemente lunga", + "description": "nella creazione della password, la password non è lunga abbastanza" + }, + "pastePrivateKey": { + "message": "Incolla la tua chiave privata qui:", + "description": "Per importare un account da una chiave privata" + }, + "pasteSeed": { + "message": "Incolla la tua frase seed qui!" + }, + "pleaseReviewTransaction": { + "message": "Ricontrolla la tua transazione." + }, + "privateKey": { + "message": "Chiave Privata", + "description": "seleziona questo tipo di file per importare un account" + }, + "privateKeyWarning": { + "message": "Attenzione: non dire a nessuno questa chiave! Chiunque con la tua chiave privata può rubare qualsiasi moneta contenuta nel tuo account." + }, + "privateNetwork": { + "message": "Rete Privata" + }, + "qrCode": { + "message": "Mostra Codice QR" + }, + "readdToken": { + "message": "Puoi aggiungere nuovamente questo token in futuro andando in “Aggiungi token” nel menu delle opzioni del tuo account." + }, + "readMore": { + "message": "Leggi di più qui." + }, + "receive": { + "message": "Ricevi" + }, + "recipientAddress": { + "message": "Indirizzo Destinatario" + }, + "refundAddress": { + "message": "Indirizzo di Rimborso" + }, + "rejected": { + "message": "Respinta" + }, + "required": { + "message": "Richiesto" + }, + "retryWithMoreGas": { + "message": "Riprova con un prezzo del Gas maggiore qui" + }, + "revert": { + "message": "Annulla" + }, + "rinkeby": { + "message": "Rete di test Rinkeby" + }, + "ropsten": { + "message": "Rete di test Ropsten" + }, + "sampleAccountName": { + "message": "Es: Il mio nuovo account", + "description": "Aiuta l'utente a capire il concetto di aggiungere un nome leggibile al loro account" + }, + "save": { + "message": "Salva" + }, + "saveAsFile": { + "message": "Salva come File", + "description": "Processo per esportare un account" + }, + "selectService": { + "message": "Seleziona Servizio" + }, + "send": { + "message": "Invia" + }, + "sendTokens": { + "message": "Invia Tokens" + }, + "sendTokensAnywhere": { + "message": "Invia Tokens a chiunque abbia un account Ethereum" + }, + "settings": { + "message": "Impostazioni" + }, + "shapeshiftBuy": { + "message": "Compra con Shapeshift" + }, + "showPrivateKeys": { + "message": "Mostra Chiave Privata" + }, + "showQRCode": { + "message": "Mostra Codie QR" + }, + "sign": { + "message": "Firma" + }, + "signMessage": { + "message": "Firma Messaggio" + }, + "signNotice": { + "message": "Firmare questo messaggio può avere effetti collaterali pericolosi. \nFirma messaggi da siti di cui ti fidi totalmente. \nQuesto metodo pericoloso sarà rimosso in versioni future." + }, + "sigRequest": { + "message": "Firma Richiesta" + }, + "sigRequested": { + "message": "Richiesta Firma" + }, + "status": { + "message": "Stato" + }, + "submit": { + "message": "Invia" + }, + "takesTooLong": { + "message": "Ci sta mettendo troppo?" + }, + "testFaucet": { + "message": "Prova Faucet" + }, + "to": { + "message": "A" + }, + "toETHviaShapeShift": { + "message": "$1 a ETH via ShapeShift", + "description": "il sistema riempirà il tipo di deposito all'inizio del messaggio" + }, + "tokenBalance": { + "message": "Bilancio Token:" + }, + "total": { + "message": "Totale" + }, + "transactionMemo": { + "message": "Promemoria Transazione (opzionale)" + }, + "transactionNumber": { + "message": "Numero Transazione" + }, + "transfers": { + "message": "Trasferimenti" + }, + "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" + }, + "typePassword": { + "message": "Inserisci Password" + }, + "uiWelcome": { + "message": "Benvenuto alla nuova interfaccia (Beta)" + }, + "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." + }, + "unavailable": { + "message": "Non Disponibile" + }, + "unknown": { + "message": "Sconosciuto" + }, + "unknownNetwork": { + "message": "Rete Privata Sconosciuta" + }, + "unknownNetworkId": { + "message": "ID rete sconosciuto" + }, + "usaOnly": { + "message": "Solo USA", + "description": "Usare questo sito di scambio è possibile solo per persone residenti in USA." + }, + "usedByClients": { + "message": "Usato da una varietà di clienti diversi" + }, + "viewAccount": { + "message": "Vedi Account" + }, + "warning": { + "message": "Attenzione" + }, + "whatsThis": { + "message": "Cos'è questo?" + }, + "yourSigRequested": { + "message": "La tua firma sta venendo richiesta" + }, + "youSign": { + "message": "Ti stai connettendo" + } +} -- cgit From d8f5150aa5bf4b04310f887504428f1caa13cbf4 Mon Sep 17 00:00:00 2001 From: Lazaridis Date: Fri, 16 Mar 2018 00:27:10 +0200 Subject: adds initial documentation, re #3568 --- app/scripts/metamask-controller.js | 178 ++++++++++++++++++++++++++++--------- 1 file changed, 138 insertions(+), 40 deletions(-) (limited to 'app') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 0a5c1d36f..31c0bed58 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -1,3 +1,9 @@ +/** + * @file The central metamask controller. Aggregates other controllers and exports an api. + * @copyright Copyright (c) 2018 MetaMask + * @license MIT + */ + const EventEmitter = require('events') const extend = require('xtend') const pump = require('pump') @@ -41,7 +47,11 @@ const seedPhraseVerifier = require('./lib/seed-phrase-verifier') module.exports = class MetamaskController extends EventEmitter { - constructor (opts) { + /** + * @constructor + * @param {Object} opts + */ + constructor (opts) { super() this.defaultMaxListeners = 20 @@ -223,10 +233,9 @@ module.exports = class MetamaskController extends EventEmitter { this.infuraController.store.subscribe(sendUpdate) } - // - // Constructor helpers - // - + /** + * Constructor helper: initialize a provider. + */ initializeProvider () { const providerOpts = { static: { @@ -257,6 +266,9 @@ module.exports = class MetamaskController extends EventEmitter { return providerProxy } + /** + * Constructor helper: initialize a public confi store. + */ initPublicConfigStore () { // get init state const publicConfigStore = new ObservableStore() @@ -282,6 +294,9 @@ module.exports = class MetamaskController extends EventEmitter { // State Management // + /** + * ? + */ getState () { const wallet = this.configManager.getWallet() const vault = this.keyringController.store.getState().vault @@ -319,7 +334,10 @@ module.exports = class MetamaskController extends EventEmitter { // // Remote Features // - + + /** + * ? + */ getApi () { const keyringController = this.keyringController const preferencesController = this.preferencesController @@ -517,10 +535,22 @@ module.exports = class MetamaskController extends EventEmitter { return '0x' + percentileNumBn.mul(GWEI_BN).toString(16) } - // - // Vault Management - // - +//============================================================================= +// VAULT / KEYRING RELATED METHODS +//============================================================================= + + /** + * Creates a new Vault(?) and create a new keychain(?) + * + * A vault is ... + * + * A keychain is ... + * + * + * @param {} password + * + * @returns {} vault + */ async createNewVaultAndKeychain (password) { const release = await this.createVaultMutex.acquire() let vault @@ -544,6 +574,11 @@ module.exports = class MetamaskController extends EventEmitter { return vault } + /** + * Create a new Vault and restore an existent keychain + * @param {} password + * @param {} seed + */ async createNewVaultAndRestore (password, seed) { const release = await this.createVaultMutex.acquire() try { @@ -557,16 +592,28 @@ module.exports = class MetamaskController extends EventEmitter { } } + /** + * Retrieves the first Identiy from the passed Vault and selects the related address + * + * An Identity is ... + * + * @param {} vault + */ selectFirstIdentity (vault) { const { identities } = vault const address = Object.keys(identities)[0] this.preferencesController.setSelectedAddress(address) } - // + // ? // Opinionated Keyring Management // + /** + * Adds a new account to ... + * + * @returns {} keyState + */ async addNewAccount () { const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] if (!primaryKeyring) { @@ -588,10 +635,12 @@ module.exports = class MetamaskController extends EventEmitter { return keyState } - // Adds the current vault's seed words to the UI's state tree. - // - // Used when creating a first vault, to allow confirmation. - // Also used when revealing the seed words in the confirmation view. + /** + * Adds the current vault's seed words to the UI's state tree. + * + * Used when creating a first vault, to allow confirmation. + * Also used when revealing the seed words in the confirmation view. + */ placeSeedWords (cb) { this.verifySeedPhrase() @@ -604,10 +653,13 @@ module.exports = class MetamaskController extends EventEmitter { }) } - // Verifies the current vault's seed words if they can restore the - // accounts belonging to the current vault. - // - // Called when the first account is created and on unlocking the vault. + /** + * Verifies the validity of the current vault's seed phrase. + * + * Validity: seed phrase can restore the accounts belonging to the current vault. + * + * Called when the first account is created and on unlocking the vault. + */ async verifySeedPhrase () { const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] @@ -632,22 +684,33 @@ module.exports = class MetamaskController extends EventEmitter { } } - // ClearSeedWordCache - // - // Removes the primary account's seed words from the UI's state tree, - // ensuring they are only ever available in the background process. + /** + * Remove the primary account seed phrase from the UI's state tree. + * + * The seed phrase remains available in the background process. + * + */ clearSeedWordCache (cb) { this.configManager.setSeedWords(null) cb(null, this.preferencesController.getSelectedAddress()) } - + + /** + * ? + */ resetAccount (cb) { const selectedAddress = this.preferencesController.getSelectedAddress() this.txController.wipeTransactions(selectedAddress) cb(null, selectedAddress) } - + /** + * Imports an account ... ? + * + * @param {} strategy + * @param {} args + * @param {} cb + */ importAccountWithStrategy (strategy, args, cb) { accountImporter.importAccount(strategy, args) .then((privateKey) => { @@ -659,11 +722,15 @@ module.exports = class MetamaskController extends EventEmitter { .catch((reason) => { cb(reason) }) } +//============================================================================= +// END (VAULT / KEYRING RELATED METHODS) +//============================================================================= - // - // Identity Management - // - // + + +//============================================================================= +// Identity Management +//============================================================================= async retryTransaction (txId, cb) { await this.txController.retryTransaction(txId) @@ -729,7 +796,11 @@ module.exports = class MetamaskController extends EventEmitter { } }) } - + + /** + * @param {} msgParams + * @param {} cb + */ signMessage (msgParams, cb) { log.info('MetaMaskController - signMessage') const msgId = msgParams.metamaskId @@ -758,6 +829,12 @@ module.exports = class MetamaskController extends EventEmitter { } // Prefixed Style Message Signing Methods: + + /** + * + * @param {} msgParams + * @param {} cb + */ approvePersonalMessage (msgParams, cb) { const msgId = this.personalMessageManager.addUnapprovedMessage(msgParams) this.sendUpdate() @@ -773,7 +850,10 @@ module.exports = class MetamaskController extends EventEmitter { } }) } - + + /** + * @param {} msgParams + */ signPersonalMessage (msgParams) { log.info('MetaMaskController - signPersonalMessage') const msgId = msgParams.metamaskId @@ -791,7 +871,10 @@ module.exports = class MetamaskController extends EventEmitter { return this.getState() }) } - + + /** + * @param {} msgParams + */ signTypedMessage (msgParams) { log.info('MetaMaskController - signTypedMessage') const msgId = msgParams.metamaskId @@ -843,13 +926,23 @@ module.exports = class MetamaskController extends EventEmitter { this.sendUpdate() cb() } - + + /** + * ? + * + * @param {} migratorOutput + */ restoreOldVaultAccounts (migratorOutput) { const { serialized } = migratorOutput return this.keyringController.restoreKeyring(serialized) .then(() => migratorOutput) } + /** + * ? + * + * @param {} migratorOutput + */ restoreOldLostAccounts (migratorOutput) { const { lostAccounts } = migratorOutput if (lostAccounts) { @@ -859,10 +952,15 @@ module.exports = class MetamaskController extends EventEmitter { return Promise.resolve(migratorOutput) } - // IMPORT LOST ACCOUNTS - // @Object with key lostAccounts: @Array accounts <{ address, privateKey }> - // Uses the array's private keys to create a new Simple Key Pair keychain - // and add it to the keyring controller. + + /** + * Import (lost) Accounts + * + * @param {Object} {lostAccounts} @Array accounts <{ address, privateKey }> + * + * Uses the array's private keys to create a new Simple Key Pair keychain + * and add it to the keyring controller. + */ importLostAccounts ({ lostAccounts }) { const privKeys = lostAccounts.map(acct => acct.privateKey) return this.keyringController.restoreKeyring({ @@ -871,9 +969,9 @@ module.exports = class MetamaskController extends EventEmitter { }) } - // - // config - // +//============================================================================= +// CONFIG +//============================================================================= // Log blocks -- cgit From 9523dd626652c84f660d5bd8ae73aa38c2a837ef Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 15 Mar 2018 16:05:49 -0700 Subject: More for i18n --- app/_locales/en/messages.json | 210 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 1ca31427d..9c13ebf52 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -14,9 +14,15 @@ "address": { "message": "Address" }, + "addCustomToken": { + "message": "Add custom token" + }, "addToken": { "message": "Add Token" }, + "addTokens": { + "message": "Add Tokens" + }, "amount": { "message": "Amount" }, @@ -34,6 +40,9 @@ "attemptingConnect": { "message": "Attempting to connect to blockchain." }, + "attributions": { + "message": "Attributions" + }, "available": { "message": "Available" }, @@ -43,6 +52,9 @@ "balance": { "message": "Balance:" }, + "balances": { + "message": "Your balances" + }, "balanceIsInsufficientGas": { "message": "Insufficient balance for current gas total" }, @@ -53,9 +65,15 @@ "message": "must be greater than or equal to $1 and less than or equal to $2.", "description": "helper for inputting hex as decimal input" }, + "blockiesIdenticon": { + "messages": "Use Blockies Identicon" + }, "borrowDharma": { "message": "Borrow With Dharma (Beta)" }, + "builtInCalifornia": { + "message": "MetaMask is designed and built in California." + }, "buy": { "message": "Buy" }, @@ -68,6 +86,9 @@ "cancel": { "message": "Cancel" }, + "classicInterface": { + "message": "Use classic interface" + }, "clickCopy": { "message": "Click to Copy" }, @@ -83,6 +104,9 @@ "confirmTransaction": { "message": "Confirm Transaction" }, + "continue": { + "message": "Continue" + }, "continueToCoinbase": { "message": "Continue to Coinbase" }, @@ -101,6 +125,9 @@ "copiedExclamation": { "message": "Copied!" }, + "copiedSafe": { + "message": "I've copied it somewhere safe" + }, "copy": { "message": "Copy" }, @@ -126,6 +153,12 @@ "message": "Crypto", "description": "Exchange type (cryptocurrencies)" }, + "currentConversion": { + "message": "Current Conversion" + }, + "currentNetwork": { + "message": "Current Network" + }, "customGas": { "message": "Customize Gas" }, @@ -135,6 +168,12 @@ "customRPC": { "message": "Custom RPC" }, + "decimalsMustZerotoTen": { + "message": "Decimals must be at least 0, and not over 36." + }, + "decimal": { + "message": "Decimals of Precision" + }, "defaultNetwork": { "message": "The default network for Ether transactions is Main Net." }, @@ -184,18 +223,27 @@ "done": { "message": "Done" }, + "downloadStatelogs": { + "message": "Download State Logs" + }, "edit": { "message": "Edit" }, "editAccountName": { "message": "Edit Account Name" }, + "emailUs": { + "message": "Email us!" + }, "encryptNewDen": { "message": "Encrypt your new DEN" }, "enterPassword": { "message": "Enter password" }, + "enterPasswordConfirm": { + "message": "Enter your password to confirm" + }, "etherscanView": { "message": "View account on Etherscan" }, @@ -219,9 +267,15 @@ "message": "File import not working? Click here!", "description": "Helps user import their account from a JSON file" }, + "followTwitter": { + "message": "Follow us on Twitter" + }, "from": { "message": "From" }, + "fromToSame": { + "message": "From and To address cannot be the same" + }, "fromShapeShift": { "message": "From ShapeShift" }, @@ -244,6 +298,9 @@ "gasLimitTooLow": { "message": "Gas limit must be at least 21000" }, + "generatingSeed": { + "message": "Generating Seed..." + }, "gasPrice": { "message": "Gas Price (GWEI)" }, @@ -268,6 +325,9 @@ "message": "here", "description": "as in -click here- for more information (goes with troubleTokenBalances)" }, + "hereList": { + "message": "Here's a list!!!!" + }, "hide": { "message": "Hide" }, @@ -280,6 +340,9 @@ "howToDeposit": { "message": "How would you like to deposit Ether?" }, + "holdEther": { + "message": "It allows you to hold ether & tokens, and serves as your bridge to decentralized applications." + }, "import": { "message": "Import", "description": "Button to import an account from a selected file" @@ -287,6 +350,9 @@ "importAccount": { "message": "Import Account" }, + "importAccountMsg": { + "message":" Imported accounts will not be associated with your originally created MetaMask account seedphrase. Learn more about imported accounts " + }, "importAnAccount": { "message": "Import an account" }, @@ -300,9 +366,18 @@ "infoHelp": { "message": "Info & Help" }, + "insufficientFunds": { + "message": "Insufficient funds." + }, + "insufficientTokens": { + "message": "Insufficient tokens." + }, "invalidAddress": { "message": "Invalid address" }, + "invalidAddressRecipient": { + "message": "Recipient address is invalid" + }, "invalidGasParams": { "message": "Invalid Gas Parameters" }, @@ -312,6 +387,12 @@ "invalidRequest": { "message": "Invalid Request" }, + "invalidRPC": { + "message": "Invalid RPC URI" + }, + "jsonFail": { + "message": "Something went wrong. Please make sure your JSON file is properly formatted." + }, "jsonFile": { "message": "JSON File", "description": "format for importing an account" @@ -319,10 +400,16 @@ "kovan": { "message": "Kovan Test Network" }, + "knowledgeDataBase": { + "message": "Visit our Knowledge Base" + }, "lessThanMax": { "message": "must be less than or equal to $1.", "description": "helper for inputting hex as decimal input" }, + "likeToAddTokens": { + "message": "Would you like to add these tokens?" + }, "limit": { "message": "Limit" }, @@ -335,24 +422,36 @@ "localhost": { "message": "Localhost 8545" }, + "login": { + "message": "Log In" + }, "logout": { "message": "Log out" }, "loose": { "message": "Loose" }, + "loweCaseWords": { + "message": "seed words only have lowercase characters" + }, "mainnet": { "message": "Main Ethereum Network" }, "message": { "message": "Message" }, + "metamaskDescription": { + "message": "MetaMask is a secure identity vault for Ethereum." + }, "min": { "message": "Minimum" }, "myAccounts": { "message": "My Accounts" }, + "mustSelectOne": { + "message": "Must select at least 1 token." + }, "needEtherInWallet": { "message": "To interact with decentralized applications using MetaMask, you’ll need Ether in your wallet." }, @@ -364,6 +463,9 @@ "message": "You must enter a password for the selected file.", "description": "Password and file needed to import an account" }, + "negativeETH": { + "message": "Can not send negative amounts of ETH." + }, "networks": { "message": "Networks" }, @@ -383,6 +485,9 @@ "newRecipient": { "message": "New Recipient" }, + "newRPC": { + "message": "New RPC URL" + }, "next": { "message": "Next" }, @@ -411,6 +516,9 @@ "message": "or", "description": "choice between creating or importing a new account" }, + "passwordCorrect": { + "message": "Please make sure your password is correct." + }, "passwordMismatch": { "message": "passwords don't match", "description": "in password creation process, the two new password fields did not match" @@ -426,9 +534,15 @@ "pasteSeed": { "message": "Paste your seed phrase here!" }, + "personalAddressDetected": { + "message": "Personal address detected. Input the token contract address." + }, "pleaseReviewTransaction": { "message": "Please review your transaction." }, + "privacyMsg": { + "message": "Privacy Policy" + }, "privateKey": { "message": "Private Key", "description": "select this type of file to use to import an account" @@ -448,6 +562,9 @@ "readMore": { "message": "Read more here." }, + "readMore2": { + "message": "Read more." + }, "receive": { "message": "Receive" }, @@ -460,12 +577,24 @@ "rejected": { "message": "Rejected" }, + "resetAccount": { + "message": "Reset Account" + }, + "restoreFromSeed": { + "message": "Restore from seed phrase" + }, "required": { "message": "Required" }, "retryWithMoreGas": { "message": "Retry with a higher gas price here" }, + "revealSeedWords": { + "message": "Reveal Seed Words" + }, + "revealSeedWordsWarning": { + "message": "Do not recover your seed words in a public place! These words can be used to steal all your accounts." + }, "revert": { "message": "Revert" }, @@ -486,12 +615,36 @@ "message": "Save as File", "description": "Account export process" }, + "saveSeedAsFile": { + "message": "Save Seed Words As File" + }, + "search": { + "message": "Search" + }, + "secretPhrase": { + "message": "Enter your secret twelve word phrase here to restore your vault." + }, + "seedPhraseReq": { + "message": "seed phrases are 12 words long" + }, + "select": { + "message": "Select" + }, + "selectCurrency": { + "message": "Select Currency" + }, "selectService": { "message": "Select Service" }, + "selectType": { + "message": "Select Type" + }, "send": { "message": "Send" }, + "sendETH": { + "message": "Send ETH" + }, "sendTokens": { "message": "Send Tokens" }, @@ -525,15 +678,33 @@ "sigRequested": { "message": "Signature Requested" }, + "spaceBetween": { + "message": "there can only be a space between words" + }, "status": { "message": "Status" }, + "stateLogs": { + "message": "State Logs" + }, + "stateLogsDescription": { + "message": "State logs contain your public account addresses and sent transactions." + }, "submit": { "message": "Submit" }, + "supportCenter": { + "message": "Visit our Support Center" + }, + "symbolBetweenZeroTen": { + "message": "Symbol must be between 0 and 10 characters." + }, "takesTooLong": { "message": "Taking too long?" }, + "terms": { + "message": "Terms of Use" + }, "testFaucet": { "message": "Test Faucet" }, @@ -544,12 +715,30 @@ "message": "$1 to ETH via ShapeShift", "description": "system will fill in deposit type in start of message" }, + "tokenAddress": { + "message": "Token Address" + }, + "tokenAlreadyAdded": { + "message": "Token has already been added." + }, "tokenBalance": { "message": "Your Token Balance is:" }, + "tokenSelection": { + "message": "Search for tokens or select from our list of popular tokens." + }, + "tokenSymbol": { + "message": "Token Symbol" + }, + "tokenWarning1": { + "message": "Keep track of the tokens you’ve bought with your MetaMask account. If you bought tokens using a different account, those tokens will not appear here." + }, "total": { "message": "Total" }, + "transactions": { + "message": "transactions" + }, "transactionMemo": { "message": "Transaction memo (optional)" }, @@ -563,6 +752,9 @@ "message": "We had trouble loading your token balances. You can view them ", "description": "Followed by a link (here) to view token balances" }, + "twelveWords": { + "message": "These 12 words are the only way to restore your MetaMask accounts.\nSave them somewhere safe and secret." + }, "typePassword": { "message": "Type Your Password" }, @@ -584,6 +776,9 @@ "unknownNetworkId": { "message": "Unknown network ID" }, + "uriErrorMsg": { + "message": "URIs require the appropriate HTTP/HTTPS prefix." + }, "usaOnly": { "message": "USA only", "description": "Using this exchange is limited to people inside the USA" @@ -591,12 +786,27 @@ "usedByClients": { "message": "Used by a variety of different clients" }, + "useOldUI": { + "message": "Use old UI" + }, + "validFileImport": { + "message": "You must select a valid file to import." + }, + "vaultCreated": { + "message": "Vault Created" + }, "viewAccount": { "message": "View Account" }, + "visitWebSite": { + "message": "Visit our web site" + }, "warning": { "message": "Warning" }, + "welcomeBeta": { + "message": "Welcome to MetaMask Beta" + }, "whatsThis": { "message": "What's this?" }, -- cgit From 904f00e8acf40a72d233d1776c8aa760026e1bd3 Mon Sep 17 00:00:00 2001 From: Lazaridis Date: Fri, 16 Mar 2018 02:29:53 +0200 Subject: group all vault/keyring related methods together, re #3568 --- app/scripts/metamask-controller.js | 258 +++++++++++++++++++------------------ 1 file changed, 130 insertions(+), 128 deletions(-) (limited to 'app') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 31c0bed58..cbdf757c6 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -267,7 +267,7 @@ module.exports = class MetamaskController extends EventEmitter { } /** - * Constructor helper: initialize a public confi store. + * Constructor helper: initialize a public config store. */ initPublicConfigStore () { // get init state @@ -290,12 +290,11 @@ module.exports = class MetamaskController extends EventEmitter { return publicConfigStore } - // - // State Management - // /** - * ? + * The metamask-state of the various controllers, made available to the UI + * + * @returns {Object} status */ getState () { const wallet = this.configManager.getWallet() @@ -331,12 +330,10 @@ module.exports = class MetamaskController extends EventEmitter { ) } - // - // Remote Features - // - /** - * ? + * Returns an api-object which is consumed by the UI + * + * @returns {Object} */ getApi () { const keyringController = this.keyringController @@ -656,7 +653,7 @@ module.exports = class MetamaskController extends EventEmitter { /** * Verifies the validity of the current vault's seed phrase. * - * Validity: seed phrase can restore the accounts belonging to the current vault. + * Validity: seed phrase restores the accounts belonging to the current vault. * * Called when the first account is created and on unlocking the vault. */ @@ -722,81 +719,9 @@ module.exports = class MetamaskController extends EventEmitter { .catch((reason) => { cb(reason) }) } -//============================================================================= -// END (VAULT / KEYRING RELATED METHODS) -//============================================================================= - - - -//============================================================================= -// Identity Management -//============================================================================= - - async retryTransaction (txId, cb) { - await this.txController.retryTransaction(txId) - const state = await this.getState() - return state - } - - - newUnsignedMessage (msgParams, cb) { - const msgId = this.messageManager.addUnapprovedMessage(msgParams) - this.sendUpdate() - this.opts.showUnconfirmedMessage() - this.messageManager.once(`${msgId}:finished`, (data) => { - switch (data.status) { - case 'signed': - return cb(null, data.rawSig) - case 'rejected': - return cb(new Error('MetaMask Message Signature: User denied message signature.')) - default: - return cb(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) - } - }) - } - - newUnsignedPersonalMessage (msgParams, cb) { - if (!msgParams.from) { - return cb(new Error('MetaMask Message Signature: from field is required.')) - } - - const msgId = this.personalMessageManager.addUnapprovedMessage(msgParams) - this.sendUpdate() - this.opts.showUnconfirmedMessage() - this.personalMessageManager.once(`${msgId}:finished`, (data) => { - switch (data.status) { - case 'signed': - return cb(null, data.rawSig) - case 'rejected': - return cb(new Error('MetaMask Message Signature: User denied message signature.')) - default: - return cb(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) - } - }) - } - - newUnsignedTypedMessage (msgParams, cb) { - let msgId - try { - msgId = this.typedMessageManager.addUnapprovedMessage(msgParams) - this.sendUpdate() - this.opts.showUnconfirmedMessage() - } catch (e) { - return cb(e) - } + // --------------------------------------------------------------------------- + // Identity Management (sign) - this.typedMessageManager.once(`${msgId}:finished`, (data) => { - switch (data.status) { - case 'signed': - return cb(null, data.rawSig) - case 'rejected': - return cb(new Error('MetaMask Message Signature: User denied message signature.')) - default: - return cb(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) - } - }) - } - /** * @param {} msgParams * @param {} cb @@ -820,14 +745,6 @@ module.exports = class MetamaskController extends EventEmitter { }) } - cancelMessage (msgId, cb) { - const messageManager = this.messageManager - messageManager.rejectMsg(msgId) - if (cb && typeof cb === 'function') { - cb(null, this.getState()) - } - } - // Prefixed Style Message Signing Methods: /** @@ -892,41 +809,10 @@ module.exports = class MetamaskController extends EventEmitter { return this.getState() }) } - - cancelPersonalMessage (msgId, cb) { - const messageManager = this.personalMessageManager - messageManager.rejectMsg(msgId) - if (cb && typeof cb === 'function') { - cb(null, this.getState()) - } - } - - cancelTypedMessage (msgId, cb) { - const messageManager = this.typedMessageManager - messageManager.rejectMsg(msgId) - if (cb && typeof cb === 'function') { - cb(null, this.getState()) - } - } - - markAccountsFound (cb) { - this.configManager.setLostAccounts([]) - this.sendUpdate() - cb(null, this.getState()) - } - - markPasswordForgotten(cb) { - this.configManager.setPasswordForgotten(true) - this.sendUpdate() - cb() - } - - unMarkPasswordForgotten(cb) { - this.configManager.setPasswordForgotten(false) - this.sendUpdate() - cb() - } + // --------------------------------------------------------------------------- + // Account Restauration + /** * ? * @@ -952,7 +838,6 @@ module.exports = class MetamaskController extends EventEmitter { return Promise.resolve(migratorOutput) } - /** * Import (lost) Accounts * @@ -969,6 +854,123 @@ module.exports = class MetamaskController extends EventEmitter { }) } +//============================================================================= +// END (VAULT / KEYRING RELATED METHODS) +//============================================================================= + + + +//============================================================================= +// MESSAGES +//============================================================================= + + async retryTransaction (txId, cb) { + await this.txController.retryTransaction(txId) + const state = await this.getState() + return state + } + + + newUnsignedMessage (msgParams, cb) { + const msgId = this.messageManager.addUnapprovedMessage(msgParams) + this.sendUpdate() + this.opts.showUnconfirmedMessage() + this.messageManager.once(`${msgId}:finished`, (data) => { + switch (data.status) { + case 'signed': + return cb(null, data.rawSig) + case 'rejected': + return cb(new Error('MetaMask Message Signature: User denied message signature.')) + default: + return cb(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) + } + }) + } + + newUnsignedPersonalMessage (msgParams, cb) { + if (!msgParams.from) { + return cb(new Error('MetaMask Message Signature: from field is required.')) + } + + const msgId = this.personalMessageManager.addUnapprovedMessage(msgParams) + this.sendUpdate() + this.opts.showUnconfirmedMessage() + this.personalMessageManager.once(`${msgId}:finished`, (data) => { + switch (data.status) { + case 'signed': + return cb(null, data.rawSig) + case 'rejected': + return cb(new Error('MetaMask Message Signature: User denied message signature.')) + default: + return cb(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) + } + }) + } + + newUnsignedTypedMessage (msgParams, cb) { + let msgId + try { + msgId = this.typedMessageManager.addUnapprovedMessage(msgParams) + this.sendUpdate() + this.opts.showUnconfirmedMessage() + } catch (e) { + return cb(e) + } + + this.typedMessageManager.once(`${msgId}:finished`, (data) => { + switch (data.status) { + case 'signed': + return cb(null, data.rawSig) + case 'rejected': + return cb(new Error('MetaMask Message Signature: User denied message signature.')) + default: + return cb(new Error(`MetaMask Message Signature: Unknown problem: ${JSON.stringify(msgParams)}`)) + } + }) + } + + cancelMessage (msgId, cb) { + const messageManager = this.messageManager + messageManager.rejectMsg(msgId) + if (cb && typeof cb === 'function') { + cb(null, this.getState()) + } + } + + cancelPersonalMessage (msgId, cb) { + const messageManager = this.personalMessageManager + messageManager.rejectMsg(msgId) + if (cb && typeof cb === 'function') { + cb(null, this.getState()) + } + } + + cancelTypedMessage (msgId, cb) { + const messageManager = this.typedMessageManager + messageManager.rejectMsg(msgId) + if (cb && typeof cb === 'function') { + cb(null, this.getState()) + } + } + + markAccountsFound (cb) { + this.configManager.setLostAccounts([]) + this.sendUpdate() + cb(null, this.getState()) + } + + markPasswordForgotten(cb) { + this.configManager.setPasswordForgotten(true) + this.sendUpdate() + cb() + } + + unMarkPasswordForgotten(cb) { + this.configManager.setPasswordForgotten(false) + this.sendUpdate() + cb() + } + //============================================================================= // CONFIG //============================================================================= -- cgit From bb6af25e20f723942a2b5770a8763bff3b6d6032 Mon Sep 17 00:00:00 2001 From: Lazaridis Date: Fri, 16 Mar 2018 03:22:10 +0200 Subject: add ESLint exceptions for //= and //-, re #3568 --- app/scripts/metamask-controller.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index cbdf757c6..953e22fc7 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -858,11 +858,11 @@ module.exports = class MetamaskController extends EventEmitter { // END (VAULT / KEYRING RELATED METHODS) //============================================================================= +// - -//============================================================================= +//============================================================================= // MESSAGES -//============================================================================= +//============================================================================= async retryTransaction (txId, cb) { await this.txController.retryTransaction(txId) -- cgit From 55d0ffd4a0363c3e3f9c428d4e7830d2965fd628 Mon Sep 17 00:00:00 2001 From: nujabes403 Date: Fri, 16 Mar 2018 14:22:09 +0900 Subject: Update messages.json --- app/_locales/ko/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index a0290c119..f03be982f 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -1,6 +1,6 @@ { "accept": { - "message": "허용" + "message": "수락" }, "account": { "message": "계좌" -- cgit From 4be9d146dbb0b8f99f9c1afe4e11c25fd7dbf04a Mon Sep 17 00:00:00 2001 From: nujabes403 Date: Fri, 16 Mar 2018 14:22:36 +0900 Subject: Update messages.json --- app/_locales/ko/messages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index f03be982f..890e45d37 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -18,10 +18,10 @@ "message": "토큰 추가" }, "amount": { - "message": "양" + "message": "금액" }, "amountPlusGas": { - "message": "양 + 가스" + "message": "금액 + 가스" }, "appDescription": { "message": "이더리움 브라우저 확장 프로그램", -- cgit From 6fa8de6e937cc8d43448b5e062c527a6257d71a0 Mon Sep 17 00:00:00 2001 From: nujabes403 Date: Fri, 16 Mar 2018 14:24:41 +0900 Subject: Update messages.json --- app/_locales/ko/messages.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'app') diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index 890e45d37..75f230cff 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -35,7 +35,7 @@ "message": "블록체인에 접속 시도 중입니다." }, "available": { - "message": "유효" + "message": "사용 가능한" }, "back": { "message": "뒤로" @@ -50,7 +50,7 @@ "message": "베타" }, "betweenMinAndMax": { - "message": "1 달러 이상 2 달러 이하여야 합니다.", + "message": "$1 이상 $2 이하여야 합니다.", "description": "helper for inputting hex as decimal input" }, "borrowDharma": { @@ -148,14 +148,14 @@ "message": "아래 주소로 BTC를 입급해주세요." }, "depositCoin": { - "message": "아래 주소로 1달러를 입금해주세요.", + "message": "아래 주소로 $1를 입금해주세요.", "description": "Tells the user what coin they have selected to deposit with shapeshift" }, "depositEth": { - "message": "이더리움 입금" + "message": "이더 입금" }, "depositEther": { - "message": "이더리움 입금" + "message": "이더 입금" }, "depositFiat": { "message": "현금으로 입금하기" @@ -167,7 +167,7 @@ "message": "ShapeShift를 통해 입금하기" }, "depositShapeShiftExplainer": { - "message": "다른 암호화폐를 가지고 있으면, 계좌 생성 필요없이, 거래를 하거나 메타마스크 지갑을 통해 이더리움을 입금할 수 있습니다." + "message": "다른 암호화폐를 가지고 있으면, 계좌 생성 필요없이, 거래를 하거나 메타마스크 지갑을 통해 이더를 입금할 수 있습니다." }, "details": { "message": "상세" @@ -176,10 +176,10 @@ "message": "즉시 입금" }, "directDepositEther": { - "message": "이더리움 즉시 입금" + "message": "이더 즉시 입금" }, "directDepositEtherExplainer": { - "message": "이더리움을 이미 보유하고 있다면, 직접 입금을 통해 이더리움을 즉시 입금하실 수 있습니다." + "message": "이더를 이미 보유하고 있다면, 직접 입금을 통해 이더를 즉시 입금하실 수 있습니다." }, "done": { "message": "완료" @@ -254,14 +254,14 @@ "message": "가스 가격이 필요합니다." }, "getEther": { - "message": "이더리움 얻기" + "message": "이더 얻기" }, "getEtherFromFaucet": { - "message": "faucet에서 1달러에 달하는 이더리움을 얻으세요.", + "message": "faucet에서 $1에 달하는 이더를 얻으세요.", "description": "Displays network name for Ether faucet" }, "greaterThanMin": { - "message": "1 달러 이상이어야 합니다.", + "message": "$1 이상이어야 합니다.", "description": "helper for inputting hex as decimal input" }, "here": { @@ -278,7 +278,7 @@ "message": "토큰 숨기기?" }, "howToDeposit": { - "message": "어떤 방법으로 이더리움을 입금하시겠습니까?" + "message": "어떤 방법으로 이더를 입금하시겠습니까?" }, "import": { "message": "파일에서 가져오기", @@ -320,7 +320,7 @@ "message": "Kovan 테스트넷" }, "lessThanMax": { - "message": "1달러 이하여야합니다.", + "message": "$1 이하여야합니다.", "description": "helper for inputting hex as decimal input" }, "limit": { @@ -354,7 +354,7 @@ "message": "내 계좌" }, "needEtherInWallet": { - "message": "dApp을 이용하기 위해서는 지갑에 이더리움이 있어야 합니다." + "message": "dApp을 이용하기 위해서는 지갑에 이더가 있어야 합니다." }, "needImportFile": { "message": "가져올 파일을 선택해주세요.", @@ -496,7 +496,7 @@ "message": "토큰 전송" }, "sendTokensAnywhere": { - "message": "이더리움 계좌로 토큰 전송" + "message": "이더 계좌로 토큰 전송" }, "settings": { "message": "설정" @@ -541,7 +541,7 @@ "message": "대상" }, "toETHviaShapeShift": { - "message": "ShapeShift를 통해 1 달러를 ETH로 바꾸기", + "message": "ShapeShift를 통해 $1를 ETH로 바꾸기", "description": "system will fill in deposit type in start of message" }, "tokenBalance": { -- cgit From 7432b13b3316086daed125b5991227415932bc3d Mon Sep 17 00:00:00 2001 From: nujabes403 Date: Fri, 16 Mar 2018 14:26:40 +0900 Subject: Update messages.json --- app/_locales/ko/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index 75f230cff..24f27fee5 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -200,7 +200,7 @@ "message": "이더스캔에서 계좌보기" }, "exchangeRate": { - "message": "교환비율" + "message": "환율" }, "exportPrivateKey": { "message": "비밀키 내보내기" -- cgit From 0a725285b447f3e14f2d4fa2493590839fd3e00e Mon Sep 17 00:00:00 2001 From: nujabes403 Date: Fri, 16 Mar 2018 14:27:56 +0900 Subject: Update messages.json --- app/_locales/ko/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index 24f27fee5..d3801c4f5 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -420,7 +420,7 @@ "description": "in password creation process, the password is not long enough to be secure" }, "pastePrivateKey": { - "message": "비밀키 스트링을 붙여넣어주세요.", + "message": "비밀키를 입력해주세요.", "description": "For importing an account from a private key" }, "pasteSeed": { -- cgit From 51f85b8021a57d1c32d83c4b37c46ca095d22709 Mon Sep 17 00:00:00 2001 From: matteopey Date: Fri, 16 Mar 2018 14:53:57 +0100 Subject: Fix as requested by review --- app/_locales/it/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json index f6042ade7..5cf8abae0 100644 --- a/app/_locales/it/messages.json +++ b/app/_locales/it/messages.json @@ -601,7 +601,7 @@ "message": "Cos'è questo?" }, "yourSigRequested": { - "message": "La tua firma sta venendo richiesta" + "message": "E' richiesta la tua firma" }, "youSign": { "message": "Ti stai connettendo" -- cgit From b3c3f50cf9f0c9fc7e36fd31443fc2cd4c76db77 Mon Sep 17 00:00:00 2001 From: matteopey Date: Fri, 16 Mar 2018 14:55:49 +0100 Subject: Clients because we mean Ethereum clients --- app/_locales/it/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json index 5cf8abae0..997e2538d 100644 --- a/app/_locales/it/messages.json +++ b/app/_locales/it/messages.json @@ -589,7 +589,7 @@ "description": "Usare questo sito di scambio è possibile solo per persone residenti in USA." }, "usedByClients": { - "message": "Usato da una varietà di clienti diversi" + "message": "Usato da una varietà di clients diversi" }, "viewAccount": { "message": "Vedi Account" -- cgit From e1d6398b0fed39e579c0383e34236b30d3154295 Mon Sep 17 00:00:00 2001 From: Lazaridis Date: Fri, 16 Mar 2018 18:37:56 +0200 Subject: moves setup-related code towads end of file, re #3568 --- app/scripts/metamask-controller.js | 239 +++++++++++++++++++------------------ 1 file changed, 124 insertions(+), 115 deletions(-) (limited to 'app') diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 953e22fc7..18d71874a 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -290,6 +290,9 @@ module.exports = class MetamaskController extends EventEmitter { return publicConfigStore } +//============================================================================= +// EXPOSED TO THE UI SUBSYSTEM +//============================================================================= /** * The metamask-state of the various controllers, made available to the UI @@ -415,122 +418,7 @@ module.exports = class MetamaskController extends EventEmitter { } } - setupUntrustedCommunication (connectionStream, originDomain) { - // Check if new connection is blacklisted - if (this.blacklistController.checkForPhishing(originDomain)) { - log.debug('MetaMask - sending phishing warning for', originDomain) - this.sendPhishingWarning(connectionStream, originDomain) - return - } - - // setup multiplexing - const mux = setupMultiplex(connectionStream) - // connect features - this.setupProviderConnection(mux.createStream('provider'), originDomain) - this.setupPublicConfig(mux.createStream('publicConfig')) - } - - setupTrustedCommunication (connectionStream, originDomain) { - // setup multiplexing - const mux = setupMultiplex(connectionStream) - // connect features - this.setupControllerConnection(mux.createStream('controller')) - this.setupProviderConnection(mux.createStream('provider'), originDomain) - } - - sendPhishingWarning (connectionStream, hostname) { - const mux = setupMultiplex(connectionStream) - const phishingStream = mux.createStream('phishing') - phishingStream.write({ hostname }) - } - - setupControllerConnection (outStream) { - const api = this.getApi() - const dnode = Dnode(api) - pump( - outStream, - dnode, - outStream, - (err) => { - if (err) log.error(err) - } - ) - dnode.on('remote', (remote) => { - // push updates to popup - const sendUpdate = remote.sendUpdate.bind(remote) - this.on('update', sendUpdate) - }) - } - - setupProviderConnection (outStream, origin) { - // setup json rpc engine stack - const engine = new RpcEngine() - // create filter polyfill middleware - const filterMiddleware = createFilterMiddleware({ - provider: this.provider, - blockTracker: this.provider._blockTracker, - }) - - engine.push(createOriginMiddleware({ origin })) - engine.push(createLoggerMiddleware({ origin })) - engine.push(filterMiddleware) - engine.push(createProviderMiddleware({ provider: this.provider })) - - // setup connection - const providerStream = createEngineStream({ engine }) - pump( - outStream, - providerStream, - outStream, - (err) => { - // cleanup filter polyfill middleware - filterMiddleware.destroy() - if (err) log.error(err) - } - ) - } - - setupPublicConfig (outStream) { - pump( - asStream(this.publicConfigStore), - outStream, - (err) => { - if (err) log.error(err) - } - ) - } - - privateSendUpdate () { - this.emit('update', this.getState()) - } - - getGasPrice () { - const { recentBlocksController } = this - const { recentBlocks } = recentBlocksController.store.getState() - - // Return 1 gwei if no blocks have been observed: - if (recentBlocks.length === 0) { - return '0x' + GWEI_BN.toString(16) - } - - const lowestPrices = recentBlocks.map((block) => { - if (!block.gasPrices || block.gasPrices.length < 1) { - return GWEI_BN - } - return block.gasPrices - .map(hexPrefix => hexPrefix.substr(2)) - .map(hex => new BN(hex, 16)) - .sort((a, b) => { - return a.gt(b) ? 1 : -1 - })[0] - }) - .map(number => number.div(GWEI_BN).toNumber()) - - const percentileNum = percentile(50, lowestPrices) - const percentileNumBn = new BN(percentileNum) - return '0x' + percentileNumBn.mul(GWEI_BN).toString(16) - } //============================================================================= // VAULT / KEYRING RELATED METHODS @@ -971,6 +859,127 @@ module.exports = class MetamaskController extends EventEmitter { cb() } +//============================================================================= +// SETUP +//============================================================================= + + setupUntrustedCommunication (connectionStream, originDomain) { + // Check if new connection is blacklisted + if (this.blacklistController.checkForPhishing(originDomain)) { + log.debug('MetaMask - sending phishing warning for', originDomain) + this.sendPhishingWarning(connectionStream, originDomain) + return + } + + // setup multiplexing + const mux = setupMultiplex(connectionStream) + // connect features + this.setupProviderConnection(mux.createStream('provider'), originDomain) + this.setupPublicConfig(mux.createStream('publicConfig')) + } + + setupTrustedCommunication (connectionStream, originDomain) { + // setup multiplexing + const mux = setupMultiplex(connectionStream) + // connect features + this.setupControllerConnection(mux.createStream('controller')) + this.setupProviderConnection(mux.createStream('provider'), originDomain) + } + + sendPhishingWarning (connectionStream, hostname) { + const mux = setupMultiplex(connectionStream) + const phishingStream = mux.createStream('phishing') + phishingStream.write({ hostname }) + } + + setupControllerConnection (outStream) { + const api = this.getApi() + const dnode = Dnode(api) + pump( + outStream, + dnode, + outStream, + (err) => { + if (err) log.error(err) + } + ) + dnode.on('remote', (remote) => { + // push updates to popup + const sendUpdate = remote.sendUpdate.bind(remote) + this.on('update', sendUpdate) + }) + } + + setupProviderConnection (outStream, origin) { + // setup json rpc engine stack + const engine = new RpcEngine() + + // create filter polyfill middleware + const filterMiddleware = createFilterMiddleware({ + provider: this.provider, + blockTracker: this.provider._blockTracker, + }) + + engine.push(createOriginMiddleware({ origin })) + engine.push(createLoggerMiddleware({ origin })) + engine.push(filterMiddleware) + engine.push(createProviderMiddleware({ provider: this.provider })) + + // setup connection + const providerStream = createEngineStream({ engine }) + pump( + outStream, + providerStream, + outStream, + (err) => { + // cleanup filter polyfill middleware + filterMiddleware.destroy() + if (err) log.error(err) + } + ) + } + + setupPublicConfig (outStream) { + pump( + asStream(this.publicConfigStore), + outStream, + (err) => { + if (err) log.error(err) + } + ) + } + + privateSendUpdate () { + this.emit('update', this.getState()) + } + + getGasPrice () { + const { recentBlocksController } = this + const { recentBlocks } = recentBlocksController.store.getState() + + // Return 1 gwei if no blocks have been observed: + if (recentBlocks.length === 0) { + return '0x' + GWEI_BN.toString(16) + } + + const lowestPrices = recentBlocks.map((block) => { + if (!block.gasPrices || block.gasPrices.length < 1) { + return GWEI_BN + } + return block.gasPrices + .map(hexPrefix => hexPrefix.substr(2)) + .map(hex => new BN(hex, 16)) + .sort((a, b) => { + return a.gt(b) ? 1 : -1 + })[0] + }) + .map(number => number.div(GWEI_BN).toNumber()) + + const percentileNum = percentile(50, lowestPrices) + const percentileNumBn = new BN(percentileNum) + return '0x' + percentileNumBn.mul(GWEI_BN).toString(16) + } + //============================================================================= // CONFIG //============================================================================= -- cgit From ad9feee637822dbcf945f0017b88bcbc4c9ede44 Mon Sep 17 00:00:00 2001 From: Thomas Huang Date: Fri, 16 Mar 2018 10:00:27 -0700 Subject: Fix messages typo (#3591) --- app/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 9c13ebf52..35a360c84 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -66,7 +66,7 @@ "description": "helper for inputting hex as decimal input" }, "blockiesIdenticon": { - "messages": "Use Blockies Identicon" + "message": "Use Blockies Identicon" }, "borrowDharma": { "message": "Borrow With Dharma (Beta)" -- cgit From 6174c00c1036e77e1dc2ec39f20cf3a2a8518a21 Mon Sep 17 00:00:00 2001 From: Saptak Sengupta Date: Fri, 16 Mar 2018 11:20:34 +0530 Subject: Inject Script: Blacklist domains where not to inject script Put a blacklist domain check where if the page url is in the list of blacklisted domains, we shouldn't inject script in that web page. --- app/scripts/contentscript.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js index 2ed7c87b6..7abbc60e7 100644 --- a/app/scripts/contentscript.js +++ b/app/scripts/contentscript.js @@ -96,7 +96,8 @@ function logStreamDisconnectWarning (remoteLabel, err) { } function shouldInjectWeb3 () { - return doctypeCheck() && suffixCheck() && documentElementCheck() + return doctypeCheck() && suffixCheck() + && documentElementCheck() && !blacklistedDomainCheck() } function doctypeCheck () { @@ -129,6 +130,20 @@ function documentElementCheck () { return true } +function blacklistedDomainCheck () { + var blacklistedDomains = ['uscourts.gov', 'dropbox.com'] + var currentUrl = window.location.href + var currentRegex + for (let i = 0; i < blacklistedDomains.length; i++) { + const blacklistedDomain = blacklistedDomains[i].replace('.', '\\.') + currentRegex = new RegExp(`(?:https?:\\/\\/)(?:(?!${blacklistedDomain}).)*$`) + if (!currentRegex.test(currentUrl)) { + return true + } + } + return false +} + function redirectToPhishingWarning () { console.log('MetaMask - redirecting to phishing warning') window.location.href = 'https://metamask.io/phishing.html' -- cgit From 6f749e5576cb981a469d0cf969b15901bcc05cfa Mon Sep 17 00:00:00 2001 From: Alexander Tseung Date: Fri, 16 Mar 2018 13:09:49 -0700 Subject: Update Confirm Contract screen (#3597) --- app/images/arrow-right.svg | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 app/images/arrow-right.svg (limited to 'app') diff --git a/app/images/arrow-right.svg b/app/images/arrow-right.svg new file mode 100644 index 000000000..ea5cd0609 --- /dev/null +++ b/app/images/arrow-right.svg @@ -0,0 +1,16 @@ + + + + arrow-right + Created with Sketch. + + + + + + + + + + + \ No newline at end of file -- cgit From 2a1a9c2215a591e0879d43835651ef5cafe19fdb Mon Sep 17 00:00:00 2001 From: Viet Le Date: Sat, 17 Mar 2018 19:19:10 +0000 Subject: Translated to Vietnamese. Translator: Trang Ha, Editor: Viet Le --- app/_locales/vn/messages.json | 609 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 609 insertions(+) create mode 100644 app/_locales/vn/messages.json (limited to 'app') diff --git a/app/_locales/vn/messages.json b/app/_locales/vn/messages.json new file mode 100644 index 000000000..ea2ca1677 --- /dev/null +++ b/app/_locales/vn/messages.json @@ -0,0 +1,609 @@ +{ + "accept": { + "message": "Chấp nhận" + }, + "account": { + "message": "Tài khoản" + }, + "accountDetails": { + "message": "Chi tiết tài khoản" + }, + "accountName": { + "message": "Tên tài khoản" + }, + "addToken": { + "message": "Thêm mã Token" + }, + "address": { + "message": "Địa chỉ" + }, + "amount": { + "message": "Số lượng" + }, + "amountPlusGas": { + "message": "Số lượng + Gas" + }, + "appDescription": { + "description": "Mô tả phần mềm", + "message": "Tính năng Ethereum cho trình duyệt" + }, + "appName": { + "description": "Tên phần mềm", + "message": "MetaMask" + }, + "attemptingConnect": { + "message": "Đang kết nối đến blockchain." + }, + "available": { + "message": "Có sẵn" + }, + "back": { + "message": "Quay lại" + }, + "balance": { + "message": "Số dư:" + }, + "balanceIsInsufficientGas": { + "message": "Số dư không đủ để thanh toán tổng tiền gas hiện tại" + }, + "beta": { + "message": "Bản thử nghiệm Beta" + }, + "betweenMinAndMax": { + "description": "trợ giúp để nhập hex dưới dạng số thập phân", + "message": "phải nhiều hơn hoặc bằng $1 và ít hơn hoặc bằng $2." + }, + "borrowDharma": { + "message": "Vay Dharma (thử nghiệm)" + }, + "buy": { + "message": "Mua" + }, + "buyCoinbase": { + "message": "Mua trên Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase là dịch vụ ví điện tử thông dụng nhất thế giới để mua bán Bitcoin, Ethereum, và Litecoin" + }, + "cancel": { + "message": "Hủy" + }, + "clickCopy": { + "message": "Nhấp vào để sao chép" + }, + "confirm": { + "message": "Xác nhận" + }, + "confirmContract": { + "message": "Xác nhận hợp đồng" + }, + "confirmPassword": { + "message": "Xác nhận mật khẩu" + }, + "confirmTransaction": { + "message": "Xác nhận giao dịch" + }, + "continueToCoinbase": { + "message": "Tiếp tục đến Coinbase" + }, + "contractDeployment": { + "message": "Triển khai hợp đồng" + }, + "conversionProgress": { + "message": "Đang chuyển đổi" + }, + "copiedButton": { + "message": "Đã sao chép" + }, + "copiedClipboard": { + "message": "Đã sao chép vào bộ nhớ Clipboard" + }, + "copiedExclamation": { + "message": "Đã sao chép!" + }, + "copy": { + "message": "Sao chép" + }, + "copyButton": { + "message": "Sao chép" + }, + "copyPrivateKey": { + "message": "Đây là Khoá Bí Mật của bạn (nhấp vào để sao chép)" + }, + "copyToClipboard": { + "message": "Đã sao chép vào clipboard" + }, + "create": { + "message": "Tạo" + }, + "createAccount": { + "message": "Tạo tài khoản" + }, + "createDen": { + "message": "Tạo" + }, + "crypto": { + "description": "Hình thức giao dịch (tiền điện tử)", + "message": "Tiền điện tử" + }, + "customGas": { + "message": "Tùy chỉnh gas" + }, + "customRPC": { + "message": "Tùy chỉnh RPC" + }, + "customize": { + "message": "Tùy chỉnh" + }, + "defaultNetwork": { + "message": "Mạng lưới mặc định dùng cho các giao dịch Ether là Main Net (tiền ETH thật)." + }, + "denExplainer": { + "message": "Số DEN của bạn là mật khẩu đã được mã hóa và lưu trữ trong MetaMask" + }, + "deposit": { + "message": "Ký gửi/nạp tiền" + }, + "depositBTC": { + "message": "Ký gửi BTC đến địa chỉ sau:" + }, + "depositCoin": { + "description": "Báo cho người dùng biết đồng tiền nào họ đã chọn để ký gửi với ShapeShift", + "message": "Ký gửi $1 đến địa chỉ sau:" + }, + "depositEth": { + "message": "Ký gửi Eth" + }, + "depositEther": { + "message": "Ký gửi Ether" + }, + "depositFiat": { + "message": "Ký gửi bằng tiền Fiat (USD, GBP, ...)" + }, + "depositFromAccount": { + "message": "Ký gửi từ một tài khoản khác" + }, + "depositShapeShift": { + "message": "Ký gửi với ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Nếu bạn sở hữu các đồng tiền điện tử khác, bạn có thể giao dịch và ký gửi Ether trực tiếp vào ví MetaMask của bạn. Không cần tạo thêm tài khoản." + }, + "details": { + "message": "Chi tiết" + }, + "directDeposit": { + "message": "Ký gửi trực tiếp" + }, + "directDepositEther": { + "message": "Ký gửi Ether trực tiếp" + }, + "directDepositEtherExplainer": { + "message": "Nếu bạn đã có sẵn vài Ether, cách nhanh nhất để thêm Ether vào ví tiền mới của bạn là bằng ký gửi trực tiếp." + }, + "done": { + "message": "Hoàn tất" + }, + "edit": { + "message": "Chỉnh sửa" + }, + "editAccountName": { + "message": "Chỉnh sửa tên tài khoản" + }, + "encryptNewDen": { + "message": "Mã hóa số DEN mới của bạn" + }, + "enterPassword": { + "message": "Nhập mật khẩu" + }, + "etherscanView": { + "message": "Xem tài khoản trên Etherscan" + }, + "exchangeRate": { + "message": "Tỷ giá" + }, + "exportPrivateKey": { + "message": "Xuất mã khóa cá nhân" + }, + "exportPrivateKeyWarning": { + "message": "Xuất mã khóa cá nhân theo rủi ro tự chịu" + }, + "failed": { + "message": "Không thành công" + }, + "fiat": { + "description": "Hình thức giao dịch", + "message": "FIAT" + }, + "fileImportFail": { + "description": "Giúp người dùng nhập tài khoản từ tập tin JSON", + "message": "Tập tin đã nhập không hoạt động? Nhấp vào đây!" + }, + "from": { + "message": "Từ" + }, + "fromShapeShift": { + "message": "Từ ShapeShift" + }, + "gas": { + "description": "Viết tắt của giá ga", + "message": "Ga" + }, + "gasFee": { + "message": "Tiền ga" + }, + "gasLimit": { + "message": "Hạn mức ga" + }, + "gasLimitCalculation": { + "message": "Chúng tôi tính toán và gợi ý một hạn mức ga cụ thể dựa trên tỷ lệ thành công của hệ thống." + }, + "gasLimitRequired": { + "message": "Hạn mức ga được yêu cầu" + }, + "gasLimitTooLow": { + "message": "Hạn mức ga phải đạt tối thiểu 21000" + }, + "gasPrice": { + "message": "Giá ga (GWEI)" + }, + "gasPriceCalculation": { + "message": "Chúng tôi tính toán và gợi ý một giá ga cụ thể dựa trên tỷ lệ thành công của hệ thống." + }, + "gasPriceRequired": { + "message": "Giá ga được yêu cầu" + }, + "getEther": { + "message": "Lấy Ether" + }, + "getEtherFromFaucet": { + "description": "Hiển thị tên mạng cho vòi Ether", + "message": "Lấy Ether từ vòi với giá $1" + }, + "greaterThanMin": { + "description": "trợ giúp để nhập hex dưới dạng số thập phân", + "message": "phải nhiều hơn hoặc bằng $1" + }, + "here": { + "description": "như trong -Nhấp vào đây để xem thêm thông tin- (dùng với các số dư token có vấn đề)", + "message": "tại đây" + }, + "hide": { + "message": "Ẩn" + }, + "hideToken": { + "message": "Ẩn mã token" + }, + "hideTokenPrompt": { + "message": "Ẩn mã token?" + }, + "howToDeposit": { + "message": "Bạn muốn ký gửi Ether bằng cách nào?" + }, + "import": { + "description": "Nút để nhập tài khoản từ một tập tin đã chọn", + "message": "Nhập" + }, + "importAccount": { + "message": "Nhập tài khoản" + }, + "importAnAccount": { + "message": "Nhập một tài khoản" + }, + "importDen": { + "message": "Nhập mã DEN hiện hành" + }, + "imported": { + "description": "Trạng thái hiển thị cho một tài khoản đã được tải toàn bộ vào chùm chìa khóa", + "message": "Đã nhập" + }, + "infoHelp": { + "message": "Thông tin & Trợ giúp" + }, + "invalidAddress": { + "message": "Địa chỉ không hợp lệ" + }, + "invalidGasParams": { + "message": "Thông số ga không hợp lệ" + }, + "invalidInput": { + "message": "Thông tin nhập vào không hợp lệ" + }, + "invalidRequest": { + "message": "Yêu cầu không hợp lệ" + }, + "jsonFile": { + "description": "định dạng để nhập tài khoản", + "message": "Tập tin JSON" + }, + "kovan": { + "message": "Mạng thử nghiệm Kovan" + }, + "lessThanMax": { + "description": "trợ giúp để nhập hex dưới dạng số thập phân", + "message": "phải ít hơn hoặc bằng $1." + }, + "limit": { + "message": "Giới hạn" + }, + "loading": { + "message": "Đang tải..." + }, + "loadingTokens": { + "message": "Đang tải mã token..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "Thoát" + }, + "loose": { + "message": "Nới lỏng" + }, + "mainnet": { + "message": "Mạng Ethereum MainNet (tiền ETH thật)" + }, + "message": { + "message": "Tin nhắn" + }, + "min": { + "message": "Tối thiểu" + }, + "myAccounts": { + "message": "Tài khoản của tôi" + }, + "needEtherInWallet": { + "message": "Để tương tác với các ứng dụng phân tán bằng MetaMask, bạn sẽ phải cần có Ether trong ví của bạn." + }, + "needImportFile": { + "description": "Người dùng đang nhập một tài khoản và cần thêm tập tin để tiếp tục", + "message": "Bạn phải chọn một tập tin để nhập." + }, + "needImportPassword": { + "description": "Mật khẩu và tập tin cần thiết để nhập một tài khoản", + "message": "Bạn phải điền mật khẩu cho tập tin đã chọn." + }, + "networks": { + "message": "Các mạng lưới" + }, + "newAccount": { + "message": "Tài khoản mới" + }, + "newAccountNumberName": { + "description": "Tên mặc định của tài khoản tiếp theo để tạo trên màn hình tài khoản", + "message": "Tài khoản $1" + }, + "newContract": { + "message": "Hợp đồng mới" + }, + "newPassword": { + "message": "Mật khẩu mới (tối thiểu 8 ký tự)" + }, + "newRecipient": { + "message": "Người nhận mới" + }, + "next": { + "message": "Kế tiếp" + }, + "noAddressForName": { + "message": "Không có địa chỉ nào được ấn định cho tên này." + }, + "noDeposits": { + "message": "Không có tiền ký gửi nào được nhận" + }, + "noTransactionHistory": { + "message": "Không có lịch sử giao dịch" + }, + "noTransactions": { + "message": "Không có giao dịch" + }, + "notStarted": { + "message": "Chưa bắt đầu" + }, + "oldUI": { + "message": "Giao diện cũ" + }, + "oldUIMessage": { + "message": "Bạn vừa quay về giao diện cũ. Bạn có thể chuyển đổi sang giao diện mới bằng tùy chọn trong menu ở góc phải trên cùng." + }, + "or": { + "description": "lựa chọn giữa tạo hay nhập một tài khoản mới", + "message": "hoặc" + }, + "passwordMismatch": { + "description": "trong quá trình tạo mật khẩu, hai trường mật khẩu mới không khớp", + "message": "mật khẩu không khớp" + }, + "passwordShort": { + "description": "trong quá trình tạo mật khẩu, mật khẩu không đủ dài để đảm bảo an toàn", + "message": "mật khẩu không đủ dài" + }, + "pastePrivateKey": { + "description": "Dùng cho việc nhập tài khoản từ một khóa cá nhân", + "message": "Dán dãy khóa cá nhân của bạn tại đây:" + }, + "pasteSeed": { + "message": "Dán Mật Khẩu Sinh Khoá (seed phrase) của bạn tại đây!" + }, + "pleaseReviewTransaction": { + "message": "Vui lòng xem lại giao dịch của bạn." + }, + "privateKey": { + "description": "chọn định dạng tập tin này để nhập một tài khoản", + "message": "Khóa Bí Mật" + }, + "privateKeyWarning": { + "message": "Cảnh báo: Không bao giờ được tiết lộ khóa này. Bất kỳ ai có Khóa Bí Mật của bạn đều có thể đánh cắp tài sản được giữ trong tài khoản của bạn." + }, + "privateNetwork": { + "message": "Mạng lưới riêng" + }, + "qrCode": { + "message": "Hiển thị mã QR" + }, + "readMore": { + "message": "Đọc thêm tại đây." + }, + "readdToken": { + "message": "Bạn có thể thêm trở lại mã token này bằng cách nhấn \"Thêm mã token\" trong menu tùy chọn trong tài khoản của bạn." + }, + "receive": { + "message": "Nhận" + }, + "recipientAddress": { + "message": "Địa chỉ người nhận" + }, + "refundAddress": { + "message": "Địa chỉ hoàn trả lại của bạn" + }, + "rejected": { + "message": "Không chấp thuận/Bị từ chối" + }, + "required": { + "message": "Yêu cầu" + }, + "retryWithMoreGas": { + "message": "Thử lại với một giá ga cao hơn tại đây" + }, + "revert": { + "message": "Chuyển lại" + }, + "rinkeby": { + "message": "Mạng thử nghiệm Rinkeby" + }, + "ropsten": { + "message": "Mạng thử nghiệm Ropsten" + }, + "sampleAccountName": { + "description": "Giúp người dùng hiểu khái niệm thêm một cái tên có thể đọc được vào tài khoản của họ", + "message": "Ví dụ, Tài khoản mới của tôi" + }, + "save": { + "message": "Lưu" + }, + "saveAsFile": { + "description": "Quá trình xuất tài khoản", + "message": "Lưu lại dưới dạng tập tin" + }, + "selectService": { + "message": "Chọn dịch vụ" + }, + "send": { + "message": "Gửi" + }, + "sendTokens": { + "message": "Gửi mã token" + }, + "sendTokensAnywhere": { + "message": "Gửi mã token đến bất kỳ ai có tài khoản Ethereum" + }, + "settings": { + "message": "Cài đặt" + }, + "shapeshiftBuy": { + "message": "Mua với ShapeShift" + }, + "showPrivateKeys": { + "message": "Hiển thị khóa cá nhân" + }, + "showQRCode": { + "message": "Hiển thị mã QR" + }, + "sigRequest": { + "message": "Yêu cầu chữ ký" + }, + "sigRequested": { + "message": "Đã yêu cầu chữ ký" + }, + "sign": { + "message": "Ký nhận" + }, + "signMessage": { + "message": "Ký nhận tin nhắn" + }, + "signNotice": { + "message": "Ký nhận vào tin nhắn này có thể gây nguy hiểm. Chỉ nên ký nhận tin nhắn từ những nguồn bạn hoàn toàn tin tưởng có thể dùng với tài khoản của bạn. Cách thức nguy hiểm này sẽ bị xóa trong phiên bản sắp tới." + }, + "status": { + "message": "Trạng thái" + }, + "submit": { + "message": "Gửi đi" + }, + "takesTooLong": { + "message": "Chờ quá lâu?" + }, + "testFaucet": { + "message": "Vòi nhận tiền ETH ảo để thử nghiệm" + }, + "to": { + "message": "Đến" + }, + "toETHviaShapeShift": { + "description": "hệ thống sẽ điền vào loại tiền gửi khi bắt đầu tin nhắn", + "message": "$1 thành ETH qua ShapeShift" + }, + "tokenBalance": { + "message": "Số dư token của bạn là:" + }, + "total": { + "message": "Tổng cộng" + }, + "transactionMemo": { + "message": "Ghi nhớ giao dịch (tùy chọn)" + }, + "transactionNumber": { + "message": "Số thứ tự giao dịch" + }, + "transfers": { + "message": "Các giao dịch" + }, + "troubleTokenBalances": { + "description": "Kèm theo một đường link (tại đây) để xem số dư token.", + "message": "Chúng tôi gặp sự cố khi tải số dư token của bạn. Xin vui lòng xem lại" + }, + "typePassword": { + "message": "Điền mật khẩu của bạn" + }, + "uiWelcome": { + "message": "Chào mừng bạn đến với giao diện mới (Beta)" + }, + "uiWelcomeMessage": { + "message": "Bạn đang sử dụng giao diện mới của Metamask. Chúng tôi khuyến khích bạn thử nghiệm và khám phá các tính năng mới như gửi token, và nếu bạn có gặp phải vấn đề gì khó khăn, xin hãy liên hệ ngay để chúng tôi có thể giúp đỡ bạn." + }, + "unavailable": { + "message": "Không có sẵn" + }, + "unknown": { + "message": "Không xác định" + }, + "unknownNetwork": { + "message": "Mạng lưới riêng không xác định" + }, + "unknownNetworkId": { + "message": "ID không xác định" + }, + "usaOnly": { + "description": "Việc sử dụng hệ thống giao dịch này chỉ giới hạn cho người dùng ở Mỹ", + "message": "Chỉ áp dụng cho người dùng ở Mỹ" + }, + "usedByClients": { + "message": "Được sử dụng bởi nhiều khách hàng khác nhau" + }, + "viewAccount": { + "message": "Xem tài khoản" + }, + "warning": { + "message": "Cảnh báo" + }, + "whatsThis": { + "message": "Đây là gì?" + }, + "youSign": { + "message": "Bạn đang ký nhận" + }, + "yourSigRequested": { + "message": "Chữ ký của bạn đang được yêu cầu" + } +} -- cgit From 0dd2f918b3b98f088cc6653dcba306190ce52d13 Mon Sep 17 00:00:00 2001 From: Viet Le Date: Sat, 17 Mar 2018 20:49:19 +0000 Subject: corrected vn -> vi --- app/_locales/vi/messages.json | 609 ++++++++++++++++++++++++++++++++++++++++++ app/_locales/vn/messages.json | 609 ------------------------------------------ 2 files changed, 609 insertions(+), 609 deletions(-) create mode 100644 app/_locales/vi/messages.json delete mode 100644 app/_locales/vn/messages.json (limited to 'app') diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json new file mode 100644 index 000000000..ea2ca1677 --- /dev/null +++ b/app/_locales/vi/messages.json @@ -0,0 +1,609 @@ +{ + "accept": { + "message": "Chấp nhận" + }, + "account": { + "message": "Tài khoản" + }, + "accountDetails": { + "message": "Chi tiết tài khoản" + }, + "accountName": { + "message": "Tên tài khoản" + }, + "addToken": { + "message": "Thêm mã Token" + }, + "address": { + "message": "Địa chỉ" + }, + "amount": { + "message": "Số lượng" + }, + "amountPlusGas": { + "message": "Số lượng + Gas" + }, + "appDescription": { + "description": "Mô tả phần mềm", + "message": "Tính năng Ethereum cho trình duyệt" + }, + "appName": { + "description": "Tên phần mềm", + "message": "MetaMask" + }, + "attemptingConnect": { + "message": "Đang kết nối đến blockchain." + }, + "available": { + "message": "Có sẵn" + }, + "back": { + "message": "Quay lại" + }, + "balance": { + "message": "Số dư:" + }, + "balanceIsInsufficientGas": { + "message": "Số dư không đủ để thanh toán tổng tiền gas hiện tại" + }, + "beta": { + "message": "Bản thử nghiệm Beta" + }, + "betweenMinAndMax": { + "description": "trợ giúp để nhập hex dưới dạng số thập phân", + "message": "phải nhiều hơn hoặc bằng $1 và ít hơn hoặc bằng $2." + }, + "borrowDharma": { + "message": "Vay Dharma (thử nghiệm)" + }, + "buy": { + "message": "Mua" + }, + "buyCoinbase": { + "message": "Mua trên Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase là dịch vụ ví điện tử thông dụng nhất thế giới để mua bán Bitcoin, Ethereum, và Litecoin" + }, + "cancel": { + "message": "Hủy" + }, + "clickCopy": { + "message": "Nhấp vào để sao chép" + }, + "confirm": { + "message": "Xác nhận" + }, + "confirmContract": { + "message": "Xác nhận hợp đồng" + }, + "confirmPassword": { + "message": "Xác nhận mật khẩu" + }, + "confirmTransaction": { + "message": "Xác nhận giao dịch" + }, + "continueToCoinbase": { + "message": "Tiếp tục đến Coinbase" + }, + "contractDeployment": { + "message": "Triển khai hợp đồng" + }, + "conversionProgress": { + "message": "Đang chuyển đổi" + }, + "copiedButton": { + "message": "Đã sao chép" + }, + "copiedClipboard": { + "message": "Đã sao chép vào bộ nhớ Clipboard" + }, + "copiedExclamation": { + "message": "Đã sao chép!" + }, + "copy": { + "message": "Sao chép" + }, + "copyButton": { + "message": "Sao chép" + }, + "copyPrivateKey": { + "message": "Đây là Khoá Bí Mật của bạn (nhấp vào để sao chép)" + }, + "copyToClipboard": { + "message": "Đã sao chép vào clipboard" + }, + "create": { + "message": "Tạo" + }, + "createAccount": { + "message": "Tạo tài khoản" + }, + "createDen": { + "message": "Tạo" + }, + "crypto": { + "description": "Hình thức giao dịch (tiền điện tử)", + "message": "Tiền điện tử" + }, + "customGas": { + "message": "Tùy chỉnh gas" + }, + "customRPC": { + "message": "Tùy chỉnh RPC" + }, + "customize": { + "message": "Tùy chỉnh" + }, + "defaultNetwork": { + "message": "Mạng lưới mặc định dùng cho các giao dịch Ether là Main Net (tiền ETH thật)." + }, + "denExplainer": { + "message": "Số DEN của bạn là mật khẩu đã được mã hóa và lưu trữ trong MetaMask" + }, + "deposit": { + "message": "Ký gửi/nạp tiền" + }, + "depositBTC": { + "message": "Ký gửi BTC đến địa chỉ sau:" + }, + "depositCoin": { + "description": "Báo cho người dùng biết đồng tiền nào họ đã chọn để ký gửi với ShapeShift", + "message": "Ký gửi $1 đến địa chỉ sau:" + }, + "depositEth": { + "message": "Ký gửi Eth" + }, + "depositEther": { + "message": "Ký gửi Ether" + }, + "depositFiat": { + "message": "Ký gửi bằng tiền Fiat (USD, GBP, ...)" + }, + "depositFromAccount": { + "message": "Ký gửi từ một tài khoản khác" + }, + "depositShapeShift": { + "message": "Ký gửi với ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Nếu bạn sở hữu các đồng tiền điện tử khác, bạn có thể giao dịch và ký gửi Ether trực tiếp vào ví MetaMask của bạn. Không cần tạo thêm tài khoản." + }, + "details": { + "message": "Chi tiết" + }, + "directDeposit": { + "message": "Ký gửi trực tiếp" + }, + "directDepositEther": { + "message": "Ký gửi Ether trực tiếp" + }, + "directDepositEtherExplainer": { + "message": "Nếu bạn đã có sẵn vài Ether, cách nhanh nhất để thêm Ether vào ví tiền mới của bạn là bằng ký gửi trực tiếp." + }, + "done": { + "message": "Hoàn tất" + }, + "edit": { + "message": "Chỉnh sửa" + }, + "editAccountName": { + "message": "Chỉnh sửa tên tài khoản" + }, + "encryptNewDen": { + "message": "Mã hóa số DEN mới của bạn" + }, + "enterPassword": { + "message": "Nhập mật khẩu" + }, + "etherscanView": { + "message": "Xem tài khoản trên Etherscan" + }, + "exchangeRate": { + "message": "Tỷ giá" + }, + "exportPrivateKey": { + "message": "Xuất mã khóa cá nhân" + }, + "exportPrivateKeyWarning": { + "message": "Xuất mã khóa cá nhân theo rủi ro tự chịu" + }, + "failed": { + "message": "Không thành công" + }, + "fiat": { + "description": "Hình thức giao dịch", + "message": "FIAT" + }, + "fileImportFail": { + "description": "Giúp người dùng nhập tài khoản từ tập tin JSON", + "message": "Tập tin đã nhập không hoạt động? Nhấp vào đây!" + }, + "from": { + "message": "Từ" + }, + "fromShapeShift": { + "message": "Từ ShapeShift" + }, + "gas": { + "description": "Viết tắt của giá ga", + "message": "Ga" + }, + "gasFee": { + "message": "Tiền ga" + }, + "gasLimit": { + "message": "Hạn mức ga" + }, + "gasLimitCalculation": { + "message": "Chúng tôi tính toán và gợi ý một hạn mức ga cụ thể dựa trên tỷ lệ thành công của hệ thống." + }, + "gasLimitRequired": { + "message": "Hạn mức ga được yêu cầu" + }, + "gasLimitTooLow": { + "message": "Hạn mức ga phải đạt tối thiểu 21000" + }, + "gasPrice": { + "message": "Giá ga (GWEI)" + }, + "gasPriceCalculation": { + "message": "Chúng tôi tính toán và gợi ý một giá ga cụ thể dựa trên tỷ lệ thành công của hệ thống." + }, + "gasPriceRequired": { + "message": "Giá ga được yêu cầu" + }, + "getEther": { + "message": "Lấy Ether" + }, + "getEtherFromFaucet": { + "description": "Hiển thị tên mạng cho vòi Ether", + "message": "Lấy Ether từ vòi với giá $1" + }, + "greaterThanMin": { + "description": "trợ giúp để nhập hex dưới dạng số thập phân", + "message": "phải nhiều hơn hoặc bằng $1" + }, + "here": { + "description": "như trong -Nhấp vào đây để xem thêm thông tin- (dùng với các số dư token có vấn đề)", + "message": "tại đây" + }, + "hide": { + "message": "Ẩn" + }, + "hideToken": { + "message": "Ẩn mã token" + }, + "hideTokenPrompt": { + "message": "Ẩn mã token?" + }, + "howToDeposit": { + "message": "Bạn muốn ký gửi Ether bằng cách nào?" + }, + "import": { + "description": "Nút để nhập tài khoản từ một tập tin đã chọn", + "message": "Nhập" + }, + "importAccount": { + "message": "Nhập tài khoản" + }, + "importAnAccount": { + "message": "Nhập một tài khoản" + }, + "importDen": { + "message": "Nhập mã DEN hiện hành" + }, + "imported": { + "description": "Trạng thái hiển thị cho một tài khoản đã được tải toàn bộ vào chùm chìa khóa", + "message": "Đã nhập" + }, + "infoHelp": { + "message": "Thông tin & Trợ giúp" + }, + "invalidAddress": { + "message": "Địa chỉ không hợp lệ" + }, + "invalidGasParams": { + "message": "Thông số ga không hợp lệ" + }, + "invalidInput": { + "message": "Thông tin nhập vào không hợp lệ" + }, + "invalidRequest": { + "message": "Yêu cầu không hợp lệ" + }, + "jsonFile": { + "description": "định dạng để nhập tài khoản", + "message": "Tập tin JSON" + }, + "kovan": { + "message": "Mạng thử nghiệm Kovan" + }, + "lessThanMax": { + "description": "trợ giúp để nhập hex dưới dạng số thập phân", + "message": "phải ít hơn hoặc bằng $1." + }, + "limit": { + "message": "Giới hạn" + }, + "loading": { + "message": "Đang tải..." + }, + "loadingTokens": { + "message": "Đang tải mã token..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "Thoát" + }, + "loose": { + "message": "Nới lỏng" + }, + "mainnet": { + "message": "Mạng Ethereum MainNet (tiền ETH thật)" + }, + "message": { + "message": "Tin nhắn" + }, + "min": { + "message": "Tối thiểu" + }, + "myAccounts": { + "message": "Tài khoản của tôi" + }, + "needEtherInWallet": { + "message": "Để tương tác với các ứng dụng phân tán bằng MetaMask, bạn sẽ phải cần có Ether trong ví của bạn." + }, + "needImportFile": { + "description": "Người dùng đang nhập một tài khoản và cần thêm tập tin để tiếp tục", + "message": "Bạn phải chọn một tập tin để nhập." + }, + "needImportPassword": { + "description": "Mật khẩu và tập tin cần thiết để nhập một tài khoản", + "message": "Bạn phải điền mật khẩu cho tập tin đã chọn." + }, + "networks": { + "message": "Các mạng lưới" + }, + "newAccount": { + "message": "Tài khoản mới" + }, + "newAccountNumberName": { + "description": "Tên mặc định của tài khoản tiếp theo để tạo trên màn hình tài khoản", + "message": "Tài khoản $1" + }, + "newContract": { + "message": "Hợp đồng mới" + }, + "newPassword": { + "message": "Mật khẩu mới (tối thiểu 8 ký tự)" + }, + "newRecipient": { + "message": "Người nhận mới" + }, + "next": { + "message": "Kế tiếp" + }, + "noAddressForName": { + "message": "Không có địa chỉ nào được ấn định cho tên này." + }, + "noDeposits": { + "message": "Không có tiền ký gửi nào được nhận" + }, + "noTransactionHistory": { + "message": "Không có lịch sử giao dịch" + }, + "noTransactions": { + "message": "Không có giao dịch" + }, + "notStarted": { + "message": "Chưa bắt đầu" + }, + "oldUI": { + "message": "Giao diện cũ" + }, + "oldUIMessage": { + "message": "Bạn vừa quay về giao diện cũ. Bạn có thể chuyển đổi sang giao diện mới bằng tùy chọn trong menu ở góc phải trên cùng." + }, + "or": { + "description": "lựa chọn giữa tạo hay nhập một tài khoản mới", + "message": "hoặc" + }, + "passwordMismatch": { + "description": "trong quá trình tạo mật khẩu, hai trường mật khẩu mới không khớp", + "message": "mật khẩu không khớp" + }, + "passwordShort": { + "description": "trong quá trình tạo mật khẩu, mật khẩu không đủ dài để đảm bảo an toàn", + "message": "mật khẩu không đủ dài" + }, + "pastePrivateKey": { + "description": "Dùng cho việc nhập tài khoản từ một khóa cá nhân", + "message": "Dán dãy khóa cá nhân của bạn tại đây:" + }, + "pasteSeed": { + "message": "Dán Mật Khẩu Sinh Khoá (seed phrase) của bạn tại đây!" + }, + "pleaseReviewTransaction": { + "message": "Vui lòng xem lại giao dịch của bạn." + }, + "privateKey": { + "description": "chọn định dạng tập tin này để nhập một tài khoản", + "message": "Khóa Bí Mật" + }, + "privateKeyWarning": { + "message": "Cảnh báo: Không bao giờ được tiết lộ khóa này. Bất kỳ ai có Khóa Bí Mật của bạn đều có thể đánh cắp tài sản được giữ trong tài khoản của bạn." + }, + "privateNetwork": { + "message": "Mạng lưới riêng" + }, + "qrCode": { + "message": "Hiển thị mã QR" + }, + "readMore": { + "message": "Đọc thêm tại đây." + }, + "readdToken": { + "message": "Bạn có thể thêm trở lại mã token này bằng cách nhấn \"Thêm mã token\" trong menu tùy chọn trong tài khoản của bạn." + }, + "receive": { + "message": "Nhận" + }, + "recipientAddress": { + "message": "Địa chỉ người nhận" + }, + "refundAddress": { + "message": "Địa chỉ hoàn trả lại của bạn" + }, + "rejected": { + "message": "Không chấp thuận/Bị từ chối" + }, + "required": { + "message": "Yêu cầu" + }, + "retryWithMoreGas": { + "message": "Thử lại với một giá ga cao hơn tại đây" + }, + "revert": { + "message": "Chuyển lại" + }, + "rinkeby": { + "message": "Mạng thử nghiệm Rinkeby" + }, + "ropsten": { + "message": "Mạng thử nghiệm Ropsten" + }, + "sampleAccountName": { + "description": "Giúp người dùng hiểu khái niệm thêm một cái tên có thể đọc được vào tài khoản của họ", + "message": "Ví dụ, Tài khoản mới của tôi" + }, + "save": { + "message": "Lưu" + }, + "saveAsFile": { + "description": "Quá trình xuất tài khoản", + "message": "Lưu lại dưới dạng tập tin" + }, + "selectService": { + "message": "Chọn dịch vụ" + }, + "send": { + "message": "Gửi" + }, + "sendTokens": { + "message": "Gửi mã token" + }, + "sendTokensAnywhere": { + "message": "Gửi mã token đến bất kỳ ai có tài khoản Ethereum" + }, + "settings": { + "message": "Cài đặt" + }, + "shapeshiftBuy": { + "message": "Mua với ShapeShift" + }, + "showPrivateKeys": { + "message": "Hiển thị khóa cá nhân" + }, + "showQRCode": { + "message": "Hiển thị mã QR" + }, + "sigRequest": { + "message": "Yêu cầu chữ ký" + }, + "sigRequested": { + "message": "Đã yêu cầu chữ ký" + }, + "sign": { + "message": "Ký nhận" + }, + "signMessage": { + "message": "Ký nhận tin nhắn" + }, + "signNotice": { + "message": "Ký nhận vào tin nhắn này có thể gây nguy hiểm. Chỉ nên ký nhận tin nhắn từ những nguồn bạn hoàn toàn tin tưởng có thể dùng với tài khoản của bạn. Cách thức nguy hiểm này sẽ bị xóa trong phiên bản sắp tới." + }, + "status": { + "message": "Trạng thái" + }, + "submit": { + "message": "Gửi đi" + }, + "takesTooLong": { + "message": "Chờ quá lâu?" + }, + "testFaucet": { + "message": "Vòi nhận tiền ETH ảo để thử nghiệm" + }, + "to": { + "message": "Đến" + }, + "toETHviaShapeShift": { + "description": "hệ thống sẽ điền vào loại tiền gửi khi bắt đầu tin nhắn", + "message": "$1 thành ETH qua ShapeShift" + }, + "tokenBalance": { + "message": "Số dư token của bạn là:" + }, + "total": { + "message": "Tổng cộng" + }, + "transactionMemo": { + "message": "Ghi nhớ giao dịch (tùy chọn)" + }, + "transactionNumber": { + "message": "Số thứ tự giao dịch" + }, + "transfers": { + "message": "Các giao dịch" + }, + "troubleTokenBalances": { + "description": "Kèm theo một đường link (tại đây) để xem số dư token.", + "message": "Chúng tôi gặp sự cố khi tải số dư token của bạn. Xin vui lòng xem lại" + }, + "typePassword": { + "message": "Điền mật khẩu của bạn" + }, + "uiWelcome": { + "message": "Chào mừng bạn đến với giao diện mới (Beta)" + }, + "uiWelcomeMessage": { + "message": "Bạn đang sử dụng giao diện mới của Metamask. Chúng tôi khuyến khích bạn thử nghiệm và khám phá các tính năng mới như gửi token, và nếu bạn có gặp phải vấn đề gì khó khăn, xin hãy liên hệ ngay để chúng tôi có thể giúp đỡ bạn." + }, + "unavailable": { + "message": "Không có sẵn" + }, + "unknown": { + "message": "Không xác định" + }, + "unknownNetwork": { + "message": "Mạng lưới riêng không xác định" + }, + "unknownNetworkId": { + "message": "ID không xác định" + }, + "usaOnly": { + "description": "Việc sử dụng hệ thống giao dịch này chỉ giới hạn cho người dùng ở Mỹ", + "message": "Chỉ áp dụng cho người dùng ở Mỹ" + }, + "usedByClients": { + "message": "Được sử dụng bởi nhiều khách hàng khác nhau" + }, + "viewAccount": { + "message": "Xem tài khoản" + }, + "warning": { + "message": "Cảnh báo" + }, + "whatsThis": { + "message": "Đây là gì?" + }, + "youSign": { + "message": "Bạn đang ký nhận" + }, + "yourSigRequested": { + "message": "Chữ ký của bạn đang được yêu cầu" + } +} diff --git a/app/_locales/vn/messages.json b/app/_locales/vn/messages.json deleted file mode 100644 index ea2ca1677..000000000 --- a/app/_locales/vn/messages.json +++ /dev/null @@ -1,609 +0,0 @@ -{ - "accept": { - "message": "Chấp nhận" - }, - "account": { - "message": "Tài khoản" - }, - "accountDetails": { - "message": "Chi tiết tài khoản" - }, - "accountName": { - "message": "Tên tài khoản" - }, - "addToken": { - "message": "Thêm mã Token" - }, - "address": { - "message": "Địa chỉ" - }, - "amount": { - "message": "Số lượng" - }, - "amountPlusGas": { - "message": "Số lượng + Gas" - }, - "appDescription": { - "description": "Mô tả phần mềm", - "message": "Tính năng Ethereum cho trình duyệt" - }, - "appName": { - "description": "Tên phần mềm", - "message": "MetaMask" - }, - "attemptingConnect": { - "message": "Đang kết nối đến blockchain." - }, - "available": { - "message": "Có sẵn" - }, - "back": { - "message": "Quay lại" - }, - "balance": { - "message": "Số dư:" - }, - "balanceIsInsufficientGas": { - "message": "Số dư không đủ để thanh toán tổng tiền gas hiện tại" - }, - "beta": { - "message": "Bản thử nghiệm Beta" - }, - "betweenMinAndMax": { - "description": "trợ giúp để nhập hex dưới dạng số thập phân", - "message": "phải nhiều hơn hoặc bằng $1 và ít hơn hoặc bằng $2." - }, - "borrowDharma": { - "message": "Vay Dharma (thử nghiệm)" - }, - "buy": { - "message": "Mua" - }, - "buyCoinbase": { - "message": "Mua trên Coinbase" - }, - "buyCoinbaseExplainer": { - "message": "Coinbase là dịch vụ ví điện tử thông dụng nhất thế giới để mua bán Bitcoin, Ethereum, và Litecoin" - }, - "cancel": { - "message": "Hủy" - }, - "clickCopy": { - "message": "Nhấp vào để sao chép" - }, - "confirm": { - "message": "Xác nhận" - }, - "confirmContract": { - "message": "Xác nhận hợp đồng" - }, - "confirmPassword": { - "message": "Xác nhận mật khẩu" - }, - "confirmTransaction": { - "message": "Xác nhận giao dịch" - }, - "continueToCoinbase": { - "message": "Tiếp tục đến Coinbase" - }, - "contractDeployment": { - "message": "Triển khai hợp đồng" - }, - "conversionProgress": { - "message": "Đang chuyển đổi" - }, - "copiedButton": { - "message": "Đã sao chép" - }, - "copiedClipboard": { - "message": "Đã sao chép vào bộ nhớ Clipboard" - }, - "copiedExclamation": { - "message": "Đã sao chép!" - }, - "copy": { - "message": "Sao chép" - }, - "copyButton": { - "message": "Sao chép" - }, - "copyPrivateKey": { - "message": "Đây là Khoá Bí Mật của bạn (nhấp vào để sao chép)" - }, - "copyToClipboard": { - "message": "Đã sao chép vào clipboard" - }, - "create": { - "message": "Tạo" - }, - "createAccount": { - "message": "Tạo tài khoản" - }, - "createDen": { - "message": "Tạo" - }, - "crypto": { - "description": "Hình thức giao dịch (tiền điện tử)", - "message": "Tiền điện tử" - }, - "customGas": { - "message": "Tùy chỉnh gas" - }, - "customRPC": { - "message": "Tùy chỉnh RPC" - }, - "customize": { - "message": "Tùy chỉnh" - }, - "defaultNetwork": { - "message": "Mạng lưới mặc định dùng cho các giao dịch Ether là Main Net (tiền ETH thật)." - }, - "denExplainer": { - "message": "Số DEN của bạn là mật khẩu đã được mã hóa và lưu trữ trong MetaMask" - }, - "deposit": { - "message": "Ký gửi/nạp tiền" - }, - "depositBTC": { - "message": "Ký gửi BTC đến địa chỉ sau:" - }, - "depositCoin": { - "description": "Báo cho người dùng biết đồng tiền nào họ đã chọn để ký gửi với ShapeShift", - "message": "Ký gửi $1 đến địa chỉ sau:" - }, - "depositEth": { - "message": "Ký gửi Eth" - }, - "depositEther": { - "message": "Ký gửi Ether" - }, - "depositFiat": { - "message": "Ký gửi bằng tiền Fiat (USD, GBP, ...)" - }, - "depositFromAccount": { - "message": "Ký gửi từ một tài khoản khác" - }, - "depositShapeShift": { - "message": "Ký gửi với ShapeShift" - }, - "depositShapeShiftExplainer": { - "message": "Nếu bạn sở hữu các đồng tiền điện tử khác, bạn có thể giao dịch và ký gửi Ether trực tiếp vào ví MetaMask của bạn. Không cần tạo thêm tài khoản." - }, - "details": { - "message": "Chi tiết" - }, - "directDeposit": { - "message": "Ký gửi trực tiếp" - }, - "directDepositEther": { - "message": "Ký gửi Ether trực tiếp" - }, - "directDepositEtherExplainer": { - "message": "Nếu bạn đã có sẵn vài Ether, cách nhanh nhất để thêm Ether vào ví tiền mới của bạn là bằng ký gửi trực tiếp." - }, - "done": { - "message": "Hoàn tất" - }, - "edit": { - "message": "Chỉnh sửa" - }, - "editAccountName": { - "message": "Chỉnh sửa tên tài khoản" - }, - "encryptNewDen": { - "message": "Mã hóa số DEN mới của bạn" - }, - "enterPassword": { - "message": "Nhập mật khẩu" - }, - "etherscanView": { - "message": "Xem tài khoản trên Etherscan" - }, - "exchangeRate": { - "message": "Tỷ giá" - }, - "exportPrivateKey": { - "message": "Xuất mã khóa cá nhân" - }, - "exportPrivateKeyWarning": { - "message": "Xuất mã khóa cá nhân theo rủi ro tự chịu" - }, - "failed": { - "message": "Không thành công" - }, - "fiat": { - "description": "Hình thức giao dịch", - "message": "FIAT" - }, - "fileImportFail": { - "description": "Giúp người dùng nhập tài khoản từ tập tin JSON", - "message": "Tập tin đã nhập không hoạt động? Nhấp vào đây!" - }, - "from": { - "message": "Từ" - }, - "fromShapeShift": { - "message": "Từ ShapeShift" - }, - "gas": { - "description": "Viết tắt của giá ga", - "message": "Ga" - }, - "gasFee": { - "message": "Tiền ga" - }, - "gasLimit": { - "message": "Hạn mức ga" - }, - "gasLimitCalculation": { - "message": "Chúng tôi tính toán và gợi ý một hạn mức ga cụ thể dựa trên tỷ lệ thành công của hệ thống." - }, - "gasLimitRequired": { - "message": "Hạn mức ga được yêu cầu" - }, - "gasLimitTooLow": { - "message": "Hạn mức ga phải đạt tối thiểu 21000" - }, - "gasPrice": { - "message": "Giá ga (GWEI)" - }, - "gasPriceCalculation": { - "message": "Chúng tôi tính toán và gợi ý một giá ga cụ thể dựa trên tỷ lệ thành công của hệ thống." - }, - "gasPriceRequired": { - "message": "Giá ga được yêu cầu" - }, - "getEther": { - "message": "Lấy Ether" - }, - "getEtherFromFaucet": { - "description": "Hiển thị tên mạng cho vòi Ether", - "message": "Lấy Ether từ vòi với giá $1" - }, - "greaterThanMin": { - "description": "trợ giúp để nhập hex dưới dạng số thập phân", - "message": "phải nhiều hơn hoặc bằng $1" - }, - "here": { - "description": "như trong -Nhấp vào đây để xem thêm thông tin- (dùng với các số dư token có vấn đề)", - "message": "tại đây" - }, - "hide": { - "message": "Ẩn" - }, - "hideToken": { - "message": "Ẩn mã token" - }, - "hideTokenPrompt": { - "message": "Ẩn mã token?" - }, - "howToDeposit": { - "message": "Bạn muốn ký gửi Ether bằng cách nào?" - }, - "import": { - "description": "Nút để nhập tài khoản từ một tập tin đã chọn", - "message": "Nhập" - }, - "importAccount": { - "message": "Nhập tài khoản" - }, - "importAnAccount": { - "message": "Nhập một tài khoản" - }, - "importDen": { - "message": "Nhập mã DEN hiện hành" - }, - "imported": { - "description": "Trạng thái hiển thị cho một tài khoản đã được tải toàn bộ vào chùm chìa khóa", - "message": "Đã nhập" - }, - "infoHelp": { - "message": "Thông tin & Trợ giúp" - }, - "invalidAddress": { - "message": "Địa chỉ không hợp lệ" - }, - "invalidGasParams": { - "message": "Thông số ga không hợp lệ" - }, - "invalidInput": { - "message": "Thông tin nhập vào không hợp lệ" - }, - "invalidRequest": { - "message": "Yêu cầu không hợp lệ" - }, - "jsonFile": { - "description": "định dạng để nhập tài khoản", - "message": "Tập tin JSON" - }, - "kovan": { - "message": "Mạng thử nghiệm Kovan" - }, - "lessThanMax": { - "description": "trợ giúp để nhập hex dưới dạng số thập phân", - "message": "phải ít hơn hoặc bằng $1." - }, - "limit": { - "message": "Giới hạn" - }, - "loading": { - "message": "Đang tải..." - }, - "loadingTokens": { - "message": "Đang tải mã token..." - }, - "localhost": { - "message": "Localhost 8545" - }, - "logout": { - "message": "Thoát" - }, - "loose": { - "message": "Nới lỏng" - }, - "mainnet": { - "message": "Mạng Ethereum MainNet (tiền ETH thật)" - }, - "message": { - "message": "Tin nhắn" - }, - "min": { - "message": "Tối thiểu" - }, - "myAccounts": { - "message": "Tài khoản của tôi" - }, - "needEtherInWallet": { - "message": "Để tương tác với các ứng dụng phân tán bằng MetaMask, bạn sẽ phải cần có Ether trong ví của bạn." - }, - "needImportFile": { - "description": "Người dùng đang nhập một tài khoản và cần thêm tập tin để tiếp tục", - "message": "Bạn phải chọn một tập tin để nhập." - }, - "needImportPassword": { - "description": "Mật khẩu và tập tin cần thiết để nhập một tài khoản", - "message": "Bạn phải điền mật khẩu cho tập tin đã chọn." - }, - "networks": { - "message": "Các mạng lưới" - }, - "newAccount": { - "message": "Tài khoản mới" - }, - "newAccountNumberName": { - "description": "Tên mặc định của tài khoản tiếp theo để tạo trên màn hình tài khoản", - "message": "Tài khoản $1" - }, - "newContract": { - "message": "Hợp đồng mới" - }, - "newPassword": { - "message": "Mật khẩu mới (tối thiểu 8 ký tự)" - }, - "newRecipient": { - "message": "Người nhận mới" - }, - "next": { - "message": "Kế tiếp" - }, - "noAddressForName": { - "message": "Không có địa chỉ nào được ấn định cho tên này." - }, - "noDeposits": { - "message": "Không có tiền ký gửi nào được nhận" - }, - "noTransactionHistory": { - "message": "Không có lịch sử giao dịch" - }, - "noTransactions": { - "message": "Không có giao dịch" - }, - "notStarted": { - "message": "Chưa bắt đầu" - }, - "oldUI": { - "message": "Giao diện cũ" - }, - "oldUIMessage": { - "message": "Bạn vừa quay về giao diện cũ. Bạn có thể chuyển đổi sang giao diện mới bằng tùy chọn trong menu ở góc phải trên cùng." - }, - "or": { - "description": "lựa chọn giữa tạo hay nhập một tài khoản mới", - "message": "hoặc" - }, - "passwordMismatch": { - "description": "trong quá trình tạo mật khẩu, hai trường mật khẩu mới không khớp", - "message": "mật khẩu không khớp" - }, - "passwordShort": { - "description": "trong quá trình tạo mật khẩu, mật khẩu không đủ dài để đảm bảo an toàn", - "message": "mật khẩu không đủ dài" - }, - "pastePrivateKey": { - "description": "Dùng cho việc nhập tài khoản từ một khóa cá nhân", - "message": "Dán dãy khóa cá nhân của bạn tại đây:" - }, - "pasteSeed": { - "message": "Dán Mật Khẩu Sinh Khoá (seed phrase) của bạn tại đây!" - }, - "pleaseReviewTransaction": { - "message": "Vui lòng xem lại giao dịch của bạn." - }, - "privateKey": { - "description": "chọn định dạng tập tin này để nhập một tài khoản", - "message": "Khóa Bí Mật" - }, - "privateKeyWarning": { - "message": "Cảnh báo: Không bao giờ được tiết lộ khóa này. Bất kỳ ai có Khóa Bí Mật của bạn đều có thể đánh cắp tài sản được giữ trong tài khoản của bạn." - }, - "privateNetwork": { - "message": "Mạng lưới riêng" - }, - "qrCode": { - "message": "Hiển thị mã QR" - }, - "readMore": { - "message": "Đọc thêm tại đây." - }, - "readdToken": { - "message": "Bạn có thể thêm trở lại mã token này bằng cách nhấn \"Thêm mã token\" trong menu tùy chọn trong tài khoản của bạn." - }, - "receive": { - "message": "Nhận" - }, - "recipientAddress": { - "message": "Địa chỉ người nhận" - }, - "refundAddress": { - "message": "Địa chỉ hoàn trả lại của bạn" - }, - "rejected": { - "message": "Không chấp thuận/Bị từ chối" - }, - "required": { - "message": "Yêu cầu" - }, - "retryWithMoreGas": { - "message": "Thử lại với một giá ga cao hơn tại đây" - }, - "revert": { - "message": "Chuyển lại" - }, - "rinkeby": { - "message": "Mạng thử nghiệm Rinkeby" - }, - "ropsten": { - "message": "Mạng thử nghiệm Ropsten" - }, - "sampleAccountName": { - "description": "Giúp người dùng hiểu khái niệm thêm một cái tên có thể đọc được vào tài khoản của họ", - "message": "Ví dụ, Tài khoản mới của tôi" - }, - "save": { - "message": "Lưu" - }, - "saveAsFile": { - "description": "Quá trình xuất tài khoản", - "message": "Lưu lại dưới dạng tập tin" - }, - "selectService": { - "message": "Chọn dịch vụ" - }, - "send": { - "message": "Gửi" - }, - "sendTokens": { - "message": "Gửi mã token" - }, - "sendTokensAnywhere": { - "message": "Gửi mã token đến bất kỳ ai có tài khoản Ethereum" - }, - "settings": { - "message": "Cài đặt" - }, - "shapeshiftBuy": { - "message": "Mua với ShapeShift" - }, - "showPrivateKeys": { - "message": "Hiển thị khóa cá nhân" - }, - "showQRCode": { - "message": "Hiển thị mã QR" - }, - "sigRequest": { - "message": "Yêu cầu chữ ký" - }, - "sigRequested": { - "message": "Đã yêu cầu chữ ký" - }, - "sign": { - "message": "Ký nhận" - }, - "signMessage": { - "message": "Ký nhận tin nhắn" - }, - "signNotice": { - "message": "Ký nhận vào tin nhắn này có thể gây nguy hiểm. Chỉ nên ký nhận tin nhắn từ những nguồn bạn hoàn toàn tin tưởng có thể dùng với tài khoản của bạn. Cách thức nguy hiểm này sẽ bị xóa trong phiên bản sắp tới." - }, - "status": { - "message": "Trạng thái" - }, - "submit": { - "message": "Gửi đi" - }, - "takesTooLong": { - "message": "Chờ quá lâu?" - }, - "testFaucet": { - "message": "Vòi nhận tiền ETH ảo để thử nghiệm" - }, - "to": { - "message": "Đến" - }, - "toETHviaShapeShift": { - "description": "hệ thống sẽ điền vào loại tiền gửi khi bắt đầu tin nhắn", - "message": "$1 thành ETH qua ShapeShift" - }, - "tokenBalance": { - "message": "Số dư token của bạn là:" - }, - "total": { - "message": "Tổng cộng" - }, - "transactionMemo": { - "message": "Ghi nhớ giao dịch (tùy chọn)" - }, - "transactionNumber": { - "message": "Số thứ tự giao dịch" - }, - "transfers": { - "message": "Các giao dịch" - }, - "troubleTokenBalances": { - "description": "Kèm theo một đường link (tại đây) để xem số dư token.", - "message": "Chúng tôi gặp sự cố khi tải số dư token của bạn. Xin vui lòng xem lại" - }, - "typePassword": { - "message": "Điền mật khẩu của bạn" - }, - "uiWelcome": { - "message": "Chào mừng bạn đến với giao diện mới (Beta)" - }, - "uiWelcomeMessage": { - "message": "Bạn đang sử dụng giao diện mới của Metamask. Chúng tôi khuyến khích bạn thử nghiệm và khám phá các tính năng mới như gửi token, và nếu bạn có gặp phải vấn đề gì khó khăn, xin hãy liên hệ ngay để chúng tôi có thể giúp đỡ bạn." - }, - "unavailable": { - "message": "Không có sẵn" - }, - "unknown": { - "message": "Không xác định" - }, - "unknownNetwork": { - "message": "Mạng lưới riêng không xác định" - }, - "unknownNetworkId": { - "message": "ID không xác định" - }, - "usaOnly": { - "description": "Việc sử dụng hệ thống giao dịch này chỉ giới hạn cho người dùng ở Mỹ", - "message": "Chỉ áp dụng cho người dùng ở Mỹ" - }, - "usedByClients": { - "message": "Được sử dụng bởi nhiều khách hàng khác nhau" - }, - "viewAccount": { - "message": "Xem tài khoản" - }, - "warning": { - "message": "Cảnh báo" - }, - "whatsThis": { - "message": "Đây là gì?" - }, - "youSign": { - "message": "Bạn đang ký nhận" - }, - "yourSigRequested": { - "message": "Chữ ký của bạn đang được yêu cầu" - } -} -- cgit From 6601bc5effb9bbf1aea4c9275463dfb23dc67df5 Mon Sep 17 00:00:00 2001 From: Viet Le Date: Sat, 17 Mar 2018 20:56:28 +0000 Subject: space --- app/_locales/vi/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json index ea2ca1677..cd30de4de 100644 --- a/app/_locales/vi/messages.json +++ b/app/_locales/vi/messages.json @@ -605,5 +605,5 @@ }, "yourSigRequested": { "message": "Chữ ký của bạn đang được yêu cầu" - } + } } -- cgit From 1f132d613aa0a22ab09ae8dd62a6c96b1c02f564 Mon Sep 17 00:00:00 2001 From: Tiago Alves Date: Tue, 20 Mar 2018 00:10:55 +0700 Subject: Portuguese translations. --- app/_locales/pt/messages.json | 819 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 819 insertions(+) create mode 100644 app/_locales/pt/messages.json (limited to 'app') diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json new file mode 100644 index 000000000..c9eb178f9 --- /dev/null +++ b/app/_locales/pt/messages.json @@ -0,0 +1,819 @@ +{ + "accept": { + "message": "Aceitar" + }, + "account": { + "message": "Conta" + }, + "accountDetails": { + "message": "Detalhes da Conta" + }, + "accountName": { + "message": "Nome da Conta" + }, + "address": { + "message": "Endereço" + }, + "addCustomToken": { + "message": "Adicionar token customizada" + }, + "addToken": { + "message": "Adicionar Token" + }, + "addTokens": { + "message": "Adicionar Tokens" + }, + "amount": { + "message": "Valor" + }, + "amountPlusGas": { + "message": "Valor + Gas" + }, + "appDescription": { + "message": "Extensão para o browser de Ethereum", + "description": "A descrição da aplicação" + }, + "appName": { + "message": "MetaMask", + "description": "Nome da aplicação" + }, + "attemptingConnect": { + "message": "A tentar ligar à blockchain." + }, + "attributions": { + "message": "Atribuições" + }, + "available": { + "message": "Disponível" + }, + "back": { + "message": "Voltar" + }, + "balance": { + "message": "Saldo:" + }, + "balances": { + "message": "O meu saldo" + }, + "balanceIsInsufficientGas": { + "message": "Saldo insuficiente para a quantidade de gas total" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "tem de ser maior ou igual a $1 e menor ou igual a $2.", + "description": "ajuda para introduzir hexadecimal como decimal" + }, + "blockiesIdenticon": { + "message": "Usar Blockies Identicon" + }, + "borrowDharma": { + "message": "Pedir Empréstimo Com Dharma (Beta)" + }, + "builtInCalifornia": { + "message": "MetaMask é desenhada e construída na California." + }, + "buy": { + "message": "Comprar" + }, + "buyCoinbase": { + "message": "Comprar no Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase é a forma mais conhecida para comprar e vender bitcoin, ethereum, e litecoin." + }, + "cancel": { + "message": "Cancelar" + }, + "classicInterface": { + "message": "Utilizar interface clássico" + }, + "clickCopy": { + "message": "Carregue para copiar" + }, + "confirm": { + "message": "Confirmar" + }, + "confirmContract": { + "message": "Confirmar Contrato" + }, + "confirmPassword": { + "message": "Confirmar Palavra-passe" + }, + "confirmTransaction": { + "message": "Confirmar Transação" + }, + "continue": { + "message": "Continuar" + }, + "continueToCoinbase": { + "message": "Continuar para o Coinbase" + }, + "contractDeployment": { + "message": "Distribuição do Contrato" + }, + "conversionProgress": { + "message": "Conversão em progresso" + }, + "copiedButton": { + "message": "Copiado" + }, + "copiedClipboard": { + "message": "Copiado para a Área de Transferência" + }, + "copiedExclamation": { + "message": "Copiado!" + }, + "copiedSafe": { + "message": "Já copiei para um lugar seguro" + }, + "copy": { + "message": "Copiar" + }, + "copyToClipboard": { + "message": "Copiar para o clipboard" + }, + "copyButton": { + "message": " Copiar " + }, + "copyPrivateKey": { + "message": "Esta é a sua chave privada (carregue para copiar)" + }, + "create": { + "message": "Criar" + }, + "createAccount": { + "message": "Criar Conta" + }, + "createDen": { + "message": "Criar" + }, + "crypto": { + "message": "Cripto", + "description": "Tipo de câmbio (criptomoedas)" + }, + "currentConversion": { + "message": "Taxa de Conversão Atual" + }, + "currentNetwork": { + "message": "Rede Atual" + }, + "customGas": { + "message": "Customizar Gas" + }, + "customize": { + "message": "Customizar" + }, + "customRPC": { + "message": "Customizar RPC" + }, + "decimalsMustZerotoTen": { + "message": "Decimais devem ser no mínimo 0 e não passar de 36." + }, + "decimal": { + "message": "Precisão em Decimais" + }, + "defaultNetwork": { + "message": "A rede pré definida para transações em Ether é a Main Net." + }, + "denExplainer": { + "message": " DEN é o armazenamento encriptado da sua palavra-passe no MetaMask." + }, + "deposit": { + "message": "Depósito" + }, + "depositBTC": { + "message": "Deposite as suas BTC no endereço abaixo:" + }, + "depositCoin": { + "message": "Deposite $1 no endereço abaixo", + "description": "Diz ao usuário que moeda selecionou para depositar com shapeshift" + }, + "depositEth": { + "message": "Depositar Eth" + }, + "depositEther": { + "message": "Depositar Ether" + }, + "depositFiat": { + "message": "Depositar moeda fiduciária" + }, + "depositFromAccount": { + "message": "Depositar de outra conta" + }, + "depositShapeShift": { + "message": "Depositar com ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Se tem criptomoedas, pode trocar e depositar Ether diretamente na sua carteira MetaMask. Não precisa de conta." + }, + "details": { + "message": "Detalhes" + }, + "directDeposit": { + "message": "Depósito Direto" + }, + "directDepositEther": { + "message": "Depositar Diretamente Ether" + }, + "directDepositEtherExplainer": { + "message": "Se já tem Ether, a forma mais rápida de ficar com Ether na sua carteira é através de depósito direto." + }, + "done": { + "message": "Finalizado" + }, + "downloadStatelogs": { + "message": "Descarregar Registos de Estado" + }, + "edit": { + "message": "Editar" + }, + "editAccountName": { + "message": "Editar Nome da Conta" + }, + "emailUs": { + "message": "Fale connosco!" + }, + "encryptNewDen": { + "message": "Encripte o seu novo DEN" + }, + "enterPassword": { + "message": "Introduza palavra-passe" + }, + "enterPasswordConfirm": { + "message": "Introduza a sua palavra-passe para confirmar" + }, + "etherscanView": { + "message": "Ver conta no Etherscan" + }, + "exchangeRate": { + "message": "Taxa de Câmbio" + }, + "exportPrivateKey": { + "message": "Exportar Chave Privada" + }, + "exportPrivateKeyWarning": { + "message": "Exportar chaves privadas por sua conta e risco." + }, + "failed": { + "message": "Falhou" + }, + "fiat": { + "message": "FIAT", + "description": "Tipo de câmbio" + }, + "fileImportFail": { + "message": "A importação de ficheiro não está a funcionar? Carregue aqui!", + "description": "Ajuda usuários a importar as suas contas a partir de um ficheiro JSON" + }, + "followTwitter": { + "message": "Siga-nos no Twitter" + }, + "from": { + "message": "De" + }, + "fromToSame": { + "message": "Endereços De e Para não podem ser iguais" + }, + "fromShapeShift": { + "message": "De ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Indicação breve do custo de gas" + }, + "gasFee": { + "message": "Taxa de Gas" + }, + "gasLimit": { + "message": "Limite de Gas" + }, + "gasLimitCalculation": { + "message": "Calculamos o limite sugerido do gas com base nas taxas de sucesso da rede." + }, + "gasLimitRequired": { + "message": "Limite de Gas Necessário" + }, + "gasLimitTooLow": { + "message": "Limite de Gas deve ser no mínimo 21000" + }, + "generatingSeed": { + "message": "A gerar Seed..." + }, + "gasPrice": { + "message": "Preço Gas (GWEI)" + }, + "gasPriceCalculation": { + "message": "Calculamos o gas sugerido com base nas taxas de sucesso da rede." + }, + "gasPriceRequired": { + "message": "Preço Gas Necessário" + }, + "getEther": { + "message": "Obter Ether" + }, + "getEtherFromFaucet": { + "message": "Obter Ether de um faucet por $1", + "description": "Mostra nome da rede para faucet de Ether" + }, + "greaterThanMin": { + "message": "tem de ser maior ou igual a $1.", + "description": "ajuda para introduzir hexadecimal como decimal" + }, + "here": { + "message": "aqui", + "description": "como -clicar aqui- para mais informações (associado a troubleTokenBalances)" + }, + "hereList": { + "message": "Aqui está uma lista!!!!" + }, + "hide": { + "message": "Ocultar" + }, + "hideToken": { + "message": "Ocultar Token" + }, + "hideTokenPrompt": { + "message": "Ocultar Token?" + }, + "howToDeposit": { + "message": "Como gostaria de depositar Ether?" + }, + "holdEther": { + "message": "Permite ter ether & tokens, e serve como uma ponte para aplicações descentralizadas." + }, + "import": { + "message": "Importar", + "description": "Botão para importar uma conta de um ficheiro selecionado" + }, + "importAccount": { + "message": "Importar Conta" + }, + "importAccountMsg": { + "message":"Contas importadas não irão ser associadas com a frase seed da conta criada originalmente pelo MetaMask. Saiba mais sobre contas importadas." + }, + "importAnAccount": { + "message": "Importar uma conta" + }, + "importDen": { + "message": "Importar DEN Existente" + }, + "imported": { + "message": "Importado", + "description": "estado para mostrar que uma conta foi totalmente carregada para o keyring" + }, + "infoHelp": { + "message": "Informação & Ajuda" + }, + "insufficientFunds": { + "message": "Fundos insuficientes." + }, + "insufficientTokens": { + "message": "Tokens insuficientes." + }, + "invalidAddress": { + "message": "Endereço inválido" + }, + "invalidAddressRecipient": { + "message": "O endereço do destinatário é inválido " + }, + "invalidGasParams": { + "message": "Parâmetros para o Gas Inválidos" + }, + "invalidInput": { + "message": "Campo inválido." + }, + "invalidRequest": { + "message": "Pedido Inválido" + }, + "invalidRPC": { + "message": "RPC URI Inválido" + }, + "jsonFail": { + "message": "Ocorreu um erro. Por favor confirme que o seu ficheiro JSON está devidamente formatado." + }, + "jsonFile": { + "message": "Ficheiro JSON", + "description": "Formatar para importar uma conta" + }, + "kovan": { + "message": "Rede de Teste Kovan" + }, + "knowledgeDataBase": { + "message": "Visite o nosso Centro de Conhecimento" + }, + "lessThanMax": { + "message": "tem de ser menor ou igual a $1.", + "description": "ajuda para introduzir hexadecimal como decimal" + }, + "likeToAddTokens": { + "message": "Gostaria de adicionar estes tokens?" + }, + "limit": { + "message": "Limite" + }, + "loading": { + "message": "A carregar..." + }, + "loadingTokens": { + "message": "A carregar Tokens..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "login": { + "message": "Entrar" + }, + "logout": { + "message": "Sair" + }, + "loose": { + "message": "Vago" + }, + "loweCaseWords": { + "message": "palavras da seed apenas têm caracteres minúsculos" + }, + "mainnet": { + "message": "Rede Principal de Ethereum" + }, + "message": { + "message": "Mensagem" + }, + "metamaskDescription": { + "message": "O MetaMask é um lugar seguro para guardar a sua identidade em em Ethereum." + }, + "min": { + "message": "Mínimo" + }, + "myAccounts": { + "message": "As minhas contas" + }, + "mustSelectOne": { + "message": "Deve escolher no mínimo 1 token." + }, + "needEtherInWallet": { + "message": "Para interagir com applicações descentralizadas usando MetaMask tem de ter Ether na sua carteira." + }, + "needImportFile": { + "message": "Deve selecionar um ficheiro para importar.", + "description": "O utilizador deve adicionar um ficheiro para continuar" + }, + "needImportPassword": { + "message": "Deve introduzir uma palavra-passe para o ficheiro selecionado.", + "description": "Palavra-passe e ficheiro necessários para importar uma conta" + }, + "negativeETH": { + "message": "Não é possível enviar valores negativos de ETH." + }, + "networks": { + "message": "Redes" + }, + "newAccount": { + "message": "Conta Nova" + }, + "newAccountNumberName": { + "message": "Conta $1", + "description": "Nome padrão da próxima conta a ser criado em Criar Conta" + }, + "newContract": { + "message": "Contrato Novo" + }, + "newPassword": { + "message": "Nova Palavra-passe (min 8 caracteres)" + }, + "newRecipient": { + "message": "Recipiente Novo" + }, + "newRPC": { + "message": "Novo RPC URL" + }, + "next": { + "message": "Próximo" + }, + "noAddressForName": { + "message": "Nenhum endereço foi estabelecido para este nome." + }, + "noDeposits": { + "message": "Sem depósitos recebidos" + }, + "noTransactionHistory": { + "message": "Sem histórico de transações." + }, + "noTransactions": { + "message": "Sem Transações" + }, + "notStarted": { + "message": "Não Iniciado" + }, + "oldUI": { + "message": "UI Antigo" + }, + "oldUIMessage": { + "message": "Voltou para o UI antigo. Pode reverter para o Novo UI através da opção no menu do topo direito." + }, + "or": { + "message": "ou", + "description": "opção entre criar ou importar uma nova conta" + }, + "passwordCorrect": { + "message": "Por favor confirme que a sua palavra-passe esteja correta." + }, + "passwordMismatch": { + "message": "as palavras-passe não coincidem", + "description": "no processo de criação da palavra-passe, as duas palavras-passe não coincidiram" + }, + "passwordShort": { + "message": "palavra-passe deve ser mais comprida", + "description": "no processo de criação da palavra-passe, a palavra-apasse não é longa o suficiente para ser segura" + }, + "pastePrivateKey": { + "message": "Cole aqui a sua chave privada:", + "description": "Para importar uma conta através da chave privada" + }, + "pasteSeed": { + "message": "Cole aqui a sua frase seed!" + }, + "personalAddressDetected": { + "message": "Endereço pessoal detectado. Introduza o endereço do contrato do token." + }, + "pleaseReviewTransaction": { + "message": "Por favor reveja a sua transação." + }, + "privacyMsg": { + "message": "Política de Privacidade" + }, + "privateKey": { + "message": "Chave Privada", + "description": "Selecione este tipo de ficheiro para importar uma conta" + }, + "privateKeyWarning": { + "message": "Atenção: Nunca revele esta chave. Qualquer pessoa com acesso à sua chave privada pode roubar os bens que esta contém." + }, + "privateNetwork": { + "message": "Rede Privada" + }, + "qrCode": { + "message": "Mostrar Código QR" + }, + "readdToken": { + "message": "Pode adicionar este token de novo clicando na opção “Adicionar token” no menu de opções da sua conta." + }, + "readMore": { + "message": "Ler mais aqui." + }, + "readMore2": { + "message": "Ler mais." + }, + "receive": { + "message": "Receber" + }, + "recipientAddress": { + "message": "Endereço do Destinatário" + }, + "refundAddress": { + "message": "O seu endereço de reembolso" + }, + "rejected": { + "message": "Rejeitado" + }, + "resetAccount": { + "message": "Reinicializar Conta" + }, + "restoreFromSeed": { + "message": "Restaurar a partir da frase seed" + }, + "required": { + "message": "Necessário" + }, + "retryWithMoreGas": { + "message": "Tentar novamente com um preço mais elevado aqui" + }, + "revealSeedWords": { + "message": "Revelar Palavras Seed" + }, + "revealSeedWordsWarning": { + "message": "Não revele as palavras seed num espaço público! Estas palavras podem ser usadas para roubar todas as suas contas." + }, + "revert": { + "message": "Reverter" + }, + "rinkeby": { + "message": "Rede de Teste Rinkeby" + }, + "ropsten": { + "message": "Rede de Teste Ropsten" + }, + "sampleAccountName": { + "message": "Ex. A minha conta nova", + "description": "Ajuda o utilizador a perceber o conceito de adicionar um nome legível à sua conta" + }, + "save": { + "message": "Guardar" + }, + "saveAsFile": { + "message": "Guardar como Ficheiro", + "description": "Processo de exportação de conta" + }, + "saveSeedAsFile": { + "message": "Guardar Palavras Seed como um Ficheiro" + }, + "search": { + "message": "Procurar" + }, + "secretPhrase": { + "message": "Introduza a sua frase secreta de 12 palavras para recuperar o seu ." + }, + "seedPhraseReq": { + "message": "seed phrases are 12 words long" + }, + "select": { + "message": "Selecionar" + }, + "selectCurrency": { + "message": "Selecionar Moeda" + }, + "selectService": { + "message": "Selecionar Serviço" + }, + "selectType": { + "message": "Selecionar Tipo" + }, + "send": { + "message": "Enviar" + }, + "sendETH": { + "message": "Enviar ETH" + }, + "sendTokens": { + "message": "Enviar Tokens" + }, + "sendTokensAnywhere": { + "message": "Enviar Tokens para qualquer pessoa com uma conta Ethereum" + }, + "settings": { + "message": "Definições" + }, + "shapeshiftBuy": { + "message": "Comprar com Shapeshift" + }, + "showPrivateKeys": { + "message": "Mostrar Chaves Privadas" + }, + "showQRCode": { + "message": "Mostrar Código QR" + }, + "sign": { + "message": "Assinar" + }, + "signMessage": { + "message": "Assinar Mensagem" + }, + "signNotice": { + "message": "Assinar esta mensagem pode ter \nefeitos laterais perigosos. Apenas assine mensagens de sites que \ntotalmente confia com a sua conta total.\n Este método perigoso será removido numa versão posterior." + }, + "sigRequest": { + "message": "Pedido de Assinatura" + }, + "sigRequested": { + "message": "Assinatura Pedida" + }, + "spaceBetween": { + "message": "só pode haver um espaço entre palavras" + }, + "status": { + "message": "Estado" + }, + "stateLogs": { + "message": "Registos de Estado" + }, + "stateLogsDescription": { + "message": "Registo de estado podem conter o seu endereço e transações enviadas da sua conta pública." + }, + "submit": { + "message": "Submeter" + }, + "supportCenter": { + "message": "Visitar o nosso Centro de Suporte" + }, + "symbolBetweenZeroTen": { + "message": "Símbolo deve conter entre 0 e 10 characters." + }, + "takesTooLong": { + "message": "A demorar muito?" + }, + "terms": { + "message": "Termos de Uso" + }, + "testFaucet": { + "message": "Faucet de Teste" + }, + "to": { + "message": "Para" + }, + "toETHviaShapeShift": { + "message": "$1 para ETH via ShapeShift", + "description": "o sistema irá preencher o tipo de depósito no início da mensagem" + }, + "tokenAddress": { + "message": "Endereço do Token" + }, + "tokenAlreadyAdded": { + "message": "Token já foi adicionado." + }, + "tokenBalance": { + "message": "O seu balanço é:" + }, + "tokenSelection": { + "message": "Procure por tokens ou seleccione da nossa lista de tokens populares." + }, + "tokenSymbol": { + "message": "Símbolo do Token" + }, + "tokenWarning1": { + "message": "Registe os tokens que comprou com a sua conta MetaMask. Se comprou tokens utilizando uma conta diferente, esses tokens não irão aparecer aqui." + }, + "total": { + "message": "Total" + }, + "transactions": { + "message": "transações" + }, + "transactionMemo": { + "message": "Notas da transação (opcional)" + }, + "transactionNumber": { + "message": "Número da Transação" + }, + "transfers": { + "message": "Transferências" + }, + "troubleTokenBalances": { + "message": "Tivemos um problema a carregar o balanço dos seus tokens. Pode vê-los em ", + "description": "Seguido de um link (aqui) para ver o balanço dos seus tokens" + }, + "twelveWords": { + "message": "Estas 12 palavras são a única forma de recuperar as suas contas na MetaMask.\nGuarde-as num local seguro e secreto." + }, + "typePassword": { + "message": "Digite a sua Palavra-passe" + }, + "uiWelcome": { + "message": "Bem-vindo ao seu Novo UI (Beta)" + }, + "uiWelcomeMessage": { + "message": "Está agora a usar o novo UI da MetaMask. Dê uma vista de olhos, experimenta as novas funcionalidades como enviar tokens e diga-nos se tiver algum problema." + }, + "unavailable": { + "message": "Indisponível" + }, + "unknown": { + "message": "Desconhecido" + }, + "unknownNetwork": { + "message": "Rede Privada Desconhecida" + }, + "unknownNetworkId": { + "message": "Identificador da rede desconhecido" + }, + "uriErrorMsg": { + "message": "Links requerem o prefixo HTTP/HTTPS apropriado." + }, + "usaOnly": { + "message": "Só nos EUA", + "description": "Usar esta taxa de câmbio está limitado a pessoas residentes nos EUA" + }, + "usedByClients": { + "message": "Utilizado por vários tipos de clientes" + }, + "useOldUI": { + "message": "Utilizar UI antigo" + }, + "validFileImport": { + "message": "Deve selecionar um ficheiro válido para importar." + }, + "vaultCreated": { + "message": "Cofre Criado" + }, + "viewAccount": { + "message": "Ver Conta" + }, + "visitWebSite": { + "message": "Visite o nosso site" + }, + "warning": { + "message": "Aviso" + }, + "welcomeBeta": { + "message": "Bem-vindo ao MetaMask Beta" + }, + "whatsThis": { + "message": "O que é isto?" + }, + "yourSigRequested": { + "message": "A sua assinatura está a ser pedida" + }, + "youSign": { + "message": "Está a assinar" + } +} -- cgit From e504bc6215967bfa0408d1eac862beed3f4f3a46 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Mon, 19 Mar 2018 11:28:02 -0700 Subject: Add connecting indication templates --- app/_locales/en/messages.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 35a360c84..8267658b1 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -604,6 +604,21 @@ "ropsten": { "message": "Ropsten Test Network" }, + "connectingToMainnet": { + "message": "Connecting to Main Ethereum Network" + }, + "connectingToRopsten": { + "message": "Connecting to Ropsten Test Network" + }, + "connectingToKovan": { + "message": "Connecting to Kovan Test Network" + }, + "connectingToRinkeby": { + "message": "Connecting to Rinkeby Test Network" + }, + "connectingToUnknown": { + "message": "Connecting to Unknown Network" + }, "sampleAccountName": { "message": "E.g. My new account", "description": "Help user understand concept of adding a human-readable name to their account" -- cgit From 2e7d4db2dec000d31ad967400d25b46aabf70e29 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Mon, 19 Mar 2018 11:43:22 -0700 Subject: Add recover and backup tempaltes --- app/_locales/en/messages.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 8267658b1..cbc6b3a3c 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -83,6 +83,9 @@ "buyCoinbaseExplainer": { "message": "Coinbase is the world’s most popular way to buy and sell bitcoin, ethereum, and litecoin." }, + "ok": { + message: "Ok" + }, "cancel": { "message": "Cancel" }, @@ -244,6 +247,12 @@ "enterPasswordConfirm": { "message": "Enter your password to confirm" }, + "passwordNotLongEnough": { + "message": "Password not long enough" + }, + "passwordsDontMatch": { + "message": "Passwords Don't Match" + }, "etherscanView": { "message": "View account on Etherscan" }, @@ -583,12 +592,18 @@ "restoreFromSeed": { "message": "Restore from seed phrase" }, + "restoreVault": { + "message": "Restore Vault" + }, "required": { "message": "Required" }, "retryWithMoreGas": { "message": "Retry with a higher gas price here" }, + "walletSeed": { + "message": "Wallet Seed" + }, "revealSeedWords": { "message": "Reveal Seed Words" }, @@ -639,6 +654,9 @@ "secretPhrase": { "message": "Enter your secret twelve word phrase here to restore your vault." }, + "newPassword8Chars": { + "message": "New Password (min 8 chars)" + }, "seedPhraseReq": { "message": "seed phrases are 12 words long" }, -- cgit From 293ca6c9a630b939c97e4939e0416a57d8bad79c Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Mon, 19 Mar 2018 12:02:34 -0700 Subject: Add template for settings and info --- app/_locales/en/messages.json | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index cbc6b3a3c..e2ce68b3b 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -619,6 +619,9 @@ "ropsten": { "message": "Ropsten Test Network" }, + "currentRpc": { + "message": "Current RPC" + }, "connectingToMainnet": { "message": "Connecting to Main Ethereum Network" }, @@ -687,6 +690,9 @@ "settings": { "message": "Settings" }, + "info": { + "message": "Info" + }, "shapeshiftBuy": { "message": "Buy with Shapeshift" }, @@ -723,6 +729,9 @@ "stateLogsDescription": { "message": "State logs contain your public account addresses and sent transactions." }, + "stateLogError": { + "message": "Error in retrieving state logs." + }, "submit": { "message": "Submit" }, -- cgit From f5b0d56b9d0b0ae0d4076ff296fdea87316fd32c Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Mon, 19 Mar 2018 12:37:10 -0700 Subject: Add send screen template --- app/_locales/en/messages.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index e2ce68b3b..875662cc5 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -84,7 +84,7 @@ "message": "Coinbase is the world’s most popular way to buy and sell bitcoin, ethereum, and litecoin." }, "ok": { - message: "Ok" + "message": "Ok" }, "cancel": { "message": "Cancel" @@ -282,6 +282,9 @@ "from": { "message": "From" }, + "to": { + "message": "To: " + }, "fromToSame": { "message": "From and To address cannot be the same" }, @@ -412,6 +415,9 @@ "knowledgeDataBase": { "message": "Visit our Knowledge Base" }, + "max": { + "message": "Max" + }, "lessThanMax": { "message": "must be less than or equal to $1.", "description": "helper for inputting hex as decimal input" @@ -684,9 +690,15 @@ "sendTokens": { "message": "Send Tokens" }, + "onlySendToEtherAddress": { + "message": "Only send to an Ethereum address." + }, "sendTokensAnywhere": { "message": "Send Tokens to anyone with an Ethereum account" }, + "required": { + "Required" + }, "settings": { "message": "Settings" }, -- cgit From ee85a9c9d079e512ecde63609e78e8914c8c805b Mon Sep 17 00:00:00 2001 From: matteopey Date: Mon, 19 Mar 2018 20:54:30 +0100 Subject: Update translation based on the new message.json --- app/_locales/it/messages.json | 212 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 211 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/it/messages.json b/app/_locales/it/messages.json index 997e2538d..f54ef98ca 100644 --- a/app/_locales/it/messages.json +++ b/app/_locales/it/messages.json @@ -14,9 +14,15 @@ "address": { "message": "Indirizzo" }, + "addCustomToken": { + "message": "Aggiungi un token personalizzato" + }, "addToken": { "message": "Aggiungi Token" }, + "addTokens": { + "message": "Aggiungi più token" + }, "amount": { "message": "Importo" }, @@ -34,6 +40,9 @@ "attemptingConnect": { "message": "Tentativo di connessione alla blockchain." }, + "attributions": { + "message": "Attribuzioni" + }, "available": { "message": "Disponibile" }, @@ -43,6 +52,9 @@ "balance": { "message": "Bilancio:" }, + "balances": { + "message": "I tuoi bilanci" + }, "balanceIsInsufficientGas": { "message": "Bilancio insufficiente per il gas totale corrente" }, @@ -53,9 +65,15 @@ "message": "deve essere maggiore o uguale a $1 e minore o uguale a $2.", "description": "aiuto per inserire un input esadecimale come decimale" }, + "blockiesIdenticon": { + "message": "Usa le icone Blockie" + }, "borrowDharma": { "message": "Prendi in presisito con Dharma (Beta)" }, + "builtInCalifornia": { + "message": "MetaMask è progettato e costruito in California." + }, "buy": { "message": "Compra" }, @@ -68,6 +86,9 @@ "cancel": { "message": "Cancella" }, + "classicInterface": { + "message": "Usa l'interfaccia classica" + }, "clickCopy": { "message": "Clicca per Copiare" }, @@ -83,6 +104,9 @@ "confirmTransaction": { "message": "Conferma Transazione" }, + "continue": { + "message": "Continua" + }, "continueToCoinbase": { "message": "Continua su Coinbase" }, @@ -101,6 +125,9 @@ "copiedExclamation": { "message": "Copiato!" }, + "copiedSafe": { + "message": "Le ho copiate in un posto sicuro" + }, "copy": { "message": "Copia" }, @@ -126,6 +153,12 @@ "message": "Crypto", "description": "Tipo di exchange (cryptomonete)" }, + "currentConversion": { + "message": "Cambio Corrente" + }, + "currentNetwork": { + "message": "Rete Corrente" + }, "customGas": { "message": "Personalizza Gas" }, @@ -135,6 +168,12 @@ "customRPC": { "message": "RPC Personalizzata" }, + "decimalsMustZerotoTen": { + "message": "Il numero di decimali deve essere almeno 0, e non oltre 36." + }, + "decimal": { + "message": "Precisione Decimali" + }, "defaultNetwork": { "message": "La rete predefinita per transazioni in Ether è la Rete Ethereum Principale." }, @@ -184,18 +223,27 @@ "done": { "message": "Finito" }, + "downloadStatelogs": { + "message": "Scarica i log di Stato" + }, "edit": { "message": "Modifica" }, "editAccountName": { "message": "Modifica Nome Account" }, + "emailUs": { + "message": "Mandaci una mail!" + }, "encryptNewDen": { "message": "Cripta il tuo nuovo DEN" }, "enterPassword": { "message": "Inserisci password" }, + "enterPasswordConfirm": { + "message": "Inserisci la tua password per confermare" + }, "etherscanView": { "message": "Vedi account su Etherscan" }, @@ -219,9 +267,15 @@ "message": "Importazione file non funziona? Clicca qui!", "description": "Aiuta gli utenti a importare il loro account da un file JSON" }, + "followTwitter": { + "message": "Seguici su Twitter" + }, "from": { "message": "Da" }, + "fromToSame": { + "message": "Gli indirizzi Da e A non possono essere uguali" + }, "fromShapeShift": { "message": "Da ShapeShift" }, @@ -244,6 +298,9 @@ "gasLimitTooLow": { "message": "Il Gas Limite deve essere almeno 21000" }, + "generatingSeed": { + "message": "Generando la frase seed..." + }, "gasPrice": { "message": "Prezzo del Gas (GWEI)" }, @@ -268,6 +325,9 @@ "message": "qui", "description": "per intendere -clicca qui- per maggiori informazioni (va con troubleTokenBalances)" }, + "hereList": { + "message": "Questa è una lista!!!!" + }, "hide": { "message": "Nascondi" }, @@ -280,6 +340,9 @@ "howToDeposit": { "message": "Come vuoi depositare Ether?" }, + "holdEther": { + "message": "Ti permette di tenere ether & token, e serve da ponte per le applicazioni decentralizzate." + }, "import": { "message": "Importa", "description": "Tasto per importare un account da un file selezionato" @@ -287,6 +350,9 @@ "importAccount": { "message": "Importa Account" }, + "importAccountMsg": { + "message":" Gli account importati non saranno associati alla frase seed originariamente creata con MetaMask. Impara di più sugli account importati " + }, "importAnAccount": { "message": "Importa un account" }, @@ -300,9 +366,18 @@ "infoHelp": { "message": "Informazioni & Aiuto" }, + "insufficientFunds": { + "message": "Fondi non sufficienti." + }, + "insufficientTokens": { + "message": "Token non sufficienti." + }, "invalidAddress": { "message": "Indirizzo non valido" }, + "invalidAddressRecipient": { + "message": "Indirizzo destinatario invalido" + }, "invalidGasParams": { "message": "Parametri del Gas non validi" }, @@ -312,6 +387,12 @@ "invalidRequest": { "message": "Richiesta non Valida" }, + "invalidRPC": { + "message": "URI RPC invalido" + }, + "jsonFail": { + "message": "Qualcosa è andato storto. Assicurati che il file JSON sia formattato correttamente." + }, "jsonFile": { "message": "File JSON", "description": "formato per importare un account" @@ -319,10 +400,16 @@ "kovan": { "message": "Rete di test Kovan" }, + "knowledgeDataBase": { + "message": "Visita la nostra Knowledge Base" + }, "lessThanMax": { "message": "deve essere minore o uguale a $1.", "description": "aiuto per inserire un input esadecimale come decimale" }, + "likeToAddTokens": { + "message": "Vorresti aggiungere questi token?" + }, "limit": { "message": "Limite" }, @@ -335,24 +422,36 @@ "localhost": { "message": "Localhost 8545" }, + "login": { + "message": "Connetti" + }, "logout": { "message": "Disconnetti" }, "loose": { "message": "Libero" }, + "loweCaseWords": { + "message": "le frasi seed hanno solo lettere minuscole" + }, "mainnet": { "message": "Rete Ethereum Principale" }, "message": { "message": "Messaggio" }, + "metamaskDescription": { + "message": "MetaMask è una cassaforte sicura per identità su Ethereum." + }, "min": { "message": "Minimo" }, "myAccounts": { "message": "Account Miei" }, + "mustSelectOne": { + "message": "Devi selezionare almeno un token." + }, "needEtherInWallet": { "message": "Per interagire con applicazioni decentralizzate con MetaMask, devi possedere Ether nel tuo portafoglio." }, @@ -364,6 +463,9 @@ "message": "Dei inserire una password per il file selezionato.", "description": "Password e file necessari per importare un account" }, + "negativeETH": { + "message": "Non puoi inviare una quantità di ETH negativa." + }, "networks": { "message": "Reti" }, @@ -383,6 +485,9 @@ "newRecipient": { "message": "Nuovo Destinatario" }, + "newRPC": { + "message": "Nuovo URL RPC" + }, "next": { "message": "Prossimo" }, @@ -411,6 +516,9 @@ "message": "o", "description": "scelta tra creare o importare un nuovo account" }, + "passwordCorrect": { + "message": "Assicurati che la password sia corretta." + }, "passwordMismatch": { "message": "le password non corrispondono", "description": "nella creazione della password, le due password all'interno dei campi non corrispondono" @@ -426,9 +534,15 @@ "pasteSeed": { "message": "Incolla la tua frase seed qui!" }, + "personalAddressDetected": { + "message": "Rilevato indirizzo personale. Inserisci l'indirizzo del contratto del token." + }, "pleaseReviewTransaction": { "message": "Ricontrolla la tua transazione." }, + "privacyMsg": { + "message": "Politica sulla Privacy" + }, "privateKey": { "message": "Chiave Privata", "description": "seleziona questo tipo di file per importare un account" @@ -448,6 +562,9 @@ "readMore": { "message": "Leggi di più qui." }, + "readMore2": { + "message": "Leggi di più." + }, "receive": { "message": "Ricevi" }, @@ -460,12 +577,24 @@ "rejected": { "message": "Respinta" }, + "resetAccount": { + "message": "Resetta Account" + }, + "restoreFromSeed": { + "message": "Ripristina da una frase seed" + }, "required": { "message": "Richiesto" }, "retryWithMoreGas": { "message": "Riprova con un prezzo del Gas maggiore qui" }, + "revealSeedWords": { + "message": "Rivela Frase Seed" + }, + "revealSeedWordsWarning": { + "message": "Non ripristinare la tua frase seed in pubblico!. Queste parole possono essere usate per rubare il tuo account." + }, "revert": { "message": "Annulla" }, @@ -486,12 +615,36 @@ "message": "Salva come File", "description": "Processo per esportare un account" }, + "saveSeedAsFile": { + "message": "Salva la Frase Seed come File" + }, + "search": { + "message": "Cerca" + }, + "secretPhrase": { + "message": "Inserisci la tua frase segreta di dodici parole per ripristinare la cassaforte." + }, + "seedPhraseReq": { + "message": "le frasi seed sono lunghe 12 parole" + }, + "select": { + "message": "Seleziona" + }, + "selectCurrency": { + "message": "Seleziona Moneta" + }, "selectService": { "message": "Seleziona Servizio" }, + "selectType": { + "message": "Seleziona Tipo" + }, "send": { "message": "Invia" }, + "sendETH": { + "message": "Invia ETH" + }, "sendTokens": { "message": "Invia Tokens" }, @@ -525,15 +678,33 @@ "sigRequested": { "message": "Richiesta Firma" }, + "spaceBetween": { + "message": "ci può essere solo uno spazio tra le parole" + }, "status": { "message": "Stato" }, + "stateLogs": { + "message": "Log di Stato" + }, + "stateLogsDescription": { + "message": "I log di stato contengono i tuoi indirizzi pubblici e le transazioni effettuate." + }, "submit": { "message": "Invia" }, + "supportCenter": { + "message": "Visita il nostro Centro di Supporto" + }, + "symbolBetweenZeroTen": { + "message": "Il simbolo deve essere lungo tra 0 e 10 caratteri." + }, "takesTooLong": { "message": "Ci sta mettendo troppo?" }, + "terms": { + "message": "Termini di Uso" + }, "testFaucet": { "message": "Prova Faucet" }, @@ -544,12 +715,30 @@ "message": "$1 a ETH via ShapeShift", "description": "il sistema riempirà il tipo di deposito all'inizio del messaggio" }, + "tokenAddress": { + "message": "Indirizzo Token" + }, + "tokenAlreadyAdded": { + "message": "Il token è già stato aggiunto." + }, "tokenBalance": { "message": "Bilancio Token:" }, + "tokenSelection": { + "message": "Cerca un token o seleziona dalla lista di token più popolari." + }, + "tokenSymbol": { + "message": "Simbolo Token" + }, + "tokenWarning1": { + "message": "Tieni traccia dei token che hai acquistato con il tuo account MetaMask. Se hai acquistato token con un account diverso, quei token non appariranno qui." + }, "total": { "message": "Totale" }, + "transactions": { + "message": "transazioni" + }, "transactionMemo": { "message": "Promemoria Transazione (opzionale)" }, @@ -563,6 +752,9 @@ "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" }, + "twelveWords": { + "message": "Queste 12 parole sono l'unico modo per ripristinare i tuoi account MetaMask. \nSalvale in un posto sicuro e segreto." + }, "typePassword": { "message": "Inserisci Password" }, @@ -584,6 +776,9 @@ "unknownNetworkId": { "message": "ID rete sconosciuto" }, + "uriErrorMsg": { + "message": "Gli URI richiedono un prefisso HTTP/HTTPS." + }, "usaOnly": { "message": "Solo USA", "description": "Usare questo sito di scambio è possibile solo per persone residenti in USA." @@ -591,12 +786,27 @@ "usedByClients": { "message": "Usato da una varietà di clients diversi" }, + "useOldUI": { + "message": "Use la vecchia UI" + }, + "validFileImport": { + "message": "Devi selezionare un file valido da importare." + }, + "vaultCreated": { + "message": "Cassaforte Creata" + }, "viewAccount": { "message": "Vedi Account" }, + "visitWebSite": { + "message": "Visita il nostro sito web" + }, "warning": { "message": "Attenzione" }, + "welcomeBeta": { + "message": "Benvenuto nella Beta di MetaMask" + }, "whatsThis": { "message": "Cos'è questo?" }, @@ -606,4 +816,4 @@ "youSign": { "message": "Ti stai connettendo" } -} +} \ No newline at end of file -- cgit From de98cb403974df4ed8cea5ea82f81065ce9e6c0e Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 20 Mar 2018 02:33:46 -0700 Subject: Remove duplicate keys --- app/_locales/en/messages.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 875662cc5..95f46106a 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -282,9 +282,6 @@ "from": { "message": "From" }, - "to": { - "message": "To: " - }, "fromToSame": { "message": "From and To address cannot be the same" }, @@ -696,9 +693,6 @@ "sendTokensAnywhere": { "message": "Send Tokens to anyone with an Ethereum account" }, - "required": { - "Required" - }, "settings": { "message": "Settings" }, @@ -763,7 +757,7 @@ "message": "Test Faucet" }, "to": { - "message": "To" + "message": "To: " }, "toETHviaShapeShift": { "message": "$1 to ETH via ShapeShift", -- cgit From 7a8e0802455b8819dac12d73a4a8e245d6907dc0 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 20 Mar 2018 10:29:22 -0700 Subject: Started on Tx list i18n --- app/_locales/en/messages.json | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 95f46106a..357d51363 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -98,6 +98,9 @@ "confirm": { "message": "Confirm" }, + "confirmed": { + "message": "Confirmed" + }, "confirmContract": { "message": "Confirm Contract" }, @@ -812,6 +815,9 @@ "uiWelcomeMessage": { "message": "You are now using the new Metamask UI. Take a look around, try out new features like sending tokens, and let us know if you have any issues." }, + "unapproved": { + "message": "Unapproved" + }, "unavailable": { "message": "Unavailable" }, -- cgit From 4fc68ca20833e5f6c70b8a532d79ac60e65f4704 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 20 Mar 2018 10:56:35 -0700 Subject: Add i18n in settings/info --- app/_locales/en/messages.json | 3 +++ 1 file changed, 3 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 357d51363..ecce27de2 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -425,6 +425,9 @@ "likeToAddTokens": { "message": "Would you like to add these tokens?" }, + "links": { + "message": "Links" + }, "limit": { "message": "Limit" }, -- cgit From 2c42cfdf1e8c8aff517cae9f6011dd39e503cef3 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 20 Mar 2018 11:04:15 -0700 Subject: Update onlySendToEtherAddress message --- app/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index ecce27de2..7353d8976 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -694,7 +694,7 @@ "message": "Send Tokens" }, "onlySendToEtherAddress": { - "message": "Only send to an Ethereum address." + "message": "Only send ETH to an Ethereum address." }, "sendTokensAnywhere": { "message": "Send Tokens to anyone with an Ethereum account" -- cgit From 8840f505271f9456650550d8b0db697f45ccfb64 Mon Sep 17 00:00:00 2001 From: Grana69 Date: Tue, 20 Mar 2018 15:02:48 -0300 Subject: Add messages.json from @Grana69 --- app/_locales/es/messages.json | 840 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 835 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index 78fc64dbf..f519c194c 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -1,10 +1,840 @@ { + "accept": { + "message": "Aceptar" + }, + "account": { + "message": "Cuenta" + }, + "accountDetails": { + "message": "Detalles de la cuenta" + }, + "accountName": { + "message": "Nombre de la cuenta" + }, + "address": { + "message": "Dirección" + }, + "addToken": { + "message": "Agregar Token" + }, + "amount": { + "message": "Cantidad" + }, + "amountPlusGas": { + "message": "Cantidad + Gas" + }, + "appDescription": { + "message": "Extensión del explorador usar Ethereum", + "description": "La descripción de la aplicación" + }, "appName": { "message": "MetaMask", - "description": "The name of the application" + "description": "El nombre de la aplicación" }, - "appDescription": { - "message": "Administración de identidad en Ethereum", - "description": "The description of the application" + "attemptingConnect": { + "message": "Intentando conectar a la Blockchain" + }, + "available": { + "message": "Disponible" + }, + "back": { + "message": "Atrás" + }, + "balance": { + "message": "Saldo" + }, + "balances": { + "message": "Tus saldos" + }, + "balanceIsInsufficientGas": { + "message": "Saldo de gas insuficiente" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "Debe ser mayor o igual a $1 y menor o igual a $2", + "description": "helper para ingresar hex como un ingreso decimal" + }, + "borrowDharma": { + "message": "Pedir prestado con Dharma (Beta)" + }, + "buy": { + "message": "Comprar" + }, + "buyCoinbase": { + "message": "Comprar en Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase es la manera más popular en el mundo para comprar y vender bitcoin, ethereum y litecoin" + }, + "cancel": { + "message": "Cancelar" + }, + "clickCopy": { + "message": "Click para copiar" + }, + "confirm": { + "message": "Confirmar" + }, + "continue": { + "message": "Continuar" + }, + "confirmContract": { + "message": "Confirmar contrato" + }, + "confirmPassword": { + "message": "Confirmar contraseña" + }, + "enterPasswordConfirm": { + "message": "Ingresa tu contraseña para confirmar" + }, + "confirmTransaction": { + "message": "Confirmar transacción " + }, + "continueToCoinbase": { + "message": "Continuar a Coinbase" + }, + "contractDeployment": { + "message": "Deployar contrato" + }, + "currentConversion": { + "message": "Conversión Actual" + }, + "conversionProgress": { + "message": "Conversión en progreso" + }, + "copiedButton": { + "message": "Copiado" + }, + "copiedClipboard": { + "message": "Copiado al portapapeles" + }, + "copiedExclamation": { + "message": "Copiado!" + }, + "copy": { + "message": "Copiar" + }, + "copyToClipboard": { + "message": "Copiar al portapapeles" + }, + "copyButton": { + "message": " Copiar " + }, + "copyPrivateKey": { + "message": "Esta es tu llave privada (Click para copiar)" + }, + "create": { + "message": "Crear" + }, + "createAccount": { + "message": "Crear Cuenta" + }, + "createDen": { + "message": "Crear" + }, + "crypto": { + "message": "Crypto", + "description": "Tipo de Cambio (criptomonedas)" + }, + "customGas": { + "message": "Personalizar Gas" + }, + "customize": { + "message": "Personalizar" + }, + "currentRPC": { + "message": "RPC actual" + }, + "customRPC": { + "message": "RPC Personalizado" + }, + "newRPC": { + "message": "Nueva URL del RPC" + }, + "defaultNetwork": { + "message": "La red por defecto para las transacciones de Ether es MainNet (red principal)" + }, + "denExplainer": { + "message": "Tu DEN es tu contraseña encriptada guardada dentro de MetaMask" + }, + "deposit": { + "message": "Depositar" + }, + "depositBTC": { + "message": "Deposita tus BTC a la dirección de abajo:" + }, + "depositCoin": { + "message": "Deposita tu $1 a la dirección de abajo", + "description": "Informa al usuario que moneda ha elegido para depositar en shapeshift" + }, + "depositEth": { + "message": "Depositar Eth" + }, + "depositEther": { + "message": "Depositar Ether" + }, + "depositFiat": { + "message": "Depositar con Fiat (divisa nacional)" + }, + "depositFromAccount": { + "message": "Depositar con otra cuenta" + }, + "depositShapeShift": { + "message": "Depositar con ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Si tu tienes otras criptomonedas, puedes intercambiar y depositar Ether directamente en tu billetera de MetaMask. No necesitas tener una cuenta." + }, + "details": { + "message": "Detalles" + }, + "directDeposit": { + "message": "Deposito directo" + }, + "directDepositEther": { + "message": "Depositar Ether directamente" + }, + "directDepositEtherExplainer": { + "message": "Si tu tienes algo de Ether, la forma rapida para tener Ether en tu nueva billetera es depositando directamente" + }, + "done": { + "message": "Completo" + }, + "edit": { + "message": "Editar" + }, + "editAccountName": { + "message": "Editar el nombre de la cuenta" + }, + "encryptNewDen": { + "message": "Encriptar tu nuevo DEN" + }, + "enterPassword": { + "message": "Ingresa contraseña" + }, + "passwordCorrect": { + "message": "Asegurate que tu contraseña es correcta" + }, + "etherscanView": { + "message": "Ver la cuenta en Etherscan" + }, + "exchangeRate": { + "message": "Tipo de cambio" + }, + "exportPrivateKey": { + "message": "Exportar llave privada" + }, + "exportPrivateKeyWarning": { + "message": "Exportar llaves privadas bajo TU PROPIO riesgo" + }, + "failed": { + "message": "Fallo" + }, + "fiat": { + "message": "FIAT", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "No funciona importar el archivo? Haz Click Aquí!", + "description": "Ayuda al usuario a importar su cuenta desde un archivo JSON" + }, + "from": { + "message": "De:" + }, + "fromShapeShift": { + "message": "De ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Indicación pequeña del costo de gas" + }, + "gasFee": { + "message": "Comisión de gas" + }, + "gasLimit": { + "message": "Límite de gas" + }, + "gasLimitCalculation": { + "message": "Calculamos el límite de gas sugerido en función de las tasas de éxito de la red" + }, + "gasLimitRequired": { + "message": "Límite de Gas requerido" + }, + "gasLimitTooLow": { + "message": "El límite de gas debe ser de al menos 21000" + }, + "gasPrice": { + "message": "Precio del Gas (GWEI)" + }, + "gasPriceCalculation": { + "message": "Calculamos los precios sugeridos del gas en función de las tasas de éxito de la red" + }, + "gasPriceRequired": { + "message": "Precio del gas requerido" + }, + "getEther": { + "message": "Conseguir Ether" + }, + "getEtherFromFaucet": { + "message": "Obtenga Ether de un faucet (grifo) por $1", + "description": "Muestra el nombre de la red para el faucet (grifo) de Ether" + }, + "greaterThanMin": { + "message": "Debe ser mayor o igual a $1", + "description": "helper para ingresar hex como entrada decimal" + }, + "here": { + "message": "Aqui", + "description": "como en -haz click aquí- para más información" + }, + "hide": { + "message": "Ocultar" + }, + "hideToken": { + "message": "Ocultar Token" + }, + "hideTokenPrompt": { + "message": "Ocultar Token?" + }, + "howToDeposit": { + "message": "Cómo te gustaria depositar Ether?" + }, + "import": { + "message": "Importar", + "description": "Botón para importar una cuenta desde un archivo seleccionado" + }, + "importAccount": { + "message": "Importar Cuenta" + }, + "importAnAccount": { + "message": "Importar una cuenta" + }, + "importDen": { + "message": "Importar DEN existente" + }, + "imported": { + "message": "Importado", + "description": "estado que muestra que una cuenta ha sido completamente cargada en el llavero" + }, + "infoHelp": { + "message": "Informacion y Ayuda" + }, + "invalidAddress": { + "message": "Dirección Inválida" + }, + "invalidGasParams": { + "message": "Parametros de Gas Inválidos" + }, + "invalidInput": { + "message": "Entrada inválida" + }, + "invalidRequest": { + "message": "Peticion inválida" + }, + "invalidAddressRecipient": { + "message": "Dirección del recipiente invalida" + }, + "fromToSame": { + "message": "La dirección de origen y destino no pueden ser la misma" + }, + "jsonFile": { + "message": "Archivo JSON", + "description": "formato para importar una cuenta" + }, + "jsonFail": { + "message": "Algo malo pasó. Asegurate que tu JSON tiene el formato correcto" + }, + "kovan": { + "message": "Red de pruebas Kovan" + }, + "lessThanMax": { + "message": "Debe ser menor o igual a $1", + "description": "helper para ingresar hex como decimal" + }, + "limit": { + "message": "Límite" + }, + "loading": { + "message": "Cargando..." + }, + "loadingTokens": { + "message": "Cargando Tokens..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "login": { + "message": "Ingresar" + }, + "logout": { + "message": "Cerrar sesion" + }, + "loose": { + "message": "Loose" + }, + "mainnet": { + "message": "Red principal de Ethereum (MainNet)" + }, + "message": { + "message": "Mensaje" + }, + "min": { + "message": "Minimo" + }, + "myAccounts": { + "message": "Mis cuentas" + }, + "needEtherInWallet": { + "message": "Para interactuar con una aplicación descentralizada usando MetaMask, vas a necesitar tener Ether en tu billetera" + }, + "needImportFile": { + "message": "Debes seleccionar un archivo para importar", + "description": "El usuario está importando una cuenta y necesita agregar un archivo para continuar" + }, + "needImportPassword": { + "message": "Debes ingresar una contraseña para el archivo seleccionado", + "description": "Contraseña y archivo necesarios para importar una cuenta" + }, + "validFileImport": { + "message": "Debes selecionar un archivo valido para importar" + }, + "networks": { + "message": "Redes" + }, + "newAccount": { + "message": "Nueva cuenta" + }, + "newAccountNumberName": { + "message": "Cuenta $1", + "description": "Nombre por defecto de la próxima cuenta a ser creada o pantalla de creación de cuenta" + }, + "newContract": { + "message": "Nuevo contrato" + }, + "newPassword": { + "message": "Nueva contraseña (mínimo [8] caracteres)" + }, + "newRecipient": { + "message": "Nuevo destinatario" + }, + "next": { + "message": "Siguiente" + }, + "noAddressForName": { + "message": "No se ha establecido ninguna dirección para este nombre" + }, + "noDeposits": { + "message": "No hay depósitos recibidos" + }, + "noTransactionHistory": { + "message": "Sin historial de transacciones" + }, + "transactions": { + "message": "Transacciones" + }, + "noTransactions": { + "message": "Sin transacciones" + }, + "notStarted": { + "message": "Sin iniciar" + }, + "oldUI": { + "message": "Antigua UI" + }, + "useOldUI": { + "message": "Usar UI antigua" + }, + "oldUIMessage": { + "message": "Regresaste a la antigua UI. Puedes regresar a la nueva UI mediante la opcion en la barra desplegable del menu de arriba a la derecha." + }, + "or": { + "message": "o", + "description": "opción entre crear o importar una cuenta" + }, + "passwordMismatch": { + "message": "Contraseña no concide", + "description": "en el proceso de creación de contraseña, los dos campos de contraseña no coincidieron" + }, + "passwordShort": { + "message": "Contraseña no es lo suficientemente larga", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "Pega tu llave privada aqui", + "description": "Para importar una cuenta desde una llave privada" + }, + "pasteSeed": { + "message": "Pegue su frase semilla aquí!" + }, + "generatingSeed": { + "message": "Generando semilla..." + }, + "pleaseReviewTransaction": { + "message": "Por favor revisa tu transaccion" + }, + "privateKey": { + "message": "Llave privada", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "Advertencia: Nunca revele esta clave. Cualquier persona con sus claves privadas puede robar cualquier activo retenido en su cuenta." + }, + "privateNetwork": { + "message": "Red Privada" + }, + "qrCode": { + "message": "Mostrar codigo QR" + }, + "readdToken": { + "message": "Puede volver a agregar este token en el futuro yendo a 'Agregar token' en el menú de opciones de su cuenta.." + }, + "readMore": { + "message": "Leer más aquí" + }, + "receive": { + "message": "Recibir" + }, + "recipientAddress": { + "message": "Dirección del receptor" + }, + "refundAddress": { + "message": "Su dirección de reembolso" + }, + "rejected": { + "message": "Rechazado" + }, + "required": { + "message": "Requerido" + }, + "retryWithMoreGas": { + "message": "Vuelva a intentar con un precio de Gas más alto aquí" + }, + "revert": { + "message": "Revertir" + }, + "rinkeby": { + "message": "Red privada Rinkeby" + }, + "ropsten": { + "message": "Red privada Ropsten" + }, + "sampleAccountName": { + "message": "Ej. Mi nueva cuenta", + "description": "Ayuda al usuario a entender el concepto de agregar un nombre, leíble por humanos, a su cuenta" + }, + "save": { + "message": "Guardar" + }, + "saveAsFile": { + "message": "Guardar como archivo", + "description": "Proceso de exportación de cuenta" + }, + "selectService": { + "message": "Seleccionar servicio" + }, + "send": { + "message": "Enviar" + }, + "sendTokens": { + "message": "Enviar Tokens" + }, + "sendETH": { + "message": "Enviar ETH" + }, + "sendTokensAnywhere": { + "message": "Enviar Tokens a cualquiera con una cuenta de Ethereum" + }, + "settings": { + "message": "Configuración" + }, + "info": { + "message": "Información" + }, + "shapeshiftBuy": { + "message": "Comprar con ShapeShift" + }, + "showPrivateKeys": { + "message": "Mostrar llaves privadas" + }, + "showQRCode": { + "message": "Mostrar codigo QR" + }, + "sign": { + "message": "Firmar" + }, + "signMessage": { + "message": "Firmar Mensaje" + }, + "signNotice": { + "message": "Firmar este mensaje puede tener\n efectos secundarios peligrosos. Firma sólo\nmensajes desde sitios a los cuales tú estés dispuesto a confiar completamente tu cuenta.\nEste método peligroso va a ser \nremovido en una version futura." + }, + "sigRequest": { + "message": "Solicitud de firma" + }, + "sigRequested": { + "message": "Firma solicitada" + }, + "status": { + "message": "Estado" + }, + "submit": { + "message": "Enviar" + }, + "takesTooLong": { + "message": "¿Está tomando demasiado?" + }, + "testFaucet": { + "message": "Testear Faucet" + }, + "to": { + "message": "Para:" + }, + "toETHviaShapeShift": { + "message": "$1 a ETH via ShapeShift", + "description": "el sistema llenará el tipo de depósito al principio del mensaje" + }, + "tokenBalance": { + "message": "Tu balance de Tokens es:" + }, + "total": { + "message": "Total" + }, + "transactionMemo": { + "message": "Memo de transaccion (opcional)" + }, + "transactionNumber": { + "message": "Número de transacción" + }, + "transfers": { + "message": "Transferencias" + }, + "troubleTokenBalances": { + "message": "Tuvimos problemas para cargar sus balances de tokens. Puedes verlos ", + "description": "Followed by a link (here) to view token balances" + }, + "typePassword": { + "message": "Escribe tu contraseña" + }, + "uiWelcome": { + "message": "Bienvenido a la nueva UI (Beta)" + }, + "uiWelcomeMessage": { + "message": "Estás usando la nueva UI de MetaMask. Echa un vistazo alrededor, prueba las nuevas características, tales como mandar tokens, y déjanos saber si tienes algún problema" + }, + "unavailable": { + "message": "No disponible" + }, + "unknown": { + "message": "Desconocido (a)" + }, + "unknownNetwork": { + "message": "Red privada desconocida" + }, + "unknownNetworkId": { + "message": "ID (identidad) de Red desconocida" + }, + "currentNetwork": { + "message": "Red actual" + }, + "usaOnly": { + "message": "Sólo USA (Estados Unidos)", + "description": "El uso de este exchange (casa de cambio) estaá limitado a las personas dentro de los Estados Unidos de America" + }, + "usedByClients": { + "message": "Utilizado por una variedad de clientes diferentes" + }, + "viewAccount": { + "message": "Mirar cuenta" + }, + "warning": { + "message": "Advertencia" + }, + "whatsThis": { + "message": "Qué es esto?" + }, + "yourSigRequested": { + "message": "Tu firma ya fue solicidada" + }, + "youSign": { + "message": "Usted está firmando" + }, + "importedAccountMsg": { + "message": "Cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas. " + }, + "selectType": { + "message": "Seleccionar tipo" + }, + "selectCurrency": { + "message": "Seleccionar moneda" + }, + "password": { + "message": "Contraseña" + }, + "select": { + "message": "Seleccionar" + }, + "readMore2": { + "message": "Leer más." + }, + "secretPhrase": { + "message": "Ingresa tu frase de 12 palabras para restaurar tu bóveda" + }, + "spaceBetween": { + "message": "Sólo puede haber un espacio entre las palabras" + }, + "loweCaseWords": { + "message": "las frases semilla sólo pueden tener minúsculas" + }, + "seedPhraseReq": { + "message": "las frases semilla tienen doce (12) palabras de largo" + }, + "addTokens": { + "message": "Agregar tokens" + }, + "addCustomTokens": { + "message": "Agregar token personalizados" + }, + "up": { + "message": "arriba" + }, + "down": { + "message": "abajo" + }, + "tokenWarning1": { + "message": "Mantenga un registro de los tokens que ha comprado con su cuenta de MetaMask. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." + }, + "tokenSelection": { + "message": "Busca tokens o selecciónalo de nuestra lista de tokens populares" + }, + "search": { + "message": "Buscar" + }, + "privacyMsg": { + "message": "Política de privacidad" + }, + "terms": { + "message": "Terminos de Uso" + }, + "attributions": { + "message": "Atribuciones" + }, + "supportCenter": { + "message": "Visita nuestro centro de atención" + }, + "knowledgeDataBase": { + "message": "Visita nuestra base de conocimiento" + }, + "visitWebSite": { + "message": "Visita nuestro sitio web" + }, + "followTwitter": { + "message": "Síguenos en Twitter" + }, + "emailUs": { + "message": "Envíanos un correo!" + }, + "hereList": { + "message": "Aquí está una lista!!!" + }, + "insufficientFounds": { + "message": "Fondos insuficientes" + }, + "insufficientTokens": { + "message": "Tokens insuficientes" + }, + "negativeETH": { + "message": "No se pueden mandar cantidades negativas de ETH" + }, + "urlErrorMsg": { + "message": "URI necesita el prefijo HTTP/HTTPS apropiado" + }, + "invalidRPC": { + "message": "Invalida URL del RPC" + }, + "saveLogs": { + "message": "Logs de estado contienen tus direcciones publicas y transacciones enviadas" + }, + "stateLogs": { + "message": "Logs de estado" + }, + "downloadStatelogs": { + "message": "Descargar logs de estados" + }, + "revealSeedWords": { + "message": "Revelar palabras de semilla" + }, + "revealSeedWordsWarning": { + "message": "No recuperes tu semilla en un lugar publico! Esas palabras pueden ser usadas para robarte todas tus cuentas" + }, + "resetAccount": { + "message": "Reiniciar cuenta" + }, + "builtInCalifornia": { + "message": "Metamask fue diseñado y construido en California " + }, + "classicInterface": { + "message": "Usar interfaz clasica " + }, + "welcomeBeta": { + "message": "Bienvenido a Metamask Beta" + }, + "metamaskDescription": { + "message": "Metamask es una identidad segura en Ethereum" + }, + "holdEther": { + "message": "Te permite mantener tus ether y tokens, así como puente para aplicaciones descentralizadas" + }, + "decimalsMustZerotoTen": { + "message": "Los decimales deben ser al menos 0 y no más de 36" + }, + "symbolBetweenZeroTen": { + "message": "Símbolo debe ser entre 0 y 10 caracteres" + }, + "personalAddressDetected": { + "message": "Dirección personal detectada. Ingresa la dirección del contrato del token" + }, + "tokenAlreadyAdded": { + "message": "El token esta actualmente agregado" + }, + "mustSelectOne": { + "message": "Debe seleccionar al menos un (1) token" + }, + "tokenAddress": { + "message": "Dirección del token" + }, + "tokenSymbol": { + "message": "Símbolo del token" + }, + "decimalsPrecision": { + "message": "Decimales de precisión" + }, + "likeToAddTokens": { + "message": "¿Te gustaría agregar estos tokens?" + }, + "msgCompose1": { + "message": "Solo manda " + }, + "msgCompose2": { + "message": " a una dirección de Ethereum" + }, + "blockiesIdenticon": { + "message": "Usar Blockies Identicon (Iconos)" + }, + "vaultCreated": { + "message": "Bóveda creada" + }, + "twelveWords": { + "message": "Estas 12 palabras son la única forma de restablecer sus cuentas de MetaMask. \nGuardalas en un lugar seguro y secreto." + }, + "copiedSafe": { + "message": "Ya lo guardé en un lugar seguro" + }, + "saveSeedAsFile": { + "message": "Guardar la semilla como archivo" + }, + "restoreFromSeed": { + "message": "Restaurar desde semilla" } -} +} \ No newline at end of file -- cgit From dd19a934475cfa8cc31495b351b69a7d8d1f8d5e Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 20 Mar 2018 12:06:59 -0700 Subject: Add i18n to tx status --- app/_locales/en/messages.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 7353d8976..c64b7248b 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -37,6 +37,9 @@ "message": "MetaMask", "description": "The name of the application" }, + "approved": { + "message": "Approved" + }, "attemptingConnect": { "message": "Attempting to connect to blockchain." }, @@ -232,6 +235,9 @@ "downloadStatelogs": { "message": "Download State Logs" }, + "dropped": { + "message": "Dropped" + }, "edit": { "message": "Edit" }, @@ -703,7 +709,7 @@ "message": "Settings" }, "info": { - "message": "Info" + "message": "Info" }, "shapeshiftBuy": { "message": "Buy with Shapeshift" @@ -717,6 +723,9 @@ "sign": { "message": "Sign" }, + "signed": { + "message": "Signed" + }, "signMessage": { "message": "Sign Message" }, @@ -747,6 +756,9 @@ "submit": { "message": "Submit" }, + "submitted": { + "message": "Submitted" + }, "supportCenter": { "message": "Visit our Support Center" }, -- cgit From 93495b28098701e5558052b7f39c39993dc64911 Mon Sep 17 00:00:00 2001 From: Jeffrey Tong Date: Tue, 20 Mar 2018 12:18:48 -0700 Subject: fix for lint --- app/scripts/background.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/scripts/background.js b/app/scripts/background.js index 679c2a4e2..53b67f294 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -40,7 +40,7 @@ const isIE = !!document.documentMode const isEdge = !isIE && !!window.StyleMedia let popupIsOpen = false -let notifcationIsOpen = false; +let notificationIsOpen = false let openMetamaskTabsIDs = {} // state persistence @@ -139,8 +139,8 @@ function setupController (initState) { } if (remotePort.name === 'notification') { endOfStream(portStream, () => { - notifcationIsOpen = false - }); + notificationIsOpen = false + }) } } else { // communication with page @@ -184,8 +184,8 @@ function setupController (initState) { function triggerUi () { extension.tabs.query({ active: true }, (tabs) => { const currentlyActiveMetamaskTab = tabs.find(tab => openMetamaskTabsIDs[tab.id]) - if (!popupIsOpen && !currentlyActiveMetamaskTab) notificationManager.showPopup(); - notifcationIsOpen = true; + if (!popupIsOpen && !currentlyActiveMetamaskTab && !notificationIsOpen) notificationManager.showPopup() + notificationIsOpen = true }) } -- cgit From bb8b84f2fe9c56f6e2a8c13235c2719a1ccb1f0a Mon Sep 17 00:00:00 2001 From: Bradford Lamson-Scribner Date: Mon, 19 Mar 2018 18:37:38 -0600 Subject: add Dutch translations --- app/_locales/nl/messages.json | 819 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 819 insertions(+) create mode 100644 app/_locales/nl/messages.json (limited to 'app') diff --git a/app/_locales/nl/messages.json b/app/_locales/nl/messages.json new file mode 100644 index 000000000..aacb81fee --- /dev/null +++ b/app/_locales/nl/messages.json @@ -0,0 +1,819 @@ +{ + "accept": { + "message": "Aanvaarden" + }, + "account": { + "message": "Account" + }, + "accountDetails": { + "message": "Accountgegevens" + }, + "accountName": { + "message": "Accountnaam" + }, + "address": { + "message": "Adres" + }, + "addCustomToken": { + "message": "Aangepaste token toevoegen" + }, + "addToken": { + "message": "Voeg token toe" + }, + "addTokens": { + "message": "Tokens toevoegen" + }, + "amount": { + "message": "Bedrag" + }, + "amountPlusGas": { + "message": "Bedrag + gas" + }, + "appDescription": { + "message": "Ethereum Browser-extensie", + "description": "De beschrijving van de applicatie" + }, + "appName": { + "message": "MetaMask", + "description": "De naam van de applicatie" + }, + "attemptingConnect": { + "message": "Poging om verbinding te maken met blockchain." + }, + "attributions": { + "message": "Bevoegdheden" + }, + "available": { + "message": "Beschikbaar" + }, + "back": { + "message": "Terug" + }, + "balance": { + "message": "Balans:" + }, + "balances": { + "message": "Je saldo" + }, + "balanceIsInsufficientGas": { + "message": "Onvoldoende saldo voor huidig ​​gastotaal" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "moet groter zijn dan of gelijk zijn aan $1 en kleiner dan of gelijk aan $2.", + "description": "helper voor het invoeren van hex als decimale invoer" + }, + "blockiesIdenticon": { + "message": "Gebruik Blockies Identicon" + }, + "borrowDharma": { + "message": "Lenen met Dharma (Beta)" + }, + "builtInCalifornia": { + "message": "MetaMask is ontworpen en gebouwd in Californië." + }, + "buy": { + "message": "Kopen" + }, + "buyCoinbase": { + "message": "Koop op Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase is 's werelds populairste manier om bitcoin, ethereum en litecoin te kopen en verkopen." + }, + "cancel": { + "message": "Annuleer" + }, + "classicInterface": { + "message": "Gebruik de klassieke interface" + }, + "clickCopy": { + "message": "Klik om te kopiëren" + }, + "confirm": { + "message": "Bevestigen" + }, + "confirmContract": { + "message": "Contract bevestigen" + }, + "confirmPassword": { + "message": "bevestig wachtwoord" + }, + "confirmTransaction": { + "message": "Bevestig transactie" + }, + "continue": { + "message": "Doorgaan met" + }, + "continueToCoinbase": { + "message": "Ga verder naar Coinbase" + }, + "contractDeployment": { + "message": "Contractimplementatie" + }, + "conversionProgress": { + "message": "Bezig met conversie" + }, + "copiedButton": { + "message": "gekopieerde" + }, + "copiedClipboard": { + "message": "Gekopieerd naar het klembord" + }, + "copiedExclamation": { + "message": "Gekopieerde!" + }, + "copiedSafe": { + "message": "Ik heb het ergens veilig gekopieerd" + }, + "copy": { + "message": "Kopiëren" + }, + "copyToClipboard": { + "message": "Kopieer naar klembord" + }, + "copyButton": { + "message": " Kopiëren " + }, + "copyPrivateKey": { + "message": "Dit is uw privésleutel (klik om te kopiëren)" + }, + "create": { + "message": "creëren" + }, + "createAccount": { + "message": "Account aanmaken" + }, + "createDen": { + "message": "creëren" + }, + "crypto": { + "message": "crypto", + "description": "Ruiltype (cryptocurrencies)" + }, + "currentConversion": { + "message": "Huidige conversie" + }, + "currentNetwork": { + "message": "Huidig ​​netwerk" + }, + "customGas": { + "message": "Pas Gas aan" + }, + "customize": { + "message": "Aanpassen" + }, + "customRPC": { + "message": "Aangepaste RPC" + }, + "decimalsMustZerotoTen": { + "message": "Decimalen moeten minimaal 0 en niet meer dan 36 zijn." + }, + "decimal": { + "message": "Decimalen van precisie" + }, + "defaultNetwork": { + "message": "Het standaardnetwerk voor Ether-transacties is Main Net." + }, + "denExplainer": { + "message": "Uw DEN is uw wachtwoord-gecodeerde opslag binnen MetaMask." + }, + "deposit": { + "message": "Storting" + }, + "depositBTC": { + "message": "Stort uw BTC op het onderstaande adres:" + }, + "depositCoin": { + "message": "Stort uw $1 op het onderstaande adres", + "description": "Laat de gebruiker weten welk muntje ze hebben geselecteerd om te deponeren met shapeshift" + }, + "depositEth": { + "message": "Aanbetaling Eth" + }, + "depositEther": { + "message": "Stort Ether" + }, + "depositFiat": { + "message": "Stort met Fiat" + }, + "depositFromAccount": { + "message": "Storten van een ander account" + }, + "depositShapeShift": { + "message": "Stort met ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Als u andere cryptocurrencies bezit, kunt u Ether direct in uw MetaMask-portemonnee ruilen en storten. Geen account nodig." + }, + "details": { + "message": "Details" + }, + "directDeposit": { + "message": "Directe storting" + }, + "directDepositEther": { + "message": "Directe Ether storten" + }, + "directDepositEtherExplainer": { + "message": "Als je al wat Ether hebt, de snelste manier om Ether in je nieuwe portemonnee te krijgen door een directe storting." + }, + "done": { + "message": "Gedaan" + }, + "downloadStatelogs": { + "message": "Staatslogboeken downloaden" + }, + "edit": { + "message": "Bewerk" + }, + "editAccountName": { + "message": "Bewerk accountnaam" + }, + "emailUs": { + "message": "Email ons!" + }, + "encryptNewDen": { + "message": "Versleutel je nieuwe DEN" + }, + "enterPassword": { + "message": "Voer wachtwoord in" + }, + "enterPasswordConfirm": { + "message": "Voer uw wachtwoord in om te bevestigen" + }, + "etherscanView": { + "message": "Bekijk account op Etherscan" + }, + "exchangeRate": { + "message": "Wisselkoers" + }, + "exportPrivateKey": { + "message": "Exporteer privésleutel" + }, + "exportPrivateKeyWarning": { + "message": "Exporteer privésleutels op eigen risico." + }, + "failed": { + "message": "mislukt" + }, + "fiat": { + "message": "FIAT", + "description": "Ruiltype" + }, + "fileImportFail": { + "message": "Bestandsimport werkt niet? Klik hier!", + "description": "Helpt de gebruiker om zijn account vanuit een JSON-bestand te importeren" + }, + "followTwitter": { + "message": "Volg ons op Twitter" + }, + "from": { + "message": "Van" + }, + "fromToSame": { + "message": "Van en naar adres kan niet hetzelfde zijn" + }, + "fromShapeShift": { + "message": "Van ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Korte indicatie van gaskosten" + }, + "gasFee": { + "message": "Gas vergoeding" + }, + "gasLimit": { + "message": "Gaslimiet" + }, + "gasLimitCalculation": { + "message": "We berekenen de voorgestelde gaslimiet op basis van succespercentages van het netwerk." + }, + "gasLimitRequired": { + "message": "Gaslimiet vereist" + }, + "gasLimitTooLow": { + "message": "De gaslimiet moet minstens 21000 zijn" + }, + "generatingSeed": { + "message": "Zaad produceren ..." + }, + "gasPrice": { + "message": "Gasprijs (GWEI)" + }, + "gasPriceCalculation": { + "message": "We berekenen de voorgestelde gasprijzen op basis van succespercentages van het netwerk." + }, + "gasPriceRequired": { + "message": "Gasprijs vereist" + }, + "getEther": { + "message": "Krijg Ether" + }, + "getEtherFromFaucet": { + "message": "Haal Ether uit een kraan voor de $1", + "description": "Geeft de netwerknaam voor Ether-kraan weer" + }, + "greaterThanMin": { + "message": "moet groter zijn dan of gelijk zijn aan $1.", + "description": "helper voor het invoeren van hex als decimale invoer" + }, + "here": { + "message": "hier", + "description": "zoals in -klik hier- voor meer informatie (gaat met troubleTokenBalances)" + }, + "hereList": { + "message": "Hier is een lijst !!!!" + }, + "hide": { + "message": "Verbergen" + }, + "hideToken": { + "message": "Token verbergen" + }, + "hideTokenPrompt": { + "message": "Token verbergen?" + }, + "howToDeposit": { + "message": "Hoe zou je Ether willen deponeren?" + }, + "holdEther": { + "message": "Hiermee kunt u ether & tokens bewaren en dient u als brug naar gedecentraliseerde applicaties." + }, + "import": { + "message": "Importeren", + "description": "Knop om een ​​account uit een geselecteerd bestand te importeren" + }, + "importAccount": { + "message": "Account importeren" + }, + "importAccountMsg": { + "message":" Geïmporteerde accounts worden niet gekoppeld aan de seedphrase van uw oorspronkelijk gemaakte MetaMask-account. Meer informatie over geïmporteerde accounts" + }, + "importAnAccount": { + "message": "Importeer een account" + }, + "importDen": { + "message": "Bestaande DEN importeren" + }, + "imported": { + "message": "geïmporteerde", + "description": "status die aantoont dat een account volledig in de sleutelring is geladen" + }, + "infoHelp": { + "message": "Info en hulp" + }, + "insufficientFunds": { + "message": "Onvoldoende fondsen." + }, + "insufficientTokens": { + "message": "Onvoldoende tokens." + }, + "invalidAddress": { + "message": "Ongeldig adres" + }, + "invalidAddressRecipient": { + "message": "Het adres van de ontvanger is ongeldig" + }, + "invalidGasParams": { + "message": "Ongeldige gasparameters" + }, + "invalidInput": { + "message": "Ongeldige invoer." + }, + "invalidRequest": { + "message": "ongeldig verzoek" + }, + "invalidRPC": { + "message": "Ongeldige RPC-URI" + }, + "jsonFail": { + "message": "Er is iets fout gegaan. Zorg ervoor dat uw JSON-bestand correct is opgemaakt." + }, + "jsonFile": { + "message": "JSON-bestand", + "description": "formaat voor het importeren van een account" + }, + "kovan": { + "message": "Kovan-testnetwerk" + }, + "knowledgeDataBase": { + "message": "Bezoek onze Knowledge Base" + }, + "lessThanMax": { + "message": "moet kleiner zijn dan of gelijk zijn aan $1.", + "description": "helper voor het invoeren van hex als decimale invoer" + }, + "likeToAddTokens": { + "message": "Wil je deze tokens toevoegen?" + }, + "limit": { + "message": "Begrenzing" + }, + "loading": { + "message": "Bezig met laden..." + }, + "loadingTokens": { + "message": "Tokens laden ..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "login": { + "message": "Log in" + }, + "logout": { + "message": "Uitloggen" + }, + "loose": { + "message": "Los" + }, + "loweCaseWords": { + "message": "zaadwoorden hebben alleen kleine letters" + }, + "mainnet": { + "message": "belangrijkste ethereum-netwerk" + }, + "message": { + "message": "Bericht" + }, + "metamaskDescription": { + "message": "MetaMask is een veilige identiteitskluis voor Ethereum." + }, + "min": { + "message": "Minimum" + }, + "myAccounts": { + "message": "Mijn accounts" + }, + "mustSelectOne": { + "message": "Moet ten minste één token selecteren." + }, + "needEtherInWallet": { + "message": "Om te communiceren met gedecentraliseerde applicaties met MetaMask, heb je Ether nodig in je portemonnee." + }, + "needImportFile": { + "message": "U moet een bestand selecteren om te importeren.", + "description": "Gebruiker is belangrijk een account en moet een bestand toevoegen om door te gaan" + }, + "needImportPassword": { + "message": "U moet een wachtwoord invoeren voor het geselecteerde bestand.", + "description": "Wachtwoord en bestand nodig om een ​​account te importeren" + }, + "negativeETH": { + "message": "Kan geen negatieve hoeveelheden ETH verzenden." + }, + "networks": { + "message": "netwerken" + }, + "newAccount": { + "message": "Nieuw account" + }, + "newAccountNumberName": { + "message": "Account $1", + "description": "Standaardnaam van de volgende account die moet worden aangemaakt op het scherm voor het maken van een account" + }, + "newContract": { + "message": "Nieuw contract" + }, + "newPassword": { + "message": "Nieuw wachtwoord (min 8 tekens)" + }, + "newRecipient": { + "message": "Nieuwe ontvanger" + }, + "newRPC": { + "message": "Nieuwe RPC-URL" + }, + "next": { + "message": "volgende" + }, + "noAddressForName": { + "message": "Er is geen adres ingesteld voor deze naam." + }, + "noDeposits": { + "message": "Geen aanbetalingen ontvangen" + }, + "noTransactionHistory": { + "message": "Geen transactiegeschiedenis." + }, + "noTransactions": { + "message": "Geen transacties" + }, + "notStarted": { + "message": "Niet begonnen" + }, + "oldUI": { + "message": "Oude gebruikersinterface" + }, + "oldUIMessage": { + "message": "U bent teruggekeerd naar de oude gebruikersinterface. U kunt terugschakelen naar de nieuwe gebruikersinterface via de optie in het vervolgkeuzemenu in de rechterbovenhoek." + }, + "or": { + "message": "of", + "description": "keuze tussen het maken of importeren van een nieuw account" + }, + "passwordCorrect": { + "message": "Zorg ervoor dat uw wachtwoord correct is." + }, + "passwordMismatch": { + "message": "wachtwoorden komen niet overeen", + "description": "bij het maken van het wachtwoord kwamen de twee nieuwe wachtwoordvelden niet overeen" + }, + "passwordShort": { + "message": "wachtwoord niet lang genoeg", + "description": "bij het maken van het wachtwoord is het wachtwoord niet lang genoeg om veilig te zijn" + }, + "pastePrivateKey": { + "message": "Plak hier uw privésleutelstring:", + "description": "Voor het importeren van een account vanaf een privésleutel" + }, + "pasteSeed": { + "message": "Plak je zaadzin hier!" + }, + "personalAddressDetected": { + "message": "Persoonlijk adres gedetecteerd. Voer het tokencontractadres in." + }, + "pleaseReviewTransaction": { + "message": "Controleer uw transactie." + }, + "privacyMsg": { + "message": "Privacybeleid" + }, + "privateKey": { + "message": "Prive sleutel", + "description": "selecteer dit type bestand om te gebruiken om een ​​account te importeren" + }, + "privateKeyWarning": { + "message": "Waarschuwing: open deze sleutel nooit. Iedereen met uw privésleutels kan stelen van alle items in uw account." + }, + "privateNetwork": { + "message": "Prive netwerk" + }, + "qrCode": { + "message": "QR-code weergeven" + }, + "readdToken": { + "message": "U kunt dit token in de toekomst weer toevoegen door naar \"Token toevoegen\" te gaan in het menu met accountopties." + }, + "readMore": { + "message": "Lees hier meer." + }, + "readMore2": { + "message": "Lees verder." + }, + "receive": { + "message": "Te ontvangen" + }, + "recipientAddress": { + "message": "Geadresseerde adres" + }, + "refundAddress": { + "message": "Uw teruggave adres" + }, + "rejected": { + "message": "Verworpen" + }, + "resetAccount": { + "message": "Account opnieuw instellen" + }, + "restoreFromSeed": { + "message": "Herstel van zaaduitdrukking" + }, + "required": { + "message": "Verplicht" + }, + "retryWithMoreGas": { + "message": "Probeer hier opnieuw met een hogere gasprijs" + }, + "revealSeedWords": { + "message": "Onthul zaadwoorden" + }, + "revealSeedWordsWarning": { + "message": "Herstel je zaadwoorden niet op een openbare plaats! Deze woorden kunnen worden gebruikt om al uw accounts te stelen." + }, + "revert": { + "message": "terugkeren" + }, + "rinkeby": { + "message": "Rinkeby testnetwerk" + }, + "ropsten": { + "message": "Ropsten testnetwerk" + }, + "sampleAccountName": { + "message": "Bijv. Mijn nieuwe account", + "description": "Help de gebruiker begrip te ontwikkelen van het toevoegen van een door mensen leesbare naam aan zijn of haar account" + }, + "save": { + "message": "Opslaan" + }, + "saveAsFile": { + "message": "Sla op als bestand", + "description": "Account export proces" + }, + "saveSeedAsFile": { + "message": "Bewaar zaadwoorden als bestand" + }, + "search": { + "message": "Zoeken" + }, + "secretPhrase": { + "message": "Voer hier je geheime twaalfwoordfrase in om je kluis te herstellen." + }, + "seedPhraseReq": { + "message": "zaadzinnen zijn 12 woorden lang" + }, + "select": { + "message": "kiezen" + }, + "selectCurrency": { + "message": "selecteer valuta" + }, + "selectService": { + "message": "Selecteer Service" + }, + "selectType": { + "message": "Selecteer type" + }, + "send": { + "message": "Sturen" + }, + "sendETH": { + "message": "Verzend ETH" + }, + "sendTokens": { + "message": "Stuur tokens" + }, + "sendTokensAnywhere": { + "message": "Stuur tokens naar iedereen met een Ethereum-account" + }, + "settings": { + "message": "instellingen" + }, + "shapeshiftBuy": { + "message": "Koop met Shapeshift" + }, + "showPrivateKeys": { + "message": "Privésleutels weergeven" + }, + "showQRCode": { + "message": "QR-code weergeven" + }, + "sign": { + "message": "Teken" + }, + "signMessage": { + "message": "Teken bericht" + }, + "signNotice": { + "message": "Het ondertekenen van dit bericht kan hebben \ngevaarlijke bijwerkingen. Meld alleen berichten van \nsites die u volledig vertrouwt met uw volledige account.\n Deze gevaarlijke methode wordt in een toekomstige versie verwijderd." + }, + "sigRequest": { + "message": "Ondertekeningsverzoek" + }, + "sigRequested": { + "message": "Handtekening aangevraagd" + }, + "spaceBetween": { + "message": "er kan alleen een spatie tussen woorden zijn" + }, + "status": { + "message": "staat" + }, + "stateLogs": { + "message": "Staatslogboeken" + }, + "stateLogsDescription": { + "message": "Staatslogboeken bevatten uw openbare accountadressen en verzonden transacties." + }, + "submit": { + "message": "voorleggen" + }, + "supportCenter": { + "message": "Bezoek ons ​​ondersteuningscentrum" + }, + "symbolBetweenZeroTen": { + "message": "Het symbool moet tussen 0 en 10 tekens lang zijn." + }, + "takesTooLong": { + "message": "Duurt te lang?" + }, + "terms": { + "message": "Gebruiksvoorwaarden" + }, + "testFaucet": { + "message": "Test de kraan" + }, + "to": { + "message": "Naar" + }, + "toETHviaShapeShift": { + "message": "$1 tot ETH via ShapeShift", + "description": "systeem zal het aanbetalingstype invullen bij het begin van het bericht" + }, + "tokenAddress": { + "message": "Token-adres" + }, + "tokenAlreadyAdded": { + "message": "Token is al toegevoegd." + }, + "tokenBalance": { + "message": "Uw tokensaldo is:" + }, + "tokenSelection": { + "message": "Zoek naar tokens of selecteer uit onze lijst met populaire tokens." + }, + "tokenSymbol": { + "message": "Token Symbol" + }, + "tokenWarning1": { + "message": "Houd de tokens bij die je hebt gekocht met je MetaMask-account. Als je tokens met een ander account hebt gekocht, worden die tokens hier niet weergegeven." + }, + "total": { + "message": "Totaal" + }, + "transactions": { + "message": "transacties" + }, + "transactionMemo": { + "message": "Transactiememo (optioneel)" + }, + "transactionNumber": { + "message": "Transactie nummer" + }, + "transfers": { + "message": "transfers" + }, + "troubleTokenBalances": { + "message": "We hadden problemen bij het laden van uw tokenbalansen. Je kunt ze bekijken", + "description": "Gevolgd door een link (hier) om tegensaldi te bekijken" + }, + "twelveWords": { + "message": "Deze 12 woorden zijn de enige manier om uw MetaMask-accounts te herstellen.\nBewaar ze ergens veilig en geheim." + }, + "typePassword": { + "message": "Typ uw wachtwoord" + }, + "uiWelcome": { + "message": "Welkom bij de nieuwe gebruikersinterface (bèta)" + }, + "uiWelcomeMessage": { + "message": "U gebruikt nu de nieuwe gebruikersinterface van Metamask. Kijk rond, probeer nieuwe functies uit zoals het verzenden van tokens en laat ons weten of u problemen ondervindt." + }, + "unavailable": { + "message": "Niet beschikbaar" + }, + "unknown": { + "message": "Onbekend" + }, + "unknownNetwork": { + "message": "Onbekend privénetwerk" + }, + "unknownNetworkId": { + "message": "Onbekende netwerk-ID" + }, + "uriErrorMsg": { + "message": "Voor URI's is het juiste HTTP / HTTPS-voorvoegsel vereist." + }, + "usaOnly": { + "message": "Alleen in de VS.", + "description": "Het gebruik van deze uitwisseling is beperkt tot mensen in de VS." + }, + "usedByClients": { + "message": "Gebruikt door verschillende klanten" + }, + "useOldUI": { + "message": "Gebruik de oude gebruikersinterface" + }, + "validFileImport": { + "message": "U moet een geldig bestand selecteren om te importeren." + }, + "vaultCreated": { + "message": "Vault gemaakt" + }, + "viewAccount": { + "message": "Bekijk account" + }, + "visitWebSite": { + "message": "Bezoek onze website" + }, + "warning": { + "message": "Waarschuwing" + }, + "welcomeBeta": { + "message": "Welkom bij MetaMask Beta" + }, + "whatsThis": { + "message": "Wat is dit?" + }, + "yourSigRequested": { + "message": "Uw handtekening wordt aangevraagd" + }, + "youSign": { + "message": "U ondertekent" + } +} -- cgit From 3d885cae92603c8847660ecb0a7345b8289dae11 Mon Sep 17 00:00:00 2001 From: Herman Junge Date: Tue, 20 Mar 2018 19:25:21 -0300 Subject: alphabetic sort of spanish messages.json --- app/_locales/es/messages.json | 474 +++++++++++++++++++++--------------------- 1 file changed, 237 insertions(+), 237 deletions(-) (limited to 'app') diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index f519c194c..2737e4eca 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -11,12 +11,18 @@ "accountName": { "message": "Nombre de la cuenta" }, - "address": { - "message": "Dirección" + "addCustomTokens": { + "message": "Agregar token personalizados" }, "addToken": { "message": "Agregar Token" }, + "addTokens": { + "message": "Agregar tokens" + }, + "address": { + "message": "Dirección" + }, "amount": { "message": "Cantidad" }, @@ -34,6 +40,9 @@ "attemptingConnect": { "message": "Intentando conectar a la Blockchain" }, + "attributions": { + "message": "Atribuciones" + }, "available": { "message": "Disponible" }, @@ -43,12 +52,12 @@ "balance": { "message": "Saldo" }, - "balances": { - "message": "Tus saldos" - }, "balanceIsInsufficientGas": { "message": "Saldo de gas insuficiente" }, + "balances": { + "message": "Tus saldos" + }, "beta": { "message": "BETA" }, @@ -56,9 +65,15 @@ "message": "Debe ser mayor o igual a $1 y menor o igual a $2", "description": "helper para ingresar hex como un ingreso decimal" }, + "blockiesIdenticon": { + "message": "Usar Blockies Identicon (Iconos)" + }, "borrowDharma": { "message": "Pedir prestado con Dharma (Beta)" }, + "builtInCalifornia": { + "message": "Metamask fue diseñado y construido en California " + }, "buy": { "message": "Comprar" }, @@ -71,36 +86,33 @@ "cancel": { "message": "Cancelar" }, + "classicInterface": { + "message": "Usar interfaz clasica " + }, "clickCopy": { "message": "Click para copiar" }, "confirm": { "message": "Confirmar" }, - "continue": { - "message": "Continuar" - }, "confirmContract": { "message": "Confirmar contrato" }, "confirmPassword": { "message": "Confirmar contraseña" }, - "enterPasswordConfirm": { - "message": "Ingresa tu contraseña para confirmar" - }, "confirmTransaction": { "message": "Confirmar transacción " }, + "continue": { + "message": "Continuar" + }, "continueToCoinbase": { "message": "Continuar a Coinbase" }, "contractDeployment": { "message": "Deployar contrato" }, - "currentConversion": { - "message": "Conversión Actual" - }, "conversionProgress": { "message": "Conversión en progreso" }, @@ -113,18 +125,21 @@ "copiedExclamation": { "message": "Copiado!" }, + "copiedSafe": { + "message": "Ya lo guardé en un lugar seguro" + }, "copy": { "message": "Copiar" }, - "copyToClipboard": { - "message": "Copiar al portapapeles" - }, "copyButton": { "message": " Copiar " }, "copyPrivateKey": { "message": "Esta es tu llave privada (Click para copiar)" }, + "copyToClipboard": { + "message": "Copiar al portapapeles" + }, "create": { "message": "Crear" }, @@ -138,20 +153,29 @@ "message": "Crypto", "description": "Tipo de Cambio (criptomonedas)" }, - "customGas": { - "message": "Personalizar Gas" + "currentConversion": { + "message": "Conversión Actual" }, - "customize": { - "message": "Personalizar" + "currentNetwork": { + "message": "Red actual" }, "currentRPC": { "message": "RPC actual" }, + "customGas": { + "message": "Personalizar Gas" + }, "customRPC": { "message": "RPC Personalizado" }, - "newRPC": { - "message": "Nueva URL del RPC" + "customize": { + "message": "Personalizar" + }, + "decimalsMustZerotoTen": { + "message": "Los decimales deben ser al menos 0 y no más de 36" + }, + "decimalsPrecision": { + "message": "Decimales de precisión" }, "defaultNetwork": { "message": "La red por defecto para las transacciones de Ether es MainNet (red principal)" @@ -202,20 +226,29 @@ "done": { "message": "Completo" }, + "down": { + "message": "abajo" + }, + "downloadStatelogs": { + "message": "Descargar logs de estados" + }, "edit": { "message": "Editar" }, "editAccountName": { "message": "Editar el nombre de la cuenta" }, + "emailUs": { + "message": "Envíanos un correo!" + }, "encryptNewDen": { "message": "Encriptar tu nuevo DEN" }, "enterPassword": { "message": "Ingresa contraseña" }, - "passwordCorrect": { - "message": "Asegurate que tu contraseña es correcta" + "enterPasswordConfirm": { + "message": "Ingresa tu contraseña para confirmar" }, "etherscanView": { "message": "Ver la cuenta en Etherscan" @@ -240,12 +273,18 @@ "message": "No funciona importar el archivo? Haz Click Aquí!", "description": "Ayuda al usuario a importar su cuenta desde un archivo JSON" }, + "followTwitter": { + "message": "Síguenos en Twitter" + }, "from": { "message": "De:" }, "fromShapeShift": { "message": "De ShapeShift" }, + "fromToSame": { + "message": "La dirección de origen y destino no pueden ser la misma" + }, "gas": { "message": "Gas", "description": "Indicación pequeña del costo de gas" @@ -274,6 +313,9 @@ "gasPriceRequired": { "message": "Precio del gas requerido" }, + "generatingSeed": { + "message": "Generando semilla..." + }, "getEther": { "message": "Conseguir Ether" }, @@ -289,6 +331,9 @@ "message": "Aqui", "description": "como en -haz click aquí- para más información" }, + "hereList": { + "message": "Aquí está una lista!!!" + }, "hide": { "message": "Ocultar" }, @@ -298,6 +343,9 @@ "hideTokenPrompt": { "message": "Ocultar Token?" }, + "holdEther": { + "message": "Te permite mantener tus ether y tokens, así como puente para aplicaciones descentralizadas" + }, "howToDeposit": { "message": "Cómo te gustaria depositar Ether?" }, @@ -318,33 +366,48 @@ "message": "Importado", "description": "estado que muestra que una cuenta ha sido completamente cargada en el llavero" }, + "importedAccountMsg": { + "message": "Cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas. " + }, + "info": { + "message": "Información" + }, "infoHelp": { "message": "Informacion y Ayuda" }, + "insufficientFounds": { + "message": "Fondos insuficientes" + }, + "insufficientTokens": { + "message": "Tokens insuficientes" + }, "invalidAddress": { "message": "Dirección Inválida" }, + "invalidAddressRecipient": { + "message": "Dirección del recipiente invalida" + }, "invalidGasParams": { "message": "Parametros de Gas Inválidos" }, "invalidInput": { "message": "Entrada inválida" }, + "invalidRPC": { + "message": "Invalida URL del RPC" + }, "invalidRequest": { "message": "Peticion inválida" }, - "invalidAddressRecipient": { - "message": "Dirección del recipiente invalida" - }, - "fromToSame": { - "message": "La dirección de origen y destino no pueden ser la misma" + "jsonFail": { + "message": "Algo malo pasó. Asegurate que tu JSON tiene el formato correcto" }, "jsonFile": { "message": "Archivo JSON", "description": "formato para importar una cuenta" }, - "jsonFail": { - "message": "Algo malo pasó. Asegurate que tu JSON tiene el formato correcto" + "knowledgeDataBase": { + "message": "Visita nuestra base de conocimiento" }, "kovan": { "message": "Red de pruebas Kovan" @@ -353,6 +416,9 @@ "message": "Debe ser menor o igual a $1", "description": "helper para ingresar hex como decimal" }, + "likeToAddTokens": { + "message": "¿Te gustaría agregar estos tokens?" + }, "limit": { "message": "Límite" }, @@ -374,15 +440,30 @@ "loose": { "message": "Loose" }, + "loweCaseWords": { + "message": "las frases semilla sólo pueden tener minúsculas" + }, "mainnet": { "message": "Red principal de Ethereum (MainNet)" }, "message": { "message": "Mensaje" }, + "metamaskDescription": { + "message": "Metamask es una identidad segura en Ethereum" + }, "min": { "message": "Minimo" }, + "msgCompose1": { + "message": "Solo manda " + }, + "msgCompose2": { + "message": " a una dirección de Ethereum" + }, + "mustSelectOne": { + "message": "Debe seleccionar al menos un (1) token" + }, "myAccounts": { "message": "Mis cuentas" }, @@ -397,8 +478,8 @@ "message": "Debes ingresar una contraseña para el archivo seleccionado", "description": "Contraseña y archivo necesarios para importar una cuenta" }, - "validFileImport": { - "message": "Debes selecionar un archivo valido para importar" + "negativeETH": { + "message": "No se pueden mandar cantidades negativas de ETH" }, "networks": { "message": "Redes" @@ -416,6 +497,9 @@ "newPassword": { "message": "Nueva contraseña (mínimo [8] caracteres)" }, + "newRPC": { + "message": "Nueva URL del RPC" + }, "newRecipient": { "message": "Nuevo destinatario" }, @@ -431,9 +515,6 @@ "noTransactionHistory": { "message": "Sin historial de transacciones" }, - "transactions": { - "message": "Transacciones" - }, "noTransactions": { "message": "Sin transacciones" }, @@ -443,9 +524,6 @@ "oldUI": { "message": "Antigua UI" }, - "useOldUI": { - "message": "Usar UI antigua" - }, "oldUIMessage": { "message": "Regresaste a la antigua UI. Puedes regresar a la nueva UI mediante la opcion en la barra desplegable del menu de arriba a la derecha." }, @@ -453,6 +531,12 @@ "message": "o", "description": "opción entre crear o importar una cuenta" }, + "password": { + "message": "Contraseña" + }, + "passwordCorrect": { + "message": "Asegurate que tu contraseña es correcta" + }, "passwordMismatch": { "message": "Contraseña no concide", "description": "en el proceso de creación de contraseña, los dos campos de contraseña no coincidieron" @@ -468,12 +552,15 @@ "pasteSeed": { "message": "Pegue su frase semilla aquí!" }, - "generatingSeed": { - "message": "Generando semilla..." + "personalAddressDetected": { + "message": "Dirección personal detectada. Ingresa la dirección del contrato del token" }, "pleaseReviewTransaction": { "message": "Por favor revisa tu transaccion" }, + "privacyMsg": { + "message": "Política de privacidad" + }, "privateKey": { "message": "Llave privada", "description": "select this type of file to use to import an account" @@ -487,12 +574,15 @@ "qrCode": { "message": "Mostrar codigo QR" }, - "readdToken": { - "message": "Puede volver a agregar este token en el futuro yendo a 'Agregar token' en el menú de opciones de su cuenta.." - }, "readMore": { "message": "Leer más aquí" }, + "readMore2": { + "message": "Leer más." + }, + "readdToken": { + "message": "Puede volver a agregar este token en el futuro yendo a 'Agregar token' en el menú de opciones de su cuenta.." + }, "receive": { "message": "Recibir" }, @@ -508,9 +598,21 @@ "required": { "message": "Requerido" }, + "resetAccount": { + "message": "Reiniciar cuenta" + }, + "restoreFromSeed": { + "message": "Restaurar desde semilla" + }, "retryWithMoreGas": { "message": "Vuelva a intentar con un precio de Gas más alto aquí" }, + "revealSeedWords": { + "message": "Revelar palabras de semilla" + }, + "revealSeedWordsWarning": { + "message": "No recuperes tu semilla en un lugar publico! Esas palabras pueden ser usadas para robarte todas tus cuentas" + }, "revert": { "message": "Revertir" }, @@ -531,27 +633,48 @@ "message": "Guardar como archivo", "description": "Proceso de exportación de cuenta" }, + "saveLogs": { + "message": "Logs de estado contienen tus direcciones publicas y transacciones enviadas" + }, + "saveSeedAsFile": { + "message": "Guardar la semilla como archivo" + }, + "search": { + "message": "Buscar" + }, + "secretPhrase": { + "message": "Ingresa tu frase de 12 palabras para restaurar tu bóveda" + }, + "seedPhraseReq": { + "message": "las frases semilla tienen doce (12) palabras de largo" + }, + "select": { + "message": "Seleccionar" + }, + "selectCurrency": { + "message": "Seleccionar moneda" + }, "selectService": { "message": "Seleccionar servicio" }, + "selectType": { + "message": "Seleccionar tipo" + }, "send": { "message": "Enviar" }, - "sendTokens": { - "message": "Enviar Tokens" - }, "sendETH": { "message": "Enviar ETH" }, + "sendTokens": { + "message": "Enviar Tokens" + }, "sendTokensAnywhere": { "message": "Enviar Tokens a cualquiera con una cuenta de Ethereum" }, "settings": { "message": "Configuración" }, - "info": { - "message": "Información" - }, "shapeshiftBuy": { "message": "Comprar con ShapeShift" }, @@ -561,6 +684,12 @@ "showQRCode": { "message": "Mostrar codigo QR" }, + "sigRequest": { + "message": "Solicitud de firma" + }, + "sigRequested": { + "message": "Firma solicitada" + }, "sign": { "message": "Firmar" }, @@ -570,11 +699,11 @@ "signNotice": { "message": "Firmar este mensaje puede tener\n efectos secundarios peligrosos. Firma sólo\nmensajes desde sitios a los cuales tú estés dispuesto a confiar completamente tu cuenta.\nEste método peligroso va a ser \nremovido en una version futura." }, - "sigRequest": { - "message": "Solicitud de firma" + "spaceBetween": { + "message": "Sólo puede haber un espacio entre las palabras" }, - "sigRequested": { - "message": "Firma solicitada" + "stateLogs": { + "message": "Logs de estado" }, "status": { "message": "Estado" @@ -582,9 +711,18 @@ "submit": { "message": "Enviar" }, + "supportCenter": { + "message": "Visita nuestro centro de atención" + }, + "symbolBetweenZeroTen": { + "message": "Símbolo debe ser entre 0 y 10 caracteres" + }, "takesTooLong": { "message": "¿Está tomando demasiado?" }, + "terms": { + "message": "Terminos de Uso" + }, "testFaucet": { "message": "Testear Faucet" }, @@ -595,9 +733,24 @@ "message": "$1 a ETH via ShapeShift", "description": "el sistema llenará el tipo de depósito al principio del mensaje" }, + "tokenAddress": { + "message": "Dirección del token" + }, + "tokenAlreadyAdded": { + "message": "El token esta actualmente agregado" + }, "tokenBalance": { "message": "Tu balance de Tokens es:" }, + "tokenSelection": { + "message": "Busca tokens o selecciónalo de nuestra lista de tokens populares" + }, + "tokenSymbol": { + "message": "Símbolo del token" + }, + "tokenWarning1": { + "message": "Mantenga un registro de los tokens que ha comprado con su cuenta de MetaMask. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." + }, "total": { "message": "Total" }, @@ -607,6 +760,9 @@ "transactionNumber": { "message": "Número de transacción" }, + "transactions": { + "message": "Transacciones" + }, "transfers": { "message": "Transferencias" }, @@ -614,6 +770,9 @@ "message": "Tuvimos problemas para cargar sus balances de tokens. Puedes verlos ", "description": "Followed by a link (here) to view token balances" }, + "twelveWords": { + "message": "Estas 12 palabras son la única forma de restablecer sus cuentas de MetaMask. \nGuardalas en un lugar seguro y secreto." + }, "typePassword": { "message": "Escribe tu contraseña" }, @@ -635,206 +794,47 @@ "unknownNetworkId": { "message": "ID (identidad) de Red desconocida" }, - "currentNetwork": { - "message": "Red actual" + "up": { + "message": "arriba" + }, + "urlErrorMsg": { + "message": "URI necesita el prefijo HTTP/HTTPS apropiado" }, "usaOnly": { "message": "Sólo USA (Estados Unidos)", "description": "El uso de este exchange (casa de cambio) estaá limitado a las personas dentro de los Estados Unidos de America" }, + "useOldUI": { + "message": "Usar UI antigua" + }, "usedByClients": { "message": "Utilizado por una variedad de clientes diferentes" }, - "viewAccount": { - "message": "Mirar cuenta" - }, - "warning": { - "message": "Advertencia" - }, - "whatsThis": { - "message": "Qué es esto?" - }, - "yourSigRequested": { - "message": "Tu firma ya fue solicidada" - }, - "youSign": { - "message": "Usted está firmando" - }, - "importedAccountMsg": { - "message": "Cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas. " - }, - "selectType": { - "message": "Seleccionar tipo" - }, - "selectCurrency": { - "message": "Seleccionar moneda" - }, - "password": { - "message": "Contraseña" - }, - "select": { - "message": "Seleccionar" - }, - "readMore2": { - "message": "Leer más." - }, - "secretPhrase": { - "message": "Ingresa tu frase de 12 palabras para restaurar tu bóveda" - }, - "spaceBetween": { - "message": "Sólo puede haber un espacio entre las palabras" - }, - "loweCaseWords": { - "message": "las frases semilla sólo pueden tener minúsculas" - }, - "seedPhraseReq": { - "message": "las frases semilla tienen doce (12) palabras de largo" - }, - "addTokens": { - "message": "Agregar tokens" - }, - "addCustomTokens": { - "message": "Agregar token personalizados" - }, - "up": { - "message": "arriba" - }, - "down": { - "message": "abajo" - }, - "tokenWarning1": { - "message": "Mantenga un registro de los tokens que ha comprado con su cuenta de MetaMask. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." - }, - "tokenSelection": { - "message": "Busca tokens o selecciónalo de nuestra lista de tokens populares" - }, - "search": { - "message": "Buscar" - }, - "privacyMsg": { - "message": "Política de privacidad" - }, - "terms": { - "message": "Terminos de Uso" - }, - "attributions": { - "message": "Atribuciones" + "validFileImport": { + "message": "Debes selecionar un archivo valido para importar" }, - "supportCenter": { - "message": "Visita nuestro centro de atención" + "vaultCreated": { + "message": "Bóveda creada" }, - "knowledgeDataBase": { - "message": "Visita nuestra base de conocimiento" + "viewAccount": { + "message": "Mirar cuenta" }, "visitWebSite": { "message": "Visita nuestro sitio web" }, - "followTwitter": { - "message": "Síguenos en Twitter" - }, - "emailUs": { - "message": "Envíanos un correo!" - }, - "hereList": { - "message": "Aquí está una lista!!!" - }, - "insufficientFounds": { - "message": "Fondos insuficientes" - }, - "insufficientTokens": { - "message": "Tokens insuficientes" - }, - "negativeETH": { - "message": "No se pueden mandar cantidades negativas de ETH" - }, - "urlErrorMsg": { - "message": "URI necesita el prefijo HTTP/HTTPS apropiado" - }, - "invalidRPC": { - "message": "Invalida URL del RPC" - }, - "saveLogs": { - "message": "Logs de estado contienen tus direcciones publicas y transacciones enviadas" - }, - "stateLogs": { - "message": "Logs de estado" - }, - "downloadStatelogs": { - "message": "Descargar logs de estados" - }, - "revealSeedWords": { - "message": "Revelar palabras de semilla" - }, - "revealSeedWordsWarning": { - "message": "No recuperes tu semilla en un lugar publico! Esas palabras pueden ser usadas para robarte todas tus cuentas" - }, - "resetAccount": { - "message": "Reiniciar cuenta" - }, - "builtInCalifornia": { - "message": "Metamask fue diseñado y construido en California " - }, - "classicInterface": { - "message": "Usar interfaz clasica " + "warning": { + "message": "Advertencia" }, "welcomeBeta": { "message": "Bienvenido a Metamask Beta" }, - "metamaskDescription": { - "message": "Metamask es una identidad segura en Ethereum" - }, - "holdEther": { - "message": "Te permite mantener tus ether y tokens, así como puente para aplicaciones descentralizadas" - }, - "decimalsMustZerotoTen": { - "message": "Los decimales deben ser al menos 0 y no más de 36" - }, - "symbolBetweenZeroTen": { - "message": "Símbolo debe ser entre 0 y 10 caracteres" - }, - "personalAddressDetected": { - "message": "Dirección personal detectada. Ingresa la dirección del contrato del token" - }, - "tokenAlreadyAdded": { - "message": "El token esta actualmente agregado" - }, - "mustSelectOne": { - "message": "Debe seleccionar al menos un (1) token" - }, - "tokenAddress": { - "message": "Dirección del token" - }, - "tokenSymbol": { - "message": "Símbolo del token" - }, - "decimalsPrecision": { - "message": "Decimales de precisión" - }, - "likeToAddTokens": { - "message": "¿Te gustaría agregar estos tokens?" - }, - "msgCompose1": { - "message": "Solo manda " - }, - "msgCompose2": { - "message": " a una dirección de Ethereum" - }, - "blockiesIdenticon": { - "message": "Usar Blockies Identicon (Iconos)" - }, - "vaultCreated": { - "message": "Bóveda creada" - }, - "twelveWords": { - "message": "Estas 12 palabras son la única forma de restablecer sus cuentas de MetaMask. \nGuardalas en un lugar seguro y secreto." - }, - "copiedSafe": { - "message": "Ya lo guardé en un lugar seguro" + "whatsThis": { + "message": "Qué es esto?" }, - "saveSeedAsFile": { - "message": "Guardar la semilla como archivo" + "youSign": { + "message": "Usted está firmando" }, - "restoreFromSeed": { - "message": "Restaurar desde semilla" + "yourSigRequested": { + "message": "Tu firma ya fue solicidada" } -} \ No newline at end of file +} -- cgit From 1cc1737d4272b9a7b725ecd5ce51c0e878b419fb Mon Sep 17 00:00:00 2001 From: Herman Junge Date: Tue, 20 Mar 2018 19:32:13 -0300 Subject: all 264 strings declared in your locale were found in the english one --- app/_locales/es/messages.json | 34 ++++++++-------------------------- 1 file changed, 8 insertions(+), 26 deletions(-) (limited to 'app') diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index 2737e4eca..980365347 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -11,7 +11,7 @@ "accountName": { "message": "Nombre de la cuenta" }, - "addCustomTokens": { + "addCustomToken": { "message": "Agregar token personalizados" }, "addToken": { @@ -159,7 +159,7 @@ "currentNetwork": { "message": "Red actual" }, - "currentRPC": { + "currentRpc": { "message": "RPC actual" }, "customGas": { @@ -171,12 +171,12 @@ "customize": { "message": "Personalizar" }, + "decimal": { + "message": "Decimales de precisión" + }, "decimalsMustZerotoTen": { "message": "Los decimales deben ser al menos 0 y no más de 36" }, - "decimalsPrecision": { - "message": "Decimales de precisión" - }, "defaultNetwork": { "message": "La red por defecto para las transacciones de Ether es MainNet (red principal)" }, @@ -226,9 +226,6 @@ "done": { "message": "Completo" }, - "down": { - "message": "abajo" - }, "downloadStatelogs": { "message": "Descargar logs de estados" }, @@ -366,7 +363,7 @@ "message": "Importado", "description": "estado que muestra que una cuenta ha sido completamente cargada en el llavero" }, - "importedAccountMsg": { + "importAccountMsg": { "message": "Cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas. " }, "info": { @@ -375,7 +372,7 @@ "infoHelp": { "message": "Informacion y Ayuda" }, - "insufficientFounds": { + "insufficientFunds": { "message": "Fondos insuficientes" }, "insufficientTokens": { @@ -455,12 +452,6 @@ "min": { "message": "Minimo" }, - "msgCompose1": { - "message": "Solo manda " - }, - "msgCompose2": { - "message": " a una dirección de Ethereum" - }, "mustSelectOne": { "message": "Debe seleccionar al menos un (1) token" }, @@ -531,9 +522,6 @@ "message": "o", "description": "opción entre crear o importar una cuenta" }, - "password": { - "message": "Contraseña" - }, "passwordCorrect": { "message": "Asegurate que tu contraseña es correcta" }, @@ -633,9 +621,6 @@ "message": "Guardar como archivo", "description": "Proceso de exportación de cuenta" }, - "saveLogs": { - "message": "Logs de estado contienen tus direcciones publicas y transacciones enviadas" - }, "saveSeedAsFile": { "message": "Guardar la semilla como archivo" }, @@ -794,10 +779,7 @@ "unknownNetworkId": { "message": "ID (identidad) de Red desconocida" }, - "up": { - "message": "arriba" - }, - "urlErrorMsg": { + "uriErrorMsg": { "message": "URI necesita el prefijo HTTP/HTTPS apropiado" }, "usaOnly": { -- cgit From 7e614ec6dbb33837fad505c9629ba90b11b10f70 Mon Sep 17 00:00:00 2001 From: Herman Junge Date: Tue, 20 Mar 2018 19:49:10 -0300 Subject: all 286 english strings were found in your locale --- app/_locales/es/messages.json | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'app') diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index 980365347..390a93f2c 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -37,6 +37,9 @@ "message": "MetaMask", "description": "El nombre de la aplicación" }, + "approved": { + "message": "Aprobado" + }, "attemptingConnect": { "message": "Intentando conectar a la Blockchain" }, @@ -98,12 +101,30 @@ "confirmContract": { "message": "Confirmar contrato" }, + "confirmed": { + "message": "Confirmado" + }, "confirmPassword": { "message": "Confirmar contraseña" }, "confirmTransaction": { "message": "Confirmar transacción " }, + "connectingToMainnet": { + "message": "Conectando a la Red Principal de Ethereum (Main Net)" + }, + "connectingToRopsten": { + "message": "Conectando a la Red de Test Ropsten" + }, + "connectingToKovan": { + "message": "Conectando a la Red de Test Kovan" + }, + "connectingToRinkeby": { + "message": "Conectando a la Red de Test Rinkeby" + }, + "connectingToUnknown": { + "message": "Conectando a una red desconocida" + }, "continue": { "message": "Continuar" }, @@ -229,6 +250,9 @@ "downloadStatelogs": { "message": "Descargar logs de estados" }, + "dropped": { + "message": "Caído" + }, "edit": { "message": "Editar" }, @@ -419,6 +443,9 @@ "limit": { "message": "Límite" }, + "links": { + "message": "Enlaces" + }, "loading": { "message": "Cargando..." }, @@ -443,6 +470,9 @@ "mainnet": { "message": "Red principal de Ethereum (MainNet)" }, + "max": { + "message": "Max" + }, "message": { "message": "Mensaje" }, @@ -488,6 +518,9 @@ "newPassword": { "message": "Nueva contraseña (mínimo [8] caracteres)" }, + "newPassword8Chars": { + "message": "Nueva contraseña (mínimo [8] caracteres)" + }, "newRPC": { "message": "Nueva URL del RPC" }, @@ -512,12 +545,18 @@ "notStarted": { "message": "Sin iniciar" }, + "ok": { + "message": "Ok" + }, "oldUI": { "message": "Antigua UI" }, "oldUIMessage": { "message": "Regresaste a la antigua UI. Puedes regresar a la nueva UI mediante la opcion en la barra desplegable del menu de arriba a la derecha." }, + "onlySendToEtherAddress": { + "message": "Sólo envía a una dirección de Ethereum" + }, "or": { "message": "o", "description": "opción entre crear o importar una cuenta" @@ -529,6 +568,12 @@ "message": "Contraseña no concide", "description": "en el proceso de creación de contraseña, los dos campos de contraseña no coincidieron" }, + "passwordNotLongEnough": { + "message": "La contraseña no es lo suficientemente larga" + }, + "passwordsDontMatch": { + "message": "Contraseñas no coínciden" + }, "passwordShort": { "message": "Contraseña no es lo suficientemente larga", "description": "in password creation process, the password is not long enough to be secure" @@ -592,6 +637,9 @@ "restoreFromSeed": { "message": "Restaurar desde semilla" }, + "restoreVault": { + "message": "Restaurar Bóveda" + }, "retryWithMoreGas": { "message": "Vuelva a intentar con un precio de Gas más alto aquí" }, @@ -678,6 +726,9 @@ "sign": { "message": "Firmar" }, + "signed": { + "message": "Firmado" + }, "signMessage": { "message": "Firmar Mensaje" }, @@ -690,12 +741,21 @@ "stateLogs": { "message": "Logs de estado" }, + "stateLogsDescription": { + "message": "Los Logs de estado contienen tus direcciones de cuentas públicas y transacciones envíadas" + }, + "stateLogError": { + "message": "Error en la recogida de logs de estado" + }, "status": { "message": "Estado" }, "submit": { "message": "Enviar" }, + "submitted": { + "message": "Enviado" + }, "supportCenter": { "message": "Visita nuestro centro de atención" }, @@ -770,6 +830,9 @@ "unavailable": { "message": "No disponible" }, + "unapproved": { + "message": "No Aprobado" + }, "unknown": { "message": "Desconocido (a)" }, @@ -804,6 +867,9 @@ "visitWebSite": { "message": "Visita nuestro sitio web" }, + "walletSeed": { + "message": "Semilla de la billetera" + }, "warning": { "message": "Advertencia" }, -- cgit From 89acc955fade3e42d33948119cb877a46dc001a2 Mon Sep 17 00:00:00 2001 From: Herman Junge Date: Tue, 20 Mar 2018 20:08:09 -0300 Subject: last pass (for now) --- app/_locales/es/messages.json | 106 +++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 53 deletions(-) (limited to 'app') diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index 390a93f2c..aa2701c2c 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -15,7 +15,7 @@ "message": "Agregar token personalizados" }, "addToken": { - "message": "Agregar Token" + "message": "Agregar token" }, "addTokens": { "message": "Agregar tokens" @@ -30,7 +30,7 @@ "message": "Cantidad + Gas" }, "appDescription": { - "message": "Extensión del explorador usar Ethereum", + "message": "Extensión del navegador para Ethereum", "description": "La descripción de la aplicación" }, "appName": { @@ -84,13 +84,13 @@ "message": "Comprar en Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase es la manera más popular en el mundo para comprar y vender bitcoin, ethereum y litecoin" + "message": "Coinbase es la forma global más popular para comprar y vender bitcoin, ethereum y litecoin" }, "cancel": { "message": "Cancelar" }, "classicInterface": { - "message": "Usar interfaz clasica " + "message": "Usar interfaz clásica " }, "clickCopy": { "message": "Click para copiar" @@ -108,19 +108,19 @@ "message": "Confirmar contraseña" }, "confirmTransaction": { - "message": "Confirmar transacción " + "message": "Confirmar transacción" }, "connectingToMainnet": { - "message": "Conectando a la Red Principal de Ethereum (Main Net)" + "message": "Conectando a la red principal de Ethereum (Main Net)" }, "connectingToRopsten": { - "message": "Conectando a la Red de Test Ropsten" + "message": "Conectando a la red de test Ropsten" }, "connectingToKovan": { - "message": "Conectando a la Red de Test Kovan" + "message": "Conectando a la red de test Kovan" }, "connectingToRinkeby": { - "message": "Conectando a la Red de Test Rinkeby" + "message": "Conectando a la red de test Rinkeby" }, "connectingToUnknown": { "message": "Conectando a una red desconocida" @@ -132,7 +132,7 @@ "message": "Continuar a Coinbase" }, "contractDeployment": { - "message": "Deployar contrato" + "message": "Desplegar (Deploy) contrato" }, "conversionProgress": { "message": "Conversión en progreso" @@ -215,7 +215,7 @@ "description": "Informa al usuario que moneda ha elegido para depositar en shapeshift" }, "depositEth": { - "message": "Depositar Eth" + "message": "Depositar Ether" }, "depositEther": { "message": "Depositar Ether" @@ -230,25 +230,25 @@ "message": "Depositar con ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Si tu tienes otras criptomonedas, puedes intercambiar y depositar Ether directamente en tu billetera de MetaMask. No necesitas tener una cuenta." + "message": "Si tu tienes otras criptomonedas, puedes intercambiar y depositar Ether directamente en tu billetera de MetaMask. No necesitas tener una cuenta" }, "details": { "message": "Detalles" }, "directDeposit": { - "message": "Deposito directo" + "message": "Depósito directo" }, "directDepositEther": { "message": "Depositar Ether directamente" }, "directDepositEtherExplainer": { - "message": "Si tu tienes algo de Ether, la forma rapida para tener Ether en tu nueva billetera es depositando directamente" + "message": "Si tu tienes algo de Ether, la forma rápida para tener Ether en tu nueva billetera es depositando directamente" }, "done": { "message": "Completo" }, "downloadStatelogs": { - "message": "Descargar logs de estados" + "message": "Descargar logs de estado" }, "dropped": { "message": "Caído" @@ -288,7 +288,7 @@ }, "fiat": { "message": "FIAT", - "description": "Exchange type" + "description": "Tipo de cambio" }, "fileImportFail": { "message": "No funciona importar el archivo? Haz Click Aquí!", @@ -349,7 +349,7 @@ "description": "helper para ingresar hex como entrada decimal" }, "here": { - "message": "Aqui", + "message": "Aquí", "description": "como en -haz click aquí- para más información" }, "hereList": { @@ -375,7 +375,7 @@ "description": "Botón para importar una cuenta desde un archivo seleccionado" }, "importAccount": { - "message": "Importar Cuenta" + "message": "Importar cuenta" }, "importAnAccount": { "message": "Importar una cuenta" @@ -385,10 +385,10 @@ }, "imported": { "message": "Importado", - "description": "estado que muestra que una cuenta ha sido completamente cargada en el llavero" + "description": "Estado que muestra que una cuenta ha sido completamente cargada en el llavero" }, "importAccountMsg": { - "message": "Cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas. " + "message": "Cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas." }, "info": { "message": "Información" @@ -403,13 +403,13 @@ "message": "Tokens insuficientes" }, "invalidAddress": { - "message": "Dirección Inválida" + "message": "Dirección inválida" }, "invalidAddressRecipient": { - "message": "Dirección del recipiente invalida" + "message": "Dirección del destinatario invalida" }, "invalidGasParams": { - "message": "Parametros de Gas Inválidos" + "message": "Parametros de gas inválidos" }, "invalidInput": { "message": "Entrada inválida" @@ -418,14 +418,14 @@ "message": "Invalida URL del RPC" }, "invalidRequest": { - "message": "Peticion inválida" + "message": "Petición inválida" }, "jsonFail": { "message": "Algo malo pasó. Asegurate que tu JSON tiene el formato correcto" }, "jsonFile": { "message": "Archivo JSON", - "description": "formato para importar una cuenta" + "description": "Formato para importar una cuenta" }, "knowledgeDataBase": { "message": "Visita nuestra base de conocimiento" @@ -435,7 +435,7 @@ }, "lessThanMax": { "message": "Debe ser menor o igual a $1", - "description": "helper para ingresar hex como decimal" + "description": "Helper para ingresar hex como decimal" }, "likeToAddTokens": { "message": "¿Te gustaría agregar estos tokens?" @@ -450,7 +450,7 @@ "message": "Cargando..." }, "loadingTokens": { - "message": "Cargando Tokens..." + "message": "Cargando tokens..." }, "localhost": { "message": "Localhost 8545" @@ -459,16 +459,16 @@ "message": "Ingresar" }, "logout": { - "message": "Cerrar sesion" + "message": "Cerrar sesión" }, "loose": { - "message": "Loose" + "message": "Suelto" }, "loweCaseWords": { "message": "las frases semilla sólo pueden tener minúsculas" }, "mainnet": { - "message": "Red principal de Ethereum (MainNet)" + "message": "Red principal de Ethereum (Main Net)" }, "max": { "message": "Max" @@ -480,7 +480,7 @@ "message": "Metamask es una identidad segura en Ethereum" }, "min": { - "message": "Minimo" + "message": "Mínimo" }, "mustSelectOne": { "message": "Debe seleccionar al menos un (1) token" @@ -549,10 +549,10 @@ "message": "Ok" }, "oldUI": { - "message": "Antigua UI" + "message": "Antigua UI (Interfaz de Usuario)" }, "oldUIMessage": { - "message": "Regresaste a la antigua UI. Puedes regresar a la nueva UI mediante la opcion en la barra desplegable del menu de arriba a la derecha." + "message": "Regresaste a la antigua UI (Interfaz de Usuario). Puedes regresar a la nueva UI mediante la opcion en la barra desplegable del menu de arriba a la derecha." }, "onlySendToEtherAddress": { "message": "Sólo envía a una dirección de Ethereum" @@ -565,25 +565,25 @@ "message": "Asegurate que tu contraseña es correcta" }, "passwordMismatch": { - "message": "Contraseña no concide", - "description": "en el proceso de creación de contraseña, los dos campos de contraseña no coincidieron" + "message": "Contraseña no coincide", + "description": "En el proceso de creación de contraseña, los dos campos de contraseña no coincidieron" }, "passwordNotLongEnough": { "message": "La contraseña no es lo suficientemente larga" }, "passwordsDontMatch": { - "message": "Contraseñas no coínciden" + "message": "Contraseñas no coinciden" }, "passwordShort": { "message": "Contraseña no es lo suficientemente larga", - "description": "in password creation process, the password is not long enough to be secure" + "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" }, "pasteSeed": { - "message": "Pegue su frase semilla aquí!" + "message": "Pega tu frase semilla aquí!" }, "personalAddressDetected": { "message": "Dirección personal detectada. Ingresa la dirección del contrato del token" @@ -596,10 +596,10 @@ }, "privateKey": { "message": "Llave privada", - "description": "select this type of file to use to import an account" + "description": "Selecciona este tupo de archivo para importar una cuenta" }, "privateKeyWarning": { - "message": "Advertencia: Nunca revele esta clave. Cualquier persona con sus claves privadas puede robar cualquier activo retenido en su cuenta." + "message": "Advertencia: NUNCA reveles esta clave. Cualquier persona con tus claves privadas puede robar los activos retenidos en tu cuenta" }, "privateNetwork": { "message": "Red Privada" @@ -611,10 +611,10 @@ "message": "Leer más aquí" }, "readMore2": { - "message": "Leer más." + "message": "Leer más" }, "readdToken": { - "message": "Puede volver a agregar este token en el futuro yendo a 'Agregar token' en el menú de opciones de su cuenta.." + "message": "Puede volver a agregar este token en el futuro yendo a 'Agregar token' en el menú de opciones de tu cuenta" }, "receive": { "message": "Recibir" @@ -623,7 +623,7 @@ "message": "Dirección del receptor" }, "refundAddress": { - "message": "Su dirección de reembolso" + "message": "Tu dirección de reembolso" }, "rejected": { "message": "Rechazado" @@ -676,7 +676,7 @@ "message": "Buscar" }, "secretPhrase": { - "message": "Ingresa tu frase de 12 palabras para restaurar tu bóveda" + "message": "Ingresa tu frase de doce (12) palabras para restaurar tu bóveda" }, "seedPhraseReq": { "message": "las frases semilla tienen doce (12) palabras de largo" @@ -697,7 +697,7 @@ "message": "Enviar" }, "sendETH": { - "message": "Enviar ETH" + "message": "Enviar Ether" }, "sendTokens": { "message": "Enviar Tokens" @@ -769,7 +769,7 @@ "message": "Terminos de Uso" }, "testFaucet": { - "message": "Testear Faucet" + "message": "Probar Faucet" }, "to": { "message": "Para:" @@ -785,7 +785,7 @@ "message": "El token esta actualmente agregado" }, "tokenBalance": { - "message": "Tu balance de Tokens es:" + "message": "Tu balance de tokens es:" }, "tokenSelection": { "message": "Busca tokens o selecciónalo de nuestra lista de tokens populares" @@ -794,7 +794,7 @@ "message": "Símbolo del token" }, "tokenWarning1": { - "message": "Mantenga un registro de los tokens que ha comprado con su cuenta de MetaMask. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." + "message": "Manten un registro de los tokens que has comprado con tu cuenta de MetaMask. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." }, "total": { "message": "Total" @@ -812,11 +812,11 @@ "message": "Transferencias" }, "troubleTokenBalances": { - "message": "Tuvimos problemas para cargar sus balances de tokens. Puedes verlos ", - "description": "Followed by a link (here) to view token balances" + "message": "Tuvimos problemas para cargar tus saldos de tokens. Puedes verlos ", + "description": "Seguidos por un enlace (aquí) para ver los saldos de token" }, "twelveWords": { - "message": "Estas 12 palabras son la única forma de restablecer sus cuentas de MetaMask. \nGuardalas en un lugar seguro y secreto." + "message": "Estas 12 palabras son la única forma de restablecer tus cuentas de MetaMask. \nGuardalas en un lugar seguro y secreto." }, "typePassword": { "message": "Escribe tu contraseña" @@ -847,7 +847,7 @@ }, "usaOnly": { "message": "Sólo USA (Estados Unidos)", - "description": "El uso de este exchange (casa de cambio) estaá limitado a las personas dentro de los Estados Unidos de America" + "description": "El uso de este exchange (casa de cambio) está limitado a las personas dentro de los Estados Unidos de America" }, "useOldUI": { "message": "Usar UI antigua" @@ -883,6 +883,6 @@ "message": "Usted está firmando" }, "yourSigRequested": { - "message": "Tu firma ya fue solicidada" + "message": "Tu firma ya fue solicitada" } } -- cgit From ac34c8f4800562f9ad1d6b6332a05f8d943b483b Mon Sep 17 00:00:00 2001 From: Herman Junge Date: Tue, 20 Mar 2018 20:43:20 -0300 Subject: Nuke the es_419 locale --- app/_locales/es_419/messages.json | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 app/_locales/es_419/messages.json (limited to 'app') diff --git a/app/_locales/es_419/messages.json b/app/_locales/es_419/messages.json deleted file mode 100644 index 78fc64dbf..000000000 --- a/app/_locales/es_419/messages.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "appName": { - "message": "MetaMask", - "description": "The name of the application" - }, - "appDescription": { - "message": "Administración de identidad en Ethereum", - "description": "The description of the application" - } -} -- cgit From 759b65ddf95bf0063c843c1dc44f50f478ff6604 Mon Sep 17 00:00:00 2001 From: Raúl Kripalani Date: Wed, 21 Mar 2018 10:51:44 +0000 Subject: Minor adjustments to Spanish translation --- app/_locales/es/messages.json | 106 +++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 53 deletions(-) (limited to 'app') diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index aa2701c2c..fa28b09da 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -75,7 +75,7 @@ "message": "Pedir prestado con Dharma (Beta)" }, "builtInCalifornia": { - "message": "Metamask fue diseñado y construido en California " + "message": "Metamask fue diseñado y construido en California" }, "buy": { "message": "Comprar" @@ -84,13 +84,13 @@ "message": "Comprar en Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase es la forma global más popular para comprar y vender bitcoin, ethereum y litecoin" + "message": "Coinbase es la plataforma global más popular para comprar y vender Bitcoin, Ethereum y Litecoin" }, "cancel": { "message": "Cancelar" }, "classicInterface": { - "message": "Usar interfaz clásica " + "message": "Usar interfaz clásica" }, "clickCopy": { "message": "Click para copiar" @@ -144,7 +144,7 @@ "message": "Copiado al portapapeles" }, "copiedExclamation": { - "message": "Copiado!" + "message": "¡Copiado!" }, "copiedSafe": { "message": "Ya lo guardé en un lugar seguro" @@ -156,7 +156,7 @@ "message": " Copiar " }, "copyPrivateKey": { - "message": "Esta es tu llave privada (Click para copiar)" + "message": "Ésta es tu llave privada (haz click para copiar)" }, "copyToClipboard": { "message": "Copiar al portapapeles" @@ -165,17 +165,17 @@ "message": "Crear" }, "createAccount": { - "message": "Crear Cuenta" + "message": "Crear cuenta" }, "createDen": { "message": "Crear" }, "crypto": { "message": "Crypto", - "description": "Tipo de Cambio (criptomonedas)" + "description": "Tipo de cambio (criptomonedas)" }, "currentConversion": { - "message": "Conversión Actual" + "message": "Conversión actual" }, "currentNetwork": { "message": "Red actual" @@ -184,10 +184,10 @@ "message": "RPC actual" }, "customGas": { - "message": "Personalizar Gas" + "message": "Personalizar gas" }, "customRPC": { - "message": "RPC Personalizado" + "message": "RPC personalizado" }, "customize": { "message": "Personalizar" @@ -202,7 +202,7 @@ "message": "La red por defecto para las transacciones de Ether es MainNet (red principal)" }, "denExplainer": { - "message": "Tu DEN es tu contraseña encriptada guardada dentro de MetaMask" + "message": "El DEN es tu contraseña encriptada almacenada dentro de MetaMask" }, "deposit": { "message": "Depositar" @@ -221,7 +221,7 @@ "message": "Depositar Ether" }, "depositFiat": { - "message": "Depositar con Fiat (divisa nacional)" + "message": "Depositar con fiat (divisa nacional)" }, "depositFromAccount": { "message": "Depositar con otra cuenta" @@ -230,7 +230,7 @@ "message": "Depositar con ShapeShift" }, "depositShapeShiftExplainer": { - "message": "Si tu tienes otras criptomonedas, puedes intercambiar y depositar Ether directamente en tu billetera de MetaMask. No necesitas tener una cuenta" + "message": "Si posees otras criptomonedas, puedes intercambiar y depositar Ether directamente en tu billetera de MetaMask. No necesitas tener una cuenta." }, "details": { "message": "Detalles" @@ -242,7 +242,7 @@ "message": "Depositar Ether directamente" }, "directDepositEtherExplainer": { - "message": "Si tu tienes algo de Ether, la forma rápida para tener Ether en tu nueva billetera es depositando directamente" + "message": "Si posees Ether, la forma más rápida de transferirlo a tu nueva billetera es depositándolo directamente" }, "done": { "message": "Completo" @@ -260,7 +260,7 @@ "message": "Editar el nombre de la cuenta" }, "emailUs": { - "message": "Envíanos un correo!" + "message": "¡Envíanos un correo!" }, "encryptNewDen": { "message": "Encriptar tu nuevo DEN" @@ -291,7 +291,7 @@ "description": "Tipo de cambio" }, "fileImportFail": { - "message": "No funciona importar el archivo? Haz Click Aquí!", + "message": "¿La importación no funcionó? ¡Haz click aquí!", "description": "Ayuda al usuario a importar su cuenta desde un archivo JSON" }, "followTwitter": { @@ -320,7 +320,7 @@ "message": "Calculamos el límite de gas sugerido en función de las tasas de éxito de la red" }, "gasLimitRequired": { - "message": "Límite de Gas requerido" + "message": "Límite de gas requerido" }, "gasLimitTooLow": { "message": "El límite de gas debe ser de al menos 21000" @@ -353,22 +353,22 @@ "description": "como en -haz click aquí- para más información" }, "hereList": { - "message": "Aquí está una lista!!!" + "message": "¡¡¡Aquí está una lista!!!" }, "hide": { "message": "Ocultar" }, "hideToken": { - "message": "Ocultar Token" + "message": "Ocultar token" }, "hideTokenPrompt": { - "message": "Ocultar Token?" + "message": "¿Ocultar token?" }, "holdEther": { "message": "Te permite mantener tus ether y tokens, así como puente para aplicaciones descentralizadas" }, "howToDeposit": { - "message": "Cómo te gustaria depositar Ether?" + "message": "¿Cómo te gustaria depositar Ether?" }, "import": { "message": "Importar", @@ -388,13 +388,13 @@ "description": "Estado que muestra que una cuenta ha sido completamente cargada en el llavero" }, "importAccountMsg": { - "message": "Cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas." + "message": "Las cuentas importadas no serán asociadas con tu cuenta original creada con tu MetaMask. Aprende más acerca de importar cuentas." }, "info": { "message": "Información" }, "infoHelp": { - "message": "Informacion y Ayuda" + "message": "Informacion y ayuda" }, "insufficientFunds": { "message": "Fondos insuficientes" @@ -421,7 +421,7 @@ "message": "Petición inválida" }, "jsonFail": { - "message": "Algo malo pasó. Asegurate que tu JSON tiene el formato correcto" + "message": "Algo falló. Asegúrate que tu JSON tiene el formato correcto" }, "jsonFile": { "message": "Archivo JSON", @@ -477,7 +477,7 @@ "message": "Mensaje" }, "metamaskDescription": { - "message": "Metamask es una identidad segura en Ethereum" + "message": "MetaMask es una identidad segura en Ethereum" }, "min": { "message": "Mínimo" @@ -489,7 +489,7 @@ "message": "Mis cuentas" }, "needEtherInWallet": { - "message": "Para interactuar con una aplicación descentralizada usando MetaMask, vas a necesitar tener Ether en tu billetera" + "message": "Para interactuar con una aplicación descentralizada usando MetaMask, necesitas tener Ether en tu billetera" }, "needImportFile": { "message": "Debes seleccionar un archivo para importar", @@ -565,17 +565,17 @@ "message": "Asegurate que tu contraseña es correcta" }, "passwordMismatch": { - "message": "Contraseña no coincide", + "message": "La contraseña no coincide", "description": "En el proceso de creación de contraseña, los dos campos de contraseña no coincidieron" }, "passwordNotLongEnough": { "message": "La contraseña no es lo suficientemente larga" }, "passwordsDontMatch": { - "message": "Contraseñas no coinciden" + "message": "Las contraseñas no coinciden" }, "passwordShort": { - "message": "Contraseña no es lo suficientemente larga", + "message": "La contraseña no es lo suficientemente larga", "description": "En el proceso de creación de contraseña, esta no es lo suficientemente larga para ser segura" }, "pastePrivateKey": { @@ -583,13 +583,13 @@ "description": "Para importar una cuenta desde una llave privada" }, "pasteSeed": { - "message": "Pega tu frase semilla aquí!" + "message": "¡Pega tu frase semilla aquí!" }, "personalAddressDetected": { "message": "Dirección personal detectada. Ingresa la dirección del contrato del token" }, "pleaseReviewTransaction": { - "message": "Por favor revisa tu transaccion" + "message": "Por favor, revisa tu transaccion" }, "privacyMsg": { "message": "Política de privacidad" @@ -602,7 +602,7 @@ "message": "Advertencia: NUNCA reveles esta clave. Cualquier persona con tus claves privadas puede robar los activos retenidos en tu cuenta" }, "privateNetwork": { - "message": "Red Privada" + "message": "Red privada" }, "qrCode": { "message": "Mostrar codigo QR" @@ -614,7 +614,7 @@ "message": "Leer más" }, "readdToken": { - "message": "Puede volver a agregar este token en el futuro yendo a 'Agregar token' en el menú de opciones de tu cuenta" + "message": "Puedes volver a agregar este token en el futuro pinchando sobre 'Agregar token' en el menú de opciones de tu cuenta" }, "receive": { "message": "Recibir" @@ -641,13 +641,13 @@ "message": "Restaurar Bóveda" }, "retryWithMoreGas": { - "message": "Vuelva a intentar con un precio de Gas más alto aquí" + "message": "Vuelva a intentar con un precio de gas más alto aquí" }, "revealSeedWords": { "message": "Revelar palabras de semilla" }, "revealSeedWordsWarning": { - "message": "No recuperes tu semilla en un lugar publico! Esas palabras pueden ser usadas para robarte todas tus cuentas" + "message": "¡No recuperes tu semilla en un lugar pública! Esas palabras pueden ser usadas para robarte todas tus cuentas" }, "revert": { "message": "Revertir" @@ -659,7 +659,7 @@ "message": "Red privada Ropsten" }, "sampleAccountName": { - "message": "Ej. Mi nueva cuenta", + "message": "P.ej. Mi nueva cuenta", "description": "Ayuda al usuario a entender el concepto de agregar un nombre, leíble por humanos, a su cuenta" }, "save": { @@ -700,10 +700,10 @@ "message": "Enviar Ether" }, "sendTokens": { - "message": "Enviar Tokens" + "message": "Enviar tokens" }, "sendTokensAnywhere": { - "message": "Enviar Tokens a cualquiera con una cuenta de Ethereum" + "message": "Enviar tokens a cualquiera con una cuenta de Ethereum" }, "settings": { "message": "Configuración" @@ -730,10 +730,10 @@ "message": "Firmado" }, "signMessage": { - "message": "Firmar Mensaje" + "message": "Firmar mensaje" }, "signNotice": { - "message": "Firmar este mensaje puede tener\n efectos secundarios peligrosos. Firma sólo\nmensajes desde sitios a los cuales tú estés dispuesto a confiar completamente tu cuenta.\nEste método peligroso va a ser \nremovido en una version futura." + "message": "Firmar este mensaje puede tener\n efectos secundarios peligrosos. Firma sólo\nmensajes desde sitios a los que estés plenamente dispuesto a confiar tu cuenta.\nEste método peligroso va a ser \neliminado en una version futura." }, "spaceBetween": { "message": "Sólo puede haber un espacio entre las palabras" @@ -742,7 +742,7 @@ "message": "Logs de estado" }, "stateLogsDescription": { - "message": "Los Logs de estado contienen tus direcciones de cuentas públicas y transacciones envíadas" + "message": "Los logs de estado contienen tus direcciones de cuentas públicas y transacciones envíadas" }, "stateLogError": { "message": "Error en la recogida de logs de estado" @@ -763,10 +763,10 @@ "message": "Símbolo debe ser entre 0 y 10 caracteres" }, "takesTooLong": { - "message": "¿Está tomando demasiado?" + "message": "¿Está tardando demasiado?" }, "terms": { - "message": "Terminos de Uso" + "message": "Términos de uso" }, "testFaucet": { "message": "Probar Faucet" @@ -782,7 +782,7 @@ "message": "Dirección del token" }, "tokenAlreadyAdded": { - "message": "El token esta actualmente agregado" + "message": "El token está actualmente agregado" }, "tokenBalance": { "message": "Tu balance de tokens es:" @@ -794,13 +794,13 @@ "message": "Símbolo del token" }, "tokenWarning1": { - "message": "Manten un registro de los tokens que has comprado con tu cuenta de MetaMask. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." + "message": "Mantén un registro de los tokens que has comprado con tu cuenta de MetaMask. Si compraste tokens usando una cuenta diferente, esos tokens no aparecerán aquí." }, "total": { "message": "Total" }, "transactionMemo": { - "message": "Memo de transaccion (opcional)" + "message": "Memo de transacción (opcional)" }, "transactionNumber": { "message": "Número de transacción" @@ -816,7 +816,7 @@ "description": "Seguidos por un enlace (aquí) para ver los saldos de token" }, "twelveWords": { - "message": "Estas 12 palabras son la única forma de restablecer tus cuentas de MetaMask. \nGuardalas en un lugar seguro y secreto." + "message": "Estas 12 palabras son la única forma de restablecer tus cuentas de MetaMask. \nGuárdalas en un lugar seguro y secreto." }, "typePassword": { "message": "Escribe tu contraseña" @@ -825,13 +825,13 @@ "message": "Bienvenido a la nueva UI (Beta)" }, "uiWelcomeMessage": { - "message": "Estás usando la nueva UI de MetaMask. Echa un vistazo alrededor, prueba las nuevas características, tales como mandar tokens, y déjanos saber si tienes algún problema" + "message": "Estás usando la nueva UI de MetaMask. Echa un vistazo alrededor, prueba las nuevas características, tales como mandar tokens, y háznos saber si tienes algún problema" }, "unavailable": { "message": "No disponible" }, "unapproved": { - "message": "No Aprobado" + "message": "No aprobado" }, "unknown": { "message": "Desconocido (a)" @@ -840,14 +840,14 @@ "message": "Red privada desconocida" }, "unknownNetworkId": { - "message": "ID (identidad) de Red desconocida" + "message": "ID (identidad) de red desconocida" }, "uriErrorMsg": { - "message": "URI necesita el prefijo HTTP/HTTPS apropiado" + "message": "URI necesita el prefijo HTTP/HTTPS apropiado" }, "usaOnly": { "message": "Sólo USA (Estados Unidos)", - "description": "El uso de este exchange (casa de cambio) está limitado a las personas dentro de los Estados Unidos de America" + "description": "El uso de este exchange (casa de cambio) está limitado a las personas dentro de los Estados Unidos de América" }, "useOldUI": { "message": "Usar UI antigua" @@ -877,7 +877,7 @@ "message": "Bienvenido a Metamask Beta" }, "whatsThis": { - "message": "Qué es esto?" + "message": "¿Qué es esto?" }, "youSign": { "message": "Usted está firmando" -- cgit From 332a0203ac31bd42415e944b8df4dc062c59da49 Mon Sep 17 00:00:00 2001 From: N1X Date: Wed, 21 Mar 2018 18:33:32 +0000 Subject: hn _locales : message.json [HINDI] (#3611) adding hn_IN `_locales` --- app/_locales/hn/messages.json | 819 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 819 insertions(+) create mode 100644 app/_locales/hn/messages.json (limited to 'app') diff --git a/app/_locales/hn/messages.json b/app/_locales/hn/messages.json new file mode 100644 index 000000000..3703faa13 --- /dev/null +++ b/app/_locales/hn/messages.json @@ -0,0 +1,819 @@ +{ + "accept": { + "message": "स्वीकार करें" + }, + "account": { + "message": "खाता" + }, + "accountDetails": { + "message": "खाता विवरण" + }, + "accountName": { + "message": "खाता का नाम" + }, + "address": { + "message": "खाते का पता" + }, + "addCustomToken": { + "message": "कस्टम टोकन जोड़ें" + }, + "addToken": { + "message": "टोकन जोड़ें" + }, + "addTokens": { + "message": "टोकनो को जोड़ें" + }, + "amount": { + "message": "राशि" + }, + "amountPlusGas": { + "message": "राशि + गैस" + }, + "appDescription": { + "message": "एथरेम ब्राउज़र एक्सटेंशन", + "description": "आवेदन का विवरण" + }, + "appName": { + "message": "मेटामास्क/MetaMask", + "description": "एप्लिकेशन का नाम" + }, + "attemptingConnect": { + "message": "ब्लॉकचैन से कनेक्ट करने का प्रयास करना होगा।सब्र करे।" + }, + "attributions": { + "message": "एट्रिब्यूशन" + }, + "available": { + "message": "एट्रिब्यूशन उपलब्ध ह्ने" + }, + "back": { + "message": "वापस" + }, + "balance": { + "message": "उपलब्ध बैलेंस।" + }, + "balances": { + "message": "ापके उपलब्ध बैलेंस" + }, + "balanceIsInsufficientGas": { + "message": "वर्तमान गैस कुल के लिए अपर्याप्त शेष" + }, + "beta": { + "message": "BETA/बीटा" + }, + "betweenMinAndMax": { + "message": "$1 के बराबर या ज्यदा या, $2 के बराबर या कम होना चाहिए।", + "description": "हेक्स इनपुट के लिए दशमलव इनपुट के रूप में सहायक" + }, + "blockiesIdenticon": { + "message": "ब्लॉकीज पहचान का उपयोग करें" + }, + "borrowDharma": { + "message": "धर्मा (बीटा) से / के साथ उधार लें" + }, + "builtInCalifornia": { + "message": "मेटामास्क कैलिफ़ोर्निया में डिज़ाइन और बनाया गया है।" + }, + "buy": { + "message": "खरीदें" + }, + "buyCoinbase": { + "message": "कॉनबेस पर खरीदें" + }, + "buyCoinbaseExplainer": { + "message": "बिल्टकोइन, एथरेम और लाइटकोइन खरीदने और बेचने के लिए दुनिया का सबसे लोकप्रिय तरीका Coinbase है।" + }, + "cancel": { + "message": "रद्द करें" + }, + "classicInterface": { + "message": "क्लासिक इंटरफ़ेस का उपयोग क" + }, + "clickCopy": { + "message": "कॉपी करने के लिए क्लिक करें" + }, + "confirm": { + "message": "पुष्टि करें" + }, + "confirmContract": { + "message": "अनुबंध की पुष्टि करें" + }, + "confirmPassword": { + "message": "पासवर्ड की पुष्टि करें" + }, + "confirmTransaction": { + "message": "लेनदेन की पुष्टि करें" + }, + "continue": { + "message": "जारी रखें" + }, + "continueToCoinbase": { + "message": "कॉ्ोनबेस को ब्हेजना जारी रखें" + }, + "contractDeployment": { + "message": "अनुबंध परिनियोजन व तैनाती" + }, + "conversionProgress": { + "message": "रूपांतरण प्रगति में हे।" + }, + "copiedButton": { + "message": "कॉपी किया गया" + }, + "copiedClipboard": { + "message": "क्लिपबोर्ड पर कॉपी किया गया" + }, + "copiedExclamation": { + "message": "कॉपी कर दिया गया!" + }, + "copiedSafe": { + "message": "मैंने इसे कहीं सुरक्षित कॉपी कर दिया है" + }, + "copy": { + "message": "कॉपी / प्रतिलिपि कर्रे" + }, + "copyToClipboard": { + "message": "क्लिपबोर्ड पर कॉपी करें" + }, + "copyButton": { + "message": " कॉपी / प्रतिलिपि कर्रे [बत्तन] " + }, + "copyPrivateKey": { + "message": "यह आपकी निजी कुंजी है (कॉपी करने के लिए क्लिक करें)।" + }, + "create": { + "message": "बनाएं" + }, + "createAccount": { + "message": "खाता बनाएं" + }, + "createDen": { + "message": "डेन बनाएं" + }, + "crypto": { + "message": "क्रिप्टो", + "description": "एक्सचेंज टाइप (क्रिप्टोक्यूचरस)" + }, + "currentConversion": { + "message": "वर्तमान रूपांतरण" + }, + "currentNetwork": { + "message": "वर्तमान नेटवर्क" + }, + "customGas": { + "message": "अनुकूलित करें गैस" + }, + "customize": { + "message": "अनुकूलित करें" + }, + "customRPC": { + "message": "कस्टम RPC" + }, + "decimalsMustZerotoTen": { + "message": "दशमलव कम से कम 0 होनी चाहिए, और 36 से अधिक नहीं होनी चाहिए।" + }, + "decimal": { + "message": "दशमलव परिशुद्धता" + }, + "defaultNetwork": { + "message": "ईथर लेनदेन के लिए डिफ़ॉल्ट नेटवर्क मुख्य नेट है।" + }, + "denExplainer": { + "message": "आपका डेन मेटामास्क के भीतर आपका पासवर्ड-एन्क्रिप्टेड स्टोरेज है।" + }, + "deposit": { + "message": "जमा" + }, + "depositBTC": { + "message": "नीचे दिए गए पते पर अपना बीटीसी जमा करें:" + }, + "depositCoin": { + "message": "नीचे दिए गए पते पर अपना $1 जमा करें", + "description": "उपयोगकर्ता को बताता है कि उन्होंने सिक्का के साथ जमा करने के लिए किस सिक्का का चयन किया है" + }, + "depositEth": { + "message": "Eth जमाआर्थ" + }, + "depositEther": { + "message": "जमा - Ether" + }, + "depositFiat": { + "message": "फिएट के साथ जमा हो" + }, + "depositFromAccount": { + "message": "दूसरे खाते से जमा करें" + }, + "depositShapeShift": { + "message": "शेपशिप के साथ जमा करें" + }, + "depositShapeShiftExplainer": { + "message": "यदि आप अन्य क्रिप्टोकाउंटरज रखते हैं, तो आप सीधे मेटामास्क वॉलेट में ईथर को व्यापार और जमा कर सकते हैं। कोई खाता आवश्यक नहीं है।" + }, + "details": { + "message": "संदेश विवरण" + }, + "directDeposit": { + "message": "प्रत्यक्ष जमा" + }, + "directDepositEther": { + "message": "सीधे ईथर जमा करें" + }, + "directDepositEtherExplainer": { + "message": "यदि आपके पास पहले से कुछ ईथर है, तो सीधे जमा द्वारा अपने नए बटुए में ईथर प्राप्त करने का तेज़ तरीका है।" + }, + "done": { + "message": "संपन्न" + }, + "downloadStatelogs": { + "message": "राज्य लॉग डाउनलोड करें" + }, + "edit": { + "message": "संपादित करें" + }, + "editAccountName": { + "message": "खाता नाम संपादित करें" + }, + "emailUs": { + "message": "हमें ईमेल करें!" + }, + "encryptNewDen": { + "message": "अपना नया डेन एन्क्रिप्ट करें" + }, + "enterPassword": { + "message": "पासवर्ड दर्ज करें" + }, + "enterPasswordConfirm": { + "message": "पुष्टि करने के लिए अपना पासवर्ड दर्ज करें" + }, + "etherscanView": { + "message": "ईथरस्कैन पर खाता देखें" + }, + "exchangeRate": { + "message": "विनिमय दरै" + }, + "exportPrivateKey": { + "message": "निजी कुंजी निर्यात करें" + }, + "exportPrivateKeyWarning": { + "message": "अपने जोखिम पर निजी कुंजी निर्यात करें।" + }, + "failed": { + "message": "विफल" + }, + "fiat": { + "message": "FIAT एक्सचेंज टाइप", + "description": "एक्सचेंज FIAT टाइप" + }, + "fileImportFail": { + "message": "फ़ाइल आयात काम नहीं कर रहा है? यहां क्लिक करें!", + "description": "यूजर को अपने खाते को जे.एस.ौ.एन फ़ाइल से आयात करने में मदद करता है" + }, + "followTwitter": { + "message": "हमें ट्विटर पर अनुसरण करें" + }, + "from": { + "message": "की तरफ से - संदेश" + }, + "fromToSame": { + "message": "से और पता करने के लिए समान नहीं हो सकता" + }, + "fromShapeShift": { + "message": "सेशशशफ्ट का" + }, + "gas": { + "message": "गैस की लागत", + "description": "गैस की लागत का संक्षिप्त संकेत" + }, + "gasFee": { + "message": "गैस शुल्क" + }, + "gasLimit": { + "message": "गैस सीमा" + }, + "gasLimitCalculation": { + "message": "हम नेटवर्क की सफलता दर के आधार पर सुझाई गई गैस सीमा की गणना करते हैं।" + }, + "gasLimitRequired": { + "message": "गैस सीमा आवश्यक" + }, + "gasLimitTooLow": { + "message": "२१००० - गैस की सीमा कम से कम 21000 होनी चाहिए" + }, + "generatingSeed": { + "message": "सृजन बीज उत्पन्न ... उत्पन्न ...उत्पन्न..." + }, + "gasPrice": { + "message": "गैस मूल्य (जीडब्ल्यूईआई),(GWEI)" + }, + "gasPriceCalculation": { + "message": "हम नेटवर्क की सफलता दर के आधार पर सुझाए गए गैस की कीमतों की गणना करते हैं।" + }, + "gasPriceRequired": { + "message": "गैस की कीमत आवश्यक है" + }, + "getEther": { + "message": "ईथर प्राप्त करें" + }, + "getEtherFromFaucet": { + "message": "$1 के लिए एक नल से ईथर प्राप्त करें", + "description": "ईथर नल के लिए नेटवर्क नाम प्रदर्शित करता है" + }, + "greaterThanMin": { + "message": "$1 के बराबर या बराबर होना चाहिए।", + "description": "हेक्स इनपुट के लिए दशमलव इनपुट के रूप में सहायक" + }, + "here": { + "message": "यहां", + "description": "अधिक जानकारी के लिए यहां क्लिक करें- (परेशानी के साथ जाता है टोकनबैलेंस) (troubleTokenBalances)" + }, + "hereList": { + "message": "यहां एक सूची है !!!!" + }, + "hide": { + "message": "छुपाएं" + }, + "hideToken": { + "message": "टोकन छिपाएं" + }, + "hideTokenPrompt": { + "message": "टोकन छिपाएंn?" + }, + "howToDeposit": { + "message": "आप ईथर जमा कैसे करना चाहेंगे?" + }, + "holdEther": { + "message": "यह आपको आकाश और टोकन रखने की अनुमति देता है, और विकेंद्रीकृत अनुप्रयोगों के लिए आपके पुल के रूप में कार्य करता है।" + }, + "import": { + "message": "आयात", + "description": "एक चयनित फ़ाइल से एक खाता आयात करने के लिए बटन " + }, + "importAccount": { + "message": "खाता आयात" + }, + "importAccountMsg": { + "message": "आयात किए गए खाते आपके मूल रूप से बनाए गए मेटामास्क अकाउंट सीडफ्रेज से संबद्ध नहीं होंगे। आयात किए गए खातों के बारे में और जानें" + }, + "importAnAccount": { + "message": "खाता आयात करैॉ" + }, + "importDen": { + "message": "मौजूदा डेन आयात करें - DEN" + }, + "imported": { + "message": "आयातित", + "description": "यह स्थिति दिखाती है कि कोई खाता पूरी तरह से कीरिंग में लोड हो चुका है" + }, + "infoHelp": { + "message": "जानकारी और सहायता" + }, + "insufficientFunds": { + "message": "अपर्याप्त धन" + }, + "insufficientTokens": { + "message": "अपर्याप्त टोकन।" + }, + "invalidAddress": { + "message": "अमान्य पता" + }, + "invalidAddressRecipient": { + "message": "प्राप्तकर्ता का पता अमान्य है" + }, + "invalidGasParams": { + "message": "अमान्य गैस पैरामीटर" + }, + "invalidInput": { + "message": "अमान्य इनपुट।" + }, + "invalidRequest": { + "message": "अमान्य अनुरोध" + }, + "invalidRPC": { + "message": "अमान्य RPC कै URI" + }, + "jsonFail": { + "message": "कुछ गलत हो गया। कृपया सुनिश्चित करें कि आपकी JSON फ़ाइल ठीक से फ़ॉर्मेट की गई है।" + }, + "jsonFile": { + "message": "JSON फ़ाइल", + "description": "एक खाता आयात करने के लिए प्रारूप" + }, + "kovan": { + "message": "कोवान टेस्ट नेटवर्क" + }, + "knowledgeDataBase": { + "message": "हमारे नॉलेज बेस पर जाएं" + }, + "lessThanMax": { + "message": "$1 से कम या बराबर होना चाहिए।", + "description": "हेक्स इनपुट के लिए दशमलव इनपुट के रूप में सहायक" + }, + "likeToAddTokens": { + "message": "क्या आप इन टोकनों को जोड़ना चाहते हैं?" + }, + "limit": { + "message": "सीमा" + }, + "loading": { + "message": "लोड हो रहा है ....." + }, + "loadingTokens": { + "message": "टोकन लोड हो रहा है ....." + }, + "localhost": { + "message": "स्थानीयहोस्ट 8545" + }, + "login": { + "message": "लॉग इन करें" + }, + "logout": { + "message": "लॉग आउट करें" + }, + "loose": { + "message": "ढीला" + }, + "loweCaseWords": { + "message": "बीज शब्द में केवल लोअरकेस वर्ण होते हैं" + }, + "mainnet": { + "message": "मुख्य ईथरम नेटवर्क" + }, + "message": { + "message": "संदेश" + }, + "metamaskDescription": { + "message": "मेटामास्क एथर्मम के लिए एक सुरक्षित पहचान वॉल्ट है।" + }, + "min": { + "message": "न्यूनतम" + }, + "myAccounts": { + "message": "मेरे खाते" + }, + "mustSelectOne": { + "message": "कम से कम 1 टोकन का चयन करना आवश्यक है।" + }, + "needEtherInWallet": { + "message": "मेटामास्क का उपयोग करने वाले विकेन्द्रीकृत अनुप्रयोगों के साथ बातचीत करने के लिए, आपको अपने वॉलेट में ईथर की आवश्यकता होगी।" + }, + "needImportFile": { + "message": "आयात करने के लिए आपको एक फ़ाइल का चयन करना होगा।", + "description": "प्रयोक्ता महत्वपूर्ण खाता है और उसे जारी रखने के लिए एक फ़ाइल जोड़ने की आवश्यकता है" + }, + "needImportPassword": { + "message": "चयनित फ़ाइल के लिए आपको एक पासवर्ड दर्ज करना होगा।", + "description": "पासवर्ड और फाइल को एक खाते आयात करने के लिए आवश्यक है" + }, + "negativeETH": { + "message": "ईटीएच की नकारात्मक मात्रा नहीं भेज सकते हैं।." + }, + "networks": { + "message": "नेटवर्क" + }, + "newAccount": { + "message": "नया खाता" + }, + "newAccountNumberName": { + "message": "नया खाता $1", + "description": "खाते का खाता बनाने पर अगले खाते का डिफ़ॉल्ट नाम" + }, + "newContract": { + "message": "नया अनुबंध" + }, + "newPassword": { + "message": "नया पासवर्ड (न्यूनतम 8 वर्ण)" + }, + "newRecipient": { + "message": "नया प्राप्तकर्ता" + }, + "newRPC": { + "message": "नया RPC URL" + }, + "next": { + "message": "अगला" + }, + "noAddressForName": { + "message": "इस नाम के लिए कोई पता सेट नहीं किया गया है।" + }, + "noDeposits": { + "message": "कोई जमा प्राप्त नहीं हुई" + }, + "noTransactionHistory": { + "message": "कोई लेनदेन इतिहास नहीं ..." + }, + "noTransactions": { + "message": "कोई लेन-देन नहीं" + }, + "notStarted": { + "message": "प्रारंभ नहीं किया गया" + }, + "oldUI": { + "message": "पुराना UI" + }, + "oldUIMessage": { + "message": "आप पुराने UI पर वापस आ गए हैं। आप ऊपर दाईं ओर ड्रॉपडाउन मेनू में विकल्प के माध्यम से नए UI पर वापस स्विच कर सकते हैं।" + }, + "or": { + "message": "या", + "description": "एक नया खाता बनाने या आयात करने के बीच की पसंद" + }, + "passwordCorrect": { + "message": "कृपया सुनिश्चित करें कि आपका पासवर्ड सही है।" + }, + "passwordMismatch": { + "message": "पासवर्ड मेल नहीं खाते", + "description": "पासवर्ड निर्माण प्रक्रिया में, दो नए पासवर्ड फ़ील्ड मेल नहीं खाते" + }, + "passwordShort": { + "message": "पासवर्ड पर्याप्त लंबा नहीं", + "description": "पासवर्ड बनाने की प्रक्रिया में, पासवर्ड सुरक्षित होने के लिए पर्याप्त नहीं है" + }, + "pastePrivateKey": { + "message": "यहां अपनी निजी कुंजी स्ट्रिंग चिपकाएं:", + "description": "किसी निजी कुंजी से किसी खाते को आयात करने के लिए" + }, + "pasteSeed": { + "message": "यहां अपने बीज वाक्यांश पेस्ट करें!" + }, + "personalAddressDetected": { + "message": "व्यक्तिगत पता मिला। टोकन अनुबंध का पता इनपुट।" + }, + "pleaseReviewTransaction": { + "message": "कृपया अपने लेनदेन की समीक्षा करें।" + }, + "privacyMsg": { + "message": "गोपनीयता नीति" + }, + "privateKey": { + "message": "निजी कुंजी", + "description": "खाता आयात करने के लिए उपयोग करने के लिए इस प्रकार की फ़ाइल का चयन करें" + }, + "privateKeyWarning": { + "message": "चेतावनी: कभी भी इस कुंजी का खुलासा न करें। आपकी निजी कुंजी वाले कोई भी आपके खाते में रखी किसी भी संपत्ति को चुरा सकता है।" + }, + "privateNetwork": { + "message": "निजी नेटवर्क" + }, + "qrCode": { + "message": "QR कोड दिखाएं" + }, + "readdToken": { + "message": "आप अपने खाता विकल्प मेनू में .टोकन जोड़ें. पर जाकर भविष्य में इस टोकन को वापस जोड़ सकते हैं।" + }, + "readMore": { + "message": "यहां और पढ़ें।" + }, + "readMore2": { + "message": "हां - और पढ़ें।" + }, + "receive": { + "message": "प्राप्त करें" + }, + "recipientAddress": { + "message": "प्राप्तकर्ता पता" + }, + "refundAddress": { + "message": "आपका रिफंड पता" + }, + "rejected": { + "message": "अस्वीकृत" + }, + "resetAccount": { + "message": "खाता रीसेट करें" + }, + "restoreFromSeed": { + "message": "बीज वाक्यांश से पुनर्स्थापित करें" + }, + "required": { + "message": "आवश्यक" + }, + "retryWithMoreGas": { + "message": "यहां एक उच्च गैस कीमत के साथ पुन: प्रयास करें" + }, + "revealSeedWords": { + "message": "बीज शब्द प्रकट करें" + }, + "revealSeedWordsWarning": { + "message": "किसी सार्वजनिक स्थान पर अपने बीज के शब्द ठीक नहीं करें! ये शब्द आपके सभी खातों को चोरी करने के लिए उपयोग किए जा सकते हैं।" + }, + "revert": { + "message": "वापस" + }, + "rinkeby": { + "message": "रिचीव टेस्ट नेटवर्क" + }, + "ropsten": { + "message": "रॉप्स्टेन टेस्ट नेटवर्क" + }, + "sampleAccountName": { + "message": "उदाहरण के लिए मेरा नया खाता", + "description": "उपयोगकर्ता को अपने खाते में मानव-पठनीय नाम जोड़ने की अवधारणा को समझें." + }, + "save": { + "message": "सहेजें" + }, + "saveAsFile": { + "message": "फ़ाइल के रूप में सहेजें", + "description": "खाता निर्यात प्रक्रिया" + }, + "saveSeedAsFile": { + "message": "सेड वर्ड्स - फाईल्स सेव करें" + }, + "search": { + "message": "खोज करें" + }, + "secretPhrase": { + "message": "अपनी गुप्त बारह शब्द वाक्यांश यहाँ अपनी तिजोरी को पुनर्स्थापित करने के लिए दर्ज करें।" + }, + "seedPhraseReq": { + "message": "बीज वाक्यांश 12 शब्द लंबा हैं" + }, + "select": { + "message": "चुनें" + }, + "selectCurrency": { + "message": "मुद्रा चुनें" + }, + "selectService": { + "message": "सेवा चुनें" + }, + "selectType": { + "message": "प्रकार चुनें" + }, + "send": { + "message": "भेजें" + }, + "sendETH": { + "message": "भेजें ETH" + }, + "sendTokens": { + "message": "भेजें टोकन" + }, + "sendTokensAnywhere": { + "message": "इटोरम खाते वाले किसी को भी टोकन भेजें" + }, + "settings": { + "message": "सेटिंग्स" + }, + "shapeshiftBuy": { + "message": "शेपेशिस्ट के साथ खरीदें" + }, + "showPrivateKeys": { + "message": "निजी कुंजी दिखाएँ" + }, + "showQRCode": { + "message": "QR कोड दिखाएं" + }, + "sign": { + "message": "हस्ताक्षर" + }, + "signMessage": { + "message": "हस्ताक्षर संदेश" + }, + "signNotice": { + "message": "इस संदेश पर हस्ताक्षर करने से \n साइड इफेक्ट हो सकते हैं। \n केवल अपने पूरे खाते के साथ पूरी तरह से भरोसेमंद \n साइटों से संदेश पर हस्ताक्षर करें। \n यह खतरनाक विधि भविष्य के संस्करण में निकाल दी जाएगी।" + }, + "sigRequest": { + "message": "हस्ताक्षर अनुरोध" + }, + "sigRequested": { + "message": "हस्ताक्षर अनुरोधित" + }, + "spaceBetween": { + "message": "केवल शब्दों के बीच एक स्थान हो सकता है" + }, + "status": { + "message": "स्थिति" + }, + "stateLogs": { + "message": "स्थिति संदेश" + }, + "stateLogsDescription": { + "message": "स्थिति संदेश में आपका सार्वजनिक खाता, पतों और भेजे गए लेनदेन, होते हैं।" + }, + "submit": { + "message": "सबमिट करें" + }, + "supportCenter": { + "message": "हमारे सहायता केंद्र पर जाएं" + }, + "symbolBetweenZeroTen": { + "message": "प्रतीक 0 और 10 अक्षरों के बीच होना चाहिए" + }, + "takesTooLong": { + "message": "बहुत समय ले रहा है?" + }, + "terms": { + "message": "उपयोग की शर्तें" + }, + "testFaucet": { + "message": "टेस्ट नलि" + }, + "to": { + "message": "के लिए" + }, + "toETHviaShapeShift": { + "message": "शैपशैफ्ट द्वारा $1 से ETH में जमा", + "description": "संदेश की शुरुआत में जमा प्रकार भर जाएगा" + }, + "tokenAddress": { + "message": "टोकन पता" + }, + "tokenAlreadyAdded": { + "message": "टोकन पहले ही जोड़ा जा चुका है।" + }, + "tokenBalance": { + "message": "आपका टोकन बैलेंस है:" + }, + "tokenSelection": { + "message": "टोकन के लिए खोजें या हमारी लोकप्रिय टॉकेन्स की सूची से चुनें।" + }, + "tokenSymbol": { + "message": "टोकन प्रतीक" + }, + "tokenWarning1": { + "message": "अपने मेटामास्क अकाउंट से खरीदे गए टोकनों का नज़र रखें। अगर आप किसी अलग खाते का उपयोग कर टोकन खरीदे हैं, तो ये टोकन यहां दिखाई नहीं देंगे।" + }, + "total": { + "message": "कुल" + }, + "transactions": { + "message": "लेनदेन" + }, + "transactionMemo": { + "message": "लेनदेन मेमो (वैकल्पिक)" + }, + "transactionNumber": { + "message": "लेनदेन संख्या" + }, + "transfers": { + "message": "स्थानांतरण" + }, + "troubleTokenBalances": { + "message": "मुसीबत... आपके टोकन शेष राशि को लोड करने में हमें परेशानी हुई थी। आप उन्हें देख सकते हैं", + "description": "टोकन शेष देखने के लिए एक लिंक ... (यहां)" + }, + "twelveWords": { + "message": "ये 12 शब्द आपके मेटामास्क खातों को पुनर्स्थापित करने का एकमात्र तरीका है। \n उन्हें कहीं सुरक्षित और गुप्त रूप से सहेजें।" + }, + "typePassword": { + "message": "अपना पासवर्ड टाइप करें" + }, + "uiWelcome": { + "message": "नया यूआई (बीटा) में आपका स्वागत है" + }, + "uiWelcomeMessage": { + "message": "आप अब नए मेटामास्क UI का उपयोग कर रहे हैं। चारों ओर एक नज़र डालें, टोकन भेजने की तरह नई सुविधाएं देखें, और हमें बताएं कि आपके पास कोई समस्या है।" + }, + "unavailable": { + "message": "अनुपलब्ध" + }, + "unknown": { + "message": "अज्ञात नेटवर्क" + }, + "unknownNetwork": { + "message": "अज्ञात निजी नेटवर्क" + }, + "unknownNetworkId": { + "message": "अज्ञात नेटवर्क आईडी.य़" + }, + "uriErrorMsg": { + "message": "URI-यूआरआई को उपयुक्त HTTP / HTTPS उपसर्ग की आवश्यकता होती है।" + }, + "usaOnly": { + "message": "केवल यूएसए - USA", + "description": "इस एक्सचेंज का उपयोग करना संयुक्त राज्य अमेरिका के अंदर ही सीमित है" + }, + "usedByClients": { + "message": "विभिन्न क्लाइंट्स द्वारा उपयोग किया जाता है" + }, + "useOldUI": { + "message": "पुराने UI का उपयोग करें" + }, + "validFileImport": { + "message": "आयात करने के लिए आपको एक वैध फ़ाइल चुननी होगी।" + }, + "vaultCreated": { + "message": "वॉल्ट बनाया गया" + }, + "viewAccount": { + "message": "खाता देखें" + }, + "visitWebSite": { + "message": "हमारी वेब साइट पर जाएं" + }, + "warning": { + "message": "चेतावनी" + }, + "welcomeBeta": { + "message": "मेटामास्क बीटा में आपका स्वागत है" + }, + "whatsThis": { + "message": "यह क्या है?" + }, + "yourSigRequested": { + "message": "आपका हस्ताक्षर अनुरोध किया जा रहा है" + }, + "youSign": { + "message": "आप हस्ताक्षर कर रहे हैं" + } +} -- cgit From ec1188f25017b6b352744646aee61155d84fc999 Mon Sep 17 00:00:00 2001 From: Victor Charapaev Date: Wed, 21 Mar 2018 11:37:54 -0700 Subject: Translate to Russian (#3644) * Add Russian localization --- app/_locales/ru/messages.json | 819 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 819 insertions(+) create mode 100644 app/_locales/ru/messages.json (limited to 'app') diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json new file mode 100644 index 000000000..e3a1935f5 --- /dev/null +++ b/app/_locales/ru/messages.json @@ -0,0 +1,819 @@ +{ + "accept": { + "message": "Принять" + }, + "account": { + "message": "Аккаунт" + }, + "accountDetails": { + "message": "Детали Аккаунта" + }, + "accountName": { + "message": "Имя Пользователя" + }, + "address": { + "message": "Адрес" + }, + "addCustomToken": { + "message": "Добавить пользовательский токен" + }, + "addToken": { + "message": "Добавить токен" + }, + "addTokens": { + "message": "Добавить Токены" + }, + "amount": { + "message": "Количество" + }, + "amountPlusGas": { + "message": "Количество + газ" + }, + "appDescription": { + "message": "Расширение браузера для Ethereum", + "description": "The description of the application" + }, + "appName": { + "message": "MetaMask", + "description": "The name of the application" + }, + "attemptingConnect": { + "message": "Попытка подключиться к блокчейн сети." + }, + "attributions": { + "message": "Опознания" + }, + "available": { + "message": "Доступный" + }, + "back": { + "message": "Назад" + }, + "balance": { + "message": "Баланс:" + }, + "balances": { + "message": "Ваши балансы" + }, + "balanceIsInsufficientGas": { + "message": "Недостаточный баланс для текущего объема газа" + }, + "beta": { + "message": "БЕТА" + }, + "betweenMinAndMax": { + "message": "должно быть больше или равно $1 и меньше или равно $2.", + "description": "helper for inputting hex as decimal input" + }, + "blockiesIdenticon": { + "message": "Использовать Blockies Identicon" + }, + "borrowDharma": { + "message": "Заимствовать с Dharma (бета)" + }, + "builtInCalifornia": { + "message": "MetaMask спроектирован и построен в Калифорнии." + }, + "buy": { + "message": "Купить" + }, + "buyCoinbase": { + "message": "Купить на Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase - самый популярный в мире способ купить и продать биткойн, ethereum и litecoin." + }, + "cancel": { + "message": "Отмена" + }, + "classicInterface": { + "message": "Использовать классический интерфейс" + }, + "clickCopy": { + "message": "Нажмите, чтобы скопировать" + }, + "confirm": { + "message": "Подтвердить" + }, + "confirmContract": { + "message": "Подтвердить Контракт" + }, + "confirmPassword": { + "message": "Подтвердите Пароль" + }, + "confirmTransaction": { + "message": "Подтвердить Транзакцию" + }, + "continue": { + "message": "Продолжить" + }, + "continueToCoinbase": { + "message": "Продолжить в Coinbase" + }, + "contractDeployment": { + "message": "Развертывание контракта" + }, + "conversionProgress": { + "message": "Выполняется конверсия" + }, + "copiedButton": { + "message": "Скопировано" + }, + "copiedClipboard": { + "message": "Скопировано в буфер обмена" + }, + "copiedExclamation": { + "message": "Скопировано!" + }, + "copiedSafe": { + "message": "Я скопировал его где-то в безопасности" + }, + "copy": { + "message": "Скопировать" + }, + "copyToClipboard": { + "message": "Скопировать в буфер обмена" + }, + "copyButton": { + "message": " Скопировать " + }, + "copyPrivateKey": { + "message": "Это ваш личный ключ (нажмите, чтобы скопировать)" + }, + "create": { + "message": "Создать" + }, + "createAccount": { + "message": "Регистрация" + }, + "createDen": { + "message": "Создать" + }, + "crypto": { + "message": "Крипто", + "description": "Exchange type (cryptocurrencies)" + }, + "currentConversion": { + "message": "Текущая конверсия" + }, + "currentNetwork": { + "message": "Текущая сеть" + }, + "customGas": { + "message": "Настроить Газ" + }, + "customize": { + "message": "Настроить" + }, + "customRPC": { + "message": "Пользовательский RPC" + }, + "decimalsMustZerotoTen": { + "message": "Десятичные числа должны быть не менее 0, и не более 36." + }, + "decimal": { + "message": "Десятичные значения точности" + }, + "defaultNetwork": { + "message": "Сеть по умолчанию для транзакций Ether - это Main Net." + }, + "denExplainer": { + "message": "Ваш DEN - это ваше зашифрованное паролем хранилище в MetaMask." + }, + "deposit": { + "message": "Депозит" + }, + "depositBTC": { + "message": "Депозит BTC по адресу:" + }, + "depositCoin": { + "message": "Депозит $1 по указанному ниже адресу", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "Депозит Eth" + }, + "depositEther": { + "message": "Депозит Эфир" + }, + "depositFiat": { + "message": "Депозит с деньгами" + }, + "depositFromAccount": { + "message": "Депозит с другого счета" + }, + "depositShapeShift": { + "message": "Депозит с ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Если у вас есть другие крипторесурсы, вы можете торговать и вносить Эфир непосредственно в кошелек MetaMask. Нет необходимости в аккаунте." + }, + "details": { + "message": "Детали" + }, + "directDeposit": { + "message": "Прямой Депозит" + }, + "directDepositEther": { + "message": "Прямой Депозит Эфира" + }, + "directDepositEtherExplainer": { + "message": "Если у вас уже есть Эфир, самый быстрый способ получить Эфир в вашем новом кошельке это прямым депозитом." + }, + "done": { + "message": "Готово" + }, + "downloadStatelogs": { + "message": "Загрузить логи статус" + }, + "edit": { + "message": "Редактировать" + }, + "editAccountName": { + "message": "Изменить Имя Аккаунта" + }, + "emailUs": { + "message": "Свяжитесь с нами по электронной почте!" + }, + "encryptNewDen": { + "message": "Шифруйте новый DEN" + }, + "enterPassword": { + "message": "Введите пароль" + }, + "enterPasswordConfirm": { + "message": "Введите свой пароль для подтверждения" + }, + "etherscanView": { + "message": "Просмотреть аккаунт на Etherscan" + }, + "exchangeRate": { + "message": "Обменный Курс" + }, + "exportPrivateKey": { + "message": "Экспорт закрытого ключа" + }, + "exportPrivateKeyWarning": { + "message": "Экспорт секретных ключей на свой страх и риск." + }, + "failed": { + "message": "Не смогли" + }, + "fiat": { + "message": "Бумажные деньги", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "Ошибка импорта файлов? Кликните сюда!", + "description": "Helps user import their account from a JSON file" + }, + "followTwitter": { + "message": "Следуйте за нами на Twitter" + }, + "from": { + "message": "Из" + }, + "fromToSame": { + "message": "От и до адреса не могут быть одинаковым" + }, + "fromShapeShift": { + "message": "Из ShapeShift" + }, + "gas": { + "message": "Газ", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "Плата за Газ" + }, + "gasLimit": { + "message": "Газовый Предел" + }, + "gasLimitCalculation": { + "message": "Мы рассчитываем предполагаемый предел газа на основе коэффициентов успешности сети." + }, + "gasLimitRequired": { + "message": "Требуется ограничение на Газ" + }, + "gasLimitTooLow": { + "message": "Предел газа должен быть не менее 21000" + }, + "generatingSeed": { + "message": "Создание Семян ..." + }, + "gasPrice": { + "message": "Цена на Газ (GWEI)" + }, + "gasPriceCalculation": { + "message": "Мы вычисляем предлагаемые цены на газ на основе коэффициентов успеха сети." + }, + "gasPriceRequired": { + "message": "Требуется цена на Газ" + }, + "getEther": { + "message": "Получить Эфир" + }, + "getEtherFromFaucet": { + "message": "Получите Эфир из крана $1", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": "должно быть больше или равно $1.", + "description": "helper for inputting hex as decimal input" + }, + "here": { + "message": "здесь", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hereList": { + "message": "Вот список !!!!" + }, + "hide": { + "message": "Спрятать" + }, + "hideToken": { + "message": "Скрыть токен" + }, + "hideTokenPrompt": { + "message": "Скрыть токен?" + }, + "howToDeposit": { + "message": "Как бы вы хотели поместить Эфир?" + }, + "holdEther": { + "message": "Это позволяет вам использовать эфир и токены и служит мостом для децентрализованных приложений." + }, + "import": { + "message": "Импортировать", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "Импорт Аккаунта" + }, + "importAccountMsg": { + "message": " Импортированные аккаунты не будут связаны с вашей первоначально созданным аккаунтом MetaMask. Подробнее о импортированных аккаунтах " + }, + "importAnAccount": { + "message": "Импортировать аккаунт" + }, + "importDen": { + "message": "Импорт существующих DEN" + }, + "imported": { + "message": "Импортирован", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "infoHelp": { + "message": "Информация и Помощь" + }, + "insufficientFunds": { + "message": "Недостаточно средств." + }, + "insufficientTokens": { + "message": "Недостаточно токенов." + }, + "invalidAddress": { + "message": "Недействительный адрес" + }, + "invalidAddressRecipient": { + "message": "Недопустимый адрес получателя." + }, + "invalidGasParams": { + "message": "Недопустимые параметры Газа" + }, + "invalidInput": { + "message": "Неправильный ввод." + }, + "invalidRequest": { + "message": "Неверный Запрос" + }, + "invalidRPC": { + "message": "Недопустимый URI RPC" + }, + "jsonFail": { + "message": "Что-то пошло не так. Убедитесь, что ваш файл JSON правильно отформатирован." + }, + "jsonFile": { + "message": "Файл JSON", + "description": "format for importing an account" + }, + "kovan": { + "message": "Kovan тестовая сеть" + }, + "knowledgeDataBase": { + "message": "Посетите нашу базу знаний" + }, + "lessThanMax": { + "message": "должно быть меньше или равно $1.", + "description": "helper for inputting hex as decimal input" + }, + "likeToAddTokens": { + "message": "Вы хотите добавить эти токены?" + }, + "limit": { + "message": "Предел" + }, + "loading": { + "message": "Загрузка..." + }, + "loadingTokens": { + "message": "Загрузка токенов ..." + }, + "localhost": { + "message": "Локальный адрес 8545" + }, + "login": { + "message": "Авторизоваться" + }, + "logout": { + "message": "Выйти" + }, + "loose": { + "message": "Рыхлый" + }, + "loweCaseWords": { + "message": "семенные слова имеют только символы нижнего регистра" + }, + "mainnet": { + "message": "Основная сеть Ethereum" + }, + "message": { + "message": "Сообщение" + }, + "metamaskDescription": { + "message": "MetaMask - это безопасное хранилище для Ethereum." + }, + "min": { + "message": "Минимум" + }, + "myAccounts": { + "message": "Мои Аккаунты" + }, + "mustSelectOne": { + "message": "Необходимо выбрать не менее 1 токена." + }, + "needEtherInWallet": { + "message": "Чтобы взаимодействовать с децентрализованными приложениями с помощью MetaMask, вам понадобится Эфир в вашем кошельке." + }, + "needImportFile": { + "message": "Вы должны выбрать файл для импорта.", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "Вы должны ввести пароль для выбранного файла.", + "description": "Password and file needed to import an account" + }, + "negativeETH": { + "message": "Невозможно отправить отрицательные количества ETH." + }, + "networks": { + "message": "Сети" + }, + "newAccount": { + "message": "Новый Аккаунт" + }, + "newAccountNumberName": { + "message": "Аккаунт $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "Новый Контракт" + }, + "newPassword": { + "message": "Новый пароль (мин. 8 символов)" + }, + "newRecipient": { + "message": "Новый Получатель" + }, + "newRPC": { + "message": "Новый URL-адрес RPC" + }, + "next": { + "message": "Далее" + }, + "noAddressForName": { + "message": "Для этого имени не задан адрес." + }, + "noDeposits": { + "message": "Не было получено никаких депозитов" + }, + "noTransactionHistory": { + "message": "Нет истории транзакций." + }, + "noTransactions": { + "message": "Нет Транзакций" + }, + "notStarted": { + "message": "Не Начался" + }, + "oldUI": { + "message": "Старый Интерфейс" + }, + "oldUIMessage": { + "message": "Вы вернулись к старому интерфейсу. Вы можете вернуться к новому с помощью опции в раскрывающемся меню в правом верхнем углу." + }, + "or": { + "message": "или", + "description": "choice between creating or importing a new account" + }, + "passwordCorrect": { + "message": "Убедитесь, что ваш пароль правильный." + }, + "passwordMismatch": { + "message": "пароли не совпадают", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordShort": { + "message": "пароль недостаточно длинный", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "Вставьте свою личную строку:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "Вставьте здесь свою семенную фразу!" + }, + "personalAddressDetected": { + "message": "Персональный адрес обнаружен. Введите адрес контракта токена." + }, + "pleaseReviewTransaction": { + "message": "Проверьте транзакцию." + }, + "privacyMsg": { + "message": "Политика Конфиденциальности" + }, + "privateKey": { + "message": "Закрытый ключ", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "Предупреждение: никогда не раскрывайте этот ключ. Любой, у кого есть ваши личные ключи, может украсть любые активы, хранящиеся в вашем аккаунте." + }, + "privateNetwork": { + "message": "Частная сеть" + }, + "qrCode": { + "message": "Показать QR-код" + }, + "readdToken": { + "message": "Вы можете добавить этот токен в будущем, перейдя в “Добавить токен” в меню параметров вашего аккаунта." + }, + "readMore": { + "message": "Подробнее читайте здесь." + }, + "readMore2": { + "message": "Прочитайте больше." + }, + "receive": { + "message": "Получить" + }, + "recipientAddress": { + "message": "Адрес Получателя" + }, + "refundAddress": { + "message": "Ваш Адрес Возврата" + }, + "rejected": { + "message": "Отклонено" + }, + "resetAccount": { + "message": "Сбросить аккаунт" + }, + "restoreFromSeed": { + "message": "Восстановить от семенной фразы" + }, + "required": { + "message": "Необходимо" + }, + "retryWithMoreGas": { + "message": "Повторите попытку с более высокой ценой на газ здесь" + }, + "revealSeedWords": { + "message": "Раскрыть семенные слова" + }, + "revealSeedWordsWarning": { + "message": "Не восстанавливайте семенные слова в общественном месте! Эти слова могут использоваться для кражи всех ваших аккаунтах." + }, + "revert": { + "message": "Откат" + }, + "rinkeby": { + "message": "Rinkeby тестовая сеть" + }, + "ropsten": { + "message": "Ropsten тестовая сеть" + }, + "sampleAccountName": { + "message": "Например, Мой новый аккаунт", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "Сохранить" + }, + "saveAsFile": { + "message": "Сохранить как Файл", + "description": "Account export process" + }, + "saveSeedAsFile": { + "message": "Сохранить Семенные Слова Как Файл" + }, + "search": { + "message": "Поиск" + }, + "secretPhrase": { + "message": "Введите свою секретную двенадцатисловную фразу здесь, чтобы восстановить хранилище." + }, + "seedPhraseReq": { + "message": "семенные фразы длиной 12 слов" + }, + "select": { + "message": "Выбрать" + }, + "selectCurrency": { + "message": "Выберите Валюту" + }, + "selectService": { + "message": "Выберите Сервис" + }, + "selectType": { + "message": "Выберите Тип" + }, + "send": { + "message": "Послать" + }, + "sendETH": { + "message": "Отправить ETH" + }, + "sendTokens": { + "message": "Отправить Токены" + }, + "sendTokensAnywhere": { + "message": "Отправить Токены кому-либо с аккаунтом Ethereum" + }, + "settings": { + "message": "Настройки" + }, + "shapeshiftBuy": { + "message": "Купить с помощью Shapeshift" + }, + "showPrivateKeys": { + "message": "Показать приватные ключи" + }, + "showQRCode": { + "message": "Показать QR-код" + }, + "sign": { + "message": "Знак" + }, + "signMessage": { + "message": "Нодписать сообщение" + }, + "signNotice": { + "message": "Подписание этого сообщения может иметь \nопасные побочные эффекты. Только подписывайте сообщения \nс сайтов, которым вы полностью доверяете своим аккаунтом. Этот опасный метод будет удален в будущей версии." + }, + "sigRequest": { + "message": "Запрос на подпись" + }, + "sigRequested": { + "message": "Подпись Запрошена" + }, + "spaceBetween": { + "message": "между словами может быть только пробел" + }, + "status": { + "message": "Статус" + }, + "stateLogs": { + "message": "Логи Статуса" + }, + "stateLogsDescription": { + "message": "Логи статуса содержат ваши общедоступные адреса и отправленные транзакции." + }, + "submit": { + "message": "Отправить" + }, + "supportCenter": { + "message": "Посетите наш Центр поддержки" + }, + "symbolBetweenZeroTen": { + "message": "Символ должен быть от 0 до 10 символов." + }, + "takesTooLong": { + "message": "Занимает слишком долго?" + }, + "terms": { + "message": "Условия Эксплуатации" + }, + "testFaucet": { + "message": "Тестовый Кран" + }, + "to": { + "message": "К" + }, + "toETHviaShapeShift": { + "message": "$1 в ETH через ShapeShift", + "description": "system will fill in deposit type in start of message" + }, + "tokenAddress": { + "message": "Адрес Токена" + }, + "tokenAlreadyAdded": { + "message": "Токен уже добавлен." + }, + "tokenBalance": { + "message": "Баланс Вашых Tокенов:" + }, + "tokenSelection": { + "message": "Поиск токенов или выбор из нашего списка популярных токенов." + }, + "tokenSymbol": { + "message": "Символ Токена" + }, + "tokenWarning1": { + "message": "Следите за токенами, которые вы купили с помощью аккаунта MetaMask. Если вы купили токены, используя другой аккаунт, эти токены здесь не появятся." + }, + "total": { + "message": "Всего" + }, + "transactions": { + "message": "транзакции" + }, + "transactionMemo": { + "message": "Транзакционная записка (необязательно)" + }, + "transactionNumber": { + "message": "Номер Транзакции" + }, + "transfers": { + "message": "Переводы" + }, + "troubleTokenBalances": { + "message": "У нас были проблемы с загрузкой ваших токенов. Вы можете просмотреть их ", + "description": "Followed by a link (here) to view token balances" + }, + "twelveWords": { + "message": "Эти 12 слов - единственный способ восстановить ваши учетные записи MetaMask.\nСохраните их где-нибудь в безопасности и в тайне." + }, + "typePassword": { + "message": "Введите Пароль" + }, + "uiWelcome": { + "message": "Добро пожаловать в новый интерфейс (бета-версия)" + }, + "uiWelcomeMessage": { + "message": "Теперь вы используете новый интерфейс Metamask. Осмотритесь, попробуйте новые функции, такие как отправку токенов, и сообщите нам, есть ли у вас какие-либо проблемы." + }, + "unavailable": { + "message": "Недоступен" + }, + "unknown": { + "message": "Неизвестный" + }, + "unknownNetwork": { + "message": "Неизвестная частная сеть" + }, + "unknownNetworkId": { + "message": "Неизвестный идентификатор сети" + }, + "uriErrorMsg": { + "message": "Для URI требуется соответствующий префикс HTTP / HTTPS." + }, + "usaOnly": { + "message": "Только США", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "Используется различными клиентами" + }, + "useOldUI": { + "message": "Использовать старый интерфейс" + }, + "validFileImport": { + "message": "Вы должны выбрать действительный файл для импорта." + }, + "vaultCreated": { + "message": "Создано хранилище" + }, + "viewAccount": { + "message": "Посмотреть аккаунт" + }, + "visitWebSite": { + "message": "Посетите наш сайт" + }, + "warning": { + "message": "Предупреждение" + }, + "welcomeBeta": { + "message": "Добро пожаловать в MetaMask Beta" + }, + "whatsThis": { + "message": "Что это?" + }, + "yourSigRequested": { + "message": "Ваша подпись запрашивается" + }, + "youSign": { + "message": "Вы подписываете" + } +} -- cgit From 1eee1909ace9120e8ddedee6f525d48cd07368a4 Mon Sep 17 00:00:00 2001 From: Nico <35919226+AKingUltra@users.noreply.github.com> Date: Wed, 21 Mar 2018 19:41:17 +0100 Subject: Tranlate to German (#3575) Translation into German --- app/_locales/de/messages.json | 874 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 874 insertions(+) create mode 100644 app/_locales/de/messages.json (limited to 'app') diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json new file mode 100644 index 000000000..e2e08315d --- /dev/null +++ b/app/_locales/de/messages.json @@ -0,0 +1,874 @@ +{ + "accept": { + "message": "Annehmen" + }, + "account": { + "message": "Account" + }, + "accountDetails": { + "message": "Accountdetails" + }, + "accountName": { + "message": "Accountname" + }, + "address": { + "message": "Adresse" + }, + "addToken": { + "message": "Token hinzufügen" + }, + "amount": { + "message": "Betrag" + }, + "amountPlusGas": { + "message": "Betrag + Gas" + }, + "appDescription": { + "message": "Ethereum Browsererweiterung", + "description": "Die Beschreibung der Erweiterung" + }, + "appName": { + "message": "MetaMask", + "description": "Der Name der Erweiterung" + }, + "attemptingConnect": { + "message": "Versuch mit der Blockchain zu verbinden." + }, + "available": { + "message": "Verfügbar" + }, + "back": { + "message": "Zurück" + }, + "balance": { + "message": "Guthaben:" + }, + "balanceIsInsufficientGas": { + "message": "Guthaben unzureichend für den aktuellen gesamten Gasbetrag" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "Muss größer oder gleich $1 und kleiner oder gleich $2 sein.", + "description": "Helfer für die Eingabe von hex als dezimal" + }, + "blockiesIdenticon": { + "message": "Blockies Identicon verwenden" + }, + "borrowDharma": { + "message": "Mit Dharma ausleihen (Beta)" + }, + "builtInCalifornia": { + "message": "MetaMask wurde in Kalifornien entwickelt und gebaut." + }, + "buy": { + "message": "Kaufen" + }, + "buyCoinbase": { + "message": "Auf Coinbase kaufen" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase ist die weltweit bekannteste Möglichkeit bitcoin, ethereum und litecoin zu kaufen und verkaufen." + }, + "ok": { + "message": "Ok" + }, + "cancel": { + "message": "Abbrechen" + }, + "classicInterface": { + "message": "Klassische Oberfläche verwenden" + }, + "clickCopy": { + "message": "Klicken um zu kopieren" + }, + "confirm": { + "message": "Bestätigen" + }, + "confirmed": { + "message": "Bestätigt" + }, + "confirmContract": { + "message": "Smart Contract bestätigen" + }, + "confirmPassword": { + "message": "Passwort bestätigen" + }, + "confirmTransaction": { + "message": "Transaktion bestätigen" + }, + "continue": { + "message": "Weiter" + }, + "continueToCoinbase": { + "message": "Zu Coinbase fortfahren" + }, + "contractDeployment": { + "message": "Smart Contract ausführen" + }, + "conversionProgress": { + "message": "Umtausch in Arbeit" + }, + "copiedButton": { + "message": "Kopiert" + }, + "copiedClipboard": { + "message": "In die Zwischenablage kopiert" + }, + "copiedExclamation": { + "message": "Kopiert!" + }, + "copiedSafe": { + "message": "Ich habe es an einen sicheren Ort kopiert" + }, + "copy": { + "message": "Kopieren" + }, + "copyToClipboard": { + "message": "In die Zwischenablage kopieren" + }, + "copyButton": { + "message": " Kopieren " + }, + "copyPrivateKey": { + "message": "Das ist Ihr Private Key (klicken um zu kopieren)" + }, + "create": { + "message": "Erstellen" + }, + "createAccount": { + "message": "Account erstellen" + }, + "createDen": { + "message": "Erstellen" + }, + "crypto": { + "message": "Krypto", + "description": "Börsentyp (Kryptowährungen)" + }, + "currentConversion": { + "message": "Aktueller Umtausch" + }, + "currentNetwork": { + "message": "Aktuelles Netzwerk" + }, + "customGas": { + "message": "Gas anpassen" + }, + "customize": { + "message": "Anpassen" + }, + "customRPC": { + "message": "Spezieller RPC" + }, + "decimalsMustZerotoTen": { + "message": "Die Dezimalangabe muss mindestens 0 und nicht höher als 36 sein." + }, + "decimal": { + "message": "Dezimalangabe der Präzision" + }, + "defaultNetwork": { + "message": "Das Standardnetzwerk für Ether Transaktionen ist das Main Net." + }, + "denExplainer": { + "message": "Dein DEN ist dein passwortverschlüsselter Speicher innerhalb von MetaMask." + }, + "deposit": { + "message": "Einzahlen" + }, + "depositBTC": { + "message": "Zahle dein BTC in die unten stehende Adresse ein:" + }, + "depositCoin": { + "message": "Zahle deine $1 in die unten stehende Adresse ein", + "description": "Teilt dem Benutzer mit welchen Token er beim Einzahlen mit Shapeshift ausgewählt hat" + }, + "depositEth": { + "message": "Eth einzahlen" + }, + "depositEther": { + "message": "Ether einzahlen" + }, + "depositFiat": { + "message": "Fiat einzahlen" + }, + "depositFromAccount": { + "message": "Von einem anderen Account einzahlen" + }, + "depositShapeShift": { + "message": "Mit ShapeShift einzahlen" + }, + "depositShapeShiftExplainer": { + "message": "Wenn du andere Kryptowährungen besitzt, kannst du diese direkt mit Hilfe deiner MetaMask Wallet handeln und einzahlen. Du benötigst keinen Account." + }, + "details": { + "message": "Details" + }, + "directDeposit": { + "message": "Sofortige Einzahlung" + }, + "directDepositEther": { + "message": "Sofort Ether einzahlen" + }, + "directDepositEtherExplainer": { + "message": "Wenn du bereits Ether besitzt, ist die sofortige Einzahlung die schnellste Methode Ether in deine neue Wallet zu bekommen." + }, + "done": { + "message": "Fertig" + }, + "downloadStatelogs": { + "message": "Statelogs herunterladen" + }, + "dropped": { + "message": "Abgewählt" + }, + "edit": { + "message": "Editieren" + }, + "editAccountName": { + "message": "Namen des Accounts editieren" + }, + "emailUs": { + "message": "Schreib uns eine Mail!" + }, + "encryptNewDen": { + "message": "Verschlüssele deine neue DEN" + }, + "enterPassword": { + "message": "Passwort eingeben" + }, + "enterPasswordConfirm": { + "message": "Gib dein neues Passwort zur Bestätigung ein" + }, + "passwordNotLongEnough": { + "message": "Passwort ist nicht lang genug" + }, + "passwordsDontMatch": { + "message": "Passwörter stimmen nicht überein" + }, + "etherscanView": { + "message": "Account auf Etherscan anschauen" + }, + "exchangeRate": { + "message": "Wechselrate" + }, + "exportPrivateKey": { + "message": "Private Key exportieren" + }, + "exportPrivateKeyWarning": { + "message": "Der Export von Private Keys verläuft auf eigene Verantwortung." + }, + "failed": { + "message": "Fehlgeschlagen" + }, + "fiat": { + "message": "FIAT", + "description": "Börsentyp" + }, + "fileImportFail": { + "message": "Dateiimport fehlgeschlagen? Bitte hier klicken!", + "description": "Hilft dem Benutzer sein Benutzerkonto durch eine JSON Datei zu importieren" + }, + "followTwitter": { + "message": "Folge uns auf Twitter" + }, + "from": { + "message": "von" + }, + "fromToSame": { + "message": "Ziel- und Ursprungsadresse dürfen nicht identisch sein" + }, + "fromShapeShift": { + "message": "Von ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Kleiner Hinweis bzgl. der Gaskosten" + }, + "gasFee": { + "message": "Gasgebühren" + }, + "gasLimit": { + "message": "Gaslimit" + }, + "gasLimitCalculation": { + "message": "Wir berechnen das empfohlene Gaslimit basierend auf der Erfolgsrate des Netzwerks." + }, + "gasLimitRequired": { + "message": "Gaslimit benötigt" + }, + "gasLimitTooLow": { + "message": "Gaslimit muss mindestens 21000 betragen" + }, + "generatingSeed": { + "message": "Seed generieren..." + }, + "gasPrice": { + "message": "Gaspreis (GWEI)" + }, + "gasPriceCalculation": { + "message": "Wir berechnen den empfohlenen Gaspreis basierend auf der Erfolgsrate des Netzwerks." + }, + "gasPriceRequired": { + "message": "Gaspreis benötigt" + }, + "getEther": { + "message": "Ether holen" + }, + "getEtherFromFaucet": { + "message": "Ether für $1 vom Faucet holen", + "description": "Zeigt den Netzwerknamen für den Ether Faucet an" + }, + "greaterThanMin": { + "message": "Muss größer oder gleich $1 sein.", + "description": "Helfer für die Eingabe von hex als dezimal" + }, + "here": { + "message": "hier", + "description": "z.B. für klick hier für mehr Informationen (in Zusammenhang mit troubleTokenBalances)" + }, + "hereList": { + "message": "Hier ist eine Liste!!!!" + }, + "hide": { + "message": "Ausblenden" + }, + "hideToken": { + "message": "Token ausblenden" + }, + "hideTokenPrompt": { + "message": "Token ausblenden?" + }, + "howToDeposit": { + "message": "Wie möchtest du Ether einzahlen?" + }, + "holdEther": { + "message": "Es erlaubt dir ether & Token zu halten und dient dir als Verbindung zu dezentralisierten Applikationen." + }, + "import": { + "message": "Import", + "description": "Button um den Account aus einer ausgewählten Datei zu importieren" + }, + "importAccount": { + "message": "Account importieren" + }, + "importAccountMsg": { + "message":" Importierte Accounts werden nicht mit der Seed Wörterfolge deines ursprünglichen MetaMask Accounts verknüpft. Erfahre mehr über importierte Accounts." + }, + "importAnAccount": { + "message": "Einen Account importieren" + }, + "importDen": { + "message": "Vorhandenes DEN importieren" + }, + "imported": { + "message": "Importiert", + "description": "Status der angezeigt wird wenn ein Benutzerkonto vollständig in das Schlüsselbund geladen wurde." + }, + "infoHelp": { + "message": "Info & Hilfe" + }, + "insufficientFunds": { + "message": "Nicht genügend Guthaben." + }, + "insufficientTokens": { + "message": "Nicht genügend Token." + }, + "invalidAddress": { + "message": "Ungültige Adresse" + }, + "invalidAddressRecipient": { + "message": "Empfängeradresse ist unzulässig" + }, + "invalidGasParams": { + "message": "Ungültige Gasparameter" + }, + "invalidInput": { + "message": "Ungültige Eingabe." + }, + "invalidRequest": { + "message": "Ungültige Abfrage" + }, + "invalidRPC": { + "message": "Ungültige RPC URI" + }, + "jsonFail": { + "message": "Irgendetwas ist schief gelaufen. Bitte überprüfe ob deine JSON Datei korrekt formatiert ist.“ + }, + "jsonFile": { + "message": "JSON Datei", + "description": "Dateiformat für das Importieren eines Accounts" + }, + "kovan": { + "message": "Kovan Testnetzwerk" + }, + "knowledgeDataBase": { + "message": "Schau in unsere Wissensdatenbank" + }, + "max": { + "message": "Max" + }, + "lessThanMax": { + "message": "Muss kleiner oder gleich $1 sein.", + "description": "Helfer für die Eingabe von hex als dezimal" + }, + "likeToAddTokens": { + "message": "Möchtest du diese Token hinzufügen?" + }, + "links": { + "message": "Links" + }, + "limit": { + "message": "Limit" + }, + "loading": { + "message": "Laden..." + }, + "loadingTokens": { + "message": "Token laden..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "login": { + "message": "Login" + }, + "logout": { + "message": "Ausloggen" + }, + "loose": { + "message": "Frei" + }, + "loweCaseWords": { + "message": "Die Wörter der Seed Wörterfolgen sind alle kleingeschrieben" + }, + "mainnet": { + "message": "Ethereum Hauptnetzwerk (Main Net)" + }, + "message": { + "message": "Nachricht" + }, + "metamaskDescription": { + "message": "MetaMask ist ein sicherer Identitätssafe für Ethereum." + }, + "min": { + "message": "Minimum" + }, + "myAccounts": { + "message": "Meine Accounts" + }, + "mustSelectOne": { + "message": "Du musst mindestens 1 Token auswählen." + }, + "needEtherInWallet": { + "message": "Um dezentralisierte Applikationen mit MetaMask verwenden zu können, benötigst du Ether in deiner Wallet." + }, + "needImportFile": { + "message": "Für den Import musst du eine Datei auswählen.", + "description": "Benutzer importiert ein Benutzerkonto und muss eine Datei hinzufügen um fortzufahren" + }, + "needImportPassword": { + "message": "Für die ausgewählte Datei muss ein Passwort eingegeben werden.", + "description": "Passwort und Datei sind notwendig um einen Account zu importieren" + }, + "negativeETH": { + "message": "Negative ETH Beträge können nicht versendet werden." + }, + "networks": { + "message": "Netzwerke" + }, + "newAccount": { + "message": "Neuer Account" + }, + "newAccountNumberName": { + "message": "Account $1", + "description": "Standardname für einen weiteren Account der angelegt wird, wenn create account screen geklickt wird" + }, + "newContract": { + "message": "Neuer Smart Contract" + }, + "newPassword": { + "message": "Neues Passwort (min. 8 Zeichen)" + }, + "newRecipient": { + "message": "Neuer Empfänger" + }, + "newRPC": { + "message": "Neue RPC URL" + }, + "next": { + "message": "Weiter" + }, + "noAddressForName": { + "message": "Für den angegebene Namen wurde keine Adresse eingegeben." + }, + "noDeposits": { + "message": "Keine Einzahlung erhalten" + }, + "noTransactionHistory": { + "message": "Keine Transaktionshistorie." + }, + "noTransactions": { + "message": "Keine Transaktionen" + }, + "notStarted": { + "message": "Nicht gestartet" + }, + "oldUI": { + "message": "Alte Oberfläche" + }, + "oldUIMessage": { + "message": "Du bist zur alten Oberfläche zurückgewechselt. Du kannst mit Hilfe der Option im oberen rechten Dropdown Menü zur neuen Oberfläche zurückwechseln." + }, + "or": { + "message": "oder", + "description": "Wahl zwischen erstellen oder importieren eines Accounts." + }, + "passwordCorrect": { + "message": "Bitte überzeuge dich davon, dass dein Passwort korrekt ist." + }, + "passwordMismatch": { + "message": "Passwörter stimmen nicht überein", + "description": "Im Passwort erstellen Prozess stimmen beide Passwörter nicht miteinander überein" + }, + "passwordShort": { + "message": "Passwort ist nicht lang genug", + "description": "Im Passwort erstellen Prozess ist das eingegebene Passwort nicht lang genug um sicher zu sein" + }, + "pastePrivateKey": { + "message": "Füge deine Private Key Zeichenfolge hier ein:", + "description": "Für den Import eine Accounts mit Hilfe eines Private Keys" + }, + "pasteSeed": { + "message": "Füge deine Seed Wörterfolge hier ein!" + }, + "personalAddressDetected": { + "message": "Personalisierte Adresse identifiziert. Bitte füge die Token Contract Adresse ein." + }, + "pleaseReviewTransaction": { + "message": "Bitte überprüfe deine Transaktion." + }, + "privacyMsg": { + "message": "Datenschutzrichtlinie" + }, + "privateKey": { + "message": "Private Key", + "description": "Wähle diesen Dateityp um damit einen Account zu importieren" + }, + "privateKeyWarning": { + "message": "Warnung: Niemals jemanden deinen Private Key mitteilen. Jeder der im Besitz deines Private Keys ist, kann jegliches Guthaben deines Accounts stehlen." + }, + "privateNetwork": { + "message": "Privates Netzwerk" + }, + "qrCode": { + "message": "QR Code anzeigen" + }, + "readdToken": { + "message": "Du kannst diesen Token zukünftig wieder hinzufügen indem du in den Menüpunkt \"Token hinzufügen"\ in den Einstellungen deines Accounts gehst." + }, + "readMore": { + "message": "Hier mehr erfahren." + }, + "readMore2": { + "message": "Mehr erfahren." + }, + "receive": { + "message": "Erhalten" + }, + "recipientAddress": { + "message": "Empfängeradresse" + }, + "refundAddress": { + "message": "Rückerstattungsadresse" + }, + "rejected": { + "message": "Abgelehnt" + }, + "resetAccount": { + "message": "Account zurücksetzten" + }, + "restoreFromSeed": { + "message": "Mit Hilfe der Seed Wörterfolge wiederherstellen." + }, + "restoreVault": { + "message": "Vault wiederherstellen" + }, + "required": { + "message": "Benötigt" + }, + "retryWithMoreGas": { + "message": "Versuche es hier mit einem höheren Gaspreis noch einmal" + }, + "walletSeed": { + "message": "Wallet Seed" + }, + "revealSeedWords": { + "message": "Seed Wörterfolge anzeigen" + }, + "revealSeedWordsWarning": { + "message": "Bitte niemals deine Seed Wörterfolge an einem öffentlichen Ort kenntlich machen. Mit diesen Wörtern können alle deine Accounts gestohlen werden." + }, + "revert": { + "message": "Zurück gehen" + }, + "rinkeby": { + "message": "Rinkeby Testnetzwerk" + }, + "ropsten": { + "message": "Ropsten Testnetzwerk" + }, + "currentRpc": { + "message": "Aktueller RPC" + }, + "connectingToMainnet": { + "message": "Verbinde zum Ethereum Hauptnetzwerk (Main Net)" + }, + "connectingToRopsten": { + "message": " Verbinde zum Ropsten Testnetzwerk" + }, + "connectingToKovan": { + "message": " Verbinde zum Kovan Testnetzwerk" + }, + "connectingToRinkeby": { + "message": " Verbinde zum Rinkeby Testnetzwerk" + }, + "connectingToUnknown": { + "message": "Verbinde zu einem unbekanntem Netzwerk" + }, + "sampleAccountName": { + "message": "Z.B. mein neuer Account", + "description": "Dem Benutzer helfen das Konzept des Hinzufügens eines menschlich lesbaren Namen für den Account hinzuzufügen" + }, + "save": { + "message": "Speichern" + }, + "saveAsFile": { + "message": "Als Datei speichern", + "description": "Prozess des Exportieren eines Accounts" + }, + "saveSeedAsFile": { + "message": "Seed Wörterfolge als Datei speichern" + }, + "search": { + "message": "Suche" + }, + "secretPhrase": { + "message": "Gib die 12 Wörter deiner geheimem Wörterfolge ein um deinen Vault wiederherzustellen." + }, + "newPassword8Chars": { + "message": "Neues Passwort (min. 8 Zeichen)" + }, + "seedPhraseReq": { + "message": "Seed Wörterfolgen bestehen aus 12 Wörtern" + }, + "select": { + "message": "Auswählen" + }, + "selectCurrency": { + "message": "Währung auswählen" + }, + "selectService": { + "message": "Service auswählen" + }, + "selectType": { + "message": "Typ auswählen" + }, + "send": { + "message": "Senden" + }, + "sendETH": { + "message": "ETH senden" + }, + "sendTokens": { + "message": "Token senden" + }, + "onlySendToEtherAddress": { + "message": "ETH nur zu einer Ethereum Adresse senden." + }, + "sendTokensAnywhere": { + "message": "Token zu einer beliebigen Person mit einem Ethereumaccount senden" + }, + "settings": { + "message": "Einstellungen" + }, + "info": { + "message": "Info" + }, + "shapeshiftBuy": { + "message": "Mit Shapeshift kaufen" + }, + "showPrivateKeys": { + "message": "Private Keys anzeigen" + }, + "showQRCode": { + "message": "QR Code anzeigen" + }, + "sign": { + "message": "Unterschreiben" + }, + "signed": { + "message": "Unterschrieben" + }, + "signMessage": { + "message": "Nachricht unterschreiben" + }, + "signNotice": { + "message": "Das Unterschreiben dieser Nachricht kann gefährliche Nebeneffekte haben. Bitte nur Nachrichten von Webseiten unterschreiben denen du deinen vollständigen Account anvertrauen würdest. Diese gefährliche Variante wird in zukünftigen Versionen entfernt werden." + }, + "sigRequest": { + "message": "Unterschriftsanfrage" + }, + "sigRequested": { + "message": "Unterschrift angefragt" + }, + "spaceBetween": { + "message": "Es darf nur ein Leerzeichen zwischen den Wörtern sein" + }, + "status": { + "message": "Status" + }, + "stateLogs": { + "message": "Statelogs" + }, + "stateLogsDescription": { + "message": "Statelogs zeigen die Public Adresse und die gesendeten Transaktionen deines Accounts." + }, + "stateLogError": { + "message": "Fehler beim Abfragen der Statelogs." + }, + "submit": { + "message": "Einreichen" + }, + "submitted": { + "message": "Eingereicht" + }, + "supportCenter": { + "message": "Gehe zu unserem Support Center" + }, + "symbolBetweenZeroTen": { + "message": "Das Symbol muss zwischen 0 und 10 Zeichen haben." + }, + "takesTooLong": { + "message": "Dauert es zu lang?" + }, + "terms": { + "message": "Nutzungsbedingungen" + }, + "testFaucet": { + "message": "Testfaucet" + }, + "to": { + "message": "An:" + }, + "toETHviaShapeShift": { + "message": "$1 an ETH via ShapeShift", + "description": "Das System wird den Einzahlungstyp im Beginn der Nachricht eintragen" + }, + "tokenAddress": { + "message": "Tokenadresse" + }, + "tokenAlreadyAdded": { + "message": "Der Token wurde bereits hinzugefügt." + }, + "tokenBalance": { + "message": "Dein Tokenguthaben beträgt:" + }, + "tokenSelection": { + "message": "Suche nach Token oder wähle aus einer Liste der beliebtesten Token aus." + }, + "tokenSymbol": { + "message": "Tokensymbol" + }, + "tokenWarning1": { + "message": "Behalte die Token die du mit deinem MetaMask Account gekauft hast im Auge. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt.“ + }, + "total": { + "message": "Gesamt" + }, + "transactions": { + "message": "Transaktionen" + }, + "transactionMemo": { + "message": "Transaktionsmemo (optional)" + }, + "transactionNumber": { + "message": "Transaktionsnummer" + }, + "transfers": { + "message": "Transfers" + }, + "troubleTokenBalances": { + "message": "Wir haben Schwierigkeiten dein Tokenguthaben zu laden. Du kannst es hier anzeigen lassen", + "description": "Gefolgt von einem Link (hier) um die Tokenguthaben anzuzeigen" + }, + "twelveWords": { + "message": "Diese 12 Wörter stellen die einzige Möglichkeit dar deinen MetaMask Account wiederherzustellen. Speichere sie daher an einem sicheren und geheimen Ort.” + }, + "typePassword": { + "message": "Passwort eingeben" + }, + "uiWelcome": { + "message": "Willkommen zur neuen Oberfläche (Beta)" + }, + "uiWelcomeMessage": { + "message": "Du verwendest nun die neue Metamask Oberfläche. Schau dich um, teste die neuen Features wie z.B. das Senden von Token und lass es uns wissen falls du irgendwelche Probleme hast." + }, + "unapproved": { + "message": "Nicht genehmigt" + }, + "unavailable": { + "message": "Nicht verfügbar" + }, + "unknown": { + "message": "Unbekannt" + }, + "unknownNetwork": { + "message": "Unbekanntes privates Netzwerk" + }, + "uriErrorMsg": { + "message": "URIs benötigen die korrekten HTTP/HTTPS Präfixe." + }, + "unknownNetworkId": { + "message": "Unbekannte Netzwerk ID" + }, + "usaOnly": { + "message": "Nur USA ", + "description": "Diese Börse ist nur für Einwohner der USA verfügbar" + }, + "usedByClients": { + "message": "Verwendet von einer Reihe verschiedenen Kunden" + }, + "useOldUI": { + "message": "Alte Oberfläche verwenden" + }, + "validFileImport": { + "message": "Du musst eine gültige Datei für den Import auswählen." + }, + "vaultCreated": { + "message": "Vault erstellt" + }, + "viewAccount": { + "message": " Account einsehen" + }, + "visitWebSite": { + "message": "Gehe zu unsere Webseite" + }, + "warning": { + "message": "Warnung" + }, + "welcomeBeta": { + "message": "Willkommen zu MetaMask Beta" + }, + "whatsThis": { + "message": "Was ist das?" + }, + "yourSigRequested": { + "message": "Deine Unterschrift wird angefordert" + }, + "youSign": { + "message": "Du unterschreibst" + } +} + -- cgit From dc4752c703d44e2ee5ac8636d5fced931299ab6a Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 21 Mar 2018 11:44:31 -0700 Subject: i18n - fix german json formatting --- app/_locales/de/messages.json | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json index e2e08315d..0bdce516c 100644 --- a/app/_locales/de/messages.json +++ b/app/_locales/de/messages.json @@ -369,7 +369,7 @@ "infoHelp": { "message": "Info & Hilfe" }, - "insufficientFunds": { + "insufficientFunds": { "message": "Nicht genügend Guthaben." }, "insufficientTokens": { @@ -394,7 +394,7 @@ "message": "Ungültige RPC URI" }, "jsonFail": { - "message": "Irgendetwas ist schief gelaufen. Bitte überprüfe ob deine JSON Datei korrekt formatiert ist.“ + "message": "Irgendetwas ist schief gelaufen. Bitte überprüfe ob deine JSON Datei korrekt formatiert ist." }, "jsonFile": { "message": "JSON Datei", @@ -557,7 +557,7 @@ "description": "Wähle diesen Dateityp um damit einen Account zu importieren" }, "privateKeyWarning": { - "message": "Warnung: Niemals jemanden deinen Private Key mitteilen. Jeder der im Besitz deines Private Keys ist, kann jegliches Guthaben deines Accounts stehlen." + "message": "Warnung: Niemals jemanden deinen Private Key mitteilen. Jeder der im Besitz deines Private Keys ist, kann jegliches Guthaben deines Accounts stehlen." }, "privateNetwork": { "message": "Privates Netzwerk" @@ -566,7 +566,7 @@ "message": "QR Code anzeigen" }, "readdToken": { - "message": "Du kannst diesen Token zukünftig wieder hinzufügen indem du in den Menüpunkt \"Token hinzufügen"\ in den Einstellungen deines Accounts gehst." + "message": "Du kannst diesen Token zukünftig wieder hinzufügen indem du in den Menüpunkt \"Token hinzufügen\" in den Einstellungen deines Accounts gehst." }, "readMore": { "message": "Hier mehr erfahren." @@ -782,7 +782,7 @@ "message": "Tokensymbol" }, "tokenWarning1": { - "message": "Behalte die Token die du mit deinem MetaMask Account gekauft hast im Auge. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt.“ + "message": "Behalte die Token die du mit deinem MetaMask Account gekauft hast im Auge. Wenn du Token mit einem anderen Account gekauft hast, werden diese hier nicht angezeigt." }, "total": { "message": "Gesamt" @@ -804,7 +804,7 @@ "description": "Gefolgt von einem Link (hier) um die Tokenguthaben anzuzeigen" }, "twelveWords": { - "message": "Diese 12 Wörter stellen die einzige Möglichkeit dar deinen MetaMask Account wiederherzustellen. Speichere sie daher an einem sicheren und geheimen Ort.” + "message": "Diese 12 Wörter stellen die einzige Möglichkeit dar deinen MetaMask Account wiederherzustellen. Speichere sie daher an einem sicheren und geheimen Ort." }, "typePassword": { "message": "Passwort eingeben" @@ -871,4 +871,3 @@ "message": "Du unterschreibst" } } - -- cgit From 93622392312b89bcf0a8d5bcc132d800867c8704 Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 21 Mar 2018 14:16:00 -0700 Subject: v4.3.0 --- app/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/manifest.json b/app/manifest.json index 6fcf6cd7c..0aac1c8df 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "__MSG_appName__", "short_name": "__MSG_appName__", - "version": "4.2.0", + "version": "4.3.0", "manifest_version": 2, "author": "https://metamask.io", "description": "__MSG_appDescription__", -- cgit From 47e09b0f2b42922a5225cd1b023fc9f8d1ab52a1 Mon Sep 17 00:00:00 2001 From: artiya4u Date: Fri, 23 Mar 2018 02:33:57 +0700 Subject: First add Thai translate. --- app/_locales/th/messages.json | 819 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 819 insertions(+) create mode 100644 app/_locales/th/messages.json (limited to 'app') diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json new file mode 100644 index 000000000..fd41bd8b9 --- /dev/null +++ b/app/_locales/th/messages.json @@ -0,0 +1,819 @@ +{ + "accept": { + "message": "ยอมรับ" + }, + "account": { + "message": "บัญชี" + }, + "accountDetails": { + "message": "รายละเอียดบัญชี" + }, + "accountName": { + "message": "ชื่อบัญชี" + }, + "address": { + "message": "แอดเดรส" + }, + "addCustomToken": { + "message": "เพิ่มโทเค็นด้วยตัวเอง" + }, + "addToken": { + "message": "เพิ่มโทเค็น" + }, + "addTokens": { + "message": "เพิ่มหลายโทเค็น" + }, + "amount": { + "message": "จำนวน" + }, + "amountPlusGas": { + "message": "จำนวน + แก๊ส" + }, + "appDescription": { + "message": "ส่วนขยายเบราว์เซอร์สำหรับอีเธอเรียม", + "description": "The description of the application" + }, + "appName": { + "message": "MetaMask", + "description": "The name of the application" + }, + "attemptingConnect": { + "message": "กำลังเชื่อมต่อกับบล็อกเชน" + }, + "attributions": { + "message": "อ้างถึง" + }, + "available": { + "message": "ว่าง" + }, + "back": { + "message": "กลับ" + }, + "balance": { + "message": "ยอดคงเหลือ:" + }, + "balances": { + "message": "ยอดคงเหลือของคุณ" + }, + "balanceIsInsufficientGas": { + "message": "ยอดคงเหลือไม่พอสำหรับจ่ายค่าแก๊สทั้งหมด" + }, + "beta": { + "message": "เบต้า" + }, + "betweenMinAndMax": { + "message": "ต้องมากกว่าหรือเท่ากับ $1 และน้อยกว่าหรือเท่ากับ $2", + "description": "helper for inputting hex as decimal input" + }, + "blockiesIdenticon": { + "message": "ใช้งาน Blockies Identicon" + }, + "borrowDharma": { + "message": "ยืมด้วย Dharma (เบต้า)" + }, + "builtInCalifornia": { + "message": "MetaMask ออกแบบและพัฒนาที่แคลิฟอร์เนีย" + }, + "buy": { + "message": "ซื้อ" + }, + "buyCoinbase": { + "message": "ซื้อด้วย Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase เป็นที่ซื้อขายบิตคอยน์ไลท์คอยน์และอีเธอเรียมที่ได้รับความนิยมสูงสุดในโลก" + }, + "cancel": { + "message": "ยกเลิก" + }, + "classicInterface": { + "message": "ใช้หน้าตาแบบเก่า" + }, + "clickCopy": { + "message": "กดเพื่อคัดลอก" + }, + "confirm": { + "message": "ยืนยัน" + }, + "confirmContract": { + "message": "ยืนยันสัญญา" + }, + "confirmPassword": { + "message": "ยืนยันรหัสผ่าน" + }, + "confirmTransaction": { + "message": "ยืนยันการทำรายการธุรกรรม" + }, + "continue": { + "message": "ทำต่อไป" + }, + "continueToCoinbase": { + "message": "ทำต่อไปที่ Coinbase" + }, + "contractDeployment": { + "message": "การติดตั้งสัญญา" + }, + "conversionProgress": { + "message": "กำลังดำเนินการแปลงหน่วย" + }, + "copiedButton": { + "message": "คัดลอกแล้ว" + }, + "copiedClipboard": { + "message": "คัดลอกไปที่คลิบบอร์ดแล้ว" + }, + "copiedExclamation": { + "message": "คัดลอกแล้ว!" + }, + "copiedSafe": { + "message": "ฉันได้คัดลอกเก็บไว้ในที่ปลอดภัยเรียบร้อยแล้ว" + }, + "copy": { + "message": "คัดลอก" + }, + "copyToClipboard": { + "message": "คัดลอกไปคลิปบอร์ด" + }, + "copyButton": { + "message": " คัดลอก " + }, + "copyPrivateKey": { + "message": "นี่คือคีย์ส่วนตัวของคุณ(กดเพื่อคัดลอก)" + }, + "create": { + "message": "สร้าง" + }, + "createAccount": { + "message": "สร้างบัญชี" + }, + "createDen": { + "message": "สร้าง" + }, + "crypto": { + "message": "คริปโต", + "description": "Exchange type (cryptocurrencies)" + }, + "currentConversion": { + "message": "อัตราแลกเปลี่ยนปัจจุบัน" + }, + "currentNetwork": { + "message": "เครือข่ายปัจจุบัน" + }, + "customGas": { + "message": "กำหนดค่าแก็สเอง" + }, + "customize": { + "message": "กำหนดค่าเอง" + }, + "customRPC": { + "message": "กำหนดค่า RPC เอง" + }, + "decimalsMustZerotoTen": { + "message": "จำนวนต้องมากกว่า 0 และไม่เกิน 36" + }, + "decimal": { + "message": "ตำแหน่งของทศนิยม" + }, + "defaultNetwork": { + "message": "ค่าเริ่มต้นของเครือข่ายสำหรับทำรายการธุรกรรมอีเธอร์คือ Main Net" + }, + "denExplainer": { + "message": "DEN ของคุณคือตัวเก็บข้อมูลที่เข้ารหัสไว้ด้วยรหัสผ่านของคุณภายใน MetaMask " + }, + "deposit": { + "message": "ฝาก" + }, + "depositBTC": { + "message": "ฝากบิตคอยน์ของคุณไปที่แอดเดรสด้านล่างนี้:" + }, + "depositCoin": { + "message": "ฝาก $1 ของคุณไปที่แอดเดรสด้านล่างนี้:", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "ฝากอีเธอร์" + }, + "depositEther": { + "message": "ฝากอีเธอร์" + }, + "depositFiat": { + "message": "ฝากด้วยเงินตรา" + }, + "depositFromAccount": { + "message": "ฝากจากบัญชีอื่น" + }, + "depositShapeShift": { + "message": "ฝากด้วย ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "ถ้ามีเงินสกุลอื่นอยู่ก็สามารถแลกเงินและฝากเป็นอีเธอร์ได้โดยตรงเข้ากระเป๋า MetaMask ได้เลยไม่ต้องสมัครบัญชี" + }, + "details": { + "message": "รายละเอียด" + }, + "directDeposit": { + "message": "ฝากตรง" + }, + "directDepositEther": { + "message": "ฝากอีเธอร์โดยตรง" + }, + "directDepositEtherExplainer": { + "message": "ถ้าคุณมีอีเธอร์อยู่แล้ววิธีการที่เร็วที่สุดในการเอาเงินเข้ากระเป๋าใหม่ก็คือการโอนตรงๆ" + }, + "done": { + "message": "เสร็จสิ้น" + }, + "downloadStatelogs": { + "message": "ดาวน์โหลดล็อกสถานะ" + }, + "edit": { + "message": "แก้ไข" + }, + "editAccountName": { + "message": "แก้ไขชื่อบัญชี" + }, + "emailUs": { + "message": "อีเมลหาเรา!" + }, + "encryptNewDen": { + "message": "เข้ารหัส DEN ของคุณ" + }, + "enterPassword": { + "message": "ใส่รหัสผ่าน" + }, + "enterPasswordConfirm": { + "message": "ใส่รหัสผ่านอีกครั้งเพื่อยืนยัน" + }, + "etherscanView": { + "message": "ดูบัญชีบน Etherscan" + }, + "exchangeRate": { + "message": "อัตราแลกเปลี่ยน" + }, + "exportPrivateKey": { + "message": "ส่งออกคีย์ส่วนตัว" + }, + "exportPrivateKeyWarning": { + "message": "ส่งออกคีย์ส่วนตัวโดยคุณรับความเสี่ยงเอง" + }, + "failed": { + "message": "ล้มเหลว" + }, + "fiat": { + "message": "เงินตรา", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "นำเข้าไฟล์ไม่สำเหร็จ กดที่นี่!", + "description": "Helps user import their account from a JSON file" + }, + "followTwitter": { + "message": "ติดตามเราบนทวิตเตอร์" + }, + "from": { + "message": "จาก" + }, + "fromToSame": { + "message": "แอดเดรสที่ส่งกับที่รับจะต้องไม่ไช่อันเดียวกัน" + }, + "fromShapeShift": { + "message": "จาก ShapeShift" + }, + "gas": { + "message": "แก็ส", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "ค่าแก๊ส" + }, + "gasLimit": { + "message": "วงเงินแก็ส" + }, + "gasLimitCalculation": { + "message": "เราคำนวณวงเงินแก็สที่แนะนำตามอัตราความสำเร็จบนเครือข่าย" + }, + "gasLimitRequired": { + "message": "ต้องกำหนดวงเงินแก็ส" + }, + "gasLimitTooLow": { + "message": "วงเงินแก็สต้องอย่างน้อย 21000" + }, + "generatingSeed": { + "message": "กำลังสร้างชีด..." + }, + "gasPrice": { + "message": "ราคาแก๊ส (GWEI)" + }, + "gasPriceCalculation": { + "message": "เราคำนวณวงเงินแก็สที่แนะนำตามอัตราความสำเร็จบนเครือข่าย" + }, + "gasPriceRequired": { + "message": "ต้องมีราคาแก๊ส" + }, + "getEther": { + "message": "รับอีเธอร์" + }, + "getEtherFromFaucet": { + "message": "รับอีเธอร์ที่ปล่อยจาก $1", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": "ต้องมากกว่าหรือเท่ากับ $1.", + "description": "helper for inputting hex as decimal input" + }, + "here": { + "message": "ที่นี่", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hereList": { + "message": "รายการอยู่ที่นี่!!!!" + }, + "hide": { + "message": "ซ่อน" + }, + "hideToken": { + "message": "ซ่อนโทเค็น" + }, + "hideTokenPrompt": { + "message": "ซ่อนโทเค็นหรือไม่?" + }, + "howToDeposit": { + "message": "คุณต้องการฝากอีเธอร์อย่างไร?" + }, + "holdEther": { + "message": "ช่วยคุณถืออีเทอร์และโทเค็นและทำหน้าที่เป็นสะพานเชื่อมต่อกับแอพพลิเคชันแบบกระจาย" + }, + "import": { + "message": "นำเข้า", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "นำเข้าบัญชี" + }, + "importAccountMsg": { + "message":"บัญชีที่นำเข้าจะไม่ถูกรวมกับบัญชีที่สร้างด้วยคำเเริ่มต้นบนเมต้ามาร์สในตอนแรก เรียนรู้เพิ่มเติมเกี่ยวกับบัญชีที่นำเข้า" + }, + "importAnAccount": { + "message": "นำเข้าบัญชี" + }, + "importDen": { + "message": "นำเข้า DEN ที่มีอยู่แล้ว" + }, + "imported": { + "message": "นำเข้าเรียบร้อย", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "infoHelp": { + "message": "ข้อมูลและความช่วยเหลือ" + }, + "insufficientFunds": { + "message": "เงินทุนไม่เพียงพอ" + }, + "insufficientTokens": { + "message": "โทเค็นไม่เพียงพอ" + }, + "invalidAddress": { + "message": "แอดแดรสไม่ถูกต้อง" + }, + "invalidAddressRecipient": { + "message": "แอดแดรสผู้รับไม่ถูกต้อง" + }, + "invalidGasParams": { + "message": "ตั้งค่าแก๊สไม่ถูกต้อง" + }, + "invalidInput": { + "message": "อินพุทไม่ถูกต้อง" + }, + "invalidRequest": { + "message": "คำร้องขอไม่ถูกต้อง" + }, + "invalidRPC": { + "message": "RPC URI ไม่ถูกต้อง" + }, + "jsonFail": { + "message": "เกิดบางอย่างผิดพลาด โปรดตรวจสอบว่าไฟล์ JSON ของคุณมีรูปแบบที่ถูกต้อง." + }, + "jsonFile": { + "message": "ไฟล์ JSON", + "description": "format for importing an account" + }, + "kovan": { + "message": "เครือข่ายทดสอบ Kovan" + }, + "knowledgeDataBase": { + "message": "ไปที่ฐานความรู้ของเรา" + }, + "lessThanMax": { + "message": "ต้องน้อยกว่าหรือเท่ากับ $1.", + "description": "helper for inputting hex as decimal input" + }, + "likeToAddTokens": { + "message": "คุณต้องการเพิ่มโทเค็นเหล่านี้หรือไม่?" + }, + "limit": { + "message": "ข้อจำกัด" + }, + "loading": { + "message": "กำลังโหลด..." + }, + "loadingTokens": { + "message": "กำลังโหลดโทเค็น..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "login": { + "message": "เข้าสู่ระบบ" + }, + "logout": { + "message": "ออกจากระบบ" + }, + "loose": { + "message": "อิสระ" + }, + "loweCaseWords": { + "message": "กลุ่มคำชีดมีเพียงตัวพิมพ์เล็กเท่านั้น" + }, + "mainnet": { + "message": "เครือข่ายอีเธอเรียมหลัก" + }, + "message": { + "message": "ข้อความ" + }, + "metamaskDescription": { + "message": "MetaMask คือที่เก็บตัวตนนิรภัยสำหรับอีเธอเรียม" + }, + "min": { + "message": "ขั้นต่ำ" + }, + "myAccounts": { + "message": "บัญชีของฉัน" + }, + "mustSelectOne": { + "message": "ต้องเลือกอย่างน้อย 1 โทเค็น" + }, + "needEtherInWallet": { + "message": "ในการโต้ตอบกับแอพพลิเคชันแบบกระจายโดยใช้ MetaMask คุณจะต้องใช้อีเธอร์ในกระเป๋าเงินของคุณ" + }, + "needImportFile": { + "message": "คุณต้องเลือกไฟล์ที่จะนำเข้า", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "คุณต้องป้อนรหัสผ่านสำหรับไฟล์ที่เลือก", + "description": "Password and file needed to import an account" + }, + "negativeETH": { + "message": "ไม่สามารถส่งอีเธอร์เป็นจำนวนติดลบได้" + }, + "networks": { + "message": "เครือข่าย" + }, + "newAccount": { + "message": "บัญชีใหม่" + }, + "newAccountNumberName": { + "message": "บัญชี $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "สร้างสัญญาใหม่" + }, + "newPassword": { + "message": "รหัสผ่านใหม่(ขั้นต่ำ 8 ตัวอักษร)" + }, + "newRecipient": { + "message": "ผู้รับใหม่" + }, + "newRPC": { + "message": "RPC URL ใหม่" + }, + "next": { + "message": "ถัดไป" + }, + "noAddressForName": { + "message": "ยังไม่มีแอดแดรสไหนตั้งในชื่อนี้" + }, + "noDeposits": { + "message": "ไม่มีเงินฝากเข้ามา" + }, + "noTransactionHistory": { + "message": "ไม่มีรายการธุรกรรมในอดีต" + }, + "noTransactions": { + "message": "ไม่มีรายการธุรกรรม" + }, + "notStarted": { + "message": "ยังไม่เริ่ม" + }, + "oldUI": { + "message": "หน้าตาแบบเก่า" + }, + "oldUIMessage": { + "message": "คุณได้เปลี่ยนเป็นหน้าตาแบบเก่าแล้ว คุณสามารถเปลี่ยนเป็นหน้าตาแบบใหม่ได้โดยไปที่ตัวเลือกตรงเมนูมุมขวาบน" + }, + "or": { + "message": "หรือ", + "description": "choice between creating or importing a new account" + }, + "passwordCorrect": { + "message": "โปรดตรวจสอบว่ารหัสผ่านของคุณถูกต้อง" + }, + "passwordMismatch": { + "message": "รหัสผ่านไม่ตรงกัน", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordShort": { + "message": "รหัสผ่านไม่ยาวพอ", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "วางคีย์ส่วนตัวของคุณที่นี่:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "วางคำชีดของคุณที่นี่!" + }, + "personalAddressDetected": { + "message": "ตรวจพบแอดแดรสส่วนตัวแล้ว ใส่แอดแดรสสัญญาโทเค็น" + }, + "pleaseReviewTransaction": { + "message": "โปรดตรวจสอบธุรกรรมของคุณ" + }, + "privacyMsg": { + "message": "นโยบายสความเป็นส่วนตัว" + }, + "privateKey": { + "message": "คีย์ส่วนตัว", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "คำเตือน: ห้ามเปิดเผยคีย์นี้ ทุกคนที่มีคีย์ส่วนตัวสามารถขโมยข้อมูลใด ๆ ที่เก็บไว้ในบัญชีของคุณได้" + }, + "privateNetwork": { + "message": "เครือข่ายส่วนตัว" + }, + "qrCode": { + "message": "แสดง QR Code" + }, + "readdToken": { + "message": "คุณสามารถเพิ่มโทเค็นนี้ในอนาคตได้โดยไปที่ “เพิ่มโทเค็น” ในเมนูตัวเลือกบัญชีของคุณ" + }, + "readMore": { + "message": "อ่านเพิ่มเติมที่นี่" + }, + "readMore2": { + "message": "อ่านเพิ่มเติม" + }, + "receive": { + "message": "รับ" + }, + "recipientAddress": { + "message": "แอดแดรสผู้รับ" + }, + "refundAddress": { + "message": "แอดแดรสสำหรับการคืนเงินของคุณ" + }, + "rejected": { + "message": "ถูกปฏิเสธ" + }, + "resetAccount": { + "message": "รีเซ็ตบัญชี" + }, + "restoreFromSeed": { + "message": "กู้คืนจากกลุ่มคำชีด" + }, + "required": { + "message": "จำเป็น" + }, + "retryWithMoreGas": { + "message": "ลองใหม่ด้วยราคาแก๊สที่สูงกว่านี้ที่นี่" + }, + "revealSeedWords": { + "message": "เปิดเผยกลุ่มคำชีด" + }, + "revealSeedWordsWarning": { + "message": "อย่าเปิดเผยคำกลุ่มคำชีดของคุณในที่สาธารณะ! คำเหล่านี้สามารถใช้เพื่อขโมยบัญชีทั้งหมดของคุณ" + }, + "revert": { + "message": "ย้อนกลับคืน" + }, + "rinkeby": { + "message": "เครือขายทดสอบ Rinkeby" + }, + "ropsten": { + "message": "เครือขายทดสอบ Ropsten" + }, + "sampleAccountName": { + "message": "เช่น บัญชีเฮงเฮงของฉัน", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "บันทึก" + }, + "saveAsFile": { + "message": "บันทึกเป็นไฟล์", + "description": "Account export process" + }, + "saveSeedAsFile": { + "message": "บันทึกกลุ่มคำชีดเป็นไฟล์" + }, + "search": { + "message": "ค้นหา" + }, + "secretPhrase": { + "message": "ป้อนกลุ่มคำสิบสองคำเพื่อกู้คืนตู้เซฟของคุณ" + }, + "seedPhraseReq": { + "message": "กลุ่มคำชีดมีความยาว 12 คำ" + }, + "select": { + "message": "เลือก" + }, + "selectCurrency": { + "message": "เลือกสกุลเงิน" + }, + "selectService": { + "message": "เลือกบริการ" + }, + "selectType": { + "message": "เลือกประเภท" + }, + "send": { + "message": "ส่ง" + }, + "sendETH": { + "message": "ส่งอีเธอร์" + }, + "sendTokens": { + "message": "ส่งโทเค็น" + }, + "sendTokensAnywhere": { + "message": "ส่งโทเค็นไปให้ทุกคนที่มีบัญชีอีเธอเรียม" + }, + "settings": { + "message": "การตั้งค่า" + }, + "shapeshiftBuy": { + "message": "ซื้อด้วย Shapeshift" + }, + "showPrivateKeys": { + "message": "แสดงคีย์ส่วนตัว" + }, + "showQRCode": { + "message": "แสดง QR Code" + }, + "sign": { + "message": "เซ็นชื่อ" + }, + "signMessage": { + "message": "เซ็นชื่อในข้อความ" + }, + "signNotice": { + "message": "การเซ็นชื่อในข้อความนี้อาจจะเป็นอันตรายได้ \nเซ็นชื่อเฉพาะข้อความจากแหล่งที่คุณไว้วางใจได้จริง ๆ เท่านั้น \nวิธีที่อันตรายนี้จะถูกลบออกในอนาคต" + }, + "sigRequest": { + "message": "ขอลายเซ็น" + }, + "sigRequested": { + "message": "ขอลายเซ็นแล้ว" + }, + "spaceBetween": { + "message": "มีช่องว่างได้เพียงตัวเดียวระหว่างคำเท่านั้น" + }, + "status": { + "message": "สถานะ" + }, + "stateLogs": { + "message": "บันทึกของสถานะ" + }, + "stateLogsDescription": { + "message": "บันทึกของสถานะประกอบด้วยแอดแดรสสาธารณะและธุรกรรมที่ส่ง" + }, + "submit": { + "message": "ตกลง" + }, + "supportCenter": { + "message": "ไปที่ศูนย์สนับสนุนของเรา" + }, + "symbolBetweenZeroTen": { + "message": "สัญลักษณ์ต้องมีความยาวตั้งแต่ 0 ถึง 10 อักขระ" + }, + "takesTooLong": { + "message": "ใช้เวลานานเกินไปใช่หรือไม่?" + }, + "terms": { + "message": "ข้อตกลงในการใช้งาน" + }, + "testFaucet": { + "message": "ตัวแจกจ่ายเพื่อการทดสอบ" + }, + "to": { + "message": "ถึง" + }, + "toETHviaShapeShift": { + "message": "$1 เป็นอีเธอร์โดย ShapeShift", + "description": "system will fill in deposit type in start of message" + }, + "tokenAddress": { + "message": "แอดแดรสโทเค็น" + }, + "tokenAlreadyAdded": { + "message": "โทเคนได้ถูกเพิ่มไปแล้ว" + }, + "tokenBalance": { + "message": "ยอดโทเค็นคงเหลือของคุณคือ:" + }, + "tokenSelection": { + "message": "ค้นหาโทเค็นหรือเลือกจากรายการโทเค็นยอดนิยมของเรา" + }, + "tokenSymbol": { + "message": "สัญลักษณ์ประจำตัว" + }, + "tokenWarning1": { + "message": "ติดตามโทเค็นที่คุณซื้อด้วยบัญชี MetaMask ของคุณ หากคุณซื้อโทเค็นโดยใช้บัญชีอื่นโทเค็นเหล่านั้นจะไม่ปรากฏที่นี่" + }, + "total": { + "message": "รวม" + }, + "transactions": { + "message": "ธุรกรรม" + }, + "transactionMemo": { + "message": "บันทึกช่วยจำของการทำธุรกรรม (ไม่บังคับ)" + }, + "transactionNumber": { + "message": "หมายเลขธุรกรรม" + }, + "transfers": { + "message": "โอน" + }, + "troubleTokenBalances": { + "message": "เรามีปัญหาในการโหลดยอดโทเค็นคงเหลือของคุณ คุณสามารถดูได้ที่นี่", + "description": "Followed by a link (here) to view token balances" + }, + "twelveWords": { + "message": "กลุ่มคำ 12 คำเหล่านี้เป็นวิธีเดียวที่จะกู้คืนบัญชี MetaMask ของคุณ \n กรุณาเก็บไว้ในที่ปลอดภัยและเก็บเป็นความลับ" + }, + "typePassword": { + "message": "พิมพ์รหัสผ่านของคุณ" + }, + "uiWelcome": { + "message": "ยินดีต้อนรับสู่หน้าตาใหม่ (เบต้า)" + }, + "uiWelcomeMessage": { + "message": "ขณะนี้คุณใช้งาน Metamask หน้าตาใหม่แล้ว ลองเล่ยคุณลักษณะใหม่ ๆ เช่นการส่งโทเค็นและหากคุณพบปัญหากรุณาแจ้งให้เราทราบ" + }, + "unavailable": { + "message": "ใช้งานไม่ได้" + }, + "unknown": { + "message": "ไม่รู้จัก" + }, + "unknownNetwork": { + "message": "ไม่รู้จักเครือข่ายส่วนตัว" + }, + "unknownNetworkId": { + "message": "ไม่รู้จักหมายเลขเครือข่าย" + }, + "uriErrorMsg": { + "message": "URI ต้องมีคำนำหน้าเป็น HTTP หรือ HTTPS" + }, + "usaOnly": { + "message": "ในสหรัฐอเมริกาเท่านั้น", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "ถูกใช้งานโดยหลายไคลเอนท์" + }, + "useOldUI": { + "message": "ใช้หน้าตาเก่า" + }, + "validFileImport": { + "message": "คุณต้องเลือกไฟล์ที่ถูกต้องเพื่อนำเข้า" + }, + "vaultCreated": { + "message": "สร้างตู้เซฟแล้ว" + }, + "viewAccount": { + "message": "ดูบัญชี" + }, + "visitWebSite": { + "message": "เยี่ยมชมเว็บไซต์ของเรา" + }, + "warning": { + "message": "คำเตือน" + }, + "welcomeBeta": { + "message": "ยินดีต้อนรับสู่ MetaMask เบต้า" + }, + "whatsThis": { + "message": "นี่คืออะไร?" + }, + "yourSigRequested": { + "message": "ลายเซ็นของคุณกำลังได้รับการร้องขอ" + }, + "youSign": { + "message": "คุณกำลังเซ็นชื่อ" + } +} -- cgit From 4c15a121a34fd76e4ab810ef14f13dce4b6f0742 Mon Sep 17 00:00:00 2001 From: artiya4u Date: Sat, 24 Mar 2018 02:38:31 +0700 Subject: ๊๊Update Thai translate. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/_locales/th/messages.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'app') diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json index fd41bd8b9..6b25f4dc4 100644 --- a/app/_locales/th/messages.json +++ b/app/_locales/th/messages.json @@ -81,7 +81,7 @@ "message": "ซื้อด้วย Coinbase" }, "buyCoinbaseExplainer": { - "message": "Coinbase เป็นที่ซื้อขายบิตคอยน์ไลท์คอยน์และอีเธอเรียมที่ได้รับความนิยมสูงสุดในโลก" + "message": "Coinbase เป็นแหล่งซื้อขายบิตคอยน์ไลท์คอยน์และอีเธอเรียมที่ได้รับความนิยมสูงสุดในโลก" }, "cancel": { "message": "ยกเลิก" @@ -108,7 +108,7 @@ "message": "ทำต่อไป" }, "continueToCoinbase": { - "message": "ทำต่อไปที่ Coinbase" + "message": "ไปที่ Coinbase" }, "contractDeployment": { "message": "การติดตั้งสัญญา" @@ -191,10 +191,10 @@ "description": "Tells the user what coin they have selected to deposit with shapeshift" }, "depositEth": { - "message": "ฝากอีเธอร์" + "message": "การฝากอีเธอร์" }, "depositEther": { - "message": "ฝากอีเธอร์" + "message": "การฝากอีเธอร์" }, "depositFiat": { "message": "ฝากด้วยเงินตรา" @@ -435,7 +435,7 @@ "message": "กลุ่มคำชีดมีเพียงตัวพิมพ์เล็กเท่านั้น" }, "mainnet": { - "message": "เครือข่ายอีเธอเรียมหลัก" + "message": "เครือข่าย Main Net" }, "message": { "message": "ข้อความ" @@ -501,7 +501,7 @@ "message": "ไม่มีรายการธุรกรรมในอดีต" }, "noTransactions": { - "message": "ไม่มีรายการธุรกรรม" + "message": "ยังไม่มีรายการธุรกรรม" }, "notStarted": { "message": "ยังไม่เริ่ม" @@ -599,10 +599,10 @@ "message": "ย้อนกลับคืน" }, "rinkeby": { - "message": "เครือขายทดสอบ Rinkeby" + "message": "เครือข่ายทดสอบ Rinkeby" }, "ropsten": { - "message": "เครือขายทดสอบ Ropsten" + "message": "เครือข่ายทดสอบ Ropsten" }, "sampleAccountName": { "message": "เช่น บัญชีเฮงเฮงของฉัน", @@ -762,7 +762,7 @@ "message": "ยินดีต้อนรับสู่หน้าตาใหม่ (เบต้า)" }, "uiWelcomeMessage": { - "message": "ขณะนี้คุณใช้งาน Metamask หน้าตาใหม่แล้ว ลองเล่ยคุณลักษณะใหม่ ๆ เช่นการส่งโทเค็นและหากคุณพบปัญหากรุณาแจ้งให้เราทราบ" + "message": "ขณะนี้คุณใช้งาน Metamask หน้าตาใหม่แล้ว ลองเล่นคุณลักษณะใหม่ ๆ เช่นการส่งโทเค็นและหากคุณพบปัญหากรุณาแจ้งให้เราทราบ" }, "unavailable": { "message": "ใช้งานไม่ได้" -- cgit From e3d7062e9b923d906f13fcc1b322cbc3f1e3d573 Mon Sep 17 00:00:00 2001 From: kumavis Date: Fri, 23 Mar 2018 15:24:32 -0700 Subject: sentry - rewrite report urls + use raven-js from npm --- app/scripts/lib/setupRaven.js | 34 ++++++++++++++++++++++++++++++---- app/scripts/vendor/raven.min.js | 3 --- 2 files changed, 30 insertions(+), 7 deletions(-) delete mode 100644 app/scripts/vendor/raven.min.js (limited to 'app') diff --git a/app/scripts/lib/setupRaven.js b/app/scripts/lib/setupRaven.js index 42e48cb90..977e5938d 100644 --- a/app/scripts/lib/setupRaven.js +++ b/app/scripts/lib/setupRaven.js @@ -1,4 +1,4 @@ -const Raven = require('../vendor/raven.min.js') +const Raven = require('raven-js') const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' const PROD = 'https://3567c198f8a8412082d32655da2961d0@sentry.io/273505' const DEV = 'https://f59f3dd640d2429d9d0e2445a87ea8e1@sentry.io/273496' @@ -18,9 +18,35 @@ function setupRaven(opts) { ravenTarget = PROD } - Raven.config(ravenTarget, { + const client = Raven.config(ravenTarget, { release, - }).install() - + transport: function(opts) { + // modify report urls + const report = opts.data + rewriteReportUrls(report) + // make request normally + client._makeRequest(opts) + } + }) + client.install() + return Raven } + +function rewriteReportUrls(report) { + // update request url + report.request.url = toMetamaskUrl(report.request.url) + // update exception stack trace + report.exception.values.forEach(item => { + item.stacktrace.frames.forEach(frame => { + frame.filename = toMetamaskUrl(frame.filename) + }) + }) +} + +function toMetamaskUrl(origUrl) { + const filePath = origUrl.split(location.origin)[1] + if (!filePath) return origUrl + const metamaskUrl = `${filePath}` + return metamaskUrl +} diff --git a/app/scripts/vendor/raven.min.js b/app/scripts/vendor/raven.min.js deleted file mode 100644 index b439aeae6..000000000 --- a/app/scripts/vendor/raven.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! Raven.js 3.22.1 (7584197) | github.com/getsentry/raven-js */ -!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.Raven=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gthis.k.maxBreadcrumbs&&this.u.shift(),this},addPlugin:function(a){var b=[].slice.call(arguments,1);return this.r.push([a,b]),this.n&&this.E(),this},setUserContext:function(a){return this.j.user=a,this},setExtraContext:function(a){return this.T("extra",a),this},setTagsContext:function(a){return this.T("tags",a),this},clearContext:function(){return this.j={},this},getContext:function(){return JSON.parse(h(this.j))},setEnvironment:function(a){return this.k.environment=a,this},setRelease:function(a){return this.k.release=a,this},setDataCallback:function(a){var b=this.k.dataCallback;return this.k.dataCallback=e(b,a),this},setBreadcrumbCallback:function(a){var b=this.k.breadcrumbCallback;return this.k.breadcrumbCallback=e(b,a),this},setShouldSendCallback:function(a){var b=this.k.shouldSendCallback;return this.k.shouldSendCallback=e(b,a),this},setTransport:function(a){return this.k.transport=a,this},lastException:function(){return this.d},lastEventId:function(){return this.f},isSetup:function(){return!!this.a&&(!!this.g||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this.z("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var a=J.RavenConfig;a&&this.config(a.dsn,a.config).install()},showReportDialog:function(a){if(K){a=a||{};var b=a.eventId||this.lastEventId();if(!b)throw new i("Missing eventId");var c=a.dsn||this.G;if(!c)throw new i("Missing DSN");var d=encodeURIComponent,e="";e+="?eventId="+d(b),e+="&dsn="+d(c);var f=a.user||this.j.user;f&&(f.name&&(e+="&name="+d(f.name)),f.email&&(e+="&email="+d(f.email)));var g=this.I(this.F(c)),h=K.createElement("script");h.async=!0,h.src=g+"/api/embed/error-page/"+e,(K.head||K.body).appendChild(h)}},K:function(){var a=this;this.m+=1,setTimeout(function(){a.m-=1})},U:function(a,b){var c,d;if(this.b){b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),K.createEvent?(c=K.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=K.createEventObject(),c.eventType=a);for(d in b)w(b,d)&&(c[d]=b[d]);if(K.createEvent)K.dispatchEvent(c);else try{K.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}},V:function(a){var b=this;return function(c){if(b.W=null,b.v!==c){b.v=c;var d;try{d=A(c.target)}catch(e){d=""}b.captureBreadcrumb({category:"ui."+a,message:d})}}},X:function(){var a=this,b=1e3;return function(c){var d;try{d=c.target}catch(e){return}var f=d&&d.tagName;if(f&&("INPUT"===f||"TEXTAREA"===f||d.isContentEditable)){var g=a.W;g||a.V("input")(c),clearTimeout(g),a.W=setTimeout(function(){a.W=null},b)}}},Y:function(a,b){var c=D(this.w.href),d=D(b),e=D(a);this.x=b,c.protocol===d.protocol&&c.host===d.host&&(b=d.relative),c.protocol===e.protocol&&c.host===e.host&&(a=e.relative),this.captureBreadcrumb({category:"navigation",data:{to:b,from:a}})},B:function(){var a=this;a.Z=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.L?a.Z.apply(this.N,arguments):a.Z.apply(this,arguments)}},O:function(){this.Z&&(Function.prototype.toString=this.Z)},C:function(){function a(a){return function(b,d){for(var e=new Array(arguments.length),f=0;f2?arguments[2]:void 0;return c&&b.Y(b.x,c+""),a.apply(this,arguments)}};E(history,"pushState",j,d),E(history,"replaceState",j,d)}if(c.console&&"console"in J&&console.log){var k=function(a,c){b.captureBreadcrumb({message:a,level:c.level,category:"console"})};s(["debug","info","warn","error","log"],function(a,b){G(console,b,k)})}},P:function(){for(var a;this.t.length;){a=this.t.shift();var b=a[0],c=a[1],d=a[2];b[c]=d}},E:function(){var a=this;s(this.r,function(b,c){var d=c[0],e=c[1];d.apply(a,[a].concat(e))})},F:function(a){var b=I.exec(a),c={},d=7;try{for(;d--;)c[H[d]]=b[d]||""}catch(e){throw new i("Invalid DSN: "+a)}if(c.pass&&!this.k.allowSecretKey)throw new i("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return c},I:function(a){var b="//"+a.host+(a.port?":"+a.port:"");return a.protocol&&(b=a.protocol+":"+b),b},A:function(){this.m||this.Q.apply(this,arguments)},Q:function(a,b){var c=this.R(a,b);this.U("handle",{stackInfo:a,options:b}),this._(a.name,a.message,a.url,a.lineno,c,b)},R:function(a,b){var c=this,d=[];if(a.stack&&a.stack.length&&(s(a.stack,function(b,e){var f=c.aa(e,a.url);f&&d.push(f)}),b&&b.trimHeadFrames))for(var e=0;e0&&(a.breadcrumbs={values:[].slice.call(this.u,0)}),this.j.user&&(a.user=this.j.user),b.environment&&(a.environment=b.environment),b.release&&(a.release=b.release),b.serverName&&(a.server_name=b.serverName),Object.keys(a).forEach(function(b){(null==a[b]||""===a[b]||r(a[b]))&&delete a[b]}),o(b.dataCallback)&&(a=b.dataCallback(a)||a),a&&!r(a)&&(!o(b.shouldSendCallback)||b.shouldSendCallback(a)))return this.ga()?void this.z("warn","Raven dropped error due to backoff: ",a):void("number"==typeof b.sampleRate?Math.random() ",i=h.length;a&&f++1&&g+e.length*i+b.length>=d));)e.push(b),g+=b.length,a=a.parentNode;return e.reverse().join(h)}function y(a){var b,c,d,e,f,g=[];if(!a||!a.tagName)return"";if(g.push(a.tagName.toLowerCase()),a.id&&g.push("#"+a.id),b=a.className,b&&i(b))for(c=b.split(/\s+/),f=0;f=0;--b)s[b]===a&&s.splice(b,1)}function c(){n(),s=[]}function k(a,b){var c=null;if(!b||f.collectWindowErrors){for(var d in s)if(s.hasOwnProperty(d))try{s[d].apply(null,[a].concat(h.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function l(a,b,c,g,h){var l=null,m=e.isErrorEvent(h)?h.error:h,n=e.isErrorEvent(a)?a.message:a;if(v)f.computeStackTrace.augmentStackTraceWithInitialElement(v,b,c,n),o();else if(m&&e.isError(m))l=f.computeStackTrace(m),k(l,!0);else{var p,r={url:b,line:c,column:g},s=void 0;if("[object String]"==={}.toString.call(n)){var p=n.match(j);p&&(s=p[1],n=p[2])}r.func=i,l={name:s,message:n,url:d(),stack:[r]},k(l,!0)}return!!q&&q.apply(this,arguments)}function m(){r||(q=g.onerror,g.onerror=l,r=!0)}function n(){r&&(g.onerror=q,r=!1,q=void 0)}function o(){var a=v,b=t;t=null,v=null,u=null,k.apply(null,[a,!1].concat(b))}function p(a,b){var c=h.call(arguments,1);if(v){if(u===a)return;o()}var d=f.computeStackTrace(a);if(v=d,u=a,t=c,setTimeout(function(){u===a&&o()},d.incomplete?2e3:0),b!==!1)throw a}var q,r,s=[],t=null,u=null,v=null;return p.subscribe=a,p.unsubscribe=b,p.uninstall=c,p}(),f.computeStackTrace=function(){function a(a){if("undefined"!=typeof a.stack&&a.stack){for(var b,c,e,f=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,g=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,h=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,j=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,k=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=a.stack.split("\n"),m=[],n=(/^(.*) is undefined$/.exec(a.message),0),o=l.length;n eval")>-1;q&&(b=j.exec(c[3]))?(c[3]=b[1],c[4]=b[2],c[5]=null):0!==n||c[5]||"undefined"==typeof a.columnNumber||(m[0].column=a.columnNumber+1),e={url:c[3],func:c[1]||i,args:c[2]?c[2].split(","):[],line:c[4]?+c[4]:null,column:c[5]?+c[5]:null}}!e.func&&e.line&&(e.func=i),m.push(e)}return m.length?{name:a.name,message:a.message,url:d(),stack:m}:null}}function b(a,b,c,d){var e={url:b,line:c};if(e.url&&e.line){if(a.incomplete=!1,e.func||(e.func=i),a.stack.length>0&&a.stack[0].url===e.url){if(a.stack[0].line===e.line)return!1;if(!a.stack[0].line&&a.stack[0].func===e.func)return a.stack[0].line=e.line,!1}return a.stack.unshift(e),a.partial=!0,!0}return a.incomplete=!0,!1}function c(a,g){for(var h,j,k=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,l=[],m={},n=!1,o=c.caller;o&&!n;o=o.caller)if(o!==e&&o!==f.report){if(j={url:null,func:i,line:null,column:null},o.name?j.func=o.name:(h=k.exec(o.toString()))&&(j.func=h[1]),"undefined"==typeof j.func)try{j.func=h.input.substring(0,h.input.indexOf("{"))}catch(p){}m[""+o]?n=!0:m[""+o]=!0,l.push(j)}g&&l.splice(0,g);var q={name:a.name,message:a.message,url:d(),stack:l};return b(q,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),q}function e(b,e){var g=null;e=null==e?0:+e;try{if(g=a(b))return g}catch(h){if(f.debug)throw h}try{if(g=c(b,e+1))return g}catch(h){if(f.debug)throw h}return{name:b.name,message:b.message,url:d()}}return e.augmentStackTraceWithInitialElement=b,e.computeStackTraceFromStackProp=a,e}(),b.exports=f}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{5:5}],7:[function(a,b,c){function d(a,b){for(var c=0;c0){var i=d(c,this);~i?c.splice(i+1):c.push(this),~i?e.splice(i,1/0,g):e.push(g),~d(c,h)&&(h=b.call(this,g,h))}else c.push(h);return null==a?h instanceof Error?f(h):h:a.call(this,g,h)}}c=b.exports=e,c.getSerialize=g},{}]},{},[4])(4)}); -//# sourceMappingURL=raven.min.js.map \ No newline at end of file -- cgit From 2eaac897bf965054c2db0a431391d4c92caaae2d Mon Sep 17 00:00:00 2001 From: kumavis Date: Fri, 23 Mar 2018 18:37:41 -0700 Subject: sentry - namespace files under metamask dir --- app/scripts/lib/setupRaven.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/scripts/lib/setupRaven.js b/app/scripts/lib/setupRaven.js index 977e5938d..54bfc3d82 100644 --- a/app/scripts/lib/setupRaven.js +++ b/app/scripts/lib/setupRaven.js @@ -29,7 +29,7 @@ function setupRaven(opts) { } }) client.install() - + return Raven } @@ -47,6 +47,6 @@ function rewriteReportUrls(report) { function toMetamaskUrl(origUrl) { const filePath = origUrl.split(location.origin)[1] if (!filePath) return origUrl - const metamaskUrl = `${filePath}` + const metamaskUrl = `metamask${filePath}` return metamaskUrl } -- cgit From 46e8781e41b50593dce8114c1230110c1e5c2561 Mon Sep 17 00:00:00 2001 From: kumavis Date: Fri, 23 Mar 2018 18:45:58 -0700 Subject: lint - fix --- app/scripts/lib/setupRaven.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/scripts/lib/setupRaven.js b/app/scripts/lib/setupRaven.js index 54bfc3d82..02c01b755 100644 --- a/app/scripts/lib/setupRaven.js +++ b/app/scripts/lib/setupRaven.js @@ -26,7 +26,7 @@ function setupRaven(opts) { rewriteReportUrls(report) // make request normally client._makeRequest(opts) - } + }, }) client.install() -- cgit From fa022e0883ce4634864ead04eac676c64ed6c6c1 Mon Sep 17 00:00:00 2001 From: Dan Date: Sat, 24 Mar 2018 01:13:43 -0230 Subject: Updates Add token screen to latest design. --- app/_locales/en/messages.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'app') diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index c64b7248b..0bfa992b4 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -171,6 +171,9 @@ "customGas": { "message": "Customize Gas" }, + "customToken": { + "message": "Custom Token" + }, "customize": { "message": "Customize" }, @@ -415,6 +418,9 @@ "message": "JSON File", "description": "format for importing an account" }, + "keepTrackTokens": { + "message": "Keep track of the tokens you’ve bought with your MetaMask account." + }, "kovan": { "message": "Kovan Test Network" }, @@ -424,6 +430,9 @@ "max": { "message": "Max" }, + "learnMore": { + "message": "Learn more." + }, "lessThanMax": { "message": "must be less than or equal to $1.", "description": "helper for inputting hex as decimal input" @@ -564,6 +573,9 @@ "pleaseReviewTransaction": { "message": "Please review your transaction." }, + "popularTokens": { + "message": "Popular Tokens" + }, "privacyMsg": { "message": "Privacy Policy" }, @@ -702,6 +714,9 @@ "onlySendToEtherAddress": { "message": "Only send ETH to an Ethereum address." }, + "searchTokens": { + "message": "Search Tokens" + }, "sendTokensAnywhere": { "message": "Send Tokens to anyone with an Ethereum account" }, -- cgit From 33f43a7e7a98044f3cec66269e6b0af0bd8eeacd Mon Sep 17 00:00:00 2001 From: artiya4u Date: Sat, 24 Mar 2018 11:06:49 +0700 Subject: Update Thai translate. --- app/_locales/th/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json index 6b25f4dc4..0e761781f 100644 --- a/app/_locales/th/messages.json +++ b/app/_locales/th/messages.json @@ -762,7 +762,7 @@ "message": "ยินดีต้อนรับสู่หน้าตาใหม่ (เบต้า)" }, "uiWelcomeMessage": { - "message": "ขณะนี้คุณใช้งาน Metamask หน้าตาใหม่แล้ว ลองเล่นคุณลักษณะใหม่ ๆ เช่นการส่งโทเค็นและหากคุณพบปัญหากรุณาแจ้งให้เราทราบ" + "message": "ขณะนี้คุณใช้งาน Metamask หน้าตาใหม่แล้ว ลองใช้ความสามรถใหม่ ๆ เช่นการส่งโทเค็นและหากพบปัญหากรุณาแจ้งให้เราทราบ" }, "unavailable": { "message": "ใช้งานไม่ได้" -- cgit From 3db8b84eff587c145bad2070081f73b18b872589 Mon Sep 17 00:00:00 2001 From: artiya4u Date: Sat, 24 Mar 2018 11:20:21 +0700 Subject: Update Thai translate. --- app/_locales/th/messages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json index 0e761781f..d417763ec 100644 --- a/app/_locales/th/messages.json +++ b/app/_locales/th/messages.json @@ -290,7 +290,7 @@ "message": "วงเงินแก็ส" }, "gasLimitCalculation": { - "message": "เราคำนวณวงเงินแก็สที่แนะนำตามอัตราความสำเร็จบนเครือข่าย" + "message": "เราแนะนำวงเงินแก็สตามความสำเร็จบนเครือข่าย" }, "gasLimitRequired": { "message": "ต้องกำหนดวงเงินแก็ส" @@ -305,7 +305,7 @@ "message": "ราคาแก๊ส (GWEI)" }, "gasPriceCalculation": { - "message": "เราคำนวณวงเงินแก็สที่แนะนำตามอัตราความสำเร็จบนเครือข่าย" + "message": "เราแนะนำราคาแก็สตามความสำเร็จบนเครือข่าย" }, "gasPriceRequired": { "message": "ต้องมีราคาแก๊ส" -- cgit From 47ee86e9fde6ebcbd936ba63eda33a398460d423 Mon Sep 17 00:00:00 2001 From: artiya4u Date: Sat, 24 Mar 2018 11:59:23 +0700 Subject: Update Thai translate. --- app/_locales/th/messages.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/_locales/th/messages.json b/app/_locales/th/messages.json index d417763ec..887714f3f 100644 --- a/app/_locales/th/messages.json +++ b/app/_locales/th/messages.json @@ -401,7 +401,7 @@ "message": "เครือข่ายทดสอบ Kovan" }, "knowledgeDataBase": { - "message": "ไปที่ฐานความรู้ของเรา" + "message": "ไปที่คลังความรู้ของเรา" }, "lessThanMax": { "message": "ต้องน้อยกว่าหรือเท่ากับ $1.", @@ -453,7 +453,7 @@ "message": "ต้องเลือกอย่างน้อย 1 โทเค็น" }, "needEtherInWallet": { - "message": "ในการโต้ตอบกับแอพพลิเคชันแบบกระจายโดยใช้ MetaMask คุณจะต้องใช้อีเธอร์ในกระเป๋าเงินของคุณ" + "message": "คุณจะต้องมีอีเธอร์ในกระเป๋าเงินของคุณในการใช้งานกับแอพพลิเคชันแบบกระจายด้วย MetaMask" }, "needImportFile": { "message": "คุณต้องเลือกไฟล์ที่จะนำเข้า", @@ -596,7 +596,7 @@ "message": "อย่าเปิดเผยคำกลุ่มคำชีดของคุณในที่สาธารณะ! คำเหล่านี้สามารถใช้เพื่อขโมยบัญชีทั้งหมดของคุณ" }, "revert": { - "message": "ย้อนกลับคืน" + "message": "ย้อนกลับ" }, "rinkeby": { "message": "เครือข่ายทดสอบ Rinkeby" -- cgit From d1927d14079d4f57b5e138ccc7da6a9df6f8326a Mon Sep 17 00:00:00 2001 From: gasolin Date: Tue, 27 Mar 2018 02:53:36 +0800 Subject: i18n - zh_tw traditional chinese (taiwanese) * translate to Traditional Chinese, fix #3529 --- app/_locales/zh_TW/messages.json | 864 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 864 insertions(+) create mode 100644 app/_locales/zh_TW/messages.json (limited to 'app') diff --git a/app/_locales/zh_TW/messages.json b/app/_locales/zh_TW/messages.json new file mode 100644 index 000000000..90f63c6a6 --- /dev/null +++ b/app/_locales/zh_TW/messages.json @@ -0,0 +1,864 @@ +{ + "accept": { + "message": "接受" + }, + "account": { + "message": "帳戶" + }, + "accountDetails": { + "message": "帳戶詳情" + }, + "accountName": { + "message": "帳戶名稱" + }, + "address": { + "message": "帳戶地址" + }, + "addCustomToken": { + "message": "加入自訂代幣" + }, + "addToken": { + "message": "加入代幣" + }, + "addTokens": { + "message": "加入多筆代幣" + }, + "amount": { + "message": "數額" + }, + "amountPlusGas": { + "message": "數額 + Gas" + }, + "appDescription": { + "message": "乙太坊瀏覽器擴充插件", + "description": "The description of the application" + }, + "appName": { + "message": "MetaMask", + "description": "The name of the application" + }, + "approved": { + "message": "已同意" + }, + "attemptingConnect": { + "message": "正在嘗試連接區塊鏈。" + }, + "attributions": { + "message": "來源" + }, + "available": { + "message": "可使用" + }, + "back": { + "message": "上一頁" + }, + "balance": { + "message": "餘額:" + }, + "balances": { + "message": "你的餘額:" + }, + "balanceIsInsufficientGas": { + "message": "當前餘額不足以支付 Gas" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "必須大於等於 $1 並且小於等於 $2 。", + "description": "helper for inputting hex as decimal input" + }, + "blockiesIdenticon": { + "message": "使用 Blockies Identicon" + }, + "borrowDharma": { + "message": "透過 Dharma (Beta) 借用" + }, + "builtInCalifornia": { + "message": "MetaMask 是在加州設計製造." + }, + "buy": { + "message": "購買" + }, + "buyCoinbase": { + "message": "在 Coinbase 上購買" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase 是世界上最流行的買賣比特幣,以太幣和萊特幣的交易所。" + }, + "ok": { + "message": "Ok" + }, + "cancel": { + "message": "取消" + }, + "classicInterface": { + "message": "使用舊版界面" + }, + "clickCopy": { + "message": "點擊複製" + }, + "confirm": { + "message": "確認" + }, + "confirmed": { + "message": "已確認" + }, + "confirmContract": { + "message": "確認合約" + }, + "confirmPassword": { + "message": "確認密碼" + }, + "confirmTransaction": { + "message": "確認交易" + }, + "continue": { + "message": "繼續" + }, + "continueToCoinbase": { + "message": "繼續前往 Coinbase" + }, + "contractDeployment": { + "message": "合約部署" + }, + "conversionProgress": { + "message": "正在取得匯率" + }, + "copiedButton": { + "message": "已複製" + }, + "copiedClipboard": { + "message": "已複製到剪貼簿" + }, + "copiedExclamation": { + "message": "已複製!" + }, + "copiedSafe": { + "message": "我已經複製到某個安全的地方了" + }, + "copy": { + "message": "複製" + }, + "copyToClipboard": { + "message": "複製到剪貼簿" + }, + "copyButton": { + "message": " 複製 " + }, + "copyPrivateKey": { + "message": "這是你的私鑰(點擊複製)" + }, + "create": { + "message": "建立" + }, + "createAccount": { + "message": "建立帳戶" + }, + "createDen": { + "message": "建立" + }, + "crypto": { + "message": "加密", + "description": "Exchange type (cryptocurrencies)" + }, + "currentConversion": { + "message": "當前匯率" + }, + "currentNetwork": { + "message": "當前網路" + }, + "customGas": { + "message": "自訂 Gas" + }, + "customize": { + "message": "自訂" + }, + "customRPC": { + "message": "自訂 RPC" + }, + "decimalsMustZerotoTen": { + "message": "小數點後位數至少為0, 最多為36." + }, + "decimal": { + "message": "小數點精度" + }, + "defaultNetwork": { + "message": "預設Ether交易網路為主網(Main Net)。" + }, + "denExplainer": { + "message": "你的 DEN 是在你的 MetaMask 中的加密密碼儲存庫。" + }, + "deposit": { + "message": "存入" + }, + "depositBTC": { + "message": "將你的 BTC 存入到下面的地址:" + }, + "depositCoin": { + "message": "將你的 $1 存入到下面的地址", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "存入 Eth" + }, + "depositEther": { + "message": "存入 Ether" + }, + "depositFiat": { + "message": "從法定貨幣存入" + }, + "depositFromAccount": { + "message": "從其他帳戶存入" + }, + "depositShapeShift": { + "message": "從 ShapeShift 存入" + }, + "depositShapeShiftExplainer": { + "message": "如果你擁有其他加密貨幣,你可以直接交易並存入 Ether 到你的MetaMask錢包。不需要開帳戶。" + }, + "details": { + "message": "詳情" + }, + "directDeposit": { + "message": "直接存入" + }, + "directDepositEther": { + "message": "直接存入 Ether" + }, + "directDepositEtherExplainer": { + "message": "如果你已經擁有了一些Ether,使用直接存入功能是讓你的新錢包最快取得Ether的方式。" + }, + "done": { + "message": "完成" + }, + "downloadStatelogs": { + "message": "下載狀態紀錄" + }, + "dropped": { + "message": "丟棄" + }, + "edit": { + "message": "編輯" + }, + "editAccountName": { + "message": "編輯帳戶名稱" + }, + "emailUs": { + "message": "寄 Email 給我們!" + }, + "encryptNewDen": { + "message": "加密你的新 DEN" + }, + "enterPassword": { + "message": "請輸入密碼" + }, + "enterPasswordConfirm": { + "message": "請再次輸入密碼確認" + }, + "passwordNotLongEnough": { + "message": "您所輸入的密碼長度不足" + }, + "passwordsDontMatch": { + "message": "您所輸入的密碼不一致" + }, + "etherscanView": { + "message": "在 Etherscan 上查看帳戶" + }, + "exchangeRate": { + "message": "匯率" + }, + "exportPrivateKey": { + "message": "導出私鑰" + }, + "exportPrivateKeyWarning": { + "message": "您需要自行負擔導出私鑰產生的風險" + }, + "failed": { + "message": "失败" + }, + "fiat": { + "message": "FIAT", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "檔案導入失敗?點擊這裡!", + "description": "Helps user import their account from a JSON file" + }, + "from": { + "message": "來源地址" + }, + "fromToSame": { + "message": "來源和目的地址不能一樣" + }, + "fromShapeShift": { + "message": "來自 ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "Gas 費用" + }, + "gasLimit": { + "message": "Gas 上限" + }, + "gasLimitCalculation": { + "message": "我們根據網路成功率算出建議的 Gas 上限。" + }, + "gasLimitRequired": { + "message": "必需填寫 Gas 上限" + }, + "gasLimitTooLow": { + "message": "Gas 上限至少為 21000" + }, + "gasPrice": { + "message": "Gas 價格 (GWEI)" + }, + "gasPriceCalculation": { + "message": "我們根據網路成功率算出建議的 Gas 價格" + }, + "gasPriceRequired": { + "message": "必需填寫 Gas 價格" + }, + "getEther": { + "message": "取得 Ether" + }, + "getEtherFromFaucet": { + "message": "從水管取得$1 Ether", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": "必須要大於等於 $1。", + "description": "helper for inputting hex as decimal input" + }, + "here": { + "message": "這裡", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hereList": { + "message": "Here's a list!!!!" + }, + "hide": { + "message": "隱藏" + }, + "hideToken": { + "message": "隱藏代幣" + }, + "hideTokenPrompt": { + "message": "隱藏代幣?" + }, + "howToDeposit": { + "message": "你想怎麼存入 Ether?" + }, + "holdEther": { + "message": "Metamask 讓您能保存 ether 和代幣, 並成為您接觸分散式應用程式的途徑." + }, + "import": { + "message": "導入", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "導入帳戶" + }, + "importAnAccount": { + "message": "導入一個帳戶" + }, + "importDen": { + "message": "導入現成的 DEN" + }, + "imported": { + "message": "已導入私鑰", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "infoHelp": { + "message": "說明 & 資訊" + }, + "insufficientFunds": { + "message": "資金不足." + }, + "insufficientTokens": { + "message": "代幣不足." + }, + "invalidAddress": { + "message": "錯誤的地址" + }, + "invalidAddressRecipient": { + "message": "接收地址錯誤" + }, + "invalidGasParams": { + "message": "Gas 參數錯誤" + }, + "invalidInput": { + "message": "輸入錯誤。" + }, + "invalidRequest": { + "message": "無效的請求" + }, + "invalidRPC": { + "message": "無效的 RPC URI" + }, + "jsonFail": { + "message": "有東西出錯了. 請確認你的 JSON 檔案格式正確." + }, + "jsonFile": { + "message": "JSON 檔案", + "description": "format for importing an account" + }, + "kovan": { + "message": "Kovan 測試網路" + }, + "knowledgeDataBase": { + "message": "查看我們的知識庫" + }, + "max": { + "message": "最大值" + }, + "lessThanMax": { + "message": "必須小於等於 $1.", + "description": "helper for inputting hex as decimal input" + }, + "likeToAddTokens": { + "message": "您確定要加入這些代幣嗎?" + }, + "links": { + "message": "連結" + }, + "limit": { + "message": "上限" + }, + "loading": { + "message": "載入..." + }, + "loadingTokens": { + "message": "載入代幣..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "logout": { + "message": "登出" + }, + "loose": { + "message": "非Metamask帳號" + }, + "loweCaseWords": { + "message": "助憶詞僅包含小寫字元" + }, + "mainnet": { + "message": "主乙太坊網路" + }, + "message": { + "message": "訊息" + }, + "metamaskDescription": { + "message": "MetaMask 是Ethereum的安全身份識別金庫." + }, + "min": { + "message": "最小" + }, + "myAccounts": { + "message": "我的帳戶" + }, + "mustSelectOne": { + "message": "必須選擇至少 1 代幣." + }, + "needEtherInWallet": { + "message": "要使用 MetaMask 存取 DAPP時,您的錢包中需要有 Ether。" + }, + "needImportFile": { + "message": "您必須選擇一個檔案來導入。", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "您必須為選擇好的檔案輸入密碼。", + "description": "Password and file needed to import an account" + }, + "networks": { + "message": "網路" + }, + "newAccount": { + "message": "新帳戶" + }, + "newAccountNumberName": { + "message": "帳戶 $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "新合約" + }, + "newPassword": { + "message": "新密碼(至少8個字)" + }, + "newRecipient": { + "message": "新收款人" + }, + "newRPC": { + "message": "New RPC URL" + }, + "next": { + "message": "下一頁" + }, + "noAddressForName": { + "message": "此 ENS 尚未指定地址。" + }, + "noDeposits": { + "message": "尚未有存款" + }, + "noTransactionHistory": { + "message": "尚未有交易紀錄。" + }, + "noTransactions": { + "message": "尚未有交易" + }, + "notStarted": { + "message": "尚未開始" + }, + "oldUI": { + "message": "舊版界面" + }, + "oldUIMessage": { + "message": "你已經切換到舊版界面。可以通過右上方下拉選單中的選項切換回新的使用者界面。" + }, + "or": { + "message": "或", + "description": "choice between creating or importing a new account" + }, + "passwordMismatch": { + "message": "密碼不一致", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordShort": { + "message": "密碼不夠長", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "請貼上你的私鑰串:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "請貼上你的助憶詞!" + }, + "personalAddressDetected": { + "message": "已偵測到個人地址. 請輸入代幣合約地址." + }, + "pleaseReviewTransaction": { + "message": "請檢查你的交易。" + }, + "privateKey": { + "message": "私鑰", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "注意:永遠不要公開這個私鑰。任何取得這把私鑰的人都可以竊取這個帳號中的任何資產。" + }, + "privateNetwork": { + "message": "私有網路" + }, + "qrCode": { + "message": "顯示 QR Code" + }, + "readdToken": { + "message": "之後還可以透過帳戶選單中的“加入代幣”來加入此代幣。" + }, + "readMore": { + "message": "了解更多。" + }, + "readMore2": { + "message": "了解更多。" + }, + "receive": { + "message": "接收" + }, + "recipientAddress": { + "message": "接收地址" + }, + "refundAddress": { + "message": "你的退款地址" + }, + "rejected": { + "message": "拒絕" + }, + "resetAccount": { + "message": "重置帳戶" + }, + "restoreFromSeed": { + "message": "透過助憶詞重置" + }, + "restoreVault": { + "message": "重置金庫" + }, + "required": { + "message": "必填" + }, + "retryWithMoreGas": { + "message": "改用更高的 Gas 價格重試" + }, + "walletSeed": { + "message": "錢包助憶詞" + }, + "revealSeedWords": { + "message": "顯示助憶詞" + }, + "revealSeedWordsWarning": { + "message": "別在公共場合回復你的助憶詞!這些詞可被用來竊取你的帳戶." + }, + "revert": { + "message": "還原" + }, + "rinkeby": { + "message": "Rinkeby 測試網路" + }, + "ropsten": { + "message": "Ropsten 測試網路" + }, + "currentRpc": { + "message": "當前的 RPC" + }, + "connectingToMainnet": { + "message": "連線到主 Ethereum 網路" + }, + "connectingToRopsten": { + "message": "連線到 Ropsten 測試網路" + }, + "connectingToKovan": { + "message": "連線到 Kovan 測試網路" + }, + "connectingToRinkeby": { + "message": "連線到 Rinkeby 測試網路" + }, + "connectingToUnknown": { + "message": "連線到未知網路" + }, + "sampleAccountName": { + "message": "例如:我的新帳戶", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "儲存" + }, + "saveAsFile": { + "message": "儲存檔案", + "description": "Account export process" + }, + "saveSeedAsFile": { + "message": "將助憶詞儲存成檔案" + }, + "search": { + "message": "搜尋" + }, + "secretPhrase": { + "message": "在此輸入你的12個祕密助憶詞以回復金庫." + }, + "newPassword8Chars": { + "message": "新密碼 (至少 8 個字元)" + }, + "seedPhraseReq": { + "message": "助憶詞為 12 個詞語" + }, + "select": { + "message": "選擇" + }, + "selectCurrency": { + "message": "選擇幣別" + }, + "selectService": { + "message": "選擇服務" + }, + "selectType": { + "message": "選擇類型" + }, + "send": { + "message": "發送" + }, + "sendETH": { + "message": "發送 ETH" + }, + "sendTokens": { + "message": "發送代幣" + }, + "onlySendToEtherAddress": { + "message": "只發送 ETH 到乙太坊地址." + }, + "sendTokensAnywhere": { + "message": "發送代幣給擁有乙太坊帳戶的任何人" + }, + "settings": { + "message": "設定" + }, + "info": { + "message": "資訊" + }, + "shapeshiftBuy": { + "message": "從 Shapeshift 購買" + }, + "showPrivateKeys": { + "message": "顯示私鑰" + }, + "showQRCode": { + "message": "顯示 QR Code" + }, + "sign": { + "message": "簽名" + }, + "signMessage": { + "message": "簽署訊息" + }, + "signNotice": { + "message": "簽署此訊息可能會產生危險的副作用。 \n只從你完全信任的網站上簽名。這種危險的方法;將在未來的版本中被移除。" + }, + "sigRequest": { + "message": "請求簽署" + }, + "sigRequested": { + "message": "已請求簽署" + }, + "spaceBetween": { + "message": "there can only be a space between words" + }, + "status": { + "message": "狀態" + }, + "stateLogs": { + "message": "狀態紀錄" + }, + "stateLogsDescription": { + "message": "狀態紀錄包含你的公開帳戶地址和已傳送的交易資訊." + }, + "stateLogError": { + "message": "在取得狀態紀錄時發生錯誤." + }, + "submit": { + "message": "送出" + }, + "submitted": { + "message": "已送出" + }, + "supportCenter": { + "message": "造訪我們的協助中心" + }, + "symbolBetweenZeroTen": { + "message": "代號必須介於 0 到 10 字元間." + }, + "takesTooLong": { + "message": "花費太長時間?" + }, + "terms": { + "message": "使用條款" + }, + "testFaucet": { + "message": "測試水管" + }, + "to": { + "message": "目的帳號" + }, + "toETHviaShapeShift": { + "message": "$1 ETH 透過 ShapeShift", + "description": "system will fill in deposit type in start of message" + }, + "tokenAddress": { + "message": "代幣地址" + }, + "tokenAlreadyAdded": { + "message": "已加入過此代幣。" + }, + "tokenBalance": { + "message": "代幣餘額:" + }, + "tokenSelection": { + "message": "搜尋代幣或是從熱門代幣列表中選擇。" + }, + "tokenSymbol": { + "message": "代幣代號" + }, + "tokenWarning1": { + "message": "使用 MetaMask 帳戶追蹤你已購得的代幣。如果你使用不同的帳戶保存購得的代幣,那些代幣就不會出現在這裡。" + }, + "total": { + "message": "總量" + }, + "transactions": { + "message": "交易紀錄" + }, + "transactionMemo": { + "message": "交易備註(選填)" + }, + "transactionNumber": { + "message": "交易號碼" + }, + "transfers": { + "message": "交易" + }, + "troubleTokenBalances": { + "message": "無法取得代幣餘額。您k可以到這裡查看 ", + "description": "Followed by a link (here) to view token balances" + }, + "twelveWords": { + "message": "這 12 個單詞是唯一回復你的 MetaMask 帳號的方法。\n將它們儲存到那些安全且隱密的地方吧。" + }, + "typePassword": { + "message": "請輸入密碼" + }, + "uiWelcome": { + "message": "歡迎使用新版界面 (Beta)" + }, + "uiWelcomeMessage": { + "message": "你現在正在使用新的 Metamask 界面。試試諸如發送代幣等新功能,有任何問題請告知我們。" + }, + "unapproved": { + "message": "未同意" + }, + "unavailable": { + "message": "不可用" + }, + "unknown": { + "message": "未知" + }, + "unknownNetwork": { + "message": "未知私有網路" + }, + "unknownNetworkId": { + "message": "未知網路 ID" + }, + "uriErrorMsg": { + "message": "URIs 需要加入適當的 HTTP/HTTPS 前綴." + }, + "usaOnly": { + "message": "僅限美國", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "可用於各種不同的客戶端" + }, + "useOldUI": { + "message": "使用舊版界面" + }, + "validFileImport": { + "message": "您必須選擇一個合法的檔案來導入." + }, + "vaultCreated": { + "message": "已建立金庫" + }, + "viewAccount": { + "message": "查看帳戶" + }, + "visitWebSite": { + "message": "造訪我們的網站" + }, + "warning": { + "message": "警告" + }, + "welcomeBeta": { + "message": "歡迎到 MetaMask Beta" + }, + "whatsThis": { + "message": "這是什麼?" + }, + "yourSigRequested": { + "message": "正在請求你的簽署" + }, + "youSign": { + "message": "正在簽署" + } +} -- cgit From b2f454a03ca6f2ce98c494aa4e77aa8aaa82bf8c Mon Sep 17 00:00:00 2001 From: Filip Š Date: Mon, 26 Mar 2018 20:57:04 +0200 Subject: i18n - sl Slovenian translation (#3724) --- app/_locales/sl/messages.json | 819 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 819 insertions(+) create mode 100644 app/_locales/sl/messages.json (limited to 'app') diff --git a/app/_locales/sl/messages.json b/app/_locales/sl/messages.json new file mode 100644 index 000000000..0532f11b2 --- /dev/null +++ b/app/_locales/sl/messages.json @@ -0,0 +1,819 @@ +{ + "accept": { + "message": "Sprejmi" + }, + "account": { + "message": "Račun" + }, + "accountDetails": { + "message": "Podrobnosti računa" + }, + "accountName": { + "message": "Ime računa" + }, + "address": { + "message": "Naslov" + }, + "addCustomToken": { + "message": "Dodaj žeton po meri" + }, + "addToken": { + "message": "Dodaj žeton" + }, + "addTokens": { + "message": "Dodaj žetone" + }, + "amount": { + "message": "Znesek" + }, + "amountPlusGas": { + "message": "Znesek + Gas" + }, + "appDescription": { + "message": "Denarnica za Ethereum v brskalniku", + "description": "The description of the application" + }, + "appName": { + "message": "MetaMask", + "description": "The name of the application" + }, + "attemptingConnect": { + "message": "Povezovanje z verigo blokov ..." + }, + "attributions": { + "message": "Dodelitve" + }, + "available": { + "message": "Na voljo" + }, + "back": { + "message": "Nazaj" + }, + "balance": { + "message": "Znesek:" + }, + "balances": { + "message": "Vaš znesek" + }, + "balanceIsInsufficientGas": { + "message": "Napačen znesek za skupno gas vrednost" + }, + "beta": { + "message": "BETA" + }, + "betweenMinAndMax": { + "message": "mora biti večji ali enak $1 in manjši ali enak $1.", + "description": "helper for inputting hex as decimal input" + }, + "blockiesIdenticon": { + "message": "Uporabite Blockies Identicon" + }, + "borrowDharma": { + "message": "Izposoja z Dharma (Beta)" + }, + "builtInCalifornia": { + "message": "MetaMask je ustvarjen v Kaliforniji." + }, + "buy": { + "message": "Kupi" + }, + "buyCoinbase": { + "message": "Kupi na Coinbase" + }, + "buyCoinbaseExplainer": { + "message": "Coinbase je najpopularnejši načun za kupovanje in prodajo bitcoinov, ethereuma, in litecoina." + }, + "cancel": { + "message": "Prekliči" + }, + "classicInterface": { + "message": "Uporabi navaden način" + }, + "clickCopy": { + "message": "Kliknite za kopiranje" + }, + "confirm": { + "message": "Potrdi" + }, + "confirmContract": { + "message": "Potrdi pogodbo" + }, + "confirmPassword": { + "message": "Potrdi geslo" + }, + "confirmTransaction": { + "message": "Potrdi transakcijo" + }, + "continue": { + "message": "Nadaljuj" + }, + "continueToCoinbase": { + "message": "Nadaljuj na Coinbase" + }, + "contractDeployment": { + "message": "Ustvarjanje pogodbe" + }, + "conversionProgress": { + "message": "Poteka pretvorba" + }, + "copiedButton": { + "message": "Kopirano" + }, + "copiedClipboard": { + "message": "Kopirano v odložišče" + }, + "copiedExclamation": { + "message": "Kopirano!" + }, + "copiedSafe": { + "message": "Prilepil sem ga na varno!" + }, + "copy": { + "message": "Kopiraj" + }, + "copyToClipboard": { + "message": "Kopiraj v odložišče" + }, + "copyButton": { + "message": " Kopiraj " + }, + "copyPrivateKey": { + "message": "To je vaš zesebni ključ (kliknite za kopiranje)" + }, + "create": { + "message": "Ustvari" + }, + "createAccount": { + "message": "Ustvari račun" + }, + "createDen": { + "message": "Ustvari" + }, + "crypto": { + "message": "Kripto", + "description": "Exchange type (cryptocurrencies)" + }, + "currentConversion": { + "message": "Trenutna cena" + }, + "currentNetwork": { + "message": "Trenutno omrežje" + }, + "customGas": { + "message": "Prilagodi gas" + }, + "customize": { + "message": "Prilagodi" + }, + "customRPC": { + "message": "Poljuben RPC" + }, + "decimalsMustZerotoTen": { + "message": "Decimalk mora biti vsaj 0, in ne več kot 36." + }, + "decimal": { + "message": "Decimalke natančnosti" + }, + "defaultNetwork": { + "message": "Privzeto omrežje za transakcije je Main Net." + }, + "denExplainer": { + "message": "DEN je vaša šifrirana shramba v MetaMasku." + }, + "deposit": { + "message": "Vplačilo" + }, + "depositBTC": { + "message": "Vplačajte vaš BTC na spodnji naslov:" + }, + "depositCoin": { + "message": "Vplačajte $1 na spodnji naslov", + "description": "Tells the user what coin they have selected to deposit with shapeshift" + }, + "depositEth": { + "message": "Vplačilo ETH" + }, + "depositEther": { + "message": "Vplačilo ethera" + }, + "depositFiat": { + "message": "Vplačilo s klasičnimi valutami" + }, + "depositFromAccount": { + "message": "Vplačilo iz drugega računa" + }, + "depositShapeShift": { + "message": "Vplačilo z ShapeShift" + }, + "depositShapeShiftExplainer": { + "message": "Če imate druge kriptovalute, lahko vpačate ether neposredno v MetaMask. Brez računov." + }, + "details": { + "message": "Podrobnosti" + }, + "directDeposit": { + "message": "Direktno vplačilo" + }, + "directDepositEther": { + "message": "Direktno vplačilo ehera" + }, + "directDepositEtherExplainer": { + "message": "Če že imate ether, ga lahko najhitreje dobite v MetaMask z direktnim vplačilom." + }, + "done": { + "message": "Končano" + }, + "downloadStatelogs": { + "message": "Prenesi state dnevnike" + }, + "edit": { + "message": "Uredi" + }, + "editAccountName": { + "message": "Uredi ime računa" + }, + "emailUs": { + "message": "Pišite nam!" + }, + "encryptNewDen": { + "message": "Šifrirajte DEN" + }, + "enterPassword": { + "message": "Vpišite geslo" + }, + "enterPasswordConfirm": { + "message": "Potrdite geslo" + }, + "etherscanView": { + "message": "Poglejte račun na Etherscan" + }, + "exchangeRate": { + "message": "Menjalni tečaj" + }, + "exportPrivateKey": { + "message": "Izvozi zasebni ključ" + }, + "exportPrivateKeyWarning": { + "message": "Izvažanje zasebnih ključev je na lastno odgovornost." + }, + "failed": { + "message": "Ni uspelo" + }, + "fiat": { + "message": "FIAT", + "description": "Exchange type" + }, + "fileImportFail": { + "message": "Uvoz z datoteko ni uspel? Kliknite tukaj!", + "description": "Helps user import their account from a JSON file" + }, + "followTwitter": { + "message": "Sledite nam na Twitterju" + }, + "from": { + "message": "Od" + }, + "fromToSame": { + "message": "From and To address cannot be the same" + }, + "fromShapeShift": { + "message": "Od ShapeShift" + }, + "gas": { + "message": "Gas", + "description": "Short indication of gas cost" + }, + "gasFee": { + "message": "Gas fee" + }, + "gasLimit": { + "message": "Gas limit" + }, + "gasLimitCalculation": { + "message": "Priporočen gas limit je izračunan glede na omrežje." + }, + "gasLimitRequired": { + "message": "Gas limit je zahtevan" + }, + "gasLimitTooLow": { + "message": "Gas limit mora biti najmanj 21000" + }, + "generatingSeed": { + "message": "Ustvarjenje seed ..." + }, + "gasPrice": { + "message": "Gas price (GWEI)" + }, + "gasPriceCalculation": { + "message": "Priporočen gas price je izračunan glede na omrežje" + }, + "gasPriceRequired": { + "message": "Gas price je zahtevan" + }, + "getEther": { + "message": "Pridobite ether" + }, + "getEtherFromFaucet": { + "message": "Pridobite ether iz fauceta za $1", + "description": "Displays network name for Ether faucet" + }, + "greaterThanMin": { + "message": "mora biti višji ali enak $1.", + "description": "helper for inputting hex as decimal input" + }, + "here": { + "message": "tukaj", + "description": "as in -click here- for more information (goes with troubleTokenBalances)" + }, + "hereList": { + "message": "Tukaj je seznam!!!" + }, + "hide": { + "message": "Skrij" + }, + "hideToken": { + "message": "Skrij žeton" + }, + "hideTokenPrompt": { + "message": "Skrijem žeton?" + }, + "howToDeposit": { + "message": "Kako želite vplačati ether?" + }, + "holdEther": { + "message": "Omogoča vam, da imate eter in žetone in služi kot most za decentralizirane aplikacije." + }, + "import": { + "message": "Uvozi", + "description": "Button to import an account from a selected file" + }, + "importAccount": { + "message": "Uvozi račun" + }, + "importAccountMsg": { + "message":" Uvoženi računi ne bodo povezani s prvotnim seedphaseom. Preberite več o uvoženih računih " + }, + "importAnAccount": { + "message": "Uvozi račun" + }, + "importDen": { + "message": "Uvozi DEN" + }, + "imported": { + "message": "Uvoženo", + "description": "status showing that an account has been fully loaded into the keyring" + }, + "infoHelp": { + "message": "Info & Pomoč" + }, + "insufficientFunds": { + "message": "Nezadostna sredstva." + }, + "insufficientTokens": { + "message": "Nezadostni žetoni." + }, + "invalidAddress": { + "message": "Nepravilen naslov" + }, + "invalidAddressRecipient": { + "message": "Prejemnikov naslov je neveljaven" + }, + "invalidGasParams": { + "message": "Nepravilno nastavljen gas" + }, + "invalidInput": { + "message": "Napačen vnos." + }, + "invalidRequest": { + "message": "Napačna zahteva" + }, + "invalidRPC": { + "message": "Napačen RPC URI" + }, + "jsonFail": { + "message": "Nekaj je bilo narobe. Prepričajte se, da je JSON datoteka pravilno oblikovana." + }, + "jsonFile": { + "message": "JSON datoteka", + "description": "format for importing an account" + }, + "kovan": { + "message": "Testno omrežje Kovan" + }, + "knowledgeDataBase": { + "message": "Obiščite našo pomoč" + }, + "lessThanMax": { + "message": "mora biti večji ali enak $1.", + "description": "helper for inputting hex as decimal input" + }, + "likeToAddTokens": { + "message": "Želite dodati te žetone?" + }, + "limit": { + "message": "Omejitev" + }, + "loading": { + "message": "Nalaganje ..." + }, + "loadingTokens": { + "message": "Nalaganje žetonov ..." + }, + "localhost": { + "message": "Localhost 8545" + }, + "login": { + "message": "Prijava" + }, + "logout": { + "message": "Odjava" + }, + "loose": { + "message": "Loose" + }, + "loweCaseWords": { + "message": "seed words imajo lahko le male črke" + }, + "mainnet": { + "message": "Glavno omrežje" + }, + "message": { + "message": "Sporočilo" + }, + "metamaskDescription": { + "message": "MetaMask je varen identitetni sklad za Ethereum." + }, + "min": { + "message": "Najmanj" + }, + "myAccounts": { + "message": "Moji računi" + }, + "mustSelectOne": { + "message": "Izbran mora biti vsaj 1 žeton." + }, + "needEtherInWallet": { + "message": "Za interakcijo z decentraliziranimi aplikacijami, ki uporabljajo MetaMask, boste v svoji denarnici potrebovali eter." + }, + "needImportFile": { + "message": "Za uvoz morate izbrati datoteko.", + "description": "User is important an account and needs to add a file to continue" + }, + "needImportPassword": { + "message": "Za izbrano datoteko morate vnesti geslo.", + "description": "Password and file needed to import an account" + }, + "negativeETH": { + "message": "Ni mogoče poslati negativne vsote ETH." + }, + "networks": { + "message": "Omrežja" + }, + "newAccount": { + "message": "Nov račun" + }, + "newAccountNumberName": { + "message": "Račun $1", + "description": "Default name of next account to be created on create account screen" + }, + "newContract": { + "message": "Nova pogodba" + }, + "newPassword": { + "message": "Novo geslo (min. 8. črk)" + }, + "newRecipient": { + "message": "Nov prejemnik" + }, + "newRPC": { + "message": "Nov RPC URL" + }, + "next": { + "message": "Naprej" + }, + "noAddressForName": { + "message": "Za to ime ni bil nastavljen noben naslov." + }, + "noDeposits": { + "message": "Ni prejetih vplačil" + }, + "noTransactionHistory": { + "message": "Ni zgodovine transakcij." + }, + "noTransactions": { + "message": "Ni transakcij" + }, + "notStarted": { + "message": "Ni se začelo" + }, + "oldUI": { + "message": "Starejši uporabniški vmesnik" + }, + "oldUIMessage": { + "message": "Vrnili ste se v starejši uporabniški vmesnik. V novega se lahko vrnete z možnostjo v spustnem meniju v zgornjem desnem kotu." + }, + "or": { + "message": "ali", + "description": "choice between creating or importing a new account" + }, + "passwordCorrect": { + "message": "Prepričajte se, da je geslo pravilno." + }, + "passwordMismatch": { + "message": "gesli se ne ujemata", + "description": "in password creation process, the two new password fields did not match" + }, + "passwordShort": { + "message": "geslo ni dovolj dolgo", + "description": "in password creation process, the password is not long enough to be secure" + }, + "pastePrivateKey": { + "message": "Tukaj prilepite zasebni ključ:", + "description": "For importing an account from a private key" + }, + "pasteSeed": { + "message": "Tukaj prilepite seed phrase!" + }, + "personalAddressDetected": { + "message": "Osebni naslov je zaznan. Vnesite naslov žetona." + }, + "pleaseReviewTransaction": { + "message": "Preglejte transakcijo." + }, + "privacyMsg": { + "message": "Politika zasebnosti" + }, + "privateKey": { + "message": "Zasebni ključ", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "Opozorilo: Nikoli ne razkrijte tega ključa. Vsakdo s svojimi zasebnimi ključi lahko ukrade vse premoženje v računu." + }, + "privateNetwork": { + "message": "Zasebno omrežje" + }, + "qrCode": { + "message": "Prikaži QR kodo" + }, + "readdToken": { + "message": "Ta žeton lahko dodate tudi v prihodnosti, tako da odprete možnost »Dodaj žeton« v meniju z računi." + }, + "readMore": { + "message": "Preberite več." + }, + "readMore2": { + "message": "Preberite več." + }, + "receive": { + "message": "Prejmite" + }, + "recipientAddress": { + "message": "Prejemnikov naslov" + }, + "refundAddress": { + "message": "Vaš naslov za vračilo" + }, + "rejected": { + "message": "Zavrnjeno" + }, + "resetAccount": { + "message": "Ponastavi račun" + }, + "restoreFromSeed": { + "message": "Obnovi iz seed phrase" + }, + "required": { + "message": "Zahtevano" + }, + "retryWithMoreGas": { + "message": "Poskusi z višjim gas price" + }, + "revealSeedWords": { + "message": "Prikaži seed words" + }, + "revealSeedWordsWarning": { + "message": "Ne obnovite seed words na javnem mestu! Te besede se lahko uporabijo za krajo vseh vaših računov." + }, + "revert": { + "message": "Povrni" + }, + "rinkeby": { + "message": "Testno omrežje Rinkeby" + }, + "ropsten": { + "message": "Testno omrežje Ropsten" + }, + "sampleAccountName": { + "message": "npr. Moj nov račun", + "description": "Help user understand concept of adding a human-readable name to their account" + }, + "save": { + "message": "Shrani" + }, + "saveAsFile": { + "message": "Shrani kot datoteko", + "description": "Account export process" + }, + "saveSeedAsFile": { + "message": "Shrani seed words kot datoteko" + }, + "search": { + "message": "Iskanje" + }, + "secretPhrase": { + "message": "Tukaj vnesite svoje seed words, da obnovite svoje račune." + }, + "seedPhraseReq": { + "message": "seed phrases so dolgi 12 besed" + }, + "select": { + "message": "Izberi" + }, + "selectCurrency": { + "message": "Izberi valuto" + }, + "selectService": { + "message": "Izberi storitev" + }, + "selectType": { + "message": "Izberi vrsto" + }, + "send": { + "message": "Pošlji" + }, + "sendETH": { + "message": "Pošlji ETH" + }, + "sendTokens": { + "message": "Pošlji žetone" + }, + "sendTokensAnywhere": { + "message": "Pošljite žetone vsem, ki imajo Ethereum račun" + }, + "settings": { + "message": "Nastavitve" + }, + "shapeshiftBuy": { + "message": "Kupite z Shapeshift" + }, + "showPrivateKeys": { + "message": "Prikaži zasebne ključe" + }, + "showQRCode": { + "message": "Prikaži QR kodo" + }, + "sign": { + "message": "Podpiši" + }, + "signMessage": { + "message": "Podpiši sporočilo" + }, + "signNotice": { + "message": "To podpisovanje lahko povzroči \nnevarne stranske učinke. Podpisujte samo sporočila \nstrani, ki jim zaupate s svojim celotnim računom.\n Ta nevarna funkcija bo odstranjena v prihodnji različici. " + }, + "sigRequest": { + "message": "Zahteva za podpis" + }, + "sigRequested": { + "message": "Podpis je zahtevan" + }, + "spaceBetween": { + "message": "med besedami je lahko samo presledek" + }, + "status": { + "message": "Status" + }, + "stateLogs": { + "message": "State dnevniki" + }, + "stateLogsDescription": { + "message": "State dnevniki vsebujejo naslove vašega računa in poslane transakcije.." + }, + "submit": { + "message": "Potrdi" + }, + "supportCenter": { + "message": "Obiščite našo podporo" + }, + "symbolBetweenZeroTen": { + "message": "Simbol mora biti dolg od 0 do 10 znakov." + }, + "takesTooLong": { + "message": "Traja predolgo?" + }, + "terms": { + "message": "Pogoji uporabe" + }, + "testFaucet": { + "message": "Testni faucet" + }, + "to": { + "message": "Za" + }, + "toETHviaShapeShift": { + "message": "$1 v ETH prek ShapeShift", + "description": "system will fill in deposit type in start of message" + }, + "tokenAddress": { + "message": "Naslov žetona" + }, + "tokenAlreadyAdded": { + "message": "Žeton je že bil dodan." + }, + "tokenBalance": { + "message": "Vaš znesek žetona:" + }, + "tokenSelection": { + "message": "Poiščite žetone ali jih izberite z našega seznama priljubljenih žetonov." + }, + "tokenSymbol": { + "message": "Simbol žetona" + }, + "tokenWarning1": { + "message": "Spremljajte žetone, ki ste jih kupili s svojim MetaMask računom. Če ste kupili žetone z drugačnim računom, ti žetoni ne bodo prikazani tukaj." + }, + "total": { + "message": "Skupno" + }, + "transactions": { + "message": "transakcije" + }, + "transactionMemo": { + "message": "Opis transakcije (ni zahtevano)" + }, + "transactionNumber": { + "message": "Številka transakcije" + }, + "transfers": { + "message": "Prenosi" + }, + "troubleTokenBalances": { + "message": "Imeli smo težave pri nalaganju vaših žetonov. Ogledate si jih lahko ", + "description": "Followed by a link (here) to view token balances" + }, + "twelveWords": { + "message": "Edini način za obnovitev MetaMask računa, je teh 12 besed.\nShranite jih na varno in skrivno mesto." + }, + "typePassword": { + "message": "Vpišite vaše geslo" + }, + "uiWelcome": { + "message": "Dobrodošli v novem uporabniškem vmesniku (Beta)" + }, + "uiWelcomeMessage": { + "message": "Zdaj uporabljate novi MetaMask uporabniški vmesnik. Razglejte se, preizkusite nove funkcije, kot so pošiljanje žetonov, in nas obvestite, če imate kakšne težave." + }, + "unavailable": { + "message": "Ni na voljo" + }, + "unknown": { + "message": "Neznano" + }, + "unknownNetwork": { + "message": "Neznano zasebno omrežje" + }, + "unknownNetworkId": { + "message": "Neznan ID omrežja" + }, + "uriErrorMsg": { + "message": "URI-ji zahtevajo ustrezno HTTP/HTTPS predpono." + }, + "usaOnly": { + "message": "Samo za ZDA", + "description": "Using this exchange is limited to people inside the USA" + }, + "usedByClients": { + "message": "Uporablja jih več različnih odjemalcev" + }, + "useOldUI": { + "message": "Uporabi star uporabniški vmesnik" + }, + "validFileImport": { + "message": "Za uvoz morate izbrati pravilno datoteko." + }, + "vaultCreated": { + "message": "Račun je ustvarjen" + }, + "viewAccount": { + "message": "Poglej račun" + }, + "visitWebSite": { + "message": "Obiščite našo spletno stran" + }, + "warning": { + "message": "Opozorilo" + }, + "welcomeBeta": { + "message": "Dobrodošli v MetaMask Beta" + }, + "whatsThis": { + "message": "Kaj je to?" + }, + "yourSigRequested": { + "message": "Vaš podpis je bil zahtevan" + }, + "youSign": { + "message": "Podpisani ste" + } +} -- cgit From 5a61a6d57af62bd4dea8f1563a9edde6a03e439b Mon Sep 17 00:00:00 2001 From: Frankie Date: Mon, 26 Mar 2018 14:24:12 -0700 Subject: migration for adding submittedTime to the txMeta (#3727) * test for migration 022 * write migration 022 adding submittedTime to txMetas whove been submitted --- app/scripts/migrations/022.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 app/scripts/migrations/022.js (limited to 'app') diff --git a/app/scripts/migrations/022.js b/app/scripts/migrations/022.js new file mode 100644 index 000000000..c3c0d53ef --- /dev/null +++ b/app/scripts/migrations/022.js @@ -0,0 +1,39 @@ + +const version = 22 + +/* + +This migration adds submittedTime to the txMeta if it is not their + +*/ + +const clone = require('clone') + +module.exports = { + version, + + migrate: function (originalVersionedData) { + const versionedData = clone(originalVersionedData) + versionedData.meta.version = version + try { + const state = versionedData.data + const newState = transformState(state) + versionedData.data = newState + } catch (err) { + console.warn(`MetaMask Migration #${version}` + err.stack) + } + return Promise.resolve(versionedData) + }, +} + +function transformState (state) { + const newState = state + const transactions = newState.TransactionController.transactions + + newState.TransactionController.transactions = transactions.map((txMeta) => { + if (txMeta.status !== 'submitted' || txMeta.submittedTime) return txMeta + txMeta.submittedTime = (new Date()).getTime() + return txMeta + }) + return newState +} -- cgit