1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 01:39:44 +01:00

complete i18n across new UI

This commit is contained in:
Nick Doiron 2018-01-29 15:29:01 -05:00
parent 1698541bcd
commit abfa74f09a
34 changed files with 221 additions and 166 deletions

View File

@ -3,9 +3,9 @@
"message": "Accept" "message": "Accept"
}, },
"account": { "account": {
"message": "Account:" "message": "Account"
}, },
"accDetails": { "accountDetails": {
"message": "Account Details" "message": "Account Details"
}, },
"accountName": { "accountName": {
@ -17,11 +17,14 @@
"addToken": { "addToken": {
"message": "Add Token" "message": "Add Token"
}, },
"amount": {
"message": "Amount"
},
"amountPlusGas": { "amountPlusGas": {
"message": "Amount + Gas" "message": "Amount + Gas"
}, },
"appDescription": { "appDescription": {
"message": "Ethereum Identity Management", "message": "Ethereum Browser Extension",
"description": "The description of the application" "description": "The description of the application"
}, },
"appName": { "appName": {
@ -43,10 +46,14 @@
"balanceIsInsufficientGas": { "balanceIsInsufficientGas": {
"message": "Insufficient balance for current gas total" "message": "Insufficient balance for current gas total"
}, },
"betweenMinAndMax": {
"message": "must be greater than or equal to $1 and less than or equal to $2.",
"description": "helper for inputting hex as decimal input"
},
"borrowDharma": { "borrowDharma": {
"message": "Borrow With Dharma (Beta)" "message": "Borrow With Dharma (Beta)"
}, },
"buyButton": { "buy": {
"message": "Buy" "message": "Buy"
}, },
"buyCoinbase": { "buyCoinbase": {
@ -58,26 +65,20 @@
"cancel": { "cancel": {
"message": "Cancel" "message": "Cancel"
}, },
"cancelCaps": {
"message": "CANCEL"
},
"clickCopy": { "clickCopy": {
"message": "Click to Copy" "message": "Click to Copy"
}, },
"confirm": { "confirm": {
"message": "Confirm" "message": "Confirm"
}, },
"confirmCaps": {
"message": "CONFIRM"
},
"confirmContract": { "confirmContract": {
"message": "Confirm Contract" "message": "Confirm Contract"
}, },
"confirmPassword": { "confirmPassword": {
"message": "Confirm Password" "message": "Confirm Password"
}, },
"confirmPasswordSmall": { "confirmTransaction": {
"message": "confirm password" "message": "Confirm Transaction"
}, },
"continueToCoinbase": { "continueToCoinbase": {
"message": "Continue to Coinbase" "message": "Continue to Coinbase"
@ -109,15 +110,19 @@
"copyPrivateKey": { "copyPrivateKey": {
"message": "This is your private key (click to copy)" "message": "This is your private key (click to copy)"
}, },
"create": {
"message": "Create"
},
"createAccount": { "createAccount": {
"message": "Create Account" "message": "Create Account"
}, },
"createCaps": {
"message": "CREATE"
},
"createDen": { "createDen": {
"message": "Create" "message": "Create"
}, },
"crypto": {
"message": "Crypto",
"description": "Exchange type (cryptocurrencies)"
},
"customGas": { "customGas": {
"message": "Customize Gas" "message": "Customize Gas"
}, },
@ -139,9 +144,6 @@
"depositBTC": { "depositBTC": {
"message": "Deposit your BTC to the address below:" "message": "Deposit your BTC to the address below:"
}, },
"depositButton": {
"message": "DEPOSIT"
},
"depositEth": { "depositEth": {
"message": "Deposit Eth" "message": "Deposit Eth"
}, },
@ -160,8 +162,8 @@
"depositShapeShiftExplainer": { "depositShapeShiftExplainer": {
"message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed." "message": "If you own other cryptocurrencies, you can trade and deposit Ether directly into your MetaMask wallet. No Account Needed."
}, },
"detailsCaps": { "details": {
"message": "DETAILS" "message": "Details"
}, },
"directDeposit": { "directDeposit": {
"message": "Direct Deposit" "message": "Direct Deposit"
@ -175,12 +177,12 @@
"done": { "done": {
"message": "Done" "message": "Done"
}, },
"edit": {
"message": "Edit"
},
"editAccountName": { "editAccountName": {
"message": "Edit Account Name" "message": "Edit Account Name"
}, },
"editCaps": {
"message": "EDIT"
},
"encryptNewDen": { "encryptNewDen": {
"message": "Encrypt your new DEN" "message": "Encrypt your new DEN"
}, },
@ -196,17 +198,19 @@
"exportPrivateKey": { "exportPrivateKey": {
"message": "Export Private Key" "message": "Export Private Key"
}, },
"exportPrivateKeyLower": {
"message": "Export private key"
},
"exportPrivateKeyWarning": { "exportPrivateKeyWarning": {
"message": "Export private keys at your own risk." "message": "Export private keys at your own risk."
}, },
"failed": { "failed": {
"message": "Failed" "message": "Failed"
}, },
"fiat": {
"message": "FIAT",
"description": "Exchange type"
},
"fileImportFail": { "fileImportFail": {
"message": "File import not working? Click here!" "message": "File import not working? Click here!",
"description": "Helps user import their account from a JSON file"
}, },
"from": { "from": {
"message": "From" "message": "From"
@ -214,12 +218,13 @@
"fromShapeShift": { "fromShapeShift": {
"message": "From ShapeShift" "message": "From ShapeShift"
}, },
"gas": {
"message": "Gas",
"description": "Short indication of gas cost"
},
"gasFee": { "gasFee": {
"message": "Gas Fee" "message": "Gas Fee"
}, },
"gasFeeSpecific": {
"message": "Gas fee:"
},
"gasLimit": { "gasLimit": {
"message": "Gas Limit" "message": "Gas Limit"
}, },
@ -244,11 +249,20 @@
"getEther": { "getEther": {
"message": "Get Ether" "message": "Get Ether"
}, },
"here": { "getEtherFromFaucet": {
"message": "here" "message": "Get Ether from a faucet for the $1",
"description": "Displays network name for Ether faucet"
}, },
"hideCaps": { "greaterThanMin": {
"message": "HIDE" "message": "must be greater than or equal to $1.",
"description": "helper for inputting hex as decimal input"
},
"here": {
"message": "here",
"description": "as in -click here- for more information (goes with troubleTokenBalances)"
},
"hide": {
"message": "Hide"
}, },
"hideToken": { "hideToken": {
"message": "Hide Token" "message": "Hide Token"
@ -260,7 +274,8 @@
"message": "How would you like to deposit Ether?" "message": "How would you like to deposit Ether?"
}, },
"import": { "import": {
"message": "Import" "message": "Import",
"description": "Button to import an account from a selected file"
}, },
"importAccount": { "importAccount": {
"message": "Import Account" "message": "Import Account"
@ -268,14 +283,12 @@
"importAnAccount": { "importAnAccount": {
"message": "Import an account" "message": "Import an account"
}, },
"importCaps": {
"message": "IMPORT"
},
"importDen": { "importDen": {
"message": "Import Existing DEN" "message": "Import Existing DEN"
}, },
"importedCaps": { "imported": {
"message": "IMPORTED" "message": "Imported",
"description": "status showing that an account has been fully loaded into the keyring"
}, },
"infoHelp": { "infoHelp": {
"message": "Info & Help" "message": "Info & Help"
@ -292,9 +305,17 @@
"invalidRequest": { "invalidRequest": {
"message": "Invalid Request" "message": "Invalid Request"
}, },
"jsonFile": {
"message": "JSON File",
"description": "format for importing an account"
},
"kovan": { "kovan": {
"message": "Kovan Test Network" "message": "Kovan Test Network"
}, },
"lessThanMax": {
"message": "must be less than or equal to $1.",
"description": "helper for inputting hex as decimal input"
},
"limit": { "limit": {
"message": "Limit" "message": "Limit"
}, },
@ -310,8 +331,8 @@
"logout": { "logout": {
"message": "Log out" "message": "Log out"
}, },
"looseCaps": { "loose": {
"message": "LOOSE" "message": "Loose"
}, },
"mainnet": { "mainnet": {
"message": "Main Ethereum Network" "message": "Main Ethereum Network"
@ -319,9 +340,6 @@
"message": { "message": {
"message": "Message" "message": "Message"
}, },
"messageCaps": {
"message": "MESSAGE"
},
"min": { "min": {
"message": "Minimum" "message": "Minimum"
}, },
@ -332,10 +350,12 @@
"message": "To interact with decentralized applications using MetaMask, youll need Ether in your wallet." "message": "To interact with decentralized applications using MetaMask, youll need Ether in your wallet."
}, },
"needImportFile": { "needImportFile": {
"message": "You must select a file to import." "message": "You must select a file to import.",
"description": "User is important an account and needs to add a file to continue"
}, },
"needImportPassword": { "needImportPassword": {
"message": "You must enter a password for the selected file." "message": "You must enter a password for the selected file.",
"description": "Password and file needed to import an account"
}, },
"networks": { "networks": {
"message": "Networks" "message": "Networks"
@ -377,20 +397,28 @@
"message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu." "message": "You have returned to the old UI. You can switch back to the New UI through the option in the top right dropdown menu."
}, },
"or": { "or": {
"message": "or" "message": "or",
"description": "choice between creating or importing a new account"
}, },
"passwordMismatch": { "passwordMismatch": {
"message": "passwords don't match" "message": "passwords don't match",
"description": "in password creation process, the two new password fields did not match"
}, },
"passwordShort": { "passwordShort": {
"message": "password not long enough" "message": "password not long enough",
"description": "in password creation process, the password is not long enough to be secure"
}, },
"pastePrivateKey": { "pastePrivateKey": {
"message": "Paste your private key string here:" "message": "Paste your private key string here:",
"description": "For importing an account from a private key"
}, },
"pasteSeed": { "pasteSeed": {
"message": "Paste your seed phrase here!" "message": "Paste your seed phrase here!"
}, },
"privateKey": {
"message": "Private Key",
"description": "select this type of file to use to import an account"
},
"privateKeyWarning": { "privateKeyWarning": {
"message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account." "message": "Warning: Never disclose this key. Anyone with your private keys can take steal any assets held in your account."
}, },
@ -434,16 +462,21 @@
"message": "Ropsten Test Network" "message": "Ropsten Test Network"
}, },
"sampleAccountName": { "sampleAccountName": {
"message": "E.g. My new account" "message": "E.g. My new account",
"description": "Help user understand concept of adding a human-readable name to their account"
}, },
"saveCaps": { "save": {
"message": "SAVE" "message": "Save"
},
"saveAsFile": {
"message": "Save as File",
"description": "Account export process"
}, },
"selectService": { "selectService": {
"message": "Select Service" "message": "Select Service"
}, },
"sendButton": { "send": {
"message": "SEND" "message": "Send"
}, },
"sendTokens": { "sendTokens": {
"message": "Send Tokens" "message": "Send Tokens"
@ -460,12 +493,12 @@
"showPrivateKeys": { "showPrivateKeys": {
"message": "Show Private Keys" "message": "Show Private Keys"
}, },
"showQRCode": {
"message": "Show QR Code"
},
"sign": { "sign": {
"message": "Sign" "message": "Sign"
}, },
"signCaps": {
"message": "SIGN"
},
"signMessage": { "signMessage": {
"message": "Sign Message" "message": "Sign Message"
}, },
@ -490,12 +523,13 @@
"to": { "to": {
"message": "To" "message": "To"
}, },
"toETHviaShapeShift": {
"message": "$1 to ETH via ShapeShift",
"description": "system will fill in deposit type in start of message"
},
"tokenBalance": { "tokenBalance": {
"message": "Your Token Balance is:" "message": "Your Token Balance is:"
}, },
"toSpecific": {
"message": "To:"
},
"total": { "total": {
"message": "Total" "message": "Total"
}, },
@ -509,7 +543,8 @@
"message": "Transfers" "message": "Transfers"
}, },
"troubleTokenBalances": { "troubleTokenBalances": {
"message": "We had trouble loading your token balances. You can view them " "message": "We had trouble loading your token balances. You can view them ",
"description": "Followed by a link (here) to view token balances"
}, },
"typePassword": { "typePassword": {
"message": "Type Your Password" "message": "Type Your Password"
@ -532,6 +567,10 @@
"unknownNetworkId": { "unknownNetworkId": {
"message": "Unknown network ID" "message": "Unknown network ID"
}, },
"usaOnly": {
"message": "USA only",
"description": "Using this exchange is limited to people inside the USA"
},
"usedByClients": { "usedByClients": {
"message": "Used by a variety of different clients" "message": "Used by a variety of different clients"
}, },
@ -548,9 +587,6 @@
"message": "Your signature is being requested" "message": "Your signature is being requested"
}, },
"youSign": { "youSign": {
"message": "You are signing:" "message": "You are signing"
},
"youSignCaps": {
"message": "YOU ARE SIGNING"
} }
} }

View File

@ -1,10 +1,10 @@
{ {
"name": "MetaMask", "name": "__MSG_appName__",
"short_name": "Metamask", "short_name": "__MSG_appName__",
"version": "4.0.10", "version": "4.0.10",
"manifest_version": 2, "manifest_version": 2,
"author": "https://metamask.io", "author": "https://metamask.io",
"description": "Ethereum Browser Extension", "description": "__MSG_appDescription__",
"commands": { "commands": {
"_execute_browser_action": { "_execute_browser_action": {
"suggested_key": { "suggested_key": {

View File

@ -2,6 +2,7 @@ const inherits = require('util').inherits
const Component = require('react').Component const Component = require('react').Component
const h = require('react-hyperscript') const h = require('react-hyperscript')
const connect = require('react-redux').connect const connect = require('react-redux').connect
const t = require('../../../i18n')
import Select from 'react-select' import Select from 'react-select'
// Subviews // Subviews
@ -9,8 +10,8 @@ const JsonImportView = require('./json.js')
const PrivateKeyImportView = require('./private-key.js') const PrivateKeyImportView = require('./private-key.js')
const menuItems = [ const menuItems = [
'Private Key', t('privateKey'),
'JSON File', t('jsonFile'),
] ]
module.exports = connect(mapStateToProps)(AccountImportSubview) module.exports = connect(mapStateToProps)(AccountImportSubview)
@ -70,9 +71,9 @@ AccountImportSubview.prototype.renderImportView = function () {
const current = type || menuItems[0] const current = type || menuItems[0]
switch (current) { switch (current) {
case 'Private Key': case t('privateKey'):
return h(PrivateKeyImportView) return h(PrivateKeyImportView)
case 'JSON File': case t('jsonFile'):
return h(JsonImportView) return h(JsonImportView)
default: default:
return h(JsonImportView) return h(JsonImportView)

View File

@ -50,16 +50,16 @@ JsonImportSubview.prototype.render = function () {
h('div.new-account-create-form__buttons', {}, [ h('div.new-account-create-form__buttons', {}, [
h('button.new-account-create-form__button-cancel', { h('button.new-account-create-form__button-cancel.allcaps', {
onClick: () => this.props.goHome(), onClick: () => this.props.goHome(),
}, [ }, [
t('cancelCaps'), t('cancel'),
]), ]),
h('button.new-account-create-form__button-create', { h('button.new-account-create-form__button-create.allcaps', {
onClick: () => this.createNewKeychain.bind(this), onClick: () => this.createNewKeychain.bind(this),
}, [ }, [
t('importCaps'), t('import'),
]), ]),
]), ]),

View File

@ -43,16 +43,16 @@ PrivateKeyImportView.prototype.render = function () {
h('div.new-account-create-form__buttons', {}, [ h('div.new-account-create-form__buttons', {}, [
h('button.new-account-create-form__button-cancel', { h('button.new-account-create-form__button-cancel.allcaps', {
onClick: () => goHome(), onClick: () => goHome(),
}, [ }, [
t('cancelCaps'), t('cancel'),
]), ]),
h('button.new-account-create-form__button-create', { h('button.new-account-create-form__button-create.allcaps', {
onClick: () => this.createNewKeychain(), onClick: () => this.createNewKeychain(),
}, [ }, [
t('importCaps'), t('import'),
]), ]),
]), ]),

View File

@ -35,16 +35,16 @@ class NewAccountCreateForm extends Component {
h('div.new-account-create-form__buttons', {}, [ h('div.new-account-create-form__buttons', {}, [
h('button.new-account-create-form__button-cancel', { h('button.new-account-create-form__button-cancel.allcaps', {
onClick: () => this.props.goHome(), onClick: () => this.props.goHome(),
}, [ }, [
t('cancelCaps'), t('cancel'),
]), ]),
h('button.new-account-create-form__button-create', { h('button.new-account-create-form__button-create.allcaps', {
onClick: () => this.props.createAccount(newAccountName), onClick: () => this.props.createAccount(newAccountName),
}, [ }, [
t('createCaps'), t('create'),
]), ]),
]), ]),

View File

@ -80,7 +80,7 @@ class AccountDropdowns extends Component {
try { // Sometimes keyrings aren't loaded yet: try { // Sometimes keyrings aren't loaded yet:
const type = keyring.type const type = keyring.type
const isLoose = type !== 'HD Key Tree' const isLoose = type !== 'HD Key Tree'
return isLoose ? h('.keyring-label', t('looseCaps')) : null return isLoose ? h('.keyring-label.allcaps', t('loose')) : null
} catch (e) { return } } catch (e) { return }
} }
@ -155,7 +155,7 @@ class AccountDropdowns extends Component {
fontSize: '24px', fontSize: '24px',
marginBottom: '5px', marginBottom: '5px',
}, },
}, 'Import Account'), }, t('importAccount')),
] ]
), ),
] ]
@ -205,7 +205,7 @@ class AccountDropdowns extends Component {
actions.showQrView(selected, identity ? identity.name : '') actions.showQrView(selected, identity ? identity.name : '')
}, },
}, },
t('qrCode'), t('showQRCode'),
), ),
h( h(
DropdownMenuItem, DropdownMenuItem,

View File

@ -54,7 +54,7 @@ ExportAccountView.prototype.render = function () {
h('p.error', warning), h('p.error', warning),
h('input#exportAccount.sizing-input', { h('input#exportAccount.sizing-input', {
type: 'password', type: 'password',
placeholder: t('confirmPasswordSmall'), placeholder: t('confirmPassword').toLowerCase(),
onKeyPress: this.onExportKeyPress.bind(this), onKeyPress: this.onExportKeyPress.bind(this),
style: { style: {
position: 'relative', position: 'relative',
@ -99,7 +99,7 @@ ExportAccountView.prototype.render = function () {
margin: '0 20px', margin: '0 20px',
}, },
}, [ }, [
h('label', 'Your private key (click to copy):'), h('label', t('copyPrivateKey') + ':'),
h('p.error.cursor-pointer', { h('p.error.cursor-pointer', {
style: { style: {
textOverflow: 'ellipsis', textOverflow: 'ellipsis',
@ -113,13 +113,13 @@ ExportAccountView.prototype.render = function () {
}, plainKey), }, plainKey),
h('button', { h('button', {
onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)), onClick: () => this.props.dispatch(actions.backToAccountDetail(this.props.address)),
}, 'Done'), }, t('done')),
h('button', { h('button', {
style: { style: {
marginLeft: '10px', marginLeft: '10px',
}, },
onClick: () => exportAsFile(`MetaMask ${nickname} Private Key`, plainKey), onClick: () => exportAsFile(`MetaMask ${nickname} Private Key`, plainKey),
}, 'Save as File'), }, t('saveAsFile')),
]) ])
} }
} }

View File

@ -156,6 +156,6 @@ AccountMenu.prototype.indicateIfLoose = function (keyring) {
try { // Sometimes keyrings aren't loaded yet: try { // Sometimes keyrings aren't loaded yet:
const type = keyring.type const type = keyring.type
const isLoose = type !== 'HD Key Tree' const isLoose = type !== 'HD Key Tree'
return isLoose ? h('.keyring-label', t('importedCaps')) : null return isLoose ? h('.keyring-label.allcaps', t('imported')) : null
} catch (e) { return } } catch (e) { return }
} }

View File

@ -4,6 +4,7 @@ const inherits = require('util').inherits
const ethUtil = require('ethereumjs-util') const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN const BN = ethUtil.BN
const extend = require('xtend') const extend = require('xtend')
const t = require('../../i18n')
module.exports = BnAsDecimalInput module.exports = BnAsDecimalInput
@ -136,13 +137,13 @@ BnAsDecimalInput.prototype.constructWarning = function () {
let message = name ? name + ' ' : '' let message = name ? name + ' ' : ''
if (min && max) { if (min && max) {
message += `must be greater than or equal to ${newMin} ${suffix} and less than or equal to ${newMax} ${suffix}.` message += t('betweenMinAndMax', [`${newMin} ${suffix}`, `${newMax} ${suffix}`])
} else if (min) { } else if (min) {
message += `must be greater than or equal to ${newMin} ${suffix}.` message += t('greaterThanMin', [`${newMin} ${suffix}`])
} else if (max) { } else if (max) {
message += `must be less than or equal to ${newMax} ${suffix}.` message += t('lessThanMax', [`${newMax} ${suffix}`])
} else { } else {
message += 'Invalid input.' message += t('invalidInput')
} }
return message return message

View File

@ -144,7 +144,7 @@ BuyButtonSubview.prototype.primarySubview = function () {
case '4': case '4':
case '42': case '42':
const networkName = networkNames[network] const networkName = networkNames[network]
const label = `${networkName} Test Faucet` const label = `${networkName} ${t('testFaucet')}`
return ( return (
h('div.flex-column', { h('div.flex-column', {
style: { style: {
@ -204,8 +204,8 @@ BuyButtonSubview.prototype.mainnetSubview = function () {
'ShapeShift', 'ShapeShift',
], ],
subtext: { subtext: {
'Coinbase': 'Crypto/FIAT (USA only)', 'Coinbase': `${t('crypto')}/${t('fiat')} (${t('usaOnly')})`,
'ShapeShift': 'Crypto', 'ShapeShift': t('crypto'),
}, },
onClick: this.radioHandler.bind(this), onClick: this.radioHandler.bind(this),
}), }),

View File

@ -283,13 +283,13 @@ CustomizeGasModal.prototype.render = function () {
}, [t('revert')]), }, [t('revert')]),
h('div.send-v2__customize-gas__buttons', [ h('div.send-v2__customize-gas__buttons', [
h('div.send-v2__customize-gas__cancel', { h('div.send-v2__customize-gas__cancel.allcaps', {
onClick: this.props.hideModal, onClick: this.props.hideModal,
}, [t('cancelCaps')]), }, [t('cancel')]),
h(`div.send-v2__customize-gas__save${error ? '__error' : ''}`, { h(`div.send-v2__customize-gas__save${error ? '__error' : ''}.allcaps`, {
onClick: () => !error && this.save(gasPrice, gasLimit, gasTotal), onClick: () => !error && this.save(gasPrice, gasLimit, gasTotal),
}, [t('saveCaps')]), }, [t('save')]),
]), ]),
]), ]),

View File

@ -122,7 +122,7 @@ class AccountDropdowns extends Component {
flex: '3 3 auto', flex: '3 3 auto',
}, },
}, [ }, [
h('span.account-dropdown-edit-button', { h('span.account-dropdown-edit-button.allcaps', {
style: { style: {
fontSize: '16px', fontSize: '16px',
}, },
@ -130,7 +130,7 @@ class AccountDropdowns extends Component {
actions.showEditAccountModal(identity) actions.showEditAccountModal(identity)
}, },
}, [ }, [
t('editCaps'), t('edit'),
]), ]),
]), ]),
@ -160,7 +160,7 @@ class AccountDropdowns extends Component {
try { // Sometimes keyrings aren't loaded yet: try { // Sometimes keyrings aren't loaded yet:
const type = keyring.type const type = keyring.type
const isLoose = type !== 'HD Key Tree' const isLoose = type !== 'HD Key Tree'
return isLoose ? h('.keyring-label', t('looseCaps')) : null return isLoose ? h('.keyring-label.allcaps', t('loose')) : null
} catch (e) { return } } catch (e) { return }
} }
@ -303,7 +303,7 @@ class AccountDropdowns extends Component {
menuItemStyles, menuItemStyles,
), ),
}, },
t('accDetails'), t('accountDetails'),
), ),
h( h(
DropdownMenuItem, DropdownMenuItem,

View File

@ -127,11 +127,11 @@ HexAsDecimalInput.prototype.constructWarning = function () {
let message = name ? name + ' ' : '' let message = name ? name + ' ' : ''
if (min && max) { if (min && max) {
message += `must be greater than or equal to ${min} and less than or equal to ${max}.` message += t('betweenMinAndMax', [min, max])
} else if (min) { } else if (min) {
message += `must be greater than or equal to ${min}.` message += t('greaterThanMin', [min])
} else if (max) { } else if (max) {
message += `must be less than or equal to ${max}.` message += t('lessThanMax', [max])
} else { } else {
message += t('invalidInput') message += t('invalidInput')
} }

View File

@ -70,7 +70,7 @@ AccountDetailsModal.prototype.render = function () {
// Holding on redesign for Export Private Key functionality // Holding on redesign for Export Private Key functionality
h('button.btn-clear.account-modal__button', { h('button.btn-clear.account-modal__button', {
onClick: () => showExportPrivateKeyModal(), onClick: () => showExportPrivateKeyModal(),
}, t('exportPrivateKeyLower')), }, t('exportPrivateKey')),
]) ])
} }

