add more intl support

pull/402/head^2
slowbackspace 5 years ago
parent 1cd92a9872
commit b219cd5012

@ -1,6 +1,6 @@
/* @flow */
import React, { PureComponent } from 'react';
import * as React from 'react';
import PropTypes from 'prop-types';
import styled, { css } from 'styled-components';
import colors from 'config/colors';
@ -11,7 +11,7 @@ import { FONT_SIZE } from 'config/variables';
type Props = {
onClick: (event: KeyboardEvent) => void,
isChecked: boolean,
children: string,
children: React.Node,
}
const Wrapper = styled.div`
@ -62,7 +62,7 @@ const Label = styled.div`
}
`;
class Checkbox extends PureComponent<Props> {
class Checkbox extends React.PureComponent<Props> {
handleKeyboard(event: KeyboardEvent) {
if (event.keyCode === 32) {
this.props.onClick(event);

@ -1,9 +1,11 @@
import React from 'react';
import { FormattedMessage } from 'react-intl';
import RcTooltip from 'rc-tooltip';
import colors from 'config/colors';
import Link from 'components/Link';
import styled from 'styled-components';
import PropTypes from 'prop-types';
import l10nMessages from './index.messages';
const Wrapper = styled.div``;
@ -43,7 +45,7 @@ const Tooltip = ({
<Content maxWidth={maxWidth}>{content}</Content>
{readMoreLink && (
<Link href={readMoreLink}>
<ReadMore>Read more</ReadMore>
<ReadMore><FormattedMessage {...l10nMessages.TR_READ_MORE} /></ReadMore>
</Link>
)
}

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

@ -1,9 +1,10 @@
/* @flow */
import * as React from 'react';
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import QrReader from 'react-qr-reader';
import styled from 'styled-components';
import { FormattedMessage, injectIntl } from 'react-intl';
import colors from 'config/colors';
import icons from 'config/icons';
@ -15,6 +16,7 @@ import Link from 'components/Link';
import { parseUri } from 'utils/cryptoUriParser';
import type { parsedURI } from 'utils/cryptoUriParser';
import l10nMessages from './index.messages';
import type { Props as BaseProps } from '../Container';
const Wrapper = styled.div`
@ -59,7 +61,8 @@ const StyledQrReader = styled(QrReader)`
type Props = {
onScan: (data: parsedURI) => any,
onError?: (error: any) => any,
onCancel?: $ElementType<$ElementType<BaseProps, 'modalActions'>, 'onCancel'>;
onCancel?: $ElementType<$ElementType<BaseProps, 'modalActions'>, 'onCancel'>,
intl: any,
}
type State = {
@ -67,7 +70,7 @@ type State = {
error: any,
};
class QrModal extends React.Component<Props, State> {
class QrModal extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
@ -111,15 +114,15 @@ class QrModal extends React.Component<Props, State> {
if (err.name === 'NotAllowedError' || err.name === 'PermissionDeniedError'
|| err.name === 'NotReadableError' || err.name === 'TrackStartError') {
this.setState({
error: 'Permission to access the camera was denied.',
error: this.props.intl.formatMessage(l10nMessages.TR_CAMERA_PERMISSION_DENIED),
});
} else if (err.name === 'NotFoundError' || err.name === 'DevicesNotFoundError') {
this.setState({
error: 'The camera was not recognized.',
error: this.props.intl.formatMessage(l10nMessages.TR_CAMERA_NOT_RECOGNIZED),
});
} else {
this.setState({
error: 'Unknown error. See console logs for details.',
error: this.props.intl.formatMessage(l10nMessages.TR_UNKOWN_ERROR_SEE_CONSOLE),
});
}
}
@ -142,11 +145,11 @@ class QrModal extends React.Component<Props, State> {
/>
</CloseLink>
<Padding>
<H2>Scan QR code</H2>
{!this.state.readerLoaded && !this.state.error && <CameraPlaceholder>Waiting for camera...</CameraPlaceholder>}
<H2><FormattedMessage {...l10nMessages.TR_SCAN_QR_CODE} /></H2>
{!this.state.readerLoaded && !this.state.error && <CameraPlaceholder><FormattedMessage {...l10nMessages.TR_WAITING_FOR_CAMERA} /></CameraPlaceholder>}
{this.state.error && (
<Error>
<ErrorTitle>Oops! Something went wrong!</ErrorTitle>
<ErrorTitle><FormattedMessage {...l10nMessages.TR_OOPS_SOMETHING_WENT_WRONG} /></ErrorTitle>
<ErrorMessage>{this.state.error.toString()}</ErrorMessage>
</Error>
)}
@ -170,6 +173,7 @@ QrModal.propTypes = {
onScan: PropTypes.func.isRequired,
onError: PropTypes.func,
onCancel: PropTypes.func,
intl: PropTypes.any,
};
export default QrModal;
export default injectIntl(QrModal);

@ -0,0 +1,33 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_SCAN_QR_CODE: {
id: 'TR_SCAN_QR_CODE',
defaultMessage: 'Scan QR code',
description: 'Title for the Scan QR modal dialog',
},
TR_WAITING_FOR_CAMERA: {
id: 'TR_WAITING_FOR_CAMERA',
defaultMessage: 'Waiting for camera...',
},
TR_OOPS_SOMETHING_WENT_WRONG: {
id: 'TR_OOPS_SOMETHING_WENT_WRONG',
defaultMessage: 'Oops! Something went wrong!',
},
TR_CAMERA_PERMISSION_DENIED: {
id: 'TR_CAMERA_PERMISSION_DENIED',
defaultMessage: 'Permission to access the camera was denied.',
},
TR_CAMERA_NOT_RECOGNIZED: {
id: 'TR_CAMERA_NOT_RECOGNIZED',
defaultMessage: 'The camera was not recognized.',
},
TR_UNKOWN_ERROR_SEE_CONSOLE: {
id: 'TR_UNKOWN_ERROR_SEE_CONSOLE',
defaultMessage: 'Unknown error. See console logs for details.',
},
});
export default definedMessages;

@ -7,8 +7,11 @@ import { H3 } from 'components/Heading';
import P from 'components/Paragraph';
import Loader from 'components/Loader';
import Button from 'components/Button';
import { FormattedMessage } from 'react-intl';
import type { TrezorDevice } from 'flowtype';
import l10nMessages from './index.messages';
import type { Props as BaseProps } from '../../Container';
type Props = {
@ -113,7 +116,7 @@ class RememberDevice extends PureComponent<Props, State> {
const { device, instances, onRememberDevice } = this.props;
let { label } = device;
const devicePlural: string = instances && instances.length > 1 ? 'devices or to remember them' : 'device or to remember it';
const deviceCount = instances ? instances.length : 0;
if (instances && instances.length > 0) {
label = instances.map((instance, index) => {
let comma: string = '';
@ -125,12 +128,28 @@ class RememberDevice extends PureComponent<Props, State> {
}
return (
<Wrapper>
<H3>Forget {label}?</H3>
<StyledP isSmaller>Would you like Trezor Wallet to forget your { devicePlural }, so that it is still visible even while disconnected?</StyledP>
<H3>
<FormattedMessage
{...l10nMessages.TR_FORGET_LABEL}
values={{
deviceLabel: label,
}}
/>
</H3>
<StyledP isSmaller>
<FormattedMessage
{...l10nMessages.TR_WOULD_YOU_LIKE_TREZOR_WALLET_TO}
values={{
deviceCount,
}}
/>
</StyledP>
<Column>
<Button onClick={() => this.forget()}>
<ButtonContent>
<Text>Forget</Text>
<Text>
<FormattedMessage {...l10nMessages.TR_FORGET} />
</Text>
<StyledLoader
isSmallText
isWhiteText
@ -142,7 +161,8 @@ class RememberDevice extends PureComponent<Props, State> {
<Button
isWhite
onClick={() => onRememberDevice(device)}
>Remember
>
<FormattedMessage {...l10nMessages.TR_REMEMBER} />
</Button>
</Column>
</Wrapper>

@ -0,0 +1,24 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_FORGET_LABEL: {
id: 'TR_FORGET_LABEL',
defaultMessage: 'Forget {deviceLabel}?',
},
TR_WOULD_YOU_LIKE_TREZOR_WALLET_TO: {
id: 'TR_WOULD_YOU_LIKE_TREZOR_WALLET_TO',
defaultMessage: 'Would you like Trezor Wallet to forget your {deviceCount, plural, one {device} other {devices}} or to remember {deviceCount, plural, one {it} other {them}}, so that it is still visible even while disconnected?',
},
TR_FORGET: {
id: 'TR_FORGET',
defaultMessage: 'Forget',
},
TR_REMEMBER: {
id: 'TR_REMEMBER',
defaultMessage: 'Remember',
},
});
export default definedMessages;

@ -14,11 +14,15 @@ import Tooltip from 'components/Tooltip';
import Icon from 'components/Icon';
import Link from 'components/Link';
import WalletTypeIcon from 'components/images/WalletType';
import { FormattedMessage, injectIntl } from 'react-intl';
import type { TrezorDevice } from 'flowtype';
import l10nCommonMessages from 'views/common.messages';
import l10nMessages from './index.messages';
import type { Props as BaseProps } from '../../Container';
type Props = {
intl: any,
device: TrezorDevice;
onWalletTypeRequest: $ElementType<$ElementType<BaseProps, 'modalActions'>, 'onWalletTypeRequest'>;
onCancel: $ElementType<$ElementType<BaseProps, 'modalActions'>, 'onCancel'>;
@ -110,20 +114,36 @@ class WalletType extends PureComponent<Props> {
/>
</StyledLink>
)}
<StyledHeading>{ device.state ? 'Change' : 'Select' } wallet type for { device.instanceLabel }</StyledHeading>
<StyledHeading>{ device.state
? (
<FormattedMessage
{...l10nMessages.TR_CHANGE_WALLET_TYPE_FOR}
values={{ deviceLabel: device.instanceLabel }}
/>
) : (
<FormattedMessage
{...l10nMessages.TR_SELECT_WALLET_TYPE_FOR}
values={{ deviceLabel: device.instanceLabel }}
/>
)}
</StyledHeading>
<Content isTop>
<Header>
<WalletTypeIcon type="standard" size={32} color={colors.TEXT_PRIMARY} />
Standard Wallet
<FormattedMessage {...l10nMessages.TR_STANDARD_WALLET} />
</Header>
<P isSmaller>Continue to access your standard wallet.</P>
<StyledButton onClick={() => onWalletTypeRequest(false)}>Go to your standard wallet</StyledButton>
<P isSmaller>
<FormattedMessage {...l10nMessages.TR_CONTINUE_TO_ACCESS_STANDARD_WALLET} />
</P>
<StyledButton onClick={() => onWalletTypeRequest(false)}>
<FormattedMessage {...l10nCommonMessages.TR_GO_TO_STANDARD_WALLET} />
</StyledButton>
</Content>
<Content>
<Tooltip
maxWidth={285}
placement="top"
content="Passphrase is an optional feature of the Trezor device that is recommended for advanced users only. It is a word or a sentence of your choice. Its main purpose is to access a hidden wallet."
content={this.props.intl.formatMessage(l10nMessages.TR_PASSPHRASE_IS_OPTIONAL_FEATURE)}
readMoreLink="https://wiki.trezor.io/Passphrase"
>
<StyledIcon
@ -138,10 +158,14 @@ class WalletType extends PureComponent<Props> {
size={32}
color={colors.TEXT_PRIMARY}
/>
Hidden Wallet
<FormattedMessage {...l10nMessages.TR_HIDDEN_WALLET} />
</Header>
<P isSmaller>You will be asked to enter your passphrase to unlock your hidden wallet.</P>
<StyledButton isWhite onClick={() => onWalletTypeRequest(true)}>Go to your hidden wallet</StyledButton>
<P isSmaller>
<FormattedMessage {...l10nMessages.TR_ASKED_ENTER_YOUR_PASSPHRASE_TO_UNLOCK} />
</P>
<StyledButton isWhite onClick={() => onWalletTypeRequest(true)}>
<FormattedMessage {...l10nCommonMessages.TR_GO_TO_HIDDEN_WALLET} />
</StyledButton>
</Content>
</Wrapper>
);
@ -154,4 +178,4 @@ WalletType.propTypes = {
onCancel: PropTypes.func.isRequired,
};
export default WalletType;
export default injectIntl(WalletType);

@ -0,0 +1,36 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_SELECT_WALLET_TYPE_FOR: {
id: 'TR_SELECT_WALLET_TYPE_FOR',
defaultMessage: 'Select wallet type for {deviceLabel}',
},
TR_CHANGE_WALLET_TYPE_FOR: {
id: 'TR_CHANGE_WALLET_TYPE_FOR',
defaultMessage: 'Select wallet type for {deviceLabel}',
},
TR_STANDARD_WALLET: {
id: 'TR_STANDARD_WALLET',
defaultMessage: 'Standard wallet',
},
TR_HIDDEN_WALLET: {
id: 'TR_HIDDEN_WALLET',
defaultMessage: 'Hidden wallet',
},
TR_CONTINUE_TO_ACCESS_STANDARD_WALLET: {
id: 'TR_CONTINUE_TO_ACCESS_STANDARD_WALLET',
defaultMessage: 'Continue to access your standard wallet.',
},
TR_PASSPHRASE_IS_OPTIONAL_FEATURE: {
id: 'TR_PASSPHRASE_IS_OPTIONAL_FEATURE',
defaultMessage: 'Passphrase is an optional feature of the Trezor device that is recommended for advanced users only. It is a word or a sentence of your choice. Its main purpose is to access a hidden wallet.',
},
TR_ASKED_ENTER_YOUR_PASSPHRASE_TO_UNLOCK: {
id: 'TR_ASKED_ENTER_YOUR_PASSPHRASE_TO_UNLOCK',
defaultMessage: 'You will be asked to enter your passphrase to unlock your hidden wallet.',
},
});
export default definedMessages;

@ -11,6 +11,10 @@ import Button from 'components/Button';
import { H2 } from 'components/Heading';
import P from 'components/Paragraph';
import coins from 'constants/coins';
import { FormattedMessage } from 'react-intl';
import l10nCommonMessages from '../common.messages';
import l10nMessages from './index.messages';
import CardanoImage from './images/cardano.png';
import type { Props as BaseProps } from '../../Container';
@ -54,11 +58,17 @@ const CardanoWallet = (props: Props) => (
/>
</StyledLink>
<Img src={CardanoImage} />
<H2>Cardano wallet</H2>
<P isSmaller>You will be redirected to external wallet</P>
<H2>
<FormattedMessage {...l10nMessages.TR_CARDANO_WALLET} />
</H2>
<P isSmaller>
<FormattedMessage {...l10nCommonMessages.TR_YOU_WILL_BE_REDIRECTED_TO_EXTERNAL} />
</P>
<Link href={coins.find(i => i.id === 'ada').url}>
<StyledButton onClick={props.onCancel}>Go to external wallet</StyledButton>
<StyledButton onClick={props.onCancel}>
<FormattedMessage {...l10nCommonMessages.TR_GO_TO_EXTERNAL_WALLET} />
</StyledButton>
</Link>
</Wrapper>
);

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

@ -8,10 +8,12 @@ import icons from 'config/icons';
import Icon from 'components/Icon';
import Link from 'components/Link';
import Button from 'components/Button';
import { H3, H4 } from 'components/Heading';
import { H2, H4 } from 'components/Heading';
import P from 'components/Paragraph';
import coins from 'constants/coins';
import { FormattedMessage } from 'react-intl';
import l10nMessages from './index.messages';
import NemImage from './images/nem-download.png';
import type { Props as BaseProps } from '../../Container';
@ -51,12 +53,20 @@ const NemWallet = (props: Props) => (
icon={icons.CLOSE}
/>
</StyledLink>
<H3>NEM Wallet</H3>
<P isSmaller>We have partnered up with the NEM Foundation to provide you with a full-fledged NEM Wallet.</P>
<H4>Make sure you download the Universal Client for Trezor support.</H4>
<H2>
<FormattedMessage {...l10nMessages.TR_NEM_WALLET} />
</H2>
<P isSmaller>
<FormattedMessage {...l10nMessages.TR_WE_HAVE_PARTNERED_UP_WITH_THE_NEM} />
</P>
<H4>
<FormattedMessage {...l10nMessages.TR_MAKE_SURE_YOU_DOWNLOAD_THE_UNIVERSAL} />
</H4>
<Img src={NemImage} />
<Link href={coins.find(i => i.id === 'xem').url}>
<StyledButton>Go to nem.io</StyledButton>
<StyledButton>
<FormattedMessage {...l10nMessages.TR_GO_TO_NEM_DOT_IO} />
</StyledButton>
</Link>
</Wrapper>
);

@ -0,0 +1,24 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_NEM_WALLET: {
id: 'TR_NEM_WALLET',
defaultMessage: 'NEM wallet',
},
TR_WE_HAVE_PARTNERED_UP_WITH_THE_NEM: {
id: 'TR_WE_HAVE_PARTNERED_UP_WITH_THE_NEM',
defaultMessage: 'We have partnered up with the NEM Foundation to provide you with a full-fledged NEM Wallet.',
},
TR_MAKE_SURE_YOU_DOWNLOAD_THE_UNIVERSAL: {
id: 'TR_MAKE_SURE_YOU_DOWNLOAD_THE_UNIVERSAL',
defaultMessage: 'Make sure you download the Universal Client for Trezor support.',
},
TR_GO_TO_NEM_DOT_IO: {
id: 'TR_GO_TO_NEM_DOT_IO',
defaultMessage: 'Go to nem.io',
},
});
export default definedMessages;

@ -11,6 +11,10 @@ import Button from 'components/Button';
import { H2 } from 'components/Heading';
import P from 'components/Paragraph';
import coins from 'constants/coins';
import { FormattedMessage } from 'react-intl';
import l10nCommonMessages from '../common.messages';
import l10nMessages from './index.messages';
import StellarImage from './images/xlm.png';
import type { Props as BaseProps } from '../../Container';
@ -54,11 +58,17 @@ const StellarWallet = (props: Props) => (
/>
</StyledLink>
<Img src={StellarImage} />
<H2>Stellar wallet</H2>
<P isSmaller>You will be redirected to external wallet</P>
<H2>
<FormattedMessage {...l10nMessages.TR_STELLAR_WALLET} />
</H2>
<P isSmaller>
<FormattedMessage {...l10nCommonMessages.TR_YOU_WILL_BE_REDIRECTED_TO_EXTERNAL} />
</P>
<Link href={coins.find(i => i.id === 'xlm').url}>
<StyledButton>Go to external wallet</StyledButton>
<StyledButton>
<FormattedMessage {...l10nCommonMessages.TR_GO_TO_EXTERNAL_WALLET} />
</StyledButton>
</Link>
</Wrapper>
);

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

@ -0,0 +1,16 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_YOU_WILL_BE_REDIRECTED_TO_EXTERNAL: {
id: 'TR_YOU_WILL_BE_REDIRECTED_TO_EXTERNAL',
defaultMessage: 'You will be redirected to external wallet',
},
TR_GO_TO_EXTERNAL_WALLET: {
id: 'TR_GO_TO_EXTERNAL_WALLET',
defaultMessage: 'Go to external wallet',
},
});
export default definedMessages;

@ -2,6 +2,8 @@
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import { FormattedMessage } from 'react-intl';
import colors from 'config/colors';
import { FONT_SIZE, TRANSITION } from 'config/variables';
@ -13,6 +15,8 @@ import Button from 'components/Button';
import Input from 'components/inputs/Input';
import type { TrezorDevice } from 'flowtype';
import l10nCommonMessages from 'views/common.messages';
import l10nMessages from './index.messages';
import type { Props as BaseProps } from '../../Container';
type Props = {
@ -202,10 +206,23 @@ class Passphrase extends PureComponent<Props, State> {
render() {
return (
<Wrapper>
<H2>Enter {this.state.deviceLabel} passphrase</H2>
<P isSmaller>Note that passphrase is case-sensitive. If you enter a wrong passphrase, you will not unlock the desired hidden wallet.</P>
<H2>
<FormattedMessage
{...l10nMessages.TR_ENTER_DEVICE_PASSPHRASE}
values={{
deviceLabel: this.state.deviceLabel,
}}
/>
</H2>
<P isSmaller>
<FormattedMessage {...l10nMessages.TR_NOTE_COLON_PASSPHRASE} />
{' '}
<FormattedMessage {...l10nMessages.TR_IF_YOU_FORGET_YOUR_PASSPHRASE_COMMA} />
</P>
<Row>
<Label>Passphrase</Label>
<Label>
<FormattedMessage {...l10nMessages.TR_PASSPHRASE} />
</Label>
<Input
innerRef={(input) => { this.passphraseInput = input; }}
name="passphraseInputValue"
@ -219,7 +236,9 @@ class Passphrase extends PureComponent<Props, State> {
</Row>
{!this.state.shouldShowSingleInput && (
<Row>
<Label>Confirm passphrase</Label>
<Label>
<FormattedMessage {...l10nMessages.TR_CONFIRM_PASSPHRASE} />
</Label>
<Input
name="passphraseCheckInputValue"
type={this.state.isPassphraseHidden ? 'password' : 'text'}
@ -233,30 +252,41 @@ class Passphrase extends PureComponent<Props, State> {
</Row>
)}
{!this.state.doPassphraseInputsMatch && (
<PassphraseError>Passphrases do not match</PassphraseError>
<PassphraseError>
<FormattedMessage {...l10nMessages.TR_PASSPHRASES_DO_NOT_MATCH} />
</PassphraseError>
)}
<Row>
<Checkbox
isChecked={!this.state.isPassphraseHidden}
onClick={() => this.handleCheckboxClick()}
>
Show passphrase
<FormattedMessage {...l10nMessages.TR_SHOW_PASSPHRASE} />
</Checkbox>
</Row>
<Row>
<Button
isDisabled={!this.state.doPassphraseInputsMatch}
onClick={() => this.submitPassphrase()}
>Enter
>
<FormattedMessage {...l10nMessages.TR_ENTER} />
</Button>
</Row>
<Footer>
<P isSmaller>Changed your mind? &nbsp;
<LinkButton
isGreen
onClick={() => this.submitPassphrase(true)}
>Go to your standard wallet
</LinkButton>
<P isSmaller>
<FormattedMessage
{...l10nMessages.TR_CHANGED_YOUR_MIND}
values={{
TR_GO_TO_STANDARD_WALLET: (
<LinkButton
isGreen
onClick={() => this.submitPassphrase(true)}
>
<FormattedMessage {...l10nCommonMessages.TR_GO_TO_STANDARD_WALLET} />
</LinkButton>
),
}}
/>
</P>
</Footer>
</Wrapper>

@ -0,0 +1,46 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_ENTER_DEVICE_PASSPHRASE: {
id: 'TR_ENTER_DEVICE_PASSPHRASE',
defaultMessage: 'Enter {deviceLabel} passphrase',
},
TR_NOTE_COLON_PASSPHRASE: {
id: 'TR_NOTE_COLON_PASSPHRASE',
defaultMessage: 'Note: Passphrase is case-sensitive.',
},
TR_IF_YOU_FORGET_YOUR_PASSPHRASE_COMMA: {
id: 'TR_IF_YOU_FORGET_YOUR_PASSPHRASE_COMMA',
defaultMessage: 'If you forget your passphrase, your wallet is lost for good. There is no way to recover your funds.',
},
TR_CONFIRM_PASSPHRASE: {
id: 'TR_CONFIRM_PASSPHRASE',
defaultMessage: 'Confirm Passphrase',
},
TR_PASSPHRASES_DO_NOT_MATCH: {
id: 'TR_PASSPHRASES_DO_NOT_MATCH',
defaultMessage: 'Passphrases do not match!',
},
TR_SHOW_PASSPHRASE: {
id: 'TR_SHOW_PASSPHRASE',
defaultMessage: 'Show passphrase',
description: 'This is on a passphrase button',
},
TR_ENTER: {
id: 'TR_ENTER',
defaultMessage: 'Enter',
},
TR_PASSPHRASE: {
id: 'TR_PASSPHRASE',
defaultMessage: 'Passphrase',
description: 'Label above input',
},
TR_CHANGED_YOUR_MIND: {
id: 'TR_CHANGED_YOUR_MIND',
defaultMessage: 'Changed your mind? {TR_GO_TO_STANDARD_WALLET}',
},
});
export default definedMessages;

@ -3,11 +3,13 @@
import React from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import { FormattedMessage } from 'react-intl';
import { H3 } from 'components/Heading';
import P from 'components/Paragraph';
import type { TrezorDevice } from 'flowtype';
import l10nMessages from './index.messages';
type Props = {
device: TrezorDevice;
@ -19,8 +21,15 @@ const Wrapper = styled.div`
const InvalidPin = (props: Props) => (
<Wrapper>
<H3>Entered PIN for { props.device.label } is not correct</H3>
<P isSmaller>Retrying...</P>
<H3>
<FormattedMessage
{...l10nMessages.TR_ENTERED_PIN_NOT_CORRECT}
values={{ deviceLabel: props.device.label }}
/>
</H3>
<P isSmaller>
<FormattedMessage {...l10nMessages.TR_RETRYING_DOT_DOT} />
</P>
</Wrapper>
);

