Browse Source

merged the 4 translation files into one

gre-patch-1
Valentin D. Pinkman 6 years ago
parent
commit
7343e23018
No known key found for this signature in database GPG Key ID: E7D110669FFB8D3E
  1. 18
      src/components/Onboarding/steps/Analytics.js
  2. 6
      src/components/Onboarding/steps/Finish.js
  3. 16
      src/components/Onboarding/steps/GenuineCheck/GenuineCheckErrorPage.js
  4. 16
      src/components/Onboarding/steps/GenuineCheck/index.js
  5. 10
      src/components/Onboarding/steps/Init.js
  6. 8
      src/components/Onboarding/steps/NoDevice.js
  7. 6
      src/components/Onboarding/steps/SelectDevice.js
  8. 12
      src/components/Onboarding/steps/SelectPIN/SelectPINblue.js
  9. 14
      src/components/Onboarding/steps/SelectPIN/SelectPINnano.js
  10. 12
      src/components/Onboarding/steps/SelectPIN/SelectPINrestoreBlue.js
  11. 14
      src/components/Onboarding/steps/SelectPIN/SelectPINrestoreNano.js
  12. 4
      src/components/Onboarding/steps/SelectPIN/index.js
  13. 10
      src/components/Onboarding/steps/SetPassword.js
  14. 4
      src/components/Onboarding/steps/Start.js
  15. 18
      src/components/Onboarding/steps/WriteSeed/WriteSeedBlue.js
  16. 18
      src/components/Onboarding/steps/WriteSeed/WriteSeedNano.js
  17. 26
      src/components/Onboarding/steps/WriteSeed/WriteSeedRestore.js
  18. 4
      src/components/SettingsPage/LanguageSelect.js
  19. 6
      src/components/TranslatedError.js
  20. 24
      src/components/modals/ShareAnalytics.js
  21. 14
      src/components/modals/TechnicalData.js
  22. 12
      src/reducers/onboarding.js
  23. 391
      static/i18n/en/app.json
  24. 182
      static/i18n/en/errors.json
  25. 5
      static/i18n/en/language.json
  26. 204
      static/i18n/en/onboarding.json

18
src/components/Onboarding/steps/Analytics.js

