diff --git a/.storybook/i18n-party-addon/register.js b/.storybook/i18n-party-addon/register.js new file mode 100644 index 000000000..20175a80e --- /dev/null +++ b/.storybook/i18n-party-addon/register.js @@ -0,0 +1,37 @@ +// import { useGlobals } from '@storybook/api'; +const { useGlobals } = require('@storybook/api') +const React = require("react") +const { addons, types } = require("@storybook/addons") +const { Icons, IconButton } = require('@storybook/components') +const localeList = require('../../app/_locales/index.json') +const { useEffect } = React + +addons.register("i18n-party", () => { + + addons.add("i18n-party", { + title: "rotates through every i18n locale", + //👇 Sets the type of UI element in Storybook + type: types.TOOL, + match: () => true, + render: (...args) => { + // https://github.com/storybookjs/storybook/blob/6490a0d646dbaa293b76bbde477daca615efe789/addons/toolbars/src/components/MenuToolbar.tsx#L2 + const [globals, updateGlobals] = useGlobals() + useEffect(() => { + if (!globals.localeParty) return + const interval = setInterval((...args) => { + const currentIndex = localeList.findIndex(({ code }) => code === globals.locale) + const nextIndex = (currentIndex + 1) % localeList.length + const nextLocale = localeList[nextIndex].code + updateGlobals({ locale: nextLocale }) + }, 2000) + return () => clearInterval(interval) + }) + + return ( + updateGlobals({ localeParty: !globals.localeParty })}> + + + ) + }, + }) +}) diff --git a/.storybook/main.js b/.storybook/main.js index b2ff41a8e..2e708e264 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -9,6 +9,7 @@ module.exports = { '@storybook/addon-actions', '@storybook/addon-backgrounds', '@storybook/addon-toolbars', + './i18n-party-addon/register.js', ], webpackFinal: async (config) => { config.module.strictExportPresence = true diff --git a/.storybook/preview.js b/.storybook/preview.js index 8c6c910cf..112c8f16e 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -1,22 +1,24 @@ -import React from 'react' -import { addDecorator, addParameters } from '@storybook/react' -import { withKnobs } from '@storybook/addon-knobs' -import { Provider } from 'react-redux' -import configureStore from '../ui/app/store/store' -import '../ui/app/css/index.scss' -import localeList from '../app/_locales/index.json' -import * as allLocales from './locales' -import { I18nProvider, LegacyI18nProvider } from './i18n' +import React, { useEffect } from 'react'; +import { addDecorator, addParameters } from '@storybook/react'; +import { useGlobals } from '@storybook/api'; +import { withKnobs } from '@storybook/addon-knobs'; +import { Provider } from 'react-redux'; +import configureStore from '../ui/app/store/store'; +import '../ui/app/css/index.scss'; +import localeList from '../app/_locales/index.json'; +import * as allLocales from './locales'; +import { I18nProvider, LegacyI18nProvider } from './i18n'; +import testData from './test-data.js' addParameters({ backgrounds: { default: 'light', values: [ - { name: 'light', value: '#FFFFFF'}, + { name: 'light', value: '#FFFFFF' }, { name: 'dark', value: '#333333' }, ], - } -}) + }, +}); export const globalTypes = { locale: { @@ -26,8 +28,8 @@ export const globalTypes = { toolbar: { icon: 'globe', items: localeList.map(({ code, name }) => { - return { value: code, right: code, title: name } - }) + return { value: code, right: code, title: name }; + }), }, }, }; @@ -37,15 +39,13 @@ const styles = { display: 'flex', justifyContent: 'center', alignItems: 'center', -} +}; -const store = configureStore({ - metamask: { metamask: { } }, -}) +const store = configureStore(testData) const metamaskDecorator = (story, context) => { - const currentLocale = context.globals.locale - const current = allLocales[currentLocale] + const currentLocale = context.globals.locale; + const current = allLocales[currentLocale]; return ( { en={allLocales.en} > -
- { story() } -
+
{story()}
- ) -} + ); +}; -addDecorator(withKnobs) -addDecorator(metamaskDecorator) +addDecorator(withKnobs); +addDecorator(metamaskDecorator); diff --git a/.storybook/test-data.js b/.storybook/test-data.js new file mode 100644 index 000000000..99295cab0 --- /dev/null +++ b/.storybook/test-data.js @@ -0,0 +1,218 @@ +import { TRANSACTION_STATUSES } from '../shared/constants/transaction'; + +const state = { + metamask: { + isInitialized: true, + isUnlocked: true, + featureFlags: { sendHexData: true }, + rpcUrl: 'https://rawtestrpc.metamask.io/', + identities: { + '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825': { + address: '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825', + name: 'Send Account 1', + }, + '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb': { + address: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', + name: 'Send Account 2', + }, + '0x2f8d4a878cfa04a6e60d46362f5644deab66572d': { + address: '0x2f8d4a878cfa04a6e60d46362f5644deab66572d', + name: 'Send Account 3', + }, + '0xd85a4b6a394794842887b8284293d69163007bbb': { + address: '0xd85a4b6a394794842887b8284293d69163007bbb', + name: 'Send Account 4', + }, + }, + cachedBalances: {}, + currentBlockGasLimit: '0x4c1878', + currentCurrency: 'USD', + conversionRate: 1200.88200327, + conversionDate: 1489013762, + nativeCurrency: 'ETH', + frequentRpcList: [], + network: '3', + provider: { + type: 'ropsten', + chainId: '0x3', + }, + accounts: { + '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825': { + code: '0x', + balance: '0x47c9d71831c76efe', + nonce: '0x1b', + address: '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825', + }, + '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb': { + code: '0x', + balance: '0x37452b1315889f80', + nonce: '0xa', + address: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', + }, + '0x2f8d4a878cfa04a6e60d46362f5644deab66572d': { + code: '0x', + balance: '0x30c9d71831c76efe', + nonce: '0x1c', + address: '0x2f8d4a878cfa04a6e60d46362f5644deab66572d', + }, + '0xd85a4b6a394794842887b8284293d69163007bbb': { + code: '0x', + balance: '0x0', + nonce: '0x0', + address: '0xd85a4b6a394794842887b8284293d69163007bbb', + }, + }, + addressBook: { + '0x3': { + '0x06195827297c7a80a443b6894d3bdb8824b43896': { + address: '0x06195827297c7a80a443b6894d3bdb8824b43896', + name: 'Address Book Account 1', + chainId: '0x3', + }, + }, + }, + tokens: [ + { + address: '0x1a195821297c7a80a433b6894d3bdb8824b43896', + decimals: 18, + symbol: 'ABC', + }, + { + address: '0x8d6b81208414189a58339873ab429b6c47ab92d3', + decimals: 4, + symbol: 'DEF', + }, + { + address: '0xa42084c8d1d9a2198631988579bb36b48433a72b', + decimals: 18, + symbol: 'GHI', + }, + ], + transactions: {}, + currentNetworkTxList: [ + { + id: 'mockTokenTx1', + txParams: { + to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', + from: '0xd85a4b6a394794842887b8284293d69163007bbb', + }, + time: 1700000000000, + }, + { + id: 'mockTokenTx2', + txParams: { + to: '0xafaketokenaddress', + from: '0xd85a4b6a394794842887b8284293d69163007bbb', + }, + time: 1600000000000, + }, + { + id: 'mockTokenTx3', + txParams: { + to: '0x8d6b81208414189a58339873ab429b6c47ab92d3', + from: '0xd85a4b6a394794842887b8284293d69163007bbb', + }, + time: 1500000000000, + }, + { + id: 'mockEthTx1', + txParams: { + to: '0xd85a4b6a394794842887b8284293d69163007bbb', + from: '0xd85a4b6a394794842887b8284293d69163007bbb', + }, + time: 1400000000000, + }, + ], + unapprovedMsgs: { + '0xabc': { id: 'unapprovedMessage1', time: 1650000000000 }, + '0xdef': { id: 'unapprovedMessage2', time: 1550000000000 }, + '0xghi': { id: 'unapprovedMessage3', time: 1450000000000 }, + }, + unapprovedMsgCount: 0, + unapprovedPersonalMsgs: {}, + unapprovedPersonalMsgCount: 0, + unapprovedDecryptMsgs: {}, + unapprovedDecryptMsgCount: 0, + unapprovedEncryptionPublicKeyMsgs: {}, + unapprovedEncryptionPublicKeyMsgCount: 0, + keyringTypes: ['Simple Key Pair', 'HD Key Tree'], + keyrings: [ + { + type: 'HD Key Tree', + accounts: [ + 'fdea65c8e26263f6d9a1b5de9555d2931a33b825', + 'c5b8dbac4c1d3f152cdeb400e2313f309c410acb', + '2f8d4a878cfa04a6e60d46362f5644deab66572d', + ], + }, + { + type: 'Simple Key Pair', + accounts: ['0xd85a4b6a394794842887b8284293d69163007bbb'], + }, + ], + selectedAddress: '0xd85a4b6a394794842887b8284293d69163007bbb', + send: { + gasLimit: '0xFFFF', + gasPrice: '0xaa', + gasTotal: '0xb451dc41b578', + tokenBalance: 3434, + from: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', + to: '0x987fedabc', + amount: '0x080', + memo: '', + errors: { + someError: null, + }, + maxModeOn: false, + editingTransactionId: 97531, + }, + unapprovedTxs: { + 4768706228115573: { + id: 4768706228115573, + time: 1487363153561, + status: TRANSACTION_STATUSES.UNAPPROVED, + gasMultiplier: 1, + metamaskNetworkId: '3', + txParams: { + from: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb', + to: '0x18a3462427bcc9133bb46e88bcbe39cd7ef0e761', + value: '0xde0b6b3a7640000', + metamaskId: 4768706228115573, + metamaskNetworkId: '3', + gas: '0x5209', + }, + txFee: '17e0186e60800', + txValue: 'de0b6b3a7640000', + maxCost: 'de234b52e4a0800', + gasPrice: '4a817c800', + }, + }, + currentLocale: 'en', + }, + appState: { + menuOpen: false, + currentView: { + name: 'accountDetail', + detailView: null, + context: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', + }, + accountDetail: { + subview: 'transactions', + }, + modal: { + modalState: {}, + previousModalState: {}, + }, + isLoading: false, + warning: null, + scrollToBottom: false, + forgottenPassword: null, + }, + send: { + fromDropdownOpen: false, + toDropdownOpen: false, + errors: { someError: null }, + }, +}; + +export default state; diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json index a8cfd9bbe..86b131c4b 100644 --- a/app/_locales/ja/messages.json +++ b/app/_locales/ja/messages.json @@ -1,9 +1,20 @@ { + "about": { + "message": "バヌゞョン情報" + }, "aboutSettingsDescription": { - "message": "バヌゞョンやサポヌト、問合せ先など" + "message": "バヌゞョン、サポヌトセンタヌ、問い合わせ情報" }, "acceleratingATransaction": { - "message": "*より高いガス䟡栌を䜿甚するず、ネットワヌクでより速く凊理され、トランザクションを高速化できる可胜性が高くなりたすが、垞に保蚌されるずは限りたせん。" + "message": "* より高いGas料金を支払うず、トランザクションはより早くネットワヌクで凊理される可胜性が高くなりたす。ただし、これは垞に保蚌されるずは限りたせん。" + }, + "acceptTermsOfUse": { + "message": "$1 の内容を確認し、同意したす", + "description": "$1 is the `terms` message" + }, + "accessAndSpendNotice": { + "message": "$1 はアクセスしおこの最倧量たで䜿甚する可胜性がありたす", + "description": "$1 is the url of the site requesting ability to spend" }, "accessingYourCamera": { "message": "カメラにアクセスしおいたす..." @@ -12,7 +23,7 @@ "message": "アカりント" }, "accountDetails": { - "message": "アカりント詳现" + "message": "アカりントの詳现" }, "accountName": { "message": "アカりント名" @@ -21,28 +32,37 @@ "message": "アカりント蚭定" }, "accountSelectionRequired": { - "message": "アカりントを遞択しおください。" + "message": "アカりントを遞択する必芁がありたす!" + }, + "active": { + "message": "アクティブ" + }, + "activity": { + "message": "アクティビティ" }, "activityLog": { - "message": "アクティビティログ" + "message": "アクティビティのログ" + }, + "addAccount": { + "message": "アカりントの远加" }, "addAcquiredTokens": { - "message": "MetaMaskで獲埗したトヌクンを远加する" + "message": "MetaMaskで取埗したトヌクンを远加する" }, "addAlias": { - "message": "゚むリアスを远加" + "message": "゚むリアスの远加" }, "addNetwork": { - "message": "ネットワヌク远加" + "message": "ネットワヌクの远加" }, "addRecipient": { - "message": "受取人远加" + "message": "受取人を远加" }, "addSuggestedTokens": { - "message": "掚奚トヌクンを远加" + "message": "掚奚されたトヌクンを远加" }, "addToAddressBook": { - "message": "アドレス垳に远加" + "message": "アドレス垳ぞ远加" }, "addToAddressBookModalPlaceholder": { "message": "䟋: John D" @@ -62,19 +82,77 @@ "advancedSettingsDescription": { "message": "開発者向け機胜では、状態ログのダりンロヌド、アカりントリセットし、テストネットやカスタムRPCの蚭定が可胜です。" }, + "affirmAgree": { + "message": "同意したす" + }, + "aggregatorFeeCost": { + "message": "アグリゲヌタのネットワヌク手数料" + }, + "alertDisableTooltip": { + "message": "\"蚭定 > 譊告の蚭定\"で倉曎できたす" + }, + "alertSettingsUnconnectedAccount": { + "message": "未接続のアカりントを遞択しおWebサむト閲芧した時に譊告する" + }, + "alertSettingsUnconnectedAccountDescription": { + "message": "この譊告は、遞択䞭のアカりントが未接続のたたWeb3サむトを閲芧しおいるずきにポップアップ衚瀺されたす。" + }, + "alertSettingsWeb3ShimUsage": { + "message": "廃止されたwindow.web3 APIの䜿甚を譊告する" + }, + "alertSettingsWeb3ShimUsageDescription": { + "message": "この譊告は、遞択䞭のアカりントが廃止されたwindow.web3 APIを䜿甚しおサむトを閲芧したずきにポップアップ衚瀺されたす。サむトは恐らく機胜したせん。" + }, + "alerts": { + "message": "譊告の蚭定" + }, + "alertsSettingsDescription": { + "message": "譊告を有効化たたは無効化" + }, + "allowExternalExtensionTo": { + "message": "倖郚拡匵機胜に次の操䜜を蚱可したす:" + }, + "allowOriginSpendToken": { + "message": "$1 に $2 の䜿甚を蚱可したすか?", + "description": "$1 is the url of the site and $2 is the symbol of the token they are requesting to spend" + }, + "allowThisSiteTo": { + "message": "このサむトに次の操䜜を蚱可したす:" + }, + "allowWithdrawAndSpend": { + "message": "$1 に以䞋の額たでの匕き出しず䜿甚を蚱可したす。", + "description": "The url of the site that requested permission to 'withdraw and spend'" + }, "amount": { "message": "金額" }, + "amountInEth": { + "message": "$1 ETH", + "description": "Displays an eth amount to the user. $1 is a decimal number" + }, + "amountWithColon": { + "message": "金額:" + }, "appDescription": { - "message": "Ethereumのブラりザ・゚クステンション", + "message": "Ethereumりォレットのブラりザ・゚クステンション", "description": "The description of the application" }, "appName": { "message": "MetaMask", "description": "The name of the application" }, + "approvalAndAggregatorTxFeeCost": { + "message": "承認ずアグリゲヌタのネットワヌク手数料" + }, + "approvalTxGasCost": { + "message": "承認のトランザクションGas料金" + }, "approve": { - "message": "承認する" + "message": "䜿甚限床額の承認" + }, + "approveSpendLimit": { + "message": "䜿甚限床額 $1 を承認", + "description": "The token symbol that is being approved" }, "approved": { "message": "承認枈み" @@ -82,23 +160,29 @@ "asset": { "message": "アセット" }, + "assets": { + "message": "アセット" + }, "attemptToCancel": { - "message": "キャンセルを詊みたすか" + "message": "キャンセルを芁求したすか?" }, "attemptToCancelDescription": { - "message": "このキャンセルを送信しおも、元のトランザクションがキャンセルされるこずは保蚌されたせん。キャンセルが成功した堎合、䞊蚘の取匕手数料が請求されたす。" + "message": "キャンセルを芁求しおも、取匕のキャンセルは保蚌されたせん。キャンセルが成功した堎合、䞊蚘の取匕手数料が請求されたす。" }, "attemptingConnect": { "message": "ブロックチェヌンに接続䞭" }, "attributions": { - "message": "属性" + "message": "゜フトりェアの著䜜暩告知" + }, + "authorizedPermissions": { + "message": "以䞋の暩限を蚱可したした" }, "autoLockTimeLimit": { - "message": "自動ログアりト(分)" + "message": "自動ロック(分)" }, "autoLockTimeLimitDescription": { - "message": "MetaMaskが自動的にログアりトするたでのアむドル時間を分単䜍で蚭定したす。" + "message": "MetaMaskが自動的にロックするたでのアむドル時間を分単䜍で蚭定したす。" }, "average": { "message": "平均" @@ -106,59 +190,292 @@ "back": { "message": "戻る" }, + "backToAll": { + "message": "䞀芧に戻る" + }, + "backupApprovalInfo": { + "message": "シヌドフレヌズはりォレットの埩旧に必芁です。デバむスやパスワヌドの玛倱、MetaMaskの再むンストヌル時、たたは別のデバむスでりォレットを䜿甚する時に必芁です。" + }, + "backupApprovalNotice": { + "message": "シヌドフレヌズをバックアップしお、りォレットず資金の安党を確保しおください。" + }, + "backupNow": { + "message": "今すぐバックアップ" + }, "balance": { - "message": "残高:" + "message": "残高" + }, + "balanceOutdated": { + "message": "残高情報は最新ではない可胜性がありたす" + }, + "basic": { + "message": "基本" + }, + "blockExplorerUrl": { + "message": "ブロック゚クスプロヌラ" + }, + "blockExplorerView": { + "message": "$1 のアカりントを衚瀺", + "description": "$1 replaced by URL for custom block explorer" }, "blockiesIdenticon": { - "message": "Blockies Identicon を䜿甚" + "message": "Blockies Identiconを䜿甚" + }, + "browserNotSupported": { + "message": "このブラりザヌはサポヌトしおいたせん。" + }, + "builtInCalifornia": { + "message": "MetaMaskはカリフォルニアで蚭蚈、䜜成されたした。" + }, + "buy": { + "message": "入金" + }, + "buyWithWyre": { + "message": "WyreでETHを賌入" + }, + "buyWithWyreDescription": { + "message": "Wyreでは、デビットカヌドを䜿甚しおETHをMetaMaskアカりントに盎接入金できたす。" + }, + "bytes": { + "message": "バむト" + }, + "canToggleInSettings": { + "message": "通知は蚭定->譊告の蚭定で再床有効にできたす。" }, "cancel": { "message": "キャンセル" }, + "cancellationGasFee": { + "message": "キャンセルのGas料金" + }, + "cancelled": { + "message": "キャンセル枈み" + }, + "chainId": { + "message": "チェヌンID" + }, + "chromeRequiredForHardwareWallets": { + "message": "ハヌドりェアりォレットぞ接続するには、MetaMask on Google Chrome を䜿甚する必芁がありたす。" + }, + "clickToRevealSeed": { + "message": "シヌドフレヌズを衚瀺するにはここをクリックしたす" + }, + "close": { + "message": "閉じる" + }, "confirm": { "message": "確認" }, "confirmPassword": { "message": "パスワヌドの確認" }, + "confirmSecretBackupPhrase": { + "message": "シヌドフレヌズの確認" + }, + "confirmed": { + "message": "確認したした" + }, + "congratulations": { + "message": "おめでずうございたす" + }, + "connect": { + "message": "接続" + }, + "connectAccountOrCreate": { + "message": "アカりントを接続するか、たたは新芏に䜜成したす" + }, + "connectHardwareWallet": { + "message": "ハヌドりェアりォレットの接続" + }, + "connectManually": { + "message": "手動で珟圚のサむトに接続したす" + }, + "connectTo": { + "message": "接続先 $1", + "description": "$1 is the name/origin of a web3 site/application that the user can connect to metamask" + }, + "connectToAll": { + "message": "党おの $1 に接続", + "description": "$1 will be replaced by the translation of connectToAllAccounts" + }, + "connectToAllAccounts": { + "message": "アカりント", + "description": "will replace $1 in connectToAll, completing the sentence 'connect to all of your accounts', will be text that shows list of accounts on hover" + }, + "connectToMultiple": { + "message": "$1 に接続", + "description": "$1 will be replaced by the translation of connectToMultipleNumberOfAccounts" + }, + "connectToMultipleNumberOfAccounts": { + "message": "$1個のアカりント", + "description": "$1 is the number of accounts to which the web3 site/application is asking to connect; this will substitute $1 in connectToMultiple" + }, + "connectWithMetaMask": { + "message": "MetaMaskをサむトに接続する" + }, + "connectedAccountsDescriptionPlural": { + "message": "このサむトに接続されたアカりントは $1個ありたす。", + "description": "$1 is the number of accounts" + }, + "connectedAccountsDescriptionSingular": { + "message": "このサむトに接続されたアカりントは $1個ありたす。" + }, + "connectedAccountsEmptyDescription": { + "message": "MetaMaskはこのサむトに接続されおいたせん。Web3サむトに接続するには、サむト内にある接続ボタンを䜿甚したす。" + }, + "connectedSites": { + "message": "接続枈みのサむト" + }, + "connectedSitesDescription": { + "message": "$1 はサむトに接続されおいたす。サむトはアカりントアドレスを芋るこずができたす。", + "description": "$1 is the account name" + }, + "connectedSitesEmptyDescription": { + "message": "$1 はどのサむトずも接続されおいたせん。", + "description": "$1 is the account name" + }, + "connecting": { + "message": "接続しおいたす..." + }, + "connectingTo": { + "message": "$1 ぞの接続" + }, + "connectingToGoerli": { + "message": "Goerliテストネットワヌクぞの接続" + }, + "connectingToKovan": { + "message": "Kovanテストネットワヌクぞの接続" + }, + "connectingToMainnet": { + "message": "Ethereumメむンネットぞの接続" + }, + "connectingToRinkeby": { + "message": "Rinkebyテストネットワヌクぞの接続" + }, + "connectingToRopsten": { + "message": "Ropstenテストネットワヌクぞ接続" + }, + "contactUs": { + "message": "問い合わせ" + }, + "contacts": { + "message": "アドレス垳" + }, + "contactsSettingsDescription": { + "message": "アドレス垳の远加、線集、削陀、管理" + }, + "continueToWyre": { + "message": "Wyreぞ進む" + }, "contractDeployment": { "message": "コントラクトのデプロむ" }, "contractInteraction": { - "message": "コントラクトぞのアクセス" + "message": "コントラクトのむンタラクション" }, "copiedExclamation": { "message": "コピヌ完了!" }, + "copiedTransactionId": { + "message": "コピヌしたトランザクションID" + }, + "copyAddress": { + "message": "アドレスをクリップボヌドにコピヌしたした" + }, "copyPrivateKey": { "message": "これはあなたの秘密鍵です(クリックでコピヌ)" }, "copyToClipboard": { "message": "クリップボヌドぞコピヌ" }, + "copyTransactionId": { + "message": "トランザクションIDをコピヌ" + }, "create": { "message": "䜜成" }, + "createAWallet": { + "message": "りォレットの䜜成" + }, "createAccount": { "message": "アカりント䜜成" }, + "createPassword": { + "message": "パスワヌドの䜜成" + }, + "currencyConversion": { + "message": "通貚換算" + }, + "currentAccountNotConnected": { + "message": "珟圚のアカりントは接続されおいたせん" + }, + "currentExtension": { + "message": "珟圚の゚クステンションペヌゞ" + }, + "currentLanguage": { + "message": "珟圚の蚀語" + }, "customGas": { - "message": "ガスのカスタマむズ" + "message": "Gasのカスタマむズ" + }, + "customGasSubTitle": { + "message": "手数料を増やすず凊理たでの時間が短瞮できたす。短瞮できない堎合もありたす。" }, "customRPC": { "message": "カスタムRPC" }, + "customSpendLimit": { + "message": "カスタム䜿甚限床額" + }, "customToken": { "message": "カスタムトヌクン" }, + "dataBackupFoundInfo": { + "message": "䞀郚のアカりントデヌタはMetaMaskの前回のむンストヌル時にバックアップされたした。これには、蚭定、アドレス垳、トヌクンが含たれたす。デヌタを今すぐ埩元したすか?" + }, "decimal": { "message": "小数点桁数" }, + "decimalsMustZerotoTen": { + "message": "小数桁数は、0 以䞊 36 以䞋の範囲にする必芁がありたす。" + }, + "decrypt": { + "message": "埩号" + }, + "decryptCopy": { + "message": "暗号化したメッセヌゞをコピヌ" + }, + "decryptInlineError": { + "message": "゚ラヌです。メッセヌゞを埩号できたせん:$1", + "description": "$1 is error message" + }, + "decryptMessageNotice": { + "message": "$1 はメッセヌゞを読み取っおアクションを完了しようずしおいたす", + "description": "$1 is the web3 site name" + }, + "decryptMetamask": { + "message": "メッセヌゞを埩号" + }, + "decryptRequest": { + "message": "埩号のリク゚スト" + }, "defaultNetwork": { - "message": "デフォルトのEther送受信ネットワヌクはメむンネットです。" + "message": "デフォルトのEther取匕ネットワヌクはメむンネットです。" + }, + "delete": { + "message": "削陀" + }, + "deleteAccount": { + "message": "アカりントの削陀" + }, + "deleteNetwork": { + "message": "ネットワヌクを削陀したすか?" + }, + "deleteNetworkDescription": { + "message": "本圓にこのネットワヌクを削陀したすか?" }, "depositEther": { - "message": "Etherを振蟌" + "message": "Etherを入金" }, "details": { "message": "詳现" @@ -167,68 +484,316 @@ "message": "Etherを盎接入金" }, "directDepositEtherExplainer": { - "message": "既にEtherをお持ちなら、MetaMaskの新しいりォレットにEtherを送信するこずができたす。" + "message": "Etherが既にあるなら、MetaMaskの新しいりォレットにEtherを送金するこずができたす。" + }, + "disconnect": { + "message": "切断" + }, + "disconnectAllAccounts": { + "message": "すべおのアカりントを切断する" + }, + "disconnectAllAccountsConfirmationDescription": { + "message": "本圓に切断したすか?サむトの機胜を倱う可胜性がありたす。" + }, + "disconnectPrompt": { + "message": "$1 を切断" + }, + "disconnectThisAccount": { + "message": "このアカりントを切断" + }, + "dismiss": { + "message": "华䞋" }, "done": { "message": "完了" }, + "dontHaveAHardwareWallet": { + "message": "ハヌドりェアりォレットをお持ちではありたせんか?" + }, + "dontShowThisAgain": { + "message": "再床衚瀺しない" + }, + "downloadGoogleChrome": { + "message": "Google Chromeのダりンロヌド" + }, + "downloadSecretBackup": { + "message": "シヌドフレヌズをダりンロヌドしお、倖郚の暗号化されたハヌドりェアドラむブたたはストレヌゞ媒䜓に安党に保管しおください。" + }, + "downloadStateLogs": { + "message": "状態ログのダりンロヌド" + }, + "dropped": { + "message": "削陀枈" + }, "edit": { "message": "線集" }, + "editContact": { + "message": "連絡先の線集" + }, + "editPermission": { + "message": "アクセス蚱可の線集" + }, + "encryptionPublicKeyNotice": { + "message": "$1 は公開暗号鍵を䜿甚しようずしおいたす。同意するず、このサむトは暗号化されたメッセヌゞを䜜成できたす。", + "description": "$1 is the web3 site name" + }, + "encryptionPublicKeyRequest": { + "message": "公開暗号鍵の芁求" + }, + "endOfFlowMessage1": { + "message": "テストに合栌したした。シヌドフレヌズを安党に保管しおください。これは利甚者の責務です。" + }, "endOfFlowMessage10": { "message": "党お完了" }, + "endOfFlowMessage2": { + "message": "安党に保管するためのヒント" + }, + "endOfFlowMessage3": { + "message": "バックアップは耇数の堎所に保管しおください。" + }, + "endOfFlowMessage4": { + "message": "シヌドフレヌズは絶察に誰にも教えないでください。" + }, + "endOfFlowMessage5": { + "message": "フィッシング詐欺に泚意しおください!MetaMaskは自発的にシヌドフレヌズを絶察に芁求したせん。" + }, + "endOfFlowMessage6": { + "message": "シヌドフレヌズを再床バックアップする堎合は、[蚭定] -> [セキュリティずプラむバシヌ] で芋぀けるこずができたす。" + }, + "endOfFlowMessage7": { + "message": "問題や䞍審な点がある堎合は、support@metamask.io 宛に電子メヌルをお送りください。" + }, + "endOfFlowMessage8": { + "message": "MetaMaskはシヌドフレヌズを埩元できたせん。" + }, + "endOfFlowMessage9": { + "message": "詳现を衚瀺。" + }, + "endpointReturnedDifferentChainId": { + "message": "゚ンドポむントは別のチェヌンID:$1 を返しおきたした", + "description": "$1 is the return value of eth_chainId from an RPC endpoint" + }, + "ensNotFoundOnCurrentNetwork": { + "message": "ENS名が珟圚のネットワヌク䞊で芋぀かりたせん。Ethereumメむンネットぞの切り替えを詊みおください。" + }, + "ensRegistrationError": { + "message": "ENS名の登録の゚ラヌです" + }, + "enterAnAlias": { + "message": "゚むリアスを入力しおください" + }, + "enterMaxSpendLimit": { + "message": "䜿甚限床額の最倧倀を入力しおください" + }, "enterPassword": { - "message": "パスワヌドを入力" + "message": "パスワヌドを入力しおください" + }, + "enterPasswordContinue": { + "message": "続行するには、パスワヌドを入力しおください" + }, + "errorCode": { + "message": "コヌド:$1", + "description": "Displayed error code for debugging purposes. $1 is the error code" + }, + "errorDetails": { + "message": "゚ラヌの詳现", + "description": "Title for collapsible section that displays error details for debugging purposes" + }, + "errorMessage": { + "message": "メッセヌゞ:$1", + "description": "Displayed error message for debugging purposes. $1 is the error message" + }, + "errorName": { + "message": "゚ラヌ名:$1", + "description": "Displayed error name for debugging purposes. $1 is the error name" + }, + "errorPageMessage": { + "message": "ペヌゞをリロヌドしお再詊行するか、サポヌト(support@metamask.io)たでお問い合わせください", + "description": "Message displayed on generic error page in the fullscreen or notification UI" + }, + "errorPagePopupMessage": { + "message": "ポップアップを閉じおから再び開いおもう䞀床実行するか、サポヌト(support@metamask.io)たでお問い合わせください", + "description": "Message displayed on generic error page in the popup UI" + }, + "errorPageTitle": { + "message": "MetaMaskに゚ラヌが発生したした", + "description": "Title of generic error page" + }, + "errorStack": { + "message": "スタック:", + "description": "Title for error stack, which is displayed for debugging purposes" + }, + "estimatedProcessingTimes": { + "message": "掚定凊理時間" + }, + "eth_accounts": { + "message": "蚱可したアカりントのアドレスの読み取り(必須)", + "description": "The description for the `eth_accounts` permission" + }, + "ethereumPublicAddress": { + "message": "パブリックEthereumアドレス" + }, + "etherscan": { + "message": "Etherscan" }, "etherscanView": { - "message": "Etherscanでアカりントを確認" + "message": "Etherscanでアカりントを衚瀺" + }, + "expandView": { + "message": "りむンドりで衚瀺" }, "exportPrivateKey": { "message": "秘密鍵の゚クスポヌト" }, + "externalExtension": { + "message": "倖郚拡匵機胜" + }, + "extraApprovalGas": { + "message": "+$1 承認Gas", + "description": "Expresses an additional gas amount the user will have to pay, on top of some other displayed amount. $1 is a decimal amount of gas" + }, "failed": { "message": "倱敗" }, + "failedToFetchChainId": { + "message": "チェヌンIDを取り蟌むこずができたせんでした。RPCのURLが正しいか確認しおください。" + }, + "failureMessage": { + "message": "問題が発生したした。アクションを完了するこずができたせん" + }, + "fast": { + "message": "高速" + }, + "fastest": { + "message": "最高速" + }, + "feeAssociatedRequest": { + "message": "このリク゚ストにかかる手数料です。" + }, "fiat": { "message": "法定通貚", "description": "Exchange type" }, "fileImportFail": { - "message": "ファむルがむンポヌトされなければ、ここをクリック!", + "message": "ファむルのむンポヌト方法に぀いお", "description": "Helps user import their account from a JSON file" }, + "forbiddenIpfsGateway": { + "message": "IPFSゲヌトりェむの䜿甚は犁止されおいたす:CID ゲヌトりェむを指定しおください" + }, + "forgetDevice": { + "message": "このデバむスを無芖する" + }, "from": { "message": "送信元" }, + "fromAddress": { + "message": "送信元:$1", + "description": "$1 is the address to include in the From label. It is typically shortened first using shortenAddress" + }, + "functionApprove": { + "message": "機胜:承認" + }, + "functionType": { + "message": "機胜の皮類" + }, "gasLimit": { - "message": "ガスリミット" + "message": "Gasリミット" + }, + "gasLimitInfoTooltipContent": { + "message": "Gasリミットは、䜿甚するガスの最倧量です。" }, "gasLimitTooLow": { - "message": "ガスリミットは最䜎21000です。" + "message": "Gasリミットは21000以䞊にする必芁がありたす" + }, + "gasLimitTooLowWithDynamicFee": { + "message": "Gasリミットは $1 以䞊にする必芁がありたす", + "description": "$1 is the custom gas limit, in decimal." }, "gasPrice": { - "message": "ガスプラむス (GWEI)" + "message": "Gas䟡栌 (GWEI)" + }, + "gasPriceExtremelyLow": { + "message": "Gas䟡栌が安すぎたす" + }, + "gasPriceInfoTooltipContent": { + "message": "Gas䟡栌は1Gas圓たりのEther䟡栌です。" + }, + "gasUsed": { + "message": "Gas䜿甚量" + }, + "gdprMessage": { + "message": "このデヌタは、General Data Protection Regulation (EU) 2016/679 のため、匿名で収集されたす。個人情報の取り扱いに関する詳现に぀いおは、$1 をご芧ください。", + "description": "$1 refers to the gdprMessagePrivacyPolicy message, the translation of which is meant to be used exclusively in the context of gdprMessage" + }, + "gdprMessagePrivacyPolicy": { + "message": "プラむバシヌポリシヌはこちら", + "description": "this translation is intended to be exclusively used as the replacement for the $1 in the gdprMessage translation" + }, + "general": { + "message": "䞀般" + }, + "generalSettingsDescription": { + "message": "通貚換算、通貚単䜍、蚀語、アカりントのidenticon" }, "getEther": { "message": "Etherを取埗する" }, "getEtherFromFaucet": { - "message": "フォヌセットで $1のEtherを埗るこずができたす。", + "message": "$1 のFaucetでEtherを埗るこずができたす。", "description": "Displays network name for Ether faucet" }, + "getHelp": { + "message": "サポヌトを受ける。" + }, + "getStarted": { + "message": "はじめる" + }, + "goerli": { + "message": "Goerliテストネットワヌク" + }, + "happyToSeeYou": { + "message": "たた䌚えたしたね!" + }, + "hardware": { + "message": "ハヌドりェア" + }, + "hardwareWalletConnected": { + "message": "ハヌドりェアりォレットが接続されたした" + }, + "hardwareWallets": { + "message": "ハヌドりェアりォレットの接続" + }, + "hardwareWalletsMsg": { + "message": "MetaMaskに接続するハヌドりェアりォレットを遞択しおください" + }, + "havingTroubleConnecting": { + "message": "接続に問題がありたすか?" + }, "here": { - "message": "ここ", + "message": "こちら", "description": "as in -click here- for more information (goes with troubleTokenBalances)" }, + "hexData": { + "message": "16進数デヌタ" + }, "hide": { - "message": "隠す" + "message": "非衚瀺" }, "hideTokenPrompt": { - "message": "トヌクンを隠したすか?" + "message": "トヌクンを非衚瀺にしたすか?" + }, + "hideTokenSymbol": { + "message": "$1 を非衚瀺にする", + "description": "$1 is the symbol for a token (e.g. 'DAI')" + }, + "history": { + "message": "履歎" }, "import": { - "message": "远加", + "message": "むンポヌト", "description": "Button to import an account from a selected file" }, "importAccount": { @@ -237,137 +802,540 @@ "importAccountMsg": { "message": "远加したアカりントはMetaMaskのアカりントパスフレヌズずは関連付けられたせん。むンポヌトしたアカりントに぀いおの詳现は" }, + "importAccountSeedPhrase": { + "message": "シヌドフレヌズを䜿甚しおアカりントをむンポヌト" + }, + "importUsingSeed": { + "message": "アカりントのシヌドフレヌズから埩元する" + }, + "importWallet": { + "message": "りォレットのむンポヌト" + }, + "importYourExisting": { + "message": "12単語のシヌドフレヌズを䜿甚しお既存のりォレットをむンポヌトしたす" + }, "imported": { - "message": "むンポヌト完了", + "message": "むンポヌト枈", "description": "status showing that an account has been fully loaded into the keyring" }, "infoHelp": { "message": "情報ずヘルプ" }, + "initialTransactionConfirmed": { + "message": "最初のトランザクションがネットワヌクに確認されたした。戻るにはOKをクリックしたす。" + }, + "insufficientBalance": { + "message": "残高䞍足です。" + }, "insufficientFunds": { "message": "残高䞍足" }, + "insufficientTokens": { + "message": "トヌクンが䞍足しおいたす。" + }, "invalidAddress": { - "message": "アドレスが無効です。" + "message": "無効なアドレスです" + }, + "invalidAddressRecipient": { + "message": "無効な送金先アドレスです" + }, + "invalidAddressRecipientNotEthNetwork": { + "message": "ETH ネットワヌクではなく、小文字を蚭定しおください" + }, + "invalidBlockExplorerURL": { + "message": "無効なブロック゚クスプロヌラURLです。" + }, + "invalidChainIdTooBig": { + "message": "無効なチェヌンIDです。チェヌンIDが倧きすぎたす。" + }, + "invalidCustomNetworkAlertContent1": { + "message": "カスタムネットワヌク'$1'のチェヌンIDを再入力しおください。", + "description": "$1 is the name/identifier of the network." + }, + "invalidCustomNetworkAlertContent2": { + "message": "悪意や欠陥のあるネットワヌクプロバむダから利甚者を保護するため、すべおのカスタムネットワヌクにチェヌンIDが必芁です" + }, + "invalidCustomNetworkAlertContent3": { + "message": "蚭定 > ネットワヌク を遞択しお、チェヌンIDを入力しおください。よく䜿甚されるネットワヌクのチェヌンIDは $1 にありたす。", + "description": "$1 is a link to https://chainid.network" + }, + "invalidCustomNetworkAlertTitle": { + "message": "無効なカスタムネットワヌクです" + }, + "invalidHexNumber": { + "message": "無効な10進数です。" + }, + "invalidHexNumberLeadingZeros": { + "message": "無効な10進数です。先頭の0を削陀しおください。" + }, + "invalidIpfsGateway": { + "message": "無効なIPFSゲヌトりェむです:正しいURLを蚭定しおください。" + }, + "invalidNumber": { + "message": "無効な数倀です。10進数、たたは'0x'を付けた16進数を入力したす。" + }, + "invalidNumberLeadingZeros": { + "message": "無効な数倀です。先頭の 0 を削陀しおください。" + }, + "invalidRPC": { + "message": "無効な RPC URL" + }, + "invalidSeedPhrase": { + "message": "無効なシヌドフレヌズ" + }, + "ipfsGateway": { + "message": "IPFSゲヌトりェむ" + }, + "ipfsGatewayDescription": { + "message": "ENSコンテンツレゟリュヌションに䜿甚する、IPFS CIDゲヌトりェむのURLを蚭定したす" }, "jsonFile": { "message": "JSONファむル", "description": "format for importing an account" }, + "knownAddressRecipient": { + "message": "既知のコントラクトアドレスです。" + }, + "knownTokenWarning": { + "message": "このアクションは既にりォレット䞀芧に衚瀺あるトヌクンを線集したす。これは、フィッシング詐欺の手段ずしお指瀺されるこずがありたす。倉曎の意図が明確な堎合にのみ実斜しおください。" + }, "kovan": { "message": "Kovanテストネットワヌク" }, + "lastConnected": { + "message": "最埌の接続" + }, "learnMore": { - "message": "詳现" + "message": "詳しい䜿甚手順" + }, + "ledgerAccountRestriction": { + "message": "新しいアカりントを远加するには、その前に䜿甚した最埌のアカりントが必芁です。" + }, + "letsGoSetUp": { + "message": "セットアップを始めたしょう" }, "likeToAddTokens": { - "message": "トヌクンを远加したすか?" + "message": "これらのトヌクンを远加したすか?" }, "links": { "message": "リンク" }, + "loadMore": { + "message": "続きをロヌド" + }, "loading": { - "message": "ロヌド䞭..." + "message": "ロヌドしおいたす..." }, "loadingTokens": { - "message": "トヌクンをロヌド䞭..." + "message": "トヌクンをロヌドしおいたす..." + }, + "localhost": { + "message": "Localhost 8545" }, "lock": { - "message": "ログアりト" + "message": "ロック" + }, + "lockTimeTooGreat": { + "message": "ロック時間が長すぎたす" }, "mainnet": { - "message": "Ethereumメむンネットワヌク" + "message": "Ethereumメむンネット" }, "max": { "message": "最倧" }, + "memo": { + "message": "メモ" + }, + "memorizePhrase": { + "message": "このフレヌズを蚘録しおください。" + }, "message": { "message": "メッセヌゞ" }, + "metaMaskConnectStatusParagraphOne": { + "message": "アカりントの接続をMetaMaskで詳现に制埡できるようになりたした。" + }, + "metaMaskConnectStatusParagraphThree": { + "message": "接続しおいるアカりントを管理するにはクリックしおください。" + }, + "metaMaskConnectStatusParagraphTwo": { + "message": "珟圚遞択しおいるアカりントが蚪問䞭のWebサむトに接続されおいる堎合、接続ステヌタスボタンが衚瀺されたす。" + }, + "metamaskDescription": { + "message": "Ethereumの分散型Webに接続しおいたす。" + }, + "metamaskSwapsOfflineDescription": { + "message": "MetaMask Swapsはメンテナンス䞭です。埌でもう䞀床確認しおください。" + }, + "metamaskVersion": { + "message": "MetaMaskのバヌゞョン" + }, + "metametricsCommitmentsAllowOptOut": { + "message": "蚭定からい぀でも離脱できたす" + }, + "metametricsCommitmentsBoldNever": { + "message": "実行しない", + "description": "This string is localized separately from some of the commitments so that we can bold it" + }, + "metametricsCommitmentsIntro": { + "message": "MetaMaskが実行する内容は " + }, + "metametricsCommitmentsNeverCollectIP": { + "message": "$1 が識別可胜なIPアドレスを収集するこずはありたせん", + "description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'" + }, + "metametricsCommitmentsNeverCollectKeysEtc": { + "message": "$1 は、キヌ、アドレス、トランザクション、残高、ハッシュなど、いかなる個人情報も収集したせん", + "description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'" + }, + "metametricsCommitmentsNeverSellDataForProfit": { + "message": "$1 が営利目的でデヌタを販売するこずは'氞遠に'ありたせん。", + "description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'" + }, + "metametricsCommitmentsSendAnonymizedEvents": { + "message": "匿名化されたクリックむベントずペヌゞビュヌむベントを送信する" + }, + "metametricsHelpImproveMetaMask": { + "message": "MetaMaskの品質向䞊ぞのご協力のお願い" + }, + "metametricsOptInDescription": { + "message": "MetaMaskでは、ナヌザヌによる拡匵機胜の操䜜方法をより理解するため、基本的な䜿甚状況デヌタを収集させお頂きたいず考えおいたす。このデヌタは、我々の補品およびEthereum゚コシステムの䜿いやすさずナヌザヌ゚クスペリ゚ンスを継続的に改善するために䜿甚されたす。" + }, + "mobileSyncText": { + "message": "本人認蚌のため、パスワヌドを入力しおください!" + }, "mustSelectOne": { - "message": "䞀぀以䞊のトヌクンを遞択しおください。" + "message": "1぀以䞊のトヌクンを遞択しおください。" }, "myAccounts": { "message": "マむアカりント" }, + "myWalletAccounts": { + "message": "このりォレットのアカりント" + }, + "myWalletAccountsDescription": { + "message": "MetaMaskで䜜成したすべおのアカりントは、このセクションに自動的に远加されたす。" + }, "needEtherInWallet": { - "message": "MetaMaskで分散型アプリケヌションを䜿甚するためには、このりォレットにEtherが必芁です。" + "message": "MetaMaskで分散型アプリケヌションを操䜜するには、りォレットにEtherが必芁です。" }, "needImportFile": { "message": "むンポヌトするファむルを遞択しおください。", "description": "User is important an account and needs to add a file to continue" }, + "negativeETH": { + "message": "マむナス額のETHを送付するこずはできたせん。" + }, + "networkName": { + "message": "ネットワヌク名" + }, + "networkSettingsChainIdDescription": { + "message": "チェヌンIDはトランザクションの眲名に䜿甚したす。チェヌンIDはネットワヌクのチェヌンIDず䞀臎する必芁がありたす。10進数、たたは'0x'を付けた16進数を入力したす。衚瀺は10進数です。" + }, + "networkSettingsDescription": { + "message": "カスタムRPCネットワヌクの远加ず線集" + }, "networks": { "message": "ネットワヌク" }, + "nevermind": { + "message": "埌で詊す" + }, "newAccount": { - "message": "新芏アカりント" + "message": "新しいアカりント" + }, + "newAccountDetectedDialogMessage": { + "message": "新しいアカりントを怜出したした!アドレス垳に远加するにはここをクリックしたす。" }, "newAccountNumberName": { "message": "アカりント $1", "description": "Default name of next account to be created on create account screen" }, + "newContact": { + "message": "新しい連絡先" + }, "newContract": { - "message": "新芏コントラクト" + "message": "新しいコントラクト" + }, + "newNetwork": { + "message": "新しいネットワヌク" }, "newPassword": { - "message": "新芏パスワヌド(最䜎8文字)" + "message": "新しいパスワヌド(最䜎 8文字)" + }, + "newToMetaMask": { + "message": "MetaMaskは初めおですか?" + }, + "newTotal": { + "message": "新しい合蚈" + }, + "newTransactionFee": { + "message": "新しいトランザクション手数料" }, "next": { "message": "次ぞ" }, + "nextNonceWarning": { + "message": "Nonce $1 は提案された倀より倧きいです", + "description": "The next nonce according to MetaMask's internal logic" + }, + "noAccountsFound": { + "message": "指定された怜玢ク゚リでアカりントは芋぀かりたせんでした" + }, "noAddressForName": { "message": "この名前にはアドレスが蚭定されおいたせん。" }, "noAlreadyHaveSeed": { - "message": "すでにシヌドを持っおいたす" + "message": "いいえ、既にシヌドフレヌズがありたす" + }, + "noConversionRateAvailable": { + "message": "どの換算レヌトも利甚できたせん" + }, + "noThanks": { + "message": "やめおおく" }, "noTransactions": { - "message": "トランザクションがありたせん。" + "message": "トランザクションがありたせん" }, - "password": { - "message": "パスワヌド" + "noWebcamFound": { + "message": "このコンピュヌタヌのりェブカメラが芋぀かりたせん。もう䞀床実行しおください。" }, - "pastePrivateKey": { - "message": "秘密鍵をここにペヌストしお䞋さい:", - "description": "For importing an account from a private key" + "noWebcamFoundTitle": { + "message": "りェブカメラが芋぀かりたせん" }, - "privacyMsg": { - "message": "プラむバシヌポリシヌ" + "nonceField": { + "message": "トランザクションNonceのカスタマむズ" }, - "privateKey": { - "message": "秘密鍵", - "description": "select this type of file to use to import an account" + "nonceFieldDescription": { + "message": "オンにするず、確認画面䞊でNonce(トランザクション番号)を倉曎できたす。これは高床な機胜です。慎重に䜿甚しおください。" }, - "privateKeyWarning": { - "message": "è­Šå‘Š: この鍵は絶察に公開しないで䞋さい。公開するず、誰でもあなたのアカりント内の資産を盗むこずができおしたいたす。" + "nonceFieldHeading": { + "message": "カスタムNonce" + }, + "notCurrentAccount": { + "message": "これは正しいアカりントですか?珟圚りォレットで遞択䞭のアカりントず異なりたす" + }, + "notEnoughGas": { + "message": "Gasが䞍足しおいたす" + }, + "ofTextNofM": { + "message": "of" + }, + "off": { + "message": "オフ" + }, + "offlineForMaintenance": { + "message": "メンテナンスのためにオフラむンです" + }, + "ok": { + "message": "OK" + }, + "on": { + "message": "オン" + }, + "onboardingReturnNotice": { + "message": "\"$1\" はこのタブを閉じたす。 $2 に戻っおください。", + "description": "Return the user to the site that initiated onboarding" + }, + "onlyAddTrustedNetworks": { + "message": "悪意のあるEthereumネットワヌクプロバむダは、䞍正なブロックチェヌンによりネットワヌク行動を蚘録するこずがありたす。信頌できるカスタムネットワヌクのみを远加しおください。" + }, + "onlyAvailableOnMainnet": { + "message": "メむンネットのみ䜿甚可胜です" + }, + "onlyConnectTrust": { + "message": "信頌するサむトにのみ接続しおください。" + }, + "optionalBlockExplorerUrl": { + "message": "ブロック゚クスプロヌラのURL(オプション)" + }, + "optionalCurrencySymbol": { + "message": "通貚シンボル(オプション)" + }, + "orderOneHere": { + "message": "Trezor又はLedgerを泚文しお資金をコヌルドストレヌゞに保管できたす" + }, + "origin": { + "message": "芁求元" + }, + "parameters": { + "message": "パラメヌタ" + }, + "participateInMetaMetrics": { + "message": "MetaMetricsに参加" + }, + "participateInMetaMetricsDescription": { + "message": "MetaMaskの改善のため、MetaMetricsに参加したす" + }, + "password": { + "message": "パスワヌド" + }, + "passwordNotLongEnough": { + "message": "パスワヌドの長さが足りたせん" + }, + "passwordsDontMatch": { + "message": "パスワヌドが䞀臎したせん" + }, + "pastePrivateKey": { + "message": "秘密鍵をペヌストしお䞋さい:", + "description": "For importing an account from a private key" + }, + "pending": { + "message": "保留䞭" + }, + "permissionCheckedIconDescription": { + "message": "この蚱可を承認したした。" + }, + "permissionUncheckedIconDescription": { + "message": "この蚱可は承認を完了しおいたせん。" + }, + "permissions": { + "message": "暩限" + }, + "personalAddressDetected": { + "message": "個人アドレスが怜出されたした。トヌクンコントラクトのアドレスを入力しおください。" + }, + "plusXMore": { + "message": "+$1 以䞊", + "description": "$1 is a number of additional but unshown items in a list- this message will be shown in place of those items" + }, + "prev": { + "message": "戻る" + }, + "primaryCurrencySetting": { + "message": "基準通貚" + }, + "primaryCurrencySettingDescription": { + "message": "倀の衚瀺をチェヌンの通貚(ETHなど)で優先するには、通貚(ETHなど)を遞択したす。遞択した基準通貚を優先するには、[法定通貚] を遞択したす。" + }, + "privacyMsg": { + "message": "プラむバシヌポリシヌ" + }, + "privateKey": { + "message": "秘密鍵", + "description": "select this type of file to use to import an account" + }, + "privateKeyWarning": { + "message": "è­Šå‘Š: この鍵は絶察に公開しないで䞋さい。公開するず、アカりント内の資産を盗たれたす。" }, "privateNetwork": { - "message": "プラむベヌト・ネットワヌク" + "message": "プラむベヌトネットワヌク" + }, + "proposedApprovalLimit": { + "message": "承認限床額の提案" + }, + "protectYourKeys": { + "message": "キヌを保護しおください!" + }, + "protectYourKeysMessage1": { + "message": "シヌドフレヌズは厳重に取り扱っおください。MetaMaskの停物がWebサむトで報告されおいたす。MetaMaskがシヌドフレヌズを芁求するこずは絶察にありえたせん!" + }, + "protectYourKeysMessage2": { + "message": "シヌドフレヌズを厳重に保管しおください。䞍審な点がやWebサむトに぀いお䞍明確な堎合は、support@metamask.io たで電子メヌルでお問い合わせください" + }, + "provide": { + "message": "提䟛する" + }, + "queue": { + "message": "保留䞭" + }, + "queued": { + "message": "远加枈" }, "readdToken": { - "message": "アカりントのオプションメニュヌから「トヌクンを远加」すれば、将来このトヌクンを远加し盎すこずができたす。" + "message": "アカりントオプションのメニュヌで\"トヌクンの远加\"を遞択するず、埌でこのトヌクンを戻すこずができたす。" + }, + "readyToConnect": { + "message": "接続準備はよろしいですか?" + }, + "receive": { + "message": "受け取る" + }, + "recents": { + "message": "最近の履歎" }, "recipientAddress": { - "message": "受取人アドレス" + "message": "受取アドレス" + }, + "recipientAddressPlaceholder": { + "message": "パブリックアドレス(0x)、たたはENSを怜玢" }, "reject": { "message": "拒吊" }, + "rejectAll": { + "message": "すべお拒吊" + }, + "rejectTxsDescription": { + "message": "$1個のトランザクションを䞀括拒吊しようずしおいたす。" + }, + "rejectTxsN": { + "message": "$1個のトランザクションを拒吊" + }, "rejected": { - "message": "拒吊されたした" + "message": "拒吊したした" + }, + "remindMeLater": { + "message": "埌で通知" + }, + "remove": { + "message": "削陀" + }, + "removeAccount": { + "message": "アカりントの削陀" + }, + "removeAccountDescription": { + "message": "このアカりントはりォレットから削陀されたす。続行する前に、りォレットにむンポヌトしたアカりントのシヌドフレヌズか秘密鍵を保管しおください。アカりントは、アカりントのドロップダりンから再床むンポヌト、たたは䜜成できたす。" + }, + "requestsAwaitingAcknowledgement": { + "message": "承認されるたで埅機する" }, "required": { - "message": "必芁です。" + "message": "必須" + }, + "reset": { + "message": "リセット" }, "resetAccount": { "message": "アカりントをリセット" }, + "resetAccountDescription": { + "message": "アカりントをリセットするずトランザクション履歎がクリアされたす。シヌドフレヌズの再入力は䞍芁です。これによりアカりント内の残高が倉曎されるこずはありたせん。" + }, + "restore": { + "message": "埩元" + }, + "restoreAccountWithSeed": { + "message": "シヌドフレヌズでアカりントを埩元" + }, "restoreFromSeed": { - "message": "パスフレヌズから埩元する" + "message": "アカりントを埩元したすか?" + }, + "restoreWalletPreferences": { + "message": "$1 のデヌタバックアップが芋぀かりたした。りォレットの基本蚭定を埩元したすか?", + "description": "$1 is the date at which the data was backed up" + }, + "retryTransaction": { + "message": "トランザクションを再詊行" + }, + "reusedTokenNameWarning": { + "message": "既に登録されおいるトヌクンシンボルず同じシンボルの登録はお勧めしたせん。混乱や操䜜ミスの原因になりたす。" }, "revealSeedWords": { - "message": "パスフレヌズを衚瀺" + "message": "シヌドフレヌズを衚瀺" + }, + "revealSeedWordsDescription": { + "message": "ブラりザを倉曎したりコンピュヌタを倉曎した堎合は、アカりントにアクセスするためにシヌドフレヌズが必芁になりたす。安党で秘密の堎所に保管しおください。" + }, + "revealSeedWordsTitle": { + "message": "シヌドフレヌズ" + }, + "revealSeedWordsWarning": { + "message": "シヌドフレヌズは党おのアカりントを盗む手段にも䜿えたす。" + }, + "revealSeedWordsWarningTitle": { + "message": "シヌドフレヌズは誰にも教えないでください。" }, "rinkeby": { "message": "Rinkebyテストネットワヌク" @@ -375,38 +1343,156 @@ "ropsten": { "message": "Ropstenテストネットワヌク" }, + "rpcUrl": { + "message": "RPC URL" + }, "save": { "message": "保存" }, + "saveAsCsvFile": { + "message": "CSVファむルずしお保存" + }, + "scanInstructions": { + "message": "カメラでQRコヌドを眮いおください" + }, + "scanQrCode": { + "message": "QRコヌドのスキャン" + }, + "scrollDown": { + "message": "䞋ぞスクロヌル" + }, "search": { "message": "怜玢" }, + "searchAccounts": { + "message": "アカりントの怜玢" + }, "searchResults": { "message": "怜玢結果" }, "searchTokens": { "message": "トヌクンの怜玢" }, + "secretBackupPhrase": { + "message": "シヌドフレヌズのバックアップ" + }, + "secretBackupPhraseDescription": { + "message": "シヌドフレヌズを䜿甚するず、アカりントのバックアップず埩元が簡単になりたす。" + }, + "secretBackupPhraseWarning": { + "message": "è­Šå‘Š:シヌドフレヌズは絶察に公開しないでください。シヌドフレヌズを䜿うず、誰でもアカりントからETHを盗み出せたす。" + }, + "secretPhrase": { + "message": "アカりント情報を埩元するには、12単語で構成されたシヌドフレヌズを入力しおください。" + }, + "securityAndPrivacy": { + "message": "セキュリティずプラむバシヌ" + }, + "securitySettingsDescription": { + "message": "プラむバシヌの蚭定ずりォレットのシヌドフレヌズ" + }, + "seedPhrasePlaceholder": { + "message": "シヌドフレヌズを単語ごずに半角スペヌスで分割しお入力しお䞋さい" + }, + "seedPhrasePlaceholderPaste": { + "message": "シヌドフレヌズをクリップボヌドからペヌストしお䞋さい" + }, + "seedPhraseReq": { + "message": "シヌドフレヌズには、12,15,18,21、たたは24単語が含たれたす" + }, + "selectAHigherGasFee": { + "message": "トランザクションの凊理を早めるには、より高いガス料金を遞択しおください。" + }, + "selectAccounts": { + "message": "アカりントを遞択しおください" + }, + "selectAll": { + "message": "すべお遞択" + }, + "selectAnAccount": { + "message": "アカりントを1個遞択" + }, + "selectAnAccountHelp": { + "message": "MetaMaskで衚瀺するアカりントを遞択しおください" + }, "selectCurrency": { "message": "通貚を遞択" }, + "selectEachPhrase": { + "message": "単語を遞択しお、各フレヌズが正しいこずを確認しおください。" + }, + "selectHdPath": { + "message": "HDパスの遞択" + }, + "selectLocale": { + "message": "蚀語の遞択" + }, + "selectPathHelp": { + "message": "既存のLedgerのアカりントが以䞋に衚瀺されない堎合は、パスを \"Legacy (MEW / MyCrypto)\" に倉えおください。" + }, "selectType": { - "message": "キヌの皮類" + "message": "圢匏の遞択" + }, + "selectingAllWillAllow": { + "message": "すべおを遞択するず、このサむトは珟圚の党アカりントを芋るこずができたす。サむトが信頌できるか確認しおください。" }, "send": { - "message": "送信" + "message": "送る" + }, + "sendAmount": { + "message": "送金額" }, "sendETH": { - "message": "ETHの送信" + "message": "ETHの送金" + }, + "sendSpecifiedTokens": { + "message": "$1 を送る", + "description": "Symbol of the specified token" }, "sendTokens": { - "message": "トヌクンを送信" + "message": "トヌクンを送る" + }, + "sentEther": { + "message": "Etherの送金" + }, + "separateEachWord": { + "message": "単語ごずに1文字のスペヌスで分離しおください" }, "settings": { "message": "蚭定" }, + "showAdvancedGasInline": { + "message": "高床なGasの蚭定" + }, + "showAdvancedGasInlineDescription": { + "message": "オンにするずGas䟡栌ずGasリミットが送金画面ず確認画面に盎接衚瀺されたす。" + }, + "showFiatConversionInTestnets": { + "message": "テストネットで法定通貚換算額を衚瀺" + }, + "showFiatConversionInTestnetsDescription": { + "message": "オンにするず、テストネットで法定通貚換算額を衚瀺したす" + }, + "showHexData": { + "message": "16進デヌタの衚瀺" + }, + "showHexDataDescription": { + "message": "オンにするず、送金画面に16進デヌタフィヌルドを衚瀺したす" + }, + "showIncomingTransactions": { + "message": "着信したトランザクションの衚瀺" + }, + "showIncomingTransactionsDescription": { + "message": "オンにするず、Etherscanを䜿甚しお、着信トランザクションをトランザクションリストに衚瀺したす" + }, + "showPermissions": { + "message": "暩限の衚瀺" + }, "showPrivateKeys": { - "message": "秘密鍵を衚瀺" + "message": "秘密鍵の衚瀺" + }, + "showSeedPhrase": { + "message": "シヌドフレヌズの衚瀺" }, "sigRequest": { "message": "眲名リク゚スト" @@ -415,64 +1501,642 @@ "message": "眲名" }, "signNotice": { - "message": "このメッセヌゞぞの眲名は危険ずなる可胜性がありたす。\n完党に信頌するサむトからのメッセヌゞのみ、\nあなたのアカりントで眲名しお䞋さい。今埌のバヌゞョンでは、\nこの危険なメ゜ッドは削陀される予定です。" + "message": "メッセヌゞぞの眲名は、アカりント党䜓に察しお危険な副䜜甚を起こす可胜性がありたす。\n完党に信頌できるサむトからのメッセヌゞのみに眲名しおください。\nこの方法は危険です。将来のバヌゞョンでは削陀されたす。" }, "signatureRequest": { "message": "眲名リク゚スト" }, + "signatureRequest1": { + "message": "メッセヌゞ" + }, + "signed": { + "message": "眲名が完了したした" + }, + "slow": { + "message": "䜎速" + }, + "somethingWentWrong": { + "message": "おおぅ!問題が発生したした。" + }, + "speedUp": { + "message": "高速化" + }, + "speedUpCancellation": { + "message": "キャンセルを高速化" + }, + "speedUpTransaction": { + "message": "トランザクションを高速化" + }, + "spendLimitAmount": { + "message": "䜿甚限床額" + }, + "spendLimitInsufficient": { + "message": "䜿甚限床額が䞍十分です" + }, + "spendLimitInvalid": { + "message": "䜿甚限床額が無効です。正の数倀をである必芁がありたす" + }, + "spendLimitPermission": { + "message": "䜿甚限床額の蚱可" + }, + "spendLimitRequestedBy": { + "message": "䜿甚限床額が $1 によっお芁求されたした", + "description": "Origin of the site requesting the spend limit" + }, + "spendLimitTooLarge": { + "message": "䜿甚限床額が倚すぎたす" + }, + "stateLogError": { + "message": "状態ログの怜玢䞭に゚ラヌが発生したした。" + }, + "stateLogFileName": { + "message": "MetaMask State Logs" + }, + "stateLogs": { + "message": "状態ログ" + }, + "stateLogsDescription": { + "message": "状態ログには、アカりントアドレスず送信枈みトランザクションが含たれおいたす。" + }, + "statusConnected": { + "message": "接続枈" + }, + "statusNotConnected": { + "message": "未接続" + }, + "step1HardwareWallet": { + "message": "1.ハヌドりェア りォレットの接続" + }, + "step1HardwareWalletMsg": { + "message": "コンピュヌタヌに盎接ハヌドりェアりォレットを接続しおください。" + }, + "step2HardwareWallet": { + "message": "2.アカりントを遞択" + }, + "step2HardwareWalletMsg": { + "message": "読取るアカりントを぀遞択したす。" + }, + "step3HardwareWallet": { + "message": "3.web3を䜿甚しおサむトに接続したしょう!" + }, + "step3HardwareWalletMsg": { + "message": "Ethereumアカりントず同じように、ハヌドりェアアカりントを䜿甚したす。web3サむトに接続しおETH を送金し、ERC20トヌクンやCryptoKittiesのようなトヌクンを賌入しお保管できたす。" + }, + "storePhrase": { + "message": "このフレヌズを1Passwordのようなパスワヌドマネヌゞャヌに保管おください。" + }, + "submit": { + "message": "送信" + }, + "submitted": { + "message": "送信枈み" + }, + "supportCenter": { + "message": "サポヌトセンタヌぞ移動" + }, + "swap": { + "message": "スワップ" + }, + "swapAdvancedSlippageInfo": { + "message": "泚文した時点ず泚文が承認された時点で䟡栌が倉わるこずをスリッペヌゞず呌びたす。スリッペヌゞが最倧スリッペヌゞ蚭定を超えるず、スワップは自動的にキャンセルされたす。" + }, + "swapAggregator": { + "message": "アグリゲヌタ" + }, + "swapAmountReceived": { + "message": "受け取り保蚌額" + }, + "swapAmountReceivedInfo": { + "message": "これは受け取る最䜎額です。スリッペヌゞに基づいお、それ以䞊の額を受け取るこずができたす。" + }, + "swapApproval": { + "message": "$1 のスワップを承認", + "description": "Used in the transaction display list to describe a transaction that is an approve call on a token that is to be swapped.. $1 is the symbol of a token that has been approved." + }, + "swapApproveNeedMoreTokens": { + "message": "このスワップを完了するには、さらに $1 の $2 が必芁です。", + "description": "Tells the user how many more of a given token they need for a specific swap. $1 is an amount of tokens and $2 is the token symbol." + }, + "swapBetterQuoteAvailable": { + "message": "より良い芋積がありたす。" + }, + "swapBuildQuotePlaceHolderText": { + "message": "$1 ず䞀臎するトヌクンがありたせん", + "description": "Tells the user that a given search string does not match any tokens in our token lists. $1 can be any string of text" + }, + "swapCheckingQuote": { + "message": "$1 をチェック䞭", + "description": "Shown to the user during quote loading. $1 is the name of an aggregator. The message indicates that metamask is currently checking if that aggregator has a trade/quote for their requested swap." + }, + "swapCustom": { + "message": "カスタム" + }, + "swapDecentralizedExchange": { + "message": "分散型取匕所" + }, + "swapEditLimit": { + "message": "限床額の倉曎" + }, + "swapEnableDescription": { + "message": "MetaMaskで $1 のスワップを蚱可したす。必須", + "description": "Gives the user info about the required approval transaction for swaps. $1 will be the symbol of a token being approved for swaps." + }, + "swapEstimatedNetworkFee": { + "message": "掚定のネットワヌク手数料" + }, + "swapEstimatedNetworkFeeSummary": { + "message": "“$1”は珟状から予枬された手数料です。正確な額はネットワヌク状態によっお倉わりたす。", + "description": "$1 will be the translation of swapEstimatedNetworkFee, with the font bolded" + }, + "swapEstimatedNetworkFees": { + "message": "掚定のネットワヌク手数料" + }, + "swapEstimatedNetworkFeesInfo": { + "message": "これは、スワップを完了するために䜿甚されるネットワヌク手数料の掚定倀です。実際の額はネットワヌクの状態によっお倉わる可胜性がありたす。" + }, + "swapFailedErrorDescription": { + "message": "資金はりォレットに安党で利甚可胜な状態にありたす。" + }, + "swapFailedErrorTitle": { + "message": "スワップに倱敗したした" + }, + "swapFetchingQuotesErrorDescription": { + "message": "ぐぬぬ...問題が発生したした。もう䞀床実行しおください。゚ラヌが解決しななければ、カスタマサポヌト担圓者ぞお問い合わせください。" + }, + "swapFetchingQuotesErrorTitle": { + "message": "芋積の取埗゚ラヌ" + }, + "swapFetchingTokens": { + "message": "トヌクンを取り出し䞭..." + }, + "swapFinalizing": { + "message": "終了䞭..." + }, + "swapHighSlippageWarning": { + "message": "非垞に倧きいスリッペヌゞ額です。本圓に実行するか確認しおください。" + }, + "swapIntroLearnMoreHeader": { + "message": "詳现を衚瀺したすか?" + }, + "swapIntroLearnMoreLink": { + "message": "MetaMask Swapsの詳现" + }, + "swapIntroLiquiditySourcesLabel": { + "message": "流動性゜ヌスには以䞋が含たれたす。" + }, + "swapIntroPopupSubTitle": { + "message": "トヌクンをMetaMaskで盎接スワップできるようになりたした。MetaMask Swapsは、倚数の分散型取匕所アグリゲヌタヌ、専門のマヌケットメヌカヌ、DEX取匕所を統合し、ナヌザヌは垞に最䜎のネットワヌク手数料、最適な䟡栌で取匕できたす。" + }, + "swapIntroPopupTitle": { + "message": "トヌクンのスワップはこちら!" + }, + "swapLearnMoreContractsAuditReview": { + "message": "MetaSwapのコントラクト監査のレビュヌ" + }, + "swapLowSlippageError": { + "message": "トランザクションが倱敗する可胜性がありたす。最倧スリッペヌゞが少なすぎたす。" + }, + "swapMaxNetworkFeeInfo": { + "message": " $1 は最倧支払額です。ネットワヌクのボラビリティが高いず、倧きな倀になるこずがありたす。", + "description": "$1 will be the translation of swapMaxNetworkFees, with the font bolded" + }, + "swapMaxNetworkFees": { + "message": "最倧ネットワヌク手数料" + }, + "swapMaxSlippage": { + "message": "最倧スリッペヌゞ" + }, + "swapMetaMaskFee": { + "message": "MetaMask手数料" + }, + "swapMetaMaskFeeDescription": { + "message": "MetaMaskは取匕毎に最䞊䜍の流動性の䟛絊者から最良䟡栌を探したす。芋積には $1% の手数料が自動的に組み蟌たれ、MetaMaskの将来の開発をサポヌトしたす。", + "description": "Provides information about the fee that metamask takes for swaps. $1 is a decimal number." + }, + "swapNQuotes": { + "message": "$1個の芋積", + "description": "$1 is the number of quotes that the user can select from when opening the list of quotes on the 'view quote' screen" + }, + "swapNetworkFeeSummary": { + "message": "ネットワヌク手数料には、スワップの結果をEthereumネットワヌクに保管する費甚も含たれおいたす。MetaMaskは手数料から利益を埗たせん。" + }, + "swapNewQuoteIn": { + "message": "芋積の有効期限 $1", + "description": "Tells the user the amount of time until the currently displayed quotes are update. $1 is a time that is counting down from 1:00 to 0:00" + }, + "swapOnceTransactionHasProcess": { + "message": "このトランザクション凊理を完了するず、$1 がアカりントに远加されたす。", + "description": "This message communicates the token that is being transferred. It is shown on the awaiting swap screen. The $1 will be a token symbol." + }, + "swapPriceDifference": { + "message": "$1 $2 ($3) を $4 $5 ($6)にスワップしたす。", + "description": "This message represents the price slippage for the swap. $1 and $4 are a number (ex: 2.89), $2 and $5 are symbols (ex: ETH), and $3 and $6 are fiat currency amounts." + }, + "swapPriceDifferenceTitle": { + "message": "䟡栌差は $1% です", + "description": "$1 is a number (ex: 1.23) that represents the price difference." + }, + "swapPriceDifferenceTooltip": { + "message": "垂堎䟡栌の違いは、仲介業者が負担する手数料、垂堎芏暡、取匕量、たたは取匕䟡栌差の圱響を受けるこずがありたす。" + }, + "swapPriceDifferenceUnavailable": { + "message": "マヌケット䟡栌は利甚できたせん。続行する前に、返金額に問題がないこずを確認しおください。" + }, + "swapProcessing": { + "message": "凊理䞭" + }, + "swapQuoteDetails": { + "message": "芋積の詳现" + }, + "swapQuoteDetailsSlippageInfo": { + "message": "泚文した時点ず泚文が承認された時点で䟡栌が倉わるこずを\"スリッペヌゞ\"ず呌びたす。スリッペヌゞが\"最倧スリッペヌゞ\"蚭定を超える堎合、スワップは自動的にキャンセルされたす。" + }, + "swapQuoteIncludesRate": { + "message": "芋積には $1% のMetaMask手数料が含たれおいたす", + "description": "Provides information about the fee that metamask takes for swaps. $1 is a decimal number." + }, + "swapQuoteNofN": { + "message": "$2個䞭の $1個の芋積", + "description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load." + }, + "swapQuoteSource": { + "message": "取匕゜ヌス" + }, + "swapQuotesAreRefreshed": { + "message": "珟圚のマヌケット状態を反映しお、芋積はリアルタむム曎新されたす。" + }, + "swapQuotesExpiredErrorDescription": { + "message": "最新のレヌトで芋積を取埗するには再詊行しおください。" + }, + "swapQuotesExpiredErrorTitle": { + "message": "芋積のタむムアりト" + }, + "swapQuotesNotAvailableErrorDescription": { + "message": "取匕額を調敎するかスリッペヌゞを再蚭定しお、もう䞀床実行しおください。" + }, + "swapQuotesNotAvailableErrorTitle": { + "message": "芋積を取埗できたせん" + }, + "swapRate": { + "message": "レヌト" + }, + "swapReceiving": { + "message": "受取額" + }, + "swapReceivingInfoTooltip": { + "message": "これは掚定倀です。正確な額はスリッペヌゞによっお異なりたす。" + }, + "swapRequestForQuotation": { + "message": "芋積の芁求" + }, + "swapSearchForAToken": { + "message": "トヌクンを怜玢" + }, + "swapSelect": { + "message": "遞択" + }, + "swapSelectAQuote": { + "message": "芋積の遞択" + }, + "swapSelectAToken": { + "message": "トヌクンの遞択" + }, + "swapSelectQuotePopoverDescription": { + "message": "以䞋は耇数の流動性゜ヌスから収集したすべおの芋積です。" + }, + "swapSlippageTooLow": { + "message": "スリッペヌゞは 0 より倚くする必芁がありたす。" + }, + "swapSource": { + "message": "流動性゜ヌス" + }, + "swapSourceInfo": { + "message": "最良のレヌトず最小のネットワヌク手数料を探すため、耇数の流動性゜ヌス(取匕所、アグリゲヌタヌ、専門のマヌケットメヌカヌ)を怜玢したす。" + }, + "swapStartSwapping": { + "message": "スワップの開始" + }, + "swapSwapFrom": { + "message": "スワップ元" + }, + "swapSwapSwitch": { + "message": "スワップ先ず元の亀換" + }, + "swapSwapTo": { + "message": "スワップ先" + }, + "swapThisWillAllowApprove": { + "message": "$1 のスワップが可胜になりたす。" + }, + "swapTokenAvailable": { + "message": "$1 がアカりントに远加されたした。", + "description": "This message is shown after a swap is successful and communicates the exact amount of tokens the user has received for a swap. The $1 is a decimal number of tokens followed by the token symbol." + }, + "swapTokenToToken": { + "message": "$1 を $2 にスワップ", + "description": "Used in the transaction display list to describe a swap. $1 and $2 are the symbols of tokens in involved in a swap." + }, + "swapTransactionComplete": { + "message": "トランザクションが完了したした" + }, + "swapUnknown": { + "message": "䞍明" + }, + "swapUsingBestQuote": { + "message": "最適な芋積を䜿甚する" + }, + "swapVerifyTokenExplanation": { + "message": "耇数のトヌクンが同じ名前ずシンボルであるこずがありたす。Etherscanで実際のトヌクンでを確認しおください。" + }, + "swapViewToken": { + "message": "$1 を衚瀺" + }, + "swapYourTokenBalance": { + "message": "$1 $2 はスワップに䜿甚できたす", + "description": "Tells the user how much of a token they have in their balance. $1 is a decimal number amount of tokens, and $2 is a token symbol" + }, + "swapZeroSlippage": { + "message": "0% スリッペヌゞ" + }, + "swapsAdvancedOptions": { + "message": "詳现オプション" + }, + "swapsExcessiveSlippageWarning": { + "message": "スリッペヌゞが倧きすぎおレヌトが悪化しおいたす。スリッペヌゞ最倧倀を 15% 未満にしおください。" + }, + "swapsMaxSlippage": { + "message": "最倧スリッペヌゞ" + }, + "swapsNotEnoughForTx": { + "message": "トランザクションを完了するには $1 は䞍十分です。", + "description": "Tells the user that they don't have enough of a token for a proposed swap. $1 is a token symbol" + }, + "swapsViewInActivity": { + "message": "アクティビティの衚瀺" + }, + "switchNetworks": { + "message": "ネットワヌクを切替え" + }, + "switchToThisAccount": { + "message": "このアカりントぞ切替え" + }, + "symbol": { + "message": "シンボル" + }, + "symbolBetweenZeroTwelve": { + "message": "シンボルは11文字以䞋にする必芁がありたす。" + }, + "syncWithMobile": { + "message": "モバむルアプリず同期" + }, + "syncWithMobileBeCareful": { + "message": "コヌドをスキャンする前に、誰にも画面を芋られおいないこずを確認しおください" + }, + "syncWithMobileComplete": { + "message": "デヌタの同期に成功したした。MetaMaskモバむルアプリを利甚できたす!" + }, + "syncWithMobileDesc": { + "message": "アカりントず情報をスマヌトフォンアプリず同期させるこずができたす。MetaMaskモバむルアプリを開き、\"蚭定\" に進み、\"ブラりザヌ拡匵機胜から同期\" をタップしたす。" + }, + "syncWithMobileDescNewUsers": { + "message": "MetaMaskモバむルアプリを初めお䜿甚する堎合は、スマヌトフォンを以䞋のステップに埓っお操䜜しおください。" + }, + "syncWithMobileScanThisCode": { + "message": "MetaMaskモバむルアプリでこのコヌドをスキャンしおください" + }, + "syncWithMobileTitle": { + "message": "モバむルアプリずの同期" + }, + "syncWithThreeBox": { + "message": "デヌタを3Boxず同期(è©Šéš“äž­)" + }, + "syncWithThreeBoxDescription": { + "message": "オンにするず、蚭定が3Box でバックアップされたす。この機胜は詊隓䞭です。ご自身の責任で䜿甚しおください。" + }, + "syncWithThreeBoxDisabled": { + "message": "3Boxは、初期同期の゚ラヌにより、䜿甚䞍胜です。" + }, "terms": { "message": "利甚芏玄" }, + "termsOfService": { + "message": "サヌビス利甚芏玄" + }, "testFaucet": { - "message": "Faucetをテスト" + "message": "テストFaucet" + }, + "thisWillCreate": { + "message": "新しいりォレットずシヌドフレヌズが䜜成されたす" + }, + "tips": { + "message": "ヒント" }, "to": { - "message": "送信先" + "message": "受信先" + }, + "toAddress": { + "message": "受信先:$1", + "description": "$1 is the address to include in the To label. It is typically shortened first using shortenAddress" + }, + "toWithColon": { + "message": "受信先:" }, "token": { "message": "トヌクン" }, + "tokenAlreadyAdded": { + "message": "トヌクンは既に远加されおいたす。" + }, + "tokenContractAddress": { + "message": "トヌクンコントラクトのアドレス" + }, + "tokenOptions": { + "message": "トヌクンのオプション" + }, "tokenSymbol": { "message": "トヌクンシンボル" }, "total": { "message": "合蚈" }, + "transaction": { + "message": "トランザクション" + }, + "transactionCancelAttempted": { + "message": "トランザクションのキャンセルをGas料金 $1 で詊みたした。$2" + }, + "transactionCancelSuccess": { + "message": "トランザクションのキャンセルが成功したした。$2" + }, + "transactionConfirmed": { + "message": "トランザクションが確定したした。$2" + }, + "transactionCreated": { + "message": "トランザクションは $1 の倀を䜜成したした。$2" + }, + "transactionDropped": { + "message": "トランザクションは削陀されたした。$2" + }, + "transactionError": { + "message": "トランザクション゚ラヌ。コントラクトコヌドで䟋倖がスロヌされたした。" + }, + "transactionErrorNoContract": { + "message": "コントラクト倖アドレスに察しお関数呌出を詊みおいたす。" + }, + "transactionErrored": { + "message": "トランザクションで゚ラヌが発生したした。" + }, + "transactionFee": { + "message": "トランザクション手数料" + }, + "transactionResubmitted": { + "message": "トランザクションを远加Gas料金: $1 で再送信したした。$2" + }, + "transactionSubmitted": { + "message": "トランザクションがGas料金 $1 で送信されたした。$2" + }, + "transactionUpdated": { + "message": "トランザクションが曎新されたした。$2" + }, + "transfer": { + "message": "転送" + }, + "transferBetweenAccounts": { + "message": "自分のアカりント間での移動" + }, + "transferFrom": { + "message": "転送元" + }, + "troubleConnectingToWallet": { + "message": "$1 ぞの接続に倱敗したした。 $2 を再確認しお、もう䞀床実行しおください。", + "description": "$1 is the wallet device name; $2 is a link to wallet connection guide" + }, "troubleTokenBalances": { "message": "トヌクン残高を取埗できたせん。こちらでご確認ください。", "description": "Followed by a link (here) to view token balances" }, + "trustSiteApprovePermission": { + "message": "このサむトを信頌したすか?蚱可を䞎えるこずにより、$1 は $2 の支払トランザクションを自動化したす。", + "description": "$1 is the url requesting permission and $2 is the symbol of the currency that the request is for" + }, + "tryAgain": { + "message": "再詊行" + }, "typePassword": { - "message": "パスワヌドの入力" + "message": "MetaMaskのパスワヌドを入力" + }, + "unapproved": { + "message": "未承認" + }, + "units": { + "message": "単䜍" }, "unknown": { "message": "䞍明" }, + "unknownCameraError": { + "message": "カメラにアクセスしおいるずきに゚ラヌが発生したした。もう䞀床実行しおください。" + }, + "unknownCameraErrorTitle": { + "message": "おおぅ!問題が発生したした。" + }, "unknownNetwork": { "message": "䞍明なプラむベヌトネットワヌク" }, + "unknownQrCode": { + "message": "゚ラヌ:QRコヌドを識別できたせんでした" + }, + "unlimited": { + "message": "無制限" + }, "unlock": { - "message": "ログむン" + "message": "ロック解陀" + }, + "unlockMessage": { + "message": "分散型Webが埅っおいたす" + }, + "updatedWithDate": { + "message": "$1 に曎新したした" + }, + "urlErrorMsg": { + "message": "URLには適切なHTTP/HTTPSプレフィックスが必芁です。" + }, + "urlExistsErrorMsg": { + "message": "URLはネットワヌクリストに既に存圚したす" + }, + "usePhishingDetection": { + "message": "フィッシング怜出を䜿甚" + }, + "usePhishingDetectionDescription": { + "message": "Ethereumナヌザヌを察象ずしたドメむンのフィッシングに察しお譊告を衚瀺したす" }, "usedByClients": { - "message": "様々なクラむアントによっお䜿甚されおいたす。" + "message": "Ethereumクラむアントなどで䜿甚されおいたす。" + }, + "userName": { + "message": "ナヌザヌ名" + }, + "verifyThisTokenOn": { + "message": "トヌクンを $1 で怜蚌する", + "description": "Points the user to etherscan as a place they can verify information about a token. $1 is replaced with the translation for \"etherscan\"" }, "viewAccount": { - "message": "アカりントを芋る" + "message": "アカりントを衚瀺" + }, + "viewContact": { + "message": "連絡先を衚瀺" + }, + "viewOnCustomBlockExplorer": { + "message": "$1 で衚瀺" }, "viewOnEtherscan": { - "message": "Etherscan で芋る" + "message": "Etherscanで衚瀺" + }, + "viewinExplorer": { + "message": "Explorerで衚瀺" + }, + "visitWebSite": { + "message": "りェブサむト" + }, + "walletConnectionGuide": { + "message": "ハヌドりェアりォレット接続ガむド" }, "walletSeed": { - "message": "りォレットのパスフレヌズ" + "message": "シヌドフレヌズ" + }, + "web3ShimUsageNotification": { + "message": "このサむトは削陀されたwindow.web3 APIを䜿甚したす。サむトに問題が発生しおいるなら、$1 で詳现を芋るこずができたす。", + "description": "$1 is a clickable link." }, "welcome": { - "message": "MetaMask ベヌタ版ぞようこそ!" + "message": "MetaMaskぞようこそ!" }, "welcomeBack": { "message": "おかえりなさい!" }, + "whatsThis": { + "message": "これは䜕ですか?" + }, + "writePhrase": { + "message": "このパスフレヌズを玙に曞いお、安党な堎所に保管しおください。セキュリティが必芁な堎合は、フレヌズを分割しお耇数の玙に曞き、それぞれを別の堎所に保管したす。" + }, + "xOfY": { + "message": "$1 / $2", + "description": "$1 and $2 are intended to be two numbers, where $2 is a total, and $1 is a count towards that total" + }, + "yesLetsTry": { + "message": "詊す" + }, + "youNeedToAllowCameraAccess": { + "message": "この機胜を䜿甚するには、カメラぞのアクセスを蚱可が必芁です。" + }, "youSign": { - "message": "眲名しおいたす。" + "message": "眲名しおいたす" + }, + "yourPrivateSeedPhrase": { + "message": "秘密のシヌドフレヌズ" + }, + "zeroGasPriceOnSpeedUpError": { + "message": "远加のGas䟡栌を0にできたせん" } } diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index c584e0fc3..864aac504 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -3,13 +3,21 @@ "message": "关于" }, "aboutSettingsDescription": { - "message": "版本、技术支持䞭心和联系方匏。" + "message": "版本、支持䞭心和联系方匏。" }, "acceleratingATransaction": { - "message": "* 讟定曎高的 Gas 价栌加快亀易的完成进床提高眑络快速倄理机率䜆无法保证每次均胜借实现提速。" + "message": "* 讟定曎高燃料价栌可以加快亀易完成进床提高眑络快速倄理机率䜆无法保证每次均胜借实现提速。" + }, + "acceptTermsOfUse": { + "message": "我已阅读并同意 $1", + "description": "$1 is the `terms` message" + }, + "accessAndSpendNotice": { + "message": "$1 可以访问并䜿甚歀最倧数额", + "description": "$1 is the url of the site requesting ability to spend" }, "accessingYourCamera": { - "message": "正圚获取盞机䜿甚权限..." + "message": "正圚获取悚的盞机  " }, "account": { "message": "莊户" @@ -26,11 +34,20 @@ "accountSelectionRequired": { "message": "悚需芁选择䞀䞪莊户 " }, + "active": { + "message": "圓前" + }, + "activity": { + "message": "掻劚" + }, "activityLog": { "message": "掻劚日志" }, + "addAccount": { + "message": "添加䞀䞪莊户" + }, "addAcquiredTokens": { - "message": "圚MetaMask䞊添加已甚的代垁" + "message": "圚 MetaMask 䞊添加获埗的代垁" }, "addAlias": { "message": "添加别名" @@ -39,7 +56,7 @@ "message": "添加眑络" }, "addRecipient": { - "message": "添加接受人" + "message": "添加接收方" }, "addSuggestedTokens": { "message": "添加掚荐代垁" @@ -63,10 +80,58 @@ "message": "高级选项" }, "advancedSettingsDescription": { - "message": "访问匀发者功胜䞋蜜状态日志重眮莊户安排测试眑络和自定义 RPC 。" + "message": "访问匀发者功胜䞋蜜状态日志重眮莊户讟眮测试眑和自定义 RPC。" + }, + "affirmAgree": { + "message": "我同意" + }, + "aggregatorFeeCost": { + "message": "聚集噚眑络手续莹" + }, + "alertDisableTooltip": { + "message": "这䞪可以圚“讟眮 > 提醒”䞭进行曎改" + }, + "alertSettingsUnconnectedAccount": { + "message": "选择了未连接的莊户时浏览眑站" + }, + "alertSettingsUnconnectedAccountDescription": { + "message": "圓悚圚浏览已连接的 Web3 眑站䜆圓前选择的莊户没有连接时该提醒䌚圚匹出的窗口䞭星瀺。" + }, + "alertSettingsWeb3ShimUsage": { + "message": "圓眑站尝试䜿甚已经删陀的 window.web3 API" + }, + "alertSettingsWeb3ShimUsageDescription": { + "message": "圓悚圚浏览的眑站尝试䜿甚已经删陀的 window.web3 API 时该提醒䌚圚匹出的窗口䞭星瀺。" + }, + "alerts": { + "message": "提醒" + }, + "alertsSettingsDescription": { + "message": "启甚或犁甚每䞪提醒" + }, + "allowExternalExtensionTo": { + "message": "允讞这䞪倖郚扩展到" + }, + "allowOriginSpendToken": { + "message": "允讞 $1 䜿甚悚的 $2?", + "description": "$1 is the url of the site and $2 is the symbol of the token they are requesting to spend" + }, + "allowThisSiteTo": { + "message": "允讞本眑站" + }, + "allowWithdrawAndSpend": { + "message": "允讞 $1 提取和最倚消莹以䞋数额", + "description": "The url of the site that requested permission to 'withdraw and spend'" }, "amount": { - "message": "数量" + "message": "数额" + }, + "amountInEth": { + "message": "$1 ETH", + "description": "Displays an eth amount to the user. $1 is a decimal number" + }, + "amountWithColon": { + "message": "数额" }, "appDescription": { "message": "以倪坊浏览噚插件", @@ -76,8 +141,18 @@ "message": "MetaMask", "description": "The name of the application" }, + "approvalAndAggregatorTxFeeCost": { + "message": "批准聚合商眑络手续莹" + }, + "approvalTxGasCost": { + "message": "批准亀易燃料成本" + }, "approve": { - "message": "批准" + "message": "批准消莹限额" + }, + "approveSpendLimit": { + "message": "批准 $1 消莹限额", + "description": "The token symbol that is being approved" }, "approved": { "message": "已批准" @@ -85,23 +160,29 @@ "asset": { "message": "资产" }, + "assets": { + "message": "资产" + }, "attemptToCancel": { "message": "想芁取消吗" }, "attemptToCancelDescription": { - "message": "确讀提亀该操䜜无法保证胜借成功取消悚的原始亀易。劂果取消成功悚将被收取䞊述亀易莹甚。" + "message": "确讀提亀该操䜜无法保证胜借成功取消悚的原始亀易。劂取消成功悚将被收取䞊述亀易莹。" }, "attemptingConnect": { - "message": "正圚尝试连接区块铟。" + "message": "正圚尝试连接到区块铟。" }, "attributions": { "message": "来源" }, + "authorizedPermissions": { + "message": "悚已授权以䞋权限" + }, "autoLockTimeLimit": { - "message": "自劚泚销计时噚分钟" + "message": "自劚锁定定时分钟" }, "autoLockTimeLimitDescription": { - "message": "请讟眮 MetaMask 自劚泚销前的空闲时闎以分钟䞺单䜍" + "message": "请讟眮 MetaMask 自劚锁定前的空闲时闎单䜍分钟" }, "average": { "message": "平均倌" @@ -110,19 +191,19 @@ "message": "返回" }, "backToAll": { - "message": "恢倍所有讟眮" + "message": "返回党郚" }, "backupApprovalInfo": { "message": "劂果䞍慎䞢倱䞪人讟倇忘记密码或者需芁重新安装 MetaMask亊或是需圚及䞀台讟倇䞊打匀钱包请䜿甚该保密码恢倍䞪人钱包数据。" }, "backupApprovalNotice": { - "message": "请倇仜悚的私密恢倍代码保证䞪人钱包和资金安党。" + "message": "请倇仜悚的莊户助记词保证悚的钱包和资金安党。" }, "backupNow": { "message": "立即倇仜" }, "balance": { - "message": "䜙额" + "message": "䜙额 " }, "balanceOutdated": { "message": "䜙额可胜已过期" @@ -131,21 +212,24 @@ "message": "基本" }, "blockExplorerUrl": { - "message": "屏蔜管理噚" + "message": "区块浏览噚" }, "blockExplorerView": { "message": "通过 $1 查看莊户", "description": "$1 replaced by URL for custom block explorer" }, "blockiesIdenticon": { - "message": "䜿甚区块Identicon" + "message": "䜿甚 Blockies Identicon 囟标倎像" }, "browserNotSupported": { - "message": "悚的浏览噚䞍支持该功胜 " + "message": "悚的浏览噚䞍支持该功胜  " }, "builtInCalifornia": { "message": "MetaMask圚加利犏尌亚讟计和制造。" }, + "buy": { + "message": "莭买" + }, "buyWithWyre": { "message": "䜿甚 Wyre 莭买 ETH" }, @@ -155,11 +239,14 @@ "bytes": { "message": "字节" }, + "canToggleInSettings": { + "message": "悚可以圚 讟眮 -> 提醒 䞭重新启甚该提醒通知。" + }, "cancel": { "message": "取消" }, "cancellationGasFee": { - "message": "取消 Gas 莹" + "message": "取消亀易燃料莹甚" }, "cancelled": { "message": "已取消" @@ -168,7 +255,7 @@ "message": "é“Ÿ ID" }, "chromeRequiredForHardwareWallets": { - "message": "悚需芁通过 Google Chrome 浏览噚䜿甚 MetaMask 连接䞪人硬件钱包。" + "message": "悚需芁圚谷歌浏览噚Google Chrome䞊䜿甚 MetaMask 才胜连接到悚的硬件钱包。" }, "clickToRevealSeed": { "message": "点击歀倄星瀺密语" @@ -183,7 +270,7 @@ "message": "确讀密码" }, "confirmSecretBackupPhrase": { - "message": "请确讀悚的私密倇仜密语" + "message": "请确讀悚的莊户助记词" }, "confirmed": { "message": "确讀" @@ -194,8 +281,61 @@ "connect": { "message": "连接" }, + "connectAccountOrCreate": { + "message": "连接莊户或创建新莊户" + }, "connectHardwareWallet": { - "message": "铟接硬件钱包" + "message": "连接硬件钱包" + }, + "connectManually": { + "message": "手劚连接到圓前站点" + }, + "connectTo": { + "message": "连接到 $1", + "description": "$1 is the name/origin of a web3 site/application that the user can connect to metamask" + }, + "connectToAll": { + "message": "连接到悚的党郚$1", + "description": "$1 will be replaced by the translation of connectToAllAccounts" + }, + "connectToAllAccounts": { + "message": "莊户", + "description": "will replace $1 in connectToAll, completing the sentence 'connect to all of your accounts', will be text that shows list of accounts on hover" + }, + "connectToMultiple": { + "message": "连接到 $1", + "description": "$1 will be replaced by the translation of connectToMultipleNumberOfAccounts" + }, + "connectToMultipleNumberOfAccounts": { + "message": "$1 䞪莊户", + "description": "$1 is the number of accounts to which the web3 site/application is asking to connect; this will substitute $1 in connectToMultiple" + }, + "connectWithMetaMask": { + "message": "䜿甚 MetaMask 连接" + }, + "connectedAccountsDescriptionPlural": { + "message": "悚有 $1 䞪莊户连接到了该眑站。", + "description": "$1 is the number of accounts" + }, + "connectedAccountsDescriptionSingular": { + "message": "悚有 1 䞪莊户连接到了该眑站。" + }, + "connectedAccountsEmptyDescription": { + "message": "MetaMask 没有连接这䞪眑站。芁连接到 web3 眑站请圚他们的眑站䞊扟到连接按钮。" + }, + "connectedSites": { + "message": "已连接的眑站" + }, + "connectedSitesDescription": { + "message": "$1 已连接到这些眑站。他们可以查看悚的莊户地址。", + "description": "$1 is the account name" + }, + "connectedSitesEmptyDescription": { + "message": "$1 还没连接任䜕眑站。", + "description": "$1 is the account name" + }, + "connecting": { + "message": "连接䞭  " }, "connectingTo": { "message": "正圚连接 $1" @@ -204,16 +344,25 @@ "message": "正圚连接 Goerli 测试眑络" }, "connectingToKovan": { - "message": "正圚连接到Kovan测试眑络" + "message": "正圚连接到 Kovan 测试眑络" }, "connectingToMainnet": { - "message": "正圚连接到以倪坊䞻眑" + "message": "正圚连接到以倪坊 Ethereum 䞻眑" }, "connectingToRinkeby": { - "message": "正圚连接到Rinkeby测试眑络" + "message": "正圚连接到 Rinkeby 测试眑络" }, "connectingToRopsten": { - "message": "正圚连接到Ropsten测试眑络" + "message": "正圚连接到 Ropsten 测试眑络" + }, + "contactUs": { + "message": "联系我们" + }, + "contacts": { + "message": "联系人" + }, + "contactsSettingsDescription": { + "message": "添加、猖蟑、删陀和管理悚的联系人。" }, "continueToWyre": { "message": "继续前埀 Wyre" @@ -231,10 +380,10 @@ "message": "亀易 ID 倍制成功" }, "copyAddress": { - "message": "将地址倍制到剪莎板" + "message": "倍制地址到剪莎板" }, "copyPrivateKey": { - "message": "这是䜠的私钥点击倍制" + "message": "这是悚的私钥点击倍制" }, "copyToClipboard": { "message": "倍制到剪莎板" @@ -255,13 +404,19 @@ "message": "创建密码" }, "currencyConversion": { - "message": "莧垁兑换" + "message": "莧垁蜬换" + }, + "currentAccountNotConnected": { + "message": "悚的圓前莊户没有连接" + }, + "currentExtension": { + "message": "圓前扩展页" }, "currentLanguage": { "message": "圓前语蚀" }, "customGas": { - "message": "自定义 Gas" + "message": "自定义燃料" }, "customGasSubTitle": { "message": "提升莹甚可胜䌚猩短倄理时闎䜆䞍保证绝对有效。" @@ -269,17 +424,43 @@ "customRPC": { "message": "自定义 RPC" }, + "customSpendLimit": { + "message": "自定义消莹限额" + }, "customToken": { "message": "自定义代垁" }, + "dataBackupFoundInfo": { + "message": "悚的郚分莊户数据已圚之前安装的 MetaMask 时倇仜。其䞭可胜包括悚的讟眮、联系人和代垁。悚现圚想恢倍这些数据吗" + }, "decimal": { - "message": "粟确小数点" + "message": "小数粟床" }, "decimalsMustZerotoTen": { "message": "小数䜍最小䞺0并䞔䞍超过36䜍." }, + "decrypt": { + "message": "解密" + }, + "decryptCopy": { + "message": "倍制加密信息" + }, + "decryptInlineError": { + "message": "无法解密歀消息错误$1", + "description": "$1 is error message" + }, + "decryptMessageNotice": { + "message": "$1 垌望阅读歀信息来完成悚的操䜜。", + "description": "$1 is the web3 site name" + }, + "decryptMetamask": { + "message": "解密信息" + }, + "decryptRequest": { + "message": "解密请求" + }, "defaultNetwork": { - "message": "默讀以倪坊亀易眑络䞺䞻眑。" + "message": "默讀以倪坊Ether亀易眑络䞺䞻眑。" }, "delete": { "message": "删陀" @@ -288,10 +469,10 @@ "message": "删陀莊户" }, "deleteNetwork": { - "message": "是吊删陀眑络" + "message": "删陀眑络" }, "deleteNetworkDescription": { - "message": "悚是吊确讀芁删陀该眑络" + "message": "是吊确讀芁删陀该眑络" }, "depositEther": { "message": "存入 Ether" @@ -303,7 +484,25 @@ "message": "盎接存入 Ether" }, "directDepositEtherExplainer": { - "message": "劂果䜠已经有了䞀些 Ether通过盎接蜬入是䜠的新钱包获取 Ether 的最快捷方匏。" + "message": "劂果悚已经有了䞀些 Ether最快捷的方法就是盎接向新钱包存入 Ether。" + }, + "disconnect": { + "message": "断匀" + }, + "disconnectAllAccounts": { + "message": "断匀所有莊户" + }, + "disconnectAllAccountsConfirmationDescription": { + "message": "悚确定芁断匀连接吗悚可胜䌚倱去眑站功胜。" + }, + "disconnectPrompt": { + "message": "断匀 $1" + }, + "disconnectThisAccount": { + "message": "断匀歀莊户的连接" + }, + "dismiss": { + "message": "关闭" }, "done": { "message": "完成" @@ -311,14 +510,17 @@ "dontHaveAHardwareWallet": { "message": "没有硬件钱包" }, + "dontShowThisAgain": { + "message": "䞍再星瀺" + }, "downloadGoogleChrome": { "message": "䞋蜜 Google Chrome 浏览噚" }, "downloadSecretBackup": { - "message": "䞋蜜私密倇仜密语并䜿甚倖郚加密硬盘或存傚媒介劥善保管。" + "message": "䞋蜜莊户助记词并将其安党保存圚倖郚加密硬盘或存傚介莚䞊。" }, "downloadStateLogs": { - "message": "䞋蜜日志" + "message": "䞋蜜状态日志" }, "dropped": { "message": "䞢匃" @@ -329,36 +531,50 @@ "editContact": { "message": "猖蟑联系人" }, + "editPermission": { + "message": "猖蟑权限" + }, + "encryptionPublicKeyNotice": { + "message": "$1 垌望埗到悚的加密公钥。同意后该眑站将可以想悚发送加密信息。", + "description": "$1 is the web3 site name" + }, + "encryptionPublicKeyRequest": { + "message": "申请加密公钥" + }, "endOfFlowMessage1": { - "message": "悚已通过测试 - 请劥善保管䜠的种子密语。这是悚的莣任" + "message": "悚通过了测试—— 保管奜悚的莊户助记词这是悚的莣任!" }, "endOfFlowMessage10": { "message": "党郚完成" }, "endOfFlowMessage2": { - "message": "安党保存小技巧" + "message": "安党保存技巧" }, "endOfFlowMessage3": { "message": "圚倚倄保存倇仜数据。" }, "endOfFlowMessage4": { - "message": "绝䞍向任䜕分享该密语。" + "message": "䞍向任䜕任䜕人分享该莊户助记词。" }, "endOfFlowMessage5": { - "message": "谚防眑络钓鱌MetaMask 绝䞍䌚䞻劚芁求悚提䟛䞪人种子密语。" + "message": "谚防眑络钓鱌MetaMask 绝䞍䌚䞻劚芁求悚提䟛䞪人莊户助记词。" }, "endOfFlowMessage6": { - "message": "劂果悚需芁再次倇仜䞪人种子密语请通过讟眮 -> 安党选项完成该操䜜。" + "message": "劂果悚需芁再次倇仜莊户助记词请通过讟眮 -> 安党选项完成该操䜜。" }, "endOfFlowMessage7": { "message": "劂果悚仍存有疑问或发现任䜕可疑的地方请发送电子邮件至 support@metamask.io 进行咚询。" }, "endOfFlowMessage8": { - "message": "MetaMask 无法恢倍悚的种子密语。了解曎倚。" + "message": "MetaMask 无法恢倍悚的莊户助记词。" }, "endOfFlowMessage9": { "message": "了解诊情。" }, + "endpointReturnedDifferentChainId": { + "message": "RPC 端点䜿甚铟䞍同的铟 ID: $1", + "description": "$1 is the return value of eth_chainId from an RPC endpoint" + }, "ensNotFoundOnCurrentNetwork": { "message": "未圚圓前眑络扟到 ENS 名称。请尝试切换至䞻以倪坊眑络。" }, @@ -368,20 +584,62 @@ "enterAnAlias": { "message": "蟓入别名" }, + "enterMaxSpendLimit": { + "message": "蟓入最高消莹额床" + }, "enterPassword": { - "message": "请蟓入密码" + "message": "蟓入密码" }, "enterPasswordContinue": { - "message": "请蟓入密码以继续" + "message": "蟓入密码以继续" + }, + "errorCode": { + "message": "代码$1", + "description": "Displayed error code for debugging purposes. $1 is the error code" + }, + "errorDetails": { + "message": "错误诊情", + "description": "Title for collapsible section that displays error details for debugging purposes" + }, + "errorMessage": { + "message": "信息$1", + "description": "Displayed error message for debugging purposes. $1 is the error message" + }, + "errorName": { + "message": "代码$1", + "description": "Displayed error name for debugging purposes. $1 is the error name" + }, + "errorPageMessage": { + "message": "请重新加蜜页面重试或通过 support@metamask.io 联系支持。", + "description": "Message displayed on generic error page in the fullscreen or notification UI" + }, + "errorPagePopupMessage": { + "message": "请关闭并重新打匀匹窗再试䞀次或通过 support@metamask.io 联系支持。", + "description": "Message displayed on generic error page in the popup UI" + }, + "errorPageTitle": { + "message": "MetaMask 遇到了䞀䞪错误", + "description": "Title of generic error page" + }, + "errorStack": { + "message": "栈", + "description": "Title for error stack, which is displayed for debugging purposes" }, "estimatedProcessingTimes": { - "message": "预䌰倄理时闎" + "message": "预计倄理时闎" + }, + "eth_accounts": { + "message": "查看悚允讞的莊户的地址必填", + "description": "The description for the `eth_accounts` permission" }, "ethereumPublicAddress": { - "message": "以倪坊公共地址" + "message": "以倪坊 Ethereum 公匀地址" + }, + "etherscan": { + "message": "Etherscan以倪坊浏览噚" }, "etherscanView": { - "message": "圚 Etherscan 䞊查看莊户" + "message": "圚 Etherscan以倪坊浏览噚䞊查看莊户" }, "expandView": { "message": "展匀视囟" @@ -389,12 +647,31 @@ "exportPrivateKey": { "message": "富出私钥" }, + "externalExtension": { + "message": "倖郚扩展" + }, + "extraApprovalGas": { + "message": "+$1 批准燃料", + "description": "Expresses an additional gas amount the user will have to pay, on top of some other displayed amount. $1 is a decimal amount of gas" + }, "failed": { "message": "倱莥" }, + "failedToFetchChainId": { + "message": "无法获取铟 IC悚的 RPC URL 地址是正确的么" + }, + "failureMessage": { + "message": "出了点问题我们无法完成这䞪操䜜。" + }, "fast": { "message": "å¿«" }, + "fastest": { + "message": "最快" + }, + "feeAssociatedRequest": { + "message": "歀请求需芁支付䞀定的莹甚。" + }, "fiat": { "message": "FIAT", "description": "Exchange type" @@ -403,47 +680,69 @@ "message": "文件富入倱莥 点击这里", "description": "Helps user import their account from a JSON file" }, + "forbiddenIpfsGateway": { + "message": "穁甹的 IPFS 眑关请指定䞀䞪 CID 眑关" + }, "forgetDevice": { - "message": "取消保存歀讟倇" + "message": "忘记歀讟倇" }, "from": { - "message": "来自" + "message": "从" + }, + "fromAddress": { + "message": "从$1", + "description": "$1 is the address to include in the From label. It is typically shortened first using shortenAddress" + }, + "functionApprove": { + "message": "功胜同意" }, "functionType": { "message": "功胜类型" }, "gasLimit": { - "message": "Gas 侊限" + "message": "燃料限制" }, "gasLimitInfoTooltipContent": { - "message": "Gas 䞊限是悚䞪人垌望付出的 Gas 数量䞊限。" + "message": "燃料限制是指悚愿意花莹的最燃料量单䜍。" }, "gasLimitTooLow": { - "message": "Gas 䞊限至少芁 21000" + "message": "燃料限制至少芁 21000" + }, + "gasLimitTooLowWithDynamicFee": { + "message": "燃料限制至少芁 $1", + "description": "$1 is the custom gas limit, in decimal." }, "gasPrice": { - "message": "Gas ä»·æ Œ (gwei)" + "message": "燃料价栌GWEI" }, "gasPriceExtremelyLow": { - "message": "Gas 价栌极䜎" + "message": "燃料价栌极䜎" }, "gasPriceInfoTooltipContent": { - "message": "Gas 价栌将诊细列明每䞪付莹 Gas 单䜍的以倪垁金额。" + "message": "燃料价栌规定了悚愿意䞺每单䜍燃料支付的 Ether 数量。" }, "gasUsed": { - "message": "已䜿甚 Gas 量" + "message": "燃料䜿甚" + }, + "gdprMessage": { + "message": "这些数据是汇总的因歀根据《GDPR 通甚数据保技条䟋》(EU)2016/679这些数据是匿名的。有关我们隐私惯䟋的曎倚信息请参见我们的 $1。", + "description": "$1 refers to the gdprMessagePrivacyPolicy message, the translation of which is meant to be used exclusively in the context of gdprMessage" + }, + "gdprMessagePrivacyPolicy": { + "message": "隐私政策", + "description": "this translation is intended to be exclusively used as the replacement for the $1 in the gdprMessage translation" }, "general": { "message": "通甹" }, "generalSettingsDescription": { - "message": "莧垁兑换、䞻芁莧垁、语蚀和块状身仜倎像" + "message": "莧垁蜬换、䞻芁价栌单䜍、语蚀和 Blockies Identicon 囟标倎像" }, "getEther": { "message": "获取 Ether" }, "getEtherFromFaucet": { - "message": "从氎管获取$1眑络的 Ether", + "message": "从氎管获取 $1 眑络的 Ether", "description": "Displays network name for Ether faucet" }, "getHelp": { @@ -456,19 +755,19 @@ "message": "Goerli 测试眑络" }, "happyToSeeYou": { - "message": "我们埈高兎䞎悚见面。" + "message": "我们埈高兎见到悚。" }, "hardware": { "message": "硬件" }, "hardwareWalletConnected": { - "message": "已连接硬件钱包" + "message": "已连接的硬件钱包" }, "hardwareWallets": { "message": "连接硬件钱包" }, "hardwareWalletsMsg": { - "message": "请选择垌望甚于 MetaMask 的硬件钱包" + "message": "选择垌望甚于 MetaMask 的硬件钱包" }, "havingTroubleConnecting": { "message": "连接出现问题" @@ -486,6 +785,10 @@ "hideTokenPrompt": { "message": "隐藏代垁" }, + "hideTokenSymbol": { + "message": "隐藏 $1", + "description": "$1 is the symbol for a token (e.g. 'DAI')" + }, "history": { "message": "历史记圕" }, @@ -496,17 +799,20 @@ "importAccount": { "message": "富入莊户" }, + "importAccountMsg": { + "message": "富入的莊户将䞍䌚䞎最初创建的 MetaMask 莊户助记词盞关联。了解曎倚有关富入莊户的信息 。" + }, "importAccountSeedPhrase": { - "message": "䜿甚种子密语富入莊户" + "message": "䜿甚莊户助记词富入莊户" }, "importUsingSeed": { - "message": "䜿甚垐号种子密语富入" + "message": "䜿甚莊户助记词富入" }, "importWallet": { "message": "富入钱包" }, "importYourExisting": { - "message": "请䜿甚 12 字种子密语富入现有钱包" + "message": "䜿甚 12 䞪单词的莊户助记词富入悚现有的钱包莊户。" }, "imported": { "message": "已富入", @@ -516,56 +822,100 @@ "message": "信息 & 垮助" }, "initialTransactionConfirmed": { - "message": "悚的銖次亀易已通过眑络完成确讀。请点击“确定”返回。" + "message": "悚的初始亀易已通过眑络确讀。请点击“确定”返回。" }, "insufficientBalance": { "message": "䜙额䞍足。" }, "insufficientFunds": { - "message": "䜙额䞍足." + "message": "䜙额䞍足。" }, "insufficientTokens": { - "message": "代垁䜙额䞍足." + "message": "代垁䜙额䞍足。" }, "invalidAddress": { "message": "无效地址" }, "invalidAddressRecipient": { - "message": "收欟地址䞍合法" + "message": "接收方地址无效" }, "invalidAddressRecipientNotEthNetwork": { - "message": "非 ETH 眑络讟眮䞺小写" + "message": "非 ETH 眑络请䜿甚小写" }, "invalidBlockExplorerURL": { - "message": "无效 Block Explorer URI" + "message": "无效的区块浏览噚 URL" + }, + "invalidChainIdTooBig": { + "message": "无效的铟 ID该铟 ID 数字过倧。" + }, + "invalidCustomNetworkAlertContent1": { + "message": "需芁重新蟓入自定义眑络'$1'çš„é“Ÿ ID。", + "description": "$1 is the name/identifier of the network." + }, + "invalidCustomNetworkAlertContent2": { + "message": "䞺了保技悚免受恶意或有问题的眑络提䟛商的䟵害现圚所有的自定义眑络郜需芁提䟛铟 ID。" + }, + "invalidCustomNetworkAlertContent3": { + "message": "进入讟眮 > 眑络并蟓入铟 ID。悚可以通过 $1 查扟垞甚的铟 ID。", + "description": "$1 is a link to https://chainid.network" + }, + "invalidCustomNetworkAlertTitle": { + "message": "无效的自定义眑络" + }, + "invalidHexNumber": { + "message": "无效的十六进制数。" + }, + "invalidHexNumberLeadingZeros": { + "message": "无效的十六进制数。去陀任䜕匀倎的零。" + }, + "invalidIpfsGateway": { + "message": "无效的 IPFS 眑关。该倌必须是䞀䞪有效的 URL" + }, + "invalidNumber": { + "message": "无效的数字。蟓入䞀䞪数字或‘0x’匀倎的十六进制数。" + }, + "invalidNumberLeadingZeros": { + "message": "无效的数字。去陀任䜕匀倎的零。" }, "invalidRPC": { - "message": "无效 RPC URI" + "message": "无效 RPC URL" }, "invalidSeedPhrase": { - "message": "无效种子密语" + "message": "无效的莊户助记词" + }, + "ipfsGateway": { + "message": "IPFS 眑关" + }, + "ipfsGatewayDescription": { + "message": "蟓入甚于 ENS 内容解析的 IPFS CID 眑关的 URL。" }, "jsonFile": { "message": "JSON 文件", "description": "format for importing an account" }, "knownAddressRecipient": { - "message": "已知联系人地址。" + "message": "已知接收方地址。" + }, + "knownTokenWarning": { + "message": "歀操䜜将猖蟑已经圚悚的钱包䞭列出的代垁有肯胜被甚来欺骗悚。只有确定芁曎改这些代垁的内容时才通过歀操䜜。" }, "kovan": { "message": "Kovan 测试眑络" }, + "lastConnected": { + "message": "最后连接" + }, "learnMore": { - "message": "查看曎倚." + "message": "查看曎倚" }, "ledgerAccountRestriction": { - "message": "请圚新增莊户前确讀添加䞊䞀䞪莊户。" + "message": "圚添加新的莊户之前需芁䜿甚悚的最后䞀䞪莊户。" }, "letsGoSetUp": { - "message": "是的。立即匀始讟眮" + "message": "第䞀次立即匀始讟眮" }, "likeToAddTokens": { - "message": "䜠想添加这些代垁吗" + "message": "悚想添加这些代垁吗" }, "links": { "message": "铟接" @@ -574,57 +924,115 @@ "message": "加蜜曎倚" }, "loading": { - "message": "加蜜䞭..." + "message": "加蜜䞭  " }, "loadingTokens": { - "message": "加蜜代垁䞭..." + "message": "加蜜代垁䞭  " + }, + "localhost": { + "message": "Localhost 8545" }, "lock": { "message": "锁定" }, + "lockTimeTooGreat": { + "message": "锁定时闎过长" + }, "mainnet": { - "message": "以倪坊䞻眑络" + "message": "以倪坊 Ethereum 䞻眑络" }, "max": { "message": "最倧" }, "memo": { - "message": "倇忘圕" + "message": "倇忘" }, "memorizePhrase": { - "message": "记䜏该密语。" + "message": "记䜏该莊户助记词。" }, "message": { "message": "消息" }, + "metaMaskConnectStatusParagraphOne": { + "message": "现圚悚可圚 MetaMask 䞭对莊户连接进行曎倚的控制。" + }, + "metaMaskConnectStatusParagraphThree": { + "message": "点击管理连接的莊户。" + }, + "metaMaskConnectStatusParagraphTwo": { + "message": "连接状态按钮星瀺所访问的眑站是吊䞎悚圓前选择的莊户连接。" + }, "metamaskDescription": { - "message": "MetaMask is a secure identity vault for Ethereum." + "message": "将悚䞎 Ethereum 和去䞭心化眑络连接起来。" + }, + "metamaskSwapsOfflineDescription": { + "message": "MetaMask Swaps 正圚进行绎技。请皍后访问。" }, "metamaskVersion": { "message": "MetaMask 版本" }, + "metametricsCommitmentsAllowOptOut": { + "message": "始终允讞悚通过讟眮选择退出" + }, + "metametricsCommitmentsBoldNever": { + "message": "从䞍", + "description": "This string is localized separately from some of the commitments so that we can bold it" + }, + "metametricsCommitmentsIntro": { + "message": "MetaMask

" + }, + "metametricsCommitmentsNeverCollectIP": { + "message": "$1收集悚的完敎IP地址", + "description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'" + }, + "metametricsCommitmentsNeverCollectKeysEtc": { + "message": "$1收集密钥、地址、亀易记圕、䜙额、哈垌或任䜕䞪人信息", + "description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'" + }, + "metametricsCommitmentsNeverSellDataForProfit": { + "message": "$1䞺利益而出售悚的数据氞远䞍䌚", + "description": "The $1 is the bolded word 'Never', from 'metametricsCommitmentsBoldNever'" + }, + "metametricsCommitmentsSendAnonymizedEvents": { + "message": "发送匿名的点击和页面浏览事件信息" + }, + "metametricsHelpImproveMetaMask": { + "message": "垮助我们让 MetaMask 变埗曎奜" + }, + "metametricsOptInDescription": { + "message": "MetaMask 垌望收集䜿甚数据以曎奜地了解我们的甚户劂䜕䞎扩展进行互劚。这些数据将被甚于持续改进我们产品和 Ethereum 生态系统的可甚性和甚户䜓验。" + }, "mobileSyncText": { "message": "请蟓入密码确讀䞪人身仜" }, "mustSelectOne": { - "message": "至少选择䞀种代垁." + "message": "至少选择 1 种代垁。" + }, + "myAccounts": { + "message": "我的莊户" }, "myWalletAccounts": { "message": "我的钱包莊户" }, "myWalletAccountsDescription": { - "message": "所有已创建的 MetaMask 莊户将自劚添加到该郚分。" + "message": "所有创建的 MetaMask 莊户将自劚添加到歀郚分。" }, "needEtherInWallet": { - "message": "䜿甚 MetaMask 侎 DAPP 亀互需芁䜠的钱包里有 Ether。" + "message": "䜿甚 MetaMask 䞎分垃匏应甚亀互需芁悚的钱包里需芁有 Ether。" }, "needImportFile": { - "message": "必须选择富入䞀䞪文件。", + "message": "必须选择䞀䞪文件来富入。", "description": "User is important an account and needs to add a file to continue" }, + "negativeETH": { + "message": "䞍胜发莟倌的 ETH。" + }, "networkName": { "message": "眑络名称" }, + "networkSettingsChainIdDescription": { + "message": "é“Ÿ ID 甚于筟眲亀易。它必须䞎眑络返回的铟 ID 盞匹配。悚可以蟓入十进制或'0x'前猀的十六进制数字䜆我们将以十进制星瀺。" + }, "networkSettingsDescription": { "message": "添加和猖蟑自定义 RPC 眑络" }, @@ -638,14 +1046,14 @@ "message": "新莊户" }, "newAccountDetectedDialogMessage": { - "message": "检测到新地址请点击歀倄添加至悚的地址簿。" + "message": "检测到新地址点击添加至地址簿。" }, "newAccountNumberName": { "message": "莊户 $1", "description": "Default name of next account to be created on create account screen" }, "newContact": { - "message": "新增联系人" + "message": "新联系人" }, "newContract": { "message": "新合纊" @@ -657,37 +1065,59 @@ "message": "新密码至少 8 䞪字笊" }, "newToMetaMask": { - "message": "新增至 MetaMask" + "message": "第䞀次䜿甚 MetaMask" }, "newTotal": { - "message": "新增合计" + "message": "新总额" }, "newTransactionFee": { - "message": "新增亀易莹甚" + "message": "新亀易莹甚" }, "next": { "message": "䞋䞀步" }, + "nextNonceWarning": { + "message": "Nonce 高于建议的 nouce 倌 $1", + "description": "The next nonce according to MetaMask's internal logic" + }, + "noAccountsFound": { + "message": "没扟到查询的莊户" + }, "noAddressForName": { - "message": "æ­€ ENS 名字还没有指定地址。" + "message": "这䞪名字还没有讟眮地址。" }, "noAlreadyHaveSeed": { - "message": "䞍我已经有䞀䞪种子密语了。" + "message": "䞍我已经有䞀䞪莊户助记词了。" }, "noConversionRateAvailable": { - "message": "无可甚兑换率" + "message": "无可甚蜬换率" + }, + "noThanks": { + "message": "䞍谢谢" }, "noTransactions": { "message": "没有亀易" }, "noWebcamFound": { - "message": "扟䞍到悚的䞪人电脑眑络摄像倎请重试。" + "message": "未扟到悚的电脑摄像倎。请重试。" }, "noWebcamFoundTitle": { - "message": "未扟到眑络摄像倎" + "message": "未扟到摄像倎" + }, + "nonceField": { + "message": "自定义亀易 nonce" + }, + "nonceFieldDescription": { + "message": "匀启歀功胜可以改变确讀屏幕䞊的 nonce亀易号。歀䞺高级功胜请谚慎䜿甚。" + }, + "nonceFieldHeading": { + "message": "自定义 Nonce" + }, + "notCurrentAccount": { + "message": "这是正确的莊户吗这䞎悚钱包䞭圓前选择的莊户䞍同。" }, "notEnoughGas": { - "message": "Gas 䞍足" + "message": "燃料䞍足" }, "ofTextNofM": { "message": "/" @@ -695,14 +1125,30 @@ "off": { "message": "关" }, + "offlineForMaintenance": { + "message": "脱机绎技" + }, "ok": { - "message": "确讀" + "message": "确定" }, "on": { "message": "启甚" }, + "onboardingReturnNotice": { + "message": "“$1”䌚关闭歀标筟盎接回到 $2", + "description": "Return the user to the site that initiated onboarding" + }, + "onlyAddTrustedNetworks": { + "message": "恶意的 Ethereum 以倪坊眑络提䟛商可以䌪造区块铟状态并记圕悚的眑络掻劚。只添加悚信任的自定义眑络。" + }, + "onlyAvailableOnMainnet": { + "message": "仅圚䞻眑mainnet䞊提䟛" + }, + "onlyConnectTrust": { + "message": "只连接悚信任的眑站。" + }, "optionalBlockExplorerUrl": { - "message": "屏蔜管理噚 URL选填" + "message": "区块浏览噚 URL选填" }, "optionalCurrencySymbol": { "message": "笊号选填" @@ -732,15 +1178,28 @@ "message": "密码䞍匹配" }, "pastePrivateKey": { - "message": "请粘莎䜠的私钥:", + "message": "请粘莎悚的私钥:", "description": "For importing an account from a private key" }, "pending": { "message": "埅倄理" }, + "permissionCheckedIconDescription": { + "message": "悚已同意该权限" + }, + "permissionUncheckedIconDescription": { + "message": "悚还未同意该权限" + }, + "permissions": { + "message": "权限" + }, "personalAddressDetected": { "message": "检测到䞪人地址。请蟓入代垁合纊地址。" }, + "plusXMore": { + "message": "+ $1", + "description": "$1 is a number of additional but unshown items in a list- this message will be shown in place of those items" + }, "prev": { "message": "䞊䞀䞪" }, @@ -748,7 +1207,7 @@ "message": "䞻芁莧垁" }, "primaryCurrencySettingDescription": { - "message": "请选择“本地”䌘先星瀺圓地莧垁铟价倌劂 ETH 。请选择“法定”䌘先星瀺选定法定莧垁价倌。" + "message": "请选择“本地”䌘先星瀺圓地莧垁铟价倌劂 ETH 。选择“莧垁”则䌘先以所选莧垁䜜䞺价倌星瀺单䜍。" }, "privacyMsg": { "message": "隐私政策" @@ -758,29 +1217,41 @@ "description": "select this type of file to use to import an account" }, "privateKeyWarning": { - "message": "泚意氞远䞍芁公匀这䞪私钥。任䜕拥有䜠的私钥的人郜可以窃取䜠垐户䞭的任䜕资产。" + "message": "泚意氞远䞍芁公匀这䞪私钥。任䜕拥有悚的私钥的人郜可以窃取悚垐户䞭的任䜕资产。" }, "privateNetwork": { "message": "私有眑络" }, + "proposedApprovalLimit": { + "message": "拟议的审批䞊限" + }, "protectYourKeys": { "message": "劥善保管悚的密钥" }, "protectYourKeysMessage1": { - "message": "请泚意䞪人种子密语安党。报告星瀺有倚䞪眑站䌁囟䌪造 MetaMask。MetaMask 绝䞍䌚芁求悚提䟛䞪人种子密语" + "message": "请泚意䞪人莊户助记词的安党。报告星瀺有倚䞪眑站䌁囟䌪造 MetaMask。MetaMask 绝䞍䌚芁求悚提䟛䞪人莊户助记词" }, "protectYourKeysMessage2": { - "message": "请劥善保管悚的密语。劂果悚发现任䜕可疑的地方或无法确讀眑络安党性请发送电子邮件至 support@metamask.io 进行咚询" + "message": "请劥善保管悚的莊户助记词。劂果悚发现任䜕可疑的地方或无法确讀眑络安党性请发送电子邮件至 support@metamask.io 进行咚询" + }, + "provide": { + "message": "提䟛" }, "queue": { "message": "队列" }, + "queued": { + "message": "队列䞭" + }, "readdToken": { - "message": "之后䜠还可以通过垐户选项菜单䞭的“添加代垁”来添加歀代垁。" + "message": "之后悚还可以通过垐户选项菜单䞭的“添加代垁”来添加歀代垁。" }, "readyToConnect": { "message": "是吊准倇连接" }, + "receive": { + "message": "接收" + }, "recents": { "message": "最近记圕" }, @@ -794,10 +1265,10 @@ "message": "拒绝" }, "rejectAll": { - "message": "拒绝所有" + "message": "拒绝党郚" }, "rejectTxsDescription": { - "message": "悚将指拒绝 $1 笔亀易。" + "message": "悚将批量拒绝 $1 笔亀易。" }, "rejectTxsN": { "message": "拒绝 $1 笔亀易" @@ -809,16 +1280,16 @@ "message": "皍后提醒" }, "remove": { - "message": "移陀" + "message": "删陀" }, "removeAccount": { - "message": "移陀垐号" + "message": "删陀莊户" }, "removeAccountDescription": { - "message": "该莊户已从悚的钱包䞭删陀。请圚继续后续操䜜前确讀悚是吊已拥有该富入莊户的原始种子密语或䞪人密钥。悚可以通过莊户䞋拉菜单再次富入或创建莊户。" + "message": "该莊户已从悚的钱包䞭删陀。请圚继续后续操䜜前确讀悚是吊已拥有该富入莊户的原始莊户助记词或莊户密钥。悚可以通过莊户䞋拉菜单再次富入或创建莊户。" }, "requestsAwaitingAcknowledgement": { - "message": "等埅确讀的请求" + "message": "埅确讀的请求" }, "required": { "message": "必填" @@ -830,31 +1301,41 @@ "message": "重讟莊户" }, "resetAccountDescription": { - "message": "重眮莊户后将枅陀悚的䞪人亀易历史记圕。" + "message": "重眮莊户将枅陀悚的亀易历史记圕。这䞍䌚改变悚莊户䞭的䜙额也䞍䌚芁求悚重新蟓入莊户助记词。" }, "restore": { "message": "恢倍" }, "restoreAccountWithSeed": { - "message": "䜿甚种子密语恢倍䞪人莊户" + "message": "䜿甚莊户助记词恢倍悚的莊户" }, "restoreFromSeed": { "message": "从助记词还原" }, + "restoreWalletPreferences": { + "message": "已扟到于 $1 的数据倇仜。悚想恢倍悚的钱包讟眮吗", + "description": "$1 is the date at which the data was backed up" + }, + "retryTransaction": { + "message": "重试亀易" + }, + "reusedTokenNameWarning": { + "message": "歀倄的䞀䞪代垁䜿甚了䞎悚关泚的及䞀䞪代垁的盞同笊号这可胜䌚让人感到困惑或欺骗。" + }, "revealSeedWords": { - "message": "星瀺助记词" + "message": "星瀺莊户助记词" }, "revealSeedWordsDescription": { - "message": "劂果悚曎换浏览噚或计算机则需芁䜿甚歀助记词访问悚的垐户。请将它们保存圚安党秘密的地方。" + "message": "劂果悚曎换浏览噚或计算机则需芁䜿甚歀莊户助记词访问悚的垐户。请将它们保存圚安党秘密的地方。" }, "revealSeedWordsTitle": { - "message": "助记词" + "message": "莊户助记词" }, "revealSeedWordsWarning": { - "message": "助记词可以甚来窃取悚的所有垐户." + "message": "该莊户助记词可以甚来窃取悚的所有垐户" }, "revealSeedWordsWarningTitle": { - "message": "䞍芁对任䜕人展瀺助记词" + "message": "䞍芁对任䜕人展瀺歀莊户助记词" }, "rinkeby": { "message": "Rinkeby 测试眑络" @@ -869,17 +1350,23 @@ "message": "保存" }, "saveAsCsvFile": { - "message": "及存䞺CSV文件" + "message": "保存䞺 CSV 文件" }, "scanInstructions": { - "message": "请将二绎码眮于镜倎前" + "message": "将二绎码攟圚盞机前" }, "scanQrCode": { "message": "扫描二绎码" }, + "scrollDown": { + "message": "向䞋滚劚" + }, "search": { "message": "搜玢" }, + "searchAccounts": { + "message": "搜玢莊户" + }, "searchResults": { "message": "搜玢结果" }, @@ -887,43 +1374,52 @@ "message": "搜玢代垁" }, "secretBackupPhrase": { - "message": "私密倇仜密语" + "message": "莊户助记词" }, "secretBackupPhraseDescription": { - "message": "悚的䞪人私密倇仜密语可以垮助悚蜻束倇仜和恢倍䞪人莊户。" + "message": "悚的莊户助记词可以垮助悚蜻束倇仜和恢倍䞪人莊户。" }, "secretBackupPhraseWarning": { - "message": "譊告切勿向他人透露悚的倇仜密语。任䜕人䞀旊持有该密语即可取走悚的以倪垁。" + "message": "譊告切勿向他人透露悚的莊户助记词。任䜕人䞀旊持有该莊户助记词即可控制悚的 Ether。" }, "secretPhrase": { - "message": "蟓入12䜍助记词以恢倍金库." + "message": "蟓入 12 䞪单词组成的莊户助记词恢倍悚的莊户。" }, "securityAndPrivacy": { "message": "安党䞎隐私" }, "securitySettingsDescription": { - "message": "隐私讟眮和钱包种子密语" + "message": "隐私讟眮和莊户助记词" }, "seedPhrasePlaceholder": { "message": "甚空栌分隔每䞪单词" }, + "seedPhrasePlaceholderPaste": { + "message": "从剪莎板粘莎莊户助记词" + }, "seedPhraseReq": { - "message": "助记词䞺12䞪单词" + "message": "莊户助记词由 12、15、18、21 或 24 䞪单词组成" }, "selectAHigherGasFee": { - "message": "请选择价栌皍高的 Gas 莹以加快亀易倄理速床。*" + "message": "选择曎高的燃料莹甚提高亀易倄理速床。*" }, - "selectAnAccount": { + "selectAccounts": { "message": "选择莊户" }, + "selectAll": { + "message": "党郚选择" + }, + "selectAnAccount": { + "message": "选择䞀䞪莊户" + }, "selectAnAccountHelp": { - "message": "请通过 MetaMask 选择需芁查看的莊户" + "message": "选择圚 MetaMask 䞭查看的莊户" }, "selectCurrency": { "message": "选择莧垁" }, "selectEachPhrase": { - "message": "请选择每䞀䞪单词以确保单词正确性。" + "message": "请选择每䞪单词以确保其正确性。" }, "selectHdPath": { "message": "选择 HD 路埄" @@ -937,20 +1433,27 @@ "selectType": { "message": "选择类型" }, + "selectingAllWillAllow": { + "message": "选择党郚将允讞本眑站查看悚圓前的所有莊户。确保悚信任这䞪眑站。" + }, "send": { "message": "发送" }, "sendAmount": { - "message": "发送金额" + "message": "发送数额" }, "sendETH": { "message": "发送 ETH" }, + "sendSpecifiedTokens": { + "message": "发送 $1", + "description": "Symbol of the specified token" + }, "sendTokens": { "message": "发送代垁" }, "sentEther": { - "message": "以倪垁已发送" + "message": "发送 Ether" }, "separateEachWord": { "message": "甚空栌分隔每䞪单词" @@ -959,10 +1462,10 @@ "message": "讟眮" }, "showAdvancedGasInline": { - "message": "高级 Gas 控制" + "message": "高级燃料控制" }, "showAdvancedGasInlineDescription": { - "message": "请选择该选项盎接圚发送和确讀页面星瀺 Gas 价栌和限制管理。" + "message": "圚发送和确讀界面星瀺燃料价栌和燃料限制讟眮选项。" }, "showFiatConversionInTestnets": { "message": "圚 Testnets 䞊星瀺兑换率" @@ -976,9 +1479,21 @@ "showHexDataDescription": { "message": "请选择该选项圚发送页面星瀺十六进制数据字域" }, + "showIncomingTransactions": { + "message": "星瀺收到的亀易" + }, + "showIncomingTransactionsDescription": { + "message": "选择该选项可䜿甚 Etherscan以倪坊浏览噚以倪坊浏览噚圚亀易列衚䞭星瀺收到的亀易。" + }, + "showPermissions": { + "message": "星瀺权限" + }, "showPrivateKeys": { "message": "星瀺私钥" }, + "showSeedPhrase": { + "message": "星瀺莊户助记词" + }, "sigRequest": { "message": "请求筟名" }, @@ -986,11 +1501,14 @@ "message": "筟名" }, "signNotice": { - "message": "筟眲歀消息可胜䌚产生危险的副䜜甚。 \n只从䜠完党信任的眑站䞊筟名。 未来的版本将移陀这种危险的方法。" + "message": "筟眲歀消息可胜䌚产生危险的副䜜甚。 \n只从悚完党信任的眑站䞊筟名。 未来的版本将移陀这种危险的方法。" }, "signatureRequest": { "message": "请求筟名" }, + "signatureRequest1": { + "message": "信息" + }, "signed": { "message": "已筟名" }, @@ -998,7 +1516,7 @@ "message": "慢" }, "somethingWentWrong": { - "message": "哎呀出问题了。" + "message": "糟糕出问题了。" }, "speedUp": { "message": "加速" @@ -1009,35 +1527,66 @@ "speedUpTransaction": { "message": "加速该亀易操䜜" }, + "spendLimitAmount": { + "message": "消莹限额数量" + }, + "spendLimitInsufficient": { + "message": "消莹限额䞍足" + }, + "spendLimitInvalid": { + "message": "消莹限制无效必须是正数。" + }, + "spendLimitPermission": { + "message": "消莹限制权限" + }, + "spendLimitRequestedBy": { + "message": "消莹限制申请来自 $1", + "description": "Origin of the site requesting the spend limit" + }, + "spendLimitTooLarge": { + "message": "消莹限制过倧" + }, "stateLogError": { "message": "检玢状态日志时出错。" }, + "stateLogFileName": { + "message": "MetaMask 状态日志" + }, "stateLogs": { "message": "状态日志" }, "stateLogsDescription": { "message": "状态日志包含悚的莊户地址和已发送的亀易。" }, + "statusConnected": { + "message": "已连接" + }, + "statusNotConnected": { + "message": "未连接" + }, "step1HardwareWallet": { "message": "1. 连接硬件钱包" }, "step1HardwareWalletMsg": { - "message": "盎接将悚的硬件钱包䞎䞪人电脑盞连。" + "message": "将悚的硬件钱包盎接连接到电脑䞊。" }, "step2HardwareWallet": { "message": "2. 选择莊户" }, "step2HardwareWalletMsg": { - "message": "请选择悚想查看的莊户。每次仅限选择䞀䞪。" + "message": "请选择悚想查看的莊户。每次只胜选择䞀䞪莊户。" }, "step3HardwareWallet": { - "message": "3. 匀始䜓验 dApps 和曎倚功胜" + "message": "3. 匀始䜿甚 web3 站点和曎倚功胜" }, "step3HardwareWalletMsg": { - "message": "䜿甚悚的硬件钱包操䜜䞎以倪坊莊户制䜜盞同。登圕 dApps发送 ETH 莭买和保存 ERC20 代垁和非同莚化代垁劂 CryptoKitties。" + "message": "䜿甚悚的硬件钱包操䜜䞎以倪坊莊户制䜜盞同。登圕 dApps发送 ETH 莭买和保存 ERC20 代垁和诞劂 CryptoKitties 等䞍可替代代垁。" }, "storePhrase": { - "message": "通过劂 1Password 等密码管家保存该密语。" + "message": "通过劂 1Password 等密码管理工具保存该莊户助记词。" + }, + "submit": { + "message": "提亀" }, "submitted": { "message": "已提亀" @@ -1045,20 +1594,303 @@ "supportCenter": { "message": "访问我们的支持䞭心" }, + "swap": { + "message": "兑换 Swap" + }, + "swapAdvancedSlippageInfo": { + "message": "劂果价栌圚悚䞋单和确讀之闎发生变化这就叫做“滑点”。劂果滑点超过悚的“最倧滑点”讟眮悚的的兑换将自劚取消。" + }, + "swapAggregator": { + "message": "聚合商" + }, + "swapAmountReceived": { + "message": "保证数额" + }, + "swapAmountReceivedInfo": { + "message": "这是悚将收到的最䜎数额。根据滑点倌 悚可胜䌚收到曎倚。" + }, + "swapApproval": { + "message": "批准 $1 的兑换 ", + "description": "Used in the transaction display list to describe a transaction that is an approve call on a token that is to be swapped.. $1 is the symbol of a token that has been approved." + }, + "swapApproveNeedMoreTokens": { + "message": "悚还需 $1 $2 来完成这笔兑换", + "description": "Tells the user how many more of a given token they need for a specific swap. $1 is an amount of tokens and $2 is the token symbol." + }, + "swapBetterQuoteAvailable": { + "message": "有䞀䞪可甚的曎䌘报价" + }, + "swapBuildQuotePlaceHolderText": { + "message": "没有匹配的代垁笊合 $1", + "description": "Tells the user that a given search string does not match any tokens in our token lists. $1 can be any string of text" + }, + "swapCheckingQuote": { + "message": "正圚检查 $1", + "description": "Shown to the user during quote loading. $1 is the name of an aggregator. The message indicates that metamask is currently checking if that aggregator has a trade/quote for their requested swap." + }, + "swapCustom": { + "message": "自定义" + }, + "swapDecentralizedExchange": { + "message": "去䞭心化亀易所" + }, + "swapEditLimit": { + "message": "修改限制" + }, + "swapEnableDescription": { + "message": "这是必须的并䞔允讞 MetaMask 兑换悚的 $1。", + "description": "Gives the user info about the required approval transaction for swaps. $1 will be the symbol of a token being approved for swaps." + }, + "swapEstimatedNetworkFee": { + "message": "预计眑络手续莹" + }, + "swapEstimatedNetworkFeeSummary": { + "message": "“$1”是我们预计的实际产生莹甚。具䜓数额视眑络情况而定。", + "description": "$1 will be the translation of swapEstimatedNetworkFee, with the font bolded" + }, + "swapEstimatedNetworkFees": { + "message": "预计眑络手续莹" + }, + "swapEstimatedNetworkFeesInfo": { + "message": "这是预䌰的甚于完成悚的兑换所䜿甚的眑络手续莹。实际数额可胜䌚根据眑络条件而变化。" + }, + "swapFailedErrorDescription": { + "message": "悚的资金是安党的仍然可以圚悚的钱包䞭䜿甚。" + }, + "swapFailedErrorTitle": { + "message": "兑换倱莥" + }, + "swapFetchingQuotesErrorDescription": { + "message": "呃  出错了。再试䞀次劂果错误仍存圚请联系客户支持。" + }, + "swapFetchingQuotesErrorTitle": { + "message": "获取报价出错" + }, + "swapFetchingTokens": { + "message": "获取代垁䞭  " + }, + "swapFinalizing": { + "message": "确定䞭  " + }, + "swapHighSlippageWarning": { + "message": "滑点数量非垞倧。确保悚知道悚的操䜜" + }, + "swapIntroLearnMoreHeader": { + "message": "想了解曎倚信息" + }, + "swapIntroLearnMoreLink": { + "message": "了解曎倚关于 MetaMask Swap兑换" + }, + "swapIntroLiquiditySourcesLabel": { + "message": "流劚资金来源包括" + }, + "swapIntroPopupSubTitle": { + "message": "现圚悚可以盎接圚 MetaMask 钱包䞭兑换代垁。MetaMask Swaps兑换结合了倚䞪去䞭心化亀易所聚合商、䞓䞚做垂商和䞪人 DEX确保 MetaMask 甚户始终以最䜎的眑络莹甚获埗最䜳价栌。" + }, + "swapIntroPopupTitle": { + "message": "代垁兑换来了" + }, + "swapLearnMoreContractsAuditReview": { + "message": "查看我们的官方合纊审计" + }, + "swapLowSlippageError": { + "message": "亀易可胜倱莥最倧滑点过䜎。" + }, + "swapMaxNetworkFeeInfo": { + "message": "“$1”是悚最倚所话莹的数量圓眑络䞍皳定时这可胜是䞀䞪倧的数额。", + "description": "$1 will be the translation of swapMaxNetworkFees, with the font bolded" + }, + "swapMaxNetworkFees": { + "message": "最倧眑络手续莹" + }, + "swapMaxSlippage": { + "message": "最倧滑点" + }, + "swapMetaMaskFee": { + "message": "MetaMask 手续莹" + }, + "swapMetaMaskFeeDescription": { + "message": "我们每次郜胜从顶级流劚性资源䞭扟到最奜的价栌。每次报价郜䌚自劚收取1%的手续莹甚以支持 MetaMask 的持续发展䜿其曎加完善。", + "description": "Provides information about the fee that metamask takes for swaps. $1 is a decimal number." + }, + "swapNQuotes": { + "message": "$1 䞪报价", + "description": "$1 is the number of quotes that the user can select from when opening the list of quotes on the 'view quote' screen" + }, + "swapNetworkFeeSummary": { + "message": "眑络手续莹包括倄理悚的兑换和圚以倪坊Ethereum眑络䞊存傚的成本。MetaMask 䞍从这笔莹甚䞭获利。" + }, + "swapNewQuoteIn": { + "message": "$1 后曎新报价", + "description": "Tells the user the amount of time until the currently displayed quotes are update. $1 is a time that is counting down from 1:00 to 0:00" + }, + "swapOnceTransactionHasProcess": { + "message": "䞀旊亀易完成悚的 $1 将被添加到悚的莊户䞭。", + "description": "This message communicates the token that is being transferred. It is shown on the awaiting swap screen. The $1 will be a token symbol." + }, + "swapPriceDifference": { + "message": "悚将兑换 $1 $2~$3䞺 $4 $5~$6。", + "description": "This message represents the price slippage for the swap. $1 and $4 are a number (ex: 2.89), $2 and $5 are symbols (ex: ETH), and $3 and $6 are fiat currency amounts." + }, + "swapPriceDifferenceTitle": { + "message": "价栌差匂 ~$1%", + "description": "$1 is a number (ex: 1.23) that represents the price difference." + }, + "swapPriceDifferenceTooltip": { + "message": "垂场价栌的差匂可胜受到䞭介机构收取的莹甚、垂场规暡、亀易规暡或垂场效率䜎䞋的圱响。" + }, + "swapPriceDifferenceUnavailable": { + "message": "垂场价栌䞍可甚。 请确讀悚对退回的数额感到满意后再继续。" + }, + "swapProcessing": { + "message": "倄理䞭" + }, + "swapQuoteDetails": { + "message": "报价诊情" + }, + "swapQuoteDetailsSlippageInfo": { + "message": "劂果圚悚䞋订单和确讀订单之闎的价栌发生了变化这就叫做\"滑点\"。劂果滑点超过悚的\"最倧滑点\"讟眮悚的兑换将自劚取消。" + }, + "swapQuoteIncludesRate": { + "message": "报价包含 $1% MetaMask 手续莹", + "description": "Provides information about the fee that metamask takes for swaps. $1 is a decimal number." + }, + "swapQuoteNofN": { + "message": "报价 $1 / $2", + "description": "A count of loaded quotes shown to the user while they are waiting for quotes to be fetched. $1 is the number of quotes already loaded, and $2 is the total number of quotes to load." + }, + "swapQuoteSource": { + "message": "报价来源" + }, + "swapQuotesAreRefreshed": { + "message": "报价䌚经垞刷新以反映圓前的垂场状况。" + }, + "swapQuotesExpiredErrorDescription": { + "message": "请请求新的报价以获埗最新的价栌。" + }, + "swapQuotesExpiredErrorTitle": { + "message": "报价超时" + }, + "swapQuotesNotAvailableErrorDescription": { + "message": "尝试调敎滑点数量讟眮并再试䞀次。" + }, + "swapQuotesNotAvailableErrorTitle": { + "message": "无可甚报价" + }, + "swapRate": { + "message": "莹率" + }, + "swapReceiving": { + "message": "接收" + }, + "swapReceivingInfoTooltip": { + "message": "这是䞀䞪预䌰数额。确切的数额取决于滑点。" + }, + "swapRequestForQuotation": { + "message": "请求报价" + }, + "swapSearchForAToken": { + "message": "搜玢代垁" + }, + "swapSelect": { + "message": "选择" + }, + "swapSelectAQuote": { + "message": "选择䞀䞪报价" + }, + "swapSelectAToken": { + "message": "选择䞀䞪代垁" + }, + "swapSelectQuotePopoverDescription": { + "message": "以䞋是从倚䞪流劚资金来源收集到的所有报价。" + }, + "swapSlippageTooLow": { + "message": "滑点必须倧于零" + }, + "swapSource": { + "message": "流劚资金来源" + }, + "swapSourceInfo": { + "message": "我们搜玢倚䞪流劚性来源亀易所、聚合商和䞓䞚做垂商以扟到最奜的利率和最䜎的眑络手续莹。" + }, + "swapStartSwapping": { + "message": "匀始兑换" + }, + "swapSwapFrom": { + "message": "兑换自" + }, + "swapSwapSwitch": { + "message": "切换兑换代垁方向" + }, + "swapSwapTo": { + "message": "兑换到" + }, + "swapThisWillAllowApprove": { + "message": "这样将允讞 $1 甚于兑换。" + }, + "swapTokenAvailable": { + "message": "æ‚šçš„ $1 已添加到悚的莊户。", + "description": "This message is shown after a swap is successful and communicates the exact amount of tokens the user has received for a swap. The $1 is a decimal number of tokens followed by the token symbol." + }, + "swapTokenToToken": { + "message": "兑换 $1 到 $2", + "description": "Used in the transaction display list to describe a swap. $1 and $2 are the symbols of tokens in involved in a swap." + }, + "swapTransactionComplete": { + "message": "亀易完成" + }, + "swapUnknown": { + "message": "未知的" + }, + "swapUsingBestQuote": { + "message": "䜿甚最奜的报价" + }, + "swapVerifyTokenExplanation": { + "message": "倚䞪代垁可以䜿甚盞同的名称和笊号。检查 Etherscan以倪坊浏览噚以确讀这是悚正圚寻扟的代垁。" + }, + "swapViewToken": { + "message": "查看 $1" + }, + "swapYourTokenBalance": { + "message": "$1 $2 可甚", + "description": "Tells the user how much of a token they have in their balance. $1 is a decimal number amount of tokens, and $2 is a token symbol" + }, + "swapZeroSlippage": { + "message": "0% 滑点" + }, + "swapsAdvancedOptions": { + "message": "高级选项" + }, + "swapsExcessiveSlippageWarning": { + "message": "滑点数额倪高䌚富臎䞍良率。请将滑点讟眮降䜎到 15% 以䞋。" + }, + "swapsMaxSlippage": { + "message": "最倧滑点" + }, + "swapsNotEnoughForTx": { + "message": "没有足借的 $1 来完成歀亀易", + "description": "Tells the user that they don't have enough of a token for a proposed swap. $1 is a token symbol" + }, + "swapsViewInActivity": { + "message": "圚掻劚䞭查看" + }, "switchNetworks": { "message": "切换眑络" }, + "switchToThisAccount": { + "message": "切换到该莊户" + }, "symbol": { "message": "笊号" }, "symbolBetweenZeroTwelve": { - "message": "笊号䞍埗超过11䞪字笊。" + "message": "笊号䞍埗超过 11 䞪字笊。" }, "syncWithMobile": { - "message": "䜿甚移劚讟倇进行同步" + "message": "䜿甚移劚讟倇同步" }, "syncWithMobileBeCareful": { - "message": "扫描猖码时请确保身蟹无其他人正圚查看悚的星瀺页面" + "message": "扫描这䞪代码时请确保附近没有其他人圚看悚的屏幕。" }, "syncWithMobileComplete": { "message": "悚的数据已同步成功。尜情䜓验 MetaMask 应甚皋序" @@ -1070,134 +1902,183 @@ "message": "劂果悚是銖次启甚 MetaMask 移劚应甚皋序请通过䞪人手机完成劂䞋操䜜。" }, "syncWithMobileScanThisCode": { - "message": "䜿甚 MetaMask 应甚皋序扫描猖码" + "message": "䜿甚 MetaMask 应甚皋序扫描代码" }, "syncWithMobileTitle": { "message": "䜿甚移劚讟倇进行同步" }, + "syncWithThreeBox": { + "message": "䜿甚 3Box 同步数据实验功胜" + }, + "syncWithThreeBoxDescription": { + "message": "匀启后可以甚 3Box 倇仜悚的讟眮。歀功胜目前是实验功胜䜿甚时风险自莟。" + }, + "syncWithThreeBoxDisabled": { + "message": "由于初始同步过皋䞭出现错误3Box 已被犁甚。" + }, "terms": { "message": "䜿甚条欟" }, + "termsOfService": { + "message": "服务条欟" + }, "testFaucet": { "message": "测试氎管" }, "thisWillCreate": { - "message": "该操䜜将䞺悚创建新钱包和种子密语" + "message": "将䞺悚创建新的钱包莊户和莊户助记词" }, "tips": { - "message": "赏金" + "message": "小莎士" }, "to": { "message": "至" }, + "toAddress": { + "message": "至$1", + "description": "$1 is the address to include in the To label. It is typically shortened first using shortenAddress" + }, + "toWithColon": { + "message": "至" + }, "token": { "message": "代垁" }, "tokenAlreadyAdded": { - "message": "代垁已经被添加." + "message": "代垁已添加。" }, "tokenContractAddress": { "message": "代垁合纊地址" }, + "tokenOptions": { + "message": "代垁选项" + }, "tokenSymbol": { "message": "代垁笊号" }, "total": { - "message": "总量" + "message": "总额" }, "transaction": { "message": "亀易" }, "transactionCancelAttempted": { - "message": "圚 $2 尝试取消亀易其 Gas 莹䞺 $1" + "message": "尝试取消亀易 $2燃料莹甚$1。" }, "transactionCancelSuccess": { - "message": "成功圚 $2 取消亀易单" + "message": "取消亀易成功 $2。" }, "transactionConfirmed": { - "message": "亀易已通过 $2 确讀。" + "message": "亀易已确讀 $2。" }, "transactionCreated": { - "message": "圚 $2 生成的亀易单其亀易额䞺 $1 。" + "message": "亀易已创建 $2亀易数额$1。" }, "transactionDropped": { - "message": "圚 $2 终止的亀易单。" + "message": "亀易终止 $2。" }, "transactionError": { - "message": "亀易出错. 合纊代码执行匂垞." + "message": "亀易出错。合纊代码执行匂垞。" }, "transactionErrorNoContract": { - "message": "正圚尝试调甚非联系人地址功胜。" + "message": "试囟圚䞀䞪非合纊地址䞊调甚䞀䞪凜数。" }, "transactionErrored": { - "message": "亀易报错。" + "message": "亀易出现错误。" }, "transactionFee": { "message": "亀易莹" }, "transactionResubmitted": { - "message": "圚 $2 重新提亀的亀易单其 Gas 莹甚增加至 $1" + "message": "重新提亀亀易 $2亀易莹升至$1。" }, "transactionSubmitted": { - "message": "圚 $2 提亀的亀易单其 Gas 莹甚䞺 $1 。" + "message": "亀易已提亀 $2亀易莹$1。" }, "transactionUpdated": { - "message": "亀易单已于 $2 曎新。" + "message": "亀易曎新时闎 $2。" }, "transfer": { "message": "蜬莊" }, "transferBetweenAccounts": { - "message": "圚䞪人莊户闎蜬莊" + "message": "圚我的莊户闎蜬莊" }, "transferFrom": { - "message": "蜬出" + "message": "蜬自" + }, + "troubleConnectingToWallet": { + "message": "我们圚连接悚的 $1 遇到问题尝试检查 $2 并重试。", + "description": "$1 is the wallet device name; $2 is a link to wallet connection guide" }, "troubleTokenBalances": { - "message": "我们无法加蜜悚的代垁䜙额。䜠可以查看它们", + "message": "我们无法加蜜悚的代垁䜙额。悚可以查看它们", "description": "Followed by a link (here) to view token balances" }, + "trustSiteApprovePermission": { + "message": "悚信任这䞪眑站吗授权即衚瀺悚允讞 $1 提取悚的 $2并䞺悚自劚进行亀易。", + "description": "$1 is the url requesting permission and $2 is the symbol of the currency that the request is for" + }, "tryAgain": { "message": "重试" }, "typePassword": { - "message": "蟓入䜠的密码" + "message": "蟓入悚的 MetaMask 密码" }, "unapproved": { "message": "未批准" }, "units": { - "message": "单䜍" + "message": "数量" }, "unknown": { "message": "未知" }, "unknownCameraError": { - "message": "尝试获取盞机䜿甚权限时报错。请重试 " + "message": "尝试获取盞机䜿甚权限时报错。请重试  " }, "unknownCameraErrorTitle": { - "message": "哎呀出问题了 " + "message": "哎呀出问题了  " }, "unknownNetwork": { - "message": "未知私有眑络" + "message": "未知的私有眑络" }, "unknownQrCode": { - "message": "错误我们无法识别该二绎码" + "message": "错误无法识别该二绎码" + }, + "unlimited": { + "message": "无限制" }, "unlock": { "message": "解锁" }, "unlockMessage": { - "message": "分散眑络埅呜䞭" + "message": "即将进入去䞭心化眑络" }, "updatedWithDate": { "message": "已曎新 $1" }, + "urlErrorMsg": { + "message": "URL 需芁盞应的 HTTP/HTTPS 前猀。" + }, + "urlExistsErrorMsg": { + "message": "URL 已经存圚于现有的眑络列衚䞭" + }, + "usePhishingDetection": { + "message": "䜿甚眑络钓鱌检测" + }, + "usePhishingDetectionDescription": { + "message": "星瀺针对 Ethereum 甚户钓鱌域名的譊告。" + }, "usedByClients": { "message": "可甚于各种䞍同的客户端" }, "userName": { - "message": "甚户名" + "message": "名称" + }, + "verifyThisTokenOn": { + "message": "圚 $1 䞊验证歀代垁", + "description": "Points the user to etherscan as a place they can verify information about a token. $1 is replaced with the translation for \"etherscan\"" }, "viewAccount": { "message": "查看莊户" @@ -1209,39 +2090,53 @@ "message": "圚 $1 查看" }, "viewOnEtherscan": { - "message": "圚 Etherscan 䞊查看" + "message": "圚 Etherscan以倪坊浏览噚䞊查看" }, "viewinExplorer": { - "message": "圚管理噚䞭查看" + "message": "圚浏览噚䞭查看" }, "visitWebSite": { "message": "访问我们的眑站" }, + "walletConnectionGuide": { + "message": "我们的硬件钱包连接指南" + }, "walletSeed": { - "message": "钱包助记词" + "message": "莊户助记词" + }, + "web3ShimUsageNotification": { + "message": "我们发现圓前的眑站尝试䜿甚已经删陀的 window.web3 API。劂果这䞪眑站眑站已经无法正垞䜿甚请点击 $1 获取曎倚信息。", + "description": "$1 is a clickable link." }, "welcome": { - "message": "欢迎䜿甚 MetaMask 测试版" + "message": "欢迎䜿甚 MetaMask" }, "welcomeBack": { "message": "欢迎回来" }, + "whatsThis": { + "message": "这是什么" + }, "writePhrase": { - "message": "请将该密语记圕圚纞䞊并保存圚安党的地方。劂果垌望提升信息安党性请将信息记圕圚倚匠纞䞊并分别保存圚 2 - 3 䞪䞍同的地方。" + "message": "请将该莊户助记词记圕圚纞䞊并保存圚安党的地方。劂果垌望提升信息安党性请将信息记圕圚倚匠纞䞊并分别保存圚 2 - 3 䞪䞍同的地方。" + }, + "xOfY": { + "message": "$1 / $2", + "description": "$1 and $2 are intended to be two numbers, where $2 is a total, and $1 is a count towards that total" }, "yesLetsTry": { - "message": "没错。䞍劚䞀试" + "message": "是的尝试䞋" }, "youNeedToAllowCameraAccess": { - "message": "悚需芁匀启盞机访问权限才胜䜿甚该功胜。" + "message": "需芁匀启盞机访问权限才胜䜿甚该功胜。" }, "youSign": { "message": "正圚筟名" }, "yourPrivateSeedPhrase": { - "message": "䜠的私有助记词" + "message": "悚的莊户助记词" }, "zeroGasPriceOnSpeedUpError": { - "message": "Gas 价栌加速䞊涚" + "message": "加速时无燃料价栌" } } diff --git a/app/scripts/background.js b/app/scripts/background.js index 55a8f5a63..ca7c04951 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -32,7 +32,9 @@ import LocalStore from './lib/local-store'; import ReadOnlyNetworkStore from './lib/network-store'; import createStreamSink from './lib/createStreamSink'; import NotificationManager from './lib/notification-manager'; -import MetamaskController from './metamask-controller'; +import MetamaskController, { + METAMASK_CONTROLLER_EVENTS, +} from './metamask-controller'; import rawFirstTimeState from './first-time-state'; import getFirstPreferredLangCode from './lib/get-first-preferred-lang-code'; import getObjStructure from './lib/getObjStructure'; @@ -396,14 +398,35 @@ function setupController(initState, initLangCode) { // updateBadge(); - controller.txController.on('update:badge', updateBadge); - controller.messageManager.on('updateBadge', updateBadge); - controller.personalMessageManager.on('updateBadge', updateBadge); - controller.decryptMessageManager.on('updateBadge', updateBadge); - controller.encryptionPublicKeyManager.on('updateBadge', updateBadge); - controller.typedMessageManager.on('updateBadge', updateBadge); + controller.txController.on( + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + updateBadge, + ); + controller.messageManager.on( + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + updateBadge, + ); + controller.personalMessageManager.on( + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + updateBadge, + ); + controller.decryptMessageManager.on( + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + updateBadge, + ); + controller.encryptionPublicKeyManager.on( + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + updateBadge, + ); + controller.typedMessageManager.on( + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + updateBadge, + ); controller.approvalController.subscribe(updateBadge); - controller.appStateController.on('updateBadge', updateBadge); + controller.appStateController.on( + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + updateBadge, + ); /** * Updates the Web Extension's "badge" number, on the little fox in the toolbar. diff --git a/app/scripts/controllers/app-state.js b/app/scripts/controllers/app-state.js index 0bf791821..73173bf68 100644 --- a/app/scripts/controllers/app-state.js +++ b/app/scripts/controllers/app-state.js @@ -1,5 +1,6 @@ import EventEmitter from 'events'; import { ObservableStore } from '@metamask/obs-store'; +import { METAMASK_CONTROLLER_EVENTS } from '../metamask-controller'; export default class AppStateController extends EventEmitter { /** @@ -74,7 +75,7 @@ export default class AppStateController extends EventEmitter { */ waitForUnlock(resolve, shouldShowUnlockRequest) { this.waitingForUnlock.push({ resolve }); - this.emit('updateBadge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); if (shouldShowUnlockRequest) { this._showUnlockRequest(); } @@ -88,7 +89,7 @@ export default class AppStateController extends EventEmitter { while (this.waitingForUnlock.length > 0) { this.waitingForUnlock.shift().resolve(); } - this.emit('updateBadge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); } } diff --git a/app/scripts/controllers/incoming-transactions.js b/app/scripts/controllers/incoming-transactions.js index 481810ec1..471a41872 100644 --- a/app/scripts/controllers/incoming-transactions.js +++ b/app/scripts/controllers/incoming-transactions.js @@ -23,6 +23,7 @@ import { ROPSTEN, ROPSTEN_CHAIN_ID, } from '../../../shared/constants/network'; +import { NETWORK_EVENTS } from './network'; const fetchWithTimeout = getFetchWithTimeout(30000); @@ -111,7 +112,7 @@ export default class IncomingTransactionsController { }), ); - this.networkController.on('networkDidChange', async () => { + this.networkController.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, async () => { const address = this.preferencesController.getSelectedAddress(); await this._update({ address, diff --git a/app/scripts/controllers/network/index.js b/app/scripts/controllers/network/index.js index a0a43faa5..fa027c5ab 100644 --- a/app/scripts/controllers/network/index.js +++ b/app/scripts/controllers/network/index.js @@ -1 +1 @@ -export { default } from './network'; +export { default, NETWORK_EVENTS } from './network'; diff --git a/app/scripts/controllers/network/network.js b/app/scripts/controllers/network/network.js index 605b0063a..7315e060d 100644 --- a/app/scripts/controllers/network/network.js +++ b/app/scripts/controllers/network/network.js @@ -47,6 +47,13 @@ const defaultProviderConfig = { ...defaultProviderConfigOpts, }; +export const NETWORK_EVENTS = { + // Fired after the actively selected network is changed + NETWORK_DID_CHANGE: 'networkDidChange', + // Fired when the actively selected network *will* change + NETWORK_WILL_CHANGE: 'networkWillChange', +}; + export default class NetworkController extends EventEmitter { constructor(opts = {}) { super(); @@ -73,7 +80,7 @@ export default class NetworkController extends EventEmitter { this._providerProxy = null; this._blockTrackerProxy = null; - this.on('networkDidChange', this.lookupNetwork); + this.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, this.lookupNetwork); } /** @@ -229,9 +236,10 @@ export default class NetworkController extends EventEmitter { // _switchNetwork(opts) { + this.emit(NETWORK_EVENTS.NETWORK_WILL_CHANGE); this.setNetworkState('loading'); this._configureProvider(opts); - this.emit('networkDidChange', opts.type); + this.emit(NETWORK_EVENTS.NETWORK_DID_CHANGE, opts.type); } _configureProvider({ type, rpcUrl, chainId }) { diff --git a/app/scripts/controllers/swaps.js b/app/scripts/controllers/swaps.js index 992af5578..d82ac305f 100644 --- a/app/scripts/controllers/swaps.js +++ b/app/scripts/controllers/swaps.js @@ -19,6 +19,7 @@ import { fetchSwapsFeatureLiveness as defaultFetchSwapsFeatureLiveness, fetchSwapsQuoteRefreshTime as defaultFetchSwapsQuoteRefreshTime, } from '../../../ui/app/pages/swaps/swaps.util'; +import { NETWORK_EVENTS } from './network'; const METASWAP_ADDRESS = '0x881d40237659c251811cec9c364ef91dc08d300c'; @@ -103,7 +104,7 @@ export default class SwapsController { this.ethersProvider = new ethers.providers.Web3Provider(provider); this._currentNetwork = networkController.store.getState().network; - networkController.on('networkDidChange', (network) => { + networkController.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, (network) => { if (network !== 'loading' && network !== this._currentNetwork) { this._currentNetwork = network; this.ethersProvider = new ethers.providers.Web3Provider(provider); diff --git a/app/scripts/controllers/transactions/index.js b/app/scripts/controllers/transactions/index.js index 36864c509..093c3badb 100644 --- a/app/scripts/controllers/transactions/index.js +++ b/app/scripts/controllers/transactions/index.js @@ -23,6 +23,7 @@ import { TRANSACTION_STATUSES, TRANSACTION_TYPES, } from '../../../../shared/constants/transaction'; +import { METAMASK_CONTROLLER_EVENTS } from '../../metamask-controller'; import TransactionStateManager from './tx-state-manager'; import TxGasUtil from './tx-gas-utils'; import PendingTransactionTracker from './pending-tx-tracker'; @@ -113,7 +114,9 @@ export default class TransactionController extends EventEmitter { ), }); - this.txStateManager.store.subscribe(() => this.emit('update:badge')); + this.txStateManager.store.subscribe(() => + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE), + ); this._setupListeners(); // memstore is computed from a few different stores this._updateMemstore(); diff --git a/app/scripts/controllers/transactions/tx-state-manager.js b/app/scripts/controllers/transactions/tx-state-manager.js index 492ea4dde..ffa49e2bc 100644 --- a/app/scripts/controllers/transactions/tx-state-manager.js +++ b/app/scripts/controllers/transactions/tx-state-manager.js @@ -3,6 +3,7 @@ import { ObservableStore } from '@metamask/obs-store'; import log from 'loglevel'; import createId from '../../lib/random-id'; import { TRANSACTION_STATUSES } from '../../../../shared/constants/transaction'; +import { METAMASK_CONTROLLER_EVENTS } from '../../metamask-controller'; import { generateHistoryEntry, replayHistory, @@ -474,7 +475,7 @@ export default class TransactionStateManager extends EventEmitter { * @param {TransactionStatuses[keyof TransactionStatuses]} status - the status to set on the txMeta * @emits tx:status-update - passes txId and status * @emits ${txMeta.id}:finished - if it is a finished state. Passes the txMeta - * @emits update:badge + * @emits 'updateBadge' */ _setTxStatus(txId, status) { const txMeta = this.getTx(txId); @@ -497,7 +498,7 @@ export default class TransactionStateManager extends EventEmitter { ) { this.emit(`${txMeta.id}:finished`, txMeta); } - this.emit('update:badge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); } catch (error) { log.error(error); } diff --git a/app/scripts/lib/decrypt-message-manager.js b/app/scripts/lib/decrypt-message-manager.js index 39f2a0e42..32ae13626 100644 --- a/app/scripts/lib/decrypt-message-manager.js +++ b/app/scripts/lib/decrypt-message-manager.js @@ -4,6 +4,7 @@ import ethUtil from 'ethereumjs-util'; import { ethErrors } from 'eth-rpc-errors'; import log from 'loglevel'; import { MESSAGE_TYPE } from '../../../shared/constants/app'; +import { METAMASK_CONTROLLER_EVENTS } from '../metamask-controller'; import { addHexPrefix } from './util'; import createId from './random-id'; @@ -253,6 +254,14 @@ export default class DecryptMessageManager extends EventEmitter { this._setMsgStatus(msgId, 'errored'); } + /** + * Clears all unapproved messages from memory. + */ + clearUnapproved() { + this.messages = this.messages.filter((msg) => msg.status !== 'unapproved'); + this._saveMsgList(); + } + /** * Updates the status of a DecryptMessage in this.messages via a call to this._updateMsg * @@ -316,7 +325,7 @@ export default class DecryptMessageManager extends EventEmitter { unapprovedDecryptMsgs, unapprovedDecryptMsgCount, }); - this.emit('updateBadge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); } /** diff --git a/app/scripts/lib/encryption-public-key-manager.js b/app/scripts/lib/encryption-public-key-manager.js index 6fc213b19..e29723b5b 100644 --- a/app/scripts/lib/encryption-public-key-manager.js +++ b/app/scripts/lib/encryption-public-key-manager.js @@ -3,6 +3,7 @@ import { ObservableStore } from '@metamask/obs-store'; import { ethErrors } from 'eth-rpc-errors'; import log from 'loglevel'; import { MESSAGE_TYPE } from '../../../shared/constants/app'; +import { METAMASK_CONTROLLER_EVENTS } from '../metamask-controller'; import createId from './random-id'; /** @@ -242,6 +243,14 @@ export default class EncryptionPublicKeyManager extends EventEmitter { this._setMsgStatus(msgId, 'errored'); } + /** + * Clears all unapproved messages from memory. + */ + clearUnapproved() { + this.messages = this.messages.filter((msg) => msg.status !== 'unapproved'); + this._saveMsgList(); + } + /** * Updates the status of a EncryptionPublicKey in this.messages via a call to this._updateMsg * @@ -303,6 +312,6 @@ export default class EncryptionPublicKeyManager extends EventEmitter { unapprovedEncryptionPublicKeyMsgs, unapprovedEncryptionPublicKeyMsgCount, }); - this.emit('updateBadge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); } } diff --git a/app/scripts/lib/message-manager.js b/app/scripts/lib/message-manager.js index 796971208..7f4218f8b 100644 --- a/app/scripts/lib/message-manager.js +++ b/app/scripts/lib/message-manager.js @@ -3,6 +3,7 @@ import { ObservableStore } from '@metamask/obs-store'; import ethUtil from 'ethereumjs-util'; import { ethErrors } from 'eth-rpc-errors'; import { MESSAGE_TYPE } from '../../../shared/constants/app'; +import { METAMASK_CONTROLLER_EVENTS } from '../metamask-controller'; import createId from './random-id'; /** @@ -220,6 +221,14 @@ export default class MessageManager extends EventEmitter { this._setMsgStatus(msgId, 'rejected'); } + /** + * Clears all unapproved messages from memory. + */ + clearUnapproved() { + this.messages = this.messages.filter((msg) => msg.status !== 'unapproved'); + this._saveMsgList(); + } + /** * Updates the status of a Message in this.messages via a call to this._updateMsg * @@ -272,7 +281,7 @@ export default class MessageManager extends EventEmitter { const unapprovedMsgs = this.getUnapprovedMsgs(); const unapprovedMsgCount = Object.keys(unapprovedMsgs).length; this.memStore.updateState({ unapprovedMsgs, unapprovedMsgCount }); - this.emit('updateBadge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); } } diff --git a/app/scripts/lib/personal-message-manager.js b/app/scripts/lib/personal-message-manager.js index 66474c8c4..1fb59144b 100644 --- a/app/scripts/lib/personal-message-manager.js +++ b/app/scripts/lib/personal-message-manager.js @@ -4,6 +4,7 @@ import ethUtil from 'ethereumjs-util'; import { ethErrors } from 'eth-rpc-errors'; import log from 'loglevel'; import { MESSAGE_TYPE } from '../../../shared/constants/app'; +import { METAMASK_CONTROLLER_EVENTS } from '../metamask-controller'; import { addHexPrefix } from './util'; import createId from './random-id'; @@ -241,6 +242,14 @@ export default class PersonalMessageManager extends EventEmitter { this._setMsgStatus(msgId, 'rejected'); } + /** + * Clears all unapproved messages from memory. + */ + clearUnapproved() { + this.messages = this.messages.filter((msg) => msg.status !== 'unapproved'); + this._saveMsgList(); + } + /** * Updates the status of a PersonalMessage in this.messages via a call to this._updateMsg * @@ -301,7 +310,7 @@ export default class PersonalMessageManager extends EventEmitter { unapprovedPersonalMsgs, unapprovedPersonalMsgCount, }); - this.emit('updateBadge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); } /** diff --git a/app/scripts/lib/typed-message-manager.js b/app/scripts/lib/typed-message-manager.js index 630e6029c..d1ea6491b 100644 --- a/app/scripts/lib/typed-message-manager.js +++ b/app/scripts/lib/typed-message-manager.js @@ -7,6 +7,7 @@ import { isValidAddress } from 'ethereumjs-util'; import log from 'loglevel'; import jsonschema from 'jsonschema'; import { MESSAGE_TYPE } from '../../../shared/constants/app'; +import { METAMASK_CONTROLLER_EVENTS } from '../metamask-controller'; import createId from './random-id'; /** @@ -313,6 +314,14 @@ export default class TypedMessageManager extends EventEmitter { this._setMsgStatus(msgId, 'errored'); } + /** + * Clears all unapproved messages from memory. + */ + clearUnapproved() { + this.messages = this.messages.filter((msg) => msg.status !== 'unapproved'); + this._saveMsgList(); + } + // // PRIVATE METHODS // @@ -377,6 +386,6 @@ export default class TypedMessageManager extends EventEmitter { unapprovedTypedMessages, unapprovedTypedMessagesCount, }); - this.emit('updateBadge'); + this.emit(METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE); } } diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 2eff30355..93404fd39 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -35,7 +35,7 @@ import createTabIdMiddleware from './lib/createTabIdMiddleware'; import createOnboardingMiddleware from './lib/createOnboardingMiddleware'; import { setupMultiplex } from './lib/stream-utils'; import EnsController from './controllers/ens'; -import NetworkController from './controllers/network'; +import NetworkController, { NETWORK_EVENTS } from './controllers/network'; import PreferencesController from './controllers/preferences'; import AppStateController from './controllers/app-state'; import CachedBalancesController from './controllers/cached-balances'; @@ -61,6 +61,12 @@ import seedPhraseVerifier from './lib/seed-phrase-verifier'; import MetaMetricsController from './controllers/metametrics'; import { segment, segmentLegacy } from './lib/segment'; +export const METAMASK_CONTROLLER_EVENTS = { + // Fired after state changes that impact the extension badge (unapproved msg count) + // The process of updating the badge happens in app/scripts/background.js. + UPDATE_BADGE: 'updateBadge', +}; + export default class MetamaskController extends EventEmitter { /** * @constructor @@ -127,7 +133,7 @@ export default class MetamaskController extends EventEmitter { preferencesStore: this.preferencesController.store, onNetworkDidChange: this.networkController.on.bind( this.networkController, - 'networkDidChange', + NETWORK_EVENTS.NETWORK_DID_CHANGE, ), getNetworkIdentifier: this.networkController.getNetworkIdentifier.bind( this.networkController, @@ -214,11 +220,6 @@ export default class MetamaskController extends EventEmitter { preferencesController: this.preferencesController, }); - // ensure accountTracker updates balances after network change - this.networkController.on('networkDidChange', () => { - this.accountTracker._updateAccounts(); - }); - const additionalKeyrings = [TrezorKeyring, LedgerBridgeKeyring]; this.keyringController = new KeyringController({ keyringTypes: additionalKeyrings, @@ -323,7 +324,7 @@ export default class MetamaskController extends EventEmitter { } }); - this.networkController.on('networkDidChange', () => { + this.networkController.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, () => { this.setCurrentCurrency( this.currencyRateController.state.currentCurrency, (error) => { @@ -357,6 +358,21 @@ export default class MetamaskController extends EventEmitter { tokenRatesStore: this.tokenRatesController.store, }); + // ensure accountTracker updates balances after network change + this.networkController.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, () => { + this.accountTracker._updateAccounts(); + }); + + // clear unapproved transactions and messages when the network will change + this.networkController.on(NETWORK_EVENTS.NETWORK_WILL_CHANGE, () => { + this.txController.txStateManager.clearUnapprovedTxs(); + this.encryptionPublicKeyManager.clearUnapproved(); + this.personalMessageManager.clearUnapproved(); + this.typedMessageManager.clearUnapproved(); + this.decryptMessageManager.clearUnapproved(); + this.messageManager.clearUnapproved(); + }); + // ensure isClientOpenAndUnlocked is updated when memState updates this.on('update', (memState) => this._onStateUpdate(memState)); diff --git a/package.json b/package.json index 08dbb9fb9..4e3fc9343 100644 --- a/package.json +++ b/package.json @@ -197,13 +197,13 @@ "@metamask/forwarder": "^1.1.0", "@metamask/test-dapp": "^4.0.1", "@sentry/cli": "^1.58.0", - "@storybook/addon-actions": "^6.1.9", - "@storybook/addon-backgrounds": "^6.1.9", - "@storybook/addon-knobs": "^6.1.9", + "@storybook/addon-actions": "^6.1.17", + "@storybook/addon-backgrounds": "^6.1.17", + "@storybook/addon-knobs": "^6.1.17", "@storybook/addon-toolbars": "^6.1.17", - "@storybook/core": "^6.1.9", - "@storybook/react": "^6.1.9", - "@storybook/storybook-deployer": "^2.8.6", + "@storybook/core": "^6.1.17", + "@storybook/react": "^6.1.17", + "@storybook/storybook-deployer": "^2.8.7", "@testing-library/react": "^10.4.8", "@testing-library/react-hooks": "^3.2.1", "@types/react": "^16.9.53", @@ -308,6 +308,8 @@ "chromedriver": true, "geckodriver": true, "@sentry/cli": true, + "electron": true, + "sqlite3": true, "core-js": false, "core-js-pure": false, "keccak": false, @@ -316,10 +318,8 @@ "sha3": false, "bufferutil": false, "utf-8-validate": false, - "electron": false, "ejs": false, "sc-uws": false, - "sqlite3": false, "leveldown": false, "ursa-optional": false, "gc-stats": false, diff --git a/test/unit/app/controllers/incoming-transactions-test.js b/test/unit/app/controllers/incoming-transactions-test.js index 86e629609..d0f3d3e3b 100644 --- a/test/unit/app/controllers/incoming-transactions-test.js +++ b/test/unit/app/controllers/incoming-transactions-test.js @@ -19,6 +19,7 @@ import { TRANSACTION_CATEGORIES, TRANSACTION_STATUSES, } from '../../../../shared/constants/transaction'; +import { NETWORK_EVENTS } from '../../../../app/scripts/controllers/network'; const IncomingTransactionsController = proxyquire( '../../../../app/scripts/controllers/incoming-transactions', @@ -161,7 +162,7 @@ describe('IncomingTransactionsController', function () { assert(incomingTransactionsController.networkController.on.calledOnce); assert.equal( incomingTransactionsController.networkController.on.getCall(0).args[0], - 'networkDidChange', + NETWORK_EVENTS.NETWORK_DID_CHANGE, ); const networkControllerListenerCallback = incomingTransactionsController.networkController.on.getCall( 0, diff --git a/test/unit/app/controllers/metametrics-test.js b/test/unit/app/controllers/metametrics-test.js index 8f2de0c02..839b323c4 100644 --- a/test/unit/app/controllers/metametrics-test.js +++ b/test/unit/app/controllers/metametrics-test.js @@ -8,6 +8,7 @@ import { METAMETRICS_BACKGROUND_PAGE_OBJECT, } from '../../../../shared/constants/metametrics'; import waitUntilCalled from '../../../lib/wait-until-called'; +import { NETWORK_EVENTS } from '../../../../app/scripts/controllers/network'; const segment = createSegmentMock(2, 10000); const segmentLegacy = createSegmentMock(2, 10000); @@ -49,7 +50,7 @@ function getMockNetworkController( provider = { type: NETWORK }, ) { let networkStore = { chainId, provider }; - const on = sinon.stub().withArgs('networkDidChange'); + const on = sinon.stub().withArgs(NETWORK_EVENTS.NETWORK_DID_CHANGE); const updateState = (newState) => { networkStore = { ...networkStore, ...newState }; on.getCall(0).args[1](); @@ -99,7 +100,7 @@ function getMetaMetricsController({ ), onNetworkDidChange: networkController.on.bind( networkController, - 'networkDidChange', + NETWORK_EVENTS.NETWORK_DID_CHANGE, ), preferencesStore, version: '0.0.1', diff --git a/test/unit/app/controllers/swaps-test.js b/test/unit/app/controllers/swaps-test.js index 5bd1c8529..299f99229 100644 --- a/test/unit/app/controllers/swaps-test.js +++ b/test/unit/app/controllers/swaps-test.js @@ -14,6 +14,7 @@ import { createTestProviderTools } from '../../../stub/provider'; import SwapsController, { utils, } from '../../../../app/scripts/controllers/swaps'; +import { NETWORK_EVENTS } from '../../../../app/scripts/controllers/network'; const MOCK_FETCH_PARAMS = { slippage: 3, @@ -101,7 +102,10 @@ function getMockNetworkController() { }; }, }, - on: sinon.stub().withArgs('networkDidChange').callsArgAsync(1), + on: sinon + .stub() + .withArgs(NETWORK_EVENTS.NETWORK_DID_CHANGE) + .callsArgAsync(1), }; } diff --git a/test/unit/app/controllers/transactions/tx-controller-test.js b/test/unit/app/controllers/transactions/tx-controller-test.js index ca7bfede6..ed84b3bcc 100644 --- a/test/unit/app/controllers/transactions/tx-controller-test.js +++ b/test/unit/app/controllers/transactions/tx-controller-test.js @@ -15,6 +15,7 @@ import { TRANSACTION_STATUSES, TRANSACTION_TYPES, } from '../../../../../shared/constants/transaction'; +import { METAMASK_CONTROLLER_EVENTS } from '../../../../../app/scripts/metamask-controller'; const noop = () => true; const currentNetworkId = '42'; @@ -395,7 +396,10 @@ describe('Transaction Controller', function () { txParams: {}, }; - const eventNames = ['update:badge', '1:unapproved']; + const eventNames = [ + METAMASK_CONTROLLER_EVENTS.UPDATE_BADGE, + '1:unapproved', + ]; const listeners = []; eventNames.forEach((eventName) => { listeners.push( diff --git a/ui/app/components/app/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js b/ui/app/components/app/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js index ac355d656..8dc7c86ab 100644 --- a/ui/app/components/app/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js +++ b/ui/app/components/app/gas-customization/gas-modal-page-container/tests/gas-modal-page-container-container.test.js @@ -19,10 +19,6 @@ const gasActionSpies = { resetCustomData: sinon.spy(), }; -const confirmTransactionActionSpies = { - updateGasAndCalculate: sinon.spy(), -}; - const sendActionSpies = { hideGasButtonGroup: sinon.spy(), }; @@ -48,7 +44,6 @@ proxyquire('../gas-modal-page-container.container.js', { }, '../../../../store/actions': actionSpies, '../../../../ducks/gas/gas.duck': gasActionSpies, - '../../../../ducks/confirm-transaction/confirm-transaction.duck': confirmTransactionActionSpies, '../../../../ducks/send/send.duck': sendActionSpies, }); diff --git a/ui/app/components/app/signature-request/signature-request-header/index.scss b/ui/app/components/app/signature-request/signature-request-header/index.scss index b4f3b5479..beaa5a92c 100644 --- a/ui/app/components/app/signature-request/signature-request-header/index.scss +++ b/ui/app/components/app/signature-request/signature-request-header/index.scss @@ -9,12 +9,11 @@ &--account, &--network { flex: 1; - } - - &--account { display: flex; align-items: center; + } + &--account { .account-list-item { &__top-row { display: flex; diff --git a/ui/app/components/app/signature-request/signature-request.stories.js b/ui/app/components/app/signature-request/signature-request.stories.js new file mode 100644 index 000000000..fd121cc86 --- /dev/null +++ b/ui/app/components/app/signature-request/signature-request.stories.js @@ -0,0 +1,37 @@ +import React from 'react'; +import testData from '../../../../../.storybook/test-data'; +import SignatureRequest from './signature-request.component'; + +const primaryIdentity = Object.values(testData.metamask.identities)[0]; + +const containerStyle = { + width: '357px', +}; + +export default { + title: 'Signature Request', +}; + +export const FirstLook = () => { + return ( +
+ +
+ ); +}; diff --git a/ui/app/ducks/confirm-transaction/confirm-transaction.duck.js b/ui/app/ducks/confirm-transaction/confirm-transaction.duck.js index a89eeae36..a59785c7a 100644 --- a/ui/app/ducks/confirm-transaction/confirm-transaction.duck.js +++ b/ui/app/ducks/confirm-transaction/confirm-transaction.duck.js @@ -1,4 +1,3 @@ -import { addHexPrefix } from '../../../../app/scripts/lib/util'; import { conversionRateSelector, currentCurrencySelector, @@ -24,32 +23,19 @@ import { conversionUtil } from '../../helpers/utils/conversion-util'; const createActionType = (action) => `metamask/confirm-transaction/${action}`; const UPDATE_TX_DATA = createActionType('UPDATE_TX_DATA'); -const CLEAR_TX_DATA = createActionType('CLEAR_TX_DATA'); const UPDATE_TOKEN_DATA = createActionType('UPDATE_TOKEN_DATA'); -const CLEAR_TOKEN_DATA = createActionType('CLEAR_TOKEN_DATA'); -const UPDATE_METHOD_DATA = createActionType('UPDATE_METHOD_DATA'); -const CLEAR_METHOD_DATA = createActionType('CLEAR_METHOD_DATA'); const CLEAR_CONFIRM_TRANSACTION = createActionType('CLEAR_CONFIRM_TRANSACTION'); const UPDATE_TRANSACTION_AMOUNTS = createActionType( 'UPDATE_TRANSACTION_AMOUNTS', ); const UPDATE_TRANSACTION_FEES = createActionType('UPDATE_TRANSACTION_FEES'); const UPDATE_TRANSACTION_TOTALS = createActionType('UPDATE_TRANSACTION_TOTALS'); -const UPDATE_TOKEN_PROPS = createActionType('UPDATE_TOKEN_PROPS'); const UPDATE_NONCE = createActionType('UPDATE_NONCE'); -const UPDATE_TO_SMART_CONTRACT = createActionType('UPDATE_TO_SMART_CONTRACT'); -const FETCH_DATA_START = createActionType('FETCH_DATA_START'); -const FETCH_DATA_END = createActionType('FETCH_DATA_END'); // Initial state const initState = { txData: {}, tokenData: {}, - methodData: {}, - tokenProps: { - tokenDecimals: '', - tokenSymbol: '', - }, fiatTransactionAmount: '', fiatTransactionFee: '', fiatTransactionTotal: '', @@ -60,8 +46,6 @@ const initState = { hexTransactionFee: '', hexTransactionTotal: '', nonce: '', - toSmartContract: false, - fetchingData: false, }; // Reducer @@ -74,11 +58,6 @@ export default function reducer(state = initState, action = {}) { ...action.payload, }, }; - case CLEAR_TX_DATA: - return { - ...state, - txData: {}, - }; case UPDATE_TOKEN_DATA: return { ...state, @@ -86,23 +65,6 @@ export default function reducer(state = initState, action = {}) { ...action.payload, }, }; - case CLEAR_TOKEN_DATA: - return { - ...state, - tokenData: {}, - }; - case UPDATE_METHOD_DATA: - return { - ...state, - methodData: { - ...action.payload, - }, - }; - case CLEAR_METHOD_DATA: - return { - ...state, - methodData: {}, - }; case UPDATE_TRANSACTION_AMOUNTS: { const { fiatTransactionAmount, @@ -146,37 +108,11 @@ export default function reducer(state = initState, action = {}) { hexTransactionTotal: hexTransactionTotal || state.hexTransactionTotal, }; } - case UPDATE_TOKEN_PROPS: { - const { tokenSymbol = '', tokenDecimals = '' } = action.payload; - return { - ...state, - tokenProps: { - ...state.tokenProps, - tokenSymbol, - tokenDecimals, - }, - }; - } case UPDATE_NONCE: return { ...state, nonce: action.payload, }; - case UPDATE_TO_SMART_CONTRACT: - return { - ...state, - toSmartContract: action.payload, - }; - case FETCH_DATA_START: - return { - ...state, - fetchingData: true, - }; - case FETCH_DATA_END: - return { - ...state, - fetchingData: false, - }; case CLEAR_CONFIRM_TRANSACTION: return initState; default: @@ -192,12 +128,6 @@ export function updateTxData(txData) { }; } -export function clearTxData() { - return { - type: CLEAR_TX_DATA, - }; -} - export function updateTokenData(tokenData) { return { type: UPDATE_TOKEN_DATA, @@ -205,25 +135,6 @@ export function updateTokenData(tokenData) { }; } -export function clearTokenData() { - return { - type: CLEAR_TOKEN_DATA, - }; -} - -export function updateMethodData(methodData) { - return { - type: UPDATE_METHOD_DATA, - payload: methodData, - }; -} - -export function clearMethodData() { - return { - type: CLEAR_METHOD_DATA, - }; -} - export function updateTransactionAmounts(amounts) { return { type: UPDATE_TRANSACTION_AMOUNTS, @@ -245,13 +156,6 @@ export function updateTransactionTotals(totals) { }; } -export function updateTokenProps(tokenProps) { - return { - type: UPDATE_TOKEN_PROPS, - payload: tokenProps, - }; -} - export function updateNonce(nonce) { return { type: UPDATE_NONCE, @@ -259,37 +163,6 @@ export function updateNonce(nonce) { }; } -export function updateToSmartContract(toSmartContract) { - return { - type: UPDATE_TO_SMART_CONTRACT, - payload: toSmartContract, - }; -} - -export function setFetchingData(isFetching) { - return { - type: isFetching ? FETCH_DATA_START : FETCH_DATA_END, - }; -} - -export function updateGasAndCalculate({ gasLimit, gasPrice }) { - return (dispatch, getState) => { - const { - confirmTransaction: { txData }, - } = getState(); - const newTxData = { - ...txData, - txParams: { - ...txData.txParams, - gas: addHexPrefix(gasLimit), - gasPrice: addHexPrefix(gasPrice), - }, - }; - - dispatch(updateTxDataAndCalculate(newTxData)); - }; -} - function increaseFromLastGasPrice(txData) { const { lastGasPrice, diff --git a/ui/app/ducks/confirm-transaction/confirm-transaction.duck.test.js b/ui/app/ducks/confirm-transaction/confirm-transaction.duck.test.js index 6f512a703..e67faa52d 100644 --- a/ui/app/ducks/confirm-transaction/confirm-transaction.duck.test.js +++ b/ui/app/ducks/confirm-transaction/confirm-transaction.duck.test.js @@ -2,21 +2,13 @@ import assert from 'assert'; import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; import sinon from 'sinon'; -import { - TRANSACTION_CATEGORIES, - TRANSACTION_STATUSES, -} from '../../../../shared/constants/transaction'; +import { TRANSACTION_STATUSES } from '../../../../shared/constants/transaction'; import ConfirmTransactionReducer, * as actions from './confirm-transaction.duck'; const initialState = { txData: {}, tokenData: {}, - methodData: {}, - tokenProps: { - tokenDecimals: '', - tokenSymbol: '', - }, fiatTransactionAmount: '', fiatTransactionFee: '', fiatTransactionTotal: '', @@ -27,28 +19,17 @@ const initialState = { hexTransactionFee: '', hexTransactionTotal: '', nonce: '', - toSmartContract: false, - fetchingData: false, }; const UPDATE_TX_DATA = 'metamask/confirm-transaction/UPDATE_TX_DATA'; -const CLEAR_TX_DATA = 'metamask/confirm-transaction/CLEAR_TX_DATA'; const UPDATE_TOKEN_DATA = 'metamask/confirm-transaction/UPDATE_TOKEN_DATA'; -const CLEAR_TOKEN_DATA = 'metamask/confirm-transaction/CLEAR_TOKEN_DATA'; -const UPDATE_METHOD_DATA = 'metamask/confirm-transaction/UPDATE_METHOD_DATA'; -const CLEAR_METHOD_DATA = 'metamask/confirm-transaction/CLEAR_METHOD_DATA'; const UPDATE_TRANSACTION_AMOUNTS = 'metamask/confirm-transaction/UPDATE_TRANSACTION_AMOUNTS'; const UPDATE_TRANSACTION_FEES = 'metamask/confirm-transaction/UPDATE_TRANSACTION_FEES'; const UPDATE_TRANSACTION_TOTALS = 'metamask/confirm-transaction/UPDATE_TRANSACTION_TOTALS'; -const UPDATE_TOKEN_PROPS = 'metamask/confirm-transaction/UPDATE_TOKEN_PROPS'; const UPDATE_NONCE = 'metamask/confirm-transaction/UPDATE_NONCE'; -const UPDATE_TO_SMART_CONTRACT = - 'metamask/confirm-transaction/UPDATE_TO_SMART_CONTRACT'; -const FETCH_DATA_START = 'metamask/confirm-transaction/FETCH_DATA_START'; -const FETCH_DATA_END = 'metamask/confirm-transaction/FETCH_DATA_END'; const CLEAR_CONFIRM_TRANSACTION = 'metamask/confirm-transaction/CLEAR_CONFIRM_TRANSACTION'; @@ -61,13 +42,6 @@ describe('Confirm Transaction Duck', function () { tokenData: { name: 'abcToken', }, - methodData: { - name: TRANSACTION_CATEGORIES.TOKEN_METHOD_APPROVE, - }, - tokenProps: { - tokenDecimals: '3', - tokenSymbol: 'ABC', - }, fiatTransactionAmount: '469.26', fiatTransactionFee: '0.01', fiatTransactionTotal: '1.000021', @@ -78,8 +52,6 @@ describe('Confirm Transaction Duck', function () { hexTransactionFee: '0x1319718a5000', hexTransactionTotal: '', nonce: '0x0', - toSmartContract: false, - fetchingData: false, }; it('should initialize state', function () { @@ -117,18 +89,6 @@ describe('Confirm Transaction Duck', function () { ); }); - it('should clear txData when receiving a CLEAR_TX_DATA action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer(mockState, { - type: CLEAR_TX_DATA, - }), - { - ...mockState, - txData: {}, - }, - ); - }); - it('should set tokenData when receiving a UPDATE_TOKEN_DATA action', function () { assert.deepStrictEqual( ConfirmTransactionReducer(mockState, { @@ -147,48 +107,6 @@ describe('Confirm Transaction Duck', function () { ); }); - it('should clear tokenData when receiving a CLEAR_TOKEN_DATA action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer(mockState, { - type: CLEAR_TOKEN_DATA, - }), - { - ...mockState, - tokenData: {}, - }, - ); - }); - - it('should set methodData when receiving a UPDATE_METHOD_DATA action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer(mockState, { - type: UPDATE_METHOD_DATA, - payload: { - name: 'transferFrom', - }, - }), - { - ...mockState, - methodData: { - ...mockState.methodData, - name: 'transferFrom', - }, - }, - ); - }); - - it('should clear methodData when receiving a CLEAR_METHOD_DATA action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer(mockState, { - type: CLEAR_METHOD_DATA, - }), - { - ...mockState, - methodData: {}, - }, - ); - }); - it('should update transaction amounts when receiving an UPDATE_TRANSACTION_AMOUNTS action', function () { assert.deepStrictEqual( ConfirmTransactionReducer(mockState, { @@ -246,25 +164,6 @@ describe('Confirm Transaction Duck', function () { ); }); - it('should update tokenProps when receiving an UPDATE_TOKEN_PROPS action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer(mockState, { - type: UPDATE_TOKEN_PROPS, - payload: { - tokenSymbol: 'DEF', - tokenDecimals: '1', - }, - }), - { - ...mockState, - tokenProps: { - tokenSymbol: 'DEF', - tokenDecimals: '1', - }, - }, - ); - }); - it('should update nonce when receiving an UPDATE_NONCE action', function () { assert.deepStrictEqual( ConfirmTransactionReducer(mockState, { @@ -278,41 +177,6 @@ describe('Confirm Transaction Duck', function () { ); }); - it('should update nonce when receiving an UPDATE_TO_SMART_CONTRACT action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer(mockState, { - type: UPDATE_TO_SMART_CONTRACT, - payload: true, - }), - { - ...mockState, - toSmartContract: true, - }, - ); - }); - - it('should set fetchingData to true when receiving a FETCH_DATA_START action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer(mockState, { - type: FETCH_DATA_START, - }), - { - ...mockState, - fetchingData: true, - }, - ); - }); - - it('should set fetchingData to false when receiving a FETCH_DATA_END action', function () { - assert.deepStrictEqual( - ConfirmTransactionReducer( - { fetchingData: true }, - { type: FETCH_DATA_END }, - ), - { fetchingData: false }, - ); - }); - it('should clear confirmTransaction when receiving a FETCH_DATA_END action', function () { assert.deepStrictEqual( ConfirmTransactionReducer(mockState, { @@ -334,14 +198,6 @@ describe('Confirm Transaction Duck', function () { assert.deepStrictEqual(actions.updateTxData(txData), expectedAction); }); - it('should create an action to clear txData', function () { - const expectedAction = { - type: CLEAR_TX_DATA, - }; - - assert.deepStrictEqual(actions.clearTxData(), expectedAction); - }); - it('should create an action to update tokenData', function () { const tokenData = { test: 123 }; const expectedAction = { @@ -355,35 +211,6 @@ describe('Confirm Transaction Duck', function () { ); }); - it('should create an action to clear tokenData', function () { - const expectedAction = { - type: CLEAR_TOKEN_DATA, - }; - - assert.deepStrictEqual(actions.clearTokenData(), expectedAction); - }); - - it('should create an action to update methodData', function () { - const methodData = { test: 123 }; - const expectedAction = { - type: UPDATE_METHOD_DATA, - payload: methodData, - }; - - assert.deepStrictEqual( - actions.updateMethodData(methodData), - expectedAction, - ); - }); - - it('should create an action to clear methodData', function () { - const expectedAction = { - type: CLEAR_METHOD_DATA, - }; - - assert.deepStrictEqual(actions.clearMethodData(), expectedAction); - }); - it('should create an action to update transaction amounts', function () { const transactionAmounts = { test: 123 }; const expectedAction = { @@ -423,22 +250,6 @@ describe('Confirm Transaction Duck', function () { ); }); - it('should create an action to update tokenProps', function () { - const tokenProps = { - tokenDecimals: '1', - tokenSymbol: 'abc', - }; - const expectedAction = { - type: UPDATE_TOKEN_PROPS, - payload: tokenProps, - }; - - assert.deepStrictEqual( - actions.updateTokenProps(tokenProps), - expectedAction, - ); - }); - it('should create an action to update nonce', function () { const nonce = '0x1'; const expectedAction = { @@ -449,22 +260,6 @@ describe('Confirm Transaction Duck', function () { assert.deepStrictEqual(actions.updateNonce(nonce), expectedAction); }); - it('should create an action to set fetchingData to true', function () { - const expectedAction = { - type: FETCH_DATA_START, - }; - - assert.deepStrictEqual(actions.setFetchingData(true), expectedAction); - }); - - it('should create an action to set fetchingData to false', function () { - const expectedAction = { - type: FETCH_DATA_END, - }; - - assert.deepStrictEqual(actions.setFetchingData(false), expectedAction); - }); - it('should create an action to clear confirmTransaction', function () { const expectedAction = { type: CLEAR_CONFIRM_TRANSACTION, @@ -489,61 +284,6 @@ describe('Confirm Transaction Duck', function () { global.eth.getCode.resetHistory(); }); - it('updates txData and gas on an existing transaction in confirmTransaction', function () { - const mockState = { - metamask: { - conversionRate: 468.58, - currentCurrency: 'usd', - }, - confirmTransaction: { - ethTransactionAmount: '1', - ethTransactionFee: '0.000021', - ethTransactionTotal: '1.000021', - fetchingData: false, - fiatTransactionAmount: '469.26', - fiatTransactionFee: '0.01', - fiatTransactionTotal: '469.27', - hexGasTotal: '0x1319718a5000', - methodData: {}, - nonce: '', - tokenData: {}, - tokenProps: { - tokenDecimals: '', - tokenSymbol: '', - }, - txData: { - history: [], - id: 2603411941761054, - loadingDefaults: false, - metamaskNetworkId: '3', - origin: 'faucet.metamask.io', - status: TRANSACTION_STATUSES.UNAPPROVED, - time: 1530838113716, - }, - }, - }; - - const middlewares = [thunk]; - const mockStore = configureMockStore(middlewares); - const store = mockStore(mockState); - const expectedActions = [ - 'metamask/confirm-transaction/UPDATE_TX_DATA', - 'metamask/confirm-transaction/UPDATE_TRANSACTION_AMOUNTS', - 'metamask/confirm-transaction/UPDATE_TRANSACTION_FEES', - 'metamask/confirm-transaction/UPDATE_TRANSACTION_TOTALS', - ]; - - store.dispatch( - actions.updateGasAndCalculate({ gasLimit: '0x2', gasPrice: '0x25' }), - ); - - const storeActions = store.getActions(); - assert.strictEqual(storeActions.length, expectedActions.length); - storeActions.forEach((action, index) => - assert.strictEqual(action.type, expectedActions[index]), - ); - }); - it('updates txData and updates gas values in confirmTransaction', function () { const txData = { history: [], diff --git a/ui/app/helpers/utils/transactions.util.js b/ui/app/helpers/utils/transactions.util.js index 61f2e1f8c..463ddab5e 100644 --- a/ui/app/helpers/utils/transactions.util.js +++ b/ui/app/helpers/utils/transactions.util.js @@ -205,3 +205,45 @@ export function getBlockExplorerUrlForTx(networkId, hash, rpcPrefs = {}) { const prefix = getEtherscanNetworkPrefix(networkId); return `https://${prefix}etherscan.io/tx/${hash}`; } + +/** + * Returns a title for the given transaction category. + * + * This will throw an error if the transaction category is unrecognized and no default is provided. + * @param {function} t - The translation function + * @param {TRANSACTION_CATEGORIES[keyof TRANSACTION_CATEGORIES]} transactionCategory - The transaction category constant + * @returns {string} The transaction category title + */ +export function getTransactionCategoryTitle(t, transactionCategory) { + switch (transactionCategory) { + case TRANSACTION_CATEGORIES.TOKEN_METHOD_TRANSFER: { + return t('transfer'); + } + case TRANSACTION_CATEGORIES.TOKEN_METHOD_TRANSFER_FROM: { + return t('transferFrom'); + } + case TRANSACTION_CATEGORIES.TOKEN_METHOD_APPROVE: { + return t('approve'); + } + case TRANSACTION_CATEGORIES.SENT_ETHER: { + return t('sentEther'); + } + case TRANSACTION_CATEGORIES.CONTRACT_INTERACTION: { + return t('contractInteraction'); + } + case TRANSACTION_CATEGORIES.DEPLOY_CONTRACT: { + return t('contractDeployment'); + } + case TRANSACTION_CATEGORIES.SWAP: { + return t('swap'); + } + case TRANSACTION_CATEGORIES.SWAP_APPROVAL: { + return t('swapApproval'); + } + default: { + throw new Error( + `Unrecognized transaction category: ${transactionCategory}`, + ); + } + } +} diff --git a/ui/app/hooks/useTransactionDisplayData.js b/ui/app/hooks/useTransactionDisplayData.js index ff0b7b6c9..18b0e7c39 100644 --- a/ui/app/hooks/useTransactionDisplayData.js +++ b/ui/app/hooks/useTransactionDisplayData.js @@ -1,6 +1,9 @@ import { useSelector } from 'react-redux'; import { getKnownMethodData } from '../selectors/selectors'; -import { getStatusKey } from '../helpers/utils/transactions.util'; +import { + getStatusKey, + getTransactionCategoryTitle, +} from '../helpers/utils/transactions.util'; import { camelCaseToCapitalize } from '../helpers/utils/common.util'; import { PRIMARY, SECONDARY } from '../helpers/constants/common'; import { getTokenAddressParam } from '../helpers/utils/token-util'; @@ -186,9 +189,13 @@ export function useTransactionDisplayData(transactionGroup) { transactionCategory === TRANSACTION_CATEGORIES.CONTRACT_INTERACTION ) { category = TRANSACTION_GROUP_CATEGORIES.INTERACTION; + const transactionCategoryTitle = getTransactionCategoryTitle( + t, + transactionCategory, + ); title = (methodData?.name && camelCaseToCapitalize(methodData.name)) || - t(transactionCategory); + transactionCategoryTitle; subtitle = origin; subtitleContainsOrigin = true; } else if (transactionCategory === TRANSACTION_CATEGORIES.INCOMING) { diff --git a/ui/app/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/app/pages/confirm-transaction-base/confirm-transaction-base.component.js index 5d09b3198..d1b702df9 100644 --- a/ui/app/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/app/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -22,6 +22,7 @@ import { TRANSACTION_CATEGORIES, TRANSACTION_STATUSES, } from '../../../../shared/constants/transaction'; +import { getTransactionCategoryTitle } from '../../helpers/utils/transactions.util'; export default class ConfirmTransactionBase extends Component { static contextTypes = { @@ -690,7 +691,7 @@ export default class ConfirmTransactionBase extends Component { let functionType = getMethodName(name); if (!functionType) { if (transactionCategory) { - functionType = t(transactionCategory) || transactionCategory; + functionType = getTransactionCategoryTitle(t, transactionCategory); } else { functionType = t('contractInteraction'); } diff --git a/yarn.lock b/yarn.lock index efcfa3599..d57a079e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2243,7 +2243,7 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@popperjs/core@^2.4.0", "@popperjs/core@^2.4.4", "@popperjs/core@^2.5.4": +"@popperjs/core@^2.4.0", "@popperjs/core@^2.5.4": version "2.5.4" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.5.4.tgz#de25b5da9f727985a3757fd59b5d028aba75841a" integrity sha512-ZpKr+WTb8zsajqgDkvCEWgp6d5eJT6Q63Ng2neTbzBO76Lbe91vX/iVIW9dikq+Fs3yEo+ls4cxeXABD2LtcbQ== @@ -2406,17 +2406,17 @@ resolved "https://registry.yarnpkg.com/@stablelib/utf8/-/utf8-0.10.1.tgz#eecf54884da7b2bee235e3c70efb8cd5c07ba5bd" integrity sha512-+uM1YZ4MhBC82vt99prF7DXNGqhYmJ9cQ3p5qNowMNkkzn9OWEkqBvguBW3ChAt7JvqZ3SD5HJOfc6YgnfMTHw== -"@storybook/addon-actions@^6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.1.9.tgz#b6d185b8e4e73691acc428b59e4d331195d64a40" - integrity sha512-vYqwuaBHrjRbbuyf4WBc5uDhrSejVEEiCabuu4g00R3dN7P5Ne/tbSw9EkYbbrRKxlEhdkk83DU1/J/+mCY5jw== - dependencies: - "@storybook/addons" "6.1.9" - "@storybook/api" "6.1.9" - "@storybook/client-api" "6.1.9" - "@storybook/components" "6.1.9" - "@storybook/core-events" "6.1.9" - "@storybook/theming" "6.1.9" +"@storybook/addon-actions@^6.1.17": + version "6.1.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.1.17.tgz#9d32336284738cefa69b99acafa4b132d5533600" + integrity sha512-4hyAvmjnI4C1ZQ7/t21jKKXE0jO1zAk310BkYin0NJf77Qi0tUE1DNOwirJY/xzRih36wWi1V79c/ZOJNsLv9Q== + dependencies: + "@storybook/addons" "6.1.17" + "@storybook/api" "6.1.17" + "@storybook/client-api" "6.1.17" + "@storybook/components" "6.1.17" + "@storybook/core-events" "6.1.17" + "@storybook/theming" "6.1.17" core-js "^3.0.1" fast-deep-equal "^3.1.1" global "^4.3.2" @@ -2429,17 +2429,17 @@ util-deprecate "^1.0.2" uuid "^8.0.0" -"@storybook/addon-backgrounds@^6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.1.9.tgz#4e9647001b2f396f56428218480f541e3a8a0e60" - integrity sha512-0/nnbnWZqo4NjyHFxcCHkcU+t8uUdk///9jSXRs4swmOLIFRaftEc/ZJ2rScu1Sc7y0CQdbk1Jjyx5/2cHBQtw== - dependencies: - "@storybook/addons" "6.1.9" - "@storybook/api" "6.1.9" - "@storybook/client-logger" "6.1.9" - "@storybook/components" "6.1.9" - "@storybook/core-events" "6.1.9" - "@storybook/theming" "6.1.9" +"@storybook/addon-backgrounds@^6.1.17": + version "6.1.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.1.17.tgz#df4eeec1df72d5f835e82bee433493110463f896" + integrity sha512-1a8Vu50eQWdwMek9w2QOehhu10aZYzyR404qwGvPCRGt5uMMsKxoKvv1M6/ETW7d2G4Srl/Ka+k4x6ykoHIepA== + dependencies: + "@storybook/addons" "6.1.17" + "@storybook/api" "6.1.17" + "@storybook/client-logger" "6.1.17" + "@storybook/components" "6.1.17" + "@storybook/core-events" "6.1.17" + "@storybook/theming" "6.1.17" core-js "^3.0.1" global "^4.3.2" memoizerific "^1.11.3" @@ -2447,18 +2447,18 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-knobs@^6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-6.1.9.tgz#49773931770effc208db094c61eeecbceaf5836b" - integrity sha512-aUKD9FaQGl/WOkGT6utElspYZJ7cBtUARe41JN59qOao7RNviabipQUASrjORcYUUU55sfKsLPEqQaEKB3x2bw== - dependencies: - "@storybook/addons" "6.1.9" - "@storybook/api" "6.1.9" - "@storybook/channels" "6.1.9" - "@storybook/client-api" "6.1.9" - "@storybook/components" "6.1.9" - "@storybook/core-events" "6.1.9" - "@storybook/theming" "6.1.9" +"@storybook/addon-knobs@^6.1.17": + version "6.1.17" + resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-6.1.17.tgz#c7cdd5be813c2b80ce7f464eabf8ceb06486e82d" + integrity sha512-WUkoGtHhXIurXFQybsMXZaphAtCNclZjZHvji8O5eg+ahx7pIM/Wldh3uJwOdOkW5LHxT76hLxPvuXvOEysnbw== + dependencies: + "@storybook/addons" "6.1.17" + "@storybook/api" "6.1.17" + "@storybook/channels" "6.1.17" + "@storybook/client-api" "6.1.17" + "@storybook/components" "6.1.17" + "@storybook/core-events" "6.1.17" + "@storybook/theming" "6.1.17" copy-to-clipboard "^3.0.8" core-js "^3.0.1" escape-html "^1.0.3" @@ -2498,21 +2498,6 @@ global "^4.3.2" regenerator-runtime "^0.13.7" -"@storybook/addons@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.1.9.tgz#78f3cb27b7d934f091f311f89b6ca312d34f12b8" - integrity sha512-NRxdlGLmmSoVwlirVRgKC8xmW9cFkG+Sp5GEd4XkJDaaIg2vKR3RuFU9GuvIOVMxOhhERqhQ07bnDaAMKbFzGw== - dependencies: - "@storybook/api" "6.1.9" - "@storybook/channels" "6.1.9" - "@storybook/client-logger" "6.1.9" - "@storybook/core-events" "6.1.9" - "@storybook/router" "6.1.9" - "@storybook/theming" "6.1.9" - core-js "^3.0.1" - global "^4.3.2" - regenerator-runtime "^0.13.7" - "@storybook/api@6.1.17": version "6.1.17" resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.1.17.tgz#50393ce9b718063b67680212df895eceacc0c11d" @@ -2538,31 +2523,6 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/api@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.1.9.tgz#3f9bf00b2b18fa02965079fe775bd713677b30a3" - integrity sha512-S9SXlSiMeI450NIbOnx3UU9TZNyVD7jcBCjfNzhj0PqzRX/IG5Usj+R88Jm6MSIDjtsVjrWRCou+PrCh2xMnlQ== - dependencies: - "@reach/router" "^1.3.3" - "@storybook/channels" "6.1.9" - "@storybook/client-logger" "6.1.9" - "@storybook/core-events" "6.1.9" - "@storybook/csf" "0.0.1" - "@storybook/router" "6.1.9" - "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.1.9" - "@types/reach__router" "^1.3.5" - core-js "^3.0.1" - fast-deep-equal "^3.1.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - regenerator-runtime "^0.13.7" - store2 "^2.7.1" - telejson "^5.0.2" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - "@storybook/channel-postmessage@6.1.17": version "6.1.17" resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.1.17.tgz#309ce67c94637ec13319d4ce360a8f3742ddbaf4" @@ -2576,19 +2536,6 @@ qs "^6.6.0" telejson "^5.0.2" -"@storybook/channel-postmessage@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.1.9.tgz#5d73c67ba94bcf68b14138bba6c5bb0850c72c5e" - integrity sha512-tX7pD9Xrf1WsatpJqtJ6o8MlgxG7jH+oFhNPkGvUbWiolVDQmuDndwM8Hh1kUnOWlyE1AN5hlM7av8MY+9D3NA== - dependencies: - "@storybook/channels" "6.1.9" - "@storybook/client-logger" "6.1.9" - "@storybook/core-events" "6.1.9" - core-js "^3.0.1" - global "^4.3.2" - qs "^6.6.0" - telejson "^5.0.2" - "@storybook/channels@6.1.17": version "6.1.17" resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.1.17.tgz#2cc89a6b9727d19c24b15fa3cb15569b469db864" @@ -2598,15 +2545,6 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/channels@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.1.9.tgz#94f07ff3615b11c07d1902be6b6cd298c0eea55c" - integrity sha512-aV+KsZPuoTtFKSMUkSCyVlVmtVHkSH35dSbyMazjlUD9cOLwkXB1s+LZL/GxxSR6a6uR75V0QWxItfNxaJETMQ== - dependencies: - core-js "^3.0.1" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - "@storybook/client-api@6.1.17": version "6.1.17" resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.1.17.tgz#3ced22f08a47af70ccf8929111bc44b79e9e8ec0" @@ -2631,30 +2569,6 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-api@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.1.9.tgz#d4a8d38bc657f26e4837831b961e085da1954d51" - integrity sha512-b2DFaGAS5G2ly3UJY5NJNXh/LxgLgSJLbqPL4t48MFW5XjH+rmEWXE9P+ujCaPclH1/y7mZRMprDj3ycDbRo3Q== - dependencies: - "@storybook/addons" "6.1.9" - "@storybook/channel-postmessage" "6.1.9" - "@storybook/channels" "6.1.9" - "@storybook/client-logger" "6.1.9" - "@storybook/core-events" "6.1.9" - "@storybook/csf" "0.0.1" - "@types/qs" "^6.9.0" - "@types/webpack-env" "^1.15.3" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - regenerator-runtime "^0.13.7" - stable "^0.1.8" - store2 "^2.7.1" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - "@storybook/client-logger@6.1.17": version "6.1.17" resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.1.17.tgz#0d89aaf824457f19bf9aa585bbcada57595e7d01" @@ -2663,14 +2577,6 @@ core-js "^3.0.1" global "^4.3.2" -"@storybook/client-logger@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.1.9.tgz#1d61a64000d4691780d75e19b78fd44adfdb5d9c" - integrity sha512-i7Q2ky9+Jwv+wmnlOGxmDOEdmaTIB69OQnnZNWGKufOwoIMjn6QO0VifARyA9W++nNSijjJ5th84tLJALaoCTA== - dependencies: - core-js "^3.0.1" - global "^4.3.2" - "@storybook/components@6.1.17": version "6.1.17" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.1.17.tgz#f92d36e370ec6039d8c7cee9ef13dda866eed3da" @@ -2697,32 +2603,6 @@ react-textarea-autosize "^8.1.1" ts-dedent "^2.0.0" -"@storybook/components@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.1.9.tgz#f25d18f3a410cc7e9549ddb3c971c40d9108d4d8" - integrity sha512-cYYm3fHo9MW0bbl47lu1ncwulV7V9VEF8FC96uvys07oaCTFWKzQ0z/FD0nCqeK6eEz1+SEqnGwLFmOtqlRXDQ== - dependencies: - "@popperjs/core" "^2.4.4" - "@storybook/client-logger" "6.1.9" - "@storybook/csf" "0.0.1" - "@storybook/theming" "6.1.9" - "@types/overlayscrollbars" "^1.9.0" - "@types/react-color" "^3.0.1" - "@types/react-syntax-highlighter" "11.0.4" - core-js "^3.0.1" - fast-deep-equal "^3.1.1" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.11.4" - memoizerific "^1.11.3" - overlayscrollbars "^1.10.2" - polished "^3.4.4" - react-color "^2.17.0" - react-popper-tooltip "^3.1.0" - react-syntax-highlighter "^13.5.0" - react-textarea-autosize "^8.1.1" - ts-dedent "^2.0.0" - "@storybook/core-events@6.1.17": version "6.1.17" resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.1.17.tgz#697ed916fcb2a411bc9f8bdbfacd0eb9d394eb58" @@ -2730,17 +2610,10 @@ dependencies: core-js "^3.0.1" -"@storybook/core-events@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.1.9.tgz#0a88281837d1aa657a93a9abf7f5aad65b8d68e7" - integrity sha512-oOpqpjCTJCt0U5lnQ16OZU0iKIDh2/MIg4yrnDw+Pt6zGyX3zSvtB+9W8LQFnMwm+cXaNmiizGwt/W+4OiORjQ== - dependencies: - core-js "^3.0.1" - -"@storybook/core@6.1.9", "@storybook/core@^6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.1.9.tgz#e6575e294cb4d2d9b57d5976a145cae8f4a88594" - integrity sha512-guz+R6eDX923Cw7NqgS5PrpTmmjDB+m5X1iF9pwKlpPTfzIiT/wTzJm4PwhFoGONNoXrItObX/6hW6OQbX4aOA== +"@storybook/core@6.1.17", "@storybook/core@^6.1.17": + version "6.1.17" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.1.17.tgz#21c3d2c23fcaac4b930c9413f396d158aaeb7546" + integrity sha512-9x8ezlKlm8SQ+OW3kKwJwuVcaTDCw2OlA9YZEOo1kdRKsiiy5X14VqjJocl/BqnDt2VgzUUchz3m4neHYMAivQ== dependencies: "@babel/core" "^7.12.3" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -2764,20 +2637,20 @@ "@babel/preset-react" "^7.12.1" "@babel/preset-typescript" "^7.12.1" "@babel/register" "^7.12.1" - "@storybook/addons" "6.1.9" - "@storybook/api" "6.1.9" - "@storybook/channel-postmessage" "6.1.9" - "@storybook/channels" "6.1.9" - "@storybook/client-api" "6.1.9" - "@storybook/client-logger" "6.1.9" - "@storybook/components" "6.1.9" - "@storybook/core-events" "6.1.9" + "@storybook/addons" "6.1.17" + "@storybook/api" "6.1.17" + "@storybook/channel-postmessage" "6.1.17" + "@storybook/channels" "6.1.17" + "@storybook/client-api" "6.1.17" + "@storybook/client-logger" "6.1.17" + "@storybook/components" "6.1.17" + "@storybook/core-events" "6.1.17" "@storybook/csf" "0.0.1" - "@storybook/node-logger" "6.1.9" - "@storybook/router" "6.1.9" + "@storybook/node-logger" "6.1.17" + "@storybook/router" "6.1.17" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.1.9" - "@storybook/ui" "6.1.9" + "@storybook/theming" "6.1.17" + "@storybook/ui" "6.1.17" "@types/glob-base" "^0.3.0" "@types/micromatch" "^4.0.1" "@types/node-fetch" "^2.5.4" @@ -2851,10 +2724,10 @@ dependencies: lodash "^4.17.15" -"@storybook/node-logger@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.1.9.tgz#c63a61f72209d76eeeffe9d151fec043864b9438" - integrity sha512-2gP9BSBXEOGIcUyzRdIkIJi1UEINUAIyuv9bfKODo4GfujRg7DLz/mpi/FdwmulGg/viXWSXa6ccb6ziIgY9RA== +"@storybook/node-logger@6.1.17": + version "6.1.17" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.1.17.tgz#468e65c9f0c103d4b0cd7f5da945af81e9aaa3d4" + integrity sha512-Z0xQ4kzvf7GnwFG9UY1HJO2UR66t8IBnC5GxvWrJ/kwXE+DRF3mm/MT41Zz/d9zAY5Vo4mhE5zRwlYSAtrxQIQ== dependencies: "@types/npmlog" "^4.1.2" chalk "^4.0.0" @@ -2862,17 +2735,17 @@ npmlog "^4.1.2" pretty-hrtime "^1.0.3" -"@storybook/react@^6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.1.9.tgz#063427015b3d0ce582b1b6b7826d40d963d265ce" - integrity sha512-HJWHQE+eCC7sz1vqvgmBMn2sA1uc0ByEj+NeSgyi45jBFI+Ke4a8hxx6k5XA7k9gLznqG8TPGg0z6EdQTJTLkQ== +"@storybook/react@^6.1.17": + version "6.1.17" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.1.17.tgz#cb48386d435984d7ca58a24e686a72159367077b" + integrity sha512-gBylKDuwUzWueB6mEhTo72SelWU3vPWHAFsi+NK6zWFIc2a5dJc9QqDfN+2rBhVOdRXqhSHzYwNWurqYpWuqew== dependencies: "@babel/preset-flow" "^7.12.1" "@babel/preset-react" "^7.12.1" "@pmmmwh/react-refresh-webpack-plugin" "^0.4.2" - "@storybook/addons" "6.1.9" - "@storybook/core" "6.1.9" - "@storybook/node-logger" "6.1.9" + "@storybook/addons" "6.1.17" + "@storybook/core" "6.1.17" + "@storybook/node-logger" "6.1.17" "@storybook/semver" "^7.3.2" "@types/webpack-env" "^1.15.3" babel-plugin-add-react-displayname "^0.0.5" @@ -2901,18 +2774,6 @@ memoizerific "^1.11.3" qs "^6.6.0" -"@storybook/router@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.1.9.tgz#c0b24dc3ab53d58541b81c7abea2f11d7fbbebf6" - integrity sha512-kIlmSFBnqI198oMCncFZR7MxoV5/kP6KS0paFcyu1XE1zO2ovV6eQZ8pPpOjSsD/ISu4Y44uE+ZDNsEehjj6GQ== - dependencies: - "@reach/router" "^1.3.3" - "@types/reach__router" "^1.3.5" - core-js "^3.0.1" - global "^4.3.2" - memoizerific "^1.11.3" - qs "^6.6.0" - "@storybook/semver@^7.3.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@storybook/semver/-/semver-7.3.2.tgz#f3b9c44a1c9a0b933c04e66d0048fcf2fa10dac0" @@ -2921,10 +2782,10 @@ core-js "^3.6.5" find-up "^4.1.0" -"@storybook/storybook-deployer@^2.8.6": - version "2.8.6" - resolved "https://registry.yarnpkg.com/@storybook/storybook-deployer/-/storybook-deployer-2.8.6.tgz#00c2e84f27dfaa88cb0785361453f23b1ebb4ea3" - integrity sha512-Bpe7ZtsR5NUuohK3VsQa+nxEHtVxMZZo3DRlRUZW5IZOmzmvSID3i+jkizloG9xO7sw5zUvlD31YMHm7OtdrMA== +"@storybook/storybook-deployer@^2.8.7": + version "2.8.7" + resolved "https://registry.yarnpkg.com/@storybook/storybook-deployer/-/storybook-deployer-2.8.7.tgz#c1eed33d03bd9267f884c60eea8e03dc3261ec11" + integrity sha512-O0hKHV6hg93fPMvKGC5M/sd7KTL473+SzMKm+WZNVEyLEfXXcVU+Ts9/VL1IhmC1P2A8Bg9oBnkcPqAqjAN46w== dependencies: git-url-parse "^11.1.2" glob "^7.1.3" @@ -2950,39 +2811,21 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/theming@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.1.9.tgz#8c584aa623f3d6e33b1e3b3de2ec1f41bdc5d9ab" - integrity sha512-orzMQkyEhAQEi0E9iwmUkzh5yPHoYGBz17t2aydDeT6oGKii6if8Mq2oPVycfVKZ84QO7GFAS9q1nVCRcuD8oA== - dependencies: - "@emotion/core" "^10.1.1" - "@emotion/is-prop-valid" "^0.8.6" - "@emotion/styled" "^10.0.23" - "@storybook/client-logger" "6.1.9" - core-js "^3.0.1" - deep-object-diff "^1.1.0" - emotion-theming "^10.0.19" - global "^4.3.2" - memoizerific "^1.11.3" - polished "^3.4.4" - resolve-from "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/ui@6.1.9": - version "6.1.9" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.1.9.tgz#1ed3168d9fe5827285c13d8507dd1fd872830542" - integrity sha512-4MK5iTf7kI5DYVeWRiD6lkXdd0S6eiQJu9lvWqMOQJLOH5Bq77g0Ejo+38RTEQpV6we7hCPWWnRXQBjmJ2+19w== +"@storybook/ui@6.1.17": + version "6.1.17" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.1.17.tgz#c29e7a03c645dd94793a3cbd587fcb6e0ba0f22e" + integrity sha512-D4Vri1MmqfmNq+g1hSRqZyld5zX2VLUexQHGSPmNj+FhlOzkeNA5RcoMBWMvIUSUENiBx3a5gmr/6cbXo7ljdQ== dependencies: "@emotion/core" "^10.1.1" - "@storybook/addons" "6.1.9" - "@storybook/api" "6.1.9" - "@storybook/channels" "6.1.9" - "@storybook/client-logger" "6.1.9" - "@storybook/components" "6.1.9" - "@storybook/core-events" "6.1.9" - "@storybook/router" "6.1.9" + "@storybook/addons" "6.1.17" + "@storybook/api" "6.1.17" + "@storybook/channels" "6.1.17" + "@storybook/client-logger" "6.1.17" + "@storybook/components" "6.1.17" + "@storybook/core-events" "6.1.17" + "@storybook/router" "6.1.17" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.1.9" + "@storybook/theming" "6.1.17" "@types/markdown-to-jsx" "^6.11.0" copy-to-clipboard "^3.0.8" core-js "^3.0.1" @@ -3145,11 +2988,6 @@ dependencies: "@types/unist" "*" -"@types/history@*": - version "4.7.3" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.3.tgz#856c99cdc1551d22c22b18b5402719affec9839a" - integrity sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw== - "@types/html-minifier-terser@^5.0.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" @@ -3304,14 +3142,6 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== -"@types/reach__router@^1.3.5": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.6.tgz#413417ce74caab331c70ce6a03a4c825188e4709" - integrity sha512-RHYataCUPQnt+GHoASyRLq6wmZ0n8jWlBW8Lxcwd30NN6vQfbmTeoSDfkgxO0S1lEzArp8OFDsq5KIs7FygjtA== - dependencies: - "@types/history" "*" - "@types/react" "*" - "@types/reach__router@^1.3.7": version "1.3.7" resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.7.tgz#de8ab374259ae7f7499fc1373b9697a5f3cd6428" @@ -6039,12 +5869,12 @@ bn.js@^1.0.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-1.3.0.tgz#0db4cbf96f8f23b742f5bcb9d1aa7a9994a05e83" integrity sha1-DbTL+W+PI7dC9by50ap6mZSgXoM= -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.7, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0, bn.js@^4.8.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.7, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0, bn.js@^4.8.0: version "4.11.9" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -bn.js@^5.1.1: +bn.js@^5.1.1, bn.js@^5.1.2: version "5.1.3" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== @@ -6518,6 +6348,13 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" @@ -10261,27 +10098,23 @@ eth-sig-util@^1.4.0, eth-sig-util@^1.4.2: ethereumjs-util "^5.1.1" eth-sig-util@^2.0.0, eth-sig-util@^2.4.4, eth-sig-util@^2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.3.tgz#6938308b38226e0b3085435474900b03036abcbe" - integrity sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw== + version "2.5.4" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.4.tgz#577b01fe491b6bf59b0464be09633e20c1677bc5" + integrity sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A== dependencies: - buffer "^5.2.1" - elliptic "^6.4.0" - ethereumjs-abi "0.6.5" + ethereumjs-abi "0.6.8" ethereumjs-util "^5.1.1" - tweetnacl "^1.0.0" + tweetnacl "^1.0.3" tweetnacl-util "^0.15.0" eth-sig-util@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.0.tgz#75133b3d7c20a5731af0690c385e184ab942b97e" - integrity sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ== + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.1.tgz#8753297c83a3f58346bd13547b59c4b2cd110c96" + integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== dependencies: - buffer "^5.2.1" - elliptic "^6.4.0" - ethereumjs-abi "0.6.5" + ethereumjs-abi "^0.6.8" ethereumjs-util "^5.1.1" - tweetnacl "^1.0.0" + tweetnacl "^1.0.3" tweetnacl-util "^0.15.0" eth-simple-keyring@^3.5.0: @@ -10324,13 +10157,13 @@ eth-tx-summary@^3.1.2: through2 "^2.0.3" ethashjs@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.7.tgz#30bfe4196726690a0c59d3b8272e70d4d0c34bae" - integrity sha1-ML/kGWcmaQoMWdO4Jy5w1NDDS64= + version "0.0.8" + resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.8.tgz#227442f1bdee409a548fb04136e24c874f3aa6f9" + integrity sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw== dependencies: - async "^1.4.2" - buffer-xor "^1.0.3" - ethereumjs-util "^4.0.1" + async "^2.1.2" + buffer-xor "^2.0.1" + ethereumjs-util "^7.0.2" miller-rabin "^4.0.0" ethereum-bloom-filters@^1.0.6: @@ -10376,15 +10209,7 @@ ethereum-ens-network-map@^1.0.0, ethereum-ens-network-map@^1.0.2: resolved "https://registry.yarnpkg.com/ethereum-ens-network-map/-/ethereum-ens-network-map-1.0.2.tgz#4e27bad18dae7bd95d84edbcac2c9e739fc959b9" integrity sha512-5qwJ5n3YhjSpE6O/WEBXCAb2nagUgyagJ6C0lGUBWC4LjKp/rRzD+pwtDJ6KCiITFEAoX4eIrWOjRy0Sylq5Hg== -ethereumjs-abi@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" - integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= - dependencies: - bn.js "^4.10.0" - ethereumjs-util "^4.3.0" - -ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.4, ethereumjs-abi@^0.6.5: +ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.4, ethereumjs-abi@^0.6.5, ethereumjs-abi@^0.6.8: version "0.6.8" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== @@ -10505,17 +10330,6 @@ ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumj ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6" - integrity sha1-PpQosxfuvaPXJg2FT93alUsfG8Y= - dependencies: - bn.js "^4.8.0" - create-hash "^1.1.2" - keccakjs "^0.2.0" - rlp "^2.0.0" - secp256k1 "^3.0.1" - ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5, ethereumjs-util@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642" @@ -10529,6 +10343,18 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum safe-buffer "^5.1.1" secp256k1 "^3.0.1" +ethereumjs-util@^7.0.2: + version "7.0.8" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.8.tgz#5258762b7b17e3d828e41834948363ff0a703ffd" + integrity sha512-JJt7tDpCAmDPw/sGoFYeq0guOVqT3pTE9xlEbBmc/nlCij3JRCoS2c96SQ6kXVHOT3xWUNLDm5QCJLQaUnVAtQ== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.4" + ethereumjs-util@~6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8" @@ -15923,7 +15749,7 @@ keccak@^1.0.2: nan "^2.2.1" safe-buffer "^5.1.0" -keccakjs@^0.2.0, keccakjs@^0.2.1: +keccakjs@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/keccakjs/-/keccakjs-0.2.3.tgz#5e4e969ce39689a3861f445d7752ee3477f9fe72" integrity sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg== @@ -21553,7 +21379,7 @@ react-motion@^0.5.2: prop-types "^15.5.8" raf "^3.1.0" -react-popper-tooltip@^3.1.0, react-popper-tooltip@^3.1.1: +react-popper-tooltip@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz#329569eb7b287008f04fcbddb6370452ad3f9eac" integrity sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ== @@ -22759,6 +22585,13 @@ rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3: dependencies: bn.js "^4.11.1" +rlp@^2.2.4: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + rn-host-detect@^1.1.5: version "1.2.0" resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.2.0.tgz#8b0396fc05631ec60c1cb8789e5070cdb04d0da0" @@ -25426,7 +25259,7 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -tweetnacl@^1.0.0, tweetnacl@^1.0.1: +tweetnacl@^1.0.0, tweetnacl@^1.0.1, tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==