@ -0,0 +1,16 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_ENTERED_PIN_NOT_CORRECT: {
id: 'TR_ENTERED_PIN_NOT_CORRECT',
defaultMessage: 'Entered PIN for {deviceLabel} is not correct',
},
TR_RETRYING_DOT_DOT: {
id: 'TR_RETRYING_DOT_DOT',
defaultMessage: 'Retrying...',
},
});
export default definedMessages;

@ -7,8 +7,11 @@ import P from 'components/Paragraph';
import { H2 } from 'components/Heading';
import Link from 'components/Link';
import Button from 'components/Button';
import { FormattedMessage } from 'react-intl';
import l10nCommonMessages from 'views/common.messages';
import type { TrezorDevice } from 'flowtype';
import l10nMessages from './index.messages';
import PinButton from './components/Button';
import PinInput from './components/Input';
@ -146,8 +149,13 @@ class Pin extends PureComponent<Props, State> {
const { pin } = this.state;
return (
<Wrapper>
<H2>Enter { device.label } PIN</H2>
<P isSmaller>The PIN layout is displayed on your Trezor.</P>
<H2>
<FormattedMessage
{...l10nMessages.TR_ENTER_PIN}
values={{ deviceLabel: device.label }}
/>
</H2>
<P isSmaller><FormattedMessage {...l10nMessages.TR_THE_PIN_LAYOUT_IS_DISPLAYED_ON} /></P>
<InputRow>
<PinInput value={pin} onDeleteClick={() => this.onPinBackspace()} />
</InputRow>
@ -167,13 +175,23 @@ class Pin extends PureComponent<Props, State> {
<PinButton type="button" data-value="3" onClick={() => this.onPinAdd(3)}>&#8226;</PinButton>
</PinRow>
<Footer>
<Button type="button" onClick={() => onPinSubmit(pin)}>Enter PIN</Button>
<StyledP isSmaller>Not sure how PIN works?
<StyledLink
isGreen
href="https://wiki.trezor.io/User_manual:Entering_PIN"
>Learn more
</StyledLink>
<Button type="button" onClick={() => onPinSubmit(pin)}>
<FormattedMessage {...l10nMessages.TR_ENTER_PIN} />
</Button>
<StyledP isSmaller>
<FormattedMessage
{...l10nMessages.TR_NOT_SURE_HOW_PIN_WORKS}
values={{
TR_LEARN_MORE: (
<StyledLink
isGreen
href="https://wiki.trezor.io/User_manual:Entering_PIN"
>
<FormattedMessage {...l10nCommonMessages.TR_LEARN_MORE} />
</StyledLink>
),
}}
/>
</StyledP>
</Footer>
</Wrapper>

@ -0,0 +1,24 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_THE_PIN_LAYOUT_IS_DISPLAYED_ON: {
id: 'TR_THE_PIN_LAYOUT_IS_DISPLAYED_ON',
defaultMessage: 'The PIN layout is displayed on your Trezor.',
},
TR_ENTER_DEVICE_PIN: {
id: 'TR_ENTER_DEVICE_PIN',
defaultMessage: 'Enter {deviceLabel} PIN',
},
TR_ENTER_PIN: {
id: 'TR_ENTER_PIN',
defaultMessage: 'Enter PIN',
},
TR_NOT_SURE_HOW_PIN_WORKS: {
id: 'TR_NOT_SURE_HOW_PIN_WORKS',
defaultMessage: 'Not sure how PIN works? {TR_LEARN_MORE}',
},
});
export default definedMessages;

@ -3,9 +3,17 @@ import * as React from 'react';
import Notification from 'components/Notification';
import type { Props } from '../../index';
import l10nMessages from './index.messages';
export default (props: Props) => {
const { online } = props.wallet;
if (online) return null;
return (<Notification key="wallet-offline" type="error" title="Wallet is offline" />);
return (
<Notification
key="wallet-offline"
type="error"
title={props.intl.formatMessage(l10nMessages.TR_YOU_WERE_DISCONNECTED_DOT)}
message={props.intl.formatMessage(l10nMessages.TR_PLEASE_RELOAD_THE_PAGE_DOT)}
/>
);
};

@ -0,0 +1,16 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_YOU_WERE_DISCONNECTED_DOT: {
id: 'TR_YOU_WERE_DISCONNECTED_DOT',
defaultMessage: 'You were disconnected.',
},
TR_PLEASE_RELOAD_THE_PAGE_DOT: {
id: 'TR_PLEASE_RELOAD_THE_PAGE_DOT',
defaultMessage: 'Please check your Internet connection and reload the page.',
},
});
export default definedMessages;

