Browse Source

Merge pull request #538 from MortalKastor/i18n-polish

Missing strings added to i18n + highlighter for finding more
master
Meriadec Pillet 7 years ago
committed by GitHub
parent
commit
5432df35e2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      src/components/CurrentAddress/index.js
  2. 9
      src/components/DeviceConnect/index.js
  3. 33
      src/components/ExchangePage/index.js
  4. 2
      src/components/Onboarding/steps/Start.js
  5. 14
      src/components/OperationsList/index.js
  6. 9
      src/components/SelectExchange.js
  7. 6
      src/components/SettingsPage/sections/About.js
  8. 8
      src/components/SettingsPage/sections/Currencies.js
  9. 8
      src/components/SettingsPage/sections/Display.js
  10. 2
      src/components/SettingsPage/sections/Profile.js
  11. 20
      src/components/modals/OperationDetails.js
  12. 19
      src/renderer/i18n/instanciate.js
  13. 31
      static/i18n/en/app.yml
  14. 1
      static/i18n/en/onboarding.yml

9
src/components/CurrentAddress/index.js

@ -182,12 +182,12 @@ class CurrentAddress extends PureComponent<Props> {
<Label>
<Box>
{accountName ? (
<Trans i18nKey="currentAddress:labelFrom" parent="div">
{'Address from '}
<Trans i18nKey="app:currentAddress.for" parent="div">
{'Address for '}
<strong>{accountName}</strong>
</Trans>
) : (
t('app:currentAddress')
t('app:currentAddress.title')
)}
</Box>
<IconInfoCircle size={12} />
@ -201,8 +201,7 @@ class CurrentAddress extends PureComponent<Props> {
<IconShield height={32} width={28} />
</Box>
<Box shrink fontSize={12} color={notValid ? 'alertRed' : 'dark'} ff="Open Sans">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam blandit velit egestas leo
tincidunt
{t('app:currentAddress.message')}
</Box>
</Box>
)}

9
src/components/DeviceConnect/index.js