View File

@ -14,7 +14,9 @@ const COINBASE_ROW_TEXT = t('buyCoinbaseExplainer')
const SHAPESHIFT_ROW_TITLE = t('depositShapeShift') const SHAPESHIFT_ROW_TITLE = t('depositShapeShift')
const SHAPESHIFT_ROW_TEXT = t('depositShapeShiftExplainer') const SHAPESHIFT_ROW_TEXT = t('depositShapeShiftExplainer')
const FAUCET_ROW_TITLE = t('testFaucet') const FAUCET_ROW_TITLE = t('testFaucet')
const facuetRowText = networkName => `Get Ether from a faucet for the ${networkName}` const facuetRowText = (networkName) => {
return t('getEtherFromFaucet', [networkName])
}
function mapStateToProps (state) { function mapStateToProps (state) {
return { return {

View File

@ -61,7 +61,7 @@ EditAccountNameModal.prototype.render = function () {
value: this.state.inputText, value: this.state.inputText,
}, []), }, []),
h('button.btn-clear.edit-account-name-modal-save-button', { h('button.btn-clear.edit-account-name-modal-save-button.allcaps', {
onClick: () => { onClick: () => {
if (this.state.inputText.length !== 0) { if (this.state.inputText.length !== 0) {
saveAccountLabel(identity.address, this.state.inputText) saveAccountLabel(identity.address, this.state.inputText)
@ -70,7 +70,7 @@ EditAccountNameModal.prototype.render = function () {
}, },
disabled: this.state.inputText.length === 0, disabled: this.state.inputText.length === 0,
}, [ }, [
t('saveCaps'), t('save'),
]), ]),
]), ]),