@ -2,7 +2,9 @@
import * as React from 'react';
import Notification from 'components/Notification';
import l10nCommonMessages from 'views/common.messages';
import type { Props } from '../../index';
import l10nMessages from './index.messages';
export default (props: Props) => {
if (props.connect.transport && props.connect.transport.outdated) {
@ -10,10 +12,11 @@ export default (props: Props) => {
<Notification
key="update-bridge"
type="warning"
title="New Trezor Bridge is available"
title={props.intl.formatMessage(l10nMessages.TR_NEW_TREZOR_BRIDGE_IS_AVAILABLE)}
message={props.intl.formatMessage(l10nCommonMessages.TR_UPGRADE_FOR_THE_NEWEST_FEATURES_DOT)}
actions={
[{
label: 'Update',
label: props.intl.formatMessage(l10nCommonMessages.TR_SHOW_DETAILS),
callback: props.routerActions.gotoBridgeUpdate,
}]
}

@ -0,0 +1,12 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_NEW_TREZOR_BRIDGE_IS_AVAILABLE: {
id: 'TR_NEW_TREZOR_BRIDGE_IS_AVAILABLE',
defaultMessage: 'New Trezor Bridge is available.',
},
});
export default definedMessages;

@ -1,9 +1,11 @@
/* @flow */
import * as React from 'react';
import Notification from 'components/Notification';
import l10nCommonMessages from 'views/common.messages';
import type { Props } from '../../index';
import l10nMessages from './index.messages';
export default (props: Props) => {
const { selectedDevice } = props.wallet;
const outdated = selectedDevice && selectedDevice.features && selectedDevice.firmware === 'outdated';
@ -12,10 +14,11 @@ export default (props: Props) => {
<Notification
key="update-firmware"
type="warning"
title="Firmware update"
title={props.intl.formatMessage(l10nMessages.TR_NEW_TREZOR_FIRMWARE_IS_AVAILABLE_DOT)}
message={props.intl.formatMessage(l10nCommonMessages.TR_UPGRADE_FOR_THE_NEWEST_FEATURES_DOT)}
actions={
[{
label: 'Update',
label: props.intl.formatMessage(l10nCommonMessages.TR_SHOW_DETAILS),
callback: props.routerActions.gotoFirmwareUpdate,
}]
}

@ -0,0 +1,12 @@
/* @flow */
import { defineMessages } from 'react-intl';
import type { Messages } from 'flowtype/npm/react-intl';
const definedMessages: Messages = defineMessages({
TR_NEW_TREZOR_FIRMWARE_IS_AVAILABLE_DOT: {
id: 'TR_NEW_TREZOR_FIRMWARE_IS_AVAILABLE_DOT',
defaultMessage: 'New Trezor firmware is available.',
},
});
export default definedMessages;

@ -2,6 +2,7 @@
import * as React from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { injectIntl } from 'react-intl';
import type { MapStateToProps, MapDispatchToProps } from 'react-redux';
import type { State, Dispatch } from 'flowtype';
@ -23,10 +24,12 @@ export type DispatchProps = {
close: typeof NotificationActions.close;
routerActions: typeof RouterActions;
}
type OwnProps = {
intl: any,
};
export type Props = StateProps & DispatchProps;
export type Props = OwnProps & StateProps & DispatchProps;
type OwnProps = {};
const Notifications = (props: Props) => (
<React.Fragment>
@ -46,4 +49,4 @@ const mapDispatchToProps: MapDispatchToProps<Dispatch, OwnProps, DispatchProps>
routerActions: bindActionCreators(RouterActions, dispatch),
});
export default connect(mapStateToProps, mapDispatchToProps)(Notifications);
export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Notifications));