@ -207,12 +207,9 @@ class DeviceConnect extends PureComponent<Props> {
<IconUsb size={36} />
</StepIcon>
<Box grow shrink>
<Trans i18nKey="deviceConnect:step1.connect" parent="div">
{'Connect your '}
<strong>Ledger device</strong>
{' to your computer and enter your '}
<strong>PIN code</strong>
{' on your device'}
<Trans i18nKey="app:deviceConnect.step1.connect" parent="div">
Connect your <strong>Ledger device</strong> to your computer and enter your{' '}
<strong>PIN code</strong> on your device
</Trans>
</Box>
<StepCheck checked={hasDevice} />

33
src/components/ExchangePage/index.js

@ -12,24 +12,6 @@ import ExchangeCard from './ExchangeCard'
import CoinhouseLogo from './logos/coinhouse'
const LOREM =
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce orci ex, egestas quis consequat et, viverra sed neque. Nulla varius lectus eu felis dapibus, non rhoncus sem interdum.'
const cards = [
{
key: 'coinhouse',
url: 'https://www.coinhouse.com/',
logo: <CoinhouseLogo width={150} />,
desc: LOREM,
},
{
key: 'shapeshift',
url: 'https://shapeshift.io',
logo: <img alt="shapeshift logo" src={i('logos/shapeshift.png')} style={{ width: 150 }} />,
desc: LOREM,
},
]
type Props = {
t: T,
}
@ -37,6 +19,21 @@ type Props = {
class ExchangePage extends PureComponent<Props> {
render() {
const { t } = this.props
const cards = [
{
key: 'coinhouse',
url: 'https://www.coinhouse.com/',
logo: <CoinhouseLogo width={150} />,
desc: t('app:exchange.coinhouse'),
},
{
key: 'shapeshift',
url: 'https://shapeshift.io',
logo: <img alt="shapeshift logo" src={i('logos/shapeshift.png')} style={{ width: 150 }} />,
desc: t('app:exchange.shapeshift'),
},
]
return (
<Box>
<Box ff="Museo Sans|Regular" color="dark" fontSize={7} mb={4}>

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

@ -19,7 +19,7 @@ export default (props: StepProps) => {
<Title>{t('onboarding:start.title')}</Title>
</Box>
<Button padded primary onClick={() => jumpStep('init')}>
Get Started
{t('onboarding:start.startBtn')}
</Button>
</Box>
</Box>

14
src/components/OperationsList/index.js

@ -66,14 +66,6 @@ const initialState = {
nbToShow: 20,
}
const footerPlaceholder = (
<Box p={4} align="center">
<Text ff="Open Sans" fontSize={3}>
No more operations
</Text>
</Box>
)
export class OperationsList extends PureComponent<Props, State> {
static defaultProps = {
withAccount: false,
@ -143,7 +135,11 @@ export class OperationsList extends PureComponent<Props, State> {
<IconAngleDown size={12} />
</ShowMore>
) : (
footerPlaceholder
<Box p={4} align="center">
<Text ff="Open Sans" fontSize={3}>
{t('app:operationList.noMoreOperations')}
</Text>
</Box>
)}
</Box>
</Defer>

9
src/components/SelectExchange.js

@ -1,5 +1,6 @@
// @flow
import React, { Component } from 'react'
import { translate } from 'react-i18next'
import type { Currency } from '@ledgerhq/live-common/lib/types'
import type { Exchange } from '@ledgerhq/live-common/lib/countervalues/types'
import logger from 'logger'
@ -8,6 +9,7 @@ import Select from 'components/base/Select'
import Spinner from 'components/base/Spinner'
import Text from 'components/base/Text'
import CounterValues from 'helpers/countervalues'
import type { T } from 'types/common'
class ExchangeSelect extends Component<
{
@ -16,6 +18,7 @@ class ExchangeSelect extends Component<
exchangeId: ?string,
onChange: (?Exchange) => void,
style?: *,
t: T,
},
{
prevFromTo: string,
@ -76,7 +79,7 @@ class ExchangeSelect extends Component<
}
render() {
const { onChange, exchangeId, style, ...props } = this.props
const { onChange, exchangeId, style, t, ...props } = this.props
const { exchanges, error } = this.state
const options = exchanges ? exchanges.map(e => ({ value: e.id, label: e.name, ...e })) : []
@ -90,7 +93,7 @@ class ExchangeSelect extends Component<
/>
) : error ? (
<Text ff="Open Sans|SemiBold" color="dark" fontSize={4}>
Failed to load.
{t('app:common.error.load')}
</Text>
) : (
<Spinner color="grey" size={24} />
@ -98,4 +101,4 @@ class ExchangeSelect extends Component<
}
}
export default ExchangeSelect
export default translate()(ExchangeSelect)

6
src/components/SettingsPage/sections/About.js

@ -41,17 +41,17 @@ class SectionAbout extends PureComponent<Props> {
<Header
icon={<IconHelp size={16} />}
title={t('app:settings.tabs.about')}
desc="Lorem ipsum dolor sit amet"
desc={t('app:settings.about.desc')}
/>
<Body>
<Row title="Version" desc={version}>
<Row title={t('app:settings.about.version')} desc={version}>
<Button
primary
onClick={() => {
openModal(MODAL_RELEASES_NOTES, version)
}}
>
Show release notes
{t('app:settings.about.releaseNotesBtn')}
</Button>
</Row>
<Row

8
src/components/SettingsPage/sections/Currencies.js

@ -97,7 +97,7 @@ class TabCurrencies extends PureComponent<Props, State> {
<Header
icon={<IconCurrencies size={16} />}
title={t('app:settings.tabs.currencies')}
desc="Lorem ipsum dolor sit amet"
desc={t('app:settings.currencies.desc')}
renderRight={
// TODO this should only be the subset of currencies of the app
<SelectCurrency
@ -112,8 +112,10 @@ class TabCurrencies extends PureComponent<Props, State> {
<Body>
{currency !== intermediaryCurrency ? (
<Row
title={`Exchange (${currency.ticker}${intermediaryCurrency.ticker})`}
desc="The exchange to use"
title={t('app:settings.display.exchange', {
ticker: `${currency.ticker}${intermediaryCurrency.ticker}`,
})}
desc={t('app:settings.currencies.exchangeDesc')}
>
<ExchangeSelect
small

8
src/components/SettingsPage/sections/Display.js

@ -146,7 +146,7 @@ class TabProfile extends PureComponent<Props, State> {
<Header
icon={<IconDisplay size={16} />}
title={t('app:settings.tabs.display')}
desc="Lorem ipsum dolor sit amet"
desc={t('app:settings.display.desc')}
/>
<Body>
<Row
@ -174,8 +174,10 @@ class TabProfile extends PureComponent<Props, State> {
</Box>
</Row>
<Row
title={`Exchange (${intermediaryCurrency.ticker}${counterValueCurrency.ticker})`}
desc="The exchange to use for countervalue conversion"
title={t('app:settings.display.exchange', {
ticker: `${intermediaryCurrency.ticker}${counterValueCurrency.ticker}`,
})}
desc={t('app:settings.display.exchangeDesc')}
/>
<Row
title={t('app:settings.display.language')}

2
src/components/SettingsPage/sections/Profile.js

@ -140,7 +140,7 @@ class TabProfile extends PureComponent<Props, State> {
<Header
icon={<IconUser size={16} />}
title={t('app:settings.tabs.profile')}
desc="Lorem ipsum dolor sit amet"
desc={t('app:settings.display.desc')}
/>
<Body>
<Row

20
src/components/modals/OperationDetails.js

@ -107,7 +107,7 @@ const OperationDetails = connect(mapStateToProps)((props: Props) => {
return (
<ModalBody onClose={onClose}>
<ModalTitle>Operation details</ModalTitle>
<ModalTitle>{t('app:operationDetails.title')}</ModalTitle>
<ModalContent flow={4}>
<Box alignItems="center" mt={3}>
<ConfirmationCheck
@ -136,17 +136,17 @@ const OperationDetails = connect(mapStateToProps)((props: Props) => {
</Box>
</Box>
<Line mt={4}>
<ColLeft>Acccount</ColLeft>
<ColLeft>{t('app:operationDetails.account')}</ColLeft>
<ColRight>{name}</ColRight>
</Line>
<B />
<Line>
<ColLeft>Date</ColLeft>
<ColLeft>{t('app:operationDetails.date')}</ColLeft>
<ColRight>{moment(date).format('LLL')}</ColRight>
</Line>
<B />
<Line>
<ColLeft>Status</ColLeft>
<ColLeft>{t('app:operationDetails.status')}</ColLeft>
<ColRight color={isConfirmed ? 'positiveGreen' : null} horizontal flow={1}>
<Box>
{isConfirmed
@ -160,7 +160,7 @@ const OperationDetails = connect(mapStateToProps)((props: Props) => {
{fee ? (
<Fragment>
<Line>
<ColLeft>Fees</ColLeft>
<ColLeft>{t('app:operationDetails.fees')}</ColLeft>
<ColRight>
<FormattedVal unit={unit} showCode val={fee} color="dark" />
</ColRight>
@ -169,27 +169,27 @@ const OperationDetails = connect(mapStateToProps)((props: Props) => {
</Fragment>
) : null}
<Line>
<ColLeft>From</ColLeft>
<ColLeft>{t('app:operationDetails.from')}</ColLeft>
<ColRight>{uniqSenders.map(v => <CanSelect key={v}>{v}</CanSelect>)}</ColRight>
</Line>
<B />
<Line>
<ColLeft>To</ColLeft>
<ColLeft>{t('app:operationDetails.to')}</ColLeft>
<ColRight>{recipients.map(v => <CanSelect key={v}> {v} </CanSelect>)}</ColRight>
</Line>
<B />
<Line>
<ColLeft>Identifier</ColLeft>
<ColLeft>{t('app:operationDetails.identifier')}</ColLeft>
<ColRight>
<CanSelect>{hash}</CanSelect>
</ColRight>
</Line>
</ModalContent>
<ModalFooter horizontal justify="flex-end" flow={2}>
<Button onClick={onClose}>Cancel</Button>
<Button onClick={onClose}>{t('app:common.cancel')}</Button>
{url ? (
<Button primary onClick={() => shell.openExternal(url)}>
View operation
{t('app:operationDetails.viewOperation')}
</Button>
) : null}
</ModalFooter>

19
src/renderer/i18n/instanciate.js

@ -9,6 +9,12 @@ const commonConfig = {
},
}
const highlightPostProcessor = {
type: 'postProcessor',
name: 'highlight',
process: value => `!!${value}!!`,
}
function addPluralRule(i18n) {
i18n.services.pluralResolver.addRule('en', {
numbers: [0, 1, 'plural'],
@ -18,10 +24,19 @@ function addPluralRule(i18n) {
}
export function createWithBackend(backend, backendOpts) {
i18n.use(backend).init({
const config = {
...commonConfig,
...backendOpts,
})
}
if (process.env.HIGHLIGHT_I18N) {
config.postProcess = 'highlight'
}
i18n
.use(backend)
.use(highlightPostProcessor)
.init(config)
return addPluralRule(i18n)
}

31
static/i18n/en/app.yml

@ -36,6 +36,8 @@ common:
upToDate: Up to date
error: Sync error.
refresh: Refresh
error:
load: Unable to load
operation:
type:
IN: Receive funds
@ -89,10 +91,14 @@ dashboard:
accountsOrder:
name: Alphabetic
balance: Balance
currentAddress: Current address
currentAddress:
title: Current address
for: Address for
message: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam blandit velit egestas leo tincidunt
deviceConnect:
step1:
choose: "We detected {{count}} devices connected, please select one:"
connect: Connect your <1>Ledger device</1> to your computer and enter your <3>PIN code</3> on your device
emptyState:
sidebar:
text: You don’t have any accounts at the moment. Press the + button to create an account
@ -105,6 +111,8 @@ emptyState:
exchange:
title: Exchange
visitWebsite: Visit website
coinhouse: Lorem ipsum
shapeshift: Ipsum lorem
genuinecheck:
modal:
title: Genuine check, bro
@ -126,8 +134,19 @@ importAccounts:
import: 'Import account'
import_plural: 'Import accounts'
operationDetails:
title: Operation details
account: Account
date: Date
status: Status
confirmed: Confirmed
notConfirmed: Not confirmed
fees: Fees
from: From
to: To
identifier: Identifier
viewOperation: View operation
operationList:
noMoreOperations: No more operations
manager:
tabs:
apps: Apps
@ -216,15 +235,21 @@ settings:
profile: Profile
about: About
display:
desc: Lorem ipsum dolor sit amet
language: Interface language
languageDesc: Lorem ipsum dolor sit amet
counterValue: Countervalue
counterValueDesc: Lorem ipsum dolor sit amet
exchange: Exchange ({{ticker}})
exchangeDesc: The exchange to use for countervalue conversion
region: Region
regionDesc: Lorem ipsum dolor sit amet
stock: Stock market indicators
stockDesc: Lorem ipsum dolor sit amet
currencies:
desc: Lorem ipsum dolor sit amet
exchange: Exchange ({{ticker}})
exchangeDesc: The exchange to use for countervalue conversion
confirmationsToSpend: Confirmations to spend
confirmationsToSpendDesc: Lorem ipsum dolor sit amet
confirmationsNb: Number of confirmations
@ -234,6 +259,7 @@ settings:
explorer: Blockchain explorer
explorerDesc: Lorem ipsum dolor sit amet
profile:
desc: Lorem ipsum dolor sit amet
password: Password
passwordDesc: Lorem ipsum dolor sit amet
changePassword: Change password
@ -254,6 +280,9 @@ settings:
reportErrors: Sentry Logs
reportErrorsDesc: Help Ledger improve its products and services by automatically sending diagnostics and usage data.
about:
desc: Lorem ipsum dolor sit amet
version: Version
releaseNotesBtn: Show release notes
faq: FAQ
faqDesc: Lorem ipsum dolor sit amet
contactUs: Contact us

1
static/i18n/en/onboarding.yml

@ -1,5 +1,6 @@
start:
title: Welcome to Ledger Live
startBtn: Get Started
init:
title: Welcome to Ledger Live, the computer companion app to your Ledger device
newDevice:

Loading…
Cancel
Save