View File

@ -59,15 +59,15 @@ HideTokenConfirmationModal.prototype.render = function () {
]), ]),
h('div.hide-token-confirmation__buttons', {}, [ h('div.hide-token-confirmation__buttons', {}, [
h('button.btn-cancel.hide-token-confirmation__button', { h('button.btn-cancel.hide-token-confirmation__button.allcaps', {
onClick: () => hideModal(), onClick: () => hideModal(),
}, [ }, [
t('cancelCaps'), t('cancel'),
]), ]),
h('button.btn-clear.hide-token-confirmation__button', { h('button.btn-clear.hide-token-confirmation__button.allcaps', {
onClick: () => hideToken(address), onClick: () => hideToken(address),
}, [ }, [
t('hideCaps'), t('hide'),
]), ]),
]), ]),
]), ]),

View File

@ -12,7 +12,7 @@ class NewAccountModal extends Component {
const newAccountNumber = numberOfExistingAccounts + 1 const newAccountNumber = numberOfExistingAccounts + 1
this.state = { this.state = {
newAccountName: `Account ${newAccountNumber}`, newAccountName: `${t('account')} ${newAccountNumber}`,
} }
} }
@ -53,11 +53,11 @@ class NewAccountModal extends Component {
}, },
}, t('importAnAccount')), }, t('importAnAccount')),
h('div.new-account-modal-content.button', {}, [ h('div.new-account-modal-content.button.allcaps', {}, [
h('button.btn-clear', { h('button.btn-clear', {
onClick: () => this.props.createAccount(newAccountName), onClick: () => this.props.createAccount(newAccountName),
}, [ }, [
t('saveCaps'), t('save'),
]), ]),
]), ]),
]), ]),

