diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index ff4ed6fc..900e918d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,4 +1,4 @@ -import React, { StrictMode, Suspense } from 'react'; +import React, { StrictMode, Suspense, useContext } from 'react'; import ReactDOM from 'react-dom/client'; import Main from './basic/Main'; import { CssBaseline } from '@mui/material'; @@ -10,11 +10,13 @@ import i18n from './i18n/Web'; import { systemClient } from './services/System'; import ErrorBoundary from './components/ErrorBoundary'; -import { AppContextProvider } from './contexts/AppContext'; +import { AppContext, AppContextProvider, UseAppStoreType } from './contexts/AppContext'; import { GarageContextProvider } from './contexts/GarageContext'; import { FederationContextProvider } from './contexts/FederationContext'; const App = (): JSX.Element => { + const { settings } = useContext(AppContext); + return ( diff --git a/frontend/src/basic/RobotPage/index.tsx b/frontend/src/basic/RobotPage/index.tsx index 6e648929..5ff2599f 100644 --- a/frontend/src/basic/RobotPage/index.tsx +++ b/frontend/src/basic/RobotPage/index.tsx @@ -44,7 +44,7 @@ const RobotPage = (): JSX.Element => { const token = urlToken ?? garage.currentSlot; if (token !== undefined && token !== null && page === 'robot') { setInputToken(token); - if (window.NativeRobosats === undefined || torStatus === 'ON') { + if (window.NativeRobosats === undefined || torStatus === 'ON' || !settings.useProxy) { getGenerateRobot(token); setView('profile'); } @@ -83,7 +83,7 @@ const RobotPage = (): JSX.Element => { garage.deleteSlot(); }; - if (!(window.NativeRobosats === undefined) && !(torStatus === 'ON')) { + if (settings.useProxy && !(window.NativeRobosats === undefined) && !(torStatus === 'ON')) { return ( { - // Why? - // const slot = garage.getSlot(); - // if (slot?.token) void federation.fetchRobot(garage, slot?.token); - }, [garage.currentSlot]); - useEffect(() => { setCurrencyCode(currencyDict[fav.currency === 0 ? 1 : fav.currency]); }, [coordinatorUpdatedAt]); diff --git a/frontend/src/components/SettingsForm/index.tsx b/frontend/src/components/SettingsForm/index.tsx index 1624675b..22eaef92 100644 --- a/frontend/src/components/SettingsForm/index.tsx +++ b/frontend/src/components/SettingsForm/index.tsx @@ -1,4 +1,4 @@ -import React, { useContext } from 'react'; +import React, { useContext, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { type UseAppStoreType, AppContext } from '../../contexts/AppContext'; import { @@ -28,17 +28,19 @@ import { QrCode, } from '@mui/icons-material'; import { systemClient } from '../../services/System'; +import { TorIcon } from '../Icons'; import SwapCalls from '@mui/icons-material/SwapCalls'; import { FederationContext, type UseFederationStoreType } from '../../contexts/FederationContext'; +import { GarageContext, UseGarageStoreType } from '../../contexts/GarageContext'; interface SettingsFormProps { dense?: boolean; } const SettingsForm = ({ dense = false }: SettingsFormProps): JSX.Element => { - const { fav, setFav, origin, hostUrl, settings, setSettings } = - useContext(AppContext); + const { fav, setFav, settings, setSettings } = useContext(AppContext); const { federation } = useContext(FederationContext); + const { garage } = useContext(GarageContext); const theme = useTheme(); const { t } = useTranslation(); const fontSizes = [ @@ -237,6 +239,29 @@ const SettingsForm = ({ dense = false }: SettingsFormProps): JSX.Element => { + + {window.NativeRobosats !== undefined && ( + + + + + { + setSettings({ ...settings, useProxy }); + systemClient.setItem('settings_use_proxy', String(useProxy)); + }} + > + + {t('Build-in')} + + + {t('Disabled')} + + + + )} diff --git a/frontend/src/components/TorConnection.tsx b/frontend/src/components/TorConnection.tsx index 006dd1b0..b9d068be 100644 --- a/frontend/src/components/TorConnection.tsx +++ b/frontend/src/components/TorConnection.tsx @@ -55,10 +55,10 @@ const TorIndicator = ({ }; const TorConnectionBadge = (): JSX.Element => { - const { torStatus } = useContext(AppContext); + const { torStatus, settings } = useContext(AppContext); const { t } = useTranslation(); - if (window?.NativeRobosats == null) { + if (window?.NativeRobosats == null || !settings.useProxy) { return <>; } diff --git a/frontend/src/contexts/FederationContext.tsx b/frontend/src/contexts/FederationContext.tsx index dc146e0d..b7998111 100644 --- a/frontend/src/contexts/FederationContext.tsx +++ b/frontend/src/contexts/FederationContext.tsx @@ -111,12 +111,14 @@ export const FederationContextProvider = ({ }, []); useEffect(() => { - // On bitcoin network change we reset book, limits and federation info and fetch everything again - if (window.NativeRobosats === undefined || torStatus === 'ON') { + if (window.NativeRobosats === undefined || torStatus === 'ON' || !settings.useProxy) { void federation.updateUrl(origin, settings, hostUrl); void federation.update(); + + const token = garage.getSlot()?.getRobot()?.token; + if (token) void federation.fetchRobot(garage, token); } - }, [settings.network, torStatus]); + }, [settings.network, settings.useProxy, torStatus]); const onOrderReceived = (order: Order): void => { let newDelay = defaultDelay; @@ -178,15 +180,6 @@ export const FederationContextProvider = ({ if (page === 'offers') void federation.updateBook(); }, [page]); - // use effects to fetchRobots on app start and network change - useEffect(() => { - const slot = garage.getSlot(); - const robot = slot?.getRobot(); - - if (robot && garage.currentSlot && slot?.token && robot.encPrivKey && robot.pubKey) { - void federation.fetchRobot(garage, slot.token); - } - }, [settings.network]); // use effects to fetchRobots on Profile open useEffect(() => { const slot = garage.getSlot(); diff --git a/frontend/src/models/Coordinator.model.ts b/frontend/src/models/Coordinator.model.ts index ef1abb19..c07e771b 100644 --- a/frontend/src/models/Coordinator.model.ts +++ b/frontend/src/models/Coordinator.model.ts @@ -145,7 +145,7 @@ export class Coordinator { public loadingInfo: boolean = false; public limits: LimitList = {}; public loadingLimits: boolean = false; - public loadingRobot: boolean = true; + public loadingRobot: string | null; updateUrl = (origin: Origin, settings: Settings, hostUrl: string): void => { if (settings.selfhostedClient && this.shortAlias !== 'local') { @@ -185,6 +185,7 @@ export class Coordinator { if (this.loadingBook) return; this.loadingBook = true; + this.book = []; apiClient .get(this.url, `${this.basePath}/api/book/`) @@ -297,7 +298,7 @@ export class Coordinator { }; fetchRobot = async (garage: Garage, token: string): Promise => { - if (!this.enabled || !token) return null; + if (!this.enabled || !token || this.loadingRobot === token) return null; const robot = garage?.getSlot(token)?.getRobot() ?? null; const authHeaders = robot?.getAuthHeaders(); @@ -308,6 +309,8 @@ export class Coordinator { if (!hasEnoughEntropy) return null; + this.loadingRobot = token; + garage.updateRobot(token, this.shortAlias, { loading: true }); const newAttributes = await apiClient @@ -330,7 +333,8 @@ export class Coordinator { }) .catch((e) => { console.log(e); - }); + }) + .finally(() => (this.loadingRobot = null)); garage.updateRobot(token, this.shortAlias, { ...newAttributes, diff --git a/frontend/src/models/Federation.model.ts b/frontend/src/models/Federation.model.ts index 7f72531e..2d31e6ce 100644 --- a/frontend/src/models/Federation.model.ts +++ b/frontend/src/models/Federation.model.ts @@ -100,7 +100,7 @@ export class Federation { this.exchange.loadingCoordinators = Object.keys(this.coordinators).length; this.updateEnabledCoordinators(); for (const coor of Object.values(this.coordinators)) { - await coor.update(() => { + coor.update(() => { this.exchange.onlineCoordinators = this.exchange.onlineCoordinators + 1; this.onCoordinatorSaved(); }); @@ -109,10 +109,11 @@ export class Federation { updateBook = async (): Promise => { this.loading = true; + this.book = []; this.triggerHook('onCoordinatorUpdate'); this.exchange.loadingCoordinators = Object.keys(this.coordinators).length; for (const coor of Object.values(this.coordinators)) { - await coor.updateBook(() => { + coor.updateBook(() => { this.onCoordinatorSaved(); }); } diff --git a/frontend/src/models/Settings.model.ts b/frontend/src/models/Settings.model.ts index 203d979f..d837abfc 100644 --- a/frontend/src/models/Settings.model.ts +++ b/frontend/src/models/Settings.model.ts @@ -1,5 +1,6 @@ import i18n from '../i18n/Web'; import { systemClient } from '../services/System'; +import { apiClient } from '../services/api'; import { getHost } from '../utils'; export type Language = @@ -42,8 +43,15 @@ class BaseSettings { : i18n.resolvedLanguage.substring(0, 2); const networkCookie = systemClient.getItem('settings_network'); - this.network = networkCookie !== '' ? networkCookie : 'mainnet'; + + this.network = networkCookie && networkCookie !== '' ? networkCookie : 'mainnet'; this.host = getHost(); + + const useProxy = systemClient.getItem('settings_use_proxy'); + this.useProxy = + useProxy === 'true' || (useProxy !== 'false' && window.NativeRobosats !== undefined); + + apiClient.useProxy = this.useProxy; } public frontend: 'basic' | 'pro' = 'basic'; @@ -56,6 +64,7 @@ class BaseSettings { public host?: string; public unsafeClient: boolean = false; public selfhostedClient: boolean = false; + public useProxy: boolean; } export default BaseSettings; diff --git a/frontend/src/services/api/ApiNativeClient/index.ts b/frontend/src/services/api/ApiNativeClient/index.ts index 6f794eec..93f8ba39 100644 --- a/frontend/src/services/api/ApiNativeClient/index.ts +++ b/frontend/src/services/api/ApiNativeClient/index.ts @@ -1,8 +1,12 @@ import { type ApiClient, type Auth } from '..'; import { systemClient } from '../../System'; +import ApiWebClient from '../ApiWebClient'; class ApiNativeClient implements ApiClient { - private assetsCache: Record = {}; + public useProxy = true; + + private webClient: ApiClient = new ApiWebClient(); + private readonly assetsPromises = new Map>(); private readonly getHeaders: (auth?: Auth) => HeadersInit = (auth) => { @@ -51,6 +55,7 @@ class ApiNativeClient implements ApiClient { public delete: (baseUrl: string, path: string, auth?: Auth) => Promise = async (baseUrl, path, auth) => { + if (!this.proxy) this.webClient.delete(baseUrl, path, auth); return await window.NativeRobosats?.postMessage({ category: 'http', type: 'delete', @@ -66,6 +71,7 @@ class ApiNativeClient implements ApiClient { body: object, auth?: Auth, ) => Promise = async (baseUrl, path, body, auth) => { + if (!this.proxy) this.webClient.post(baseUrl, path, body, auth); return await window.NativeRobosats?.postMessage({ category: 'http', type: 'post', @@ -81,6 +87,7 @@ class ApiNativeClient implements ApiClient { path, auth, ) => { + if (!this.proxy) this.webClient.get(baseUrl, path, auth); return await window.NativeRobosats?.postMessage({ category: 'http', type: 'get', diff --git a/frontend/src/services/api/ApiWebClient/index.ts b/frontend/src/services/api/ApiWebClient/index.ts index 02fe4054..b28edf27 100644 --- a/frontend/src/services/api/ApiWebClient/index.ts +++ b/frontend/src/services/api/ApiWebClient/index.ts @@ -1,6 +1,8 @@ import { type ApiClient, type Auth } from '..'; class ApiWebClient implements ApiClient { + public useProxy = false; + private readonly getHeaders: (auth?: Auth) => HeadersInit = (auth) => { let headers = { 'Content-Type': 'application/json', diff --git a/frontend/src/services/api/index.ts b/frontend/src/services/api/index.ts index d0013324..21b8effd 100644 --- a/frontend/src/services/api/index.ts +++ b/frontend/src/services/api/index.ts @@ -7,6 +7,7 @@ export interface Auth { } export interface ApiClient { + useProxy: boolean; post: (baseUrl: string, path: string, body: object, auth?: Auth) => Promise; put: (baseUrl: string, path: string, body: object, auth?: Auth) => Promise; get: (baseUrl: string, path: string, auth?: Auth) => Promise; diff --git a/frontend/static/locales/ca.json b/frontend/static/locales/ca.json index 321f2a1d..640e4e82 100644 --- a/frontend/static/locales/ca.json +++ b/frontend/static/locales/ca.json @@ -464,8 +464,8 @@ "The order has expired": "L'ordre ha expirat", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Encara no pots prendre cap ordre! Espera {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "Tu reps via Lightning {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "Reps via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "Tu reps via Lightning {{amount}} Sats (Approx)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "La teva última ordre #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Fosc", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Clar", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/cs.json b/frontend/static/locales/cs.json index b9d7daf3..8e12cb8f 100644 --- a/frontend/static/locales/cs.json +++ b/frontend/static/locales/cs.json @@ -464,8 +464,8 @@ "The order has expired": "Nabídka vypršela", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Nabídku nemůžeš zatím příjmout! Počkej {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Tvá poslední nabídka #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/de.json b/frontend/static/locales/de.json index 6dbb989d..81d79fbe 100644 --- a/frontend/static/locales/de.json +++ b/frontend/static/locales/de.json @@ -464,8 +464,8 @@ "The order has expired": "Die Order ist abgelaufen", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Du kannst noch keine Order annehmen! Warte {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Deine letzte Order #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/en.json b/frontend/static/locales/en.json index f12a0e12..a22e5f96 100644 --- a/frontend/static/locales/en.json +++ b/frontend/static/locales/en.json @@ -464,8 +464,8 @@ "The order has expired": "The order has expired", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Your last order #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/es.json b/frontend/static/locales/es.json index 4eb16f37..0faffd60 100644 --- a/frontend/static/locales/es.json +++ b/frontend/static/locales/es.json @@ -464,8 +464,8 @@ "The order has expired": "La orden ha expirado", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "¡No puedes tomar una orden aún! Espera {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Tu última orden #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Oscuro", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Claro", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/eu.json b/frontend/static/locales/eu.json index d81870f0..7f3340a0 100644 --- a/frontend/static/locales/eu.json +++ b/frontend/static/locales/eu.json @@ -464,8 +464,8 @@ "The order has expired": "Eskaera iraungi da", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Oraindik ezin duzu eskaerarik hartu! Itxaron{{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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}}", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Zure azken eskaera #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/fr.json b/frontend/static/locales/fr.json index d85ba7e6..746c8e0b 100644 --- a/frontend/static/locales/fr.json +++ b/frontend/static/locales/fr.json @@ -464,8 +464,8 @@ "The order has expired": "L'ordre a expiré", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Vous ne pouvez pas encore prendre un ordre! Attendez {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "Vous recevez via Lightning {{amount}} Sats (environ)", "You receive via {{method}} {{amount}}": "Vous recevez via {{méthode}} {{montant}}", + "You receive {{amount}} Sats (Approx)": "Vous recevez via Lightning {{amount}} Sats (environ)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Votre dernière commande #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Sombre", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/it.json b/frontend/static/locales/it.json index 280364a4..9ec8bfdb 100644 --- a/frontend/static/locales/it.json +++ b/frontend/static/locales/it.json @@ -464,8 +464,8 @@ "The order has expired": "L'ordine è scaduto", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "La posizione appuntata è approssimativa. La posizione esatta del luogo dell'incontro deve essere indicata nella chat crittografata.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Non puoi ancora accettare un ordine! Aspetta {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "Ricevi {{amount}} Sats via Lightning (approssimativo)", "You receive via {{method}} {{amount}}": "Ricevi {{amount}} via {{method}}", + "You receive {{amount}} Sats (Approx)": "Ricevi {{amount}} Sats via Lightning (approssimativo)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Il tuo ultimo ordine #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Scuro", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Chiaro", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/ja.json b/frontend/static/locales/ja.json index 6adb6186..c2ecdaae 100644 --- a/frontend/static/locales/ja.json +++ b/frontend/static/locales/ja.json @@ -464,8 +464,8 @@ "The order has expired": "注文は期限切れになりました", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "まだ注文を受け取ることはできません!{{timeMin}}分{{timeSec}}秒待ってください", - "You receive {{amount}} Sats (Approx)": "ライトニングで{{amount}} Sats(約)を受け取ります", "You receive via {{method}} {{amount}}": "{{method}}で{{amount}}を受け取ります", + "You receive {{amount}} Sats (Approx)": "ライトニングで{{amount}} Sats(約)を受け取ります", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "前回のオーダー #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "ダーク", + "Disabled": "Disabled", "Fiat": "フィアット", "Light": "ライト", "Mainnet": "メインネット", diff --git a/frontend/static/locales/pl.json b/frontend/static/locales/pl.json index bfa11f3b..1b2c8cea 100644 --- a/frontend/static/locales/pl.json +++ b/frontend/static/locales/pl.json @@ -464,8 +464,8 @@ "The order has expired": "Zamówienie wygasło", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Nie możesz jeszcze przyjąć zamówienia! Czekać {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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 - Premia: {{premium}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Your last order #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/pt.json b/frontend/static/locales/pt.json index ff87325b..8252db48 100644 --- a/frontend/static/locales/pt.json +++ b/frontend/static/locales/pt.json @@ -464,8 +464,8 @@ "The order has expired": "A ordem expirou", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Você ainda não pode fazer um pedido! Espere {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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 - Prêmio: {{premium}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Sua última ordem #{{orderID}}", "finished order": "ordem finalizada", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/ru.json b/frontend/static/locales/ru.json index 148c596b..335d3892 100644 --- a/frontend/static/locales/ru.json +++ b/frontend/static/locales/ru.json @@ -464,8 +464,8 @@ "The order has expired": "Срок действия ордера истёк", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "Закрепленное местоположение является приблизительным. Точное местоположение места встречи необходимо сообщить в зашифрованном чате.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Вы ещё не можете взять ордер! Подождите {{timeMin}}м {{timeSec}}с", - "You receive {{amount}} Sats (Approx)": "Вы получаете через Lightning {{amount}} Сатоши (приблизительно)", "You receive via {{method}} {{amount}}": "Вы получаете через {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "Вы получаете через Lightning {{amount}} Сатоши (приблизительно)", "You send via Lightning {{amount}} Sats (Approx)": "Вы отправляете через Lightning {{amount}} Сатоши (приблизительно)", "You send via {{method}} {{amount}}": "Вы отправляете через {{method}} {{amount}}", "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Наценка: {{premium}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Ваш последний ордер #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Темный", + "Disabled": "Disabled", "Fiat": "Фиат", "Light": "Светлый", "Mainnet": "Основная сеть", diff --git a/frontend/static/locales/sv.json b/frontend/static/locales/sv.json index b270a58a..328576cf 100644 --- a/frontend/static/locales/sv.json +++ b/frontend/static/locales/sv.json @@ -464,8 +464,8 @@ "The order has expired": "Ordern har förfallit", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Du kan inte ta en order ännu! Vänta {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Din senaste order #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/sw.json b/frontend/static/locales/sw.json index 9f79be4b..b07a497c 100644 --- a/frontend/static/locales/sw.json +++ b/frontend/static/locales/sw.json @@ -464,8 +464,8 @@ "The order has expired": "Agizo limekwisha muda", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "Hauwezi kuchukua agizo bado! Subiri {{timeMin}}m {{timeSec}}s", - "You receive {{amount}} Sats (Approx)": "Utapokea kupitia Lightning {{amount}} Sats (Takriban)", "You receive via {{method}} {{amount}}": "Utapokea kupitia {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "Utapokea kupitia Lightning {{amount}} Sats (Takriban)", "You send via Lightning {{amount}} Sats (Approx)": "Utatuma kupitia Lightning {{amount}} Sats (Takriban)", "You send via {{method}} {{amount}}": "Utatuma kupitia {{method}} {{amount}}", "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "Amri yako ya mwisho #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Giza", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Nuru", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/th.json b/frontend/static/locales/th.json index ce5fa699..c96bc579 100644 --- a/frontend/static/locales/th.json +++ b/frontend/static/locales/th.json @@ -464,8 +464,8 @@ "The order has expired": "รายการหมดอายุแล้ว", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "คุณยังไม่สามารถดำเนินรายการได้! รออีก {{timeMin}} นาที {{timeSec}} วินาที", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "You receive via {{method}} {{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "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}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "รายการล่าสุดของคุณ #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "Dark", + "Disabled": "Disabled", "Fiat": "Fiat", "Light": "Light", "Mainnet": "Mainnet", diff --git a/frontend/static/locales/zh-SI.json b/frontend/static/locales/zh-SI.json index d5ccea56..671f4b67 100644 --- a/frontend/static/locales/zh-SI.json +++ b/frontend/static/locales/zh-SI.json @@ -464,8 +464,8 @@ "The order has expired": "订单已到期", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "你暂时还不能吃单!请等{{timeMin}}分 {{timeSec}}秒", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "你通过{{method}}接收{{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You send via Lightning {{amount}} Sats (Approx)": "You send via Lightning {{amount}} Sats (Approx)", "You send via {{method}} {{amount}}": "你通过{{method}}发送{{amount}}", "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - 溢价: {{premium}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "你的上一笔交易 #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "深色", + "Disabled": "Disabled", "Fiat": "法币", "Light": "浅色", "Mainnet": "主网", diff --git a/frontend/static/locales/zh-TR.json b/frontend/static/locales/zh-TR.json index 91507623..8b2c666e 100644 --- a/frontend/static/locales/zh-TR.json +++ b/frontend/static/locales/zh-TR.json @@ -464,8 +464,8 @@ "The order has expired": "訂單已到期", "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.": "The pinned location is approximate. The exact location for the meeting place must be exchanged in the encrypted chat.", "You cannot take an order yet! Wait {{timeMin}}m {{timeSec}}s": "你暫時還不能吃單!請等{{timeMin}}分 {{timeSec}}秒", - "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You receive via {{method}} {{amount}}": "你通過{{method}}接收{{amount}}", + "You receive {{amount}} Sats (Approx)": "You receive {{amount}} Sats (Approx)", "You send via Lightning {{amount}} Sats (Approx)": "You send via Lightning {{amount}} Sats (Approx)", "You send via {{method}} {{amount}}": "你通過{{method}}發送{{amount}}", "{{price}} {{currencyCode}}/BTC - Premium: {{premium}}%": "{{price}} {{currencyCode}}/BTC - 溢價: {{premium}}%", @@ -489,7 +489,9 @@ "Your last order #{{orderID}}": "你的上一筆交易 #{{orderID}}", "finished order": "finished order", "#43": "Phrases in components/SettingsForm/index.tsx", + "Build-in": "Build-in", "Dark": "深色", + "Disabled": "Disabled", "Fiat": "法幣", "Light": "淺色", "Mainnet": "主網",