diff --git a/apps/trading/client-pages/market/market.tsx b/apps/trading/client-pages/market/market.tsx index 493ddb31a..88863615f 100644 --- a/apps/trading/client-pages/market/market.tsx +++ b/apps/trading/client-pages/market/market.tsx @@ -11,7 +11,8 @@ import { useNavigate, useParams } from 'react-router-dom'; import { Links } from '../../lib/links'; import { ViewType, useSidebar } from '../../components/sidebar'; import { useGetCurrentRouteId } from '../../lib/hooks/use-get-current-route-id'; -import { useT } from '../../lib/use-t'; +import { useT, ns } from '../../lib/use-t'; +import { Trans } from 'react-i18next'; const calculatePrice = (markPrice?: string, decimalPlaces?: number) => { return markPrice && decimalPlaces @@ -112,10 +113,19 @@ export const MarketPage = () => { {t('This market URL is not available any more.')}

- {t(`Please choose another market from the`)}{' '} - navigate(Links.MARKETS())}> - {t('market list')} - + navigate(Links.MARKETS())} + key="link" + > + market list + , + ]} + />

diff --git a/apps/trading/client-pages/market/trade-grid.tsx b/apps/trading/client-pages/market/trade-grid.tsx index 5c4c27c22..128b6225a 100644 --- a/apps/trading/client-pages/market/trade-grid.tsx +++ b/apps/trading/client-pages/market/trade-grid.tsx @@ -13,7 +13,7 @@ import { ResizableGridPanel, usePaneLayout, } from '../../components/resizable-grid'; -import { TradingViews } from './trade-views'; +import { useTradingViews } from './trade-views'; import { MarketSuccessorBanner, MarketSuccessorProposalBanner, @@ -35,6 +35,7 @@ const MainGrid = memo( marketId: string; pinnedAsset?: PinnedAsset; }) => { + const TradingViews = useTradingViews(); const t = useT(); const { data: market } = useMarket(marketId); const [sizes, handleOnLayoutChange] = usePaneLayout({ id: 'top' }); diff --git a/apps/trading/client-pages/market/trade-panels.tsx b/apps/trading/client-pages/market/trade-panels.tsx index aa824c73c..796fc0e47 100644 --- a/apps/trading/client-pages/market/trade-panels.tsx +++ b/apps/trading/client-pages/market/trade-panels.tsx @@ -2,7 +2,7 @@ import type { PinnedAsset } from '@vegaprotocol/accounts'; import type { Market } from '@vegaprotocol/markets'; import { OracleBanner } from '@vegaprotocol/markets'; import type { TradingView } from './trade-views'; -import { NoMarketSplash, TradingViews } from './trade-views'; +import { NoMarketSplash, useTradingViews } from './trade-views'; import { useState } from 'react'; import AutoSizer from 'react-virtualized-auto-sizer'; import classNames from 'classnames'; @@ -19,6 +19,7 @@ interface TradePanelsProps { } export const TradePanels = ({ market, pinnedAsset }: TradePanelsProps) => { + const TradingViews = useTradingViews(); const [view, setView] = useState('candles'); const renderView = () => { diff --git a/apps/trading/client-pages/market/trade-views.tsx b/apps/trading/client-pages/market/trade-views.tsx index 422c6d64b..0b772105e 100644 --- a/apps/trading/client-pages/market/trade-views.tsx +++ b/apps/trading/client-pages/market/trade-views.tsx @@ -41,75 +41,78 @@ const requiresMarket = (View: MarketDependantView) => { return WrappedComponent; }; -export type TradingView = keyof typeof TradingViews; +export type TradingView = keyof ReturnType; -export const TradingViews = { - candles: { - label: 'Candles', - component: requiresMarket(CandlesChartContainer), - menu: CandlesMenu, - }, - depth: { - label: 'Depth', - component: requiresMarket(DepthChartContainer), - }, - liquidity: { - label: 'Liquidity', - component: requiresMarket(LiquidityContainer), - }, - funding: { - label: 'Funding', - component: requiresMarket(FundingContainer), - }, - fundingPayments: { - label: 'Funding Payments', - component: FundingPaymentsContainer, - }, - orderbook: { - label: 'Orderbook', - component: requiresMarket(OrderbookContainer), - }, - trades: { - label: 'Trades', - component: requiresMarket(TradesContainer), - }, - positions: { - label: 'Positions', - component: PositionsContainer, - menu: PositionsMenu, - }, - activeOrders: { - label: 'Active', - component: (props: OrderContainerProps) => ( - - ), - menu: OpenOrdersMenu, - }, - closedOrders: { - label: 'Closed', - component: (props: OrderContainerProps) => ( - - ), - }, - rejectedOrders: { - label: 'Rejected', - component: (props: OrderContainerProps) => ( - - ), - }, - orders: { - label: 'All', - component: OrdersContainer, - menu: OpenOrdersMenu, - }, - stopOrders: { - label: 'Stop', - component: StopOrdersContainer, - }, - collateral: { - label: 'Collateral', - component: AccountsContainer, - menu: AccountsMenu, - }, - fills: { label: 'Fills', component: FillsContainer }, +export const useTradingViews = () => { + const t = useT(); + return { + candles: { + label: t('Candles'), + component: requiresMarket(CandlesChartContainer), + menu: CandlesMenu, + }, + depth: { + label: t('Depth'), + component: requiresMarket(DepthChartContainer), + }, + liquidity: { + label: t('Liquidity'), + component: requiresMarket(LiquidityContainer), + }, + funding: { + label: t('Funding'), + component: requiresMarket(FundingContainer), + }, + fundingPayments: { + label: t('Funding Payments'), + component: FundingPaymentsContainer, + }, + orderbook: { + label: t('Orderbook'), + component: requiresMarket(OrderbookContainer), + }, + trades: { + label: t('Trades'), + component: requiresMarket(TradesContainer), + }, + positions: { + label: t('Positions'), + component: PositionsContainer, + menu: PositionsMenu, + }, + activeOrders: { + label: t('Active'), + component: (props: OrderContainerProps) => ( + + ), + menu: OpenOrdersMenu, + }, + closedOrders: { + label: t('Closed'), + component: (props: OrderContainerProps) => ( + + ), + }, + rejectedOrders: { + label: t('Rejected'), + component: (props: OrderContainerProps) => ( + + ), + }, + orders: { + label: t('All'), + component: OrdersContainer, + menu: OpenOrdersMenu, + }, + stopOrders: { + label: t('Stop'), + component: StopOrdersContainer, + }, + collateral: { + label: t('Collateral'), + component: AccountsContainer, + menu: AccountsMenu, + }, + fills: { label: t('Fills'), component: FillsContainer }, + }; }; diff --git a/apps/trading/client-pages/markets/markets-page.tsx b/apps/trading/client-pages/markets/markets-page.tsx index c66066905..f38924556 100644 --- a/apps/trading/client-pages/markets/markets-page.tsx +++ b/apps/trading/client-pages/markets/markets-page.tsx @@ -26,8 +26,8 @@ export const MarketsPage = () => { const externalLink = governanceLink(TOKEN_NEW_MARKET_PROPOSAL); useEffect(() => { - updateTitle(titlefy(['Markets'])); - }, [updateTitle]); + updateTitle(titlefy([t('Markets')])); + }, [updateTitle, t]); return (
diff --git a/apps/trading/client-pages/markets/settlement-date-cell.tsx b/apps/trading/client-pages/markets/settlement-date-cell.tsx index cc9f09789..7d9efa264 100644 --- a/apps/trading/client-pages/markets/settlement-date-cell.tsx +++ b/apps/trading/client-pages/markets/settlement-date-cell.tsx @@ -32,12 +32,12 @@ export const SettlementDateCell = ({ if (expiryHasPassed) { if (marketState !== MarketState.STATE_SETTLED) { - text = t('Expected %s ago', distance); + text = t('Expected {{distance}} ago', { distance }); } else { - text = t('%s ago', distance); + text = t('{{distance}} ago', { distance }); } } else { - text = t('Expected in %s', distance); + text = t('Expected in {{distance}}', { distance }); } } diff --git a/apps/trading/client-pages/referrals/create-code-form.tsx b/apps/trading/client-pages/referrals/create-code-form.tsx index 43018f00c..73123e3be 100644 --- a/apps/trading/client-pages/referrals/create-code-form.tsx +++ b/apps/trading/client-pages/referrals/create-code-form.tsx @@ -172,10 +172,14 @@ const CreateCodeDialog = ({ return (

- {t('You need at least')}{' '} - {addDecimalsFormatNumber(requiredStake.toString(), 18)}{' '} {t( - 'VEGA staked to generate a referral code and participate in the referral program.' + 'You need at least {{requiredStake}} VEGA staked to generate a referral code and participate in the referral program.', + { + requiredStake: addDecimalsFormatNumber( + requiredStake.toString(), + 18 + ), + } )}

{ const { pubKey } = useVegaWallet(); @@ -68,7 +69,6 @@ export const useStats = ({ program: ReturnType; as?: 'referrer' | 'referee'; }) => { - const t = useT(); const { benefitTiers, details } = program; const { data: epochData } = useCurrentEpochInfoQuery(); const { data: statsData } = useReferralSetStatsQuery({ @@ -153,6 +153,7 @@ export const Statistics = ({ program: ReturnType; as: 'referrer' | 'referee'; }) => { + const t = useT(); const { baseCommissionValue, runningVolumeValue, @@ -186,10 +187,15 @@ export const Statistics = ({ const baseCommissionTile = ( {baseCommissionValue * 100}% @@ -197,10 +203,9 @@ export const Statistics = ({ const stakingMultiplierTile = ( {multiplier || t('None')} @@ -233,10 +238,9 @@ export const Statistics = ({ const referrerVolumeTile = ( {compactNumFormat.format(referrerVolumeValue)} @@ -247,10 +251,9 @@ export const Statistics = ({ .reduce((all, r) => all.plus(r), new BigNumber(0)); const totalCommissionTile = ( } > {getNumberFormat(0).format(Number(totalCommissionValue))} @@ -291,10 +294,9 @@ export const Statistics = ({ ); const runningVolumeTile = ( {compactNumFormat.format(runningVolumeValue)} @@ -382,25 +384,22 @@ export const Statistics = ({ { name: 'joined', displayName: t('Date Joined') }, { name: 'volume', - displayName: t( - 'Volume (last %s epochs)', - ( - details?.windowLength || DEFAULT_AGGREGATION_DAYS - ).toString(), - ), + displayName: t('Volume (last {{count}} epochs)', { + count: details?.windowLength || DEFAULT_AGGREGATION_DAYS, + }), }, { name: 'commission', displayName: ( - <> - {t('Commission earned in')} {' '} - {t( - '(last %s epochs)', - ( - details?.windowLength || DEFAULT_AGGREGATION_DAYS - ).toString(), - )} - + ), }, ]} diff --git a/apps/trading/client-pages/referrals/tiers.tsx b/apps/trading/client-pages/referrals/tiers.tsx index a2789b9a9..5773fec08 100644 --- a/apps/trading/client-pages/referrals/tiers.tsx +++ b/apps/trading/client-pages/referrals/tiers.tsx @@ -7,7 +7,8 @@ import { Tag } from './tag'; import type { ComponentProps, ReactNode } from 'react'; import { ExternalLink } from '@vegaprotocol/ui-toolkit'; import { DApp, TOKEN_PROPOSALS, useLinks } from '@vegaprotocol/environment'; -import { useT } from '../../lib/use-t'; +import { useT, ns } from '../../lib/use-t'; +import { Trans } from 'react-i18next'; const Loading = ({ variant }: { variant: 'large' | 'inline' }) => (
Multiplier {referralRewardMultiplier}x

{label}

- {t('Stake a minimum of')} {minimumStakedTokens} {t('$VEGA tokens')} + {t('Stake a minimum of {{minimumStakedTokens}} $VEGA tokens', { + minimumStakedTokens, + })}

@@ -84,13 +87,16 @@ export const TiersContainer = () => { if ((!loading && !details) || error) { return (
- {t( - "We're sorry but we don't have an active referral programme currently running. You can propose a new programme" - )}{' '} - - {t('here')} - - . + + {t('here')} + , + ]} + ns={ns} + />
); } @@ -189,12 +195,9 @@ const TiersTable = ({ { name: 'discount', displayName: t('Referrer trading discount') }, { name: 'volume', - displayName: t( - 'Min. trading volume %s', - windowLength - ? t('(last %s epochs)', windowLength.toString()) - : undefined - ), + displayName: t('Min. trading volume (last {{count}} epochs)', { + count: windowLength, + }), }, { name: 'epochs', displayName: t('Min. epochs') }, ]} diff --git a/apps/trading/client-pages/referrals/tile.tsx b/apps/trading/client-pages/referrals/tile.tsx index fb2c3e424..39a9139eb 100644 --- a/apps/trading/client-pages/referrals/tile.tsx +++ b/apps/trading/client-pages/referrals/tile.tsx @@ -66,7 +66,9 @@ export const CodeTile = ({ return (
{requiredForNextTier > 0 && (
@@ -453,7 +452,9 @@ const VolumeTiers = ({ {t('Tier')} {t('Discount')} {t('Min. trading volume')} - {t('My volume (last %s epochs)', windowLength.toString())} + + {t('My volume (last {{count}} epochs)', { count: windowLength })} + @@ -499,6 +500,7 @@ const ReferralTiers = ({ referralVolumeInWindow: number; }) => { const t = useT(); + if (!tiers.length) { return (

{t('No referral program active')}

@@ -557,6 +559,7 @@ const ReferralTiers = ({ const YourTier = () => { const t = useT(); + return ( {t('Your tier')} @@ -564,30 +567,34 @@ const YourTier = () => { ); }; -const ReferrerInfo = ({ code }: { code?: string }) => ( -
-

- {t('Connected key is owner of the referral set')} - {code && ( - <> - {' '} - - {truncateMiddle(code)} - - - )} - {'. '} - {t('As owner, it is eligible for commission not fee discounts.')} -

-

- {t('See')}{' '} - - {t('Referrals')} - {' '} - {t('for more information.')} -

-
-); +const ReferrerInfo = ({ code }: { code?: string }) => { + const t = useT(); + + return ( +
+

+ {t('Connected key is owner of the referral set')} + {code && ( + <> + {' '} + + {truncateMiddle(code)} + + + )} + {'. '} + {t('As owner, it is eligible for commission not fee discounts.')} +

+

+ {t('See')}{' '} + + {t('Referrals')} + {' '} + {t('for more information.')} +

+
+ ); +}; diff --git a/apps/trading/components/liquidity-header/liquidity-header.tsx b/apps/trading/components/liquidity-header/liquidity-header.tsx index 104fc8cc6..9b71989a9 100644 --- a/apps/trading/components/liquidity-header/liquidity-header.tsx +++ b/apps/trading/components/liquidity-header/liquidity-header.tsx @@ -61,10 +61,9 @@ export const LiquidityHeader = () => { marketId && ( {market.tradableInstrument.instrument.code && - t( - '%s liquidity provision', - market.tradableInstrument.instrument.code - )} + t('{{instrumentCode}} liquidity provision', { + instrumentCode: market.tradableInstrument.instrument.code, + })} ) } @@ -103,8 +102,8 @@ export const LiquidityHeader = () => { diff --git a/apps/trading/components/market-banner/market-successor-banner.tsx b/apps/trading/components/market-banner/market-successor-banner.tsx index 4fb3e0356..c372e8a9f 100644 --- a/apps/trading/components/market-banner/market-successor-banner.tsx +++ b/apps/trading/components/market-banner/market-successor-banner.tsx @@ -18,7 +18,8 @@ import { isNumeric, } from '@vegaprotocol/utils'; import * as Types from '@vegaprotocol/types'; -import { useT } from '../../lib/use-t'; +import { useT, ns } from '../../lib/use-t'; +import { Trans } from 'react-i18next'; const getExpiryDate = (tags: string[], close?: string): Date | null => { const expiryDate = getMarketExpiryDate(tags); @@ -82,8 +83,8 @@ export const MarketSuccessorBanner = ({
{duration && ( - {t('This market expires in %s.', [ - formatDuration(duration, { + {t('This market expires in {{duration}}.', { + duration: formatDuration(duration, { format: [ 'years', 'months', @@ -93,22 +94,48 @@ export const MarketSuccessorBanner = ({ 'minutes', ], }), - ])} + })} )} {successorData && ( <> {' '} - {t('The successor market')} - {!successorVolume ? ' is ' : ' '} - - {successorData?.tradableInstrument.instrument.name} - - {successorVolume && ( - - {' '} - {t('has a 24h trading volume of %s', [successorVolume])} - + {successorVolume ? ( + + successor market name + , + ]} + ns={ns} + /> + ) : ( + + successor market name + , + ]} + /> )} )} diff --git a/apps/trading/components/market-banner/market-successor-proposal-banner.tsx b/apps/trading/components/market-banner/market-successor-proposal-banner.tsx index 8c3574eef..2acb35435 100644 --- a/apps/trading/components/market-banner/market-successor-proposal-banner.tsx +++ b/apps/trading/components/market-banner/market-successor-proposal-banner.tsx @@ -58,9 +58,13 @@ export const MarketSuccessorProposalBanner = ({ : t('Successors to this market have been proposed')}
- {successors.length === 1 - ? t('Check out the terms of the proposal and vote:') - : t('Check out the terms of the proposals and vote:')}{' '} + {t( + 'checkOutProposalsAndVote', + 'Check out the terms of the proposals and vote:', + { + count: successors.length, + } + )}{' '} {successors.map((item, i) => { const externalLink = tokenLink( TOKEN_PROPOSAL.replace(':id', item.id || '') diff --git a/apps/trading/components/market-banner/market-termination-banner.tsx b/apps/trading/components/market-banner/market-termination-banner.tsx index aa388d97a..241bb2f50 100644 --- a/apps/trading/components/market-banner/market-termination-banner.tsx +++ b/apps/trading/components/market-banner/market-termination-banner.tsx @@ -114,19 +114,22 @@ export const MarketTerminationBanner = ({ content = ( <>
- {t('Trading on Market %s will stop on %s', [name, date])} + {t('Trading on Market {{name}} will stop on {{date}}', { + name, + date, + })}
{t( - 'You will no longer be able to hold a position on this market when it closes in %s.', - [duration] + 'You will no longer be able to hold a position on this market when it closes in {{duration}}.', + { duration } )}{' '} {price && assetSymbol && - t('The final price will be %s %s.', [ - addDecimalsFormatNumber(price, market.decimalPlaces), + t('The final price will be {{price}} {{assetSymbol}}.', { + price: addDecimalsFormatNumber(price, market.decimalPlaces), assetSymbol, - ])} + })}
); @@ -135,8 +138,8 @@ export const MarketTerminationBanner = ({ <>
{t( - 'Trading on Market %s may stop. There are open proposals to close this market', - [name] + 'Trading on Market {{name}} may stop. There are open proposals to close this market', + { name } )}
@@ -152,17 +155,17 @@ export const MarketTerminationBanner = ({ <>
{t( - 'Trading on Market %s may stop on %s. There is open proposal to close this market.', - [name, date] + 'Trading on Market {{name}} may stop on {{date}}. There is open proposal to close this market.', + { name, date } )}
{price && assetSymbol && - t('Proposed final price is %s %s.', [ - addDecimalsFormatNumber(price, market.decimalPlaces), + t('Proposed final price is {{price}} {{assetSymbol}}.', { + price: addDecimalsFormatNumber(price, market.decimalPlaces), assetSymbol, - ])} + })}
{t('View proposal')} diff --git a/apps/trading/components/market-selector/asset-dropdown.tsx b/apps/trading/components/market-selector/asset-dropdown.tsx index a8151665f..6a1375698 100644 --- a/apps/trading/components/market-selector/asset-dropdown.tsx +++ b/apps/trading/components/market-selector/asset-dropdown.tsx @@ -76,7 +76,9 @@ const triggerText = ( const asset = assets.find((a) => a.id === assetId); text = asset ? asset.symbol : t('Asset (1)'); } else if (checkedAssets.length > 1) { - text = t(`${checkedAssets.length} Assets`); + text = t('{{checkedAssets}} Assets', { + checkedAssets: checkedAssets.length, + }); } return text; diff --git a/apps/trading/components/market-selector/product-selector.tsx b/apps/trading/components/market-selector/product-selector.tsx index c339bf13f..67ee4adb6 100644 --- a/apps/trading/components/market-selector/product-selector.tsx +++ b/apps/trading/components/market-selector/product-selector.tsx @@ -14,15 +14,6 @@ export const Product = { export type ProductType = keyof typeof Product; -const ProductTypeMapping: { - [key in ProductType]: string; -} = { - [Product.All]: 'All', - [Product.Future]: 'Futures', - [Product.Spot]: 'Spot', - [Product.Perpetual]: 'Perpetuals', -}; - export const ProductSelector = ({ product, onSelect, @@ -31,6 +22,14 @@ export const ProductSelector = ({ onSelect: (product: ProductType) => void; }) => { const t = useT(); + const ProductTypeMapping: { + [key in ProductType]: string; + } = { + [Product.All]: t('All'), + [Product.Future]: t('Futures'), + [Product.Spot]: t('Spot'), + [Product.Perpetual]: t('Perpetuals'), + }; return (
{Object.keys(Product).map((t) => { diff --git a/apps/trading/components/market-state/market-state.tsx b/apps/trading/components/market-state/market-state.tsx index 3ddba9256..515c041be 100644 --- a/apps/trading/components/market-state/market-state.tsx +++ b/apps/trading/components/market-state/market-state.tsx @@ -98,7 +98,7 @@ const useGetMarketStateTooltip = (state: Schema.MarketState | null) => { return (

{t( - `This market has been suspended via a governance vote and can be resumed or terminated by further votes.` + 'This market has been suspended via a governance vote and can be resumed or terminated by further votes.' )} {DocsLinks && ( diff --git a/apps/trading/components/welcome-dialog/get-started.tsx b/apps/trading/components/welcome-dialog/get-started.tsx index 0dc85709a..1d15ce0fb 100644 --- a/apps/trading/components/welcome-dialog/get-started.tsx +++ b/apps/trading/components/welcome-dialog/get-started.tsx @@ -17,7 +17,8 @@ import { import { Links, Routes } from '../../lib/links'; import { useGlobalStore } from '../../stores'; import { useSidebar, ViewType } from '../sidebar'; -import { useT } from '../../lib/use-t'; +import { useT, ns } from '../../lib/use-t'; +import { Trans } from 'react-i18next'; interface Props { lead?: string; @@ -135,18 +136,26 @@ export const GetStarted = ({ lead }: Props) => {

{VEGA_ENV === Networks.MAINNET && (

- {t('Experiment for free with virtual assets on')}{' '} - - {t('Fairground Testnet')} - + + Fairground Testnet + , + ]} + />

)} {VEGA_ENV === Networks.TESTNET && (

- {t('Ready to trade with real funds?')}{' '} - - {t('Switch to Mainnet')} - + + Switch to Mainnet + , + ]} + />

)}
@@ -157,11 +166,14 @@ export const GetStarted = ({ lead }: Props) => { return (

- You need a{' '} - - Vega wallet - {' '} - to start trading in this market. + + Vega wallet + , + ]} + />

( + + + {children} + + + +); export const RiskMessage = () => { const t = useT(); @@ -25,15 +35,10 @@ export const RiskMessage = () => {

- {t( - 'By using the Vega Console, you acknowledge that you have read and understood the' - )}{' '} - - - {t('Vega Console Disclaimer')} - - - + ]} + />

); diff --git a/apps/trading/lib/use-t.ts b/apps/trading/lib/use-t.ts index 40ded6ebd..4e9ef8ea0 100644 --- a/apps/trading/lib/use-t.ts +++ b/apps/trading/lib/use-t.ts @@ -1,2 +1,3 @@ import { useTranslation } from 'react-i18next'; +export const ns = 'trading'; export const useT = () => useTranslation('trading').t; diff --git a/libs/i18n/src/locales/en/trading.json b/libs/i18n/src/locales/en/trading.json index 25ac898de..cb5055b36 100644 --- a/libs/i18n/src/locales/en/trading.json +++ b/libs/i18n/src/locales/en/trading.json @@ -1,3 +1,293 @@ { - "k": " " + "Deposit": "Deposit", + "Withdraw": "Withdraw", + "Transfer": "Transfer", + "Get started": "Get started", + "Start trading": "Start trading", + "Disclaimer": "Disclaimer", + "DISCLAIMER_P1": "Vega is a decentralised peer-to-peer protocol that can be used to trade derivatives with cryptoassets. The Vega Protocol is an implementation layer (layer one) protocol made of free, public, open-source or source-available software. Use of the Vega Protocol involves various risks, including but not limited to, losses while digital assets are supplied to the Vega Protocol and losses due to the fluctuation of prices of assets.", + "DISCLAIMER_P2": "Before using the Vega Protocol, review the relevant documentation at docs.vega.xyz to make sure that you understand how it works. Conduct your own due diligence and consult your financial advisor before making any investment decisions.", + "DISCLAIMER_P3": "As described in the Vega Protocol core license, the Vega Protocol is provided “as is”, at your own risk, and without warranties of any kind. Although Gobalsky Labs Limited developed much of the initial code for the Vega Protocol, it does not provide or control the Vega Protocol, which is run by third parties deploying it on a bespoke blockchain. Upgrades and modifications to the Vega Protocol are managed in a community-driven way by holders of the VEGA governance token.", + "DISCLAIMER_P4": "No developer or entity involved in creating the Vega Protocol will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the Vega Protocol, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or legal costs, or loss of profits, cryptoassets, tokens or anything else of value.", + "DISCLAIMER_P5": "This website is hosted on a decentralised network, the Interplanetary File System (“IPFS”). The IPFS decentralised web is made up of all the computers (nodes) connected to it. Data is therefore stored on many different computers.", + "DISCLAIMER_P6": "The information provided on this website does not constitute investment advice, financial advice, trading advice, or any other sort of advice and you should not treat any of the website's content as such. No party recommends that any cryptoasset should be bought, sold, or held by you via this website. No party ensures the accuracy of information listed on this website or holds any responsibility for any missing or wrong information. You understand that you are using any and all information available here at your own risk.", + "DISCLAIMER_P7": "Additionally, just as you can access email protocols such as SMTP through multiple email clients, you can potentially access the Vega Protocol through many web or mobile interfaces. You are responsible for doing your own diligence on those interfaces to understand the associated risks and any fees.", + "Fees": "Fees", + "Order": "Order", + "Market specification": "Market specification", + "My liquidity provision": "My liquidity provision", + "Active": "Active", + "Inactive": "Inactive", + "Mark Price": "Mark Price", + "Change (24h)": "Change (24h)", + "Volume (24h)": "Volume (24h)", + "Settlement asset": "Settlement asset", + "Expiry": "Expiry", + "Funding Rate": "Funding Rate", + "Countdown": "Countdown", + "The external time weighted average price (TWAP) received from the data source defined in the data sourcing specification.": "The external time weighted average price (TWAP) received from the data source defined in the data sourcing specification.", + "Index Price": "Index Price", + "Find out more": "Find out more", + "Unknown": "Unknown", + "This market expires when triggered by its oracle, not on a set date.": "This market expires when triggered by its oracle, not on a set date.", + "This timestamp is user curated metadata and does not drive any on-chain functionality.": "This timestamp is user curated metadata and does not drive any on-chain functionality.", + "View oracle specification": "View oracle specification", + "This market URL is not available any more.": "This market URL is not available any more.", + "CHOOSE_ANOTHER_MARKET": "Please choose another market from the <0>market list<0>", + "Chart": "Chart", + "Depth": "Depth", + "Liquidity": "Liquidity", + "Funding history": "Funding history", + "Funding payments": "Funding payments", + "Orderbook": "Orderbook", + "Trades": "Trades", + "Positions": "Positions", + "Open": "Open", + "Closed": "Closed", + "Rejected": "Rejected", + "All": "All", + "Stop orders": "Stop orders", + "Fills": "Fills", + "Collateral": "Collateral", + "No market": "No market", + "Market": "Market", + "Status": "Status", + "Settlement date": "Settlement date", + "Best bid": "Best bid", + "Best offer": "Best offer", + "Mark price": "Mark price", + "Settlement price": "Settlement price", + "No markets": "No markets", + "Successor of a market": "Successor of a market", + "SCCR": "SCCR", + "Parent of a market": "Parent of a market", + "PRNT": "PRNT", + "Copy Market ID": "Copy Market ID", + "View on Explorer": "View on Explorer", + "View settlement asset details": "View settlement asset details", + "View parent market": "View parent market", + "View successor market": "View successor market", + "Markets": "Markets", + "Open markets": "Open markets", + "Proposed markets": "Proposed markets", + "Propose a new market": "Propose a new market", + "Closed markets": "Closed markets", + "Expected {{distance}} ago": "Expected {{distance}} ago", + "{{distance}} ago": "{{distance}} ago", + "Expected in {{distance}}": "Expected in {{distance}}", + "Unknown settlement date": "Unknown settlement date", + "Description": "Description", + "Trading mode": "Trading mode", + "24h volume": "24h volume", + "Spread": "Spread", + "Portfolio": "Portfolio", + "Orders": "Orders", + "Ledger entries": "Ledger entries", + "Code must be 64 characters in length": "Code must be 64 characters in length", + "Code must be be valid hex": "Code must be be valid hex", + "The transaction could not be sent": "The transaction could not be sent", + "Your code has been rejected": "Your code has been rejected", + "Create a referral code": "Create a referral code", + "Generate a referral code to share with your friends and start earning commission.": "Generate a referral code to share with your friends and start earning commission.", + "Connect wallet": "Connect wallet", + "Generate code": "Generate code", + "Confirm in wallet...": "Confirm in wallet...", + "Close": "Close", + "You must be connected to the Vega wallet.": "You must be connected to the Vega wallet.", + "You need at least {{requiredStake}} VEGA staked to generate a referral code and participate in the referral program.": "You need at least {{requiredStake}} VEGA staked to generate a referral code and participate in the referral program.", + "Stake some $VEGA now": "Stake some $VEGA now", + "Copy": "Copy", + "About the referral program": "About the referral program", + "Something went wrong": "Something went wrong", + "An unknown error occurred.": "An unknown error occurred.", + "The page you're looking for doesn't exists.": "The page you're looking for doesn't exists.", + "Go back and try again": "Go back and try again", + "Referrers generate a code assigned to their key via an on chain transaction": "Referrers generate a code assigned to their key via an on chain transaction", + "Anyone with the referral link can apply it to their key(s) of choice via an on chain transaction": "Anyone with the referral link can apply it to their key(s) of choice via an on chain transaction", + "Discounts are applied automatically during trading based on the key(s) used": "Discounts are applied automatically during trading based on the key(s) used", + "Referrers earn commission based on a percentage of the taker fees their referees pay": "Referrers earn commission based on a percentage of the taker fees their referees pay", + "The commission is taken from the infrastructure fee, maker fee, and liquidity provider fee, not from the referee": "The commission is taken from the infrastructure fee, maker fee, and liquidity provider fee, not from the referee", + "Earn commission & stake rewards": "Earn commission & stake rewards", + "Invite friends and earn rewards from the trading fees they pay. Stake those rewards to earn multipliers on future rewards.": "Invite friends and earn rewards from the trading fees they pay. Stake those rewards to earn multipliers on future rewards.", + "Base commission rate": "Base commission rate", + "Staking multiplier": "Staking multiplier", + "None": "None", + "Final commission rate": "Final commission rate", + "Number of traders": "Number of traders", + "My volume (last {{count}} epochs)": "My volume (last {{count}} epochs)", + "{{amount}} $VEGA staked": "{{amount}} $VEGA staked", + "Total commission (last {{count}}} epochs)": "Total commission (last {{count}}} epochs)", + "Current tier": "Current tier", + "Discount": "Discount", + "Combined volume (last {{count}} epochs": "Combined volume (last {{count}} epochs", + "Epochs in set": "Epochs in set", + "Volume to next tier": "Volume to next tier", + "Epochs to next tier": "Epochs to next tier", + "Trader": "Trader", + "Date Joined": "Date Joined", + "Volume (last {{count}} epochs)": "Volume (last {{count}} epochs)", + "REFERRAL_STATISTICS_COMMISSION": "Commission earned in <0>qUSD (last {{count}} epochs)", + "qUSD provides a rough USD equivalent of balances across all assets using the value of \"Quantum\" for that asset": " for that asset", + "qUSD": "qUSD", + "I want a code": "I want a code", + "Referrals": "Referrals", + "Read the terms": "Read the terms", + "How it works": "How it works", + "Stake a minimum of {{minimumStakedTokens}} $VEGA tokens": "Stake a minimum of {{minimumStakedTokens}} $VEGA tokens", + "REFERRALS_TIERS_NO_PROGRAM": "We're sorry but we don't have an active referral programme currently running. You can propose a new programme <0>here.", + "Program ends:": "Program ends:", + "Tier": "Tier", + "Referrer commission": "Referrer commission", + "A percentage of commission earned by the referrer": "A percentage of commission earned by the referrer", + "Referrer trading discount": "Referrer trading discount", + "Min. trading volume (last {{count}} epochs)": "Min. trading volume (last {{count}} epochs)", + "Min. epochs": "Min. epochs", + "Your referral code": "Your referral code", + "(Created at: {{createdAt}})": "(Created at: {{createdAt}})", + "Please connect Vega wallet": "Please connect Vega wallet", + "Could not initialize app": "Could not initialize app", + "Node: {{VEGA_URL}} is unsuitable": "Node: {{VEGA_URL}} is unsuitable", + "Could not configure web3 provider": "Could not configure web3 provider", + "No deposits": "No deposits", + "My trading fees": "My trading fees", + "Total discount": "Total discount", + "My current volume": "My current volume", + "Referral benefits": "Referral benefits", + "Volume discount": "Volume discount", + "Referral discount": "Referral discount", + "Liquidity fees": "Liquidity fees", + "Total fee before discount": "Total fee before discount", + "Infrastructure": "Infrastructure", + "Maker": "Maker", + "Past {{count}} epochs": "Past {{count}} epochs", + "Required for next tier": "Required for next tier", + "Combined running notional over the {{count}} epochs": "Combined running notional over the {{count}} epochs", + "epochs in referral set": "epochs in referral set", + "No volume discount program active": "No volume discount program active", + "Min. trading volume": "Min. trading volume", + "No referral program active": "No referral program active", + "Required epochs": "Required epochs", + "Your tier": "Your tier", + "Total fee after discount": "Total fee after discount", + "Funding rate": "Funding rate", + "No funding history data": "No funding history data", + "Environment not configured": "Environment not configured", + "No ledger entries to export": "No ledger entries to export", + "No data": "No data", + "{{instrumentCode}} liquidity provision": "{{instrumentCode}} liquidity provision", + "Target stake": "Target stake", + "Supplied stake": "Supplied stake", + "Liquidity supplied": "Liquidity supplied", + "Fees paid": "Fees paid", + "The amount of fees paid to liquidity providers across the whole market during the last epoch {{epoch}}.": "The amount of fees paid to liquidity providers across the whole market during the last epoch {{epoch}}.", + "Market ID": "Market ID", + "Learn more": "Learn more", + "Providing liquidity": "Providing liquidity", + "The market has sufficient liquidity but there are not enough priced limit orders in the order book, which are required to deploy liquidity commitment pegged orders.": "The market has sufficient liquidity but there are not enough priced limit orders in the order book, which are required to deploy liquidity commitment pegged orders.", + "View liquidity provision table": "View liquidity provision table", + "Learn about providing liquidity": "Learn about providing liquidity", + "This market has been succeeded": "This market has been succeeded", + "This market has been settled": "This market has been settled", + "This market expires in {{duration}}.": "This market expires in {{duration}}.", + "MARKET_SUCCESSOR_BANNER_EXPIRY_WITH_VOLUME": "The successor market is <0>{{instrumentName}}", + "MARKET_SUCCESSOR_BANNER_EXPIRY_NO_VOLUME": "The successor market <0>{{instrumentName}} has a 24h trading volume of {{successorVolume}}", + "A successors to this market has been proposed": "A successors to this market has been proposed", + "Successors to this market have been proposed": "Successors to this market have been proposed", + "checkOutProposalsAndVote": "Check out the terms of the proposals and vote:", + "checkOutProposalsAndVote_one": "Check out the terms of the proposal and vote:", + "checkOutProposalsAndVote_other": "Check out the terms of the proposals and vote:", + "Trading on Market {{name}} will stop on {{date}}": "Trading on Market {{name}} will stop on {{date}}", + "You will no longer be able to hold a position on this market when it closes in {{duration}}.": "You will no longer be able to hold a position on this market when it closes in {{duration}}.", + "The final price will be {{price}} {{assetSymbol}}.": "The final price will be {{price}} {{assetSymbol}}.", + "Trading on Market {{name}} may stop. There are open proposals to close this market": "Trading on Market {{name}} may stop. There are open proposals to close this market", + "View proposals": "View proposals", + "Trading on Market {{name}} may stop on {{date}}. There is open proposal to close this market.": "Trading on Market {{name}} may stop on {{date}}. There is open proposal to close this market.", + "Proposed final price is {{price}} {{assetSymbol}}.": "Proposed final price is {{price}} {{assetSymbol}}.", + "Assets": "Assets", + "Asset (1)": "Asset (1)", + "{{checkedAssets}} Assets": "{{checkedAssets}} Assets", + "24h vol": "24h vol", + "Search": "Search", + "No perpetual markets.": "No perpetual markets.", + "Spot markets coming soon.": "Spot markets coming soon.", + "No future markets.": "No future markets.", + "No markets.": "No markets.", + "Name": "Name", + "Price": "Price", + "Futures": "Futures", + "Spot": "Spot", + "Perpetuals": "Perpetuals", + "See all markets": "See all markets", + "Browse": "Browse", + "Enactment date reached and usual auction exit checks pass": "Enactment date reached and usual auction exit checks pass", + "Market triggers cancellation or governance vote has passed to cancel": "Market triggers cancellation or governance vote has passed to cancel", + "Governance vote passed to close the market": "Governance vote passed to close the market", + "Governance vote has passed and market is awaiting opening auction exit": "Governance vote has passed and market is awaiting opening auction exit", + "Governance vote for this market is valid and has been accepted": "Governance vote for this market is valid and has been accepted", + "Governance vote for this market has been rejected": "Governance vote for this market has been rejected", + "Settlement defined by product has been triggered and completed": "Settlement defined by product has been triggered and completed", + "Suspended due to price or liquidity monitoring trigger": "Suspended due to price or liquidity monitoring trigger", + "Trading has been terminated as a result of the product definition": "Trading has been terminated as a result of the product definition", + "This market has been suspended via a governance vote and can be resumed or terminated by further votes.": "This market has been suspended via a governance vote and can be resumed or terminated by further votes.", + "Volume": "Volume", + "Select market": "Select market", + "Wallet": "Wallet", + "Menu": "Menu", + "Close menu": "Close menu", + "Trading": "Trading", + "Governance": "Governance", + "Resources": "Resources", + "Docs": "Docs", + "Give Feedback": "Give Feedback", + "Mainnet status & incidents": "Mainnet status & incidents", + "Connected node": "Connected node", + "No open orders": "No open orders", + "No closed orders": "No closed orders", + "No rejected orders": "No rejected orders", + "No orders": "No orders", + "Hide closed markets": "Hide closed markets", + "Show closed markets": "Show closed markets", + "Dark mode": "Dark mode", + "Share usage data": "Share usage data", + "Help identify bugs and improve the service by sharing anonymous usage data.": "Help identify bugs and improve the service by sharing anonymous usage data.", + "Toast location": "Toast location", + "View as party": "View as party", + "Settings": "Settings", + "Help us identify bugs and improve Vega Governance by sharing anonymous usage data.": "Help us identify bugs and improve Vega Governance by sharing anonymous usage data.", + "Your identity is always anonymous on Vega": "Your identity is always anonymous on Vega", + "You can opt out any time via settings": "You can opt out any time via settings", + "Optional": "Optional", + "Anonymous": "Anonymous", + "No thanks": "No thanks", + "Continue sharing data": "Continue sharing data", + "Share data": "Share data", + "Improve vega console": "Improve vega console", + "Disconnect": "Disconnect", + "Copied": "Copied", + "Connect": "Connect", + "Ready to trade": "Ready to trade", + "Deposit funds": "Deposit funds", + "Open a position": "Open a position", + "You need a <0>Vega wallet to start trading in this market.": "You need a <0>Vega wallet to start trading in this market.", + "Ready to trade with real funds? <0>Switch to Mainnet": "Ready to trade with real funds? <0>Switch to Mainnet", + "Experiment for free with virtual assets on <0>Fairground Testnet": "Experiment for free with virtual assets on <0>Fairground Testnet", + "Conduct your own due diligence and consult your financial advisor before making any investment decisions.": "Conduct your own due diligence and consult your financial advisor before making any investment decisions.", + "You may encounter bugs, loss of functionality or loss of assets.": "You may encounter bugs, loss of functionality or loss of assets.", + "No party accepts any liability for any losses whatsoever.": "No party accepts any liability for any losses whatsoever.", + "By using the Vega Console, you acknowledge that you have read and understood the <0>Vega Console Disclaimer": "By using the Vega Console, you acknowledge that you have read and understood the <0>Vega Console Disclaimer", + "Start trading on the worlds most advanced decentralised exchange.": "Start trading on the worlds most advanced decentralised exchange.", + "Free from the risks of real trading, Fairground is a safe and fun place to try out Vega yourself with virtual assets.": "Free from the risks of real trading, Fairground is a safe and fun place to try out Vega yourself with virtual assets.", + "Non-custodial and pseudonymous": "Non-custodial and pseudonymous", + "No third party has access to your funds.": "No third party has access to your funds.", + "Purpose built proof of stake blockchain": "Purpose built proof of stake blockchain", + "Fully decentralised high performance peer-to-network trading.": "Fully decentralised high performance peer-to-network trading.", + "Low fees and no cost to place orders": "Low fees and no cost to place orders", + "Fees work like a CEX with no per-transaction gas for orders": "Fees work like a CEX with no per-transaction gas for orders", + "Explore": "Explore", + "Console": "Console", + "No withdrawals": "No withdrawals", + "Make withdrawal": "Make withdrawal", + "Welcome to Vega trading!": "Welcome to Vega trading!", + "Page not found": "Page not found", + "(Combined set volume {{runningVolume}} over last {{epochs}} epochs)": "(Combined set volume {{runningVolume}} over last {{epochs}} epochs)" }