View File

@ -40,7 +40,7 @@ PendingMsgDetails.prototype.render = function () {
// message data // message data
h('.tx-data.flex-column.flex-justify-center.flex-grow.select-none', [ h('.tx-data.flex-column.flex-justify-center.flex-grow.select-none', [
h('.flex-column.flex-space-between', [ h('.flex-column.flex-space-between', [
h('label.font-small', t('messageCaps')), h('label.font-small.allcaps', t('message')),
h('span.font-small', msgParams.data), h('span.font-small', msgParams.data),
]), ]),
]), ]),

View File

@ -46,7 +46,7 @@ PendingMsgDetails.prototype.render = function () {
height: '260px', height: '260px',
}, },
}, [ }, [
h('label.font-small', { style: { display: 'block' } }, t('messageCaps')), h('label.font-small.allcaps', { style: { display: 'block' } }, t('message')),
h(BinaryRenderer, { h(BinaryRenderer, {
value: data, value: data,
style: { style: {

View File

@ -56,7 +56,7 @@ ConfirmDeployContract.prototype.onSubmit = function (event) {
if (valid && this.verifyGasParams()) { if (valid && this.verifyGasParams()) {
this.props.sendTransaction(txMeta, event) this.props.sendTransaction(txMeta, event)
} else { } else {
this.props.dispatch(actions.displayWarning('Invalid Gas Parameters')) this.props.dispatch(actions.displayWarning(t('invalidGasParams')))
this.setState({ submitting: false }) this.setState({ submitting: false })
} }
} }
@ -272,9 +272,9 @@ ConfirmDeployContract.prototype.render = function () {
// Main Send token Card // Main Send token Card
h('div.confirm-screen-wrapper.flex-column.flex-grow', [ h('div.confirm-screen-wrapper.flex-column.flex-grow', [
h('h3.flex-center.confirm-screen-header', [ h('h3.flex-center.confirm-screen-header', [
h('button.confirm-screen-back-button', { h('button.confirm-screen-back-button.allcaps', {
onClick: () => backToAccountDetail(selectedAddress), onClick: () => backToAccountDetail(selectedAddress),
}, 'BACK'), }, t('back')),
h('div.confirm-screen-title', t('confirmContract')), h('div.confirm-screen-title', t('confirmContract')),
h('div.confirm-screen-header-tip'), h('div.confirm-screen-header-tip'),
]), ]),
@ -336,12 +336,12 @@ ConfirmDeployContract.prototype.render = function () {
onSubmit: this.onSubmit, onSubmit: this.onSubmit,
}, [ }, [
// Cancel Button // Cancel Button
h('div.cancel.btn-light.confirm-screen-cancel-button', { h('div.cancel.btn-light.confirm-screen-cancel-button.allcaps', {
onClick: (event) => this.cancel(event, txMeta), onClick: (event) => this.cancel(event, txMeta),
}, t('cancelCaps')), }, t('cancel')),
// Accept Button // Accept Button
h('button.confirm-screen-confirm-button', [t('confirmCaps')]), h('button.confirm-screen-confirm-button.allcaps', [t('confirm')]),
]), ]),
]) ])

View File

@ -392,15 +392,15 @@ ConfirmSendEther.prototype.render = function () {
onSubmit: this.onSubmit, onSubmit: this.onSubmit,
}, [ }, [
// Cancel Button // Cancel Button
h('div.cancel.btn-light.confirm-screen-cancel-button', { h('div.cancel.btn-light.confirm-screen-cancel-button.allcaps', {
onClick: (event) => { onClick: (event) => {
clearSend() clearSend()
this.cancel(event, txMeta) this.cancel(event, txMeta)
}, },
}, t('cancelCaps')), }, t('cancel')),
// Accept Button // Accept Button
h('button.confirm-screen-confirm-button', [t('confirmCaps')]), h('button.confirm-screen-confirm-button.allcaps', [t('confirm')]),
]), ]),
]) ])
) )