@ -1,6 +1,7 @@
/* @flow */
import * as React from 'react';
import Notification from 'components/Notification';
import l10nMessages from './index.messages';
import type { Props } from '../../index';
@ -21,7 +22,7 @@ export default (props: Props) => {
isActionInProgress={blockchain && blockchain.connecting}
actions={
[{
label: 'Connect',
label: props.intl.formatMessage(l10nMessages.TR_CONNECT_TO_BACKEND),
callback: async () => {
await props.blockchainReconnect(network.shortcut);
},

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

@ -2,6 +2,7 @@
import * as React from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { injectIntl } from 'react-intl';
import type { MapStateToProps, MapDispatchToProps } from 'react-redux';
import type { State, Dispatch } from 'flowtype';
@ -26,10 +27,12 @@ export type DispatchProps = {
close: typeof NotificationActions.close;
blockchainReconnect: typeof reconnect;
}
type OwnProps = {
intl: any
};
export type Props = StateProps & DispatchProps;
export type Props = OwnProps & StateProps & DispatchProps;
type OwnProps = {};
const Notifications = (props: Props) => (
<React.Fragment>
@ -52,4 +55,4 @@ const mapDispatchToProps: MapDispatchToProps<Dispatch, OwnProps, DispatchProps>
blockchainReconnect: bindActionCreators(reconnect, dispatch),
});
export default connect(mapStateToProps, mapDispatchToProps)(Notifications);
export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Notifications));

@ -142,7 +142,7 @@ const FirmwareUpdate = (props: Props) => (
</Button>
</Link>
{deviceUtils.isDeviceAccessible(props.device) && (
<StyledNavLink to="/"><FormattedMessage {...l10nMessages.TR_I_WILL_DO_THAT_LATER} /></StyledNavLink>
<StyledNavLink to="/"><FormattedMessage {...l10nCommonMessages.TR_I_WILL_DO_THAT_LATER} /></StyledNavLink>
)}
</Wrapper>
);

@ -11,10 +11,6 @@ const definedMessages: Messages = defineMessages({
id: 'TR_PLEASE_USE_OLD_WALLET',
defaultMessage: 'Please use Bitcoin wallet interface to update your firmware.',
},
TR_I_WILL_DO_THAT_LATER: {
id: 'TR_I_WILL_DO_THAT_LATER',
defaultMessage: 'Ill do that later.',
},
});
export default definedMessages;

