add intl messages part 1

pull/402/head^2
slowbackspace 5 years ago
parent 15fb502adc
commit dd99ab69d3

@ -4,9 +4,11 @@ import Link from 'components/Link';
import Button from 'components/Button'; import Button from 'components/Button';
import P from 'components/Paragraph'; import P from 'components/Paragraph';
import { H2 } from 'components/Heading'; import { H2 } from 'components/Heading';
import { FormattedMessage } from 'react-intl';
import ChromeImage from 'images/browser-chrome.png'; import ChromeImage from 'images/browser-chrome.png';
import FirefoxImage from 'images/browser-firefox.png'; import FirefoxImage from 'images/browser-firefox.png';
import l10nMessages from './index.messages';
const Wrapper = styled.div` const Wrapper = styled.div`
padding: 24px 0px; padding: 24px 0px;
@ -32,21 +34,21 @@ const Browser = styled.div`
const BrowserNotSupported = () => ( const BrowserNotSupported = () => (
<Wrapper> <Wrapper>
<H2>Your browser is not supported</H2> <H2><FormattedMessage {...l10nMessages.TR_YOUR_BROWSER_IS_NOT_SUPPORTED} /></H2>
<P>Please choose one of the supported browsers</P> <P><FormattedMessage {...l10nMessages.TR_PLEASE_CHOOSE_ONE_OF_THE_SUPPORTED} /></P>
<ChooseBrowserWrapper> <ChooseBrowserWrapper>
<Browser> <Browser>
<BrowserLogo src={ChromeImage} /> <BrowserLogo src={ChromeImage} />
<P isSmaller>Google Chrome</P> <P isSmaller>Google Chrome</P>
<Link href="https://www.google.com/chrome/"> <Link href="https://www.google.com/chrome/">
<Button>Get Chrome</Button> <Button><FormattedMessage {...l10nMessages.TR_GET_CHROME} /></Button>
</Link> </Link>
</Browser> </Browser>
<Browser> <Browser>
<BrowserLogo src={FirefoxImage} /> <BrowserLogo src={FirefoxImage} />
<P isSmaller>Mozzila Firefox</P> <P isSmaller>Mozzila Firefox</P>
<Link href="https://www.mozilla.org/en-US/firefox/new/"> <Link href="https://www.mozilla.org/en-US/firefox/new/">
<Button>Get Firefox</Button> <Button><FormattedMessage {...l10nMessages.TR_GET_FIREFOX} /></Button>
</Link> </Link>
</Browser> </Browser>

@ -0,0 +1,24 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_YOUR_BROWSER_IS_NOT_SUPPORTED: {
id: 'TR_YOUR_BROWSER_IS_NOT_SUPPORTED',
defaultMessage: 'Your browser is not supported',
},
TR_PLEASE_CHOOSE_ONE_OF_THE_SUPPORTED: {
id: 'TR_PLEASE_CHOOSE_ONE_OF_THE_SUPPORTED',
defaultMessage: 'Please choose one of the supported browsers',
},
TR_GET_CHROME: {
id: 'TR_GET_CHROME',
defaultMessage: 'Get Chrome',
},
TR_GET_FIREFOX: {
id: 'TR_GET_FIREFOX',
defaultMessage: 'Get Firefox',
},
});
export default definedMessages;

@ -3,6 +3,7 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import styled, { keyframes } from 'styled-components'; import styled, { keyframes } from 'styled-components';
import TrezorConnect from 'trezor-connect'; import TrezorConnect from 'trezor-connect';
import l10nCommonMessages from 'views/common.messages';
import P from 'components/Paragraph'; import P from 'components/Paragraph';
import Button from 'components/Button'; import Button from 'components/Button';
import { H2 } from 'components/Heading'; import { H2 } from 'components/Heading';
@ -149,7 +150,7 @@ class ConnectDevice extends PureComponent<Props> {
<React.Fragment> <React.Fragment>
<StyledP><FormattedMessage {...l10nMessages.TR_AND} /></StyledP> <StyledP><FormattedMessage {...l10nMessages.TR_AND} /></StyledP>
<StyledButton isWebUsb> <StyledButton isWebUsb>
<FormattedMessage {...l10nMessages.TR_CHECK_FOR_DEVICES} /> <FormattedMessage {...l10nCommonMessages.TR_CHECK_FOR_DEVICES} />
</StyledButton> </StyledButton>
</React.Fragment> </React.Fragment>
)} )}

@ -19,10 +19,6 @@ const definedMessages: Messages = defineMessages({
id: 'TR_AND', id: 'TR_AND',
defaultMessage: 'and', defaultMessage: 'and',
}, },
TR_CHECK_FOR_DEVICES: {
id: 'TR_CHECK_FOR_DEVICES',
defaultMessage: 'Check for devices',
},
TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING: { TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING: {
id: 'TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING', id: 'TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING',
defaultMessage: 'Device not recognized? Try installing the {link}.', defaultMessage: 'Device not recognized? Try installing the {link}.',

@ -6,7 +6,7 @@ import colors from 'config/colors';
import { FONT_SIZE, FONT_WEIGHT } from 'config/variables'; import { FONT_SIZE, FONT_WEIGHT } from 'config/variables';
import { Select } from 'components/Select'; import { Select } from 'components/Select';
import Link from 'components/Link'; import Link from 'components/Link';
import { H1, H2 } from 'components/Heading'; import { H1 } from 'components/Heading';
import Button from 'components/Button'; import Button from 'components/Button';
import P from 'components/Paragraph'; import P from 'components/Paragraph';
import Icon from 'components/Icon'; import Icon from 'components/Icon';
@ -14,7 +14,9 @@ import ICONS from 'config/icons';
import LandingWrapper from 'views/Landing/components/LandingWrapper'; import LandingWrapper from 'views/Landing/components/LandingWrapper';
import * as RouterActions from 'actions/RouterActions'; import * as RouterActions from 'actions/RouterActions';
import { FormattedMessage } from 'react-intl';
import type { State as TrezorConnectState } from 'reducers/TrezorConnectReducer'; import type { State as TrezorConnectState } from 'reducers/TrezorConnectReducer';
import l10nMessages from './index.messages';
type InstallTarget = { type InstallTarget = {
value: string; value: string;
@ -112,17 +114,17 @@ const GoBack = styled.span`
} }
`; `;
const Ol = styled.ul` // const Ol = styled.ul`
margin: 0 auto; // margin: 0 auto;
color: ${colors.TEXT_SECONDARY}; // color: ${colors.TEXT_SECONDARY};
font-size: ${FONT_SIZE.BIG}; // font-size: ${FONT_SIZE.BIG};
padding: 0px 0 15px 25px; // padding: 0px 0 15px 25px;
text-align: left; // text-align: left;
`; // `;
const Li = styled.li` // const Li = styled.li`
text-align: justify; // text-align: justify;
`; // `;
class InstallBridge extends PureComponent<Props, State> { class InstallBridge extends PureComponent<Props, State> {
constructor(props: Props) { constructor(props: Props) {
@ -161,7 +163,7 @@ class InstallBridge extends PureComponent<Props, State> {
<Wrapper> <Wrapper>
<Top> <Top>
<TitleHeader>Trezor Bridge<Version>{this.state.currentVersion}</Version></TitleHeader> <TitleHeader>Trezor Bridge<Version>{this.state.currentVersion}</Version></TitleHeader>
<P>New communication tool to facilitate the connection between your Trezor and your internet browser.</P> <P><FormattedMessage {...l10nMessages.TR_NEW_COMMUNICATION_TOOL} /></P>
<Download> <Download>
<SelectWrapper <SelectWrapper
isSearchable={false} isSearchable={false}
@ -177,30 +179,39 @@ class InstallBridge extends PureComponent<Props, State> {
color={colors.WHITE} color={colors.WHITE}
size={30} size={30}
/> />
Download latest Bridge {this.state.latestVersion} <FormattedMessage {...l10nMessages.TR_DOWNLOAD_LATEST_BRIDGE} values={{ version: this.state.latestVersion }} />
</DownloadBridgeButton> </DownloadBridgeButton>
</Link> </Link>
</Download> </Download>
<H2>Changelog</H2> {/* <H2><FormattedMessage {...l10nMessages.TR_CHANGELOG} /></H2>
<Ol> <Ol>
{this.props.transport.bridge.changelog.map(entry => ( {this.props.transport.bridge.changelog.map(entry => (
<Li key={entry}>{entry}</Li> <Li key={entry}>{entry}</Li>
))} ))}
</Ol> </Ol> */}
<P isSmaller> <P isSmaller>
<LearnMoreText>Learn more about latest versions in</LearnMoreText> <LearnMoreText>
<FormattedMessage
{...l10nMessages.TR_LEARN_MORE_ABOUT_LATEST_VERSION}
values={{
TR_CHANGELOG: (
<Link <Link
href="https://github.com/trezor/trezord-go/blob/master/CHANGELOG.md" href="https://github.com/trezor/trezord-go/blob/master/CHANGELOG.md"
isGreen isGreen
>Changelog >
<FormattedMessage {...l10nMessages.TR_CHANGELOG} />
</Link> </Link>
),
}}
/>
</LearnMoreText>
</P> </P>
<P> <P>
{target.signature && ( {target.signature && (
<Link <Link
href={this.state.uri + target.signature} href={this.state.uri + target.signature}
isGreen isGreen
>Check PGP signature ><FormattedMessage {...l10nMessages.TR_CHECK_PGP_SIGNATURE} />
</Link> </Link>
)} )}
</P> </P>
@ -208,8 +219,8 @@ class InstallBridge extends PureComponent<Props, State> {
<Bottom> <Bottom>
{this.props.transport.type && ( {this.props.transport.type && (
<P> <P>
No, i dont want to upgrade Bridge now<br /> <FormattedMessage {...l10nMessages.TR_DONT_UPGRADE_BRIDGE} /><br />
Take me <GoBack onClick={() => this.props.selectFirstAvailableDevice()}>back to the wallet</GoBack> <GoBack onClick={() => this.props.selectFirstAvailableDevice()}><FormattedMessage {...l10nMessages.TR_TAKE_ME_BACK_TO_WALLET} /></GoBack>
</P> </P>
)} )}
</Bottom> </Bottom>

@ -0,0 +1,37 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_NEW_COMMUNICATION_TOOL: {
id: 'TR_NEW_COMMUNICATION_TOOL',
defaultMessage: 'New communication tool to facilitate the connection between your Trezor and your internet browser.',
},
TR_DOWNLOAD_LATEST_BRIDGE: {
id: 'TR_DOWNLOAD_LATEST_BRIDGE',
defaultMessage: 'Download latest Bridge {version}',
},
TR_LEARN_MORE_ABOUT_LATEST_VERSION: {
id: 'TR_LEARN_MORE_ABOUT_LATEST_VERSION',
defaultMessage: 'Learn more about latest version in {TR_CHANGELOG}.',
},
TR_CHANGELOG: {
id: 'TR_CHANGELOG',
defaultMessage: 'Changelog',
description: 'Part of the sentence: Learn more about latest version in {TR_CHANGELOG}.',
},
TR_CHECK_PGP_SIGNATURE: {
id: 'TR_CHECK_PGP_SIGNATURE',
defaultMessage: 'Check PGP signature',
},
TR_DONT_UPGRADE_BRIDGE: {
id: 'TR_DONT_UPGRADE_BRIDGE',
defaultMessage: 'No, I don\'t want to upgrade Bridge now',
},
TR_TAKE_ME_BACK_TO_WALLET: {
id: 'TR_TAKE_ME_BACK_TO_WALLET',
defaultMessage: 'Take me back to the wallet',
},
});
export default definedMessages;

@ -9,6 +9,10 @@ import Button from 'components/Button';
import Link from 'components/Link'; import Link from 'components/Link';
import CoinLogo from 'components/images/CoinLogo'; import CoinLogo from 'components/images/CoinLogo';
import { FormattedMessage } from 'react-intl';
import l10nMessages from './index.messages';
const getInfoUrl = (networkShortcut: ?string) => { const getInfoUrl = (networkShortcut: ?string) => {
const urls = { const urls = {
default: 'https://wiki.trezor.io', default: 'https://wiki.trezor.io',
@ -54,13 +58,14 @@ const Message = styled(Paragraph)`
`; `;
const FirmwareUnsupported = (props: Props) => ( const FirmwareUnsupported = (props: Props) => (
//TODO: localization
<Wrapper> <Wrapper>
<Row> <Row>
{props.networkShortcut && <CoinLogoWrapper><StyledCoinLogo standalone network={props.networkShortcut} /></CoinLogoWrapper>} {props.networkShortcut && <CoinLogoWrapper><StyledCoinLogo standalone network={props.networkShortcut} /></CoinLogoWrapper>}
<H1>{props.title}</H1> <H1>{props.title}</H1>
<Message>{props.message}</Message> <Message>{props.message}</Message>
<Link href={getInfoUrl(props.networkShortcut)}> <Link href={getInfoUrl(props.networkShortcut)}>
<Button>Find out more info</Button> <Button><FormattedMessage {...l10nMessages.TR_FIND_OUT_MORE_INFO} /></Button>
</Link> </Link>
</Row> </Row>
</Wrapper> </Wrapper>

@ -0,0 +1,16 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_FIND_OUT_MORE_INFO: {
id: 'TR_FIND_OUT_MORE_INFO',
defaultMessage: 'Find out more info',
},
TR_MODEL_DOES_NOT_SUPPORT_COIN: {
id: 'TR_MODEL_DOES_NOT_SUPPORT_COIN',
defaultMessage: 'The coin {coin} is not supported by your Trezor model.',
},
});
export default definedMessages;

@ -12,8 +12,11 @@ import colors from 'config/colors';
import type { State } from 'flowtype'; import type { State } from 'flowtype';
import FirmwareUpdate from 'views/Wallet/views/FirmwareUpdate'; import FirmwareUpdate from 'views/Wallet/views/FirmwareUpdate';
import { FormattedMessage } from 'react-intl';
import FirmwareUnsupported from './components/FirmwareUnsupported'; import FirmwareUnsupported from './components/FirmwareUnsupported';
import l10nMessages from './index.messages';
type Props = { type Props = {
children?: React.Node, children?: React.Node,
isLoading?: boolean, isLoading?: boolean,
@ -81,7 +84,7 @@ const Content = ({
<Loading> <Loading>
<Row> <Row>
{loader.type === 'progress' && <Loader size={30} />} {loader.type === 'progress' && <Loader size={30} />}
<Title type={loader.type}>{loader.title || 'Initializing accounts'}</Title> <Title type={loader.type}>{loader.title || <FormattedMessage {...l10nMessages.TR_INITIALIZING_ACCOUNTS} />}</Title>
</Row> </Row>
{loader.message && <Message>{loader.message}</Message>} {loader.message && <Message>{loader.message}</Message>}
</Loading> </Loading>

@ -0,0 +1,12 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_INITIALIZING_ACCOUNTS: {
id: 'TR_INITIALIZING_ACCOUNTS',
defaultMessage: 'Initializing accounts',
},
});
export default definedMessages;

@ -8,6 +8,7 @@ import styled, { css } from 'styled-components';
import * as stateUtils from 'reducers/utils'; import * as stateUtils from 'reducers/utils';
import Tooltip from 'components/Tooltip'; import Tooltip from 'components/Tooltip';
import ICONS from 'config/icons'; import ICONS from 'config/icons';
import { FormattedMessage } from 'react-intl';
import { NavLink } from 'react-router-dom'; import { NavLink } from 'react-router-dom';
import { findDeviceAccounts } from 'reducers/AccountsReducer'; import { findDeviceAccounts } from 'reducers/AccountsReducer';
@ -19,6 +20,8 @@ import type { Accounts } from 'flowtype';
import type { Props } from '../common'; import type { Props } from '../common';
import Row from '../Row'; import Row from '../Row';
import RowCoin from '../RowCoin'; import RowCoin from '../RowCoin';
import l10nMessages from './index.messages';
const Wrapper = styled.div``; const Wrapper = styled.div``;
@ -105,7 +108,7 @@ const AccountMenu = (props: Props) => {
// const url: string = `${baseUrl}/network/${location.state.network}/account/${i}`; // const url: string = `${baseUrl}/network/${location.state.network}/account/${i}`;
const url: string = location.pathname.replace(/account+\/([0-9]*)/, `account/${i}`); const url: string = location.pathname.replace(/account+\/([0-9]*)/, `account/${i}`);
let balance: string = 'Loading...'; let balance: ?string = null;
if (account.balance !== '') { if (account.balance !== '') {
const pending = stateUtils.getAccountPendingTx(props.pending, account); const pending = stateUtils.getAccountPendingTx(props.pending, account);
const pendingAmount: BigNumber = stateUtils.getPendingAmount(pending, network.symbol); const pendingAmount: BigNumber = stateUtils.getPendingAmount(pending, network.symbol);
@ -130,9 +133,9 @@ const AccountMenu = (props: Props) => {
isSelected={urlAccountIndex === account.index} isSelected={urlAccountIndex === account.index}
borderTop={account.index === 0} borderTop={account.index === 0}
> >
Account #{account.index + 1} <FormattedMessage {...l10nMessages.TR_ACCOUNT_HASH} values={{ number: account.index + 1 }} />
{balance && <Text>{balance}</Text>} {balance && <Text>{balance}</Text>}
{!balance && <Text>Loading...</Text>} {!balance && <Text><FormattedMessage {...l10nMessages.TR_LOADING_DOT_DOT_DOT} /></Text>}
</RowAccountWrapper> </RowAccountWrapper>
</Row> </Row>
</NavLink> </NavLink>
@ -148,7 +151,7 @@ const AccountMenu = (props: Props) => {
discoveryStatus = ( discoveryStatus = (
<Tooltip <Tooltip
maxWidth={200} maxWidth={200}
content={`To add a new account, connect ${selected.instanceLabel} device.`} content={<FormattedMessage {...l10nMessages.TR_TO_ADD_ACCOUNTS} />}
placement="bottom" placement="bottom"
> >
<Row> <Row>
@ -160,7 +163,7 @@ const AccountMenu = (props: Props) => {
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
/> />
</AddAccountIconWrapper> </AddAccountIconWrapper>
Add account <FormattedMessage {...l10nMessages.TR_ADD_ACCOUNT} />
</RowAddAccountWrapper> </RowAddAccountWrapper>
</Row> </Row>
</Tooltip> </Tooltip>
@ -176,7 +179,7 @@ const AccountMenu = (props: Props) => {
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
/> />
</AddAccountIconWrapper> </AddAccountIconWrapper>
Add account <FormattedMessage {...l10nMessages.TR_ADD_ACCOUNT} />
</RowAddAccountWrapper> </RowAddAccountWrapper>
</Row> </Row>
); );
@ -184,7 +187,7 @@ const AccountMenu = (props: Props) => {
discoveryStatus = ( discoveryStatus = (
<Tooltip <Tooltip
maxWidth={200} maxWidth={200}
content="To add a new account, last account must have some transactions." content={<FormattedMessage {...l10nMessages.TR_TO_ADD_A_NEW_ACCOUNT_LAST} />}
placement="bottom" placement="bottom"
> >
<Row> <Row>
@ -196,7 +199,7 @@ const AccountMenu = (props: Props) => {
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
/> />
</AddAccountIconWrapper> </AddAccountIconWrapper>
Add account <FormattedMessage {...l10nMessages.TR_ADD_ACCOUNT} />
</RowAddAccountWrapper> </RowAddAccountWrapper>
</Row> </Row>
</Tooltip> </Tooltip>
@ -208,7 +211,7 @@ const AccountMenu = (props: Props) => {
<DiscoveryLoadingWrapper> <DiscoveryLoadingWrapper>
<Loader size={20} /> <Loader size={20} />
<DiscoveryLoadingText> <DiscoveryLoadingText>
Loading... <FormattedMessage {...l10nMessages.TR_LOADING_DOT_DOT_DOT} />
</DiscoveryLoadingText> </DiscoveryLoadingText>
</DiscoveryLoadingWrapper> </DiscoveryLoadingWrapper>
</Row> </Row>

@ -0,0 +1,29 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_ACCOUNT_HASH: {
id: 'TR_ACCOUNT_HASH',
defaultMessage: 'Account #{number}',
description: 'Used in auto-generated account label',
},
TR_LOADING_DOT_DOT_DOT: {
id: 'TR_LOADING_DOT_DOT_DOT',
defaultMessage: 'Loading...',
},
TR_TO_ADD_A_NEW_ACCOUNT_LAST: {
id: 'TR_TO_ADD_A_NEW_ACCOUNT_LAST',
defaultMessage: 'To add a new account, last account must have some transactions.',
},
TR_TO_ADD_ACCOUNTS: {
id: 'TR_TO_ADD_ACCOUNTS',
defaultMessage: 'To add accounts, make sure your device is connected.',
},
TR_ADD_ACCOUNT: {
id: 'TR_ADD_ACCOUNT',
defaultMessage: 'Add account',
},
});
export default definedMessages;

@ -8,9 +8,12 @@ import PropTypes from 'prop-types';
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { NavLink } from 'react-router-dom'; import { NavLink } from 'react-router-dom';
import Link from 'components/Link'; import Link from 'components/Link';
import { FormattedMessage } from 'react-intl';
import Divider from '../Divider'; import Divider from '../Divider';
import RowCoin from '../RowCoin'; import RowCoin from '../RowCoin';
import l10nMessages from './index.messages';
import type { Props } from '../common'; import type { Props } from '../common';
const Wrapper = styled.div``; const Wrapper = styled.div``;
@ -73,8 +76,8 @@ class CoinMenu extends PureComponent<Props> {
))} ))}
<Divider <Divider
testId="Main__page__coin__menu__divider" testId="Main__page__coin__menu__divider"
textLeft="Other coins" textLeft={<FormattedMessage {...l10nMessages.TR_OTHER_COINS} />}
textRight="(You will be redirected)" textRight={<FormattedMessage {...l10nMessages.TR_YOU_WILL_BE_REDIRECTED} />}
hasBorder hasBorder
/> />
{this.getOtherCoins()} {this.getOtherCoins()}

@ -0,0 +1,16 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_OTHER_COINS: {
id: 'TR_OTHER_COINS',
defaultMessage: 'Other coins',
},
TR_YOU_WILL_BE_REDIRECTED: {
id: 'TR_YOU_WILL_BE_REDIRECTED',
defaultMessage: '(You will be redirected)',
},
});
export default definedMessages;

@ -3,11 +3,15 @@ import styled from 'styled-components';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Icon from 'components/Icon'; import Icon from 'components/Icon';
import DeviceIcon from 'components/images/DeviceIcon'; import DeviceIcon from 'components/images/DeviceIcon';
import { FormattedMessage } from 'react-intl';
import icons from 'config/icons'; import icons from 'config/icons';
import colors from 'config/colors'; import colors from 'config/colors';
import { FONT_SIZE } from 'config/variables'; import { FONT_SIZE } from 'config/variables';
// import l10nCommonMessages from 'views/common.messages';
import l10nMessages from './index.messages';
const Wrapper = styled.div` const Wrapper = styled.div`
background: ${colors.WHITE}; background: ${colors.WHITE};
`; `;
@ -58,7 +62,7 @@ class MenuItems extends PureComponent {
size={25} size={25}
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
/> />
<Label>Device settings</Label> <Label><FormattedMessage {...l10nMessages.TR_DEVICE_SETTINGS} /></Label>
</Item> */} </Item> */}
{this.showClone() && ( {this.showClone() && (
<Item onClick={() => this.props.duplicateDevice(device)}> <Item onClick={() => this.props.duplicateDevice(device)}>
@ -67,7 +71,7 @@ class MenuItems extends PureComponent {
size={25} size={25}
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
/> />
<Label>Change wallet type</Label> <Label><FormattedMessage {...l10nMessages.TR_CHANGE_WALLET_TYPE} /></Label>
</Item> </Item>
)} )}
{this.showRenewSession() && ( {this.showRenewSession() && (
@ -75,7 +79,7 @@ class MenuItems extends PureComponent {
onClick={() => this.props.acquireDevice()} onClick={() => this.props.acquireDevice()}
> >
<DeviceIcon device={this.props.device} size={25} color={colors.TEXT_SECONDARY} /> <DeviceIcon device={this.props.device} size={25} color={colors.TEXT_SECONDARY} />
<Label>Renew session</Label> <Label><FormattedMessage {...l10nMessages.TR_RENEW_SESSION} /></Label>
</Item> </Item>
)} )}
<Item onClick={() => this.props.forgetDevice(device)}> <Item onClick={() => this.props.forgetDevice(device)}>
@ -84,7 +88,7 @@ class MenuItems extends PureComponent {
size={25} size={25}
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
/> />
<Label>Forget device</Label> <Label><FormattedMessage {...l10nMessages.TR_FORGET_DEVICE} /></Label>
</Item> </Item>
</Wrapper> </Wrapper>
); );

@ -0,0 +1,21 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_CHANGE_WALLET_TYPE: {
id: 'TR_CHANGE_WALLET_TYPE',
defaultMessage: 'Change wallet type',
},
TR_RENEW_SESSION: {
id: 'TR_RENEW_SESSION',
defaultMessage: 'Renew session',
description: 'TODO',
},
TR_FORGET_DEVICE: {
id: 'TR_FORGET_DEVICE',
defaultMessage: 'Forget device',
},
});
export default definedMessages;

@ -2,6 +2,7 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import TrezorConnect from 'trezor-connect'; import TrezorConnect from 'trezor-connect';
import { FormattedMessage } from 'react-intl';
import COLORS from 'config/colors'; import COLORS from 'config/colors';
import { FONT_SIZE, FONT_WEIGHT } from 'config/variables'; import { FONT_SIZE, FONT_WEIGHT } from 'config/variables';
@ -9,6 +10,7 @@ import { SLIDE_DOWN } from 'config/animations';
import Button from 'components/Button'; import Button from 'components/Button';
import * as deviceUtils from 'utils/device'; import * as deviceUtils from 'utils/device';
import l10nCommonMessages from 'views/common.messages';
import MenuItems from './components/MenuItems'; import MenuItems from './components/MenuItems';
import DeviceList from './components/DeviceList'; import DeviceList from './components/DeviceList';
@ -124,7 +126,9 @@ class DeviceMenu extends PureComponent<Props> {
/> />
{deviceUtils.isWebUSB(transport) && ( {deviceUtils.isWebUSB(transport) && (
<ButtonWrapper> <ButtonWrapper>
<StyledButton isWebUsb>Check for devices</StyledButton> <StyledButton isWebUsb>
<FormattedMessage {...l10nCommonMessages.TR_CHECK_FOR_DEVICES} />
</StyledButton>
</ButtonWrapper> </ButtonWrapper>
)} )}
</Wrapper> </Wrapper>

@ -0,0 +1,9 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
});
export default definedMessages;

@ -37,8 +37,8 @@ const Divider = ({
Divider.propTypes = { Divider.propTypes = {
className: PropTypes.string, className: PropTypes.string,
textLeft: PropTypes.string, textLeft: PropTypes.node,
textRight: PropTypes.string, textRight: PropTypes.node,
hasBorder: PropTypes.bool, hasBorder: PropTypes.bool,
testId: PropTypes.string, testId: PropTypes.string,
}; };

@ -13,12 +13,14 @@ import DeviceHeader from 'components/DeviceHeader';
import * as deviceUtils from 'utils/device'; import * as deviceUtils from 'utils/device';
import Tooltip from 'components/Tooltip'; import Tooltip from 'components/Tooltip';
import { FormattedMessage } from 'react-intl';
import AccountMenu from './components/AccountMenu'; import AccountMenu from './components/AccountMenu';
import CoinMenu from './components/CoinMenu'; import CoinMenu from './components/CoinMenu';
import DeviceMenu from './components/DeviceMenu'; import DeviceMenu from './components/DeviceMenu';
import Sidebar from './components/Sidebar'; import Sidebar from './components/Sidebar';
import type { Props } from './components/common'; import type { Props } from './components/common';
import l10nMessages from './index.messages';
const Header = styled(DeviceHeader)` const Header = styled(DeviceHeader)`
border-right: 1px solid ${colors.BACKGROUND}; border-right: 1px solid ${colors.BACKGROUND};
@ -115,6 +117,26 @@ const TransitionMenu = (props: TransitionMenuProps): React$Element<TransitionGro
</TransitionGroupWrapper> </TransitionGroupWrapper>
); );
const WalletTooltipMsg = ({ walletType, isDeviceReady }: { walletType: string, isDeviceReady: ?boolean}): any => {
let secondPart = '';
if (isDeviceReady) {
secondPart = walletType === 'standard'
? <FormattedMessage {...l10nMessages.TR_CLICK_HERE_TO_ACCESS_YOUR_HIDDEN} />
: <FormattedMessage {...l10nMessages.TR_CLICK_HERE_TO_ACCESS_YOUR_STANDARD} />;
} else {
secondPart = <FormattedMessage {...l10nMessages.TR_TO_ACCESS_OTHER_WALLETS} />;
}
return (
<>
{walletType === 'standard'
? <FormattedMessage {...l10nMessages.TR_YOU_ARE_IN_YOUR_STANDARD_WALLET} />
: <FormattedMessage {...l10nMessages.TR_YOU_ARE_IN_YOUR_HIDDEN_WALLET} />}
{' '}{secondPart}
</>
);
};
type State = { type State = {
animationType: ?string; animationType: ?string;
clicked: boolean; clicked: boolean;
@ -211,14 +233,6 @@ class LeftNavigation extends React.PureComponent<Props, State> {
const showWalletType = selectedDevice && selectedDevice.features && selectedDevice.features.passphrase_protection; const showWalletType = selectedDevice && selectedDevice.features && selectedDevice.features.passphrase_protection;
const isDeviceReady = selectedDevice && selectedDevice.connected && selectedDevice.available; const isDeviceReady = selectedDevice && selectedDevice.connected && selectedDevice.available;
let walletTooltipMsg = `You are in your ${walletType} wallet.`;
if (isDeviceReady) {
walletTooltipMsg = walletType === 'standard'
? `${walletTooltipMsg} Click here to access your hidden wallet.`
: `${walletTooltipMsg} Click here to access your standard or another hidden wallet`;
} else {
walletTooltipMsg = `${walletTooltipMsg} To access other wallets please connect your device.`;
}
return ( return (
<Sidebar isOpen={props.wallet.showSidebar}> <Sidebar isOpen={props.wallet.showSidebar}>
@ -238,7 +252,7 @@ class LeftNavigation extends React.PureComponent<Props, State> {
<React.Fragment> <React.Fragment>
{showWalletType && ( {showWalletType && (
<Tooltip <Tooltip
content={walletTooltipMsg} content={<WalletTooltipMsg walletType={walletType} isDeviceReady={isDeviceReady} />}
maxWidth={200} maxWidth={200}
placement="bottom" placement="bottom"
enterDelayMs={0.5} enterDelayMs={0.5}
@ -262,7 +276,7 @@ class LeftNavigation extends React.PureComponent<Props, State> {
} }
{this.props.devices.length > 1 && ( {this.props.devices.length > 1 && (
<Tooltip <Tooltip
content="Number of devices" content={<FormattedMessage {...l10nMessages.TR_NUMBER_OF_DEVICES} />}
maxWidth={200} maxWidth={200}
placement="bottom" placement="bottom"
enterDelayMs={0.5} enterDelayMs={0.5}
@ -292,7 +306,7 @@ class LeftNavigation extends React.PureComponent<Props, State> {
target="_blank" target="_blank"
rel="noreferrer noopener" rel="noreferrer noopener"
> >
<Icon size={26} icon={icons.CHAT} color={colors.TEXT_SECONDARY} />Need help? <Icon size={26} icon={icons.CHAT} color={colors.TEXT_SECONDARY} /><FormattedMessage {...l10nMessages.TR_NEED_HELP} />
</A> </A>
</Help> </Help>
</Footer> </Footer>

@ -0,0 +1,36 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_YOU_ARE_IN_YOUR_STANDARD_WALLET: {
id: 'TR_YOU_ARE_IN_YOUR_STANDARD_WALLET',
defaultMessage: 'You are in your standard wallet.',
},
TR_YOU_ARE_IN_YOUR_HIDDEN_WALLET: {
id: 'TR_YOU_ARE_IN_YOUR_WALLET',
defaultMessage: 'You are in your hidden wallet.',
},
TR_CLICK_HERE_TO_ACCESS_YOUR_HIDDEN: {
id: 'TR_CLICK_HERE_TO_ACCESS_YOUR_HIDDEN',
defaultMessage: 'Click here to access your hidden wallet.',
},
TR_CLICK_HERE_TO_ACCESS_YOUR_STANDARD: {
id: 'TR_CLICK_HERE_TO_ACCESS_YOUR_STANDARD',
defaultMessage: 'Click here to access your standard or another hidden wallet.',
},
TR_TO_ACCESS_OTHER_WALLETS: {
id: 'TR_TO_ACCESS_OTHER_WALLETS',
defaultMessage: 'To access other wallets please connect your device.',
},
TR_NEED_HELP: {
id: 'TR_NEED_HELP',
defaultMessage: 'Need help?',
},
TR_NUMBER_OF_DEVICES: {
id: 'TR_NUMBER_OF_DEVICES',
defaultMessage: 'Number of devices',
},
});
export default definedMessages;

@ -20,7 +20,7 @@ const Title = ({
); );
Title.propTypes = { Title.propTypes = {
children: PropTypes.string, children: PropTypes.node,
}; };
export default Title; export default Title;

@ -7,7 +7,9 @@ import { NavLink } from 'react-router-dom';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import colors from 'config/colors'; import colors from 'config/colors';
import type { State } from 'flowtype'; import type { State } from 'flowtype';
import { FormattedMessage } from 'react-intl';
import l10nMessages from './index.messages';
import Indicator from './components/Indicator'; import Indicator from './components/Indicator';
type Props = { type Props = {
@ -83,11 +85,11 @@ class TopNavigationAccount extends React.PureComponent<Props> {
return ( return (
<Wrapper className="account-tabs" ref={this.wrapperRefCallback}> <Wrapper className="account-tabs" ref={this.wrapperRefCallback}>
<StyledNavLink exact to={`${basePath}`}>Summary</StyledNavLink> <StyledNavLink exact to={`${basePath}`}><FormattedMessage {...l10nMessages.TR_SUMMARY} /></StyledNavLink>
<StyledNavLink to={`${basePath}/receive`}>Receive</StyledNavLink> <StyledNavLink to={`${basePath}/receive`}><FormattedMessage {...l10nMessages.TR_RECEIVE} /></StyledNavLink>
<StyledNavLink to={`${basePath}/send`}>Send</StyledNavLink> <StyledNavLink to={`${basePath}/send`}><FormattedMessage {...l10nMessages.TR_SEND} /></StyledNavLink>
{network.type === 'ethereum' {network.type === 'ethereum'
&& <StyledNavLink to={`${basePath}/signverify`}>Sign &amp; Verify</StyledNavLink> && <StyledNavLink to={`${basePath}/signverify`}><FormattedMessage {...l10nMessages.TR_SIGN_AND_VERIFY} /></StyledNavLink>
} }
<Indicator pathname={pathname} wrapper={() => this.wrapper} /> <Indicator pathname={pathname} wrapper={() => this.wrapper} />
</Wrapper> </Wrapper>

@ -0,0 +1,24 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_SUMMARY: {
id: 'TR_SUMMARY',
defaultMessage: 'Summary',
},
TR_RECEIVE: {
id: 'TR_RECEIVE',
defaultMessage: 'Receive',
},
TR_SEND: {
id: 'TR_SEND',
defaultMessage: 'Send',
},
TR_SIGN_AND_VERIFY: {
id: 'TR_SIGN_AND_VERIFY',
defaultMessage: 'Sign & Verify',
},
});
export default definedMessages;

@ -1,11 +1,13 @@
import styled from 'styled-components'; import styled from 'styled-components';
import React from 'react'; import React from 'react';
import { FormattedMessage } from 'react-intl';
import l10nCommonMessages from 'views/common.messages';
const Wrapper = styled.div``; const Wrapper = styled.div``;
const AccountTabs = () => ( const AccountTabs = () => (
<Wrapper> <Wrapper>
Device settings <FormattedMessage {...l10nCommonMessages.TR_DEVICE_SETTINGS} />
</Wrapper> </Wrapper>
); );

@ -0,0 +1,20 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_CHECK_ADDRESS_ON_TREZOR: {
id: 'TR_CHECK_ADDRESS_ON_TREZOR',
defaultMessage: 'Check address on Trezor',
},
TR_SHOW_FULL_ADDRESS: {
id: 'TR_SHOW_FULL_ADDRESS',
defaultMessage: 'Show full address',
},
TR_QR_CODE: {
id: 'TR_QR_CODE',
defaultMessage: 'QR Code',
},
});
export default definedMessages;

@ -1,6 +1,9 @@
import React from 'react'; import React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import l10nMessages from './index.messages';
const Wrapper = styled.div``; const Wrapper = styled.div``;
const Content = styled.div``; const Content = styled.div``;
@ -9,12 +12,16 @@ const VerifyAddressTooltip = ({ isConnected, isAvailable, addressUnverified }) =
<Wrapper> <Wrapper>
{addressUnverified && ( {addressUnverified && (
<Content> <Content>
Unverified address. {isConnected && isAvailable ? 'Show on Trezor' : 'Connect your Trezor to verify it.'} {isConnected && isAvailable
? <FormattedMessage {...l10nMessages.TR_UNVERIFIED_ADDRESS_COMMA_SHOW} />
: <FormattedMessage {...l10nMessages.TR_UNVERIFIED_ADDRESS_COMMA_CONNECT} />}
</Content> </Content>
)} )}
{!addressUnverified && ( {!addressUnverified && (
<Content> <Content>
{isConnected ? 'Show on Trezor' : 'Connect your Trezor to verify address.'} {isConnected
? <FormattedMessage {...l10nMessages.TR_SHOW_ON_TREZOR} />
: <FormattedMessage {...l10nMessages.TR_CONNECT_YOUR_TREZOR_TO_CHECK} />}
</Content> </Content>
)} )}
</Wrapper> </Wrapper>

@ -0,0 +1,24 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_UNVERIFIED_ADDRESS_COMMA_CONNECT: {
id: 'TR_UNVERIFIED_ADDRESS_COMMA_CONNECT',
defaultMessage: 'Unverified address, connect your Trezor to verify it',
},
TR_UNVERIFIED_ADDRESS_COMMA_SHOW: {
id: 'TR_UNVERIFIED_ADDRESS_COMMA_SHOW',
defaultMessage: 'Unverified address, show on Trezor.',
},
TR_SHOW_ON_TREZOR: {
id: 'TR_SHOW_ON_TREZOR',
defaultMessage: 'Show on Trezor',
},
TR_CONNECT_YOUR_TREZOR_TO_CHECK: {
id: 'TR_CONNECT_YOUR_TREZOR_TO_CHECK',
defaultMessage: 'Connect your Trezor to verify this address',
},
});
export default definedMessages;

@ -2,6 +2,7 @@
import React from 'react'; import React from 'react';
import { QRCode } from 'react-qr-svg'; import { QRCode } from 'react-qr-svg';
import styled from 'styled-components'; import styled from 'styled-components';
import { FormattedMessage } from 'react-intl';
import Title from 'views/Wallet/components/Title'; import Title from 'views/Wallet/components/Title';
import Button from 'components/Button'; import Button from 'components/Button';
@ -17,6 +18,9 @@ import { CONTEXT_DEVICE } from 'actions/constants/modal';
import Content from 'views/Wallet/components/Content'; import Content from 'views/Wallet/components/Content';
import VerifyAddressTooltip from '../components/VerifyAddressTooltip'; import VerifyAddressTooltip from '../components/VerifyAddressTooltip';
import l10nMessages from './index.messages';
import l10nCommonMessages from '../common.messages';
import type { Props } from './Container'; import type { Props } from './Container';
const Label = styled.div` const Label = styled.div`
@ -120,7 +124,7 @@ const AccountReceive = (props: Props) => {
return ( return (
<Content> <Content>
<React.Fragment> <React.Fragment>
<Title>Receive Ethereum or tokens</Title> <Title><FormattedMessage {...l10nMessages.TR_RECEIVE_ETHEREUM_OR_TOKENS} /></Title>
<AddressWrapper isShowingQrCode={addressVerified || addressUnverified}> <AddressWrapper isShowingQrCode={addressVerified || addressUnverified}>
<Row> <Row>
<Input <Input
@ -133,7 +137,7 @@ const AccountReceive = (props: Props) => {
trezorAction={isAddressVerifying ? ( trezorAction={isAddressVerifying ? (
<React.Fragment> <React.Fragment>
<DeviceIcon device={device} color={colors.WHITE} /> <DeviceIcon device={device} color={colors.WHITE} />
Check address on your Trezor <FormattedMessage {...l10nCommonMessages.TR_CHECK_ADDRESS_ON_TREZOR} />
</React.Fragment> </React.Fragment>
) : null} ) : null}
icon={((addressVerified || addressUnverified) && !isAddressVerifying) && ( icon={((addressVerified || addressUnverified) && !isAddressVerifying) && (
@ -158,13 +162,13 @@ const AccountReceive = (props: Props) => {
/> />
{!(addressVerified || addressUnverified) && ( {!(addressVerified || addressUnverified) && (
<ShowAddressButton onClick={() => props.showAddress(account.accountPath)} isDisabled={device.connected && !discovery.completed}> <ShowAddressButton onClick={() => props.showAddress(account.accountPath)} isDisabled={device.connected && !discovery.completed}>
<ShowAddressIcon icon={ICONS.EYE} color={colors.WHITE} />Show full address <ShowAddressIcon icon={ICONS.EYE} color={colors.WHITE} /><FormattedMessage {...l10nCommonMessages.TR_SHOW_FULL_ADDRESS} />
</ShowAddressButton> </ShowAddressButton>
)} )}
</Row> </Row>
{(addressVerified || addressUnverified) && !isAddressVerifying && ( {(addressVerified || addressUnverified) && !isAddressVerifying && (
<QrWrapper> <QrWrapper>
<Label>QR code</Label> <Label><FormattedMessage {...l10nCommonMessages.TR_QR_CODE} /></Label>
<StyledQRCode <StyledQRCode
bgColor="#FFFFFF" bgColor="#FFFFFF"
fgColor="#000000" fgColor="#000000"

@ -0,0 +1,12 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_RECEIVE_ETHEREUM_OR_TOKENS: {
id: 'TR_RECEIVE_ETHEREUM_OR_TOKENS',
defaultMessage: 'Receive Ethereum or tokens',
},
});
export default definedMessages;

@ -2,6 +2,7 @@
import React from 'react'; import React from 'react';
import { QRCode } from 'react-qr-svg'; import { QRCode } from 'react-qr-svg';
import styled from 'styled-components'; import styled from 'styled-components';
import { FormattedMessage } from 'react-intl';
import Title from 'views/Wallet/components/Title'; import Title from 'views/Wallet/components/Title';
import Button from 'components/Button'; import Button from 'components/Button';
@ -17,6 +18,9 @@ import { CONTEXT_DEVICE } from 'actions/constants/modal';
import Content from 'views/Wallet/components/Content'; import Content from 'views/Wallet/components/Content';
import VerifyAddressTooltip from '../components/VerifyAddressTooltip'; import VerifyAddressTooltip from '../components/VerifyAddressTooltip';
import l10nMessages from './index.messages';
import l10nCommonMessages from '../common.messages';
import type { Props } from './Container'; import type { Props } from './Container';
const Label = styled.div` const Label = styled.div`
@ -120,7 +124,7 @@ const AccountReceive = (props: Props) => {
return ( return (
<Content> <Content>
<React.Fragment> <React.Fragment>
<Title>Receive Ripple</Title> <Title><FormattedMessage {...l10nMessages.TR_RECEIVE_RIPPLE} /></Title>
<AddressWrapper isShowingQrCode={addressVerified || addressUnverified}> <AddressWrapper isShowingQrCode={addressVerified || addressUnverified}>
<Row> <Row>
<Input <Input
@ -133,7 +137,7 @@ const AccountReceive = (props: Props) => {
trezorAction={isAddressVerifying ? ( trezorAction={isAddressVerifying ? (
<React.Fragment> <React.Fragment>
<DeviceIcon device={device} color={colors.WHITE} /> <DeviceIcon device={device} color={colors.WHITE} />
Check address on your Trezor <FormattedMessage {...l10nCommonMessages.TR_CHECK_ADDRESS_ON_TREZOR} />
</React.Fragment> </React.Fragment>
) : null} ) : null}
icon={((addressVerified || addressUnverified) && !isAddressVerifying) && ( icon={((addressVerified || addressUnverified) && !isAddressVerifying) && (
@ -158,13 +162,13 @@ const AccountReceive = (props: Props) => {
/> />
{!(addressVerified || addressUnverified) && ( {!(addressVerified || addressUnverified) && (
<ShowAddressButton onClick={() => props.showAddress(account.accountPath)} isDisabled={device.connected && !discovery.completed}> <ShowAddressButton onClick={() => props.showAddress(account.accountPath)} isDisabled={device.connected && !discovery.completed}>
<ShowAddressIcon icon={ICONS.EYE} color={colors.WHITE} />Show full address <ShowAddressIcon icon={ICONS.EYE} color={colors.WHITE} /><FormattedMessage {...l10nCommonMessages.TR_SHOW_FULL_ADDRESS} />
</ShowAddressButton> </ShowAddressButton>
)} )}
</Row> </Row>
{(addressVerified || addressUnverified) && !isAddressVerifying && ( {(addressVerified || addressUnverified) && !isAddressVerifying && (
<QrWrapper> <QrWrapper>
<Label>QR code</Label> <Label><FormattedMessage {...l10nCommonMessages.TR_QR_CODE} /></Label>
<StyledQRCode <StyledQRCode
bgColor="#FFFFFF" bgColor="#FFFFFF"
fgColor="#000000" fgColor="#000000"

@ -0,0 +1,12 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_RECEIVE_RIPPLE: {
id: 'TR_RECEIVE_RIPPLE',
defaultMessage: 'Receive Ripple',
},
});
export default definedMessages;

@ -0,0 +1,36 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_AMOUNT: {
id: 'TR_AMOUNT',
defaultMessage: 'Amount',
},
TR_SET_MAX: {
id: 'TR_SET_MAX',
defaultMessage: 'Set max',
description: 'Used for setting maximum amount in Send form',
},
TR_FEE: {
id: 'TR_FEE',
defaultMessage: 'Fee',
description: 'Label in Send form',
},
TR_RECOMMENDED_FEES_UPDATED: {
id: 'TR_RECOMMENDED_FEES_UPDATED',
defaultMessage: 'Recommended fees updated.',
},
TR_CLICK_HERE_TO_USE_THEM: {
id: 'TR_CLICK_HERE_TO_USE_THEM',
defaultMessage: 'Click here to use them',
description: 'Button to use recommended updated fees.',
},
TR_ADVANCED_SETTINGS: {
id: 'TR_ADVANCED_SETTINGS',
defaultMessage: 'Advanced settings',
description: 'Shows advanced sending form',
},
});
export default definedMessages;

@ -3,6 +3,7 @@
import * as React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import colors from 'config/colors'; import colors from 'config/colors';
import { FormattedMessage } from 'react-intl';
import Link from 'components/Link'; import Link from 'components/Link';
import Input from 'components/inputs/Input'; import Input from 'components/inputs/Input';
@ -12,6 +13,8 @@ import Icon from 'components/Icon';
import ICONS from 'config/icons'; import ICONS from 'config/icons';
import { FONT_SIZE } from 'config/variables'; import { FONT_SIZE } from 'config/variables';
import l10nMessages from './index.messages';
import type { Props as BaseProps } from '../../Container'; import type { Props as BaseProps } from '../../Container';
type Props = BaseProps & { type Props = BaseProps & {
@ -177,14 +180,17 @@ const AdvancedForm = (props: Props) => {
topLabel={( topLabel={(
<InputLabelWrapper> <InputLabelWrapper>
<Left> <Left>
Gas limit <FormattedMessage {...l10nMessages.TR_GAS_LIMIT} />
<Tooltip <Tooltip
content={( content={(
<React.Fragment> <FormattedMessage
Gas limit refers to the maximum amount of gas user is willing to spendon a particular transaction.{' '} {...l10nMessages.TR_GAS_LIMIT_REFERS_TO}
<GreenSpan>Transaction fee = gas limit * gas price</GreenSpan>.{' '}Increasing the gas limit will not get the transaction confirmed sooner. values={{
Default value for sending {gasLimitTooltipCurrency} is <GreenSpan>{gasLimitTooltipValue}</GreenSpan>. TR_GAS_QUOTATION: <GreenSpan><FormattedMessage {...l10nMessages.TR_GAS_QUOTATION} /></GreenSpan>,
</React.Fragment> gasLimitTooltipValue: <GreenSpan>{gasLimitTooltipValue}</GreenSpan>,
gasLimitTooltipCurrency,
}}
/>
)} )}
maxWidth={410} maxWidth={410}
readMoreLink="https://wiki.trezor.io/Ethereum_Wallet#Gas_limit" readMoreLink="https://wiki.trezor.io/Ethereum_Wallet#Gas_limit"
@ -199,14 +205,14 @@ const AdvancedForm = (props: Props) => {
</Left> </Left>
{ showDefaultGasLimitButton && ( { showDefaultGasLimitButton && (
<Right> <Right>
<StyledLink onClick={setDefaultGasLimit} isGreen>Set default</StyledLink> <StyledLink onClick={setDefaultGasLimit} isGreen><FormattedMessage {...l10nMessages.TR_SET_DEFAULT} /></StyledLink>
</Right> </Right>
) )
} }
</InputLabelWrapper> </InputLabelWrapper>
)} )}
bottomText={errors.gasLimit || warnings.gasLimit || infos.gasLimit} bottomText={errors.gasLimit || warnings.gasLimit || infos.gasLimit}
value={calculatingGasLimit ? 'Calculating...' : gasLimit} value={calculatingGasLimit ? 'Calculating...' : gasLimit} // TODO: figure out translations in inputs
isDisabled={networkSymbol === currency && data.length > 0} isDisabled={networkSymbol === currency && data.length > 0}
onChange={event => onGasLimitChange(event.target.value)} onChange={event => onGasLimitChange(event.target.value)}
/> />
@ -220,14 +226,17 @@ const AdvancedForm = (props: Props) => {
topLabel={( topLabel={(
<InputLabelWrapper> <InputLabelWrapper>
<Left> <Left>
Gas price <FormattedMessage {...l10nMessages.TR_GAS_PRICE} />
<Tooltip <Tooltip
content={( content={(
<React.Fragment> <FormattedMessage
Gas price refers to the amount of ether you are willing to pay for every {...l10nMessages.TR_GAS_PRICE_REFERS_TO}
unit of gas, and is usually measured in Gwei. <GreenSpan>Transaction fee = gas limit * gas price</GreenSpan>. Increasing the gas price will get the transaction confirmed sooner but values={{
makes it more expensive. The recommended gas price is <GreenSpan>{recommendedGasPrice} GWEI</GreenSpan>. TR_GAS_PRICE_QUOTATION: <GreenSpan><FormattedMessage {...l10nMessages.TR_GAS_PRICE_QUOTATION} /></GreenSpan>,
</React.Fragment> recommendedGasPrice: <GreenSpan>{recommendedGasPrice}</GreenSpan>,
}}
/>
)} )}
maxWidth={400} maxWidth={400}
readMoreLink="https://wiki.trezor.io/Ethereum_Wallet#Gas_price" readMoreLink="https://wiki.trezor.io/Ethereum_Wallet#Gas_price"
@ -252,13 +261,9 @@ const AdvancedForm = (props: Props) => {
topLabel={( topLabel={(
<InputLabelWrapper> <InputLabelWrapper>
<Left> <Left>
Data <FormattedMessage {...l10nMessages.TR_DATA} />
<Tooltip <Tooltip
content={( content={<FormattedMessage {...l10nMessages.TR_DATA_IS_USUALLY_USED} />}
<React.Fragment>
Data is usually used when you send transactions to contracts.
</React.Fragment>
)}
placement="top" placement="top"
> >
<StyledIcon <StyledIcon

@ -0,0 +1,48 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_GAS_LIMIT: {
id: 'TR_GAS_LIMIT',
defaultMessage: 'Gas limit',
},
TR_GAS_LIMIT_REFERS_TO: {
id: 'TR_GAS_LIMIT_REFERS_TO',
defaultMessage: 'Gas limit refers to the maximum amount of gas user is willing to spendon a particular transaction. {TR_GAS_QUOTATION}. Increasing the gas limit will not get the transaction confirmed sooner. Default value for sending {gasLimitTooltipCurrency} is {gasLimitTooltipValue}.',
},
TR_GAS_QUOTATION: {
id: 'TR_GAS_QUOTATION',
defaultMessage: 'Transaction fee = gas limit * gas price',
},
TR_SET_DEFAULT: {
id: 'TR_SET_DEFAULT',
defaultMessage: 'Set default',
},
TR_CALCULATING_DOT_DOT: {
id: 'TR_CALCULATING_DOT_DOT',
defaultMessage: 'Calculating...',
},
TR_GAS_PRICE: {
id: 'TR_GAS_PRICE',
defaultMessage: 'Gas price',
},
TR_GAS_PRICE_REFERS_TO: {
id: 'TR_GAS_PRICE_REFERS_TO',
defaultMessage: 'Gas price refers to the amount of ether you are willing to pay for every unit of gas, and is usually measured in “Gwei”. {TR_GAS_PRICE_QUOTATION}. Increasing the gas price will get the transaction confirmed sooner but makes it more expensive. The recommended gas price is {recommendedGasPrice} GWEI.',
},
TR_GAS_PRICE_QUOTATION: {
id: 'TR_GAS_PRICE_QUOTATION',
defaultMessage: 'Transaction fee = gas limit * gas price',
},
TR_DATA: {
id: 'TR_DATA',
defaultMessage: 'Data',
},
TR_DATA_IS_USUALLY_USED: {
id: 'TR_DATA_IS_USUALLY_USED',
defaultMessage: 'Data is usually used when you send transactions to contracts.',
},
});
export default definedMessages;

@ -16,9 +16,13 @@ import P from 'components/Paragraph';
import Content from 'views/Wallet/components/Content'; import Content from 'views/Wallet/components/Content';
import * as stateUtils from 'reducers/utils'; import * as stateUtils from 'reducers/utils';
import type { Token } from 'flowtype'; import type { Token } from 'flowtype';
import { FormattedMessage } from 'react-intl';
import l10nCommonMessages from 'views/common.messages';
import AdvancedForm from './components/AdvancedForm'; import AdvancedForm from './components/AdvancedForm';
import PendingTransactions from '../components/PendingTransactions'; import PendingTransactions from '../components/PendingTransactions';
import l10nMessages from './index.messages';
import l10nSendMessages from '../common.messages';
import type { Props } from './Container'; import type { Props } from './Container';
// TODO: Decide on a small screen width for the whole app // TODO: Decide on a small screen width for the whole app
@ -294,7 +298,7 @@ const AccountSend = (props: Props) => {
return ( return (
<Content> <Content>
<Title>Send Ethereum or tokens</Title> <Title><FormattedMessage {...l10nMessages.TR_SEND_ETHEREUM_OR_TOKENS} /></Title>
<InputRow> <InputRow>
<Input <Input
state={getAddressInputState(address, errors.address, warnings.address)} state={getAddressInputState(address, errors.address, warnings.address)}
@ -330,9 +334,14 @@ const AccountSend = (props: Props) => {
spellCheck="false" spellCheck="false"
topLabel={( topLabel={(
<AmountInputLabelWrapper> <AmountInputLabelWrapper>
<AmountInputLabel>Amount</AmountInputLabel> <AmountInputLabel><FormattedMessage {...l10nSendMessages.TR_AMOUNT} /></AmountInputLabel>
{(isCurrentCurrencyToken && selectedToken) && ( {(isCurrentCurrencyToken && selectedToken) && (
<AmountInputLabel>You have: {selectedTokenBalance} {selectedToken.symbol}</AmountInputLabel> <AmountInputLabel>
<FormattedMessage
{...l10nSendMessages.YOU_HAVE_TOKEN_BALANCE}
values={{ tokenBalance: `${selectedTokenBalance} ${selectedToken.symbol}` }}
/>
</AmountInputLabel>
)} )}
</AmountInputLabelWrapper> </AmountInputLabelWrapper>
)} )}
@ -360,7 +369,7 @@ const AccountSend = (props: Props) => {
color={colors.WHITE} color={colors.WHITE}
/> />
)} )}
Set max <FormattedMessage {...l10nSendMessages.TR_SET_MAX} />
</SetMaxAmountButton> </SetMaxAmountButton>
), ),
( (
@ -388,7 +397,7 @@ const AccountSend = (props: Props) => {
color={colors.WARNING_PRIMARY} color={colors.WARNING_PRIMARY}
size={20} size={20}
/> />
Recommended fees updated. <StyledLink onClick={updateFeeLevels} isGreen>Click here to use them</StyledLink> <FormattedMessage {...l10nSendMessages.TR_RECOMMENDED_FEES_UPDATED} /> <StyledLink onClick={updateFeeLevels} isGreen><FormattedMessage {...l10nSendMessages.TR_CLICK_HERE_TO_USE_THEM} /></StyledLink>
</UpdateFeeWrapper> </UpdateFeeWrapper>
)} )}
</FeeLabelWrapper> </FeeLabelWrapper>
@ -414,7 +423,7 @@ const AccountSend = (props: Props) => {
isTransparent isTransparent
onClick={toggleAdvanced} onClick={toggleAdvanced}
> >
Advanced settings <FormattedMessage {...l10nSendMessages.TR_ADVANCED_SETTINGS} />
<AdvancedSettingsIcon <AdvancedSettingsIcon
icon={ICONS.ARROW_DOWN} icon={ICONS.ARROW_DOWN}
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
@ -432,7 +441,7 @@ const AccountSend = (props: Props) => {
isWhite isWhite
onClick={() => onClear()} onClick={() => onClear()}
> >
Clear <FormattedMessage {...l10nCommonMessages.TR_CLEAR} />
</ClearButton> </ClearButton>
<SendButton <SendButton
isDisabled={isSendButtonDisabled} isDisabled={isSendButtonDisabled}
@ -453,7 +462,7 @@ const AccountSend = (props: Props) => {
isWhite isWhite
onClick={() => onClear()} onClick={() => onClear()}
> >
Clear <FormattedMessage {...l10nCommonMessages.TR_CLEAR} />
</ClearButton> </ClearButton>
<SendButton <SendButton
isDisabled={isSendButtonDisabled} isDisabled={isSendButtonDisabled}

@ -0,0 +1,16 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_SEND_ETHEREUM_OR_TOKENS: {
id: 'TR_SEND_ETHEREUM_OR_TOKENS',
defaultMessage: 'Send Ethereum or tokens',
},
YOU_HAVE_TOKEN_BALANCE: {
id: 'YOU_HAVE_TOKEN_BALANCE',
defaultMessage: 'You have: {tokenBalance}',
},
});
export default definedMessages;

@ -1,13 +1,16 @@
/* @flow */ /* @flow */
import * as React from 'react'; import * as React from 'react';
import { FormattedMessage } from 'react-intl';
import styled from 'styled-components'; import styled from 'styled-components';
import colors from 'config/colors'; import colors from 'config/colors';
import l10nSendMessages from 'views/Wallet/views/Account/Send/common.messages';
import Input from 'components/inputs/Input'; import Input from 'components/inputs/Input';
import Tooltip from 'components/Tooltip'; import Tooltip from 'components/Tooltip';
import Icon from 'components/Icon'; import Icon from 'components/Icon';
import ICONS from 'config/icons'; import ICONS from 'config/icons';
import l10nMessages from './index.messages';
import type { Props as BaseProps } from '../../Container'; import type { Props as BaseProps } from '../../Container';
@ -125,13 +128,9 @@ const AdvancedForm = (props: Props) => {
topLabel={( topLabel={(
<InputLabelWrapper> <InputLabelWrapper>
<Left> <Left>
Fee <FormattedMessage {...l10nSendMessages.TR_FEE} />
<Tooltip <Tooltip
content={( content={<FormattedMessage {...l10nMessages.TR_XRP_TRANSFER_COST} />}
<React.Fragment>
Transfer cost in XRP drops
</React.Fragment>
)}
maxWidth={100} maxWidth={100}
readMoreLink="https://developers.ripple.com/transaction-cost.html" readMoreLink="https://developers.ripple.com/transaction-cost.html"
placement="top" placement="top"
@ -161,13 +160,9 @@ const AdvancedForm = (props: Props) => {
topLabel={( topLabel={(
<InputLabelWrapper> <InputLabelWrapper>
<Left> <Left>
Destination tag <FormattedMessage {...l10nMessages.TR_XRP_DESTINATION_TAG} />
<Tooltip <Tooltip
content={( content={<FormattedMessage {...l10nMessages.TR_XRP_DESTINATION_TAG_EXPLAINED} />}
<React.Fragment>
An arbitrary unsigned 32-bit integer that identifies a reason for payment or a non-Ripple account.
</React.Fragment>
)}
maxWidth={200} maxWidth={200}
readMoreLink="https://developers.ripple.com/rippleapi-reference.html#payment" readMoreLink="https://developers.ripple.com/rippleapi-reference.html#payment"
placement="top" placement="top"

@ -0,0 +1,20 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_XRP_TRANSFER_COST: {
id: 'TR_XRP_TRANSFER_COST',
defaultMessage: 'Transfer cost in XRP drops',
},
TR_XRP_DESTINATION_TAG: {
id: 'TR_XRP_DESTINATION_TAG',
defaultMessage: 'Destination tag',
},
TR_XRP_DESTINATION_TAG_EXPLAINED: {
id: 'TR_XRP_DESTINATION_TAG_EXPLAINED',
defaultMessage: 'Number that identifies a reason for payment or a non-Ripple account.',
},
});
export default definedMessages;

@ -3,6 +3,7 @@
import React from 'react'; import React from 'react';
import styled, { css } from 'styled-components'; import styled, { css } from 'styled-components';
import { Select } from 'components/Select'; import { Select } from 'components/Select';
import { FormattedMessage } from 'react-intl';
import Button from 'components/Button'; import Button from 'components/Button';
import Input from 'components/inputs/Input'; import Input from 'components/inputs/Input';
import Icon from 'components/Icon'; import Icon from 'components/Icon';
@ -12,10 +13,14 @@ import { FONT_SIZE, FONT_WEIGHT, TRANSITION } from 'config/variables';
import colors from 'config/colors'; import colors from 'config/colors';
import Title from 'views/Wallet/components/Title'; import Title from 'views/Wallet/components/Title';
import P from 'components/Paragraph'; import P from 'components/Paragraph';
import l10nCommonMessages from 'views/common.messages';
import Content from 'views/Wallet/components/Content'; import Content from 'views/Wallet/components/Content';
import PendingTransactions from '../components/PendingTransactions'; import PendingTransactions from '../components/PendingTransactions';
import AdvancedForm from './components/AdvancedForm'; import AdvancedForm from './components/AdvancedForm';
import l10nMessages from './index.messages';
import l10nSendMessages from '../common.messages';
import type { Props } from './Container'; import type { Props } from './Container';
// TODO: Decide on a small screen width for the whole app // TODO: Decide on a small screen width for the whole app
@ -268,7 +273,7 @@ const AccountSend = (props: Props) => {
return ( return (
<Content> <Content>
<Title>Send Ripple</Title> <Title><FormattedMessage {...l10nMessages.TR_SEND_RIPPLE} /></Title>
<InputRow> <InputRow>
<Input <Input
state={getAddressInputState(address, errors.address, warnings.address)} state={getAddressInputState(address, errors.address, warnings.address)}
@ -304,9 +309,14 @@ const AccountSend = (props: Props) => {
spellCheck="false" spellCheck="false"
topLabel={( topLabel={(
<AmountInputLabelWrapper> <AmountInputLabelWrapper>
<AmountInputLabel>Amount</AmountInputLabel> <AmountInputLabel><FormattedMessage {...l10nSendMessages.TR_AMOUNT} /></AmountInputLabel>
{accountReserve && ( {accountReserve && (
<AmountInputLabel>Reserve: {accountReserve} {network.symbol}</AmountInputLabel> <AmountInputLabel>
<FormattedMessage
{...l10nMessages.TR_XRP_RESERVE}
values={{ value: `${accountReserve} ${network.symbol}` }}
/>
</AmountInputLabel>
)} )}
</AmountInputLabelWrapper> </AmountInputLabelWrapper>
)} )}
@ -334,7 +344,7 @@ const AccountSend = (props: Props) => {
color={colors.WHITE} color={colors.WHITE}
/> />
)} )}
Set max <FormattedMessage {...l10nSendMessages.TR_SET_MAX} />
</SetMaxAmountButton> </SetMaxAmountButton>
), ),
( (
@ -353,7 +363,7 @@ const AccountSend = (props: Props) => {
<InputRow> <InputRow>
<FeeLabelWrapper> <FeeLabelWrapper>
<FeeLabel>Fee</FeeLabel> <FeeLabel><FormattedMessage {...l10nSendMessages.TR_FEE} /></FeeLabel>
{feeNeedsUpdate && ( {feeNeedsUpdate && (
<UpdateFeeWrapper> <UpdateFeeWrapper>
<Icon <Icon
@ -361,7 +371,7 @@ const AccountSend = (props: Props) => {
color={colors.WARNING_PRIMARY} color={colors.WARNING_PRIMARY}
size={20} size={20}
/> />
Recommended fees updated. <StyledLink onClick={updateFeeLevels} isGreen>Click here to use them</StyledLink> <FormattedMessage {...l10nSendMessages.TR_RECOMMENDED_FEES_UPDATED} /> <StyledLink onClick={updateFeeLevels} isGreen><FormattedMessage {...l10nSendMessages.TR_CLICK_HERE_TO_USE_THEM} /></StyledLink>
</UpdateFeeWrapper> </UpdateFeeWrapper>
)} )}
</FeeLabelWrapper> </FeeLabelWrapper>
@ -387,7 +397,7 @@ const AccountSend = (props: Props) => {
isTransparent isTransparent
onClick={toggleAdvanced} onClick={toggleAdvanced}
> >
Advanced settings <FormattedMessage {...l10nSendMessages.TR_ADVANCED_SETTINGS} />
<AdvancedSettingsIcon <AdvancedSettingsIcon
icon={ICONS.ARROW_DOWN} icon={ICONS.ARROW_DOWN}
color={colors.TEXT_SECONDARY} color={colors.TEXT_SECONDARY}
@ -405,7 +415,7 @@ const AccountSend = (props: Props) => {
isWhite isWhite
onClick={() => onClear()} onClick={() => onClear()}
> >
Clear <FormattedMessage {...l10nCommonMessages.TR_CLEAR} />
</ClearButton> </ClearButton>
<SendButton <SendButton
isDisabled={isSendButtonDisabled} isDisabled={isSendButtonDisabled}
@ -426,7 +436,7 @@ const AccountSend = (props: Props) => {
isWhite isWhite
onClick={() => onClear()} onClick={() => onClear()}
> >
Clear <FormattedMessage {...l10nCommonMessages.TR_CLEAR} />
</ClearButton> </ClearButton>
<SendButton <SendButton
isDisabled={isSendButtonDisabled} isDisabled={isSendButtonDisabled}

@ -0,0 +1,17 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_XRP_RESERVE: {
id: 'TR_XRP_RESERVE',
defaultMessage: 'Reserve: {value}',
description: 'XRP reserve input label',
},
TR_SEND_RIPPLE: {
id: 'TR_SEND_RIPPLE',
defaultMessage: 'Send Ripple',
},
});
export default definedMessages;

@ -0,0 +1,21 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_DEVICE_SETTINGS: {
id: 'TR_DEVICE_SETTINGS',
defaultMessage: 'Device settings',
},
TR_CLEAR: {
id: 'TR_CLEAR',
defaultMessage: 'Clear',
description: 'Clear form button',
},
TR_CHECK_FOR_DEVICES: {
id: 'TR_CHECK_FOR_DEVICES',
defaultMessage: 'Check for devices',
},
});
export default definedMessages;

@ -14,7 +14,7 @@
}, },
{ {
"id": "TR_TREZOR_BETA_WALLET_IS", "id": "TR_TREZOR_BETA_WALLET_IS",
"defaultMessage": "{trezorBetaWallet} is a public feature-testing version of the {trezorWallet}, offering the newest features before they are available to the general public.", "defaultMessage": "{TR_TREZOR_BETA_WALLET} is a public feature-testing version of the {TR_TREZOR_WALLET}, offering the newest features before they are available to the general public.",
"file": "src/views/Landing/components/BetaDisclaimer/index.messages.js", "file": "src/views/Landing/components/BetaDisclaimer/index.messages.js",
"start": { "start": {
"line": 10, "line": 10,
@ -27,7 +27,7 @@
}, },
{ {
"id": "TR_IN_CONTRAST_COMMA_TREZOR", "id": "TR_IN_CONTRAST_COMMA_TREZOR",
"defaultMessage": "In contrast, {trezorWallet} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public.", "defaultMessage": "In contrast, {TR_TREZOR_WALLET} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public.",
"file": "src/views/Landing/components/BetaDisclaimer/index.messages.js", "file": "src/views/Landing/components/BetaDisclaimer/index.messages.js",
"start": { "start": {
"line": 14, "line": 14,
@ -40,7 +40,7 @@
}, },
{ {
"id": "TR_PLEASE_NOTE_THAT_THE_TREZOR", "id": "TR_PLEASE_NOTE_THAT_THE_TREZOR",
"defaultMessage": "Please note that the {trezorBetaWallet} might be collecting anonymized usage data, especially error logs, for development purposes. The {trezorWallet} does not log any data.", "defaultMessage": "Please note that the {TR_TREZOR_BETA_WALLET} might be collecting anonymized usage data, especially error logs, for development purposes. The {TR_TREZOR_WALLET} does not log any data.",
"file": "src/views/Landing/components/BetaDisclaimer/index.messages.js", "file": "src/views/Landing/components/BetaDisclaimer/index.messages.js",
"start": { "start": {
"line": 18, "line": 18,

@ -0,0 +1,54 @@
[
{
"id": "TR_YOUR_BROWSER_IS_NOT_SUPPORTED",
"defaultMessage": "Your browser is not supported",
"file": "src/views/Landing/components/BrowserNotSupported/index.messages.js",
"start": {
"line": 6,
"column": 38
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_PLEASE_CHOOSE_ONE_OF_THE_SUPPORTED",
"defaultMessage": "Please choose one of the supported browsers",
"file": "src/views/Landing/components/BrowserNotSupported/index.messages.js",
"start": {
"line": 10,
"column": 43
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_GET_CHROME",
"defaultMessage": "Get Chrome",
"file": "src/views/Landing/components/BrowserNotSupported/index.messages.js",
"start": {
"line": 14,
"column": 19
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_GET_FIREFOX",
"defaultMessage": "Get Firefox",
"file": "src/views/Landing/components/BrowserNotSupported/index.messages.js",
"start": {
"line": 18,
"column": 20
},
"end": {
"line": 21,
"column": 5
}
}
]

@ -51,29 +51,16 @@
"column": 5 "column": 5
} }
}, },
{
"id": "TR_CHECK_FOR_DEVICES",
"defaultMessage": "Check for devices",
"file": "src/views/Landing/components/ConnectDevice/index.messages.js",
"start": {
"line": 22,
"column": 26
},
"end": {
"line": 25,
"column": 5
}
},
{ {
"id": "TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING", "id": "TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING",
"defaultMessage": "Device not recognized? Try installing the {link}.", "defaultMessage": "Device not recognized? Try installing the {link}.",
"file": "src/views/Landing/components/ConnectDevice/index.messages.js", "file": "src/views/Landing/components/ConnectDevice/index.messages.js",
"start": { "start": {
"line": 26, "line": 22,
"column": 45 "column": 45
}, },
"end": { "end": {
"line": 29, "line": 25,
"column": 5 "column": 5
} }
}, },
@ -82,11 +69,11 @@
"defaultMessage": "Don't have a Trezor? {getOne}", "defaultMessage": "Don't have a Trezor? {getOne}",
"file": "src/views/Landing/components/ConnectDevice/index.messages.js", "file": "src/views/Landing/components/ConnectDevice/index.messages.js",
"start": { "start": {
"line": 30, "line": 26,
"column": 27 "column": 27
}, },
"end": { "end": {
"line": 33, "line": 29,
"column": 5 "column": 5
} }
}, },
@ -96,11 +83,11 @@
"defaultMessage": "Get one", "defaultMessage": "Get one",
"file": "src/views/Landing/components/ConnectDevice/index.messages.js", "file": "src/views/Landing/components/ConnectDevice/index.messages.js",
"start": { "start": {
"line": 34, "line": 30,
"column": 16 "column": 16
}, },
"end": { "end": {
"line": 38, "line": 34,
"column": 5 "column": 5
} }
} }

@ -0,0 +1,94 @@
[
{
"id": "TR_NEW_COMMUNICATION_TOOL",
"defaultMessage": "New communication tool to facilitate the connection between your Trezor and your internet browser.",
"file": "src/views/Landing/views/InstallBridge/index.messages.js",
"start": {
"line": 6,
"column": 31
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_DOWNLOAD_LATEST_BRIDGE",
"defaultMessage": "Download latest Bridge {version}",
"file": "src/views/Landing/views/InstallBridge/index.messages.js",
"start": {
"line": 10,
"column": 31
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_LEARN_MORE_ABOUT_LATEST_VERSION",
"defaultMessage": "Learn more about latest version in {TR_CHANGELOG}.",
"file": "src/views/Landing/views/InstallBridge/index.messages.js",
"start": {
"line": 14,
"column": 40
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_CHANGELOG",
"description": "Part of the sentence: Learn more about latest version in {TR_CHANGELOG}.",
"defaultMessage": "Changelog",
"file": "src/views/Landing/views/InstallBridge/index.messages.js",
"start": {
"line": 18,
"column": 18
},
"end": {
"line": 22,
"column": 5
}
},
{
"id": "TR_CHECK_PGP_SIGNATURE",
"defaultMessage": "Check PGP signature",
"file": "src/views/Landing/views/InstallBridge/index.messages.js",
"start": {
"line": 23,
"column": 28
},
"end": {
"line": 26,
"column": 5
}
},
{
"id": "TR_DONT_UPGRADE_BRIDGE",
"defaultMessage": "No, I don't want to upgrade Bridge now",
"file": "src/views/Landing/views/InstallBridge/index.messages.js",
"start": {
"line": 27,
"column": 28
},
"end": {
"line": 30,
"column": 5
}
},
{
"id": "TR_TAKE_ME_BACK_TO_WALLET",
"defaultMessage": "Take me back to the wallet",
"file": "src/views/Landing/views/InstallBridge/index.messages.js",
"start": {
"line": 31,
"column": 31
},
"end": {
"line": 34,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_FIND_OUT_MORE_INFO",
"defaultMessage": "Find out more info",
"file": "src/views/Wallet/components/Content/components/FirmwareUnsupported/index.messages.js",
"start": {
"line": 6,
"column": 27
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_MODEL_DOES_NOT_SUPPORT_COIN",
"defaultMessage": "The coin {coin} is not supported by your Trezor model.",
"file": "src/views/Wallet/components/Content/components/FirmwareUnsupported/index.messages.js",
"start": {
"line": 10,
"column": 36
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_INITIALIZING_ACCOUNTS",
"defaultMessage": "Initializing accounts",
"file": "src/views/Wallet/components/Content/index.messages.js",
"start": {
"line": 6,
"column": 30
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,68 @@
[
{
"id": "TR_ACCOUNT_HASH",
"description": "Used in auto-generated account label",
"defaultMessage": "Account #{number}",
"file": "src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js",
"start": {
"line": 6,
"column": 21
},
"end": {
"line": 10,
"column": 5
}
},
{
"id": "TR_LOADING_DOT_DOT_DOT",
"defaultMessage": "Loading...",
"file": "src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js",
"start": {
"line": 11,
"column": 28
},
"end": {
"line": 14,
"column": 5
}
},
{
"id": "TR_TO_ADD_A_NEW_ACCOUNT_LAST",
"defaultMessage": "To add a new account, last account must have some transactions.",
"file": "src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js",
"start": {
"line": 15,
"column": 34
},
"end": {
"line": 18,
"column": 5
}
},
{
"id": "TR_TO_ADD_ACCOUNTS",
"defaultMessage": "To add accounts, make sure your device is connected.",
"file": "src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js",
"start": {
"line": 19,
"column": 24
},
"end": {
"line": 22,
"column": 5
}
},
{
"id": "TR_ADD_ACCOUNT",
"defaultMessage": "Add account",
"file": "src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js",
"start": {
"line": 23,
"column": 20
},
"end": {
"line": 26,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_OTHER_COINS",
"defaultMessage": "Other coins",
"file": "src/views/Wallet/components/LeftNavigation/components/CoinMenu/index.messages.js",
"start": {
"line": 6,
"column": 20
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_YOU_WILL_BE_REDIRECTED",
"defaultMessage": "(You will be redirected)",
"file": "src/views/Wallet/components/LeftNavigation/components/CoinMenu/index.messages.js",
"start": {
"line": 10,
"column": 31
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,42 @@
[
{
"id": "TR_CHANGE_WALLET_TYPE",
"defaultMessage": "Change wallet type",
"file": "src/views/Wallet/components/LeftNavigation/components/DeviceMenu/components/MenuItems/index.messages.js",
"start": {
"line": 6,
"column": 27
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_RENEW_SESSION",
"description": "TODO",
"defaultMessage": "Renew session",
"file": "src/views/Wallet/components/LeftNavigation/components/DeviceMenu/components/MenuItems/index.messages.js",
"start": {
"line": 10,
"column": 22
},
"end": {
"line": 14,
"column": 5
}
},
{
"id": "TR_FORGET_DEVICE",
"defaultMessage": "Forget device",
"file": "src/views/Wallet/components/LeftNavigation/components/DeviceMenu/components/MenuItems/index.messages.js",
"start": {
"line": 15,
"column": 22
},
"end": {
"line": 18,
"column": 5
}
}
]

@ -0,0 +1,93 @@
[
{
"id": "TR_YOU_ARE_IN_YOUR_STANDARD_WALLET",
"defaultMessage": "You are in your standard wallet.",
"file": "src/views/Wallet/components/LeftNavigation/index.messages.js",
"start": {
"line": 6,
"column": 40
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_YOU_ARE_IN_YOUR_WALLET",
"defaultMessage": "You are in your hidden wallet.",
"file": "src/views/Wallet/components/LeftNavigation/index.messages.js",
"start": {
"line": 10,
"column": 38
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_CLICK_HERE_TO_ACCESS_YOUR_HIDDEN",
"defaultMessage": "Click here to access your hidden wallet.",
"file": "src/views/Wallet/components/LeftNavigation/index.messages.js",
"start": {
"line": 14,
"column": 41
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_CLICK_HERE_TO_ACCESS_YOUR_STANDARD",
"defaultMessage": "Click here to access your standard or another hidden wallet.",
"file": "src/views/Wallet/components/LeftNavigation/index.messages.js",
"start": {
"line": 18,
"column": 43
},
"end": {
"line": 21,
"column": 5
}
},
{
"id": "TR_TO_ACCESS_OTHER_WALLETS",
"defaultMessage": "To access other wallets please connect your device.",
"file": "src/views/Wallet/components/LeftNavigation/index.messages.js",
"start": {
"line": 22,
"column": 32
},
"end": {
"line": 25,
"column": 5
}
},
{
"id": "TR_NEED_HELP",
"defaultMessage": "Need help?",
"file": "src/views/Wallet/components/LeftNavigation/index.messages.js",
"start": {
"line": 26,
"column": 18
},
"end": {
"line": 29,
"column": 5
}
},
{
"id": "TR_NUMBER_OF_DEVICES",
"defaultMessage": "Number of devices",
"file": "src/views/Wallet/components/LeftNavigation/index.messages.js",
"start": {
"line": 30,
"column": 26
},
"end": {
"line": 33,
"column": 5
}
}
]

@ -0,0 +1,54 @@
[
{
"id": "TR_SUMMARY",
"defaultMessage": "Summary",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 6,
"column": 16
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_RECEIVE",
"defaultMessage": "Receive",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 10,
"column": 16
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_SEND",
"defaultMessage": "Send",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 14,
"column": 13
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_SIGN_AND_VERIFY",
"defaultMessage": "Sign & Verify",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 18,
"column": 24
},
"end": {
"line": 21,
"column": 5
}
}
]

@ -0,0 +1,41 @@
[
{
"id": "TR_CHECK_ADDRESS_ON_TREZOR",
"defaultMessage": "Check address on Trezor",
"file": "src/views/Wallet/views/Account/Receive/common.messages.js",
"start": {
"line": 6,
"column": 32
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_SHOW_FULL_ADDRESS",
"defaultMessage": "Show full address",
"file": "src/views/Wallet/views/Account/Receive/common.messages.js",
"start": {
"line": 10,
"column": 26
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_QR_CODE",
"defaultMessage": "QR Code",
"file": "src/views/Wallet/views/Account/Receive/common.messages.js",
"start": {
"line": 14,
"column": 16
},
"end": {
"line": 17,
"column": 5
}
}
]

@ -0,0 +1,54 @@
[
{
"id": "TR_UNVERIFIED_ADDRESS_COMMA_CONNECT",
"defaultMessage": "Unverified address, connect your Trezor to verify it",
"file": "src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js",
"start": {
"line": 6,
"column": 41
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_UNVERIFIED_ADDRESS_COMMA_SHOW",
"defaultMessage": "Unverified address, show on Trezor.",
"file": "src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js",
"start": {
"line": 10,
"column": 38
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_SHOW_ON_TREZOR",
"defaultMessage": "Show on Trezor",
"file": "src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js",
"start": {
"line": 14,
"column": 23
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_CONNECT_YOUR_TREZOR_TO_CHECK",
"defaultMessage": "Connect your Trezor to verify this address",
"file": "src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js",
"start": {
"line": 18,
"column": 37
},
"end": {
"line": 21,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_RECEIVE_ETHEREUM_OR_TOKENS",
"defaultMessage": "Receive Ethereum or tokens",
"file": "src/views/Wallet/views/Account/Receive/ethereum/index.messages.js",
"start": {
"line": 6,
"column": 35
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_RECEIVE_RIPPLE",
"defaultMessage": "Receive Ripple",
"file": "src/views/Wallet/views/Account/Receive/ripple/index.messages.js",
"start": {
"line": 6,
"column": 23
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,84 @@
[
{
"id": "TR_AMOUNT",
"defaultMessage": "Amount",
"file": "src/views/Wallet/views/Account/Send/common.messages.js",
"start": {
"line": 6,
"column": 15
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_SET_MAX",
"description": "Used for setting maximum amount in Send form",
"defaultMessage": "Set max",
"file": "src/views/Wallet/views/Account/Send/common.messages.js",
"start": {
"line": 10,
"column": 16
},
"end": {
"line": 14,
"column": 5
}
},
{
"id": "TR_FEE",
"description": "Label in Send form",
"defaultMessage": "Fee",
"file": "src/views/Wallet/views/Account/Send/common.messages.js",
"start": {
"line": 15,
"column": 12
},
"end": {
"line": 19,
"column": 5
}
},
{
"id": "TR_RECOMMENDED_FEES_UPDATED",
"defaultMessage": "Recommended fees updated.",
"file": "src/views/Wallet/views/Account/Send/common.messages.js",
"start": {
"line": 20,
"column": 33
},
"end": {
"line": 23,
"column": 5
}
},
{
"id": "TR_CLICK_HERE_TO_USE_THEM",
"description": "Button to use recommended updated fees.",
"defaultMessage": "Click here to use them",
"file": "src/views/Wallet/views/Account/Send/common.messages.js",
"start": {
"line": 24,
"column": 31
},
"end": {
"line": 28,
"column": 5
}
},
{
"id": "TR_ADVANCED_SETTINGS",
"description": "Shows advanced sending form",
"defaultMessage": "Advanced settings",
"file": "src/views/Wallet/views/Account/Send/common.messages.js",
"start": {
"line": 29,
"column": 26
},
"end": {
"line": 33,
"column": 5
}
}
]

@ -0,0 +1,132 @@
[
{
"id": "TR_GAS_LIMIT",
"defaultMessage": "Gas limit",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 6,
"column": 18
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_GAS_LIMIT_REFERS_TO",
"defaultMessage": "Gas limit refers to the maximum amount of gas user is willing to spendon a particular transaction. {TR_GAS_QUOTATION}. Increasing the gas limit will not get the transaction confirmed sooner. Default value for sending {gasLimitTooltipCurrency} is {gasLimitTooltipValue}.",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 10,
"column": 28
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_GAS_QUOTATION",
"defaultMessage": "Transaction fee = gas limit * gas price",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 14,
"column": 22
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_SET_DEFAULT",
"defaultMessage": "Set default",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 18,
"column": 20
},
"end": {
"line": 21,
"column": 5
}
},
{
"id": "TR_CALCULATING_DOT_DOT",
"defaultMessage": "Calculating...",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 22,
"column": 28
},
"end": {
"line": 25,
"column": 5
}
},
{
"id": "TR_GAS_PRICE",
"defaultMessage": "Gas price",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 26,
"column": 18
},
"end": {
"line": 29,
"column": 5
}
},
{
"id": "TR_GAS_PRICE_REFERS_TO",
"defaultMessage": "Gas price refers to the amount of ether you are willing to pay for every unit of gas, and is usually measured in “Gwei”. {TR_GAS_PRICE_QUOTATION}. Increasing the gas price will get the transaction confirmed sooner but makes it more expensive. The recommended gas price is {recommendedGasPrice} GWEI.",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 30,
"column": 28
},
"end": {
"line": 33,
"column": 5
}
},
{
"id": "TR_GAS_PRICE_QUOTATION",
"defaultMessage": "Transaction fee = gas limit * gas price",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 34,
"column": 28
},
"end": {
"line": 37,
"column": 5
}
},
{
"id": "TR_DATA",
"defaultMessage": "Data",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 38,
"column": 13
},
"end": {
"line": 41,
"column": 5
}
},
{
"id": "TR_DATA_IS_USUALLY_USED",
"defaultMessage": "Data is usually used when you send transactions to contracts.",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 42,
"column": 29
},
"end": {
"line": 45,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_SEND_ETHEREUM_OR_TOKENS",
"defaultMessage": "Send Ethereum or tokens",
"file": "src/views/Wallet/views/Account/Send/ethereum/index.messages.js",
"start": {
"line": 6,
"column": 32
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "YOU_HAVE_TOKEN_BALANCE",
"defaultMessage": "You have: {tokenBalance}",
"file": "src/views/Wallet/views/Account/Send/ethereum/index.messages.js",
"start": {
"line": 10,
"column": 28
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,41 @@
[
{
"id": "TR_XRP_TRANSFER_COST",
"defaultMessage": "Transfer cost in XRP drops",
"file": "src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.messages.js",
"start": {
"line": 6,
"column": 26
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_XRP_DESTINATION_TAG",
"defaultMessage": "Destination tag",
"file": "src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.messages.js",
"start": {
"line": 10,
"column": 28
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_XRP_DESTINATION_TAG_EXPLAINED",
"defaultMessage": "Number that identifies a reason for payment or a non-Ripple account.",
"file": "src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.messages.js",
"start": {
"line": 14,
"column": 38
},
"end": {
"line": 17,
"column": 5
}
}
]

@ -0,0 +1,29 @@
[
{
"id": "TR_XRP_RESERVE",
"description": "XRP reserve input label",
"defaultMessage": "Reserve: {value}",
"file": "src/views/Wallet/views/Account/Send/ripple/index.messages.js",
"start": {
"line": 6,
"column": 20
},
"end": {
"line": 10,
"column": 5
}
},
{
"id": "TR_SEND_RIPPLE",
"defaultMessage": "Send Ripple",
"file": "src/views/Wallet/views/Account/Send/ripple/index.messages.js",
"start": {
"line": 11,
"column": 20
},
"end": {
"line": 14,
"column": 5
}
}
]

@ -0,0 +1,42 @@
[
{
"id": "TR_DEVICE_SETTINGS",
"defaultMessage": "Device settings",
"file": "src/views/common.messages.js",
"start": {
"line": 6,
"column": 24
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_CLEAR",
"description": "Clear form button",
"defaultMessage": "Clear",
"file": "src/views/common.messages.js",
"start": {
"line": 10,
"column": 14
},
"end": {
"line": 14,
"column": 5
}
},
{
"id": "TR_CHECK_FOR_DEVICES",
"defaultMessage": "Check for devices",
"file": "src/views/common.messages.js",
"start": {
"line": 15,
"column": 26
},
"end": {
"line": 18,
"column": 5
}
}
]

@ -1,18 +1,87 @@
"key","source","context","af","ar","bn","zh-CN","zh-TW","cs","nl","en","et","fr","de","el","he","hi","hu","id","it","ja","ko","no","fa","pl","pt-PT","ru","es-ES","sv-SE","tr","uk","vi" "key","source","context","af","ar","bn","zh-CN","zh-TW","cs","nl","en","et","fr","de","el","he","hi","hu","id","it","ja","ko","no","fa","pl","pt-PT","ru","es-ES","sv-SE","tr","uk","vi"
"TR_DEVICE_SETTINGS","Device settings","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CLEAR","Clear","Clear form button","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CHECK_FOR_DEVICES","Check for devices","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_YOU_ARE_OPENING_TREZOR_BETA_WALLET","You are opening Trezor Beta Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_YOU_ARE_OPENING_TREZOR_BETA_WALLET","You are opening Trezor Beta Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TREZOR_BETA_WALLET_IS","{trezorBetaWallet} is a public feature-testing version of the {trezorWallet}, offering the newest features before they are available to the general public.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_TREZOR_BETA_WALLET_IS","{TR_TREZOR_BETA_WALLET} is a public feature-testing version of the {TR_TREZOR_WALLET}, offering the newest features before they are available to the general public.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_IN_CONTRAST_COMMA_TREZOR","In contrast, {trezorWallet} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_IN_CONTRAST_COMMA_TREZOR","In contrast, {TR_TREZOR_WALLET} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_PLEASE_NOTE_THAT_THE_TREZOR","Please note that the {trezorBetaWallet} might be collecting anonymized usage data, especially error logs, for development purposes. The {trezorWallet} does not log any data.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_PLEASE_NOTE_THAT_THE_TREZOR","Please note that the {TR_TREZOR_BETA_WALLET} might be collecting anonymized usage data, especially error logs, for development purposes. The {TR_TREZOR_WALLET} does not log any data.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_OK_COMMA_I_UNDERSTAND","OK, I understand","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_OK_COMMA_I_UNDERSTAND","OK, I understand","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TREZOR_WALLET","Trezor Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_TREZOR_WALLET","Trezor Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TREZOR_BETA_WALLET","Trezor Beta Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_TREZOR_BETA_WALLET","Trezor Beta Wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_YOUR_BROWSER_IS_NOT_SUPPORTED","Your browser is not supported","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_PLEASE_CHOOSE_ONE_OF_THE_SUPPORTED","Please choose one of the supported browsers","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GET_CHROME","Get Chrome","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GET_FIREFOX","Get Firefox","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TREZOR_WALLET_IS_AN_EASY_DASH","Trezor Wallet is an easy-to-use interface for your Trezor. Trezor Wallet allows you to easily control your funds, manage your balance and initiate transfers.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_TREZOR_WALLET_IS_AN_EASY_DASH","Trezor Wallet is an easy-to-use interface for your Trezor. Trezor Wallet allows you to easily control your funds, manage your balance and initiate transfers.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_THE_PRIVATE_BANK_IN_YOUR_HANDS","The private bank in your hands.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_THE_PRIVATE_BANK_IN_YOUR_HANDS","The private bank in your hands.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CONNECT_TREZOR_TO_CONTINUE","Connect Trezor to continue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_CONNECT_TREZOR_TO_CONTINUE","Connect Trezor to continue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_AND","and","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_AND","and","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CHECK_FOR_DEVICES","Check for devices","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING","Device not recognized? Try installing the {link}.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING","Device not recognized? Try installing the {link}.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_DONT_HAVE_A_TREZOR_GET","Don't have a Trezor? {getOne}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_DONT_HAVE_A_TREZOR_GET","Don't have a Trezor? {getOne}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GET_ONE","Get one","Part of the sentence: Dont have a Trezor? Get one","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "TR_GET_ONE","Get one","Part of the sentence: Dont have a Trezor? Get one","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_NEW_COMMUNICATION_TOOL","New communication tool to facilitate the connection between your Trezor and your internet browser.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_DOWNLOAD_LATEST_BRIDGE","Download latest Bridge {version}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_LEARN_MORE_ABOUT_LATEST_VERSION","Learn more about latest version in {TR_CHANGELOG}.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CHANGELOG","Changelog","Part of the sentence: Learn more about latest version in {TR_CHANGELOG}.","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CHECK_PGP_SIGNATURE","Check PGP signature","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_DONT_UPGRADE_BRIDGE","No, I don't want to upgrade Bridge now","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TAKE_ME_BACK_TO_WALLET","Take me back to the wallet","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_FIND_OUT_MORE_INFO","Find out more info","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_MODEL_DOES_NOT_SUPPORT_COIN","The coin {coin} is not supported by your Trezor model.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_INITIALIZING_ACCOUNTS","Initializing accounts","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_ACCOUNT_HASH","Account #{number}","Used in auto-generated account label","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_LOADING_DOT_DOT_DOT","Loading...","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TO_ADD_A_NEW_ACCOUNT_LAST","To add a new account, last account must have some transactions.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TO_ADD_ACCOUNTS","To add accounts, make sure your device is connected.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_ADD_ACCOUNT","Add account","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_OTHER_COINS","Other coins","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_YOU_WILL_BE_REDIRECTED","(You will be redirected)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CHANGE_WALLET_TYPE","Change wallet type","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_RENEW_SESSION","Renew session","TODO","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_FORGET_DEVICE","Forget device","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_YOU_ARE_IN_YOUR_STANDARD_WALLET","You are in your standard wallet.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_YOU_ARE_IN_YOUR_WALLET","You are in your hidden wallet.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CLICK_HERE_TO_ACCESS_YOUR_HIDDEN","Click here to access your hidden wallet.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CLICK_HERE_TO_ACCESS_YOUR_STANDARD","Click here to access your standard or another hidden wallet.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_TO_ACCESS_OTHER_WALLETS","To access other wallets please connect your device.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_NEED_HELP","Need help?","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_NUMBER_OF_DEVICES","Number of devices","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SUMMARY","Summary","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_RECEIVE","Receive","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SEND","Send","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SIGN_AND_VERIFY","Sign & Verify","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CHECK_ADDRESS_ON_TREZOR","Check address on Trezor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SHOW_FULL_ADDRESS","Show full address","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_QR_CODE","QR Code","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_UNVERIFIED_ADDRESS_COMMA_CONNECT","Unverified address, connect your Trezor to verify it","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_UNVERIFIED_ADDRESS_COMMA_SHOW","Unverified address, show on Trezor.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SHOW_ON_TREZOR","Show on Trezor","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CONNECT_YOUR_TREZOR_TO_CHECK","Connect your Trezor to verify this address","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_RECEIVE_ETHEREUM_OR_TOKENS","Receive Ethereum or tokens","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_RECEIVE_RIPPLE","Receive Ripple","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_AMOUNT","Amount","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SET_MAX","Set max","Used for setting maximum amount in Send form","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_FEE","Fee","Label in Send form","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_RECOMMENDED_FEES_UPDATED","Recommended fees updated.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CLICK_HERE_TO_USE_THEM","Click here to use them","Button to use recommended updated fees.","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_ADVANCED_SETTINGS","Advanced settings","Shows advanced sending form","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GAS_LIMIT","Gas limit","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GAS_LIMIT_REFERS_TO","Gas limit refers to the maximum amount of gas user is willing to spendon a particular transaction. {TR_GAS_QUOTATION}. Increasing the gas limit will not get the transaction confirmed sooner. Default value for sending {gasLimitTooltipCurrency} is {gasLimitTooltipValue}.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GAS_QUOTATION","Transaction fee = gas limit * gas price","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SET_DEFAULT","Set default","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_CALCULATING_DOT_DOT","Calculating...","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GAS_PRICE","Gas price","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GAS_PRICE_REFERS_TO","Gas price refers to the amount of ether you are willing to pay for every unit of gas, and is usually measured in “Gwei”. {TR_GAS_PRICE_QUOTATION}. Increasing the gas price will get the transaction confirmed sooner but makes it more expensive. The recommended gas price is {recommendedGasPrice} GWEI.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_GAS_PRICE_QUOTATION","Transaction fee = gas limit * gas price","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_DATA","Data","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_DATA_IS_USUALLY_USED","Data is usually used when you send transactions to contracts.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SEND_ETHEREUM_OR_TOKENS","Send Ethereum or tokens","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"YOU_HAVE_TOKEN_BALANCE","You have: {tokenBalance}","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_XRP_TRANSFER_COST","Transfer cost in XRP drops","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_XRP_DESTINATION_TAG","Destination tag","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_XRP_DESTINATION_TAG_EXPLAINED","Number that identifies a reason for payment or a non-Ripple account.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_XRP_RESERVE","Reserve: {value}","XRP reserve input label","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"TR_SEND_RIPPLE","Send Ripple","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"dashboard.selectyourcoin.title","Please select your coin","Title of the dashboard component if coin was not selected","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "dashboard.selectyourcoin.title","Please select your coin","Title of the dashboard component if coin was not selected","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""
"dashboard.selectyourcoin.body","You will gain access to receiving & sending selected coin","Content of the dashboard component if coin was not selected","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" "dashboard.selectyourcoin.body","You will gain access to receiving & sending selected coin","Content of the dashboard component if coin was not selected","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""

1 key source context af ar bn zh-CN zh-TW cs nl en et fr de el he hi hu id it ja ko no fa pl pt-PT ru es-ES sv-SE tr uk vi
2 TR_DEVICE_SETTINGS Device settings
3 TR_CLEAR Clear Clear form button
4 TR_CHECK_FOR_DEVICES Check for devices
5 TR_YOU_ARE_OPENING_TREZOR_BETA_WALLET You are opening Trezor Beta Wallet
6 TR_TREZOR_BETA_WALLET_IS {trezorBetaWallet} is a public feature-testing version of the {trezorWallet}, offering the newest features before they are available to the general public. {TR_TREZOR_BETA_WALLET} is a public feature-testing version of the {TR_TREZOR_WALLET}, offering the newest features before they are available to the general public.
7 TR_IN_CONTRAST_COMMA_TREZOR In contrast, {trezorWallet} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public. In contrast, {TR_TREZOR_WALLET} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public.
8 TR_PLEASE_NOTE_THAT_THE_TREZOR Please note that the {trezorBetaWallet} might be collecting anonymized usage data, especially error logs, for development purposes. The {trezorWallet} does not log any data. Please note that the {TR_TREZOR_BETA_WALLET} might be collecting anonymized usage data, especially error logs, for development purposes. The {TR_TREZOR_WALLET} does not log any data.
9 TR_OK_COMMA_I_UNDERSTAND OK, I understand
10 TR_TREZOR_WALLET Trezor Wallet
11 TR_TREZOR_BETA_WALLET Trezor Beta Wallet
12 TR_YOUR_BROWSER_IS_NOT_SUPPORTED Your browser is not supported
13 TR_PLEASE_CHOOSE_ONE_OF_THE_SUPPORTED Please choose one of the supported browsers
14 TR_GET_CHROME Get Chrome
15 TR_GET_FIREFOX Get Firefox
16 TR_TREZOR_WALLET_IS_AN_EASY_DASH Trezor Wallet is an easy-to-use interface for your Trezor. Trezor Wallet allows you to easily control your funds, manage your balance and initiate transfers.
17 TR_THE_PRIVATE_BANK_IN_YOUR_HANDS The private bank in your hands.
18 TR_CONNECT_TREZOR_TO_CONTINUE Connect Trezor to continue
19 TR_AND and
TR_CHECK_FOR_DEVICES Check for devices
20 TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING Device not recognized? Try installing the {link}.
21 TR_DONT_HAVE_A_TREZOR_GET Don't have a Trezor? {getOne}
22 TR_GET_ONE Get one Part of the sentence: Dont have a Trezor? Get one
23 TR_NEW_COMMUNICATION_TOOL New communication tool to facilitate the connection between your Trezor and your internet browser.
24 TR_DOWNLOAD_LATEST_BRIDGE Download latest Bridge {version}
25 TR_LEARN_MORE_ABOUT_LATEST_VERSION Learn more about latest version in {TR_CHANGELOG}.
26 TR_CHANGELOG Changelog Part of the sentence: Learn more about latest version in {TR_CHANGELOG}.
27 TR_CHECK_PGP_SIGNATURE Check PGP signature
28 TR_DONT_UPGRADE_BRIDGE No, I don't want to upgrade Bridge now
29 TR_TAKE_ME_BACK_TO_WALLET Take me back to the wallet
30 TR_FIND_OUT_MORE_INFO Find out more info
31 TR_MODEL_DOES_NOT_SUPPORT_COIN The coin {coin} is not supported by your Trezor model.
32 TR_INITIALIZING_ACCOUNTS Initializing accounts
33 TR_ACCOUNT_HASH Account #{number} Used in auto-generated account label
34 TR_LOADING_DOT_DOT_DOT Loading...
35 TR_TO_ADD_A_NEW_ACCOUNT_LAST To add a new account, last account must have some transactions.
36 TR_TO_ADD_ACCOUNTS To add accounts, make sure your device is connected.
37 TR_ADD_ACCOUNT Add account
38 TR_OTHER_COINS Other coins
39 TR_YOU_WILL_BE_REDIRECTED (You will be redirected)
40 TR_CHANGE_WALLET_TYPE Change wallet type
41 TR_RENEW_SESSION Renew session TODO
42 TR_FORGET_DEVICE Forget device
43 TR_YOU_ARE_IN_YOUR_STANDARD_WALLET You are in your standard wallet.
44 TR_YOU_ARE_IN_YOUR_WALLET You are in your hidden wallet.
45 TR_CLICK_HERE_TO_ACCESS_YOUR_HIDDEN Click here to access your hidden wallet.
46 TR_CLICK_HERE_TO_ACCESS_YOUR_STANDARD Click here to access your standard or another hidden wallet.
47 TR_TO_ACCESS_OTHER_WALLETS To access other wallets please connect your device.
48 TR_NEED_HELP Need help?
49 TR_NUMBER_OF_DEVICES Number of devices
50 TR_SUMMARY Summary
51 TR_RECEIVE Receive
52 TR_SEND Send
53 TR_SIGN_AND_VERIFY Sign & Verify
54 TR_CHECK_ADDRESS_ON_TREZOR Check address on Trezor
55 TR_SHOW_FULL_ADDRESS Show full address
56 TR_QR_CODE QR Code
57 TR_UNVERIFIED_ADDRESS_COMMA_CONNECT Unverified address, connect your Trezor to verify it
58 TR_UNVERIFIED_ADDRESS_COMMA_SHOW Unverified address, show on Trezor.
59 TR_SHOW_ON_TREZOR Show on Trezor
60 TR_CONNECT_YOUR_TREZOR_TO_CHECK Connect your Trezor to verify this address
61 TR_RECEIVE_ETHEREUM_OR_TOKENS Receive Ethereum or tokens
62 TR_RECEIVE_RIPPLE Receive Ripple
63 TR_AMOUNT Amount
64 TR_SET_MAX Set max Used for setting maximum amount in Send form
65 TR_FEE Fee Label in Send form
66 TR_RECOMMENDED_FEES_UPDATED Recommended fees updated.
67 TR_CLICK_HERE_TO_USE_THEM Click here to use them Button to use recommended updated fees.
68 TR_ADVANCED_SETTINGS Advanced settings Shows advanced sending form
69 TR_GAS_LIMIT Gas limit
70 TR_GAS_LIMIT_REFERS_TO Gas limit refers to the maximum amount of gas user is willing to spendon a particular transaction. {TR_GAS_QUOTATION}. Increasing the gas limit will not get the transaction confirmed sooner. Default value for sending {gasLimitTooltipCurrency} is {gasLimitTooltipValue}.
71 TR_GAS_QUOTATION Transaction fee = gas limit * gas price
72 TR_SET_DEFAULT Set default
73 TR_CALCULATING_DOT_DOT Calculating...
74 TR_GAS_PRICE Gas price
75 TR_GAS_PRICE_REFERS_TO Gas price refers to the amount of ether you are willing to pay for every unit of gas, and is usually measured in “Gwei”. {TR_GAS_PRICE_QUOTATION}. Increasing the gas price will get the transaction confirmed sooner but makes it more expensive. The recommended gas price is {recommendedGasPrice} GWEI.
76 TR_GAS_PRICE_QUOTATION Transaction fee = gas limit * gas price
77 TR_DATA Data
78 TR_DATA_IS_USUALLY_USED Data is usually used when you send transactions to contracts.
79 TR_SEND_ETHEREUM_OR_TOKENS Send Ethereum or tokens
80 YOU_HAVE_TOKEN_BALANCE You have: {tokenBalance}
81 TR_XRP_TRANSFER_COST Transfer cost in XRP drops
82 TR_XRP_DESTINATION_TAG Destination tag
83 TR_XRP_DESTINATION_TAG_EXPLAINED Number that identifies a reason for payment or a non-Ripple account.
84 TR_XRP_RESERVE Reserve: {value} XRP reserve input label
85 TR_SEND_RIPPLE Send Ripple
86 dashboard.selectyourcoin.title Please select your coin Title of the dashboard component if coin was not selected
87 dashboard.selectyourcoin.body You will gain access to receiving & sending selected coin Content of the dashboard component if coin was not selected

@ -1,4 +1,29 @@
{ {
"TR_DEVICE_SETTINGS": {
"source": "Device settings",
"meta": {
"occurrences": [
"src/views/common.messages.js"
]
}
},
"TR_CLEAR": {
"source": "Clear",
"meta": {
"comment": "Clear form button",
"occurrences": [
"src/views/common.messages.js"
]
}
},
"TR_CHECK_FOR_DEVICES": {
"source": "Check for devices",
"meta": {
"occurrences": [
"src/views/common.messages.js"
]
}
},
"TR_YOU_ARE_OPENING_TREZOR_BETA_WALLET": { "TR_YOU_ARE_OPENING_TREZOR_BETA_WALLET": {
"source": "You are opening Trezor Beta Wallet", "source": "You are opening Trezor Beta Wallet",
"meta": { "meta": {
@ -8,7 +33,7 @@
} }
}, },
"TR_TREZOR_BETA_WALLET_IS": { "TR_TREZOR_BETA_WALLET_IS": {
"source": "{trezorBetaWallet} is a public feature-testing version of the {trezorWallet}, offering the newest features before they are available to the general public.", "source": "{TR_TREZOR_BETA_WALLET} is a public feature-testing version of the {TR_TREZOR_WALLET}, offering the newest features before they are available to the general public.",
"meta": { "meta": {
"occurrences": [ "occurrences": [
"src/views/Landing/components/BetaDisclaimer/index.messages.js" "src/views/Landing/components/BetaDisclaimer/index.messages.js"
@ -16,7 +41,7 @@
} }
}, },
"TR_IN_CONTRAST_COMMA_TREZOR": { "TR_IN_CONTRAST_COMMA_TREZOR": {
"source": "In contrast, {trezorWallet} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public.", "source": "In contrast, {TR_TREZOR_WALLET} is feature-conservative, making sure that its functionality is maximally reliable and dependable for the general public.",
"meta": { "meta": {
"occurrences": [ "occurrences": [
"src/views/Landing/components/BetaDisclaimer/index.messages.js" "src/views/Landing/components/BetaDisclaimer/index.messages.js"
@ -24,7 +49,7 @@
} }
}, },
"TR_PLEASE_NOTE_THAT_THE_TREZOR": { "TR_PLEASE_NOTE_THAT_THE_TREZOR": {
"source": "Please note that the {trezorBetaWallet} might be collecting anonymized usage data, especially error logs, for development purposes. The {trezorWallet} does not log any data.", "source": "Please note that the {TR_TREZOR_BETA_WALLET} might be collecting anonymized usage data, especially error logs, for development purposes. The {TR_TREZOR_WALLET} does not log any data.",
"meta": { "meta": {
"occurrences": [ "occurrences": [
"src/views/Landing/components/BetaDisclaimer/index.messages.js" "src/views/Landing/components/BetaDisclaimer/index.messages.js"
@ -55,6 +80,38 @@
] ]
} }
}, },
"TR_YOUR_BROWSER_IS_NOT_SUPPORTED": {
"source": "Your browser is not supported",
"meta": {
"occurrences": [
"src/views/Landing/components/BrowserNotSupported/index.messages.js"
]
}
},
"TR_PLEASE_CHOOSE_ONE_OF_THE_SUPPORTED": {
"source": "Please choose one of the supported browsers",
"meta": {
"occurrences": [
"src/views/Landing/components/BrowserNotSupported/index.messages.js"
]
}
},
"TR_GET_CHROME": {
"source": "Get Chrome",
"meta": {
"occurrences": [
"src/views/Landing/components/BrowserNotSupported/index.messages.js"
]
}
},
"TR_GET_FIREFOX": {
"source": "Get Firefox",
"meta": {
"occurrences": [
"src/views/Landing/components/BrowserNotSupported/index.messages.js"
]
}
},
"TR_TREZOR_WALLET_IS_AN_EASY_DASH": { "TR_TREZOR_WALLET_IS_AN_EASY_DASH": {
"source": "Trezor Wallet is an easy-to-use interface for your Trezor. Trezor Wallet allows you to easily control your funds, manage your balance and initiate transfers.", "source": "Trezor Wallet is an easy-to-use interface for your Trezor. Trezor Wallet allows you to easily control your funds, manage your balance and initiate transfers.",
"meta": { "meta": {
@ -87,14 +144,6 @@
] ]
} }
}, },
"TR_CHECK_FOR_DEVICES": {
"source": "Check for devices",
"meta": {
"occurrences": [
"src/views/Landing/components/ConnectDevice/index.messages.js"
]
}
},
"TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING": { "TR_DEVICE_NOT_RECOGNIZED_TRY_INSTALLING": {
"source": "Device not recognized? Try installing the {link}.", "source": "Device not recognized? Try installing the {link}.",
"meta": { "meta": {
@ -120,6 +169,518 @@
] ]
} }
}, },
"TR_NEW_COMMUNICATION_TOOL": {
"source": "New communication tool to facilitate the connection between your Trezor and your internet browser.",
"meta": {
"occurrences": [
"src/views/Landing/views/InstallBridge/index.messages.js"
]
}
},
"TR_DOWNLOAD_LATEST_BRIDGE": {
"source": "Download latest Bridge {version}",
"meta": {
"occurrences": [
"src/views/Landing/views/InstallBridge/index.messages.js"
]
}
},
"TR_LEARN_MORE_ABOUT_LATEST_VERSION": {
"source": "Learn more about latest version in {TR_CHANGELOG}.",
"meta": {
"occurrences": [
"src/views/Landing/views/InstallBridge/index.messages.js"
]
}
},
"TR_CHANGELOG": {
"source": "Changelog",
"meta": {
"comment": "Part of the sentence: Learn more about latest version in {TR_CHANGELOG}.",
"occurrences": [
"src/views/Landing/views/InstallBridge/index.messages.js"
]
}
},
"TR_CHECK_PGP_SIGNATURE": {
"source": "Check PGP signature",
"meta": {
"occurrences": [
"src/views/Landing/views/InstallBridge/index.messages.js"
]
}
},
"TR_DONT_UPGRADE_BRIDGE": {
"source": "No, I don't want to upgrade Bridge now",
"meta": {
"occurrences": [
"src/views/Landing/views/InstallBridge/index.messages.js"
]
}
},
"TR_TAKE_ME_BACK_TO_WALLET": {
"source": "Take me back to the wallet",
"meta": {
"occurrences": [
"src/views/Landing/views/InstallBridge/index.messages.js"
]
}
},
"TR_FIND_OUT_MORE_INFO": {
"source": "Find out more info",
"meta": {
"occurrences": [
"src/views/Wallet/components/Content/components/FirmwareUnsupported/index.messages.js"
]
}
},
"TR_MODEL_DOES_NOT_SUPPORT_COIN": {
"source": "The coin {coin} is not supported by your Trezor model.",
"meta": {
"occurrences": [
"src/views/Wallet/components/Content/components/FirmwareUnsupported/index.messages.js"
]
}
},
"TR_INITIALIZING_ACCOUNTS": {
"source": "Initializing accounts",
"meta": {
"occurrences": [
"src/views/Wallet/components/Content/index.messages.js"
]
}
},
"TR_ACCOUNT_HASH": {
"source": "Account #{number}",
"meta": {
"comment": "Used in auto-generated account label",
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js"
]
}
},
"TR_LOADING_DOT_DOT_DOT": {
"source": "Loading...",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js"
]
}
},
"TR_TO_ADD_A_NEW_ACCOUNT_LAST": {
"source": "To add a new account, last account must have some transactions.",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js"
]
}
},
"TR_TO_ADD_ACCOUNTS": {
"source": "To add accounts, make sure your device is connected.",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js"
]
}
},
"TR_ADD_ACCOUNT": {
"source": "Add account",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js"
]
}
},
"TR_OTHER_COINS": {
"source": "Other coins",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/CoinMenu/index.messages.js"
]
}
},
"TR_YOU_WILL_BE_REDIRECTED": {
"source": "(You will be redirected)",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/CoinMenu/index.messages.js"
]
}
},
"TR_CHANGE_WALLET_TYPE": {
"source": "Change wallet type",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/DeviceMenu/components/MenuItems/index.messages.js"
]
}
},
"TR_RENEW_SESSION": {
"source": "Renew session",
"meta": {
"comment": "TODO",
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/DeviceMenu/components/MenuItems/index.messages.js"
]
}
},
"TR_FORGET_DEVICE": {
"source": "Forget device",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/components/DeviceMenu/components/MenuItems/index.messages.js"
]
}
},
"TR_YOU_ARE_IN_YOUR_STANDARD_WALLET": {
"source": "You are in your standard wallet.",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/index.messages.js"
]
}
},
"TR_YOU_ARE_IN_YOUR_WALLET": {
"source": "You are in your hidden wallet.",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/index.messages.js"
]
}
},
"TR_CLICK_HERE_TO_ACCESS_YOUR_HIDDEN": {
"source": "Click here to access your hidden wallet.",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/index.messages.js"
]
}
},
"TR_CLICK_HERE_TO_ACCESS_YOUR_STANDARD": {
"source": "Click here to access your standard or another hidden wallet.",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/index.messages.js"
]
}
},
"TR_TO_ACCESS_OTHER_WALLETS": {
"source": "To access other wallets please connect your device.",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/index.messages.js"
]
}
},
"TR_NEED_HELP": {
"source": "Need help?",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/index.messages.js"
]
}
},
"TR_NUMBER_OF_DEVICES": {
"source": "Number of devices",
"meta": {
"occurrences": [
"src/views/Wallet/components/LeftNavigation/index.messages.js"
]
}
},
"TR_SUMMARY": {
"source": "Summary",
"meta": {
"occurrences": [
"src/views/Wallet/components/TopNavigationAccount/index.messages.js"
]
}
},
"TR_RECEIVE": {
"source": "Receive",
"meta": {
"occurrences": [
"src/views/Wallet/components/TopNavigationAccount/index.messages.js"
]
}
},
"TR_SEND": {
"source": "Send",
"meta": {
"occurrences": [
"src/views/Wallet/components/TopNavigationAccount/index.messages.js"
]
}
},
"TR_SIGN_AND_VERIFY": {
"source": "Sign & Verify",
"meta": {
"occurrences": [
"src/views/Wallet/components/TopNavigationAccount/index.messages.js"
]
}
},
"TR_CHECK_ADDRESS_ON_TREZOR": {
"source": "Check address on Trezor",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/common.messages.js"
]
}
},
"TR_SHOW_FULL_ADDRESS": {
"source": "Show full address",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/common.messages.js"
]
}
},
"TR_QR_CODE": {
"source": "QR Code",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/common.messages.js"
]
}
},
"TR_UNVERIFIED_ADDRESS_COMMA_CONNECT": {
"source": "Unverified address, connect your Trezor to verify it",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js"
]
}
},
"TR_UNVERIFIED_ADDRESS_COMMA_SHOW": {
"source": "Unverified address, show on Trezor.",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js"
]
}
},
"TR_SHOW_ON_TREZOR": {
"source": "Show on Trezor",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js"
]
}
},
"TR_CONNECT_YOUR_TREZOR_TO_CHECK": {
"source": "Connect your Trezor to verify this address",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/components/VerifyAddressTooltip/index.messages.js"
]
}
},
"TR_RECEIVE_ETHEREUM_OR_TOKENS": {
"source": "Receive Ethereum or tokens",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/ethereum/index.messages.js"
]
}
},
"TR_RECEIVE_RIPPLE": {
"source": "Receive Ripple",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Receive/ripple/index.messages.js"
]
}
},
"TR_AMOUNT": {
"source": "Amount",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/common.messages.js"
]
}
},
"TR_SET_MAX": {
"source": "Set max",
"meta": {
"comment": "Used for setting maximum amount in Send form",
"occurrences": [
"src/views/Wallet/views/Account/Send/common.messages.js"
]
}
},
"TR_FEE": {
"source": "Fee",
"meta": {
"comment": "Label in Send form",
"occurrences": [
"src/views/Wallet/views/Account/Send/common.messages.js"
]
}
},
"TR_RECOMMENDED_FEES_UPDATED": {
"source": "Recommended fees updated.",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/common.messages.js"
]
}
},
"TR_CLICK_HERE_TO_USE_THEM": {
"source": "Click here to use them",
"meta": {
"comment": "Button to use recommended updated fees.",
"occurrences": [
"src/views/Wallet/views/Account/Send/common.messages.js"
]
}
},
"TR_ADVANCED_SETTINGS": {
"source": "Advanced settings",
"meta": {
"comment": "Shows advanced sending form",
"occurrences": [
"src/views/Wallet/views/Account/Send/common.messages.js"
]
}
},
"TR_GAS_LIMIT": {
"source": "Gas limit",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_GAS_LIMIT_REFERS_TO": {
"source": "Gas limit refers to the maximum amount of gas user is willing to spendon a particular transaction. {TR_GAS_QUOTATION}. Increasing the gas limit will not get the transaction confirmed sooner. Default value for sending {gasLimitTooltipCurrency} is {gasLimitTooltipValue}.",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_GAS_QUOTATION": {
"source": "Transaction fee = gas limit * gas price",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_SET_DEFAULT": {
"source": "Set default",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_CALCULATING_DOT_DOT": {
"source": "Calculating...",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_GAS_PRICE": {
"source": "Gas price",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_GAS_PRICE_REFERS_TO": {
"source": "Gas price refers to the amount of ether you are willing to pay for every unit of gas, and is usually measured in “Gwei”. {TR_GAS_PRICE_QUOTATION}. Increasing the gas price will get the transaction confirmed sooner but makes it more expensive. The recommended gas price is {recommendedGasPrice} GWEI.",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_GAS_PRICE_QUOTATION": {
"source": "Transaction fee = gas limit * gas price",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_DATA": {
"source": "Data",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_DATA_IS_USUALLY_USED": {
"source": "Data is usually used when you send transactions to contracts.",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js"
]
}
},
"TR_SEND_ETHEREUM_OR_TOKENS": {
"source": "Send Ethereum or tokens",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/index.messages.js"
]
}
},
"YOU_HAVE_TOKEN_BALANCE": {
"source": "You have: {tokenBalance}",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ethereum/index.messages.js"
]
}
},
"TR_XRP_TRANSFER_COST": {
"source": "Transfer cost in XRP drops",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.messages.js"
]
}
},
"TR_XRP_DESTINATION_TAG": {
"source": "Destination tag",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.messages.js"
]
}
},
"TR_XRP_DESTINATION_TAG_EXPLAINED": {
"source": "Number that identifies a reason for payment or a non-Ripple account.",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ripple/components/AdvancedForm/index.messages.js"
]
}
},
"TR_XRP_RESERVE": {
"source": "Reserve: {value}",
"meta": {
"comment": "XRP reserve input label",
"occurrences": [
"src/views/Wallet/views/Account/Send/ripple/index.messages.js"
]
}
},
"TR_SEND_RIPPLE": {
"source": "Send Ripple",
"meta": {
"occurrences": [
"src/views/Wallet/views/Account/Send/ripple/index.messages.js"
]
}
},
"dashboard.selectyourcoin.title": { "dashboard.selectyourcoin.title": {
"source": "Please select your coin", "source": "Please select your coin",
"meta": { "meta": {

Loading…
Cancel
Save