Merge branch 'main' into dependabot/pip/googleapis-common-protos-1.65.0

This commit is contained in:
KoalaSat 2024-10-19 14:02:50 +00:00 committed by GitHub
commit ca2e8f8f7d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
142 changed files with 7250 additions and 6690 deletions

View File

@ -21,31 +21,15 @@ jobs:
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: web-main-js
path: frontend/static/frontend/
name: django-main-static
path: frontend
- name: 'Download Basic main.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: web-main-js
path: frontend/static/frontend/
- name: 'Download pro.js Artifact'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: web-pro-js
path: frontend/static/frontend/
- name: 'Download pro.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: web-pro-js
path: frontend/static/frontend/
name: django-main-static
path: frontend
- name: 'Log in to Docker Hub'
uses: docker/login-action@v3

View File

@ -27,11 +27,21 @@ jobs:
with:
node-version: '16'
- name: Set up frontend dependencies
run: |
cd frontend
npm install
npm run build
- name: 'Download Basic main.js Artifact'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: desktop-main-static
path: desktopApp
- name: 'Download Basic main.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: desktop-main-static
path: desktopApp
- name: Install dependencies
run: |
@ -57,29 +67,62 @@ jobs:
id: commit
uses: pr-mpt/actions-commit-hash@v3
- name: Print semver
run: echo The semver is ${{ github.event.inputs.semver }}
- name: Upload macOS Build Artifact
id: upload-release-mac-zip-asset
if: inputs.semver != ''
uses: actions/upload-artifact@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
path: desktopApp/release-builds/Robosats-darwin-x64
name: robosats-desktop-${{ steps.commit.outputs.short }}-mac-darwin-x64
name: robosats-desktop-${{ inputs.semver }}-mac-darwin-x64.zip
- name: Upload Windows Build Artifact
id: upload-release-win-zip-asset
if: inputs.semver != ''
uses: actions/upload-artifact@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
path: desktopApp/release-builds/Robosats-win32-ia32
name: robosats-desktop-${{ steps.commit.outputs.short }}-win32-ia32
name: robosats-desktop-${{ inputs.semver }}-win32-ia32.zip
- name: Upload Linux Build Artifact
id: upload-release-linux-zip-asset
if: inputs.semver != ''
uses: actions/upload-artifact@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
path: desktopApp/release-builds/Robosats-linux-x64
name: robosats-desktop-${{ steps.commit.outputs.short }}-linux-x64
name: robosats-desktop-${{ inputs.semver }}-linux-x64.zip
- name: Upload macOS Build Artifact
id: upload-release-mac-zip-asset
if: inputs.semver == ''
uses: actions/upload-artifact@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
path: desktopApp/release-builds/Robosats-darwin-x64
name: robosats-desktop-${{ steps.commit.outputs.short }}-mac-darwin-x64.zip
- name: Upload Windows Build Artifact
id: upload-release-win-zip-asset
if: inputs.semver == ''
uses: actions/upload-artifact@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
path: desktopApp/release-builds/Robosats-win32-ia32
name: robosats-desktop-${{ steps.commit.outputs.short }}-win32-ia32.zip
- name: Upload Linux Build Artifact
id: upload-release-linux-zip-asset
if: inputs.semver == ''
uses: actions/upload-artifact@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
path: desktopApp/release-builds/Robosats-linux-x64
name: robosats-desktop-${{ steps.commit.outputs.short }}-linux-x64.zip

View File

@ -50,20 +50,34 @@ jobs:
export NODE_OPTIONS="--max-old-space-size=4096"
cd frontend
npm run build
- name: 'Archive Web Basic Build Results'
- name: 'Archive Django Static Build Results'
uses: actions/upload-artifact@v4
with:
name: web-main-js
name: django-main-static
path: |
frontend/static/frontend/*main.js
frontend/static/frontend/*.wasm
- name: 'Archive Web PRO Build Results'
frontend/static
frontend/templates/frontend/*.html
- name: 'Archive Node App Static Build Results'
uses: actions/upload-artifact@v4
with:
name: web-pro-js
name: nodeapp-main-static
path: |
frontend/static/frontend/*pro.js
frontend/static/frontend/*.wasm
nodeapp/static
nodeapp/*.html
- name: 'Archive Desktop App Static Build Results'
uses: actions/upload-artifact@v4
with:
name: desktop-main-static
path: |
desktopApp/static
desktopApp/*.html
- name: 'Archive Django Static Build Results'
uses: actions/upload-artifact@v4
with:
name: web-main-static
path: |
web/static
web/*.html
- name: 'Archive Mobile Build Results'
uses: actions/upload-artifact@v4
with:

View File

@ -30,6 +30,14 @@ jobs:
- name: 'Checkout'
uses: actions/checkout@v4
- name: 'Download static files Artifact'
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: django-main-static
path: frontend
- name: Patch Dockerfile and .env-sample
run: |
sed -i "1s/FROM python:.*/FROM python:${{ matrix.python-tag }}/" Dockerfile

View File

@ -21,40 +21,21 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: 'Copy Static' # Needed since Github actions does not support symlinks
run: cp -r frontend/static nodeapp/static
- name: 'Download basic.selfhosted.js Artifact'
- name: 'Download Basic main.js Artifact'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: web-main-js
path: nodeapp/static/frontend/
name: nodeapp-main-static
path: nodeapp
- name: 'Download main.js Artifact for a release'
- name: 'Download Basic main.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: web-main-js
path: nodeapp/static/frontend/
- name: 'Download pro.selfhosted.js Artifact'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: web-pro-js
path: nodeapp/static/frontend/
- name: 'Download pro.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: web-pro-js
path: nodeapp/static/frontend/
name: nodeapp-main-static
path: nodeapp
- name: 'Log in to Docker Hub'
uses: docker/login-action@v3

View File

@ -21,40 +21,21 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: 'Copy Static' # Needed since Github actions does not support symlinks
run: cp -r frontend/static web/static
- name: 'Download main.js Artifact'
- name: 'Download Basic main.js Artifact'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: web-main-js
path: web/static/frontend/
name: web-main-static
path: web
- name: 'Download main.js Artifact for a release'
- name: 'Download Basic main.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: web-main-js
path: web/static/frontend/
- name: 'Download pro.js Artifact'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: web-pro-js
path: web/static/frontend/
- name: 'Download pro.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: web-pro-js
path: web/static/frontend/
name: web-main-static
path: web
- name: 'Log in to Docker Hub'
uses: docker/login-action@v3

17
.gitignore vendored
View File

@ -634,6 +634,7 @@ frontend/static/assets/avatars*
api/lightning/*_grpc.py
api/lightning/*_pb2.py
api/lightning/pymp*
api/lightning/pip*
frontend/static/locales/collected_phrases.json
frontend/static/admin*
frontend/static/rest_framework*
@ -641,15 +642,21 @@ frontend/static/import_export*
frontend/static/drf_spectacular_sidecar/
frontend/src/components/PaymentMethods/Icons/code*
frontend/src/components/PaymentMethods/Icons/webp*
frontend/static/frontend/**
frontend/static/frontend
docs/.jekyll-cache*
docs/_site*
node
desktopApp/release-builds
# mobile frontend statics
mobile/html/Web.bundle/js*
mobile/html/Web.bundle/css*
mobile/html/Web.bundle/assets*
# frontend statics
frontend/templates/frontend/*.html
mobile/html/Web.bundle
desktopApp/static
desktopApp/*.html
web/static
web/*.html
nodeapp/static
nodeapp/*.html
# Protocol Buffers
api/lightning/*.proto

View File

@ -11,7 +11,7 @@ repos:
- '--fix=lf'
- id: trailing-whitespace
- id: pretty-format-json
exclude: ^frontend/
exclude: ^frontend/|^mobile/
args:
- '--autofix'
- '--no-sort-keys'

View File

@ -7,7 +7,7 @@ This contributing guide is based on the [Bisq contributing guide](https://github
## Communication Channels
Most communication about development takes place on our [Matrix Development group](https://matrix.to/#/#robosats:matrix.org).
Most communication about development takes place on our [SimpleX Development Group](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2F6iIcWT_dF2zN_w5xzZEY7HI2Prbh3ldP07YTyDexPjE%3D%40smp10.simplex.im%2FKEkNLMlgM8vrrU3xjBt5emS7EsP0c4s1%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEABehx7Tgefl_vvOGOe2SThJCGACKRgSU2wiUdIJ5bQHw%253D%26srv%3Drb2pbttocvnbrngnwziclp2f4ckjq65kebafws6g4hy22cdaiv5dwjqd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22gFi-9hvL3XgXXTgnlZPyJw%3D%3D%22%7D).
Discussion about code changes happens in GitHub issues and pull requests.

View File

@ -1,4 +1,4 @@
FROM python:3.12.3-slim-bookworm
FROM python:3.13.0-slim-bookworm
ARG DEBIAN_FRONTEND=noninteractive
ARG DEVELOPMENT=False

View File

@ -1277,9 +1277,9 @@ class Logics:
bond_satoshis = int(order.last_satoshis * order.bond_size / 100)
if user.robot.wants_stealth:
description = f"Payment reference: {order.reference}. This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
description = f"{config("NODE_ALIAS")} - Payment reference: {order.reference}. This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
else:
description = f"RoboSats - Publishing '{str(order)}' - Maker bond - This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
description = f"{config("NODE_ALIAS")} - Publishing '{str(order)}' - Maker bond - This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
# Gen hold Invoice
try:
@ -1402,10 +1402,10 @@ class Logics:
bond_satoshis = int(order.last_satoshis * order.bond_size / 100)
pos_text = "Buying" if cls.is_buyer(order, user) else "Selling"
if user.robot.wants_stealth:
description = f"Payment reference: {order.reference}. This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
description = f"{config("NODE_ALIAS")} - Payment reference: {order.reference}. This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
else:
description = (
f"RoboSats - Taking 'Order {order.id}' {pos_text} BTC for {str(float(order.amount)) + Currency.currency_dict[str(order.currency.currency)]}"
f"{config("NODE_ALIAS")} - Taking 'Order {order.id}' {pos_text} BTC for {str(float(order.amount)) + Currency.currency_dict[str(order.currency.currency)]}"
+ " - Taker bond - This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
)
@ -1501,9 +1501,9 @@ class Logics:
order.log(f"Escrow invoice amount is calculated as {escrow_satoshis} Sats")
if user.robot.wants_stealth:
description = f"Payment reference: {order.reference}. This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
description = f"{config("NODE_ALIAS")} - Payment reference: {order.reference}. This payment WILL FREEZE IN YOUR WALLET, check on RoboSats if the lock was successful. It will be unlocked (fail) unless you cheat or cancel unilaterally."
else:
description = f"RoboSats - Escrow amount for '{str(order)}' - It WILL FREEZE IN YOUR WALLET. It will be released to the buyer once you confirm you received the fiat. It will automatically return if buyer does not confirm the payment."
description = f"{config("NODE_ALIAS")} - Escrow amount for '{str(order)}' - It WILL FREEZE IN YOUR WALLET. It will be released to the buyer once you confirm you received the fiat. It will automatically return if buyer does not confirm the payment."
# Gen hold Invoice
try:

View File

@ -29,10 +29,13 @@ class Nostr:
await client.connect()
robot_name = await self.get_robot_name(order)
robot_hash_id = await self.get_robot_hash_id(order)
currency = await self.get_robot_currency(order)
event = EventBuilder(
Kind(38383), "", self.generate_tags(order, robot_name, currency)
Kind(38383),
"",
self.generate_tags(order, robot_name, robot_hash_id, currency),
).to_event(keys)
await client.send_event(event)
print(f"Nostr event sent: {event.as_json()}")
@ -41,18 +44,22 @@ class Nostr:
def get_robot_name(self, order):
return order.maker.username
@sync_to_async
def get_robot_hash_id(self, order):
return order.maker.robot.hash_id
@sync_to_async
def get_robot_currency(self, order):
return str(order.currency)
def generate_tags(self, order, robot_name, currency):
def generate_tags(self, order, robot_name, robot_hash_id, currency):
hashed_id = hashlib.md5(
f"{config("COORDINATOR_ALIAS", cast=str)}{order.id}".encode("utf-8")
).hexdigest()
tags = [
Tag.parse(["d", str(uuid.UUID(hashed_id))]),
Tag.parse(["name", robot_name]),
Tag.parse(["name", robot_name, robot_hash_id]),
Tag.parse(["k", "sell" if order.type == Order.Types.SELL else "buy"]),
Tag.parse(["f", currency]),
Tag.parse(["s", self.get_status_tag(order)]),
@ -73,7 +80,13 @@ class Nostr:
f"http://{config("HOST_NAME")}/order/{config("COORDINATOR_ALIAS", cast=str).lower()}/{order.id}",
]
),
Tag.parse(["expiration", str(int(order.expires_at.timestamp()))]),
Tag.parse(
[
"expiration",
str(int(order.expires_at.timestamp())),
str(order.escrow_duration),
]
),
Tag.parse(["y", "robosats", config("COORDINATOR_ALIAS", cast=str).lower()]),
Tag.parse(["n", str(config("NETWORK"))]),
Tag.parse(["layer"] + self.get_layer_tag(order)),

View File

@ -1,63 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<link rel="shortcut icon" type="image/png" href="./static/assets/images/favicon-96x96.png" />
<link rel="icon" type="image/png" href="./static/assets/images/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="./static/assets/images/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/png" href="./static/assets/images/favicon-192x192.png" sizes="192x192">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="A simple and private way to exchange bitcoin for national currencies. Robosats simplifies the peer-to-peer user experience and uses lightning hold invoices to minimize custody and trust requirements. No user registration required.">
<title>RoboSats - Simple and Private Bitcoin Exchange</title>
<link rel="stylesheet" type="text/css" href="./static/css/fonts.css"/>
<link rel="stylesheet" type="text/css" href="./static/css/loader.css"/>
<link rel="stylesheet" type="text/css" href="./static/css/index.css"/>
<link rel="stylesheet" type="text/css" href="./static/css/leaflet.css"/>
</head>
<body>
<noscript>
<div>
This site requires JavaScript. This message is only visible if you have it disabled. <br/><br/>
If you are using TOR browser set the "Security Level" to "Standard". If you keep seeing this message clear cache and storage of TOR browser app and retry.<br/><br/>
If the problem persists, ask for support in the RoboSats telegram group<a href="https://t.me/robosats"> (t.me/robosats)</a>
</div>
</noscript>
<div id="main">
<div id="app">
<div class="loaderCenter">
<div class="loaderSpinner"></div>
<div class="content-slider">
<div class="slider">
<div class="mask">
<ul>
<li class="anim1">
<div class="quote">Looking for robot parts ...</div>
</li>
<li class="anim2">
<div class="quote">Adding layers to the onion ...</div>
</li>
<li class="anim3">
<div class="quote">Winning at game theory ...</div>
</li>
<li class="anim4">
<div class="quote">Moving Sats at light speed ...</div>
</li>
<li class="anim5">
<div class="quote">Hiding in 2^256 bits of entropy...</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<script>
window.RobosatsSettings = 'web-basic'
window.RobosatsClient = 'desktop-app'
</script>
<script src="./static/frontend/main.js"></script>
</body>
</html>

View File

@ -48,13 +48,13 @@ function createWindow() {
},
});
// Load the index.html file from the app directory
mainWindow.loadURL("file://".concat(path.resolve(__dirname, 'index.html#/robot')), {
mainWindow.loadURL("file://".concat(path.resolve(__dirname, 'index.html#/garage')), {
extraHeaders: "pragma: no-cache\n" // Prevent caching of the loaded file
});
// Handle failed load attempts by reloading the file
mainWindow.webContents.on("did-fail-load", function () {
console.log("Failed to load the page, retrying...");
mainWindow.loadURL("file://".concat(__dirname, "/index.html#/robot"));
mainWindow.loadURL("file://".concat(__dirname, "/index.html#/garage"));
});
// Uncomment the following line to open the DevTools
// mainWindow.webContents.openDevTools();

View File

@ -56,14 +56,14 @@ function createWindow(): void {
});
// Load the index.html file from the app directory
mainWindow.loadURL(`file://${path.resolve(__dirname, 'index.html#/robot')}`, {
mainWindow.loadURL(`file://${path.resolve(__dirname, 'index.html#/garage')}`, {
extraHeaders: "pragma: no-cache\n" // Prevent caching of the loaded file
});
// Handle failed load attempts by reloading the file
mainWindow.webContents.on("did-fail-load", () => {
console.log("Failed to load the page, retrying...");
mainWindow.loadURL(`file://${__dirname}/index.html#/robot`);
mainWindow.loadURL(`file://${__dirname}/index.html#/garage`);
});
// Uncomment the following line to open the DevTools

View File

@ -1,16 +1,16 @@
{
"name": "desktop-app",
"version": "1.0.0",
"version": "0.7.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "desktop-app",
"version": "1.0.0",
"version": "0.7.1",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.19.2"
"express": "^4.21.1"
},
"devDependencies": {
"@electron/packager": "^18.3.2",
@ -622,9 +622,9 @@
"dev": true
},
"node_modules/body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
@ -634,7 +634,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@ -792,9 +792,9 @@
}
},
"node_modules/cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
"integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
"engines": {
"node": ">= 0.6"
}
@ -993,9 +993,9 @@
}
},
"node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
"engines": {
"node": ">= 0.8"
}
@ -1086,36 +1086,36 @@
}
},
"node_modules/express": {
"version": "4.19.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
"integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
"version": "4.21.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
"integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.2",
"body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.6.0",
"cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"path-to-regexp": "0.1.10",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
"serve-static": "1.15.0",
"send": "0.19.0",
"serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
@ -1195,12 +1195,12 @@
}
},
"node_modules/finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
"integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
@ -1805,9 +1805,12 @@
}
},
"node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/methods": {
"version": "1.1.2",
@ -1927,9 +1930,12 @@
}
},
"node_modules/object-inspect": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
"integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@ -2087,9 +2093,9 @@
"dev": true
},
"node_modules/path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
"integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
},
"node_modules/path-type": {
"version": "2.0.0",
@ -2215,11 +2221,11 @@
}
},
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"dependencies": {
"side-channel": "^1.0.4"
"side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
@ -2409,9 +2415,9 @@
"optional": true
},
"node_modules/send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
@ -2444,6 +2450,14 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/send/node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@ -2466,14 +2480,14 @@
}
},
"node_modules/serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
"integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"dependencies": {
"encodeurl": "~1.0.2",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
"send": "0.19.0"
},
"engines": {
"node": ">= 0.8.0"

View File

@ -1,6 +1,6 @@
{
"name": "desktop-app",
"version": "1.0.0",
"version": "0.7.1",
"description": "",
"main": "index.js",
"scripts": {
@ -20,7 +20,7 @@
},
"dependencies": {
"cors": "^2.8.5",
"express": "^4.19.2"
"express": "^4.21.1"
},
"build": {
"appId": "com.electron.robosats",

View File

@ -1 +0,0 @@
../frontend/static

View File

@ -1,14 +1,9 @@
version: '3.9'
services:
jekyll:
image: jekyll/jekyll:4.0
container_name: pages
build: ./docs
restart: always
volumes:
- .:/usr/src/robosats
command: bash -c "cd /usr/src/robosats/docs/
&& bundle install
&& bundle exec jekyll serve --force_polling -H 0.0.0.0 -P 4000"
ports:
- 4000:4000

12
docs/Dockerfile Normal file
View File

@ -0,0 +1,12 @@
FROM jekyll/jekyll:4.0
WORKDIR /usr/src/docs
COPY . .
RUN chown -R jekyll:jekyll /usr/src/docs
RUN chmod -R 755 /usr/src/docs
RUN bundle install
CMD ["bundle", "exec", "jekyll", "serve", "--force_polling", "-H", "0.0.0.0", "-P", "4000"]

View File

@ -7,6 +7,8 @@ source "https://rubygems.org"
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
gem "activesupport", ">= 6.1.7.5"
gem "minimal-mistakes-jekyll"
gem "jekyll-include-cache"
gem "webrick"

View File

@ -1,291 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (6.0.6.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
breakpoint (2.7.1)
sass (~> 3.3)
sassy-maps (< 1.0.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
colorator (1.1.0)
commonmarker (0.23.10)
concurrent-ruby (1.3.4)
csv (3.3.0)
dnsruby (1.72.2)
simpleidn (~> 0.2.1)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
ethon (0.16.0)
ffi (>= 1.15.0)
eventmachine (1.2.7)
execjs (2.9.1)
faraday (2.11.0)
faraday-net_http (>= 2.0, < 3.4)
logger
faraday-net_http (3.3.0)
net-http
ffi (1.17.0-x86_64-linux-gnu)
ffi (1.17.0-x86_64-linux-musl)
forwardable-extended (2.6.0)
gemoji (4.1.0)
github-pages (232)
github-pages-health-check (= 1.18.2)
jekyll (= 3.10.0)
jekyll-avatar (= 0.8.0)
jekyll-coffeescript (= 1.2.2)
jekyll-commonmark-ghpages (= 0.5.1)
jekyll-default-layout (= 0.1.5)
jekyll-feed (= 0.17.0)
jekyll-gist (= 1.5.0)
jekyll-github-metadata (= 2.16.1)
jekyll-include-cache (= 0.2.1)
jekyll-mentions (= 1.6.0)
jekyll-optional-front-matter (= 0.3.2)
jekyll-paginate (= 1.1.0)
jekyll-readme-index (= 0.3.0)
jekyll-redirect-from (= 0.16.0)
jekyll-relative-links (= 0.6.1)
jekyll-remote-theme (= 0.4.3)
jekyll-sass-converter (= 1.5.2)
jekyll-seo-tag (= 2.8.0)
jekyll-sitemap (= 1.4.0)
jekyll-swiss (= 1.0.0)
jekyll-theme-architect (= 0.2.0)
jekyll-theme-cayman (= 0.2.0)
jekyll-theme-dinky (= 0.2.0)
jekyll-theme-hacker (= 0.2.0)
jekyll-theme-leap-day (= 0.2.0)
jekyll-theme-merlot (= 0.2.0)
jekyll-theme-midnight (= 0.2.0)
jekyll-theme-minimal (= 0.2.0)
jekyll-theme-modernist (= 0.2.0)
jekyll-theme-primer (= 0.6.0)
jekyll-theme-slate (= 0.2.0)
jekyll-theme-tactile (= 0.2.0)
jekyll-theme-time-machine (= 0.2.0)
jekyll-titles-from-headings (= 0.5.3)
jemoji (= 0.13.0)
kramdown (= 2.4.0)
kramdown-parser-gfm (= 1.1.0)
liquid (= 4.0.4)
mercenary (~> 0.3)
minima (= 2.5.1)
nokogiri (>= 1.16.2, < 2.0)
rouge (= 3.30.0)
terminal-table (~> 1.4)
webrick (~> 1.8)
github-pages-health-check (1.18.2)
addressable (~> 2.3)
dnsruby (~> 1.60)
octokit (>= 4, < 8)
public_suffix (>= 3.0, < 6.0)
typhoeus (~> 1.3)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.8.0)
i18n (1.14.5)
concurrent-ruby (~> 1.0)
jekyll (3.10.0)
addressable (~> 2.4)
colorator (~> 1.0)
csv (~> 3.0)
em-websocket (~> 0.5)
i18n (>= 0.7, < 2)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (>= 1.17, < 3)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
webrick (>= 1.0)
jekyll-avatar (0.8.0)
jekyll (>= 3.0, < 5.0)
jekyll-coffeescript (1.2.2)
coffee-script (~> 2.2)
coffee-script-source (~> 1.12)
jekyll-commonmark (1.4.0)
commonmarker (~> 0.22)
jekyll-commonmark-ghpages (0.5.1)
commonmarker (>= 0.23.7, < 1.1.0)
jekyll (>= 3.9, < 4.0)
jekyll-commonmark (~> 1.4.0)
rouge (>= 2.0, < 5.0)
jekyll-default-layout (0.1.5)
jekyll (>= 3.0, < 5.0)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-github-metadata (2.16.1)
jekyll (>= 3.4, < 5.0)
octokit (>= 4, < 7, != 4.4.0)
jekyll-include-cache (0.2.1)
jekyll (>= 3.7, < 5.0)
jekyll-mentions (1.6.0)
html-pipeline (~> 2.3)
jekyll (>= 3.7, < 5.0)
jekyll-optional-front-matter (0.3.2)
jekyll (>= 3.0, < 5.0)
jekyll-paginate (1.1.0)
jekyll-readme-index (0.3.0)
jekyll (>= 3.0, < 5.0)
jekyll-redirect-from (0.16.0)
jekyll (>= 3.3, < 5.0)
jekyll-relative-links (0.6.1)
jekyll (>= 3.3, < 5.0)
jekyll-remote-theme (0.4.3)
addressable (~> 2.0)
jekyll (>= 3.5, < 5.0)
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
rubyzip (>= 1.3.0, < 3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-swiss (1.0.0)
jekyll-theme-architect (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-cayman (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-dinky (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-hacker (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-leap-day (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-merlot (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-midnight (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-minimal (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-modernist (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-primer (0.6.0)
jekyll (> 3.5, < 5.0)
jekyll-github-metadata (~> 2.9)
jekyll-seo-tag (~> 2.0)
jekyll-theme-slate (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-tactile (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-time-machine (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-titles-from-headings (0.5.3)
jekyll (>= 3.3, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
jemoji (0.13.0)
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.4)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.6.0)
mercenary (0.3.6)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minimal-mistakes-jekyll (4.25.1)
jekyll (>= 3.7, < 5.0)
jekyll-feed (~> 0.1)
jekyll-gist (~> 1.5)
jekyll-include-cache (~> 0.1)
jekyll-paginate (~> 1.1)
jekyll-sitemap (~> 1.3)
minitest (5.25.1)
net-http (0.4.1)
uri
nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
octokit (4.25.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (5.1.1)
racc (1.8.1)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.3.6)
strscan
rouge (3.30.0)
rubyzip (2.3.2)
safe_yaml (1.0.5)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sassy-maps (0.4.0)
sass (~> 3.3)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
simpleidn (0.2.3)
strscan (3.1.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
typhoeus (1.4.1)
ethon (>= 0.9.0)
tzinfo (1.2.10)
thread_safe (~> 0.1)
unicode-display_width (1.8.0)
uri (0.13.1)
webrick (1.8.1)
zeitwerk (2.6.17)
PLATFORMS
x86_64-linux
x86_64-linux-musl
DEPENDENCIES
breakpoint
github-pages (~> 232)
http_parser.rb (~> 0.6.0)
jekyll-feed (~> 0.17)
jekyll-include-cache
minimal-mistakes-jekyll
tzinfo (~> 1.2)
tzinfo-data
wdm (~> 0.1.1)
webrick
BUNDLED WITH
2.3.13

View File

@ -18,11 +18,11 @@ This contributing guide is based on the [Bisq contributing guide](https://github
*!!! Beware of scammers impersonating RoboSats admins. Admins will NEVER privately message/call you.*
- **Simplex:** [RoboSats Main Group](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2F0YuTwO05YJWS8rkjn9eLJDjQhFKvIYd8d4xG8X1blIU%3D%40smp8.simplex.im%2FyEX_vdhWew_FkovCQC3mRYRWZB1j_cBq%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAnrf9Jw3Ajdp4EQw71kqA64VgsIIzw8YNn68WjF09jFY%253D%26srv%3Dbeccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22hWnMVPnJl-KT3-virDk0JA%3D%3D%22%7D). Got questions or a problem? Find community-driven support in the public SimpleX group chat. If you're wanting to hang out with other cool robots and learn more about RoboSats, then those discussions happen in SimpleX, Nostr, and Matrix group chats.
- **Simplex:**
- [RoboSats Main Group](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2F0YuTwO05YJWS8rkjn9eLJDjQhFKvIYd8d4xG8X1blIU%3D%40smp8.simplex.im%2FyEX_vdhWew_FkovCQC3mRYRWZB1j_cBq%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAnrf9Jw3Ajdp4EQw71kqA64VgsIIzw8YNn68WjF09jFY%253D%26srv%3Dbeccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22hWnMVPnJl-KT3-virDk0JA%3D%3D%22%7D). Got questions or a problem? Find community-driven support in the public SimpleX group chat. If you're wanting to hang out with other cool robots and learn more about RoboSats, then those discussions happen in SimpleX, Nostr, and Matrix group chats.
- [RoboSats Development Group](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2F6iIcWT_dF2zN_w5xzZEY7HI2Prbh3ldP07YTyDexPjE%3D%40smp10.simplex.im%2FKEkNLMlgM8vrrU3xjBt5emS7EsP0c4s1%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEABehx7Tgefl_vvOGOe2SThJCGACKRgSU2wiUdIJ5bQHw%253D%26srv%3Drb2pbttocvnbrngnwziclp2f4ckjq65kebafws6g4hy22cdaiv5dwjqd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22gFi-9hvL3XgXXTgnlZPyJw%3D%3D%22%7D). Main developer communication group chat where open and technical discussions about development takes place. Discussion about code changes happens in GitHub issues and pull requests (PRs).
- **Nostr:** [RoboSats General Group](https://snort.social/e/note1tfwvglg8xz8420pfgav0dc9mqekv02nkpck2axefklrema7lk6wszmwxdy). Hang out with other cool robots and do not hesitate to ask questions about RoboSats! Also, the [RoboSats Nostr account](https://snort.social/p/npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) (npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) provides important project updates, tips and tricks of using RoboSats, and other privacy-centric commentary. Questions and engagement are welcome. Keep in mind: problems requiring RoboSats staff support should be directed to the main SimpleX group chat instead, where responses are quicker and staff can further investigate your problem.
- **Matrix:** [RoboSats Development Group](https://matrix.to/#/#robosats:matrix.org). Main developer communication group chat where open and technical discussions about development takes place. Discussion about code changes happens in GitHub issues and pull requests (PRs).
- **Nostr:** [RoboSats General 0xGroup](nostr:naddr1qpqrjv34vgckzcfjxp3kgvtzxcuxgepevycrzvesv5en2wps8pjrvd3hxuexvefs8qexxe3nvcun2v3ex3jxgdfhx56kxdm9vyck2ep48yq3wamnwvaz7tm8wfhh2urn9cc8scmgv96zucm0d5pqqqcyqqqfskq06gxuf). Hang out with other cool robots and do not hesitate to ask questions about RoboSats! Also, the [RoboSats Nostr account](https://snort.social/p/npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) (npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) provides important project updates, tips and tricks of using RoboSats, and other privacy-centric commentary. Questions and engagement are welcome. Keep in mind: problems requiring RoboSats staff support should be directed to the main SimpleX group chat instead, where responses are quicker and staff can further investigate your problem.
- **Twitter:** [RoboSats](https://twitter.com/RoboSats). Announces project updates, shares tips and tricks of using RoboSats, and discusses other privacy-related topics. Feel free to ask questions and to share your experience using RoboSats! The psuedonymous "Robotoshi" character, a privacy-loving and sometimes sassy robot, runs the RoboSats Twitter and tries his best to answer questions! Keep in mind that the aforementioned public Simplex group chat may be more effective in seeking technical help and users seeking dispute help will be directed to the SimpleX chat.

View File

@ -18,12 +18,12 @@ Esta guía de contribución se basa en la [Guía de contribución de Bisq](https
*!!! Cuidado con los estafadores que se hacen pasar por administradores de RoboSats. Los administradores NUNCA te llamarán o enviarán mensajes privados.*
- **Simplex:** [Grupo principal RoboSats](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2F0YuTwO05YJWS8rkjn9eLJDjQhFKvIYd8d4xG8X1blIU%3D%40smp8.simplex.im%2FyEX_vdhWew_FkovCQC3mRYRWZB1j_cBq%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAnrf9Jw3Ajdp4EQw71kqA64VgsIIzw8YNn68WjF09jFY%253D%26srv%3Dbeccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22hWnMVPnJl-KT3-virDk0JA%3D%3D%22%7D). ¿Tienes preguntas o un problema? Encuentra apoyo comunitario en el chat público del grupo SimpleX. Si quieres pasar el rato con otros robots geniales y aprender más sobre RoboSats, entonces esas discusiones ocurren en los chats de grupo SimpleX, Nostr y Matrix.
- **Simplex:**
- [Grupo principal RoboSats](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2F0YuTwO05YJWS8rkjn9eLJDjQhFKvIYd8d4xG8X1blIU%3D%40smp8.simplex.im%2FyEX_vdhWew_FkovCQC3mRYRWZB1j_cBq%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAnrf9Jw3Ajdp4EQw71kqA64VgsIIzw8YNn68WjF09jFY%253D%26srv%3Dbeccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22hWnMVPnJl-KT3-virDk0JA%3D%3D%22%7D). ¿Tienes preguntas o un problema? Encuentra apoyo comunitario en el chat público del grupo SimpleX. Si quieres pasar el rato con otros robots geniales y aprender más sobre RoboSats, entonces esas discusiones ocurren en los chats de grupo SimpleX, Nostr y Matrix.
- [Grupo de Desarrollo RoboSats](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2F6iIcWT_dF2zN_w5xzZEY7HI2Prbh3ldP07YTyDexPjE%3D%40smp10.simplex.im%2FKEkNLMlgM8vrrU3xjBt5emS7EsP0c4s1%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEABehx7Tgefl_vvOGOe2SThJCGACKRgSU2wiUdIJ5bQHw%253D%26srv%3Drb2pbttocvnbrngnwziclp2f4ckjq65kebafws6g4hy22cdaiv5dwjqd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22gFi-9hvL3XgXXTgnlZPyJw%3D%3D%22%7D). Principal grupo de chat de comunicación de desarrolladores donde tienen lugar discusiones abiertas y técnicas sobre el desarrollo. La discusión sobre los cambios en el código se realiza en GitHub issues y pull requests (PRs).
- **Nostr:** [Grupo General RoboSats](https://snort.social/e/note1tfwvglg8xz8420pfgav0dc9mqekv02nkpck2axefklrema7lk6wszmwxdy). Pasa el rato con otros robots geniales y no dudes en hacer preguntas sobre RoboSats. Además, la cuenta [Nostr RoboSats](https://snort.social/p/npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) (npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) proporciona actualizaciones importantes del proyecto, consejos y trucos sobre el uso de RoboSats y otros comentarios centrados en la privacidad. Las preguntas y la participación son bienvenidas. Recuerda: los problemas que requieran la ayuda del personal de RoboSats deben dirigirse al chat principal del grupo SimpleX, donde las respuestas son más rápidas y el personal puede investigar más a fondo su problema.
- **Matrix:** [Grupo de Desarrollo RoboSats](https://matrix.to/#/#robosats:matrix.org). Principal grupo de chat de comunicación de desarrolladores donde tienen lugar discusiones abiertas y técnicas sobre el desarrollo. La discusión sobre los cambios en el código se realiza en GitHub issues y pull requests (PRs).
- **Twitter:** [RoboSats](https://twitter.com/RoboSats). Anuncia actualizaciones del proyecto, comparte consejos y trucos sobre el uso de RoboSats y debate otros temas relacionados con la privacidad. No dudes en hacer preguntas y compartir tu experiencia con RoboSats. El personaje "Robotoshi", un robot amante de la privacidad y a veces descarado, dirige el Twitter de RoboSats e intenta responder a todas las preguntas. Ten en cuenta que el chat público del grupo Simplex antes mencionado puede ser más eficaz para buscar ayuda técnica y que los usuarios que busquen ayuda en disputas serán dirigidos al chat SimpleX.
## Flujo de trabajo de los colaboradores

View File

@ -18,12 +18,12 @@ This contributing guide is based on the [Bisq contributing guide](https://github
*!!! Beware of scammers impersonating RoboSats admins. Admins will NEVER privately message/call you.*
- **Simplex:** [RoboSats Main Group](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2F0YuTwO05YJWS8rkjn9eLJDjQhFKvIYd8d4xG8X1blIU%3D%40smp8.simplex.im%2FyEX_vdhWew_FkovCQC3mRYRWZB1j_cBq%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAnrf9Jw3Ajdp4EQw71kqA64VgsIIzw8YNn68WjF09jFY%253D%26srv%3Dbeccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22hWnMVPnJl-KT3-virDk0JA%3D%3D%22%7D). Got questions or a problem? Find community-driven support in the public SimpleX group chat. If you're wanting to hang out with other cool robots and learn more about RoboSats, then those discussions happen in SimpleX, Nostr, and Matrix group chats.
- **Simplex:**
- [RoboSats Main Group](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2F0YuTwO05YJWS8rkjn9eLJDjQhFKvIYd8d4xG8X1blIU%3D%40smp8.simplex.im%2FyEX_vdhWew_FkovCQC3mRYRWZB1j_cBq%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAnrf9Jw3Ajdp4EQw71kqA64VgsIIzw8YNn68WjF09jFY%253D%26srv%3Dbeccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22hWnMVPnJl-KT3-virDk0JA%3D%3D%22%7D). Got questions or a problem? Find community-driven support in the public SimpleX group chat. If you're wanting to hang out with other cool robots and learn more about RoboSats, then those discussions happen in SimpleX, Nostr, and Matrix group chats.
- [RoboSats Development Group](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2F6iIcWT_dF2zN_w5xzZEY7HI2Prbh3ldP07YTyDexPjE%3D%40smp10.simplex.im%2FKEkNLMlgM8vrrU3xjBt5emS7EsP0c4s1%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEABehx7Tgefl_vvOGOe2SThJCGACKRgSU2wiUdIJ5bQHw%253D%26srv%3Drb2pbttocvnbrngnwziclp2f4ckjq65kebafws6g4hy22cdaiv5dwjqd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22gFi-9hvL3XgXXTgnlZPyJw%3D%3D%22%7D). Main developer communication group chat where open and technical discussions about development takes place. Discussion about code changes happens in GitHub issues and pull requests (PRs).
- **Nostr:** [RoboSats General Group](https://snort.social/e/note1tfwvglg8xz8420pfgav0dc9mqekv02nkpck2axefklrema7lk6wszmwxdy). Hang out with other cool robots and do not hesitate to ask questions about RoboSats! Also, the [RoboSats Nostr account](https://snort.social/p/npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) (npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82) provides important project updates, tips and tricks of using RoboSats, and other privacy-centric commentary. Questions and engagement are welcome. Keep in mind: problems requiring RoboSats staff support should be directed to the main SimpleX group chat instead, where responses are quicker and staff can further investigate your problem.
- **Matrix:** [RoboSats Development Group](https://matrix.to/#/#robosats:matrix.org). Main developer communication group chat where open and technical discussions about development takes place. Discussion about code changes happens in GitHub issues and pull requests (PRs).
- **Twitter:** [RoboSats](https://twitter.com/RoboSats). Announces project updates, shares tips and tricks of using RoboSats, and discusses other privacy-related topics. Feel free to ask questions and to share your experience using RoboSats! The psuedonymous "Robotoshi" character, a privacy-loving and sometimes sassy robot, runs the RoboSats Twitter and tries his best to answer questions! Keep in mind that the aforementioned public Simplex group chat may be more effective in seeking technical help and users seeking dispute help will be directed to the SimpleX chat.
## Contributor Workflow

View File

@ -1,13 +1,8 @@
version: '3.9'
services:
jekyll:
image: jekyll/jekyll:4.0
container_name: pages
build: .
restart: always
volumes:
- .:/usr/src/docs
command: bash -c "cd /usr/src/docs/
&& bundle install
&& bundle exec jekyll serve --force_polling -H 0.0.0.0 -P 4000"
ports:
- 4000:4000

View File

@ -56,7 +56,7 @@ Simply open a new issue in GitHub and select the form "Coordinator Registration"
Coordinator registrations are **always OPEN** . All fields can be updated or completed later through pull requests. Don't worry about getting everything perfect initially. It's okay if your data policy, privacy policy, node ids, and endpoints aren't fully defined or are subject to change.
### How to run a RoboSats Coordinator?
The easiest way to run a RoboSats coordinator is by using our Docker image releases (see Github Release). That's it, there are no more guides at the moment so it requires a fair bit of technical knowledge as of now. The details of how to wire everything will vary depending on your existing infrastructure. You will find help on our [Matrix Development group](https://matrix.to/#/#robosats:matrix.org).
The easiest way to run a RoboSats coordinator is by using our Docker image releases (see Github Release). That's it, there are no more guides at the moment so it requires a fair bit of technical knowledge as of now. The details of how to wire everything will vary depending on your existing infrastructure. You will find help on our [SimpleX Development Group](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2F6iIcWT_dF2zN_w5xzZEY7HI2Prbh3ldP07YTyDexPjE%3D%40smp10.simplex.im%2FKEkNLMlgM8vrrU3xjBt5emS7EsP0c4s1%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEABehx7Tgefl_vvOGOe2SThJCGACKRgSU2wiUdIJ5bQHw%253D%26srv%3Drb2pbttocvnbrngnwziclp2f4ckjq65kebafws6g4hy22cdaiv5dwjqd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22gFi-9hvL3XgXXTgnlZPyJw%3D%3D%22%7D).
We are working to release three flavors of pre-configured orchestrations with decent defaults: 1) a well-tested docker-compose orchestration and 2) a [StartOS](https://github.com/Start9Labs/start-os) RoboSats Coordinator App, and lastly 3) an elegant, but little tested, Kubernetes orchestration. The infrastructure-as-code will be open source as well. You can find the repository holding the docker-compose and kubernetes orchestrations here [RoboSats-Deploy](https://github.com/RoboSats/robosats-deploy). The Kubernetes orchestration as wel as the StartOS app are still work in progress.

View File

@ -2,7 +2,8 @@
"env": {
"browser": true,
"es2021": true,
"jest": true
"jest": true,
"node": true
},
"extends": [
"eslint:recommended",

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "frontend",
"version": "0.7.0",
"version": "0.7.1",
"description": "",
"main": "index.js",
"scripts": {
@ -22,6 +22,7 @@
"@babel/preset-typescript": "^7.22.5",
"@babel/runtime": "^7.22.6",
"@types/jest": "^29.5.3",
"@types/latlon-geohash": "^2.0.3",
"@types/leaflet": "^1.9.7",
"@types/react": "^18.2.21",
"@types/react-dom": "^18.2.7",
@ -29,7 +30,6 @@
"@typescript-eslint/eslint-plugin": "^5.35.1",
"@typescript-eslint/parser": "^5.35.1",
"babel-loader": "^9.1.3",
"copy-webpack-plugin": "^12.0.1",
"eslint": "^8.45.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard-with-typescript": "^36.1.0",
@ -37,14 +37,16 @@
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-promise": "^6.6.0",
"eslint-plugin-react": "^7.34.0",
"eslint-plugin-react-hooks": "^4.6.0",
"filemanager-webpack-plugin": "^8.0.0",
"html-webpack-plugin": "^5.6.0",
"jest": "^29.6.1",
"prettier": "^3.3.3",
"ts-node": "^10.9.2",
"typescript": "^5.5.4",
"webpack": "^5.89.0",
"typescript": "^5.6.3",
"webpack": "^5.95.0",
"webpack-cli": "^5.1.4"
},
"dependencies": {
@ -56,7 +58,7 @@
"@mui/icons-material": "^5.15.9",
"@mui/lab": "^5.0.0-alpha.136",
"@mui/material": "^5.15.14",
"@mui/system": "^5.15.11",
"@mui/system": "^6.1.4",
"@mui/x-data-grid": "^7.6.0",
"@mui/x-date-pickers": "^7.2.0",
"@nivo/core": "^0.86.0",
@ -70,12 +72,14 @@
"i18next-http-backend": "^2.5.0",
"install": "^0.13.0",
"js-sha256": "^0.11.0",
"latlon-geohash": "^2.0.0",
"leaflet": "^1.9.4",
"light-bolt11-decoder": "^3.1.1",
"npm": "^10.8.1",
"nostr-tools": "^2.7.2",
"npm": "^10.9.0",
"openpgp": "^5.11.0",
"react": "^18.2.0",
"react-countdown": "^2.3.5",
"react-countdown": "^2.3.6",
"react-dom": "^18.2.0",
"react-grid-layout": "^1.4.4",
"react-i18next": "^14.1.2",

View File

@ -13,8 +13,10 @@ import ErrorBoundary from './components/ErrorBoundary';
import { AppContextProvider } from './contexts/AppContext';
import { GarageContextProvider } from './contexts/GarageContext';
import { FederationContextProvider } from './contexts/FederationContext';
import NotificationSwitchBadge from './components/NotificationSwitch';
const App = (): JSX.Element => {
const [client] = window.RobosatsSettings.split('-');
return (
<StrictMode>
<ErrorBoundary>
@ -24,10 +26,13 @@ const App = (): JSX.Element => {
<FederationContextProvider>
<GarageContextProvider>
<CssBaseline />
{window.NativeRobosats === undefined && window.RobosatsClient === undefined ? (
<HostAlert />
{client === 'mobile' ? (
<div style={{ display: 'inline-flex', position: 'fixed', top: '0.5em' }}>
<TorConnectionBadge />
<NotificationSwitchBadge />
</div>
) : (
<TorConnectionBadge />
<HostAlert />
)}
<Main />
</GarageContextProvider>

View File

@ -86,7 +86,7 @@ const BookPage = (): JSX.Element => {
setOpenNoRobot(false);
}}
onClickGenerateRobot={() => {
navigate('/robot');
navigate('/garage');
}}
/>
{openMaker ? (
@ -99,7 +99,7 @@ const BookPage = (): JSX.Element => {
<Box sx={{ maxWidth: '18em', padding: '0.5em' }}>
<MakerForm
onClickGenerateRobot={() => {
navigate('/robot');
navigate('/garage');
}}
/>
</Box>

View File

@ -12,9 +12,10 @@ import { GarageContext, type UseGarageStoreType } from '../contexts/GarageContex
import Routes from './Routes';
const getRouter = (): any => {
if (window.NativeRobosats === undefined && window.RobosatsClient === undefined) {
const [client] = window.RobosatsSettings.split('-');
if (client === 'web') {
return BrowserRouter;
} else if (window.RobosatsClient === 'desktop-app') {
} else if (client === 'desktop') {
return HashRouter;
} else {
return MemoryRouter;

View File

@ -23,6 +23,7 @@ export interface OpenDialogs {
client: boolean;
update: boolean;
profile: boolean;
recovery: boolean;
}
const MainDialogs = (): JSX.Element => {

View File

@ -25,7 +25,7 @@ const MakerPage = (): JSX.Element => {
const matches = useMemo(() => {
return filterOrders({
orders: federation.book,
federation,
baseFilter: {
currency: fav.currency === 0 ? 1 : fav.currency,
type: fav.type,
@ -67,7 +67,7 @@ const MakerPage = (): JSX.Element => {
setOpenNoRobot(false);
}}
onClickGenerateRobot={() => {
navigate('/robot');
navigate('/garage');
}}
/>
<Grid item>
@ -112,7 +112,7 @@ const MakerPage = (): JSX.Element => {
}}
submitButtonLabel={matches.length > 0 && !showMatches ? 'Submit' : 'Create order'}
onClickGenerateRobot={() => {
navigate('/robot');
navigate('/garage');
}}
/>
</Paper>

View File

@ -54,8 +54,8 @@ const NavBar = (): JSX.Element => {
// change tab (page) into the current route
const pathPage: Page | string = location.pathname.split('/')[1];
if (pathPage === 'index.html') {
navigate('/robot');
setPage('robot');
navigate('/garage');
setPage('garage');
}
if (isPage(pathPage)) {
setPage(pathPage);
@ -113,7 +113,7 @@ const NavBar = (): JSX.Element => {
<Tab
sx={{ ...tabSx, minWidth: '2.5em', width: '2.5em', maxWidth: '4em' }}
value='none'
disabled={slot?.nickname === null}
disabled={!slot?.nickname}
onClick={() => {
setOpen({ ...closeAll, profile: !open.profile });
}}
@ -131,9 +131,9 @@ const NavBar = (): JSX.Element => {
/>
<Tab
label={smallBar ? undefined : t('Robot')}
label={smallBar ? undefined : t('Garage')}
sx={{ ...tabSx, minWidth: '1em' }}
value='robot'
value='garage'
icon={<SmartToy />}
iconPosition='start'
/>

View File

@ -1,8 +1,8 @@
import NavBar from './NavBar';
export type Page = 'robot' | 'order' | 'create' | 'offers' | 'settings' | 'none';
export type Page = 'garage' | 'order' | 'create' | 'offers' | 'settings' | 'none';
export default NavBar;
export function isPage(page: string): page is Page {
return ['robot', 'order', 'create', 'offers', 'settings', 'none'].includes(page);
return ['garage', 'order', 'create', 'offers', 'settings', 'none'].includes(page);
}

View File

@ -69,7 +69,7 @@ const OrderPage = (): JSX.Element => {
};
const startAgain = (): void => {
navigate('/robot');
navigate('/garage');
};
const orderDetailsSpace = currentOrder ? (
@ -78,7 +78,7 @@ const OrderPage = (): JSX.Element => {
currentOrder={currentOrder}
onClickCoordinator={onClickCoordinator}
onClickGenerateRobot={() => {
navigate('/robot');
navigate('/garage');
}}
/>
) : (

View File

@ -23,6 +23,7 @@ import { genBase62Token } from '../../utils';
import { NewTabIcon } from '../../components/Icons';
import { AppContext, type UseAppStoreType } from '../../contexts/AppContext';
import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext';
import { type UseFederationStoreType, FederationContext } from '../../contexts/FederationContext';
interface OnboardingProps {
setView: (state: 'welcome' | 'onboarding' | 'recovery' | 'profile') => void;
@ -30,23 +31,16 @@ interface OnboardingProps {
setRobot: (state: Robot) => void;
inputToken: string;
setInputToken: (state: string) => void;
getGenerateRobot: (token: string) => void;
badToken: string;
baseUrl: string;
}
const Onboarding = ({
setView,
inputToken,
setInputToken,
badToken,
getGenerateRobot,
}: OnboardingProps): JSX.Element => {
const Onboarding = ({ setView, inputToken, setInputToken }: OnboardingProps): JSX.Element => {
const { t } = useTranslation();
const navigate = useNavigate();
const { setPage } = useContext<UseAppStoreType>(AppContext);
const { garage } = useContext<UseGarageStoreType>(GarageContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext);
const [step, setStep] = useState<'1' | '2' | '3'>('1');
const [generatedToken, setGeneratedToken] = useState<boolean>(false);
@ -105,7 +99,6 @@ const Onboarding = ({
autoFocusTarget='copyButton'
inputToken={inputToken}
setInputToken={setInputToken}
badToken={badToken}
onPressEnter={() => null}
/>
</Grid>
@ -123,7 +116,7 @@ const Onboarding = ({
<Button
onClick={() => {
setStep('2');
getGenerateRobot(inputToken);
garage.createRobot(federation, inputToken);
}}
variant='contained'
size='large'

View File

@ -1,66 +0,0 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Button, Grid, Typography } from '@mui/material';
import TokenInput from './TokenInput';
import Key from '@mui/icons-material/Key';
interface RecoveryProps {
setView: (state: 'welcome' | 'onboarding' | 'recovery' | 'profile') => void;
inputToken: string;
badToken: string;
setInputToken: (state: string) => void;
getRecoverRobot: (token: string) => void;
}
const Recovery = ({
inputToken,
badToken,
setView,
setInputToken,
getRecoverRobot,
}: RecoveryProps): JSX.Element => {
const { t } = useTranslation();
const onClickRecover = (): void => {
getRecoverRobot(inputToken);
setView('profile');
};
return (
<Grid container direction='column' alignItems='center' spacing={1} padding={2}>
<Grid item>
<Typography variant='h5' align='center'>
{t('Robot recovery')}
</Typography>
</Grid>
<Grid item>
<Typography align='center'>
{t('Enter your robot token to re-build your robot and gain access to its trades.')}
</Typography>
</Grid>
<Grid item>
<TokenInput
showCopy={false}
inputToken={inputToken}
setInputToken={setInputToken}
label={t('Paste token here')}
onPressEnter={onClickRecover}
badToken={badToken}
/>
</Grid>
<Grid item>
<Button
variant='contained'
size='large'
disabled={Boolean(badToken)}
onClick={onClickRecover}
>
<Key /> <div style={{ width: '0.5em' }} />
{t('Recover')}
</Button>
</Grid>
</Grid>
);
};
export default Recovery;

View File

@ -11,10 +11,9 @@ import {
MenuItem,
Box,
useTheme,
Tooltip,
type SelectChangeEvent,
} from '@mui/material';
import { Bolt, Add, DeleteSweep, Logout, Download } from '@mui/icons-material';
import { Key, Bolt, Add, DeleteSweep, Download } from '@mui/icons-material';
import RobotAvatar from '../../components/RobotAvatar';
import TokenInput from './TokenInput';
import { type Slot, type Robot } from '../../models';
@ -22,14 +21,13 @@ import { AppContext, type UseAppStoreType } from '../../contexts/AppContext';
import { genBase62Token } from '../../utils';
import { LoadingButton } from '@mui/lab';
import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext';
import { type UseFederationStoreType, FederationContext } from '../../contexts/FederationContext';
interface RobotProfileProps {
robot: Robot;
setRobot: (state: Robot) => void;
setView: (state: 'welcome' | 'onboarding' | 'recovery' | 'profile') => void;
getGenerateRobot: (token: string, slot?: number) => void;
inputToken: string;
logoutRobot: () => void;
setInputToken: (state: string) => void;
width: number;
baseUrl: string;
@ -37,14 +35,13 @@ interface RobotProfileProps {
const RobotProfile = ({
inputToken,
getGenerateRobot,
setInputToken,
logoutRobot,
setView,
width,
}: RobotProfileProps): JSX.Element => {
const { windowSize } = useContext<UseAppStoreType>(AppContext);
const { windowSize, client, setOpen } = useContext<UseAppStoreType>(AppContext);
const { garage, slotUpdatedAt } = useContext<UseGarageStoreType>(GarageContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext);
const { t } = useTranslation();
const theme = useTheme();
@ -60,7 +57,9 @@ const RobotProfile = ({
}, [slotUpdatedAt, loading]);
const handleAddRobot = (): void => {
getGenerateRobot(genBase62Token(36));
const token = genBase62Token(36);
garage.createRobot(federation, token);
setInputToken(token);
setLoading(true);
};
@ -75,10 +74,6 @@ const RobotProfile = ({
const slot = garage.getSlot();
const robot = slot?.getRobot();
const loadingCoordinators = Object.values(slot?.robots ?? {}).filter(
(robot) => robot.loading,
).length;
return (
<Grid container direction='column' alignItems='center' spacing={1} padding={1} paddingTop={2}>
<Grid
@ -154,7 +149,7 @@ const RobotProfile = ({
)}
</Grid>
{loadingCoordinators > 0 && !slot?.activeOrder?.id ? (
{federation.loading && !slot?.activeOrder?.id ? (
<Grid>
<b>{t('Looking for orders!')}</b>
<LinearProgress />
@ -208,7 +203,7 @@ const RobotProfile = ({
</Grid>
) : null}
{!slot?.activeOrder && !slot?.lastOrder && loadingCoordinators === 0 ? (
{!slot?.activeOrder && !slot?.lastOrder && !federation.loading ? (
<Grid item>{t('No existing orders found')}</Grid>
) : null}
@ -220,26 +215,7 @@ const RobotProfile = ({
alignItems='stretch'
sx={{ width: '100%' }}
>
<Grid
item
xs={2}
sx={{ display: 'flex', justifyContent: 'stretch', alignItems: 'stretch' }}
>
<Tooltip enterTouchDelay={0} enterDelay={300} enterNextDelay={1000} title={t('Logout')}>
<Button
sx={{ minWidth: '2em', width: '100%' }}
color='primary'
variant='outlined'
onClick={() => {
logoutRobot();
setView('welcome');
}}
>
<Logout />
</Button>
</Tooltip>
</Grid>
<Grid item xs={10}>
<Grid item xs={12}>
<TokenInput
inputToken={inputToken}
editable={false}
@ -317,7 +293,7 @@ const RobotProfile = ({
</LoadingButton>
</Grid>
{window.NativeRobosats === undefined ? (
{client !== 'mobile' ? (
<Grid item>
<Button
color='primary'
@ -334,13 +310,29 @@ const RobotProfile = ({
<Button
color='primary'
onClick={() => {
garage.delete();
logoutRobot();
setView('welcome');
garage.deleteSlot();
if (Object.keys(garage.slots).length < 1) setView('welcome');
}}
>
<DeleteSweep /> <div style={{ width: '0.5em' }} />
{t('Delete Garage')}
{t('Delete Robot')}
</Button>
</Grid>
</Grid>
<Grid item container direction='row' alignItems='center' justifyContent='space-evenly'>
<Grid item>
<Button
size='small'
color='secondary'
variant='contained'
onClick={() => {
setOpen((open) => {
return { ...open, recovery: true };
});
}}
>
<Key /> <div style={{ width: '0.5em' }} />
{t('Recovery')}
</Button>
</Grid>
</Grid>

View File

@ -4,6 +4,7 @@ import { IconButton, LinearProgress, TextField, Tooltip } from '@mui/material';
import { ContentCopy } from '@mui/icons-material';
import { systemClient } from '../../services/System';
import { type UseGarageStoreType, GarageContext } from '../../contexts/GarageContext';
import { validateTokenEntropy } from '../../utils';
interface TokenInputProps {
editable?: boolean;
@ -12,7 +13,7 @@ interface TokenInputProps {
inputToken: string;
autoFocusTarget?: 'textfield' | 'copyButton' | 'none';
onPressEnter: () => void;
badToken?: string;
setValidToken?: (valid: boolean) => void;
setInputToken: (state: string) => void;
showCopy?: boolean;
label?: string;
@ -26,18 +27,33 @@ const TokenInput = ({
onPressEnter,
autoFocusTarget = 'textfield',
inputToken,
badToken = '',
loading = false,
setInputToken,
setValidToken = () => {},
}: TokenInputProps): JSX.Element => {
const { t } = useTranslation();
const { garage } = useContext<UseGarageStoreType>(GarageContext);
const [showCopied, setShowCopied] = useState<boolean>(false);
const [badToken, setBadToken] = useState<string>('');
useEffect(() => {}, [inputToken]);
useEffect(() => {
setShowCopied(false);
if (inputToken.length < 20) {
setBadToken(t('The token is too short'));
} else if (!validateTokenEntropy(inputToken).hasEnoughEntropy) {
setBadToken(t('Not enough entropy, make it more complex'));
} else {
setBadToken('');
}
}, [inputToken]);
useEffect(() => {
setShowCopied(false);
setValidToken(badToken === '');
}, [badToken]);
useEffect(() => {
setShowCopied(false);
}, [showCopied]);

View File

@ -1,19 +1,28 @@
import React from 'react';
import React, { useContext } from 'react';
import { useTranslation } from 'react-i18next';
import { Box, Button, Grid, Typography, useTheme } from '@mui/material';
import { RoboSatsTextIcon } from '../../components/Icons';
import { FastForward, RocketLaunch, Key } from '@mui/icons-material';
import { genBase62Token } from '../../utils';
import { type UseFederationStoreType, FederationContext } from '../../contexts/FederationContext';
import { type UseGarageStoreType, GarageContext } from '../../contexts/GarageContext';
import { useNavigate } from 'react-router-dom';
import { type UseAppStoreType, AppContext } from '../../contexts/AppContext';
interface WelcomeProps {
setView: (state: 'welcome' | 'onboarding' | 'recovery' | 'profile') => void;
getGenerateRobot: (token: string) => void;
width: number;
setInputToken: (state: string) => void;
}
const Welcome = ({ setView, width, getGenerateRobot }: WelcomeProps): JSX.Element => {
const Welcome = ({ setView, width, setInputToken }: WelcomeProps): JSX.Element => {
const { setPage } = useContext<UseAppStoreType>(AppContext);
const { t } = useTranslation();
const navigate = useNavigate();
const theme = useTheme();
const { setOpen } = useContext<UseAppStoreType>(AppContext);
const { garage } = useContext<UseGarageStoreType>(GarageContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext);
return (
<Grid
@ -94,7 +103,9 @@ const Welcome = ({ setView, width, getGenerateRobot }: WelcomeProps): JSX.Elemen
color='secondary'
variant='contained'
onClick={() => {
setView('recovery');
setOpen((open) => {
return { ...open, recovery: true };
});
}}
>
<Key /> <div style={{ width: '0.5em' }} />
@ -109,12 +120,15 @@ const Welcome = ({ setView, width, getGenerateRobot }: WelcomeProps): JSX.Elemen
size='small'
color='primary'
onClick={() => {
setView('profile');
getGenerateRobot(genBase62Token(36));
const token = genBase62Token(36);
garage.createRobot(federation, token);
setInputToken(token);
navigate('/create');
setPage('create');
}}
>
<FastForward /> <div style={{ width: '0.5em' }} />
{t('Fast Generate Robot')}
{t('Fast Generate Order')}
</Button>
</Grid>
</Grid>

View File

@ -15,18 +15,14 @@ import { useParams } from 'react-router-dom';
import Onboarding from './Onboarding';
import Welcome from './Welcome';
import RobotProfile from './RobotProfile';
import Recovery from './Recovery';
import { TorIcon } from '../../components/Icons';
import { genKey } from '../../pgp';
import { AppContext, type UseAppStoreType } from '../../contexts/AppContext';
import { validateTokenEntropy } from '../../utils';
import { FederationContext, type UseFederationStoreType } from '../../contexts/FederationContext';
import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext';
import RecoveryDialog from '../../components/Dialogs/Recovery';
const RobotPage = (): JSX.Element => {
const { torStatus, windowSize, settings, page } = useContext<UseAppStoreType>(AppContext);
const { torStatus, windowSize, settings, page, client } = useContext<UseAppStoreType>(AppContext);
const { garage } = useContext<UseGarageStoreType>(GarageContext);
const { federation, sortedCoordinators } = useContext<UseFederationStoreType>(FederationContext);
const { t } = useTranslation();
const params = useParams();
const urlToken = settings.selfhostedClient ? params.token : null;
@ -34,55 +30,22 @@ const RobotPage = (): JSX.Element => {
const maxHeight = windowSize.height * 0.85 - 3;
const theme = useTheme();
const [badToken, setBadToken] = useState<string>('');
const [inputToken, setInputToken] = useState<string>('');
const [view, setView] = useState<'welcome' | 'onboarding' | 'recovery' | 'profile'>(
const [view, setView] = useState<'welcome' | 'onboarding' | 'profile'>(
garage.currentSlot !== null ? 'profile' : 'welcome',
);
useEffect(() => {
const token = urlToken ?? garage.currentSlot;
if (token !== undefined && token !== null && page === 'robot') {
if (token !== undefined && token !== null && page === 'garage') {
setInputToken(token);
if (window.NativeRobosats === undefined || torStatus === 'ON' || !settings.useProxy) {
if (client !== 'mobile' || torStatus === 'ON' || !settings.useProxy) {
setView('profile');
}
}
}, [torStatus, page]);
useEffect(() => {
if (inputToken.length < 20) {
setBadToken(t('The token is too short'));
} else if (!validateTokenEntropy(inputToken).hasEnoughEntropy) {
setBadToken(t('Not enough entropy, make it more complex'));
} else {
setBadToken('');
}
}, [inputToken]);
const getGenerateRobot = (token: string): void => {
setInputToken(token);
genKey(token)
.then((key) => {
garage.createRobot(token, sortedCoordinators, {
token,
pubKey: key.publicKeyArmored,
encPrivKey: key.encryptedPrivateKeyArmored,
});
void garage.fetchRobot(federation, token);
garage.setCurrentSlot(token);
})
.catch((error) => {
console.error('Error:', error);
});
};
const logoutRobot = (): void => {
setInputToken('');
garage.deleteSlot();
};
if (settings.useProxy && !(window.NativeRobosats === undefined) && !(torStatus === 'ON')) {
if (settings.useProxy && client === 'mobile' && !(torStatus === 'ON')) {
return (
<Paper
elevation={12}
@ -91,6 +54,7 @@ const RobotPage = (): JSX.Element => {
maxHeight: `${maxHeight}em`,
}}
>
<RecoveryDialog setInputToken={setInputToken} setView={setView} />
<Grid container direction='column' alignItems='center' spacing={1} padding={2}>
<Grid item>
<Typography align='center' variant='h6'>
@ -141,38 +105,21 @@ const RobotPage = (): JSX.Element => {
overflowX: 'clip',
}}
>
<RecoveryDialog setInputToken={setInputToken} setView={setView} />
{view === 'welcome' ? (
<Welcome setView={setView} getGenerateRobot={getGenerateRobot} width={width} />
<Welcome setView={setView} width={width} setInputToken={setInputToken} />
) : null}
{view === 'onboarding' ? (
<Onboarding
setView={setView}
badToken={badToken}
inputToken={inputToken}
setInputToken={setInputToken}
getGenerateRobot={getGenerateRobot}
/>
<Onboarding setView={setView} inputToken={inputToken} setInputToken={setInputToken} />
) : null}
{view === 'profile' ? (
<RobotProfile
setView={setView}
logoutRobot={logoutRobot}
width={width}
inputToken={inputToken}
setInputToken={setInputToken}
getGenerateRobot={getGenerateRobot}
/>
) : null}
{view === 'recovery' ? (
<Recovery
setView={setView}
badToken={badToken}
inputToken={inputToken}
setInputToken={setInputToken}
getRecoverRobot={getGenerateRobot}
/>
) : null}
</Paper>

View File

@ -27,14 +27,14 @@ const Routes: React.FC = () => {
return (
<DomRoutes>
{['/robot/:token?', '/', ''].map((path, index) => {
{['/garage/:token?', '/', ''].map((path, index) => {
return (
<Route
path={path}
element={
<Slide
direction={page === 'robot' ? slideDirection.in : slideDirection.out}
in={page === 'robot'}
direction={page === 'garage' ? slideDirection.in : slideDirection.out}
in={page === 'garage'}
appear={slideDirection.in !== undefined}
>
<div>

View File

@ -1,5 +1,5 @@
import React, { useContext, useState } from 'react';
import { Button, Grid, List, ListItem, Paper, TextField, Typography } from '@mui/material';
import { Box, Button, Grid, List, ListItem, Paper, TextField, Typography } from '@mui/material';
import SettingsForm from '../../components/SettingsForm';
import { AppContext, type UseAppStoreType } from '../../contexts/AppContext';
import FederationTable from '../../components/FederationTable';
@ -49,52 +49,60 @@ const SettingsPage = (): JSX.Element => {
}}
>
<Grid container>
<Grid item>
<Grid item xs={12}>
<SettingsForm />
</Grid>
<Grid item>
<Grid item xs={12}>
<FederationTable maxHeight={18} />
</Grid>
<Grid item>
<Grid item xs={12}>
<Typography align='center' component='h2' variant='subtitle2' color='secondary'>
{error}
</Typography>
</Grid>
<List>
<ListItem>
<TextField
id='outlined-basic'
label={t('Alias')}
variant='outlined'
size='small'
value={newAlias}
onChange={(e) => {
setNewAlias(e.target.value);
}}
/>
<TextField
id='outlined-basic'
label={t('URL')}
variant='outlined'
size='small'
value={newUrl}
onChange={(e) => {
setNewUrl(e.target.value);
}}
/>
<Button
sx={{ maxHeight: 38 }}
disabled={false}
onClick={addCoordinator}
variant='contained'
color='primary'
size='small'
type='submit'
>
{t('Add')}
</Button>
</ListItem>
</List>
<Grid item xs={12}>
<List>
<ListItem>
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
<TextField
id='outlined-basic'
label={t('Alias')}
variant='outlined'
size='small'
value={newAlias}
onChange={(e) => {
setNewAlias(e.target.value);
}}
/>
</Box>
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
<TextField
id='outlined-basic'
label={t('URL')}
variant='outlined'
size='small'
value={newUrl}
onChange={(e) => {
setNewUrl(e.target.value);
}}
/>
</Box>
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
<Button
sx={{ maxHeight: 38 }}
disabled={false}
onClick={addCoordinator}
variant='contained'
color='primary'
size='small'
type='submit'
>
{t('Add')}
</Button>
</Box>
</ListItem>
</List>
</Grid>
</Grid>
</Paper>
);

View File

@ -350,8 +350,9 @@ const BookControl = ({
<FlagWithProps code='ANY' />
</div>
</MenuItem>
{Object.values(federation.coordinators).map((coordinator) =>
coordinator.enabled ? (
{Object.values(federation.coordinators)
.filter((coord) => coord.enabled)
.map((coordinator) => (
<MenuItem
key={coordinator.shortAlias}
value={coordinator.shortAlias}
@ -367,10 +368,7 @@ const BookControl = ({
/>
</div>
</MenuItem>
) : (
<></>
),
)}
))}
</Select>
</Grid>
</>

View File

@ -92,7 +92,7 @@ const BookTable = ({
const { t } = useTranslation();
const theme = useTheme();
const orders = orderList ?? federation.book;
const orders = orderList ?? Object.values(federation.book);
const [paginationModel, setPaginationModel] = useState<GridPaginationModel>({
pageSize: 0,
@ -425,6 +425,11 @@ const BookTable = ({
width: width * fontSize,
renderCell: (params: any) => {
const currencyCode = String(currencyDict[params.row.currency.toString()]);
const coordinator = federation.getCoordinator(params.row.coordinatorShortAlias);
const premium = parseFloat(params.row.premium);
const price =
(coordinator.limits[params.row.currency.toString()]?.price ?? 1) * (1 + premium / 100);
return (
<div
style={{ cursor: 'pointer' }}
@ -432,7 +437,7 @@ const BookTable = ({
onOrderClicked(params.row.id, params.row.coordinatorShortAlias);
}}
>
{`${pn(params.row.price)} ${currencyCode}/BTC`}
{`${pn(Math.round(price))} ${currencyCode}/BTC`}
</div>
);
},
@ -575,6 +580,16 @@ const BookTable = ({
type: 'number',
width: width * fontSize,
renderCell: (params: any) => {
const coordinator = federation.getCoordinator(params.row.coordinatorShortAlias);
const amount =
params.row.has_range === true
? parseFloat(params.row.max_amount)
: parseFloat(params.row.amount);
const premium = parseFloat(params.row.premium);
const price =
(coordinator.limits[params.row.currency.toString()]?.price ?? 1) * (1 + premium / 100);
const satoshisNow = (100000000 * amount) / price;
return (
<div
style={{ cursor: 'pointer' }}
@ -582,9 +597,9 @@ const BookTable = ({
onOrderClicked(params.row.id, params.row.coordinatorShortAlias);
}}
>
{params.row.satoshis_now > 1000000
? `${pn(Math.round(params.row.satoshis_now / 10000) / 100)} M`
: `${pn(Math.round(params.row.satoshis_now / 1000))} K`}
{satoshisNow > 1000000
? `${pn(Math.round(satoshisNow / 10000) / 100)} M`
: `${pn(Math.round(satoshisNow / 1000))} K`}
</div>
);
},
@ -813,7 +828,7 @@ const BookTable = ({
<Grid item xs={6}>
<IconButton
onClick={() => {
void federation.updateBook();
void federation.loadBook();
}}
>
<Refresh />
@ -881,17 +896,13 @@ const BookTable = ({
const filteredOrders = useMemo(() => {
return showControls
? filterOrders({
orders,
federation,
baseFilter: fav,
paymentMethods,
})
: orders;
}, [showControls, orders, fav, paymentMethods]);
const loadingPercentage =
((federation.exchange.enabledCoordinators - federation.exchange.loadingCoordinators) /
federation.exchange.enabledCoordinators) *
100;
if (!fullscreen) {
return (
<Paper
@ -924,8 +935,8 @@ const BookTable = ({
setPaymentMethods,
},
loadingOverlay: {
variant: loadingPercentage === 0 ? 'indeterminate' : 'determinate',
value: loadingPercentage,
variant: 'indeterminate',
value: federation.loading ? 0 : 100,
},
}}
paginationModel={paginationModel}

View File

@ -66,15 +66,24 @@ const DepthChart: React.FC<DepthChartProps> = ({
}, [fav.currency]);
useEffect(() => {
if (federation.book.length > 0) {
const enriched = federation.book.map((order) => {
// We need to transform all currencies to the same base (ex. USD), we don't have the exchange rate
// for EUR -> USD, but we know the rate of both to BTC, so we get advantage of it and apply a
// simple rule of three
if (order.coordinatorShortAlias != null) {
if (Object.values(federation.book).length > 0) {
const enriched = Object.values(federation.book).map((order) => {
if (order.coordinatorShortAlias != null && order.currency) {
const limits = federation.getCoordinator(order.coordinatorShortAlias).limits;
const price = limits[currencyCode] ? limits[currencyCode].price : 0;
order.base_amount = (order.price * price) / price;
const originalPrice =
(limits[order.currency]?.price ?? 0) * (1 + parseFloat(order.premium) / 100);
const currencyPrice =
(limits[currencyCode]?.price ?? 0) * (1 + parseFloat(order.premium) / 100);
const originalAmount =
order.has_range && order.max_amount
? parseFloat(order.max_amount)
: parseFloat(order.amount);
const currencyAmount = (currencyPrice * originalAmount) / originalPrice;
order.base_price = currencyPrice;
order.satoshis_now = (100000000 * currencyAmount) / currencyPrice;
}
return order;
});
@ -89,8 +98,8 @@ const DepthChart: React.FC<DepthChartProps> = ({
}, [enrichedOrders, xRange]);
useEffect(() => {
if (xType === 'base_amount') {
const prices: number[] = enrichedOrders.map((order) => order?.base_amount ?? 0);
if (xType === 'base_price') {
const prices: number[] = enrichedOrders.map((order) => order?.base_price ?? 0);
const medianValue = ~~matchMedian(prices);
const maxValue = prices.sort((a, b) => b - a).slice(0, 1)[0] ?? 1500;
@ -114,9 +123,9 @@ const DepthChart: React.FC<DepthChartProps> = ({
const generateSeries: () => void = () => {
const sortedOrders: PublicOrder[] =
xType === 'base_amount'
xType === 'base_price'
? enrichedOrders.sort(
(order1, order2) => (order1?.base_amount ?? 0) - (order2?.base_amount ?? 0),
(order1, order2) => (order1?.base_price ?? 0) - (order2?.base_price ?? 0),
)
: enrichedOrders.sort((order1, order2) => order1.premium - order2.premium);
@ -152,16 +161,17 @@ const DepthChart: React.FC<DepthChartProps> = ({
let serie: Datum[] = [];
orders.forEach((order) => {
const lastSumOrders = sumOrders;
sumOrders += (order.satoshis_now ?? 0) / 100000000;
const datum: Datum[] = [
{
// Vertical Line
x: xType === 'base_amount' ? order.base_amount : order.premium,
x: xType === 'base_price' ? order.base_price : order.premium,
y: lastSumOrders,
},
{
// PublicOrder Point
x: xType === 'base_amount' ? order.base_amount : order.premium,
x: xType === 'base_price' ? order.base_price : order.premium,
y: sumOrders,
order,
},
@ -226,7 +236,7 @@ const DepthChart: React.FC<DepthChartProps> = ({
};
const formatAxisX = (value: number): string => {
if (xType === 'base_amount') {
if (xType === 'base_price') {
return value.toString();
}
return `${value}%`;
@ -285,7 +295,7 @@ const DepthChart: React.FC<DepthChartProps> = ({
{t('Premium')}
</div>
</MenuItem>
<MenuItem value={'base_amount'}>
<MenuItem value={'base_price'}>
<div style={{ display: 'flex', alignItems: 'center', flexWrap: 'wrap' }}>
{t('Price')}
</div>
@ -306,7 +316,7 @@ const DepthChart: React.FC<DepthChartProps> = ({
</Grid>
<Grid item>
<Box justifyContent='center'>
{xType === 'base_amount'
{xType === 'base_price'
? `${center} ${String(currencyDict[currencyCode])}`
: `${String(center.toPrecision(3))}%`}
</Box>
@ -339,14 +349,14 @@ const DepthChart: React.FC<DepthChartProps> = ({
axisBottom={{
tickSize: 5,
tickRotation:
xType === 'base_amount' ? (width < 40 ? 45 : 0) : width < 25 ? 45 : 0,
xType === 'base_price' ? (width < 40 ? 45 : 0) : width < 25 ? 45 : 0,
format: formatAxisX,
}}
margin={{
left: 4.64 * em,
right: 0.714 * em,
bottom:
xType === 'base_amount'
xType === 'base_price'
? width < 40
? 2.7 * em
: 1.78 * em

View File

@ -84,7 +84,7 @@ const MapChart: React.FC<MapChartProps> = ({
</DialogActions>
</Dialog>
<Paper variant='outlined' style={{ width: '100%', height: '100%', justifyContent: 'center' }}>
{federation.book.length < 1 ? (
{Object.values(federation.book).length < 1 ? (
<div
style={{
display: 'flex',
@ -130,7 +130,11 @@ const MapChart: React.FC<MapChartProps> = ({
</Tooltip>
</Grid>
<div style={{ height: `${height - 3.1}em` }}>
<Map useTiles={useTiles} orders={federation.book} onOrderClicked={onOrderClicked} />
<Map
useTiles={useTiles}
orders={Object.values(federation.book)}
onOrderClicked={onOrderClicked}
/>
</div>
</>
)}

View File

@ -1,4 +1,4 @@
import React, { useContext, useState } from 'react';
import React, { useContext, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@ -68,6 +68,7 @@ import {
} from '../Icons';
import { AppContext } from '../../contexts/AppContext';
import { systemClient } from '../../services/System';
import type Coordinator from '../../models/Coordinator.model';
import { type Badges } from '../../models/Coordinator.model';
import { type UseFederationStoreType, FederationContext } from '../../contexts/FederationContext';
@ -348,18 +349,28 @@ const CoordinatorDialog = ({ open = false, onClose, shortAlias }: Props): JSX.El
const { t } = useTranslation();
const { clientVersion, page, settings, origin } = useContext(AppContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext);
const coordinator = federation.getCoordinator(shortAlias);
const [expanded, setExpanded] = useState<'summary' | 'stats' | 'policies' | undefined>(undefined);
const [coordinator, setCoordinator] = useState<Coordinator>(
federation.getCoordinator(shortAlias ?? ''),
);
const listItemProps = { sx: { maxHeight: '3em', width: '100%' } };
const coordinatorVersion = `v${coordinator?.info?.version?.major ?? '?'}.${
coordinator?.info?.version?.minor ?? '?'
}.${coordinator?.info?.version?.patch ?? '?'}`;
useEffect(() => {
setCoordinator(federation.getCoordinator(shortAlias ?? ''));
}, [shortAlias]);
useEffect(() => {
if (open) federation.getCoordinator(shortAlias ?? '')?.loadInfo();
}, [open]);
return (
<Dialog open={open} onClose={onClose}>
<DialogContent>
<DialogContent style={{ width: 600 }}>
<Typography align='center' component='h5' variant='h5'>
{String(coordinator?.longAlias)}
</Typography>
@ -483,7 +494,7 @@ const CoordinatorDialog = ({ open = false, onClose, shortAlias }: Props): JSX.El
</ListItemButton>
</List>
{coordinator?.loadingInfo ? (
{!coordinator || coordinator?.loadingInfo ? (
<Box style={{ display: 'flex', justifyContent: 'center' }}>
<CircularProgress />
</Box>

View File

@ -1,4 +1,4 @@
import React, { useContext, useEffect, useState } from 'react';
import React, { useContext } from 'react';
import { useTranslation } from 'react-i18next';
import {
@ -34,19 +34,12 @@ interface Props {
const ExchangeDialog = ({ open = false, onClose }: Props): JSX.Element => {
const { t } = useTranslation();
const { federation, federationUpdatedAt } = useContext(FederationContext);
const [loadingProgress, setLoadingProgress] = useState<number>(0);
useEffect(() => {
const loadedCoordinators =
federation.exchange.enabledCoordinators - federation.exchange.loadingCoordinators;
setLoadingProgress((loadedCoordinators / federation.exchange.enabledCoordinators) * 100);
}, [open, federationUpdatedAt]);
const { federation } = useContext(FederationContext);
return (
<Dialog open={open} onClose={onClose}>
<div style={loadingProgress < 100 ? {} : { display: 'none' }}>
<LinearProgress variant='determinate' value={loadingProgress} />
<div style={federation.loading ? {} : { display: 'none' }}>
<LinearProgress variant='indeterminate' />
</div>
<DialogContent>
<Typography component='h5' variant='h5'>

View File

@ -33,15 +33,13 @@ const ProfileDialog = ({ open = false, onClose }: Props): JSX.Element => {
const slot = garage.getSlot();
const [loading, setLoading] = useState<boolean>(true);
const [loadingCoordinators, setLoadingCoordinators] = useState<number>(
const [loadingRobots, setLoadingRobots] = useState<number>(
Object.values(slot?.robots ?? {}).length,
);
useEffect(() => {
setLoading(!garage.getSlot()?.hashId);
setLoadingCoordinators(
Object.values(slot?.robots ?? {}).filter((robot) => robot.loading).length,
);
setLoadingRobots(Object.values(slot?.robots ?? {}).filter((robot) => robot.loading).length);
}, [slotUpdatedAt]);
return (
@ -85,7 +83,7 @@ const ProfileDialog = ({ open = false, onClose }: Props): JSX.Element => {
)}
</Typography>
{loadingCoordinators > 0 ? (
{loadingRobots > 0 ? (
<>
<b>{t('Looking for your robot!')}</b>
<LinearProgress />

View File

@ -0,0 +1,86 @@
import React, { useContext, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Dialog, DialogContent, Typography, Button, Grid } from '@mui/material';
import TokenInput from '../../basic/RobotPage/TokenInput';
import Key from '@mui/icons-material/Key';
import { type UseAppStoreType, AppContext } from '../../contexts/AppContext';
import { type UseFederationStoreType, FederationContext } from '../../contexts/FederationContext';
import { type UseGarageStoreType, GarageContext } from '../../contexts/GarageContext';
interface Props {
setView: (state: 'welcome' | 'onboarding' | 'recovery' | 'profile') => void;
setInputToken: (inputToken: string) => void;
}
const RecoveryDialog = ({ setInputToken, setView }: Props): JSX.Element => {
const { t } = useTranslation();
const { open, setOpen } = useContext<UseAppStoreType>(AppContext);
const { garage } = useContext<UseGarageStoreType>(GarageContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext);
const [recoveryToken, setRecoveryToken] = useState<string>('');
const [validToken, setValidToken] = useState<boolean>(false);
useEffect(() => {
setRecoveryToken('');
}, [open.recovery]);
const onClickRecover = (): void => {
garage.createRobot(federation, recoveryToken);
setInputToken(recoveryToken.trim());
setView('profile');
setOpen((open) => {
return { ...open, recovery: false };
});
};
return (
<Dialog
open={open.recovery}
onClose={() => {
setOpen((open) => {
return { ...open, recovery: false };
});
}}
aria-labelledby='recovery-dialog-title'
aria-describedby='recovery-description'
>
<DialogContent>
<Grid container direction='column' alignItems='center' spacing={1} padding={2}>
<Grid item>
<Typography variant='h5' align='center'>
{t('Robot recovery')}
</Typography>
</Grid>
<Grid item>
<Typography align='center'>
{t('Enter your robot token to re-build your robot and gain access to its trades.')}
</Typography>
</Grid>
<Grid item>
<TokenInput
showCopy={false}
inputToken={recoveryToken}
setInputToken={setRecoveryToken}
label={t('Paste token here')}
onPressEnter={onClickRecover}
setValidToken={setValidToken}
/>
</Grid>
<Grid item>
<Button
variant='contained'
size='large'
disabled={!validToken}
onClick={onClickRecover}
>
<Key /> <div style={{ width: '0.5em' }} />
{t('Recover')}
</Button>
</Grid>
</Grid>
</DialogContent>
</Dialog>
);
};
export default RecoveryDialog;

View File

@ -52,7 +52,7 @@ const UpdateDialog = ({ coordinatorVersion, clientVersion }: Props): JSX.Element
<Typography>
{t(
'The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.',
'The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.',
{ coordinatorString, clientString },
)}
</Typography>
@ -69,8 +69,8 @@ const UpdateDialog = ({ coordinatorVersion, clientVersion }: Props): JSX.Element
</ListItemIcon>
<ListItemText
secondary={t('Download RoboSats {{coordinatorVersion}} APK from Github releases', {
coordinatorVersion,
secondary={t('Download RoboSats {{coordinatorString}} APK from Github releases', {
coordinatorString,
})}
primary={t('On Android RoboSats app ')}
/>

View File

@ -1,4 +1,4 @@
import React, { useCallback, useEffect, useState, useContext, useMemo } from 'react';
import React, { useCallback, useEffect, useState, useContext } from 'react';
import { useTranslation } from 'react-i18next';
import { Box, useTheme, Checkbox, CircularProgress, Typography, Grid } from '@mui/material';
import { DataGrid, type GridColDef, type GridValidRowModel } from '@mui/x-data-grid';
@ -21,9 +21,8 @@ const FederationTable = ({
fillContainer = false,
}: FederationTableProps): JSX.Element => {
const { t } = useTranslation();
const { federation, sortedCoordinators, federationUpdatedAt } =
useContext<UseFederationStoreType>(FederationContext);
const { setOpen, settings } = useContext<UseAppStoreType>(AppContext);
const { federation, federationUpdatedAt } = useContext<UseFederationStoreType>(FederationContext);
const { setOpen } = useContext<UseAppStoreType>(AppContext);
const theme = useTheme();
const [pageSize, setPageSize] = useState<number>(0);
@ -128,9 +127,9 @@ const FederationTable = ({
onClickCoordinator(params.row.shortAlias);
}}
>
{Boolean(params.row.loadingInfo) && Boolean(params.row.enabled) ? (
{Boolean(params.row.loadingLimits) && Boolean(params.row.enabled) ? (
<CircularProgress thickness={0.35 * fontSize} size={1.5 * fontSize} />
) : params.row.info !== undefined ? (
) : params.row.limits !== undefined ? (
<Link color='success' />
) : (
<LinkOff color='error' />
@ -214,14 +213,6 @@ const FederationTable = ({
}
};
const reorderedCoordinators = useMemo(() => {
return sortedCoordinators.reduce((coordinators, key) => {
coordinators[key] = federation.coordinators[key];
return coordinators;
}, {});
}, [settings.network, federationUpdatedAt]);
return (
<Box
sx={
@ -235,7 +226,7 @@ const FederationTable = ({
localeText={localeText}
rowHeight={3.714 * theme.typography.fontSize}
headerHeight={3.25 * theme.typography.fontSize}
rows={Object.values(reorderedCoordinators)}
rows={Object.values(federation.coordinators)}
getRowId={(params: Coordinator) => params.shortAlias}
columns={columns}
checkboxSelection={false}

View File

@ -4,8 +4,8 @@ import SelfhostedAlert from './SelfhostedAlert';
import UnsafeAlert from './UnsafeAlert';
const HostAlert = (): JSX.Element => {
const { settings } = useContext<UseAppStoreType>(AppContext);
const component = settings.selfhostedClient ? SelfhostedAlert : UnsafeAlert;
const { client } = useContext<UseAppStoreType>(AppContext);
const component = client === 'selfhosted' || client === 'desktop' ? SelfhostedAlert : UnsafeAlert;
return component();
};

View File

@ -502,7 +502,6 @@ const MakerForm = ({
(!makerHasAmountRange && maker.amount <= 0) ||
(maker.isExplicit && (maker.badSatoshisText !== '' || maker.satoshis === '')) ||
(!maker.isExplicit && maker.badPremiumText !== '') ||
federation.getCoordinator(maker.coordinator)?.info === undefined ||
federation.getCoordinator(maker.coordinator)?.limits === undefined
);
}, [maker, amountLimits, federationUpdatedAt, fav.type, makerHasAmountRange]);

View File

@ -26,7 +26,7 @@ const SelectCoordinator: React.FC<SelectCoordinatorProps> = ({
setCoordinator,
}) => {
const { setOpen } = useContext<UseAppStoreType>(AppContext);
const { federation, sortedCoordinators } = useContext<UseFederationStoreType>(FederationContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext);
const theme = useTheme();
const { t } = useTranslation();
@ -86,7 +86,7 @@ const SelectCoordinator: React.FC<SelectCoordinatorProps> = ({
flipHorizontally={false}
small={true}
/>
{(coordinator?.info === undefined ||
{(coordinator?.limits === undefined ||
Object.keys(coordinator?.limits).length === 0) && (
<CircularProgress
size={49}
@ -109,18 +109,20 @@ const SelectCoordinator: React.FC<SelectCoordinatorProps> = ({
onChange={handleCoordinatorChange}
disableUnderline
>
{sortedCoordinators.map((shortAlias: string): JSX.Element | null => {
let row: JSX.Element | null = null;
const item = federation.getCoordinator(shortAlias);
if (item.enabled === true) {
row = (
<MenuItem key={shortAlias} value={shortAlias}>
<Typography>{item.longAlias}</Typography>
</MenuItem>
);
}
return row;
})}
{Object.keys(federation.coordinators).map(
(shortAlias: string): JSX.Element | null => {
let row: JSX.Element | null = null;
const item = federation.getCoordinator(shortAlias);
if (item.enabled === true) {
row = (
<MenuItem key={shortAlias} value={shortAlias}>
<Typography>{item.longAlias}</Typography>
</MenuItem>
);
}
return row;
},
)}
</Select>
</Grid>
</Grid>

View File

@ -0,0 +1,49 @@
import React, { useContext, useEffect, useState } from 'react';
import { Box, CircularProgress, useTheme } from '@mui/material';
import { NotificationsActive, NotificationsOff } from '@mui/icons-material';
import { AppContext, type UseAppStoreType } from '../../contexts/AppContext';
import { systemClient } from '../../services/System';
const NotificationSwitchBadge = (): JSX.Element => {
const { setSettings, settings, torStatus } = useContext<UseAppStoreType>(AppContext);
const theme = useTheme();
const [stopNotifications, setStopNotifications] = useState<boolean>(settings.stopNotifications);
useEffect(() => {
setStopNotifications(settings.stopNotifications);
}, [settings.stopNotifications]);
const onClick = (): void => {
if (torStatus === 'ON' || !settings.useProxy) {
setSettings({ ...settings, stopNotifications: !settings.stopNotifications });
systemClient.setItem('settings_stop_notifications', String(!settings.stopNotifications));
}
};
const style = {
width: 20,
height: 20,
color: stopNotifications ? theme.palette.secondary.main : theme.palette.primary.main,
};
return (
<Box sx={{ display: 'inline-flex', position: 'fixed', right: '0.5em', top: '0.5em' }}>
<Box>
{torStatus === 'ON' || !settings.useProxy ? (
<>
{stopNotifications ? (
<NotificationsOff sx={style} onClick={onClick} />
) : (
<NotificationsActive sx={style} onClick={onClick} />
)}
</>
) : (
<CircularProgress thickness={6} size={22} />
)}
</Box>
</Box>
);
};
export default NotificationSwitchBadge;

View File

@ -181,7 +181,7 @@ const OrderDetails = ({
const rate = Number(order.max_amount ?? order.amount) / btc_now;
if (isBuyer) {
if (order.amount > 0) {
if (order.amount && order.amount > 0) {
sats = computeSats({
amount: order.amount,
fee: -tradeFee,
@ -211,7 +211,7 @@ const OrderDetails = ({
amount: sats,
});
} else {
if (order.amount > 0) {
if (order.amount && order.amount > 0) {
sats = computeSats({
amount: order.amount,
fee: tradeFee,

View File

@ -46,7 +46,7 @@ const RobotAvatar: React.FC<Props> = ({
}) => {
const [avatarSrc, setAvatarSrc] = useState<string>('');
const [activeBackground, setActiveBackground] = useState<boolean>(true);
const { hostUrl } = useContext<UseAppStoreType>(AppContext);
const { hostUrl, client } = useContext<UseAppStoreType>(AppContext);
const backgroundFadeTime = 3000;
const [backgroundData] = useState<BackgroundData>(placeholder.loading);
@ -71,7 +71,7 @@ const RobotAvatar: React.FC<Props> = ({
useEffect(() => {
if (shortAlias && shortAlias !== '') {
if (!window.NativeRobosats) {
if (client !== 'mobile') {
setAvatarSrc(
`${hostUrl}/static/federation/avatars/${shortAlias}${small ? '.small' : ''}.webp`,
);

View File

@ -23,13 +23,11 @@ import {
DarkMode,
SettingsOverscan,
Link,
AccountBalance,
AttachMoney,
QrCode,
SettingsInputAntenna,
} from '@mui/icons-material';
import { systemClient } from '../../services/System';
import { TorIcon } from '../Icons';
import SwapCalls from '@mui/icons-material/SwapCalls';
import { apiClient } from '../../services/api';
interface SettingsFormProps {
@ -37,7 +35,7 @@ interface SettingsFormProps {
}
const SettingsForm = ({ dense = false }: SettingsFormProps): JSX.Element => {
const { fav, setFav, settings, setSettings } = useContext<UseAppStoreType>(AppContext);
const { settings, setSettings, client } = useContext<UseAppStoreType>(AppContext);
const theme = useTheme();
const { t } = useTranslation();
const fontSizes = [
@ -49,8 +47,8 @@ const SettingsForm = ({ dense = false }: SettingsFormProps): JSX.Element => {
];
return (
<Grid container spacing={1}>
<Grid item>
<Grid container spacing={2}>
<Grid item xs={12}>
<List dense={dense}>
<ListItem>
<ListItemIcon>
@ -196,22 +194,22 @@ const SettingsForm = ({ dense = false }: SettingsFormProps): JSX.Element => {
<ListItem>
<ListItemIcon>
<AccountBalance />
<SettingsInputAntenna />
</ListItemIcon>
<ToggleButtonGroup
sx={{ width: '100%' }}
exclusive={true}
value={fav.mode}
onChange={(e, mode) => {
setFav({ ...fav, mode, currency: mode === 'fiat' ? 0 : 1000 });
value={settings.connection}
onChange={(_e, connection) => {
setSettings({ ...settings, connection });
systemClient.setItem('settings_connection', connection);
}}
>
<ToggleButton value='fiat' color='primary'>
<AttachMoney />
{t('Fiat')}
<ToggleButton value='api' color='primary' sx={{ flexGrow: 1 }}>
{t('API')}
</ToggleButton>
<ToggleButton value='swap' color='secondary'>
<SwapCalls />
{t('Swaps')}
<ToggleButton value='nostr' color='secondary' sx={{ flexGrow: 1 }}>
{t('nostr')}
</ToggleButton>
</ToggleButtonGroup>
</ListItem>
@ -221,23 +219,24 @@ const SettingsForm = ({ dense = false }: SettingsFormProps): JSX.Element => {
<Link />
</ListItemIcon>
<ToggleButtonGroup
sx={{ width: '100%' }}
exclusive={true}
value={settings.network}
onChange={(e, network) => {
onChange={(_e, network) => {
setSettings({ ...settings, network });
systemClient.setItem('settings_network', network);
}}
>
<ToggleButton value='mainnet' color='primary'>
<ToggleButton value='mainnet' color='primary' sx={{ flexGrow: 1 }}>
{t('Mainnet')}
</ToggleButton>
<ToggleButton value='testnet' color='secondary'>
<ToggleButton value='testnet' color='secondary' sx={{ flexGrow: 1 }}>
{t('Testnet')}
</ToggleButton>
</ToggleButtonGroup>
</ListItem>
{window.NativeRobosats !== undefined && (
{client === 'mobile' && (
<ListItem>
<ListItemIcon>
<TorIcon />

View File

@ -1,97 +0,0 @@
import React, { useContext } from 'react';
import { Box, CircularProgress, Tooltip } from '@mui/material';
import { TorIcon } from './Icons';
import { useTranslation } from 'react-i18next';
import { AppContext, type UseAppStoreType } from '../contexts/AppContext';
interface TorIndicatorProps {
color: 'inherit' | 'error' | 'warning' | 'success' | 'primary' | 'secondary' | 'info' | undefined;
tooltipOpen?: boolean | undefined;
title: string;
progress: boolean;
}
const TorIndicator = ({
color,
tooltipOpen = undefined,
title,
progress,
}: TorIndicatorProps): JSX.Element => {
return (
<Tooltip
open={tooltipOpen}
enterTouchDelay={0}
enterDelay={1000}
placement='right'
title={title}
>
<Box sx={{ display: 'inline-flex', position: 'fixed', left: '0.5em', top: '0.5em' }}>
{progress ? (
<>
<CircularProgress color={color} thickness={6} size={22} />
<Box
sx={{
top: 0,
left: 0,
bottom: 0,
right: 0,
position: 'absolute',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}}
>
<TorIcon color={color} sx={{ width: 20, height: 20 }} />
</Box>
</>
) : (
<Box>
<TorIcon color={color} sx={{ width: 20, height: 20 }} />
</Box>
)}
</Box>
</Tooltip>
);
};
const TorConnectionBadge = (): JSX.Element => {
const { torStatus, settings } = useContext<UseAppStoreType>(AppContext);
const { t } = useTranslation();
if (window?.NativeRobosats == null || !settings.useProxy) {
return <></>;
}
if (torStatus === 'OFF' || torStatus === 'STOPPING') {
return (
<TorIndicator
color='primary'
progress={true}
tooltipOpen={true}
title={t('Initializing TOR daemon')}
/>
);
} else if (torStatus === 'STARTING') {
return (
<TorIndicator
color='warning'
progress={true}
tooltipOpen={true}
title={t('Connecting to TOR network')}
/>
);
} else if (torStatus === 'ON') {
return <TorIndicator color='success' progress={false} title={t('Connected to TOR network')} />;
} else {
return (
<TorIndicator
color='error'
progress={false}
tooltipOpen={true}
title={t('Connection error')}
/>
);
}
};
export default TorConnectionBadge;

View File

@ -2,7 +2,7 @@ import React, { useContext } from 'react';
import { Box, CircularProgress, Tooltip } from '@mui/material';
import { TorIcon } from '../Icons';
import { useTranslation } from 'react-i18next';
import { AppContext, type AppContextProps } from '../contexts/AppContext';
import { AppContext, type UseAppStoreType } from '../../contexts/AppContext';
interface TorIndicatorProps {
color: 'inherit' | 'error' | 'warning' | 'success' | 'primary' | 'secondary' | 'info' | undefined;
@ -55,14 +55,14 @@ const TorIndicator = ({
};
const TorConnectionBadge = (): JSX.Element => {
const { torStatus } = useContext<AppContextProps>(AppContext);
const { torStatus, settings } = useContext<UseAppStoreType>(AppContext);
const { t } = useTranslation();
if (window?.NativeRobosats == null) {
if (!settings.useProxy) {
return <></>;
}
if (torStatus === 'OFF' || torStatus === 'STOPING') {
if (torStatus === 'OFF' || torStatus === 'STOPPING') {
return (
<TorIndicator
color='primary'

View File

@ -98,7 +98,7 @@ const EncryptedTurtleChat: React.FC<Props> = ({
.getEndpoint(settings.network, origin, settings.selfhostedClient, hostUrl);
apiClient
.get(url + basePath, `/api/chat/?order_id=${order.id}&offset=${lastIndex}`, {
tokenSHA256: garage.getSlot()?.tokenSHA256 ?? '',
tokenSHA256: garage.getSlot()?.getRobot()?.tokenSHA256 ?? '',
})
.then((results: any) => {
if (results != null) {
@ -127,7 +127,7 @@ const EncryptedTurtleChat: React.FC<Props> = ({
const onMessage = (dataFromServer: ServerMessage): void => {
const slot = garage.getSlot();
const robot = slot?.getRobot();
if (robot && dataFromServer != null) {
if (slot && robot && dataFromServer != null) {
// If we receive an encrypted message
if (dataFromServer.message.substring(0, 27) === `-----BEGIN PGP MESSAGE-----`) {
void decryptMessage(
@ -196,7 +196,7 @@ const EncryptedTurtleChat: React.FC<Props> = ({
// If input string contains '#' send unencrypted and unlogged message
else if (value.substring(0, 1) === '#') {
const { url, basePath } = federation
.getCoordinator(garage.getSlot()?.activeOrder?.shortAlias)
.getCoordinator(garage.getSlot()?.activeOrder?.shortAlias ?? '')
.getEndpoint(settings.network, origin, settings.selfhostedClient, hostUrl);
apiClient
.post(

View File

@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react';
import React, { useContext, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
Box,
@ -33,6 +33,7 @@ import { apiClient } from '../../../services/api';
import { systemClient } from '../../../services/System';
import lnproxies from '../../../../static/lnproxies.json';
import { type UseAppStoreType, AppContext } from '../../../contexts/AppContext';
let filteredProxies: Array<Record<string, any>> = [];
export interface LightningForm {
invoice: string;
@ -89,6 +90,7 @@ export const LightningPayoutForm = ({
setLightning,
settings,
}: LightningPayoutFormProps): JSX.Element => {
const { client } = useContext<UseAppStoreType>(AppContext);
const { t } = useTranslation();
const theme = useTheme();
@ -153,7 +155,7 @@ export const LightningPayoutForm = ({
bitcoinNetwork = settings?.network ?? 'mainnet';
if (settings.host?.includes('.i2p') === true) {
internetNetwork = 'I2P';
} else if (settings.host?.includes('.onion') === true || window.NativeRobosats !== undefined) {
} else if (settings.host?.includes('.onion') === true || client === 'mobile') {
internetNetwork = 'TOR';
}

View File

@ -101,7 +101,7 @@ export const LockInvoicePrompt = ({ order, concept }: LockInvoicePromptProps): J
<QRCode
bgColor={'rgba(255, 255, 255, 0)'}
fgColor={settings.lightQRs ? '#000000' : theme.palette.text.primary}
value={invoice ?? 'Undefined: BOLT11 invoice not received'}
value={invoice?.toUpperCase() ?? 'Undefined: BOLT11 invoice not received'}
size={theme.typography.fontSize * 21.8}
onClick={handleClickQR}
/>

View File

@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useContext, useState } from 'react';
import { format } from 'date-fns';
import { useTranslation } from 'react-i18next';
import {
@ -37,6 +37,7 @@ import {
} from '../Icons';
import { type TradeCoordinatorSummary, type TradeRobotSummary } from '../../models/Order.model';
import { systemClient } from '../../services/System';
import { type UseAppStoreType, AppContext } from '../../contexts/AppContext';
interface Props {
isMaker: boolean;
@ -61,6 +62,7 @@ const TradeSummary = ({
platformSummary,
orderId,
}: Props): JSX.Element => {
const { client } = useContext<UseAppStoreType>(AppContext);
const { t } = useTranslation();
const theme = useTheme();
@ -81,7 +83,7 @@ const TradeSummary = ({
taker: takerSummary,
platform: platformSummary,
};
if (window.NativeRobosats === undefined) {
if (client !== 'mobile') {
saveAsJson(`order${orderId}-summary.json`, summary);
} else {
systemClient.copyToClipboard(JSON.stringify(summary));

View File

@ -40,13 +40,12 @@ export interface SlideDirection {
export type TorStatus = 'ON' | 'STARTING' | 'STOPPING' | 'OFF';
export const isNativeRoboSats = !(window.NativeRobosats === undefined);
export const isDesktopRoboSats = !(window.RobosatsClient === undefined);
const pageFromPath = window.location.pathname.split('/')[1];
const isPagePathEmpty = pageFromPath === '';
const entryPage: Page = !isNativeRoboSats
? ((isPagePathEmpty ? 'robot' : pageFromPath) as Page)
: 'robot';
? ((isPagePathEmpty ? 'garage' : pageFromPath) as Page)
: 'garage';
export const closeAll: OpenDialogs = {
more: false,
@ -59,6 +58,7 @@ export const closeAll: OpenDialogs = {
client: false,
update: false,
profile: false,
recovery: false,
};
const makeTheme = function (settings: Settings): Theme {
@ -76,13 +76,14 @@ const makeTheme = function (settings: Settings): Theme {
};
const getHostUrl = (network = 'mainnet'): string => {
const [client] = window.RobosatsSettings.split('-');
const randomAlias =
Object.keys(defaultFederation)[
Math.floor(Math.random() * Object.keys(defaultFederation).length)
];
let host = defaultFederation[randomAlias][network].onion;
let protocol = 'http:';
if (window.NativeRobosats === undefined) {
let host: string = defaultFederation[randomAlias][network].onion;
let protocol: string = 'http:';
if (client !== 'mobile') {
host = getHost();
protocol = location.protocol;
}
@ -93,8 +94,9 @@ const getHostUrl = (network = 'mainnet'): string => {
const getOrigin = (network = 'mainnet'): Origin => {
const host = getHostUrl(network);
let origin: Origin = 'onion';
const [client] = window.RobosatsSettings.split('-');
if (window.NativeRobosats !== undefined || host.includes('.onion')) {
if (client === 'mobile' || client === 'desktop' || host.includes('.onion')) {
origin = 'onion';
} else if (host.includes('i2p')) {
origin = 'i2p';
@ -106,13 +108,13 @@ const getOrigin = (network = 'mainnet'): Origin => {
};
const getSettings = (): Settings => {
let settings = new Settings();
if (window.RobosatsSettings === 'selfhosted-basic') {
settings = new SettingsSelfhosted();
} else if (window.RobosatsSettings === 'selfhosted-pro') {
settings = new SettingsSelfhostedPro();
} else if (window.RobosatsSettings === 'web-pro') {
settings = new SettingsPro();
let settings;
const [client, view] = window.RobosatsSettings.split('-');
if (client === 'selfhosted') {
settings = view === 'pro' ? new SettingsSelfhostedPro() : new SettingsSelfhosted();
} else {
settings = view === 'pro' ? new SettingsPro() : new Settings();
}
return settings;
@ -152,6 +154,8 @@ export interface UseAppStoreType {
fav: Favorites;
setFav: Dispatch<SetStateAction<Favorites>>;
worldmap?: GeoJsonObject;
client: 'mobile' | 'web' | 'desktop' | string;
view: 'basic' | 'pro' | string;
}
export const initialAppContext: UseAppStoreType = {
@ -178,6 +182,8 @@ export const initialAppContext: UseAppStoreType = {
fav: { type: null, currency: 0, mode: 'fiat', coordinator: 'any' },
setFav: () => {},
worldmap: undefined,
client: 'web',
view: 'basic',
};
export const AppContext = createContext<UseAppStoreType>(initialAppContext);
@ -191,6 +197,7 @@ export const AppContextProvider = ({ children }: AppContextProviderProps): JSX.E
const clientVersion = initialAppContext.clientVersion;
const hostUrl = initialAppContext.hostUrl;
const origin = initialAppContext.origin;
const [client, view] = window.RobosatsSettings.split('-');
const [settings, setSettings] = useState<Settings>(getSettings());
const [theme, setTheme] = useState<Theme>(() => {
@ -217,9 +224,6 @@ export const AppContextProvider = ({ children }: AppContextProviderProps): JSX.E
useEffect(() => {
void i18n.changeLanguage(settings.language);
}, []);
useEffect(() => {
window.addEventListener('torStatus', (event) => {
// Trick to improve UX on Android webview: delay the "Connected to TOR" status by 5 secs to avoid long waits on the first request.
setTimeout(
@ -286,6 +290,8 @@ export const AppContextProvider = ({ children }: AppContextProviderProps): JSX.E
fav,
setFav,
worldmap,
client,
view,
}}
>
<ThemeProvider theme={theme}>{children}</ThemeProvider>

View File

@ -1,12 +1,4 @@
import React, {
createContext,
type Dispatch,
useEffect,
useState,
type SetStateAction,
useContext,
type ReactNode,
} from 'react';
import React, { createContext, useEffect, useState, useContext, type ReactNode } from 'react';
import { Federation, Settings } from '../models';
@ -14,6 +6,7 @@ import { federationLottery } from '../utils';
import { AppContext, type UseAppStoreType } from './AppContext';
import { GarageContext, type UseGarageStoreType } from './GarageContext';
import type Coordinator from '../models/Coordinator.model';
import { type Origin, type Origins } from '../models/Coordinator.model';
export interface CurrentOrderIdProps {
@ -27,7 +20,6 @@ export interface FederationContextProviderProps {
export interface UseFederationStoreType {
federation: Federation;
sortedCoordinators: string[];
coordinatorUpdatedAt: string;
federationUpdatedAt: string;
addNewCoordinator: (alias: string, url: string) => void;
@ -35,7 +27,6 @@ export interface UseFederationStoreType {
export const initialFederationContext: UseFederationStoreType = {
federation: new Federation('onion', new Settings(), ''),
sortedCoordinators: [],
coordinatorUpdatedAt: '',
federationUpdatedAt: '',
addNewCoordinator: () => {},
@ -46,11 +37,10 @@ export const FederationContext = createContext<UseFederationStoreType>(initialFe
export const FederationContextProvider = ({
children,
}: FederationContextProviderProps): JSX.Element => {
const { settings, page, origin, hostUrl, open, torStatus } =
const { settings, page, origin, hostUrl, open, torStatus, client } =
useContext<UseAppStoreType>(AppContext);
const { setMaker, garage } = useContext<UseGarageStoreType>(GarageContext);
const [federation] = useState(new Federation(origin, settings, hostUrl));
const [sortedCoordinators, setSortedCoordinators] = useState(federationLottery(federation));
const [coordinatorUpdatedAt, setCoordinatorUpdatedAt] = useState<string>(
new Date().toISOString(),
);
@ -58,7 +48,7 @@ export const FederationContextProvider = ({
useEffect(() => {
setMaker((maker) => {
return { ...maker, coordinator: sortedCoordinators[0] };
return { ...maker, coordinator: Object.keys(federation.coordinators)[0] };
}); // default MakerForm coordinator is decided via sorted lottery
federation.registerHook('onFederationUpdate', () => {
setFederationUpdatedAt(new Date().toISOString());
@ -66,12 +56,16 @@ export const FederationContextProvider = ({
}, []);
useEffect(() => {
if (window.NativeRobosats === undefined || torStatus === 'ON' || !settings.useProxy) {
if (client !== 'mobile' || torStatus === 'ON' || !settings.useProxy) {
void federation.updateUrl(origin, settings, hostUrl);
void federation.update();
void federation.loadLimits();
}
}, [settings.network, settings.useProxy, torStatus]);
useEffect(() => {
federation.setConnection(settings);
}, [settings.connection]);
const addNewCoordinator: (alias: string, url: string) => void = (alias, url) => {
if (!federation.coordinators[alias]) {
const attributes: Record<any, any> = {
@ -91,8 +85,8 @@ export const FederationContextProvider = ({
attributes.testnet = origins;
}
federation.addCoordinator(origin, settings, hostUrl, attributes);
const newCoordinator = federation.coordinators[alias];
newCoordinator.update(() => {
const newCoordinator: Coordinator = federation.coordinators[alias];
newCoordinator.loadLimits(() => {
setCoordinatorUpdatedAt(new Date().toISOString());
});
garage.syncCoordinator(federation, alias);
@ -102,7 +96,7 @@ export const FederationContextProvider = ({
};
useEffect(() => {
if (page === 'offers') void federation.updateBook();
if (page === 'offers') void federation.loadBook();
}, [page]);
// use effects to fetchRobots on Profile open
@ -118,7 +112,6 @@ export const FederationContextProvider = ({
<FederationContext.Provider
value={{
federation,
sortedCoordinators,
coordinatorUpdatedAt,
federationUpdatedAt,
addNewCoordinator,

View File

@ -64,9 +64,9 @@ export const GarageContext = createContext<UseGarageStoreType>(initialGarageCont
export const GarageContextProvider = ({ children }: GarageContextProviderProps): JSX.Element => {
// All garage data structured
const { settings, torStatus, open, page } = useContext<UseAppStoreType>(AppContext);
const { settings, torStatus, open, page, client } = useContext<UseAppStoreType>(AppContext);
const pageRef = useRef(page);
const { federation, sortedCoordinators } = useContext<UseFederationStoreType>(FederationContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext);
const [garage] = useState<Garage>(initialGarageContext.garage);
const [maker, setMaker] = useState<Maker>(initialGarageContext.maker);
const [slotUpdatedAt, setSlotUpdatedAt] = useState<string>(new Date().toISOString());
@ -83,24 +83,26 @@ export const GarageContextProvider = ({ children }: GarageContextProviderProps):
useEffect(() => {
setMaker((maker) => {
return { ...maker, coordinator: sortedCoordinators[0] };
return { ...maker, coordinator: Object.keys(federation.coordinators)[0] };
}); // default MakerForm coordinator is decided via sorted lottery
garage.registerHook('onSlotUpdate', onSlotUpdated);
clearInterval(timer);
fetchSlotActiveOrder();
return () => clearTimeout(timer);
return () => {
clearTimeout(timer);
};
}, []);
useEffect(() => {
if (window.NativeRobosats === undefined || torStatus === 'ON' || !settings.useProxy) {
if (client !== 'mobile' || torStatus === 'ON' || !settings.useProxy) {
const token = garage.getSlot()?.token;
if (token) void garage.fetchRobot(federation, token);
}
}, [settings.network, settings.useProxy, torStatus]);
useEffect(() => {
if (window.NativeRobosats !== undefined && !systemClient.loading) {
if (client === 'mobile' && !systemClient.loading) {
garage.loadSlots();
}
}, [systemClient.loading]);
@ -142,7 +144,11 @@ export const GarageContextProvider = ({ children }: GarageContextProviderProps):
const resetInterval = (): void => {
clearInterval(timer);
setDelay(defaultDelay);
setTimer(setTimeout(() => fetchSlotActiveOrder(), defaultDelay));
setTimer(
setTimeout(() => {
fetchSlotActiveOrder();
}, defaultDelay),
);
};
return (

View File

@ -3,26 +3,26 @@ export interface PublicOrder {
created_at: Date;
expires_at: Date;
type: number;
currency: number;
currency: number | null;
amount: string;
base_amount?: number;
base_price?: number;
has_range: boolean;
min_amount: number;
max_amount: number;
min_amount: string | null;
max_amount: string | null;
payment_method: string;
is_explicit: false;
premium: number;
satoshis: number;
satoshis_now: number;
latitude: number;
longitude: number;
bond_size: number;
maker: number;
premium: string;
satoshis: number | null;
satoshis_now: number | null;
latitude: number | null;
longitude: number | null;
bond_size: string;
maker: number | null;
escrow_duration: number;
maker_nick: string;
maker_hash_id: string;
price: number;
maker_status: 'Active' | 'Seen recently' | 'Inactive';
price: number | null;
maker_status?: 'Active' | 'Seen recently' | 'Inactive';
coordinatorShortAlias?: string;
}

View File

@ -126,7 +126,7 @@ export class Coordinator {
this.longAlias = value.longAlias;
this.shortAlias = value.shortAlias;
this.description = value.description;
this.federated = value.federated;
this.federated = value.federated ?? false;
this.motto = value.motto;
this.color = value.color;
this.size_limit = value.badges.isFounder ? 21 * 100000000 : calculateSizeLimit(established);
@ -165,7 +165,7 @@ export class Coordinator {
public basePath: string;
// These properties are fetched from coordinator API
public book: PublicOrder[] = [];
public book: Record<string, PublicOrder> = {};
public loadingBook: boolean = false;
public info?: Info | undefined = undefined;
public loadingInfo: boolean = false;
@ -182,24 +182,8 @@ export class Coordinator {
}
};
update = async (onUpdate: (shortAlias: string) => void = () => {}): Promise<void> => {
const onDataLoad = (): void => {
if (this.isUpdated()) onUpdate(this.shortAlias);
};
this.loadBook(onDataLoad);
this.loadLimits(onDataLoad);
this.loadInfo(onDataLoad);
};
updateBook = async (onUpdate: (shortAlias: string) => void = () => {}): Promise<void> => {
this.loadBook(() => {
onUpdate(this.shortAlias);
});
};
generateAllMakerAvatars = async (data: [PublicOrder]): Promise<void> => {
for (const order of data) {
generateAllMakerAvatars = async (): Promise<void> => {
for (const order of Object.values(this.book)) {
void roboidentitiesClient.generateRobohash(order.maker_hash_id, 'small');
}
};
@ -210,20 +194,19 @@ export class Coordinator {
if (this.loadingBook) return;
this.loadingBook = true;
this.book = [];
this.book = {};
apiClient
.get(this.url, `${this.basePath}/api/book/`)
.then((data) => {
if (!data?.not_found) {
this.book = (data as PublicOrder[]).map((order) => {
this.book = (data as PublicOrder[]).reduce<Record<string, PublicOrder>>((book, order) => {
order.coordinatorShortAlias = this.shortAlias;
return order;
});
void this.generateAllMakerAvatars(data);
return { ...book, [`${this.shortAlias}${order.id}`]: order };
}, {});
void this.generateAllMakerAvatars();
onDataLoad();
} else {
this.book = [];
onDataLoad();
}
})
@ -289,7 +272,7 @@ export class Coordinator {
enable = (onEnabled: () => void = () => {}): void => {
this.enabled = true;
void this.update(() => {
this.loadLimits(() => {
onEnabled();
});
};
@ -298,11 +281,7 @@ export class Coordinator {
this.enabled = false;
this.info = undefined;
this.limits = {};
this.book = [];
};
isUpdated = (): boolean => {
return !((this.loadingBook === this.loadingInfo) === this.loadingLimits);
this.book = {};
};
getBaseUrl = (): string => {

View File

@ -36,20 +36,18 @@ export const updateExchangeInfo = (federation: Federation): ExchangeInfo => {
'lifetime_volume',
];
Object.values(federation.coordinators)
.filter((coor) => coor.isUpdated())
.forEach((coordinator, index) => {
if (coordinator.info !== undefined) {
premiums[index] = coordinator.info.last_day_nonkyc_btc_premium;
volumes[index] = coordinator.info.last_day_volume;
highestVersion = getHigherVer(highestVersion, coordinator.info.version);
active_robots_today = Math.max(active_robots_today, coordinator.info.active_robots_today);
Object.values(federation.coordinators).forEach((coordinator, index) => {
if (coordinator.info !== undefined) {
premiums[index] = coordinator.info.last_day_nonkyc_btc_premium;
volumes[index] = coordinator.info.last_day_volume;
highestVersion = getHigherVer(highestVersion, coordinator.info.version);
active_robots_today = Math.max(active_robots_today, coordinator.info.active_robots_today);
aggregations.forEach((key: any) => {
info[key] = Number(info[key]) + Number(coordinator.info[key]);
});
}
});
aggregations.forEach((key: any) => {
info[key] = Number(info[key]) + Number(coordinator.info[key]);
});
}
});
info.last_day_nonkyc_btc_premium = weightedMean(premiums, volumes);
info.version = highestVersion;
@ -63,6 +61,7 @@ export interface Exchange {
enabledCoordinators: number;
onlineCoordinators: number;
loadingCoordinators: number;
loadingCache: number;
totalCoordinators: number;
}
@ -80,6 +79,7 @@ export const defaultExchange: Exchange = {
enabledCoordinators: 0,
onlineCoordinators: 0,
loadingCoordinators: 0,
loadingCache: 0,
totalCoordinators: 0,
};

View File

@ -8,40 +8,48 @@ import {
} from '.';
import defaultFederation from '../../static/federation.json';
import { systemClient } from '../services/System';
import { getHost } from '../utils';
import { federationLottery, getHost } from '../utils';
import { coordinatorDefaultValues } from './Coordinator.model';
import { updateExchangeInfo } from './Exchange.model';
import eventToPublicOrder from '../utils/nostr';
import RoboPool from '../services/RoboPool';
type FederationHooks = 'onFederationUpdate';
export class Federation {
constructor(origin: Origin, settings: Settings, hostUrl: string) {
this.coordinators = Object.entries(defaultFederation).reduce(
const coordinators = Object.entries(defaultFederation).reduce(
(acc: Record<string, Coordinator>, [key, value]: [string, any]) => {
if (getHost() !== '127.0.0.1:8000' && key === 'local') {
// Do not add `Local Dev` unless it is running on localhost
return acc;
} else {
acc[key] = new Coordinator(value, origin, settings, hostUrl);
acc[key].federated = true;
return acc;
}
},
{},
);
this.coordinators = {};
federationLottery().forEach((alias) => {
if (coordinators[alias]) this.coordinators[alias] = coordinators[alias];
});
this.exchange = {
...defaultExchange,
totalCoordinators: Object.keys(this.coordinators).length,
};
this.book = [];
this.book = {};
this.hooks = {
onFederationUpdate: [],
};
Object.keys(defaultFederation).forEach((key) => {
Object.keys(this.coordinators).forEach((key) => {
if (key !== 'local' || getHost() === '127.0.0.1:8000') {
// Do not add `Local Dev` unless it is running on localhost
this.addCoordinator(origin, settings, hostUrl, defaultFederation[key]);
this.addCoordinator(origin, settings, hostUrl, this.coordinators[key]);
}
});
@ -55,15 +63,57 @@ export class Federation {
return Object.values(coor.testnet).includes(url);
});
if (tesnetHost) settings.network = 'testnet';
this.connection = null;
this.roboPool = new RoboPool(settings, origin);
}
public coordinators: Record<string, Coordinator>;
public exchange: Exchange;
public book: PublicOrder[];
public book: Record<string, PublicOrder | undefined>;
public loading: boolean;
public connection: 'api' | 'nostr' | null;
public hooks: Record<FederationHooks, Array<() => void>>;
public roboPool: RoboPool;
setConnection = (settings: Settings): void => {
this.connection = settings.connection;
if (this.connection === 'nostr') {
this.roboPool.connect();
this.loadBookNostr();
} else {
this.roboPool.close();
void this.loadBook();
}
};
loadBookNostr = (): void => {
this.loading = true;
this.book = {};
this.exchange.loadingCache = this.roboPool.relays.length;
this.roboPool.subscribeBook({
onevent: (event) => {
const { dTag, publicOrder } = eventToPublicOrder(event);
if (publicOrder) {
this.book[dTag] = publicOrder;
} else {
this.book[dTag] = undefined;
}
},
oneose: () => {
this.exchange.loadingCache = this.exchange.loadingCache - 1;
this.loading = this.exchange.loadingCache > 0 && this.exchange.loadingCoordinators > 0;
this.updateExchange();
this.triggerHook('onFederationUpdate');
},
});
};
addCoordinator = (
origin: Origin,
settings: Settings,
@ -92,12 +142,17 @@ export class Federation {
};
onCoordinatorSaved = (): void => {
this.book = Object.values(this.coordinators).reduce<PublicOrder[]>((array, coordinator) => {
return [...array, ...coordinator.book];
}, []);
if (this.connection === 'api') {
this.book = Object.values(this.coordinators).reduce<Record<string, PublicOrder>>(
(book, coordinator) => {
return { ...book, ...coordinator.book };
},
{},
);
}
this.exchange.loadingCoordinators =
this.exchange.loadingCoordinators < 1 ? 0 : this.exchange.loadingCoordinators - 1;
this.loading = this.exchange.loadingCoordinators > 0;
this.loading = this.exchange.loadingCache > 0 && this.exchange.loadingCoordinators > 0;
this.updateExchange();
this.triggerHook('onFederationUpdate');
};
@ -111,8 +166,7 @@ export class Federation {
systemClient.setCookie('federation', JSON.stringify(federationUrls));
};
update = async (): Promise<void> => {
this.loading = true;
loadInfo = async (): Promise<void> => {
this.exchange.info = {
num_public_buy_orders: 0,
num_public_sell_orders: 0,
@ -123,24 +177,38 @@ export class Federation {
lifetime_volume: 0,
version: { major: 0, minor: 0, patch: 0 },
};
this.updateEnabledCoordinators();
for (const coor of Object.values(this.coordinators)) {
coor.loadInfo(() => {
this.onCoordinatorSaved();
});
}
};
loadLimits = async (): Promise<void> => {
this.loading = true;
this.exchange.onlineCoordinators = 0;
this.exchange.loadingCoordinators = Object.keys(this.coordinators).length;
this.updateEnabledCoordinators();
for (const coor of Object.values(this.coordinators)) {
void coor.update(() => {
coor.loadLimits(() => {
this.exchange.onlineCoordinators = this.exchange.onlineCoordinators + 1;
this.onCoordinatorSaved();
});
}
};
updateBook = async (): Promise<void> => {
loadBook = async (): Promise<void> => {
if (this.connection !== 'api') return;
this.loading = true;
this.book = [];
this.book = {};
this.triggerHook('onFederationUpdate');
this.exchange.loadingCoordinators = Object.keys(this.coordinators).length;
for (const coor of Object.values(this.coordinators)) {
void coor.updateBook(() => {
coor.loadBook(() => {
this.onCoordinatorSaved();
this.triggerHook('onFederationUpdate');
});

View File

@ -1,4 +1,5 @@
import { type Federation, Order } from '.';
import { genKey } from '../pgp';
import { systemClient } from '../services/System';
import { saveAsJson } from '../utils';
import Slot from './Slot.model';
@ -55,13 +56,17 @@ class Garage {
const slotsDump: string = systemClient.getItem('garage_slots') ?? '';
if (slotsDump !== '') {
const rawSlots = JSON.parse(slotsDump);
const rawSlots: Record<any, any> = JSON.parse(slotsDump);
Object.values(rawSlots).forEach((rawSlot: Record<any, any>) => {
if (rawSlot?.token) {
const robotAttributes = Object.values(rawSlot.robots)[0] as Record<any, any>;
this.slots[rawSlot.token] = new Slot(
rawSlot.token,
Object.keys(rawSlot.robots),
{},
{
pubKey: robotAttributes?.pubKey,
encPrivKey: robotAttributes?.encPrivKey,
},
() => {
this.triggerHook('onSlotUpdate');
},
@ -86,7 +91,7 @@ class Garage {
const targetIndex = token ?? this.currentSlot;
if (targetIndex) {
Reflect.deleteProperty(this.slots, targetIndex);
this.currentSlot = null;
this.currentSlot = Object.keys(this.slots)[0] ?? null;
this.save();
this.triggerHook('onSlotUpdate');
}
@ -124,18 +129,33 @@ class Garage {
};
// Robots
createRobot: (token: string, shortAliases: string[], attributes: Record<any, any>) => void = (
token,
shortAliases,
attributes,
) => {
if (!token || !shortAliases) return;
createRobot: (federation: Federation, token: string) => void = (federation, token) => {
if (!token) return;
if (this.getSlot(token) === null) {
this.slots[token] = new Slot(token, shortAliases, attributes, () => {
this.triggerHook('onSlotUpdate');
});
this.save();
genKey(token)
.then((key) => {
const robotAttributes = {
token,
pubKey: key.publicKeyArmored,
encPrivKey: key.encryptedPrivateKeyArmored,
};
this.setCurrentSlot(token);
this.slots[token] = new Slot(
token,
Object.keys(federation.coordinators),
robotAttributes,
() => {
this.triggerHook('onSlotUpdate');
},
);
void this.fetchRobot(federation, token);
this.save();
})
.catch((error) => {
console.error('Error:', error);
});
}
};

View File

@ -219,7 +219,7 @@ class Order {
slot,
takeAmount,
) => {
return this.submitAction(federation, slot, {
return await this.submitAction(federation, slot, {
action: 'take',
amount: this?.currency === 1000 ? Number(takeAmount) / 100000000 : Number(takeAmount),
});

View File

@ -42,13 +42,20 @@ class BaseSettings {
? 'en'
: i18n.resolvedLanguage.substring(0, 2);
const connection = systemClient.getItem('settings_connection');
this.connection = connection && connection !== '' ? connection : 'api';
const networkCookie = systemClient.getItem('settings_network');
this.network = networkCookie && networkCookie !== '' ? networkCookie : 'mainnet';
this.host = getHost();
const useProxy = systemClient.getItem('settings_use_proxy');
this.useProxy = window.NativeRobosats !== undefined && useProxy !== 'false';
const [client] = window.RobosatsSettings.split('-');
const stopNotifications = systemClient.getItem('settings_stop_notifications');
this.stopNotifications = client === 'mobile' && stopNotifications === 'true';
const useProxy = systemClient.getItem('settings_use_proxy');
this.useProxy = client === 'mobile' && useProxy !== 'false';
apiClient.useProxy = this.useProxy;
}
@ -59,10 +66,12 @@ class BaseSettings {
public language?: Language;
public freezeViewports: boolean = false;
public network: 'mainnet' | 'testnet' = 'mainnet';
public connection: 'api' | 'nostr' = 'api';
public host?: string;
public unsafeClient: boolean = false;
public selfhostedClient: boolean = false;
public useProxy: boolean;
public stopNotifications: boolean;
}
export default BaseSettings;

View File

@ -41,8 +41,6 @@ class Slot {
bitsEntropy,
shannonEntropy,
tokenSHA256,
pubKey: robotAttributes.pubKey,
encPrivKey: robotAttributes.encPrivKey,
});
this.updateSlotFromRobot(acc[shortAlias]);
return acc;

View File

@ -5,7 +5,6 @@ declare global {
ReactNativeWebView?: ReactNativeWebView;
NativeRobosats?: NativeRobosats;
RobosatsSettings: 'web-basic' | 'web-pro' | 'selfhosted-basic' | 'selfhosted-pro';
RobosatsClient: 'desktop-app' | undefined;
}
}

View File

@ -0,0 +1,106 @@
import { type Event } from 'nostr-tools';
import { type Settings } from '../../models';
import defaultFederation from '../../../static/federation.json';
interface RoboPoolEvents {
onevent: (event: Event) => void;
oneose: () => void;
}
class RoboPool {
constructor(settings: Settings, origin: string) {
this.network = settings.network ?? 'mainnet';
this.relays = Object.values(defaultFederation)
.map((coord) => {
const url: string = coord[this.network][settings.selfhostedClient ? 'onion' : origin];
if (!url) return undefined;
return `ws://${url.replace(/^https?:\/\//, '')}/nostr`;
})
.filter((item) => item !== undefined);
}
public relays: string[];
public network: string;
public webSockets: WebSocket[] = [];
private readonly messageHandlers: Array<(url: string, event: MessageEvent) => void> = [];
connect = (): void => {
this.relays.forEach((url) => {
if (this.webSockets.find((w: WebSocket) => w.url === url)) return;
let ws: WebSocket;
const connect = (): void => {
ws = new WebSocket(url);
// Add event listeners for the WebSocket
ws.onopen = () => {
console.log(`Connected to ${url}`);
};
ws.onmessage = (event) => {
this.messageHandlers.forEach((handler) => {
handler(url, event);
});
};
ws.onerror = (error) => {
console.error(`WebSocket error on ${url}:`, error);
};
ws.onclose = () => {
console.log(`Disconnected from ${url}. Attempting to reconnect...`);
setTimeout(connect, 1000); // Reconnect after 1 second
};
};
connect();
this.webSockets.push(ws);
});
};
close = (): void => {
this.webSockets.forEach((ws) => {
ws.close();
});
};
sendMessage = (message: string): void => {
const send = (index: number, message: string): void => {
const ws = this.webSockets[index];
if (ws.readyState === WebSocket.OPEN) {
ws.send(message);
} else if (ws.readyState === WebSocket.CONNECTING) {
setTimeout(send, 500, index, message);
}
};
this.webSockets.forEach((_ws, index) => {
send(index, message);
});
};
subscribeBook = (events: RoboPoolEvents): void => {
const authors = Object.values(defaultFederation)
.map((f) => f.nostrHexPubkey)
.filter((item) => item !== undefined);
const request = ['REQ', 'subscribeBook', { authors, kinds: [38383], '#n': [this.network] }];
this.messageHandlers.push((_url: string, messageEvent: MessageEvent) => {
const jsonMessage = JSON.parse(messageEvent.data);
if (jsonMessage[0] === 'EVENT') {
events.onevent(jsonMessage[2]);
} else if (jsonMessage[0] === 'EOSE') {
events.oneose();
}
});
this.sendMessage(JSON.stringify(request));
};
}
export default RoboPool;

View File

@ -1,7 +1,11 @@
interface Task {
robohash: Robohash;
resolves: Array<(result: string) => void>;
rejects: Array<(reason?: Error) => void>;
}
interface RoboWorker {
id: number;
worker: Worker;
busy: boolean;
}
interface Robohash {
@ -10,71 +14,25 @@ interface Robohash {
cacheKey: string;
}
interface RoboWorker {
worker: Worker;
busy: boolean;
}
class RoboGenerator {
private assetsCache: Record<string, string> = {};
private readonly workers: RoboWorker[] = [];
private readonly queue: Task[] = [];
private readonly taskQueue: Task[] = [];
private readonly numberOfWorkers: number = 8;
private waitingForLibrary: boolean = true;
private resolves: Record<string, Array<(result: string) => void>> = {};
private rejects: Record<string, Array<(reason?: Error) => void>> = {};
constructor() {
// limit to 8 workers
const numCores = 8;
for (let i = 0; i < numCores; i++) {
const worker = new Worker(new URL('./robohash.worker.ts', import.meta.url));
worker.onmessage = this.assignTasksToWorkers.bind(this);
this.workers.push({ worker, busy: false });
for (let i = 0; i < this.numberOfWorkers; i++) {
this.workers.push(this.createWorker(i));
}
}
private assignTasksToWorkers(): void {
const availableWorker = this.workers.find((w) => !w.busy);
if (availableWorker) {
const task = this.queue.shift();
if (task) {
availableWorker.busy = true;
availableWorker.worker.postMessage(task.robohash);
// Clean up the event listener and free the worker after receiving the result
const cleanup = (): void => {
availableWorker.worker.removeEventListener('message', completionCallback);
availableWorker.busy = false;
};
// Resolve the promise when the task is completed
const completionCallback = (event: MessageEvent): void => {
if (event.data.cacheKey === task.robohash.cacheKey) {
const { cacheKey, imageUrl } = event.data;
// Update the cache and resolve the promise
this.assetsCache[cacheKey] = imageUrl;
cleanup();
task.resolves.forEach((f) => {
f(imageUrl);
});
}
};
availableWorker.worker.addEventListener('message', completionCallback);
// Reject the promise if an error occurs
availableWorker.worker.addEventListener('error', (error) => {
cleanup();
task.rejects.forEach((f) => {
f(new Error(error.message));
});
});
}
}
setTimeout(() => {
this.waitingForLibrary = false;
}, 3000);
}
public generate: (hash: string, size: 'small' | 'large') => Promise<string> = async (
@ -86,8 +44,7 @@ class RoboGenerator {
return this.assetsCache[cacheKey];
} else {
return await new Promise((resolve, reject) => {
let task = this.queue.find((t) => t.robohash.cacheKey === cacheKey);
let task = this.taskQueue.find((task) => task.robohash.cacheKey === cacheKey);
if (!task) {
task = {
robohash: {
@ -95,19 +52,48 @@ class RoboGenerator {
size,
cacheKey,
},
resolves: [],
rejects: [],
};
this.queue.push(task);
}
task.resolves.push(resolve);
task.rejects.push(reject);
this.resolves[cacheKey] = [...(this.resolves[cacheKey] ?? []), resolve];
this.rejects[cacheKey] = [...(this.rejects[cacheKey] ?? []), reject];
this.assignTasksToWorkers();
this.addTask(task);
});
}
};
createWorker = (id: number): RoboWorker => {
const worker = new Worker(new URL('./robohash.worker.ts', import.meta.url));
worker.onmessage = (event) => {
const { cacheKey, imageUrl } = event.data;
// Update the cache and resolve the promise
this.assetsCache[cacheKey] = imageUrl;
this.resolves[cacheKey].forEach((f) => {
f(imageUrl);
});
if (this.taskQueue.length > 0) {
const nextTask = this.taskQueue.shift();
this.workers[id].busy = true;
this.workers[id].worker.postMessage(nextTask);
} else {
this.workers[id].busy = false;
}
};
return { id, worker, busy: false };
};
addTask = (task: any): void => {
const availableWorker = this.workers.find((w) => !w.busy);
if (availableWorker && !this.waitingForLibrary) {
availableWorker.worker.postMessage(task);
} else {
this.taskQueue.push(task);
}
};
}
export const robohash = new RoboGenerator();

View File

@ -1,17 +1,15 @@
import { async_generate_robohash } from 'robo-identities-wasm';
// Listen for messages from the main thread
self.addEventListener('message', (event) => {
void (async () => {
const { hash, size, cacheKey } = event.data;
self.onmessage = async (event) => {
if (!event.data) return;
try {
const { hash, size, cacheKey } = event.data.robohash;
// Generate the image using async_image_base
const t0 = performance.now();
const avatarB64: string = await async_generate_robohash(hash, size === 'small' ? 80 : 256);
const imageUrl = `data:image/png;base64,${avatarB64}`;
const t1 = performance.now();
console.log(`Avatar generated in: ${t1 - t0} ms`);
// Send the result back to the main thread
self.postMessage({ cacheKey, imageUrl });
})();
});
} catch (error) {
console.error('Wasm error:', error);
}
};

View File

@ -11,14 +11,14 @@
// donate to the development fund. This is the only way envisioned to incentivize
// donations to the development fund.
import { type Federation } from '../models';
import defaultFederation from '../../static/federation.json';
export default function federationLottery(federation: Federation): string[] {
export default function federationLottery(): string[] {
// Create an array to store the coordinator short aliases and their corresponding weights (chance)
const coordinatorChance: Array<{ shortAlias: string; chance: number }> = [];
// Convert the `federation` object into an array of {shortAlias, chance}
Object.values(federation.coordinators).forEach((coor) => {
Object.values(defaultFederation).forEach((coor) => {
const chance = coor.badges.donatesToDevFund > 50 ? 50 : coor.badges?.donatesToDevFund;
coordinatorChance.push({ shortAlias: coor.shortAlias, chance });
});

View File

@ -1,4 +1,4 @@
import { type PublicOrder, type Favorites } from '../models';
import { type PublicOrder, type Favorites, type Federation } from '../models';
interface AmountFilter {
amount: string;
@ -8,9 +8,9 @@ interface AmountFilter {
}
interface FilterOrders {
orders: PublicOrder[];
federation: Federation;
baseFilter: Favorites;
premium: number | null;
premium?: number | null;
amountFilter?: AmountFilter | null;
paymentMethods?: string[];
}
@ -60,13 +60,17 @@ const filterByPremium = function (order: PublicOrder, premium: number): boolean
};
const filterOrders = function ({
orders,
federation,
baseFilter,
premium = null,
paymentMethods = [],
amountFilter = null,
}: FilterOrders): PublicOrder[] {
const filteredOrders = orders.filter((order) => {
const enabledCoordinators = Object.values(federation.coordinators)
.filter((coord) => coord.enabled)
.map((coord) => coord.shortAlias);
const filteredOrders = Object.values(federation.book).filter((order) => {
const coordinatorCheck = enabledCoordinators.includes(order.coordinatorShortAlias ?? '');
const typeChecks = order.type === baseFilter.type || baseFilter.type == null;
const modeChecks = baseFilter.mode === 'fiat' ? !(order.currency === 1000) : true;
const premiumChecks = premium !== null ? filterByPremium(order, premium) : true;
@ -77,6 +81,7 @@ const filterOrders = function ({
const hostChecks =
baseFilter.coordinator !== 'any' ? filterByHost(order, baseFilter.coordinator) : true;
return (
coordinatorCheck &&
typeChecks &&
modeChecks &&
premiumChecks &&

102
frontend/src/utils/nostr.ts Normal file
View File

@ -0,0 +1,102 @@
import { type Event } from 'nostr-tools';
import { type PublicOrder } from '../models';
import { fromUnixTime } from 'date-fns';
import Geohash from 'latlon-geohash';
import currencyDict from '../../static/assets/currencies.json';
import defaultFederation from '../../static/federation.json';
const eventToPublicOrder = (event: Event): { dTag: string; publicOrder: PublicOrder | null } => {
const publicOrder: PublicOrder = {
id: 0,
coordinatorShortAlias: '',
created_at: new Date(),
expires_at: new Date(),
type: 1,
currency: null,
amount: '',
has_range: false,
min_amount: null,
max_amount: null,
payment_method: '',
is_explicit: false,
premium: '',
satoshis: null,
maker: null,
escrow_duration: 0,
bond_size: '',
latitude: null,
longitude: null,
maker_nick: '',
maker_hash_id: '',
satoshis_now: null,
price: null,
};
const statusTag = event.tags.find((t) => t[0] === 's') ?? [];
const dTag = event.tags.find((t) => t[0] === 'd') ?? [];
if (statusTag[1] !== 'pending') return { dTag: dTag[1], publicOrder: null };
event.tags.forEach((tag) => {
switch (tag[0]) {
case 'k':
publicOrder.type = tag[1] === 'sell' ? 1 : 0;
break;
case 'expiration':
publicOrder.expires_at = fromUnixTime(parseInt(tag[1], 10));
publicOrder.escrow_duration = parseInt(tag[2], 10);
break;
case 'fa':
if (tag[2]) {
publicOrder.has_range = true;
publicOrder.min_amount = tag[1] ?? null;
publicOrder.max_amount = tag[2] ?? null;
} else {
publicOrder.amount = tag[1];
}
break;
case 'bond':
publicOrder.bond_size = tag[1];
break;
case 'name':
publicOrder.maker_nick = tag[1];
publicOrder.maker_hash_id = tag[2];
break;
case 'premium':
publicOrder.premium = tag[1];
break;
case 'pm':
tag.shift();
publicOrder.payment_method = tag.join(' ');
break;
case 'g': {
const { lat, lon } = Geohash.decode(tag[1]);
publicOrder.latitude = lat;
publicOrder.longitude = lon;
break;
}
case 'f': {
const currencyNumber = Object.entries(currencyDict).find(
([_key, value]) => value === tag[1],
);
publicOrder.currency = currencyNumber?.[0] ? parseInt(currencyNumber[0], 10) : null;
break;
}
case 'source': {
const orderUrl = tag[1].split('/');
publicOrder.id = parseInt(orderUrl[orderUrl.length - 1] ?? '0');
const coordinatorIdentifier = orderUrl[orderUrl.length - 2] ?? '';
publicOrder.coordinatorShortAlias = Object.entries(defaultFederation).find(
([key, value]) => value.identifier === coordinatorIdentifier,
)?.[0];
break;
}
default:
break;
}
});
return { dTag: dTag[1], publicOrder };
};
export default eventToPublicOrder;

View File

@ -4,75 +4,6 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="300px" height="300px" viewBox="0 0 300 300" enable-background="new 0 0 300 300" xml:space="preserve">
<g>
<<<<<<< HEAD
<g>
<path fill="#1976D2" d="M269.92,0H30.08C13.493,0,0,13.493,0,30.08v239.84C0,286.507,13.493,300,30.08,300h239.84
c16.585,0,30.08-13.493,30.08-30.079V30.08C300,13.493,286.505,0,269.92,0z M254.579,256.284
c0,12.979-10.558,23.537-23.536,23.537H67.105c-12.978,0-23.536-10.559-23.536-23.537v-91.201c0-2.799,0.964-5.281,3.033-7.817
c1.302-1.593,3.091-3.277,5.593-5.245c-1.646-2.122-3.106-4.376-4.368-6.74c-6.009-11.252-7.271-24.188-3.556-36.423
c3.717-12.236,11.961-22.284,23.214-28.292c6.9-3.685,14.666-5.634,22.457-5.634c17.735,0,33.926,9.69,42.261,25.289
c0.982,1.842,1.844,3.747,2.579,5.699c9.099-3.819,12.69-4.366,14.8-4.366c1.013,0,1.998,0.121,2.924,0.358
c1.293,0.332,2.669,0.742,4.078,1.183c-5.273-4.064-9.735-9.237-12.986-15.327c-6.01-11.251-7.273-24.187-3.557-36.422
c3.716-12.236,11.96-22.283,23.213-28.293c6.901-3.686,14.667-5.634,22.458-5.634c17.735,0,33.928,9.691,42.261,25.29
c12.421,23.263,3.603,52.294-19.659,64.717c-6.899,3.684-14.666,5.633-22.456,5.633l0,0c-1.832,0-3.641-0.128-5.432-0.331
c11.111,5.199,22.66,11.332,32.334,16.882c16.545,9.491,28.185,17.265,34.596,23.103c5.996,5.46,7.224,8.895,7.224,12.371V256.284
z"/>
<path fill="#1976D2" d="M206.09,103.262c20.968-11.197,28.912-37.365,17.719-58.33c-11.199-20.967-37.365-28.914-58.332-17.716
c-20.968,11.197-28.914,37.363-17.717,58.328C158.956,106.511,185.124,114.458,206.09,103.262z M216.051,49.074
c8.908,16.688,2.585,37.516-14.103,46.427c-16.688,8.913-37.516,2.587-46.43-14.099c-8.911-16.69-2.587-37.514,14.103-46.426
C186.31,26.063,207.135,32.388,216.051,49.074z"/>
<polygon fill="#1976D2" points="176.778,188.58 174.823,186.833 173.32,185.495 167.878,180.639 164.984,178.056 164.412,177.544
159.543,173.2 157.033,170.962 156.104,170.131 151.279,175.538 154.101,178.058 159.543,182.911 162.437,185.495 167.88,190.351
171.336,193.436 176.331,197.892 179.214,196.12 182.777,193.931 182.225,193.436 "/>
<polygon fill="#1976D2" points="164.422,193.436 158.979,188.58 156.085,185.997 150.645,181.142 148.908,179.595
147.979,178.765 143.154,184.171 145.199,185.997 150.645,190.853 153.536,193.436 158.979,198.292 162.437,201.378
165.79,204.368 172.238,200.408 167.88,196.521 "/>
<polygon fill="#1976D2" points="156.085,200.876 150.642,196.019 147.746,193.436 142.306,188.58 140.402,186.88 135.577,192.287
136.864,193.436 142.306,198.292 145.199,200.874 150.645,205.73 154.101,208.815 155.916,210.437 162.361,206.475
159.543,203.962 "/>
<polygon fill="#1976D2" points="174.549,181.671 180.818,174.766 175.925,170.325 169.619,177.269 169.436,177.472
174.33,181.913 "/>
<polygon fill="#1976D2" points="139.516,210.497 145.424,213.822 149.264,209.595 144.37,205.153 "/>
<polygon fill="#1976D2" points="185.35,55.658 188.245,58.241 193.688,63.098 197.145,66.182 202.587,71.038 203.838,72.154
208.661,66.746 208.029,66.182 202.587,61.326 200.628,59.578 199.13,58.241 193.688,53.384 190.792,50.803 190.22,50.291
185.352,45.946 182.841,43.707 181.914,42.876 177.086,48.285 179.908,50.803 "/>
<polygon fill="#1976D2" points="171.007,58.744 176.449,63.6 179.342,66.182 184.785,71.038 188.245,74.124 193.688,78.979
194.787,79.96 195.714,80.786 200.535,75.38 199.13,74.124 193.688,69.269 190.229,66.182 184.785,61.326 181.891,58.744
176.451,53.888 174.718,52.34 173.787,51.51 168.96,56.919 "/>
<polygon fill="#1976D2" points="185.352,76.706 181.891,73.62 176.451,68.764 173.555,66.182 168.111,61.326 166.21,59.627
161.387,65.036 162.671,66.182 168.111,71.038 171.007,73.62 176.451,78.478 179.908,81.562 185.352,86.418 187.208,88.076
188.135,88.902 192.959,83.496 190.792,81.562 "/>
<polygon fill="#1976D2" points="200.357,54.416 206.626,47.515 201.734,43.071 195.428,50.016 195.245,50.218 200.135,54.66 "/>
<polygon fill="#1976D2" points="163.687,85.044 168.582,89.487 175.072,82.341 170.179,77.9 "/>
<polygon fill="#1976D2" points="108.067,129.667 112.892,124.26 110.986,122.558 104.858,117.092 94.447,107.804 87.072,101.22
86.142,100.39 81.315,105.798 104.133,126.153 "/>
<polygon fill="#1976D2" points="93.059,132.156 99.017,137.474 99.944,138.3 104.767,132.893 99.809,128.469 78.945,109.853
78.019,109.022 73.191,114.431 "/>
<polygon fill="#1976D2" points="70.438,117.14 65.616,122.548 82.855,137.931 90.572,144.814 91.438,145.587 92.365,146.415
97.047,141.168 97.19,141.009 89.496,134.145 "/>
<polygon fill="#1976D2" points="104.589,111.929 110.856,105.025 105.965,100.584 99.658,107.527 99.475,107.729 104.366,112.173
"/>
<polygon fill="#1976D2" points="67.918,142.558 70.767,145.146 72.811,147 79.012,140.175 79.302,139.854 74.407,135.411 "/>
<path fill="#1976D2" d="M244.178,156.201c-5.157-4.694-14.992-11.727-33.767-22.498c-18.376-10.541-43.545-23.228-59.081-27.22
c-0.542-0.139-1.13-0.21-1.747-0.211c-3.174,0.001-9.96,2.572-17.736,6.077c-0.839-3.375-2.098-6.701-3.808-9.905
c-11.201-20.965-37.366-28.913-58.331-17.716c-20.967,11.195-28.915,37.362-17.717,58.329c1.947,3.647,4.359,6.894,7.106,9.721
c-4.556,3.215-7.271,5.555-8.839,7.473c-1.525,1.869-1.97,3.34-1.97,4.832v91.201c0,10.375,8.443,18.818,18.816,18.818
l163.938-0.001c10.378,0,18.816-8.442,18.816-18.817v-91.201C249.859,163.712,249.856,161.374,244.178,156.201z M120.28,106.589
c1.648,3.086,2.771,6.316,3.407,9.586c0.7,3.587,0.8,7.223,0.357,10.773c-1.334,10.697-7.657,20.613-17.869,26.067
c-9.904,5.29-21.27,5.21-30.732,0.784c-3.226-1.51-6.225-3.533-8.876-6.012c-2.677-2.502-4.998-5.468-6.816-8.875
c-8.913-16.688-2.588-37.513,14.1-46.425C90.539,83.575,111.366,89.9,120.28,106.589z M236.51,162.499l-49.745,30.078
l-10.604,6.412l-2.452,1.482l-7.487,4.527l-3.123,1.89l-9.938,6.009l-4.296,2.596l-0.616,0.373l-12.045-7.184l-1.489-0.888
l-7.139-4.019c-0.035-0.102-0.064-0.199-0.098-0.299c-5.283-15.604,1.336-33.236,16.336-41.249
c16.688-8.912,37.517-2.586,46.428,14.102c1.851,3.467,3.036,7.112,3.615,10.793l7.986-4.908
c-0.839-3.415-2.11-6.786-3.841-10.029c-11.2-20.966-37.364-28.913-58.332-17.717c-16.009,8.549-24.414,25.825-22.518,42.85
l-56.335-33.609c1.554-1.231,3.643-2.743,6.239-4.499c12.674,7.953,29.145,9.104,43.262,1.564
c14.548-7.769,22.821-22.746,22.786-38.191c8.371-3.899,14.193-6.198,16.25-6.473c11.672,3.109,32.127,12.507,53.591,24.638
c15.806,8.931,26.645,16.235,32.453,20.851C235.79,161.911,236.163,162.212,236.51,162.499z M240.046,171.831v84.453
c0,0.703-0.088,1.385-0.24,2.042l-36.433-64.319L240.046,171.831z M58.104,173.519l34.508,20.587l-34.508,60.933V173.519z
M101.044,199.137l47.238,28.181l46.69-28.233l37.431,66.089c-0.447,0.067-0.896,0.114-1.36,0.114H67.105
c-1.124,0-2.195-0.216-3.189-0.595L101.044,199.137z"/>
</g>
=======
<path fill="#1976D2" d="M269.921,0H30.08C13.493,0,0,13.494,0,30.08v239.84C0,286.506,13.493,300,30.08,300h239.841
C286.506,300,300,286.506,300,269.92V30.08C300,13.494,286.506,0,269.921,0z M143.299,53.225
c3.583-11.796,11.53-21.482,22.377-27.275c6.652-3.553,14.139-5.431,21.648-5.431c15.026,0,28.906,7.216,37.501,19.173
@ -123,6 +54,5 @@
M101.553,139.68l-0.926-0.827l-5.958-5.316l-19.866-17.726l4.828-5.408l0.926,0.829l20.863,18.616l4.958,4.424L101.553,139.68z
M109.679,131.046l-3.936-3.513l-22.816-20.356l4.828-5.407l0.929,0.83l23.915,21.338l1.904,1.702L109.679,131.046z
M101.086,109.122l6.486-7.146l4.892,4.44l0.002,0.002l-6.489,7.149l-4.894-4.442L101.086,109.122z"/>
>>>>>>> add-art-0.1.2
</g>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -4,89 +4,6 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="300px" height="300px" viewBox="0 0 300 300" enable-background="new 0 0 300 300" xml:space="preserve">
<g>
<<<<<<< HEAD
<path fill="none" d="M204.978,104.543l36.731,22.209V42.164c0-0.703-0.089-1.386-0.243-2.045L204.978,104.543z"/>
<path fill="none" d="M136.219,90.727l-7.157,4.03c-0.035,0.099-0.063,0.2-0.098,0.299c-5.293,15.628,1.34,33.29,16.36,41.313
c16.715,8.927,37.576,2.591,46.502-14.125c1.855-3.472,3.04-7.123,3.621-10.81l7.997,4.915c-0.839,3.424-2.111,6.796-3.847,10.047
c-11.215,20.999-37.423,28.958-58.424,17.744c-16.032-8.562-24.451-25.865-22.551-42.916l-56.425,33.661
c1.679,1.332,3.981,2.986,6.874,4.926c12.635-7.719,28.914-8.758,42.894-1.293c14.382,7.68,22.642,22.389,22.824,37.643
c8.247,3.836,14.003,6.102,16.098,6.395c11.693-3.115,32.171-12.527,53.664-24.672c15.829-8.945,26.685-16.262,32.501-20.884
c0.393-0.313,0.769-0.614,1.115-0.902l-88.403-53.453L136.219,90.727z M144.284,128.455l-4.903-4.451l6.502-7.155l4.901,4.447
L144.284,128.455z M163.87,127.87l-0.932-0.83l-25.861-23.076l4.829-5.418l26.796,23.908L163.87,127.87z M153.931,85.924
l26.85,16.499l3.647,3.255l-4.832,5.415l-26.794-23.906L153.931,85.924z M176.29,114.325l-4.832,5.416l-0.929-0.828l-25.864-23.078
l4.835-5.417l0.928,0.833L176.29,114.325z"/>
<path fill="none" d="M269.92,12.587H30.078c-9.646,0-17.491,7.847-17.491,17.492V269.92c0,9.646,7.846,17.493,17.491,17.493H269.92
c9.646,0,17.493-7.847,17.493-17.493V30.079C287.413,20.434,279.566,12.587,269.92,12.587z M225.446,253.853
c-11.215,20.998-37.423,28.958-58.422,17.743c-21.002-11.214-28.961-37.422-17.746-58.421
c11.217-20.999,37.422-28.961,58.422-17.744C228.699,206.645,236.658,232.852,225.446,253.853z M251.541,133.511
c0,1.373-0.006,3.715-5.691,8.894c-5.167,4.703-15.018,11.745-33.822,22.534c-18.405,10.561-43.613,23.266-59.174,27.264
c-0.544,0.14-1.132,0.21-1.751,0.21c-3.134,0-9.79-2.505-17.445-5.941c-0.836,3.567-2.139,7.086-3.944,10.47
c-11.215,20.999-37.422,28.958-58.423,17.743c-21-11.214-28.96-37.422-17.745-58.421c2.027-3.797,4.552-7.161,7.442-10.07
c-4.879-3.405-7.738-5.85-9.364-7.844c-1.527-1.869-1.972-3.344-1.972-4.838V42.164c0-10.392,8.453-18.846,18.846-18.846h164.195
c10.391,0,18.849,8.455,18.849,18.846V133.511z"/>
<path fill="none" d="M149.8,71.178l46.764,28.277l37.489-66.194c-0.444-0.068-0.897-0.113-1.36-0.113l-164.195,0
c-1.126,0-2.201,0.215-3.195,0.595l37.187,65.661L149.8,71.178z"/>
<path fill="none" d="M107.816,146.289c-9.734-5.197-20.869-5.211-30.239-1.023c-3.288,1.47-6.356,3.455-9.072,5.921
c-2.834,2.573-5.284,5.662-7.188,9.227c-8.928,16.713-2.592,37.574,14.123,46.5c16.713,8.928,37.574,2.591,46.5-14.123
c1.744-3.268,2.899-6.693,3.513-10.157c0.646-3.629,0.691-7.3,0.179-10.877C124.125,161.289,117.838,151.643,107.816,146.289z
M101.56,159.163l6.043-6.654l4.903,4.449l-4.957,5.454l-1.544,1.704l-4.903-4.449L101.56,159.163z M74.399,198.999l-4.903-4.449
l6.5-7.157l4.903,4.448L74.399,198.999z M93.985,198.413l-0.933-0.83L67.19,174.509l4.832-5.418l26.792,23.908L93.985,198.413z
M101.573,190.283l-0.93-0.827L74.781,166.38l4.831-5.418l0.93,0.831l25.86,23.078L101.573,190.283z M113.954,176.88l-4.245,4.758
l-19.934-17.786l-6.858-6.12l4.834-5.416l0.929,0.832l25.863,23.076L113.954,176.88z"/>
<polygon fill="none" points="59.48,43.412 59.48,125.062 94.046,104.44 "/>
<path fill="none" d="M203.548,203.2c-16.711-8.924-37.569-2.589-46.497,14.124c-8.926,16.716-2.589,37.573,14.123,46.5
c16.716,8.926,37.574,2.591,46.501-14.124C226.601,232.988,220.266,212.127,203.548,203.2z M203.336,209.42l4.903,4.449
l-6.501,7.158l-4.903-4.449L203.336,209.42z M170.133,255.911l-4.9-4.451l6.499-7.156l4.903,4.449L170.133,255.911z
M189.719,255.325l-0.932-0.829l-25.861-23.077l4.832-5.418l26.792,23.909L189.719,255.325z M197.307,247.196l-0.931-0.828
l-25.864-23.078l4.836-5.417l0.93,0.832l25.861,23.076L197.307,247.196z M205.443,238.549l-26.791-23.907l4.832-5.416l0.931,0.831
l25.861,23.077L205.443,238.549z"/>
<path fill="#9C27B0" d="M232.692,23.318H68.497c-10.393,0-18.846,8.455-18.846,18.846v91.347c0,1.494,0.444,2.969,1.972,4.838
c1.626,1.994,4.485,4.438,9.364,7.844c-2.891,2.909-5.415,6.273-7.442,10.07C42.33,177.262,50.29,203.47,71.29,214.684
c21.001,11.215,47.208,3.256,58.423-17.743c1.806-3.384,3.108-6.902,3.944-10.47c7.655,3.437,14.312,5.941,17.445,5.941
c0.619,0,1.207-0.07,1.751-0.21c15.561-3.998,40.769-16.703,59.174-27.264c18.805-10.789,28.655-17.831,33.822-22.534
c5.686-5.179,5.691-7.521,5.691-8.894V42.164C251.541,31.772,243.083,23.318,232.692,23.318z M68.497,33.147l164.195,0
c0.463,0,0.916,0.045,1.36,0.113l-37.489,66.194L149.8,71.178l-47.312,28.226L65.302,33.743
C66.296,33.363,67.371,33.147,68.497,33.147z M59.48,125.062v-81.65l34.565,61.028L59.48,125.062z M125.453,182.633
c-0.613,3.464-1.769,6.89-3.513,10.157c-8.926,16.714-29.787,23.051-46.5,14.123c-16.715-8.926-23.051-29.787-14.123-46.5
c1.903-3.564,4.354-6.653,7.188-9.227c2.716-2.466,5.784-4.451,9.072-5.921c9.37-4.188,20.505-4.174,30.239,1.023
c10.021,5.354,16.309,15,17.815,25.467C126.145,175.333,126.099,179.004,125.453,182.633z M237.053,137
c-5.816,4.622-16.672,11.938-32.501,20.884c-21.493,12.145-41.971,21.557-53.664,24.672c-2.095-0.293-7.851-2.559-16.098-6.395
c-0.183-15.254-8.442-29.963-22.824-37.643c-13.979-7.465-30.259-6.426-42.894,1.293c-2.893-1.939-5.195-3.594-6.874-4.926
l56.425-33.661c-1.9,17.051,6.519,34.354,22.551,42.916c21.001,11.214,47.209,3.255,58.424-17.744
c1.735-3.251,3.008-6.623,3.847-10.047l-7.997-4.915c-0.581,3.687-1.766,7.338-3.621,10.81
c-8.926,16.715-29.787,23.051-46.502,14.125c-15.021-8.023-21.653-25.686-16.36-41.313c0.034-0.1,0.062-0.201,0.098-0.299
l7.157-4.03l13.546-8.082l88.403,53.453C237.821,136.386,237.445,136.687,237.053,137z M241.709,126.752l-36.731-22.209
l36.488-64.424c0.154,0.659,0.243,1.342,0.243,2.045V126.752z"/>
<polygon fill="#9C27B0" points="184.428,105.678 180.78,102.423 153.931,85.924 152.802,87.187 179.596,111.093 "/>
<polygon fill="#9C27B0" points="144.665,95.834 170.529,118.912 171.458,119.74 176.29,114.325 150.428,91.25 149.5,90.417 "/>
<polygon fill="#9C27B0" points="137.077,103.964 162.938,127.04 163.87,127.87 168.702,122.454 141.906,98.546 "/>
<polygon fill="#9C27B0" points="139.381,124.004 144.284,128.455 150.784,121.296 145.883,116.849 "/>
<polygon fill="#9C27B0" points="87.751,152.315 82.917,157.731 89.775,163.852 109.709,181.638 113.954,176.88 114.543,176.224
88.68,153.147 "/>
<polygon fill="#9C27B0" points="79.612,160.962 74.781,166.38 100.644,189.456 101.573,190.283 106.402,184.871 80.542,161.793
"/>
<polygon fill="#9C27B0" points="67.19,174.509 93.053,197.583 93.985,198.413 98.814,192.999 72.022,169.091 "/>
<polygon fill="#9C27B0" points="107.549,162.412 112.506,156.958 107.603,152.509 101.56,159.163 101.102,159.667 106.005,164.116
"/>
<rect x="71.887" y="188.361" transform="matrix(-0.7406 -0.672 0.672 -0.7406 1.0629 386.801)" fill="#9C27B0" width="6.621" height="9.669"/>
<path fill="#9C27B0" d="M207.7,195.431c-21-11.217-47.205-3.255-58.422,17.744c-11.215,20.999-3.256,47.207,17.746,58.421
c20.999,11.215,47.207,3.255,58.422-17.743C236.658,232.852,228.699,206.645,207.7,195.431z M217.675,249.7
c-8.927,16.715-29.785,23.05-46.501,14.124c-16.712-8.927-23.049-29.784-14.123-46.5c8.928-16.713,29.786-23.048,46.497-14.124
C220.266,212.127,226.601,232.988,217.675,249.7z"/>
<polygon fill="#9C27B0" points="183.484,209.226 178.652,214.642 205.443,238.549 210.276,233.134 184.415,210.057 "/>
<polygon fill="#9C27B0" points="175.348,217.873 170.512,223.29 196.376,246.368 197.307,247.196 202.139,241.781 176.277,218.705
"/>
<polygon fill="#9C27B0" points="162.926,231.419 188.787,254.496 189.719,255.325 194.55,249.91 167.758,226.001 "/>
<rect x="199.227" y="210.389" transform="matrix(0.7406 0.672 -0.672 0.7406 197.1713 -80.2653)" fill="#9C27B0" width="6.621" height="9.67"/>
<rect x="167.624" y="245.271" transform="matrix(-0.7402 -0.6724 0.6724 -0.7402 129.2995 550.17)" fill="#9C27B0" width="6.62" height="9.67"/>
<path fill="#9C27B0" d="M269.92,0H30.078C13.492,0,0,13.493,0,30.079V269.92C0,286.505,13.492,300,30.078,300H269.92
c16.586,0,30.08-13.495,30.08-30.08V30.079C300,13.492,286.506,0,269.92,0z M287.413,269.92c0,9.646-7.847,17.493-17.493,17.493
H30.078c-9.646,0-17.491-7.847-17.491-17.493V30.079c0-9.646,7.846-17.492,17.491-17.492H269.92
c9.646,0,17.493,7.847,17.493,17.492V269.92z"/>
=======
<polygon fill="none" points="240.285,125.102 240.285,43.582 205.773,104.516 "/>
<path fill="none" d="M58.583,40.294c-0.151,0.657-0.24,1.34-0.24,2.042v84.453l36.673-22.176L58.583,40.294z"/>
<path fill="none" d="M150.105,71.303l47.237,28.182l37.13-65.557c-0.994-0.379-2.065-0.595-3.19-0.595H67.344
@ -194,6 +111,5 @@
c7.992,0,14.494,6.502,14.494,14.494v239.84c0,7.992-6.502,14.494-14.494,14.494H30.079c-7.991,0-14.492-6.502-14.492-14.494
V30.08z"/>
</g>
>>>>>>> add-art-0.1.2
</g>
</svg>

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -4,61 +4,6 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="300px" height="300px" viewBox="0 0 300 300" enable-background="new 0 0 300 300" xml:space="preserve">
<g>
<<<<<<< HEAD
<path fill="#9C27B0" d="M269.92,0H30.079C13.493,0,0,13.494,0,30.08v239.84C0,286.507,13.493,300,30.079,300H269.92
c16.584,0,30.08-13.493,30.08-30.08V30.08C300,13.494,286.504,0,269.92,0z M256.266,133.512c0,3.479-1.229,6.916-7.232,12.383
c-6.419,5.847-18.077,13.633-34.649,23.14c-9.701,5.565-21.283,11.716-32.424,16.928c1.807-0.207,3.633-0.336,5.481-0.336
c7.803,0,15.577,1.95,22.487,5.642c23.296,12.439,32.125,41.512,19.688,64.809c-8.344,15.621-24.561,25.324-42.317,25.324
c-0.001,0,0,0-0.001,0c-7.805,0-15.581-1.95-22.491-5.639c-11.27-6.02-19.524-16.082-23.247-28.335
c-3.721-12.252-2.454-25.206,3.562-36.475c3.263-6.111,7.745-11.302,13.04-15.375c-1.428,0.447-2.82,0.86-4.126,1.198
c-0.931,0.238-1.915,0.358-2.928,0.358c-2.079,0-5.601-0.529-14.444-4.216c-0.776,2.144-1.705,4.232-2.78,6.246
c-8.344,15.622-24.561,25.326-42.319,25.326c-7.804,0-15.58-1.951-22.492-5.642c-11.268-6.017-19.523-16.078-23.245-28.333
c-3.721-12.254-2.457-25.207,3.56-36.475c1.338-2.502,2.891-4.875,4.642-7.094c-2.746-2.127-4.68-3.928-6.057-5.612
c-2.069-2.534-3.034-5.021-3.034-7.823V42.165c0-12.994,10.572-23.565,23.566-23.565h164.194c12.995,0,23.567,10.571,23.567,23.565
V133.512z"/>
<path fill="#9C27B0" d="M232.698,23.318H68.504c-10.393,0-18.847,8.455-18.847,18.847v91.347c0,1.494,0.444,2.969,1.973,4.838
c1.627,1.994,4.484,4.438,9.363,7.844c-2.89,2.908-5.414,6.274-7.441,10.07c-11.215,20.999-3.255,47.208,17.745,58.422
c21,11.215,47.207,3.255,58.422-17.744c1.807-3.383,3.109-6.9,3.945-10.471c7.654,3.438,14.311,5.942,17.444,5.942
c0.619,0,1.208-0.07,1.752-0.21c15.56-3.998,40.771-16.705,59.173-27.263c18.807-10.79,28.657-17.831,33.822-22.535
c5.687-5.179,5.69-7.521,5.69-8.894V42.165C251.546,31.773,243.092,23.318,232.698,23.318z M121.946,192.79
c-8.926,16.714-29.785,23.051-46.499,14.124c-16.715-8.927-23.048-29.786-14.123-46.499c1.903-3.565,4.354-6.653,7.188-9.229
c2.715-2.465,5.784-4.448,9.071-5.919c9.369-4.189,20.505-4.176,30.238,1.023c10.023,5.353,16.308,14.998,17.815,25.465
c0.513,3.578,0.467,7.249-0.177,10.879C124.844,186.098,123.691,189.524,121.946,192.79z M68.504,33.148l164.194,0.001
c0.466,0,0.916,0.045,1.36,0.112l-37.487,66.193l-46.766-28.276l-47.309,28.226L65.308,33.743
C66.302,33.364,67.378,33.148,68.504,33.148z M59.487,43.413l34.562,61.028l-34.562,20.622V43.413z M111.974,138.52
c-13.981-7.465-30.26-6.425-42.895,1.293c-2.893-1.938-5.196-3.594-6.874-4.926l56.425-33.662
c-1.901,17.051,6.519,34.353,22.552,42.916c20.999,11.215,47.207,3.255,58.421-17.743c1.735-3.251,3.009-6.624,3.849-10.047
l-7.998-4.915c-0.581,3.687-1.766,7.338-3.62,10.81c-8.928,16.715-29.785,23.051-46.502,14.125
c-15.021-8.024-21.654-25.686-16.361-41.313c0.035-0.099,0.063-0.2,0.098-0.299l7.155-4.03l13.548-8.081l88.403,53.452
c-0.347,0.288-0.722,0.59-1.116,0.901c-5.816,4.623-16.669,11.94-32.498,20.885c-21.496,12.145-41.973,21.555-53.666,24.673
c-2.095-0.295-7.85-2.56-16.099-6.396C134.613,160.909,126.352,146.199,111.974,138.52z M241.716,126.753l-36.732-22.21
l36.487-64.423c0.155,0.658,0.245,1.34,0.245,2.045V126.753z"/>
<polygon fill="#9C27B0" points="153.936,85.925 152.809,87.188 179.599,111.094 184.434,105.679 180.786,102.424 "/>
<polygon fill="#9C27B0" points="149.506,90.417 144.671,95.835 170.536,118.914 171.465,119.741 176.297,114.326 150.435,91.25
"/>
<polygon fill="#9C27B0" points="137.083,103.965 162.943,127.04 163.876,127.87 168.708,122.454 141.913,98.547 "/>
<polygon fill="#9C27B0" points="139.387,124.005 144.29,128.455 150.79,121.298 145.889,116.85 "/>
<polygon fill="#9C27B0" points="87.757,152.317 82.925,157.732 89.782,163.853 109.717,181.637 113.962,176.881 114.549,176.224
88.687,153.148 "/>
<polygon fill="#9C27B0" points="79.619,160.963 74.787,166.379 100.65,189.457 101.579,190.284 106.411,184.872 80.548,161.794
"/>
<polygon fill="#9C27B0" points="67.199,174.51 93.06,197.584 93.991,198.414 98.821,193 72.029,169.092 "/>
<polygon fill="#9C27B0" points="107.558,162.414 112.512,156.958 107.608,152.51 101.567,159.162 101.108,159.668 106.012,164.117
"/>
<polygon fill="#9C27B0" points="69.502,194.551 74.405,198.998 80.906,191.842 76.004,187.393 "/>
<path fill="#9C27B0" d="M149.284,213.176c-11.215,20.998-3.255,47.205,17.745,58.421c21,11.215,47.207,3.255,58.422-17.744
s3.253-47.207-17.745-58.424C186.707,184.215,160.498,192.176,149.284,213.176z M203.555,203.201
c16.716,8.927,23.051,29.789,14.127,46.5c-8.928,16.715-29.789,23.05-46.502,14.124c-16.714-8.927-23.048-29.784-14.125-46.499
C165.984,200.612,186.84,194.274,203.555,203.201z"/>
<polygon fill="#9C27B0" points="210.281,233.135 184.422,210.058 183.49,209.228 178.657,214.645 205.449,238.55 "/>
<polygon fill="#9C27B0" points="197.313,247.196 202.145,241.783 176.283,218.707 175.354,217.874 170.521,223.291
196.385,246.369 "/>
<polygon fill="#9C27B0" points="189.725,255.324 194.557,249.91 167.764,226.002 162.933,231.42 188.794,254.497 "/>
<rect x="199.234" y="210.39" transform="matrix(0.7404 0.6721 -0.6721 0.7404 197.2291 -80.27)" fill="#9C27B0" width="6.618" height="9.67"/>
<rect x="167.628" y="245.272" transform="matrix(-0.7402 -0.6724 0.6724 -0.7402 129.3073 550.175)" fill="#9C27B0" width="6.62" height="9.67"/>
=======
<path fill="none" d="M96.547,116.404c0.839,3.416,2.111,6.787,3.84,10.029c7.701,14.415,22.475,22.676,37.769,22.792
c-15.294-0.117-30.068-8.378-37.768-22.792C98.657,123.191,97.387,119.82,96.547,116.404l7.986-4.906v0L96.547,116.404z"/>
<path fill="none" d="M88.658,153.959c-10.801-6.353-18.766-11.687-23.866-15.547C69.891,142.273,77.856,147.606,88.658,153.959z"/>
@ -280,6 +225,5 @@
v91.201c0,2.378-0.841,4.516-2.646,6.729c-1.427,1.743-3.589,3.695-6.706,6.043c2.033,2.428,3.807,5.055,5.295,7.841
C254.836,164.996,256.054,177.466,252.471,189.264z"/>
</g>
>>>>>>> add-art-0.1.2
</g>
</svg>

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -2,12 +2,14 @@
"temple": {
"longAlias": "Temple of Sats",
"shortAlias": "temple",
"identifier": "templeofsats",
"description": "I am passionate about joining Robosats as a coordinator because I believe that peer-to-peer, non-KYC Bitcoin transactions are vital for the community's empowerment and autonomy. I aim to champion users' privacy, and provide a seamless experience for genuine Bitcoin enthusiasts.",
"motto": "Privacy and Integrity: Temple of Sats, where Bitcoin's essence thrives.",
"color": "#000",
"established": "2023-12-02",
"nostrHexPubkey": "74001620297035daa61475c069f90b6950087fea0d0134b795fac758c34e7191",
"contact": {
"email": "cosmos178ftmm4edlahqzj376gwgqzd9re5x0x9h0tfsc@keplr.xyz",
"email": "coordinator@templeofsats.org",
"telegram": "templeofsats",
"simplex": "https://simplex.chat/contact/#/?v=1-4&smp=smp%3A%2F%2Fh--vW7ZSkXPeOUpfxlFGgauQmXNFOzGoizak7Ult7cw%3D%40smp15.simplex.im%2FTBkVW6au17zMxuwDvlhIpkMojh7PpZgN%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA2iXIDN6Su6zYqKWcgsdd8BA7HhIHYIEWHE-MUyJhSw4%253D%26srv%3Doauu4bgijybyhczbnxtlggo6hiubahmeutaqineuyy23aojpih3dajad.onion",
"matrix": "@venividivici13:matrix.org",
@ -36,7 +38,7 @@
},
"mainnet": {
"onion": "http://ngdk7ocdzmz5kzsysa3om6du7ycj2evxp2f2olfkyq37htx3gllwp2yd.onion",
"clearnet": "",
"clearnet": "https://unsafe.templeofsats.org",
"i2p": ""
},
"testnet": {
@ -47,58 +49,15 @@
"mainnetNodesPubkeys": ["030a425f5c69a29db30f6740d4e7df8f5612ef9955078ef4497490015464733dc8"],
"testnetNodesPubkeys": ["028e7a019180a664b84edf77ba656e96f2eb84f67f56d93020341caf4109e0dbc7"]
},
"satstralia": {
"longAlias": "Satstralia",
"shortAlias": "satstralia",
"description": "I'm happy to be part of Robosats in so many ways!",
"motto": "btc = ɔʇq",
"color": "#329239",
"established": "2023-12-02",
"contact": {
"email": "info@satstralia.com",
"telegram": "satstralia",
"simplex": "https://simplex.chat/contact/#/?v=1-4&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2Fq0pIyShcBl0EP8le0D0xy2OfSrP1mQWg%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAcwmsC9GQwQEt40UNpYp4vKPhU_UnWXsXcVl-OJ57lC4%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22vNcyZH9C3eE6MHzRNpR3xA%3D%3D%22%7D",
"matrix": "#satstralia:matrix.org",
"pgp": "/static/federation/pgp/D1894C9862A9D02D47D96C84AE30B6904210DA14.asc",
"nostr": "npub1z94lxjf7m5snda0qc6s3kmpy6r4nfw74h78da9j6j4y8ym08zrrs459wpr",
"website": "https://satstralia.com",
"fingerprint": "D1894C9862A9D02D47D96C84AE30B6904210DA14"
},
"badges": {
"isFounder": true,
"donatesToDevFund": 33,
"hasGoodOpSec": true,
"robotsLove": false,
"hasLargeLimits": true
},
"policies": {
"Privacy Policy 1": "Evidence in Disputes: In the event of a dispute, users will be asked to provide transaction-related evidence. This could include transaction IDs, screenshots of payment confirmations, or other pertinent transaction records. Personal information or unrelated transaction details should be redacted to maintain privacy.",
"Privacy Policy 2": "Short-term Storage: Sensitive information related to disputes will be stored only for the duration necessary to resolve the issue. Once resolved, the data will be permanently deleted. For ease of use e-mail communications are permitted, but E2EE and decentralized platforms such as NOSTR, SIMPLEX and MATRIX are advised.",
"Data Policy 1": "No Third-Party Sharing: Under no circumstances will user information be shared with third parties.",
"Data Policy 2": "Short-term Storage: Any log needed to operate the coordinator will be cleared after 7 days, unless strictly needed to process disputes. To ensure utmost privacy, the coordinator will be accessible only through TOR.",
"Rule 1:": "Do not share personal information through the chat, unless strictly needed for completing the trade.",
"Rule 2:": "Any dispute can be fist address through our public chats in the different social networks but never will be started using private chats."
},
"mainnet": {
"onion": "http://satstraoq35jffvkgpfoqld32nzw2siuvowanruindbfojowpwsjdgad.onion",
"clearnet": "https://unsafe.satstralia.com",
"i2p": ""
},
"testnet": {
"onion": "http://testraliar7xkhos2gipv2k65obykofb4jqzl5l4danfryacifi4t7qd.onion",
"clearnet": "https://test.unsafe.satstralia.com",
"i2p": ""
},
"mainnetNodesPubkeys": ["029c5b14214ca7c1f5334db539dbab266088ba43a40563551efb9458756a94cd94"],
"testnetNodesPubkeys": ["03607900c00c5fcc3f9d32da4ad687c73d95df4faa065e5320e77b41c5d76ef381"]
},
"lake": {
"longAlias": "TheBigLake",
"shortAlias": "lake",
"identifier": "thebiglake",
"description": "Becoming a RoboSats coordinator represents boosting intrinsic values of decentralization and economic freedom. RoboSats solves the problem of KYC and loss of privacy that big Exchanges are forced to comply with. I believe that decentralizing the lightning nodes will enhance the robustness of the tool, allowing more users to join. I am excited to be part of this new phase of growth.",
"motto": "TheBigLake: The Lake of Economic Freedom.",
"color": "#000D28",
"established": "2023-12-30",
"nostrHexPubkey": "f2d4855df39a7db6196666e8469a07a131cddc08dcaa744a344343ffcf54a10c",
"contact": {
"email": "gabbygator184@proton.me",
"telegram": "gabbygator184",
@ -106,6 +65,7 @@
"matrix": "@gabbygator184:matrix.org",
"pgp": "/static/federation/pgp/EC4F94F629AA28242B54265F1ABE1CA3582A031A.asc",
"nostr": "npub17t2g2h0nnf7mvxtxvm5ydxs85ycumhqgmj48gj35gdplln655yxq68wj6f",
"website": "https://thebiglake.org/",
"fingerprint": "EC4F94F629AA28242B54265F1ABE1CA3582A031A"
},
"badges": {
@ -125,12 +85,12 @@
},
"mainnet": {
"onion": "http://4t4jxmivv6uqej6xzx2jx3fxh75gtt65v3szjoqmc4ugdlhipzdat6yd.onion",
"clearnet": "",
"clearnet": "https://unsafe.thebiglake.org",
"i2p": ""
},
"testnet": {
"onion": "http://ghbtv7lhoyhomyir4xvxaeyqgx4ylxksia343jaat3njqqlkqpdjqcyd.onion",
"clearnet": "",
"clearnet": "https://test.unsafe.thebiglake.org",
"i2p": ""
},
"mainnetNodesPubkeys": ["0385262f7e9e2eeeba1e7d6182a0efec98e79d01154b76189f3e0b88bcee279dd0"],
@ -139,17 +99,19 @@
"veneto": {
"longAlias": "BitcoinVeneto",
"shortAlias": "veneto",
"description": "Nati come gruppo di informatici con esperienze diverse, scoperti i bitcoin a fine 2013 ci siamo entusiasmati e dedicati al bitcoin, alla blockchain ed alle criptovalute in generale, in particolare aiutando, informando e seguendo nel percorso di alfabetizzazione nel mondo della valuta digitale tutte le Aziende ed i privati che negli ultimi anni ci hanno dato la loro fiducia.",
"motto": "Le Tue Guide NON Virtuali su Bitcoin, Blockchain e Crypto. In Veneto.",
"identifier": "bitcoinveneto",
"description": "Born as a group of computer scientists with different experiences, we discovered bitcoin at the end of 2013 and became enthusiastic and dedicated to bitcoin, blockchain and cryptocurrencies in general, in particular helping, informing and following all companies on the path to literacy in the world of digital currency. and the private individuals who have placed their trust in us in recent years.",
"motto": "Your NON-Virtual Guides on Bitcoin, Blockchain and Crypto.",
"color": "#000D27",
"established": "2024-02-24",
"nostrHexPubkey": "c8dc40a80bbb41fe7430fca9d0451b37a2341486ab65f890955528e4732da34a",
"contact": {
"email": "bitcoinveneto@proton.me",
"telegram": "BitcoinVeneto",
"simplex": "https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FSkIkI6EPd2D63F4xFKfHk7I1UGZVNn6k1QWZ5rcyr6w%3D%40smp9.simplex.im%2FczgLjsXvJhUg2w8fefNYP9yyqCBAcmuv%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAJaunNKTLjskkHsZ3xdt8KPlnr9FrZgNNohn1d4a3Igs%253D%26srv%3Djssqzccmrcws6bhmn77vgmhfjmhwlyr3u7puw4erkyoosywgl67slqqd.onion",
"pgp": "/static/federation/pgp/498E269DDDF63969A215FED32A2C489EAF23D549.asc",
"nostr": "npub1098av3sr5788gydhstmcxrccwch86m48qq3fjx78ec2xhlpl8kjqxcpkd7",
"website": "https://bitcoinveneto.crypto",
"website": "https://bitcoinveneto.org",
"fingerprint": "498E269DDDF63969A215FED32A2C489EAF23D549"
},
"badges": {
@ -169,7 +131,7 @@
},
"mainnet": {
"onion": "http://mmhaqzuirth5rx7gl24d4773lknltjhik57k7ahec5iefktezv4b3uid.onion",
"clearnet": "",
"clearnet": "https://unsafe.bitcoinveneto.org",
"i2p": ""
},
"testnet": {

View File

@ -15,10 +15,10 @@
"RoboSats information": "Informació de RoboSats",
"client for nerds": "client per nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "Més",
"Offers": "Ofertes",
"Order": "Ordre",
"Robot": "Robot",
"Settings": "Paràmetres",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Contracte",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "També pots afegir els teus caràcters aleatoris propis al token o",
"or visit the robot school for documentation.": "o visita l'escola Robot per més informació.",
"roll again": "rodar de nou",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Introdueix el teu token per reconstruir el teu robot i accedir a les seves operacions.",
"Paste token here": "Enganxa el token aquí",
"Recover": "Recuperar",
"Robot recovery": "Recuperació de Robots",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Ordre activa #{{orderID}}",
"Add Robot": "Afegir Robot",
"Add a new Robot": "Afegeix un nou Robot",
"Building...": "Construint...",
"Delete Garage": "Esborrar Garatge",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Última ordre #{{orderID}}",
"Logout": "Sortir",
"Looking for orders!": "Buscant ordres!",
"No existing orders found": "No s'han trobat ordres",
"Recovery": "Recuperació",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "La reutilització de la identitat de trading degrada la teva privadesa davant d'altres usuaris, coordinadors i observadors.",
"Robot Garage": "Garatge de Robots",
"Store your token safely": "Guarda el teu token de manera segura",
"Welcome back!": "Bentornat!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "Copiat!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Un Simple i Privat Exchange LN P2P",
"Create a new robot and learn to use RoboSats": "Crear un nou robot i aprendre a fer servir RoboSats",
"Fast Generate Robot": "Generar Robot ràpidament",
"Recover an existing robot using your token": "Recuperar un robot existent utilitzant el teu token",
"Recovery": "Recuperació",
"Start": "Començar",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connectant a TOR",
"Connection encrypted and anonymized using TOR.": "Connexió xifrada i anònima mitjançant TOR.",
"Not enough entropy, make it more complex": "Entropia insuficient, fes-ho més complex",
"The token is too short": "El token és massa curt",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Un Simple i Privat Exchange LN P2P",
"Create a new robot and learn to use RoboSats": "Crear un nou robot i aprendre a fer servir RoboSats",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "Recuperar un robot existent utilitzant el teu token",
"Start": "Començar",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connectant a TOR",
"Connection encrypted and anonymized using TOR.": "Connexió xifrada i anònima mitjançant TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "Això garanteix la màxima privadesa, però és possible que sentis que l'aplicació es comporta lenta. Si es perd la connexió, reinicia l'aplicació.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Connectat a la xarxa TOR",
"Connecting to TOR network": "Connectant a la xarxa TOR",
"Connection error": "Error de connexió",
"Initializing TOR daemon": "Inicialitzant TOR daemon",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "TOT",
"Buy": "Comprar",
"DESTINATION": "DESTÍ",
@ -101,7 +90,7 @@
"and use": "i fer servir",
"hosted by": "allotjat per",
"pay with": "pagar amb",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Afegir filtre",
"Amount": "Suma",
"An error occurred.": "Hi ha hagut un error.",
@ -136,6 +125,7 @@
"Premium": "Prima",
"Price": "Preu",
"Reorder column": "Reordenar columnes",
"Robot": "Robot",
"Sats now": "Sats ara",
"Select columns": "Selecciona columnes",
"Show all": "Mostrar totes",
@ -165,15 +155,15 @@
"starts with": "comença amb",
"true": "veritat",
"yes": "si",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accepta",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "En fer-ho, s'obtindran fitxes de mapes d'un proveïdor de tercers. Depenent de la configuració, la informació privada es pot filtrar a servidors fora de la federació RoboSats",
"Close": "Tancar",
"Download high resolution map?": "Descarregar el mapa d'alta resolució?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats mai et contactarà. Ni els desenvolupadors ni els coordinadors de RoboSats mai et preguntaran pel token del teu Robot.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "Pots trobar una descripció pas a pas dels intercanvis a ",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Els teus Sats et seran retornats. Qualsevol factura no assentada serà automàticament retornada encara que el coordinador desaparegui. Això és cert tant per fiances com pels col·laterals. De totes formes, des de que el venedor confirma haver rebut el fiat i el comprador rep els Sats, hi ha un temps d'aprox. 1 segon en que los fons podrien perdre's si el coordinador desaparegués. Assegura't de tenir suficient liquiditat entrant per evitar errors d'enrutament. Si tens algun problema, busca als canals públics de RoboSats o directament al teu coordinador fent servir algun dels mètodes llistats al seu perfil.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "El teu soci dintercanvi no coneixerà el destí del pagament LN. La permanència de les dades recollides pels coordinadors depèn de les seves polítiques de privacitat i dades. En cas de controvèrsia, un coordinador pot sol·licitar informació addicional. Els detalls d'aquest procés poden variar de coordinador a coordinador.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Tornar",
"Keys": "Claus",
"Learn how to verify": "Aprèn a verificar",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "La clau pública PGP de la teva contrapart. La fas servir per encriptar missatges que només ell pot llegir i verificar que és ell qui va signar els missatges que reps.",
"Your private key passphrase (keep secure!)": "La contrasenya de la teva clau privada (Mantenir segura!)",
"Your public key": "La teva clau pública",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... en algun indret de la Terra!",
"Client info": "Client info",
"Made with": "Fet amb",
"RoboSats client version": "Versió de client RoboSats",
"and": "i",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Comunitat",
"Follow RoboSats in Nostr": "Segueix Robosats a Nostr",
"Follow RoboSats in X": "Segueix Robosats a X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Proposa funcionalitats o notifica errors",
"We are abandoning Telegram! Our old TG groups": "Estem deixant Telegram! Els nostres grups antics de TG",
"X Official Account": "Compte oficial a X",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Obrint la passarel·la Nostr. Clau pública copiada!",
"24h contracted volume": "Volum contractat en 24h",
"24h non-KYC bitcoin premium": "Prima de bitcoin sense KYC en 24h",
@ -299,61 +289,66 @@
"Website": "Web",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntàriament per al desenvolupament",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Navegador",
"Enable": "Activar",
"Enable TG Notifications": "Activar Notificacions TG",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "Seràs dut a un xat amb el bot de Telegram de Robosats. Simplement prem Començar. Tingues en compte que si actives les notificaciones de Telegram reduiràs el teu anonimat.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Habilita els coordinadors de RoboSats",
"Exchange Summary": "Resum de l'Exchange",
"Online RoboSats coordinators": "Coordinadors RoboSats online",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Tria una ubicació",
"Save": "Guardar",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Tornar",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "Visitaràs la pàgina Learn RoboSats. Ha estat construïda per la comunitat i conté tutorials i documentació que t'ajudarà a aprendre como s'utilitza RoboSats i a entendre com funciona.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Generar Robot",
"Generate a robot avatar first. Then create your own order.": "Primer genera un avatar de robot. A continuació, crea la teva pròpia oferta.",
"You do not have a robot avatar": "No tens un avatar robot",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinadors que coneixen el teu robot:",
"Looking for your robot!": "Buscant el teu robot!",
"Your Robot": "El teu Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Introdueix el teu token per reconstruir el teu robot i accedir a les seves operacions.",
"Paste token here": "Enganxa el token aquí",
"Recover": "Recuperar",
"Robot recovery": "Recuperació de Robots",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "Guarda-ho!",
"Done": "Fet",
"Store your robot token": "Guarda el teu token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "Pot ser que necessitis recuperar el teu avatar robot al futur: fes còpia de seguretat del token. Pots simplement copiar-ho a una altra aplicació.",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Descarrega RoboSats {{coordinatorVersion}} APK de les versions de Github",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Descarrega RoboSats {{coordinatorString}} APK de les versions de Github",
"Go away!": "Marxar!",
"On Android RoboSats app ": "A l'aplicació d'Android RoboSats ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "Al navegador Tor, simplement actualitza la teva pestanya (fes clic aquí o prem Ctrl+Maj+R)",
"On remotely served browser client": "Al navegador del servidor remot",
"On your own soverign node": "Al teu propi node",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "El coordinador de RoboSats és a la versió {{coordinatorVersion}}, però la app del teu client és {{clientVersion}}. Aquesta discrepància de versió pot provocar una mala experiència d'usuari.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "El coordinador de RoboSats és a la versió {{coordinatorString}}, però la app del teu client és {{clientString}}. Aquesta discrepància de versió pot provocar una mala experiència d'usuari.",
"Update your RoboSats client": "Actualitza el teu client RoboSats",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Els coordinadors de les operacions p2p són la font de confiança, proporcionen la infraestructura, la tarifació i intervindran en cas de disputa. Assegureu-vos que investigueu i confieu en \"{{coordinator.name}}\" abans de bloquejar la vostra fiança. Un coordinador p2p maliciós pot trobar maneres de robar-te.",
"I understand": "Ho entenc",
"Warning": "Avís",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinadors per pàgina:",
"Enabled": "Habilitat",
"No coordinators found.": "No s'han trobat coordinadors.",
"Up": "Pujar",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "El client RoboSats és servit pel teu propi node, gaudeixes de la major seguretat i privacitat.",
"You are self-hosting RoboSats": "Estàs hostejant RoboSats",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "No estàs utilitzant RoboSats de forma privada",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "Des de",
"to": "fins a",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " amb descompte del {{discount}}%",
" at a {{premium}}% premium": " amb una prima del {{premium}}%",
" at market price": " a preu de mercat",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Reps aprox. {{swapSats}} LN Sats (les taxes poden variar)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Envies aprox. {{swapSats}} LN Sats (les taxes poden variar)",
"Your order fixed exchange rate": "La tasa de canvi fixa de la teva ordre",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Amfitrió de l'ordre",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "El proveïdor de la infraestructura LN i comunicacions. L'amfitrió serà l'encarregat de donar suport i resoldre disputes. LEs comissions de les transaccions són fixades per l'amfitrió. Assegureu-vos de seleccionar només els amfitrions en què confieu!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "L'enrutament Lightning ha fallat",
"New chat message": "Nou missatge al xat",
"Order chat is open": "S'ha obert el xat",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 Caducat!",
"🙌 Funished!": "🙌 Finalitzat!",
"🥳 Taken!": "🥳 Presa!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Suma {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "Prenent aquesta ordre corres el risc de perdre el temps. Si el creador no procedeix a temps, se't compensarà en Sats amb el 50% de la fiança del creador.",
"Enter amount of fiat to exchange for bitcoin": "Introdueix la suma de fiat a canviar per bitcoin",
@ -451,7 +446,7 @@
"You must specify an amount first": "Primer has d'especificar la suma",
"You will receive {{satoshis}} Sats (Approx)": "Tu rebràs {{satoshis}} Sats (Approx)",
"You will send {{satoshis}} Sats (Approx)": "Tu enviaràs {{satoshis}} Sats (Approx)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Mètodes de pagament acceptats",
"Amount of Satoshis": "Quantitat de Sats",
"Deposit timer": "Per a dipositar",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "Tu envies via Lightning {{amount}} Sats (Approx)",
"You send via {{method}} {{amount}}": "Envies via {{method}} {{amount}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Prima: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Retirar",
"Claim Sats!": "Reclamar Sats!",
@ -494,25 +489,29 @@
"Your current order": "La teva ordre actual",
"Your last order #{{orderID}}": "La teva última ordre #{{orderID}}",
"finished order": "Ordre finalitzada",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Fosc",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Clar",
"Mainnet": "Mainnet",
"Swaps": "Intercanvis",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Connectat a la xarxa TOR",
"Connecting to TOR network": "Connectant a la xarxa TOR",
"Connection error": "Error de connexió",
"Initializing TOR daemon": "Inicialitzant TOR daemon",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Cancel·lar",
"Cancel order and unlock bond instantly": "Cancel·la l'ordre i desbloqueja la fiança a l'instant",
"Collaborative Cancel": "Cancel·lació col·laborativa",
"Unilateral cancelation (bond at risk!)": "Cancel·lació unilateral (Fiança en risc!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "Has sol·licitat cancel·lar col·laborativament",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} sol·licita cancel·lar col·laborativament",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Compra",
"Completed in": "Completat en",
"Contract exchange rate": "Taxa de canvi del contracte",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "Veure bitlleteres compatibles",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "Cancel·lar l'ordre?",
"Confirm Cancel": "Confirmar cancel·lació",
"If the order is cancelled now you will lose your bond.": "Si cancel·les ara l'ordre perdràs la teva fiança.",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Acceptar cancel·lació",
"Ask for Cancel": "Sol·licitar cancel·lació",
"Collaborative cancel the order?": "Cancel·lar l'ordre col·laborativament?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "Donat que el col·lateral està bloquejat, l'ordre només pot cancel·lar-se si tant creador com prenendor ho acorden.",
"Your peer has asked for cancellation": "El teu company ha demanat la cancel·lació",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Obrir disputa",
"Disagree": "Tornar",
"Do you want to open a dispute?": "Vols obrir una disputa?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Assegura't d' EXPORTAR el registre del xat. Els administradors poden demanar-te elregistre del xat en cas de discrepàncies. És la teva responsabilitat proveir-ho.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "L'equip de RoboSats examinarà les declaracions i evidències presentades. Com l'equip no pot llegir el xat necessites escriure una declaració completa i exhaustiva. És millor donar un mètode de contacte d'usar i llençar amb la teva declaració. Els Sats del col·lateral seran enviats al guanyador de la disputa, mientres que el perdedor perderà la seva fiança.",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Confirmar",
"Confirm you received {{amount}} {{currencyCode}}?": "Confirmes que has rebut {{amount}} {{currencyCode}}?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "En confirmar que has rebut {{amount}} {{currencyCode}} finalitzarà la transacció. Els satoshis del dipòsit es lliuraran al comprador. Confirmar només després que {{amount}} {{currencyCode}} hagin arribat al teu compte. Tingues en compte que si has rebut el pagament i no fas clic a confirmar, corres el risc de perdre la teva fiança.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confirmes que has enviat {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confirmant que has enviat {{amount}} {{currencyCode}} permetràs al teu company finalitzar l'operació. Si encara no ho has enviat i malgrat això procedeixes a confirmar falsament, t'arrisques a perdre la teva fiança.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "LLEGEIX. En cas que el pagament al venedor s'hagi bloquejat i sigui absolutament impossible acabar l'intercanvi, podeu revertir la vostra confirmació de \"Fiat enviat\". Fes-ho només si tu i el venedor ja heu acordat pel xat procedir a una cancel·lació col·laborativa. Després de confirmar, el botó \"Cancel·lar col·laborativament\" tornarà a ser visible. Només feu clic en aquest botó si sabeu el que esteu fent. Es desaconsella als usuaris novells de RoboSats realitzar aquesta acció! Assegureu-vos al 100% que el pagament ha fallat i que l'import és al vostre compte.",
"Revert the confirmation of fiat sent?": "Revertir la confirmació del FIAT enviat?",
"Wait ({{time}})": "Espera ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Import no bloquejat encara, comprova el teu moneder WebLN.",
"Invoice not received, please check your WebLN wallet.": "No s'ha rebut la factura, fes un cop d'ull a la teva wallet WebLN.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "Ara pots tancar el popup de la teva wallet WebLN.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Auditar",
"Export": "Exportar",
"Save full log as a JSON file (messages and credentials)": "Guardar el log complet com JSON (credencials i missatges)",
"Verify your privacy": "Verifica la teva privacitat",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...esperant",
"Activate slow mode (use it when the connection is slow)": "Activar mode lent (utilitza'l quan la connexió sigui lenta)",
"Peer": "Ell",
"You": "Tu",
"connected": "connectat",
"disconnected": "desconnectat",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Connectant...",
"Send": "Enviar",
"Type a message": "Escriu un missatge",
"Waiting for peer public key...": "Esperant la clau pública...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Adjuntar registres de xat",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Adjuntar registres de xat ajuda el procés de resolució de disputes i afegeix transparència. Tanmateix, pot comprometre la vostra privacitat.",
"Submit dispute statement": "Presentar declaració",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Opcions avançades",
"Invoice to wrap": "Factura a ofuscar",
"Payout Lightning Invoice": "Factura Lightning",
@ -606,14 +605,14 @@
"Use Lnproxy": "Utilitza Lnproxy",
"Wrap": "Ofuscar",
"Wrapped invoice": "Factura ofuscada",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Direcció Bitcoin",
"Final amount you will receive": "Quantitat final que rebràs",
"Invalid": "No vàlid",
"Mining Fee": "Comissió Minera",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "El coordinador de RoboSats farà un intercanvi i enviarà els Sats a la vostra adreça onchain.",
"Swap fee": "Comissió del swap",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Confirmar {{amount}} {{currencyCode}} rebut",
"Confirm {{amount}} {{currencyCode}} sent": "Confirmar {{amount}} {{currencyCode}} enviat",
"Open Dispute": "Obrir Disputa",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "Digues hola! Sigues clar i concís. Escriu-li com pot enviarte {{amount}} {{currencyCode}}.",
"To open a dispute you need to wait": "Per obrir una disputa cal esperar",
"Wait for the seller to confirm he has received the payment.": "Espera a que el vendedor confirmi que ha rebut el pagament.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Si us plau, envia la teva declaració. Sigues clars i concís sobre el que va ocórrer i aportar les proves necessàries. Has de proporcionar un mètode de contacte: correu electrònic d'un sòl ús, enllaç d'incògnit de SimpleX o el telegram ID (assegureu-vos de crear un nom d'usuari que es pugui cercar) per fer el seguiment amb el solucionador de disputes (el vostre amfitrió/coordinador). Els litigis es resolen amb discreció pels robots reals (també coneguts com a humans), així que sigues el més col·laborador possible per assegurar un resultat just.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Desgraciadament, has perdut la disputa. Si creus que això és un error, pots sol·licitar reobrir el cas contactant amb el teu coordinador. Si creus que el teu coordinador és injust, si us plau, omple una reclamació via correu electrònic a robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Si us plau, guarda la informació necessària per identificar la teva ordre i els teus pagaments: ID de l'ordre; resums de pagament dels bons o fiança (consulteu a la cartera LN); quantitat exacta de satoshis; i sobrenom de robot. Hauràs d'identificar-te utilitzant aquesta informació si contactes amb el teu coordinador comercial.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "Estem esperant la teva declaració de contrapartida comercial. Si tens dubtes sobre l'estat de la disputa o vols afegir més informació, contacta amb el teu coordinador (l'amfitrió) a través d'un dels seus mètodes de contacte.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "S'han rebut totes dues declaracions, a l'espera que el personal resolgui el conflicte. Si tens dubtes sobre l'estat de la disputa o vols afegir més informació, contacta amb el teu coordinador (l'amfitrió) a través d'un dels seus mètodes de contacte. Si no has proporcionat un mètode de contacte o no estàs segur de si l'has escrit correctament, escriviu el vostre coordinador immediatament.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "Si us plau, guarda l'informació necessària per identificar la teva ordre i pagaments: ID de l'ordre; claus del pagament de la fiança o el col·lateral (comprova la teva cartera Lightning); quantitat exacta de Sats; i nom del Robot. Tindràs que identificar-te com l'usuari involucrat en aquest intercanvi per email (o altre mètode de contacte).",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "Pots retirar la quantitat de la resolució de la disputa (fiança i col·lateral) des de les recompenses del teu perfil. Si creus que l'equip pot fer alguna cosa més, no dubtis a contactar amb robosats@protonmail.com (o a través del mètode de contacte d'usar i llençar que vas especificar).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Espera un moment. Si el venedor no diposita, recuperaràs la teva fiança automàticament. A més, rebràs una compensació (comprova les recompenses al teu perfil).",
"We are waiting for the seller to lock the trade amount.": "Esperant a que el venedor bloquegi el col·lateral.",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Renovar Ordre",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "Copiar al portapapers",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "Això és una factura retinguda, els Sats es bloquegen a la teva cartera. Només es cobrarà si cancel·les o si perds una disputa.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "Això és una factura retinguda, els Sats es bloquegen a la teva cartera. Serà alliberada al comprador al confirmar que has rebut {{currencyCode}}.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Activar Ordre",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "La teva ordre pública va ser pausada. Ara mateix, l'ordre no pot ser vista ni presa per altres robots. Pots tornar a activarla quan desitgis.",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "Abans de deixar-te enviar {{amountFiat}} {{currencyCode}}, volem assegurar-nos que pots rebre BTC.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Espera un moment. Si el comprador no coopera, se't retornarà el col·lateral i la teva fiança automàticament. A més, rebràs una compensació (comprova les recompenses al teu perfil).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "Estem esperant a que el comprador enviï una factura Lightning. Quan ho faci, podràs comunicar-li directament els detalls del pagament.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "Entre les ordres públiques de {{currencyCode}} (més alt, més barat)",
"If the order expires untaken, your bond will return to you (no action needed).": "Si la teva oferta expira sense ser presa, la teva fiança serà desbloquejada a la teva cartera automàticament.",
"Pause the public order": "Pausar l'ordre pública",
"Premium rank": "Percentil de la prima",
"Public orders for {{currencyCode}}": "Ordres públiques per {{currencyCode}}",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Motiu del fracàs:",
"Next attempt in": "Proper intent en",
"Retrying!": "Reintentant!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats intentarà pagar la teva factura 3 cops cada 1 minut. Si segueix fallant, podràs presentar una nova factura. Comprova si tens suficient liquiditat entrant. Recorda que els nodes de Lightning han d'estar en línia per poder rebre pagaments.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "La teva factura ha caducat o s'han fet més de 3 intents de pagament. Envia una nova factura.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats està intentant pagar la teva factura de Lightning. Recorda que els nodes Lightning han d'estar en línia per rebre pagaments.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Renovar",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats millora amb més usuaris i liquiditat. Ensenya-li RoboSats a un amic bitcoiner!",
"Sending coins to": "Enviant monedes a",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "Gràcies! RoboSats també t'estima",
"What do you think your order host \"{{coordinator}}\"?": "Què en penses del teu amfitrió \"{{coordinator}}\"?",
"Your TXID": "El teu TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Si us plau, espera a que el prenedor bloquegi la seva fiança. Si no ho fa a temps, l'ordre serà pública de nou.",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "Ha arribat un tècnic de robots!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "Porto els meus propis robots, són aquí. (Arrossegar i deixar anar workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "Per primer cop aquí. Generar un nou robot de garatge i el token de robot estès (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Personalitza l'àrea de visió",
"Freeze viewports": "Congela l'àrea de visió",
"unsafe_alert": "Per protegir les vostres dades i la vostra privadesa utilitzeu <1>Tor Browser</1> i visiteu una federació allotjada a <3>Onion</3>. O hostatgeu el vostre propi <5>Client.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "RoboSats information",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "More",
"Offers": "Offers",
"Order": "Nabídka",
"Robot": "Robot",
"Settings": "Settings",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Průvodce obchodem",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "You can also add your own random characters into the token or",
"or visit the robot school for documentation.": "or visit the robot school for documentation.",
"roll again": "roll again",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Active order #{{orderID}}",
"Add Robot": "Add Robot",
"Add a new Robot": "Add a new Robot",
"Building...": "Building...",
"Delete Garage": "Delete Garage",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Last order #{{orderID}}",
"Logout": "Logout",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "Recovery",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "Reusing trading identity degrades your privacy against other users, coordinators and observers.",
"Robot Garage": "Robot Garage",
"Store your token safely": "Ulož si svůj token bezpečně",
"Welcome back!": "Welcome back!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "Zkopirováno!!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Robot": "Fast Generate Robot",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Recovery": "Recovery",
"Start": "Start",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"Not enough entropy, make it more complex": "Not enough entropy, make it more complex",
"The token is too short": "The token is too short",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Start": "Start",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "VŠE",
"Buy": "Nákup",
"DESTINATION": "DESTINATION",
@ -101,7 +90,7 @@
"and use": "použít",
"hosted by": "hosted by",
"pay with": "pay with",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Přidat filter",
"Amount": "Částka",
"An error occurred.": "Došlo k chybě.",
@ -136,6 +125,7 @@
"Premium": "Přirážka",
"Price": "Cena",
"Reorder column": "Změna pořadí sloupce",
"Robot": "Robot",
"Sats now": "Sats now",
"Select columns": "Vybrat sloupce",
"Show all": "Ukázat vše",
@ -165,15 +155,15 @@
"starts with": "začína s",
"true": "správný",
"yes": "ano",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.",
"Close": "Zavřít",
"Download high resolution map?": "Download high resolution map?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "Popis obchodu krok za krokem najdeš na",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Jít zpět",
"Keys": "Klíče",
"Learn how to verify": "Naučit se, jak ověřovat",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "Veřejný PGP klíč protistrany. Používáš jej k šifrování zpráv, které může číst pouze on, a k ověření, zda protistrana podepsala příchozí zprávy.",
"Your private key passphrase (keep secure!)": "Tvůj soukromí klíč a passphrase (drž v bezpečí!)",
"Your public key": "Tvůj veřejný klíč",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... někde na Zemi!",
"Client info": "Client info",
"Made with": "Vytvořeno s",
"RoboSats client version": "RoboSats client version",
"and": "a",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Komunity",
"Follow RoboSats in Nostr": "Follow RoboSats in Nostr",
"Follow RoboSats in X": "Follow RoboSats in X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Našel jsi bug nebo novou funkci? Napiš nám ",
"We are abandoning Telegram! Our old TG groups": "We are abandoning Telegram! Our old TG groups",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "Zobchodované množství za 24h",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Browser",
"Enable": "Povolit",
"Enable TG Notifications": "Povolit TG notifikace",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "Budeš přesměrován do chatu s RoboSats telegram botem. Jednoduše otevři chat a zmáčkni Start. Měj na paměti, že povolením telegram notifikací máš nížší úroveň anonymity.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Choose a location",
"Save": "Save",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Zpět",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "Chystáš se navštívit výukovou stránku RoboSats. Stránka obsahuje tutoriály a dokumentaci, které ti pomohou pochopit jak funguje RoboSats.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Generovat Robota",
"Generate a robot avatar first. Then create your own order.": "Generate a robot avatar first. Then create your own order.",
"You do not have a robot avatar": "Nemáš robota a avatar",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Your Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "Zálohuj to!",
"Done": "Hotovo",
"Store your robot token": "Ulož si svůj robot token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "Ulož si bezpečně svůj token jednoduše zkopírováním do jiné aplikace. V budoucnu ho možná budeš potřebovat v případě obnovy robota.",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Download RoboSats {{coordinatorVersion}} APK from Github releases",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Download RoboSats {{coordinatorString}} APK from Github releases",
"Go away!": "Go away!",
"On Android RoboSats app ": "On Android RoboSats app ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)",
"On remotely served browser client": "On remotely served browser client",
"On your own soverign node": "On your own soverign node",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.",
"Update your RoboSats client": "Update your RoboSats client",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.",
"You are self-hosting RoboSats": "You are self-hosting RoboSats",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "Nepoužíváš Robosats bezpečně.",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "Od",
"to": "do",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " za {{discount}}% slevu",
" at a {{premium}}% premium": " za {{premium}}% přirážku",
" at market price": " at market price",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Pevný směnný kurz tvé nabídky",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "Lightning routing failed",
"New chat message": "New chat message",
"Order chat is open": "Order chat is open",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 Expired!",
"🙌 Funished!": "🙌 Funished!",
"🥳 Taken!": "🥳 Taken!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Částka {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "Příjmutím této nabídky riskuješ ztrátu času. Pokud protistrana nedorazí včas, získáš kompezaci v podobě 50% tvůrcovi kauce.",
"Enter amount of fiat to exchange for bitcoin": "Zadej částku fiat, kterou chceš vyměnit za bitcoin. ",
@ -451,7 +446,7 @@
"You must specify an amount first": "Nejprve je třeba zadat částku",
"You will receive {{satoshis}} Sats (Approx)": "You will receive {{satoshis}} Sats (Approx)",
"You will send {{satoshis}} Sats (Approx)": "You will send {{satoshis}} Sats (Approx)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Akceptované platební metody",
"Amount of Satoshis": "Částka Satoshi",
"Deposit timer": "Časovač vkladu",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "You send via Lightning {{amount}} Sats (Approx)",
"You send via {{method}} {{amount}}": "You send via {{method}} {{amount}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Přirážka: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Vybrat",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "Tvá aktuální nabídka",
"Your last order #{{orderID}}": "Tvá poslední nabídka #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Dark",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Light",
"Mainnet": "Mainnet",
"Swaps": "Swaps",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Zrušit",
"Cancel order and unlock bond instantly": "Cancel order and unlock bond instantly",
"Collaborative Cancel": "Oboustrané zrušení",
"Unilateral cancelation (bond at risk!)": "Unilateral cancelation (bond at risk!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "Žádaš o oboustarné zrušení obchodu",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} žáda o oboustrané zrušení obchodu",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Kupující",
"Completed in": "Completed in",
"Contract exchange rate": "Contract exchange rate",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSatů",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Satů ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Satů ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "Robrazit kompatibilní peněženky",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "Zrušit objendávku?",
"Confirm Cancel": "Potvrdit zrušení",
"If the order is cancelled now you will lose your bond.": "Pokud bude objednávka nyní zrušena, tvoje kauce propadne.",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Accept Cancelation",
"Ask for Cancel": "Požádat o zrušení",
"Collaborative cancel the order?": "Oboustraně zrušit obchod?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "Satoshi jsou v úschově. Objednávku lze zrušit pouze v případě, že se na zrušení dohodnou jak tvůrce, tak přijemce.",
"Your peer has asked for cancellation": "Your peer has asked for cancellation",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Souhlasit a otevřít spor",
"Disagree": "Nesouhlasit",
"Do you want to open a dispute?": "Chceš otevřít spor?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Nezapomeň EXPORTOVAT log chatu. Personál si může vyžádat exportovaný log chatu ve formátu JSON, aby mohl vyřešit nesrovnalosti. Je tvou odpovědností jej uložit.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "Personál RoboSats prověří předložená vyjádření a důkazy. Musíš vytvořit ucelený důkazní materiál, protože personál nemůže číst chat. Nejlépe spolu s výpovědí uvést jednorázový kontakt. Satoshi v úschově budou zaslány vítězi sporu, zatímco poražený ve sporu přijde o kauci.",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Potvrdit",
"Confirm you received {{amount}} {{currencyCode}}?": "Potvrdit obdržení {{amount}} {{currencyCode}}?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confirm you sent {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.",
"Revert the confirmation of fiat sent?": "Revert the confirmation of fiat sent?",
"Wait ({{time}})": "Wait ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Amount not yet locked, please check your WebLN wallet.",
"Invoice not received, please check your WebLN wallet.": "Invoice not received, please check your WebLN wallet.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "You can close now your WebLN wallet popup.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Audit PGP",
"Export": "Exportovat",
"Save full log as a JSON file (messages and credentials)": "Uložit celý log jako soubor JSON (zprávy a údaje))",
"Verify your privacy": "Ověř svou ochranu soukromí",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...waiting",
"Activate slow mode (use it when the connection is slow)": "Activate slow mode (use it when the connection is slow)",
"Peer": "Protistrana",
"You": "Ty",
"connected": "připojen",
"disconnected": "odpojen",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Připojování...",
"Send": "Odeslat",
"Type a message": "Napiš zprávu",
"Waiting for peer public key...": "Waiting for peer public key...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Attach chat logs",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.",
"Submit dispute statement": "Odeslat vyjádření",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Advanced options",
"Invoice to wrap": "Invoice to wrap",
"Payout Lightning Invoice": "Vyplatit Lightning invoice",
@ -606,14 +605,14 @@
"Use Lnproxy": "Use Lnproxy",
"Wrap": "Wrap",
"Wrapped invoice": "Wrapped invoice",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Bitcoin adresa",
"Final amount you will receive": "Konečná částka, kterou získáš",
"Invalid": "Neplatné",
"Mining Fee": "Těžební poplatek",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "RoboSats coordinator will do a swap and send the Sats to your onchain address.",
"Swap fee": "Swap poplatek",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Potvrdit příjmutí {{amount}} {{currencyCode}}",
"Confirm {{amount}} {{currencyCode}} sent": "Potvrdit odeslání {{amount}} {{currencyCode}}",
"Open Dispute": "Otevřít spor",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "Pozdrav! Buď vstřícný a stručný. Dej mu vědět, jak ti poslat {{amount}} {{currencyCode}}.",
"To open a dispute you need to wait": "To open a dispute you need to wait",
"Wait for the seller to confirm he has received the payment.": "Počkej na potvzení, že prodavající obdržel platbu.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": " Uložte si prosím informace potřebné k identifikaci tvé nabídky a tvých plateb: číslo nabídky; hash platby kauce nebo úschovy (zkontroluj si lightning peněženku); přesná částka satoshi; a robot přezdívku. V komunikaci emailem(nebo jinak) se představíš jako zúčastněna strana.",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "Satoshi z vyřešeného sporů (z úschovy a kauce) si můžeš vybrat z odměn ve svém profilu. Pokud ti personál může s něčím pomoci, neváhej a kontaktuj nás na robosats@protonmail.com (nebo jiný způsob komunikace).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Vydrž chvíli. Pokud prodavající neprovede vklad, kauce se ti automaticky vrátí. Kromě toho obdržíš kompenzaci (zkontroluj odměny ve svém profilu).",
"We are waiting for the seller to lock the trade amount.": "Čekáme, až prodavající uzamkne satoshi .",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Opakovat nabídku",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "Zkopírovat do schránky",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "Jedná se o hodl invoice, která ti zamrzne v peněžence. Bude vypořádán pouze v případě zrušení nebo prohry sporu.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "Jedná se o hodl invoice, která ti zamrzne v peněžence. Bude vypořadána ke kupujícímu jakmile potvrdíš příjem {{currencyCode}}.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Zrušit pozastavení nabídky",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "Tvá veřejná nabídka je pozastavena. V tuto chvíli ji nemohou vidět ani přijmout jiní roboti. Pozastavení můžeš kdykoliv zrušit.",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "Předtím než tě necháme odeslat {{amountFiat}} {{currencyCode}}, chceme se nechat ujistit, že jsi schopen příjmout BTC.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Vydrž chvíli. Pokud kupující nespolupracuje, automaticky získáš zpět svojí kauci a předmět obchodu satoshi. Kromě toho obdržíš kompenzaci (zkontroluj odměny ve svém profilu).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "Čekáme, až kupující vloží lightning invoice. Jakmile tak učiní, budeš moct se s ním moct dohodnout platbě.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "Mezi veřejnými {{currencyCode}} nabídkami (vyšší je levnější)",
"If the order expires untaken, your bond will return to you (no action needed).": "Pokud nabídka vyprší nepříjmuta, tak kauce se ti vrátí (není potřeba žádné akce).",
"Pause the public order": "Pozastavit zveřejnění nabídky",
"Premium rank": "Úroveň přirážky",
"Public orders for {{currencyCode}}": "Veřejné nabídky pro {{currencyCode}}",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Důvod selhání:",
"Next attempt in": "Další pokus za",
"Retrying!": "Opakování pokusu!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats se pokusí zaplatit invoice třikrát s minutivými pauzami. V případě neúspěchu bude třeba nahrát nový invoice. Zkontroluj, zda máš dostatek inbound likvidity. Nezapomeň, že lightning nody musí být online, aby mohl přijímat platby.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "Tvůj invoice vypršel nebo selhali pokusy o 3 platby. Nahraj nový invoice.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats se snaží zaplatit tvůj lightning invoice. Nezapomeň, že lightning nody musí být online, aby mohl přijímat platby.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Renew",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats bude lepší s větší likviditou a uživateli. Pověz svým přátelům o Robosats!",
"Sending coins to": "Sending coins to",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "Tvé TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Vyčkej, až příjemce uzamkne kauci. Pokud příjemce neuzamkne kauci včas, nabídka se znovu zveřejní.",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "A robot technician has arrived!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "I bring my own robots, here they are. (Drag and drop workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "My first time here. Generate a new Robot Garage and extended robot token (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Customize viewports",
"Freeze viewports": "Freeze viewports",
"unsafe_alert": "To protect your data and privacy use<1>Tor Browser</1> and visit a federation hosted <3>Onion</3> site. Or host your own <5>Client.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "RoboSats information",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "More",
"Offers": "Offers",
"Order": "Order",
"Robot": "Roboter",
"Settings": "Settings",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Vertrag",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "You can also add your own random characters into the token or",
"or visit the robot school for documentation.": "or visit the robot school for documentation.",
"roll again": "roll again",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Active order #{{orderID}}",
"Add Robot": "Add Robot",
"Add a new Robot": "Add a new Robot",
"Building...": "Building...",
"Delete Garage": "Delete Garage",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Last order #{{orderID}}",
"Logout": "Logout",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "Recovery",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "Reusing trading identity degrades your privacy against other users, coordinators and observers.",
"Robot Garage": "Robot Garage",
"Store your token safely": "Verwahre deinen Token sicher",
"Welcome back!": "Welcome back!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "Kopiert!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Robot": "Fast Generate Robot",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Recovery": "Recovery",
"Start": "Start",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"Not enough entropy, make it more complex": "Not enough entropy, make it more complex",
"The token is too short": "The token is too short",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Start": "Start",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "ALLE",
"Buy": "Kaufen",
"DESTINATION": "DESTINATION",
@ -101,7 +90,7 @@
"and use": "und verwende",
"hosted by": "hosted by",
"pay with": "pay with",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Add filter",
"Amount": "Menge",
"An error occurred.": "An error occurred.",
@ -136,6 +125,7 @@
"Premium": "Aufschlag",
"Price": "Preis",
"Reorder column": "Reorder column",
"Robot": "Roboter",
"Sats now": "Sats now",
"Select columns": "Select columns",
"Show all": "Show all",
@ -165,15 +155,15 @@
"starts with": "starts with",
"true": "true",
"yes": "yes",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.",
"Close": "Schließen",
"Download high resolution map?": "Download high resolution map?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "Du findest eine Schritt-für-Schritt-Erklärung des Handelablaufs hier ",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Zurück",
"Keys": "Schlüssel",
"Learn how to verify": "Learn how to verify",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "Der öffentliche PGP-Schlüssel deines Chatpartners. Du verwendest ihn um Nachrichten zu verschlüsseln, die nur er lesen kann und um zu überprüfen, ob dein Gegenüber die eingehenden Nachrichten signiert hat.",
"Your private key passphrase (keep secure!)": "Deine Passphrase für den privaten Schlüssel (sicher aufbewahren!)",
"Your public key": "Dein öffentlicher Schlüssel",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... irgendwo auf der Erde!",
"Client info": "Client info",
"Made with": "Gemacht mit",
"RoboSats client version": "RoboSats client version",
"and": "und",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Community",
"Follow RoboSats in Nostr": "Follow RoboSats in Nostr",
"Follow RoboSats in X": "Follow RoboSats in X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Erzähle uns von neuen Funktionen oder einem Fehler",
"We are abandoning Telegram! Our old TG groups": "We are abandoning Telegram! Our old TG groups",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "24h Handelsvolumen",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Browser",
"Enable": "Aktivieren",
"Enable TG Notifications": "Aktiviere TG-Benachrichtigungen",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "Du wirst zu einem Chat mit dem RoboSats-Telegram-Bot weitergeleitet. Öffne einfach den Chat und drücke auf Start. Beachte, dass du deine Anonymität verringern könntest, wenn du Telegram-Benachrichtigungen aktivierst.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Choose a location",
"Save": "Save",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Zurück",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "Du bist dabei die Website 'lerne RoboSats kennen' zu besuchen. Hier findest du Tutorials und Dokumentationen, die dir helfen RoboSats zu benutzen und zu verstehen wie es funktioniert.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Roboter generieren",
"Generate a robot avatar first. Then create your own order.": "Generate a robot avatar first. Then create your own order.",
"You do not have a robot avatar": "Du hast keinen Roboter-Avatar",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Your Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "Speicher ihn ab!",
"Done": "Fertig",
"Store your robot token": "Speicher Roboter-Token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "Vielleicht musst du deinen Roboter-Avatar in Zukunft wiederherstellen: Bewahre ihn sicher auf. Du kannst ihn einfach in eine andere Anwendung kopieren.",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Download RoboSats {{coordinatorVersion}} APK from Github releases",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Download RoboSats {{coordinatorString}} APK from Github releases",
"Go away!": "Go away!",
"On Android RoboSats app ": "On Android RoboSats app ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)",
"On remotely served browser client": "On remotely served browser client",
"On your own soverign node": "On your own soverign node",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.",
"Update your RoboSats client": "Update your RoboSats client",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.",
"You are self-hosting RoboSats": "You are self-hosting RoboSats",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "Du nutzt RoboSats nicht privat",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "Von",
"to": "bis",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " mit einem {{discount}}% Rabatt",
" at a {{premium}}% premium": " mit einem {{premium}}% Aufschlag",
" at market price": " at market price",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Dein fixierter Order-Kurs",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "Lightning routing failed",
"New chat message": "New chat message",
"Order chat is open": "Order chat is open",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 Expired!",
"🙌 Funished!": "🙌 Funished!",
"🥳 Taken!": "🥳 Taken!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Betrag {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "Wenn du diese Order annimmst, riskierst du, deine Zeit zu verschwenden. Wenn der Maker nicht rechtzeitig handelt, erhältst du eine Entschädigung in Satoshis in Höhe von 50 % der Maker-Kaution.",
"Enter amount of fiat to exchange for bitcoin": "Fiat-Betrag für den Umtausch in Bitcoin eingeben",
@ -451,7 +446,7 @@
"You must specify an amount first": "Du musst zuerst einen Betrag angeben",
"You will receive {{satoshis}} Sats (Approx)": "You will receive {{satoshis}} Sats (Approx)",
"You will send {{satoshis}} Sats (Approx)": "You will send {{satoshis}} Sats (Approx)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Akzeptierte Zahlungsweisen",
"Amount of Satoshis": "Anzahl Satoshis",
"Deposit timer": "Einzahlungstimer",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "You send via Lightning {{amount}} Sats (Approx)",
"You send via {{method}} {{amount}}": "You send via {{method}} {{amount}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Aufschlag: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Erhalten",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "Deine aktuelle Order",
"Your last order #{{orderID}}": "Deine letzte Order #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Dark",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Light",
"Mainnet": "Mainnet",
"Swaps": "Swaps",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Abbrechen",
"Cancel order and unlock bond instantly": "Cancel order and unlock bond instantly",
"Collaborative Cancel": "Gemeinsamer Abbruch",
"Unilateral cancelation (bond at risk!)": "Unilateral cancelation (bond at risk!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "Du hast um einen gemeinsamen Abbruch gebeten",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} bittet um gemeinsamen Abbruch",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Käufer",
"Completed in": "Completed in",
"Contract exchange rate": "Contract exchange rate",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "Kompatible Wallets ansehen",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "Order abbrechen?",
"Confirm Cancel": "Abbruch bestätigen",
"If the order is cancelled now you will lose your bond.": "Wenn die Order jetzt storniert wird, verlierst du deine Kaution.",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Accept Cancelation",
"Ask for Cancel": "Bitte um Abbruch",
"Collaborative cancel the order?": "Order gemeinsam abbrechen?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "Der Trade wurde veröffentlicht. Die Order kann nur storniert werden, wenn Maker und Taker der Stornierung gemeinsam zustimmen.",
"Your peer has asked for cancellation": "Your peer has asked for cancellation",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Akzeptieren und Fall eröffnen",
"Disagree": "Ablehnen",
"Do you want to open a dispute?": "Möchtest du einen Fall eröffnen?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "Das RoboSats-Team wird die Aussagen und Beweise prüfen. Du musst die vollständige Situation erklären, wir können den Chat nicht sehen. Benutze am besten Wegwerf-Kontakt-Infos. Die hinterlegten Satoshis gehen an den Fall-Gewinner, der Verlierer verliert seine Kaution.",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Bestätigen",
"Confirm you received {{amount}} {{currencyCode}}?": "Bestätige den Erhalt von {{amount}} {{currencyCode}}",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confirm you sent {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.",
"Revert the confirmation of fiat sent?": "Revert the confirmation of fiat sent?",
"Wait ({{time}})": "Wait ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Amount not yet locked, please check your WebLN wallet.",
"Invoice not received, please check your WebLN wallet.": "Invoice not received, please check your WebLN wallet.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "You can close now your WebLN wallet popup.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Audit PGP",
"Export": "Exportieren",
"Save full log as a JSON file (messages and credentials)": "Vollständiges Protokoll als JSON-Datei speichern ( Nachrichten und Anmeldeinformationen)",
"Verify your privacy": "Überprüfe deine Privatsphäre",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...waiting",
"Activate slow mode (use it when the connection is slow)": "Activate slow mode (use it when the connection is slow)",
"Peer": "Partner",
"You": "Du",
"connected": "verbunden",
"disconnected": "getrennt",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Verdinden...",
"Send": "Senden",
"Type a message": "Schreibe eine Nachricht",
"Waiting for peer public key...": "Waiting for peer public key...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Attach chat logs",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.",
"Submit dispute statement": "Übermittle Fall-Aussage",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Advanced options",
"Invoice to wrap": "Invoice to wrap",
"Payout Lightning Invoice": "Lightning-Auszahlungs-Invoice",
@ -606,14 +605,14 @@
"Use Lnproxy": "Use Lnproxy",
"Wrap": "Wrap",
"Wrapped invoice": "Wrapped invoice",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Bitcoin Address",
"Final amount you will receive": "Final amount you will receive",
"Invalid": "Ungültig",
"Mining Fee": "Mining Fee",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "RoboSats coordinator will do a swap and send the Sats to your onchain address.",
"Swap fee": "Swap fee",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Bestätige {{amount}} {{currencyCode}} erhalten",
"Confirm {{amount}} {{currencyCode}} sent": "Bestätige {{amount}} {{currencyCode}} gesendet",
"Open Dispute": "Streitfall eröffnen",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "Sag Hallo! Sei hilfreich und präzise. Lass ihn wissen, wie er dir {{amount}} {{currencyCode}} schicken kann.",
"To open a dispute you need to wait": "To open a dispute you need to wait",
"Wait for the seller to confirm he has received the payment.": "Warte, bis der Verkäufer die Zahlung bestätigt.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "Bitte bewahre die Informationen die deine Order und Zahlungsweise identifizieren auf: Order-ID; Zahlungs-Hashes der Kaution oder Sicherheit (siehe dein Lightning-Wallet); exakte Anzahl an Satoshis; und dein Roboter-Avatar. Du musst dich als der involvierte Nutzer identifizieren könenn, über E-Mail (oder andere Kontaktarten).",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "Du kannst die Satoshis (Sicherheit und Kaution) in deinem Profil finden. Wenn unser Team dir bei etwas helfen kann, zögere nicht, uns zu kontaktieren: robosats@protonmail.com (oder über deine Wegwerf-Kontaktdaten).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Warte einen Moment. Wenn der Verkäufer den Handelsbetrag nicht hinterlegt, bekommst du deine Kaution automatisch zurück. Darüber hinaus erhältst du eine Entschädigung (siehe die Belohnungen in deinem Profil).",
"We are waiting for the seller to lock the trade amount.": "Wir warten darauf, dass der Verkäufer den Handelsbetrag sperrt.",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Order erneuern",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "In Zwischenablage kopieren",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "Diese Invoice wird in deiner Wallet eingefroren. Sie wird nur belastet, wenn du abbrichst oder einen Streitfall verlierst.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "Diese Invoice wird in deiner Wallet eingefroren. Sie wird erst durchgeführt sobald du die {{currencyCode}}-Zahlung bestätigst.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Order aktivieren",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "Deine öffentliche Order wurde pausiert. Im Moment kann sie von anderen Robotern weder gesehen noch angenommen werden. Du kannst sie jederzeit wieder aktivieren.",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Warte einen Moment. Wenn der Käufer nicht kooperiert, bekommst du seine und deine Kaution automatisch zurück. Außerdem erhältst du eine Entschädigung (siehe die Belohnungen in deinem Profil).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "Wir warten darauf, dass der Käufer eine Lightning-Invoice einreicht. Sobald er dies tut, kannst du ihm die Details der Zahlung mitteilen.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "Anzahl öffentlicher {{currencyCode}} Order (höher ist günstiger)",
"If the order expires untaken, your bond will return to you (no action needed).": "Wenn die Order nicht angenommen wird und abläuft, erhältst du die Kaution zurück (keine Aktion erforderlich).",
"Pause the public order": "Order pausieren",
"Premium rank": "Aufschlags-Rang",
"Public orders for {{currencyCode}}": "Öffentliche Order für {{currencyCode}}",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Fehlerursache:",
"Next attempt in": "Nächster Versuch in",
"Retrying!": "Erneut versuchen!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats wird alle eine Minute 3 mal versuchen, deine Invoice auszuzahlen. Wenn es weiter fehlschlägt, kannst du eine neue Invoice einfügen. Prüfe deine Inbound-Liquidität. Denk daran, dass deine Lightning-Node erreichbar sein muss, um die Zahlung zu erhalten.Denk daran, dass deine Lightning-Node erreichbar sein muss, um die Zahlung zu erhalten.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats versucht deine Lightning-Invoice zu bezahlen. Denk daran, dass deine Lightning-Node erreichbar sein muss, um die Zahlung zu erhalten.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Renew",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats wird noch besser mit mehr Nutzern und Liquidität. Erzähl einem Bitcoin-Freund von uns!",
"Sending coins to": "Sending coins to",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "Your TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Bitte warte auf den Taker, um eine Kaution zu sperren. Wenn der Taker nicht rechtzeitig eine Kaution sperrt, wird die Order erneut veröffentlicht.",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "A robot technician has arrived!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "I bring my own robots, here they are. (Drag and drop workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "My first time here. Generate a new Robot Garage and extended robot token (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Customize viewports",
"Freeze viewports": "Freeze viewports",
"unsafe_alert": "To protect your data and privacy use<1>Tor Browser</1> and visit a federation hosted <3>Onion</3> site. Or host your own <5>Client.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "RoboSats information",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "More",
"Offers": "Offers",
"Order": "Order",
"Robot": "Robot",
"Settings": "Settings",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Contract",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "You can also add your own random characters into the token or",
"or visit the robot school for documentation.": "or visit the robot school for documentation.",
"roll again": "roll again",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Active order #{{orderID}}",
"Add Robot": "Add Robot",
"Add a new Robot": "Add a new Robot",
"Building...": "Building...",
"Delete Garage": "Delete Garage",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Last order #{{orderID}}",
"Logout": "Logout",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "Recovery",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "Reusing trading identity degrades your privacy against other users, coordinators and observers.",
"Robot Garage": "Robot Garage",
"Store your token safely": "Store your token safely",
"Welcome back!": "Welcome back!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "Copied!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Robot": "Fast Generate Robot",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Recovery": "Recovery",
"Start": "Start",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"Not enough entropy, make it more complex": "Not enough entropy, make it more complex",
"The token is too short": "The token is too short",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Start": "Start",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "ANY",
"Buy": "Buy",
"DESTINATION": "DESTINATION",
@ -101,7 +90,7 @@
"and use": "and use",
"hosted by": "hosted by",
"pay with": "pay with",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Add filter",
"Amount": "Amount",
"An error occurred.": "An error occurred.",
@ -136,6 +125,7 @@
"Premium": "Premium",
"Price": "Price",
"Reorder column": "Reorder column",
"Robot": "Robot",
"Sats now": "Sats now",
"Select columns": "Select columns",
"Show all": "Show all",
@ -165,15 +155,15 @@
"starts with": "starts with",
"true": "true",
"yes": "yes",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.",
"Close": "Close",
"Download high resolution map?": "Download high resolution map?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "You can find a step-by-step description of the trade pipeline in ",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Go back",
"Keys": "Keys",
"Learn how to verify": "Learn how to verify",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "Your peer PGP public key. You use it to encrypt messages only he can read.and to verify your peer signed the incoming messages.",
"Your private key passphrase (keep secure!)": "Your private key passphrase (keep secure!)",
"Your public key": "Your public key",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... somewhere on Earth!",
"Client info": "Client info",
"Made with": "Made with",
"RoboSats client version": "RoboSats client version",
"and": "and",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Community",
"Follow RoboSats in Nostr": "Follow RoboSats in Nostr",
"Follow RoboSats in X": "Follow RoboSats in X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Tell us about a new feature or a bug",
"We are abandoning Telegram! Our old TG groups": "We are abandoning Telegram! Our old TG groups",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "24h contracted volume",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Browser",
"Enable": "Enable",
"Enable TG Notifications": "Enable TG Notifications",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Choose a location",
"Save": "Save",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Back",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Generate Robot",
"Generate a robot avatar first. Then create your own order.": "Generate a robot avatar first. Then create your own order.",
"You do not have a robot avatar": "You do not have a robot avatar",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Your Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "Back it up!",
"Done": "Done",
"Store your robot token": "Store your robot token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Download RoboSats {{coordinatorVersion}} APK from Github releases",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Download RoboSats {{coordinatorString}} APK from Github releases",
"Go away!": "Go away!",
"On Android RoboSats app ": "On Android RoboSats app ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)",
"On remotely served browser client": "On remotely served browser client",
"On your own soverign node": "On your own soverign node",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.",
"Update your RoboSats client": "Update your RoboSats client",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.",
"You are self-hosting RoboSats": "You are self-hosting RoboSats",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "You are not using RoboSats privately",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "From",
"to": "to",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " at a {{discount}}% discount",
" at a {{premium}}% premium": " at a {{premium}}% premium",
" at market price": " at market price",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Your order fixed exchange rate",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "Lightning routing failed",
"New chat message": "New chat message",
"Order chat is open": "Order chat is open",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 Expired!",
"🙌 Funished!": "🙌 Funished!",
"🥳 Taken!": "🥳 Taken!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Amount {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.",
"Enter amount of fiat to exchange for bitcoin": "Enter amount of fiat to exchange for bitcoin",
@ -451,7 +446,7 @@
"You must specify an amount first": "You must specify an amount first",
"You will receive {{satoshis}} Sats (Approx)": "You will receive {{satoshis}} Sats (Approx)",
"You will send {{satoshis}} Sats (Approx)": "You will send {{satoshis}} Sats (Approx)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Accepted payment methods",
"Amount of Satoshis": "Amount of Satoshis",
"Deposit timer": "Deposit timer",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "You send via Lightning {{amount}} Sats (Approx)",
"You send via {{method}} {{amount}}": "You send via {{method}} {{amount}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Claim",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "Your current order",
"Your last order #{{orderID}}": "Your last order #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Dark",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Light",
"Mainnet": "Mainnet",
"Swaps": "Swaps",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Cancel",
"Cancel order and unlock bond instantly": "Cancel order and unlock bond instantly",
"Collaborative Cancel": "Collaborative Cancel",
"Unilateral cancelation (bond at risk!)": "Unilateral cancelation (bond at risk!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "You asked for a collaborative cancellation",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} is asking for a collaborative cancel",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Buyer",
"Completed in": "Completed in",
"Contract exchange rate": "Contract exchange rate",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "See Compatible Wallets",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "Cancel the order?",
"Confirm Cancel": "Confirm Cancel",
"If the order is cancelled now you will lose your bond.": "If the order is cancelled now you will lose your bond.",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Accept Cancelation",
"Ask for Cancel": "Ask for Cancel",
"Collaborative cancel the order?": "Collaborative cancel the order?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.",
"Your peer has asked for cancellation": "Your peer has asked for cancellation",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Agree and open dispute",
"Disagree": "Disagree",
"Do you want to open a dispute?": "Do you want to open a dispute?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Confirm",
"Confirm you received {{amount}} {{currencyCode}}?": "Confirm you received {{amount}} {{currencyCode}}?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confirm you sent {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.",
"Revert the confirmation of fiat sent?": "Revert the confirmation of fiat sent?",
"Wait ({{time}})": "Wait ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Amount not yet locked, please check your WebLN wallet.",
"Invoice not received, please check your WebLN wallet.": "Invoice not received, please check your WebLN wallet.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "You can close now your WebLN wallet popup.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Audit PGP",
"Export": "Export",
"Save full log as a JSON file (messages and credentials)": "Save full log as a JSON file (messages and credentials)",
"Verify your privacy": "Verify your privacy",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...waiting",
"Activate slow mode (use it when the connection is slow)": "Activate slow mode (use it when the connection is slow)",
"Peer": "Peer",
"You": "You",
"connected": "connected",
"disconnected": "disconnected",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Connecting...",
"Send": "Send",
"Type a message": "Type a message",
"Waiting for peer public key...": "Waiting for peer public key...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Attach chat logs",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.",
"Submit dispute statement": "Submit dispute statement",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Advanced options",
"Invoice to wrap": "Invoice to wrap",
"Payout Lightning Invoice": "Payout Lightning Invoice",
@ -606,14 +605,14 @@
"Use Lnproxy": "Use Lnproxy",
"Wrap": "Wrap",
"Wrapped invoice": "Wrapped invoice",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Bitcoin Address",
"Final amount you will receive": "Final amount you will receive",
"Invalid": "Invalid",
"Mining Fee": "Mining Fee",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "RoboSats coordinator will do a swap and send the Sats to your onchain address.",
"Swap fee": "Swap fee",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Confirm {{amount}} {{currencyCode}} received",
"Confirm {{amount}} {{currencyCode}} sent": "Confirm {{amount}} {{currencyCode}} sent",
"Open Dispute": "Open Dispute",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.",
"To open a dispute you need to wait": "To open a dispute you need to wait",
"Wait for the seller to confirm he has received the payment.": "Wait for the seller to confirm he has received the payment.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).",
"We are waiting for the seller to lock the trade amount.": "We are waiting for the seller to lock the trade amount.",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Renew Order",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "Copy to clipboard",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Unpause Order",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "Among public {{currencyCode}} orders (higher is cheaper)",
"If the order expires untaken, your bond will return to you (no action needed).": "If the order expires untaken, your bond will return to you (no action needed).",
"Pause the public order": "Pause the public order",
"Premium rank": "Premium rank",
"Public orders for {{currencyCode}}": "Public orders for {{currencyCode}}",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Failure reason:",
"Next attempt in": "Next attempt in",
"Retrying!": "Retrying!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Renew",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!",
"Sending coins to": "Sending coins to",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "Your TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "A robot technician has arrived!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "I bring my own robots, here they are. (Drag and drop workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "My first time here. Generate a new Robot Garage and extended robot token (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Customize viewports",
"Freeze viewports": "Freeze viewports",
"unsafe_alert": "To fully enable RoboSats and protect your data and privacy, use <1>Tor Browser</1> and visit the federation hosted <3>Onion</3> site or <5>host your own app.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "Información RoboSats",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "Más",
"Offers": "Ofertas",
"Order": "Orden",
"Robot": "Robot",
"Settings": "Ajustes",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Contrato",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "Puedes añadir tus propios carácteres aleatorios al token o",
"or visit the robot school for documentation.": "o visita la 'escuela robótica' para ver la documentación.",
"roll again": "Tirar otra vez",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Escribe o pega el token de tu robot token para reconstruirlo y acceder a tus operaciones.",
"Paste token here": "Pega aquí el token",
"Recover": "Recuperar",
"Robot recovery": "Recupera tu robot",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Orden activa #{{orderID}}",
"Add Robot": "Añadir Robot",
"Add a new Robot": "Añade un nuevo Robot",
"Building...": "Construyendo...",
"Delete Garage": "Borrar Garaje",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Última orden #{{orderID}}",
"Logout": "Cerrar sesión",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "Recuperar",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "Reutilizar una identidad debilita su privacidad frente a otros usarios, coordinadores y observadores.",
"Robot Garage": "Garaje de robots",
"Store your token safely": "Guarda tu token de forma segura",
"Welcome back!": "¡Hola otra vez!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "¡Copiado!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Un exchange LN P2P sencillo y privado",
"Create a new robot and learn to use RoboSats": "Crea un nuevo robot y aprende a usar RoboSats",
"Fast Generate Robot": "Genera un Robot al instante",
"Recover an existing robot using your token": "Recupera un robot existente usando tu token",
"Recovery": "Recuperar",
"Start": "Empezar",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Conectando con TOR",
"Connection encrypted and anonymized using TOR.": "Conexión encriptada y anonimizada usando TOR.",
"Not enough entropy, make it more complex": "Not enough entropy, make it more complex",
"The token is too short": "The token is too short",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Un exchange LN P2P sencillo y privado",
"Create a new robot and learn to use RoboSats": "Crea un nuevo robot y aprende a usar RoboSats",
"Fast Generate Order": "Genera una Orden al instante",
"Recover an existing robot using your token": "Recupera un robot existente usando tu token",
"Start": "Empezar",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Conectando con TOR",
"Connection encrypted and anonymized using TOR.": "Conexión encriptada y anonimizada usando TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "Esto asegura máxima privacidad, aunque quizá observe algo de lentitud. Si se corta la conexión, reinicie la aplicación.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Conectado a la red TOR",
"Connecting to TOR network": "Conectando a la red TOR",
"Connection error": "Error de conexión",
"Initializing TOR daemon": "Inicializando TOR",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "TODO",
"Buy": "Comprar",
"DESTINATION": "DESTINO",
@ -101,7 +90,7 @@
"and use": "y usa",
"hosted by": "hosted by",
"pay with": "paga con",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Añadir filtro",
"Amount": "Cantidad",
"An error occurred.": "Ha ocurrido un error.",
@ -136,6 +125,7 @@
"Premium": "Prima",
"Price": "Precio",
"Reorder column": "Reordenar columnas",
"Robot": "Robot",
"Sats now": "Sats ahora",
"Select columns": "Seleccionar columnas",
"Show all": "Mostrar todas",
@ -165,15 +155,15 @@
"starts with": "empieza con",
"true": "verdad",
"yes": "si",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.",
"Close": "Cerrar",
"Download high resolution map?": "Download high resolution map?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "Puedes encontrar una descripción paso a paso de los intercambios en",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Volver",
"Keys": "Llaves",
"Learn how to verify": "Aprende a verificar",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "La llave pública PGP de tu contraparte. La usas para encriptar mensajes que solo él puede leer y para verificar que es él quién ha firmado los mensajes que recibes.",
"Your private key passphrase (keep secure!)": "La contraseña de tu llave privada ¡Guárdala bien!",
"Your public key": "Tu llave pública",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... en algún lugar de La Tierra!",
"Client info": "Client info",
"Made with": "Hecho con",
"RoboSats client version": "RoboSats client version",
"and": "y",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Comunidad",
"Follow RoboSats in Nostr": "Follow RoboSats in Nostr",
"Follow RoboSats in X": "Follow RoboSats in X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Propón funcionalidades o notifica errores",
"We are abandoning Telegram! Our old TG groups": "We are abandoning Telegram! Our old TG groups",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "Volumen de los contratos en 24h",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Browser",
"Enable": "Activar",
"Enable TG Notifications": "Activar Notificaciones TG",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "Se abrirá un chat con el bot de Telegram de RoboSats. Simplemente pulsa en Empezar. Ten en cuenta que si activas las notificaciones de Telegram reducirás tu nivel de anonimato.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Choose a location",
"Save": "Save",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Volver",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "Vas a visitar la página Learn RoboSats. Ha sido construida por la comunidad y contiene tutoriales y documentación que te ayudará a aprender cómo se usa RoboSats y a entender cómo funciona.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Generar Robot",
"Generate a robot avatar first. Then create your own order.": "Primero genera un robot avatar. Después crea tu propia orden.",
"You do not have a robot avatar": "No tienes un avatar robot",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Your Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Escribe o pega el token de tu robot token para reconstruirlo y acceder a tus operaciones.",
"Paste token here": "Pega aquí el token",
"Recover": "Recuperar",
"Robot recovery": "Recupera tu robot",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "¡Guárdalo!",
"Done": "Hecho",
"Store your robot token": "Guarda el token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "Puede que necesites recuperar tu robot avatar en el futuro: haz una copia de seguridad del token. Puedes simplemente copiarlo en otra aplicación.",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Descarga el APK de RoboSats {{coordinatorVersion}} desde Github",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Descarga el APK de RoboSats {{coordinatorString}} desde Github",
"Go away!": "¡Adiós!",
"On Android RoboSats app ": "En la aplicación Android de RoboSats ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "Actualice su pestaña en el navegador Tor (Click aquí o pulse Ctrl+May+R)",
"On remotely served browser client": "En el cliente remoto del navegador",
"On your own soverign node": "En tu propio nodo",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "El coordinador RoboSats está en la versión {{coordinatorVersion}}, pero su aplicación cliente es la {{clientVersion}}. Este desajuste podría dar problemas de uso.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "El coordinador RoboSats está en la versión {{coordinatorString}}, pero su aplicación cliente es la {{clientString}}. Este desajuste podría dar problemas de uso.",
"Update your RoboSats client": "Actualiza tu cliente RoboSats",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "El cliente RoboSats es servido por tu propio nodo, gozas de la mayor seguridad y privacidad.",
"You are self-hosting RoboSats": "Estás alojando RoboSats",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "No usas RoboSats de forma privada",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "Desde",
"to": "a ",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " con descuento del {{discount}}%",
" at a {{premium}}% premium": " con una prima del {{premium}}%",
" at market price": " a precio de mercado",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Recibes aproximadamente {{swapSats}} LN Sats (la comisión puede variar)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Envías aproximadamente {{swapSats}} LN Sats (la comisión puede variar)",
"Your order fixed exchange rate": "La tasa de cambio fija de tu orden",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "Enrutado Lightning fallido",
"New chat message": "Nuevo mensaje en el chat",
"Order chat is open": "El chat de la orden está abierto",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 ¡Expirada!",
"🙌 Funished!": "🙌 ¡Finalizado!",
"🥳 Taken!": "🥳 ¡Tomada!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Monto {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "Tomando esta orden corres el riesgo de perder el tiempo. Si el creador no procede en el plazo indicado, se te compensará en Sats con el 50% de la fianza del creador.",
"Enter amount of fiat to exchange for bitcoin": "Introduce el monto de fiat a cambiar por bitcoin",
@ -451,7 +446,7 @@
"You must specify an amount first": "Primero debes especificar el monto",
"You will receive {{satoshis}} Sats (Approx)": "You will receive {{satoshis}} Sats (Approx)",
"You will send {{satoshis}} Sats (Approx)": "You will send {{satoshis}} Sats (Approx)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Métodos de pago aceptados",
"Amount of Satoshis": "Cantidad de Sats",
"Deposit timer": "Tiempo para depositar",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "You send via Lightning {{amount}} Sats (Approx)",
"You send via {{method}} {{amount}}": "You send via {{method}} {{amount}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Prima: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Reclamar",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "Tu orden actual",
"Your last order #{{orderID}}": "Tu última orden #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Oscuro",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Claro",
"Mainnet": "Mainnet",
"Swaps": "Swaps",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Conectado a la red TOR",
"Connecting to TOR network": "Conectando a la red TOR",
"Connection error": "Error de conexión",
"Initializing TOR daemon": "Inicializando TOR",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Cancelar",
"Cancel order and unlock bond instantly": "Cancelar la orden y desbloquear el depósito al instante",
"Collaborative Cancel": "Cancelación colaborativa",
"Unilateral cancelation (bond at risk!)": "Cancelación unilateral (¡Perderás el depósito!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "Has solicitado la cancelación colaborativa",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} solicita la cancelación colaborativa",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Compra",
"Completed in": "Completado en",
"Contract exchange rate": "Tasa de cambio del contrato",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "Ver carteras compatibles",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "¿Cancelar la orden?",
"Confirm Cancel": "Confirmar cancelación",
"If the order is cancelled now you will lose your bond.": "Si cancelas la orden ahora perderás tu fianza.",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Acceptar la cancelación",
"Ask for Cancel": "Solicitar cancelación",
"Collaborative cancel the order?": "¿Cancelar la orden colaborativamente?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "Dado que el colateral está bloqueado, la orden solo puede cancelarse si tanto el creador como el tomador están de acuerdo.",
"Your peer has asked for cancellation": "Tu contraparte ha solicitado la cancelación",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Abrir disputa",
"Disagree": "Volver",
"Do you want to open a dispute?": "¿Quieres abrir una disputa?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Asegúrate de EXPORTAR el registro del chat. Los administradores pueden pedirte el registro del chat en caso de discrepancias. Es responsabilidad tuya aportarlo.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "El equipo de RoboSats examinará las declaraciones y evidencias presentadas. Como el equipo no puede leer el chat, debes escribir una declaración completa y detallada. Es mejor aportar un método de contacto de usar y tirar en tu declaración. El ganador de la disputa recuperará su fianza, pero el perdedor no.",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Confirmar",
"Confirm you received {{amount}} {{currencyCode}}?": "¿Confirmas que has recibido {{amount}} {{currencyCode}}?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confirm you sent {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.",
"Revert the confirmation of fiat sent?": "Revert the confirmation of fiat sent?",
"Wait ({{time}})": "Wait ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Amount not yet locked, please check your WebLN wallet.",
"Invoice not received, please check your WebLN wallet.": "No se ha recibido la factura, echa un vistazo a tu wallet WebLN.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "Ahora puedes cerrar la ventana emergente de tu wallet WebLN.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Auditar PGP",
"Export": "Exportar",
"Save full log as a JSON file (messages and credentials)": "Guardar el log completo como JSON (credenciales y mensajes)",
"Verify your privacy": "Verifica tu privacidad",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...waiting",
"Activate slow mode (use it when the connection is slow)": "Activar modo lento (Úsalo cuando tu conexión sea inestable)",
"Peer": "Él",
"You": "Tú",
"connected": "conectado",
"disconnected": "desconectado",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Conectando...",
"Send": "Enviar",
"Type a message": "Escribe un mensaje",
"Waiting for peer public key...": "Esperando por la clave pública de tu contraparte...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Adjuntar el registro del chat",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Adjuntar transcripciones del chat ayuda a resolver la disputa y añade transparencia. Sin embargo, puede comprometer tu privacidad.",
"Submit dispute statement": "Presentar declaración",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Opciones avanzadas",
"Invoice to wrap": "Factura a ocultar",
"Payout Lightning Invoice": "Factura Lightning",
@ -606,14 +605,14 @@
"Use Lnproxy": "Usa Lnproxy",
"Wrap": "Ofuscar",
"Wrapped invoice": "Factura oculta",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Dirección Bitcoin",
"Final amount you will receive": "Cantidad final que vas a recibir",
"Invalid": "No válido",
"Mining Fee": "Comisión Minera",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "El coordinador de RoboSats hará un swap y enviará los sats a tu dirección onchain.",
"Swap fee": "Comisión del swap",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Confirmar {{amount}} {{currencyCode}} recibido",
"Confirm {{amount}} {{currencyCode}} sent": "Confirmar {{amount}} {{currencyCode}} enviado",
"Open Dispute": "Abrir Disputa",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "¡Di hola! Sé claro y conciso. Indica cómo debe enviarte {{amount}} {{currencyCode}}.",
"To open a dispute you need to wait": "Debes esperar para abrir una disputa",
"Wait for the seller to confirm he has received the payment.": "Espera a que el vendedor confirme que ha recibido el pago.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "Por favor, guarda la información necesaria para identificar tu orden y tus pagos: ID de orden; claves del pago de la fianza o el colateral (comprueba tu cartera Lightning); cantidad exacta de Sats; y nombre del Robot. Tendrás que identificarte como el usuario involucrado en este intercambio por email (u otro método de contacto).",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "Puedes retirar la cantidad resuelta en la disputa (fianza y colateral) desde las recompensas de tu perfil. Si hay algo que el equipo pueda hacer, no dudes en contactar con robosats@protonmail.com (o a través del método de contacto que hayas especificado).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Espera un momento. Si el vendedor no hace el depósito, recuperarás tu fianza automáticamente. Además, recibirás una compensación (verás las recompensas en tu perfil).",
"We are waiting for the seller to lock the trade amount.": "Estamos esperando a que el vendedor bloquee la cantidad a intercambiar.",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Renovar Orden",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "Copiar al portapapeles",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "Esto es una factura retenida, los Sats se bloquean en tu cartera. Solo se cobrará si cancelas o pierdes una disputa.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "Esto es una factura retenida, los Sats se bloquean en tu cartera. Será liberada al comprador al confirmar que has recibido {{currencyCode}}.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Reactivar Orden",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "Tu orden pública ha sido pausada. Ahora mismo, la orden no puede ser vista ni tomada por otros robots. Puedes volver a activarla cuando desees.",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "Antes de dejarte enviar {{amountFiat}} {{currencyCode}}, queremos asegurarnos de que puedes recibir los sats.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Espera un momento. Si el comprador no coopera, se te devolverá el colateral y tu fianza automáticamente. Además, recibirás una compensación (verás las recompensas en tu perfil).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "Estamos esperando a que el comprador envíe una factura Lightning. Cuando lo haga, podrás comunicarle directamente los detalles del pago.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "Entre las órdenes públicas de {{currencyCode}} (más alto, más barato)",
"If the order expires untaken, your bond will return to you (no action needed).": "Si tu oferta expira sin ser tomada, tu fianza será desbloqueada en tu cartera automáticamente.",
"Pause the public order": "Pausar la orden pública",
"Premium rank": "Percentil de la prima",
"Public orders for {{currencyCode}}": "Órdenes públicas por {{currencyCode}}",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Razón del fallo:",
"Next attempt in": "Próximo intento en",
"Retrying!": "¡Reintentando!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats intentará pagar tu factura 3 veces con una pausa de un minuto entre cada intento. Si sigue fallando, podrás presentar una nueva factura. Comprueba si tienes suficiente liquidez entrante. Recuerda que los nodos de Lightning tienen que estar en línea para poder recibir pagos.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "Tu factura ha expirado o se han hecho más de 3 intentos de pago. Aporta una nueva factura.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats está intentando pagar tu factura de Lightning. Recuerda que los nodos Lightning deben estar en línea para recibir pagos.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Renovar",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats mejora con más liquidez y usuarios. ¡Háblale a un amigo bitcoiner sobre RoboSats!",
"Sending coins to": "Sending coins to",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "¡Gracias! RoboSats también te quiere",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "Tu TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Por favor, espera a que el tomador bloquee su fianza. Si no lo hace a tiempo, la orden volverá a publicarse.",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "¡Ha llegado un técnico robótico!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "Aquí traigo mis propios robosts. (Arrastra y suelta workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "Mi primera vez aquí. Crear un Robot Garage y un token extendido (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Personalizar vistas",
"Freeze viewports": "Congelar vistas",
"unsafe_alert": "Protege tus datos y privacidad usando <1>Tor Browser</1> y visitando un <3>Onion</3> de la federación. O hostea <5>tu propia app.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "RoboSats information",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "More",
"Offers": "Offers",
"Order": "Eskaera",
"Robot": "Robota",
"Settings": "Settings",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Kontratua",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "You can also add your own random characters into the token or",
"or visit the robot school for documentation.": "or visit the robot school for documentation.",
"roll again": "roll again",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Active order #{{orderID}}",
"Add Robot": "Add Robot",
"Add a new Robot": "Add a new Robot",
"Building...": "Building...",
"Delete Garage": "Delete Garage",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Last order #{{orderID}}",
"Logout": "Logout",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "Recovery",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "Reusing trading identity degrades your privacy against other users, coordinators and observers.",
"Robot Garage": "Robot Garage",
"Store your token safely": "Gorde zure tokena era seguru batean",
"Welcome back!": "Welcome back!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "Kopiatuta!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Robot": "Fast Generate Robot",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Recovery": "Recovery",
"Start": "Start",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"Not enough entropy, make it more complex": "Not enough entropy, make it more complex",
"The token is too short": "The token is too short",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "Recover an existing robot using your token",
"Start": "Start",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connecting to TOR",
"Connection encrypted and anonymized using TOR.": "Connection encrypted and anonymized using TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "ANY",
"Buy": "Erosi",
"DESTINATION": "DESTINATION",
@ -101,7 +90,7 @@
"and use": "eta erabili",
"hosted by": "hosted by",
"pay with": "pay with",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Gehitu iragazkia",
"Amount": "Kopurua",
"An error occurred.": "Akats bat gertatu da.",
@ -136,6 +125,7 @@
"Premium": "Prima",
"Price": "Prezioa",
"Reorder column": "Birorderatu zutabea",
"Robot": "Robota",
"Sats now": "Sats now",
"Select columns": "Aukeratu zutabeak",
"Show all": "Erakutsi dena",
@ -165,15 +155,15 @@
"starts with": "hasten da",
"true": "egia",
"yes": "bai",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.",
"Close": "Itxi",
"Download high resolution map?": "Download high resolution map?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "Salerosketaren pausoz-pausoko deskribapen bat aurki dezakezu ondorengo helbidean ",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Joan atzera",
"Keys": "Giltzak",
"Learn how to verify": "Ikasi nola egiaztatu",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "Zure parearen PGP giltza publikoa. Berak bakarrik irakur ditzakeen mezuak zifratzeko eta jasotako mezuak berak sinatu dituela egiaztatzeko erabiliko duzu.",
"Your private key passphrase (keep secure!)": "Zure giltza pribatuaren pasahitza (seguru mantendu)",
"Your public key": "Zure giltza publikoa",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... Lurreko lekuren batean!",
"Client info": "Client info",
"Made with": "Erabili dira",
"RoboSats client version": "RoboSats client version",
"and": "eta",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Komunitatea",
"Follow RoboSats in Nostr": "Follow RoboSats in Nostr",
"Follow RoboSats in X": "Follow RoboSats in X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Jakinarazi funtzionalitate berri bat edo akats bat",
"We are abandoning Telegram! Our old TG groups": "We are abandoning Telegram! Our old TG groups",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "24 ordutan kontratatutako bolumena",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Browser",
"Enable": "Baimendu",
"Enable TG Notifications": "Baimendu TG Jakinarazpenak",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "RoboSats telegrama botarekin hitz egingo duzu. Zabaldu berriketa eta sakatu Start. Telegrama bidez anonimotasun maila jaitsi zenezake.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Choose a location",
"Save": "Save",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Atzera",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "Learn Robosats bisitatu behar duzu. Bertan, Robosats erabiltzen ikasteko eta nola dabilen ulertzeko tutorialak eta dokumentazioa aurkituko dituzu.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Robota sortu",
"Generate a robot avatar first. Then create your own order.": "Generate a robot avatar first. Then create your own order.",
"You do not have a robot avatar": "Ez daukazu robot avatarrik",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Your Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Enter your robot token to re-build your robot and gain access to its trades.",
"Paste token here": "Paste token here",
"Recover": "Recover",
"Robot recovery": "Robot recovery",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "Gorde ezazu!",
"Done": "Prest",
"Store your robot token": "Gorde zure robot tokena",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "Zure robot avatarra berreskuratu nahi izango duzu: gorde seguru. Beste aplikazio batean kopia dezakezu",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Deskargatu RoboSats {{coordinatorVersion}} APK Github-en",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Deskargatu RoboSats {{coordinatorString}} APK Github-en",
"Go away!": "Go away!",
"On Android RoboSats app ": "On Android RoboSats app ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)",
"On remotely served browser client": "On remotely served browser client",
"On your own soverign node": "On your own soverign node",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "RoboSats koordinatzailea {{coordinatorVersion}} bertsioan dago, baina zure bezero-aplikazioa {{clientVersion}} da. Bertsio desegoki honek erabiltzailearen esperientzia txarra ekar dezake.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "RoboSats koordinatzailea {{coordinatorString}} bertsioan dago, baina zure bezero-aplikazioa {{clientString}} da. Bertsio desegoki honek erabiltzailearen esperientzia txarra ekar dezake.",
"Update your RoboSats client": "Eguneratu zure RoboSats web bezeroa",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats webgunea zure nodotik zerbitzatzen da beraz segurtasun eta pribatutasun sendoena eskaintzen dizu.",
"You are self-hosting RoboSats": "You are self-hosting RoboSats",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "Ez duzu Robosats pribatuki erabiltzen",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "Min.",
"to": "max.",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " %{{discount}}-ko deskontuarekin",
" at a {{premium}}% premium": " %{{premium}}-ko primarekin",
" at market price": " at market price",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "You receive approx {{swapSats}} LN Sats (fees might vary)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "You send approx {{swapSats}} LN Sats (fees might vary)",
"Your order fixed exchange rate": "Zure eskaeraren kanbio-tasa finkoa",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "Lightning routing failed",
"New chat message": "New chat message",
"Order chat is open": "Order chat is open",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 Expired!",
"🙌 Funished!": "🙌 Funished!",
"🥳 Taken!": "🥳 Taken!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Kopurua {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "Eskaera hau onartuz gero, denbora galtzea arriskatzen duzu. Egileak ez badu garaiz jarraitzen, satoshietan konpentsatua izango zara egilearen fidantzaren %50arekin",
"Enter amount of fiat to exchange for bitcoin": "Sartu bitcongatik aldatu nahi duzun fiat kopurua",
@ -451,7 +446,7 @@
"You must specify an amount first": "Aurrena kopurua zehaztu behar duzu",
"You will receive {{satoshis}} Sats (Approx)": "You will receive {{satoshis}} Sats (Approx)",
"You will send {{satoshis}} Sats (Approx)": "You will send {{satoshis}} Sats (Approx)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Onartutako ordainketa moduak",
"Amount of Satoshis": "Satoshi kopurua",
"Deposit timer": "Gordailu tenporizadorea",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "You send via Lightning {{amount}} Sats (Approx)",
"You send via {{method}} {{amount}}": "You send via {{method}} {{amount}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Prima: %{{premium}}",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Eskatu",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "Zure oraingo eskaera",
"Your last order #{{orderID}}": "Zure azken eskaera #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Dark",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Light",
"Mainnet": "Mainnet",
"Swaps": "Swaps",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Connected to TOR network",
"Connecting to TOR network": "Connecting to TOR network",
"Connection error": "Connection error",
"Initializing TOR daemon": "Initializing TOR daemon",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Ezeztatu",
"Cancel order and unlock bond instantly": "Cancel order and unlock bond instantly",
"Collaborative Cancel": "Lankidetza ezeztapena",
"Unilateral cancelation (bond at risk!)": "Unilateral cancelation (bond at risk!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "Lankidetzaz ezeztatzeko eskaera egin duzu",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} lankidetzaz ezeztatzea eskatu du",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Erosle",
"Completed in": "Igarotako denbora",
"Contract exchange rate": "Kontratuaren truke-tasa",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "Begiratu Kartera Bateragarriak",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "Eskaera ezeztatu?",
"Confirm Cancel": "Onartu ezeztapena",
"If the order is cancelled now you will lose your bond.": "Eskaera ezeztatuz gero fidantza galduko duzu.",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Accept Cancelation",
"Ask for Cancel": "Ezeztatzea eskatu",
"Collaborative cancel the order?": "Eskaera lankidetzaz ezeztatu?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "Eskaeraren fidantza bidali da. Eskaera ezeztatu daiteke bakarrik egileak eta hartzaileak hala adosten badute.",
"Your peer has asked for cancellation": "Your peer has asked for cancellation",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Onartu eta eztabaida ireki",
"Disagree": "Atzera",
"Do you want to open a dispute?": "Eztabaida bat ireki nahi duzu?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Ziurtatu txata ESPORTATU duzula. Baliteke langileek zure txat log JSON esportatua eskatzea desadostasunak konpontzeko. Zure ardura da gordetzea.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "RoboSatseko langileek baieztapenak eta frogak aztertuko dituzte. Kasu oso bat eraiki behar duzu, langileek ezin baitute txateko berriketa irakurri. Hobe da behin erabiltzeko kontaktu metodo bat ematea zure adierazpenarekin. Blokeatutako Satosiak eztabaidako irabazleari bidaliko zaizkio, eta galtzaileak, berriz, fidantza galduko du.",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Baieztatu",
"Confirm you received {{amount}} {{currencyCode}}?": "Baieztatu {{amount}} {{currencyCode}} jaso duzula?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confirm you sent {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.",
"Revert the confirmation of fiat sent?": "Revert the confirmation of fiat sent?",
"Wait ({{time}})": "Wait ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Amount not yet locked, please check your WebLN wallet.",
"Invoice not received, please check your WebLN wallet.": "Faktura ez da jaso, mesedez begiratu zure WebLN kartera.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "You can close now your WebLN wallet popup.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Ikuskatu PGP",
"Export": "Esportatu",
"Save full log as a JSON file (messages and credentials)": "Gorde log guztia JSON fitxategi batean (mezuak eta kredentzialak)",
"Verify your privacy": "Zure pribatasuna egiaztatu",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...waiting",
"Activate slow mode (use it when the connection is slow)": "Activate slow mode (use it when the connection is slow)",
"Peer": "Bera",
"You": "Zu",
"connected": "konektatuta",
"disconnected": "deskonektatuta",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Konektatzen...",
"Send": "Bidali",
"Type a message": "Idatzi mezu bat",
"Waiting for peer public key...": "Waiting for peer public key...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Attach chat logs",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.",
"Submit dispute statement": "Aurkeztu eztabaidaren adierazpena",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Advanced options",
"Invoice to wrap": "Invoice to wrap",
"Payout Lightning Invoice": "Lightning Faktura ordaindu",
@ -606,14 +605,14 @@
"Use Lnproxy": "Use Lnproxy",
"Wrap": "Wrap",
"Wrapped invoice": "Wrapped invoice",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Bitcoin Helbidea",
"Final amount you will receive": "Jasoko duzun azken kopurua",
"Invalid": "Baliogabea",
"Mining Fee": "Meatzaritza Kuota",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "RoboSats coordinator will do a swap and send the Sats to your onchain address.",
"Swap fee": "Swap kuota",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Baieztatu {{amount}} {{currencyCode}} jaso dela",
"Confirm {{amount}} {{currencyCode}} sent": "Baieztatu {{amount}} {{currencyCode}} bidali dela",
"Open Dispute": "Eztabaida Ireki",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "Agurtu! Lagungarri eta labur izan. Jakin dezatela {{amount}} {{currencyCode}}ak nola bidali.",
"To open a dispute you need to wait": "To open a dispute you need to wait",
"Wait for the seller to confirm he has received the payment.": "Itxaron saltzaileak ordainketa jaso duela baieztatu arte.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "Mesedez, gorde zure agindua eta zure ordainketak identifikatzeko behar duzun informazioa: eskaera IDa; fidantzaren edo gordailuaren ordainagiriak (begira ezazu zure lightning karteran); satosi kopuru zehatza; eta robot ezizena. Zure burua identifikatu beharko duzu salerosketa honetako partehartzaile moduan posta elektroniko bidez (edo beste kontaktu metodo baten bitartez).",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "Eztabaidaren ebazpen-kopurua jaso dezakezu (fidantza eta kolaterala) zure profileko sarien atalean. Langileek egin dezaketen beste zerbait badago, ez izan zalantzarik harremanetan jartzeko robosat@protonmail.com bidez (edo zure behin erabiltzeko metodoarekin).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Itxaron pixka bat. Saltzaileak ez badu gordailatzen, automatikoki berreskuratuko duzu zure fidantza. Gainera, konpentsazio bat jasoko duzu (begiratu sariak zure profilean).",
"We are waiting for the seller to lock the trade amount.": "Saltzaileak adostutako kopurua blokeatu zain gaude.",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Eskaera Berritu",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "Kopiatu",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "Atxikitako faktura bat da hau, zure karteran blokeatuko da. Eztabaida bat bertan behera utzi edo galtzen baduzu bakarrik kobratuko da.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "Atxikitako faktura bat da hau, zure karteran blokeatuko da. Erosleari emango zaio, behin {{currencyCode}}ak jaso dituzula baieztatuta.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Eskaera berriz ezarri",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "Zure ordena publikoa eten egin da. Oraingoz beste robot batzuek ezin dute ez ikusi ez hartu. Noiznahi aktibatu dezakezu.",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "{{amountFiat}} {{currencyCode}} bidaltzea baimendu aurretik, ziurtatu nahi dugu BTC jaso dezakezula.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Itxaron pixka bat. Erosleak ez badu kooperatzen, kolaterala eta zure fidantza automatikoki jasoko dituzu. Gainera, konpentsazio bat jasoko duzu (begiratu sariak zure profilean).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "Erosleak lightning faktura bat partekatu zain gaude. Behin hori eginda, zuzenean ordainketaren xehetasunak komunikatu ahalko dizkiozu.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "{{currencyCode}} eskaera publikoen artean (altuagoa merkeagoa da)",
"If the order expires untaken, your bond will return to you (no action needed).": "Eskaera hartu gabe amaitzen bada, fidantza automatikoki itzuliko zaizu.",
"Pause the public order": "Eskaera publikoa eten",
"Premium rank": "Prima maila",
"Public orders for {{currencyCode}}": "Eskaera publikoak {{currencyCode}}entzat",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Akatsaren arrazoia:",
"Next attempt in": "Hurrengo saiakera",
"Retrying!": "Berriz saiatzen!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats 3 aldiz saiatuko da zure faktura ordaintzen, tartean minutu bateko etenaldiarekin. Akatsa ematen jarraitzen badu, faktura berri bat aurkeztu ahal izango duzu. Begiratu ea nahikoa sarrerako likidezia daukazun. Gogoratu lightning nodoak online egon behar direla ordainketak jaso ahal izateko.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "Zure faktura iraungi da edo 3 ordainketa saiakera baino gehiago egin dira. Aurkeztu faktura berri bat.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats zure Lightning faktura ordaintzen saiatzen ari da. Gogoratu lightning nodoak online egon behar direla ordainketak jaso ahal izateko.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Renew",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats hobetu egiten da likidezia eta erabiltzaile gehiagorekin. Aipatu Robosats lagun bitcoiner bati!",
"Sending coins to": "Sending coins to",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "Zure TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Mesedez itxaron hartzaileak fidantza blokeatu harte. Hartzaileak fidantza garaiz blokeatzen ez badu, eskaera berriz publikatuko da.",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "A robot technician has arrived!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "I bring my own robots, here they are. (Drag and drop workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "My first time here. Generate a new Robot Garage and extended robot token (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Customize viewports",
"Freeze viewports": "Freeze viewports",
"unsafe_alert": "To protect your data and privacy use<1>Tor Browser</1> and visit a federation hosted <3>Onion</3> site. Or host your own <5>Client.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "RoboSats information",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "Plus",
"Offers": "Offres",
"Order": "Ordre",
"Robot": "Robot",
"Settings": "Réglages",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Contrat",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "Vous pouvez également ajouter vos propres caractères aléatoires dans le jeton ou",
"or visit the robot school for documentation.": "ou visiter l'école robosats pour la documentation.",
"roll again": "rouler de nouveau",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Saisissez votre jeton de robot pour reconstruire votre robot et accéder à ses transactions.",
"Paste token here": "Coller le jeton ici",
"Recover": "Récupérer",
"Robot recovery": "Récupération du robot",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Ordre actif #{{orderID}}",
"Add Robot": "Ajout Robot",
"Add a new Robot": "Ajouter un nouveau Robot",
"Building...": "Construction...",
"Delete Garage": "Suppression du garage",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Dernier ordre #{{orderID}}",
"Logout": "Déconnexion",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "Récupération",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "La réutilisation de l'identité d'échange dégrade votre vie privée par rapport aux autres utilisateurs, coordinateurs et observateurs.",
"Robot Garage": "Garage des robots",
"Store your token safely": "Stockez votre jeton en sécurité",
"Welcome back!": "Bon retour parmi nous !",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "Copié !",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Une bourse d'échange P2P LN simple et privée",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Robot": "Génération rapide d'un robot",
"Recover an existing robot using your token": "Récupérer un robot existant à l'aide de votre jeton",
"Recovery": "Récupération",
"Start": "Commencer",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connexion au réseau TOR",
"Connection encrypted and anonymized using TOR.": "Connexion chiffré et anonymisée utilisant TOR.",
"Not enough entropy, make it more complex": "L'entropie n'est pas suffisante, il faut la rendre plus complexe",
"The token is too short": "The token is too short",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Une bourse d'échange P2P LN simple et privée",
"Create a new robot and learn to use RoboSats": "Create a new robot and learn to use RoboSats",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "Récupérer un robot existant à l'aide de votre jeton",
"Start": "Commencer",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connexion au réseau TOR",
"Connection encrypted and anonymized using TOR.": "Connexion chiffré et anonymisée utilisant TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "Cela garantit une confidentialité maximale, mais l'application peut sembler lente. Si la connexion est perdue, redémarrez l'application.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Connecté au réseau TOR",
"Connecting to TOR network": "Connexion au réseau TOR",
"Connection error": "Erreur de connexion",
"Initializing TOR daemon": "Initialisation du daemon TOR",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "Tous",
"Buy": "Acheter",
"DESTINATION": "DESTINATION",
@ -101,7 +90,7 @@
"and use": "et utiliser",
"hosted by": "hosted by",
"pay with": "payer avec",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Ajouter filtre",
"Amount": "Montant",
"An error occurred.": "Une erreur s'est produite.",
@ -136,6 +125,7 @@
"Premium": "Prime",
"Price": "Prix",
"Reorder column": "Réorganiser les colonnes",
"Robot": "Robot",
"Sats now": "Sats maintenant",
"Select columns": "Sélectionner les colonnes",
"Show all": "Afficher tout",
@ -165,15 +155,15 @@
"starts with": "commence par",
"true": "vrai",
"yes": "oui",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.",
"Close": "Fermer",
"Download high resolution map?": "Download high resolution map?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "Vous pouvez trouver une description pas à pas des échanges en ",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Retourner",
"Keys": "Keys",
"Learn how to verify": "Apprendre à vérifier",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "La clé publique PGP de votre correspondant. Vous l'utilisez pour chiffrer les messages que lui seul peut lire et pour vérifier que votre correspondant a signé les messages entrants.",
"Your private key passphrase (keep secure!)": "Phrase de passe de votre clé privée (à conserver précieusement !)",
"Your public key": "Votre clé publique",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... quelque part sur Terre!",
"Client info": "Client info",
"Made with": "Construit avec",
"RoboSats client version": "RoboSats client version",
"and": "et",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Communauté",
"Follow RoboSats in Nostr": "Suivez RoboSats sur Nostr",
"Follow RoboSats in X": "Follow RoboSats in X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Parlez-nous d'une nouvelle fonctionnalité ou d'un bug",
"We are abandoning Telegram! Our old TG groups": "Nous abandonnons Telegram ! Nos anciens groupes TG",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "Volume contracté en 24h",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Navigateur",
"Enable": "Activer",
"Enable TG Notifications": "Activer notifications TG",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "Vous serez redirigé vers une conversation avec le robot telegram RoboSats. Il suffit d'ouvrir le chat et d'appuyer sur Start. Notez qu'en activant les notifications Telegram, vous risquez de réduire votre niveau d'anonymat.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Choose a location",
"Save": "Save",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Retour",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "Vous êtes sur le point de visiter Learn RoboSats. Il héberge des tutoriels et de la documentation pour vous aider à apprendre à utiliser RoboSats et à comprendre son fonctionnement.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Générer un robot",
"Generate a robot avatar first. Then create your own order.": "Créez d'abord un avatar de robot. Créez ensuite votre propre commande.",
"You do not have a robot avatar": "Vous n'avez pas d'avatar robot",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Votre Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Saisissez votre jeton de robot pour reconstruire votre robot et accéder à ses transactions.",
"Paste token here": "Coller le jeton ici",
"Recover": "Récupérer",
"Robot recovery": "Récupération du robot",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "Sauvegardez!",
"Done": "Fait",
"Store your robot token": "Enregistrez votre jeton du robot",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "Vous pourriez avoir besoin de récupérer votre avatar robot à l'avenir : conservez-le en toute sécurité. Vous pouvez simplement le copier dans une autre application.",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Télécharger RoboSats {{coordinatorVersion}} APK depuis les publications Github",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Télécharger RoboSats {{coordinatorString}} APK depuis les publications Github",
"Go away!": "Partez !",
"On Android RoboSats app ": "Sur l'application Android RoboSats ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "Sur le client Tor Browser, rafraîchissez simplement votre onglet (cliquez ici ou appuyer sur Ctrl+Shift+R)",
"On remotely served browser client": "Sur le navigateur client servi à distance",
"On your own soverign node": "Sur votre propre nœud souverain",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "Le coordinateur RoboSats est sur la version {{versioncoordinateur}}, mais votre application client est {{versionclient}}. Ce décalage de version peut entraîner une mauvaise expérience pour l'utilisateur.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "Le coordinateur RoboSats est sur la version {{versioncoordinateur}}, mais votre application client est {{versionclient}}. Ce décalage de version peut entraîner une mauvaise expérience pour l'utilisateur.",
"Update your RoboSats client": "Mettez à jour votre client RoboSats",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "Le client RoboSats est servi à partir de votre propre nœud, ce qui vous garantit une sécurité et une confidentialité optimales.",
"You are self-hosting RoboSats": "Vous auto-hébergez RoboSats",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "Vous n'utilisez pas RoboSats en privé",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "De",
"to": "à",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " à une remise de {{discount}}%",
" at a {{premium}}% premium": " à une prime de {{premium}}%",
" at market price": " au prix du marché",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Vous recevez environ {{swapSats}} LN Sats (les frais peuvent varier).",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Vous envoyez environ {{swapSats}} LN Sats (les frais peuvent varier)",
"Your order fixed exchange rate": "Taux de change fixe de votre commande",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "Échec routage Lightning",
"New chat message": "Nouveau message chat",
"Order chat is open": "Ordre chat ouvert",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 Expiré!",
"🙌 Funished!": "🙌 Funished!",
"🥳 Taken!": "🥳 Pris!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Montant {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "En prenant cette ordre, vous risquez de perdre votre temps. Si l'auteur ne procède pas dans les temps, vous serez compensé en satoshis à hauteur de 50% de la caution de l'auteur.",
"Enter amount of fiat to exchange for bitcoin": "Saisissez le montant de fiat à échanger contre des bitcoins",
@ -451,7 +446,7 @@
"You must specify an amount first": "Vous devez d'abord spécifier un montant",
"You will receive {{satoshis}} Sats (Approx)": "You will receive {{satoshis}} Sats (Approx)",
"You will send {{satoshis}} Sats (Approx)": "You will send {{satoshis}} Sats (Approx)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Modes de paiement acceptés",
"Amount of Satoshis": "Montant de Satoshis",
"Deposit timer": "Deposit timer",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "Vous envoyez via Lightning {{amount}} Sats (environ)",
"You send via {{method}} {{amount}}": "Vous envoyez via {{method}} {{amount}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Prime: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Réclamer",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "Votre ordre en cours",
"Your last order #{{orderID}}": "Votre dernière commande #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Sombre",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Light",
"Mainnet": "Mainnet",
"Swaps": "Échanges",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Connecté au réseau TOR",
"Connecting to TOR network": "Connexion au réseau TOR",
"Connection error": "Erreur de connexion",
"Initializing TOR daemon": "Initialisation du daemon TOR",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Annuler",
"Cancel order and unlock bond instantly": "Annuler l'ordre et débloquer l'obligation instantanément",
"Collaborative Cancel": "Annulation collaborative",
"Unilateral cancelation (bond at risk!)": "Annulation unilatérale (caution à risque !)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "Vous avez demandé une annulation collaborative",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} demande une annulation collaborative",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Acheteur",
"Completed in": "Terminé en",
"Contract exchange rate": "Taux de change du contrat",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "Voir Portefeuilles compatibles",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "Annuler l'ordre?",
"Confirm Cancel": "Confirmer l'annulation",
"If the order is cancelled now you will lose your bond.": "Si l'ordre est annulé maintenant, vous perdrez votre caution",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Accepter l'annulation",
"Ask for Cancel": "Demande d'annulation",
"Collaborative cancel the order?": "Annuler l'ordre en collaboration?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "Le dépôt de transaction a été enregistré. L'ordre ne peut être annulé que si les deux parties, le createur et le preneur, sont d'accord pour l'annuler.",
"Your peer has asked for cancellation": "Votre correspondant a demandé l'annulation",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Accepter et ouvrir un litige",
"Disagree": "En désaccord",
"Do you want to open a dispute?": "Voulez-vous ouvrir un litige?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Veillez à EXPORTER le journal de discussion. Le personnel peut demander le JSON de votre journal de chat exporté afin de résoudre des litiges. Il est de votre responsabilité de le stocker.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "Le personnel de RoboSats examinera les déclarations et les preuves fournies. Vous devez constituer un dossier complet, car le personnel ne peut pas lire le chat. Il est préférable de fournir une méthode de contact jetable avec votre déclaration. Les satoshis dans le dépôt seront envoyés au gagnant du litige, tandis que le perdant du litige perdra la caution.",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Confirmer",
"Confirm you received {{amount}} {{currencyCode}}?": "Confirmez que vous avez reçu les {{amount}} {{currencyCode}}?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "Confirmer que vous avez reçu {{montant}} {{currencyCode}} finalisera la transaction. Les satoshis en caution seront remis à l'acheteur. Ne confirmez qu'une fois que {{montant}} {{currencyCode}} sont arrivés sur votre compte. Notez que si vous avez reçu le paiement et que vous ne cliquez pas sur confirmer, vous risquez de perdre votre caution.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confirmez votre envoi {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confirmer que vous avez envoyé {{montant}} {{currencyCode}} permettra à votre correspondant de finaliser la transaction. Si vous ne l'avez pas encore envoyé et que vous procédez à une fausse confirmation, vous risquez de perdre votre caution.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "LIRE. Si votre paiement au vendeur a été bloqué et qu'il est absolument impossible de terminer la transaction, vous pouvez annuler votre confirmation de vente de \"Fiat envoyé\". Ne le faites que si vous et le vendeur avez DÉJÀ ACCORDÉ dans le chat de procéder à une annulation collaborative. Après avoir confirmé, le bouton \"Annulation collaborative\" sera à nouveau visible. Ne cliquez sur ce bouton que si vous savez ce que vous faites. Il est fortement déconseillé aux nouveaux utilisateurs de RoboSats d'effectuer cette action ! Assurez-vous à 100 % que votre paiement a échoué et que le montant est sur votre compte.",
"Revert the confirmation of fiat sent?": "Revenir sur la confirmation de l'envoi fiat ?",
"Wait ({{time}})": "Attendez ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Le montant n'est pas encore bloqué, veuillez vérifier votre portefeuille WebLN.",
"Invoice not received, please check your WebLN wallet.": "Facture non reçue, veuillez vérifier votre portefeuille WebLN.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "Vous pouvez maintenant fermer la fenêtre popup de votre portefeuille WebLN.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Audit PGP",
"Export": "Export",
"Save full log as a JSON file (messages and credentials)": "Sauvegarder le journal complet dans un fichier JSON (messages et informations d'identification)",
"Verify your privacy": "Vérifier votre confidentialité",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...attente",
"Activate slow mode (use it when the connection is slow)": "Activer le mode lent (à utiliser lorsque la connexion est lente)",
"Peer": "Correspondant",
"You": "Vous",
"connected": "connecté",
"disconnected": "déconnecté",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Connexion...",
"Send": "Envoyer",
"Type a message": "Ecrivez un message",
"Waiting for peer public key...": "En attente de la clé publique du correspondant...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Joindre les journaux de discussion",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Le fait de joindre les journaux de discussion facilite le processus de résolution du litige et ajoute de la transparence. Cependant, cela peut compromettre votre vie privée.",
"Submit dispute statement": "Soumettre une déclaration de litige",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Options avancées",
"Invoice to wrap": "Facture à emballer",
"Payout Lightning Invoice": "Facture de paiement Lightning",
@ -606,14 +605,14 @@
"Use Lnproxy": "Utiliser Lnproxy",
"Wrap": "Envelopper",
"Wrapped invoice": "Facture enveloppée",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Bitcoin Address",
"Final amount you will receive": "Montant final que vous recevrez",
"Invalid": "Invalide",
"Mining Fee": "Frais Minage",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "Le coordinateur RoboSats effectuera un échange et enverra les Sats à votre adresse onchain.",
"Swap fee": "Frais d'échange",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Confirmer la réception de {{amount}} {{currencyCode}}",
"Confirm {{amount}} {{currencyCode}} sent": "Confirmer l'envoi de {{amount}} {{currencyCode}}",
"Open Dispute": "Ouvrir litige",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "Dites bonjour! Soyez serviable et concis. Faites-leur savoir comment vous envoyer les {{amount}} {{currencyCode}}.",
"To open a dispute you need to wait": "Pour ouvrir un litige, vous devez attendre",
"Wait for the seller to confirm he has received the payment.": "Attendez que le vendeur confirme qu'il a reçu le paiement.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "Veuillez enregistrer les informations nécessaires à l'identification de votre ordre et de vos paiements : ID de l'ordre; hachages de paiement des cautions ou des dépòts (vérifiez sur votre portefeuille lightning); montant exact des satoshis; et surnom du robot. Vous devrez vous identifier en tant qu'utilisateur impliqué dans cette transaction par e-mail (ou autres méthodes de contact).",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "Vous pouvez réclamer le montant de la résolution du litige (dépôt et garantie de fidélité) à partir des récompenses de votre profil. Si le personnel peut vous aider en quoi que ce soit, n'hésitez pas à nous contacter à l'adresse robosats@protonmail.com (ou via la méthode de contact jetable que vous avez fourni).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Patientez un instant. Si le vendeur n'effectue pas de dépôt, vous récupérez automatiquement votre caution. En outre, vous recevrez une compensation (vérifiez les récompenses dans votre profil).",
"We are waiting for the seller to lock the trade amount.": "Nous attendons que le vendeur verrouille le montant de la transaction.",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Renouveler la commande",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "Copier dans le presse-papiers",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "Cette facture est en attente, elle sera gelée dans votre portefeuille. Elle ne sera débitée que si vous annulez ou perdez un litige.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "Cette facture est en attente, elle sera gelée dans votre portefeuille. Elle sera remise à l'acheteur une fois que vous aurez confirmé avoir reçu les {{currencyCode}}.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Annuler la commande",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "Votre ordre public a été mis en pause. Pour l'instant, il ne peut pas être vu ou pris par d'autres robots. Vous pouvez décider de le remettre en pause à tout moment.",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "Avant de vous laisser envoyer {{amountFiat}} {{currencyCode}}, nous voulons nous assurer que vous êtes en mesure de recevoir les BTC.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Patientez un instant. Si l'acheteur ne coopère pas, vous récupérez automatiquement le dépôt de garantie et votre caution. En outre, vous recevrez une compensation (vérifiez les récompenses dans votre profil).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "Nous attendons que l'acheteur dépose une facture lightning. Dès qu'il l'aura fait, vous pourrez communiquer directement les détails du paiement.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "Parmi les ordres publics en {{currencyCode}} (la plus élevée est la moins chère)",
"If the order expires untaken, your bond will return to you (no action needed).": "Si l'ordre expire sans être prise, votre caution vous sera rendue (aucune action n'est nécessaire).",
"Pause the public order": "Suspendre la commande public",
"Premium rank": "Rang de prime",
"Public orders for {{currencyCode}}": "Ordres publics pour {{currencyCode}}",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Motif de l'échec:",
"Next attempt in": "Prochaine tentative en",
"Retrying!": "Nouvelle tentative !",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats essaiera de payer votre facture 3 fois toutes les 1 minute. S'il continue à échouer, vous pourrez soumettre une nouvelle facture. Vérifiez si vous avez suffisamment de liquidité entrante. N'oubliez pas que les nœuds lightning doivent être en ligne pour pouvoir recevoir des paiements.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "Votre facture a expiré ou plus de 3 tentatives de paiement ont été effectuées. Soumettez une nouvelle facture.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats tente de payer votre facture lightning. Rappelez-vous que les nœuds lightning doivent être en ligne pour recevoir des paiements.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Renouveler",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats s'améliore avec plus de liquidité et d'utilisateurs. Parlez de Robosats à un ami bitcoiner!",
"Sending coins to": "Envoi coins à",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "Merci ! RoboSats vous aime aussi",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "Votre TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Veuillez attendre que le preneur verrouille une caution. Si le preneur ne verrouille pas la caution à temps, l'ordre sera rendue publique à nouveau",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "Un robot technicien est arrivé !",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "J'apporte mes propres robots, les voici. (Glisser-déposer workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "C'est la première fois que je viens ici. Générer un nouveau Robot Garage et un jeton robot étendu (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Personnaliser fenêtres d'affichage",
"Freeze viewports": "Geler fenêtres d'affichage",
"unsafe_alert": "To protect your data and privacy use<1>Tor Browser</1> and visit a federation hosted <3>Onion</3> site. Or host your own <5>Client.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "Informazioni su RoboSats",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "Altro",
"Offers": "Offerte",
"Order": "Ordina",
"Robot": "Robot",
"Settings": "Impostazioni",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "Contratto",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "Puoi anche aggiungere i tuoi caratteri casuali nel token oppure",
"or visit the robot school for documentation.": "oppure visitare la scuola robotica per la documentazione.",
"roll again": "lancia di nuovo",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Inserisci il token del tuo robot per ricostruirlo ed ottenere l'accesso ai suoi scambi.",
"Paste token here": "Incolla il token qui",
"Recover": "Recupera",
"Robot recovery": "Recupera robot",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "Ordine attivo #{{orderID}}",
"Add Robot": "Aggiungi robot",
"Add a new Robot": "Aggiungi un nuovo robot",
"Building...": "Costruzione...",
"Delete Garage": "Cancella Garage",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "Ultimo ordine #{{orderID}}",
"Logout": "Esci",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "Recupero",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "Il riutilizzo di identità per gli scambi riduce la privacy rispetto ad altri utenti, coordinatori e osservatori.",
"Robot Garage": "Garage del robot",
"Store your token safely": "Custodisci il tuo token in modo sicuro",
"Welcome back!": "Ben tornato!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "Copiato!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Una piattaforma di scambi P2P su LN semplice e privata",
"Create a new robot and learn to use RoboSats": "Crea un nuovo robot e impara ad utilizzare RoboSats",
"Fast Generate Robot": "Generazione rapida di un robot",
"Recover an existing robot using your token": "Recupera un robot esistente con il tuo token",
"Recovery": "Recupero",
"Start": "Inizia",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connessione a TOR",
"Connection encrypted and anonymized using TOR.": "Connessione criptata e anonimizzata mediante TOR.",
"Not enough entropy, make it more complex": "Non c'è abbastanza entropia, rendilo più complesso",
"The token is too short": "Il token è troppo corto",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "Una piattaforma di scambi P2P su LN semplice e privata",
"Create a new robot and learn to use RoboSats": "Crea un nuovo robot e impara ad utilizzare RoboSats",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "Recupera un robot esistente con il tuo token",
"Start": "Inizia",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Connessione a TOR",
"Connection encrypted and anonymized using TOR.": "Connessione criptata e anonimizzata mediante TOR.",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "Questo garantisce la massima privacy, ma l'app potrebbe risultare lenta. Se si perde la connessione, riavviare l'app.",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "Connesso alla rete TOR",
"Connecting to TOR network": "Connessione alla rete TOR",
"Connection error": "Errore di connessione",
"Initializing TOR daemon": "Inizializzazione del processo TOR",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "QUALUNQUE",
"Buy": "Compra",
"DESTINATION": "DESTINAZIONE",
@ -101,7 +90,7 @@
"and use": "ed usa",
"hosted by": "hosted by",
"pay with": "paga con",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "Aggiungi filtro",
"Amount": "Quantità",
"An error occurred.": "Si è verificato un errore.",
@ -136,6 +125,7 @@
"Premium": "Premio",
"Price": "Prezzo",
"Reorder column": "Riordina colonna",
"Robot": "Robot",
"Sats now": "Sats ora",
"Select columns": "Seleziona colonne",
"Show all": "Mostra tutto",
@ -165,15 +155,15 @@
"starts with": "inizia con",
"true": "vero",
"yes": "si",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "In questo modo, recupererai i riquadri della mappa da un fornitore di terze parti. A seconda della tua configurazione, le informazioni private potrebbero essere divulgate a server esterni a RoboSats.",
"Close": "Chiudi",
"Download high resolution map?": "Scarica la mappa in alta risoluzione?",
"Show tiles": "Mostra riquadri",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "(GitHub).",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "Una descrizione passo passo della sequenza di scambio è disponibile in ",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "Indietro",
"Keys": "Chiavi",
"Learn how to verify": "Impara come verificare",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "La chiave PGP pubblica del tuo pari. La utilizzi per cifrare i messaggi che solo il tuo pari può leggere e per verificare che la firma del tuo pari nei messaggi che ricevi.",
"Your private key passphrase (keep secure!)": "La frase d'accesso alla tua chiave privata (Proteggila!)",
"Your public key": "La tua chiave pubblica",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "... da qualche parte sulla Terra!",
"Client info": "Client info",
"Made with": "Fatto con",
"RoboSats client version": "RoboSats client version",
"and": "e",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "Comunità",
"Follow RoboSats in Nostr": "Segui Robosats su Nostr",
"Follow RoboSats in X": "Segui RoboSats su Twitter",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "Comunicaci nuove funzionalità o bug",
"We are abandoning Telegram! Our old TG groups": "We are abandoning Telegram! Our old TG groups",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "Volume scambiato in 24h",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "Browser",
"Enable": "Attiva",
"Enable TG Notifications": "Attiva notifiche TG",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "Sarai introdotto in una conversazione con il bot RoboSats su Telegram. Apri semplicemente la chat e premi Start. Considera che attivando le notifiche Telegram potresti ridurre il tuo livello di anonimato.",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Scegli un luogo",
"Save": "Salva",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "Indietro",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "Stai per visitare la pagina Learn RoboSats. Troverai tutorial e documentazione per aiutarti ad imparare a usare RoboSats e capire come funziona.",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "Genera un Robot",
"Generate a robot avatar first. Then create your own order.": "Genera prima un avatar per il tuo robot. Poi crea il tuo ordine.",
"You do not have a robot avatar": "Non hai un avatar per il tuo robot",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Il tuo Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "Inserisci il token del tuo robot per ricostruirlo ed ottenere l'accesso ai suoi scambi.",
"Paste token here": "Incolla il token qui",
"Recover": "Recupera",
"Robot recovery": "Recupera robot",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "Salvalo!",
"Done": "Fatto",
"Store your robot token": "Salva il tuo token",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "Potresti aver bisogno di recuperare il tuo avatar robot in futuro: custodiscilo con cura. Puoi semplicemente copiarlo in un'altra applicazione.",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "Scarica il file APK di RoboSats {{coordinatorVersion}} dalle releases Github",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "Scarica il file APK di RoboSats {{coordinatorString}} dalle releases Github",
"Go away!": "Vattene!",
"On Android RoboSats app ": "Sull'app Android di RoboSats ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "Sul client Tor Browser è sufficiente aggiornare la scheda (fare clic qui o premere Ctrl+Shift+R)",
"On remotely served browser client": "Sul client del browser servito da remoto",
"On your own soverign node": "Sul proprio nodo sovrano",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "Il coordinatore RoboSats è alla versione {{coordinatorVersion}}, ma l'applicazione client è {{clientVersion}}. Questo disallineamento di versione potrebbe causare una cattiva esperienza utente.",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "Il coordinatore RoboSats è alla versione {{coordinatorString}}, ma l'applicazione client è {{clientString}}. Questo disallineamento di versione potrebbe causare una cattiva esperienza utente.",
"Update your RoboSats client": "Aggiorna il tuo client RoboSats",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "Il client RoboSats è servito dal proprio nodo, garantendo la massima sicurezza e privacy.",
"You are self-hosting RoboSats": "Stai ospitando RoboSats in autonomia",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "Non stai usando RoboSats privatemente",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "Da",
"to": "a",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": " con uno sconto del {{discount}}%",
" at a {{premium}}% premium": " con un premio del {{premium}}%",
" at market price": " al prezzo di mercato",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "Riceverai circa {{swapSats}} Sats su LN (le commissioni possono variare)",
"You send approx {{swapSats}} LN Sats (fees might vary)": "Invierai circa {{swapSats}} LN Sats (le commissioni possono variare)",
"Your order fixed exchange rate": "Il tasso di cambio fisso del tuo ordine",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "Routing Lightning fallito",
"New chat message": "Nuovo messaggio in chat",
"Order chat is open": "La chat per l'ordine è aperta",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 Scaduto!",
"🙌 Funished!": "🙌 Completato!",
"🥳 Taken!": "🥳 Preso!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "Quantità {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "Accettando questo ordine rischi di perdere tempo. Se l'offerente non procede in tempo, sarai ricompensato in sats per il 50% della cauzione dell'offerente.",
"Enter amount of fiat to exchange for bitcoin": "Inserisci la quantità di fiat da scambiare per bitcoin",
@ -451,7 +446,7 @@
"You must specify an amount first": "Devi prima specificare una quantità",
"You will receive {{satoshis}} Sats (Approx)": "Riceverai {{satoshis}} Sats (approssimativo)",
"You will send {{satoshis}} Sats (Approx)": "Invierai {{satoshis}} Sats (approssimativo)",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "Metodi di pagamento accettati",
"Amount of Satoshis": "Quantità di sats",
"Deposit timer": "Per depositare",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "Invii {{amount}} Sats via Lightning (approssimativo)",
"You send via {{method}} {{amount}}": "Invii {{amount}} via {{method}}",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Premio: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "Riscatta",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "Il tuo ordine attuale",
"Your last order #{{orderID}}": "Il tuo ultimo ordine #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "Scuro",
"Disabled": "Disabled",
"Fiat": "Fiat",
"Light": "Chiaro",
"Mainnet": "Mainnet",
"Swaps": "Swaps",
"Testnet": "Testnet",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "Connesso alla rete TOR",
"Connecting to TOR network": "Connessione alla rete TOR",
"Connection error": "Errore di connessione",
"Initializing TOR daemon": "Inizializzazione del processo TOR",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "Annulla",
"Cancel order and unlock bond instantly": "Annulla ordine e sblocca immediatamente la cauzione",
"Collaborative Cancel": "Annullamento collaborativo",
"Unilateral cancelation (bond at risk!)": "Annullamento unilaterale (cauzione a rischio!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "Hai richiesto per un annullamento collaborativo",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}} vorrebbe annullare collaborativamente",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "Acquirente",
"Completed in": "Completato in",
"Contract exchange rate": "Tasso di cambio contrattuale",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "Vedi wallet compatibili",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "Annullare l'ordine?",
"Confirm Cancel": "Conferma l'annullamento",
"If the order is cancelled now you will lose your bond.": "Se l'ordine viene annullato adesso perderai la cauzione.",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "Accetta annullamento",
"Ask for Cancel": "Richiesta di annullamento",
"Collaborative cancel the order?": "Annullare collaborativamente l'ordine?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "Il deposito di transazione è stato registrato. L'ordine può solo essere cancellato se entrambe le parti sono d'accordo all'annullamento.",
"Your peer has asked for cancellation": "Il tuo pari ha richiesto l'annullanmento",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "Sono d'accordo e apri una disputa",
"Disagree": "Non sono d'accordo",
"Do you want to open a dispute?": "Vuoi aprire una disputa?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "Assicurati di esportare il log della chat. Lo staff potrebbe richiedere il file JSON di log della chat esportato per risolvere eventuali dispute. È tua responsabilità conservarlo.",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "Lo staff di RoboSats esaminerà le dichiarazioni e le prove fornite. È necessario essere più precisi possibile, poiché lo staff non può leggere la chat. È meglio fornire un metodo di contatto temporaneo insieme alla propria dichiarazione. I satoshi presenti nel deposito saranno inviati al vincitore della disputa, mentre il perdente perderà il deposito",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "Conferma",
"Confirm you received {{amount}} {{currencyCode}}?": "Confermi la ricezione di {{amount}} {{currencyCode}}?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "Confermando di aver ricevuto {{importo}} {{currencyCode}} concluderai lo scambio. I satoshi in deposito saranno rilasciati all'acquirente. Conferma solo dopo che {{amount}} {{valutaCodice}} sono arrivati sul tuo conto. Si noti che se si riceve il pagamento e non si clicca su conferma, si rischia di perdere la propria cauzione.",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "Confermi di aver inviato {{amount}} {{currencyCode}}?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "Confermando di aver inviato {{importo}} {{currencyCode}} consentirai al tuo pari di finalizzare la transazione. Se non lo si è ancora inviato e si procede comunque a una falsa conferma, si rischia di perdere la propria cauzione.",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "LEGGERE. Nel caso in cui il pagamento al venditore sia stato bloccato e sia assolutamente impossibile concludere la compravendita, puoi annullare la tua conferma di \"Fiat inviate\". Questo solo se tu e il venditore avete già concordato in chat di procedere a un annullamento collaborativo. Dopo la conferma, il pulsante \"Annullamento collaborativo\" sarà nuovamente visibile. Fare clic su questo pulsante solo se si sa cosa si sta facendo. Agli utenti che utilizzano RoboSats per la prima volta è caldamente sconsigliato eseguire questa azione! Assicurarsi al 100% che il pagamento non sia andato a buon fine e che l'importo sia presente nel conto.",
"Revert the confirmation of fiat sent?": "Annullare la conferma dell'invio di fiat?",
"Wait ({{time}})": "Attendi ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Importo non ancora bloccato, controllare il portafoglio WebLN.",
"Invoice not received, please check your WebLN wallet.": "Fattura non ricevuta, controllare il portafoglio WebLN.",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "Ora è possibile chiudere il popup del portafoglio WebLN.",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "Controlla PGP",
"Export": "Esporta",
"Save full log as a JSON file (messages and credentials)": "Salva l'elenco completo come file JSON (messaggi e credenziali)",
"Verify your privacy": "Verifica la tua privacy",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...in attesa",
"Activate slow mode (use it when the connection is slow)": "Attiva slow mode (da utilizzare quando la connessione è lenta)",
"Peer": "Pari",
"You": "Tu",
"connected": "connesso",
"disconnected": "disconnesso",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "Connessione...",
"Send": "Invia",
"Type a message": "Digita un messaggio",
"Waiting for peer public key...": "In attesa della chiave pubblica del tuo pari...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "Allega i logs della chat",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "Allegare i logs della chat semplifica il processo di risoluzione della contestazione e aggiunge trasparenza. Tuttavia, potrebbe compromettere la tua privacy.",
"Submit dispute statement": "Dichiarazione inviata",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "Opzioni avanzate",
"Invoice to wrap": "Fattura da confezionare",
"Payout Lightning Invoice": "Fattura di pagamento Lightning",
@ -606,14 +605,14 @@
"Use Lnproxy": "Usa Lnproxy",
"Wrap": "Wrap",
"Wrapped invoice": "Wrapped invoice",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "Indirizzo Bitcoin",
"Final amount you will receive": "Importo finale che riceverai",
"Invalid": "Invalido",
"Mining Fee": "Commissione di mining",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "Il coordinatore RoboSats effettuerà uno swap e invierà i Sats al tuo indirizzo onchain.",
"Swap fee": "Commissione di swap",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "Conferma la ricezione di {{amount}} {{currencyCode}}",
"Confirm {{amount}} {{currencyCode}} sent": "Conferma l'invio di {{amount}} {{currencyCode}}",
"Open Dispute": "Apri una disputa",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "Saluta! Sii utile e conciso. Fai sapere come inviarti {{amount}} {{currencyCode}}.",
"To open a dispute you need to wait": "Per aprire una contestazione devi attendere",
"Wait for the seller to confirm he has received the payment.": "Aspetta che l'offerente confermi la ricezione del pagamento.",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "Per favore, salva le informazioni necessarie per identificare il tuo ordine e i tuoi pagamenti: ID dell'ordine; hash dei pagamenti delle garanzie o del deposito (controlla sul tuo wallet lightning); importo esatto in Sats; e nickname del robot. Dovrai identificarti come l'utente coinvolto in questa operazione tramite email (o altri metodi di contatto).",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "Puoi richiedere l'importo per la risoluzione delle controversie (deposito e cauzione) dalla sezione ricompense del tuo profilo. Se c'è qualcosa per cui lo staff può essere d'aiuto, non esitare a contattare robosats@protonmail.com (o tramite il metodo di contatto temporaneo fornito).",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Aspetta un attimo. Se l'offerente non effettua il deposito, riceverai indietro la cauzione automaticamente. In più, riceverai un compenso (controlla le ricompense sul tuo profilo).",
"We are waiting for the seller to lock the trade amount.": "Stiamo aspettando che l'offerente blocchi l'ammontare della transazione.",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "Rinnova l'ordine",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "Copia negli appunti",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "Questa è una ricevuta di deposito, verrà congelata nel tuo wallet. Sarà riscossa solamente in caso di annullamento o perdita di una disputa.",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "Questa è una ricevuta di deposito, verrà congelata nel tuo wallet. Sarà accreditata all'acquirente una volta tu abbia confermato di aver ricevuto {{currencyCode}}.",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "Rimuovi la pausa all'ordine",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "Il tuo ordine pubblico è in sospeso. Al momento non può essere visto o accettato da altri robot. È possibile scegliere di toglierlo dalla pausa in qualsiasi momento",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "Prima di lasciarti inviare {{amountFiat}} {{currencyCode}}, vogliamo assicurarci che tu sia in grado di ricevere i BTC.",
"Lightning": "Lightning",
"Onchain": "Onchain",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "Aspetta un attimo. Se l'acquirente non collabora, ti verranno restituite automaticamente la garanzia di transazione e la cauzione. In più, riceverai un compenso (controlla le ricompense sul tuo profilo).",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "Stiamo aspettando che l'acquirente invii una fattura lightning. Appena fatto, sarai in grado di comunicare direttamente i dettagli di pagamento.",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "Tra gli ordini pubblici in {{currencyCode}} (costo crescente)",
"If the order expires untaken, your bond will return to you (no action needed).": "Se l'ordine scade senza venire accettato, la cauzione ti sarà restituita (nessun'azione richiesta).",
"Pause the public order": "Sospendi l'ordine pubblico",
"Premium rank": "Classifica del premio",
"Public orders for {{currencyCode}}": "Ordini pubblici per {{currencyCode}}",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "Ragione del fallimento:",
"Next attempt in": "Prossimo tentativo",
"Retrying!": "Nuovo tentativo!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSats proverà a pagare la tua fattura 3 volte con una pausa di un minuto tra ogni tentativo. Se continua a fallire, potrai inviare una nuova fattura. Controlla se hai abbastanza liquidità in entrata. Ricorda che i nodi Lightning devono essere online per poter ricevere i pagamenti.",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "La tua fattura è scaduta o sono stati fatti più di 3 tentativi di pagamento. Invia una nuova fattura.",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats sta provando a pagare la tua fattura lightning. Ricorda che i nodi lightning devono essere online per ricevere pagamenti.",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "Rinnova",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats migliora se ha più liquidità ed utenti. Parla di Robosats ai tuoi amici bitcoiner!",
"Sending coins to": "Invio monete a",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "Grazie! Anche RoboSats ti ama",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "Il tuo TXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Per favore, attendi che l'acquirente blocchi una cauzione. Se l'acquirente non blocca una cauzione in tempo, l'ordine verrà reso nuovamente pubblico.",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "Un tecnico robot è arrivato!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "Porto i miei robots personali, eccoli. (Trascina e rilascia workspace.json)",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "Questa è la mia prima volta qui. Genera un nuovo Robot Garage e un token robot esteso (xToken).",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "Personalizza le finestre di visualizzazione",
"Freeze viewports": "Fissa le finestre di visualizzazione",
"unsafe_alert": "To protect your data and privacy use<1>Tor Browser</1> and visit a federation hosted <3>Onion</3> site. Or host your own <5>Client.</5>",

View File

@ -15,10 +15,10 @@
"RoboSats information": "RoboSats情報",
"client for nerds": "client for nerds",
"#5": "Phrases in basic/NavBar/NavBar.tsx",
"Garage": "Garage",
"More": "詳細",
"Offers": "注文書",
"Order": "注文",
"Robot": "ロボット",
"Settings": "設定",
"#6": "Phrases in basic/OrderPage/index.tsx",
"Contract": "契約",
@ -40,52 +40,41 @@
"You can also add your own random characters into the token or": "トークンに自分でランダムな文字列を追加することができます。それか…",
"or visit the robot school for documentation.": "または、ロボット教室で資料をご参考ください。",
"roll again": "もう一度生成する。",
"#8": "Phrases in basic/RobotPage/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "取引にアクセスするために、ロボットのトークンを入力してロボットを再生成してください。",
"Paste token here": "ここにトークンを貼り付けてください",
"Recover": "復元する",
"Robot recovery": "ロボットの復元",
"#9": "Phrases in basic/RobotPage/RobotProfile.tsx",
"#8": "Phrases in basic/RobotPage/RobotProfile.tsx",
"Active order #{{orderID}}": "公開中の注文 #{{orderID}}",
"Add Robot": "ロボットを追加",
"Add a new Robot": "新しいロボットを追加",
"Building...": "生成中...",
"Delete Garage": "ガレージを空にする",
"Delete Robot": "Delete Robot",
"Last order #{{orderID}}": "直前の注文 #{{orderID}}",
"Logout": "ログアウト",
"Looking for orders!": "Looking for orders!",
"No existing orders found": "No existing orders found",
"Recovery": "復元",
"Reusing trading identity degrades your privacy against other users, coordinators and observers.": "同一の身元を再利用することは、他のユーザー、管理者、観察者に対してプライバシーを弱める可能性があります。",
"Robot Garage": "ロボットガレージ",
"Store your token safely": "安全にトークンを保存してください。",
"Welcome back!": "またまたこんにちは!",
"#10": "Phrases in basic/RobotPage/TokenInput.tsx",
"#9": "Phrases in basic/RobotPage/TokenInput.tsx",
"Copied!": "コピー完了!",
"#11": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "シンプルでプライベートなライトニングP2P取引所",
"Create a new robot and learn to use RoboSats": "新しいロボットを構築して、RoboSatsの使い方を学びます",
"Fast Generate Robot": "ロボットを高速生成",
"Recover an existing robot using your token": "トークンを使用して既存のロボットを復元します",
"Recovery": "復元",
"Start": "スタート",
"#12": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Torネットワークに接続中",
"Connection encrypted and anonymized using TOR.": "接続はTORを使って暗号化され、匿名化されています。",
"Not enough entropy, make it more complex": "Not enough entropy, make it more complex",
"The token is too short": "The token is too short",
"#10": "Phrases in basic/RobotPage/Welcome.tsx",
"A Simple and Private LN P2P Exchange": "シンプルでプライベートなライトニングP2P取引所",
"Create a new robot and learn to use RoboSats": "新しいロボットを構築して、RoboSatsの使い方を学びます",
"Fast Generate Order": "Fast Generate Order",
"Recover an existing robot using your token": "トークンを使用して既存のロボットを復元します",
"Start": "スタート",
"#11": "Phrases in basic/RobotPage/index.tsx",
"Connecting to TOR": "Torネットワークに接続中",
"Connection encrypted and anonymized using TOR.": "接続はTORを使って暗号化され、匿名化されています。",
"This ensures maximum privacy, however you might feel the app behaves slow. If connection is lost, restart the app.": "これにより最大限のプライバシーが確保されますが、アプリの動作が遅いと感じることがあります。接続が切断された場合は、アプリを再起動してください。",
"#13": "Phrases in basic/SettingsPage/index.tsx",
"#12": "Phrases in basic/SettingsPage/index.tsx",
"Add": "Add",
"Alias": "Alias",
"Alias already exists": "Alias already exists",
"Invalid Onion URL": "Invalid Onion URL",
"URL": "URL",
"#14": "Phrases in components/TorConnection.tsx",
"Connected to TOR network": "TORネットワークに接続しました",
"Connecting to TOR network": "TORネットワークに接続中",
"Connection error": "接続エラー",
"Initializing TOR daemon": "TORデーモンを初期化中",
"#15": "Phrases in components/BookTable/BookControl.tsx",
"#13": "Phrases in components/BookTable/BookControl.tsx",
"ANY": "すべて",
"Buy": "購入",
"DESTINATION": "方向",
@ -101,7 +90,7 @@
"and use": "そして使用するのは",
"hosted by": "hosted by",
"pay with": "支払い方法は:",
"#16": "Phrases in components/BookTable/index.tsx",
"#14": "Phrases in components/BookTable/index.tsx",
"Add filter": "フィルタを追加",
"Amount": "量",
"An error occurred.": "エラーが発生しました。",
@ -136,6 +125,7 @@
"Premium": "プレミアム",
"Price": "価格",
"Reorder column": "列の並び替え",
"Robot": "ロボット",
"Sats now": "現在のSats",
"Select columns": "列を選択",
"Show all": "すべて表示",
@ -165,15 +155,15 @@
"starts with": "〜で始まる",
"true": "True",
"yes": "はい",
"#17": "Phrases in components/Charts/DepthChart/index.tsx",
"#18": "Phrases in components/Charts/MapChart/index.tsx",
"#15": "Phrases in components/Charts/DepthChart/index.tsx",
"#16": "Phrases in components/Charts/MapChart/index.tsx",
"Accept": "Accept",
"By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.": "By doing so, you will be fetching map tiles from a third-party provider. Depending on your setup, private information might be leaked to servers outside the RoboSats federation.",
"Close": "閉じる",
"Download high resolution map?": "Download high resolution map?",
"Show tiles": "Show tiles",
"#19": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#20": "Phrases in components/Dialogs/About.tsx",
"#17": "Phrases in components/Charts/helpers/OrderTooltip/index.tsx",
"#18": "Phrases in components/Dialogs/About.tsx",
"(GitHub).": "GitHub。 ",
"(Telegram)": "(Telegram)",
". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.": ". RoboSats developers will never contact you. The developers or the coordinators will definitely never ask for your robot token.",
@ -213,7 +203,7 @@
"You can find a step-by-step description of the trade pipeline in ": "取引プロセスのステップバイステップの説明は、以下のリンク先でご確認いただけます。",
"Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.": "Your sats will return to you. Any hold invoice that is not settled would be automatically returned even if the coordinator goes down forever. This is true for both, locked bonds and trading escrows. However, there is a small window between the seller confirms FIAT RECEIVED and the moment the buyer receives the satoshis when the funds could be permanently lost if the coordinator disappears. This window is usually about 1 second long. Make sure to have enough inbound liquidity to avoid routing failures. If you have any problem, reach out trough the RoboSats public channels or directly to your trade coordinator using one of the contact methods listed on their profile.",
"Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.": "Your trade partner will not know the destination of the Lightning payment. The permanence of the data collected by the coordinators depend on their privacy and data policies. If a dispute arises, a coordinator may request additional information. The specifics of this process can vary from coordinator to coordinator.",
"#21": "Phrases in components/Dialogs/AuditPGP.tsx",
"#19": "Phrases in components/Dialogs/AuditPGP.tsx",
"Go back": "戻る",
"Keys": "鍵",
"Learn how to verify": "確認方法を学ぶ",
@ -229,13 +219,13 @@
"Your peer PGP public key. You use it to encrypt messages only he can read and to verify your peer signed the incoming messages.": "これはあなたの取引相手のPGP公開鍵です。あなたは相手専用の暗号化メッセージを送信するために使用し、また受信したメッセージが相手によって署名されたものであることを確認するためにも使用します。",
"Your private key passphrase (keep secure!)": "あなたの秘密鍵のパスフレーズ(安全に保ってください!)",
"Your public key": "あなたの公開鍵",
"#22": "Phrases in components/Dialogs/Client.tsx",
"#20": "Phrases in components/Dialogs/Client.tsx",
"... somewhere on Earth!": "......地球上のどっかから!",
"Client info": "Client info",
"Made with": "と",
"RoboSats client version": "RoboSats client version",
"and": "を込めて",
"#23": "Phrases in components/Dialogs/Community.tsx",
"#21": "Phrases in components/Dialogs/Community.tsx",
"Community": "コミュニティー",
"Follow RoboSats in Nostr": "Follow RoboSats in Nostr",
"Follow RoboSats in X": "Follow RoboSats in X",
@ -250,7 +240,7 @@
"Tell us about a new feature or a bug": "新しい機能やバグについて教えてください",
"We are abandoning Telegram! Our old TG groups": "We are abandoning Telegram! Our old TG groups",
"X Official Account": "X Official Account",
"#24": "Phrases in components/Dialogs/Coordinator.tsx",
"#22": "Phrases in components/Dialogs/Coordinator.tsx",
"...Opening on Nostr gateway. Pubkey copied!": "...Opening on Nostr gateway. Pubkey copied!",
"24h contracted volume": "24時間の契約量",
"24h non-KYC bitcoin premium": "24h non-KYC bitcoin premium",
@ -299,61 +289,66 @@
"Website": "Website",
"X": "X",
"Zaps voluntarily for development": "Zaps voluntarily for development",
"#25": "Phrases in components/Dialogs/EnableTelegram.tsx",
"#23": "Phrases in components/Dialogs/EnableTelegram.tsx",
"Browser": "ブラウザー",
"Enable": "有効化",
"Enable TG Notifications": "テレグラム通知を有効にする",
"You will be taken to a conversation with RoboSats telegram bot. Simply open the chat and press Start. Note that by enabling telegram notifications you might lower your level of anonymity.": "RoboSatsのテレグラムボットとのチャットに移動します。チャットを開いて「Start」を押してください。テレグラム通知を有効にすることで匿名レベルが低下する可能性があることに注意してください。",
"#26": "Phrases in components/Dialogs/Exchange.tsx",
"#24": "Phrases in components/Dialogs/Exchange.tsx",
"Enabled RoboSats coordinators": "Enabled RoboSats coordinators",
"Exchange Summary": "Exchange Summary",
"Online RoboSats coordinators": "Online RoboSats coordinators",
"#27": "Phrases in components/Dialogs/F2fMap.tsx",
"#25": "Phrases in components/Dialogs/F2fMap.tsx",
"Choose a location": "Choose a location",
"Save": "Save",
"#28": "Phrases in components/Dialogs/Learn.tsx",
"#26": "Phrases in components/Dialogs/Learn.tsx",
"Back": "戻る",
"You are about to visit Learn RoboSats. It hosts tutorials and documentation to help you learn how to use RoboSats and understand how it works.": "「Learn RoboSats」学習ページにアクセスしようとしています。RoboSatsの使い方を学び、動作原理を理解するためのチュートリアルとドキュメントが提供されています。",
"#29": "Phrases in components/Dialogs/NoRobot.tsx",
"#27": "Phrases in components/Dialogs/NoRobot.tsx",
"Generate Robot": "ロボットを生成する",
"Generate a robot avatar first. Then create your own order.": "最初にロボットアバターを生成してください。次に自分のオーダーを作成してください。",
"You do not have a robot avatar": "ロボットのアバターがありません",
"#30": "Phrases in components/Dialogs/Profile.tsx",
"#28": "Phrases in components/Dialogs/Profile.tsx",
"Coordinators that know your robot:": "Coordinators that know your robot:",
"Looking for your robot!": "Looking for your robot!",
"Your Robot": "Your Robot",
"#31": "Phrases in components/Dialogs/StoreToken.tsx",
"#29": "Phrases in components/Dialogs/Recovery.tsx",
"Enter your robot token to re-build your robot and gain access to its trades.": "取引にアクセスするために、ロボットのトークンを入力してロボットを再生成してください。",
"Paste token here": "ここにトークンを貼り付けてください",
"Recover": "復元する",
"Robot recovery": "ロボットの復元",
"#30": "Phrases in components/Dialogs/StoreToken.tsx",
"Back it up!": "バックアップを取ってください!",
"Done": "完了",
"Store your robot token": "ロボットトークンを保存する",
"You might need to recover your robot avatar in the future: store it safely. You can simply copy it into another application.": "将来、ロボットアバターを回復する必要があるかもしれません。安全に保存してください。別のアプリケーションに簡単にコピーすることができます。",
"#32": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorVersion}} APK from Github releases": "GithubリリースからRoboSats {{coordinatorVersion}} APKをダウンロードしてください。",
"#31": "Phrases in components/Dialogs/Update.tsx",
"Download RoboSats {{coordinatorString}} APK from Github releases": "GithubリリースからRoboSats {{coordinatorString}} APKをダウンロードしてください。",
"Go away!": "行ってしまえ!",
"On Android RoboSats app ": "AndroidのRoboSatsアプリ ",
"On Tor Browser client simply refresh your tab (click here or press Ctrl+Shift+R)": "Torブラウザクライアントでタブを更新するだけでいいですここをクリックするか、Ctrl+Shift+Rを押します",
"On remotely served browser client": "リモートで提供されるブラウザクライアントで",
"On your own soverign node": "あなた自身の主権ノードで",
"The RoboSats coordinator is on version {{coordinatorVersion}}, but your client app is {{clientVersion}}. This version mismatch might lead to a bad user experience.": "RoboSatsコーディネーターはバージョン{{coordinatorVersion}}で、クライアントアプリは{{clientVersion}}です。このバージョンの不一致は、悪いユーザーエクスペリエンスを引き起こす可能性があります。",
"The RoboSats coordinator is on version {{coordinatorString}}, but your client app is {{clientString}}. This version mismatch might lead to a bad user experience.": "RoboSatsコーディネーターはバージョン{{coordinatorString}}で、クライアントアプリは{{clientString}}です。このバージョンの不一致は、悪いユーザーエクスペリエンスを引き起こす可能性があります。",
"Update your RoboSats client": "RoboSatsクライアントを更新してください",
"#33": "Phrases in components/Dialogs/Warning.tsx",
"#32": "Phrases in components/Dialogs/Warning.tsx",
"Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.": "Coordinators of p2p trades are the source of trust, provide the infrastructure, pricing and will mediate in case of dispute. Make sure you research and trust \"{{coordinator_name}}\" before locking your bond. A malicious p2p coordinator can find ways to steal from you.",
"I understand": "I understand",
"Warning": "Warning",
"#34": "Phrases in components/FederationTable/index.tsx",
"#33": "Phrases in components/FederationTable/index.tsx",
"Coordinators per page:": "Coordinators per page:",
"Enabled": "Enabled",
"No coordinators found.": "No coordinators found.",
"Up": "Up",
"#35": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"#34": "Phrases in components/HostAlert/SelfhostedAlert.tsx",
"RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSatsクライアントは、あなた自身のードから提供され、最高のセキュリティとプライバシーが保証されます。",
"You are self-hosting RoboSats": "RoboSatsを自己ホスティングしています",
"#36": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"#35": "Phrases in components/HostAlert/UnsafeAlert.tsx",
"You are not using RoboSats privately": "RoboSatsをプライベートで使用していません",
"#37": "Phrases in components/MakerForm/AmountRange.tsx",
"#36": "Phrases in components/MakerForm/AmountRange.tsx",
"From": "から",
"to": "まで",
"#38": "Phrases in components/MakerForm/MakerForm.tsx",
"#37": "Phrases in components/MakerForm/MakerForm.tsx",
" at a {{discount}}% discount": "{{discount}}%のディスカウントで",
" at a {{premium}}% premium": "{{premium}}%のプレミアムで",
" at market price": " at market price",
@ -411,10 +406,10 @@
"You receive approx {{swapSats}} LN Sats (fees might vary)": "約{{swapSats}} ライトニングSatsを受け取ります手数料は異なる場合があります",
"You send approx {{swapSats}} LN Sats (fees might vary)": "約{{swapSats}} ライトニングSatsを送信します手数料は異なる場合があります",
"Your order fixed exchange rate": "注文の固定為替レート",
"#39": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"#38": "Phrases in components/MakerForm/SelectCoordinator.tsx",
"Order Host": "Order Host",
"The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!": "The provider the lightning and communication infrastructure. The host will be in charge of providing support and solving disputes. The trade fees are set by the host. Make sure to only select order hosts that you trust!",
"#40": "Phrases in components/Notifications/index.tsx",
"#39": "Phrases in components/Notifications/index.tsx",
"Lightning routing failed": "ライトニングのルーティングに失敗しました",
"New chat message": "チャットに新しいメッセージがあります",
"Order chat is open": "注文のチャットが開かれています",
@ -438,7 +433,7 @@
"😪 Expired!": "😪 期限切れ!",
"🙌 Funished!": "🙌 完了!",
"🥳 Taken!": "🥳 受け取られました!",
"#41": "Phrases in components/OrderDetails/TakeButton.tsx",
"#40": "Phrases in components/OrderDetails/TakeButton.tsx",
"Amount {{currencyCode}}": "金額 {{currencyCode}}",
"By taking this order you risk wasting your time. If the maker does not proceed in time, you will be compensated in satoshis for 50% of the maker bond.": "このオーダーを引き受けることで、時間を無駄にする可能性があります。メーカーが指定された時間内に進まない場合、メーカーの担保金の50に相当するSatsで補償されます。",
"Enter amount of fiat to exchange for bitcoin": "ビットコインと交換するフィアット通貨の金額を入力してください",
@ -451,7 +446,7 @@
"You must specify an amount first": "まず金額を指定する必要があります",
"You will receive {{satoshis}} Sats (Approx)": "{{satoshis}} Satsを受け取りますおおよその金額",
"You will send {{satoshis}} Sats (Approx)": "{{satoshis}} Satsを送信しますおおよその金額",
"#42": "Phrases in components/OrderDetails/index.tsx",
"#41": "Phrases in components/OrderDetails/index.tsx",
"Accepted payment methods": "受け付ける支払い方法",
"Amount of Satoshis": "サトシの金額",
"Deposit timer": "デポジットタイマー",
@ -475,7 +470,7 @@
"You send via Lightning {{amount}} Sats (Approx)": "ライトニングで{{amount}} Satsを送信します",
"You send via {{method}} {{amount}}": "{{method}}で{{amount}}を送信します",
"{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - プレミアム: {{premium}}%",
"#43": "Phrases in components/RobotInfo/index.tsx",
"#42": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!",
"Claim": "請求する",
"Claim Sats!": "Claim Sats!",
@ -494,25 +489,29 @@
"Your current order": "現在のオーダー",
"Your last order #{{orderID}}": "前回のオーダー #{{orderID}}",
"finished order": "finished order",
"#44": "Phrases in components/SettingsForm/index.tsx",
"#43": "Phrases in components/SettingsForm/index.tsx",
"API": "API",
"Build-in": "Build-in",
"Dark": "ダーク",
"Disabled": "Disabled",
"Fiat": "フィアット",
"Light": "ライト",
"Mainnet": "メインネット",
"Swaps": "スワップ",
"Testnet": "テストネット",
"#45": "Phrases in components/TorConnection/index.tsx",
"#46": "Phrases in components/TradeBox/CancelButton.tsx",
"nostr": "nostr",
"#44": "Phrases in components/TorConnection/index.tsx",
"Connected to TOR network": "TORネットワークに接続しました",
"Connecting to TOR network": "TORネットワークに接続中",
"Connection error": "接続エラー",
"Initializing TOR daemon": "TORデーモンを初期化中",
"#45": "Phrases in components/TradeBox/CancelButton.tsx",
"Cancel": "キャンセル",
"Cancel order and unlock bond instantly": "注文をキャンセルして、担保金を解除する",
"Collaborative Cancel": "共同キャンセル",
"Unilateral cancelation (bond at risk!)": "一方的なキャンセル(担保金が危険に!)",
"#47": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"#46": "Phrases in components/TradeBox/CollabCancelAlert.tsx",
"You asked for a collaborative cancellation": "あなたが共同的なキャンセルを求めています",
"{{nickname}} is asking for a collaborative cancel": "{{nickname}}が共同的なキャンセルを求めています",
"#48": "Phrases in components/TradeBox/TradeSummary.tsx",
"#47": "Phrases in components/TradeBox/TradeSummary.tsx",
"Buyer": "買い手",
"Completed in": "完了",
"Contract exchange rate": "契約為替レート",
@ -538,64 +537,64 @@
"{{routingFeeSats}} MiliSats": "{{routingFeeSats}} MiliSats",
"{{swapFeeSats}} Sats ({{swapFeePercent}}%)": "{{swapFeeSats}} Sats ({{swapFeePercent}}%)",
"{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)": "{{tradeFeeSats}} Sats ({{tradeFeePercent}}%)",
"#49": "Phrases in components/TradeBox/WalletsButton.tsx",
"#48": "Phrases in components/TradeBox/WalletsButton.tsx",
"See Compatible Wallets": "互換性のあるウォレットを見る",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"#49": "Phrases in components/TradeBox/Dialogs/ConfirmCancel.tsx",
"Cancel the order?": "注文をキャンセルしますか?",
"Confirm Cancel": "キャンセルを確認",
"If the order is cancelled now you will lose your bond.": "注文を今キャンセルすると担保金を失います。",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"#50": "Phrases in components/TradeBox/Dialogs/ConfirmCollabCancel.tsx",
"Accept Cancelation": "キャンセルを受け入れる",
"Ask for Cancel": "キャンセルを要求する",
"Collaborative cancel the order?": "注文を共同キャンセルしますか?",
"The trade escrow has been posted. The order can be cancelled only if both, maker and taker, agree to cancel.": "取引用エスクローが投稿されました。メーカーとテイカーが両方共同でキャンセルすることで注文をキャンセルできます。",
"Your peer has asked for cancellation": "あなたの相手がキャンセルを要求しました",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"#51": "Phrases in components/TradeBox/Dialogs/ConfirmDispute.tsx",
"Agree and open dispute": "同意して紛争を開始する",
"Disagree": "戻る",
"Do you want to open a dispute?": "紛争を開始しますか?",
"Make sure to EXPORT the chat log. The staff might request your exported chat log JSON in order to solve discrepancies. It is your responsibility to store it.": "チャットログをエクスポートすることを確認してください。スタッフは、不一致を解決するためにエクスポートされたチャットログJSONを要求する場合があります。保存する責任があなたにあります。",
"The RoboSats staff will examine the statements and evidence provided. You need to build a complete case, as the staff cannot read the chat. It is best to provide a burner contact method with your statement. The satoshis in the trade escrow will be sent to the dispute winner, while the dispute loser will lose the bond.": "RoboSatsスタッフは、提供された声明と証拠を調査します。スタッフはチャットを読めないため、完全な証拠を提供する必要があります。声明とともに使い捨ての連絡方法を提供するのが最善です。トレードのエスクローにあるSatsは、紛争の勝者に送られ、紛争の敗者は担保金を失います。",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"#52": "Phrases in components/TradeBox/Dialogs/ConfirmFiatReceived.tsx",
"Confirm": "確認する",
"Confirm you received {{amount}} {{currencyCode}}?": "{{amount}} {{currencyCode}}を受け取ったことを確認しますか?",
"Confirming that you received {{amount}} {{currencyCode}} will finalize the trade. The satoshis in the escrow will be released to the buyer. Only confirm after {{amount}} {{currencyCode}} have arrived to your account. Note that if you have received the payment and do not click confirm, you risk losing your bond.": "{{amount}} {{currencyCode}}を受け取ったことを確認すると、取引が完了します。 エスクローにあるSatsが買い手に解放されます。 {{amount}} {{currencyCode}}があなたのアカウントに到着した後にのみ確認してください。 支払いを受け取った場合に確認しない場合、担保金を失うリスクがあることに注意してください。",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"#53": "Phrases in components/TradeBox/Dialogs/ConfirmFiatSent.tsx",
"Confirm you sent {{amount}} {{currencyCode}}?": "{{amount}} {{currencyCode}} を送信したことを確認しますか?",
"Confirming that you sent {{amount}} {{currencyCode}} will allow your peer to finalize the trade. If you have not yet sent it and you still proceed to falsely confirm, you risk losing your bond.": "{{amount}} {{currencyCode}}を送信したことを確認することで、取引を最終的に完了することができます。まだ送信していない場合、偽の確認を続けると、担保金を失う可能性があります。",
"#55": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"#54": "Phrases in components/TradeBox/Dialogs/ConfirmUndoFiatSent.tsx",
"READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.": "READ. In case your payment to the seller has been blocked and it is absolutely impossible to finish the trade, you can revert your confirmation of \"Fiat sent\". Do so only if you and the seller have ALREADY AGREED in the chat to proceed to a collaborative cancellation. After confirming, the \"Collaborative cancel\" button will be visible again. Only click this button if you know what you are doing. First time users of RoboSats are highly discouraged from performing this action! Make 100% sure your payment has failed and the amount is in your account.",
"Revert the confirmation of fiat sent?": "Revert the confirmation of fiat sent?",
"Wait ({{time}})": "Wait ({{time}})",
"#56": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"#55": "Phrases in components/TradeBox/Dialogs/WebLN.tsx",
"Amount not yet locked, please check your WebLN wallet.": "Satsがまだロックされていません。WebLNウォレットを確認してください。",
"Invoice not received, please check your WebLN wallet.": "インボイスが受信されていません。WebLNウォレットを確認してください。",
"WebLN": "WebLN",
"You can close now your WebLN wallet popup.": "WebLNウォレットのポップアップを閉じても良いです。",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"#56": "Phrases in components/TradeBox/EncryptedChat/ChatBottom/index.tsx",
"Audit PGP": "PGPを監査する",
"Export": "エクスポート",
"Save full log as a JSON file (messages and credentials)": "全ログをJSONファイルとして保存するメッセージと資格情報",
"Verify your privacy": "プライバシーを確認する",
"#58": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"#57": "Phrases in components/TradeBox/EncryptedChat/ChatHeader/index.tsx",
"...waiting": "...待機中",
"Activate slow mode (use it when the connection is slow)": "スローモードを有効にする(接続が遅い場合に使用)",
"Peer": "相手",
"You": "あなた",
"connected": "接続されました",
"disconnected": "切断されました",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"#58": "Phrases in components/TradeBox/EncryptedChat/EncryptedSocketChat/index.tsx",
"Connecting...": "接続中...",
"Send": "送信する",
"Type a message": "メッセージを入力してください",
"Waiting for peer public key...": "相手の公開鍵を待っています...",
"#60": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#61": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#62": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"#59": "Phrases in components/TradeBox/EncryptedChat/EncryptedTurtleChat/index.tsx",
"#60": "Phrases in components/TradeBox/EncryptedChat/MessageCard/index.tsx",
"#61": "Phrases in components/TradeBox/Forms/Dispute.tsx",
"Attach chat logs": "チャットログを添付する",
"Attaching chat logs helps the dispute resolution process and adds transparency. However, it might compromise your privacy.": "チャットログを添付することで紛争解決プロセスが促進され、透明性が高まります。ただし、プライバシーが危険にさらされる可能性があります。",
"Submit dispute statement": "紛争申し立てを送信する",
"#63": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"#62": "Phrases in components/TradeBox/Forms/LightningPayout.tsx",
"Advanced options": "高度な設定",
"Invoice to wrap": "ラップするインボイス",
"Payout Lightning Invoice": "支払いのライトニングインボイス",
@ -606,14 +605,14 @@
"Use Lnproxy": "Lnproxyを使用する",
"Wrap": "ラップする",
"Wrapped invoice": "ラップされたインボイス",
"#64": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"#63": "Phrases in components/TradeBox/Forms/OnchainPayout.tsx",
"Bitcoin Address": "ビットコインアドレス",
"Final amount you will receive": "あなたが受け取る最終金額",
"Invalid": "無効",
"Mining Fee": "マイニング手数料",
"RoboSats coordinator will do a swap and send the Sats to your onchain address.": "RoboSatsコーディネーターがスワップを実行し、Satsをあなたのオンチェーンアドレスに送信します。",
"Swap fee": "スワップ手数料",
"#65": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"#64": "Phrases in components/TradeBox/Prompts/Chat.tsx",
"Confirm {{amount}} {{currencyCode}} received": "{{amount}} {{currencyCode}}が受信されたことを確認する",
"Confirm {{amount}} {{currencyCode}} sent": "{{amount}} {{currencyCode}}が送信されたことを確認する",
"Open Dispute": "紛争を開始する",
@ -621,52 +620,52 @@
"Say hi! Be helpful and concise. Let them know how to send you {{amount}} {{currencyCode}}.": "こんにちはと言ってください!役に立つように簡潔にしてください。どのようにして{{amount}} {{currencyCode}}を送信するかを知らせてください。",
"To open a dispute you need to wait": "紛争を開くには待つ必要があります",
"Wait for the seller to confirm he has received the payment.": "売り手が支払いを受け取ったことを確認するまで待ちます。",
"#66": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"#65": "Phrases in components/TradeBox/Prompts/Dispute.tsx",
"Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.": "Please, submit your statement. Be clear and specific about what happened and provide the necessary evidence. You MUST provide a contact method: burner email, SimpleX incognito link or telegram (make sure to create a searchable username) to follow up with the dispute solver (your trade host/coordinator). Disputes are solved at the discretion of real robots (aka humans), so be as helpful as possible to ensure a fair outcome.",
"#67": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"#66": "Phrases in components/TradeBox/Prompts/DisputeLoser.tsx",
"Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com": "Unfortunately you have lost the dispute. If you think this is a mistake you can ask to re-open the case by contacting your coordinator. If you think your coordinator was unfair, please fill a claim via email to robosats@protonmail.com",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"#67": "Phrases in components/TradeBox/Prompts/DisputeWaitPeer.tsx",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.": "Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself using that information if you contact your trade coordinator.",
"We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.": "We are waiting for your trade counterpart statement. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods.",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"#68": "Phrases in components/TradeBox/Prompts/DisputeWaitResolution.tsx",
"Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.": "Both statements have been received, wait for the staff to resolve the dispute. If you are hesitant about the state of the dispute or want to add more information, contact your order trade coordinator (the host) via one of their contact methods. If you did not provide a contact method, or are unsure whether you wrote it right, write your coordinator immediately.",
"Please, save the information needed to identify your order and your payments: order ID; payment hashes of the bonds or escrow (check on your lightning wallet); exact amount of satoshis; and robot nickname. You will have to identify yourself as the user involved in this trade via email (or other contact methods).": "注文と支払いを識別するために必要な情報を保存してください注文、担保金またはエスクローの支払いハッシュライトニングウォレットで確認してください、正確なSatsの量、およびロボットのニックネーム。この取引に関与したユーザーとして自分自身をメールまたは他の連絡方法で識別する必要があります。",
"#70": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"#69": "Phrases in components/TradeBox/Prompts/DisputeWinner.tsx",
"You can claim the dispute resolution amount (escrow and fidelity bond) from your profile rewards. If there is anything the staff can help with, do not hesitate to contact to robosats@protonmail.com (or via your provided burner contact method).": "あなたはプロフィールの報酬から紛争解決金額エスクローと担保金を請求することができます。もしあなたに何かスタッフが助けられることがあれば、robosats@protonmail.comまたは提供された使い捨て連絡先方法を通じてまでお気軽にお問い合わせください。",
"#71": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"#70": "Phrases in components/TradeBox/Prompts/EscrowWait.tsx",
"Just hang on for a moment. If the seller does not deposit, you will get your bond back automatically. In addition, you will receive a compensation (check the rewards in your profile).": "もうしばらくお待ちください。もし売り手がデポジットしない場合は、担保金が自動的に返金されます。さらに、報酬を受け取ることができます(プロフィールで報酬を確認してください)。",
"We are waiting for the seller to lock the trade amount.": "売り手が取引金額をロックするまでお待ちください。",
"#72": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"#71": "Phrases in components/TradeBox/Prompts/Expired.tsx",
"Renew Order": "注文を更新する",
"#73": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"#72": "Phrases in components/TradeBox/Prompts/LockInvoice.tsx",
"Copy to clipboard": "クリップボードにコピーする",
"This is a hold invoice, it will freeze in your wallet. It will be charged only if you cancel or lose a dispute.": "これは保留中のインボイスです。あなたのウォレットの中で凍結されます。キャンセルまたは紛争に敗訴した場合にのみ請求されます。",
"This is a hold invoice, it will freeze in your wallet. It will be released to the buyer once you confirm to have received the {{currencyCode}}.": "これは保留中のインボイスです。あなたのウォレットの中で凍結されます。{{currencyCode}}を受け取ったことを確認すると、買い手にリリースされます。",
"#74": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"#73": "Phrases in components/TradeBox/Prompts/Paused.tsx",
"Unpause Order": "注文の再開",
"Your public order has been paused. At the moment it cannot be seen or taken by other robots. You can choose to unpause it at any time.": "あなたの公開注文は一時停止されました。現時点では、他のロボットに見ることも取ることもできません。いつでも再開することができます。",
"#75": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"#74": "Phrases in components/TradeBox/Prompts/Payout.tsx",
"Before letting you send {{amountFiat}} {{currencyCode}}, we want to make sure you are able to receive the BTC.": "{{amountFiat}} {{currencyCode}}を送信する前に、あなたがBTCを受け取ることができるかどうかを確認したいと思います。",
"Lightning": "ライトニング",
"Onchain": "オンチェーン",
"#76": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"#75": "Phrases in components/TradeBox/Prompts/PayoutWait.tsx",
"Just hang on for a moment. If the buyer does not cooperate, you will get back the trade collateral and your bond automatically. In addition, you will receive a compensation (check the rewards in your profile).": "もうしばらくお待ちください。もし買い手が協力しない場合、取引担保と担保金が自動的に返金されます。さらに、報酬を受け取ることができます(プロフィールで報酬を確認してください)。",
"We are waiting for the buyer to post a lightning invoice. Once he does, you will be able to directly communicate the payment details.": "買い手がライトニングインボイスを投稿するのを待っています。投稿されたら、直接フィアット通貨決済の詳細を通知できます。",
"#77": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"#76": "Phrases in components/TradeBox/Prompts/PublicWait.tsx",
"Among public {{currencyCode}} orders (higher is cheaper)": "{{currencyCode}}の公開注文の中で(高い方が安い)",
"If the order expires untaken, your bond will return to you (no action needed).": "オーダーが期限切れになっても取られない場合、あなたの担保金はあなたに戻ります(何も行動する必要はありません)。",
"Pause the public order": "公開注文を一時停止する",
"Premium rank": "プレミアムランク",
"Public orders for {{currencyCode}}": "{{currencyCode}}の公開注文",
"#78": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"#77": "Phrases in components/TradeBox/Prompts/RoutingFailed.tsx",
"Failure reason:": "失敗の原因:",
"Next attempt in": "次の試行まで",
"Retrying!": "再試行中!",
"RoboSats will try to pay your invoice 3 times with a one minute pause in between. If it keeps failing, you will be able to submit a new invoice. Check whether you have enough inbound liquidity. Remember that lightning nodes must be online in order to receive payments.": "RoboSatsは分の休憩を挟んでインボイスを回支払おうとします。引き続き失敗する場合は、新しいインボイスを提出できます。十分な流動性があるかどうかを確認してください。ライトニングードは、支払いを受け取るためにオンラインにする必要があることを忘れないでください。",
"Your invoice has expired or more than 3 payment attempts have been made. Submit a new invoice.": "インボイスの有効期限が切れているか、3回以上の支払い試行が行われました。新しいインボイスを提出してください。",
"#79": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"#78": "Phrases in components/TradeBox/Prompts/SendingSats.tsx",
"RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSatsはあなたのライトニングインボイスを支払おうとしています。支払いを受け取るには、ライトニングードがオンラインである必要があることを忘れないでください。",
"#80": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"#79": "Phrases in components/TradeBox/Prompts/Successful.tsx",
"Renew": "更新する",
"RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSatsはより多くの流動性とユーザーでより良くなります。ビットコイナーのお友達にRoboSatsについて話してください",
"Sending coins to": "コインを送信する先",
@ -675,13 +674,13 @@
"Thank you! RoboSats loves you too": "ありがとうございます! RoboSatsもあなたを愛しています",
"What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?",
"Your TXID": "あなたのTXID",
"#81": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"#80": "Phrases in components/TradeBox/Prompts/TakerFound.tsx",
"Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "テイカーが担保金をロックするまでお待ちください。タイムリミット内に担保金がロックされない場合、オーダーは再度公開されます。",
"#82": "Phrases in pro/LandingDialog/index.tsx",
"#81": "Phrases in pro/LandingDialog/index.tsx",
"A robot technician has arrived!": "ロボット技術者が到着しました!",
"I bring my own robots, here they are. (Drag and drop workspace.json)": "私は自分のロボットを持っています、ここにあります。workspace.jsonをドラッグアンドドロップしてください",
"My first time here. Generate a new Robot Garage and extended robot token (xToken).": "初めてここに来ました。新しいロボットガレージと拡張ロボットトークンxTokenを生成します。",
"#83": "Phrases in pro/ToolBar/index.tsx",
"#82": "Phrases in pro/ToolBar/index.tsx",
"Customize viewports": "表示のカスタマイズ",
"Freeze viewports": "表示を凍結",
"unsafe_alert": "To protect your data and privacy use<1>Tor Browser</1> and visit a federation hosted <3>Onion</3> site. Or host your own <5>Client.</5>",

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