move routes loading to parent
This commit is contained in:
parent
40a9fd4c08
commit
c4c8cb60f8
|
@ -31,18 +31,27 @@ const Button: FunctionComponent<ButtonProps> = ({
|
|||
)
|
||||
}
|
||||
|
||||
export const IconButton: FunctionComponent<ButtonProps> = ({
|
||||
interface IconButtonProps {
|
||||
hideBg?: boolean
|
||||
}
|
||||
|
||||
type IconButtonCombinedProps = ButtonProps & IconButtonProps
|
||||
|
||||
export const IconButton: FunctionComponent<IconButtonCombinedProps> = ({
|
||||
children,
|
||||
onClick,
|
||||
disabled = false,
|
||||
className,
|
||||
hideBg,
|
||||
...props
|
||||
}) => {
|
||||
return (
|
||||
<button
|
||||
onClick={onClick}
|
||||
disabled={disabled}
|
||||
className={`${className} flex h-7 w-7 items-center justify-center rounded-full bg-th-bkg-4 text-th-fgd-1 focus:outline-none disabled:cursor-not-allowed disabled:bg-th-bkg-4
|
||||
className={`${className} flex h-7 w-7 items-center justify-center rounded-full ${
|
||||
hideBg ? '' : 'bg-th-bkg-4'
|
||||
} text-th-fgd-1 focus:outline-none disabled:cursor-not-allowed disabled:bg-th-bkg-4
|
||||
disabled:text-th-fgd-4 md:hover:text-th-primary md:disabled:hover:text-th-fgd-4`}
|
||||
{...props}
|
||||
>
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
import { useEffect, useState } from 'react'
|
||||
import { Dispatch, SetStateAction, useState } from 'react'
|
||||
import { TransactionInstruction, PublicKey } from '@solana/web3.js'
|
||||
import { toUiDecimals } from '@blockworks-foundation/mango-v4'
|
||||
import { Jupiter, RouteInfo } from '@jup-ag/core'
|
||||
|
||||
import mangoStore, { CLUSTER } from '../../store/state'
|
||||
import mangoStore from '../../store/state'
|
||||
import RoutesModal from './RoutesModal'
|
||||
import RouteFeeInfo from './RouteFeeInfo'
|
||||
import { TokenInfo } from '../../types/jupiter'
|
||||
import Button, { IconButton } from '../shared/Button'
|
||||
import Loading from '../shared/Loading'
|
||||
import { XIcon } from '@heroicons/react/solid'
|
||||
import { ArrowRightIcon, XIcon } from '@heroicons/react/solid'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
|
||||
type JupiterRoutesProps = {
|
||||
inputToken: string
|
||||
|
@ -20,6 +21,11 @@ type JupiterRoutesProps = {
|
|||
handleSwap: (x: TransactionInstruction[]) => void
|
||||
setAmountOut: (x?: number) => void
|
||||
onClose: () => void
|
||||
jupiter: Jupiter | undefined
|
||||
routes: RouteInfo[] | undefined
|
||||
outputTokenInfo: TokenInfo | undefined
|
||||
selectedRoute: RouteInfo | undefined
|
||||
setSelectedRoute: Dispatch<SetStateAction<RouteInfo | undefined>>
|
||||
}
|
||||
|
||||
const parseJupiterRoute = async (
|
||||
|
@ -44,25 +50,20 @@ const parseJupiterRoute = async (
|
|||
return instructions
|
||||
}
|
||||
|
||||
const getBestRoute = (routesInfos: RouteInfo[]) => {
|
||||
return routesInfos[0]
|
||||
}
|
||||
|
||||
const JupiterRoutes = ({
|
||||
inputToken,
|
||||
outputToken,
|
||||
amountIn,
|
||||
slippage,
|
||||
handleSwap,
|
||||
submitting,
|
||||
setAmountOut,
|
||||
onClose,
|
||||
jupiter,
|
||||
routes,
|
||||
outputTokenInfo,
|
||||
selectedRoute,
|
||||
setSelectedRoute,
|
||||
}: JupiterRoutesProps) => {
|
||||
const [jupiter, setJupiter] = useState<Jupiter>()
|
||||
const [routes, setRoutes] = useState<RouteInfo[]>()
|
||||
const [selectedRoute, setSelectedRoute] = useState<RouteInfo>()
|
||||
const { t } = useTranslation('trade')
|
||||
const [showRoutesModal, setShowRoutesModal] = useState(false)
|
||||
const [outputTokenInfo, setOutputTokenInfo] = useState<TokenInfo>()
|
||||
const mangoAccount = mangoStore((s) => s.mangoAccount)
|
||||
|
||||
const onSwap = async () => {
|
||||
|
@ -75,72 +76,15 @@ const JupiterRoutes = ({
|
|||
handleSwap(ixs)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
const connection = mangoStore.getState().connection
|
||||
const loadJupiter = async () => {
|
||||
const jupiter = await Jupiter.load({
|
||||
connection,
|
||||
cluster: CLUSTER,
|
||||
// platformFeeAndAccounts: NO_PLATFORM_FEE,
|
||||
routeCacheDuration: 5_000, // Will not refetch data on computeRoutes for up to 10 seconds
|
||||
})
|
||||
setJupiter(jupiter)
|
||||
}
|
||||
loadJupiter()
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
const group = mangoStore.getState().group
|
||||
if (!group) return
|
||||
const tokens = mangoStore.getState().jupiterTokens
|
||||
|
||||
const loadRoutes = async () => {
|
||||
const inputBank = group!.banksMap.get(inputToken)
|
||||
const outputBank = group!.banksMap.get(outputToken)
|
||||
if (!inputBank || !outputBank) return
|
||||
if (!amountIn) {
|
||||
setAmountOut()
|
||||
setSelectedRoute(undefined)
|
||||
} else {
|
||||
const computedRoutes = await jupiter?.computeRoutes({
|
||||
inputMint: inputBank.mint, // Mint address of the input token
|
||||
outputMint: outputBank.mint, // Mint address of the output token
|
||||
inputAmount: amountIn * 10 ** inputBank.mintDecimals, // raw input amount of tokens
|
||||
slippage, // The slippage in % terms
|
||||
filterTopNResult: 10,
|
||||
onlyDirectRoutes: true,
|
||||
})
|
||||
const tokenOut = tokens.find(
|
||||
(t: any) => t.address === outputBank.mint.toString()
|
||||
)
|
||||
setOutputTokenInfo(tokenOut)
|
||||
const routesInfosWithoutRaydium = computedRoutes?.routesInfos.filter(
|
||||
(r) => {
|
||||
if (r.marketInfos.length > 1) {
|
||||
for (const mkt of r.marketInfos) {
|
||||
if (mkt.amm.label === 'Raydium') return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
)
|
||||
if (routesInfosWithoutRaydium?.length) {
|
||||
setRoutes(routesInfosWithoutRaydium)
|
||||
const bestRoute = getBestRoute(computedRoutes!.routesInfos)
|
||||
setSelectedRoute(bestRoute)
|
||||
setAmountOut(toUiDecimals(bestRoute.outAmount, tokenOut?.decimals))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
loadRoutes()
|
||||
}, [inputToken, outputToken, jupiter, slippage, amountIn])
|
||||
|
||||
return routes?.length && selectedRoute && outputTokenInfo ? (
|
||||
<div>
|
||||
<>
|
||||
<IconButton className="absolute top-2 left-2" onClick={onClose}>
|
||||
<XIcon className="h-5 w-5" />
|
||||
<IconButton
|
||||
className="absolute top-2 right-2 text-th-fgd-3"
|
||||
onClick={onClose}
|
||||
hideBg
|
||||
>
|
||||
<ArrowRightIcon className="h-5 w-5" />
|
||||
</IconButton>
|
||||
<RouteFeeInfo
|
||||
selectedRoute={selectedRoute}
|
||||
|
@ -171,13 +115,11 @@ const JupiterRoutes = ({
|
|||
className="flex w-full justify-center py-3 text-lg"
|
||||
>
|
||||
{submitting ? <Loading className="mr-2 h-5 w-5" /> : null}
|
||||
Confirm Trade
|
||||
{t('trade:confirm-trade')}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<Loading />
|
||||
)
|
||||
) : null
|
||||
}
|
||||
|
||||
export default JupiterRoutes
|
||||
|
|
|
@ -1,16 +1,11 @@
|
|||
import {
|
||||
ArrowSmRightIcon,
|
||||
ChevronRightIcon,
|
||||
CogIcon,
|
||||
InformationCircleIcon,
|
||||
RefreshIcon,
|
||||
SwitchHorizontalIcon,
|
||||
} from '@heroicons/react/solid'
|
||||
import { SwitchHorizontalIcon } from '@heroicons/react/solid'
|
||||
import { RouteInfo, TransactionFeeInfo } from '@jup-ag/core'
|
||||
import { useTranslation } from 'next-i18next'
|
||||
import { useEffect, useState } from 'react'
|
||||
import mangoStore from '../../store/state'
|
||||
import { TokenInfo } from '../../types/jupiter'
|
||||
import { formatDecimal } from '../../utils/numbers'
|
||||
import Button from '../shared/Button'
|
||||
|
||||
type RouteFeeInfoProps = {
|
||||
selectedRoute: RouteInfo
|
||||
|
@ -29,6 +24,7 @@ const RouteFeeInfo = ({
|
|||
inputTokenSymbol,
|
||||
showRoutesModal,
|
||||
}: RouteFeeInfoProps) => {
|
||||
const { t } = useTranslation(['common', 'trade'])
|
||||
const tokens = mangoStore.getState().jupiterTokens
|
||||
const connected = mangoStore((s) => s.connected)
|
||||
|
||||
|
@ -49,18 +45,18 @@ const RouteFeeInfo = ({
|
|||
}, [selectedRoute, connected])
|
||||
|
||||
return (
|
||||
<div className="space-y-2 px-1 text-xs text-th-fgd-4">
|
||||
<div className="space-y-4 px-1">
|
||||
<div className="mb-4 flex items-center justify-between">
|
||||
<div className="text-sm font-bold text-th-fgd-1">Swap Details</div>
|
||||
<h3>{t('trade:review-trade')}</h3>
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<span>Swap Route</span>
|
||||
<div
|
||||
className="flex items-center rounded border border-th-bkg-4 p-1 pl-2 hover:cursor-pointer hover:border-th-fgd-4"
|
||||
role="button"
|
||||
<p className="text-th-fgd-3">{t('liquidity')}</p>
|
||||
<Button
|
||||
className="pt-1 pb-1 pl-3 pr-3"
|
||||
onClick={showRoutesModal}
|
||||
secondary
|
||||
>
|
||||
<span className="overflow-ellipsis whitespace-nowrap text-th-fgd-1">
|
||||
<p className="overflow-ellipsis whitespace-nowrap text-th-fgd-1">
|
||||
{selectedRoute?.marketInfos.map((info, index) => {
|
||||
let includeSeparator = false
|
||||
if (
|
||||
|
@ -70,21 +66,20 @@ const RouteFeeInfo = ({
|
|||
includeSeparator = true
|
||||
}
|
||||
return (
|
||||
<span key={index}>{`${info.amm.label} ${
|
||||
<p key={index}>{`${info.amm.label} ${
|
||||
includeSeparator ? 'x ' : ''
|
||||
}`}</span>
|
||||
}`}</p>
|
||||
)
|
||||
})}
|
||||
</span>
|
||||
<ChevronRightIcon className="ml-2 h-3 w-3" />
|
||||
</div>
|
||||
</p>
|
||||
</Button>
|
||||
</div>
|
||||
{amountOut && amountIn ? (
|
||||
<div className="flex justify-between">
|
||||
<span>Rate</span>
|
||||
<p className="text-th-fgd-3">{t('trade:rate')}</p>
|
||||
<div>
|
||||
<div className="flex items-center justify-end">
|
||||
<div className="text-right text-th-fgd-1">
|
||||
<p className="text-right font-bold text-th-fgd-1">
|
||||
{swapRate ? (
|
||||
<>
|
||||
1 {inputTokenSymbol} ≈{' '}
|
||||
|
@ -97,7 +92,7 @@ const RouteFeeInfo = ({
|
|||
{formatDecimal(amountIn / amountOut, 6)} {inputTokenSymbol}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</p>
|
||||
<SwitchHorizontalIcon
|
||||
className="default-transition ml-1 h-4 w-4 cursor-pointer text-th-fgd-3 hover:text-th-fgd-2"
|
||||
onClick={() => setSwapRate(!swapRate)}
|
||||
|
@ -140,33 +135,41 @@ const RouteFeeInfo = ({
|
|||
</div>
|
||||
) : null}
|
||||
<div className="flex justify-between">
|
||||
<span>Price Impact</span>
|
||||
<div className="text-right text-th-fgd-1">
|
||||
{selectedRoute?.priceImpactPct * 100 < 0.1
|
||||
? '< 0.1%'
|
||||
: `~ ${(selectedRoute?.priceImpactPct * 100).toFixed(4)}%`}
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<span>Minimum Received</span>
|
||||
<p className="text-th-fgd-3">{t('trade:minimum-received')}</p>
|
||||
{outputTokenInfo?.decimals ? (
|
||||
<div className="text-right text-th-fgd-1">
|
||||
<p className="text-right font-bold text-th-fgd-1">
|
||||
{formatDecimal(
|
||||
selectedRoute?.outAmountWithSlippage /
|
||||
10 ** outputTokenInfo.decimals || 1,
|
||||
6
|
||||
)}{' '}
|
||||
{outputTokenInfo?.symbol}
|
||||
</div>
|
||||
</p>
|
||||
) : null}
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<p className="text-th-fgd-3">{t('trade:health-impact')}</p>
|
||||
<p className="text-right font-bold text-th-fgd-1">0%</p>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<p className="text-th-fgd-3">{t('trade:est-liq-price')}</p>
|
||||
<p className="text-right font-bold text-th-fgd-1">N/A</p>
|
||||
</div>
|
||||
<div className="flex justify-between">
|
||||
<p className="text-th-fgd-3">{t('trade:slippage')}</p>
|
||||
<p className="text-right font-bold text-th-fgd-1">
|
||||
{selectedRoute?.priceImpactPct * 100 < 0.1
|
||||
? '< 0.1%'
|
||||
: `~ ${(selectedRoute?.priceImpactPct * 100).toFixed(4)}%`}
|
||||
</p>
|
||||
</div>
|
||||
{typeof feeValue === 'number' ? (
|
||||
<div className="flex justify-between">
|
||||
<span>Swap fee</span>
|
||||
<p className="text-th-fgd-3">{t('fee')}</p>
|
||||
<div className="flex items-center">
|
||||
<div className="text-right text-th-fgd-1">
|
||||
<p className="text-right font-bold text-th-fgd-1">
|
||||
≈ ${feeValue?.toFixed(2)}
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
|
@ -176,14 +179,18 @@ const RouteFeeInfo = ({
|
|||
)
|
||||
return (
|
||||
<div className="flex justify-between" key={index}>
|
||||
<span>Fees paid to {info?.amm?.label}</span>
|
||||
<p className="text-th-fgd-3">
|
||||
{t('trade:fees-paid-to', {
|
||||
route: info?.amm?.label,
|
||||
})}
|
||||
</p>
|
||||
{feeToken?.decimals && (
|
||||
<div className="text-right text-th-fgd-1">
|
||||
<p className="text-right font-bold text-th-fgd-1">
|
||||
{(
|
||||
info.lpFee?.amount / Math.pow(10, feeToken.decimals)
|
||||
).toFixed(6)}{' '}
|
||||
{feeToken?.symbol} ({info.lpFee?.pct * 100}%)
|
||||
</div>
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
|
|
|
@ -134,7 +134,11 @@ const SelectToken = ({
|
|||
return (
|
||||
<>
|
||||
<p className="mb-3">{type === 'input' ? t('sell') : t('buy')}</p>
|
||||
<IconButton className="absolute top-2 right-2" onClick={() => onClose()}>
|
||||
<IconButton
|
||||
className="absolute top-2 right-2"
|
||||
onClick={() => onClose()}
|
||||
hideBg
|
||||
>
|
||||
<XIcon className="h-5 w-5" />
|
||||
</IconButton>
|
||||
<div className="flex items-center text-th-fgd-4">
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import { useState, ChangeEvent, useCallback, Fragment, useEffect } from 'react'
|
||||
import { TransactionInstruction } from '@solana/web3.js'
|
||||
import { ArrowDownIcon, XIcon } from '@heroicons/react/solid'
|
||||
import mangoStore from '../../store/state'
|
||||
import mangoStore, { CLUSTER } from '../../store/state'
|
||||
import { Jupiter, RouteInfo } from '@jup-ag/core'
|
||||
import { TokenInfo } from '../../types/jupiter'
|
||||
import ContentBox from '../shared/ContentBox'
|
||||
import { notify } from '../../utils/notifications'
|
||||
import JupiterRoutes from './JupiterRoutes'
|
||||
|
@ -16,9 +18,19 @@ import { Transition } from '@headlessui/react'
|
|||
import Switch from '../forms/Switch'
|
||||
import Button, { IconButton, LinkButton } from '../shared/Button'
|
||||
import ButtonGroup from '../forms/ButtonGroup'
|
||||
import { toUiDecimals } from '@blockworks-foundation/mango-v4'
|
||||
import Loading from '../shared/Loading'
|
||||
|
||||
const getBestRoute = (routesInfos: RouteInfo[]) => {
|
||||
return routesInfos[0]
|
||||
}
|
||||
|
||||
const Swap = () => {
|
||||
const { t } = useTranslation('common')
|
||||
const [jupiter, setJupiter] = useState<Jupiter>()
|
||||
const [selectedRoute, setSelectedRoute] = useState<RouteInfo>()
|
||||
const [outputTokenInfo, setOutputTokenInfo] = useState<TokenInfo>()
|
||||
const [routes, setRoutes] = useState<RouteInfo[]>()
|
||||
const [amountIn, setAmountIn] = useState('')
|
||||
const [amountOut, setAmountOut] = useState<number>()
|
||||
const [inputToken, setInputToken] = useState('SOL')
|
||||
|
@ -35,6 +47,67 @@ const Swap = () => {
|
|||
const tokens = mangoStore((s) => s.jupiterTokens)
|
||||
const connected = mangoStore((s) => s.connected)
|
||||
|
||||
useEffect(() => {
|
||||
const connection = mangoStore.getState().connection
|
||||
const loadJupiter = async () => {
|
||||
const jupiter = await Jupiter.load({
|
||||
connection,
|
||||
cluster: CLUSTER,
|
||||
// platformFeeAndAccounts: NO_PLATFORM_FEE,
|
||||
routeCacheDuration: 5_000, // Will not refetch data on computeRoutes for up to 10 seconds
|
||||
})
|
||||
setJupiter(jupiter)
|
||||
}
|
||||
loadJupiter()
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
const group = mangoStore.getState().group
|
||||
if (!group) return
|
||||
const tokens = mangoStore.getState().jupiterTokens
|
||||
|
||||
const loadRoutes = async () => {
|
||||
const inputBank = group!.banksMap.get(inputToken)
|
||||
const outputBank = group!.banksMap.get(outputToken)
|
||||
if (!inputBank || !outputBank) return
|
||||
if (!amountIn) {
|
||||
setAmountOut(undefined)
|
||||
setSelectedRoute(undefined)
|
||||
} else {
|
||||
const computedRoutes = await jupiter?.computeRoutes({
|
||||
inputMint: inputBank.mint, // Mint address of the input token
|
||||
outputMint: outputBank.mint, // Mint address of the output token
|
||||
inputAmount: Number(amountIn) * 10 ** inputBank.mintDecimals, // raw input amount of tokens
|
||||
slippage, // The slippage in % terms
|
||||
filterTopNResult: 10,
|
||||
onlyDirectRoutes: true,
|
||||
})
|
||||
const tokenOut = tokens.find(
|
||||
(t: any) => t.address === outputBank.mint.toString()
|
||||
)
|
||||
setOutputTokenInfo(tokenOut)
|
||||
const routesInfosWithoutRaydium = computedRoutes?.routesInfos.filter(
|
||||
(r) => {
|
||||
if (r.marketInfos.length > 1) {
|
||||
for (const mkt of r.marketInfos) {
|
||||
if (mkt.amm.label === 'Raydium') return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
)
|
||||
if (routesInfosWithoutRaydium?.length) {
|
||||
setRoutes(routesInfosWithoutRaydium)
|
||||
const bestRoute = getBestRoute(computedRoutes!.routesInfos)
|
||||
setSelectedRoute(bestRoute)
|
||||
setAmountOut(toUiDecimals(bestRoute.outAmount, tokenOut?.decimals))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
loadRoutes()
|
||||
}, [inputToken, outputToken, jupiter, slippage, amountIn])
|
||||
|
||||
const handleAmountInChange = useCallback(
|
||||
(e: ChangeEvent<HTMLInputElement>) => {
|
||||
setAmountIn(e.target.value)
|
||||
|
@ -122,6 +195,11 @@ const Swap = () => {
|
|||
}
|
||||
}
|
||||
|
||||
const isLoadingTradeDetails =
|
||||
amountIn &&
|
||||
connected &&
|
||||
(!routes?.length || !selectedRoute || !outputTokenInfo)
|
||||
|
||||
return (
|
||||
<ContentBox showBackground className="relative overflow-hidden">
|
||||
<Transition
|
||||
|
@ -144,6 +222,11 @@ const Swap = () => {
|
|||
handleSwap={handleSwap}
|
||||
submitting={submitting}
|
||||
setAmountOut={setAmountOut}
|
||||
outputTokenInfo={outputTokenInfo}
|
||||
jupiter={jupiter}
|
||||
routes={routes}
|
||||
selectedRoute={selectedRoute}
|
||||
setSelectedRoute={setSelectedRoute}
|
||||
/>
|
||||
</Transition>
|
||||
<Transition
|
||||
|
@ -261,9 +344,19 @@ const Swap = () => {
|
|||
<Button
|
||||
onClick={() => setShowConfirm(true)}
|
||||
className="mt-6 flex w-full justify-center py-3 text-lg"
|
||||
disabled={!connected}
|
||||
disabled={
|
||||
!connected || !routes?.length || !selectedRoute || !outputTokenInfo
|
||||
}
|
||||
>
|
||||
{connected ? 'Review Trade' : 'Connect wallet'}
|
||||
{connected ? (
|
||||
isLoadingTradeDetails ? (
|
||||
<Loading />
|
||||
) : (
|
||||
t('trade:review-trade')
|
||||
)
|
||||
) : (
|
||||
t('connect')
|
||||
)}
|
||||
</Button>
|
||||
</ContentBox>
|
||||
)
|
||||
|
|
|
@ -5,7 +5,7 @@ import TradeSimplePage from '../components/TradeSimplePage'
|
|||
export async function getStaticProps({ locale }: { locale: string }) {
|
||||
return {
|
||||
props: {
|
||||
...(await serverSideTranslations(locale, ['common'])),
|
||||
...(await serverSideTranslations(locale, ['common', 'trade'])),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"all": "All",
|
||||
"account-pnl": "Account PnL",
|
||||
"account-value": "Account Value",
|
||||
"funding-cumulative": "Cumulative Funding",
|
||||
"interest-cumulative": "Cumulative Interest",
|
||||
"mngo-rewards": "MNGO Rewards",
|
||||
"perp-pnl": "Perp PnL",
|
||||
"perp-pnl-ex-rewards": "Perp PnL (ex. rewards)",
|
||||
"select-an-asset": "Select one or more assets to view their performance.",
|
||||
"vs-time": "vs. Time"
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"active-alerts": "Active Alerts",
|
||||
"alert-health": "Alert when health is below",
|
||||
"alert-health-required": "Alert health is required",
|
||||
"alert-info": "Email when health <= {{health}}%",
|
||||
"alerts-disclaimer": "Do not rely solely on alerts to protect your account. We can't guarantee they will be delivered.",
|
||||
"alerts-max": "You've reached the maximum number of active alerts.",
|
||||
"create-alert": "Create Alert",
|
||||
"email-address-required": "An email address is required",
|
||||
"new-alert": "New Alert",
|
||||
"no-alerts": "No Active Alerts",
|
||||
"no-alerts-desc": "Create an alert to be notified when your account health is low."
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
{
|
||||
"anchor-slider": "Anchor slider",
|
||||
"edit-all-prices": "Edit All Prices",
|
||||
"great": "Great",
|
||||
"in-testing-warning": "IN TESTING (Use at your own risk): Please report any bugs or comments in our #dev-ui discord channel.",
|
||||
"init-weighted-assets": "Init. Weighted Assets Value",
|
||||
"init-weighted-liabilities": "Init. Weighted Liabilities Value",
|
||||
"initial-health": "Initial Health",
|
||||
"joke-get-party-started": "Let's get this party started",
|
||||
"joke-hit-em-with": "Hit 'em with everything you've got...",
|
||||
"joke-insert-coin": "Insert coin to continue...",
|
||||
"joke-liquidated": "Liquidated!",
|
||||
"joke-liquidator-activity": "Liquidator activity is increasing",
|
||||
"joke-liquidators-closing": "Liquidators are closing in",
|
||||
"joke-liquidators-spotted-you": "Liquidators have spotted you",
|
||||
"joke-live-a-little": "Come on, live a little",
|
||||
"joke-looking-good": "Looking good",
|
||||
"joke-mangoes-are-ripe": "The mangoes are ripe for the picking...",
|
||||
"joke-rethink-positions": "It might be time to re-think your positions",
|
||||
"joke-sun-shining": "The sun is shining and the mangoes are ripe...",
|
||||
"joke-throw-some-money": "Throw some money at them to make them go away...",
|
||||
"joke-zero-borrows-risk": "0 Borrows = 0 Risk",
|
||||
"liq-price": "Liq. Price",
|
||||
"maint-weighted-assets": "Maint. Weighted Assets Value",
|
||||
"maint-weighted-liabilities": "Maint. Weighted Liabilities Value",
|
||||
"maintenance-health": "Maintenance Health",
|
||||
"new-positions-openable": "New Positions Can Be Opened",
|
||||
"no": "No",
|
||||
"ok": "OK",
|
||||
"percent-move-liquidation": "Percent Move To Liquidation",
|
||||
"perp-entry": "Perp Entry",
|
||||
"poor": "Poor",
|
||||
"rekt": "Rekt",
|
||||
"risk-calculator": "Risk Calculator",
|
||||
"scenario-balances": "Scenario Balances",
|
||||
"scenario-details": "Scenario Details",
|
||||
"scenario-maint-health": "Scenario Maintenance Health:",
|
||||
"simulate-orders-cancelled": "Simulate orders cancelled",
|
||||
"single-asset-liq": "Single asset liquidation price assuming all other asset prices remain constant",
|
||||
"spot-val-perp-val": "Spot Value + Perp Balance",
|
||||
"tooltip-anchor-slider": "Set current pricing to be the anchor point (0%) for slider",
|
||||
"tooltip-init-health": "Initial health must be above 0% to open new positions.",
|
||||
"tooltip-maint-health": "Maintenance health must be above 0% to avoid liquidation.",
|
||||
"very-poor": "Very Poor",
|
||||
"yes": "Yes"
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"are-you-sure": "Are you sure?",
|
||||
"before-you-continue": "Before you can continue",
|
||||
"claim-x-mngo-rewards": "Claim {{amount}} MNGO rewards",
|
||||
"close-account": "Close Account",
|
||||
"close-all-borrows": "Close all borrows",
|
||||
"close-open-orders": "Close all open orders",
|
||||
"close-perp-positions": "Close and settle all futures positons",
|
||||
"closing-account-will": "Closing your Mango Account will:",
|
||||
"delete-your-account": "Delete your Mango Account",
|
||||
"error-deleting-account": "Error deleting your Mango Account",
|
||||
"goodbye": "Until next time 👋",
|
||||
"recover-x-sol": "Recover {{amount}} SOL (rent for your account)",
|
||||
"settle-balances": "Settle all balances",
|
||||
"transaction-confirmed": "Transaction Confirmed",
|
||||
"withdraw-assets-worth": "Withdraw assets worth {{value}}"
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"set-delegate": "Set Delegate",
|
||||
"delegate-your-account": "Delegate Your Account",
|
||||
"delegated-account": "Delegated Account",
|
||||
"info": "Grant control to another Solana account to use Mango on your behalf.",
|
||||
"public-key": "Delegate Public Key",
|
||||
"delegate-updated": "Delegate Updated",
|
||||
"set-error": "Could not set Delegate"
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
{
|
||||
"browse-profiles": "Browse",
|
||||
"choose-profile": "Choose a Profile Pic",
|
||||
"connect-view-profile": "Connect your wallet to view your profile",
|
||||
"day-trader": "Day Trader",
|
||||
"degen": "Degen",
|
||||
"discretionary": "Discretionary",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-profile-pic": "Edit Profile Pic",
|
||||
"follow": "Follow",
|
||||
"following": "Following",
|
||||
"invalid-characters": "Only alphanumeric characters and single spaces allowed",
|
||||
"length-error": "Names must be less than 10 characters",
|
||||
"market-maker": "Market Maker",
|
||||
"no-followers": "No Followers",
|
||||
"no-followers-desc": "Trading in stealth mode 😎",
|
||||
"no-following": "No Accounts Followed",
|
||||
"no-following-desc": "The lone sheep is in danger of the wolf",
|
||||
"no-nfts": "😞 No NFTs found...",
|
||||
"no-profile-exists": "This profile doesn't exist...",
|
||||
"profile": "Profile",
|
||||
"profile-fetch-fail": "Failed to fetch profile details",
|
||||
"profile-name": "Profile Name",
|
||||
"profile-pic-failure": "Failed to set profile pic",
|
||||
"profile-pic-success": "Successfully set profile pic",
|
||||
"profile-pic-remove-failure": "Failed to remove profile pic",
|
||||
"profile-pic-remove-success": "Successfully removed profile pic",
|
||||
"profile-update-fail": "Failed to update profile",
|
||||
"profile-update-success": "Profile updated",
|
||||
"remove": "Remove",
|
||||
"save-profile": "Save Profile",
|
||||
"set-profile-pic": "Set Profile Pic",
|
||||
"swing-trader": "Swing Trader",
|
||||
"total-pnl": "Total Portfolio PnL",
|
||||
"total-value": "Total Portfolio Value",
|
||||
"trader": "Trader",
|
||||
"trader-category": "Trader Category",
|
||||
"unfollow": "Unfollow",
|
||||
"yolo": "YOLO",
|
||||
"your-profile": "Your Profile"
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"10k-mngo": "You need 10,000 MNGO in your Mango Account",
|
||||
"buy-mngo": "Buy MNGO",
|
||||
"copy-link": "Copy Link",
|
||||
"custom-links": "Custom Referral Links",
|
||||
"custom-links-limit": "You can generate up to 5 custom referral links.",
|
||||
"earn-16": "Earn 16% of the perp fees paid by anyone you refer. Plus, they get a 4% perp fee discount.",
|
||||
"earnings-history": "Earnings History",
|
||||
"enter-referral-id": "Enter a referral ID",
|
||||
"fee-earned": "Fee Earned",
|
||||
"generate-link": "Generate Link",
|
||||
"link": "Link",
|
||||
"link-created": "Custom referral link created",
|
||||
"link-not-created": "Unable to create referral link",
|
||||
"program-details": "Program Details",
|
||||
"program-details-1": "Your referral code is automatically applied when a user creates a Mango Account using your link.",
|
||||
"program-details-2": "When any of your referrals trade Mango Perps, you earn 16% of their trade fees.",
|
||||
"program-details-3": "Plus, for using your link they get a 4% discount off their Mango Perp fees.",
|
||||
"program-details-4": "You must have at least 10,000 MNGO in your Mango Account to qualify for generating referrals and earning referral rewards.",
|
||||
"referee": "Referee",
|
||||
"referral-id": "Referral ID",
|
||||
"sow-seed": "Sow the Mango Seed",
|
||||
"too-long-error": "Referral IDs must be less then 33 characters",
|
||||
"total-earnings": "Total Earnings",
|
||||
"total-referrals": "Total Referrals",
|
||||
"your-links": "Your Links",
|
||||
"your-referrals": "Your Referrals"
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"copy-and-share": "Copy Image and Share",
|
||||
"mark-price": "Mark Price",
|
||||
"max-leverage": "Max Leverage",
|
||||
"show-referral-qr": "Show Referral QR",
|
||||
"show-size": "Show Size",
|
||||
"tweet-position": "Tweet Position"
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
{
|
||||
"24h-vol": "24h Vol",
|
||||
"24h-volume": "24h Volume",
|
||||
"ata-deposit": "Deposit",
|
||||
"ata-deposit-details": "{{cost}} SOL for {{count}} ATA Account",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL for {{count}} ATA Accounts",
|
||||
"ath": "All-Time High",
|
||||
"atl": "All-Time Low",
|
||||
"bal": "Bal:",
|
||||
"best": "Best",
|
||||
"best-swap": "Best Swap",
|
||||
"change-percent": "Change %",
|
||||
"chart-not-available": "Chart not available",
|
||||
"cheaper": "cheaper than",
|
||||
"fees-paid-to": "Fees paid to {{feeRecipient}}",
|
||||
"from": "from",
|
||||
"get-started": "Before you get started...",
|
||||
"got-it": "Got It",
|
||||
"heres-how": "Here's how",
|
||||
"input-info-unavailable": "Input token information is not available.",
|
||||
"insights-not-available": "Market insights are not available",
|
||||
"jupiter-error": "Error in Jupiter – Try changing your input",
|
||||
"market-cap": "Market Cap",
|
||||
"market-cap-rank": "Market Cap Rank",
|
||||
"max-supply": "Max Supply",
|
||||
"minimum-received": "Minimum Received",
|
||||
"more-expensive": "more expensive than",
|
||||
"need-ata-account": "You need to have an Associated Token Account.",
|
||||
"no-tokens-found": "No tokens found...",
|
||||
"other-routes": "{{numberOfRoutes}} other routes",
|
||||
"output-info-unavailable": "Output token information is not available.",
|
||||
"pay": "Pay",
|
||||
"price-impact": "Price Impact",
|
||||
"price-info": "Price Info",
|
||||
"rate": "Rate",
|
||||
"receive": "Receive",
|
||||
"routes-found": "{{numberOfRoutes}} routes found",
|
||||
"serum-details": "{{cost}} SOL for {{count}} Serum OpenOrders Account",
|
||||
"serum-details_plural": "{{cost}} SOL for {{count}} Serum OpenOrders Accounts",
|
||||
"serum-requires-openorders": "Serum requires an OpenOrders account for each token. You can close the account and recover the SOL later.",
|
||||
"slippage": "Slippage",
|
||||
"slippage-settings": "Slippage Settings",
|
||||
"swap-between-hundreds": "Swap between 100s of tokens at the best rates.",
|
||||
"swap-desc": "Swap interacts with your connected wallet (not your Mango Account).",
|
||||
"swap-details": "Swap Details",
|
||||
"swap-fee": "Swap Fee",
|
||||
"swap-in-wallet": "Swaps interact directly with your connected wallet, not your Mango Account.",
|
||||
"swap-successful": "Swap Successful",
|
||||
"swapping": "Swapping...",
|
||||
"to": "to",
|
||||
"token-supply": "Token Supply",
|
||||
"top-ten": "Top 10 Holders",
|
||||
"transaction-fee": "Transaction Fee",
|
||||
"unavailable": "Unavailable",
|
||||
"worst": "Worst",
|
||||
"you-pay": "You pay",
|
||||
"you-receive": "You receive"
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"confirm-trade": "Confirm Trade",
|
||||
"est-liq-price": "Est. Liq Price",
|
||||
"fees-paid-to": "Fees Paid to {{route}}",
|
||||
"health-impact": "Health Impact",
|
||||
"minimum-received": "Minimum Received",
|
||||
"rate": "Rate",
|
||||
"review-trade": "Review Trade",
|
||||
"slippage": "Slippage"
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"all": "All",
|
||||
"account-pnl": "Account PnL",
|
||||
"account-value": "Account Value",
|
||||
"funding-cumulative": "Cumulative Funding",
|
||||
"interest-cumulative": "Cumulative Interest",
|
||||
"mngo-rewards": "MNGO Rewards",
|
||||
"perp-pnl": "Perp PnL",
|
||||
"perp-pnl-ex-rewards": "Perp PnL (ex. rewards)",
|
||||
"select-an-asset": "Select one or more assets to view their performance.",
|
||||
"vs-time": "vs. Time"
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"active-alerts": "Alertas activas",
|
||||
"alert-health": "Alerta cuando la salud de tu cuenta está baja",
|
||||
"alert-health-required": "Alert health is required",
|
||||
"alert-info": "Envía correo electrónico cuando la salud de tu cuenta es <= {{health}}%",
|
||||
"alerts-disclaimer": "Has alcanzado el número máximo de alertas activas.",
|
||||
"alerts-max": "You've reached the maximum number of active alerts.",
|
||||
"create-alert": "Crear alerta",
|
||||
"email-address-required": "An email address is required",
|
||||
"new-alert": "Alerta nueva",
|
||||
"no-alerts": "No hay alertas activas",
|
||||
"no-alerts-desc": "Cree una alerta para recibir una notificación cuando el estado de su cuenta sea bajo."
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
{
|
||||
"anchor-slider": "Anchor slider",
|
||||
"edit-all-prices": "Edit All Prices",
|
||||
"great": "Great",
|
||||
"in-testing-warning": "IN TESTING (Use at your own risk): Please report any bugs or comments in our #dev-ui discord channel.",
|
||||
"init-weighted-assets": "Init. Weighted Assets Value",
|
||||
"init-weighted-liabilities": "Init. Weighted Liabilities Value",
|
||||
"initial-health": "Initial Health",
|
||||
"joke-get-party-started": "Let's get this party started",
|
||||
"joke-hit-em-with": "Hit 'em with everything you've got...",
|
||||
"joke-insert-coin": "Insert coin to continue...",
|
||||
"joke-liquidated": "Liquidated!",
|
||||
"joke-liquidator-activity": "Liquidator activity is increasing",
|
||||
"joke-liquidators-closing": "Liquidators are closing in",
|
||||
"joke-liquidators-spotted-you": "Liquidators have spotted you",
|
||||
"joke-live-a-little": "Come on, live a little",
|
||||
"joke-looking-good": "Looking good",
|
||||
"joke-mangoes-are-ripe": "The mangoes are ripe for the picking...",
|
||||
"joke-rethink-positions": "It might be time to re-think your positions",
|
||||
"joke-sun-shining": "The sun is shining and the mangoes are ripe...",
|
||||
"joke-throw-some-money": "Throw some money at them to make them go away...",
|
||||
"joke-zero-borrows-risk": "0 Borrows = 0 Risk",
|
||||
"liq-price": "Liq. Price",
|
||||
"maint-weighted-assets": "Maint. Weighted Assets Value",
|
||||
"maint-weighted-liabilities": "Maint. Weighted Liabilities Value",
|
||||
"maintenance-health": "Maintenance Health",
|
||||
"new-positions-openable": "New Positions Can Be Opened",
|
||||
"no": "No",
|
||||
"ok": "OK",
|
||||
"percent-move-liquidation": "Percent Move To Liquidation",
|
||||
"perp-entry": "Perp Entry",
|
||||
"poor": "Poor",
|
||||
"rekt": "Rekt",
|
||||
"risk-calculator": "Risk Calculator",
|
||||
"scenario-balances": "Scenario Balances",
|
||||
"scenario-details": "Scenario Details",
|
||||
"scenario-maint-health": "Scenario Maintenance Health:",
|
||||
"simulate-orders-cancelled": "Simulate orders cancelled",
|
||||
"single-asset-liq": "Single asset liquidation price assuming all other asset prices remain constant",
|
||||
"spot-val-perp-val": "Spot Value + Perp Balance",
|
||||
"tooltip-anchor-slider": "Set current pricing to be the anchor point (0%) for slider",
|
||||
"tooltip-init-health": "Initial health must be above 0% to open new positions.",
|
||||
"tooltip-maint-health": "Maintenance health must be above 0% to avoid liquidation.",
|
||||
"very-poor": "Very Poor",
|
||||
"yes": "Yes"
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"are-you-sure": "Are you sure?",
|
||||
"before-you-continue": "Before you can continue",
|
||||
"claim-x-mngo-rewards": "Claim {{amount}} MNGO rewards",
|
||||
"close-account": "Close Account",
|
||||
"close-all-borrows": "Close all borrows",
|
||||
"close-open-orders": "Close all open orders",
|
||||
"close-perp-positions": "Close and settle all Perp positons",
|
||||
"closing-account-will": "Closing your Mango Account will:",
|
||||
"delete-your-account": "Delete your Mango account",
|
||||
"error-deleting-account": "Error deleting account",
|
||||
"goodbye": "Until next time 👋",
|
||||
"recover-x-sol": "Recover {{amount}} SOL (rent for your account)",
|
||||
"settle-balances": "Settle all balances",
|
||||
"transaction-confirmed": "Transaction Confirmed",
|
||||
"withdraw-assets-worth": "Withdraw assets worth {{value}}"
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"set-delegate": "Set Delegate",
|
||||
"delegate-your-account": "Delegate Your Account",
|
||||
"delegated-account": "Delegated Account",
|
||||
"info": "Grant control to another Solana account to use Mango on your behalf.",
|
||||
"public-key": "Delegate Public Key",
|
||||
"delegate-updated": "Delegate Updated",
|
||||
"set-error": "Could not set Delegate"
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
{
|
||||
"browse-profiles": "Browse",
|
||||
"choose-profile": "Choose a Profile Pic",
|
||||
"connect-view-profile": "Connect your wallet to view your profile",
|
||||
"day-trader": "Day Trader",
|
||||
"degen": "Degen",
|
||||
"discretionary": "Discretionary",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-profile-pic": "Edit Profile Pic",
|
||||
"follow": "Follow",
|
||||
"following": "Following",
|
||||
"invalid-characters": "Only alphanumeric characters and single spaces allowed",
|
||||
"length-error": "Names must be less than 10 characters",
|
||||
"market-maker": "Market Maker",
|
||||
"no-followers": "No Followers",
|
||||
"no-followers-desc": "Trading in stealth mode 😎",
|
||||
"no-following": "No Accounts Followed",
|
||||
"no-following-desc": "The lone sheep is in danger of the wolf",
|
||||
"no-nfts": "😞 No NFTs found...",
|
||||
"profile": "Profile",
|
||||
"no-profile-exists": "This profile doesn't exist...",
|
||||
"profile-fetch-fail": "Failed to fetch profile details",
|
||||
"profile-name": "Profile Name",
|
||||
"profile-pic-failure": "Failed to set profile pic",
|
||||
"profile-pic-success": "Successfully set profile pic",
|
||||
"profile-pic-remove-failure": "Failed to remove profile pic",
|
||||
"profile-pic-remove-success": "Successfully removed profile pic",
|
||||
"profile-update-fail": "Failed to update profile",
|
||||
"profile-update-success": "Profile updated",
|
||||
"remove": "Remove",
|
||||
"save-profile": "Save Profile",
|
||||
"set-profile-pic": "Set Profile Pic",
|
||||
"swing-trader": "Swing Trader",
|
||||
"total-pnl": "Total Portfolio PnL",
|
||||
"total-value": "Total Portfolio Value",
|
||||
"trader": "Trader",
|
||||
"trader-category": "Trader Category",
|
||||
"unfollow": "Unfollow",
|
||||
"yolo": "YOLO",
|
||||
"your-profile": "Your Profile"
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"10k-mngo": "You need 10,000 MNGO in your Mango Account",
|
||||
"buy-mngo": "Buy MNGO",
|
||||
"copy-link": "Copy Link",
|
||||
"custom-links": "Custom Referral Links",
|
||||
"custom-links-limit": "You can generate up to 5 custom referral links.",
|
||||
"earn-16": "Earn 16% of the perp fees paid by anyone you refer. Plus, they get a 4% perp fee discount.",
|
||||
"earnings-history": "Earnings History",
|
||||
"enter-referral-id": "Enter a referral ID",
|
||||
"fee-earned": "Fee Earned",
|
||||
"generate-link": "Generate Link",
|
||||
"link": "Link",
|
||||
"link-created": "Custom referral link created",
|
||||
"link-not-created": "Unable to create referral link",
|
||||
"program-details": "Program Details",
|
||||
"program-details-1": "Your referral code is automatically applied when a user creates a Mango Account using your link.",
|
||||
"program-details-2": "When any of your referrals trade Mango Perps, you earn 16% of their trade fees.",
|
||||
"program-details-3": "Plus, for using your link they get a 4% discount off their Mango Perp fees.",
|
||||
"program-details-4": "You must have at least 10,000 MNGO in your Mango Account to qualify for generating referrals and earning referral rewards.",
|
||||
"referee": "Referee",
|
||||
"referral-id": "Referral ID",
|
||||
"sow-seed": "Sow the Mango Seed",
|
||||
"too-long-error": "Referral IDs must be less then 33 characters",
|
||||
"total-earnings": "Total Earnings",
|
||||
"total-referrals": "Total Referrals",
|
||||
"your-links": "Your Links",
|
||||
"your-referrals": "Your Referrals"
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"copy-and-share": "Copy Image and Share",
|
||||
"mark-price": "Mark Price",
|
||||
"max-leverage": "Max Leverage",
|
||||
"show-referral-qr": "Show Referral QR",
|
||||
"show-size": "Show Size",
|
||||
"tweet-position": "Tweet Position"
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
{
|
||||
"24h-vol": "24h Vol",
|
||||
"24h-volume": "24h Volume",
|
||||
"ata-deposit": "Deposit",
|
||||
"ata-deposit-details": "{{cost}} SOL for {{count}} ATA Account",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL for {{count}} ATA Accounts",
|
||||
"ath": "All-Time High",
|
||||
"atl": "All-Time Low",
|
||||
"bal": "Bal:",
|
||||
"best": "Best",
|
||||
"best-swap": "Best Swap",
|
||||
"change-percent": "Change %",
|
||||
"chart-not-available": "Chart not available",
|
||||
"cheaper": "cheaper than",
|
||||
"fees-paid-to": "Fees paid to {{feeRecipient}}",
|
||||
"from": "from",
|
||||
"get-started": "Before you get started...",
|
||||
"got-it": "Got It",
|
||||
"heres-how": "Here's how",
|
||||
"input-info-unavailable": "Input token information is not available.",
|
||||
"insights-not-available": "Market insights are not available",
|
||||
"jupiter-error": "Error in Jupiter – try changing your input",
|
||||
"market-cap": "Market Cap",
|
||||
"market-cap-rank": "Market Cap Rank",
|
||||
"max-supply": "Max Supply",
|
||||
"minimum-received": "Minimum Received",
|
||||
"more-expensive": "more expensive than",
|
||||
"need-ata-account": "You need to have an Associated Token Account.",
|
||||
"no-tokens-found": "No tokens found...",
|
||||
"other-routes": "{{numberOfRoutes}} other routes",
|
||||
"output-info-unavailable": "Output token information is not available.",
|
||||
"pay": "Pay",
|
||||
"price-impact": "Price Impact",
|
||||
"price-info": "Price Info",
|
||||
"rate": "Rate",
|
||||
"receive": "Receive",
|
||||
"routes-found": "{{numberOfRoutes}} routes found",
|
||||
"serum-details": "{{cost}} SOL for {{count}} Serum OpenOrders Account",
|
||||
"serum-details_plural": "{{cost}} SOL for {{count}} Serum OpenOrders Accounts",
|
||||
"serum-requires-openorders": "Serum requires an OpenOrders account for each token. You can close the account and recover the SOL later.",
|
||||
"slippage": "Slippage",
|
||||
"slippage-settings": "Slippage Settings",
|
||||
"swap-between-hundreds": "Swap between 100s of tokens at the best rates.",
|
||||
"swap-desc": "Swap interacts with your connected wallet (not your Mango Account).",
|
||||
"swap-details": "Swap Details",
|
||||
"swap-fee": "Swap Fee",
|
||||
"swap-in-wallet": "Swaps interact directly with your connected wallet, not your Mango Account.",
|
||||
"swap-successful": "Swap Successful",
|
||||
"swapping": "Swapping...",
|
||||
"to": "to",
|
||||
"token-supply": "Token Supply",
|
||||
"top-ten": "Top 10 Holders",
|
||||
"transaction-fee": "Transaction Fee",
|
||||
"unavailable": "Unavailable",
|
||||
"worst": "Worst",
|
||||
"you-pay": "You pay",
|
||||
"you-receive": "You receive"
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"confirm-trade": "Confirm Trade",
|
||||
"est-liq-price": "Est. Liq Price",
|
||||
"fees-paid-to": "Fees Paid to {{route}}",
|
||||
"health-impact": "Health Impact",
|
||||
"minimum-received": "Minimum Received",
|
||||
"rate": "Rate",
|
||||
"review-trade": "Review Trade",
|
||||
"slippage": "Slippage"
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"all": "全部",
|
||||
"account-pnl": "帐户盈亏",
|
||||
"account-value": "帐户价值",
|
||||
"funding-cumulative": "累计资金费用",
|
||||
"interest-cumulative": "累计利息",
|
||||
"mngo-rewards": "MNGO奖励",
|
||||
"perp-pnl": "合约盈亏",
|
||||
"perp-pnl-ex-rewards": "合约盈亏(排除奖励1)",
|
||||
"select-an-asset": "选资产来看其表现。",
|
||||
"vs-time": "与时间"
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"active-alerts": "活动警报",
|
||||
"alert-health": "健康度低于什么程度发警告?",
|
||||
"alert-health-required": "您必须输入警报健康",
|
||||
"alert-info": "健康度在{{health}}%以下时发电子邮件",
|
||||
"alerts-disclaimer": "请别全靠警报来保护资产。我们无法保证会准时发出。",
|
||||
"alerts-max": "您已达到警报数量最多限制",
|
||||
"create-alert": "创建警报",
|
||||
"email-address-required": "您必须输入电子邮件地址",
|
||||
"new-alert": "创建警报",
|
||||
"no-alerts": "您没有活动警报",
|
||||
"no-alerts-desc": "以创建警报而收到健康度通知。"
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
{
|
||||
"anchor-slider": "定滑快",
|
||||
"edit-all-prices": "调整所有价格",
|
||||
"great": "很好",
|
||||
"in-testing-warning": "在试验中! (风险自负): 遇到问题请在discord #dev-ui频道上报到。",
|
||||
"init-weighted-assets": "初始加权资产价值",
|
||||
"init-weighted-liabilities": "初始加权借贷价值",
|
||||
"initial-health": "初始健康度",
|
||||
"joke-get-party-started": "派对刚才开始喽...",
|
||||
"joke-hit-em-with": "加油!硬着头皮!",
|
||||
"joke-insert-coin": "糟糕!别放弃。必须保持百折不挠的精神喔!",
|
||||
"joke-liquidated": "您遭受清算了!",
|
||||
"joke-liquidator-activity": "清算者在醒起来...",
|
||||
"joke-liquidators-closing": "左右为难...",
|
||||
"joke-liquidators-spotted-you": "有点焦虑不安...",
|
||||
"joke-live-a-little": "仍有利可图!",
|
||||
"joke-looking-good": "都井井有条",
|
||||
"joke-mangoes-are-ripe": "芒果熟了等您摘一摘...",
|
||||
"joke-rethink-positions": "帐户余额停滞不前...",
|
||||
"joke-sun-shining": "有机可乘...",
|
||||
"joke-throw-some-money": "未雨绸缪很重要...",
|
||||
"joke-zero-borrows-risk": "皇天不负苦心人",
|
||||
"liq-price": "清算价格",
|
||||
"maint-weighted-assets": "维持加权资产价值",
|
||||
"maint-weighted-liabilities": "维持加权借贷价值",
|
||||
"maintenance-health": "维持健康度",
|
||||
"new-positions-openable": "可扩大当前持仓",
|
||||
"no": "不行",
|
||||
"ok": "OK",
|
||||
"percent-move-liquidation": "多大涨落导致清算",
|
||||
"perp-entry": "永续合约入点",
|
||||
"poor": "不好",
|
||||
"rekt": "糟糕了",
|
||||
"risk-calculator": "风险计算器",
|
||||
"scenario-balances": "模拟余额",
|
||||
"scenario-details": "模拟细节",
|
||||
"scenario-maint-health": "模拟维持健康度:",
|
||||
"simulate-orders-cancelled": "架设取消挂单",
|
||||
"single-asset-liq": "单个资产虚拟清算价格会假设所有其他资产价格不变",
|
||||
"spot-val-perp-val": "现货价直+合约余额",
|
||||
"tooltip-anchor-slider": "将目前资产价格定为滑快起点(0%)",
|
||||
"tooltip-init-health": "为了扩大当前持仓,初始健康度必须高于0%。",
|
||||
"tooltip-maint-health": "为了避免清算,维持健康度必须高于0%。",
|
||||
"very-poor": "很不好",
|
||||
"yes": "行"
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"are-you-sure": "您确定吗?",
|
||||
"before-you-continue": "进行之前",
|
||||
"claim-x-mngo-rewards": "收获{{amount}}MNGO奖励",
|
||||
"close-account": "关闭帐户",
|
||||
"close-all-borrows": "归还所有借贷",
|
||||
"close-open-orders": "取消所有挂单",
|
||||
"close-perp-positions": "结清所有永续合约持仓",
|
||||
"closing-account-will": "关闭Mango帐户您就会:",
|
||||
"delete-your-account": "删除您的Mango帐户",
|
||||
"error-deleting-account": "删除帐户出错",
|
||||
"goodbye": "再见 👋",
|
||||
"recover-x-sol": "收回{{amount}}SOL(帐户租金)",
|
||||
"settle-balances": "Settle all balances",
|
||||
"transaction-confirmed": "交易成功",
|
||||
"withdraw-assets-worth": "将总价值{{value}}提出到您的钱包"
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"set-delegate": "设置受托钱包",
|
||||
"delegate-your-account": "将您的帐户委托出去",
|
||||
"delegated-account": "委托帐户",
|
||||
"info": "将此帐户委托其他Solana帐户控制。",
|
||||
"public-key": "受托钱包地址",
|
||||
"delegate-updated": "已更换受托钱包",
|
||||
"set-error": "设置委托钱包出错"
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
{
|
||||
"browse-profiles": "Browse",
|
||||
"choose-profile": "选择头像",
|
||||
"connect-view-profile": "Connect your wallet to view your profile",
|
||||
"day-trader": "Day Trader",
|
||||
"degen": "Degen",
|
||||
"discretionary": "Discretionary",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-profile-pic": "切换头像",
|
||||
"follow": "Follow",
|
||||
"following": "Following",
|
||||
"invalid-characters": "Only alphanumeric characters and single spaces allowed",
|
||||
"length-error": "Names must be less than 10 characters",
|
||||
"market-maker": "Market Maker",
|
||||
"no-followers": "No Followers",
|
||||
"no-followers-desc": "Trading in stealth mode 😎",
|
||||
"no-following": "No Accounts Followed",
|
||||
"no-following-desc": "The lone sheep is in danger of the wolf",
|
||||
"no-nfts": "😞 未找到NFT...",
|
||||
"no-profile-exists": "This profile doesn't exist...",
|
||||
"profile": "Profile",
|
||||
"profile-fetch-fail": "Failed to fetch profile details",
|
||||
"profile-name": "Profile Name",
|
||||
"profile-pic-failure": "设置头像失败",
|
||||
"profile-pic-success": "设置头像成功",
|
||||
"profile-pic-remove-failure": "删除头像失败",
|
||||
"profile-pic-remove-success": "删除头像成功",
|
||||
"profile-update-fail": "Failed to update profile",
|
||||
"profile-update-success": "Profile updated",
|
||||
"remove": "删除",
|
||||
"save-profile": "Save Profile",
|
||||
"set-profile-pic": "设置头像",
|
||||
"swing-trader": "Swing Trader",
|
||||
"total-pnl": "Total Portfolio PnL",
|
||||
"total-value": "Total Portfolio Value",
|
||||
"trader": "Trader",
|
||||
"trader-category": "Trader Category",
|
||||
"unfollow": "Unfollow",
|
||||
"yolo": "YOLO",
|
||||
"your-profile": "Your Profile"
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"10k-mngo": "您的Mango帐户必须含有一万MNGO",
|
||||
"buy-mngo": "买MNGO",
|
||||
"copy-link": "复制连结",
|
||||
"custom-links": "自定连结",
|
||||
"custom-links-limit": "您可创建的推荐码数量限制于5。",
|
||||
"earn-16": "收获荐友PERP市场费用的16%,再加上荐友也获得4%折扣。",
|
||||
"earnings-history": "盈利历史",
|
||||
"enter-referral-id": "输入推荐码",
|
||||
"fee-earned": "收获费用",
|
||||
"generate-link": "创建自定连结",
|
||||
"link": "连结",
|
||||
"link-created": "已创建自定连结",
|
||||
"link-not-created": "无法创建自定连结",
|
||||
"program-details": "活动细节",
|
||||
"program-details-1": "朋友以您的连结创建Mango帐户时您的推荐码会自动实施。",
|
||||
"program-details-2": "荐友买卖PERPs的时候您会收获他们缴的费用的16%。",
|
||||
"program-details-3": "再加上荐友会获得PERP费用的4%折扣。",
|
||||
"program-details-4": "您的Mango帐户至少必须含有一万MNGO才能收获推荐码带来的盈利。",
|
||||
"referee": "荐友",
|
||||
"referral-id": "推荐码",
|
||||
"sow-seed": "播种芒果",
|
||||
"too-long-error": "推荐码长度必须少于33个字母",
|
||||
"total-earnings": "总收入",
|
||||
"total-referrals": "总推荐",
|
||||
"your-links": "您的连结",
|
||||
"your-referrals": "您的推荐"
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"copy-and-share": "拷贝图片来分享",
|
||||
"mark-price": "现价",
|
||||
"max-leverage": "最多杠杆",
|
||||
"show-referral-qr": "显示推荐QR",
|
||||
"show-size": "显示数量",
|
||||
"tweet-position": "推文当前持仓"
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
{
|
||||
"24h-vol": "24h成交量",
|
||||
"24h-volume": "24h成交量",
|
||||
"ata-deposit": "押金",
|
||||
"ata-deposit-details": "{{cost}} SOL为 {{count}} ATA帐户",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL为 {{count}} ATA帐户",
|
||||
"ath": "历史高价",
|
||||
"atl": "历史低价",
|
||||
"bal": "余额:",
|
||||
"best": "最佳",
|
||||
"best-swap": "最佳换币",
|
||||
"change-percent": "变动%",
|
||||
"chart-not-available": "无法显示图表",
|
||||
"cheaper": "低于",
|
||||
"fees-paid-to": "费用缴给{{feeRecipient}}",
|
||||
"from": "从",
|
||||
"get-started": "开始前...",
|
||||
"got-it": "明白",
|
||||
"heres-how": "了解更多",
|
||||
"input-info-unavailable": "获取付出币种资料时出错",
|
||||
"insights-not-available": "获取时市场分析出错",
|
||||
"jupiter-error": "Jupiter出错,请更改输入",
|
||||
"market-cap": "总市值",
|
||||
"market-cap-rank": "总市值排名",
|
||||
"max-supply": "最大供应量",
|
||||
"minimum-received": "最好获得",
|
||||
"more-expensive": "高于",
|
||||
"need-ata-account": "您必有一个关联币种帐户(ATA)。",
|
||||
"no-tokens-found": "找不到币种...",
|
||||
"other-routes": "{{numberOfRoutes}}条其他路线",
|
||||
"output-info-unavailable": "获取收到币种资料时出错",
|
||||
"pay": "付出",
|
||||
"price-impact": "价格影响",
|
||||
"price-info": "价格细节",
|
||||
"rate": "率",
|
||||
"receive": "收到",
|
||||
"routes-found": "找到{{numberOfRoutes}}条路线",
|
||||
"serum-details": "{{cost}} SOL为 {{count}} Serum OpenOrders帐户",
|
||||
"serum-details_plural": "{{cost}} SOL为 {{count}} Serum OpenOrders帐户",
|
||||
"serum-requires-openorders": "Serum要求每个币种有一个OpenOrders帐户。以后可以关闭帐户二恢复SOL押金。",
|
||||
"slippage": "滑点",
|
||||
"slippage-settings": "滑点设定",
|
||||
"swap-between-hundreds": "以最好价格来换几百个币种。",
|
||||
"swap-desc": "Swap interacts with your connected wallet (not your Mango Account).",
|
||||
"swap-details": "换币细节",
|
||||
"swap-fee": "换币费用",
|
||||
"swap-in-wallet": "换币会在您被连结的钱包中进行而不在您的Mango帐户中。",
|
||||
"swap-successful": "交易成功",
|
||||
"swapping": "正在交易...",
|
||||
"to": "到",
|
||||
"token-supply": "流通供应量",
|
||||
"top-ten": "前十名持有者",
|
||||
"transaction-fee": "交易费用",
|
||||
"unavailable": "无资料",
|
||||
"worst": "最差",
|
||||
"you-pay": "您付出",
|
||||
"you-receive": "您收到"
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"confirm-trade": "Confirm Trade",
|
||||
"est-liq-price": "Est. Liq Price",
|
||||
"fees-paid-to": "Fees Paid to {{route}}",
|
||||
"health-impact": "Health Impact",
|
||||
"minimum-received": "Minimum Received",
|
||||
"rate": "Rate",
|
||||
"review-trade": "Review Trade",
|
||||
"slippage": "Slippage"
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{
|
||||
"all": "全部",
|
||||
"account-pnl": "帳戶盈虧",
|
||||
"account-value": "帳戶價值",
|
||||
"funding-cumulative": "累計資金費用",
|
||||
"interest-cumulative": "累計利息",
|
||||
"mngo-rewards": "MNGO獎勵",
|
||||
"perp-pnl": "合約盈虧",
|
||||
"perp-pnl-ex-rewards": "合約盈虧(排除獎勵1)",
|
||||
"select-an-asset": "選資產來看其表現。",
|
||||
"vs-time": "與時間"
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"active-alerts": "活動警報",
|
||||
"alert-health": "健康度低於甚麼程度發警告?",
|
||||
"alert-health-required": "您必須輸入警報健康",
|
||||
"alert-info": "健康度在{{health}}%以下時發電子郵件",
|
||||
"alerts-disclaimer": "請別全靠警報來保護資產。我們無法保證會準時發出。",
|
||||
"alerts-max": "您已達到警報數量最多限制",
|
||||
"create-alert": "創建警報",
|
||||
"email-address-required": "您必須輸入電子郵件地址",
|
||||
"new-alert": "創建警報",
|
||||
"no-alerts": "您沒有活動警報",
|
||||
"no-alerts-desc": "以創建警報而收到健康度通知。"
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
{
|
||||
"anchor-slider": "定滑快",
|
||||
"edit-all-prices": "調整所有價格",
|
||||
"great": "很好",
|
||||
"in-testing-warning": "在試驗中! (風險自負): 遇到問題請在discord #dev-ui頻道上報到。",
|
||||
"init-weighted-assets": "初始加權資產價值",
|
||||
"init-weighted-liabilities": "初始加權借貸價值",
|
||||
"initial-health": "初始健康度",
|
||||
"joke-get-party-started": "派對剛才開始嘍...",
|
||||
"joke-hit-em-with": "加油!硬著頭皮!",
|
||||
"joke-insert-coin": "糟糕!別放棄。必須保持百折不撓的精神喔!",
|
||||
"joke-liquidated": "您遭受清算了!",
|
||||
"joke-liquidator-activity": "清算者在醒起來...",
|
||||
"joke-liquidators-closing": "左右為難...",
|
||||
"joke-liquidators-spotted-you": "有點焦慮不安...",
|
||||
"joke-live-a-little": "仍有利可圖!",
|
||||
"joke-looking-good": "都井井有條",
|
||||
"joke-mangoes-are-ripe": "芒果熟了等您摘一摘...",
|
||||
"joke-rethink-positions": "烏雲密布...",
|
||||
"joke-sun-shining": "您冒個險吧。市場上有機可乘...",
|
||||
"joke-throw-some-money": "未雨綢繆很重要...",
|
||||
"joke-zero-borrows-risk": "皇天不負苦心人",
|
||||
"liq-price": "清算價格",
|
||||
"maint-weighted-assets": "維持加權資產價值",
|
||||
"maint-weighted-liabilities": "維持加權借貸價值",
|
||||
"maintenance-health": "維持健康度",
|
||||
"new-positions-openable": "可擴大當前持倉",
|
||||
"no": "不行",
|
||||
"ok": "OK",
|
||||
"percent-move-liquidation": "多大漲落導致清算",
|
||||
"perp-entry": "永續合約入點",
|
||||
"poor": "不好",
|
||||
"rekt": "糟糕了",
|
||||
"risk-calculator": "風險計算器",
|
||||
"scenario-balances": "模擬餘額",
|
||||
"scenario-details": "模擬細節",
|
||||
"scenario-maint-health": "模擬維持健康度:",
|
||||
"simulate-orders-cancelled": "架設取消掛單",
|
||||
"single-asset-liq": "單個資產虛擬清算價格會假設所有其他資產價格不變",
|
||||
"spot-val-perp-val": "現貨價直+合約餘額",
|
||||
"tooltip-anchor-slider": "將目前資產價格定為滑快起點(0%)",
|
||||
"tooltip-init-health": "為了擴大當前持倉,初始健康度必須高於0%。",
|
||||
"tooltip-maint-health": "為了避免清算,維持健康度必須高於0%。",
|
||||
"very-poor": "很不好",
|
||||
"yes": "行"
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"are-you-sure": "您確定嗎?",
|
||||
"before-you-continue": "進行之前",
|
||||
"claim-x-mngo-rewards": "收穫{{amount}}MNGO獎勵",
|
||||
"close-account": "關閉帳戶",
|
||||
"close-all-borrows": "歸還所有借貸",
|
||||
"close-open-orders": "取消所有掛單",
|
||||
"close-perp-positions": "結清所有永續合約持倉",
|
||||
"closing-account-will": "關閉Mango帳戶您就會:",
|
||||
"delete-your-account": "刪除您的Mango帳戶",
|
||||
"error-deleting-account": "刪除帳戶出錯",
|
||||
"goodbye": "再見 👋",
|
||||
"recover-x-sol": "收回{{amount}}SOL(帳戶租金)",
|
||||
"settle-balances": "Settle all balances",
|
||||
"transaction-confirmed": "交易成功",
|
||||
"withdraw-assets-worth": "將總價值{{value}}提出到您的錢包"
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
"set-delegate": "設置受託錢包",
|
||||
"delegate-your-account": "將您的帳戶委託出去",
|
||||
"delegated-account": "委託帳戶",
|
||||
"info": "將此帳戶委託其他Solana帳戶控制。",
|
||||
"public-key": "受託錢包地址",
|
||||
"delegate-updated": "已更換受託錢包",
|
||||
"set-error": "設置委託錢包出錯"
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
{
|
||||
"browse-profiles": "Browse",
|
||||
"choose-profile": "選擇頭像",
|
||||
"connect-view-profile": "Connect your wallet to view your profile",
|
||||
"day-trader": "Day Trader",
|
||||
"degen": "Degen",
|
||||
"discretionary": "Discretionary",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-profile-pic": "切換頭像",
|
||||
"follow": "Follow",
|
||||
"following": "Following",
|
||||
"invalid-characters": "Only alphanumeric characters and single spaces allowed",
|
||||
"length-error": "Names must be less than 10 characters",
|
||||
"market-maker": "Market Maker",
|
||||
"no-followers": "No Followers",
|
||||
"no-followers-desc": "Trading in stealth mode 😎",
|
||||
"no-following": "No Accounts Followed",
|
||||
"no-following-desc": "The lone sheep is in danger of the wolf",
|
||||
"no-nfts": "😞 未找到NFT...",
|
||||
"no-profile-exists": "This profile doesn't exist...",
|
||||
"profile": "Profile",
|
||||
"profile-fetch-fail": "Failed to fetch profile details",
|
||||
"profile-name": "Profile Name",
|
||||
"profile-pic-failure": "設置頭像失敗",
|
||||
"profile-pic-success": "設置頭像成功",
|
||||
"profile-pic-remove-failure": "刪除頭像失敗",
|
||||
"profile-pic-remove-success": "刪除頭像成功",
|
||||
"profile-update-fail": "Failed to update profile",
|
||||
"profile-update-success": "Profile updated",
|
||||
"remove": "刪除",
|
||||
"save-profile": "Save Profile",
|
||||
"set-profile-pic": "設置頭像",
|
||||
"swing-trader": "Swing Trader",
|
||||
"total-pnl": "Total Portfolio PnL",
|
||||
"total-value": "Total Portfolio Value",
|
||||
"trader": "Trader",
|
||||
"trader-category": "Trader Category",
|
||||
"unfollow": "Unfollow",
|
||||
"yolo": "YOLO",
|
||||
"your-profile": "Your Profile"
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"10k-mngo": "您的Mango帳戶必須含有一萬MNGO",
|
||||
"buy-mngo": "買MNGO",
|
||||
"copy-link": "複製連結",
|
||||
"custom-links": "自定連結",
|
||||
"custom-links-limit": "您可創建的推薦碼數量限制於5。",
|
||||
"earn-16": "收穫薦友PERP市場費用的16%,再加上薦友也獲得4%折扣。",
|
||||
"earnings-history": "盈利歷史",
|
||||
"enter-referral-id": "輸入推薦碼",
|
||||
"fee-earned": "收穫費用",
|
||||
"generate-link": "創建自定連結",
|
||||
"link": "連結",
|
||||
"link-created": "已創建自定連結",
|
||||
"link-not-created": "無法創建自定連結",
|
||||
"program-details": "活動細節",
|
||||
"program-details-1": "朋友以您的連結創建Mango帳戶時您的推薦碼會自動實施。",
|
||||
"program-details-2": "薦友買賣PERPs的時候您會收穫他們繳的費用的16%。",
|
||||
"program-details-3": "再加上薦友會獲得PERP費用的4%折扣。",
|
||||
"program-details-4": "您的Mango帳戶至少必須含有一萬MNGO才能收穫推薦碼帶來的盈利。",
|
||||
"referee": "薦友",
|
||||
"referral-id": "推薦碼",
|
||||
"sow-seed": "播種芒果",
|
||||
"too-long-error": "推薦碼長度必須少於33個字母",
|
||||
"total-earnings": "總收入",
|
||||
"total-referrals": "總推薦",
|
||||
"your-links": "您的連結",
|
||||
"your-referrals": "您的推薦"
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"copy-and-share": "拷貝圖片來分享",
|
||||
"mark-price": "現價",
|
||||
"max-leverage": "最多槓桿",
|
||||
"show-referral-qr": "顯示推薦QR",
|
||||
"show-size": "顯示數量",
|
||||
"tweet-position": "推文當前持倉"
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
{
|
||||
"24h-vol": "24h成交量",
|
||||
"24h-volume": "24h成交量",
|
||||
"ata-deposit": "押金",
|
||||
"ata-deposit-details": "{{cost}} SOL為 {{count}} ATA帳戶",
|
||||
"ata-deposit-details_plural": "{{cost}} SOL為 {{count}} ATA帳戶",
|
||||
"ath": "歷史高價",
|
||||
"atl": "歷史低價",
|
||||
"bal": "餘額:",
|
||||
"best": "最佳",
|
||||
"best-swap": "最佳換幣",
|
||||
"change-percent": "變動%",
|
||||
"chart-not-available": "無法顯示圖表",
|
||||
"cheaper": "低於",
|
||||
"fees-paid-to": "費用繳給{{feeRecipient}}",
|
||||
"from": "從",
|
||||
"get-started": "開始前...",
|
||||
"got-it": "明白",
|
||||
"heres-how": "了解更多",
|
||||
"input-info-unavailable": "獲取付出幣種資料時出錯",
|
||||
"insights-not-available": "獲取時市場分析出錯",
|
||||
"jupiter-error": "Jupiter出錯,請更改輸入",
|
||||
"market-cap": "總市值",
|
||||
"market-cap-rank": "總市值排名",
|
||||
"max-supply": "最大供應量",
|
||||
"minimum-received": "最好獲得",
|
||||
"more-expensive": "高於",
|
||||
"need-ata-account": "您必有一個關聯幣種帳戶(ATA)。",
|
||||
"no-tokens-found": "找不到幣種...",
|
||||
"other-routes": "{{numberOfRoutes}}條其他路線",
|
||||
"output-info-unavailable": "獲取收到幣種資料時出錯",
|
||||
"pay": "付出",
|
||||
"price-impact": "價格影響",
|
||||
"price-info": "價格細節",
|
||||
"rate": "率",
|
||||
"receive": "收到",
|
||||
"routes-found": "找到{{numberOfRoutes}}條路線",
|
||||
"serum-details": "{{cost}} SOL為 {{count}} Serum OpenOrders帳戶",
|
||||
"serum-details_plural": "{{cost}} SOL為 {{count}} Serum OpenOrders帳戶",
|
||||
"serum-requires-openorders": "Serum要求每個幣種有一個OpenOrders帳戶。以後可以關閉帳戶二恢復SOL押金。",
|
||||
"slippage": "滑點",
|
||||
"slippage-settings": "滑點設定",
|
||||
"swap-between-hundreds": "以最好價格來換幾百個幣種。",
|
||||
"swap-desc": "Swap interacts with your connected wallet (not your Mango Account).",
|
||||
"swap-details": "換幣細節",
|
||||
"swap-fee": "換幣費用",
|
||||
"swap-in-wallet": "換幣會在您被連結的錢包中進行而不在您的Mango帳戶中。",
|
||||
"swap-successful": "換幣成功",
|
||||
"swapping": "正在換幣...",
|
||||
"to": "到",
|
||||
"token-supply": "流通供應量",
|
||||
"top-ten": "前十名持有者",
|
||||
"transaction-fee": "交易費用",
|
||||
"unavailable": "無資料",
|
||||
"worst": "最差",
|
||||
"you-pay": "您付出",
|
||||
"you-receive": "您收到"
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"confirm-trade": "Confirm Trade",
|
||||
"est-liq-price": "Est. Liq Price",
|
||||
"fees-paid-to": "Fees Paid to {{route}}",
|
||||
"health-impact": "Health Impact",
|
||||
"minimum-received": "Minimum Received",
|
||||
"rate": "Rate",
|
||||
"review-trade": "Review Trade",
|
||||
"slippage": "Slippage"
|
||||
}
|
Loading…
Reference in New Issue