@ -11,10 +11,6 @@ const definedMessages: Messages = defineMessages({
id: 'TR_PLEASE_USE_TO_START_INITIALIZATION',
defaultMessage: 'Please use Bitcoin wallet interface to start initialization process',
},
TR_I_WILL_DO_THAT_LATER: {
id: 'TR_I_WILL_DO_THAT_LATER',
defaultMessage: 'Ill do that later.',
},
});
export default definedMessages;

@ -34,6 +34,30 @@ const definedMessages: Messages = defineMessages({
id: 'TR_TAKE_ME_TO_BITCOIN_WALLET',
defaultMessage: 'Take me to the Bitcoin wallet',
},
TR_I_WILL_DO_THAT_LATER: {
id: 'TR_I_WILL_DO_THAT_LATER',
defaultMessage: 'Ill do that later.',
},
TR_SHOW_DETAILS: {
id: 'TR_SHOW_DETAILS',
defaultMessage: 'Show details',
},
TR_UPGRADE_FOR_THE_NEWEST_FEATURES_DOT: {
id: 'TR_UPGRADE_FOR_THE_NEWEST_FEATURES_DOT',
defaultMessage: 'Upgrade for the newest features.',
},
TR_LEARN_MORE: {
id: 'TR_LEARN_MORE',
defaultMessage: 'Learn more',
},
TR_GO_TO_STANDARD_WALLET: {
id: 'TR_GO_TO_STANDARD_WALLET',
defaultMessage: 'Go to your standard wallet',
},
TR_GO_TO_HIDDEN_WALLET: {
id: 'TR_GO_TO_HIDDEN_WALLET',
defaultMessage: 'Go to your hidden wallet',
},
});
export default definedMessages;

