Compare commits

..

58 Commits

Author SHA1 Message Date
Zach Pomerantz
c0bdb8db12 fix: break unnecessary hierarchical deps (#3629) 2022-03-30 21:23:33 -07:00
Zach Pomerantz
2d8f767d74 feat: upgrade web3-react (#3628)
* chore: upgrade web3-react

* feat: use a JsonRpcConnector

* chore: rm @ethersproject/experimental

* fix: assert Web3Provider in app

* fix: type providers more loosely

* chore: reinstall experimental for testing
2022-03-30 20:45:43 -07:00
Zach Pomerantz
1303416eca feat: lazy load the lib's smart-order-router (#3624)
* feat: lazy-load the smart-order-router

* chore: guard against regression
2022-03-30 14:09:18 -07:00
Zach Pomerantz
124f6420a5 fix: lazy load en-us (#3626) 2022-03-30 13:32:49 -07:00
Zach Pomerantz
91f5fc0881 chore: upgrade redux-multicall and smart-order-router (#3623)
* chore: upgrade redux-multicall and smart-order-router

* chore: provide @ethersproject through ethers
2022-03-29 12:00:56 -07:00
Zach Pomerantz
ec831f8433 chore: destructure json imports (#3622) 2022-03-29 12:00:42 -07:00
Crowdin Bot
56bd9b68d7 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-29 06:07:44 +00:00
Crowdin Bot
865d21f039 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-28 23:07:52 +00:00
Jordan Frankfurt
dceadf8472 chore(docs): add widgets info to the repo README (#3600)
* add widgets info to the repo README

* pr feedback from z

* pr feedback from w and z

* separate README.md and INTERFACE_README.md

* Update WIDGETS_README.md

Co-authored-by: Will Hennessy <hennessywill@gmail.com>

Co-authored-by: Will Hennessy <hennessywill@gmail.com>
2022-03-28 11:35:14 -05:00
Crowdin Bot
cd3a91bca8 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-25 07:06:55 +00:00
Connor McEwen
de1f5d1adc feat: migrate to GA4 (#3599) 2022-03-24 21:44:48 -04:00
Crowdin Bot
b5d403768f chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-24 20:07:03 +00:00
Zach Pomerantz
c4c811aeb3 chore: bump to v0.0.26-beta (#3593) 2022-03-24 16:02:38 -04:00
Zach Pomerantz
33c24a3f05 fix: trade displays (#3594)
* fix: show syncing over insufficient balance

* fix: mv anti-janking up a level

* feat: add error caption for completeness

* chore: clarify naming
2022-03-24 16:02:20 -04:00
Zach Pomerantz
9ef2b3a116 chore: add ethers (#3591) 2022-03-24 12:51:03 -04:00
Zach Pomerantz
afe38a2d10 fix: tick before returning quote (#3598) 2022-03-24 12:33:35 -04:00
dependabot[bot]
d28607a1c8 chore(deps-dev): bump @uniswap/default-token-list from 3.0.0 to 3.1.0 (#3564) 2022-03-24 12:09:44 -04:00
dependabot[bot]
7fb363ac46 chore(deps): bump @uniswap/token-lists (#3596) 2022-03-24 12:09:22 -04:00
Zach Pomerantz
16b0b1530d fix: memoize client side v3 router call data (#3595)
* fix: memoize client side v3 router call data

* fix: rm log
2022-03-24 10:30:28 -04:00
Zach Pomerantz
abb2696f40 fix: upgrade @web3-react/eip1193 to fallback to eth_accounts (#3590) 2022-03-23 20:45:49 -04:00
Zach Pomerantz
772178fc86 fix: add web3 debug log (#3587) 2022-03-23 20:45:22 -04:00
Crowdin Bot
9f1378f635 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-23 19:09:22 +00:00
Zach Pomerantz
84275dcce1 fix: action button jank (#3582) 2022-03-23 14:32:45 -04:00
Zach Pomerantz
a76ece6ce3 feat: prompt for interaction "in your wallet" (#3585)
* feat: prompt approval in wallet

* feat: prompt wrap in wallet

* feat: prompt confirm in wallet

* fix: animations

* fix: test typing
2022-03-23 14:12:58 -04:00
Zach Pomerantz
334e137fb3 fix: empty toolbar for empty input (#3584) 2022-03-23 14:07:56 -04:00
Zach Pomerantz
eb6c4d464a fix: do not allow zeroes (#3583) 2022-03-23 14:07:41 -04:00
Zach Pomerantz
24734e6a34 Revert "fix: retain permit validity for lesser amounts (#3580)" (#3586)
This reverts commit f1bcee3c08.
2022-03-23 10:33:50 -04:00
Zach Pomerantz
f1bcee3c08 fix: retain permit validity for lesser amounts (#3580) 2022-03-23 09:56:07 -04:00
Crowdin Bot
7a215ccdb4 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-23 08:07:22 +00:00
Crowdin Bot
c5c4f48d96 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-22 22:07:21 +00:00
Zach Pomerantz
bdcf761ddd chore: refactor swap button for maintainability (#3579)
* chore: mv SwapButton to dir

* chore: mv approval data to its own hook

* chore: mv approval actions to approvals hook

* chore: simplify SwapButton logic

* fix: pass through approval amount

* fix: mv error handling to consumer
2022-03-22 17:59:05 -04:00
Crowdin Bot
e876267d83 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-22 20:06:44 +00:00
Zach Pomerantz
76cbd82cb7 fix: bring wrap ui to spec (#3577) 2022-03-22 15:30:12 -04:00
Zach Pomerantz
6c4f7ab9a1 fix: modal border radius (#3576) 2022-03-22 13:44:33 -04:00
Zach Pomerantz
da20315724 fix: retain stale trade (#3578) 2022-03-22 13:03:02 -04:00
Zach Pomerantz
963b910552 fix: trade loading state (#3572)
* fix: invert stale callback

* fix: polling and validation logic

* fix: rm unused conditional
2022-03-22 12:23:38 -04:00
Zach Pomerantz
9e2dc9a435 fix: rm approval invariant (#3569) 2022-03-21 16:40:27 -04:00
Ian Lapham
6567f18bf5 update code formatting for prettier (#3571) 2022-03-21 16:20:59 -04:00
Zach Pomerantz
ee96973212 chore: clean dialog mounting logic (#3559)
* fix: apply scrollbar css on first render

* fix: useUnmount portability

* chore: clean up dialog ordering

* fix: dialog border-radius

* chore: cleanup dialog unmount animation
2022-03-21 15:55:46 -04:00
Zach Pomerantz
ce6c783174 fix: trade UI latency (#3563)
* fix: do not delay trade update

* fix: do not delay initial input
2022-03-21 15:03:09 -04:00
Zach Pomerantz
64e8c3ced9 fix: token img jank (#3562) 2022-03-21 15:00:03 -04:00
Zach Pomerantz
46e6c2295d fix: prevent scroll on token select focus (#3560) 2022-03-21 14:58:49 -04:00
Crowdin Bot
3626dbdeec chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-21 18:12:24 +00:00
Zach Pomerantz
eb75e0dc2e fix: set approval to pending on wallet request (#3570) 2022-03-21 13:37:53 -04:00
Zach Pomerantz
c26ecdfc88 fix: use a min fresh block (#3568)
* chore: mv useFilterFresh to its own hook

* fix: use a minimum fresh block

* fix: re-poll on stale data

* chore: rename to staleCallback

* check for undefined

* chore: rename fresh->valid

Co-authored-by: ianlapham <ianlapham@gmail.com>
2022-03-21 13:18:21 -04:00
Zach Pomerantz
f508788026 fix: impact rendering (#3553)
* fix: price impact rendering

* fix: webkit-compat gradient
2022-03-21 10:26:35 -04:00
Zach Pomerantz
377026bca8 fix: summary expando height (#3556) 2022-03-19 17:05:56 -05:00
Zach Pomerantz
9470c49d11 fix: fix loading delays for cached data (#3549)
* fix: loading transition

* fix: add check to usePoll
2022-03-18 11:03:26 -07:00
Ian Lapham
e1abd81a1d fix: add syncing state to trade loading (#3545)
* add syncing state to trade loading

* remove log statement

* update loading state

* update useLast trade logic

* nit fixes
2022-03-18 10:11:16 -07:00
Zach Pomerantz
7d9657867d fix: polling lag (#3543) 2022-03-18 08:52:55 -07:00
Zach Pomerantz
7cc52abb96 fix: cache computed pool addresses (#3537) 2022-03-18 08:00:35 -07:00
Crowdin Bot
5ac41417b0 chore(i18n): synchronize translations from crowdin [skip ci] 2022-03-18 00:15:22 +00:00
Zach Pomerantz
2c74c5f2df chore: include usdc in swap info (#3539)
* chore: refactor useComputeSwapInfo to include usdc

* chore: use passed usdc if able

* fix: fixture
2022-03-17 16:51:41 -07:00
Ian Lapham
cbc2ff668e disable swap button if trade not populated (#3542) 2022-03-17 16:26:37 -07:00
Zach Pomerantz
a73f59b4ff fix: only debounce input amounts (#3540) 2022-03-17 15:42:32 -07:00
Zach Pomerantz
7a75626c31 chore: bump to v0.0.25-beta (#3538) 2022-03-17 14:17:58 -07:00
Jordan Frankfurt
a0e14bef10 fix(vote): allow 0-vote proposals to render (#3536) 2022-03-17 15:37:36 -05:00
Yadong Zhang
9b5a53b2e8 fix: typeError: Cannot read properties of undefined (reading 'split') (#3518) 2022-03-17 14:30:13 -04:00
127 changed files with 3033 additions and 2907 deletions

View File

@@ -1,5 +1,5 @@
REACT_APP_INFURA_KEY="099fc58e0de9451d80b18d7c74caa7c1"
REACT_APP_PORTIS_ID="c0e2bf01-4b08-4fd5-ac7b-8e26b58cd236"
REACT_APP_FORTMATIC_KEY="pk_live_F937DF033A1666BF"
REACT_APP_GOOGLE_ANALYTICS_ID="UA-128182339-4"
REACT_APP_GOOGLE_ANALYTICS_ID="G-KDP9B6W4H8"
REACT_APP_FIREBASE_KEY="AIzaSyBcZWwTcTJHj_R6ipZcrJkXdq05PuX0Rs0"

45
INTERFACE_README.md Normal file
View File

@@ -0,0 +1,45 @@
# Uniswap Interface
An open source interface for Uniswap -- a protocol for decentralized exchange of Ethereum tokens.
- Website: [uniswap.org](https://uniswap.org/)
- Interface: [app.uniswap.org](https://app.uniswap.org)
- Docs: [uniswap.org/docs/](https://docs.uniswap.org/)
- Twitter: [@Uniswap](https://twitter.com/Uniswap)
- Reddit: [/r/Uniswap](https://www.reddit.com/r/Uniswap/)
- Email: [contact@uniswap.org](mailto:contact@uniswap.org)
- Discord: [Uniswap](https://discord.gg/FCfyBSbCU5)
- Whitepapers:
- [V1](https://hackmd.io/C-DvwDSfSxuh-Gd4WKE_ig)
- [V2](https://uniswap.org/whitepaper.pdf)
- [V3](https://uniswap.org/whitepaper-v3.pdf)
## Accessing the Uniswap Interface
To access the Uniswap Interface, use an IPFS gateway link from the
[latest release](https://github.com/Uniswap/uniswap-interface/releases/latest),
or visit [app.uniswap.org](https://app.uniswap.org).
## Unsupported tokens
Check out `useUnsupportedTokenList()` in [src/state/lists/hooks.ts](./src/state/lists/hooks.ts) for blocking tokens in your instance of the interface.
You can block an entire list of tokens by passing in a tokenlist like [here](./src/constants/lists.ts) or you can block specific tokens by adding them to [unsupported.tokenlist.json](./src/constants/tokenLists/unsupported.tokenlist.json).
## Contributions
For steps on local deployment, development, and code contribution, please see [CONTRIBUTING](./CONTRIBUTING.md).
## Accessing Uniswap V2
The Uniswap Interface supports swapping, adding liquidity, removing liquidity and migrating liquidity for Uniswap protocol V2.
- Swap on Uniswap V2: https://app.uniswap.org/#/swap?use=v2
- View V2 liquidity: https://app.uniswap.org/#/pool/v2
- Add V2 liquidity: https://app.uniswap.org/#/add/v2
- Migrate V2 liquidity to V3: https://app.uniswap.org/#/migrate/v2
## Accessing Uniswap V1
The Uniswap V1 interface for mainnet and testnets is accessible via IPFS gateways
linked from the [v1.0.0 release](https://github.com/Uniswap/uniswap-interface/releases/tag/v1.0.0).

View File

@@ -1,51 +1,21 @@
# Uniswap Interface
This repo is home to the Uniswap Widgets package and the web app interface [app.uniswap.org](https://app.uniswap.org).
[![Unit Tests](https://github.com/Uniswap/uniswap-interface/actions/workflows/unit-tests.yaml/badge.svg)](https://github.com/Uniswap/uniswap-interface/actions/workflows/unit-tests.yaml)
[![Integration Tests](https://github.com/Uniswap/uniswap-interface/actions/workflows/integration-tests.yaml/badge.svg)](https://github.com/Uniswap/uniswap-interface/actions/workflows/integration-tests.yaml)
[![Lint](https://github.com/Uniswap/uniswap-interface/actions/workflows/lint.yml/badge.svg)](https://github.com/Uniswap/uniswap-interface/actions/workflows/lint.yml)
[![Release](https://github.com/Uniswap/uniswap-interface/actions/workflows/release.yaml/badge.svg)](https://github.com/Uniswap/uniswap-interface/actions/workflows/release.yaml)
# Uniswap Labs Interface
[![Unit Tests](https://github.com/Uniswap/interface/actions/workflows/unit-tests.yaml/badge.svg)](https://github.com/Uniswap/interface/actions/workflows/unit-tests.yaml)
[![Integration Tests](https://github.com/Uniswap/interface/actions/workflows/integration-tests.yaml/badge.svg)](https://github.com/Uniswap/interface/actions/workflows/integration-tests.yaml)
[![Lint](https://github.com/Uniswap/interface/actions/workflows/lint.yml/badge.svg)](https://github.com/Uniswap/interface/actions/workflows/lint.yml)
[![Release](https://github.com/Uniswap/interface/actions/workflows/release.yaml/badge.svg)](https://github.com/Uniswap/interface/actions/workflows/release.yaml)
[![Crowdin](https://badges.crowdin.net/uniswap-interface/localized.svg)](https://crowdin.com/project/uniswap-interface)
An open source interface for Uniswap -- a protocol for decentralized exchange of Ethereum tokens.
The web application hosted at https://app.uniswap.org is a convenient way to access the core functionality of the Uniswap Protocol.
- Website: [uniswap.org](https://uniswap.org/)
- Interface: [app.uniswap.org](https://app.uniswap.org)
- Docs: [uniswap.org/docs/](https://docs.uniswap.org/)
- Twitter: [@Uniswap](https://twitter.com/Uniswap)
- Reddit: [/r/Uniswap](https://www.reddit.com/r/Uniswap/)
- Email: [contact@uniswap.org](mailto:contact@uniswap.org)
- Discord: [Uniswap](https://discord.gg/FCfyBSbCU5)
- Whitepapers:
- [V1](https://hackmd.io/C-DvwDSfSxuh-Gd4WKE_ig)
- [V2](https://uniswap.org/whitepaper.pdf)
- [V3](https://uniswap.org/whitepaper-v3.pdf)
For documentation of the interface including how to contribute or access prior builds, please view the README here: [INTERFACE_README.md](./INTERFACE_README.md)
## Accessing the Uniswap Interface
# Uniswap Labs Widgets
To access the Uniswap Interface, use an IPFS gateway link from the
[latest release](https://github.com/Uniswap/uniswap-interface/releases/latest),
or visit [app.uniswap.org](https://app.uniswap.org).
The `@uniswap/widgets` package is an npm package of React components used to provide subsets of the Uniswap Protocol functionality in a small and configurable user interface element.
## Unsupported tokens
The npm package can be found here. [@uniswap/widgets](https://www.npmjs.com/package/@uniswap/widgets)
Check out `useUnsupportedTokenList()` in [src/state/lists/hooks.ts](./src/state/lists/hooks.ts) for blocking tokens in your instance of the interface.
You can block an entire list of tokens by passing in a tokenlist like [here](./src/constants/lists.ts) or you can block specific tokens by adding them to [unsupported.tokenlist.json](./src/constants/tokenLists/unsupported.tokenlist.json).
## Contributions
For steps on local deployment, development, and code contribution, please see [CONTRIBUTING](./CONTRIBUTING.md).
## Accessing Uniswap V2
The Uniswap Interface supports swapping, adding liquidity, removing liquidity and migrating liquidity for Uniswap protocol V2.
- Swap on Uniswap V2: https://app.uniswap.org/#/swap?use=v2
- View V2 liquidity: https://app.uniswap.org/#/pool/v2
- Add V2 liquidity: https://app.uniswap.org/#/add/v2
- Migrate V2 liquidity to V3: https://app.uniswap.org/#/migrate/v2
## Accessing Uniswap V1
The Uniswap V1 interface for mainnet and testnets is accessible via IPFS gateways
linked from the [v1.0.0 release](https://github.com/Uniswap/uniswap-interface/releases/tag/v1.0.0).
For documentation of the widgets package, please view the README here: [WIDGETS_README.md](./WIDGETS_README.md).

40
WIDGETS_README.md Normal file
View File

@@ -0,0 +1,40 @@
# Uniswap Labs Swap Widget
The Swap Widget bundles the whole swapping experience into a single React component that developers can easily embed in their app with one line of code.
![swap widget screenshot](https://raw.githubusercontent.com/Uniswap/interface/main/src/assets/images/widget-screenshot.png)
You can customize the theme (colors, font, border radius, and more) to match the style of your application. You can also configure your own default token list and optionally set a convenience fee on swaps executed through the widget on your site.
## Installation
Install the widgets library via `npm` or `yarn`. If you do not already use the widget's peerDependencies `redux` and `react-redux`, then you'll need to add them as well.
```js
yarn add @uniswap/widgets redux react-redux
```
```js
npm i --save @uniswap/widgets redux react-redux
```
## Documentation
- [overview](https://docs.uniswap.org/sdk/widgets/swap-widget)
- [api reference](https://docs.uniswap.org/sdk/widgets/swap-widget/api)
## Example Apps
Uniswap Labs maintains two demo apps in branches of the [widgets-demo](https://github.com/Uniswap/widgets-demo) repo:
- [NextJS](https://github.com/Uniswap/widgets-demo/tree/nextjs)
- [Create React App](https://github.com/Uniswap/widgets-demo/tree/cra)
Others have also also released the widget in production to their userbase:
- [OpenSea](https://opensea.io/)
- [Friends With Benefits](https://www.fwb.help/)
- [Oasis](https://oasis.app/)
## Legal notice
Uniswap Labs encourages integrators to evaluate their own regulatory obligations when integrating this widget into their products, including, but not limited to, those related to economic or trade sanctions compliance.

View File

@@ -1,6 +1,6 @@
{
"name": "@uniswap/widgets",
"version": "0.0.24-beta",
"version": "0.0.26-beta",
"description": "Uniswap Interface",
"homepage": ".",
"files": [
@@ -30,6 +30,7 @@
"@babel/preset-env": "^7.16.11",
"@babel/preset-react": "^7.16.7",
"@babel/preset-typescript": "^7.16.7",
"@ethersproject/experimental": "^5.4.0",
"@gnosis.pm/safe-apps-web3-react": "^0.6.0",
"@graphql-codegen/cli": "1.21.5",
"@graphql-codegen/typescript": "1.22.3",
@@ -89,8 +90,8 @@
"@uniswap/v2-periphery": "^1.1.0-beta.0",
"@uniswap/v3-core": "1.0.0",
"@uniswap/v3-periphery": "^1.1.1",
"@web3-react/metamask": "8.0.13-beta.0",
"@web3-react/walletconnect": "8.0.18-beta.0",
"@web3-react/metamask": "^8.0.18-beta.0",
"@web3-react/walletconnect": "^8.0.25-beta.0",
"array.prototype.flat": "^1.2.4",
"array.prototype.flatmap": "^1.2.4",
"babel-plugin-macros": "^3.1.0",
@@ -118,7 +119,7 @@
"react-confetti": "^6.0.0",
"react-cosmos": "^5.6.6",
"react-dom": "^17.0.1",
"react-ga": "^2.5.7",
"react-ga4": "^1.4.1",
"react-is": "^17.0.2",
"react-markdown": "^4.3.1",
"react-redux": "^7.2.2",
@@ -193,39 +194,25 @@
"license": "GPL-3.0-or-later",
"dependencies": {
"@babel/runtime": "^7.17.0",
"@ethersproject/abi": "^5.4.1",
"@ethersproject/abstract-provider": "^5.4.1",
"@ethersproject/abstract-signer": "^5.4.1",
"@ethersproject/address": "^5.4.0",
"@ethersproject/bignumber": "^5.4.2",
"@ethersproject/bytes": "^5.4.0",
"@ethersproject/constants": "^5.4.0",
"@ethersproject/contracts": "^5.4.1",
"@ethersproject/experimental": "^5.4.0",
"@ethersproject/hash": "^5.4.0",
"@ethersproject/providers": "^5.4.0",
"@ethersproject/solidity": "^5.4.0",
"@ethersproject/strings": "^5.4.0",
"@ethersproject/units": "^5.4.0",
"@ethersproject/wallet": "^5.4.0",
"@fontsource/ibm-plex-mono": "^4.5.1",
"@fontsource/inter": "^4.5.1",
"@popperjs/core": "^2.4.4",
"@reduxjs/toolkit": "^1.6.1",
"@uniswap/redux-multicall": "^1.0.0",
"@uniswap/redux-multicall": "^1.1.1",
"@uniswap/router-sdk": "^1.0.3",
"@uniswap/sdk-core": "^3.0.1",
"@uniswap/smart-order-router": "^2.5.20",
"@uniswap/smart-order-router": "^2.5.26",
"@uniswap/token-lists": "^1.0.0-beta.27",
"@uniswap/v2-sdk": "^3.0.1",
"@uniswap/v3-sdk": "^3.8.2",
"@web3-react/core": "8.0.17-beta.0",
"@web3-react/eip1193": "8.0.12-beta.0",
"@web3-react/empty": "8.0.10-beta.0",
"@web3-react/types": "8.0.10-beta.0",
"@web3-react/url": "8.0.12-beta.0",
"@web3-react/core": "^8.0.22-beta.0",
"@web3-react/eip1193": "^8.0.17-beta.0",
"@web3-react/empty": "^8.0.11-beta.0",
"@web3-react/types": "^8.0.11-beta.0",
"@web3-react/url": "^8.0.16-beta.0",
"ajv": "^6.12.3",
"cids": "^1.0.0",
"ethers": "^5.1.4",
"immer": "^9.0.6",
"jotai": "^1.3.7",
"jsbi": "^3.1.4",

View File

@@ -37,6 +37,11 @@ function isAsset(source: string) {
return extname && [...ASSET_EXTENSIONS, '.css', '.scss'].includes(extname)
}
function isEthers(source: string) {
// @ethersproject/* modules are provided by ethers, with the exception of experimental.
return source.startsWith('@ethersproject/') && !source.endsWith('experimental')
}
const TS_CONFIG = './tsconfig.lib.json'
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { baseUrl, paths }: CompilerOptions = require(TS_CONFIG).compilerOptions
@@ -60,7 +65,7 @@ const plugins = [
const check = {
input: 'src/lib/index.tsx',
output: { file: 'dist/widgets.tsc', inlineDynamicImports: true },
external: isAsset,
external: (source: string) => isAsset(source) || isEthers(source),
plugins: [
externals({ exclude: ['constants'], deps: true, peerDeps: true }), // marks builtins, dependencies, and peerDependencies external
...plugins,
@@ -72,7 +77,7 @@ const check = {
const type = {
input: 'dist/dts/lib/index.d.ts',
output: { file: 'dist/index.d.ts' },
external: isAsset,
external: (source: string) => isAsset(source) || isEthers(source),
plugins: [
externals({ exclude: ['constants'], deps: true, peerDeps: true }),
dts({ compilerOptions: { baseUrl: 'dist/dts' } }),
@@ -112,6 +117,7 @@ const transpile = {
sourcemap: false,
},
],
external: isEthers,
plugins: [
externals({
exclude: [

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

@@ -1,6 +1,6 @@
import { Trans } from '@lingui/macro'
import React, { ErrorInfo } from 'react'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import styled from 'styled-components/macro'
import store, { AppState } from '../../state'
@@ -60,11 +60,7 @@ export default class ErrorBoundary extends React.Component<unknown, ErrorBoundar
}
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
ReactGA.exception({
...error,
...errorInfo,
fatal: true,
})
ReactGA.event('exception', { description: error.toString() + errorInfo.toString(), fatal: true })
}
render() {

View File

@@ -11,7 +11,7 @@ import { PoolState, usePools } from 'hooks/usePools'
import usePrevious from 'hooks/usePrevious'
import { DynamicSection } from 'pages/AddLiquidity/styled'
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { Box } from 'rebass'
import styled, { keyframes } from 'styled-components/macro'
import { ThemedText } from 'theme'

View File

@@ -255,8 +255,8 @@ export default function NetworkSelector() {
const handleChainSwitch = useCallback(
(targetChain: number, skipToggle?: boolean) => {
if (!library) return
switchToNetwork({ library, chainId: targetChain })
if (!library?.provider) return
switchToNetwork({ provider: library.provider, chainId: targetChain })
.then(() => {
if (!skipToggle) {
toggle()

View File

@@ -9,7 +9,7 @@ import useTheme from 'hooks/useTheme'
import { saturate } from 'polished'
import React, { ReactNode, useCallback, useMemo } from 'react'
import { BarChart2, CloudOff, Inbox } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { batch } from 'react-redux'
import { Bound } from 'state/mint/v3/actions'
import styled from 'styled-components/macro'
@@ -158,11 +158,7 @@ export default function LiquidityChartRangeInput({
)
if (isError) {
ReactGA.exception({
...error,
category: 'Liquidity',
fatal: false,
})
ReactGA.event('exception', { description: error.toString(), fatal: false })
}
return (

View File

@@ -3,7 +3,7 @@ import { CurrencyAmount, Token } from '@uniswap/sdk-core'
import useActiveWeb3React from 'hooks/useActiveWeb3React'
import { useCallback, useEffect } from 'react'
import { Heart, X } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import styled, { keyframes } from 'styled-components/macro'
import tokenLogo from '../../assets/images/token-logo.png'

View File

@@ -4,7 +4,7 @@ import { RowFixed } from 'components/Row'
import useCurrentBlockTimestamp from 'hooks/useCurrentBlockTimestamp'
import { useEffect } from 'react'
import { MessageCircle, X } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { useShowSurveyPopup } from 'state/user/hooks'
import styled from 'styled-components/macro'
import { ExternalLink, ThemedText, Z_INDEX } from 'theme'

View File

@@ -3,7 +3,7 @@ import Card, { DarkGreyCard } from 'components/Card'
import Row, { AutoRow, RowBetween } from 'components/Row'
import { useEffect, useRef } from 'react'
import { ArrowDown, Info, X } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import styled from 'styled-components/macro'
import { ExternalLink, ThemedText } from 'theme'
import { isMobile } from 'utils/userAgent'

View File

@@ -2,7 +2,7 @@ import { Trans } from '@lingui/macro'
import { ButtonOutlined } from 'components/Button'
import { AutoRow } from 'components/Row'
import React from 'react'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import styled from 'styled-components/macro'
import { ThemedText } from 'theme'

View File

@@ -11,7 +11,7 @@ import { getTokenFilter } from 'lib/hooks/useTokenList/filtering'
import { tokenComparator, useSortTokensByQuery } from 'lib/hooks/useTokenList/sorting'
import { KeyboardEvent, RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { Edit } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import AutoSizer from 'react-virtualized-auto-sizer'
import { FixedSizeList } from 'react-window'
import { Text } from 'rebass'

View File

@@ -11,7 +11,7 @@ import useTheme from 'hooks/useTheme'
import { transparentize } from 'polished'
import { useCallback, useState } from 'react'
import { AlertTriangle, ArrowLeft } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { useAppDispatch } from 'state/hooks'
import { enableList, removeList } from 'state/lists/actions'
import { useAllLists } from 'state/lists/hooks'

View File

@@ -9,7 +9,7 @@ import parseENSAddress from 'lib/utils/parseENSAddress'
import uriToHttp from 'lib/utils/uriToHttp'
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { CheckCircle, Settings } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { usePopper } from 'react-popper'
import { useAppDispatch, useAppSelector } from 'state/hooks'
import styled from 'styled-components/macro'

View File

@@ -5,7 +5,7 @@ import useActiveWeb3React from 'hooks/useActiveWeb3React'
import { AUTO_ROUTER_SUPPORTED_CHAINS } from 'lib/hooks/routing/clientSideSmartOrderRouter'
import { useContext, useRef, useState } from 'react'
import { Settings, X } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { Text } from 'rebass'
import styled, { ThemeContext } from 'styled-components/macro'

View File

@@ -5,7 +5,7 @@ import Row, { AutoRow, RowBetween } from 'components/Row'
import { useWalletConnectMonitoringEventCallback } from 'hooks/useMonitoringEventCallback'
import { useEffect, useState } from 'react'
import { ArrowLeft, ArrowRight, Info } from 'react-feather'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import styled from 'styled-components/macro'
import { AbstractConnector } from 'web3-react-abstract-connector'
import { UnsupportedChainIdError, useWeb3React } from 'web3-react-core'

View File

@@ -1,18 +1,13 @@
import useActiveWeb3React from 'hooks/useActiveWeb3React'
import { useEffect } from 'react'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { RouteComponentProps } from 'react-router-dom'
import { getCLS, getFCP, getFID, getLCP, Metric } from 'web-vitals'
import { GOOGLE_ANALYTICS_CLIENT_ID_STORAGE_KEY } from './index'
function reportWebVitals({ name, delta, id }: Metric) {
ReactGA.timing({
category: 'Web Vitals',
variable: name,
value: Math.round(name === 'CLS' ? delta * 1000 : delta),
label: id,
})
ReactGA._gaCommandSendTiming('Web Vitals', name, Math.round(name === 'CLS' ? delta * 1000 : delta), id)
}
// tracks web vitals and pageviews
@@ -35,7 +30,7 @@ export default function GoogleAnalyticsReporter({ location: { pathname, search }
}, [pathname, search])
useEffect(() => {
// typed as 'any' in react-ga -.-
// typed as 'any' in react-ga4 -.-
ReactGA.ga((tracker: any) => {
if (!tracker) return

View File

@@ -1,4 +1,4 @@
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { isMobile } from 'utils/userAgent'
export const GOOGLE_ANALYTICS_CLIENT_ID_STORAGE_KEY = 'ga_client_id'
@@ -23,5 +23,5 @@ if (typeof GOOGLE_ANALYTICS_ID === 'string') {
: 'mobileRegular',
})
} else {
ReactGA.initialize('test', { testMode: true, debug: true })
ReactGA.initialize('test', { gtagOptions: { debug_mode: true } })
}

View File

@@ -4,7 +4,7 @@ import { AutoColumn } from 'components/Column'
import { LoadingOpacityContainer } from 'components/Loader/styled'
import { RowFixed } from 'components/Row'
import { MouseoverTooltipContent } from 'components/Tooltip'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { InterfaceTrade } from 'state/routing/types'
import styled from 'styled-components/macro'
import { ThemedText } from 'theme'

View File

@@ -35,10 +35,7 @@ export const SUPPORTED_LOCALES = [
]
export type SupportedLocale = typeof SUPPORTED_LOCALES[number] | 'pseudo'
// eslint-disable-next-line import/first
import * as enUS from 'locales/en-US'
export const DEFAULT_LOCALE: SupportedLocale = 'en-US'
export const DEFAULT_CATALOG = enUS
export const LOCALE_LABEL: { [locale in SupportedLocale]: string } = {
'af-ZA': 'Afrikaans',

View File

@@ -1,23 +1,86 @@
import { Currency, Ether, NativeCurrency, Token, WETH9 } from '@uniswap/sdk-core'
import {
USDC_ARBITRUM,
USDC_ARBITRUM_RINKEBY,
USDC_GÖRLI,
USDC_KOVAN,
USDC_MAINNET,
USDC_OPTIMISM,
USDC_OPTIMISTIC_KOVAN,
USDC_POLYGON,
USDC_POLYGON_MUMBAI,
USDC_RINKEBY,
USDC_ROPSTEN,
} from '@uniswap/smart-order-router'
import invariant from 'tiny-invariant'
import { UNI_ADDRESS } from './addresses'
import { SupportedChainId } from './chains'
export { USDC_ARBITRUM, USDC_MAINNET, USDC_OPTIMISM, USDC_POLYGON }
export const USDC_MAINNET = new Token(
SupportedChainId.MAINNET,
'0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
6,
'USDC',
'USD//C'
)
export const USDC_ROPSTEN = new Token(
SupportedChainId.ROPSTEN,
'0x07865c6e87b9f70255377e024ace6630c1eaa37f',
6,
'USDC',
'USD//C'
)
export const USDC_RINKEBY = new Token(
SupportedChainId.RINKEBY,
'0x4DBCdF9B62e891a7cec5A2568C3F4FAF9E8Abe2b',
6,
'tUSDC',
'test USD//C'
)
export const USDC_GOERLI = new Token(
SupportedChainId.GOERLI,
'0x07865c6e87b9f70255377e024ace6630c1eaa37f',
6,
'USDC',
'USD//C'
)
export const USDC_KOVAN = new Token(
SupportedChainId.KOVAN,
'0x31eeb2d0f9b6fd8642914ab10f4dd473677d80df',
6,
'USDC',
'USD//C'
)
export const USDC_OPTIMISM = new Token(
SupportedChainId.OPTIMISM,
'0x7F5c764cBc14f9669B88837ca1490cCa17c31607',
6,
'USDC',
'USD//C'
)
export const USDC_OPTIMISTIC_KOVAN = new Token(
SupportedChainId.OPTIMISTIC_KOVAN,
'0x3b8e53b3ab8e01fb57d0c9e893bc4d655aa67d84',
6,
'USDC',
'USD//C'
)
export const USDC_ARBITRUM = new Token(
SupportedChainId.ARBITRUM_ONE,
'0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',
6,
'USDC',
'USD//C'
)
export const USDC_ARBITRUM_RINKEBY = new Token(
SupportedChainId.ARBITRUM_RINKEBY,
'0x09b98f8b2395d076514037ff7d39a091a536206c',
6,
'USDC',
'USD//C'
)
export const USDC_POLYGON = new Token(
SupportedChainId.POLYGON,
'0x2791bca1f2de4661ed88a30c99a7a9449aa84174',
6,
'USDC',
'USD//C'
)
export const USDC_POLYGON_MUMBAI = new Token(
SupportedChainId.POLYGON_MUMBAI,
'0xe11a86849d99f524cac3e7a0ec1241828e332c62',
6,
'USDC',
'USD//C'
)
export const AMPL = new Token(
SupportedChainId.MAINNET,
@@ -55,7 +118,7 @@ export const USDC: { [chainId in SupportedChainId]: Token } = {
[SupportedChainId.OPTIMISTIC_KOVAN]: USDC_OPTIMISTIC_KOVAN,
[SupportedChainId.POLYGON]: USDC_POLYGON,
[SupportedChainId.POLYGON_MUMBAI]: USDC_POLYGON_MUMBAI,
[SupportedChainId.GOERLI]: USDC_GÖRLI,
[SupportedChainId.GOERLI]: USDC_GOERLI,
[SupportedChainId.RINKEBY]: USDC_RINKEBY,
[SupportedChainId.KOVAN]: USDC_KOVAN,
[SupportedChainId.ROPSTEN]: USDC_ROPSTEN,
@@ -310,7 +373,7 @@ export const TOKEN_SHORTHANDS: { [shorthand: string]: { [chainId in SupportedCha
[SupportedChainId.OPTIMISTIC_KOVAN]: USDC_OPTIMISTIC_KOVAN.address,
[SupportedChainId.POLYGON]: USDC_POLYGON.address,
[SupportedChainId.POLYGON_MUMBAI]: USDC_POLYGON_MUMBAI.address,
[SupportedChainId.GOERLI]: USDC_GÖRLI.address,
[SupportedChainId.GOERLI]: USDC_GOERLI.address,
[SupportedChainId.RINKEBY]: USDC_RINKEBY.address,
[SupportedChainId.KOVAN]: USDC_KOVAN.address,
[SupportedChainId.ROPSTEN]: USDC_ROPSTEN.address,

View File

@@ -15,7 +15,7 @@ export default function useAddTokenToMetamask(currencyToAdd: Currency | undefine
const logoURL = useCurrencyLogoURIs(token)[0]
const addToken = useCallback(() => {
if (library && library.provider.isMetaMask && library.provider.request && token) {
if (library && library?.provider?.isMetaMask && library.provider.request && token) {
library.provider
.request({
method: 'wallet_watchAsset',

View File

@@ -28,26 +28,24 @@ export function useClientSideV3Trade<TTradeType extends TradeType>(
amountSpecified?: CurrencyAmount<Currency>,
otherCurrency?: Currency
): { state: TradeState; trade: InterfaceTrade<Currency, Currency, TTradeType> | undefined } {
const [currencyIn, currencyOut] = useMemo(
() =>
tradeType === TradeType.EXACT_INPUT
? [amountSpecified?.currency, otherCurrency]
: [otherCurrency, amountSpecified?.currency],
[tradeType, amountSpecified, otherCurrency]
)
const [currencyIn, currencyOut] =
tradeType === TradeType.EXACT_INPUT
? [amountSpecified?.currency, otherCurrency]
: [otherCurrency, amountSpecified?.currency]
const { routes, loading: routesLoading } = useAllV3Routes(currencyIn, currencyOut)
const quoter = useV3Quoter()
const { chainId } = useActiveWeb3React()
const quotesResults = useSingleContractWithCallData(
quoter,
amountSpecified
? routes.map((route) => SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata)
: [],
{
gasRequired: chainId ? QUOTE_GAS_OVERRIDES[chainId] ?? DEFAULT_GAS_QUOTE : undefined,
}
const callData = useMemo(
() =>
amountSpecified
? routes.map((route) => SwapQuoter.quoteCallParameters(route, amountSpecified, tradeType).calldata)
: [],
[amountSpecified, routes, tradeType]
)
const quotesResults = useSingleContractWithCallData(quoter, callData, {
gasRequired: chainId ? QUOTE_GAS_OVERRIDES[chainId] ?? DEFAULT_GAS_QUOTE : undefined,
})
return useMemo(() => {
if (

View File

@@ -4,7 +4,7 @@ import { FeeAmount } from '@uniswap/v3-sdk'
import useBlockNumber from 'lib/hooks/useBlockNumber'
import ms from 'ms.macro'
import { useMemo } from 'react'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { useFeeTierDistributionQuery } from 'state/data/enhanced'
import { FeeTierDistributionQuery } from 'state/data/generated'
@@ -112,9 +112,7 @@ function usePoolTVL(token0: Token | undefined, token1: Token | undefined) {
}
if (latestBlock - (_meta?.block?.number ?? 0) > MAX_DATA_BLOCK_AGE) {
ReactGA.exception({
description: `Graph stale (latest block: ${latestBlock})`,
})
ReactGA.event('exception', { description: `Graph stale (latest block: ${latestBlock})` })
return {
isLoading,

View File

@@ -3,7 +3,7 @@ import { LocationDescriptor } from 'history'
import useParsedQueryString from 'hooks/useParsedQueryString'
import { stringify } from 'qs'
import { useMemo } from 'react'
import ReactGA from 'react-ga'
import ReactGA from 'react-ga4'
import { useLocation } from 'react-router-dom'
import { useActiveLocale } from './useActiveLocale'

View File

@@ -1,7 +1,7 @@
import { skipToken } from '@reduxjs/toolkit/query/react'
import { Currency } from '@uniswap/sdk-core'
import { ChainId } from '@uniswap/smart-order-router'
import { FeeAmount, nearestUsableTick, Pool, TICK_SPACINGS, tickToPrice } from '@uniswap/v3-sdk'
import { SupportedChainId } from 'constants/chains'
import { ZERO_ADDRESS } from 'constants/misc'
import JSBI from 'jsbi'
import { useSingleContractMultipleData } from 'lib/hooks/multicall'
@@ -14,7 +14,7 @@ import { useTickLens } from './useContract'
import { PoolState, usePool } from './usePools'
const PRICE_FIXED_DIGITS = 8
const CHAIN_IDS_MISSING_SUBGRAPH_DATA = [ChainId.ARBITRUM_ONE, ChainId.ARBITRUM_RINKEBY]
const CHAIN_IDS_MISSING_SUBGRAPH_DATA = [SupportedChainId.ARBITRUM_ONE, SupportedChainId.ARBITRUM_RINKEBY]
export interface TickData {
tick: number

View File

@@ -1,6 +1,6 @@
import { Interface } from '@ethersproject/abi'
import { BigintIsh, Currency, Token } from '@uniswap/sdk-core'
import IUniswapV3PoolStateJson from '@uniswap/v3-core/artifacts/contracts/interfaces/pool/IUniswapV3PoolState.sol/IUniswapV3PoolState.json'
import { abi as IUniswapV3PoolStateABI } from '@uniswap/v3-core/artifacts/contracts/interfaces/pool/IUniswapV3PoolState.sol/IUniswapV3PoolState.json'
import { computePoolAddress } from '@uniswap/v3-sdk'
import { FeeAmount, Pool } from '@uniswap/v3-sdk'
import useActiveWeb3React from 'hooks/useActiveWeb3React'
@@ -11,15 +11,41 @@ import { useMemo } from 'react'
import { V3_CORE_FACTORY_ADDRESSES } from '../constants/addresses'
import { IUniswapV3PoolStateInterface } from '../types/v3/IUniswapV3PoolState'
const { abi: IUniswapV3PoolStateABI } = IUniswapV3PoolStateJson
const POOL_STATE_INTERFACE = new Interface(IUniswapV3PoolStateABI) as IUniswapV3PoolStateInterface
// Classes are expensive to instantiate, so this caches the recently instantiated pools.
// This avoids re-instantiating pools as the other pools in the same request are loaded.
class PoolCache {
// pools is a FIFO, using unshift/pop. This makes recent entries faster to find.
// Evict after 128 entries. Empirically, a swap uses 64 entries.
private static MAX_ENTRIES = 128
// These are FIFOs, using unshift/pop. This makes recent entries faster to find.
private static pools: Pool[] = []
private static addresses: { key: string; address: string }[] = []
static getPoolAddress(factoryAddress: string, tokenA: Token, tokenB: Token, fee: FeeAmount): string {
if (this.addresses.length > this.MAX_ENTRIES) {
this.addresses = this.addresses.slice(0, this.MAX_ENTRIES / 2)
}
const { address: addressA } = tokenA
const { address: addressB } = tokenB
const key = `${factoryAddress}:${addressA}:${addressB}:${fee.toString()}`
const found = this.addresses.find((address) => address.key === key)
if (found) return found.address
const address = {
key,
address: computePoolAddress({
factoryAddress,
tokenA,
tokenB,
fee,
}),
}
this.addresses.unshift(address)
return address.address
}
static getPool(
tokenA: Token,
@@ -29,9 +55,8 @@ class PoolCache {
liquidity: BigintIsh,
tick: number
): Pool {
// Evict after 128 entries. Empirically, a swap uses 64 entries.
if (this.pools.length > 128) {
this.pools = this.pools.slice(0, 64)
if (this.pools.length > this.MAX_ENTRIES) {
this.pools = this.pools.slice(0, this.MAX_ENTRIES / 2)
}
const found = this.pools.find(
@@ -43,9 +68,7 @@ class PoolCache {
JSBI.EQ(pool.liquidity, liquidity) &&
pool.tickCurrent === tick
)
if (found) {
return found
}
if (found) return found
const pool = new Pool(tokenA, tokenB, fee, sqrtPriceX96, liquidity, tick)
this.pools.unshift(pool)
@@ -84,16 +107,7 @@ export function usePools(
const v3CoreFactoryAddress = chainId && V3_CORE_FACTORY_ADDRESSES[chainId]
if (!v3CoreFactoryAddress) return new Array(poolTokens.length)
return poolTokens.map(
(value) =>
value &&
computePoolAddress({
factoryAddress: v3CoreFactoryAddress,
tokenA: value[0],
tokenB: value[1],
fee: value[2],
})
)
return poolTokens.map((value) => value && PoolCache.getPoolAddress(v3CoreFactoryAddress, ...value))
}, [chainId, poolTokens])
const slot0s = useMultipleContractSingleData(poolAddresses, POOL_STATE_INTERFACE, 'slot0')

View File

@@ -1,14 +1,12 @@
import { Interface } from '@ethersproject/abi'
import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
import IUniswapV2PairJson from '@uniswap/v2-core/build/IUniswapV2Pair.json'
import { abi as IUniswapV2PairABI } from '@uniswap/v2-core/build/IUniswapV2Pair.json'
import { computePairAddress, Pair } from '@uniswap/v2-sdk'
import { useMultipleContractSingleData } from 'lib/hooks/multicall'
import { useMemo } from 'react'
import { V2_FACTORY_ADDRESSES } from '../constants/addresses'
const { abi: IUniswapV2PairABI } = IUniswapV2PairJson
const PAIR_INTERFACE = new Interface(IUniswapV2PairABI)
export enum PairState {

View File

@@ -10,6 +10,10 @@
{
"name": "react-feather",
"message": "Please import from lib/icons to ensure performant usage."
},
{
"name": "@uniswap/smart-order-router",
"message": "Forbidden import; smart-order-router is lazy-loaded."
}
],
"patterns": [

View File

@@ -5,10 +5,20 @@ import { ReactNode, useMemo } from 'react'
import Button from './Button'
import Row from './Row'
const fadeIn = keyframes`
from {
opacity: 0;
}
to {
opacity: 1;
}
`
const StyledButton = styled(Button)`
border-radius: ${({ theme }) => theme.borderRadius}em;
animation: ${fadeIn} 0.25s ease-in;
border-radius: ${({ theme }) => theme.borderRadius * 0.75}em;
flex-grow: 1;
transition: background-color 0.25s ease-out, flex-grow 0.25s ease-out, padding 0.25s ease-out;
transition: background-color 0.25s ease-out, border-radius 0.25s ease-out, flex-grow 0.25s ease-out;
:disabled {
margin: -1px;
@@ -35,11 +45,13 @@ const actionCss = css`
${ActionRow} {
animation: ${grow} 0.25s ease-in;
flex-grow: 1;
justify-content: flex-start;
white-space: nowrap;
}
${StyledButton} {
border-radius: ${({ theme }) => theme.borderRadius * 0.75}em;
border-radius: ${({ theme }) => theme.borderRadius}em;
flex-grow: 0;
padding: 1em;
}
@@ -57,8 +69,8 @@ export const Overlay = styled(Row)<{ hasAction: boolean }>`
export interface Action {
message: ReactNode
icon?: Icon
onClick: () => void
children: ReactNode
onClick?: () => void
children?: ReactNode
}
export interface BaseProps {
@@ -72,11 +84,13 @@ export default function ActionButton({ color = 'accent', disabled, action, onCli
const textColor = useMemo(() => (color === 'accent' && !disabled ? 'onAccent' : 'currentColor'), [color, disabled])
return (
<Overlay hasAction={Boolean(action)} flex align="stretch">
<StyledButton color={color} disabled={disabled} onClick={action ? action.onClick : onClick}>
<ThemedText.TransitionButton buttonSize={action ? 'medium' : 'large'} color={textColor}>
{action ? action.children : children}
</ThemedText.TransitionButton>
</StyledButton>
{(action ? action.onClick : true) && (
<StyledButton color={color} disabled={disabled} onClick={action?.onClick || onClick}>
<ThemedText.TransitionButton buttonSize={action ? 'medium' : 'large'} color={textColor}>
{action?.children || children}
</ThemedText.TransitionButton>
</StyledButton>
)}
{action && (
<ActionRow gap={0.5}>
<LargeIcon color="currentColor" icon={action.icon || AlertTriangle} />

View File

@@ -1,8 +1,8 @@
import 'wicg-inert'
import useUnmount from 'lib/hooks/useUnmount'
import { X } from 'lib/icons'
import styled, { Color, Layer, ThemeProvider } from 'lib/theme'
import { delayUnmountForAnimation } from 'lib/utils/animations'
import { createContext, ReactElement, ReactNode, useContext, useEffect, useRef, useState } from 'react'
import { createPortal } from 'react-dom'
@@ -97,8 +97,10 @@ export default function Dialog({ color, children, onClose = () => void 0 }: Dial
context.setActive(true)
return () => context.setActive(false)
}, [context])
const dialog = useRef<HTMLDivElement>(null)
useUnmount(dialog)
const modal = useRef<HTMLDivElement>(null)
useEffect(() => delayUnmountForAnimation(modal), [])
useEffect(() => {
const close = (e: KeyboardEvent) => e.key === 'Escape' && onClose?.()
document.addEventListener('keydown', close, true)
@@ -108,9 +110,11 @@ export default function Dialog({ color, children, onClose = () => void 0 }: Dial
context.element &&
createPortal(
<ThemeProvider>
<Modal color={color} ref={dialog}>
<OnCloseContext.Provider value={onClose}>{children}</OnCloseContext.Provider>
</Modal>
<OnCloseContext.Provider value={onClose}>
<Modal color={color} ref={modal}>
{children}
</Modal>
</OnCloseContext.Provider>
</ThemeProvider>,
context.element
)

View File

@@ -26,5 +26,5 @@ export default function WidgetsPropsValidator(props: PropsWithChildren<WidgetPro
}
}, [locale])
return <>{props.children}</>
return null
}

View File

@@ -26,10 +26,12 @@ export default function EtherscanLink({ data, type, color = 'currentColor', chil
() => data && getExplorerLink(chainId || SupportedChainId.MAINNET, data, type),
[chainId, data, type]
)
return (
<StyledExternalLink href={url} color={color} target="_blank">
<Row gap={0.25}>
{children} <Link />
{children}
{url && <Link />}
</Row>
</StyledExternalLink>
)

View File

@@ -18,7 +18,7 @@ const ExpandoColumn = styled(Column)<{ height: number; open: boolean }>`
transition: height 0.25s, padding 0.25s;
:after {
background: linear-gradient(#ffffff00, ${({ theme }) => theme.dialog});
background: linear-gradient(transparent, ${({ theme }) => theme.dialog});
bottom: 0;
content: '';
height: 0.75em;

View File

@@ -1,5 +1,5 @@
import styled, { css } from 'lib/theme'
import { forwardRef, HTMLProps, useCallback, useEffect, useState } from 'react'
import { ChangeEvent, forwardRef, HTMLProps, useCallback } from 'react'
const Input = styled.input`
-webkit-appearance: textfield;
@@ -76,46 +76,23 @@ interface EnforcedNumericInputProps extends NumericInputProps {
enforcer: (nextUserInput: string) => string | null
}
function isNumericallyEqual(a: string, b: string) {
const [aInteger, aDecimal] = toParts(a)
const [bInteger, bDecimal] = toParts(b)
return aInteger === bInteger && aDecimal === bDecimal
function toParts(num: string) {
let [integer, decimal] = num.split('.')
integer = integer?.match(/([1-9]\d*)/)?.[1] || ''
decimal = decimal?.match(/(\d*[1-9])/)?.[1] || ''
return [integer, decimal]
}
}
const NumericInput = forwardRef<HTMLInputElement, EnforcedNumericInputProps>(function NumericInput(
{ value, onChange, enforcer, pattern, ...props }: EnforcedNumericInputProps,
ref
) {
const [state, setState] = useState(value ?? '')
useEffect(() => {
if (!isNumericallyEqual(state, value)) {
setState(value ?? '')
}
}, [value, state, setState])
const validateChange = useCallback(
(event) => {
const nextInput = enforcer(event.target.value.replace(/,/g, '.'))
if (nextInput !== null) {
setState(nextInput ?? '')
if (!isNumericallyEqual(nextInput, value)) {
onChange(nextInput)
}
(event: ChangeEvent<HTMLInputElement>) => {
const nextInput = enforcer(event.target.value.replace(/,/g, '.'))?.replace(/^0+$/, '0')
if (nextInput !== undefined) {
onChange(nextInput)
}
},
[value, onChange, enforcer]
[enforcer, onChange]
)
return (
<Input
value={state}
value={value}
onChange={validateChange}
// universal input options
inputMode="decimal"

View File

@@ -1,6 +1,5 @@
import { useLingui } from '@lingui/react'
import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
import { useUSDCValue } from 'hooks/useUSDCPrice'
import { loadingTransitionCss } from 'lib/css/loading'
import {
useIsSwapFieldIndependent,
@@ -70,18 +69,16 @@ export function useFormattedFieldAmount({ disabled, currencyAmount, fieldAmount
export default function Input({ disabled, focused }: InputProps) {
const { i18n } = useLingui()
const {
currencyBalances: { [Field.INPUT]: balance },
[Field.INPUT]: { balance, amount: tradeCurrencyAmount, usdc },
trade: { state: tradeState },
tradeCurrencyAmounts: { [Field.INPUT]: swapInputCurrencyAmount },
} = useSwapInfo()
const inputUSDC = useUSDCValue(swapInputCurrencyAmount)
const [swapInputAmount, updateSwapInputAmount] = useSwapAmount(Field.INPUT)
const [swapInputCurrency, updateSwapInputCurrency] = useSwapCurrency(Field.INPUT)
const [inputAmount, updateInputAmount] = useSwapAmount(Field.INPUT)
const [inputCurrency, updateInputCurrency] = useSwapCurrency(Field.INPUT)
const inputCurrencyAmount = useSwapCurrencyAmount(Field.INPUT)
// extract eagerly in case of reversal
usePrefetchCurrencyColor(swapInputCurrency)
usePrefetchCurrencyColor(inputCurrency)
const isRouteLoading = tradeState === TradeState.SYNCING || tradeState === TradeState.LOADING
const isDependentField = !useIsSwapFieldIndependent(Field.INPUT)
@@ -99,32 +96,30 @@ export default function Input({ disabled, focused }: InputProps) {
const balanceColor = useMemo(() => {
const insufficientBalance =
balance &&
(inputCurrencyAmount ? inputCurrencyAmount.greaterThan(balance) : swapInputCurrencyAmount?.greaterThan(balance))
(inputCurrencyAmount ? inputCurrencyAmount.greaterThan(balance) : tradeCurrencyAmount?.greaterThan(balance))
return insufficientBalance ? 'error' : undefined
}, [balance, inputCurrencyAmount, swapInputCurrencyAmount])
}, [balance, inputCurrencyAmount, tradeCurrencyAmount])
const amount = useFormattedFieldAmount({
disabled,
currencyAmount: swapInputCurrencyAmount,
fieldAmount: swapInputAmount,
currencyAmount: tradeCurrencyAmount,
fieldAmount: inputAmount,
})
return (
<InputColumn gap={0.5} approved={mockApproved}>
<TokenInput
currency={swapInputCurrency}
currency={inputCurrency}
amount={amount}
max={max}
disabled={disabled}
onChangeInput={updateSwapInputAmount}
onChangeCurrency={updateSwapInputCurrency}
onChangeInput={updateInputAmount}
onChangeCurrency={updateInputCurrency}
loading={isLoading}
>
<ThemedText.Body2 color="secondary" userSelect>
<Row>
<USDC isLoading={isRouteLoading}>
{inputUSDC ? `$${formatCurrencyAmount(inputUSDC, 6, 'en', 2)}` : '-'}
</USDC>
<USDC isLoading={isRouteLoading}>{usdc ? `$${formatCurrencyAmount(usdc, 6, 'en', 2)}` : '-'}</USDC>
{balance && (
<Balance color={balanceColor} focused={focused}>
Balance: <span>{formatCurrencyAmount(balance, 4, i18n.locale)}</span>

View File

@@ -5,7 +5,6 @@ import { useAtomValue } from 'jotai/utils'
import BrandedFooter from 'lib/components/BrandedFooter'
import { useIsSwapFieldIndependent, useSwapAmount, useSwapCurrency, useSwapInfo } from 'lib/hooks/swap'
import useCurrencyColor from 'lib/hooks/useCurrencyColor'
import useUSDCPriceImpact from 'lib/hooks/useUSDCPriceImpact'
import { Field } from 'lib/state/swap'
import styled, { DynamicThemeProvider, ThemedText } from 'lib/theme'
import { PropsWithChildren } from 'react'
@@ -39,9 +38,9 @@ export default function Output({ disabled, focused, children }: PropsWithChildre
const { i18n } = useLingui()
const {
currencyBalances: { [Field.OUTPUT]: balance },
[Field.OUTPUT]: { balance, amount: outputCurrencyAmount, usdc: outputUSDC },
trade: { state: tradeState },
tradeCurrencyAmounts: { [Field.INPUT]: inputCurrencyAmount, [Field.OUTPUT]: outputCurrencyAmount },
impact,
} = useSwapInfo()
const [swapOutputAmount, updateSwapOutputAmount] = useSwapAmount(Field.OUTPUT)
@@ -58,12 +57,6 @@ export default function Output({ disabled, focused, children }: PropsWithChildre
// different state true/null/false allow smoother color transition
const hasColor = swapOutputCurrency ? Boolean(color) || null : false
const {
outputUSDC,
priceImpact,
warning: priceImpactWarning,
} = useUSDCPriceImpact(inputCurrencyAmount, outputCurrencyAmount)
const amount = useFormattedFieldAmount({
disabled,
currencyAmount: outputCurrencyAmount,
@@ -90,7 +83,7 @@ export default function Output({ disabled, focused, children }: PropsWithChildre
<Row>
<USDC gap={0.5} isLoading={isRouteLoading}>
{outputUSDC ? `$${formatCurrencyAmount(outputUSDC, 6, 'en', 2)}` : '-'}{' '}
{priceImpact && <ThemedText.Body2 color={priceImpactWarning}>({priceImpact})</ThemedText.Body2>}
{impact && <ThemedText.Body2 color={impact.warning}>({impact.toString()})</ThemedText.Body2>}
</USDC>
{balance && (
<Balance focused={focused}>

View File

@@ -1,6 +1,6 @@
import { useLingui } from '@lingui/react'
import { Trade } from '@uniswap/router-sdk'
import { Currency, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import Row from 'lib/components/Row'
import { ThemedText } from 'lib/theme'
import formatLocaleNumber from 'lib/utils/formatLocaleNumber'
@@ -11,7 +11,7 @@ import { TextButton } from '../Button'
interface PriceProps {
trade: Trade<Currency, Currency, TradeType>
outputUSDC?: CurrencyAmount<Token>
outputUSDC?: CurrencyAmount<Currency>
}
/** Displays the price of a trade. If outputUSDC is included, also displays the unit price. */

View File

@@ -1,6 +1,7 @@
import { Trans } from '@lingui/macro'
import ErrorDialog, { StatusHeader } from 'lib/components/Error/ErrorDialog'
import EtherscanLink from 'lib/components/EtherscanLink'
import Rule from 'lib/components/Rule'
import SwapSummary from 'lib/components/Swap/Summary'
import useInterval from 'lib/hooks/useInterval'
import { CheckCircle, Clock, Spinner } from 'lib/icons'
@@ -84,6 +85,7 @@ function TransactionStatus({ tx, onClose }: TransactionStatusProps) {
<SwapSummary input={tx.info.inputCurrencyAmount} output={tx.info.outputCurrencyAmount} />
) : null}
</StatusHeader>
<Rule />
<TransactionRow flex>
<ThemedText.ButtonSmall>
<EtherscanLink type={ExplorerDataType.TRANSACTION} data={tx.info.response.hash}>

View File

@@ -22,8 +22,11 @@ const UNI = (function () {
function Fixture() {
const setState = useUpdateAtom(swapAtom)
const {
slippage,
[Field.INPUT]: { usdc: inputUSDC },
[Field.OUTPUT]: { usdc: outputUSDC },
trade: { trade },
slippage,
impact,
} = useSwapInfo()
useEffect(() => {
@@ -37,7 +40,14 @@ function Fixture() {
return trade ? (
<Modal color="dialog">
<SummaryDialog onConfirm={() => void 0} trade={trade} slippage={slippage} />
<SummaryDialog
onConfirm={async () => void 0}
trade={trade}
slippage={slippage}
inputUSDC={inputUSDC}
outputUSDC={outputUSDC}
impact={impact}
/>
</Modal>
) : null
}

View File

@@ -1,10 +1,12 @@
import { t } from '@lingui/macro'
import { useLingui } from '@lingui/react'
import { Trade } from '@uniswap/router-sdk'
import { Currency, Percent, TradeType } from '@uniswap/sdk-core'
import { Currency, TradeType } from '@uniswap/sdk-core'
import { useAtomValue } from 'jotai/utils'
import Column from 'lib/components/Column'
import Row from 'lib/components/Row'
import { Slippage } from 'lib/hooks/useSlippage'
import { PriceImpact } from 'lib/hooks/useUSDCPriceImpact'
import { feeOptionsAtom } from 'lib/state/swap'
import styled, { Color, ThemedText } from 'lib/theme'
import { useMemo } from 'react'
@@ -36,11 +38,11 @@ function Detail({ label, value, color }: DetailProps) {
interface DetailsProps {
trade: Trade<Currency, Currency, TradeType>
slippage: { auto: boolean; allowed: Percent; warning?: Color }
usdcPriceImpact: { priceImpact?: string; warning?: Color }
slippage: Slippage
impact?: PriceImpact
}
export default function Details({ trade, slippage, usdcPriceImpact }: DetailsProps) {
export default function Details({ trade, slippage, impact }: DetailsProps) {
const { inputAmount, outputAmount } = trade
const inputCurrency = inputAmount.currency
const outputCurrency = outputAmount.currency
@@ -61,8 +63,8 @@ export default function Details({ trade, slippage, usdcPriceImpact }: DetailsPro
}
}
if (usdcPriceImpact.priceImpact) {
rows.push([t`Price impact`, usdcPriceImpact.priceImpact, usdcPriceImpact.warning])
if (impact) {
rows.push([t`Price impact`, impact.toString(), impact.warning])
}
if (lpFeeAmount) {
@@ -85,15 +87,15 @@ export default function Details({ trade, slippage, usdcPriceImpact }: DetailsPro
return rows
}, [
feeOptions,
usdcPriceImpact,
lpFeeAmount,
trade,
slippage,
outputAmount,
i18n.locale,
integrator,
outputCurrency,
impact,
inputCurrency,
integrator,
lpFeeAmount,
outputAmount,
outputCurrency,
slippage,
trade,
])
return (

View File

@@ -1,6 +1,6 @@
import { useLingui } from '@lingui/react'
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
import useUSDCPriceImpact from 'lib/hooks/useUSDCPriceImpact'
import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
import { PriceImpact } from 'lib/hooks/useUSDCPriceImpact'
import { ArrowRight } from 'lib/icons'
import { ThemedText } from 'lib/theme'
import { PropsWithChildren } from 'react'
@@ -12,7 +12,7 @@ import TokenImg from '../../TokenImg'
interface TokenValueProps {
input: CurrencyAmount<Currency>
usdc?: CurrencyAmount<Token>
usdc?: CurrencyAmount<Currency>
}
function TokenValue({ input, usdc, children }: PropsWithChildren<TokenValueProps>) {
@@ -40,18 +40,18 @@ function TokenValue({ input, usdc, children }: PropsWithChildren<TokenValueProps
interface SummaryProps {
input: CurrencyAmount<Currency>
output: CurrencyAmount<Currency>
usdcPriceImpact?: ReturnType<typeof useUSDCPriceImpact>
inputUSDC?: CurrencyAmount<Currency>
outputUSDC?: CurrencyAmount<Currency>
impact?: PriceImpact
}
export default function Summary({ input, output, usdcPriceImpact }: SummaryProps) {
const { inputUSDC, outputUSDC, priceImpact, warning: priceImpactWarning } = usdcPriceImpact || {}
export default function Summary({ input, output, inputUSDC, outputUSDC, impact }: SummaryProps) {
return (
<Row gap={usdcPriceImpact ? 1 : 0.25}>
<Row gap={impact ? 1 : 0.25}>
<TokenValue input={input} usdc={inputUSDC} />
<ArrowRight />
<TokenValue input={output} usdc={outputUSDC}>
{priceImpact && <ThemedText.Caption color={priceImpactWarning}>({priceImpact})</ThemedText.Caption>}
{impact && <ThemedText.Caption color={impact.warning}>({impact.toString()})</ThemedText.Caption>}
</TokenValue>
</Row>
)

View File

@@ -1,16 +1,16 @@
import { Trans } from '@lingui/macro'
import { useLingui } from '@lingui/react'
import { Trade } from '@uniswap/router-sdk'
import { Currency, TradeType } from '@uniswap/sdk-core'
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import ActionButton, { Action } from 'lib/components/ActionButton'
import Column from 'lib/components/Column'
import { Header } from 'lib/components/Dialog'
import Expando from 'lib/components/Expando'
import Row from 'lib/components/Row'
import { Slippage } from 'lib/hooks/useSlippage'
import useUSDCPriceImpact from 'lib/hooks/useUSDCPriceImpact'
import { AlertTriangle, BarChart, Info } from 'lib/icons'
import styled, { Color, ThemedText } from 'lib/theme'
import { PriceImpact } from 'lib/hooks/useUSDCPriceImpact'
import { AlertTriangle, BarChart, Info, Spinner } from 'lib/icons'
import styled, { ThemedText } from 'lib/theme'
import { useCallback, useMemo, useState } from 'react'
import { formatCurrencyAmount } from 'utils/formatCurrencyAmount'
import { tradeMeaningfullyDiffers } from 'utils/tradeMeaningFullyDiffer'
@@ -41,16 +41,16 @@ const Body = styled(Column)<{ open: boolean }>`
}
`
function Subhead({ priceImpact, slippage }: { priceImpact: { warning?: Color }; slippage: Slippage }) {
function Subhead({ impact, slippage }: { impact?: PriceImpact; slippage: Slippage }) {
return (
<Row gap={0.5}>
{priceImpact.warning || slippage.warning ? (
<AlertTriangle color={priceImpact.warning || slippage.warning} />
{impact?.warning || slippage.warning ? (
<AlertTriangle color={impact?.warning || slippage.warning} />
) : (
<Info color="secondary" />
)}
<ThemedText.Subhead2 color={priceImpact.warning || slippage.warning || 'secondary'}>
{priceImpact.warning ? (
<ThemedText.Subhead2 color={impact?.warning || slippage.warning || 'secondary'}>
{impact?.warning ? (
<Trans>High price impact</Trans>
) : slippage.warning ? (
<Trans>High slippage</Trans>
@@ -94,16 +94,27 @@ function ConfirmButton({
}: {
trade: Trade<Currency, Currency, TradeType>
highPriceImpact: boolean
onConfirm: () => void
onConfirm: () => Promise<void>
}) {
const [ackPriceImpact, setAckPriceImpact] = useState(false)
const [ackTrade, setAckTrade] = useState(trade)
const doesTradeDiffer = useMemo(
() => Boolean(trade && ackTrade && tradeMeaningfullyDiffers(trade, ackTrade)),
[ackTrade, trade]
)
const [isPending, setIsPending] = useState(false)
const onClick = useCallback(async () => {
setIsPending(true)
await onConfirm()
setIsPending(false)
}, [onConfirm])
const action = useMemo((): Action | undefined => {
if (doesTradeDiffer) {
if (isPending) {
return { message: <Trans>Confirm in your wallet</Trans>, icon: Spinner }
} else if (doesTradeDiffer) {
return {
message: <Trans>Price updated</Trans>,
icon: BarChart,
@@ -118,10 +129,10 @@ function ConfirmButton({
}
}
return
}, [ackPriceImpact, doesTradeDiffer, highPriceImpact, trade])
}, [ackPriceImpact, doesTradeDiffer, highPriceImpact, isPending, trade])
return (
<ActionButton onClick={onConfirm} action={action}>
<ActionButton onClick={onClick} action={action}>
<Trans>Confirm swap</Trans>
</ActionButton>
)
@@ -130,12 +141,14 @@ function ConfirmButton({
interface SummaryDialogProps {
trade: Trade<Currency, Currency, TradeType>
slippage: Slippage
onConfirm: () => void
inputUSDC?: CurrencyAmount<Currency>
outputUSDC?: CurrencyAmount<Currency>
impact?: PriceImpact
onConfirm: () => Promise<void>
}
export function SummaryDialog({ trade, slippage, onConfirm }: SummaryDialogProps) {
export function SummaryDialog({ trade, slippage, inputUSDC, outputUSDC, impact, onConfirm }: SummaryDialogProps) {
const { inputAmount, outputAmount } = trade
const usdcPriceImpact = useUSDCPriceImpact(inputAmount, outputAmount)
const [open, setOpen] = useState(false)
const onExpand = useCallback(() => setOpen((open) => !open), [])
@@ -145,22 +158,23 @@ export function SummaryDialog({ trade, slippage, onConfirm }: SummaryDialogProps
<Header title={<Trans>Swap summary</Trans>} ruled />
<Body flex align="stretch" padded gap={0.75} open={open}>
<Heading gap={0.75} flex justify="center">
<Summary input={inputAmount} output={outputAmount} usdcPriceImpact={usdcPriceImpact} />
<Summary
input={inputAmount}
output={outputAmount}
inputUSDC={inputUSDC}
outputUSDC={outputUSDC}
impact={impact}
/>
<Price trade={trade} />
</Heading>
<Column gap={open ? 0 : 0.75} style={{ transition: 'gap 0.25s' }}>
<Expando
title={<Subhead priceImpact={usdcPriceImpact} slippage={slippage} />}
open={open}
onExpand={onExpand}
height={7.25}
>
<Details trade={trade} slippage={slippage} usdcPriceImpact={usdcPriceImpact} />
<Expando title={<Subhead impact={impact} slippage={slippage} />} open={open} onExpand={onExpand} height={7}>
<Details trade={trade} slippage={slippage} impact={impact} />
</Expando>
<Footing>
<Estimate trade={trade} slippage={slippage} />
</Footing>
<ConfirmButton trade={trade} highPriceImpact={usdcPriceImpact.warning === 'error'} onConfirm={onConfirm} />
<ConfirmButton trade={trade} highPriceImpact={impact?.warning === 'error'} onConfirm={onConfirm} />
</Column>
</Body>
</>

View File

@@ -1,237 +0,0 @@
import { Trans } from '@lingui/macro'
import { Token } from '@uniswap/sdk-core'
import { useUpdateAtom } from 'jotai/utils'
import { WrapErrorText } from 'lib/components/Swap/WrapErrorText'
import { useSwapCurrencyAmount, useSwapInfo, useSwapTradeType } from 'lib/hooks/swap'
import {
ApproveOrPermitState,
useApproveOrPermit,
useSwapApprovalOptimizedTrade,
useSwapRouterAddress,
} from 'lib/hooks/swap/useSwapApproval'
import { useSwapCallback } from 'lib/hooks/swap/useSwapCallback'
import useWrapCallback, { WrapError, WrapType } from 'lib/hooks/swap/useWrapCallback'
import { useAddTransaction, usePendingApproval } from 'lib/hooks/transactions'
import useActiveWeb3React from 'lib/hooks/useActiveWeb3React'
import useTransactionDeadline from 'lib/hooks/useTransactionDeadline'
import { Spinner } from 'lib/icons'
import { displayTxHashAtom, Field } from 'lib/state/swap'
import { TransactionType } from 'lib/state/transactions'
import { useTheme } from 'lib/theme'
import { memo, useCallback, useEffect, useMemo, useState } from 'react'
import invariant from 'tiny-invariant'
import { ExplorerDataType } from 'utils/getExplorerLink'
import ActionButton, { ActionButtonProps } from '../ActionButton'
import Dialog from '../Dialog'
import EtherscanLink from '../EtherscanLink'
import { SummaryDialog } from './Summary'
interface SwapButtonProps {
disabled?: boolean
}
function useIsPendingApproval(token?: Token, spender?: string): boolean {
return Boolean(usePendingApproval(token, spender))
}
export default memo(function SwapButton({ disabled }: SwapButtonProps) {
const { account, chainId } = useActiveWeb3React()
const { tokenColorExtraction } = useTheme()
const {
slippage,
currencies: { [Field.INPUT]: inputCurrency },
currencyBalances: { [Field.INPUT]: inputCurrencyBalance },
feeOptions,
trade,
tradeCurrencyAmounts: { [Field.INPUT]: inputTradeCurrencyAmount, [Field.OUTPUT]: outputTradeCurrencyAmount },
} = useSwapInfo()
const tradeType = useSwapTradeType()
const [activeTrade, setActiveTrade] = useState<typeof trade.trade | undefined>()
useEffect(() => {
setActiveTrade((activeTrade) => activeTrade && trade.trade)
}, [trade])
// clear active trade on chain change
useEffect(() => {
setActiveTrade(undefined)
}, [chainId])
// TODO(zzmp): Return an optimized trade directly from useSwapInfo.
const optimizedTrade =
// Use trade.trade if there is no swap optimized trade. This occurs if approvals are still pending.
useSwapApprovalOptimizedTrade(trade.trade, slippage.allowed, useIsPendingApproval) || trade.trade
const approvalCurrencyAmount = useSwapCurrencyAmount(Field.INPUT)
const { approvalState, signatureData, handleApproveOrPermit } = useApproveOrPermit(
optimizedTrade,
slippage.allowed,
useIsPendingApproval,
approvalCurrencyAmount
)
const approvalHash = usePendingApproval(
inputCurrency?.isToken ? inputCurrency : undefined,
useSwapRouterAddress(optimizedTrade)
)
const addTransaction = useAddTransaction()
const onApprove = useCallback(() => {
handleApproveOrPermit().then((transaction) => {
if (transaction) {
addTransaction({ type: TransactionType.APPROVAL, ...transaction })
}
})
}, [addTransaction, handleApproveOrPermit])
const { type: wrapType, callback: wrapCallback, error: wrapError, loading: wrapLoading } = useWrapCallback()
const disableSwap = useMemo(
() =>
disabled ||
!chainId ||
wrapLoading ||
(wrapType !== WrapType.NOT_APPLICABLE && wrapError) ||
approvalState === ApproveOrPermitState.PENDING_SIGNATURE ||
!(inputTradeCurrencyAmount && inputCurrencyBalance) ||
inputCurrencyBalance.lessThan(inputTradeCurrencyAmount),
[disabled, chainId, wrapLoading, wrapType, wrapError, approvalState, inputTradeCurrencyAmount, inputCurrencyBalance]
)
const actionProps = useMemo((): Partial<ActionButtonProps> | undefined => {
if (disableSwap) {
return { disabled: true }
}
if (
wrapType === WrapType.NOT_APPLICABLE &&
(approvalState === ApproveOrPermitState.REQUIRES_APPROVAL ||
approvalState === ApproveOrPermitState.REQUIRES_SIGNATURE)
) {
const currency = inputCurrency || approvalCurrencyAmount?.currency
invariant(currency)
return {
action: {
message:
approvalState === ApproveOrPermitState.REQUIRES_SIGNATURE ? (
<Trans>Allow {currency.symbol} first</Trans>
) : (
<Trans>Approve {currency.symbol} first</Trans>
),
onClick: onApprove,
children:
approvalState === ApproveOrPermitState.REQUIRES_SIGNATURE ? <Trans>Allow</Trans> : <Trans>Approve</Trans>,
},
}
}
if (approvalState === ApproveOrPermitState.PENDING_APPROVAL) {
return {
disabled: true,
action: {
message: (
<EtherscanLink type={ExplorerDataType.TRANSACTION} data={approvalHash}>
<Trans>Approval pending</Trans>
</EtherscanLink>
),
icon: Spinner,
onClick: () => void 0, // @TODO: should not require an onclick
children: <Trans>Approve</Trans>,
},
}
}
return {}
}, [approvalCurrencyAmount?.currency, approvalHash, approvalState, disableSwap, inputCurrency, onApprove, wrapType])
const deadline = useTransactionDeadline()
// the callback to execute the swap
const { callback: swapCallback } = useSwapCallback({
trade: optimizedTrade,
allowedSlippage: slippage.allowed,
recipientAddressOrName: account ?? null,
signatureData,
deadline,
feeOptions,
})
//@TODO(ianlapham): add a loading state, process errors
const setDisplayTxHash = useUpdateAtom(displayTxHashAtom)
const onConfirm = useCallback(() => {
swapCallback?.()
.then((response) => {
setDisplayTxHash(response.hash)
invariant(inputTradeCurrencyAmount && outputTradeCurrencyAmount)
addTransaction({
response,
type: TransactionType.SWAP,
tradeType,
inputCurrencyAmount: inputTradeCurrencyAmount,
outputCurrencyAmount: outputTradeCurrencyAmount,
})
})
.catch((error) => {
//@TODO(ianlapham): add error handling
console.log(error)
})
.finally(() => {
setActiveTrade(undefined)
})
}, [addTransaction, inputTradeCurrencyAmount, outputTradeCurrencyAmount, setDisplayTxHash, swapCallback, tradeType])
const ButtonText = useCallback(() => {
if ((wrapType === WrapType.WRAP || wrapType === WrapType.UNWRAP) && wrapError !== WrapError.NO_ERROR) {
return <WrapErrorText wrapError={wrapError} />
}
switch (wrapType) {
case WrapType.UNWRAP:
return <Trans>Unwrap</Trans>
case WrapType.WRAP:
return <Trans>Wrap</Trans>
case WrapType.NOT_APPLICABLE:
default:
return <Trans>Review swap</Trans>
}
}, [wrapError, wrapType])
const handleDialogClose = useCallback(() => {
setActiveTrade(undefined)
}, [])
const handleActionButtonClick = useCallback(async () => {
if (wrapType === WrapType.NOT_APPLICABLE) {
setActiveTrade(trade.trade)
} else {
const transaction = await wrapCallback()
addTransaction({
response: transaction,
type: TransactionType.WRAP,
unwrapped: wrapType === WrapType.UNWRAP,
currencyAmountRaw: transaction.value?.toString() ?? '0',
chainId,
})
setDisplayTxHash(transaction.hash)
}
}, [addTransaction, chainId, setDisplayTxHash, trade.trade, wrapCallback, wrapType])
return (
<>
<ActionButton
color={tokenColorExtraction ? 'interactive' : 'accent'}
onClick={handleActionButtonClick}
{...actionProps}
>
<ButtonText />
</ActionButton>
{activeTrade && (
<Dialog color="dialog" onClose={handleDialogClose}>
<SummaryDialog trade={activeTrade} slippage={slippage} onConfirm={onConfirm} />
</Dialog>
)}
</>
)
})

View File

@@ -0,0 +1,195 @@
import { Trans } from '@lingui/macro'
import { useAtomValue, useUpdateAtom } from 'jotai/utils'
import { useSwapInfo } from 'lib/hooks/swap'
import { useSwapApprovalOptimizedTrade } from 'lib/hooks/swap/useSwapApproval'
import { useSwapCallback } from 'lib/hooks/swap/useSwapCallback'
import useWrapCallback, { WrapType } from 'lib/hooks/swap/useWrapCallback'
import { useAddTransaction } from 'lib/hooks/transactions'
import useActiveWeb3React from 'lib/hooks/useActiveWeb3React'
import { useSetOldestValidBlock } from 'lib/hooks/useIsValidBlock'
import useTransactionDeadline from 'lib/hooks/useTransactionDeadline'
import { Spinner } from 'lib/icons'
import { displayTxHashAtom, feeOptionsAtom, Field } from 'lib/state/swap'
import { TransactionType } from 'lib/state/transactions'
import { useTheme } from 'lib/theme'
import { isAnimating } from 'lib/utils/animations'
import { memo, useCallback, useEffect, useMemo, useState } from 'react'
import invariant from 'tiny-invariant'
import ActionButton, { ActionButtonProps } from '../../ActionButton'
import Dialog from '../../Dialog'
import { SummaryDialog } from '../Summary'
import useApprovalData, { useIsPendingApproval } from './useApprovalData'
interface SwapButtonProps {
disabled?: boolean
}
export default memo(function SwapButton({ disabled }: SwapButtonProps) {
const { account, chainId } = useActiveWeb3React()
const {
[Field.INPUT]: {
currency: inputCurrency,
amount: inputCurrencyAmount,
balance: inputCurrencyBalance,
usdc: inputUSDC,
},
[Field.OUTPUT]: { usdc: outputUSDC },
trade,
slippage,
impact,
} = useSwapInfo()
const feeOptions = useAtomValue(feeOptionsAtom)
// TODO(zzmp): Return an optimized trade directly from useSwapInfo.
const optimizedTrade =
// Use trade.trade if there is no swap optimized trade. This occurs if approvals are still pending.
useSwapApprovalOptimizedTrade(trade.trade, slippage.allowed, useIsPendingApproval) || trade.trade
const deadline = useTransactionDeadline()
const { type: wrapType, callback: wrapCallback } = useWrapCallback()
const { approvalAction, signatureData } = useApprovalData(optimizedTrade, slippage, inputCurrencyAmount)
const { callback: swapCallback } = useSwapCallback({
trade: optimizedTrade,
allowedSlippage: slippage.allowed,
recipientAddressOrName: account ?? null,
signatureData,
deadline,
feeOptions,
})
const [open, setOpen] = useState(false)
// Close the review modal if there is no available trade.
useEffect(() => setOpen((open) => (trade.trade ? open : false)), [trade.trade])
// Close the review modal on chain change.
useEffect(() => setOpen(false), [chainId])
const addTransaction = useAddTransaction()
const setDisplayTxHash = useUpdateAtom(displayTxHashAtom)
const setOldestValidBlock = useSetOldestValidBlock()
const [isPending, setIsPending] = useState(false)
const onWrap = useCallback(async () => {
setIsPending(true)
try {
const transaction = await wrapCallback?.()
if (!transaction) return
addTransaction({
response: transaction,
type: TransactionType.WRAP,
unwrapped: wrapType === WrapType.UNWRAP,
currencyAmountRaw: transaction.value?.toString() ?? '0',
chainId,
})
setDisplayTxHash(transaction.hash)
} catch (e) {
// TODO(zzmp): Surface errors from wrap.
console.log(e)
}
// Only reset pending after any queued animations to avoid layout thrashing, because a
// successful wrap will open the status dialog and immediately cover the button.
const postWrap = () => {
setIsPending(false)
document.removeEventListener('animationend', postWrap)
}
if (isAnimating(document)) {
document.addEventListener('animationend', postWrap)
} else {
postWrap()
}
}, [addTransaction, chainId, setDisplayTxHash, wrapCallback, wrapType])
// Reset the pending state if user updates the swap.
useEffect(() => setIsPending(false), [inputCurrencyAmount, trade])
const onSwap = useCallback(async () => {
try {
const transaction = await swapCallback?.()
if (!transaction) return
invariant(trade.trade)
addTransaction({
response: transaction,
type: TransactionType.SWAP,
tradeType: trade.trade.tradeType,
inputCurrencyAmount: trade.trade.inputAmount,
outputCurrencyAmount: trade.trade.outputAmount,
})
setDisplayTxHash(transaction.hash)
// Set the block containing the response to the oldest valid block to ensure that the
// completed trade's impact is reflected in future fetched trades.
transaction.wait(1).then((receipt) => {
setOldestValidBlock(receipt.blockNumber)
})
// Only reset open after any queued animations to avoid layout thrashing, because a
// successful swap will open the status dialog and immediately cover the summary dialog.
const postSwap = () => {
setOpen(false)
document.removeEventListener('animationend', postSwap)
}
if (isAnimating(document)) {
document.addEventListener('animationend', postSwap)
} else {
postSwap()
}
} catch (e) {
// TODO(zzmp): Surface errors from swap.
console.log(e)
}
}, [addTransaction, setDisplayTxHash, setOldestValidBlock, swapCallback, trade.trade])
const disableSwap = useMemo(
() =>
disabled ||
!chainId ||
(wrapType === WrapType.NONE && !optimizedTrade) ||
!(inputCurrencyAmount && inputCurrencyBalance) ||
inputCurrencyBalance.lessThan(inputCurrencyAmount),
[disabled, wrapType, optimizedTrade, chainId, inputCurrencyAmount, inputCurrencyBalance]
)
const actionProps = useMemo((): Partial<ActionButtonProps> | undefined => {
if (disableSwap) {
return { disabled: true }
} else if (wrapType === WrapType.NONE) {
return approvalAction ? { action: approvalAction } : { onClick: () => setOpen(true) }
} else {
return isPending
? { action: { message: <Trans>Confirm in your wallet</Trans>, icon: Spinner } }
: { onClick: onWrap }
}
}, [approvalAction, disableSwap, isPending, onWrap, wrapType])
const Label = useCallback(() => {
switch (wrapType) {
case WrapType.UNWRAP:
return <Trans>Unwrap {inputCurrency?.symbol}</Trans>
case WrapType.WRAP:
return <Trans>Wrap {inputCurrency?.symbol}</Trans>
case WrapType.NONE:
default:
return <Trans>Review swap</Trans>
}
}, [inputCurrency?.symbol, wrapType])
const onClose = useCallback(() => setOpen(false), [])
const { tokenColorExtraction } = useTheme()
return (
<>
<ActionButton color={tokenColorExtraction ? 'interactive' : 'accent'} {...actionProps}>
<Label />
</ActionButton>
{open && trade.trade && (
<Dialog color="dialog" onClose={onClose}>
<SummaryDialog
trade={trade.trade}
slippage={slippage}
inputUSDC={inputUSDC}
outputUSDC={outputUSDC}
impact={impact}
onConfirm={onSwap}
/>
</Dialog>
)}
</>
)
})

View File

@@ -0,0 +1,88 @@
import { Trans } from '@lingui/macro'
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
import { Action } from 'lib/components/ActionButton'
import EtherscanLink from 'lib/components/EtherscanLink'
import {
ApproveOrPermitState,
useApproveOrPermit,
useSwapApprovalOptimizedTrade,
useSwapRouterAddress,
} from 'lib/hooks/swap/useSwapApproval'
import { useAddTransaction, usePendingApproval } from 'lib/hooks/transactions'
import { Slippage } from 'lib/hooks/useSlippage'
import { Spinner } from 'lib/icons'
import { TransactionType } from 'lib/state/transactions'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { ExplorerDataType } from 'utils/getExplorerLink'
export function useIsPendingApproval(token?: Token, spender?: string): boolean {
return Boolean(usePendingApproval(token, spender))
}
export default function useApprovalData(
trade: ReturnType<typeof useSwapApprovalOptimizedTrade>,
slippage: Slippage,
currencyAmount?: CurrencyAmount<Currency>
) {
const currency = currencyAmount?.currency
const { approvalState, signatureData, handleApproveOrPermit } = useApproveOrPermit(
trade,
slippage.allowed,
useIsPendingApproval,
currencyAmount
)
const [isPending, setIsPending] = useState(false)
const addTransaction = useAddTransaction()
const onApprove = useCallback(async () => {
setIsPending(true)
const transaction = await handleApproveOrPermit()
if (transaction) {
addTransaction({ type: TransactionType.APPROVAL, ...transaction })
}
setIsPending(false)
}, [addTransaction, handleApproveOrPermit])
// Reset the pending state if currency changes.
useEffect(() => setIsPending(false), [currency])
const approvalHash = usePendingApproval(currency?.isToken ? currency : undefined, useSwapRouterAddress(trade))
const approvalAction = useMemo((): Action | undefined => {
if (!trade || !currency) return
switch (approvalState) {
case ApproveOrPermitState.REQUIRES_APPROVAL:
if (isPending) {
return { message: <Trans>Approve in your wallet</Trans>, icon: Spinner }
}
return {
message: <Trans>Approve {currency.symbol} first</Trans>,
onClick: onApprove,
children: <Trans>Approve</Trans>,
}
case ApproveOrPermitState.REQUIRES_SIGNATURE:
if (isPending) {
return { message: <Trans>Allow in your wallet</Trans>, icon: Spinner }
}
return {
message: <Trans>Allow {currency.symbol} first</Trans>,
onClick: onApprove,
children: <Trans>Allow</Trans>,
}
case ApproveOrPermitState.PENDING_APPROVAL:
return {
message: (
<EtherscanLink type={ExplorerDataType.TRANSACTION} data={approvalHash}>
<Trans>Approval pending</Trans>
</EtherscanLink>
),
icon: Spinner,
}
case ApproveOrPermitState.PENDING_SIGNATURE:
return { message: <Trans>Allowance pending</Trans>, icon: Spinner }
case ApproveOrPermitState.APPROVED:
return
}
}, [approvalHash, approvalState, currency, isPending, onApprove, trade])
return { approvalAction, signatureData: signatureData ?? undefined }
}

View File

@@ -81,5 +81,5 @@ export default function SwapPropValidator(props: ValidatorProps) {
}
}, [defaultInputTokenAddress, defaultInputAmount, defaultOutputTokenAddress, defaultOutputAmount])
return <>{props.children}</>
return null
}

View File

@@ -1,11 +1,10 @@
import { Trans } from '@lingui/macro'
import { Currency, TradeType } from '@uniswap/sdk-core'
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import Column from 'lib/components/Column'
import Rule from 'lib/components/Rule'
import Tooltip from 'lib/components/Tooltip'
import { loadingCss } from 'lib/css/loading'
import { WrapType } from 'lib/hooks/swap/useWrapCallback'
import useUSDCPriceImpact from 'lib/hooks/useUSDCPriceImpact'
import { PriceImpact } from 'lib/hooks/useUSDCPriceImpact'
import { AlertTriangle, Icon, Info, InlineSpinner } from 'lib/icons'
import styled, { ThemedText } from 'lib/theme'
import { ReactNode, useCallback } from 'react'
@@ -38,7 +37,7 @@ export function ConnectWallet() {
}
export function UnsupportedNetwork() {
return <Caption caption={<Trans>Unsupported network - switch to another to trade.</Trans>} />
return <Caption caption={<Trans>Unsupported network - switch to another to trade</Trans>} />
}
export function InsufficientBalance({ currency }: { currency: Currency }) {
@@ -49,6 +48,10 @@ export function InsufficientLiquidity() {
return <Caption caption={<Trans>Insufficient liquidity in the pool for your trade</Trans>} />
}
export function Error() {
return <Caption caption={<Trans>Error fetching trade</Trans>} />
}
export function Empty() {
return <Caption icon={Info} caption={<Trans>Enter an amount</Trans>} />
}
@@ -66,28 +69,37 @@ export function LoadingTrade() {
)
}
export function WrapCurrency({ loading, wrapType }: { loading: boolean; wrapType: WrapType.UNWRAP | WrapType.WRAP }) {
const WrapText = useCallback(() => {
if (wrapType === WrapType.WRAP) {
return loading ? <Trans>Wrapping native currency.</Trans> : <Trans>Wrap native currency.</Trans>
}
return loading ? <Trans>Unwrapping native currency.</Trans> : <Trans>Unwrap native currency.</Trans>
}, [loading, wrapType])
export function WrapCurrency({ inputCurrency, outputCurrency }: { inputCurrency: Currency; outputCurrency: Currency }) {
const Text = useCallback(
() => (
<Trans>
Convert {inputCurrency.symbol} to {outputCurrency.symbol} with no slippage
</Trans>
),
[inputCurrency.symbol, outputCurrency.symbol]
)
return <Caption icon={Info} caption={<WrapText />} />
return <Caption icon={Info} caption={<Text />} />
}
export function Trade({ trade }: { trade: InterfaceTrade<Currency, Currency, TradeType> }) {
const { inputAmount: input, outputAmount: output } = trade
const { outputUSDC, priceImpact, warning: priceImpactWarning } = useUSDCPriceImpact(input, output)
export function Trade({
trade,
outputUSDC,
impact,
}: {
trade: InterfaceTrade<Currency, Currency, TradeType>
outputUSDC?: CurrencyAmount<Currency>
impact?: PriceImpact
}) {
return (
<>
<Tooltip placement="bottom" icon={priceImpactWarning ? AlertTriangle : Info}>
<Tooltip placement="bottom" icon={impact?.warning ? AlertTriangle : Info}>
<Column gap={0.75}>
{priceImpactWarning && (
{impact?.warning && (
<>
<ThemedText.Caption>
The output amount is estimated at {priceImpact} less than the input amount due to high price impact
The output amount is estimated at {impact.toString()} less than the input amount due to high price
impact
</ThemedText.Caption>
<Rule />
</>

View File

@@ -20,13 +20,13 @@ const ToolbarRow = styled(Row)`
export default memo(function Toolbar({ disabled }: { disabled?: boolean }) {
const { chainId } = useActiveWeb3React()
const {
[Field.INPUT]: { currency: inputCurrency, balance: inputBalance, amount: inputAmount },
[Field.OUTPUT]: { currency: outputCurrency, usdc: outputUSDC },
trade: { trade, state },
currencies: { [Field.INPUT]: inputCurrency, [Field.OUTPUT]: outputCurrency },
currencyBalances: { [Field.INPUT]: balance },
impact,
} = useSwapInfo()
const isRouteLoading = state === TradeState.SYNCING || state === TradeState.LOADING
const isAmountPopulated = useIsAmountPopulated()
const { type: wrapType, loading: wrapLoading } = useWrapCallback()
const { type: wrapType } = useWrapCallback()
const caption = useMemo(() => {
if (disabled) {
return <Caption.ConnectWallet />
@@ -37,34 +37,39 @@ export default memo(function Toolbar({ disabled }: { disabled?: boolean }) {
}
if (inputCurrency && outputCurrency && isAmountPopulated) {
if (wrapType !== WrapType.NOT_APPLICABLE) {
return <Caption.WrapCurrency wrapType={wrapType} loading={wrapLoading} />
}
if (isRouteLoading) {
if (state === TradeState.SYNCING || state === TradeState.LOADING) {
return <Caption.LoadingTrade />
}
if (!trade?.swaps) {
if (inputBalance && inputAmount?.greaterThan(inputBalance)) {
return <Caption.InsufficientBalance currency={inputCurrency} />
}
if (wrapType !== WrapType.NONE) {
return <Caption.WrapCurrency inputCurrency={inputCurrency} outputCurrency={outputCurrency} />
}
if (state === TradeState.NO_ROUTE_FOUND || (trade && !trade.swaps)) {
return <Caption.InsufficientLiquidity />
}
if (balance && trade?.inputAmount.greaterThan(balance)) {
return <Caption.InsufficientBalance currency={trade.inputAmount.currency} />
if (trade?.inputAmount && trade.outputAmount) {
return <Caption.Trade trade={trade} outputUSDC={outputUSDC} impact={impact} />
}
if (trade.inputAmount && trade.outputAmount) {
return <Caption.Trade trade={trade} />
if (state === TradeState.INVALID) {
return <Caption.Error />
}
}
return <Caption.Empty />
}, [
balance,
chainId,
disabled,
impact,
inputAmount,
inputBalance,
inputCurrency,
isAmountPopulated,
isRouteLoading,
outputCurrency,
outputUSDC,
state,
trade,
wrapLoading,
wrapType,
])

View File

@@ -1,22 +0,0 @@
import { Trans } from '@lingui/macro'
import { WrapError } from 'lib/hooks/swap/useWrapCallback'
import useNativeCurrency from 'lib/hooks/useNativeCurrency'
export function WrapErrorText({ wrapError }: { wrapError: WrapError }) {
const native = useNativeCurrency()
const wrapped = native?.wrapped
switch (wrapError) {
case WrapError.ENTER_NATIVE_AMOUNT:
return <Trans>Enter {native?.symbol} amount</Trans>
case WrapError.ENTER_WRAPPED_AMOUNT:
return <Trans>Enter {wrapped?.symbol} amount</Trans>
case WrapError.INSUFFICIENT_NATIVE_BALANCE:
return <Trans>Insufficient {native?.symbol} balance</Trans>
case WrapError.INSUFFICIENT_WRAPPED_BALANCE:
return <Trans>Insufficient {wrapped?.symbol} balance</Trans>
case WrapError.NO_ERROR:
default:
return null
}
}

View File

@@ -47,11 +47,15 @@ export interface SwapProps extends TokenDefaults, FeeOptions {
onConnectWallet?: () => void
}
export default function Swap(props: SwapProps) {
function Updaters(props: SwapProps & { disabled: boolean }) {
useSyncTokenList(props.tokenList)
useSyncTokenDefaults(props)
useSyncConvenienceFee(props)
return props.disabled ? null : <SwapInfoUpdater />
}
export default function Swap(props: SwapProps) {
const { active, account } = useActiveWeb3React()
const [wrapper, setWrapper] = useState<HTMLDivElement | null>(null)
@@ -71,8 +75,9 @@ export default function Swap(props: SwapProps) {
const isInteractive = Boolean(active && onSupportedNetwork)
return (
<SwapPropValidator {...props}>
{isSwapSupported && <SwapInfoUpdater />}
<>
<SwapPropValidator {...props} />
<Updaters {...props} disabled={!isSwapSupported} />
<Header title={<Trans>Swap</Trans>}>
{active && <Wallet disabled={!account} onClick={props.onConnectWallet} />}
<Settings disabled={!isInteractive} />
@@ -92,6 +97,6 @@ export default function Swap(props: SwapProps) {
<StatusDialog tx={displayTx} onClose={() => setDisplayTxHash()} />
</Dialog>
)}
</SwapPropValidator>
</>
)
}

View File

@@ -3,7 +3,7 @@ import { useToken } from 'lib/hooks/useCurrency'
import useCurrencyLogoURIs from 'lib/hooks/useCurrencyLogoURIs'
import { MissingToken } from 'lib/icons'
import styled from 'lib/theme'
import { useCallback, useEffect, useState } from 'react'
import { useCallback, useMemo, useState } from 'react'
const badSrcs = new Set<string>()
@@ -17,20 +17,25 @@ function TokenImg({ token, ...rest }: TokenImgProps) {
// Use the wrapped token info so that it includes the logoURI.
const tokenInfo = useToken(token.isToken ? token.wrapped.address : undefined) ?? token
// TODO(zzmp): TokenImg takes a frame to switch.
const srcs = useCurrencyLogoURIs(tokenInfo)
const [src, setSrc] = useState<string | undefined>()
useEffect(() => {
setSrc(srcs.find((src) => !badSrcs.has(src)))
}, [srcs])
const onError = useCallback(() => {
if (src) badSrcs.add(src)
setSrc(srcs.find((src) => !badSrcs.has(src)))
}, [src, srcs])
if (src) {
return <img src={src} alt={tokenInfo.name || tokenInfo.symbol} onError={onError} {...rest} />
}
return <MissingToken color="secondary" {...rest} />
const [attempt, setAttempt] = useState(0)
const onError = useCallback((e) => {
if (e.target.src) badSrcs.add(e.target.src)
setAttempt((attempt) => ++attempt)
}, [])
return useMemo(() => {
// Trigger a re-render when an error occurs.
void attempt
const src = srcs.find((src) => !badSrcs.has(src))
if (!src) return <MissingToken color="secondary" {...rest} />
const alt = tokenInfo.name || tokenInfo.symbol
return <img src={src} alt={alt} key={alt} onError={onError} {...rest} />
}, [attempt, onError, rest, srcs, tokenInfo.name, tokenInfo.symbol])
}
export default styled(TokenImg)<{ size?: number }>`

View File

@@ -68,7 +68,7 @@ export function TokenSelectDialog({ value, onSelect }: TokenSelectDialogProps) {
const baseTokens: Currency[] = [] // TODO(zzmp): Add base tokens to token list functionality
const input = useRef<HTMLInputElement>(null)
useEffect(() => input.current?.focus(), [input])
useEffect(() => input.current?.focus({ preventScroll: true }), [input])
const [options, setOptions] = useState<ElementRef<typeof TokenOptions> | null>(null)

View File

@@ -1,15 +1,14 @@
import { Provider as EthersProvider } from '@ethersproject/abstract-provider'
import { JsonRpcProvider } from '@ethersproject/providers'
import { Provider as Eip1193Provider } from '@web3-react/types'
import { DEFAULT_LOCALE, SupportedLocale } from 'constants/locales'
import { Provider as AtomProvider } from 'jotai'
import { TransactionsUpdater } from 'lib/hooks/transactions'
import { Web3Provider } from 'lib/hooks/useActiveWeb3React'
import { ActiveWeb3Provider } from 'lib/hooks/useActiveWeb3React'
import { BlockUpdater } from 'lib/hooks/useBlockNumber'
import useEip1193Provider from 'lib/hooks/useEip1193Provider'
import { UNMOUNTING } from 'lib/hooks/useUnmount'
import { Provider as I18nProvider } from 'lib/i18n'
import { MulticallUpdater, store as multicallStore } from 'lib/state/multicall'
import styled, { keyframes, Theme, ThemeProvider } from 'lib/theme'
import { UNMOUNTING } from 'lib/utils/animations'
import { PropsWithChildren, StrictMode, useState } from 'react'
import { Provider as ReduxProvider } from 'react-redux'
@@ -48,18 +47,19 @@ const WidgetWrapper = styled.div<{ width?: number | string }>`
}
`
const slideDown = keyframes`
to {
const slideIn = keyframes`
from {
transform: translateY(calc(100% - 0.25em));
}
`
const slideUp = keyframes`
from {
const slideOut = keyframes`
to {
transform: translateY(calc(100% - 0.25em));
}
`
const DialogWrapper = styled.div`
border-radius: ${({ theme }) => theme.borderRadius * 0.75}em;
height: calc(100% - 0.5em);
left: 0;
margin: 0.25em;
@@ -73,11 +73,11 @@ const DialogWrapper = styled.div`
}
${Modal} {
animation: ${slideUp} 0.25s ease-in-out;
}
animation: ${slideIn} 0.25s ease-in;
${Modal}.${UNMOUNTING} {
animation: ${slideDown} 0.25s ease-in-out;
&.${UNMOUNTING} {
animation: ${slideOut} 0.25s ease-out;
}
}
`
@@ -94,8 +94,8 @@ function Updaters() {
export type WidgetProps = {
theme?: Theme
locale?: SupportedLocale
provider?: Eip1193Provider | EthersProvider
jsonRpcEndpoint?: string
provider?: Eip1193Provider | JsonRpcProvider
jsonRpcEndpoint?: string | JsonRpcProvider
width?: string | number
dialog?: HTMLElement | null
className?: string
@@ -114,31 +114,29 @@ export default function Widget(props: PropsWithChildren<WidgetProps>) {
className,
onError,
} = props
const eip1193 = useEip1193Provider(provider)
const [dialog, setDialog] = useState<HTMLDivElement | null>(null)
return (
<StrictMode>
<I18nProvider locale={locale}>
<ThemeProvider theme={theme}>
<WidgetWrapper width={width} className={className}>
<ThemeProvider theme={theme}>
<WidgetWrapper width={width} className={className}>
<I18nProvider locale={locale}>
<DialogWrapper ref={setDialog} />
<DialogProvider value={userDialog || dialog}>
<ErrorBoundary onError={onError}>
<WidgetPropValidator {...props}>
<ReduxProvider store={multicallStore}>
<AtomProvider>
<Web3Provider provider={eip1193} jsonRpcEndpoint={jsonRpcEndpoint}>
<Updaters />
{children}
</Web3Provider>
</AtomProvider>
</ReduxProvider>
</WidgetPropValidator>
<WidgetPropValidator {...props} />
<ReduxProvider store={multicallStore}>
<AtomProvider>
<ActiveWeb3Provider provider={provider} jsonRpcEndpoint={jsonRpcEndpoint}>
<Updaters />
{children}
</ActiveWeb3Provider>
</AtomProvider>
</ReduxProvider>
</ErrorBoundary>
</DialogProvider>
</WidgetWrapper>
</ThemeProvider>
</I18nProvider>
</I18nProvider>
</WidgetWrapper>
</ThemeProvider>
</StrictMode>
)
}

View File

@@ -10,5 +10,5 @@ export const loadingCss = css`
// need to use isLoading as `loading` is a reserved prop
export const loadingTransitionCss = css<{ isLoading: boolean }>`
${({ isLoading }) => isLoading && loadingCss};
transition: opacity 0.2s ease-in-out;
transition: opacity ${({ isLoading }) => (isLoading ? 0 : 0.2)}s ease-in-out;
`

View File

@@ -1,7 +1,8 @@
import { BigintIsh, CurrencyAmount, Token, TradeType } from '@uniswap/sdk-core'
// This file is lazy-loaded, so the import of smart-order-router is intentional.
// eslint-disable-next-line no-restricted-imports
import { AlphaRouter, AlphaRouterConfig, AlphaRouterParams, ChainId } from '@uniswap/smart-order-router'
import JSBI from 'jsbi'
import useBlockNumber from 'lib/hooks/useBlockNumber'
import { GetQuoteResult } from 'state/routing/types'
import { transformSwapRouteToGetQuoteResult } from 'utils/transformSwapRouteToGetQuoteResult'
@@ -99,10 +100,3 @@ export async function getClientSideQuote(
routerConfig
)
}
export function useFreshQuote(quoteResult: GetQuoteResult | undefined, maxBlockAge = 10): GetQuoteResult | undefined {
const block = useBlockNumber()
if (!block || !quoteResult) return undefined
if (block - (Number(quoteResult.blockNumber) || 0) > maxBlockAge) return undefined
return quoteResult
}

View File

@@ -1,6 +1,8 @@
import 'setimmediate'
import { Protocol } from '@uniswap/router-sdk'
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import { ChainId } from '@uniswap/smart-order-router'
import { SupportedChainId } from 'constants/chains'
import useDebounce from 'hooks/useDebounce'
import { useStablecoinAmountFromFiatValue } from 'hooks/useUSDCPrice'
import { useCallback, useMemo } from 'react'
@@ -9,8 +11,8 @@ import { computeRoutes, transformRoutesToTrade } from 'state/routing/utils'
import useWrapCallback, { WrapType } from '../swap/useWrapCallback'
import useActiveWeb3React from '../useActiveWeb3React'
import { useGetIsValidBlock } from '../useIsValidBlock'
import usePoll from '../usePoll'
import { getClientSideQuote, useFreshQuote } from './clientSideSmartOrderRouter'
import { useRoutingAPIArguments } from './useRoutingAPIArguments'
/**
@@ -18,14 +20,14 @@ import { useRoutingAPIArguments } from './useRoutingAPIArguments'
* Defaults are defined in https://github.com/Uniswap/smart-order-router/blob/309e6f6603984d3b5aef0733b0cfaf129c29f602/src/routers/alpha-router/config.ts#L83.
*/
const DistributionPercents: { [key: number]: number } = {
[ChainId.MAINNET]: 10,
[ChainId.OPTIMISM]: 10,
[ChainId.OPTIMISTIC_KOVAN]: 10,
[ChainId.ARBITRUM_ONE]: 25,
[ChainId.ARBITRUM_RINKEBY]: 25,
[SupportedChainId.MAINNET]: 10,
[SupportedChainId.OPTIMISM]: 10,
[SupportedChainId.OPTIMISTIC_KOVAN]: 10,
[SupportedChainId.ARBITRUM_ONE]: 25,
[SupportedChainId.ARBITRUM_RINKEBY]: 25,
}
const DEFAULT_DISTRIBUTION_PERCENT = 10
function getConfig(chainId: ChainId | undefined) {
function getConfig(chainId: SupportedChainId | undefined) {
return {
// Limit to only V2 and V3.
protocols: [Protocol.V2, Protocol.V3],
@@ -41,22 +43,20 @@ export default function useClientSideSmartOrderRouterTrade<TTradeType extends Tr
state: TradeState
trade: InterfaceTrade<Currency, Currency, TTradeType> | undefined
} {
const amount = useMemo(() => amountSpecified?.asFraction, [amountSpecified])
const [currencyIn, currencyOut] =
tradeType === TradeType.EXACT_INPUT
? [amountSpecified?.currency, otherCurrency]
: [otherCurrency, amountSpecified?.currency]
// Debounce is used to prevent excessive requests to SOR, as it is data intensive.
// This helps provide a "syncing" state the UI can reference for loading animations.
const inputs = useMemo(() => [tradeType, amountSpecified, otherCurrency], [tradeType, amountSpecified, otherCurrency])
const debouncedInputs = useDebounce(inputs, 200)
const isDebouncing = inputs !== debouncedInputs
const chainId = amountSpecified?.currency.chainId
const { library } = useActiveWeb3React()
const [currencyIn, currencyOut]: [Currency | undefined, Currency | undefined] = useMemo(
() =>
tradeType === TradeType.EXACT_INPUT
? [amountSpecified?.currency, otherCurrency]
: [otherCurrency, amountSpecified?.currency],
[amountSpecified, otherCurrency, tradeType]
// Fast user actions (ie updating the input) should be debounced, but currency changes should not.
const [debouncedAmount, debouncedCurrencyIn, debouncedCurrencyOut] = useDebounce(
useMemo(() => [amount, currencyIn, currencyOut], [amount, currencyIn, currencyOut]),
200
)
const isDebouncing =
amount !== debouncedAmount && currencyIn === debouncedCurrencyIn && currencyOut === debouncedCurrencyOut
const queryArgs = useRoutingAPIArguments({
tokenIn: currencyIn,
@@ -65,23 +65,38 @@ export default function useClientSideSmartOrderRouterTrade<TTradeType extends Tr
tradeType,
useClientSideRouter: true,
})
const chainId = amountSpecified?.currency.chainId
const { library } = useActiveWeb3React()
const params = useMemo(() => chainId && library && { chainId, provider: library }, [chainId, library])
const config = useMemo(() => getConfig(chainId), [chainId])
const { type: wrapType } = useWrapCallback()
const getQuoteResult = useCallback(async (): Promise<{ data?: GetQuoteResult; error?: unknown }> => {
if (wrapType !== WrapType.NOT_APPLICABLE) return { error: undefined }
if (wrapType !== WrapType.NONE) return { error: undefined }
if (!queryArgs || !params) return { error: undefined }
try {
return await getClientSideQuote(queryArgs, params, config)
// Lazy-load the smart order router to improve initial pageload times.
const quoteResult = await (
await import('./clientSideSmartOrderRouter')
).getClientSideQuote(queryArgs, params, config)
// There is significant post-fetch processing, so delay a tick to prevent dropped frames.
// This is only important in the context of integrations - if we control the whole site,
// then we can afford to drop a few frames.
return new Promise((resolve) => setImmediate(() => resolve(quoteResult)))
} catch {
return { error: true }
}
}, [config, params, queryArgs, wrapType])
const { data, error } = usePoll(getQuoteResult, JSON.stringify(queryArgs)) ?? {
const getIsValidBlock = useGetIsValidBlock()
const { data: quoteResult, error } = usePoll(getQuoteResult, JSON.stringify(queryArgs), {
debounce: isDebouncing,
staleCallback: useCallback(({ data }) => !getIsValidBlock(Number(data?.blockNumber) || 0), [getIsValidBlock]),
}) ?? {
error: undefined,
}
const quoteResult = useFreshQuote(data)
const isValid = getIsValidBlock(Number(quoteResult?.blockNumber) || 0)
const route = useMemo(
() => computeRoutes(currencyIn, currencyOut, tradeType, quoteResult),
@@ -104,12 +119,11 @@ export default function useClientSideSmartOrderRouterTrade<TTradeType extends Tr
return { state: TradeState.INVALID, trade: undefined }
}
// Returns the last trade state while syncing/loading to avoid jank from clearing the last trade while loading.
if (!quoteResult && !error) {
if (!trade && !error) {
if (isDebouncing) {
return { state: TradeState.SYNCING, trade }
} else {
return { state: TradeState.LOADING, trade }
return { state: TradeState.SYNCING, trade: undefined }
} else if (!isValid) {
return { state: TradeState.LOADING, trade: undefined }
}
}
@@ -125,7 +139,7 @@ export default function useClientSideSmartOrderRouterTrade<TTradeType extends Tr
}
}
if (error || !otherAmount || !route || route.length === 0 || !queryArgs) {
if (error || !otherAmount || !route || route.length === 0) {
return { state: TradeState.NO_ROUTE_FOUND, trade: undefined }
}
@@ -133,5 +147,5 @@ export default function useClientSideSmartOrderRouterTrade<TTradeType extends Tr
return { state: TradeState.VALID, trade }
}
return { state: TradeState.INVALID, trade: undefined }
}, [currencyIn, currencyOut, quoteResult, error, route, queryArgs, trade, isDebouncing, tradeType])
}, [currencyIn, currencyOut, trade, error, isValid, quoteResult, route, isDebouncing, tradeType])
}

View File

@@ -1,4 +1,4 @@
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
import { useAtom } from 'jotai'
import { useAtomValue, useUpdateAtom } from 'jotai/utils'
import { pickAtom } from 'lib/state/atoms'
@@ -63,16 +63,6 @@ export function useIsSwapFieldIndependent(field: Field): boolean {
return independentField === field
}
export function useSwapTradeType(): TradeType {
const independentField = useAtomValue(independentFieldAtom)
switch (independentField) {
case Field.INPUT:
return TradeType.EXACT_INPUT
case Field.OUTPUT:
return TradeType.EXACT_OUTPUT
}
}
const amountAtom = pickAtom(swapAtom, 'amount')
// check if any amount has been entered by user

View File

@@ -1,5 +1,7 @@
import { Currency, CurrencyAmount, TradeType } from '@uniswap/sdk-core'
import { useClientSideV3Trade } from 'hooks/useClientSideV3Trade'
import useLast from 'hooks/useLast'
import { useMemo } from 'react'
import { InterfaceTrade, TradeState } from 'state/routing/types'
import useClientSideSmartOrderRouterTrade from '../routing/useClientSideSmartOrderRouterTrade'
@@ -18,15 +20,38 @@ export function useBestTrade(
state: TradeState
trade: InterfaceTrade<Currency, Currency, TradeType> | undefined
} {
const clientSORTrade = useClientSideSmartOrderRouterTrade(tradeType, amountSpecified, otherCurrency)
const clientSORTradeObject = useClientSideSmartOrderRouterTrade(tradeType, amountSpecified, otherCurrency)
// Use a simple client side logic as backup if SOR is not available.
const useFallback = clientSORTrade.state === TradeState.NO_ROUTE_FOUND || clientSORTrade.state === TradeState.INVALID
const fallbackTrade = useClientSideV3Trade(
const useFallback =
clientSORTradeObject.state === TradeState.NO_ROUTE_FOUND || clientSORTradeObject.state === TradeState.INVALID
const fallbackTradeObject = useClientSideV3Trade(
tradeType,
useFallback ? amountSpecified : undefined,
useFallback ? otherCurrency : undefined
)
return useFallback ? fallbackTrade : clientSORTrade
const tradeObject = useFallback ? fallbackTradeObject : clientSORTradeObject
const lastTrade = useLast(tradeObject.trade, Boolean) ?? undefined
// Return the last trade while syncing/loading to avoid jank from clearing the last trade while loading.
// If the trade is unsettled and not stale, return the last trade as a placeholder during settling.
return useMemo(() => {
const { state, trade } = tradeObject
// If the trade is in a settled state, return it.
if ((state !== TradeState.LOADING && state !== TradeState.SYNCING) || trade) return tradeObject
const [currencyIn, currencyOut] =
tradeType === TradeType.EXACT_INPUT
? [amountSpecified?.currency, otherCurrency]
: [otherCurrency, amountSpecified?.currency]
// If the trade currencies have switched, consider it stale - do not return the last trade.
const isStale =
(currencyIn && !lastTrade?.inputAmount?.currency.equals(currencyIn)) ||
(currencyOut && !lastTrade?.outputAmount?.currency.equals(currencyOut))
if (isStale) return tradeObject
return { state, trade: lastTrade }
}, [amountSpecified?.currency, lastTrade, otherCurrency, tradeObject, tradeType])
}

View File

@@ -1,5 +1,5 @@
import { BigNumber } from '@ethersproject/bignumber'
import { TransactionResponse, Web3Provider } from '@ethersproject/providers'
import { JsonRpcProvider, TransactionResponse } from '@ethersproject/providers'
// eslint-disable-next-line no-restricted-imports
import { t, Trans } from '@lingui/macro'
import { Trade } from '@uniswap/router-sdk'
@@ -40,7 +40,7 @@ interface FailedCall extends SwapCallEstimate {
export default function useSendSwapTransaction(
account: string | null | undefined,
chainId: number | undefined,
library: Web3Provider | undefined,
library: JsonRpcProvider | undefined,
trade: AnyTrade | undefined, // trade to execute, required
swapCalls: SwapCall[]
): { callback: null | (() => Promise<TransactionResponse>) } {

View File

@@ -7,7 +7,6 @@ import useActiveWeb3React from 'hooks/useActiveWeb3React'
import { useERC20PermitFromTrade, UseERC20PermitState } from 'hooks/useERC20Permit'
import useTransactionDeadline from 'lib/hooks/useTransactionDeadline'
import { useCallback, useMemo } from 'react'
import invariant from 'tiny-invariant'
import { getTxOptimizedSwapRouter, SwapRouterVersion } from 'utils/getTxOptimizedSwapRouter'
import { ApprovalState, useApproval, useApprovalStateForSpender } from '../useApproval'
@@ -75,10 +74,6 @@ export default function useSwapApproval(
const spender = useSwapRouterAddress(trade)
const approval = useApproval(amountToApprove, spender, useIsPendingApproval)
if (trade instanceof V2Trade || trade instanceof V3Trade) {
const approvalState = approval[0]
invariant(approvalState === ApprovalState.APPROVED, 'Trying to approve legacy router')
}
return approval
}
@@ -171,39 +166,39 @@ export const useApproveOrPermit = (
gatherPermitSignature,
} = useERC20PermitFromTrade(trade, allowedSlippage, deadline)
const notApproved = approval === ApprovalState.NOT_APPROVED && !(signatureState === UseERC20PermitState.SIGNED)
// If permit is supported, trigger a signature, if not create approval transaction.
const handleApproveOrPermit = useCallback(async () => {
if (signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature) {
try {
return await gatherPermitSignature()
} catch (error) {
// Try to approve if gatherPermitSignature failed for any reason other than the user rejecting it.
if (error?.code !== 4001) {
return getApproval()
try {
if (signatureState === UseERC20PermitState.NOT_SIGNED && gatherPermitSignature) {
try {
return await gatherPermitSignature()
} catch (error) {
// Try to approve if gatherPermitSignature failed for any reason other than the user rejecting it.
if (error?.code !== 4001) {
return await getApproval()
}
}
} else {
return await getApproval()
}
} else {
return getApproval()
} catch (e) {
// Swallow approval errors - user rejections do not need to be displayed.
}
}, [signatureState, gatherPermitSignature, getApproval])
const approvalState = useMemo(() => {
if (approval === ApprovalState.PENDING) {
return ApproveOrPermitState.PENDING_APPROVAL
}
if (signatureState === UseERC20PermitState.LOADING) {
} else if (signatureState === UseERC20PermitState.LOADING) {
return ApproveOrPermitState.PENDING_SIGNATURE
}
if (notApproved && Boolean(gatherPermitSignature)) {
} else if (approval !== ApprovalState.NOT_APPROVED || signatureState === UseERC20PermitState.SIGNED) {
return ApproveOrPermitState.APPROVED
} else if (gatherPermitSignature) {
return ApproveOrPermitState.REQUIRES_SIGNATURE
}
if (notApproved) {
} else {
return ApproveOrPermitState.REQUIRES_APPROVAL
}
return ApproveOrPermitState.APPROVED
}, [approval, gatherPermitSignature, notApproved, signatureState])
}, [approval, gatherPermitSignature, signatureState])
return {
approvalState,

View File

@@ -20,8 +20,8 @@ export enum SwapCallbackState {
interface UseSwapCallbackReturns {
state: SwapCallbackState
callback: null | (() => Promise<TransactionResponse>)
error: ReactNode | null
callback?: () => Promise<TransactionResponse>
error?: ReactNode
}
interface UseSwapCallbackArgs {
trade: AnyTrade | undefined // trade to execute, required
@@ -59,24 +59,19 @@ export function useSwapCallback({
return useMemo(() => {
if (!trade || !library || !account || !chainId || !callback) {
return { state: SwapCallbackState.INVALID, callback: null, error: <Trans>Missing dependencies</Trans> }
return { state: SwapCallbackState.INVALID, error: <Trans>Missing dependencies</Trans> }
}
if (!recipient) {
if (recipientAddressOrName !== null) {
return { state: SwapCallbackState.INVALID, callback: null, error: <Trans>Invalid recipient</Trans> }
return { state: SwapCallbackState.INVALID, error: <Trans>Invalid recipient</Trans> }
} else {
return { state: SwapCallbackState.LOADING, callback: null, error: null }
return { state: SwapCallbackState.LOADING }
}
}
return {
state: SwapCallbackState.VALID,
callback: async function onSwap(): Promise<TransactionResponse> {
return callback().then((response) => {
return response
})
},
error: null,
callback: async () => callback(),
}
}, [trade, library, account, chainId, callback, recipient, recipientAddressOrName])
}

View File

@@ -1,36 +1,34 @@
import { Trans } from '@lingui/macro'
import { Currency, CurrencyAmount, Percent, TradeType } from '@uniswap/sdk-core'
import { FeeOptions } from '@uniswap/v3-sdk'
import { atom } from 'jotai'
import { useAtomValue, useUpdateAtom } from 'jotai/utils'
import { useCurrencyBalances } from 'lib/hooks/useCurrencyBalance'
import { feeOptionsAtom, Field, swapAtom } from 'lib/state/swap'
import { Field, swapAtom } from 'lib/state/swap'
import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount'
import { ReactNode, useEffect, useMemo } from 'react'
import { useEffect, useMemo } from 'react'
import { InterfaceTrade, TradeState } from 'state/routing/types'
import { isAddress } from '../../../utils'
import useActiveWeb3React from '../useActiveWeb3React'
import useSlippage, { Slippage } from '../useSlippage'
import useUSDCPriceImpact, { PriceImpact } from '../useUSDCPriceImpact'
import { useBestTrade } from './useBestTrade'
import useWrapCallback, { WrapType } from './useWrapCallback'
interface SwapField {
currency?: Currency
amount?: CurrencyAmount<Currency>
balance?: CurrencyAmount<Currency>
usdc?: CurrencyAmount<Currency>
}
interface SwapInfo {
currencies: { [field in Field]?: Currency }
currencyBalances: { [field in Field]?: CurrencyAmount<Currency> }
tradeCurrencyAmounts: { [field in Field]?: CurrencyAmount<Currency> }
[Field.INPUT]: SwapField
[Field.OUTPUT]: SwapField
trade: {
trade?: InterfaceTrade<Currency, Currency, TradeType>
state: TradeState
}
slippage: Slippage
feeOptions: FeeOptions | undefined
}
const BAD_RECIPIENT_ADDRESSES: { [address: string]: true } = {
'0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f': true, // v2 factory
'0xf164fC0Ec4E93095b804a4795bBe1e041497b92a': true, // v2 router 01
'0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D': true, // v2 router 02
impact?: PriceImpact
}
// from the current swap inputs, compute the best trade and return it.
@@ -38,106 +36,76 @@ function useComputeSwapInfo(): SwapInfo {
const { account } = useActiveWeb3React()
const { type: wrapType } = useWrapCallback()
const isWrapping = wrapType === WrapType.WRAP || wrapType === WrapType.UNWRAP
const {
independentField,
amount,
[Field.INPUT]: inputCurrency,
[Field.OUTPUT]: outputCurrency,
} = useAtomValue(swapAtom)
const { independentField, amount, [Field.INPUT]: currencyIn, [Field.OUTPUT]: currencyOut } = useAtomValue(swapAtom)
const isExactIn = independentField === Field.INPUT
const feeOptions = useAtomValue(feeOptionsAtom)
const parsedAmount = useMemo(
() => tryParseCurrencyAmount(amount, (isExactIn ? inputCurrency : outputCurrency) ?? undefined),
[inputCurrency, isExactIn, outputCurrency, amount]
() => tryParseCurrencyAmount(amount, (isExactIn ? currencyIn : currencyOut) ?? undefined),
[amount, isExactIn, currencyIn, currencyOut]
)
// TODO(ianlapham): this would eventually be replaced with routing api logic.
const trade = useBestTrade(
isExactIn ? TradeType.EXACT_INPUT : TradeType.EXACT_OUTPUT,
parsedAmount,
(isExactIn ? outputCurrency : inputCurrency) ?? undefined
(isExactIn ? currencyOut : currencyIn) ?? undefined
)
const tradeCurrencyAmounts = useMemo(
() => ({
// Use same amount for input and output if user is wrapping.
[Field.INPUT]: isWrapping || isExactIn ? parsedAmount : trade.trade?.inputAmount,
[Field.OUTPUT]: isWrapping || !isExactIn ? parsedAmount : trade.trade?.outputAmount,
}),
[isExactIn, isWrapping, parsedAmount, trade.trade?.inputAmount, trade.trade?.outputAmount]
)
const slippage = useSlippage(trade.trade)
const currencies = useMemo(
() => ({ [Field.INPUT]: inputCurrency, [Field.OUTPUT]: outputCurrency }),
[inputCurrency, outputCurrency]
const amountIn = useMemo(
() => (isWrapping || isExactIn ? parsedAmount : trade.trade?.inputAmount),
[isExactIn, isWrapping, parsedAmount, trade.trade?.inputAmount]
)
const [inputCurrencyBalance, outputCurrencyBalance] = useCurrencyBalances(
const amountOut = useMemo(
() => (isWrapping || !isExactIn ? parsedAmount : trade.trade?.outputAmount),
[isExactIn, isWrapping, parsedAmount, trade.trade?.outputAmount]
)
const [balanceIn, balanceOut] = useCurrencyBalances(
account,
useMemo(() => [inputCurrency, outputCurrency], [inputCurrency, outputCurrency])
)
const currencyBalances = useMemo(
() => ({
[Field.INPUT]: inputCurrencyBalance,
[Field.OUTPUT]: outputCurrencyBalance,
}),
[inputCurrencyBalance, outputCurrencyBalance]
useMemo(() => [currencyIn, currencyOut], [currencyIn, currencyOut])
)
const inputError = useMemo(() => {
let inputError: ReactNode | undefined
if (!account) {
inputError = <Trans>Connect Wallet</Trans>
}
if (!currencies[Field.INPUT] || !currencies[Field.OUTPUT]) {
inputError = inputError ?? <Trans>Select a token</Trans>
}
if (!parsedAmount) {
inputError = inputError ?? <Trans>Enter an amount</Trans>
}
const formattedAddress = isAddress(account)
if (!account || !formattedAddress) {
inputError = inputError ?? <Trans>Enter a recipient</Trans>
} else {
if (BAD_RECIPIENT_ADDRESSES[formattedAddress]) {
inputError = inputError ?? <Trans>Invalid recipient</Trans>
}
}
// compare input balance to max input based on version
const [balanceIn, amountIn] = [currencyBalances[Field.INPUT], trade.trade?.maximumAmountIn(slippage.allowed)]
if (balanceIn && amountIn && balanceIn.lessThan(amountIn)) {
inputError = <Trans>Insufficient {amountIn.currency.symbol} balance</Trans>
}
return inputError
}, [account, slippage.allowed, currencies, currencyBalances, parsedAmount, trade.trade])
// Compute slippage and impact off of the trade so that it refreshes with the trade.
// (Using amountIn/amountOut would show (incorrect) intermediate values.)
const slippage = useSlippage(trade.trade)
const { inputUSDC, outputUSDC, impact } = useUSDCPriceImpact(trade.trade?.inputAmount, trade.trade?.outputAmount)
return useMemo(
() => ({
currencies,
currencyBalances,
inputError,
[Field.INPUT]: {
currency: currencyIn,
amount: amountIn,
balance: balanceIn,
usdc: inputUSDC,
},
[Field.OUTPUT]: {
currency: currencyOut,
amount: amountOut,
balance: balanceOut,
usdc: outputUSDC,
},
trade,
tradeCurrencyAmounts,
slippage,
feeOptions,
impact,
}),
[currencies, currencyBalances, inputError, trade, tradeCurrencyAmounts, slippage, feeOptions]
[
amountIn,
amountOut,
balanceIn,
balanceOut,
currencyIn,
currencyOut,
impact,
inputUSDC,
outputUSDC,
slippage,
trade,
]
)
}
const swapInfoAtom = atom<SwapInfo>({
currencies: {},
currencyBalances: {},
[Field.INPUT]: {},
[Field.OUTPUT]: {},
trade: { state: TradeState.INVALID },
tradeCurrencyAmounts: {},
slippage: { auto: true, allowed: new Percent(0) },
feeOptions: undefined,
})
export function SwapInfoUpdater() {

View File

@@ -1,133 +1,63 @@
import { ContractTransaction } from '@ethersproject/contracts'
import { useWETHContract } from 'hooks/useContract'
import { atom, useAtom } from 'jotai'
import { useAtomValue } from 'jotai/utils'
import { Field, swapAtom } from 'lib/state/swap'
import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount'
import { useCallback, useEffect, useMemo } from 'react'
import { useMemo } from 'react'
import { WRAPPED_NATIVE_CURRENCY } from '../../../constants/tokens'
import useActiveWeb3React from '../useActiveWeb3React'
import { useCurrencyBalances } from '../useCurrencyBalance'
import useCurrencyBalance from '../useCurrencyBalance'
export enum WrapType {
NOT_APPLICABLE,
NONE,
WRAP,
UNWRAP,
}
interface UseWrapCallbackReturns {
callback: () => Promise<ContractTransaction>
error: WrapError
loading: boolean
callback?: () => Promise<ContractTransaction>
type: WrapType
}
export enum WrapError {
NO_ERROR = 0, // must be equal to 0 so all other errors are truthy
ENTER_NATIVE_AMOUNT,
ENTER_WRAPPED_AMOUNT,
INSUFFICIENT_NATIVE_BALANCE,
INSUFFICIENT_WRAPPED_BALANCE,
}
interface WrapState {
loading: boolean
error: WrapError
}
const wrapState = atom<WrapState>({
loading: false,
error: WrapError.NO_ERROR,
})
export default function useWrapCallback(): UseWrapCallbackReturns {
const { account, chainId } = useActiveWeb3React()
const [{ loading, error }, setWrapState] = useAtom(wrapState)
const wrappedNativeCurrencyContract = useWETHContract()
const { amount, [Field.INPUT]: inputCurrency, [Field.OUTPUT]: outputCurrency } = useAtomValue(swapAtom)
const wrapType = useMemo(() => {
if (!inputCurrency || !outputCurrency || !chainId) {
return WrapType.NOT_APPLICABLE
if (chainId && inputCurrency && outputCurrency) {
if (inputCurrency.isNative && WRAPPED_NATIVE_CURRENCY[chainId]?.equals(outputCurrency)) {
return WrapType.WRAP
}
if (outputCurrency.isNative && WRAPPED_NATIVE_CURRENCY[chainId]?.equals(inputCurrency)) {
return WrapType.UNWRAP
}
}
if (inputCurrency.isNative && WRAPPED_NATIVE_CURRENCY[chainId]?.equals(outputCurrency)) {
return WrapType.WRAP
}
if (WRAPPED_NATIVE_CURRENCY[chainId]?.equals(inputCurrency) && outputCurrency.isNative) {
return WrapType.UNWRAP
}
return WrapType.NOT_APPLICABLE
return WrapType.NONE
}, [chainId, inputCurrency, outputCurrency])
const parsedAmountIn = useMemo(
() => tryParseCurrencyAmount(amount, inputCurrency ?? undefined),
[inputCurrency, amount]
)
const balanceIn = useCurrencyBalance(account, inputCurrency)
const relevantTokenBalances = useCurrencyBalances(
account,
useMemo(() => [inputCurrency ?? undefined, outputCurrency ?? undefined], [inputCurrency, outputCurrency])
)
const currencyBalances = useMemo(
() => ({
[Field.INPUT]: relevantTokenBalances[0],
[Field.OUTPUT]: relevantTokenBalances[1],
}),
[relevantTokenBalances]
)
const callback = useMemo(() => {
if (
wrapType === WrapType.NONE ||
!parsedAmountIn ||
!balanceIn ||
balanceIn.lessThan(parsedAmountIn) ||
!wrappedNativeCurrencyContract
) {
return
}
const hasInputAmount = Boolean(parsedAmountIn?.greaterThan('0'))
const sufficientBalance = parsedAmountIn && !currencyBalances[Field.INPUT]?.lessThan(parsedAmountIn)
return async () =>
wrapType === WrapType.WRAP
? wrappedNativeCurrencyContract.deposit({ value: `0x${parsedAmountIn.quotient.toString(16)}` })
: wrappedNativeCurrencyContract.withdraw(`0x${parsedAmountIn.quotient.toString(16)}`)
}, [wrapType, parsedAmountIn, balanceIn, wrappedNativeCurrencyContract])
useEffect(() => {
if (sufficientBalance) {
setWrapState((state) => ({ ...state, error: WrapError.NO_ERROR }))
} else if (wrapType === WrapType.WRAP) {
setWrapState((state) => ({
...state,
error: hasInputAmount ? WrapError.INSUFFICIENT_NATIVE_BALANCE : WrapError.ENTER_NATIVE_AMOUNT,
}))
} else if (wrapType === WrapType.UNWRAP) {
setWrapState((state) => ({
...state,
error: hasInputAmount ? WrapError.INSUFFICIENT_WRAPPED_BALANCE : WrapError.ENTER_WRAPPED_AMOUNT,
}))
}
}, [hasInputAmount, setWrapState, sufficientBalance, wrapType])
const callback = useCallback(async () => {
if (!parsedAmountIn) {
return Promise.reject('Must provide an input amount to wrap.')
}
if (wrapType === WrapType.NOT_APPLICABLE) {
return Promise.reject('Wrapping not applicable to this asset.')
}
if (!sufficientBalance) {
return Promise.reject('Insufficient balance to wrap desired amount.')
}
if (!wrappedNativeCurrencyContract) {
return Promise.reject('Wrap contract not found.')
}
setWrapState((state) => ({ ...state, loading: true }))
const result = await (wrapType === WrapType.WRAP
? wrappedNativeCurrencyContract.deposit({ value: `0x${parsedAmountIn.quotient.toString(16)}` })
: wrappedNativeCurrencyContract.withdraw(`0x${parsedAmountIn.quotient.toString(16)}`)
).catch((e: unknown) => {
setWrapState((state) => ({ ...state, loading: false }))
throw e
})
// resolve loading state after one confirmation
result.wait(1).finally(() => setWrapState((state) => ({ ...state, loading: false })))
return Promise.resolve(result)
}, [wrappedNativeCurrencyContract, sufficientBalance, parsedAmountIn, wrapType, setWrapState])
return useMemo(
() => ({
callback,
error,
loading,
type: wrapType,
}),
[callback, error, loading, wrapType]
)
return useMemo(() => ({ callback, type: wrapType }), [callback, wrapType])
}

View File

@@ -1,63 +1,98 @@
import { getPriorityConnector, initializeConnector, Web3ReactHooks } from '@web3-react/core'
import { ExternalProvider, JsonRpcProvider, Web3Provider } from '@ethersproject/providers'
import { initializeConnector, Web3ReactHooks } from '@web3-react/core'
import { EIP1193 } from '@web3-react/eip1193'
import { EMPTY } from '@web3-react/empty'
import { Actions, Connector, Provider as Eip1193Provider } from '@web3-react/types'
import { Actions, Connector, Provider as Eip1193Provider, Web3ReactStore } from '@web3-react/types'
import { Url } from '@web3-react/url'
import { useAtom, WritableAtom } from 'jotai'
import { useAtomValue } from 'jotai/utils'
import { atomWithDefault, RESET, useUpdateAtom } from 'jotai/utils'
import { PropsWithChildren, useEffect } from 'react'
import { atom } from 'jotai'
import JsonRpcConnector from 'lib/utils/JsonRpcConnector'
import { createContext, PropsWithChildren, useContext, useEffect, useMemo } from 'react'
const [connector, hooks] = initializeConnector(() => EMPTY)
const EMPTY_CONNECTOR: [Connector, Web3ReactHooks] = [connector, hooks]
const urlConnectorAtom = atomWithDefault<[Connector, Web3ReactHooks]>(() => EMPTY_CONNECTOR)
const injectedConnectorAtom = atomWithDefault<[Connector, Web3ReactHooks]>(() => EMPTY_CONNECTOR)
const web3Atom = atomWithDefault<ReturnType<typeof hooks.useWeb3React>>(() => ({
connector: EMPTY_CONNECTOR[0],
library: undefined,
chainId: undefined,
account: undefined,
active: false,
error: undefined,
}))
type Web3ContextType = {
connector: Connector
library?: (JsonRpcProvider & { provider?: ExternalProvider }) | Web3Provider
chainId?: ReturnType<Web3ReactHooks['useChainId']>
accounts?: ReturnType<Web3ReactHooks['useAccounts']>
account?: ReturnType<Web3ReactHooks['useAccount']>
active?: ReturnType<Web3ReactHooks['useIsActive']>
error?: ReturnType<Web3ReactHooks['useError']>
ensNames?: ReturnType<Web3ReactHooks['useENSNames']>
ensName?: ReturnType<Web3ReactHooks['useENSName']>
}
const EMPTY_CONNECTOR = initializeConnector(() => EMPTY)
const EMPTY_CONTEXT: Web3ContextType = { connector: EMPTY }
const urlConnectorAtom = atom<[Connector, Web3ReactHooks, Web3ReactStore]>(EMPTY_CONNECTOR)
const injectedConnectorAtom = atom<[Connector, Web3ReactHooks, Web3ReactStore]>(EMPTY_CONNECTOR)
const Web3Context = createContext(EMPTY_CONTEXT)
export default function useActiveWeb3React() {
return useAtomValue(web3Atom)
return useContext(Web3Context)
}
function useConnector<T extends { new (actions: Actions, initializer: I): Connector }, I>(
connectorAtom: WritableAtom<[Connector, Web3ReactHooks], typeof RESET | [Connector, Web3ReactHooks]>,
connectorAtom: WritableAtom<[Connector, Web3ReactHooks, Web3ReactStore], [Connector, Web3ReactHooks, Web3ReactStore]>,
Connector: T,
initializer: I | undefined
) {
const [connector, setConnector] = useAtom(connectorAtom)
useEffect(() => {
if (initializer) {
const [connector, hooks] = initializeConnector((actions) => new Connector(actions, initializer))
const [connector, hooks, store] = initializeConnector((actions) => new Connector(actions, initializer))
connector.activate()
setConnector([connector, hooks])
setConnector([connector, hooks, store])
} else {
setConnector(RESET)
setConnector(EMPTY_CONNECTOR)
}
}, [Connector, initializer, setConnector])
return connector
}
interface Web3ProviderProps {
provider?: Eip1193Provider
jsonRpcEndpoint?: string
interface ActiveWeb3ProviderProps {
provider?: Eip1193Provider | JsonRpcProvider
jsonRpcEndpoint?: string | JsonRpcProvider
}
export function Web3Provider({ provider, jsonRpcEndpoint, children }: PropsWithChildren<Web3ProviderProps>) {
const injectedConnector = useConnector(injectedConnectorAtom, EIP1193, provider)
export function ActiveWeb3Provider({
provider,
jsonRpcEndpoint,
children,
}: PropsWithChildren<ActiveWeb3ProviderProps>) {
const Injected = useMemo(() => {
if (provider) {
if (JsonRpcProvider.isProvider(provider)) return JsonRpcConnector
if (JsonRpcProvider.isProvider((provider as any).provider)) {
throw new Error('Eip1193Bridge is experimental: pass your ethers Provider directly')
}
}
return EIP1193
}, [provider]) as { new (actions: Actions, initializer: typeof provider): Connector }
const injectedConnector = useConnector(injectedConnectorAtom, Injected, provider)
const urlConnector = useConnector(urlConnectorAtom, Url, jsonRpcEndpoint)
const priorityConnector = getPriorityConnector(injectedConnector, urlConnector)
const priorityProvider = priorityConnector.usePriorityProvider()
const priorityWeb3React = priorityConnector.usePriorityWeb3React(priorityProvider)
const setWeb3 = useUpdateAtom(web3Atom)
useEffect(() => {
setWeb3(priorityWeb3React)
}, [priorityWeb3React, setWeb3])
const [connector, hooks] = injectedConnector[1].useIsActive() ? injectedConnector : urlConnector ?? EMPTY_CONNECTOR
return <>{children}</>
const library = hooks.useProvider()
const chainId = hooks.useChainId()
const accounts = hooks.useAccounts()
const account = hooks.useAccount()
const active = hooks.useIsActive()
const error = hooks.useError()
const ensNames = hooks.useENSNames()
const ensName = hooks.useENSName()
const web3 = useMemo(() => {
if (connector === EMPTY || !active) {
return EMPTY_CONTEXT
}
return { connector, library, chainId, accounts, account, active, error, ensNames, ensName }
}, [account, accounts, active, chainId, connector, ensName, ensNames, error, library])
// Log web3 errors to facilitate debugging.
useEffect(() => {
if (error) {
console.error('web3 error:', error)
}
}, [error])
return <Web3Context.Provider value={web3}>{children}</Web3Context.Provider>
}

View File

@@ -1,63 +0,0 @@
import { Provider as EthersProvider } from '@ethersproject/abstract-provider'
import { VoidSigner } from '@ethersproject/abstract-signer'
import { Eip1193Bridge as ExperimentalEip1193Bridge } from '@ethersproject/experimental'
import { JsonRpcProvider, JsonRpcSigner } from '@ethersproject/providers'
import { Provider as Eip1193Provider } from '@web3-react/types'
import { ZERO_ADDRESS } from 'constants/misc'
import { useMemo } from 'react'
const voidSigner = new VoidSigner(ZERO_ADDRESS)
class Eip1193Bridge extends ExperimentalEip1193Bridge {
async send(method: string, params?: Array<any>): Promise<any> {
switch (method) {
case 'eth_chainId': {
// TODO(https://github.com/ethers-io/ethers.js/pull/2711): Returns eth_chainId as a hexadecimal.
const result = await this.provider.getNetwork()
return '0x' + result.chainId.toString(16)
}
case 'eth_requestAccounts':
try {
return await super.send(method, params)
} catch (e) {
return this.send('eth_accounts')
}
case 'eth_sendTransaction': {
if (!this.signer) break
// TODO(zzmp): JsonRpcProvider filters from/gas fields from the params.
const req = JsonRpcProvider.hexlifyTransaction(params?.[0], { from: true, gas: true })
const tx = await this.signer.sendTransaction(req)
return tx.hash
}
default:
return super.send(method, params)
}
}
}
interface EthersSigningProvider extends EthersProvider {
getSigner(): JsonRpcSigner
}
export default function useEip1193Provider(
provider?: Eip1193Provider | EthersSigningProvider | EthersProvider
): Eip1193Provider | undefined {
return useMemo(() => {
if (provider) {
if (EthersProvider.isProvider(provider)) {
const signer = 'getSigner' in provider ? provider.getSigner() : null ?? voidSigner
return new Eip1193Bridge(signer, provider)
} else if (EthersProvider.isProvider((provider as ExperimentalEip1193Bridge).provider)) {
/*
* Direct users to use our own wrapper to avoid any pitfalls:
* - Eip1193Bridge is experimental
* - signer is not straightforward
* - bugs out if chainId>8
*/
throw new Error('Eip1193Bridge is experimental: pass your ethers Provider directly')
}
}
return provider
}, [provider])
}

View File

@@ -0,0 +1,45 @@
import { atomWithImmer } from 'jotai/immer'
import { useAtomValue, useUpdateAtom } from 'jotai/utils'
import { useCallback } from 'react'
import useActiveWeb3React from './useActiveWeb3React'
import useBlockNumber from './useBlockNumber'
// The oldest block (per chain) to be considered valid.
const oldestBlockMapAtom = atomWithImmer<{ [chainId: number]: number }>({})
const DEFAULT_MAX_BLOCK_AGE = 10
export function useSetOldestValidBlock(): (block: number) => void {
const { chainId } = useActiveWeb3React()
const updateValidBlock = useUpdateAtom(oldestBlockMapAtom)
return useCallback(
(block: number) => {
if (!chainId) return
updateValidBlock((oldestBlockMap) => {
oldestBlockMap[chainId] = Math.max(block, oldestBlockMap[chainId] || 0)
})
},
[chainId, updateValidBlock]
)
}
export function useGetIsValidBlock(maxBlockAge = DEFAULT_MAX_BLOCK_AGE): (block: number) => boolean {
const { chainId } = useActiveWeb3React()
const currentBlock = useBlockNumber()
const oldestBlockMap = useAtomValue(oldestBlockMapAtom)
const oldestBlock = chainId ? oldestBlockMap[chainId] : 0
return useCallback(
(block: number) => {
if (!currentBlock) return false
if (currentBlock - block > maxBlockAge) return false
if (currentBlock < oldestBlock) return false
return true
},
[currentBlock, maxBlockAge, oldestBlock]
)
}
export default function useIsValidBlock(block: number): boolean {
return useGetIsValidBlock()(block)
}

View File

@@ -4,44 +4,71 @@ import { useEffect, useMemo, useState } from 'react'
const DEFAULT_POLLING_INTERVAL = ms`15s`
const DEFAULT_KEEP_UNUSED_DATA_FOR = ms`10s`
interface PollingOptions<T> {
// If true, any cached result will be returned, but no new fetch will be initiated.
debounce?: boolean
// If stale, any cached result will be returned, and a new fetch will be initiated.
staleCallback?: (value: T) => boolean
pollingInterval?: number
keepUnusedDataFor?: number
}
interface CacheEntry<T> {
ttl: number | null // null denotes a pending fetch
result?: T
}
export default function usePoll<T>(
fetch: () => Promise<T>,
key = '',
pollingInterval = DEFAULT_POLLING_INTERVAL,
keepUnusedDataFor = DEFAULT_KEEP_UNUSED_DATA_FOR
{
debounce = false,
staleCallback,
pollingInterval = DEFAULT_POLLING_INTERVAL,
keepUnusedDataFor = DEFAULT_KEEP_UNUSED_DATA_FOR,
}: PollingOptions<T>
): T | undefined {
const cache = useMemo(() => new Map<string, { ttl: number; result?: T }>(), [])
const [data, setData] = useState<{ key: string; result?: T }>({ key })
const cache = useMemo(() => new Map<string, CacheEntry<T>>(), [])
const [, setData] = useState<{ key: string; result?: T }>({ key })
useEffect(() => {
if (debounce) return
let timeout: number
const entry = cache.get(key)
if (entry && entry.ttl + keepUnusedDataFor > Date.now()) {
// If there is a fresh entry, return it and queue the next poll.
setData({ key, result: entry.result })
timeout = setTimeout(poll, Math.max(0, entry.ttl - Date.now()))
const isStale = staleCallback && entry?.result !== undefined ? staleCallback(entry.result) : false
if (entry) {
// If there is not a pending fetch (and there should be), queue one.
if (entry.ttl) {
if (isStale) {
poll() // stale results should be refetched immediately
} else if (entry.ttl && entry.ttl + keepUnusedDataFor > Date.now()) {
timeout = setTimeout(poll, Math.max(0, entry.ttl - Date.now()))
}
}
} else {
// Otherwise, set a new entry (to avoid duplicate polling) and trigger a poll immediately.
cache.set(key, { ttl: Date.now() + pollingInterval })
setData({ key })
// If there is no cached entry, trigger a poll immediately.
poll()
}
setData({ key, result: entry?.result })
return () => {
clearTimeout(timeout)
}
async function poll(ttl = Date.now() + pollingInterval) {
timeout = setTimeout(poll, pollingInterval)
const result = await fetch()
timeout = setTimeout(poll, pollingInterval) // queue the next poll
cache.set(key, { ttl: null, ...cache.get(key) }) // mark the entry as a pending fetch
// Always set the result in the cache, but only set it as data if the key is still being queried.
const result = await fetch()
cache.set(key, { ttl, result })
setData((data) => {
return data.key === key ? { key, result } : data
})
setData((data) => (data.key === key ? { key, result } : data))
}
}, [cache, fetch, keepUnusedDataFor, key, pollingInterval])
}, [cache, debounce, fetch, keepUnusedDataFor, key, pollingInterval, staleCallback])
useEffect(() => {
// Cleanup stale entries when a new key is used.
@@ -49,11 +76,13 @@ export default function usePoll<T>(
const now = Date.now()
cache.forEach(({ ttl }, key) => {
if (ttl + keepUnusedDataFor <= now) {
if (ttl && ttl + keepUnusedDataFor <= now) {
cache.delete(key)
}
})
}, [cache, keepUnusedDataFor, key])
return data.result
// Use data.result to force a re-render, but actually retrieve the data from the cache.
// This gives the _first_ render access to a new result, avoiding lag introduced by React.
return cache.get(key)?.result
}

View File

@@ -1,7 +1,5 @@
import { css } from 'lib/theme'
import { useCallback, useEffect, useMemo, useState } from 'react'
import useNativeEvent from './useNativeEvent'
import { useMemo } from 'react'
const overflowCss = css`
overflow-y: scroll;
@@ -48,21 +46,15 @@ interface ScrollbarOptions {
}
export default function useScrollbar(element: HTMLElement | null, { padded = false }: ScrollbarOptions = {}) {
const [overflow, setOverflow] = useState(true)
useEffect(() => {
setOverflow(hasOverflow(element))
}, [element])
useNativeEvent(
element,
'transitionend',
useCallback(() => setOverflow(hasOverflow(element)), [element])
return useMemo(
// NB: The css must be applied on an element's first render. WebKit will not re-apply overflow
// properties until any transitions have ended, so waiting a frame for state would cause jank.
() => (hasOverflow(element) ? scrollbarCss(padded) : overflowCss),
[element, padded]
)
return useMemo(() => (overflow ? scrollbarCss(padded) : overflowCss), [overflow, padded])
function hasOverflow(element: HTMLElement | null) {
if (!element) {
return true
}
if (!element) return true
return element.scrollHeight > element.clientHeight
}
}

View File

@@ -4,6 +4,12 @@ import { useMemo } from 'react'
import { computeFiatValuePriceImpact } from 'utils/computeFiatValuePriceImpact'
import { getPriceImpactWarning } from 'utils/prices'
export interface PriceImpact {
percent: Percent
warning?: 'warning' | 'error'
toString(): string
}
/**
* Computes input/output USDC equivalents and the price impact.
* Returns the price impact as a human readable string.
@@ -14,20 +20,20 @@ export default function useUSDCPriceImpact(
): {
inputUSDC?: CurrencyAmount<Token>
outputUSDC?: CurrencyAmount<Token>
priceImpact?: string
warning?: 'warning' | 'error'
impact?: PriceImpact
} {
const inputUSDC = useUSDCValue(inputAmount) ?? undefined
const outputUSDC = useUSDCValue(outputAmount) ?? undefined
return useMemo(() => {
const priceImpact = computeFiatValuePriceImpact(inputUSDC, outputUSDC)
const warning = getPriceImpactWarning(priceImpact)
return {
inputUSDC,
outputUSDC,
priceImpact: priceImpact && toHumanReadablePriceImpact(priceImpact),
warning,
}
const impact = priceImpact
? {
percent: priceImpact,
warning: getPriceImpactWarning(priceImpact),
toString: () => toHumanReadablePriceImpact(priceImpact),
}
: undefined
return { inputUSDC, outputUSDC, impact }
}, [inputUSDC, outputUSDC])
}

View File

@@ -1,33 +0,0 @@
import { RefObject, useEffect } from 'react'
export const UNMOUNTING = 'unmounting'
/**
* Delays a node's unmounting so that an animation may be applied.
* An animation *must* be applied, or the node will not unmount.
*/
export default function useUnmount(node: RefObject<HTMLElement>) {
useEffect(() => {
const current = node.current
const parent = current?.parentElement
const removeChild = parent?.removeChild
if (parent && removeChild) {
parent.removeChild = function <T extends Node>(child: T) {
if ((child as Node) === current) {
current.classList.add(UNMOUNTING)
current.onanimationend = () => {
removeChild.call(parent, child)
}
return child
} else {
return removeChild.call(parent, child) as T
}
}
}
return () => {
if (parent && removeChild) {
parent.removeChild = removeChild
}
}
}, [node])
}

View File

@@ -1,6 +1,6 @@
import { i18n } from '@lingui/core'
import { I18nProvider } from '@lingui/react'
import { DEFAULT_CATALOG, DEFAULT_LOCALE, SupportedLocale } from 'constants/locales'
import { SupportedLocale } from 'constants/locales'
import {
af,
ar,
@@ -78,12 +78,13 @@ const plurals: LocalePlural = {
export async function dynamicActivate(locale: SupportedLocale) {
i18n.loadLocaleData(locale, { plurals: () => plurals[locale] })
// There are no default messages in production; instead, bundle the default to save a network request:
// see https://github.com/lingui/js-lingui/issues/388#issuecomment-497779030
const catalog =
locale === DEFAULT_LOCALE ? DEFAULT_CATALOG : await import(`${process.env.REACT_APP_LOCALES}/${locale}.js`)
// Bundlers will either export it as default or as a named export named default.
i18n.load(locale, catalog.messages || catalog.default.messages)
try {
// There are no default messages in production,
// see https://github.com/lingui/js-lingui/issues/388#issuecomment-497779030
const catalog = await import(`${process.env.REACT_APP_LOCALES}/${locale}.js`)
// Bundlers will either export it as default or as a named export named default.
i18n.load(locale, catalog.messages || catalog.default.messages)
} catch {}
i18n.activate(locale)
}

View File

@@ -0,0 +1,39 @@
import { JsonRpcProvider } from '@ethersproject/providers'
import { Actions, Connector, ProviderConnectInfo, ProviderRpcError } from '@web3-react/types'
function parseChainId(chainId: string) {
return Number.parseInt(chainId, 16)
}
export default class JsonRpcConnector extends Connector {
constructor(actions: Actions, public customProvider: JsonRpcProvider) {
super(actions)
customProvider
.on('connect', ({ chainId }: ProviderConnectInfo): void => {
this.actions.update({ chainId: parseChainId(chainId) })
})
.on('disconnect', (error: ProviderRpcError): void => {
this.actions.reportError(error)
})
.on('chainChanged', (chainId: string): void => {
this.actions.update({ chainId: parseChainId(chainId) })
})
.on('accountsChanged', (accounts: string[]): void => {
this.actions.update({ accounts })
})
}
async activate() {
this.actions.startActivation()
try {
const [{ chainId }, accounts] = await Promise.all([
this.customProvider.getNetwork(),
this.customProvider.listAccounts(),
])
this.actions.update({ chainId, accounts })
} catch (e) {
this.actions.reportError(e)
}
}
}

View File

@@ -0,0 +1,36 @@
import { RefObject } from 'react'
export function isAnimating(node: Animatable | Document) {
return (node.getAnimations().length ?? 0) > 0
}
export const UNMOUNTING = 'unmounting'
/**
* Delays a node's unmounting until any animations on that node are finished, so that an unmounting
* animation may be applied. If there is no animation, this is a no-op.
*
* CSS should target the UNMOUNTING class to determine when to apply an unmounting animation.
*/
export function delayUnmountForAnimation(node: RefObject<HTMLElement>) {
const current = node.current
const parent = current?.parentElement
const removeChild = parent?.removeChild
if (parent && removeChild) {
parent.removeChild = function <T extends Node>(child: T) {
if ((child as Node) === current) {
current.classList.add(UNMOUNTING)
if (isAnimating(current)) {
current.addEventListener('animationend', () => {
removeChild.call(parent, child)
})
} else {
removeChild.call(parent, child)
}
return child
} else {
return removeChild.call(parent, child) as T
}
}
}
}

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: af_ZA\n"
"Language-Team: Afrikaans\n"
@@ -192,7 +192,7 @@ msgstr "Adres het geen eis nie"
msgid "Against"
msgstr "Teen"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Laat toe"
@@ -204,14 +204,22 @@ msgstr "Laat migrasie van LP-teken toe"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Laat handel oor hoë prysimpak toe en slaan die bevestigingsskerm oor. Gebruik op eie risiko."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Laat in jou beursie"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Laat die Uniswap-protokol toe om u {0} te gebruik"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Laat eers {0} toe"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Toelaag hangende"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Toegelaat"
@@ -224,13 +232,12 @@ msgstr "Bedrag"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "'N Fout het voorgekom tydens die uitvoering van hierdie ruil. U moet dalk u glyverdraagsaamheid verhoog. As dit nie werk nie, kan daar 'n onversoenbaarheid wees met die teken wat u verhandel. Opmerking: fooi vir oordrag en herbasis-tokens is nie versoenbaar met Uniswap V3 nie."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Goedkeuring hangende"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Goedkeur"
@@ -239,6 +246,10 @@ msgstr "Goedkeur"
msgid "Approve Token"
msgstr "Keur token goed"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Keur in jou beursie goed"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Keur token goed"
msgid "Approve {0}"
msgstr "Goedkeur {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Keur eers {0}"
@@ -498,6 +509,11 @@ msgstr "Bevestig die aanbod"
msgid "Confirm Swap"
msgstr "Bevestig die ruil"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Bevestig in jou beursie"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Bevestig omruiling"
@@ -516,7 +532,6 @@ msgstr "Bevestig transaksie in beursie"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Koppel jou beursie"
msgid "Connected with {name}"
msgstr "Gekoppel met {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Skakel {0} om na {1} sonder om te gly"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Gekopieer"
@@ -724,7 +743,6 @@ msgstr "Doeltreffendheidsvergelyking"
msgid "Enter a percent"
msgstr "Voer 'n persentasie in"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Voer 'n ontvanger in"
@@ -740,7 +758,6 @@ msgstr "Voer 'n adres in om 'n UNI-eis te aktiveer. As die adres 'n UNI kan eis,
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Voer geldige tekenadres in"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Voer {0} bedrag in"
@@ -783,6 +798,10 @@ msgstr "Kon nie koppel nie. Probeer om die bladsy te verfris."
msgid "Error details"
msgstr "Foutbesonderhede"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Kon nie handel haal nie"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Kon nie lys invoer nie"
@@ -978,9 +997,6 @@ msgstr "Onvoldoende likiditeit in die swembad vir jou handel"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Ongeldige reeks gekies. Die minimum prys moet laer wees as die maksimum prys."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Ongeldige ontvanger"
@@ -1572,7 +1587,7 @@ msgstr "Stel terug"
msgid "Return"
msgstr "Keer terug"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Review ruil"
@@ -1596,7 +1611,6 @@ msgstr "Kies 'n netwerk"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Nie-ondersteunde bates"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Nie-ondersteunde netwerk - skakel oor na 'n ander om handel te dryf."
msgid "Unsupported network - switch to another to trade"
msgstr "Nie-ondersteunde netwerk - skakel oor na 'n ander om handel te dryf"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Naamloos"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Maak oop"
@@ -2091,17 +2104,13 @@ msgstr "Pak <0/> tot {0}"
msgid "Unwrap confirmed"
msgstr "Ontwikkel bevestig"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Ontwikkel inheemse geldeenheid."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Ontwikkel hangende"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Ontwikkel inheemse geldeenheid."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Ontwikkel {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Onttrek {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2 onttrek!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Draai toe"
@@ -2284,17 +2292,13 @@ msgstr "Wikkel <0/> tot {0}"
msgid "Wrap confirmed"
msgstr "Wrap bevestig"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Wikkel inheemse geldeenheid."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Wikkel hangende"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Omhul inheemse geldeenheid."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Verpak {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: ar_SA\n"
"Language-Team: Arabic\n"
@@ -192,7 +192,7 @@ msgstr "العنوان ليس لديه مطالبة متاحة"
msgid "Against"
msgstr "ضد"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "السماح"
@@ -204,14 +204,22 @@ msgstr "السماح بترحيل رمز LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "السماح بتداول تأثير الأسعار المرتفعة وتخطي شاشة التأكيد. استخدمه على مسؤوليتك الخاصة."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "السماح في محفظتك"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "السماح لبروتوكول Uniswap باستخدام {0} الخاص بك"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "اسمح بـ {0} أولاً"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "البدل معلق"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "مسموح"
@@ -224,13 +232,12 @@ msgstr "المبلغ"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "حدث خطأ أثناء محاولة تنفيذ هذا التبادل. قد تحتاج إلى زيادة تحملك للانزلاق. إذا لم يفلح ذلك ، فقد يكون هناك عدم توافق مع الرمز الذي تتداوله. ملاحظة: رسوم النقل وإعادة الرموز المميزة غير متوافقة مع Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "في انتظار الموافقة"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "الموافقة"
@@ -239,6 +246,10 @@ msgstr "الموافقة"
msgid "Approve Token"
msgstr "الموافقة على رمز"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "الموافقة في محفظتك"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "الموافقة على رمز"
msgid "Approve {0}"
msgstr "الموافقة على {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "الموافقة على {0} أولاً"
@@ -498,6 +509,11 @@ msgstr "تأكيد الإمداد"
msgid "Confirm Swap"
msgstr "تأكيد المبادلة"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "قم بالتأكيد في محفظتك"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "تأكيد المبادلة"
@@ -516,7 +532,6 @@ msgstr "تأكيد المعاملة في المحفظة"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "قم بتوصيل محفظتك"
msgid "Connected with {name}"
msgstr "متصل مع {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "حوّل من {0} إلى {1} مع عدم وجود انزلاق"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "تم النسخ"
@@ -724,7 +743,6 @@ msgstr "مقارنة الكفاءة"
msgid "Enter a percent"
msgstr "أدخل نسبة مئوية"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "أدخل المستلم"
@@ -740,7 +758,6 @@ msgstr "أدخل عنوانًا لتشغيل مطالبة UNI. إذا كان ا
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "أدخل عنوان رمز صالح"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "أدخل مبلغ {0}"
@@ -783,6 +798,10 @@ msgstr "خطأ في الاتصال. حاول تحديث الصفحة."
msgid "Error details"
msgstr "تفاصيل الخطأ"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "خطأ في جلب التجارة"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "خطأ في استيراد قائمة"
@@ -978,9 +997,6 @@ msgstr "سيولة غير كافية في المجمع لتداولك"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "النطاق المحدد غير صالح. يجب أن يكون الحد الأدنى للسعر أقل من الحد الأقصى للسعر."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "مستلم غير صالح"
@@ -1572,7 +1587,7 @@ msgstr "إعادة ضبط"
msgid "Return"
msgstr "رجوع"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "مراجعة المبادلة"
@@ -1596,7 +1611,6 @@ msgstr "حدد شبكة"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "الأصول غير المدعومة"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "شبكة غير مدعومة - قم بالتبديل إلى شبكة أخرى للتداول."
msgid "Unsupported network - switch to another to trade"
msgstr "شبكة غير مدعومة - قم بالتبديل إلى شبكة أخرى للتداول"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "بدون عنوان"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Unwrap"
@@ -2091,17 +2104,13 @@ msgstr "قم بفك التفاف <0/> إلى {0}"
msgid "Unwrap confirmed"
msgstr "أكد Unwrap"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "فك العملة المحلية."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "فك التفاف معلق"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "فك التفاف العملة المحلية."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "فك {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "سحب {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "سحب UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "التفاف"
@@ -2284,17 +2292,13 @@ msgstr "لف من <0/> إلى {0}"
msgid "Wrap confirmed"
msgstr "أكد التفاف"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "لف العملة المحلية."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "التفاف معلق"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "التفاف العملة المحلية."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "التفاف {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: ca_ES\n"
"Language-Team: Catalan\n"
@@ -192,7 +192,7 @@ msgstr "L'adreça no té cap reclamació disponible"
msgid "Against"
msgstr "En contra"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Permetre"
@@ -204,14 +204,22 @@ msgstr "Permet la migració de token LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Permet operacions amb alt impacte en els preus i ometre la pantalla de confirmació. Utilitzeu al vostre propi risc."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Permeteu-ho a la vostra cartera"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Permetre que el protocol Uniswap utilitzi el vostre {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Primer permeteu {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Subvenció pendent"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Es permet"
@@ -224,13 +232,12 @@ msgstr "Import"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "S'ha produït un error en intentar executar aquest intercanvi. És possible que hàgiu d'augmentar la tolerància a la relliscada. Si això no funciona, és possible que hi hagi una incompatibilitat amb el testimoni que esteu negociant. Nota: els tokens de transferència i rebase no són compatibles amb Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Aprovació pendent"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Aprovar"
@@ -239,6 +246,10 @@ msgstr "Aprovar"
msgid "Approve Token"
msgstr "Aprova el testimoni"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Aprova a la teva cartera"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Aprova el testimoni"
msgid "Approve {0}"
msgstr "Aprova {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Aprova {0} primer"
@@ -498,6 +509,11 @@ msgstr "Confirmeu el subministrament"
msgid "Confirm Swap"
msgstr "Confirmeu l'intercanvi"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Confirmeu a la vostra cartera"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Confirmeu l'intercanvi"
@@ -516,7 +532,6 @@ msgstr "Confirmeu la transacció a la cartera"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Connecta la teva cartera"
msgid "Connected with {name}"
msgstr "Connectat amb {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Converteix {0} a {1} sense lliscament"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Copiat"
@@ -724,7 +743,6 @@ msgstr "Comparació de leficiència"
msgid "Enter a percent"
msgstr "Introduïu un percentatge"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Introduïu un destinatari"
@@ -740,7 +758,6 @@ msgstr "Introduïu una adreça per activar una reclamació UNI. Si l'adreça té
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Introduïu una adreça de fitxa vàlida"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Introduïu {0} import"
@@ -783,6 +798,10 @@ msgstr "Error de connexió. Proveu d'actualitzar la pàgina."
msgid "Error details"
msgstr "Detalls de l'error"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "S'ha produït un error en recuperar el comerç"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Error en importar la llista"
@@ -978,9 +997,6 @@ msgstr "Liquiditat insuficient al pool per al vostre comerç"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "L'interval no és vàlid. El preu mínim ha de ser inferior al preu màxim."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Destinatari no vàlid"
@@ -1572,7 +1587,7 @@ msgstr "Restableix"
msgid "Return"
msgstr "Torna"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Intercanvi de ressenyes"
@@ -1596,7 +1611,6 @@ msgstr "Seleccioneu una xarxa"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Actius no admesos"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Xarxa no compatible: canvieu a una altra per operar."
msgid "Unsupported network - switch to another to trade"
msgstr "Xarxa no compatible: canvieu a una altra per operar"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Sense títol"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Desembolicar"
@@ -2091,17 +2104,13 @@ msgstr "Desembolica de <0/> a {0}"
msgid "Unwrap confirmed"
msgstr "Desembolcall confirmat"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Desembolica la moneda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Desembolcall pendent"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Desembolcall de la moneda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Desembolica {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Retirant {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Va retirar UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Embolicar"
@@ -2284,17 +2292,13 @@ msgstr "Embolcalla de <0/> a {0}"
msgid "Wrap confirmed"
msgstr "Embolcall confirmat"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Embolica la moneda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Embolcall pendent"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Embolcall de moneda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Embolcall {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: cs_CZ\n"
"Language-Team: Czech\n"
@@ -192,7 +192,7 @@ msgstr "Adresa nemá žádný dostupný nárok"
msgid "Against"
msgstr "Proti"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Dovolit"
@@ -204,14 +204,22 @@ msgstr "Povolit migraci žetonů LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Povolit obchody s vysokým dopadem na cenu a přeskočit obrazovku s potvrzením. Používejte na vlastní nebezpečí."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Povolte v peněžence"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Povolit protokolu Uniswap používat váš {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Nejprve povolte {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Čeká se na příspěvek"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Povoleno"
@@ -224,13 +232,12 @@ msgstr "Částka"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Při pokusu o provedení tohoto swapu došlo k chybě. Možná budete muset zvýšit toleranci skluzu. Pokud to nefunguje, může dojít k nekompatibilitě s tokenem, s nímž obchodujete. Poznámka: Poplatky za tokeny za převody a rebase nejsou kompatibilní s Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Čeká se na schválení"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Schválit"
@@ -239,6 +246,10 @@ msgstr "Schválit"
msgid "Approve Token"
msgstr "Schválit token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Schvalujte v peněžence"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Schválit token"
msgid "Approve {0}"
msgstr "Schválit {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Nejprve schválit {0}"
@@ -498,6 +509,11 @@ msgstr "Potvrdit zásobu"
msgid "Confirm Swap"
msgstr "Potvrdit výměnu"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Potvrďte v peněžence"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Potvrďte výměnu"
@@ -516,7 +532,6 @@ msgstr "Potvrďte transakci v peněžence"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Připojte svou peněženku"
msgid "Connected with {name}"
msgstr "Propojeno s {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Převeďte {0} na {1} bez skluzu"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Zkopírováno"
@@ -724,7 +743,6 @@ msgstr "Porovnání efektivity"
msgid "Enter a percent"
msgstr "Zadejte procento"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Zadejte příjemce"
@@ -740,7 +758,6 @@ msgstr "Chcete-li spustit nárokování UNI, zadejte adresu. Jestliže bude mít
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Zadejte platnou adresu žetonu"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Zadejte částku {0}"
@@ -783,6 +798,10 @@ msgstr "Chyba připojení. Zkuste obnovit stránku."
msgid "Error details"
msgstr "Detaily chyby"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Chyba při načítání obchodu"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Chyba importu seznamu"
@@ -978,9 +997,6 @@ msgstr "Nedostatečná likvidita v poolu pro váš obchod"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Vybrán neplatný rozsah. Minimální cena musí být nižší než maximální cena."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Neplatný příjemce"
@@ -1572,7 +1587,7 @@ msgstr "Resetovat"
msgid "Return"
msgstr "Návrat"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Výměna recenze"
@@ -1596,7 +1611,6 @@ msgstr "Vyberte síť"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Nepodporovaná aktiva"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Nepodporovaná síť přepněte na jinou a obchodujte."
msgid "Unsupported network - switch to another to trade"
msgstr "Nepodporovaná síť přepněte na jinou a obchodujte"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Nepojmenovaná"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Rozbalit"
@@ -2091,17 +2104,13 @@ msgstr "Rozbalte <0/> až {0}"
msgid "Unwrap confirmed"
msgstr "Rozbalení potvrzeno"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Rozbalte nativní měnu."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Rozbalení čeká na vyřízení"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Rozbalení nativní měny."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Rozbalit {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Výběr {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2 vybráno!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Zalomit"
@@ -2284,17 +2292,13 @@ msgstr "Zabalit <0/> až {0}"
msgid "Wrap confirmed"
msgstr "Zabalení potvrzeno"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Zabalit nativní měnu."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Čeká se na zabalení"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Balení nativní měny."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Zabalit {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: da_DK\n"
"Language-Team: Danish\n"
@@ -192,7 +192,7 @@ msgstr "Adresse har ingen tilgængelig krav"
msgid "Against"
msgstr "Imod"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Give lov til"
@@ -204,14 +204,22 @@ msgstr "Tillad overførsel af LP-token"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Tillad høj pris påvirkning handler og springer over bekræftelsesskærmen. Brug på egen risiko."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Tillad i din pung"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Tillad Uniswap-protokollen at bruge din {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Tillad {0} først"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Godtgørelse afventer"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Tilladt"
@@ -224,13 +232,12 @@ msgstr "Beløb"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Der opstod en fejl under forsøg på at udføre denne swap. Det kan være nødvendigt at øge din glidningstolerance. Hvis det ikke virker, kan der være en uforenelighed med det token, du handler. Bemærk: gebyr ved overførsel og rebase-tokens er inkompatibelt med Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Godkendelse afventer"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Godkend"
@@ -239,6 +246,10 @@ msgstr "Godkend"
msgid "Approve Token"
msgstr "Godkend token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Godkend i din tegnebog"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Godkend token"
msgid "Approve {0}"
msgstr "Godkend {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Godkend {0} først"
@@ -498,6 +509,11 @@ msgstr "Bekræft levering"
msgid "Confirm Swap"
msgstr "Bekræft skift"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Bekræft i din tegnebog"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Bekræft swap"
@@ -516,7 +532,6 @@ msgstr "Bekræft transaktion i tegnebogen"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Tilslut din tegnebog"
msgid "Connected with {name}"
msgstr "Forbundet med {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Konverter {0} til {1} uden glidning"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Kopieret"
@@ -724,7 +743,6 @@ msgstr "Effektivitetssammenligning"
msgid "Enter a percent"
msgstr "Indtast en procent"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Indtast en modtager"
@@ -740,7 +758,6 @@ msgstr "Indtast en adresse for at udløse et UNI-krav. Hvis adressen har nogen U
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Indtast gyldig tokenadresse"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Indtast {0} beløb"
@@ -783,6 +798,10 @@ msgstr "Der opstod en fejl. Prøv at opdatere siden."
msgid "Error details"
msgstr "Fejldetaljer"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Fejl ved hentning af handel"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Fejl ved import af liste"
@@ -978,9 +997,6 @@ msgstr "Utilstrækkelig likviditet i puljen til din handel"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Ugyldigt interval valgt. Minimumspris skal være lavere end den maksimale pris."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Ugyldig modtager"
@@ -1572,7 +1587,7 @@ msgstr "Nulstil"
msgid "Return"
msgstr "Retur"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Anmeldelsesbytte"
@@ -1596,7 +1611,6 @@ msgstr "Vælg et netværk"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Ikke-understøttede aktiver"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Ikke-understøttet netværk - skift til et andet for at handle."
msgid "Unsupported network - switch to another to trade"
msgstr "Ikke-understøttet netværk - skift til et andet for at handle"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Unavngivet"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Pak ud"
@@ -2091,17 +2104,13 @@ msgstr "Pak <0/> til {0}"
msgid "Unwrap confirmed"
msgstr "Udpakning bekræftet"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Pak den oprindelige valuta ud."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Udpakning afventer"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Udpakning af indfødt valuta."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Pak {0}ud"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Udbetal {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Hæv UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Ombryd"
@@ -2284,17 +2292,13 @@ msgstr "Ombryd <0/> til {0}"
msgid "Wrap confirmed"
msgstr "Indpakning bekræftet"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Indpak den oprindelige valuta."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Indpakning afventer"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Indpakning af indfødt valuta."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Indpak {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: de_DE\n"
"Language-Team: German\n"
@@ -192,7 +192,7 @@ msgstr "Adresse hat keinen gültigen Anspruch"
msgid "Against"
msgstr "Gegen"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Erlauben"
@@ -204,14 +204,22 @@ msgstr "LP-Token Migration erlauben"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Erlaube hohe Preisauswirkungen und überspringe den Bestätigungsbildschirm. Auf eigene Gefahr."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Lassen Sie es in Ihrer Brieftasche zu"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Erlaube dem Uniswap Protokoll, {0} zu verwenden"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Lassen Sie zuerst {0} zu"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Genehmigung ausstehend"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Erlaubt"
@@ -224,13 +232,12 @@ msgstr "Betrag"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Beim Versuch, diesen Swap auszuführen, ist ein Fehler aufgetreten. Möglicherweise müssen Sie Ihre Schlupftoleranz erhöhen. Wenn dies nicht funktioniert, liegt möglicherweise eine Inkompatibilität mit dem Token vor, den Sie handeln. Hinweis: Gebühren für Transfer- und Rebase-Token sind nicht mit Uniswap V3 kompatibel."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Bestätigung ausstehend"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Bestätigen"
@@ -239,6 +246,10 @@ msgstr "Bestätigen"
msgid "Approve Token"
msgstr "Token genehmigen"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Genehmigen Sie in Ihrer Brieftasche"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Token genehmigen"
msgid "Approve {0}"
msgstr "{0} freischalten"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Genehmigen Sie zuerst {0}"
@@ -498,6 +509,11 @@ msgstr "Angebot bestätigen"
msgid "Confirm Swap"
msgstr "Tausch bestätigen"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Bestätigen Sie in Ihrer Brieftasche"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Tausch bestätigen"
@@ -516,7 +532,6 @@ msgstr "Transaktion in Wallet bestätigen"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Verbinden Sie Ihre Brieftasche"
msgid "Connected with {name}"
msgstr "Verbunden mit {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Konvertieren Sie {0} in {1} ohne Schlupf"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Kopiert"
@@ -724,7 +743,6 @@ msgstr "Effizienzvergleich"
msgid "Enter a percent"
msgstr "Prozentsatz eingeben"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Empfänger eingeben"
@@ -740,7 +758,6 @@ msgstr "Geben Sie eine Adresse ein, um UNI einzufordern. Wenn die Adresse Anspru
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Gültige Token-Adresse eingeben"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "{0} Betrag eingeben"
@@ -783,6 +798,10 @@ msgstr "Verbindungsfehler. Versuchen Sie die Seite neu zu laden."
msgid "Error details"
msgstr "Fehlerdetails"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Fehler beim Abrufen des Handels"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Fehler beim Import der Liste"
@@ -978,9 +997,6 @@ msgstr "Unzureichende Liquidität im Pool für Ihren Handel"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Ungültiger Bereich ausgewählt. Der Mindestpreis muss kleiner als der Maximalpreis sein."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Ungültiger Empfänger"
@@ -1572,7 +1587,7 @@ msgstr "Zurücksetzen"
msgid "Return"
msgstr "Zurück"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Bewertungstausch"
@@ -1596,7 +1611,6 @@ msgstr "Wählen Sie ein Netzwerk"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Nicht unterstützte Assets"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Nicht unterstütztes Netzwerk - Wechseln Sie zu einem anderen, um zu handeln."
msgid "Unsupported network - switch to another to trade"
msgstr "Nicht unterstütztes Netzwerk - Wechseln Sie zu einem anderen, um zu handeln"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Ohne Titel"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Unwrap"
@@ -2091,17 +2104,13 @@ msgstr "Auspacken <0/> bis {0}"
msgid "Unwrap confirmed"
msgstr "Auspacken bestätigt"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Packen Sie die einheimische Währung aus."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Auspacken steht an"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Auspacken der einheimischen Währung."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "{0}auspacken"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Hebe {0} UNI-V2 ab"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2 abgehoben!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Wrap"
@@ -2284,17 +2292,13 @@ msgstr "Wrap <0/> bis {0}"
msgid "Wrap confirmed"
msgstr "Wrap bestätigt"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Wickeln Sie die einheimische Währung ein."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Umbruch ausstehend"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Verpackung der einheimischen Währung."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Wickeln Sie {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: el_GR\n"
"Language-Team: Greek\n"
@@ -192,7 +192,7 @@ msgstr "Η διεύθυνση δεν έχει διαθέσιμη διεκδίκ
msgid "Against"
msgstr "Εναντίον"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Επιτρέπω"
@@ -204,14 +204,22 @@ msgstr "Επιτρέψτε τη μεταφορά μάρκας παρόχου ρ
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Επιτρέψτε τις διαπραγματεύσεις υψηλής επίδρασης τιμών και παραλείψτε την οθόνη επιβεβαίωσης. Χρησιμοποιήστε τη με δική σας ευθύνη."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Αφήστε το πορτοφόλι σας"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Επιτρέψτε στο πρωτόκολλο Uniswap να χρησιμοποιήσει το {0} σας"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Επιτρέψτε πρώτα το {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Επίδομα σε εκκρεμότητα"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Επιτρέπεται"
@@ -224,13 +232,12 @@ msgstr "Ποσό"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Παρουσιάστηκε σφάλμα κατά την προσπάθεια εκτέλεσης αυτής της ανταλλαγής. Ίσως χρειαστεί να αυξήσετε την ανοχή ολίσθησης. Εάν αυτό δεν λειτουργεί, μπορεί να υπάρχει ασυμβατότητα με το διακριτικό που διαπραγματεύεστε. Σημείωση: τα τέλη μεταφοράς και επαναφοράς δεν είναι συμβατά με το Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Η έγκριση εκκρεμεί"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Έγκριση"
@@ -239,6 +246,10 @@ msgstr "Έγκριση"
msgid "Approve Token"
msgstr "Έγκριση κουπονιού"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Έγκριση στο πορτοφόλι σας"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Έγκριση κουπονιού"
msgid "Approve {0}"
msgstr "Έγκριση {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Πρώτα εγκρίνετε το {0}"
@@ -498,6 +509,11 @@ msgstr "Επιβεβαίωση Παροχής"
msgid "Confirm Swap"
msgstr "Επιβεβαίωση ανταλλαγής"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Επιβεβαίωση στο πορτοφόλι σας"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Επιβεβαίωση ανταλλαγής"
@@ -516,7 +532,6 @@ msgstr "Επιβεβαίωση συναλλαγής στο πορτοφόλι"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Συνδέστε το πορτοφόλι σας"
msgid "Connected with {name}"
msgstr "Συνδέθηκε με {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Μετατρέψτε το {0} σε {1} χωρίς ολίσθηση"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Αντιγράφηκε"
@@ -724,7 +743,6 @@ msgstr "Σύγκριση αποδοτικότητας"
msgid "Enter a percent"
msgstr "Εισαγωγή ποσοστού"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Εισαγάγετε έναν παραλήπτη"
@@ -740,7 +758,6 @@ msgstr "Εισάγετε μια διεύθυνση για να εκκινήσε
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Εισάγετε μια διεύθυνση έγκυρης μάρκας"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Εισαγάγετε {0} ποσό"
@@ -783,6 +798,10 @@ msgstr "Σφάλμα σύνδεσης. Προσπαθήστε ξανά αναν
msgid "Error details"
msgstr "Λεπτομέρειες σφάλματος"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Σφάλμα κατά την ανάκτηση της συναλλαγής"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Σφάλμα εισαγωγής λίστας"
@@ -978,9 +997,6 @@ msgstr "Ανεπαρκής ρευστότητα στο pool για τις συν
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Επιλέχθηκε μη έγκυρο εύρος. Η ελάχιστη τιμή πρέπει να είναι χαμηλότερη από τη μέγιστη τιμή."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Μη έγκυρος παραλήπτης"
@@ -1572,7 +1587,7 @@ msgstr "Επαναφορά"
msgid "Return"
msgstr "Επιστροφή"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Ανταλλαγή κριτικής"
@@ -1596,7 +1611,6 @@ msgstr "Επιλέξτε ένα δίκτυο"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Μη Υποστηριζόμενα Περιουσιακά Στοιχεία"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Μη υποστηριζόμενο δίκτυο - μεταβείτε σε άλλο για συναλλαγές."
msgid "Unsupported network - switch to another to trade"
msgstr "Μη υποστηριζόμενο δίκτυο - μεταβείτε σε άλλο για συναλλαγές"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Χωρίς τίτλο"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Αποκαλύπτω"
@@ -2091,17 +2104,13 @@ msgstr "Ξετυλίξτε <0/> προς {0}"
msgid "Unwrap confirmed"
msgstr "Το ξετύλιγμα επιβεβαιώθηκε"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Ξετυλίξτε το εγγενές νόμισμα."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Εκκρεμεί το ξετύλιγμα"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Ξετυλίγοντας το εγγενές νόμισμα."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Ξετυλίξτε {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Ανάληψη {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Πραγματοποιήθηκε ανάληψη UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Καλύπτω"
@@ -2284,17 +2292,13 @@ msgstr "Τυλίξτε <0/> προς {0}"
msgid "Wrap confirmed"
msgstr "Η αναδίπλωση επιβεβαιώθηκε"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Τυλίξτε το εγγενές νόμισμα."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Ανακύκλωση σε εκκρεμότητα"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Αναδίπλωση εγγενούς νομίσματος."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Τυλίξτε {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: es_ES\n"
"Language-Team: Spanish\n"
@@ -192,7 +192,7 @@ msgstr "La dirección no tiene reclamo disponible"
msgid "Against"
msgstr "Contra"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Permitir"
@@ -204,14 +204,22 @@ msgstr "Permitir migración de token LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Permitir operaciones de alto impacto de precio y omitir la pantalla de confirmación. Úselo bajo su propio riesgo."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Permitir en su billetera"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Permitir que el protocolo Uniswap utilice su {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Permitir {0} primero"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Asignación pendiente"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Permitido"
@@ -224,13 +232,12 @@ msgstr "Cantidad"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Se produjo un error al intentar ejecutar este intercambio. Es posible que deba aumentar su tolerancia al deslizamiento. Si eso no funciona, puede haber una incompatibilidad con el token que está negociando. Nota: la tarifa de transferencia y los tokens de rebase son incompatibles con Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Aprobación pendiente"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Aprobar"
@@ -239,6 +246,10 @@ msgstr "Aprobar"
msgid "Approve Token"
msgstr "Aprobar token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Aprueba en tu billetera"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Aprobar token"
msgid "Approve {0}"
msgstr "Aprobar {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Aprobar {0} primero"
@@ -498,6 +509,11 @@ msgstr "Confirmar suministro"
msgid "Confirm Swap"
msgstr "Confirmar intercambio"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Confirma en tu billetera"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Confirmar intercambio"
@@ -516,7 +532,6 @@ msgstr "Confirmar transacción en billetera"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Conecta tu billetera"
msgid "Connected with {name}"
msgstr "Conectado con {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Convierta {0} a {1} sin deslizamiento"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Copiado"
@@ -724,7 +743,6 @@ msgstr "Comparación de eficiencia"
msgid "Enter a percent"
msgstr "Introduzca un porcentaje"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Introduzca un destinatario"
@@ -740,7 +758,6 @@ msgstr "Introduzca una dirección para activar una reclamación de UNI. Si la di
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Introduzca una dirección de token válida"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Ingrese {0} monto"
@@ -783,6 +798,10 @@ msgstr "Error de conexión. Intente actualizar la página."
msgid "Error details"
msgstr "Error de detalles"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Error al obtener comercio"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Error importando lista"
@@ -978,9 +997,6 @@ msgstr "Liquidez insuficiente en el grupo para su operación"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Rango seleccionado no válido. El precio mínimo debe ser inferior al precio máximo."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Receptor no válido"
@@ -1572,7 +1587,7 @@ msgstr "Reiniciar"
msgid "Return"
msgstr "Retorno"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Intercambio de opiniones"
@@ -1596,7 +1611,6 @@ msgstr "Seleccione una red"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Activos no soportados"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Red no admitida: cambie a otra para comerciar."
msgid "Unsupported network - switch to another to trade"
msgstr "Red no admitida: cambie a otra para comerciar"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Intitulado"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Unwrap"
@@ -2091,17 +2104,13 @@ msgstr "Desenvolver <0/> a {0}"
msgid "Unwrap confirmed"
msgstr "Desenvolver confirmado"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Desenvuelva la moneda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Desenvolver pendiente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Desenvolviendo la moneda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Desenvolver {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Retirando {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "¡Retirado UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Envoltura"
@@ -2284,17 +2292,13 @@ msgstr "Envuelva <0/> a {0}"
msgid "Wrap confirmed"
msgstr "Envoltura confirmada"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Envuelva la moneda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Envoltura pendiente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Envolviendo moneda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Envolver {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: fi_FI\n"
"Language-Team: Finnish\n"
@@ -192,7 +192,7 @@ msgstr "Osoitteella ei ole lunastettavaa"
msgid "Against"
msgstr "Vastaan"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Sallia"
@@ -204,14 +204,22 @@ msgstr "Salli LP-rahakkeen siirtäminen"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Salli korkean hintavaikutuksen kaupat ja ohita vahvistusnäyttö. Käytä omalla vastuullasi."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Salli lompakossasi"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Salli Uniswap-protokollan käyttää {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Salli ensin {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Korvaus vireillä"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Sallittu"
@@ -224,13 +232,12 @@ msgstr "Määrä"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Tapahtui virhe yritettäessä suorittaa tämä vaihto. Saatat joutua lisäämään luistonsietokykyäsi. Jos se ei toimi, kaupankäynnin kohteena olevan tunnuksen kanssa saattaa olla ristiriita. Huomautus: siirto- ja uudelleentase-tunnusten maksu ei ole yhteensopiva Uniswap V3: n kanssa."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Hyväksyntä odottaa"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Hyväksy"
@@ -239,6 +246,10 @@ msgstr "Hyväksy"
msgid "Approve Token"
msgstr "Hyväksy tunnus"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Hyväksy lompakossasi"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Hyväksy tunnus"
msgid "Approve {0}"
msgstr "Hyväksy {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Hyväksy ensin {0}"
@@ -498,6 +509,11 @@ msgstr "Vahvista tarjonta"
msgid "Confirm Swap"
msgstr "Vahvista vaihto"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Vahvista lompakossasi"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Vahvista vaihto"
@@ -516,7 +532,6 @@ msgstr "Vahvista transaktio lompakossa"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Yhdistä lompakkosi"
msgid "Connected with {name}"
msgstr "Yhdistetty kohteeseen {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Muunna {0} arvoksi {1} ilman liukumista"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Kopioitu"
@@ -724,7 +743,6 @@ msgstr "Tehokkuuden vertailu"
msgid "Enter a percent"
msgstr "Syötä prosenttiosuus"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Syötä vastaanottaja"
@@ -740,7 +758,6 @@ msgstr "Syötä osoite, joka käynnistää UNI-lunastuksen. Jos osoitteella on l
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Syötä kelvollinen rahakeosoite"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Syötä {0} summa"
@@ -783,6 +798,10 @@ msgstr "Virhe yhdistettäessä. Yritä päivittää sivu."
msgid "Error details"
msgstr "Virheen tiedot"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Virhe kauppaa haettaessa"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Virhe tuotaessa luetteloa"
@@ -978,9 +997,6 @@ msgstr "Poolissa ei ole tarpeeksi likviditeettiä kauppaasi varten"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Virheellinen vaihteluväli valittu. Minimihinnan on oltava pienempi kuin maksimihinta."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Virheellinen vastaanottaja"
@@ -1572,7 +1587,7 @@ msgstr "Nollaa"
msgid "Return"
msgstr "Palaa"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Arvostelun vaihto"
@@ -1596,7 +1611,6 @@ msgstr "Valitse verkko"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Ei-tuettuja varoja"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Ei tuettu verkko - vaihda toiseen käydäksesi kauppaa."
msgid "Unsupported network - switch to another to trade"
msgstr "Ei tuettu verkko - vaihda toiseen kauppaa varten"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Nimetön"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Unwrap"
@@ -2091,17 +2104,13 @@ msgstr "Pakkaus <0/> kohteeseen {0}"
msgid "Unwrap confirmed"
msgstr "Purkaminen vahvistettu"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Pura kotivaluutta."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Purkaminen odottaa"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Kotimaan valuutan purkaminen."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Avaa paketti {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Vedetään pois {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2 vedetty pois!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Wrap"
@@ -2284,17 +2292,13 @@ msgstr "Wrap <0/> kohteeseen {0}"
msgid "Wrap confirmed"
msgstr "Wrap vahvistettu"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Kääri alkuperäinen valuutta."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Wrap odottaa"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Kotimaan valuutan kääriminen."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Kääri {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: fr_FR\n"
"Language-Team: French\n"
@@ -192,7 +192,7 @@ msgstr "L'adresse n'a pas de revendication disponible"
msgid "Against"
msgstr "Contre"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Permettre"
@@ -204,14 +204,22 @@ msgstr "Autoriser la migration des jetons LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Autoriser les transactions à impact élevé et enlève l'écran de confirmation. À utiliser à vos risques et périls."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Autoriser dans votre portefeuille"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Autoriser le protocole Uniswap à utiliser vos {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Autoriser {0} en premier"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Allocation en attente"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Autorisé"
@@ -224,13 +232,12 @@ msgstr "Montant"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Une erreur s'est produite lors de la tentative d'exécution de cet échange. Vous devrez peut-être augmenter votre tolérance au slippage. Si cela ne fonctionne pas, il peut y avoir une incompatibilité avec le token que vous échangez. Remarque : les frais sur les token de transfert et de rebase sont incompatibles avec Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "En attente d'approbation"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Approuver"
@@ -239,6 +246,10 @@ msgstr "Approuver"
msgid "Approve Token"
msgstr "Approuver le Token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Approuvez dans votre portefeuille"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Approuver le Token"
msgid "Approve {0}"
msgstr "Approuver {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Approuver {0} premier"
@@ -498,6 +509,11 @@ msgstr "Valider la fourniture"
msgid "Confirm Swap"
msgstr "Valider le swap"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Confirmez dans votre portefeuille"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Confirmer l'échange"
@@ -516,7 +532,6 @@ msgstr "Confirmer la transaction dans le portefeuille"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Connectez votre portefeuille"
msgid "Connected with {name}"
msgstr "Connecté avec {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Convertir {0} en {1} sans glissement"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Copié"
@@ -724,7 +743,6 @@ msgstr "Comparaison d'efficacité"
msgid "Enter a percent"
msgstr "Saisissez un pourcentage"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Saisissez un destinataire"
@@ -740,7 +758,6 @@ msgstr "Saisissez une adresse pour déclencher une réclamation UNI. Si l'adress
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Saisissez une adresse de jeton valide"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Entrez {0} montant"
@@ -783,6 +798,10 @@ msgstr "Erreur de connexion. Essayez d'actualiser la page."
msgid "Error details"
msgstr "Détails de l'erreur"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Erreur lors de la récupération de l'échange"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Erreur lors de l'importation de la liste"
@@ -978,9 +997,6 @@ msgstr "Liquidité insuffisante dans le pool pour votre transaction"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Plage non valide sélectionnée. Le prix minimum doit être inférieur au prix maximum."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Destinataire invalide"
@@ -1572,7 +1587,7 @@ msgstr "Réinitialiser"
msgid "Return"
msgstr "Retour"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Échange d'avis"
@@ -1596,7 +1611,6 @@ msgstr "Sélectionnez un réseau"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Actifs non pris en charge"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Réseau non pris en charge - passez à un autre pour échanger."
msgid "Unsupported network - switch to another to trade"
msgstr "Réseau non pris en charge - passez à un autre pour échanger"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Sans titre"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Unwrap"
@@ -2091,17 +2104,13 @@ msgstr "Déballer <0/> à {0}"
msgid "Unwrap confirmed"
msgstr "Déballage confirmé"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Déballez la devise native."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Déballer en attente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Déballage de la devise native."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Déballer {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Retrait de {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Retrait de UNI-V2 !"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Envelopper"
@@ -2284,17 +2292,13 @@ msgstr "Envelopper <0/> à {0}"
msgid "Wrap confirmed"
msgstr "Emballage confirmé"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Enveloppez la devise locale."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Wrap en attente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Emballage de la monnaie locale."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Enveloppe {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: he_IL\n"
"Language-Team: Hebrew\n"
@@ -192,7 +192,7 @@ msgstr "לכתובת אין כל תביעה זמינה"
msgid "Against"
msgstr "נגד"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "להתיר"
@@ -204,14 +204,22 @@ msgstr "אפשר העברת אסימון LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "אפשר עסקאות עם השפעות מחיר גבוהות ודלג על מסך האישור. השימוש על אחריותך בלבד."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "אפשר בארנק שלך"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "אפשר לפרוטוקול Uniswap להשתמש ב- {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "אפשר קודם {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "קצבה בהמתנה"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "מוּתָר"
@@ -224,13 +232,12 @@ msgstr "כמות"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "אירעה שגיאה בניסיון לבצע החלפה זו. יתכן שתצטרך להגביר את סובלנות ההחלקה שלך. אם זה לא עובד, ייתכן שיש אי התאמה לאסימון שאתה סוחר בו. הערה: עמלה על אסימון העברה וריבוס אינם תואמים ל- Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "מחכה לאישור"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "לְאַשֵׁר"
@@ -239,6 +246,10 @@ msgstr "לְאַשֵׁר"
msgid "Approve Token"
msgstr "אשר אסימון"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "אשר בארנק שלך"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "אשר אסימון"
msgid "Approve {0}"
msgstr "אשר {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "תחילה תאשר {0}"
@@ -498,6 +509,11 @@ msgstr "אשר אספקה"
msgid "Confirm Swap"
msgstr "אשר החלפה"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "אשר בארנק שלך"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "אשר את ההחלפה"
@@ -516,7 +532,6 @@ msgstr "אשר עסקה בארנק"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "חבר את הארנק שלך"
msgid "Connected with {name}"
msgstr "מחובר עם {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "המר {0} ל {1} ללא החלקה"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "מוּעֲתָק"
@@ -724,7 +743,6 @@ msgstr "השוואת יעילות"
msgid "Enter a percent"
msgstr "הזן אחוז"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "הזן נמען"
@@ -740,7 +758,6 @@ msgstr "הזן כתובת להפעלת תביעה של UNI. אם לכתובת י
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "הזן כתובת אסימון חוקית"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "הזן סכום {0}"
@@ -783,6 +798,10 @@ msgstr "שגיאה בהתחברות. נסה לרענן את הדף."
msgid "Error details"
msgstr "פרטי שגיאה"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "שגיאה בשליפת המסחר"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "שגיאה בייבוא הרשימה"
@@ -978,9 +997,6 @@ msgstr "אין מספיק נזילות במאגר למסחר שלך"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "נבחר טווח לא חוקי. המחיר המינימלי חייב להיות נמוך מהמחיר המקסימלי."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "נמען לא חוקי"
@@ -1572,7 +1587,7 @@ msgstr "אִתחוּל"
msgid "Return"
msgstr "לַחֲזוֹר"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "סקירת החלפה"
@@ -1596,7 +1611,6 @@ msgstr "בחר רשת"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "נכסים שאינם נתמכים"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "רשת לא נתמכת - עבור לרשת אחרת כדי לסחור."
msgid "Unsupported network - switch to another to trade"
msgstr "רשת לא נתמכת - עבור לרשת אחרת כדי לסחור"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "ללא כותרת"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "לְגוֹלֵל"
@@ -2091,17 +2104,13 @@ msgstr "פרק <0/> עד {0}"
msgid "Unwrap confirmed"
msgstr "אישור ביטול הגלישה"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "שחרר את המטבע המקומי."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "ביטול הגלישה בהמתנה"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "ביטול גלישת המטבע המקומי."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "פרק {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "משיכת {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "משך את UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "לַעֲטוֹף"
@@ -2284,17 +2292,13 @@ msgstr "עטוף <0/> ל {0}"
msgid "Wrap confirmed"
msgstr "גלישה אושרה"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "עטוף מטבע מקומי."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "גלישה בהמתנה"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "עטיפת מטבע מקומי."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "לעטוף {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: hu_HU\n"
"Language-Team: Hungarian\n"
@@ -192,7 +192,7 @@ msgstr "A címnek nincs elérhető követelése"
msgid "Against"
msgstr "Ellen"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Lehetővé teszi"
@@ -204,14 +204,22 @@ msgstr "LP token migráció engedélyezése"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Engedélyezze a magas árfolyamú kereskedéseket, és hagyja ki a megerősítő képernyőt. Használat csak saját felelősségre."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Engedd be a pénztárcádba"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Engedélyezze az Uniswap protokollnak a(z) {0} használatát"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Először engedélyezze a {0} -t"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "A juttatás függőben van"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Engedélyezve"
@@ -224,13 +232,12 @@ msgstr "Összeg"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Hiba történt a csere végrehajtása során. Lehet, hogy növelnie kell a csúszási toleranciát. Ha ez nem működik, akkor összeférhetetlenség állhat fenn az Ön által forgalmazott tokennel. Megjegyzés: az átviteli és újrabázis tokenek díja nem kompatibilis az Uniswap V3 verzióval."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Kérelem folyamatban"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Jóváhagyás"
@@ -239,6 +246,10 @@ msgstr "Jóváhagyás"
msgid "Approve Token"
msgstr "Token jóváhagyása"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Jóváhagyja a pénztárcájában"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Token jóváhagyása"
msgid "Approve {0}"
msgstr "Jóváhagyás {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Először hagyja jóvá a {0}"
@@ -498,6 +509,11 @@ msgstr "Kínálat megerősítése"
msgid "Confirm Swap"
msgstr "Swap megerősítése"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Erősítse meg pénztárcájában"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Erősítse meg a cserét"
@@ -516,7 +532,6 @@ msgstr "A tranzakció megerősítése a pénztárcában"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Csatlakoztassa a pénztárcáját"
msgid "Connected with {name}"
msgstr "Csatlakoztatva: {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Konvertálja {0} -t {1} -re csúszás nélkül"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Másolva"
@@ -724,7 +743,6 @@ msgstr "Hatékonyság-összehasonlítás"
msgid "Enter a percent"
msgstr "Adjon meg egy százalékot"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Címzett megadása"
@@ -740,7 +758,6 @@ msgstr "Adjon meg egy címet az UNI-követelés kiváltásához. Ha a címnek va
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Adja meg az érvényes token címet"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Adjon meg {0} összeget"
@@ -783,6 +798,10 @@ msgstr "Hiba történt a csatlakozáskor. Próbálja frissíteni az oldalt."
msgid "Error details"
msgstr "Hiba részletei"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Hiba történt a kereskedés lekérésekor"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Hiba történt a lista importálásakor"
@@ -979,9 +998,6 @@ msgstr "Nincs elegendő likviditás a poolban a kereskedéshez"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1013,7 +1029,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Érvénytelen tartományt választott ki. A minimális árnak alacsonyabbnak kell lennie, mint a maximális ár."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Érvénytelen címzett"
@@ -1573,7 +1588,7 @@ msgstr "Visszaállítás"
msgid "Return"
msgstr "Visszatérés"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Véleménycsere"
@@ -1597,7 +1612,6 @@ msgstr "Válasszon hálózatot"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2072,14 +2086,13 @@ msgid "Unsupported Assets"
msgstr "Nem támogatott eszközök"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Nem támogatott hálózat váltson másikra a kereskedéshez."
msgid "Unsupported network - switch to another to trade"
msgstr "Nem támogatott hálózat váltson másikra a kereskedéshez"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Névtelen"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Kicsomagolás"
@@ -2092,17 +2105,13 @@ msgstr "Kicsomagolás <0/> tól {0}"
msgid "Unwrap confirmed"
msgstr "Kibontás megerősítve"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Bontsa ki a natív valutát."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Felbontás függőben"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "A natív valuta kibontása."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Kicsomagolás {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2272,7 +2281,6 @@ msgstr "{0} UNI-V2 visszavonása"
msgid "Withdrew UNI-V2!"
msgstr "Visszavonta az UNI-V2-t!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Becsomagolás"
@@ -2285,17 +2293,13 @@ msgstr "Tekerje <0/> tól {0}"
msgid "Wrap confirmed"
msgstr "Wrap megerősítve"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Wrap natív valuta."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Becsomagolás függőben"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "A natív valuta csomagolása."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Tekercs {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: id_ID\n"
"Language-Team: Indonesian\n"
@@ -192,7 +192,7 @@ msgstr "Alamat tidak memiliki klaim yang tersedia"
msgid "Against"
msgstr "Melawan"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Mengizinkan"
@@ -204,14 +204,22 @@ msgstr "Izinkan migrasi token LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Izinkan perdagangan berdampak harga tinggi dan lewati layar konfirmasi. Gunakan dengan resiko yang Anda tanggung sendiri."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Biarkan di dompet Anda"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Izinkan Protokol Uniswap untuk menggunakan {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Izinkan {0} dulu"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Tunjangan tertunda"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Diizinkan"
@@ -224,13 +232,12 @@ msgstr "Jumlah"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Terjadi kesalahan saat mengeksekusi swap ini. Anda mungkin memerlukan peningkatan toleransi slip Anda. Jika tidak berhasil, kemungkinan token yang anda perdagangkan tidak cocok. Catatan: biaya transfer token rebase tidak cocok dengan Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Persetujuan Tertunda"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Setujui"
@@ -239,6 +246,10 @@ msgstr "Setujui"
msgid "Approve Token"
msgstr "Setujui Token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Setujui di dompet Anda"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Setujui Token"
msgid "Approve {0}"
msgstr "Setujui {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Setujui {0} dulu"
@@ -498,6 +509,11 @@ msgstr "Konfirmasikan Pasokan"
msgid "Confirm Swap"
msgstr "Konfirmasikan Swap"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Konfirmasi di dompet Anda"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Konfirmasi pertukaran"
@@ -516,7 +532,6 @@ msgstr "Konfirmasi transaksi di dompet"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Hubungkan dompet Anda"
msgid "Connected with {name}"
msgstr "Terhubung dengan {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Konversi {0} ke {1} tanpa selip"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Disalin"
@@ -724,7 +743,6 @@ msgstr "Perbandingan Efisiensi"
msgid "Enter a percent"
msgstr "Masukkan persen"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Masukkan penerima"
@@ -740,7 +758,6 @@ msgstr "Masukkan alamat untuk memicu klaim UNI. Jika alamat tersebut memiliki UN
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Masukkan alamat token yang valid"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Masukkan {0} jumlah"
@@ -783,6 +798,10 @@ msgstr "Terjadi kesalahan saat menyambungkan. Coba muat ulang halaman."
msgid "Error details"
msgstr "Rincian kesalahan"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Terjadi kesalahan saat mengambil perdagangan"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Terjadi kesalahan saat mengimpor daftar"
@@ -978,9 +997,6 @@ msgstr "Likuiditas tidak mencukupi di kumpulan untuk perdagangan Anda"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Rentang yang tidak valid dipilih. Harga min harus lebih rendah dari harga maks."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Penerima tidak valid"
@@ -1572,7 +1587,7 @@ msgstr "Mengatur ulang"
msgid "Return"
msgstr "Kembali"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Tukar ulasan"
@@ -1596,7 +1611,6 @@ msgstr "Pilih jaringan"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Aset Tidak Didukung"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Jaringan tidak didukung - beralih ke yang lain untuk berdagang."
msgid "Unsupported network - switch to another to trade"
msgstr "Jaringan tidak didukung - beralih ke yang lain untuk berdagang"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Tanpa Judul"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Membuka"
@@ -2091,17 +2104,13 @@ msgstr "Buka bungkus <0/> hingga {0}"
msgid "Unwrap confirmed"
msgstr "Buka bungkus dikonfirmasi"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Buka bungkus mata uang asli."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Buka bungkus tertunda"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Membuka bungkus mata uang asli."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Buka bungkus {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Menarik {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Menarik UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Wrap"
@@ -2284,17 +2292,13 @@ msgstr "Bungkus <0/> hingga {0}"
msgid "Wrap confirmed"
msgstr "Bungkus dikonfirmasi"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Bungkus mata uang asli."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Bungkus tertunda"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Membungkus mata uang asli."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Bungkus {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: it_IT\n"
"Language-Team: Italian\n"
@@ -192,7 +192,7 @@ msgstr "L'indirizzo non ha alcun reclamo disponibile"
msgid "Against"
msgstr "Contro"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Permettere"
@@ -204,14 +204,22 @@ msgstr "Consenti la migrazione del token LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Consenti scambi ad alto impatto sui prezzi e salta la schermata di conferma. Usa a tuo rischio."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Consenti nel tuo portafoglio"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Permetti al Protocollo Uniswap di utilizzare il tuo {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Consenti prima {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Indennità in attesa"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Consentito"
@@ -224,13 +232,12 @@ msgstr "Importo"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Si è verificato un errore durante il tentativo di eseguire questo scambio. Potrebbe essere necessario aumentare la tolleranza allo slittamento. Se ciò non funziona, potrebbe esserci un'incompatibilità con il token che stai scambiando. Nota: la commissione sui token di trasferimento e rebase non è compatibile con Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "In attesa di approvazione"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Approva"
@@ -239,6 +246,10 @@ msgstr "Approva"
msgid "Approve Token"
msgstr "Token di approvazione"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Approva nel tuo portafoglio"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Token di approvazione"
msgid "Approve {0}"
msgstr "Approva {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Approva prima {0}"
@@ -498,6 +509,11 @@ msgstr "Conferma Fornitura"
msgid "Confirm Swap"
msgstr "Conferma lo scambio"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Conferma nel tuo portafoglio"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Conferma lo scambio"
@@ -516,7 +532,6 @@ msgstr "Conferma transazione nel portafoglio"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Collega il tuo portafoglio"
msgid "Connected with {name}"
msgstr "Connesso con {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Converti {0} in {1} senza slippage"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Copiato"
@@ -724,7 +743,6 @@ msgstr "Confronto di efficienza"
msgid "Enter a percent"
msgstr "Inserisci una percentuale"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Inserisci un destinatario"
@@ -740,7 +758,6 @@ msgstr "Inserisci un indirizzo per attivare un reclamo UNI. Se l'indirizzo ha un
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Inserisci un indirizzo di token valido"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Inserisci {0} importo"
@@ -783,6 +798,10 @@ msgstr "Errore di connessione. Prova ad aggiornare la pagina."
msgid "Error details"
msgstr "Dettagli circa l'errore"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Errore durante il recupero dell'operazione"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Errore nell'importazione della lista"
@@ -978,9 +997,6 @@ msgstr "Liquidità insufficiente nel pool per il tuo trade"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Intervallo selezionato non valido. Il prezzo minimo deve essere inferiore al prezzo massimo."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Destinatario non valido"
@@ -1572,7 +1587,7 @@ msgstr "Ripristina"
msgid "Return"
msgstr "Ritorno"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Scambio di recensioni"
@@ -1596,7 +1611,6 @@ msgstr "Seleziona una rete"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Asset Non Supportato"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Rete non supportata: passa a un'altra per fare trading."
msgid "Unsupported network - switch to another to trade"
msgstr "Rete non supportata: passa a un'altra per fare trading"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Senza titolo"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Unwrap"
@@ -2091,17 +2104,13 @@ msgstr "Scarta da <0/> a {0}"
msgid "Unwrap confirmed"
msgstr "Scarto confermato"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Scartare la valuta nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Scartare in attesa"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Scartare la valuta nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Scarta {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Ritiro {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2 ritirato!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Avvolgi"
@@ -2284,17 +2292,13 @@ msgstr "Avvolgi da <0/> a {0}"
msgid "Wrap confirmed"
msgstr "Avvolgimento confermato"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Avvolgi la valuta nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Avvolgimento in attesa"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Avvolgimento della valuta nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Avvolgi {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-29 06:07\n"
"Last-Translator: \n"
"Language: ja_JP\n"
"Language-Team: Japanese\n"
@@ -192,7 +192,7 @@ msgstr "請求可能なアドレスではありません"
msgid "Against"
msgstr "反対"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "許可する"
@@ -204,14 +204,22 @@ msgstr "LPトークンの移行を許可する"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "価格への大きな影響がある取引を許可し、確認画面をスキップします。自己責任でご利用ください。"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "ウォレットで許可する"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "{0} の使用をUniswapに許可する"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "最初に {0} を許可する"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "保留中の手当"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "許可"
@@ -224,13 +232,12 @@ msgstr "数量"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "スワップ実行時にエラーが発生しました。スリッページの許容範囲を広げる必要がある可能性があります。それでも上手くいかない場合、取引しているトークンとの互換性がない可能性があります。注転送時に手数料が発生するトークンおよびリベースするトークンは、UniswapV3と互換性がありません。"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "承認待ち"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "承認"
@@ -239,6 +246,10 @@ msgstr "承認"
msgid "Approve Token"
msgstr "トークンを承認する"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "ウォレットで承認する"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "トークンを承認する"
msgid "Approve {0}"
msgstr "{0} を承認する"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "最初に {0} を承認する"
@@ -330,7 +341,7 @@ msgstr "非常に安定したペアに最適"
#: src/components/swap/SwapRoute.tsx
msgid "Best price route costs ~{formattedGasPriceString} in gas."
msgstr "ベストプライスルートコスト〜{formattedGasPriceString} ガスインチ"
msgstr "ベスト価格のルートでガス代として〜{formattedGasPriceString} の費用がかかります。"
#: src/components/Blocklist/index.tsx
msgid "Blocked address"
@@ -498,6 +509,11 @@ msgstr "供給を確認"
msgid "Confirm Swap"
msgstr "スワップの確認"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "ウォレットで確認する"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "スワップを確認する"
@@ -516,7 +532,6 @@ msgstr "ウォレットで取引を確認する"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -550,7 +565,7 @@ msgstr "ウォレットに接続して流動性を確認します。"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Connect wallet to swap"
msgstr "ウォレットをスワップに接続します"
msgstr "ウォレットを接続してスワップする"
#: src/lib/components/Wallet.tsx
msgid "Connect your wallet"
@@ -560,6 +575,10 @@ msgstr "ウォレットを接続する"
msgid "Connected with {name}"
msgstr "{name} と接続しました"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "スリッページなしで {0} を {1} に変換します"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "コピーしました"
@@ -657,7 +676,7 @@ msgstr "流動性を預ける"
#: src/components/NetworkAlert/NetworkAlert.tsx
msgid "Deposit tokens to the {label} network."
msgstr "{label} ネットワークにトークンをデポジットします"
msgstr "{label} ネットワークにトークンを預け入れます"
#: src/pages/Earn/index.tsx
msgid "Deposit your Liquidity Provider tokens to receive UNI, the Uniswap protocol governance token."
@@ -724,7 +743,6 @@ msgstr "効率性の比較"
msgid "Enter a percent"
msgstr "パーセントを入力してください"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "受取人を入力"
@@ -740,7 +758,6 @@ msgstr "UNIの請求を行うためのアドレスを入力してください。
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,10 +776,8 @@ msgstr "有効なトークンアドレスを入力してください"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "{0} 金額を入力してください"
msgstr "{0} の数量を入力してください"
#: src/components/TransactionConfirmationModal/index.tsx
#: src/components/TransactionConfirmationModal/index.tsx
@@ -783,13 +798,17 @@ msgstr "接続中にエラーが発生しました。ページを更新してく
msgid "Error details"
msgstr "エラーの詳細"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "取引の取得中にエラーが発生しました"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "リストのインポートエラー"
#: src/components/swap/GasEstimateBadge.tsx
msgid "Estimate may differ due to your wallet gas settings"
msgstr "ウォレットガス設定により、見積もりが異なる場合があります"
msgstr "ウォレットガス設定により、見積もりが異なる場合があります"
#: src/components/swap/GasEstimateBadge.tsx
msgid "Estimated network fee"
@@ -809,7 +828,7 @@ msgstr "あなたが利用していないトークンリストからの検索結
#: src/components/swap/AdvancedSwapDetails.tsx
msgid "Expected Output"
msgstr "期待される出力"
msgstr "予想される結果"
#: src/components/Settings/index.tsx
msgid "Expert Mode"
@@ -829,7 +848,7 @@ msgstr "Uniswap Analyticsをご覧ください。"
#: src/components/Popups/FailedNetworkSwitchPopup.tsx
msgid "Failed to switch networks from the Uniswap Interface. In order to use Uniswap on {0}, you must change the network in your wallet."
msgstr "ユニスワップインターフェイスからのネットワークの切り替えに失敗しました。 {0}でユニスワップを使用するには、ウォレットのネットワークを変更する必要があります。"
msgstr "Uniswapのインターフェイスからのネットワークの切り替えに失敗しました。 {0} でUniswapを使用するには、ウォレットのネットワークを変更する必要があります。"
#: src/components/PositionPreview/index.tsx
msgid "Fee Tier"
@@ -841,11 +860,11 @@ msgstr "手数料レベル"
#: src/components/swap/SwapDetailsDropdown.tsx
msgid "Fetching best price..."
msgstr "最高の価格を取得しています..."
msgstr "ベストな価格を取得中…"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Fetching best price…"
msgstr "最安値を取得…"
msgstr "ベストな価格を取得…"
#: src/lib/components/Swap/Output.tsx
#: src/pages/Vote/VotePage.tsx
@@ -973,14 +992,11 @@ msgstr "流動性が不足しているため、取引できません。"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Insufficient liquidity in the pool for your trade"
msgstr "あなたの取引のためのプールの不十分な流動性"
msgstr "流動性が不足しているため、取引できません。"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "設定した価格範囲が間違っています。最小価格は最大価格より低くしてください。"
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "受け取りアドレスが無効です"
@@ -1313,7 +1328,7 @@ msgstr "取引結果は概算です。<0>{0} {1}</0> 以上を買えない場合
#: src/lib/components/Swap/Summary/index.tsx
msgid "Output is estimated. You will receive at least {0} {1} or the transaction will revert."
msgstr "出力は推定されます。少なくとも {1} を受け取るか、トランザクションが元に戻り {0}。"
msgstr "取引結果は概算です。{0} {1} 以上を買えない場合は、取引は差し戻されます。"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Output is estimated. You will send at most {0} {1} or the transaction will revert."
@@ -1402,7 +1417,7 @@ msgstr "プールの概要"
#: src/lib/components/BrandedFooter.tsx
msgid "Powered by the Uniswap protocol"
msgstr "ユニスワッププロトコルを搭載"
msgstr "Uniswapプロトコルによって提供"
#: src/pages/AddLiquidity/index.tsx
msgid "Preview"
@@ -1572,7 +1587,7 @@ msgstr "リセット"
msgid "Return"
msgstr "戻る"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "スワップを確認する"
@@ -1596,7 +1611,6 @@ msgstr "ネットワークを選択"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "サポートされていないアセット"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "サポートされていないネットワーク-別のネットワークに切り替えて取引します。"
msgid "Unsupported network - switch to another to trade"
msgstr "サポートされていないネットワーク-別のネットワークに切り替えて取引する"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "タイトル未設定"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "アンラップ"
@@ -2091,17 +2104,13 @@ msgstr "<0/> から {0} にアンラップ"
msgid "Unwrap confirmed"
msgstr "開封確認済み"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "自国通貨をアンラップします。"
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "保留中のアンラップ"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "自国通貨の開封。"
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "{0}をアンラップ"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "{0} UNI-V2を引き出し中"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2を引き出しました"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "ラップ"
@@ -2284,17 +2292,13 @@ msgstr "<0/> から {0} にラップ"
msgid "Wrap confirmed"
msgstr "ラップが確認されました"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "自国通貨をラップします。"
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "ラップ保留中"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "自国通貨のラッピング。"
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "ラップ {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: ko_KR\n"
"Language-Team: Korean\n"
@@ -192,7 +192,7 @@ msgstr "주소에 사용 가능한 청구가 없습니다."
msgid "Against"
msgstr "반대"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "허용하다"
@@ -204,14 +204,22 @@ msgstr "LP 토큰 마이그레이션 허용"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "높은 가격 영향 거래를 허용하고 확인 화면을 건너 뜁니다. 자신의 책임하에 사용하십시오."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "지갑에서 허용"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Uniswap 프로토콜이 귀하의 {0}을(를) 사용하도록 허용"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "먼저 {0} 허용"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "수당 보류"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "허용됨"
@@ -224,13 +232,12 @@ msgstr "금액"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "교환을 실행하는 중에 오류가 발생했습니다. 가격변동 허용치를 높여야 할 수도 있습니다. 그래도 작동하지 않으면 교환중인 토큰이 Uniswap과 호환되지 않는 것일 수 있습니다. 참고: 전송 수수료 및 리베이스 토큰은 Uniswap V3와 호환되지 않습니다."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "승인 대기 중"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "승인"
@@ -239,6 +246,10 @@ msgstr "승인"
msgid "Approve Token"
msgstr "토큰 승인"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "지갑에서 승인"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "토큰 승인"
msgid "Approve {0}"
msgstr "{0} 승인"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "{0} 먼저 승인"
@@ -498,6 +509,11 @@ msgstr "공급 확인"
msgid "Confirm Swap"
msgstr "스왑 확인"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "지갑에서 확인"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "스왑 확인"
@@ -516,7 +532,6 @@ msgstr "지갑에서 트랜잭션 승인"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "지갑 연결"
msgid "Connected with {name}"
msgstr "{name}와(과) 연결됨"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "미끄러짐 없이 {0} 을 {1} 로 변환"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "복사 됨"
@@ -724,7 +743,6 @@ msgstr "효율성 비교"
msgid "Enter a percent"
msgstr "퍼센트를 입력하세요."
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "수령인을 입력하세요."
@@ -740,7 +758,6 @@ msgstr "UNI 청구를 트리거할 주소를 입력하십시오. 주소에 청
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "유효한 토큰 주소를 입력하세요."
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "{0} 금액을 입력하세요"
@@ -783,6 +798,10 @@ msgstr "연결 오류. 페이지를 새로 고침 해보세요."
msgid "Error details"
msgstr "오류 상세"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "거래를 가져오는 중에 오류가 발생했습니다."
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "목록을 가져 오는 중에 오류가 발생했습니다."
@@ -978,9 +997,6 @@ msgstr "거래를 위한 풀의 유동성 부족"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "잘못된 범위를 선택했습니다. 최소 가격은 최대 가격보다 낮아야합니다."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "잘못된 수령인"
@@ -1572,7 +1587,7 @@ msgstr "초기화"
msgid "Return"
msgstr "반환"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "스왑 검토"
@@ -1596,7 +1611,6 @@ msgstr "네트워크 선택"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "지원되지 않는 자산"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "지원되지 않는 네트워크 - 거래하려면 다른 네트워크로 전환하세요."
msgid "Unsupported network - switch to another to trade"
msgstr "지원되지 않는 네트워크 - 거래를 위해 다른 네트워크로 전환"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "제목 없음"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "언랩"
@@ -2091,17 +2104,13 @@ msgstr "<0/> 에서 {0}풀기"
msgid "Unwrap confirmed"
msgstr "포장 풀기 확인"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "기본 통화 포장을 풉니다."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "언래핑 보류"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "기본 통화 포장 풀기."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "포장 풀기 {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "{0} UNI-V2 인출"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2 인출!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "랩"
@@ -2284,17 +2292,13 @@ msgstr "<0/> 에서 {0}바꿈"
msgid "Wrap confirmed"
msgstr "랩 확인됨"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "기본 통화를 포장합니다."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "랩 대기 중"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "기본 통화 래핑."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "랩 {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: nl_NL\n"
"Language-Team: Dutch\n"
@@ -192,7 +192,7 @@ msgstr "Adres heeft geen beschikbare claim"
msgid "Against"
msgstr "Tegen"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Toestaan"
@@ -204,14 +204,22 @@ msgstr "LP token migratie toestaan"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Sta transacties met hoge prijsimpact toe en sla het bevestigingsscherm over. Gebruiken op eigen risico."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Toestaan in je portemonnee"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Sta het Uniswap Protocol toe om uw {0} te gebruiken"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Sta eerst {0} toe"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Toelage in behandeling"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Toegestaan"
@@ -224,13 +232,12 @@ msgstr "Bedrag"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Er is een fout opgetreden bij het uitvoeren van deze swap. Mogelijk moet u uw sliptolerantie verhogen. Als dat niet werkt, is er mogelijk een incompatibiliteit met het token dat u verhandelt. Let op: kosten voor overdracht en rebase tokens zijn niet compatibel met Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "In afwachting van goedkeuring"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Goedkeuren"
@@ -239,6 +246,10 @@ msgstr "Goedkeuren"
msgid "Approve Token"
msgstr "Token goedkeuren"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Goedkeuren in uw portemonnee"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Token goedkeuren"
msgid "Approve {0}"
msgstr "Keur {0} goed"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Eerst {0} goedkeuren"
@@ -498,6 +509,11 @@ msgstr "Bevestig levering"
msgid "Confirm Swap"
msgstr "Bevestig wissel"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Bevestig in je portemonnee"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Wisselen bevestigen"
@@ -516,7 +532,6 @@ msgstr "Bevestig transactie in portemonnee"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Verbind je portemonnee"
msgid "Connected with {name}"
msgstr "Verbonden met {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Converteer {0} naar {1} zonder slippen"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Gekopieerd"
@@ -724,7 +743,6 @@ msgstr "Efficiëntie vergelijking:"
msgid "Enter a percent"
msgstr "Voer een percentage in"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Voer een ontvanger in"
@@ -740,7 +758,6 @@ msgstr "Voer een adres in om een UNI-claim te activeren. Als het adres een claim
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Voer geldig tokenadres in"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Voer {0} bedrag in"
@@ -783,6 +798,10 @@ msgstr "Fout bij het verbinden. Probeer de pagina te vernieuwen."
msgid "Error details"
msgstr "Fout details"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Fout bij ophalen van handel"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Fout bij importeren lijst"
@@ -978,9 +997,6 @@ msgstr "Onvoldoende liquiditeit in de pool voor uw transactie"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Ongeldig bereik geselecteerd. De minimumprijs moet lager zijn dan de maximumprijs."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Ongeldige ontvanger"
@@ -1572,7 +1587,7 @@ msgstr "Resetten"
msgid "Return"
msgstr "Terug"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Review swap"
@@ -1596,7 +1611,6 @@ msgstr "Selecteer een netwerk"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Niet-ondersteunde activa"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Niet-ondersteund netwerk - schakel over naar een ander om te handelen."
msgid "Unsupported network - switch to another to trade"
msgstr "Niet-ondersteund netwerk - schakel over naar een ander om te ruilen"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Ongetiteld"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Uitpakken"
@@ -2091,17 +2104,13 @@ msgstr "Uitpakken <0/> tot {0}"
msgid "Unwrap confirmed"
msgstr "Uitpakken bevestigd"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Pak de oorspronkelijke valuta uit."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "In behandeling uitpakken"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Inheemse valuta uitpakken."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "{0}. uitpakken"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Opnemen van {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "UNI-V2 opgenomen!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Omloop"
@@ -2284,17 +2292,13 @@ msgstr "Wikkel <0/> tot {0}"
msgid "Wrap confirmed"
msgstr "Omslag bevestigd"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Verpak de eigen valuta."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Wikkel in behandeling"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Inpakken van inheemse valuta."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Wikkel {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: no_NO\n"
"Language-Team: Norwegian\n"
@@ -192,7 +192,7 @@ msgstr "Adressen har ikke noen tilgjengelig krav"
msgid "Against"
msgstr "Mot"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Tillate"
@@ -204,14 +204,22 @@ msgstr "Tillat migrering av LP-pollett"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Tillat høyprispåvirkede handel og hopp over bekreftelsesskjermen. Bruk på egen risiko."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Tillat i lommeboken"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Tillat Uniswap-protokollen å bruke din {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Tillat {0} først"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Godtgjørelse venter"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Tillatt"
@@ -224,13 +232,12 @@ msgstr "Beløp"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Det oppstod en feil under forsøket på å utføre dette byttet. Det kan hende du må øke glidetoleransen. Hvis det ikke fungerer, kan det være en inkompatibilitet med symbolet du handler. Merk: gebyr ved overføring og rebase-tokens er inkompatibelt med Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Venter på godkjenning"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Godkjenn"
@@ -239,6 +246,10 @@ msgstr "Godkjenn"
msgid "Approve Token"
msgstr "Godkjenn token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Godkjenne i lommeboken"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Godkjenn token"
msgid "Approve {0}"
msgstr "Godkjenn {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Godkjenn {0} først"
@@ -498,6 +509,11 @@ msgstr "Bekreft levering"
msgid "Confirm Swap"
msgstr "Bekreft bytte"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Bekreft i lommeboken"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Bekreft bytte"
@@ -516,7 +532,6 @@ msgstr "Bekreft transaksjonen i lommeboken"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Koble til lommeboken"
msgid "Connected with {name}"
msgstr "Koblet til med {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Konverter {0} til {1} uten glidning"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Kopiert"
@@ -724,7 +743,6 @@ msgstr "Effektivitetssammenligning"
msgid "Enter a percent"
msgstr "Oppgi en prosent"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Oppgi en mottaker"
@@ -740,7 +758,6 @@ msgstr "Skriv inn en adresse for å aktivere en UNI-henting. Hvis adressen har n
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Oppgi gyldig pollettadresse"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Skriv inn {0} beløp"
@@ -783,6 +798,10 @@ msgstr "Feil under tilkobling. Prøv å oppdatere siden."
msgid "Error details"
msgstr "Feilmeldingsdetaljer"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Feil under henting av handel"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Feil ved import av liste"
@@ -978,9 +997,6 @@ msgstr "Utilstrekkelig likviditet i bassenget for handelen din"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Ugyldig område valgt. Minsteprisen må være lavere enn maks prisen."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Ugyldig mottaker"
@@ -1572,7 +1587,7 @@ msgstr "Nullstille"
msgid "Return"
msgstr "Retur"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Anmeldelsesbytte"
@@ -1596,7 +1611,6 @@ msgstr "Velg et nettverk"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Ikke støttede aktiva"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Ikke støttet nettverk - bytt til et annet for å handle."
msgid "Unsupported network - switch to another to trade"
msgstr "Ikke støttet nettverk - bytt til et annet for å handle"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Uten navn"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Pakk opp"
@@ -2091,17 +2104,13 @@ msgstr "Pakk ut <0/> til {0}"
msgid "Unwrap confirmed"
msgstr "Utpakking bekreftet"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Pakk opp den opprinnelige valutaen."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Utpakning venter"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Utpakning av innfødt valuta."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Pakk ut {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Trekker tilbake {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Avsluttet UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Bryt"
@@ -2284,17 +2292,13 @@ msgstr "Pakk <0/> til {0}"
msgid "Wrap confirmed"
msgstr "Wrap bekreftet"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Pakk inn innfødt valuta."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Innpakning venter"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Innpakning av innfødt valuta."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Pakk inn {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: pl_PL\n"
"Language-Team: Polish\n"
@@ -192,7 +192,7 @@ msgstr "Adres nie posiada dostępnych włości"
msgid "Against"
msgstr "Przeciwko"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Dopuszczać"
@@ -204,14 +204,22 @@ msgstr "Zezwalaj na migrację tokenu LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Pozwól na transakcje o wysokim wpływie cenowym i pominąć ekran potwierdzający. Używaj na własne ryzyko."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Pozwól w swoim portfelu"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Zezwól protokołowi Uniswap na używanie {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Zezwól najpierw na {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Oczekiwanie na zasiłek"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Dozwolone"
@@ -224,13 +232,12 @@ msgstr "Kwota"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Wystąpił błąd podczas próby wykonania tej wymiany. Może być konieczne zwiększenie tolerancji na poślizg. Jeśli to nie zadziała, może występować niezgodność z tokenem, którym handlujesz. Uwaga: opłata za transfer i rebase tokeny są niezgodne z Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Oczekuje na zatwierdzenie"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Zatwierdź"
@@ -239,6 +246,10 @@ msgstr "Zatwierdź"
msgid "Approve Token"
msgstr "Zatwierdź token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Zatwierdź w swoim portfelu"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Zatwierdź token"
msgid "Approve {0}"
msgstr "Zatwierdź {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Najpierw zatwierdź {0}"
@@ -498,6 +509,11 @@ msgstr "Potwierdź dostawę"
msgid "Confirm Swap"
msgstr "Potwierdź zamianę"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Potwierdź w swoim portfelu"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Potwierdź zamianę"
@@ -516,7 +532,6 @@ msgstr "Potwierdź transakcję w portfelu"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Połącz swój portfel"
msgid "Connected with {name}"
msgstr "Połączony z {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Konwertuj {0} na {1} bez poślizgu"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Skopiowano"
@@ -724,7 +743,6 @@ msgstr "Porównanie wydajności"
msgid "Enter a percent"
msgstr "Wpisz procent"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Wprowadź odbiorcę"
@@ -740,7 +758,6 @@ msgstr "Wprowadź adres do uruchomienia UNI. Jeśli adres ma jakiekolwiek roszcz
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Wprowadź prawidłowy adres tokenu"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Wpisz kwotę {0}"
@@ -783,6 +798,10 @@ msgstr "Błąd połączenia. Spróbuj odświeżyć stronę."
msgid "Error details"
msgstr "Szczegóły błędu"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Błąd podczas pobierania transakcji"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Błąd importowania listy"
@@ -978,9 +997,6 @@ msgstr "Niewystarczająca płynność w puli dla Twojej transakcji"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Wybrano nieprawidłowy zakres. Minimalna cena musi być niższa niż maksymalna cena."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Nieprawidłowy odbiorca"
@@ -1572,7 +1587,7 @@ msgstr "Resetowanie"
msgid "Return"
msgstr "Powrót"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Przejrzyj zamianę"
@@ -1596,7 +1611,6 @@ msgstr "Wybierz sieć"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Nieobsługiwane zasoby"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Nieobsługiwana sieć - przełącz się na inną, aby handlować."
msgid "Unsupported network - switch to another to trade"
msgstr "Nieobsługiwana sieć - przełącz się na inną, aby handlować"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Nieuprawny"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Unwrap"
@@ -2091,17 +2104,13 @@ msgstr "Rozpakuj od <0/> do {0}"
msgid "Unwrap confirmed"
msgstr "Potwierdzone rozpakowanie"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Rozpakuj natywną walutę."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Oczekiwanie na rozpakowanie"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Rozpakowywanie rodzimej waluty."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Rozpakuj {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Wycofanie {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Wycofano UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Zawijanie"
@@ -2284,17 +2292,13 @@ msgstr "Zawijaj od <0/> do {0}"
msgid "Wrap confirmed"
msgstr "Zawinięcie potwierdzone"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Zawijaj natywną walutę."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Oczekiwanie na zawijanie"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Pakowanie rodzimej waluty."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Zawijaj {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: pt_BR\n"
"Language-Team: Portuguese, Brazilian\n"
@@ -192,7 +192,7 @@ msgstr "O endereço tem não resgates disponíveis"
msgid "Against"
msgstr "Contra"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Permitir"
@@ -204,14 +204,22 @@ msgstr "Permitir a migração de tokens LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Permitir negociações de preço de alto impacto e ignorar a tela de confirmação. Use por sua conta e risco."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Permitir na sua carteira"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Permitir que o Protocolo Uniswap utilize seu {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Permitir {0} primeiro"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Provisão pendente"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Permitido"
@@ -224,13 +232,12 @@ msgstr "Valor"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Ocorreu um erro ao tentar executar esta troca. Pode ser necessário aumentar sua tolerância ao deslizamento. Se isso não funcionar, pode haver uma incompatibilidade com o token que você está negociando. Nota: a taxa de transferência e tokens de rebase são incompatíveis com Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Aprovação pendente"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Aprovar"
@@ -239,6 +246,10 @@ msgstr "Aprovar"
msgid "Approve Token"
msgstr "Aprovar token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Aprove em sua carteira"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Aprovar token"
msgid "Approve {0}"
msgstr "Aprovação {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Aprovar {0} primeiro"
@@ -498,6 +509,11 @@ msgstr "Confirmar fornecimento"
msgid "Confirm Swap"
msgstr "Confirmar a conversão"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Confirme na sua carteira"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Confirmar troca"
@@ -516,7 +532,6 @@ msgstr "Confirme a transação na carteira"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Conecte sua carteira"
msgid "Connected with {name}"
msgstr "Conectado a {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Converter {0} para {1} sem derrapagem"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Copiado"
@@ -724,7 +743,6 @@ msgstr "Comparação de Eficiência"
msgid "Enter a percent"
msgstr "Digite um percentual"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Digite um destinatário"
@@ -740,7 +758,6 @@ msgstr "Digite um endereço para solicitar um resgate de UNI. Se o endereço tiv
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Digite um endereço válido para os tokens"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Insira o valor {0}"
@@ -783,6 +798,10 @@ msgstr "Erro de conexão. Tente atualizar a página."
msgid "Error details"
msgstr "Detalhes do erro"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Erro ao buscar a negociação"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Erro ao importar a lista"
@@ -978,9 +997,6 @@ msgstr "Liquidez insuficiente no pool para sua negociação"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Faixa selecionada inválida. O preço mín deve ser inferior ao preço máx."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Destinatário inválido"
@@ -1572,7 +1587,7 @@ msgstr "Redefinir"
msgid "Return"
msgstr "Voltar"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Troca de revisão"
@@ -1596,7 +1611,6 @@ msgstr "Selecione uma rede"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Ativos incompatíveis"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Rede não suportada - mude para outra para negociar."
msgid "Unsupported network - switch to another to trade"
msgstr "Rede não suportada - mude para outra para negociar"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Sem título"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Desacobertar"
@@ -2091,17 +2104,13 @@ msgstr "Desembrulhe <0/> a {0}"
msgid "Unwrap confirmed"
msgstr "Desembrulhar confirmado"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Desembrulhe a moeda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Desempacotar pendente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Desembrulhando moeda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Desembrulhar {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Sacar {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Sacou UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Cobrir"
@@ -2284,17 +2292,13 @@ msgstr "Wrap <0/> a {0}"
msgid "Wrap confirmed"
msgstr "Envelopamento confirmado"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Embrulhe a moeda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Encerramento pendente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Embrulhar moeda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Envoltório {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: pt_PT\n"
"Language-Team: Portuguese\n"
@@ -192,7 +192,7 @@ msgstr "O endereço não tem reivindicação disponível"
msgid "Against"
msgstr "Contra"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Permitir"
@@ -204,14 +204,22 @@ msgstr "Permitir migração de token LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Permitir negociações de alto impacto nos preços e ignorar o ecrã de confirmação. Use por sua conta e risco."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Permitir na sua carteira"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Permitir que o Protocolo Uniswap use o seu {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Permitir {0} primeiro"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Provisão pendente"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Permitido"
@@ -224,13 +232,12 @@ msgstr "Quantia"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "Ocorreu um erro ao tentar executar esta troca. Pode ser necessário aumentar sua tolerância ao deslizamento. Se isso não funcionar, pode haver uma incompatibilidade com o token que você está negociando. Nota: a taxa de transferência e tokens de rebase são incompatíveis com Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "Aprovação pendente"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Aprovar"
@@ -239,6 +246,10 @@ msgstr "Aprovar"
msgid "Approve Token"
msgstr "Aprovar token"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Aprove em sua carteira"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Aprovar token"
msgid "Approve {0}"
msgstr "Aprovar {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Aprovar {0} primeiro"
@@ -498,6 +509,11 @@ msgstr "Confirmar fornecimento"
msgid "Confirm Swap"
msgstr "Confirmar troca"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Confirme na sua carteira"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Confirmar troca"
@@ -516,7 +532,6 @@ msgstr "Confirme a transação na carteira"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Conecte sua carteira"
msgid "Connected with {name}"
msgstr "Ligado com {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Converter {0} para {1} sem derrapagem"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Copiado"
@@ -724,7 +743,6 @@ msgstr "Comparação de Eficiência"
msgid "Enter a percent"
msgstr "Insira uma percentagem"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Insira um destinatário"
@@ -740,7 +758,6 @@ msgstr "Insira um endereço para acionar uma reivindicação UNI. Se o endereço
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Insira um endereço de token válido"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Insira o valor {0}"
@@ -783,6 +798,10 @@ msgstr "Erro ao ligar. Tente atualizar a página."
msgid "Error details"
msgstr "Detalhes do erro"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Erro ao buscar a negociação"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Erro ao importar a lista"
@@ -978,9 +997,6 @@ msgstr "Liquidez insuficiente no pool para sua negociação"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Intervalo selecionado inválido. O preço mínimo deve ser inferior ao preço máximo."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Destinatário inválido"
@@ -1572,7 +1587,7 @@ msgstr "Redefinir"
msgid "Return"
msgstr "Voltar"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Troca de revisão"
@@ -1596,7 +1611,6 @@ msgstr "Selecione uma rede"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Ativos não suportados"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Rede não suportada - mude para outra para negociar."
msgid "Unsupported network - switch to another to trade"
msgstr "Rede não suportada - mude para outra para negociar"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Sem título"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Desembrulhar"
@@ -2091,17 +2104,13 @@ msgstr "Desembrulhe <0/> a {0}"
msgid "Unwrap confirmed"
msgstr "Desembrulhar confirmado"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Desembrulhe a moeda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Desempacotar pendente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Desembrulhando moeda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Desembrulhar {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Retirando {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "Levantou UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Embrulhar"
@@ -2284,17 +2292,13 @@ msgstr "Wrap <0/> a {0}"
msgid "Wrap confirmed"
msgstr "Envelopamento confirmado"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Embrulhe a moeda nativa."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Encerramento pendente"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Embrulhar moeda nativa."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Envoltório {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: uniswap-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2022-03-17 04:06\n"
"PO-Revision-Date: 2022-03-24 20:06\n"
"Last-Translator: \n"
"Language: ro_RO\n"
"Language-Team: Romanian\n"
@@ -192,7 +192,7 @@ msgstr "Adresa nu are nici o cerere disponibilă"
msgid "Against"
msgstr "Împotrivă"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow"
msgstr "Permite"
@@ -204,14 +204,22 @@ msgstr "Permite migrarea token-ului LP"
msgid "Allow high price impact trades and skip the confirm screen. Use at your own risk."
msgstr "Permite tranzacțiile cu impact asupra prețurilor mari și sari peste ecranul de confirmare. Utilizează pe propriul risc."
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow in your wallet"
msgstr "Permiteți-vă în portofel"
#: src/pages/Swap/index.tsx
msgid "Allow the Uniswap Protocol to use your {0}"
msgstr "Permite Protocolului Uniswap să îți utilizeze {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allow {0} first"
msgstr "Permiteți mai întâi {0}"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Allowance pending"
msgstr "Alocație în așteptare"
#: src/pages/MigrateV2/MigrateV2Pair.tsx
msgid "Allowed"
msgstr "Permis"
@@ -224,13 +232,12 @@ msgstr "Sumă"
msgid "An error occurred when trying to execute this swap. You may need to increase your slippage tolerance. If that does not work, there may be an incompatibility with the token you are trading. Note: fee on transfer and rebase tokens are incompatible with Uniswap V3."
msgstr "A apărut o eroare la încercarea de a executa acest swap. Este posibil să fie nevoie să vă măriți toleranța la alunecare. Dacă acest lucru nu funcționează, poate exista o incompatibilitate cu jetonul pe care îl tranzacționați. Notă: taxa pentru jetoane de transfer și rebase sunt incompatibile cu Uniswap V3."
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approval pending"
msgstr "În curs de aprobare"
#: src/components/earn/StakingModal.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
#: src/pages/RemoveLiquidity/index.tsx
msgid "Approve"
msgstr "Aprobă"
@@ -239,6 +246,10 @@ msgstr "Aprobă"
msgid "Approve Token"
msgstr "Aprobați jetonul"
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve in your wallet"
msgstr "Aprobați în portofel"
#: src/components/AccountDetails/TransactionSummary.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidity/index.tsx
@@ -247,7 +258,7 @@ msgstr "Aprobați jetonul"
msgid "Approve {0}"
msgstr "Aprobă {0}"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/useApprovalData.tsx
msgid "Approve {0} first"
msgstr "Aprobați mai întâi {0}"
@@ -498,6 +509,11 @@ msgstr "Confirmă Aprovizionarea"
msgid "Confirm Swap"
msgstr "Confirmă Schimbul"
#: src/lib/components/Swap/Summary/index.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Confirm in your wallet"
msgstr "Confirmați în portofel"
#: src/lib/components/Swap/Summary/index.tsx
msgid "Confirm swap"
msgstr "Confirmați schimbul"
@@ -516,7 +532,6 @@ msgstr "Confirmați tranzacția în portofel"
#: src/components/Web3Status/index.tsx
#: src/components/earn/ClaimRewardModal.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/AddLiquidity/index.tsx
#: src/pages/AddLiquidityV2/index.tsx
#: src/pages/RemoveLiquidity/index.tsx
@@ -560,6 +575,10 @@ msgstr "Conectați-vă portofelul"
msgid "Connected with {name}"
msgstr "Conectat cu {name}"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Convert {0} to {1} with no slippage"
msgstr "Convertiți {0} la {1} fără alunecare"
#: src/components/AccountDetails/Copy.tsx
msgid "Copied"
msgstr "Copiat"
@@ -724,7 +743,6 @@ msgstr "Compararea eficienței"
msgid "Enter a percent"
msgstr "Introdu un procent"
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Enter a recipient"
msgstr "Introdu un destinatar"
@@ -740,7 +758,6 @@ msgstr "Introdu o adresă pentru a declanșa o revendicare UNI. Dacă adresa are
#: src/components/earn/ClaimRewardModal.tsx
#: src/components/earn/UnstakingModal.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/burn/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -759,8 +776,6 @@ msgstr "Introdu o adresă valabilă a grupului"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
msgid "Enter {0} amount"
msgstr "Introduceți {0} sumă"
@@ -783,6 +798,10 @@ msgstr "Eroare la conectare. Încearcă să reîncarci pagina."
msgid "Error details"
msgstr "Detalii despre eroare"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Error fetching trade"
msgstr "Eroare la preluarea comerțului"
#: src/components/SearchModal/ManageLists.tsx
msgid "Error importing list"
msgstr "Eroare la importarea listei"
@@ -978,9 +997,6 @@ msgstr "Lichiditate insuficientă în pool pentru tranzacția dvs"
#: src/hooks/useWrapCallback.tsx
#: src/hooks/useWrapCallback.tsx
#: src/lib/components/Swap/Toolbar/Caption.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/components/Swap/WrapErrorText.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/hooks.tsx
#: src/state/mint/v3/hooks.tsx
@@ -1012,7 +1028,6 @@ msgid "Invalid range selected. The min price must be lower than the max price."
msgstr "Interval invalid selectat. Prețul minim trebuie să fie mai mic decât prețul maxim."
#: src/lib/hooks/swap/useSwapCallback.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/state/swap/hooks.tsx
msgid "Invalid recipient"
msgstr "Destinatar nevalid"
@@ -1572,7 +1587,7 @@ msgstr "Resetați"
msgid "Return"
msgstr "Întoarcere"
#: src/lib/components/Swap/SwapButton.tsx
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Review swap"
msgstr "Schimb de recenzii"
@@ -1596,7 +1611,6 @@ msgstr "Selectați o rețea"
#: src/components/SearchModal/CurrencySearch.tsx
#: src/lib/components/TokenSelect/TokenButton.tsx
#: src/lib/components/TokenSelect/index.tsx
#: src/lib/hooks/swap/useSwapInfo.tsx
#: src/pages/PoolFinder/index.tsx
#: src/pages/PoolFinder/index.tsx
#: src/state/swap/hooks.tsx
@@ -2071,14 +2085,13 @@ msgid "Unsupported Assets"
msgstr "Active Nesusținute"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unsupported network - switch to another to trade."
msgstr "Rețea neacceptată - comutați la alta pentru a tranzacționa."
msgid "Unsupported network - switch to another to trade"
msgstr "Rețea neacceptată - comutați la alta pentru a tranzacționa"
#: src/state/governance/hooks.ts
msgid "Untitled"
msgstr "Fără titlu"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Unwrap"
msgstr "Despachetează"
@@ -2091,17 +2104,13 @@ msgstr "Desfaceți <0/> la {0}"
msgid "Unwrap confirmed"
msgstr "Desfacere confirmată"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrap native currency."
msgstr "Desfaceți moneda nativă."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Unwrap pending"
msgstr "Desfacere în așteptare"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Unwrapping native currency."
msgstr "Desfacerea monedei native."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Unwrap {0}"
msgstr "Desfaceți {0}"
#: src/pages/Vote/Landing.tsx
msgid "Update Delegation"
@@ -2271,7 +2280,6 @@ msgstr "Retragere {0} UNI-V2"
msgid "Withdrew UNI-V2!"
msgstr "S-au retras UNI-V2!"
#: src/lib/components/Swap/SwapButton.tsx
#: src/pages/Swap/index.tsx
msgid "Wrap"
msgstr "Împachetează"
@@ -2284,17 +2292,13 @@ msgstr "Înfășurați <0/> la {0}"
msgid "Wrap confirmed"
msgstr "Wrap confirmat"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrap native currency."
msgstr "Încheiați moneda nativă."
#: src/lib/components/Swap/Status/StatusDialog.tsx
msgid "Wrap pending"
msgstr "Wrap în așteptare"
#: src/lib/components/Swap/Toolbar/Caption.tsx
msgid "Wrapping native currency."
msgstr "Încheierea monedei native."
#: src/lib/components/Swap/SwapButton/index.tsx
msgid "Wrap {0}"
msgstr "Înfășurare {0}"
#: src/components/WalletModal/index.tsx
#: src/components/Web3Status/index.tsx

Some files were not shown because too many files have changed in this diff Show More