@ -70,14 +70,14 @@ class Analytics extends PureComponent<StepProps, State> {
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
/>
<StepContainerInner>
<Title data-e2e="onboarding_title">{t('onboarding:analytics.title')}</Title>
<Description>{t('onboarding:analytics.desc')}</Description>
<Title data-e2e="onboarding_title">{t('app:onboarding.analytics.title')}</Title>
<Description>{t('app:onboarding.analytics.desc')}</Description>
<Box mt={5}>
<Container>
<Box>
<Box horizontal mb={1}>
<AnalyticsTitle data-e2e="analytics_techData">
{t('onboarding:analytics.technicalData.title')}
{t('app:onboarding.analytics.technicalData.title')}
</AnalyticsTitle>
<LearnMoreWrapper>
<FakeLink
@ -93,9 +93,9 @@ class Analytics extends PureComponent<StepProps, State> {
</LearnMoreWrapper>
</Box>
<TechnicalData />
<AnalyticsText>{t('onboarding:analytics.technicalData.desc')}</AnalyticsText>
<AnalyticsText>{t('app:onboarding.analytics.technicalData.desc')}</AnalyticsText>
<MandatoryText>
{t('onboarding:analytics.technicalData.mandatoryText')}
{t('app:onboarding.analytics.technicalData.mandatoryText')}
</MandatoryText>
</Box>
<Box justifyContent="center">
@ -106,7 +106,7 @@ class Analytics extends PureComponent<StepProps, State> {
<Box>
<Box horizontal mb={1}>
<AnalyticsTitle data-e2e="analytics_shareAnalytics">
{t('onboarding:analytics.shareAnalytics.title')}
{t('app:onboarding.analytics.shareAnalytics.title')}
</AnalyticsTitle>
<LearnMoreWrapper>
<FakeLink
@ -122,7 +122,7 @@ class Analytics extends PureComponent<StepProps, State> {
</LearnMoreWrapper>
<ShareAnalytics />
</Box>
<AnalyticsText>{t('onboarding:analytics.shareAnalytics.desc')}</AnalyticsText>
<AnalyticsText>{t('app:onboarding.analytics.shareAnalytics.desc')}</AnalyticsText>
</Box>
<Box justifyContent="center">
<Track
@ -140,10 +140,10 @@ class Analytics extends PureComponent<StepProps, State> {
<Box>
<Box mb={1}>
<AnalyticsTitle data-e2e="analytics_reportBugs">
{t('onboarding:analytics.sentryLogs.title')}
{t('app:onboarding.analytics.sentryLogs.title')}
</AnalyticsTitle>
</Box>
<AnalyticsText>{t('onboarding:analytics.sentryLogs.desc')}</AnalyticsText>
<AnalyticsText>{t('app:onboarding.analytics.sentryLogs.desc')}</AnalyticsText>
</Box>
<Box justifyContent="center">
<Track

6
src/components/Onboarding/steps/Finish.js

@ -103,12 +103,12 @@ export default class Finish extends Component<StepProps, *> {
</Box>
<Box pt={5} align="center">
<Title data-e2e="finish_title">{t('onboarding:finish.title')}</Title>
<Description>{t('onboarding:finish.desc')}</Description>
<Title data-e2e="finish_title">{t('app:onboarding.finish.title')}</Title>
<Description>{t('app:onboarding.finish.desc')}</Description>
</Box>
<Box p={5}>
<Button primary onClick={() => finish()} data-e2e="continue_button">
{t('onboarding:finish.openAppButton')}
{t('app:onboarding.finish.openAppButton')}
</Button>
</Box>
<Box horizontal mt={3} flow={5} color="grey">

16
src/components/Onboarding/steps/GenuineCheck/GenuineCheckErrorPage.js

@ -40,21 +40,23 @@ class GenuineCheckErrorPage extends PureComponent<Props, *> {
{onboarding.genuine.isGenuineFail ? (
<Fragment>
{this.trackErrorPage('Not Genuine')}
<Title>{t('onboarding:genuineCheck.errorPage.title.isGenuineFail')}</Title>
<Description>{t('onboarding:genuineCheck.errorPage.desc.isGenuineFail')}</Description>
<Title>{t('app:onboarding.genuineCheck.errorPage.title.isGenuineFail')}</Title>
<Description>
{t('app:onboarding.genuineCheck.errorPage.desc.isGenuineFail')}
</Description>
</Fragment>
) : !onboarding.genuine.pinStepPass ? (
<Fragment>
{this.trackErrorPage('PIN Step')}
<Title>{t('onboarding:genuineCheck.errorPage.title.pinFailed')}</Title>
<Description>{t('onboarding:genuineCheck.errorPage.desc.pinFailed')}</Description>
<Title>{t('app:onboarding.genuineCheck.errorPage.title.pinFailed')}</Title>
<Description>{t('app:onboarding.genuineCheck.errorPage.desc.pinFailed')}</Description>
</Fragment>
) : (
<Fragment>
{this.trackErrorPage('Recovery Phase Step')}
<Title>{t('onboarding:genuineCheck.errorPage.title.recoveryPhraseFailed')}</Title>
<Title>{t('app:onboarding.genuineCheck.errorPage.title.recoveryPhraseFailed')}</Title>
<Description>
{t('onboarding:genuineCheck.errorPage.desc.recoveryPhraseFailed')}
{t('app:onboarding.genuineCheck.errorPage.desc.recoveryPhraseFailed')}
</Description>
</Fragment>
)}
@ -83,7 +85,7 @@ class GenuineCheckErrorPage extends PureComponent<Props, *> {
<ExternalLinkButton
danger
ml="auto"
label={t('onboarding:genuineCheck.buttons.contactSupport')}
label={t('app:onboarding.genuineCheck.buttons.contactSupport')}
url={urls.contactSupport}
/>
</OnboardingFooterWrapper>

16
src/components/Onboarding/steps/GenuineCheck/index.js

@ -174,18 +174,18 @@ class GenuineCheck extends PureComponent<StepProps, State> {
deviceType={onboarding.isLedgerNano ? 'Nano S' : 'Blue'}
/>
<StepContainerInner>
<Title>{t('onboarding:genuineCheck.title')}</Title>
<Title>{t('app:onboarding.genuineCheck.title')}</Title>
{onboarding.flowType === 'restoreDevice' ? (
<Description>{t('onboarding:genuineCheck.descRestore')}</Description>
<Description>{t('app:onboarding.genuineCheck.descRestore')}</Description>
) : (
<Description>{t('onboarding:genuineCheck.descGeneric')}</Description>
<Description>{t('app:onboarding.genuineCheck.descGeneric')}</Description>
)}
<Box mt={5}>
<GenuineCheckCardWrapper>
<Box justify="center">
<Box horizontal>
<IconOptionRow>{'1.'}</IconOptionRow>
<CardTitle>{t('onboarding:genuineCheck.step1.title')}</CardTitle>
<CardTitle>{t('app:onboarding.genuineCheck.step1.title')}</CardTitle>
</Box>
</Box>
<Box justify="center">
@ -204,7 +204,7 @@ class GenuineCheck extends PureComponent<StepProps, State> {
<IconOptionRow color={!genuine.pinStepPass ? 'grey' : 'wallet'}>
{'2.'}
</IconOptionRow>
<CardTitle>{t('onboarding:genuineCheck.step2.title')}</CardTitle>
<CardTitle>{t('app:onboarding.genuineCheck.step2.title')}</CardTitle>
</Box>
</Box>
<Box justify="center">
@ -228,7 +228,7 @@ class GenuineCheck extends PureComponent<StepProps, State> {
<IconOptionRow color={!genuine.recoveryStepPass ? 'grey' : 'wallet'}>
{'3.'}
</IconOptionRow>
<CardTitle>{t('onboarding:genuineCheck.step3.title')}</CardTitle>
<CardTitle>{t('app:onboarding.genuineCheck.step3.title')}</CardTitle>
</Box>
</Box>
{genuine.recoveryStepPass && (
@ -237,7 +237,7 @@ class GenuineCheck extends PureComponent<StepProps, State> {
<Box horizontal align="center" flow={1} color={colors.wallet}>
<IconCheck size={16} />
<Box ff="Open Sans|SemiBold" fontSize={4}>
{t('onboarding:genuineCheck.isGenuinePassed')}
{t('app:onboarding.genuineCheck.isGenuinePassed')}
</Box>
</Box>
) : genuine.genuineCheckUnavailable ? (
@ -250,7 +250,7 @@ class GenuineCheck extends PureComponent<StepProps, State> {
disabled={!genuine.recoveryStepPass}
onClick={this.handleOpenGenuineCheckModal}
>
{t('onboarding:genuineCheck.buttons.genuineCheck')}
{t('app:onboarding.genuineCheck.buttons.genuineCheck')}
</Button>
)}
</Box>

10
src/components/Onboarding/steps/Init.js

@ -30,7 +30,7 @@ class Init extends PureComponent<StepProps, *> {
{
key: 'newDevice',
icon: <IconPlus size={20} />,
title: t('onboarding:init.newDevice.title'),
title: t('app:onboarding.init.newDevice.title'),
onClick: () => {
jumpStep('selectDevice')
flowType('newDevice')
@ -39,7 +39,7 @@ class Init extends PureComponent<StepProps, *> {
{
key: 'restoreDevice',
icon: <IconRecover size={20} />,
title: t('onboarding:init.restoreDevice.title'),
title: t('app:onboarding.init.restoreDevice.title'),
onClick: () => {
jumpStep('selectDevice')
flowType('restoreDevice')
@ -48,7 +48,7 @@ class Init extends PureComponent<StepProps, *> {
{
key: 'initializedDevice',
icon: <IconCheck size={20} />,
title: t('onboarding:init.initializedDevice.title'),
title: t('app:onboarding.init.initializedDevice.title'),
onClick: () => {
jumpStep('selectDevice')
flowType('initializedDevice')
@ -57,7 +57,7 @@ class Init extends PureComponent<StepProps, *> {
{
key: 'noDevice',
icon: <IconExternalLink size={20} />,
title: t('onboarding:noDevice.title'),
title: t('app:onboarding.noDevice.title'),
onClick: () => {
jumpStep('noDevice')
flowType('noDevice')
@ -77,7 +77,7 @@ class Init extends PureComponent<StepProps, *> {
}
/>
<Box m={5} style={{ maxWidth: 480 }}>
<Title>{t('onboarding:init.title')}</Title>
<Title>{t('app:onboarding.init.title')}</Title>
</Box>
<Box pt={4} flow={4}>
{optionCards.map(card => <OptionFlowCard key={card.key} card={card} />)}

8
src/components/Onboarding/steps/NoDevice.js

@ -26,7 +26,7 @@ class NoDevice extends PureComponent<StepProps, *> {
{
key: 'buyNew',
icon: <IconCart size={20} />,
title: t('onboarding:noDevice.buyNew.title'),
title: t('app:onboarding.noDevice.buyNew.title'),
onClick: () => {
openURL(urls.noDeviceBuyNew)
},
@ -34,7 +34,7 @@ class NoDevice extends PureComponent<StepProps, *> {
{
key: 'trackOrder',
icon: <IconTruck size={20} />,
title: t('onboarding:noDevice.trackOrder.title'),
title: t('app:onboarding.noDevice.trackOrder.title'),
onClick: () => {
openURL(urls.noDeviceTrackOrder)
},
@ -42,7 +42,7 @@ class NoDevice extends PureComponent<StepProps, *> {
{
key: 'learnMore',
icon: <IconInfoCircle size={20} />,
title: t('onboarding:noDevice.learnMore.title'),
title: t('app:onboarding.noDevice.learnMore.title'),
onClick: () => {
openURL(urls.noDeviceLearnMore)
},
@ -68,7 +68,7 @@ class NoDevice extends PureComponent<StepProps, *> {
}
/>
<Box m={5} style={{ maxWidth: 480 }}>
<Title>{t('onboarding:noDevice.title')}</Title>
<Title>{t('app:onboarding.noDevice.title')}</Title>
</Box>
<Box pt={4} flow={4}>
{optionCards.map(card => <OptionFlowCard key={card.key} card={card} />)}

6
src/components/Onboarding/steps/SelectDevice.js

@ -41,7 +41,7 @@ class SelectDevice extends PureComponent<StepProps, {}> {
<TrackPage category="Onboarding" name="Select Device" flowType={onboarding.flowType} />
<StepContainerInner>
<Box mb={5}>
<Title>{t('onboarding:selectDevice.title')}</Title>
<Title>{t('app:onboarding.selectDevice.title')}</Title>
</Box>
<Box pt={4}>
<Inner>
@ -53,7 +53,7 @@ class SelectDevice extends PureComponent<StepProps, {}> {
<DeviceIcon>
<img alt="" src={i('ledger-nano-onb.svg')} />
</DeviceIcon>
<BlockTitle>{t('onboarding:selectDevice.ledgerNanoCard.title')}</BlockTitle>
<BlockTitle>{t('app:onboarding.selectDevice.ledgerNanoCard.title')}</BlockTitle>
</DeviceContainer>
<DeviceContainer
isActive={!onboarding.isLedgerNano && onboarding.isLedgerNano !== null}
@ -63,7 +63,7 @@ class SelectDevice extends PureComponent<StepProps, {}> {
<DeviceIcon>
<img alt="" src={i('ledger-blue-onb.svg')} />
</DeviceIcon>
<BlockTitle>{t('onboarding:selectDevice.ledgerBlueCard.title')}</BlockTitle>
<BlockTitle>{t('app:onboarding.selectDevice.ledgerBlueCard.title')}</BlockTitle>
</DeviceContainer>
</Inner>
</Box>

12
src/components/Onboarding/steps/SelectPIN/SelectPINblue.js

@ -25,14 +25,14 @@ class SelectPIN extends PureComponent<Props, *> {
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.initialize.instructions.blue.step1'),
desc: t('app:onboarding.selectPIN.initialize.instructions.blue.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:selectPIN.initialize.instructions.blue.step2">
<Trans i18nKey="app:onboarding.selectPIN.initialize.instructions.blue.step2">
{'Tap on'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Configure as new device'}
@ -44,7 +44,7 @@ class SelectPIN extends PureComponent<Props, *> {
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.initialize.instructions.blue.step3'),
desc: t('app:onboarding.selectPIN.initialize.instructions.blue.step3'),
},
]
@ -52,17 +52,17 @@ class SelectPIN extends PureComponent<Props, *> {
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note1'),
desc: t('app:onboarding.selectPIN.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note2'),
desc: t('app:onboarding.selectPIN.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note3'),
desc: t('app:onboarding.selectPIN.disclaimer.note3'),
},
]

14
src/components/Onboarding/steps/SelectPIN/SelectPINnano.js

@ -25,19 +25,19 @@ class SelectPINnano extends PureComponent<Props, *> {
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.initialize.instructions.nano.step1'),
desc: t('app:onboarding.selectPIN.initialize.instructions.nano.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.initialize.instructions.nano.step2'),
desc: t('app:onboarding.selectPIN.initialize.instructions.nano.step2'),
},
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:selectPIN.initialize.instructions.nano.step3">
<Trans i18nKey="app:onboarding.selectPIN.initialize.instructions.nano.step3">
{'Press the right button to select'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Configure as new device'}
@ -49,24 +49,24 @@ class SelectPINnano extends PureComponent<Props, *> {
{
key: 'step4',
icon: <IconOptionRow>{'4.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.initialize.instructions.nano.step4'),
desc: t('app:onboarding.selectPIN.initialize.instructions.nano.step4'),
},
]
const disclaimerNotes = [
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note1'),
desc: t('app:onboarding.selectPIN.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note2'),
desc: t('app:onboarding.selectPIN.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note3'),
desc: t('app:onboarding.selectPIN.disclaimer.note3'),
},
]

12
src/components/Onboarding/steps/SelectPIN/SelectPINrestoreBlue.js

@ -25,14 +25,14 @@ class SelectPINrestoreBlue extends PureComponent<Props, *> {
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.restore.instructions.blue.step1'),
desc: t('app:onboarding.selectPIN.restore.instructions.blue.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:selectPIN.restore.instructions.blue.step2">
<Trans i18nKey="app:onboarding.selectPIN.restore.instructions.blue.step2">
{'Tap on'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Restore configuration'}
@ -44,7 +44,7 @@ class SelectPINrestoreBlue extends PureComponent<Props, *> {
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.restore.instructions.blue.step3'),
desc: t('app:onboarding.selectPIN.restore.instructions.blue.step3'),
},
]
@ -52,17 +52,17 @@ class SelectPINrestoreBlue extends PureComponent<Props, *> {
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note1'),
desc: t('app:onboarding.selectPIN.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note2'),
desc: t('app:onboarding.selectPIN.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note3'),
desc: t('app:onboarding.selectPIN.disclaimer.note3'),
},
]

14
src/components/Onboarding/steps/SelectPIN/SelectPINrestoreNano.js

@ -25,19 +25,19 @@ class SelectPINrestoreNano extends PureComponent<Props, *> {
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.restore.instructions.nano.step1'),
desc: t('app:onboarding.selectPIN.restore.instructions.nano.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.restore.instructions.nano.step2'),
desc: t('app:onboarding.selectPIN.restore.instructions.nano.step2'),
},
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:selectPIN.restore.instructions.nano.step3">
<Trans i18nKey="app:onboarding.selectPIN.restore.instructions.nano.step3">
{'Press the left button to cancel'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Initialize as new device?'}
@ -53,24 +53,24 @@ class SelectPINrestoreNano extends PureComponent<Props, *> {
{
key: 'step4',
icon: <IconOptionRow>{'4.'}</IconOptionRow>,
desc: t('onboarding:selectPIN.restore.instructions.nano.step4'),
desc: t('app:onboarding.selectPIN.restore.instructions.nano.step4'),
},
]
const disclaimerNotes = [
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note1'),
desc: t('app:onboarding.selectPIN.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note2'),
desc: t('app:onboarding.selectPIN.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:selectPIN.disclaimer.note3'),
desc: t('app:onboarding.selectPIN.disclaimer.note3'),
},
]

4
src/components/Onboarding/steps/SelectPIN/index.js

@ -29,14 +29,14 @@ export default (props: StepProps) => {
/>
{onboarding.flowType === 'restoreDevice' ? (
<Box grow alignItems="center">
<Title>{t('onboarding:selectPIN.restore.title')}</Title>
<Title>{t('app:onboarding.selectPIN.restore.title')}</Title>
<Box align="center" mt={7}>
{onboarding.isLedgerNano ? <SelectPINrestoreNano /> : <SelectPINrestoreBlue />}
</Box>
</Box>
) : (
<Box grow alignItems="center">
<Title>{t('onboarding:selectPIN.initialize.title')}</Title>
<Title>{t('app:onboarding.selectPIN.initialize.title')}</Title>
<Box align="center" mt={7}>
{onboarding.isLedgerNano ? <SelectPINnano /> : <SelectPINblue />}
</Box>

10
src/components/Onboarding/steps/SetPassword.js

@ -85,17 +85,17 @@ class SetPassword extends PureComponent<Props, State> {
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:setPassword.disclaimer.note1'),
desc: t('app:onboarding.setPassword.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:setPassword.disclaimer.note2'),
desc: t('app:onboarding.setPassword.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:setPassword.disclaimer.note3'),
desc: t('app:onboarding.setPassword.disclaimer.note3'),
},
]
@ -110,9 +110,9 @@ class SetPassword extends PureComponent<Props, State> {
<StepContainerInner>
<Fragment>
<Box alignItems="center">
<Title>{t('onboarding:setPassword.title')}</Title>
<Title>{t('app:onboarding.setPassword.title')}</Title>
<Description style={{ maxWidth: 620 }}>
{t('onboarding:setPassword.desc')}
{t('app:onboarding.setPassword.desc')}
</Description>
</Box>
<Box align="center" mt={2}>

4
src/components/Onboarding/steps/Start.js

@ -21,10 +21,10 @@ export default (props: StepProps) => {
icon={<img src={i('ledgerlive-logo.svg')} alt="" width={50} height={50} />}
/>
<Box my={5}>
<Title>{t('onboarding:start.title')}</Title>
<Title>{t('app:onboarding.start.title')}</Title>
</Box>
<Button primary onClick={() => jumpStep('init')}>
{t('onboarding:start.startBtn')}
{t('app:onboarding.start.startBtn')}
</Button>
</Box>
</Box>

18
src/components/Onboarding/steps/WriteSeed/WriteSeedBlue.js

@ -31,14 +31,14 @@ class WriteSeedBlue extends PureComponent<Props, *> {
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.initialize.blue.step1'),
desc: t('app:onboarding.writeSeed.initialize.blue.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:writeSeed.initialize.blue.step2">
<Trans i18nKey="app:onboarding.writeSeed.initialize.blue.step2">
{'Tap'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Next'}
@ -55,37 +55,37 @@ class WriteSeedBlue extends PureComponent<Props, *> {
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.initialize.blue.step3'),
desc: t('app:onboarding.writeSeed.initialize.blue.step3'),
},
]
const disclaimerNotes = [
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note1'),
desc: t('app:onboarding.writeSeed.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note2'),
desc: t('app:onboarding.writeSeed.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note3'),
desc: t('app:onboarding.writeSeed.disclaimer.note3'),
},
{
key: 'note4',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note4'),
desc: t('app:onboarding.writeSeed.disclaimer.note4'),
},
]
return (
<Fragment>
<Box mb={3}>
<Title>{t('onboarding:writeSeed.initialize.title')}</Title>
<Description>{t('onboarding:writeSeed.initialize.desc')}</Description>
<Title>{t('app:onboarding.writeSeed.initialize.title')}</Title>
<Description>{t('app:onboarding.writeSeed.initialize.desc')}</Description>
</Box>
<Box align="center">
<Inner style={{ width: 760 }}>

18
src/components/Onboarding/steps/WriteSeed/WriteSeedNano.js

@ -33,7 +33,7 @@ class WriteSeedNano extends PureComponent<Props, *> {
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:writeSeed.initialize.nano.step1">
<Trans i18nKey="app:onboarding.writeSeed.initialize.nano.step1">
{'Copy the word displayed below'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Word #1'}
@ -48,7 +48,7 @@ class WriteSeedNano extends PureComponent<Props, *> {
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:writeSeed.initialize.nano.step2">
<Trans i18nKey="app:onboarding.writeSeed.initialize.nano.step2">
{'Press the right button to display'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Word #2'}
@ -61,37 +61,37 @@ class WriteSeedNano extends PureComponent<Props, *> {
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.initialize.nano.step3'),
desc: t('app:onboarding.writeSeed.initialize.nano.step3'),
},
]
const disclaimerNotes = [
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note1'),
desc: t('app:onboarding.writeSeed.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note2'),
desc: t('app:onboarding.writeSeed.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note3'),
desc: t('app:onboarding.writeSeed.disclaimer.note3'),
},
{
key: 'note4',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note4'),
desc: t('app:onboarding.writeSeed.disclaimer.note4'),
},
]
return (
<Fragment>
<Box mb={3}>
<Title>{t('onboarding:writeSeed.initialize.title')}</Title>
<Description>{t('onboarding:writeSeed.initialize.desc')}</Description>
<Title>{t('app:onboarding.writeSeed.initialize.title')}</Title>
<Description>{t('app:onboarding.writeSeed.initialize.desc')}</Description>
</Box>
<Box align="center" mt={3}>
<Inner style={{ width: 700 }}>

26
src/components/Onboarding/steps/WriteSeed/WriteSeedRestore.js

@ -34,14 +34,14 @@ class WriteSeedRestore extends PureComponent<Props, *> {
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.restore.nano.step1'),
desc: t('app:onboarding.writeSeed.restore.nano.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:writeSeed.restore.nano.step2">
<Trans i18nKey="app:onboarding.writeSeed.restore.nano.step2">
{'Select the first letters of'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Word #1'}
@ -56,7 +56,7 @@ class WriteSeedRestore extends PureComponent<Props, *> {
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: (
<Box style={{ display: 'block' }}>
<Trans i18nKey="onboarding:writeSeed.restore.nano.step3">
<Trans i18nKey="app:onboarding.writeSeed.restore.nano.step3">
{'Select'}
<Text ff="Open Sans|SemiBold" color="dark">
{'Word #1'}
@ -69,54 +69,54 @@ class WriteSeedRestore extends PureComponent<Props, *> {
{
key: 'step4',
icon: <IconOptionRow>{'4.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.restore.nano.step4'),
desc: t('app:onboarding.writeSeed.restore.nano.step4'),
},
]
const stepsBlue = [
{
key: 'step1',
icon: <IconOptionRow>{'1.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.restore.blue.step1'),
desc: t('app:onboarding.writeSeed.restore.blue.step1'),
},
{
key: 'step2',
icon: <IconOptionRow>{'2.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.restore.blue.step2'),
desc: t('app:onboarding.writeSeed.restore.blue.step2'),
},
{
key: 'step3',
icon: <IconOptionRow>{'3.'}</IconOptionRow>,
desc: t('onboarding:writeSeed.restore.blue.step3'),
desc: t('app:onboarding.writeSeed.restore.blue.step3'),
},
]
const disclaimerNotes = [
{
key: 'note1',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note1'),
desc: t('app:onboarding.writeSeed.disclaimer.note1'),
},
{
key: 'note2',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note2'),
desc: t('app:onboarding.writeSeed.disclaimer.note2'),
},
{
key: 'note3',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note3'),
desc: t('app:onboarding.writeSeed.disclaimer.note3'),
},
{
key: 'note4',
icon: <IconChevronRight size={12} style={{ color: colors.smoke }} />,
desc: t('onboarding:writeSeed.disclaimer.note4'),
desc: t('app:onboarding.writeSeed.disclaimer.note4'),
},
]
return (
<Fragment>
<Box mb={3}>
<Title>{t('onboarding:writeSeed.restore.title')}</Title>
<Description>{t('onboarding:writeSeed.restore.desc')}</Description>
<Title>{t('app:onboarding.writeSeed.restore.title')}</Title>
<Description>{t('app:onboarding.writeSeed.restore.desc')}</Description>
</Box>
<Box align="center">
<Inner style={{ width: 760 }}>

4
src/components/SettingsPage/LanguageSelect.js

@ -27,8 +27,8 @@ class LanguageSelect extends PureComponent<Props> {
setLanguage(languageKey)
}
languages = [{ value: null, label: this.props.t(`language:system`) }].concat(
languageKeys.map(key => ({ value: key, label: this.props.t(`language:${key}`) })),
languages = [{ value: null, label: this.props.t(`app:language.system`) }].concat(
languageKeys.map(key => ({ value: key, label: this.props.t(`app:language.${key}`) })),
)
render() {

6
src/components/TranslatedError.js

@ -33,13 +33,13 @@ class TranslatedError extends PureComponent<Props> {
// $FlowFixMe
const arg: Object = Object.assign({ message: error.message }, error)
if (error.name) {
const translation = t(`errors:${error.name}.${field}`, arg)
if (translation !== `${error.name}.${field}`) {
const translation = t(`app:errors.${error.name}.${field}`, arg)
if (translation !== `errors.${error.name}.${field}`) {
// It is translated
return translation
}
}
return t(`errors:generic.${field}`, arg)
return t(`apps:errors.generic.${field}`, arg)
}
}

24
src/components/modals/ShareAnalytics.js

@ -20,43 +20,43 @@ class ShareAnalytics extends PureComponent<Props, *> {
const items = [
{
key: 'item1',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item1'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item1'),
},
{
key: 'item2',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item2'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item2'),
},
{
key: 'item3',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item3'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item3'),
},
{
key: 'item4',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item4'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item4'),
},
{
key: 'item5',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item5'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item5'),
},
{
key: 'item6',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item6'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item6'),
},
{
key: 'item7',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item7'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item7'),
},
{
key: 'item8',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item8'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item8'),
},
{
key: 'item9',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item9'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item9'),
},
{
key: 'item10',
desc: t('onboarding:analytics.shareAnalytics.mandatoryContextual.item10'),
desc: t('app:onboarding.analytics.shareAnalytics.mandatoryContextual.item10'),
},
]
return (
@ -65,9 +65,9 @@ class ShareAnalytics extends PureComponent<Props, *> {
render={({ onClose }) => (
<ModalBody onClose={onClose}>
<ModalTitle data-e2e="modal_title_shareAnalytics">
{t('onboarding:analytics.shareAnalytics.title')}
{t('app:onboarding.analytics.shareAnalytics.title')}
</ModalTitle>
<InlineDesc>{t('onboarding:analytics.shareAnalytics.desc')}</InlineDesc>
<InlineDesc>{t('app:onboarding.analytics.shareAnalytics.desc')}</InlineDesc>
<ModalContent mx={5}>
<Ul>{items.map(item => <li key={item.key}>{item.desc}</li>)}</Ul>
</ModalContent>

14
src/components/modals/TechnicalData.js

@ -20,23 +20,23 @@ class TechnicalData extends PureComponent<Props, *> {
const items = [
{
key: 'item1',
desc: t('onboarding:analytics.technicalData.mandatoryContextual.item1'),
desc: t('app:onboarding.analytics.technicalData.mandatoryContextual.item1'),
},
{
key: 'item2',
desc: t('onboarding:analytics.technicalData.mandatoryContextual.item2'),
desc: t('app:onboarding.analytics.technicalData.mandatoryContextual.item2'),
},
{
key: 'item3',
desc: t('onboarding:analytics.technicalData.mandatoryContextual.item3'),
desc: t('app:onboarding.analytics.technicalData.mandatoryContextual.item3'),
},
{
key: 'item4',
desc: t('onboarding:analytics.technicalData.mandatoryContextual.item4'),
desc: t('app:onboarding.analytics.technicalData.mandatoryContextual.item4'),
},
{
key: 'item5',
desc: t('onboarding:analytics.technicalData.mandatoryContextual.item5'),
desc: t('app:onboarding.analytics.technicalData.mandatoryContextual.item5'),
},
]
@ -46,9 +46,9 @@ class TechnicalData extends PureComponent<Props, *> {
render={({ onClose }) => (
<ModalBody onClose={onClose}>
<ModalTitle data-e2e="modal_title_TechData">
{t('onboarding:analytics.technicalData.mandatoryContextual.title')}
{t('app:onboarding.analytics.technicalData.mandatoryContextual.title')}
</ModalTitle>
<InlineDesc>{t('onboarding:analytics.technicalData.desc')}</InlineDesc>
<InlineDesc>{t('app:onboarding.analytics.technicalData.desc')}</InlineDesc>
<ModalContent mx={5}>
<Ul>{items.map(item => <li key={item.key}>{item.desc}</li>)}</Ul>
</ModalContent>

12
src/reducers/onboarding.js

@ -70,14 +70,14 @@ const initialState: OnboardingState = {
},
{
name: 'selectDevice',
label: 'onboarding:breadcrumb.selectDevice',
label: 'app:onboarding.breadcrumb.selectDevice',
options: {
showBreadcrumb: true,
},
},
{
name: 'selectPIN',
label: 'onboarding:breadcrumb.selectPIN',
label: 'app:onboarding.breadcrumb.selectPIN',
options: {
showBreadcrumb: true,
alreadyInitSkip: true,
@ -85,7 +85,7 @@ const initialState: OnboardingState = {
},
{
name: 'writeSeed',
label: 'onboarding:breadcrumb.writeSeed',
label: 'app:onboarding.breadcrumb.writeSeed',
options: {
showBreadcrumb: true,
alreadyInitSkip: true,
@ -93,14 +93,14 @@ const initialState: OnboardingState = {
},
{
name: 'genuineCheck',
label: 'onboarding:genuineCheck.title',
label: 'app:onboarding.genuineCheck.title',
options: {
showBreadcrumb: true,
},
},
{
name: 'setPassword',
label: 'onboarding:breadcrumb.setPassword',
label: 'app:onboarding.breadcrumb.setPassword',
options: {
showBreadcrumb: true,
relaunchSkip: true,
@ -108,7 +108,7 @@ const initialState: OnboardingState = {
},
{
name: 'analytics',
label: 'onboarding:breadcrumb.analytics',
label: 'app:onboarding.breadcrumb.analytics',
options: {
showBreadcrumb: true,
relaunchSkip: true,

391
static/i18n/en/app.json

@ -463,5 +463,396 @@
"desc_1": "Before sending and receiving crypto assets, educate yourself to make informed decisions. Crypto assets are volatile and the prices can go up and down. Carefully evaluate your trading goals and the financial risk you are willing to take.",
"desc_2": "Please beware that Ledger does not provide financial, tax, or legal advice. You should take such decisions on your own or consult with reliable experts.",
"cta": "Got it"
},
"language": {
"system": "Use system language",
"en": "English",
"fr": "French"
},
"onboarding": {
"breadcrumb": {
"selectDevice": "Device selection",
"selectPIN": "PIN code",
"writeSeed": "Recovery phrase",
"setPassword": "Password lock",
"analytics": "Bugs & analytics"
},
"start": {
"title": "Welcome to Ledger Live",
"startBtn": "Get started"
},
"init": {
"title": "Get started with your Ledger device",
"newDevice": {
"title": "Initialize a new Ledger device"
},
"restoreDevice": {
"title": "Restore a Ledger device"
},
"initializedDevice": {
"title": "Use a device that's already initialized"
}
},
"noDevice": {
"title": "Do not have a Ledger device yet?",
"buyNew": {
"title": "Buy a Ledger device"
},
"trackOrder": {
"title": "Track your order"
},
"learnMore": {
"title": "Learn about Ledger"
}
},
"selectDevice": {
"title": "Select your device",
"ledgerNanoCard": {
"title": "Ledger Nano S"
},
"ledgerBlueCard": {
"title": "Ledger Blue"
}
},
"selectPIN": {
"disclaimer": {
"note1": "Choose your own PIN code, this code will unlock your device.",
"note2": "An 8-digit PIN code offers an optimum level of security.",
"note3": "Never use a device supplied with a PIN code or a 24-word recovery phrase."
},
"initialize": {
"title": "Choose your PIN code",
"instructions": {
"nano": {
"step1": "Connect the Ledger Nano S to your computer.",
"step2": "Press both buttons simultaneously as instructed on the screen.",
"step3": "Press the right button to select <1><0>Configure as new device?</0></1>",
"step4": "Choose a PIN code between 4 and 8 digits long, followed by the checkmark (✓)."
},
"blue": {
"step1": "Connect the Ledger Blue to your computer.",
"step2": "Tap on <1><0>Configure as new device.</0></1>",
"step3": "Choose a PIN code between 4 and 8 digits long."
}
}
},
"restore": {
"title": "Choose your PIN code",
"instructions": {
"nano": {
"step1": "Connect the Ledger Nano S to your computer.",
"step2": "Press both buttons simultaneously as instructed on the screen.",
"step3": "Press the left button to cancel <1><0>Initialize as new device?</0></1>. Then press the right button to select <3><0>Restore configuration?</0></3>",
"step4": "Choose a PIN code between 4 and 8 digits long, followed by the checkmark (✓)."
},
"blue": {
"step1": "Connect the Ledger Blue to your computer.",
"step2": "Tap on <1><0>Restore configuration</0></1>.",
"step3": "Choose a PIN code between 4 and 8 digits long."
}
}
}
},
"writeSeed": {
"initialize": {
"title": "Save your recovery phrase",
"desc": "Your device will generate a 24-word recovery phrase to back up your private keys",
"nano": {
"step1": "Copy the word displayed below <1><0>Word #1</0></1> in position 1 on a blank Recovery sheet.",
"step2": "Press the right button to display <1><0>Word #2</0></1> and repeat the process until all 24 words are copied on the Recovery sheet.",
"step3": "Confirm your recovery phrase: select each requested word and press both buttons to validate it."
},
"blue": {
"step1": "Copy each word of the recovery phrase on a blank Recovery sheet. Copy the words in the same order.",
"step2": "Tap <1><0>Next</0></1> to move to the next words. Repeat the process until the <3><0>Confirmation</0></3> screen appears.",
"step3": "Type each requested word to confirm your recovery phrase."
}
},
"restore": {
"title": "Enter your recovery phrase",
"desc": "Copy the 24-word recovery phrase from your Recovery sheet on your device.",
"nano": {
"step1": "Select the length of your recovery phrase. Press both buttons to continue.",
"step2": "Select the first letters of <1><0>Word #1</0></1> by pressing the right or left button. Press both buttons to confirm each letter.",
"step3": "Select <1><0>Word #1</0></1> from the suggested words. Press both buttons to continue.",
"step4": "Repeat the process until the last word."
},
"blue": {
"step1": "Select the length of your recovery phrase.",
"step2": "Type the first word of your recovery phrase. Select the word when it appears.",
"step3": "Repeat the process until the last word."
}
},
"disclaimer": {
"note1": "Carefully secure your 24-word recovery phrase out of sight.",
"note2": "Make sure you are the sole holder of your recovery phrase.",
"note3": "Ledger does not keep any backup of your recovery phrase.",
"note4": "Never use a device supplied with a recovery phrase or a PIN code."
}
},
"genuineCheck": {
"title": "Security checklist",
"descGeneric": "Before continuing, please complete the security checklist",
"descRestore": "Before getting started, please confirm",
"step1": {
"title": "Did you choose your PIN code by yourself?"
},
"step2": {
"title": "Did you save your recovery phrase by yourself?"
},
"step3": {
"title": "Is your Ledger device genuine?"
},
"isGenuinePassed": "Your device is genuine",
"buttons": {
"genuineCheck": "Check now",
"contactSupport": "Contact us"
},
"errorPage": {
"title": {
"pinFailed": "Didn't choose your own PIN code?",
"recoveryPhraseFailed": "Didn't save your own recovery phrase?",
"isGenuineFail": "Oops, your device does not seem genuine..."
},
"desc": {
"pinFailed": "Never use a device supplied with a PIN code. If your device was provided with a PIN code, please contact us.",
"recoveryPhraseFailed": "Only save a recovery phrase that is displayed on your device. Please contact us in case of doubt. Otherwise, go back to the security checklist.",
"isGenuineFail": "Your device did not pass the authenticity test required to connect to Ledger’s secure server. Please contact Ledger Support to get assistance."
}
}
},
"setPassword": {
"title": "Password lock (optional)",
"desc": "Set a password to prevent unauthorized access to Ledger Live data stored on your computer, including account names, balances, transactions and public addresses.",
"disclaimer": {
"note1": "Make sure to remember your password. Do not share it.",
"note2": "Losing your password requires resetting Ledger Live and re-adding accounts.",
"note3": "Resetting Ledger Live does not affect your crypto assets."
}
},
"analytics": {
"title": "Analytics and bug reports",
"desc": "Share anonymous usage and diagnostics data to help improve Ledger products, services and security features.",
"shareAnalytics": {
"title": "Share analytics",
"desc": "Enable analytics to help Ledger understand how to improve the user experience.",
"mandatoryContextual": {
"item1": "In-app page visits",
"item2": "Actions (send, receive, lock)",
"item3": "Clicks",
"item4": "Redirections to webpages",
"item5": "Scrolled to end of page",
"item6": "Install/Uninstall",
"item7": "Number of accounts, currencies and operations",
"item8": "Overall and page session duration",
"item9": "Type of Ledger device",
"item10": "Device firmware and app version numbers"
}
},
"sentryLogs": {
"title": "Report bugs",
"desc": "Automatically send reports to help Ledger fix bugs."
},
"technicalData": {
"title": "Technical data *",
"desc": "Ledger will automatically collect technical information to get basic feedback on usage. This information is anonymous and does not contain personal data.",
"mandatoryText": "* mandatory",
"mandatoryContextual": {
"title": "Technical data",
"item1": "Anonymous unique application ID",
"item2": "OS name and version",
"item3": "Ledger Live version",
"item4": "Application language or region",
"item5": "OS language or region"
}
}
},
"finish": {
"title": "Your device is ready!",
"desc": "Proceed to your portfolio and start adding your accounts...",
"openAppButton": "Open Ledger Live"
}
},
"errors": {
"generic": {
"title": "{{message}}",
"description": "Something went wrong. Please retry or contact us."
},
"AccountNameRequired": {
"title": "An account name is required",
"description": "Please provide an account name"
},
"BtcUnmatchedApp": {
"title": "That's the wrong app",
"description": "Open the ‘{{managerAppName}}’ app on your device"
},
"DeviceNotGenuine": {
"title": "Possibly not genuine",
"description": "Request Ledger Support assistance."
},
"DeviceGenuineSocketEarlyClose": {
"title": "Sorry, try again (genuine-close)",
"description": null
},
"DeviceSocketFail": {
"title": "Oops, try again",
"description": "Some connection failed, so please try again."
},
"DeviceSocketNoBulkStatus": {
"title": "Oops, try again",
"description": "Some connection failed, so please try again."
},
"DeviceSocketNoHandler": {
"title": "Oops, try again",
"description": "Some connection failed, so please try again."
},
"DisconnectedDevice": {
"title": "Oops, device was disconnected",
"description": "The connection to the device was lost, so please try again."
},
"EnpointConfig": {
"title": "Invalid endpoint",
"description": "Please provide a valid endpoint"
},
"FeeEstimationFailed": {
"title": "Sorry, fee estimation failed",
"description": "Try setting a custom fee (status: {{status}})"
},
"HardResetFail": {
"title": "Oops, could not reset",
"description": "Please retry or contact Ledger Support."
},
"LatestMCUInstalledError": {
"title": "Oops, nothing to update",
"description": "Needlessly tried to update the device microcontroller. Contact Ledger Support if there's a problem with your device."
},
"LedgerAPIError": {
"title": "Sorry, try again (API HTTP {{status}})",
"description": "Interacting with Ledger's API server went wrong. Please retry."
},
"LedgerAPIErrorWithMessage": {
"title": "Oops, {{message}}",
"description": "Please retry or contact Ledger Support."
},
"LedgerAPINotAvailable": {
"title": "Sorry, {{currencyName}} services unavailable",
"description": "Please retry or contact Ledger Support."
},
"ManagerAPIsFail": {
"title": "Oops, Manager services unavailable.",
"description": "Please check the network status."
},
"ManagerAppAlreadyInstalled": {
"title": "Oops, that's already installed.",
"description": "Check your device to see which apps are already installed."
},
"ManagerAppRelyOnBTC": {
"title": "Bitcoin and Ethereum apps required",
"description": "Install the latest Bitcoin and Ethereum apps first."
},
"ManagerDeviceLocked": {
"title": "Please unlock your device",
"description": "Your device was locked. Please unlock it."
},
"ManagerNotEnoughSpace": {
"title": "Sorry, not enough storage left",
"description": "Please uninstall some apps to make space. This will not affect your crypto assets."
},
"ManagerUninstallBTCDep": {
"title": "Sorry, this app is required",
"description": "Uninstall the Bitcoin or Ethereum app last."
},
"NetworkDown": {
"title": "Oops, internet seems down",
"description": "Please check your internet connection."
},
"NoAddressesFound": {
"title": "Sorry, no accounts found",
"description": "Something went wrong with address calculation, try again or contact Ledger Support."
},
"NotEnoughBalance": {
"title": "Oops, insufficient balance",
"description": "Make sure the account to debit has sufficient balance"
},
"NotEnoughBalanceBecauseDestinationNotCreated": {
"title": "Recipient address is inactive. Send at least {{minimalAmount}} to activate it"
},
"PasswordsDontMatch": {
"title": "Passwords don't match",
"description": "Please try again"
},
"PasswordIncorrect": {
"title": "The password you entered is incorrect",
"description": "Please try again"
},
"SelectExchangesLoadError": {
"title": "Unable to load",
"description": "Can't load the exchanges"
},
"TimeoutError": {
"title": "Oops, a time out occurred",
"description": "It took too long for the server to respond."
},
"TimeoutTagged": {
"title": "Oops, a time out occurred ({{tag}})",
"description": "It took too long for the server to respond."
},
"TransportError": {
"title": "Something went wrong. Please reconnect your device.",
"description": "{{message}}"
},
"TransportStatusError": {
"title": "Something went wrong. Please reconnect your device.",
"description": "{{message}}"
},
"UserRefusedFirmwareUpdate": {
"title": "Firmware update refused on device",
"description": "Please retry or contact Ledger Support"
},
"UserRefusedOnDevice": {
"title": "Transaction refused on device",
"description": "Please retry or contact Ledger Support in case of doubt."
},
"UserRefusedAddress": {
"title": "Receive address rejected",
"description": "Please try again or contact Ledger Support"
},
"UpdateYourApp": {
"title": "App update required. Uninstall and reinstall the {{managerAppName}} app in the Manager",
"description": null
},
"WebsocketConnectionError": {
"title": "Sorry, try again (websocket error).",
"description": null
},
"WebsocketConnectionFailed": {
"title": "Sorry, try again (websocket failed).",
"description": null
},
"WrongDeviceForAccount": {
"title": "Oops, wrong device for ‘{{accountName}}’.",
"description": "The connected device is not associated with the account you selected. Please connect the right device."
},
"DeviceAppVerifyNotSupported": {
"title": "Open Manager to update this App",
"description": "The app verification is not supported"
},
"InvalidAddress": {
"title": "This is not a valid {{currencyName}} address"
},
"CantOpenDevice": {
"title": "Oops, couldn’t connect to device",
"description": "Device detected but connection failed. Please retry and get help if the problem persists."
},
"ETHAddressNonEIP": {
"title": "Auto-verification not available: carefully verify the address",
"description": null
},
"CantScanQRCode": {
"title": "Couldn't scan this QR-code: auto-verification not supported by this address"
},
"FeeNotLoaded": {
"title": "Couldn’t load fee rates. Please set manual fees"
}
}
}

182
static/i18n/en/errors.json

@ -1,182 +0,0 @@
{
"generic": {
"title": "{{message}}",
"description": "Something went wrong. Please retry or contact us."
},
"AccountNameRequired": {
"title": "An account name is required",
"description": "Please provide an account name"
},
"BtcUnmatchedApp": {
"title": "That's the wrong app",
"description": "Open the ‘{{managerAppName}}’ app on your device"
},
"DeviceNotGenuine": {
"title": "Possibly not genuine",
"description": "Request Ledger Support assistance."
},
"DeviceGenuineSocketEarlyClose": {
"title": "Sorry, try again (genuine-close)",
"description": null
},
"DeviceSocketFail": {
"title": "Oops, try again",
"description": "Some connection failed, so please try again."
},
"DeviceSocketNoBulkStatus": {
"title": "Oops, try again",
"description": "Some connection failed, so please try again."
},
"DeviceSocketNoHandler": {
"title": "Oops, try again",
"description": "Some connection failed, so please try again."
},
"DisconnectedDevice": {
"title": "Oops, device was disconnected",
"description": "The connection to the device was lost, so please try again."
},
"EnpointConfig": {
"title": "Invalid endpoint",
"description": "Please provide a valid endpoint"
},
"FeeEstimationFailed": {
"title": "Sorry, fee estimation failed",
"description": "Try setting a custom fee (status: {{status}})"
},
"HardResetFail": {
"title": "Oops, could not reset",
"description": "Please retry or contact Ledger Support."
},
"LatestMCUInstalledError": {
"title": "Oops, nothing to update",
"description": "Needlessly tried to update the device microcontroller. Contact Ledger Support if there's a problem with your device."
},
"LedgerAPIError": {
"title": "Sorry, try again (API HTTP {{status}})",
"description": "Interacting with Ledger's API server went wrong. Please retry."
},
"LedgerAPIErrorWithMessage": {
"title": "Oops, {{message}}",
"description": "Please retry or contact Ledger Support."
},
"LedgerAPINotAvailable": {
"title": "Sorry, {{currencyName}} services unavailable",
"description": "Please retry or contact Ledger Support."
},
"ManagerAPIsFail": {
"title": "Oops, Manager services unavailable.",
"description": "Please check the network status."
},
"ManagerAppAlreadyInstalled": {
"title": "Oops, that's already installed.",
"description": "Check your device to see which apps are already installed."
},
"ManagerAppRelyOnBTC": {
"title": "Bitcoin and Ethereum apps required",
"description": "Install the latest Bitcoin and Ethereum apps first."
},
"ManagerDeviceLocked": {
"title": "Please unlock your device",
"description": "Your device was locked. Please unlock it."
},
"ManagerNotEnoughSpace": {
"title": "Sorry, not enough storage left",
"description": "Please uninstall some apps to make space. This will not affect your crypto assets."
},
"ManagerUninstallBTCDep": {
"title": "Sorry, this app is required",
"description": "Uninstall the Bitcoin or Ethereum app last."
},
"NetworkDown": {
"title": "Oops, internet seems down",
"description": "Please check your internet connection."
},
"NoAddressesFound": {
"title": "Sorry, no accounts found",
"description": "Something went wrong with address calculation, try again or contact Ledger Support."
},
"NotEnoughBalance": {
"title": "Oops, insufficient balance",
"description": "Make sure the account to debit has sufficient balance"
},
"NotEnoughBalanceBecauseDestinationNotCreated": {
"title": "Recipient address is inactive. Send at least {{minimalAmount}} to activate it"
},
"PasswordsDontMatch": {
"title": "Passwords don't match",
"description": "Please try again"
},
"PasswordIncorrect": {
"title": "The password you entered is incorrect",
"description": "Please try again"
},
"SelectExchangesLoadError": {
"title": "Unable to load",
"description": "Can't load the exchanges"
},
"TimeoutError": {
"title": "Oops, a time out occurred",
"description": "It took too long for the server to respond."
},
"TimeoutTagged": {
"title": "Oops, a time out occurred ({{tag}})",
"description": "It took too long for the server to respond."
},
"TransportError": {
"title": "Something went wrong. Please reconnect your device.",
"description": "{{message}}"
},
"TransportStatusError": {
"title": "Something went wrong. Please reconnect your device.",
"description": "{{message}}"
},
"UserRefusedFirmwareUpdate": {
"title": "Firmware update refused on device",
"description": "Please retry or contact Ledger Support"
},
"UserRefusedOnDevice": {
"title": "Transaction refused on device",
"description": "Please retry or contact Ledger Support in case of doubt."
},
"UserRefusedAddress": {
"title": "Receive address rejected",
"description": "Please try again or contact Ledger Support"
},
"UpdateYourApp": {
"title": "App update required. Uninstall and reinstall the {{managerAppName}} app in the Manager",
"description": null
},
"WebsocketConnectionError": {
"title": "Sorry, try again (websocket error).",
"description": null
},
"WebsocketConnectionFailed": {
"title": "Sorry, try again (websocket failed).",
"description": null
},
"WrongDeviceForAccount": {
"title": "Oops, wrong device for ‘{{accountName}}’.",
"description": "The connected device is not associated with the account you selected. Please connect the right device."
},
"DeviceAppVerifyNotSupported": {
"title": "Open Manager to update this App",
"description": "The app verification is not supported"
},
"InvalidAddress": {
"title": "This is not a valid {{currencyName}} address"
},
"CantOpenDevice": {
"title": "Oops, couldn’t connect to device",
"description": "Device detected but connection failed. Please retry and get help if the problem persists."
},
"ETHAddressNonEIP": {
"title": "Auto-verification not available: carefully verify the address",
"description": null
},
"CantScanQRCode": {
"title": "Couldn't scan this QR-code: auto-verification not supported by this address"
},
"FeeNotLoaded": {
"title": "Couldn’t load fee rates. Please set manual fees"
}
}

5
static/i18n/en/language.json

@ -1,5 +0,0 @@
{
"system": "Use system language",
"en": "English",
"fr": "French"
}

204
static/i18n/en/onboarding.json

@ -1,204 +0,0 @@
{
"breadcrumb": {
"selectDevice": "Device selection",
"selectPIN": "PIN code",
"writeSeed": "Recovery phrase",
"setPassword": "Password lock",
"analytics": "Bugs & analytics"
},
"start": {
"title": "Welcome to Ledger Live",
"startBtn": "Get started"
},
"init": {
"title": "Get started with your Ledger device",
"newDevice": {
"title": "Initialize a new Ledger device"
},
"restoreDevice": {
"title": "Restore a Ledger device"
},
"initializedDevice": {
"title": "Use a device that's already initialized"
}
},
"noDevice": {
"title": "Do not have a Ledger device yet?",
"buyNew": {
"title": "Buy a Ledger device"
},
"trackOrder": {
"title": "Track your order"
},
"learnMore": {
"title": "Learn about Ledger"
}
},
"selectDevice": {
"title": "Select your device",
"ledgerNanoCard": {
"title": "Ledger Nano S"
},
"ledgerBlueCard": {
"title": "Ledger Blue"
}
},
"selectPIN": {
"disclaimer": {
"note1": "Choose your own PIN code, this code will unlock your device.",
"note2": "An 8-digit PIN code offers an optimum level of security.",
"note3": "Never use a device supplied with a PIN code or a 24-word recovery phrase."
},
"initialize": {
"title": "Choose your PIN code",
"instructions": {
"nano": {
"step1": "Connect the Ledger Nano S to your computer.",
"step2": "Press both buttons simultaneously as instructed on the screen.",
"step3": "Press the right button to select <1><0>Configure as new device?</0></1>",
"step4": "Choose a PIN code between 4 and 8 digits long, followed by the checkmark (✓)."
},
"blue": {
"step1": "Connect the Ledger Blue to your computer.",
"step2": "Tap on <1><0>Configure as new device.</0></1>",
"step3": "Choose a PIN code between 4 and 8 digits long."
}
}
},
"restore": {
"title": "Choose your PIN code",
"instructions": {
"nano": {
"step1": "Connect the Ledger Nano S to your computer.",
"step2": "Press both buttons simultaneously as instructed on the screen.",
"step3": "Press the left button to cancel <1><0>Initialize as new device?</0></1>. Then press the right button to select <3><0>Restore configuration?</0></3>",
"step4": "Choose a PIN code between 4 and 8 digits long, followed by the checkmark (✓)."
},
"blue": {
"step1": "Connect the Ledger Blue to your computer.",
"step2": "Tap on <1><0>Restore configuration</0></1>.",
"step3": "Choose a PIN code between 4 and 8 digits long."
}
}
}
},
"writeSeed": {
"initialize": {
"title": "Save your recovery phrase",
"desc": "Your device will generate a 24-word recovery phrase to back up your private keys",
"nano": {
"step1": "Copy the word displayed below <1><0>Word #1</0></1> in position 1 on a blank Recovery sheet.",
"step2": "Press the right button to display <1><0>Word #2</0></1> and repeat the process until all 24 words are copied on the Recovery sheet.",
"step3": "Confirm your recovery phrase: select each requested word and press both buttons to validate it."
},
"blue": {
"step1": "Copy each word of the recovery phrase on a blank Recovery sheet. Copy the words in the same order.",
"step2": "Tap <1><0>Next</0></1> to move to the next words. Repeat the process until the <3><0>Confirmation</0></3> screen appears.",
"step3": "Type each requested word to confirm your recovery phrase."
}
},
"restore": {
"title": "Enter your recovery phrase",
"desc": "Copy the 24-word recovery phrase from your Recovery sheet on your device.",
"nano": {
"step1": "Select the length of your recovery phrase. Press both buttons to continue.",
"step2": "Select the first letters of <1><0>Word #1</0></1> by pressing the right or left button. Press both buttons to confirm each letter.",
"step3": "Select <1><0>Word #1</0></1> from the suggested words. Press both buttons to continue.",
"step4": "Repeat the process until the last word."
},
"blue": {
"step1": "Select the length of your recovery phrase.",
"step2": "Type the first word of your recovery phrase. Select the word when it appears.",
"step3": "Repeat the process until the last word."
}
},
"disclaimer": {
"note1": "Carefully secure your 24-word recovery phrase out of sight.",
"note2": "Make sure you are the sole holder of your recovery phrase.",
"note3": "Ledger does not keep any backup of your recovery phrase.",
"note4": "Never use a device supplied with a recovery phrase or a PIN code."
}
},
"genuineCheck": {
"title": "Security checklist",
"descGeneric": "Before continuing, please complete the security checklist",
"descRestore": "Before getting started, please confirm",
"step1": {
"title": "Did you choose your PIN code by yourself?"
},
"step2": {
"title": "Did you save your recovery phrase by yourself?"
},
"step3": {
"title": "Is your Ledger device genuine?"
},
"isGenuinePassed": "Your device is genuine",
"buttons": {
"genuineCheck": "Check now",
"contactSupport": "Contact us"
},
"errorPage": {
"title": {
"pinFailed": "Didn't choose your own PIN code?",
"recoveryPhraseFailed": "Didn't save your own recovery phrase?",
"isGenuineFail": "Oops, your device does not seem genuine..."
},
"desc": {
"pinFailed": "Never use a device supplied with a PIN code. If your device was provided with a PIN code, please contact us.",
"recoveryPhraseFailed": "Only save a recovery phrase that is displayed on your device. Please contact us in case of doubt. Otherwise, go back to the security checklist.",
"isGenuineFail": "Your device did not pass the authenticity test required to connect to Ledger’s secure server. Please contact Ledger Support to get assistance."
}
}
},
"setPassword": {
"title": "Password lock (optional)",
"desc": "Set a password to prevent unauthorized access to Ledger Live data stored on your computer, including account names, balances, transactions and public addresses.",
"disclaimer": {
"note1": "Make sure to remember your password. Do not share it.",
"note2": "Losing your password requires resetting Ledger Live and re-adding accounts.",
"note3": "Resetting Ledger Live does not affect your crypto assets."
}
},
"analytics": {
"title": "Analytics and bug reports",
"desc": "Share anonymous usage and diagnostics data to help improve Ledger products, services and security features.",
"shareAnalytics": {
"title": "Share analytics",
"desc": "Enable analytics to help Ledger understand how to improve the user experience.",
"mandatoryContextual": {
"item1": "In-app page visits",
"item2": "Actions (send, receive, lock)",
"item3": "Clicks",
"item4": "Redirections to webpages",
"item5": "Scrolled to end of page",
"item6": "Install/Uninstall",
"item7": "Number of accounts, currencies and operations",
"item8": "Overall and page session duration",
"item9": "Type of Ledger device",
"item10": "Device firmware and app version numbers"
}
},
"sentryLogs": {
"title": "Report bugs",
"desc": "Automatically send reports to help Ledger fix bugs."
},
"technicalData": {
"title": "Technical data *",
"desc": "Ledger will automatically collect technical information to get basic feedback on usage. This information is anonymous and does not contain personal data.",
"mandatoryText": "* mandatory",
"mandatoryContextual": {
"title": "Technical data",
"item1": "Anonymous unique application ID",
"item2": "OS name and version",
"item3": "Ledger Live version",
"item4": "Application language or region",
"item5": "OS language or region"
}
}
},
"finish": {
"title": "Your device is ready!",
"desc": "Proceed to your portfolio and start adding your accounts...",
"openAppButton": "Open Ledger Live"
}
}
Loading…
Cancel
Save