@ -0,0 +1,15 @@
[
{
"id": "TR_READ_MORE",
"defaultMessage": "Read more",
"file": "src/components/Tooltip/index.messages.js",
"start": {
"line": 6,
"column": 18
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,81 @@
[
{
"id": "TR_SCAN_QR_CODE",
"description": "Title for the Scan QR modal dialog",
"defaultMessage": "Scan QR code",
"file": "src/components/modals/QrModal/index.messages.js",
"start": {
"line": 6,
"column": 21
},
"end": {
"line": 10,
"column": 5
}
},
{
"id": "TR_WAITING_FOR_CAMERA",
"defaultMessage": "Waiting for camera...",
"file": "src/components/modals/QrModal/index.messages.js",
"start": {
"line": 11,
"column": 27
},
"end": {
"line": 14,
"column": 5
}
},
{
"id": "TR_OOPS_SOMETHING_WENT_WRONG",
"defaultMessage": "Oops! Something went wrong!",
"file": "src/components/modals/QrModal/index.messages.js",
"start": {
"line": 15,
"column": 34
},
"end": {
"line": 18,
"column": 5
}
},
{
"id": "TR_CAMERA_PERMISSION_DENIED",
"defaultMessage": "Permission to access the camera was denied.",
"file": "src/components/modals/QrModal/index.messages.js",
"start": {
"line": 19,
"column": 33
},
"end": {
"line": 22,
"column": 5
}
},
{
"id": "TR_CAMERA_NOT_RECOGNIZED",
"defaultMessage": "The camera was not recognized.",
"file": "src/components/modals/QrModal/index.messages.js",
"start": {
"line": 23,
"column": 30
},
"end": {
"line": 26,
"column": 5
}
},
{
"id": "TR_UNKOWN_ERROR_SEE_CONSOLE",
"defaultMessage": "Unknown error. See console logs for details.",
"file": "src/components/modals/QrModal/index.messages.js",
"start": {
"line": 27,
"column": 33
},
"end": {
"line": 30,
"column": 5
}
}
]

@ -0,0 +1,54 @@
[
{
"id": "TR_FORGET_LABEL",
"defaultMessage": "Forget {deviceLabel}?",
"file": "src/components/modals/device/Remember/index.messages.js",
"start": {
"line": 6,
"column": 21
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_WOULD_YOU_LIKE_TREZOR_WALLET_TO",
"defaultMessage": "Would you like Trezor Wallet to forget your {deviceCount, plural, one {device} other {devices}} or to remember {deviceCount, plural, one {it} other {them}}, so that it is still visible even while disconnected?",
"file": "src/components/modals/device/Remember/index.messages.js",
"start": {
"line": 10,
"column": 40
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_FORGET",
"defaultMessage": "Forget",
"file": "src/components/modals/device/Remember/index.messages.js",
"start": {
"line": 14,
"column": 15
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_REMEMBER",
"defaultMessage": "Remember",
"file": "src/components/modals/device/Remember/index.messages.js",
"start": {
"line": 18,
"column": 17
},
"end": {
"line": 21,
"column": 5
}
}
]

@ -0,0 +1,93 @@
[
{
"id": "TR_SELECT_WALLET_TYPE_FOR",
"defaultMessage": "Select wallet type for {deviceLabel}",
"file": "src/components/modals/device/WalletType/index.messages.js",
"start": {
"line": 6,
"column": 31
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_CHANGE_WALLET_TYPE_FOR",
"defaultMessage": "Select wallet type for {deviceLabel}",
"file": "src/components/modals/device/WalletType/index.messages.js",
"start": {
"line": 10,
"column": 31
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_STANDARD_WALLET",
"defaultMessage": "Standard wallet",
"file": "src/components/modals/device/WalletType/index.messages.js",
"start": {
"line": 14,
"column": 24
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_HIDDEN_WALLET",
"defaultMessage": "Hidden wallet",
"file": "src/components/modals/device/WalletType/index.messages.js",
"start": {
"line": 18,
"column": 22
},
"end": {
"line": 21,
"column": 5
}
},
{
"id": "TR_CONTINUE_TO_ACCESS_STANDARD_WALLET",
"defaultMessage": "Continue to access your standard wallet.",
"file": "src/components/modals/device/WalletType/index.messages.js",
"start": {
"line": 22,
"column": 43
},
"end": {
"line": 25,
"column": 5
}
},
{
"id": "TR_PASSPHRASE_IS_OPTIONAL_FEATURE",
"defaultMessage": "Passphrase is an optional feature of the Trezor device that is recommended for advanced users only. It is a word or a sentence of your choice. Its main purpose is to access a hidden wallet.",
"file": "src/components/modals/device/WalletType/index.messages.js",
"start": {
"line": 26,
"column": 39
},
"end": {
"line": 29,
"column": 5
}
},
{
"id": "TR_ASKED_ENTER_YOUR_PASSPHRASE_TO_UNLOCK",
"defaultMessage": "You will be asked to enter your passphrase to unlock your hidden wallet.",
"file": "src/components/modals/device/WalletType/index.messages.js",
"start": {
"line": 30,
"column": 46
},
"end": {
"line": 33,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_CARDANO_WALLET",
"defaultMessage": "Cardano wallet",
"file": "src/components/modals/external/Cardano/index.messages.js",
"start": {
"line": 6,
"column": 23
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,54 @@
[
{
"id": "TR_NEM_WALLET",
"defaultMessage": "NEM wallet",
"file": "src/components/modals/external/Nem/index.messages.js",
"start": {
"line": 6,
"column": 19
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_WE_HAVE_PARTNERED_UP_WITH_THE_NEM",
"defaultMessage": "We have partnered up with the NEM Foundation to provide you with a full-fledged NEM Wallet.",
"file": "src/components/modals/external/Nem/index.messages.js",
"start": {
"line": 10,
"column": 42
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_MAKE_SURE_YOU_DOWNLOAD_THE_UNIVERSAL",
"defaultMessage": "Make sure you download the Universal Client for Trezor support.",
"file": "src/components/modals/external/Nem/index.messages.js",
"start": {
"line": 14,
"column": 45
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_GO_TO_NEM_DOT_IO",
"defaultMessage": "Go to nem.io",
"file": "src/components/modals/external/Nem/index.messages.js",
"start": {
"line": 18,
"column": 25
},
"end": {
"line": 21,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_STELLAR_WALLET",
"defaultMessage": "Stellar wallet",
"file": "src/components/modals/external/Stellar/index.messages.js",
"start": {
"line": 6,
"column": 23
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_YOU_WILL_BE_REDIRECTED_TO_EXTERNAL",
"defaultMessage": "You will be redirected to external wallet",
"file": "src/components/modals/external/common.messages.js",
"start": {
"line": 6,
"column": 43
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_GO_TO_EXTERNAL_WALLET",
"defaultMessage": "Go to external wallet",
"file": "src/components/modals/external/common.messages.js",
"start": {
"line": 10,
"column": 30
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,121 @@
[
{
"id": "TR_ENTER_DEVICE_PASSPHRASE",
"defaultMessage": "Enter {deviceLabel} passphrase",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 6,
"column": 32
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_NOTE_COLON_PASSPHRASE",
"defaultMessage": "Note: Passphrase is case-sensitive.",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 10,
"column": 30
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_IF_YOU_FORGET_YOUR_PASSPHRASE_COMMA",
"defaultMessage": "If you forget your passphrase, your wallet is lost for good. There is no way to recover your funds.",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 14,
"column": 44
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_CONFIRM_PASSPHRASE",
"defaultMessage": "Confirm Passphrase",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 18,
"column": 27
},
"end": {
"line": 21,
"column": 5
}
},
{
"id": "TR_PASSPHRASES_DO_NOT_MATCH",
"defaultMessage": "Passphrases do not match!",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 22,
"column": 33
},
"end": {
"line": 25,
"column": 5
}
},
{
"id": "TR_SHOW_PASSPHRASE",
"description": "This is on a passphrase button",
"defaultMessage": "Show passphrase",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 26,
"column": 24
},
"end": {
"line": 30,
"column": 5
}
},
{
"id": "TR_ENTER",
"defaultMessage": "Enter",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 31,
"column": 14
},
"end": {
"line": 34,
"column": 5
}
},
{
"id": "TR_PASSPHRASE",
"description": "Label above input",
"defaultMessage": "Passphrase",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 35,
"column": 19
},
"end": {
"line": 39,
"column": 5
}
},
{
"id": "TR_CHANGED_YOUR_MIND",
"defaultMessage": "Changed your mind? {TR_GO_TO_STANDARD_WALLET}",
"file": "src/components/modals/passphrase/Passphrase/index.messages.js",
"start": {
"line": 40,
"column": 26
},
"end": {
"line": 43,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_ENTERED_PIN_NOT_CORRECT",
"defaultMessage": "Entered PIN for {deviceLabel} is not correct",
"file": "src/components/modals/pin/Invalid/index.messages.js",
"start": {
"line": 6,
"column": 32
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_RETRYING_DOT_DOT",
"defaultMessage": "Retrying...",
"file": "src/components/modals/pin/Invalid/index.messages.js",
"start": {
"line": 10,
"column": 25
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,54 @@
[
{
"id": "TR_THE_PIN_LAYOUT_IS_DISPLAYED_ON",
"defaultMessage": "The PIN layout is displayed on your Trezor.",
"file": "src/components/modals/pin/Pin/index.messages.js",
"start": {
"line": 6,
"column": 39
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_ENTER_DEVICE_PIN",
"defaultMessage": "Enter {deviceLabel} PIN",
"file": "src/components/modals/pin/Pin/index.messages.js",
"start": {
"line": 10,
"column": 25
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_ENTER_PIN",
"defaultMessage": "Enter PIN",
"file": "src/components/modals/pin/Pin/index.messages.js",
"start": {
"line": 14,
"column": 18
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_NOT_SURE_HOW_PIN_WORKS",
"defaultMessage": "Not sure how PIN works? {TR_LEARN_MORE}",
"file": "src/components/modals/pin/Pin/index.messages.js",
"start": {
"line": 18,
"column": 31
},
"end": {
"line": 21,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_YOU_WERE_DISCONNECTED_DOT",
"defaultMessage": "You were disconnected.",
"file": "src/components/notifications/App/components/OnlineStatus/index.messages.js",
"start": {
"line": 6,
"column": 34
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_PLEASE_RELOAD_THE_PAGE_DOT",
"defaultMessage": "Please check your Internet connection and reload the page.",
"file": "src/components/notifications/App/components/OnlineStatus/index.messages.js",
"start": {
"line": 10,
"column": 35
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_NEW_TREZOR_BRIDGE_IS_AVAILABLE",
"defaultMessage": "New Trezor Bridge is available.",
"file": "src/components/notifications/App/components/UpdateBridge/index.messages.js",
"start": {
"line": 6,
"column": 39
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_NEW_TREZOR_FIRMWARE_IS_AVAILABLE_DOT",
"defaultMessage": "New Trezor firmware is available.",
"file": "src/components/notifications/App/components/UpdateFirmware/index.messages.js",
"start": {
"line": 6,
"column": 45
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -0,0 +1,15 @@
[
{
"id": "TR_CONNECT_TO_BACKEND",
"defaultMessage": "Connect",
"file": "src/components/notifications/Context/components/Account/index.messages.js",
"start": {
"line": 6,
"column": 27
},
"end": {
"line": 9,
"column": 5
}
}
]

@ -1,41 +1,14 @@
[
{
"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,
"line": 6,
"column": 34
},
"end": {
"line": 18,
"line": 9,
"column": 5
}
},
@ -44,11 +17,11 @@
"defaultMessage": "To add accounts, make sure your device is connected.",
"file": "src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js",
"start": {
"line": 19,
"line": 10,
"column": 24
},
"end": {
"line": 22,
"line": 13,
"column": 5
}
},
@ -57,11 +30,11 @@
"defaultMessage": "Add account",
"file": "src/views/Wallet/components/LeftNavigation/components/AccountMenu/index.messages.js",
"start": {
"line": 23,
"line": 14,
"column": 20
},
"end": {
"line": 26,
"line": 17,
"column": 5
}
}

@ -1,11 +1,11 @@
[
{
"id": "TR_SUMMARY",
"id": "TR_NAV_SUMMARY",
"defaultMessage": "Summary",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 6,
"column": 16
"column": 20
},
"end": {
"line": 9,
@ -13,12 +13,12 @@
}
},
{
"id": "TR_RECEIVE",
"id": "TR_NAV_RECEIVE",
"defaultMessage": "Receive",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 10,
"column": 16
"column": 20
},
"end": {
"line": 13,
@ -26,12 +26,12 @@
}
},
{
"id": "TR_SEND",
"id": "TR_NAV_SEND",
"defaultMessage": "Send",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 14,
"column": 13
"column": 17
},
"end": {
"line": 17,
@ -39,12 +39,12 @@
}
},
{
"id": "TR_SIGN_AND_VERIFY",
"id": "TR_NAV_SIGN_AND_VERIFY",
"defaultMessage": "Sign & Verify",
"file": "src/views/Wallet/components/TopNavigationAccount/index.messages.js",
"start": {
"line": 18,
"column": 24
"column": 28
},
"end": {
"line": 21,

@ -1,84 +0,0 @@
[
{
"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
}
}
]

@ -53,6 +53,7 @@
},
{
"id": "TR_CALCULATING_DOT_DOT",
"description": "Used when calculating gas limit based on data input in ethereum advanced send form",
"defaultMessage": "Calculating...",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
@ -60,7 +61,7 @@
"column": 28
},
"end": {
"line": 25,
"line": 26,
"column": 5
}
},
@ -69,11 +70,11 @@
"defaultMessage": "Gas price",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 26,
"line": 27,
"column": 18
},
"end": {
"line": 29,
"line": 30,
"column": 5
}
},
@ -82,11 +83,11 @@
"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,
"line": 31,
"column": 28
},
"end": {
"line": 33,
"line": 34,
"column": 5
}
},
@ -95,11 +96,11 @@
"defaultMessage": "Transaction fee = gas limit * gas price",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 34,
"line": 35,
"column": 28
},
"end": {
"line": 37,
"line": 38,
"column": 5
}
},
@ -108,11 +109,11 @@
"defaultMessage": "Data",
"file": "src/views/Wallet/views/Account/Send/ethereum/components/AdvancedForm/index.messages.js",
"start": {
"line": 38,
"line": 39,
"column": 13
},
"end": {
"line": 41,
"line": 42,
"column": 5
}
},
@ -121,11 +122,11 @@
"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,
"line": 43,
"column": 29
},
"end": {
"line": 45,
"line": 46,
"column": 5
}
}

@ -0,0 +1,86 @@
[
{
"id": "TR_MESSAGE",
"description": "Used as a label for message input field in Sign and Verify form",
"defaultMessage": "Message",
"file": "src/views/Wallet/views/Account/SignVerify/index.messages.js",
"start": {
"line": 6,
"column": 16
},
"end": {
"line": 10,
"column": 5
}
},
{
"id": "TR_SIGNATURE",
"description": "Used as a label for signature input field in Sign and Verify form",
"defaultMessage": "Signature",
"file": "src/views/Wallet/views/Account/SignVerify/index.messages.js",
"start": {
"line": 11,
"column": 18
},
"end": {
"line": 15,
"column": 5
}
},
{
"id": "TR_SIGN",
"description": "Sign button in Sign and Verify form",
"defaultMessage": "Sign",
"file": "src/views/Wallet/views/Account/SignVerify/index.messages.js",
"start": {
"line": 16,
"column": 13
},
"end": {
"line": 20,
"column": 5
}
},
{
"id": "TR_VERIFY",
"description": "Verify button in Sign and Verify form",
"defaultMessage": "Verify",
"file": "src/views/Wallet/views/Account/SignVerify/index.messages.js",
"start": {
"line": 21,
"column": 15
},
"end": {
"line": 25,
"column": 5
}
},
{
"id": "TR_VERIFY_MESSAGE",
"description": "Header for the Sign and Verify form",
"defaultMessage": "Verify Message",
"file": "src/views/Wallet/views/Account/SignVerify/index.messages.js",
"start": {
"line": 26,
"column": 23
},
"end": {
"line": 30,
"column": 5
}
},
{
"id": "TR_SIGN_MESSAGE",
"description": "Header for the Sign and Verify form",
"defaultMessage": "Sign Message",
"file": "src/views/Wallet/views/Account/SignVerify/index.messages.js",
"start": {
"line": 31,
"column": 21
},
"end": {
"line": 35,
"column": 5
}
}
]

@ -0,0 +1,93 @@
[
{
"id": "TR_SEE_FULL_TRANSACTION_HISTORY",
"defaultMessage": "See full transaction history",
"file": "src/views/Wallet/views/Account/Summary/common.messages.js",
"start": {
"line": 6,
"column": 37
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_TOKENS",
"defaultMessage": "Tokens",
"file": "src/views/Wallet/views/Account/Summary/common.messages.js",
"start": {
"line": 10,
"column": 15
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_INSERT_TOKEN_NAME",
"defaultMessage": "Insert token name, symbol or address to be able to send it.",
"file": "src/views/Wallet/views/Account/Summary/common.messages.js",
"start": {
"line": 14,
"column": 26
},
"end": {
"line": 17,
"column": 5
}
},
{
"id": "TR_TYPE_IN_A_TOKEN_NAME",
"defaultMessage": "Type in a token name or a token address.",
"file": "src/views/Wallet/views/Account/Summary/common.messages.js",
"start": {
"line": 18,
"column": 29
},
"end": {
"line": 21,
"column": 5
}
},
{
"id": "TR_TOKEN_NOT_FOUND",
"defaultMessage": "Token not found",
"file": "src/views/Wallet/views/Account/Summary/common.messages.js",
"start": {
"line": 22,
"column": 24
},
"end": {
"line": 25,
"column": 5
}
},
{
"id": "TR_ALREADY_USED",
"defaultMessage": "Already used",
"file": "src/views/Wallet/views/Account/Summary/common.messages.js",
"start": {
"line": 26,
"column": 21
},
"end": {
"line": 29,
"column": 5
}
},
{
"id": "TR_HISTORY",
"defaultMessage": "History",
"file": "src/views/Wallet/views/Account/Summary/common.messages.js",
"start": {
"line": 30,
"column": 16
},
"end": {
"line": 33,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_ADD_YOUR_TOKENS",
"defaultMessage": "Add your tokens",
"file": "src/views/Wallet/views/Account/Summary/components/AddTokenMessage/index.messages.js",
"start": {
"line": 6,
"column": 24
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_SEARCH_FOR_THE_TOKEN",
"defaultMessage": "Search for the token or add them manually by pasting token address into search input.",
"file": "src/views/Wallet/views/Account/Summary/components/AddTokenMessage/index.messages.js",
"start": {
"line": 10,
"column": 29
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_BALANCE",
"defaultMessage": "Balance",
"file": "src/views/Wallet/views/Account/Summary/components/Balance/index.messages.js",
"start": {
"line": 6,
"column": 16
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_RATE",
"defaultMessage": "Rate",
"file": "src/views/Wallet/views/Account/Summary/components/Balance/index.messages.js",
"start": {
"line": 10,
"column": 13
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,136 @@
[
{
"id": "TR_AMOUNT",
"defaultMessage": "Amount",
"file": "src/views/Wallet/views/Account/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/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/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/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/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/common.messages.js",
"start": {
"line": 29,
"column": 26
},
"end": {
"line": 33,
"column": 5
}
},
{
"id": "TR_DEVICE_IS_NOT_CONNECTED",
"defaultMessage": "Device is not connected",
"file": "src/views/Wallet/views/Account/common.messages.js",
"start": {
"line": 34,
"column": 32
},
"end": {
"line": 37,
"column": 5
}
},
{
"id": "TR_DEVICE_IS_UNAVAILABLE",
"defaultMessage": "Device is not unavailable",
"file": "src/views/Wallet/views/Account/common.messages.js",
"start": {
"line": 38,
"column": 30
},
"end": {
"line": 41,
"column": 5
}
},
{
"id": "TR_LOADING_ACCOUNTS",
"defaultMessage": "Loading accounts",
"file": "src/views/Wallet/views/Account/common.messages.js",
"start": {
"line": 42,
"column": 25
},
"end": {
"line": 45,
"column": 5
}
},
{
"id": "TR_SEND",
"defaultMessage": "Send {amount}",
"file": "src/views/Wallet/views/Account/common.messages.js",
"start": {
"line": 46,
"column": 13
},
"end": {
"line": 49,
"column": 5
}
}
]

@ -0,0 +1,41 @@
[
{
"id": "TR_DEVICE_USED_IN_OTHER",
"defaultMessage": "Device is used in other window",
"file": "src/views/Wallet/views/Acquire/index.messages.js",
"start": {
"line": 6,
"column": 29
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_USE_YOUR_DEVICE_IN_THIS_WINDOW",
"defaultMessage": "Do you want to use your device in this window?",
"file": "src/views/Wallet/views/Acquire/index.messages.js",
"start": {
"line": 10,
"column": 39
},
"end": {
"line": 13,
"column": 5
}
},
{
"id": "TR_ACQUIRE_DEVICE",
"defaultMessage": "Acquire device",
"file": "src/views/Wallet/views/Acquire/index.messages.js",
"start": {
"line": 14,
"column": 23
},
"end": {
"line": 17,
"column": 5
}
}
]

@ -0,0 +1,29 @@
[
{
"id": "TR_YOUR_DEVICE_IS_IN_FIRMWARE",
"defaultMessage": "Your device is in firmware update mode",
"file": "src/views/Wallet/views/Bootloader/index.messages.js",
"start": {
"line": 6,
"column": 35
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_PLEASE_RECONNECT_IT",
"description": "Call to action to re-connect Trezor device",
"defaultMessage": "Please re-connect it",
"file": "src/views/Wallet/views/Bootloader/index.messages.js",
"start": {
"line": 10,
"column": 28
},
"end": {
"line": 14,
"column": 5
}
}
]

@ -1,12 +1,12 @@
[
{
"id": "dashboard.selectyourcoin.title",
"id": "TR_PLEASE_SELECT_YOUR",
"description": "Title of the dashboard component if coin was not selected",
"defaultMessage": "Please select your coin",
"file": "src/views/Wallet/views/Dashboard/index.messages.js",
"start": {
"line": 6,
"column": 11
"column": 27
},
"end": {
"line": 10,
@ -14,13 +14,13 @@
}
},
{
"id": "dashboard.selectyourcoin.body",
"id": "TR_YOU_WILL_GAIN_ACCESS",
"description": "Content of the dashboard component if coin was not selected",
"defaultMessage": "You will gain access to receiving & sending selected coin",
"file": "src/views/Wallet/views/Dashboard/index.messages.js",
"start": {
"line": 11,
"column": 10
"column": 29
},
"end": {
"line": 15,

@ -0,0 +1,28 @@
[
{
"id": "TR_ITS_TIME_TO_UPDATE_FIRMWARE",
"defaultMessage": "Its time to update your firmware",
"file": "src/views/Wallet/views/FirmwareUpdate/index.messages.js",
"start": {
"line": 6,
"column": 36
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_PLEASE_USE_OLD_WALLET",
"defaultMessage": "Please use Bitcoin wallet interface to update your firmware.",
"file": "src/views/Wallet/views/FirmwareUpdate/index.messages.js",
"start": {
"line": 10,
"column": 30
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_YOUR_DEVICE_IS_NOT_INITIALIZED",
"defaultMessage": "Your device is not initialized",
"file": "src/views/Wallet/views/Initialize/index.messages.js",
"start": {
"line": 6,
"column": 39
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_PLEASE_USE_TO_START_INITIALIZATION",
"defaultMessage": "Please use Bitcoin wallet interface to start initialization process",
"file": "src/views/Wallet/views/Initialize/index.messages.js",
"start": {
"line": 10,
"column": 43
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_DEVICE_IS_INITIALIZED_IN_SEEDLESS_MODE",
"defaultMessage": "Device is initialized in seedless mode and therefore not allowed to access wallet",
"file": "src/views/Wallet/views/Seedless/index.messages.js",
"start": {
"line": 6,
"column": 47
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_DEVICE_IS_IN_SEEDLESS",
"defaultMessage": "Device is in seedless mode",
"file": "src/views/Wallet/views/Seedless/index.messages.js",
"start": {
"line": 10,
"column": 30
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -0,0 +1,28 @@
[
{
"id": "TR_UNREADABLE_DEVICE",
"defaultMessage": "Unreadable device",
"file": "src/views/Wallet/views/UnreadableDevice/index.messages.js",
"start": {
"line": 6,
"column": 26
},
"end": {
"line": 9,
"column": 5
}
},
{
"id": "TR_PLEASE_INSTALL_TREZOR_BRIDGE",
"defaultMessage": "Please install Trezor Bridge",
"file": "src/views/Wallet/views/UnreadableDevice/index.messages.js",
"start": {
"line": 10,
"column": 37
},
"end": {
"line": 13,
"column": 5
}
}
]

@ -12,17 +12,31 @@
"column": 5
}
},
{
"id": "TR_ACCOUNT_HASH",
"description": "Used in auto-generated account label",
"defaultMessage": "Account #{number}",
"file": "src/views/common.messages.js",
"start": {
"line": 10,
"column": 21
},
"end": {
"line": 14,
"column": 5
}
},
{
"id": "TR_CLEAR",
"description": "Clear form button",
"defaultMessage": "Clear",
"file": "src/views/common.messages.js",
"start": {
"line": 10,
"line": 15,
"column": 14
},
"end": {
"line": 14,
"line": 19,
"column": 5
}
},
@ -31,11 +45,129 @@
"defaultMessage": "Check for devices",
"file": "src/views/common.messages.js",
"start": {
"line": 15,
"line": 20,
"column": 26
},
"end": {
"line": 18,
"line": 23,
"column": 5
}
},
{
"id": "TR_ADDRESS",
"description": "Used as label for receive/send address input",
"defaultMessage": "Address",
"file": "src/views/common.messages.js",
"start": {
"line": 24,
"column": 16
},
"end": {
"line": 28,
"column": 5
}
},
{
"id": "TR_LOADING_DOT_DOT_DOT",
"defaultMessage": "Loading...",
"file": "src/views/common.messages.js",
"start": {
"line": 29,
"column": 28
},
"end": {
"line": 32,
"column": 5
}
},
{
"id": "TR_TAKE_ME_TO_BITCOIN_WALLET",
"defaultMessage": "Take me to the Bitcoin wallet",
"file": "src/views/common.messages.js",
"start": {
"line": 33,
"column": 34
},
"end": {
"line": 36,
"column": 5
}
},
{
"id": "TR_I_WILL_DO_THAT_LATER",
"defaultMessage": "Ill do that later.",
"file": "src/views/common.messages.js",
"start": {
"line": 37,
"column": 29
},
"end": {
"line": 40,
"column": 5
}
},
{
"id": "TR_SHOW_DETAILS",
"defaultMessage": "Show details",
"file": "src/views/common.messages.js",
"start": {
"line": 41,
"column": 21
},
"end": {
"line": 44,
"column": 5
}
},
{
"id": "TR_UPGRADE_FOR_THE_NEWEST_FEATURES_DOT",
"defaultMessage": "Upgrade for the newest features.",
"file": "src/views/common.messages.js",
"start": {
"line": 45,
"column": 44
},
"end": {
"line": 48,
"column": 5
}
},
{
"id": "TR_LEARN_MORE",
"defaultMessage": "Learn more",
"file": "src/views/common.messages.js",
"start": {
"line": 49,
"column": 19
},
"end": {
"line": 52,
"column": 5
}
},
{
"id": "TR_GO_TO_STANDARD_WALLET",
"defaultMessage": "Go to your standard wallet",
"file": "src/views/common.messages.js",
"start": {
"line": 53,
"column": 30
},
"end": {
"line": 56,
"column": 5
}
},
{
"id": "TR_GO_TO_HIDDEN_WALLET",
"defaultMessage": "Go to your hidden wallet",
"file": "src/views/common.messages.js",
"start": {
"line": 57,
"column": 28
},
"end": {
"line": 60,
"column": 5
}
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save