View File

@ -286,7 +286,7 @@ ConfirmSendToken.prototype.renderTotalPlusGas = function () {
h('div.confirm-screen-section-column', [ h('div.confirm-screen-section-column', [
h('div.confirm-screen-row-info', `${tokenAmount} ${symbol}`), h('div.confirm-screen-row-info', `${tokenAmount} ${symbol}`),
h('div.confirm-screen-row-detail', `+ ${fiatGas} ${currentCurrency} Gas`), h('div.confirm-screen-row-detail', `+ ${fiatGas} ${currentCurrency} ${t('gas')}`),
]), ]),
]) ])
) )
@ -315,10 +315,10 @@ ConfirmSendToken.prototype.render = function () {
// Main Send token Card // Main Send token Card
h('div.confirm-screen-wrapper.flex-column.flex-grow', [ h('div.confirm-screen-wrapper.flex-column.flex-grow', [
h('h3.flex-center.confirm-screen-header', [ h('h3.flex-center.confirm-screen-header', [
h('button.btn-clear.confirm-screen-back-button', { h('button.btn-clear.confirm-screen-back-button.allcaps', {
onClick: () => editTransaction(txMeta), onClick: () => editTransaction(txMeta),
}, t('editCaps')), }, t('edit')),
h('div.confirm-screen-title', 'Confirm Transaction'), h('div.confirm-screen-title', t('confirmTransaction')),
h('div.confirm-screen-header-tip'), h('div.confirm-screen-header-tip'),
]), ]),
h('div.flex-row.flex-center.confirm-screen-identicons', [ h('div.flex-row.flex-center.confirm-screen-identicons', [
@ -386,12 +386,12 @@ ConfirmSendToken.prototype.render = function () {
onSubmit: this.onSubmit, onSubmit: this.onSubmit,
}, [ }, [
// Cancel Button // Cancel Button
h('div.cancel.btn-light.confirm-screen-cancel-button', { h('div.cancel.btn-light.confirm-screen-cancel-button.allcaps', {
onClick: (event) => this.cancel(event, txMeta), onClick: (event) => this.cancel(event, txMeta),
}, t('cancelCaps')), }, t('cancel')),
// Accept Button // Accept Button
h('button.confirm-screen-confirm-button', [t('confirmCaps')]), h('button.confirm-screen-confirm-button.allcaps', [t('confirm')]),
]), ]),

View File

@ -46,7 +46,7 @@ PendingMsgDetails.prototype.render = function () {
height: '260px', height: '260px',
}, },
}, [ }, [
h('label.font-small', { style: { display: 'block' } }, t('youSignCaps')), h('label.font-small.allcaps', { style: { display: 'block' } }, t('youSign')),
h(TypedMessageRenderer, { h(TypedMessageRenderer, {
value: data, value: data,
style: { style: {

View File

@ -34,12 +34,12 @@ PendingMsg.prototype.render = function () {
// sign + cancel // sign + cancel
h('.flex-row.flex-space-around', [ h('.flex-row.flex-space-around', [
h('button', { h('button.allcaps', {
onClick: state.cancelTypedMessage, onClick: state.cancelTypedMessage,
}, t('cancelCaps')), }, t('cancel')),
h('button', { h('button.allcaps', {
onClick: state.signTypedMessage, onClick: state.signTypedMessage,
}, t('signCaps')), }, t('sign')),
]), ]),
]) ])

View File

@ -234,7 +234,7 @@ SendTokenScreen.prototype.renderToAddressInput = function () {
'send-screen-input-wrapper--error': errorMessage, 'send-screen-input-wrapper--error': errorMessage,
}), }),
}, [ }, [
h('div', [t('toSpecific')]), h('div', [t('to') + ':']),
h('input.large-input.send-screen-input', { h('input.large-input.send-screen-input', {
name: 'address', name: 'address',
list: 'addresses', list: 'addresses',
@ -291,7 +291,7 @@ SendTokenScreen.prototype.renderAmountInput = function () {
}), }),
}, [ }, [
h('div.send-screen-amount-labels', [ h('div.send-screen-amount-labels', [
h('span', ['Amount']), h('span', [t('amount')]),
h(CurrencyToggle, { h(CurrencyToggle, {
currentCurrency: tokenExchangeRate ? selectedCurrency : 'USD', currentCurrency: tokenExchangeRate ? selectedCurrency : 'USD',
currencies: tokenExchangeRate ? [ symbol, 'USD' ] : [], currencies: tokenExchangeRate ? [ symbol, 'USD' ] : [],
@ -356,7 +356,7 @@ SendTokenScreen.prototype.renderGasInput = function () {
}), }),
h('div.send-screen-gas-labels', {}, [ h('div.send-screen-gas-labels', {}, [
h('span', [ h('i.fa.fa-bolt'), t('gasFeeSpecific')]), h('span', [ h('i.fa.fa-bolt'), t('gasFee') + ':']),
h('span', [t('whatsThis')]), h('span', [t('whatsThis')]),
]), ]),
h('div.large-input.send-screen-gas-input', [ h('div.large-input.send-screen-gas-input', [

View File

@ -237,7 +237,7 @@ ShapeshiftForm.prototype.render = function () {
className: btnClass, className: btnClass,
disabled: !token, disabled: !token,
onClick: () => this.onBuyWithShapeShift(), onClick: () => this.onBuyWithShapeShift(),
}, [t('buyButton')]), }, [t('buy')]),
]) ])
} }

View File

@ -81,7 +81,7 @@ ShiftListItem.prototype.renderUtilComponents = function () {
value: this.props.depositAddress, value: this.props.depositAddress,
}), }),
h(Tooltip, { h(Tooltip, {
title: 'QR Code', title: t('qrCode'),
}, [ }, [
h('i.fa.fa-qrcode.pointer.pop-hover', { h('i.fa.fa-qrcode.pointer.pop-hover', {
onClick: () => props.dispatch(actions.reshowQrCode(props.depositAddress, props.depositType)), onClick: () => props.dispatch(actions.reshowQrCode(props.depositAddress, props.depositType)),
@ -141,7 +141,7 @@ ShiftListItem.prototype.renderInfo = function () {
color: '#ABA9AA', color: '#ABA9AA',
width: '100%', width: '100%',
}, },
}, `${props.depositType} to ETH via ShapeShift`), }, t('toETHviaShapeShift', [props.depositType])),
h('div', t('noDeposits')), h('div', t('noDeposits')),
h('div', { h('div', {
style: { style: {
@ -164,7 +164,7 @@ ShiftListItem.prototype.renderInfo = function () {
color: '#ABA9AA', color: '#ABA9AA',
width: '100%', width: '100%',
}, },
}, `${props.depositType} to ETH via ShapeShift`), }, t('toETHviaShapeShift', [props.depositType])),
h('div', t('conversionProgress')), h('div', t('conversionProgress')),
h('div', { h('div', {
style: { style: {

View File

@ -76,7 +76,7 @@ SignatureRequest.prototype.renderAccountDropdown = function () {
return h('div.request-signature__account', [ return h('div.request-signature__account', [
h('div.request-signature__account-text', [t('account')]), h('div.request-signature__account-text', [t('account') + ':']),
h(AccountDropdownMini, { h(AccountDropdownMini, {
selectedAccount, selectedAccount,
@ -155,7 +155,7 @@ SignatureRequest.prototype.msgHexToText = function (hex) {
SignatureRequest.prototype.renderBody = function () { SignatureRequest.prototype.renderBody = function () {
let rows let rows
let notice = t('youSign') let notice = t('youSign') + ':'
const { txData } = this.props const { txData } = this.props
const { type, msgParams: { data } } = txData const { type, msgParams: { data } } = txData
@ -225,10 +225,10 @@ SignatureRequest.prototype.renderFooter = function () {
return h('div.request-signature__footer', [ return h('div.request-signature__footer', [
h('button.request-signature__footer__cancel-button', { h('button.request-signature__footer__cancel-button', {
onClick: cancel, onClick: cancel,
}, t('cancelCaps')), }, t('cancel')),
h('button.request-signature__footer__sign-button', { h('button.request-signature__footer__sign-button', {
onClick: sign, onClick: sign,
}, t('signCaps')), }, t('sign')),
]) ])
} }

View File

@ -69,25 +69,25 @@ TxView.prototype.renderButtons = function () {
return !selectedToken return !selectedToken
? ( ? (
h('div.flex-row.flex-center.hero-balance-buttons', [ h('div.flex-row.flex-center.hero-balance-buttons', [
h('button.btn-clear.hero-balance-button', { h('button.btn-clear.hero-balance-button.allcaps', {
onClick: () => showModal({ onClick: () => showModal({
name: 'DEPOSIT_ETHER', name: 'DEPOSIT_ETHER',
}), }),
}, t('depositButton')), }, t('deposit')),
h('button.btn-clear.hero-balance-button', { h('button.btn-clear.hero-balance-button', {
style: { style: {
marginLeft: '0.8em', marginLeft: '0.8em',
}, },
onClick: showSendPage, onClick: showSendPage,
}, t('sendButton')), }, t('send')),
]) ])
) )
: ( : (
h('div.flex-row.flex-center.hero-balance-buttons', [ h('div.flex-row.flex-center.hero-balance-buttons', [
h('button.btn-clear.hero-balance-button', { h('button.btn-clear.hero-balance-button', {
onClick: showSendTokenPage, onClick: showSendTokenPage,
}, t('sendButton')), }, t('send')),
]) ])
) )
} }

View File

@ -114,7 +114,7 @@ WalletView.prototype.render = function () {
onClick: hideSidebar, onClick: hideSidebar,
}), }),
h('div.wallet-view__keyring-label', isLoose ? t('importedCaps') : ''), h('div.wallet-view__keyring-label.allcaps', isLoose ? t('imported') : ''),
h('div.flex-column.flex-center.wallet-view__name-container', { h('div.flex-column.flex-center.wallet-view__name-container', {
style: { margin: '0 auto' }, style: { margin: '0 auto' },
@ -131,7 +131,7 @@ WalletView.prototype.render = function () {
selectedIdentity.name, selectedIdentity.name,
]), ]),
h('button.btn-clear.wallet-view__details-button', t('detailsCaps')), h('button.btn-clear.wallet-view__details-button.allcaps', t('details')),
]), ]),
]), ]),

View File

@ -69,3 +69,7 @@ textarea.large-input {
input.large-input { input.large-input {
height: 36px; height: 36px;
} }
.allcaps {
text-transform: uppercase;
}

View File

@ -11,9 +11,20 @@ if ((chrome && chrome.i18n && chrome.i18n.getMessage) ||
} else { } else {
// fallback function // fallback function
console.warn('browser.i18n API not available?') console.warn('browser.i18n API not available?')
let msg = require('../app/_locales/en/messages.json') const msg = require('../app/_locales/en/messages.json')
getMessage = function (key) { getMessage = function (key, substitutions) {
return msg[key].message if (!msg[key]) {
console.error(key)
throw new Error(key)
}
let phrase = msg[key].message
if (substitutions && substitutions.length) {
phrase = phrase.replace(/\$1/g, substitutions[0])
if (substitutions.length > 1) {
phrase = phrase.replace(/\$2/g, substitutions[1])
}
}
return phrase
} }
} }